@piagent/platform 1.25.0 → 1.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -2
- package/README.md +1 -1
- package/README.vi.md +1 -1
- package/docs/command-reference-vietnamese.md +2 -2
- package/docs/company-dev-commands.md +68 -0
- package/docs/distribution-standard.md +6 -6
- package/docs/harness-conformance.md +154 -0
- package/docs/languages.json +2 -2
- package/docs/managed-local-acceptance.md +38 -0
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/publishing-for-teams.md +2 -0
- package/docs/release-install-policy.md +2 -2
- package/docs/team-onboarding.md +2 -2
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +1 -1
- package/docs-site/commands.html +1 -1
- package/docs-site/content/en/index.html +4 -4
- package/docs-site/content/en/whats-new.html +12 -0
- package/docs-site/content/index.html +4 -4
- package/docs-site/content/whats-new.html +12 -0
- package/docs-site/context-engine.html +1 -1
- package/docs-site/ecosystem.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +1 -1
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/ecosystem.html +1 -1
- package/docs-site/en/index.html +5 -5
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +1 -1
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/whats-new.html +13 -1
- package/docs-site/en/windows.html +1 -1
- package/docs-site/en/workflows.html +1 -1
- package/docs-site/index.html +5 -5
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/runtime.html +1 -1
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/whats-new.html +13 -1
- package/docs-site/windows.html +1 -1
- package/docs-site/workflows.html +1 -1
- package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
- package/package.json +1 -1
- package/packages/piagent-core/managed/background-process.mjs +101 -0
- package/packages/piagent-core/managed/checkpoints.mjs +69 -0
- package/packages/piagent-core/managed/command-tools.mjs +5 -2
- package/packages/piagent-core/managed/continuation.mjs +8 -0
- package/packages/piagent-core/managed/doctor.mjs +4 -4
- package/packages/piagent-core/managed/pi-host.mjs +19 -0
- package/packages/piagent-core/managed/sandbox-diagnostic.mjs +4 -2
- package/packages/piagent-core/managed/session.mjs +3 -3
- package/packages/piagent-core/managed/tool-boundary.mjs +45 -18
- package/packages/piagent-core/managed/tool-worker.mjs +3 -1
- package/packages/piagent-core/managed/ts-diagnostics-server.mjs +102 -0
- package/packages/piagent-core/managed/ts-diagnostics.mjs +59 -0
- package/packages/piagent-core/managed/workflow.mjs +9 -1
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-B8CsDh3B.js → MarkdownMessage-BpNzOP6f.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-DWkb1mpZ.js +232 -0
- package/packages/piagent-webui/dist/client/index.html +1 -1
- package/packages/piagent-webui/gateway/managed-gateway.mjs +2 -1
- package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +4 -4
- package/packages/piagent-webui/server/transcript-projection.ts +9 -3
- package/packages/piagent-webui/shared/process-copy.ts +10 -0
- package/schemas/piagent-webui/transcript-v1.schema.json +13 -1
- package/scripts/company-terminal.mjs +12 -0
- package/scripts/piagent-studio.mjs +20 -7
- package/packages/piagent-webui/dist/client/assets/index-CiLLJu4R.js +0 -231
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
This file records release-facing changes for Pi Agent Platform. Copy the relevant version block into GitHub Releases when publishing a tag.
|
|
4
4
|
|
|
5
|
+
## v1.26.1 - 2026-10-16
|
|
6
|
+
|
|
7
|
+
A conversation is renamed while its turn runs.
|
|
8
|
+
|
|
9
|
+
### Fixes
|
|
10
|
+
|
|
11
|
+
- Renaming a conversation from its menu while a turn ran (a company conversation in particular) showed `session-revision-stale` and kept the old name: the turn changes the conversation after every step, and the Gateway refused a rename while busy. The rename now lands mid-turn, the dashboard sends it again against the conversation as it is now, and a rename, fork or archive that still fails says why in words, with the code at the end.
|
|
12
|
+
|
|
13
|
+
### Tests
|
|
14
|
+
|
|
15
|
+
- `tests/managed-rename-web.test.mjs`: a company conversation is renamed from its menu while idle and while its turn runs, then with `/name`, and the name survives a reload.
|
|
16
|
+
|
|
17
|
+
## v1.26.0 - 2026-10-15
|
|
18
|
+
|
|
19
|
+
Company conversations work the way a developer works in an editor: the Terminal's `/` commands and shortcuts in the dashboard, `/undo` for the agent's last turn, dev servers that stay up across turns, type errors right after an edit. The Harness is now tested where it runs.
|
|
20
|
+
|
|
21
|
+
### Changes
|
|
22
|
+
|
|
23
|
+
- Dashboard `/` commands, run in the dashboard and never sent to the model: `/new`, `/fork`, `/name`, `/pin`, `/archive`, `/stop`, `/thinking`, `/model` and `/permission` (personal), `/undo`, `/fast` and `/bypass` (company), `/changes`, `/settings`, `/help`. Full access and Bypass still ask for confirmation. Shortcuts: ⌘⇧O new chat, ⌘/ the `/` commands, Esc stops the running turn.
|
|
24
|
+
- `/undo` (company Terminal and dashboard): the files the agent's last turn changed go back, one turn at a time; it refuses while a turn runs and when a file was changed again since, and never touches the member's index, HEAD or commits. Git repositories only.
|
|
25
|
+
- `start_process`, `process_output`, `stop_process` (macOS): a dev server, watcher or local service runs across turns in the plain sandbox, without network, until stopped, the conversation closes or 4 hours pass.
|
|
26
|
+
- After a write or edit of a TypeScript or JavaScript file the agent gets that file's errors from the project's own TypeScript (5 and 6 through a language service, 7 through its native `tsc`); a syntax error elsewhere that stops `tsc` is named instead of reported as clean.
|
|
27
|
+
- `piagent studio --prompt <text> --json` writes the event stream of `pi --mode json`.
|
|
28
|
+
- A message sent from another tab while a turn runs waits for that turn instead of being refused.
|
|
29
|
+
- The prompt and `run_with_network` no longer send end-to-end tests to approval on macOS: Playwright's Chromium runs in the plain sandbox against a server on the Mac.
|
|
30
|
+
- Ready for Pi 1.2.0 (the pin stays 0.87.1): `@earendil-works/pi-ai` is found where Pi 1.x hoists it, the sandbox reads it there, and Pi 1.x's error results read as the failures they are.
|
|
31
|
+
|
|
32
|
+
### Fixes
|
|
33
|
+
|
|
34
|
+
- A test's own localhost server blocked while a local proxy listens printed only `fetch failed`; the agent is now told to use `run_with_network`.
|
|
35
|
+
- `gh` and SSH without a sign-in in the sandbox no longer point the agent at `gh auth login`; they name `run_on_host`.
|
|
36
|
+
- `fetch_origin` stopped a repository with many branches after 60 seconds (a team repository of 92 branches takes about two minutes) and failed with `managed-repository-fetch-failed`; the download now has ten minutes.
|
|
37
|
+
- A turn cut off after a check had passed (the next model request interrupted) reported "no check passed on the final code"; the passed check now counts. A failed `fetch_origin` names `run_on_host` as the way on. `E401` and `ENEEDAUTH` are matched as whole words.
|
|
38
|
+
|
|
39
|
+
### Tests and documentation
|
|
40
|
+
|
|
41
|
+
- The end-to-end Harness tests skipped wherever the Pi host was not under `~/.pi/npm-global`, CI included; they now find it in the npm global root. `docs/harness-conformance.md` maps every Harness setting to who enforces it and the tests that prove it, and a test keeps that page true.
|
|
42
|
+
- `docs/company-dev-commands.md`: what runs in a company session without asking, what names its approval, the dashboard commands and the headless mode.
|
|
43
|
+
|
|
5
44
|
## v1.25.0 - 2026-10-13
|
|
6
45
|
|
|
7
46
|
A company conversation no longer gives up when the machine lacks something: the agent asks for the approval that makes the command run, and once the member approves it runs, outside the sandbox when it has to.
|
|
@@ -17,8 +56,6 @@ A company conversation no longer gives up when the machine lacks something: the
|
|
|
17
56
|
### Fixes
|
|
18
57
|
|
|
19
58
|
- A turn that only read repositories through `git -C <folder> …` (status, log, reflog, `remote -v`, rev-list…) in a folder that is not itself a repository was counted as a code change, so the Harness asked for checks three times on a turn that changed nothing. Git's options before the command are read now, and `./mvnw … compile`/`package` and `./gradlew build` count as checks.
|
|
20
|
-
- `fetch_origin` stopped a repository with many branches after 60 seconds (a team repository of 92 branches takes about two minutes) and failed with `managed-repository-fetch-failed`; the download now has ten minutes.
|
|
21
|
-
- A turn cut off after a check had passed (the next model request interrupted) reported "no check passed on the final code"; the passed check now counts. A failed `fetch_origin` names `run_on_host` as the way on. `E401` and `ENEEDAUTH` are matched as whole words.
|
|
22
59
|
- `wget: Failed to fetch` (how `./mvnw` downloads its Maven) is read as a blocked download and points to `run_with_network`, instead of a bare exit code.
|
|
23
60
|
|
|
24
61
|
## v1.24.0 - 2026-10-13
|
package/README.md
CHANGED
|
@@ -346,7 +346,7 @@ This repository intentionally excludes:
|
|
|
346
346
|
|
|
347
347
|
## Maturity
|
|
348
348
|
|
|
349
|
-
The current package version is read from package metadata and release tags. Personal machines may follow the unpinned package source when accepting ongoing updates; production/team quickstarts and committed project settings should pin an explicit tag such as `v1.
|
|
349
|
+
The current package version is read from package metadata and release tags. Personal machines may follow the unpinned package source when accepting ongoing updates; production/team quickstarts and committed project settings should pin an explicit tag such as `v1.26.1` or a reviewed commit.
|
|
350
350
|
|
|
351
351
|
Ready for:
|
|
352
352
|
|
package/README.vi.md
CHANGED
|
@@ -179,7 +179,7 @@ Xem [bằng chứng benchmark](https://piagent.io.vn/benchmark) và
|
|
|
179
179
|
|
|
180
180
|
Gate này chạy architecture check, test, typecheck, capability validation, runtime smoke và docs consistency trước khi release.
|
|
181
181
|
|
|
182
|
-
Bản phát hành hiện tại là `v1.
|
|
182
|
+
Bản phát hành hiện tại là `v1.26.1`. Với team hoặc production, hãy pin tag này
|
|
183
183
|
hoặc một commit đã review thay vì dựa vào nguồn package không cố định.
|
|
184
184
|
|
|
185
185
|
## Security
|
|
@@ -475,8 +475,8 @@ Các lệnh này chạy ngoài Pi.
|
|
|
475
475
|
| Command | Dùng khi nào |
|
|
476
476
|
|---|---|
|
|
477
477
|
| `npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1` | Cài Pi CLI tương thích với release hiện tại. |
|
|
478
|
-
| `npm install -g --ignore-scripts @piagent/platform@1.
|
|
479
|
-
| `pi install git:github.com/Vt-mmm/piagent@v1.
|
|
478
|
+
| `npm install -g --ignore-scripts @piagent/platform@1.26.1` | Cài terminal helper `piagent-*` từ release tag hiện tại. |
|
|
479
|
+
| `pi install git:github.com/Vt-mmm/piagent@v1.26.1` | Cài pinned release khi cần reproducible team setup. |
|
|
480
480
|
| `pi install git:github.com/Vt-mmm/piagent` | Cài latest package platform cho máy cá nhân/sandbox. |
|
|
481
481
|
| `piagent-update --check` | Báo version hiện tại vs version sẽ lên cho cả ba thành phần; không cài gì. |
|
|
482
482
|
| `piagent-update` | Full update global một lệnh cho cả máy: Pi host → npm-global helper → Pi package, đúng thứ tự release yêu cầu. |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Developer commands in a company session
|
|
2
|
+
<!-- language: en -->
|
|
3
|
+
|
|
4
|
+
What runs when the agent in a company session (`piagent studio`) does everyday development work, and what needs the member's approval. Commands run in the company sandbox: the project is writable, the member's toolchains and package caches are readable, credentials are closed and the internet is reached only through the package proxy or an approval.
|
|
5
|
+
|
|
6
|
+
Measured on macOS with Piagent 1.25.0 and Pi 0.87.1 (2026-10-15). `tests/managed-dev-loop.test.mjs` replays the loop offline on every run.
|
|
7
|
+
|
|
8
|
+
## Runs without asking
|
|
9
|
+
|
|
10
|
+
| Work | Commands seen working |
|
|
11
|
+
|---|---|
|
|
12
|
+
| Branches and history | `git switch -c`, `add`, `commit`, `log`, `diff`, `stash` (identity from the project's git config) |
|
|
13
|
+
| Tests, type checks, builds | `npm test`, `npm run build`, `node --test`, `make check`, `swift build` |
|
|
14
|
+
| Packages from public registries | `npm install`, `npx`, `pip install` in a venv, `uv pip install` (npm, PyPI, Go, crates.io, Maven, Gradle, NuGet, RubyGems, Packagist, pub.dev through the package proxy) |
|
|
15
|
+
| The app's own servers | a test that starts a server on 127.0.0.1 and calls it; a dev server in the background within one command |
|
|
16
|
+
| UI and end-to-end checks | the project's Playwright (`@playwright/test`) driving the Chromium installed on this Mac against a server the test or `start_process` starts |
|
|
17
|
+
| Local data | `sqlite3` migrations and queries inside the project |
|
|
18
|
+
| Toolchains on the Mac | `java` (Homebrew JDK), `python3 -m venv`, `swift`, read-only |
|
|
19
|
+
|
|
20
|
+
After the agent writes or edits a TypeScript or JavaScript file, the project's own TypeScript reports that file's errors with the result (macOS; a project with `typescript` and a tsconfig/jsconfig). TypeScript 5 and 6 answer from a language service, TypeScript 7 from its native `tsc` (about 0.3 s for 740 files here); when a syntax error elsewhere stops `tsc`, the note says the file was not type-checked. Other languages are checked by the Harness's verify step.
|
|
21
|
+
|
|
22
|
+
A command stops after 10 minutes, and what it leaves running stops when the turn ends. A dev server, watcher or local service the agent needs across turns runs with `start_process` (macOS): same sandbox, no network, until `stop_process`, the end of the conversation or 4 hours; at most 4 at once; `process_output` reads what it printed and can wait for a ready line.
|
|
23
|
+
|
|
24
|
+
## Undo a turn
|
|
25
|
+
|
|
26
|
+
In a git repository, `/undo` in the company Terminal puts back the files the agent's last turn changed (edited, deleted or created), and `/undo` again goes one turn further back. It refuses while a turn runs, and when a file the turn changed was changed again since, so the member's own edit is never overwritten. The member's index (staged changes), HEAD and commits are not touched; a commit made in the turn stays. Files `.gitignore` excludes are not part of the checkpoint, and checkpoints last as long as the conversation is open.
|
|
27
|
+
|
|
28
|
+
## Commands in the dashboard
|
|
29
|
+
|
|
30
|
+
The dashboard composer takes the Terminal's `/` commands. Typing `/` lists them with the project's commands and skills; a command runs in the dashboard through the same session commands as the buttons and is never sent to the model (`/undo` excepted: the company runtime answers it). `/help` lists them all.
|
|
31
|
+
|
|
32
|
+
| Command | Does |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `/new`, `/fork`, `/name <name>`, `/pin`, `/archive` | New chat, fork, rename, pin or unpin, archive |
|
|
35
|
+
| `/stop` | Stops the running turn (Esc does too) |
|
|
36
|
+
| `/thinking <level>` | Thinking level, from the levels this conversation offers |
|
|
37
|
+
| `/model <name>` | Model, by name or ref (personal conversations) |
|
|
38
|
+
| `/permission read-only\|ask\|full` | Access (personal; `full` asks for confirmation) |
|
|
39
|
+
| `/bypass on\|off`, `/fast [on\|off]`, `/undo` | Company conversations: Bypass (`on` asks for confirmation), Fast where the Harness allows it, undo the last turn |
|
|
40
|
+
| `/changes`, `/settings`, `/help` | Source Changes, Settings, this list |
|
|
41
|
+
|
|
42
|
+
Shortcuts: ⌘K command palette, ⌘⇧O new chat, ⌘, Settings, ⌘/ opens the `/` commands in the composer, Esc stops the running turn.
|
|
43
|
+
|
|
44
|
+
## Headless runs
|
|
45
|
+
|
|
46
|
+
`piagent studio --prompt "<request>"` runs one company request and prints the answer. With `--json` it writes the event stream of `pi --mode json` instead (Pi's own serializer: the session header, then one JSON object per line on stdout; company events such as `managed_helpers` and the Harness's `agent-watch-process` notes come in the same stream). A failed request is described on stderr and exits 1.
|
|
47
|
+
|
|
48
|
+
## Needs the member's approval
|
|
49
|
+
|
|
50
|
+
Each refusal names the tool that asks; nothing below runs silently.
|
|
51
|
+
|
|
52
|
+
| Work | What the agent is told | Tool |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| Any other internet host (`curl https://…`, a vendor API) | `managed-domain-blocked`, with the host | `run_with_network` |
|
|
55
|
+
| Tests against a localhost server while a local proxy (VPN, corporate proxy) listens | `managed-loopback-blocked` | `run_with_network` |
|
|
56
|
+
| Docker, `docker compose`, Testcontainers | `managed-docker-blocked` / `managed-docker-unavailable` | `run_with_docker`, `start_docker` |
|
|
57
|
+
| `git fetch` from GitHub | — | `fetch_origin` |
|
|
58
|
+
| `git push`, `git pull`, `gh`, private registries, SSH | `managed-credentials-unavailable` | `run_on_host` (asks every time, Bypass included) |
|
|
59
|
+
| Installing a missing runtime (`brew install openjdk@21`) or Playwright's browsers (`npx playwright install chromium`) | `managed-toolchain-missing` | `run_on_host` |
|
|
60
|
+
|
|
61
|
+
## Not covered yet
|
|
62
|
+
|
|
63
|
+
- GitHub work beyond `fetch_origin` (pull requests, CI status, review comments) goes through `run_on_host` one command at a time; there is no scoped GitHub tool.
|
|
64
|
+
- Private npm registries, `gh` and SSH-agent operations have no sandboxed path.
|
|
65
|
+
- There is no browser tool of Piagent's own: UI checks use the project's Playwright (owner, 2026-10-15).
|
|
66
|
+
- MCP servers do not run in company sessions (owner, 2026-10-15: later, after a Studio allowlist is designed).
|
|
67
|
+
- `start_process` is not offered on Linux and WSL yet.
|
|
68
|
+
- At the end of a turn, a process a bash command left running is found by the marker in its environment; `ps` cannot read that for Apple's own binaries (`/bin/sleep`), so such a process is not stopped until it ends. Processes started with `start_process` are stopped by process group and parent as well.
|
|
@@ -15,9 +15,9 @@ Repo này phải chạy được cho nhiều project/domain khác nhau. Vì vậ
|
|
|
15
15
|
|
|
16
16
|
| Use case | Package source |
|
|
17
17
|
|---|---|
|
|
18
|
-
| Team pinned release | `git:github.com/Vt-mmm/piagent@v1.
|
|
18
|
+
| Team pinned release | `git:github.com/Vt-mmm/piagent@v1.26.1` |
|
|
19
19
|
| Personal/sandbox dev | `git:github.com/Vt-mmm/piagent` |
|
|
20
|
-
| Registry distribution | `npm:@piagent/platform@1.
|
|
20
|
+
| Registry distribution | `npm:@piagent/platform@1.26.1` |
|
|
21
21
|
| Enterprise npm (fork under another scope) | `npm:@your-scope/platform@x.y.z` |
|
|
22
22
|
| Local platform dev | `/path/to/piagent` |
|
|
23
23
|
|
|
@@ -54,7 +54,7 @@ Root `package.json` có `pi` manifest trỏ tới:
|
|
|
54
54
|
Do đó team có thể:
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
pi install git:github.com/Vt-mmm/piagent@v1.
|
|
57
|
+
pi install git:github.com/Vt-mmm/piagent@v1.26.1
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Không cần biết internal folder `packages/piagent-core`. Source không pin chỉ dành cho personal/sandbox như bảng channel ở trên.
|
|
@@ -66,12 +66,12 @@ Team nên install global package một lần:
|
|
|
66
66
|
```bash
|
|
67
67
|
node --version # >= 22.19.0
|
|
68
68
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
69
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
69
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
70
70
|
piagent-install --stable --dry-run
|
|
71
71
|
piagent-install --stable
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
`pi install git:github.com/Vt-mmm/piagent@v1.
|
|
74
|
+
`pi install git:github.com/Vt-mmm/piagent@v1.26.1` vẫn hợp lệ nếu chỉ cần cài Pi package. Lệnh đó không tự tạo các binary terminal `piagent-*`; muốn có helper global thì dùng `npm install -g --ignore-scripts @piagent/platform@1.26.1`.
|
|
75
75
|
|
|
76
76
|
Support matrix hiện tại: macOS Apple Silicon + Bash và Linux x64 + Bash đã được verify; macOS Intel + Bash và Linux ARM64 + Bash là supported target cần chạy smoke trước rollout; native Windows chưa phải target rollout team; WSL2 experimental. Chi tiết và version runtime nằm trong [release/install policy](release-install-policy.md).
|
|
77
77
|
|
|
@@ -118,7 +118,7 @@ Nếu muốn commit sẵn `.pi/piagent-profile.json` vào repo hoặc bootstrap
|
|
|
118
118
|
```bash
|
|
119
119
|
bash scripts/setup.sh /path/to/project \
|
|
120
120
|
--profile be-readonly-fe \
|
|
121
|
-
--package-source git:github.com/Vt-mmm/piagent@v1.
|
|
121
|
+
--package-source git:github.com/Vt-mmm/piagent@v1.26.1 \
|
|
122
122
|
--mcp-preset core \
|
|
123
123
|
--subagents-preset safe
|
|
124
124
|
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Company Harness conformance
|
|
2
|
+
<!-- language: en -->
|
|
3
|
+
|
|
4
|
+
What "Piagent runs the company Harness" means, setting by setting. For each setting of a team's Harness in Agent Studio (`agent-studio/internal/runs/profile.go`, `Configuration`), this page names who enforces it, what a company session does, and the tests that prove it.
|
|
5
|
+
|
|
6
|
+
`tests/managed-harness-conformance.test.mjs` reads this page. It fails when a setting below has no section, when a section names a Piagent test that does not exist, or when the pinned Pi host is missing where it must be present (macOS in CI, or `PIAGENT_REQUIRE_PI_SDK=1`). Most tests listed here drive a real Pi SDK session against a scripted local Studio. Without the host they skip, and a green suite then proves nothing about the Harness. `tests/helpers/pi-sdk.mjs` finds the host through `PI_MANAGED_TEST_SDK`, the installer's prefix or the npm global root.
|
|
7
|
+
|
|
8
|
+
Studio tests are named for traceability only; run them in `agent-studio` with `go test ./internal/...`.
|
|
9
|
+
|
|
10
|
+
## Who enforces what
|
|
11
|
+
|
|
12
|
+
- **Studio** owns authority. It chooses each role's model, fixes the effort a role runs at, counts helper calls and active helpers, admits fast mode and records the process report.
|
|
13
|
+
- **Piagent** owns the session. It runs the model and effort its grant names, offers only the helpers the Harness enables, gives helpers read-only tools, and enforces the workflow before a code-changing turn ends.
|
|
14
|
+
|
|
15
|
+
A section's settings are named as in the Harness JSON.
|
|
16
|
+
|
|
17
|
+
## Settings
|
|
18
|
+
|
|
19
|
+
### `main.mode`
|
|
20
|
+
|
|
21
|
+
`fixed` names one model; `auto` is an ordered failover list. Studio picks the first model that serves now when the run starts; Piagent installs the model the grant names and refuses a grant for another role or model.
|
|
22
|
+
|
|
23
|
+
- Studio: `TestPickRouteOrderQuotaAndFallback`
|
|
24
|
+
- Piagent: `managed-session` › isolated SDK session sends native Claude/Codex streams with role tokens and native context
|
|
25
|
+
- Piagent: `managed-failures` › a harness changed to a model the conversation did not know: it enrolls again and runs on it
|
|
26
|
+
|
|
27
|
+
### `main.model_ids`
|
|
28
|
+
|
|
29
|
+
Only models the Harness lists, and only those every connector can run without its own fallback, are offered.
|
|
30
|
+
|
|
31
|
+
- Studio: `TestHarnessSelectionLeavesOutModelsNoHarnessCanRun`
|
|
32
|
+
- Studio: `TestHarnessEligibilityOfTheCurrentCatalog`
|
|
33
|
+
- Piagent: `managed-failures` › Studio's reason for a refused run or subagent reaches the member, not just "configuration changed"
|
|
34
|
+
|
|
35
|
+
### `main.effort`
|
|
36
|
+
|
|
37
|
+
Unset follows the member's thinking level; a value fixes it (`off` turns thinking off). The member's level is what the run asks for; the level Studio grants is what the request carries.
|
|
38
|
+
|
|
39
|
+
- Studio: `TestManagedNativeEffortHistory`
|
|
40
|
+
- Piagent: `managed-failures` › each role runs at the level Studio grants it, whatever the member picked
|
|
41
|
+
|
|
42
|
+
### `scout`, `research`, `verify`, `review`
|
|
43
|
+
|
|
44
|
+
A helper exists only when the Harness enables its role. The prompt and the `delegate` tool describe only enabled helpers. Helpers read the project and cannot change files or delegate. In one conversation one helper of each role runs at a time, and each role runs at most 8 times per member message (Studio's `MaxHelperCalls`). Studio also bounds a member's active helpers across conversations (`MaxActiveHelpers`, 24).
|
|
45
|
+
|
|
46
|
+
- Studio: `TestScoutAndVerifyRunAsHelpers`
|
|
47
|
+
- Studio: `TestManagedHelpersAggregateAcrossDevicesAndRoots`
|
|
48
|
+
- Studio: `TestHelperRoleRunsAgainWithinItsRun`
|
|
49
|
+
- Piagent: `managed-failures` › a subagent that fails tells the main agent why
|
|
50
|
+
- Piagent: `managed-harness-conformance` › a helper role already running in the conversation is not started twice
|
|
51
|
+
- Piagent: `managed-helper-roles` › the helpers offered are the ones the Harness enables, in Harness order
|
|
52
|
+
- Piagent: `managed-helper-roles` › the prompt and the delegate tool describe only enabled helpers; research takes the web, and code reading too without a scout
|
|
53
|
+
- Piagent: `managed-helper-roles` › a scout or verify failure names its role, and a helper the Harness lacks is a tool failure
|
|
54
|
+
- Piagent: `managed-helpers` › scout and verify helpers run with their own tools and only when the Harness enables them
|
|
55
|
+
- Piagent: `managed-failures` › a helper the harness adds while the member works is offered in the same conversation
|
|
56
|
+
|
|
57
|
+
### `helper.mode`
|
|
58
|
+
|
|
59
|
+
`auto` helpers start on the model that serves now and move to the next model once for a failure another model may not have.
|
|
60
|
+
|
|
61
|
+
- Studio: `TestHelperStartsOnTheModelThatServesNow`
|
|
62
|
+
- Piagent: `managed-helper-switch` › a helper refused for its account's usage starts once more on the next model
|
|
63
|
+
- Piagent: `managed-helper-switch` › a helper starts again once, and only for a failure another model may not have
|
|
64
|
+
- Piagent: `managed-helper-switch` › a helper waiting on a resting account moves to the next model
|
|
65
|
+
- Piagent: `managed-helper-switch` › a helper whose account went away starts once more on the next model
|
|
66
|
+
|
|
67
|
+
### `helper.effort`
|
|
68
|
+
|
|
69
|
+
Unset runs a helper at its main agent's level; a value fixes it.
|
|
70
|
+
|
|
71
|
+
- Piagent: `managed-failures` › each role runs at the level Studio grants it, whatever the member picked
|
|
72
|
+
|
|
73
|
+
### `workflow`
|
|
74
|
+
|
|
75
|
+
Absent: every step `suggest`, `max_fix_loops` 2. An unknown step value is read as `suggest`. `review` is `off` whatever the policy says when the Harness has no review helper.
|
|
76
|
+
|
|
77
|
+
- Studio: `TestHarnessWorkflowPolicyAndProcessReport`
|
|
78
|
+
- Piagent: `managed-workflow` › policy, checks and review findings are read conservatively
|
|
79
|
+
|
|
80
|
+
### `workflow.plan`
|
|
81
|
+
|
|
82
|
+
`suggest` asks for a checklist on multi-step work. `require` refuses edits of a complex task until a plan exists (shell edits included), lets edits through after three refused answers and reports `plan_skipped`, and sends a checklist left open on as new runs while they make progress.
|
|
83
|
+
|
|
84
|
+
- Piagent: `managed-workflow` › a complex task plans before its first edit; a checklist left open goes on as a new run until it is done
|
|
85
|
+
- Piagent: `managed-workflow` › a model that never plans is refused for three answers, then its edit goes through and the turn says so
|
|
86
|
+
- Piagent: `managed-workflow` › a shell command that edits files before the required plan is caught; later calls wait for the plan; the turn reports it
|
|
87
|
+
- Piagent: `managed-workflow` › outside git, a turn that changed code under a required plan it never wrote still reports it
|
|
88
|
+
- Piagent: `managed-workflow` › edits sent with an invented plan tool are all refused; a plan sent as a JSON string is read; v2 reports count unknown tools
|
|
89
|
+
- Piagent: `managed-continuation` › a checklist left open is sent on while rounds make progress
|
|
90
|
+
- Piagent: `managed-continuation` › Stop, a failure, no checklist, a plan that is only suggested, and the round limit
|
|
91
|
+
- Piagent: `managed-continuation` › steps left for later end the turn as done as asked, with the count left
|
|
92
|
+
|
|
93
|
+
### `workflow.verify`
|
|
94
|
+
|
|
95
|
+
`suggest` names the repository's checks (AGENTS.md `## Checks`, else what its manifests imply) and never adds a turn. `require` sends a code-changing turn back until a check passes on the final code, at most `max_fix_loops` times, and sends a claim the verify helper marked failed back once before the member decides.
|
|
96
|
+
|
|
97
|
+
- Piagent: `managed-workflow` › required checks and review: the harness sends the agent back until the final patch is checked and clean
|
|
98
|
+
- Piagent: `managed-workflow` › suggested steps never add a turn; a required check that never passes ends the turn as unverified
|
|
99
|
+
- Piagent: `managed-workflow` › a check that fails with an error result is counted as failed, not as passed
|
|
100
|
+
- Piagent: `managed-workflow` › a check that passed before the turn was cut off is still reported as passed
|
|
101
|
+
- Piagent: `managed-objections` › under a required verify a failed claim goes back to the agent, is checked again with its answer, and a lasting failure goes to the member
|
|
102
|
+
- Piagent: `managed-objections` › under a suggested verify a failed claim stays the agent's to weigh: no extra turn
|
|
103
|
+
|
|
104
|
+
### `workflow.review`
|
|
105
|
+
|
|
106
|
+
`suggest` asks the agent to have the review helper read its patch. `require` makes the harness review the final patch itself, send blocking findings back, have the reviewer judge an answer given instead of a fix, and hand a lasting disagreement to the member.
|
|
107
|
+
|
|
108
|
+
- Piagent: `managed-workflow` › required checks and review: the harness sends the agent back until the final patch is checked and clean
|
|
109
|
+
- Piagent: `managed-workflow` › a change the agent commits during the turn is still checked and reviewed
|
|
110
|
+
- Piagent: `managed-workflow` › a patch above the shell output limit is still reviewed; a review that cannot run says why
|
|
111
|
+
- Piagent: `managed-workflow` › the harness reviews a patch larger than one reviewer reads in parts
|
|
112
|
+
- Piagent: `managed-objections` › an answer instead of a fix goes back to the reviewer, who withdraws the finding or keeps it for the member
|
|
113
|
+
- Piagent: `managed-objections` › after a fix the reviewer also reads the answer the agent gave with it
|
|
114
|
+
|
|
115
|
+
### `workflow.max_fix_loops`
|
|
116
|
+
|
|
117
|
+
0 to 3; anything else is read as 2. With 0 nobody is sent back, but a required review still runs once.
|
|
118
|
+
|
|
119
|
+
- Piagent: `managed-workflow` › suggested steps never add a turn; a required check that never passes ends the turn as unverified
|
|
120
|
+
- Piagent: `managed-harness-conformance` › max_fix_loops is read within 0 to 3 and falls back to 2
|
|
121
|
+
|
|
122
|
+
### `fast_mode`
|
|
123
|
+
|
|
124
|
+
Off unless the Harness allows it. Only the main agent's calls on a model that serves the priority tier ask for it; a refusal puts the conversation back to standard speed.
|
|
125
|
+
|
|
126
|
+
- Studio: `TestFastModeNeedsTheHarnessAndIsChargedAtItsWeight`
|
|
127
|
+
- Piagent: `managed-fast-mode` › fast mode exists only where the Harness allows it, and starts off
|
|
128
|
+
- Piagent: `managed-fast-mode` › only the main agent's call on a model that serves fast mode asks for the priority tier
|
|
129
|
+
- Piagent: `managed-fast-mode` › a refused fast request puts the conversation back to standard speed
|
|
130
|
+
|
|
131
|
+
## Behaviour the Harness implies
|
|
132
|
+
|
|
133
|
+
### `objections`
|
|
134
|
+
|
|
135
|
+
A helper may object to its brief with evidence; it never decides. The main agent answers; the same objection a second time goes to the member.
|
|
136
|
+
|
|
137
|
+
- Piagent: `managed-objections` › a corrected brief answers the objection without another turn
|
|
138
|
+
- Piagent: `managed-objections` › an objection the agent never answers with a new brief is answered to the member once; the helper read the member request
|
|
139
|
+
- Piagent: `managed-objections` › a second objection from the same helper stops the exchange: the member decides and the helper is refused until then
|
|
140
|
+
|
|
141
|
+
### `process_report`
|
|
142
|
+
|
|
143
|
+
Every run closes with its process report, in the version the broker negotiates (v1 to v3). A broker without reports, or a Studio that refuses one, still closes the run.
|
|
144
|
+
|
|
145
|
+
- Studio: `TestHarnessWorkflowPolicyAndProcessReport`
|
|
146
|
+
- Piagent: `managed-workflow` › a broker without process reports, or a Studio that refuses one, still closes the run
|
|
147
|
+
- Piagent: `managed-objections` › a helper that objected twice is refused until the member answers; reports keep older versions unchanged
|
|
148
|
+
|
|
149
|
+
### `interrupted_turn`
|
|
150
|
+
|
|
151
|
+
A change made by a turn that stopped before its process ran is settled by the next turn.
|
|
152
|
+
|
|
153
|
+
- Piagent: `managed-workflow` › a change of a turn that stopped before its process ran is settled by the next one ("continue")
|
|
154
|
+
- Piagent: `managed-workflow` › stopping while a helper runs ends the turn as stopped, not as a failed request
|
package/docs/languages.json
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"en": "README.md",
|
|
22
22
|
"vi": "README.vi.md",
|
|
23
23
|
"consistentAt": {
|
|
24
|
-
"en": "
|
|
25
|
-
"vi": "
|
|
24
|
+
"en": "8e7bb9cd9f2baa5d4a35384ccc6bcb3bccbd9d94",
|
|
25
|
+
"vi": "508ee42a76029e1375ba2a4364003a335aba18d9"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
{
|
|
@@ -3,6 +3,44 @@
|
|
|
3
3
|
|
|
4
4
|
This is the local implementation under test, not a published release. Studio owns team/key/model authority and usage; Watch imports the connection and brokers credentials; Piagent executes the selected main/research/review harness. Personal OAuth stays in a separate runtime.
|
|
5
5
|
|
|
6
|
+
## 2026-10-15 — full suite on 1.25.0: green; the task-contract code that remains
|
|
7
|
+
|
|
8
|
+
Superseded figures: the 2026-10-01 entries below (235 failures, "69 documents still teach `/workflow`") describe the tree before the 1.9.0 retirement was finished.
|
|
9
|
+
|
|
10
|
+
- **Full suite at 29ce65a (1.25.0):** `npm test` ran 6,336 tests: 5,901 pass, 0 fail, 435 skipped; `npm run typecheck` is clean. The skipped tests are integration tests of the task-contract acceptance executor; they need `PIAGENT_CONTRACT_EXECUTOR_IMAGE_ID`, a Docker socket or a pinned local worker, and none is configured here.
|
|
11
|
+
- **Docs:** pages that still name `/workflow` or `/task` say they were retired in 1.9.0, or are design records carrying the "before 1.9.0" note.
|
|
12
|
+
- **Remaining task-contract code (deferred by the owner):**
|
|
13
|
+
- 21 runtime modules are reachable from no entrypoint (Pi extensions, `piagent-cli.mjs`, the WebUI client and server, the managed session). Examples: `runtime/registration/task-start-*.ts`, `workflow-commands.ts`, `task-completion-tools.ts`, `runtime/verification/{completion-preparation,composite-*,exact-verifier-reuse,independent-acceptance-runtime,runtime-contract-runner}.ts`, `runtime/recovery/{semantic-repair-*,independent-verification-recovery,acceptance-recovery-guidance}.ts`. They are still imported by 21 test files, most of which also test live modules.
|
|
14
|
+
- `task-state`, `task-lifecycle` and `acceptance-*` are still imported by `piagent-guard.ts`. No current path creates a task, so they only read task records written before 1.9.0.
|
|
15
|
+
- `runtime/inspection/task-*.ts` are live: the WebUI server loads them with `import(\`${CORE_ROOT}/…\`)` to show older task history.
|
|
16
|
+
- Removing this code is a separate refactor, done one layer at a time with a full-suite run after each layer.
|
|
17
|
+
- **The Harness tests were not running.** 33 test files looked for the Pi host only under `~/.pi/npm-global` unless `PI_MANAGED_TEST_SDK` was set. That covered every end-to-end Harness test (workflow, helpers, objections, effort, fast mode). This machine and CI install the pinned host into the npm global root, so those tests skipped there and the green suite above proved nothing about the Harness. `tests/helpers/pi-sdk.mjs` now looks in `PI_MANAGED_TEST_SDK`, then the installer's prefix, then the npm global root when it holds the pinned version.
|
|
18
|
+
- With the host found, 13 more tests failed. 12 were this machine: Playwright's Chromium was not installed (CI installs it).
|
|
19
|
+
- The 13th was a product defect. While a local proxy listens, a test that starts its own localhost server is blocked (by design), but `node --test` printed only `fetch failed`, so the agent got no way on. `sandbox-diagnostic.mjs` now names `run_with_network` for it (`managed-host-escalation`).
|
|
20
|
+
- `managed-delegation-cli`, now running, wrote ^C into a terminal the CLI had already closed (`EIO`); the write tolerates that, and the test still requires the CLI to start.
|
|
21
|
+
- **Harness conformance:** `docs/harness-conformance.md` names, for every setting of a team's Harness, who enforces it (Studio or Piagent), what a company session does and the tests that prove it. `tests/managed-harness-conformance.test.mjs` fails when a setting has no section, when a section names a test that does not exist, or when the pinned host is missing on macOS in CI. It also adds the two checks no test had: `max_fix_loops` read within 0–3, and one helper of each role at a time.
|
|
22
|
+
- **Developer loop:** `docs/company-dev-commands.md` lists what runs without asking and what names its approval, measured on this Mac. `tests/managed-dev-loop.test.mjs` replays one loop offline in one sandbox: branch, failing test, fix, `npm test`, `make check`, build, commit, stash, the app's own server, a background server within one command, `sqlite3`, a venv, and the internet refused with `run_with_network` named. Where `gh` or `ssh-add` find no sign-in in the sandbox, the agent is now told to use `run_on_host` instead of `gh auth login`. Owner, 2026-10-15: GitHub work, pushes and private registries stay on `run_on_host`; no separate GitHub tool.
|
|
23
|
+
- **Background processes (`start_process`, `process_output`, `stop_process`, macOS):** a dev server, watcher or local service runs across turns in the plain sandbox, without network, until stopped, the conversation closes or 4 hours pass; at most 4 at once; output is bounded (64 KiB), read once and redacted; `process_output` can wait for a ready line. They are stopped by process group, by parent and by their own marker. While measuring this, `stopStrays` was found to miss a process a command left running when it is one of Apple's binaries (`nohup sleep …`): `ps -E` cannot read their environment. Node, Python and Java processes are found; the limitation is documented, not fixed. Tests: `managed-background-process` (a real dev server across commands and a turn end; limits, buffer, redaction and lifetime with a stand-in).
|
|
24
|
+
- **Browser and MCP (owner, 2026-10-15):** UI checks use the project's Playwright; MCP in company sessions waits for a Studio allowlist design. Measured: Playwright's Chromium runs in the plain sandbox against a server on this Mac without approval, and with approval too. The prompt and the `run_with_network` description said a browser needed approval and that bash cannot listen on a port (macOS); both now say what was measured (Linux keeps the earlier wording, not measured there). The Chromium test, opt-in before, now builds its own project from this repository's `@playwright/test` when the Mac has Playwright's browsers.
|
|
25
|
+
- **Type errors right after an edit (owner, 2026-10-15: TS/JS language service):** `ts-diagnostics.mjs` starts `ts-diagnostics-server.mjs` in the command sandbox (pinned like the worker's modules) and adds the file's errors to a successful `write`/`edit` result; a clean file, a project without TypeScript or a config, or an answer later than 8 s adds nothing. This repository uses TypeScript 7.0.2, the native compiler, whose package has no JavaScript language-service API (`require('typescript')` gives the version only; the API is under `typescript/unstable/*`). TypeScript 7 is therefore checked with the project's own `tsc --noEmit --pretty false` (0.34 s for this repository) and TypeScript 5–6 with a language service. `tsc` checks no types while any file has a syntax error; the note then says the file was not type-checked and names the syntax errors. Tests: `managed-ts-diagnostics` (TypeScript 7 here; TypeScript 5.9.3 through `PIAGENT_TEST_TYPESCRIPT`, run once from a package fetched for the purpose).
|
|
26
|
+
- **Turn checkpoints and `/undo` (company Terminal):** `checkpoints.mjs` writes the working tree as a git tree through a private index before a run's first change (an edit, a command that may write, `run_with_network`/`run_with_docker`/`run_on_host`) and after the run; `/undo` restores what the last turn changed through a private index and refuses while a turn runs or when a file changed again since. Found while testing: copying the index without its time made git treat a file rewritten within the same second at the same size as unchanged, so the turn looked empty; the copy keeps the time (`cp -p`). Tests: `managed-checkpoints` (three turns, the member's staged change, untracked file and HEAD kept, refusal after a member edit, outside git). WebUI hunk revert still requires a task; it moves with the WebUI work.
|
|
27
|
+
- **A compaction test had no room left:** `managed-compaction` › "a history longer than the new harness model's window is summarised in parts" sent 11 turns of 26.5k tokens on top of about 8k of system prompt and tools: 300,000 tokens, exactly the trigger, after the new tools added about 500 tokens. The turns are now 26k (about 295k), still above the 272k the next step needs.
|
|
28
|
+
- **Pi host 1.2.0 prepared, pin unchanged (owner, 2026-10-15):** the pin is still 0.87.1. Runtime checks now read it from one place (`managed/pi-host.mjs`, the package's peer dependency); `verify-release-identity.mjs` keeps its own copy on purpose. Pi 1.2.0 was installed into a scratch prefix (the member's global `pi` stays 0.87.1) and a copy of this tree pinned to it. Three incompatibilities were found and fixed so the same code runs on both:
|
|
29
|
+
- Pi 1.0.1 dropped its npm shrinkwrap, so `@earendil-works/pi-ai` is hoisted beside the host instead of nested in it. `hostPackage()` finds it the way Node does (session, doctor, tests).
|
|
30
|
+
- The command sandbox read only the host's folder; with hoisted dependencies it now reads the `node_modules` that holds them (unchanged for 0.87.1, where they are nested).
|
|
31
|
+
- Pi 1.x's bash tool returns an `isError` result for a non-zero exit instead of throwing, so the sandbox notes (`managed-sandbox-denied`, `run_with_network`…) were skipped. The worker reads an `isError` result as the throw it was (`isError` is set, so check counting was not affected).
|
|
32
|
+
- Results on 1.2.0: all 176 SDK-backed company tests pass (the three dashboard tests with 1.2.0's `pi` first on `PATH`); the real-host WebUI wire, PCL and session-wait tests pass. Still failing on 1.2.0: the benchmark custody tests (`benchmark-scoped-frozen-qualification.mjs` requires pi-ai's `event-stream.js` inside the hashed host tree, which a hoisted layout does not satisfy) and benchmark tests that need a git checkout. They belong with the deferred benchmark redesign.
|
|
33
|
+
- Switching the pin also needs: root `package.json` and `packages/piagent-core/package.json` (pi-coding-agent and pi-ai), `package-lock.json`, `supportedPiHost` in `verify-release-identity.mjs`, and the `brace-expansion` advisory exception, which 1.x no longer needs (no shrinkwrap). Personal mode on 1.2.0 was exercised only through these tests, not interactively.
|
|
34
|
+
- **Headless JSON:** `piagent studio --prompt <text> --json` writes the `pi --mode json` stream through Pi's `toJsonEvent` (`dist/modes/json-event.js`, the same in 0.87.1 and 1.2.0); `--json` without `--prompt` is refused. Test: `managed-delegation-cli` (a second CLI run parsed line by line: session header, agent and turn events, the answer in `message_end`, deltas without cumulative snapshots).
|
|
35
|
+
- **WebUI (owner, 2026-10-15):**
|
|
36
|
+
- *Several pages at once:* a message sent from a page that did not start the running turn (another tab) was refused (`session-operation-conflict`) and kept as "not sent". The Gateway now queues it as a follow-up of that turn, as the Terminal does, when the session streams and is not settling (`provider-wire` sessions keep refusing). Test: `piagent-webui-session-lease-runtime` › "a new message from another page while a turn streams waits for that turn instead of being refused".
|
|
37
|
+
- *Tool activity and per-turn usage:* already shown by the current WebUI (live and past tool cards in `TimelineTurn`/`ToolCard`, a turn's requests, tokens, time and speed); the 2026-09-30 gap list was out of date. Checked in code and the existing tests, not by looking at the page.
|
|
38
|
+
- */undo:* sent as a message in a company conversation, it runs `checkpoints.undo()` with no model request and adds a note (`agent-watch-process`, phase `undo`, schema `transcript-v1` and regenerated contracts) worded in both languages; the composer offers `/undo` among the commands of company conversations only. Tests: `managed-checkpoints`, `piagent-webui-harness-process`, the browser test "a company conversation offers its own /undo among the commands; a personal one does not".
|
|
39
|
+
- Browser suite: 44 of 44 in two runs at load average about 2; two earlier full runs under load (6–12) lost a keystroke in the `@` and `/` composer tests (passed alone).
|
|
40
|
+
- *Hunk revert without a task:* not done. It reverts only what exact task provenance proves the agent changed; a session-level proof is a redesign of that safeguard.
|
|
41
|
+
- **Terminal commands in the dashboard (owner, 2026-10-15):** `client/src/conversation-commands.ts` lists `/help /new /stop /name /fork /pin /archive /thinking`, `/model /permission` (personal) and `/undo /fast /bypass` (company), `/changes /settings`; the composer runs them through the buttons' session commands, with no model request (`/undo` is sent: the company runtime answers it). Full access and Bypass ask for confirmation as the buttons do; a usage note keeps what was typed. Shortcuts: ⌘⇧O new chat, ⌘/ the `/` commands, Esc stops the running turn. Tests: `piagent-webui-conversation-commands` (matching, company/personal lists, each command's session command, confirmation, refusals, `/help`), browser tests for the `/` list and for `/name`, a usage note, `/help` and ⌘⇧O. Esc stopping a turn has no automated test (the browser fixture has no running turn to stop).
|
|
42
|
+
- **Full suite after these changes:** 0 failures: 6,008 pass, 317 skipped (integration tests of the retired task-contract executor and other opt-in suites); the reported total varies by a few dozen between runs because concurrent TAP output is cut. `benchmark-budget-launcher` › "real unresponsive core and registered detached provider are stopped by outer watchdog" is a 5-second timing test that failed in two earlier full runs under load and passed every run alone, on this tree and on a clean checkout of HEAD.
|
|
43
|
+
|
|
6
44
|
## 2026-10-03 — helpers object to a wrong brief; disagreements go to the member
|
|
7
45
|
|
|
8
46
|
The owner approved the rule:
|
|
@@ -19,12 +19,12 @@ Support matrix release hiện tại: macOS Apple Silicon + Bash và Linux x64 +
|
|
|
19
19
|
```bash
|
|
20
20
|
node --version # >= 22.19.0
|
|
21
21
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
22
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
22
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
23
23
|
piagent-install --stable --dry-run
|
|
24
24
|
piagent-install --stable
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Khi seed `.pi/settings.json` cho team/repo cần audit lặp lại, giữ package source dạng pinned tag như `git:github.com/Vt-mmm/piagent@v1.
|
|
27
|
+
Khi seed `.pi/settings.json` cho team/repo cần audit lặp lại, giữ package source dạng pinned tag như `git:github.com/Vt-mmm/piagent@v1.26.1`. Máy cá nhân có thể dùng `git:github.com/Vt-mmm/piagent` để theo latest.
|
|
28
28
|
|
|
29
29
|
Nếu đang ở source checkout của platform, dùng helper theo channel để preview trước khi đổi:
|
|
30
30
|
|
|
@@ -100,7 +100,7 @@ install package once
|
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
103
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
103
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
104
104
|
piagent-install --stable --dry-run
|
|
105
105
|
piagent-install --stable
|
|
106
106
|
```
|
|
@@ -285,7 +285,7 @@ Không phải daily default. Dùng khi muốn tạo sẵn `.pi` files cho projec
|
|
|
285
285
|
bash /path/to/piagent/scripts/setup.sh /path/to/project \
|
|
286
286
|
--project-only \
|
|
287
287
|
--profile auto \
|
|
288
|
-
--package-source git:github.com/Vt-mmm/piagent@v1.
|
|
288
|
+
--package-source git:github.com/Vt-mmm/piagent@v1.26.1 \
|
|
289
289
|
--mcp-preset core \
|
|
290
290
|
--subagents-preset safe
|
|
291
291
|
```
|
|
@@ -999,8 +999,8 @@ Watchdog là optional adversarial reviewer ở cuối turn, không bật mặc
|
|
|
999
999
|
|
|
1000
1000
|
| Command | Dùng để |
|
|
1001
1001
|
|---|---|
|
|
1002
|
-
| `npm install -g --ignore-scripts @piagent/platform@1.
|
|
1003
|
-
| `pi install git:github.com/Vt-mmm/piagent@v1.
|
|
1002
|
+
| `npm install -g --ignore-scripts @piagent/platform@1.26.1` | Cài terminal helper `piagent-*` từ release tag hiện tại. |
|
|
1003
|
+
| `pi install git:github.com/Vt-mmm/piagent@v1.26.1` | Install pinned release cho reproducible team setup. |
|
|
1004
1004
|
| `pi install git:github.com/Vt-mmm/piagent` | Install latest platform package cho máy cá nhân/sandbox. |
|
|
1005
1005
|
| Cài exact Pi host của release, rồi `npm install -g --ignore-scripts @piagent/platform@X.Y.Z` và `piagent-install --stable` | Full update: đồng bộ host, terminal helper và Pi package. Mỗi release pin một Pi host chính xác; lấy đúng version của release đang cài trong [release/install policy](release-install-policy.md). |
|
|
1006
1006
|
| Cài exact Pi host ghi trong release cũ, rồi helper `vPREVIOUS` và `piagent-install --stable` | Full rollback; đánh giá lại dependency findings của host cũ trước khi hạ version. |
|
|
@@ -1096,7 +1096,7 @@ Mở lại Pi session sau khi install.
|
|
|
1096
1096
|
Cài lại terminal helper đúng release rồi kiểm tra `PATH`:
|
|
1097
1097
|
|
|
1098
1098
|
```bash
|
|
1099
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
1099
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
1100
1100
|
command -v piagent-install
|
|
1101
1101
|
```
|
|
1102
1102
|
|
|
@@ -41,6 +41,8 @@ pi install /path/to/piagent
|
|
|
41
41
|
|
|
42
42
|
## Versioning
|
|
43
43
|
|
|
44
|
+
- `1.26.1`: đổi tên cuộc trò chuyện được cả khi lượt đang chạy (trước đó menu báo `session-revision-stale` và giữ tên cũ); lỗi đổi tên, tạo nhánh, lưu trữ hiện bằng lời.
|
|
45
|
+
- `1.26.0`: lệnh `/` và phím tắt của Terminal trên dashboard (chạy ngay trên dashboard, không gửi cho model; ⌘⇧O, ⌘/, Esc); `/undo` hoàn tác file của lượt trước (từ chối khi file đã bị sửa tiếp); `start_process` giữ dev server qua nhiều lượt; lỗi TypeScript của file vừa sửa; `piagent studio --prompt … --json`; tin nhắn từ tab khác chờ lượt đang chạy; sẵn sàng cho Pi 1.2.0 (pin vẫn 0.87.1); test end-to-end của Harness chạy được trên CI.
|
|
44
46
|
- `1.25.0`: thiếu môi trường thì agent xin quyền và duyệt xong là chạy: `run_on_host` chạy đúng một lệnh trên máy member, ngoài sandbox (cài JDK/Node, git pull/push bằng tài khoản member, registry riêng; luôn hỏi, Bypass cũng hỏi; lệnh cần mật khẩu hay đăng nhập thì hỏi member qua `ask_user`), `start_docker` mở Docker rồi dùng `run_with_docker` ngay trong cuộc trò chuyện, mọi lỗi sandbox chỉ ra bước xin quyền thay vì “báo người dùng”; `fetch_origin` nhận `path` cho folder nhiều repo; lượt chỉ đọc bằng `git -C` không còn bị coi là sửa code.
|
|
45
47
|
- `1.24.0`: trang tạo cuộc trò chuyện mới có nút Fast cạnh model công ty khi Harness cho phép; bật trước khi gửi thì cuộc trò chuyện chạy Fast từ tin nhắn đầu (`session.create` mang `fast: true`, Harness không cho phép thì từ chối tạo); nút Fast ở đầu cuộc trò chuyện chuyển màu vàng khi bật.
|
|
46
48
|
- `1.23.1`: câu hỏi và yêu cầu duyệt của agent luôn nằm cuối cuộc trò chuyện, ngay trên ô nhập (trước đây nằm trên lượt đang chạy nên bị đẩy khỏi màn hình), trang tự cuộn tới khi có câu hỏi hoặc khi mở cuộc trò chuyện đang chờ; thẻ câu hỏi chữ lớn hơn, nút “Để agent tự quyết” ở giao diện sáng là nút viền.
|
|
@@ -153,7 +153,7 @@ Use this flow when the team needs both terminal commands and the Pi package:
|
|
|
153
153
|
```bash
|
|
154
154
|
node --version # >= 22.19.0
|
|
155
155
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
156
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
156
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
157
157
|
piagent-install --stable --dry-run
|
|
158
158
|
piagent-install --stable
|
|
159
159
|
```
|
|
@@ -179,7 +179,7 @@ bash scripts/install-global.sh --stable
|
|
|
179
179
|
Use this only when terminal commands are not needed:
|
|
180
180
|
|
|
181
181
|
```bash
|
|
182
|
-
pi install git:github.com/Vt-mmm/piagent@v1.
|
|
182
|
+
pi install git:github.com/Vt-mmm/piagent@v1.26.1
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
Direct `pi install` does not create `piagent-*` commands on `PATH`.
|
package/docs/team-onboarding.md
CHANGED
|
@@ -10,7 +10,7 @@ Một thành viên mới không cần biết local path của maintainer. Luồn
|
|
|
10
10
|
```bash
|
|
11
11
|
node --version # >= 22.19.0
|
|
12
12
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
13
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
13
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
14
14
|
piagent-install --stable
|
|
15
15
|
cd /path/to/project
|
|
16
16
|
pi
|
|
@@ -45,7 +45,7 @@ Mặc định team dùng stable helper:
|
|
|
45
45
|
```bash
|
|
46
46
|
node --version # >= 22.19.0
|
|
47
47
|
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.87.1
|
|
48
|
-
npm install -g --ignore-scripts @piagent/platform@1.
|
|
48
|
+
npm install -g --ignore-scripts @piagent/platform@1.26.1
|
|
49
49
|
piagent-install --stable --dry-run
|
|
50
50
|
piagent-install --stable
|
|
51
51
|
```
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.26.1 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/architecture" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/architecture" hreflang="en" lang="en">EN</a>
|
package/docs-site/benchmark.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.26.1 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/benchmark" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/benchmark" hreflang="en" lang="en">EN</a>
|
package/docs-site/commands.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.26.1 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/commands" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/commands" hreflang="en" lang="en">EN</a>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<section class="hero">
|
|
2
|
-
<p class="eyebrow">Piagent 1.
|
|
2
|
+
<p class="eyebrow">Piagent 1.26.1</p>
|
|
3
3
|
<h1>A coding agent for the whole team, checked at every step.</h1>
|
|
4
4
|
<p>
|
|
5
5
|
One dashboard for Terminal and the browser. Use models with your own account, or the company's models through Agent Watch and Agent Studio. The guard checks every tool call; in company mode the team's Harness asks for checks, has a subagent review the change and reports the outcome right under the answer.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<div class="hero-actions">
|
|
14
14
|
<a class="button primary" href="/en/quickstart">Get started</a>
|
|
15
15
|
<a class="button" href="/en/ecosystem">Ecosystem</a>
|
|
16
|
-
<a class="button" href="/en/whats-new">What’s new in 1.
|
|
16
|
+
<a class="button" href="/en/whats-new">What’s new in 1.26.1</a>
|
|
17
17
|
<a class="button" href="/en/commands">View commands</a>
|
|
18
18
|
</div>
|
|
19
19
|
</section>
|
|
@@ -89,9 +89,9 @@ piagent-setup</code></pre>
|
|
|
89
89
|
<h2 id="where-to-start">Where to start</h2>
|
|
90
90
|
<div class="card-grid">
|
|
91
91
|
<a class="doc-card" href="/en/whats-new">
|
|
92
|
-
<span class="card-kicker">Release 1.
|
|
92
|
+
<span class="card-kicker">Release 1.26.1</span>
|
|
93
93
|
<h3>What’s new</h3>
|
|
94
|
-
<p>
|
|
94
|
+
<p>A conversation is renamed while its turn runs; in 1.26.0: the Terminal's / commands and shortcuts in the dashboard, /undo for the agent's last turn, dev servers that stay up across turns; in 1.25.0: when the machine lacks something the agent asks, and the approved command runs (run_on_host outside the sandbox, start_docker in the same conversation); in 1.24.0: choose Fast on the new chat page for company conversations, and the Fast switch turns amber while on; in 1.23.1: an agent's question waits at the end of the conversation, right above the composer, and reads more easily; in 1.23.0: a Fast switch for company conversations where the Harness allows it, failed tools reported to Studio (Logs → Tool lỗi), new conversations send their first message after a Harness change; in 1.22.1: the dashboard no longer keeps loading when a project is on a Windows drive seen from WSL (/mnt/d…) or the company runtime does not answer; in 1.22.0: attach any source or text file (.html, .css, .ts, .py, Dockerfile…); in 1.21.1: Bypass can be turned on while a turn runs and stays on after a reload; in 1.21.0: questions and approvals one card at a time (the main agent's first), a notification at the top right when another conversation finishes or waits for you, Studio logs each compaction; in 1.20.0: package installs in the company sandbox no longer ask (npm, PyPI, Go, Maven, Gradle… through a registry-only proxy); in 1.19.0: company tasks with a checklist are carried to the end, every turn says whether it finished, stopped midway or failed, Docker in the company sandbox, folders with several repositories; in 1.18.0: switch the Git branch from the dashboard, retries for passing failures, Claude Haiku 5.5; in 1.17.0: the dashboard shows each project's Git branch; in 1.16.3: an updated dashboard keeps checking for releases; in 1.16.2: the Terminal says what the dashboard says: update question, /bypass, failures and Harness notes in Vietnamese; in 1.16.1: new releases are announced in a dialog and checked every hour, dashboard tabs stay signed in; in 1.16.0: Bypass for company conversations, Harness changes never interrupt you; in 1.15.2: long conversations shrink again; in 1.15.1: Studio sees what each model call is for, conversations in one folder keep their changes apart; in 1.15.0: a refused subagent says why; in 1.14: updates keep the models you chose; in 1.13: conversations keep their place, the agent's notes are formatted, Piagent on Windows through WSL2: a bubblewrap sandbox for company conversations and Agent Watch for Windows; in 1.12: @ picks files and folders on the Mac, skills and commands run from /, and forked company conversations take messages.</p>
|
|
95
95
|
</a>
|
|
96
96
|
<a class="doc-card" href="/en/ecosystem">
|
|
97
97
|
<span class="card-kicker">Get started</span>
|