@zhushanwen/pi-pending-notifications 0.7.7 → 0.8.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/package.json +2 -2
- package/src/__tests__/pending-notifications.test.ts +4 -1
- package/src/index.ts +2 -2
- package/src/state.ts +10 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/pi-pending-notifications",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Cross-extension async operation registration/query mechanism for Pi.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"typebox": "*"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@zhushanwen/extension-protocol": "0.
|
|
36
|
+
"@zhushanwen/extension-protocol": "0.17.0",
|
|
37
37
|
"@zhushanwen/pi-extension-logger": "0.6.1"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
@@ -143,13 +143,16 @@ function makeUnregisterEntry(id: string): MockSessionEntry {
|
|
|
143
143
|
|
|
144
144
|
describe("state pure functions", () => {
|
|
145
145
|
describe("normalizePendingType", () => {
|
|
146
|
-
it("subagent/bash 直通,其余(缺失/未知/大小写不符)归 workflow", () => {
|
|
146
|
+
it("subagent/bash/session 直通,其余(缺失/未知/大小写不符)归 workflow", () => {
|
|
147
147
|
expect(normalizePendingType("subagent")).toBe("subagent");
|
|
148
148
|
expect(normalizePendingType("bash")).toBe("bash");
|
|
149
149
|
expect(normalizePendingType("workflow")).toBe("workflow");
|
|
150
|
+
// notify-once D6:词表真身在此(写侧归一成 workflow 会展示错标 [workflow])
|
|
151
|
+
expect(normalizePendingType("session")).toBe("session");
|
|
150
152
|
expect(normalizePendingType(undefined)).toBe("workflow");
|
|
151
153
|
expect(normalizePendingType("scheduler")).toBe("workflow");
|
|
152
154
|
expect(normalizePendingType("Bash")).toBe("workflow");
|
|
155
|
+
expect(normalizePendingType("Session")).toBe("workflow");
|
|
153
156
|
});
|
|
154
157
|
});
|
|
155
158
|
});
|
package/src/index.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* - subagent-core worker-message-pump.ts finalizeRun(reload-closeout D4:workflow
|
|
30
30
|
* run 终态注销直落,emit 发射点已删——reload 转换窗/factory 顺序窗内 emit 丢失
|
|
31
31
|
* 即注销 entry 永缺位);
|
|
32
|
-
* - subagent-core
|
|
32
|
+
* - subagent-core registry-reconcile/reconcile-sweep.ts(对账 sweep 补注销,对账走
|
|
33
33
|
* appendEntry 权威路径,不经 emit);
|
|
34
34
|
* - base-tool-enhance pending-reconcile.ts(session_start 对账,同款)。
|
|
35
35
|
*
|
|
@@ -225,7 +225,7 @@ export default function pendingNotificationsExtension(pi: ExtensionAPI): void {
|
|
|
225
225
|
name: "pending_notifications",
|
|
226
226
|
label: "Pending Notifications",
|
|
227
227
|
description:
|
|
228
|
-
"查询当前活跃的异步操作(workflow/subagent/bash
|
|
228
|
+
"查询当前活跃的异步操作(workflow/subagent/bash 后台任务与 session(managed session 债权))。action=count 返回数量;action=list 返回列表。状态由 EventBus + session entries 维护,无需手动注册。",
|
|
229
229
|
parameters: PendingNotificationsParams,
|
|
230
230
|
execute: async (_toolCallId: string, params: { action: "count" | "list" }, _signal: AbortSignal | undefined, _onUpdate: unknown, ctx: ExtensionContext): Promise<{ content: { type: "text"; text: string }[]; details: PendingToolDetails }> => {
|
|
231
231
|
// entries 现算(单一权威源):与 goal/subagent-workflow 同一原语。跨 session
|
package/src/state.ts
CHANGED
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
* 重建、TTL 与 shutdown 机器已删除)——「落盘了什么」与「查询到什么」共用同一份扫描,
|
|
17
17
|
* 结构上不可分歧
|
|
18
18
|
* - 纯函数,不依赖 Pi 运行时(ExtensionAPI/appendEntry),可独立单元测试
|
|
19
|
-
* - 差集刻意不校验 expiresAt
|
|
19
|
+
* - 差集刻意不校验 expiresAt(四类型(workflow/subagent/bash/session)全 process 档,长任务 >1h 仍应视为活跃,
|
|
20
20
|
* 对齐 goal continuation 守卫语义);历史 session 文件中遗留的带 expiresAt 的
|
|
21
21
|
* register entry 无需迁移——差集语义不读该键
|
|
22
22
|
*/
|
|
23
23
|
import { applyPendingDiff, scanPendingEntries } from "@zhushanwen/extension-protocol";
|
|
24
24
|
|
|
25
|
-
/** 异步操作类型(来源:workflow / subagent / bash
|
|
26
|
-
export type PendingType = "workflow" | "subagent" | "bash";
|
|
25
|
+
/** 异步操作类型(来源:workflow / subagent / bash 后台任务 / session 完成通知债权) */
|
|
26
|
+
export type PendingType = "workflow" | "subagent" | "bash" | "session";
|
|
27
27
|
|
|
28
28
|
/** 异步操作终态/过渡状态。active = 仍在运行;其他都视为已结束 */
|
|
29
29
|
export type PendingStatus = "active" | "completed" | "failed" | "cancelled" | "expired" | "time_limited" | "aborted";
|
|
@@ -46,7 +46,7 @@ export interface PendingEntry {
|
|
|
46
46
|
|
|
47
47
|
/** countActiveFromEntries 的过滤选项。 */
|
|
48
48
|
export interface CountActiveOptions {
|
|
49
|
-
/** 只统计指定类型的活跃 pending;缺省 = 全部类型(subagent + workflow + bash) */
|
|
49
|
+
/** 只统计指定类型的活跃 pending;缺省 = 全部类型(subagent + workflow + bash + session) */
|
|
50
50
|
types?: PendingType[];
|
|
51
51
|
/**
|
|
52
52
|
* [跨 session 残留过滤] 当前 session id(过滤基准):传入时按「register entry 的
|
|
@@ -143,18 +143,22 @@ function filterActiveRegisters(
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
/**
|
|
146
|
-
* type 归一化:subagent/bash 原样保留,其余(含缺失/未知值)归 workflow。
|
|
146
|
+
* type 归一化:subagent/bash/session 原样保留,其余(含缺失/未知值)归 workflow。
|
|
147
147
|
* state.ts 与 index.ts 两处归一化共用本函数,防止「写入侧直通、读取侧归并」漂移。
|
|
148
148
|
*
|
|
149
149
|
* [偏好显式化] 缺失/未知 type 默认归 workflow = 宁挂账不失明:未知类型照常进差集
|
|
150
150
|
* (守卫不因类型畸形失明),收口通道按类型分流——workflow / 畸形条目由 core 注册
|
|
151
151
|
* 对账 sweep 收口(查 WorkflowRun store:终态 ∪ state 文件不存在 → 补注销);bash 无
|
|
152
152
|
* record/store 可查——注册随进程退出注销,进程死亡窗口的丢失无补发通道,属显式
|
|
153
|
-
* 边界(每孤儿 bash 注册至多 1
|
|
153
|
+
* 边界(每孤儿 bash 注册至多 1 条静态虚报,熔断限损);session(notify-once D6
|
|
154
|
+
* 词表真身在此——否则写侧归一成 workflow 展示错标)由 watch 应答 unregister 与
|
|
155
|
+
* extension session_start 重启收口腿(D7③)收口,reconcile-sweep 对该 raw type
|
|
156
|
+
* 显式 skip(不入 workflow run-state 判据,防误销活跃 claim)。
|
|
154
157
|
*/
|
|
155
158
|
export function normalizePendingType(raw: unknown): PendingType {
|
|
156
159
|
if (raw === "subagent") return "subagent";
|
|
157
160
|
if (raw === "bash") return "bash";
|
|
161
|
+
if (raw === "session") return "session";
|
|
158
162
|
return "workflow";
|
|
159
163
|
}
|
|
160
164
|
|