@zhushanwen/pi-canvas 0.3.0 → 0.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhushanwen/pi-canvas",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Problem-solving canvas toolface for pi: six deferred canvas_* tools bridging the agent to the taiji runtime CanvasService via the CANVAS_MARKER select channel (problem-solve-canvas)",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -55,10 +55,10 @@
55
55
  "vitest": "^4.1.8"
56
56
  },
57
57
  "dependencies": {
58
- "@zhushanwen/extension-protocol": "0.21.0",
58
+ "@zhushanwen/extension-protocol": "0.22.0",
59
59
  "@zhushanwen/pi-ext-guards": "0.5.0",
60
60
  "@zhushanwen/pi-extension-logger": "0.6.2",
61
- "@zhushanwen/subagent-core": "1.5.3"
61
+ "@zhushanwen/subagent-core": "1.6.0"
62
62
  },
63
63
  "scripts": {
64
64
  "typecheck": "npx tsc --noEmit",
@@ -42,7 +42,7 @@ canvas_unavailable_host: 画布需要 taiji 宿主。…
42
42
 
43
43
  ## 存储概览(只读理解用,agent 不直改文件)
44
44
 
45
- 画布数据在 taiji runtime 数据目录 `<dataDir>/canvases/<canvasId>/` 下:
45
+ 画布按归属会话隔离(session-store-layout-inversion D4):画布归属创建它的 session,一个 session 可有多张画布(1:N)。数据在 taiji runtime 数据目录 `<dataDir>/ext-sessions/<sessionId>/canvases/<canvasId>/` 下:
46
46
 
47
47
  | 文件 | 角色 |
48
48
  |---|---|
@@ -52,6 +52,8 @@ canvas_unavailable_host: 画布需要 taiji 宿主。…
52
52
 
53
53
  `<dataDir>` 按环境:taiji dev = `~/.taiji-dev`,taiji prod = `~/.taiji`(`TAIJI_AGENT_DATA_DIR` 可隔离)。修改画布只经 `canvas_edit` / `canvas_review` 工具走领域校验,**禁止手改这两个文件**。
54
54
 
55
+ 归属即隔离:`canvas_list` 只返回当前会话的画布;打开 / 读取 / 修改其他会话的画布一律被拒(错误码 `forbidden`,恢复动作 = 让用户切换到画布归属会话)。session 删除时该会话目录树(含其全部画布)随整树回收。
56
+
55
57
  ## 排障入口:扩展日志
56
58
 
57
59
  文件日志由 pi-extension-logger 双开关分级写 `<agentDir>/logs/pi-canvas-YYYY-MM-DD.log`:
@@ -69,7 +71,7 @@ canvas_unavailable_host: 画布需要 taiji 宿主。…
69
71
  | 环境 | 日志路径 | 画布数据 |
70
72
  |---|---|---|
71
73
  | 独立 pi CLI | `~/.pi/agent/logs/` | 不可用(canvas_unavailable_host) |
72
- | taiji dev | `~/.taiji-dev/agent/logs/` | `~/.taiji-dev/canvases/` |
73
- | taiji prod | `~/.taiji/agent/logs/` | `~/.taiji/canvases/` |
74
+ | taiji dev | `~/.taiji-dev/agent/logs/` | `~/.taiji-dev/ext-sessions/<sessionId>/canvases/` |
75
+ | taiji prod | `~/.taiji/agent/logs/` | `~/.taiji/ext-sessions/<sessionId>/canvases/` |
74
76
 
75
77
  排障顺序:先看工具 isError 消息里的错误码与恢复动作(多数问题到此为止)→ 需要通道级细节再读当日 `pi-canvas-*.log`(marker 调用失败会带 action 名落日志)→ 数据疑义以 `events.jsonl` 为准核对。
package/src/index.ts CHANGED
@@ -46,6 +46,7 @@ export const CANVAS_AVAILABLE_TOOLS: ReadonlyArray<{ name: string; description:
46
46
  name: "canvas_enter",
47
47
  description:
48
48
  "Enter problem-solving-canvas mode: CREATE a canvas (pass statement + criterias + scope — the root problem triple) or OPEN an existing one (pass canvasId from canvas_list). " +
49
+ "Canvases belong to the session that created them (session-scoped isolation): opening another session's canvas is rejected with forbidden — ask the user to switch to the owning session. " +
49
50
  "Use when the user asks to plan / think through / break down a problem before execution: the canvas is a human-agent co-edited argument map the user watches and rules on in the taiji GUI. " +
50
51
  "After entering, the user's GUI decisions (selections / vetoes / comments) arrive as canvas event notifications — always canvas_read the current state before responding. " +
51
52
  "Requires the taiji desktop runtime (errors out in standalone pi).",
@@ -83,7 +84,8 @@ export const CANVAS_AVAILABLE_TOOLS: ReadonlyArray<{ name: string; description:
83
84
  {
84
85
  name: "canvas_list",
85
86
  description:
86
- "List all problem-solving canvases (id, name, statement, converged flag, open must-fix count, review status). " +
87
+ "List this session's problem-solving canvases (id, name, statement, converged flag, open must-fix count, review status). " +
88
+ "Canvases are session-scoped: only canvases created by the CURRENT session are returned. " +
87
89
  "The canvasId source for canvas_enter's open form. " +
88
90
  "Requires the taiji desktop runtime (errors out in standalone pi).",
89
91
  },
package/src/tool-enter.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  * canvas_enter —— 画布发现入口(设计 §3.1(2) 工具面)。
3
3
  *
4
4
  * 双形态:创建 {statement, criterias, scope} / 打开已有画布 {canvasId}(名称 → id
5
- * 解析不进契约,经 canvas_list 自决)。创建形态落 marker 'create'(runtime 在该
6
- * 通道 create 成功时一并登记 sessionId ↔ canvasId 绑定),打开形态落 marker
7
- * 'enter'(读全量 + 登记绑定)。
5
+ * 解析不进契约,经 canvas_list 自决)。创建形态落 marker 'create'(sessionId 为
6
+ * 归属,落盘路径即归属);打开形态落 marker 'enter'(读全量,归属校验在
7
+ * readState,非 owner → forbidden)。
8
8
  *
9
9
  * enter 引导协议:成功的结果文本包含「后续画布操作经 tool_search 检索 canvas_edit /
10
10
  * canvas_read / canvas_review / canvas_export」指引——deferred 工具须检索激活后