@pi-unipi/unipi 3.0.0-alpha.16 → 3.0.0-alpha.17
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 +20 -0
- package/package.json +21 -21
- package/packages/ask-user/package.json +2 -2
- package/packages/autocomplete/package.json +1 -1
- package/packages/background-tasks/package.json +2 -2
- package/packages/btw/package.json +2 -2
- package/packages/compactor/package.json +3 -3
- package/packages/core/package.json +1 -1
- package/packages/footer/package.json +3 -3
- package/packages/fusion/package.json +3 -3
- package/packages/info-screen/package.json +2 -2
- package/packages/input-shortcuts/package.json +2 -2
- package/packages/kanboard/index.ts +4 -0
- package/packages/kanboard/package.json +7 -7
- package/packages/kanboard/skills/kanboard/SKILL.md +19 -10
- package/packages/kanboard/src/commands.ts +1 -1
- package/packages/kanboard/src/guard.ts +3 -3
- package/packages/kanboard/src/settings.ts +0 -19
- package/packages/long-horizon/package.json +2 -2
- package/packages/mcp/package.json +2 -2
- package/packages/memory/package.json +3 -3
- package/packages/notify/package.json +2 -2
- package/packages/skill-registry/package.json +2 -2
- package/packages/subagents/package.json +2 -2
- package/packages/unipi/bundled.js +3 -8
- package/packages/updater/package.json +2 -2
- package/packages/utility/package.json +2 -2
- package/packages/watchdog/package.json +3 -3
- package/packages/web-api/package.json +2 -2
- package/packages/workflow/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.0.0-alpha.17] — 2026-09-30
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `kanboard`: **status reports** — task JSON carries `statusReport` (the full finish summary for In Review, the block reason for Blocked). The board panel shows it as a banner ("Ready for review" / "Blocked") with a markdown preview and an eye button that opens the whole report in a reader; timeline entries get Finished / Blocked / Rework tags and a Read button. (UNI-25, UNI-8)
|
|
13
|
+
- `kanboard`: **`--attach <file>`** on `finish`, `move` and `note` (repeatable): the file is stored beside the board and embedded in the comment; a path written in the comment is replaced by the embed. `attach` on a task this session started is free. (UNI-35)
|
|
14
|
+
- `kanboard` (board UI): **`@` task mentions** in the new-task description, the description editor and the comment box — recent tasks newest first, filter as you type, Enter/Tab inserts the id. (UNI-36)
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- `kanboard` (board UI): every activity entry renders as markdown; the "Runs after" picker lists the newest tasks first; the whole New task dialog accepts dropped files, with a drop overlay, and a stray drop no longer navigates the browser away. (UNI-5, UNI-36)
|
|
18
|
+
- `kanboard` skill: the finish / block comment is written as the report the user reads (lead sentence, short paragraphs or bullets, questions under **Need from you:**).
|
|
19
|
+
- `kanboard` (board UI): the Runner settings section is now Sessions; lane tooltips and the in-progress chip describe `start` / `finish` instead of the runner.
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
- `kanboard` binary (phase 2 of the runner removal): the `claim-next`, `queue`, `unqueue` and `set-run` subcommands, the per-session queue and `UNIPI_KANBOARD_QUEUE_MAX`, `--strategy` / `--plan` on `add` and `edit`, strategy/plan in the API, task JSON and board settings (`defaultStrategy`, `defaultPlan`, `queueMax`), and the Strategy / Plan controls in the board UI. Old task files with `strategy:`, `plan:` or runner `run:` blocks still load and validate. Error and help text now describe `start` / `finish` / `move … blocked`. (UNI-37)
|
|
23
|
+
- `kanboard`: the unused `defaultStrategy`, `jevThreshold` and `defaultPlan` settings.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- `kanboard`: blank lines inside activity entries were dropped when the task file was written, gluing an agent's paragraphs and lists into one block; paragraph breaks now survive. (UNI-8)
|
|
27
|
+
- `kanboard`: a subagent or fusion sidekick shutting down released the lead's open claims back to Todo ("session ended mid-task"), because children inherit the lead's session id; shutdown release now runs in the lead only.
|
|
28
|
+
|
|
9
29
|
## [3.0.0-alpha.16] — 2026-09-30
|
|
10
30
|
|
|
11
31
|
### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/unipi",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "All-in-one extension suite for Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -82,26 +82,26 @@
|
|
|
82
82
|
"typebox": "^1.1.38"
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@pi-unipi/ask-user": "3.0.0-alpha.
|
|
86
|
-
"@pi-unipi/background-tasks": "3.0.0-alpha.
|
|
87
|
-
"@pi-unipi/btw": "3.0.0-alpha.
|
|
88
|
-
"@pi-unipi/command-enchantment": "3.0.0-alpha.
|
|
89
|
-
"@pi-unipi/compactor": "3.0.0-alpha.
|
|
90
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
91
|
-
"@pi-unipi/footer": "3.0.0-alpha.
|
|
92
|
-
"@pi-unipi/fusion": "3.0.0-alpha.
|
|
93
|
-
"@pi-unipi/info-screen": "3.0.0-alpha.
|
|
94
|
-
"@pi-unipi/input-shortcuts": "3.0.0-alpha.
|
|
95
|
-
"@pi-unipi/kanboard": "3.0.0-alpha.
|
|
96
|
-
"@pi-unipi/mcp": "3.0.0-alpha.
|
|
97
|
-
"@pi-unipi/memory": "3.0.0-alpha.
|
|
98
|
-
"@pi-unipi/notify": "3.0.0-alpha.
|
|
99
|
-
"@pi-unipi/skill-registry": "3.0.0-alpha.
|
|
100
|
-
"@pi-unipi/subagents": "3.0.0-alpha.
|
|
101
|
-
"@pi-unipi/updater": "3.0.0-alpha.
|
|
102
|
-
"@pi-unipi/utility": "3.0.0-alpha.
|
|
103
|
-
"@pi-unipi/web-api": "3.0.0-alpha.
|
|
104
|
-
"@pi-unipi/workflow": "3.0.0-alpha.
|
|
85
|
+
"@pi-unipi/ask-user": "3.0.0-alpha.17",
|
|
86
|
+
"@pi-unipi/background-tasks": "3.0.0-alpha.17",
|
|
87
|
+
"@pi-unipi/btw": "3.0.0-alpha.17",
|
|
88
|
+
"@pi-unipi/command-enchantment": "3.0.0-alpha.17",
|
|
89
|
+
"@pi-unipi/compactor": "3.0.0-alpha.17",
|
|
90
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
91
|
+
"@pi-unipi/footer": "3.0.0-alpha.17",
|
|
92
|
+
"@pi-unipi/fusion": "3.0.0-alpha.17",
|
|
93
|
+
"@pi-unipi/info-screen": "3.0.0-alpha.17",
|
|
94
|
+
"@pi-unipi/input-shortcuts": "3.0.0-alpha.17",
|
|
95
|
+
"@pi-unipi/kanboard": "3.0.0-alpha.17",
|
|
96
|
+
"@pi-unipi/mcp": "3.0.0-alpha.17",
|
|
97
|
+
"@pi-unipi/memory": "3.0.0-alpha.17",
|
|
98
|
+
"@pi-unipi/notify": "3.0.0-alpha.17",
|
|
99
|
+
"@pi-unipi/skill-registry": "3.0.0-alpha.17",
|
|
100
|
+
"@pi-unipi/subagents": "3.0.0-alpha.17",
|
|
101
|
+
"@pi-unipi/updater": "3.0.0-alpha.17",
|
|
102
|
+
"@pi-unipi/utility": "3.0.0-alpha.17",
|
|
103
|
+
"@pi-unipi/web-api": "3.0.0-alpha.17",
|
|
104
|
+
"@pi-unipi/workflow": "3.0.0-alpha.17"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@earendil-works/pi-agent-core": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/ask-user",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Structured user input tool for Pi coding agent — single-select, multi-select, freeform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
43
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/background-tasks",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Background tasks for UniPi — durable shell jobs and delegated background agents with a footer dock",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@earendil-works/pi-ai": "^0.87.1",
|
|
13
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
13
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
14
14
|
"turndown": "^7.2.4"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/btw",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "A pi extension for parallel side conversations with /unipi:btw — part of the Unipi suite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "extensions/btw.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@earendil-works/pi-tui": "^0.87.1"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
40
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
41
41
|
},
|
|
42
42
|
"pi": {
|
|
43
43
|
"extensions": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/compactor",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Compaction for Pi — lossless zero-LLM or model summaries, rebuilt from full history, with session recall",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
37
|
-
"@pi-unipi/info-screen": "3.0.0-alpha.
|
|
36
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
37
|
+
"@pi-unipi/info-screen": "3.0.0-alpha.17",
|
|
38
38
|
"@earendil-works/pi-agent-core": "^0.87.1"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/footer",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Persistent status bar for Unipi — subscribes to UNIPI_EVENTS and renders key stats from all unipi packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
36
|
-
"@pi-unipi/background-tasks": "3.0.0-alpha.
|
|
35
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
36
|
+
"@pi-unipi/background-tasks": "3.0.0-alpha.17"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/fusion",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Devin-style model picker, fusion presets (lead + sidekick), and Local Fusion runtime for UniPi",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
36
|
-
"@pi-unipi/subagents": "3.0.0-alpha.
|
|
35
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
36
|
+
"@pi-unipi/subagents": "3.0.0-alpha.17"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@earendil-works/pi-ai": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/info-screen",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Dashboard and module registry for Unipi — configurable info overlay with tabbed groups",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
35
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/input-shortcuts",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Keyboard shortcuts for stash/restore, undo/redo, clipboard, and thinking toggle — chord-based overlay system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
36
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -416,6 +416,10 @@ export default function (pi: ExtensionAPI) {
|
|
|
416
416
|
// cannot release), and release requires a comment — the next run's resume
|
|
417
417
|
// notice keys on it. Best effort: a dead pid is reaped with "session
|
|
418
418
|
// lost" anyway.
|
|
419
|
+
// Children (subagents, fusion sidekicks, kanboard's own helpers) inherit
|
|
420
|
+
// the lead's session id: their shutdown must never release the lead's
|
|
421
|
+
// claims (a finished subagent used to bounce the lead's task to Todo).
|
|
422
|
+
if (isChildProcess() || process.env.UNIPI_KANBOARD_CHILD) return;
|
|
419
423
|
try {
|
|
420
424
|
const session = sessionId();
|
|
421
425
|
const claims = await ownClaims();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/kanboard",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Kanboard v3 — deferred-work board: CLI/daemon bridge, task runner and skill",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"access": "public"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
34
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
"themes": []
|
|
49
49
|
},
|
|
50
50
|
"optionalDependencies": {
|
|
51
|
-
"@pi-unipi/kanboard-linux-x64": "3.0.0-alpha.
|
|
52
|
-
"@pi-unipi/kanboard-linux-arm64": "3.0.0-alpha.
|
|
53
|
-
"@pi-unipi/kanboard-darwin-x64": "3.0.0-alpha.
|
|
54
|
-
"@pi-unipi/kanboard-darwin-arm64": "3.0.0-alpha.
|
|
55
|
-
"@pi-unipi/kanboard-win32-x64": "3.0.0-alpha.
|
|
51
|
+
"@pi-unipi/kanboard-linux-x64": "3.0.0-alpha.17",
|
|
52
|
+
"@pi-unipi/kanboard-linux-arm64": "3.0.0-alpha.17",
|
|
53
|
+
"@pi-unipi/kanboard-darwin-x64": "3.0.0-alpha.17",
|
|
54
|
+
"@pi-unipi/kanboard-darwin-arm64": "3.0.0-alpha.17",
|
|
55
|
+
"@pi-unipi/kanboard-win32-x64": "3.0.0-alpha.17"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -22,13 +22,13 @@ be on `PATH`):
|
|
|
22
22
|
<binary> --actor agent --project <slug> chain <ID> # upstream deps + downstream dependents
|
|
23
23
|
<binary> --actor agent --project <slug> search "<text>" [--all] # id/title/body, archived excluded unless --all
|
|
24
24
|
<binary> --actor agent --project <slug> add "<title>" [--status todo] [--after <ID>] [--body-file <f>] [--attach <file>]…
|
|
25
|
-
<binary> --actor agent --project <slug> note <ID> "<text>"
|
|
25
|
+
<binary> --actor agent --project <slug> note <ID> "<text>" [--attach <file>]…
|
|
26
26
|
<binary> --actor agent --project <slug> attach <ID> <file> --note "<what it shows>"
|
|
27
27
|
<binary> --actor agent --project <slug> attachments <ID>
|
|
28
28
|
<binary> --actor agent --project <slug> edit <ID> --title|--body|--labels … # only tasks you created, while in backlog/todo
|
|
29
29
|
<binary> --actor agent --project <slug> start <ID> # todo → in progress, claimed for your session (costs a -do slot)
|
|
30
|
-
<binary> --actor agent --project <slug> finish <ID> --comment "<summary>" # in progress → in review, only a task you started (free)
|
|
31
|
-
<binary> --actor agent --project <slug> move <ID> blocked --comment "<what you need>"
|
|
30
|
+
<binary> --actor agent --project <slug> finish <ID> --comment "<summary>" [--attach <file>]… # in progress → in review, only a task you started (free)
|
|
31
|
+
<binary> --actor agent --project <slug> move <ID> blocked --comment "<what you need>" [--attach <file>]…
|
|
32
32
|
<binary> --actor agent --project <slug> link <ID> --after <DEP>
|
|
33
33
|
<binary> --actor agent --project <slug> unlink <ID> --after <DEP>
|
|
34
34
|
<binary> --actor agent --project <slug> order <ID> --top|--bottom|--before <ID>
|
|
@@ -94,9 +94,8 @@ lists them — read the files there directly if you need one.
|
|
|
94
94
|
cannot continue — `move <ID> blocked --comment "<what you need>"`.
|
|
95
95
|
5. **Work only on the task you were given.** Follow-up work goes to the board as
|
|
96
96
|
a new task in Backlog (`add "<title>"`), optionally `link <new> --after <ID>`.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
why. You may
|
|
97
|
+
At most `maxSessions` (default 2) sessions may hold tasks in a project at
|
|
98
|
+
once — if the board refuses a `start`, that is why. You may
|
|
100
99
|
block only the task your own session is running (`move <ID> blocked` checks
|
|
101
100
|
`--session`/`UNIPI_KANBOARD_SESSION` against the claim).
|
|
102
101
|
6. **Sidekicks and subagents can read the board but never write it** — every
|
|
@@ -106,7 +105,14 @@ lists them — read the files there directly if you need one.
|
|
|
106
105
|
ready task in the same session — there is no separate worker.)
|
|
107
106
|
7. Use `note <ID> "<text>"` for progress worth remembering (decisions, what you
|
|
108
107
|
verified, what you left undone) — it is the activity log the next reader sees.
|
|
109
|
-
8.
|
|
108
|
+
8. **Write the `finish` / `blocked` comment as the report the user reads.** It
|
|
109
|
+
is shown as the task's status banner and opens in a reader, rendered as
|
|
110
|
+
markdown. Lead with one plain sentence (what you did, or what stops you),
|
|
111
|
+
then short paragraphs or `-` bullets separated by blank lines; put questions
|
|
112
|
+
for the user as a numbered list under `**Need from you:**`. Name files and
|
|
113
|
+
commands in backticks. Do not repeat a note you already wrote — the report
|
|
114
|
+
replaces it. Attach evidence with `--attach <file>`.
|
|
115
|
+
9. Dependencies form a DAG: a task is ready only when every dep reached the chain
|
|
110
116
|
gate (`in_review` by default, `done` when configured). Cancelled deps block
|
|
111
117
|
forever, so unlink or re-plan instead of waiting. `chain <ID>` shows the
|
|
112
118
|
whole line, `next` shows what would be picked and why others wait.
|
|
@@ -126,6 +132,9 @@ but only to write a summary.)
|
|
|
126
132
|
Users attach screenshots, logs and documents in the board UI; they appear in the
|
|
127
133
|
text as markdown with `att:<ID>/<name>` references, and `show <ID> --json` lists
|
|
128
134
|
them under `attachments` with an absolute `path` — read the file from there
|
|
129
|
-
(use your image-reading tool for images). To hand back evidence
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
(use your image-reading tool for images). To hand back evidence (a screenshot,
|
|
136
|
+
a log, a report), pass `--attach <file>` (repeatable) to `finish`, `move … blocked`
|
|
137
|
+
or `note`, or use `attach <ID> <file> --note "…"`: the file is stored beside the
|
|
138
|
+
board and the comment embeds it, so the user sees the image or file inline. A
|
|
139
|
+
file's path written in the comment is replaced by the embed; otherwise the
|
|
140
|
+
embed is appended. Attaching to a task you started is free.
|
|
@@ -44,7 +44,7 @@ Priority -p: 1 none · 2 low · 3 medium · 4 high · 5 urgent`;
|
|
|
44
44
|
export function doText(slug: string, cli: string, request: string, slots = DEFAULT_DO_TASKS, writes = DEFAULT_DO_WRITES): string {
|
|
45
45
|
const s = slots === 1 ? "" : "s";
|
|
46
46
|
const ws = writes === 1 ? "" : "s";
|
|
47
|
-
return `[kanboard] For this request you may use the kanboard skill on project ${slug} (CLI: \`${cli} --actor agent --project ${slug} …\`). Budget this session: ${String(slots)} task slot${s} — each \`start\` uses one — and ${String(writes)} board write${ws} (add, edit, link, order, move backlog↔todo, note on tasks you don't hold); /unipi:kanboard-do tops both back up. Always free: reads, and \`finish\`, \`move <ID> blocked --comment\` and \`
|
|
47
|
+
return `[kanboard] For this request you may use the kanboard skill on project ${slug} (CLI: \`${cli} --actor agent --project ${slug} …\`). Budget this session: ${String(slots)} task slot${s} — each \`start\` uses one — and ${String(writes)} board write${ws} (add, edit, link, order, move backlog↔todo, note on tasks you don't hold); /unipi:kanboard-do tops both back up. Always free: reads, and \`finish\`, \`move <ID> blocked --comment\`, \`note\` and \`attach\` on tasks you started. Work the tasks yourself in this session, in whatever mode fits: \`start <ID>\` right before you work it, then \`finish <ID> --comment "<summary>"\` or \`move <ID> blocked --comment "<what you need>"\` — never leave a task you started In Progress. Before starting anything, count the tasks this request needs; if that is more than ${String(slots)}, start nothing — tell me you can do ${String(slots)} now and ask whether to raise the limit (setting kanboard.doTasks) or work in batches. Read a task with \`show <ID>\` before editing or starting it — \`list\` only shows titles and a one-line excerpt. Sidekicks and subagents can read the board but not write it: brief them with the task, then update the board yourself from their report. If the request is unclear, ask me instead of guessing.
|
|
48
48
|
|
|
49
49
|
Request: ${request}`;
|
|
50
50
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* writes. A `/unipi:kanboard-do` grants task SLOTS (each `start` uses one)
|
|
6
6
|
* and a WRITE budget (add, edit, link, order, move backlog↔todo, note on
|
|
7
7
|
* tasks you don't hold). Always free: reads, and `finish`, `move <ID>
|
|
8
|
-
* blocked` and `
|
|
8
|
+
* blocked`, `note <ID>` and `attach <ID>` on claims this session started — a started task
|
|
9
9
|
* can always be closed. Autowork lifts both budgets (the runaway guard is
|
|
10
10
|
* the per-turn add cap). In child processes every write is refused: the
|
|
11
11
|
* lead updates the board.
|
|
@@ -282,9 +282,9 @@ export function createWriteGuard(options: WriteGuardOptions = {}): WriteGuard {
|
|
|
282
282
|
const id = firstPositional(invocation)!;
|
|
283
283
|
if (await ownsClaim(id)) continue; // closing your own claim is free
|
|
284
284
|
}
|
|
285
|
-
if (invocation.sub === "note" && firstPositional(invocation) !== undefined) {
|
|
285
|
+
if ((invocation.sub === "note" || invocation.sub === "attach") && firstPositional(invocation) !== undefined) {
|
|
286
286
|
const id = firstPositional(invocation)!;
|
|
287
|
-
if (await ownsClaim(id)) continue; // noting your own claim is free
|
|
287
|
+
if (await ownsClaim(id)) continue; // noting on / attaching to your own claim is free
|
|
288
288
|
}
|
|
289
289
|
if (autowork) continue; // autowork: unlimited slots and writes
|
|
290
290
|
if (invocation.sub === "start") {
|
|
@@ -34,12 +34,6 @@ export interface KanboardSettings {
|
|
|
34
34
|
doTasks: number;
|
|
35
35
|
/** Board writes a /unipi:kanboard-do grants. */
|
|
36
36
|
doWrites: number;
|
|
37
|
-
/** Strategy for unlabelled tasks ("auto" = jev decides, gated by `jevThreshold`). */
|
|
38
|
-
defaultStrategy: "auto" | "none" | "goal" | "ralph" | "swarm" | "graph";
|
|
39
|
-
/** Confidence floor for jev's strategy answer; below it (or missing) the task runs "none". */
|
|
40
|
-
jevThreshold: number;
|
|
41
|
-
/** Plan-first for unlabelled tasks (jev is never asked about plan). */
|
|
42
|
-
defaultPlan: boolean;
|
|
43
37
|
/** Whether a blocked-by-confusion task may ask the user (ask) or must
|
|
44
38
|
* assume-and-note (avoid, the default). */
|
|
45
39
|
blocking: "avoid" | "ask";
|
|
@@ -62,9 +56,6 @@ export const DEFAULT_SETTINGS: KanboardSettings = {
|
|
|
62
56
|
turnAddLimit: 20,
|
|
63
57
|
doTasks: 5,
|
|
64
58
|
doWrites: 10,
|
|
65
|
-
defaultStrategy: "none",
|
|
66
|
-
jevThreshold: 0.8,
|
|
67
|
-
defaultPlan: false,
|
|
68
59
|
blocking: "avoid",
|
|
69
60
|
reminders: true,
|
|
70
61
|
};
|
|
@@ -162,16 +153,6 @@ export function readKanboardSettings(cwd: string = process.cwd()): KanboardSetti
|
|
|
162
153
|
typeof raw.doWrites === "number" && raw.doWrites >= 0 && storedDoWritesSet(cwd)
|
|
163
154
|
? raw.doWrites
|
|
164
155
|
: (storedLegacyDoCredits(cwd) ?? DEFAULT_SETTINGS.doWrites),
|
|
165
|
-
defaultStrategy:
|
|
166
|
-
typeof raw.defaultStrategy === "string" &&
|
|
167
|
-
["auto", "none", "goal", "ralph", "swarm", "graph"].includes(raw.defaultStrategy)
|
|
168
|
-
? (raw.defaultStrategy as KanboardSettings["defaultStrategy"])
|
|
169
|
-
: DEFAULT_SETTINGS.defaultStrategy,
|
|
170
|
-
jevThreshold:
|
|
171
|
-
typeof raw.jevThreshold === "number" && raw.jevThreshold > 0 && raw.jevThreshold <= 1
|
|
172
|
-
? raw.jevThreshold
|
|
173
|
-
: DEFAULT_SETTINGS.jevThreshold,
|
|
174
|
-
defaultPlan: raw.defaultPlan === true,
|
|
175
156
|
blocking: raw.blocking === "ask" ? "ask" : "avoid",
|
|
176
157
|
reminders: raw.reminders !== false,
|
|
177
158
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/long-horizon",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Long-horizon execution for Pi — mode-gated /goal /ralph /swarm /graph orchestration with a TypeSafe prompt judge",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
40
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/mcp",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "MCP server management extension for Pi coding agent — browse, add, configure, and use MCP servers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"test": "npx tsx --test tests/**/*.test.ts"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
33
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/memory",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Persistent cross-session memory on MemPalace (auto-installed): daemon-routed writes, shared palace with other agents, for Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"README.md"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
46
|
-
"@pi-unipi/info-screen": "3.0.0-alpha.
|
|
45
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
46
|
+
"@pi-unipi/info-screen": "3.0.0-alpha.17",
|
|
47
47
|
"js-yaml": "^4.1.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/notify",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Cross-platform notification extension for Pi — native OS, Gotify, and Telegram notifications for agent lifecycle events",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
37
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
38
38
|
"node-notifier": "^10.0.1"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/skill-registry",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Skill registry for pi — per-project skill on/off, a skill vault, and jev-judged skill exposure",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"main": "index.ts",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
36
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/subagents",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Subagents for UniPi — Devin-model independent child agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"test": "npx tsx --test src/__tests__/*.test.ts"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
12
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
13
13
|
"@earendil-works/pi-agent-core": "^0.87.1",
|
|
14
14
|
"acorn": "8.18.0"
|
|
15
15
|
},
|
|
@@ -33728,9 +33728,6 @@ var DEFAULT_SETTINGS6 = {
|
|
|
33728
33728
|
turnAddLimit: 20,
|
|
33729
33729
|
doTasks: 5,
|
|
33730
33730
|
doWrites: 10,
|
|
33731
|
-
defaultStrategy: "none",
|
|
33732
|
-
jevThreshold: 0.8,
|
|
33733
|
-
defaultPlan: false,
|
|
33734
33731
|
blocking: "avoid",
|
|
33735
33732
|
reminders: true
|
|
33736
33733
|
};
|
|
@@ -33817,9 +33814,6 @@ function readKanboardSettings(cwd = process.cwd()) {
|
|
|
33817
33814
|
// (project first, then global) — the next settings write persists doWrites.
|
|
33818
33815
|
doTasks: typeof raw.doTasks === "number" && raw.doTasks >= 0 ? raw.doTasks : DEFAULT_SETTINGS6.doTasks,
|
|
33819
33816
|
doWrites: typeof raw.doWrites === "number" && raw.doWrites >= 0 && storedDoWritesSet(cwd) ? raw.doWrites : storedLegacyDoCredits(cwd) ?? DEFAULT_SETTINGS6.doWrites,
|
|
33820
|
-
defaultStrategy: typeof raw.defaultStrategy === "string" && ["auto", "none", "goal", "ralph", "swarm", "graph"].includes(raw.defaultStrategy) ? raw.defaultStrategy : DEFAULT_SETTINGS6.defaultStrategy,
|
|
33821
|
-
jevThreshold: typeof raw.jevThreshold === "number" && raw.jevThreshold > 0 && raw.jevThreshold <= 1 ? raw.jevThreshold : DEFAULT_SETTINGS6.jevThreshold,
|
|
33822
|
-
defaultPlan: raw.defaultPlan === true,
|
|
33823
33817
|
blocking: raw.blocking === "ask" ? "ask" : "avoid",
|
|
33824
33818
|
reminders: raw.reminders !== false
|
|
33825
33819
|
};
|
|
@@ -33872,7 +33866,7 @@ Priority -p: 1 none \xB7 2 low \xB7 3 medium \xB7 4 high \xB7 5 urgent`;
|
|
|
33872
33866
|
function doText(slug, cli, request, slots = DEFAULT_DO_TASKS, writes = DEFAULT_DO_WRITES) {
|
|
33873
33867
|
const s = slots === 1 ? "" : "s";
|
|
33874
33868
|
const ws = writes === 1 ? "" : "s";
|
|
33875
|
-
return `[kanboard] For this request you may use the kanboard skill on project ${slug} (CLI: \`${cli} --actor agent --project ${slug} \u2026\`). Budget this session: ${String(slots)} task slot${s} \u2014 each \`start\` uses one \u2014 and ${String(writes)} board write${ws} (add, edit, link, order, move backlog\u2194todo, note on tasks you don't hold); /unipi:kanboard-do tops both back up. Always free: reads, and \`finish\`, \`move <ID> blocked --comment\` and \`
|
|
33869
|
+
return `[kanboard] For this request you may use the kanboard skill on project ${slug} (CLI: \`${cli} --actor agent --project ${slug} \u2026\`). Budget this session: ${String(slots)} task slot${s} \u2014 each \`start\` uses one \u2014 and ${String(writes)} board write${ws} (add, edit, link, order, move backlog\u2194todo, note on tasks you don't hold); /unipi:kanboard-do tops both back up. Always free: reads, and \`finish\`, \`move <ID> blocked --comment\`, \`note\` and \`attach\` on tasks you started. Work the tasks yourself in this session, in whatever mode fits: \`start <ID>\` right before you work it, then \`finish <ID> --comment "<summary>"\` or \`move <ID> blocked --comment "<what you need>"\` \u2014 never leave a task you started In Progress. Before starting anything, count the tasks this request needs; if that is more than ${String(slots)}, start nothing \u2014 tell me you can do ${String(slots)} now and ask whether to raise the limit (setting kanboard.doTasks) or work in batches. Read a task with \`show <ID>\` before editing or starting it \u2014 \`list\` only shows titles and a one-line excerpt. Sidekicks and subagents can read the board but not write it: brief them with the task, then update the board yourself from their report. If the request is unclear, ask me instead of guessing.
|
|
33876
33870
|
|
|
33877
33871
|
Request: ${request}`;
|
|
33878
33872
|
}
|
|
@@ -35066,7 +35060,7 @@ function createWriteGuard(options = {}) {
|
|
|
35066
35060
|
const id = firstPositional(invocation);
|
|
35067
35061
|
if (await ownsClaim(id)) continue;
|
|
35068
35062
|
}
|
|
35069
|
-
if (invocation.sub === "note" && firstPositional(invocation) !== void 0) {
|
|
35063
|
+
if ((invocation.sub === "note" || invocation.sub === "attach") && firstPositional(invocation) !== void 0) {
|
|
35070
35064
|
const id = firstPositional(invocation);
|
|
35071
35065
|
if (await ownsClaim(id)) continue;
|
|
35072
35066
|
}
|
|
@@ -35864,6 +35858,7 @@ function kanboard_default(pi) {
|
|
|
35864
35858
|
}
|
|
35865
35859
|
});
|
|
35866
35860
|
pi.on("session_shutdown", async (_event, ctx) => {
|
|
35861
|
+
if (isChildProcess() || process.env.UNIPI_KANBOARD_CHILD) return;
|
|
35867
35862
|
try {
|
|
35868
35863
|
const session = sessionId3();
|
|
35869
35864
|
const claims = await ownClaims();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/updater",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Auto-updater, changelog browser, and readme browser for Unipi — checks npm registry, renders CHANGELOG.md and README.md files in TUI overlays",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
37
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/utility",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Utility commands and tools for Pi coding agent — lifecycle, diagnostics, cache, analytics, display, batch execution",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
39
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {},
|
|
42
42
|
"peerDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/watchdog",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Jev watchdog for long-running tool calls and background tasks — judges stuck work via TypeSafe System One and kills or warns",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@pi-unipi/background-tasks": "3.0.0-alpha.
|
|
36
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
35
|
+
"@pi-unipi/background-tasks": "3.0.0-alpha.17",
|
|
36
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/web-api",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Web search, read, and summarize tools with provider-based backend selection for Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"README.md"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
34
|
+
"@pi-unipi/core": "3.0.0-alpha.17",
|
|
35
35
|
"defuddle": "^0.18.1",
|
|
36
36
|
"linkedom": "^0.18.12",
|
|
37
37
|
"wreq-js": "^2.3.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-unipi/workflow",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.17",
|
|
4
4
|
"description": "Plan mode and permission modes for the Pi coding agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@pi-unipi/core": "3.0.0-alpha.
|
|
30
|
+
"@pi-unipi/core": "3.0.0-alpha.17"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@earendil-works/pi-ai": "^0.87.1",
|