@muha-sdk/pi-adapter 0.0.0-stage → 0.1.13

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.
@@ -0,0 +1,8 @@
1
+ import type { AdapterTurnEvent } from "@muha-sdk/core/internal";
2
+ export declare class PiEvents {
3
+ #private;
4
+ readonly emit: (event: AdapterTurnEvent) => void;
5
+ constructor(emit: (event: AdapterTurnEvent) => void);
6
+ receive(raw: unknown): void;
7
+ }
8
+ //# sourceMappingURL=pi-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-events.d.ts","sourceRoot":"","sources":["../src/pi-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAehE,qBAAa,QAAQ;;IAKP,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;gBAAvC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;IAE5D,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;CAkC5B"}
@@ -0,0 +1,67 @@
1
+ function object(value) {
2
+ if (!value || typeof value !== "object" || Array.isArray(value))
3
+ throw new Error("Invalid Pi event object");
4
+ return value;
5
+ }
6
+ function string(value) {
7
+ if (typeof value !== "string")
8
+ throw new Error("Invalid Pi event string");
9
+ return value;
10
+ }
11
+ function tokens(value) {
12
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)
13
+ throw new Error("Invalid Pi usage");
14
+ return value;
15
+ }
16
+ export class PiEvents {
17
+ emit;
18
+ #message = 0;
19
+ #input = 0;
20
+ #output = 0;
21
+ #cached = 0;
22
+ constructor(emit) {
23
+ this.emit = emit;
24
+ }
25
+ receive(raw) {
26
+ const event = object(raw);
27
+ if (event.type === "message_start" && object(event.message).role === "assistant") {
28
+ this.#message++;
29
+ this.emit({ type: "assistant.message.started", nativeMessageId: String(this.#message) });
30
+ }
31
+ else if (event.type === "message_update") {
32
+ const update = object(event.assistantMessageEvent);
33
+ if ((update.type === "text_delta" || update.type === "thinking_delta") && update.delta) {
34
+ this.emit({ type: update.type === "text_delta" ? "assistant.message.delta" : "assistant.reasoning.delta",
35
+ nativeMessageId: String(this.#message), delta: string(update.delta) });
36
+ }
37
+ }
38
+ else if (event.type === "message_end" && object(event.message).role === "assistant") {
39
+ const { content, usage } = object(event.message);
40
+ if (!Array.isArray(content))
41
+ throw new Error("Invalid Pi Assistant Message content");
42
+ this.emit({ type: "assistant.message.completed", nativeMessageId: String(this.#message),
43
+ text: content.map(object).filter(part => part.type === "text").map(part => string(part.text)).join("") });
44
+ if (usage) {
45
+ const native = object(usage);
46
+ this.#input += tokens(native.input) + tokens(native.cacheRead) + tokens(native.cacheWrite);
47
+ this.#output += tokens(native.output);
48
+ this.#cached += tokens(native.cacheRead);
49
+ this.emit({ type: "usage.updated", usage: {
50
+ inputTokens: this.#input, outputTokens: this.#output, cachedInputTokens: this.#cached,
51
+ } });
52
+ }
53
+ }
54
+ else if (event.type === "tool_execution_start") {
55
+ this.emit({ type: "tool.started", nativeToolCallId: string(event.toolCallId), toolName: string(event.toolName), input: event.args });
56
+ }
57
+ else if (event.type === "tool_execution_update") {
58
+ this.emit({ type: "tool.updated", nativeToolCallId: string(event.toolCallId), update: event.partialResult ?? null });
59
+ }
60
+ else if (event.type === "tool_execution_end") {
61
+ if (typeof event.isError !== "boolean")
62
+ throw new Error("Invalid Pi tool result status");
63
+ this.emit({ type: "tool.completed", nativeToolCallId: string(event.toolCallId), output: event.result ?? null, isError: event.isError });
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=pi-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-events.js","sourceRoot":"","sources":["../src/pi-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AdapterTurnInput } from "@muha-sdk/core/internal";
2
+ export declare function piInput(input: readonly AdapterTurnInput[]): Promise<unknown[]>;
3
+ //# sourceMappingURL=pi-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-input.d.ts","sourceRoot":"","sources":["../src/pi-input.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAYhE,wBAAsB,OAAO,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAWpF"}
@@ -0,0 +1,33 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { MuhaError } from "@muha-sdk/core";
3
+ function invalid(message) { throw new MuhaError({ code: "INVALID_INPUT", message }); }
4
+ function mediaType(bytes) {
5
+ if (bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])))
6
+ return "image/png";
7
+ if (bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255)
8
+ return "image/jpeg";
9
+ if (bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP")
10
+ return "image/webp";
11
+ if (["GIF87a", "GIF89a"].includes(bytes.toString("ascii", 0, 6)))
12
+ return "image/gif";
13
+ return invalid("Pi image file became invalid before native acceptance");
14
+ }
15
+ export async function piInput(input) {
16
+ return Promise.all(input.map(async (part) => {
17
+ if (part.type === "text")
18
+ return { type: "text", text: part.text };
19
+ if (part.source.type === "base64")
20
+ return { type: "image", mimeType: part.source.mediaType, data: part.source.data };
21
+ let bytes;
22
+ try {
23
+ bytes = await readFile(part.source.path);
24
+ }
25
+ catch {
26
+ return invalid("Pi image file became unreadable before native acceptance");
27
+ }
28
+ // Snapshot verified bytes for IPC: subsequent file changes cannot alter
29
+ // the content received by the SDK after Muha accepts this input.
30
+ return { type: "image", mimeType: mediaType(bytes), data: bytes.toString("base64") };
31
+ }));
32
+ }
33
+ //# sourceMappingURL=pi-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-input.js","sourceRoot":"","sources":["../src/pi-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,SAAS,OAAO,CAAC,OAAe,IAAW,MAAM,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAErG,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACpG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC;IAClF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC/G,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACrF,OAAO,OAAO,CAAC,uDAAuD,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAkC;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrH,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QACjD,MAAM,CAAC;YAAC,OAAO,OAAO,CAAC,0DAA0D,CAAC,CAAC;QAAC,CAAC;QACrF,wEAAwE;QACxE,iEAAiE;QACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvF,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export declare class PiOwnedWorker {
3
+ #private;
4
+ readonly shutdownMs: number;
5
+ readonly onLoss: (message: string) => void;
6
+ readonly child: ChildProcess;
7
+ readonly exited: Promise<void>;
8
+ constructor(env: NodeJS.ProcessEnv, shutdownMs: number, onLoss: (message: string) => void);
9
+ close(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=pi-owned-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-owned-worker.d.ts","sourceRoot":"","sources":["../src/pi-owned-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQ9D,qBAAa,aAAa;;IAQY,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC7D,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAR5C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAMnB,GAAG,EAAE,MAAM,CAAC,UAAU,EAAW,UAAU,EAAE,MAAM,EACpD,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAoD5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA2BvB"}
@@ -0,0 +1,113 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createInterface } from "node:readline";
3
+ import { fileURLToPath } from "node:url";
4
+ // The exact Core dependency ships this private, qualified Linux subreaper.
5
+ // fd3 carries ownership control; fd4 carries Node's unchanged SDK IPC protocol.
6
+ // Kernel adoption covers children born before the SDK can report their PID.
7
+ export class PiOwnedWorker {
8
+ shutdownMs;
9
+ onLoss;
10
+ child;
11
+ exited;
12
+ #control;
13
+ #closing;
14
+ #reaped = false;
15
+ #lossReported = false;
16
+ constructor(env, shutdownMs, onLoss) {
17
+ this.shutdownMs = shutdownMs;
18
+ this.onLoss = onLoss;
19
+ const supervisor = new URL("./acp-supervisor", import.meta.resolve("@muha-sdk/core"));
20
+ this.child = spawn(fileURLToPath(supervisor), [String(Math.min(1000, Math.floor(shutdownMs / 4))), process.execPath,
21
+ fileURLToPath(new URL("./sdk-worker.mjs", import.meta.url))], { env, stdio: ["ignore", "ignore", "ignore", "pipe", "ipc"], serialization: "json" });
22
+ this.#control = this.child.stdio[3];
23
+ const lose = (message) => {
24
+ if (!this.#closing && !this.#lossReported) {
25
+ this.#lossReported = true;
26
+ this.onLoss(message);
27
+ }
28
+ };
29
+ this.#control.on("error", () => lose("Pi ownership channel failed"));
30
+ const lines = createInterface({ input: this.#control });
31
+ lines.on("error", () => lose("Pi ownership reader failed"));
32
+ lines.on("line", line => {
33
+ try {
34
+ const event = JSON.parse(line);
35
+ if (event.type === "ready") {
36
+ if (!this.#closing)
37
+ this.#control.write("go\n");
38
+ }
39
+ else if (event.type === "closed") {
40
+ this.#reaped = event.noChildren === true && event.cleanupError === false;
41
+ }
42
+ else if (event.type === "error") {
43
+ lose(`Pi supervisor failed during ${String(event.operation)} (${String(event.errno)})`);
44
+ }
45
+ else if (!["spawned", "nativeExit", "closing"].includes(String(event.type))) {
46
+ lose("Invalid Pi ownership response");
47
+ }
48
+ }
49
+ catch {
50
+ lose("Invalid Pi ownership response");
51
+ }
52
+ });
53
+ this.exited = new Promise((resolve, reject) => {
54
+ this.child.once("error", () => {
55
+ lose("Pi ownership helper could not start");
56
+ reject(new Error("Pi ownership helper could not start"));
57
+ });
58
+ this.child.once("exit", (code, signal) => {
59
+ if (code !== 0 || signal !== null) {
60
+ const message = "Pi supervisor exited without proving descendant cleanup";
61
+ lose(message);
62
+ reject(new Error(message));
63
+ }
64
+ });
65
+ this.child.once("close", (code, signal) => {
66
+ // The unchanged helper exits zero only after proving ECHILD.
67
+ if (code === 0 && signal === null)
68
+ this.#reaped = true;
69
+ if (this.#reaped)
70
+ resolve();
71
+ else
72
+ reject(new Error("Pi supervisor exited without proving descendant cleanup"));
73
+ });
74
+ });
75
+ void this.exited.catch(() => { });
76
+ }
77
+ close() {
78
+ if (this.#closing)
79
+ return this.#closing;
80
+ // First allow the SDK's normal abort/dispose path. An unresponsive SDK is
81
+ // then terminated by its independent owner, which also adopts late forks.
82
+ this.#closing = new Promise((resolve, reject) => {
83
+ const force = setTimeout(() => {
84
+ if (!this.#reaped && !this.#control.destroyed)
85
+ this.#control.write("close\n");
86
+ }, Math.floor(this.shutdownMs / 2));
87
+ const deadline = setTimeout(() => {
88
+ clearTimeout(force);
89
+ this.child.kill("SIGKILL");
90
+ this.#release();
91
+ reject(new Error("Pi descendant cleanup timed out"));
92
+ }, this.shutdownMs);
93
+ this.exited.then(() => {
94
+ clearTimeout(force);
95
+ clearTimeout(deadline);
96
+ this.#release();
97
+ resolve();
98
+ }, error => {
99
+ clearTimeout(force);
100
+ clearTimeout(deadline);
101
+ this.#release();
102
+ reject(error);
103
+ });
104
+ });
105
+ return this.#closing;
106
+ }
107
+ #release() {
108
+ this.#control.destroy();
109
+ if (this.child.connected)
110
+ this.child.disconnect();
111
+ }
112
+ }
113
+ //# sourceMappingURL=pi-owned-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-owned-worker.js","sourceRoot":"","sources":["../src/pi-owned-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,2EAA2E;AAC3E,gFAAgF;AAChF,4EAA4E;AAC5E,MAAM,OAAO,aAAa;IAQqB;IAClC;IARF,KAAK,CAAe;IACpB,MAAM,CAAgB;IACtB,QAAQ,CAAS;IAC1B,QAAQ,CAA4B;IACpC,OAAO,GAAG,KAAK,CAAC;IAChB,aAAa,GAAG,KAAK,CAAC;IAEtB,YAAY,GAAsB,EAAW,UAAkB,EACpD,MAAiC;QADC,eAAU,GAAV,UAAU,CAAQ;QACpD,WAAM,GAAN,MAAM,CAA2B;QAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,EAC1C,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ;YACnE,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9D,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC;QAC9C,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC;gBAC3E,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1F,CAAC;qBAAM,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC9E,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC5B,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACvC,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAClC,MAAM,OAAO,GAAG,yDAAyD,CAAC;oBAC1E,IAAI,CAAC,OAAO,CAAC,CAAC;oBACd,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACxC,6DAA6D;gBAC7D,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI;oBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvD,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,CAAC;;oBACvB,MAAM,CAAC,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,0EAA0E;QAC1E,0EAA0E;QAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;oBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAChF,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;YAC1E,CAAC,EAAE,KAAK,CAAC,EAAE;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { type OfficialAdapterOptions } from "@muha-sdk/core";
2
+ import type { AdapterCreateSessionOptions, AdapterResumeSessionOptions, AdapterSession, AdapterListedSession, LiveHarnessAdapter, LiveHarnessAdapterContext } from "@muha-sdk/core/internal";
3
+ export declare class PiProcess implements LiveHarnessAdapter {
4
+ #private;
5
+ readonly options: OfficialAdapterOptions;
6
+ readonly context: LiveHarnessAdapterContext;
7
+ readonly kind = "pi";
8
+ readonly route: "native";
9
+ constructor(options: OfficialAdapterOptions, context: LiveHarnessAdapterContext);
10
+ initialize(): Promise<void>;
11
+ createSession(options: AdapterCreateSessionOptions): Promise<AdapterSession>;
12
+ resumeSession(options: AdapterResumeSessionOptions): Promise<AdapterSession>;
13
+ listSessions(workspacePath: string): Promise<readonly AdapterListedSession[]>;
14
+ close(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=pi-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-process.d.ts","sourceRoot":"","sources":["../src/pi-process.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoC,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,KAAK,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,cAAc,EACnC,oBAAoB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAMxJ,qBAAa,SAAU,YAAW,kBAAkB;;IAKtC,QAAQ,CAAC,OAAO,EAAE,sBAAsB;IAAE,QAAQ,CAAC,OAAO,EAAE,yBAAyB;IAJjG,QAAQ,CAAC,IAAI,QAAQ;IACrB,QAAQ,CAAC,KAAK,EAAG,QAAQ,CAAU;gBAGd,OAAO,EAAE,sBAAsB,EAAW,OAAO,EAAE,yBAAyB;IAQ3F,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,aAAa,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,CAAC;IAG5E,aAAa,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,CAAC;IAY5E,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAK7E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
@@ -0,0 +1,319 @@
1
+ import { PiOwnedWorker } from "./pi-owned-worker.js";
2
+ import { randomUUID } from "node:crypto";
3
+ import { PiEvents } from "./pi-events.js";
4
+ import { piInput } from "./pi-input.js";
5
+ import { MuhaError } from "@muha-sdk/core";
6
+ function failure(operation, message) {
7
+ return new MuhaError({ code: "HARNESS_ERROR", harness: "pi", operation, message });
8
+ }
9
+ export class PiProcess {
10
+ options;
11
+ context;
12
+ kind = "pi";
13
+ route = "native";
14
+ #workers = new Set();
15
+ #closed = false;
16
+ constructor(options, context) {
17
+ this.options = options;
18
+ this.context = context;
19
+ }
20
+ async #worker() {
21
+ if (this.#closed)
22
+ throw failure("initialize", "Pi Adapter is closed");
23
+ const worker = new PiWorker(this.options, this.context);
24
+ this.#workers.add(worker);
25
+ try {
26
+ await worker.request("ready", {});
27
+ return worker;
28
+ }
29
+ catch (error) {
30
+ await worker.close();
31
+ this.#workers.delete(worker);
32
+ throw error;
33
+ }
34
+ }
35
+ async initialize() {
36
+ const worker = await this.#worker();
37
+ await worker.close();
38
+ this.#workers.delete(worker);
39
+ }
40
+ async createSession(options) {
41
+ return this.#session("create", options);
42
+ }
43
+ async resumeSession(options) {
44
+ return this.#session("resume", options);
45
+ }
46
+ async #session(command, options) {
47
+ const worker = await this.#worker();
48
+ try {
49
+ const result = await worker.request(command, { ...options, shutdownTimeoutMs: this.options.shutdownTimeoutMs });
50
+ const session = new PiSession(worker, result, () => this.#workers.delete(worker));
51
+ worker.session = session;
52
+ return session;
53
+ }
54
+ catch (error) {
55
+ await worker.close();
56
+ this.#workers.delete(worker);
57
+ throw error;
58
+ }
59
+ }
60
+ async listSessions(workspacePath) {
61
+ const worker = await this.#worker();
62
+ try {
63
+ return await worker.request("list", { workspacePath });
64
+ }
65
+ finally {
66
+ await worker.close();
67
+ this.#workers.delete(worker);
68
+ }
69
+ }
70
+ async close() {
71
+ this.#closed = true;
72
+ await Promise.all([...this.#workers].map(worker => worker.close()));
73
+ this.#workers.clear();
74
+ }
75
+ }
76
+ class PiWorker {
77
+ options;
78
+ context;
79
+ #child;
80
+ #pending = new Map();
81
+ #exited;
82
+ #owner;
83
+ #closing;
84
+ #queue = Promise.resolve();
85
+ #lostReported = false;
86
+ #protocolMessage;
87
+ session;
88
+ turn;
89
+ constructor(options, context) {
90
+ this.options = options;
91
+ this.context = context;
92
+ const env = { ...process.env };
93
+ for (const [key, value] of Object.entries(options.env ?? {})) {
94
+ if (value === undefined)
95
+ delete env[key];
96
+ else
97
+ env[key] = value;
98
+ }
99
+ this.#owner = new PiOwnedWorker(env, this.options.shutdownTimeoutMs ?? 5000, message => this.#lost(message));
100
+ this.#child = this.#owner.child;
101
+ this.#exited = this.#owner.exited.then(() => {
102
+ if (!this.#closing)
103
+ this.#lost("Pi SDK process exited unexpectedly");
104
+ });
105
+ void this.#exited.catch(() => { });
106
+ this.#child.on("error", error => this.#lost(error.message));
107
+ this.#child.on("disconnect", () => { if (!this.#closing)
108
+ this.#lost("Pi SDK control channel was lost"); });
109
+ this.#child.on("message", message => {
110
+ this.#queue = this.#queue.then(() => this.#receive(message)).catch(error => this.#failProtocol(error));
111
+ });
112
+ }
113
+ #failProtocol(cause) {
114
+ const data = cause instanceof MuhaError ? cause.data : cause;
115
+ if (data && typeof data === "object" && "code" in data && data.code === "EVENT_STORE_ERROR")
116
+ return;
117
+ if (this.#protocolMessage !== undefined || this.#lostReported)
118
+ return;
119
+ this.#protocolMessage = cause instanceof Error ? cause.message : "Invalid Pi SDK control output";
120
+ if (this.session)
121
+ this.session.closed = true;
122
+ // Quarantine this Session through deliberate, bounded shutdown before
123
+ // publishing its protocol failure. Do not label valid process exit during
124
+ // that shutdown as unexpected loss, or retry malformed protocol behavior.
125
+ void this.close().catch(error => this.#lost(String(error)));
126
+ }
127
+ #lost(message) {
128
+ if (this.#lostReported)
129
+ return;
130
+ this.#lostReported = true;
131
+ const error = this.#protocolMessage === undefined ? failure("startTurn", message)
132
+ : new MuhaError({ code: "ADAPTER_PROTOCOL_ERROR", harness: "pi", message: this.#protocolMessage });
133
+ for (const pending of this.#pending.values()) {
134
+ clearTimeout(pending.timer);
135
+ pending.reject(this.#protocolMessage === undefined ? failure(pending.operation, message) : error);
136
+ }
137
+ this.#pending.clear();
138
+ if (this.#protocolMessage !== undefined) {
139
+ this.turn?.finish({ type: "adapter.protocolError", message: this.#protocolMessage });
140
+ return;
141
+ }
142
+ this.turn?.finish({ type: "turn.failed", error: error.data });
143
+ if (!this.#closing)
144
+ this.context.reportFatalError(error.data, this.session ? [this.session] : []);
145
+ }
146
+ async #receive(raw) {
147
+ if (raw === null || typeof raw !== "object")
148
+ throw new Error("Malformed Pi SDK control message");
149
+ const message = raw;
150
+ // Quarantine stops public normalization, not native evidence retention.
151
+ // SDK abort/shutdown callbacks can still arrive during bounded close.
152
+ if (message.type === "native") {
153
+ await this.context.recordNativeEvent("pi", { source: "AgentSession.subscribe", payload: message.event });
154
+ if (this.#protocolMessage === undefined)
155
+ this.turn?.nativeEvents.receive(message.event);
156
+ return;
157
+ }
158
+ if (message.type === "diagnostic") {
159
+ if (typeof message.source !== "string" || !["SessionManager.list", "createAgentSession.modelFallbackMessage",
160
+ "createAgentSession.extensionsResult.errors", "AgentSession.bindExtensions.onError"].includes(message.source)) {
161
+ throw new Error("Unknown Pi SDK diagnostic source");
162
+ }
163
+ await this.context.recordNativeEvent("pi", { source: message.source, payload: message.payload });
164
+ return;
165
+ }
166
+ if (this.#protocolMessage !== undefined)
167
+ return;
168
+ if (message.type === "reply") {
169
+ const pending = this.#pending.get(String(message.id));
170
+ if (!pending)
171
+ throw new Error("Unknown Pi command correlation");
172
+ clearTimeout(pending.timer);
173
+ this.#pending.delete(String(message.id));
174
+ if (message.error) {
175
+ if (message.protocolError === true)
176
+ pending.reject(new MuhaError({ code: "ADAPTER_PROTOCOL_ERROR", harness: "pi", message: String(message.error) }));
177
+ else
178
+ pending.reject(new MuhaError({ code: "HARNESS_ERROR", harness: "pi", operation: pending.operation,
179
+ message: String(message.error), ...(typeof message.nativeCode === "string" ? { nativeCode: message.nativeCode } : {}) }));
180
+ }
181
+ else
182
+ pending.resolve(message.value);
183
+ return;
184
+ }
185
+ const turn = this.turn;
186
+ if (message.type === "settled" && turn && turn.nativeTurnId === message.turnId) {
187
+ if (message.error)
188
+ turn.finish({ type: "turn.failed", error: failure("startTurn", String(message.error)).data });
189
+ else if (message.interrupted)
190
+ turn.finish({ type: "turn.interrupted" });
191
+ else if (typeof message.text === "string") {
192
+ turn.finish({ type: "turn.completed" });
193
+ }
194
+ else
195
+ turn.finish({ type: "adapter.protocolError", message: "Pi completed without a final Assistant Message" });
196
+ this.turn = undefined;
197
+ return;
198
+ }
199
+ throw new Error("Unknown Pi SDK message");
200
+ }
201
+ request(command, args) {
202
+ return new Promise((resolve, reject) => {
203
+ if (this.#closing || this.#lostReported || !this.#child.connected) {
204
+ reject(failure("initialize", "Pi SDK process is unavailable"));
205
+ return;
206
+ }
207
+ const id = randomUUID();
208
+ const operation = command === "create" ? "createSession"
209
+ : command === "resume" ? "resumeSession" : command === "list" ? "listSessions"
210
+ : command === "prompt" ? "startTurn" : command === "setModel" ? "setModel"
211
+ : command === "setEffort" ? "setEffort" : command === "abort" ? "interruptTurn" : "initialize";
212
+ // Only SDK startup uses the Registration startup bound. Once ready,
213
+ // command acknowledgements remain under Core's existing watchdog.
214
+ const timer = command === "ready" ? setTimeout(() => {
215
+ this.#pending.delete(id);
216
+ reject(failure(operation, `Pi SDK ${command} timed out`));
217
+ }, this.options.startupTimeoutMs ?? 10000) : undefined;
218
+ this.#pending.set(id, { operation, resolve, reject, timer });
219
+ this.#child.send({ id, command, args }, error => { if (error)
220
+ this.#lost(error.message); });
221
+ });
222
+ }
223
+ close() {
224
+ return this.#closing ??= (async () => {
225
+ try {
226
+ if (this.#child.connected)
227
+ this.#child.send({ command: "close" });
228
+ await this.#owner.close();
229
+ await this.#queue;
230
+ this.#lost("Pi SDK process closed");
231
+ }
232
+ catch (error) {
233
+ this.#lost(error instanceof Error ? error.message : String(error));
234
+ throw error;
235
+ }
236
+ })();
237
+ }
238
+ }
239
+ class PiSession {
240
+ worker;
241
+ release;
242
+ nativeSessionId;
243
+ model;
244
+ effort;
245
+ closed = false;
246
+ constructor(worker, result, release) {
247
+ this.worker = worker;
248
+ this.release = release;
249
+ this.nativeSessionId = result.id;
250
+ this.model = result.model;
251
+ this.effort = result.effort;
252
+ }
253
+ async startTurn(input) {
254
+ const nativeInput = await piInput(input);
255
+ const turn = new PiTurn(this.worker);
256
+ this.worker.turn = turn;
257
+ turn.push({ type: "turn.started" });
258
+ try {
259
+ await this.worker.request("prompt", { input: nativeInput, turnId: turn.nativeTurnId });
260
+ }
261
+ catch (error) {
262
+ this.worker.turn = undefined;
263
+ throw error;
264
+ }
265
+ return turn;
266
+ }
267
+ async setModel(model) {
268
+ const result = await this.worker.request("setModel", { model });
269
+ this.model = result.model;
270
+ this.effort = undefined;
271
+ }
272
+ async setEffort(effort) {
273
+ const result = await this.worker.request("setEffort", { effort });
274
+ this.effort = result.effort;
275
+ }
276
+ async close() {
277
+ this.closed = true;
278
+ try {
279
+ await this.worker.close();
280
+ }
281
+ finally {
282
+ this.release();
283
+ }
284
+ }
285
+ }
286
+ class PiTurn {
287
+ worker;
288
+ nativeTurnId = randomUUID();
289
+ nativeEvents = new PiEvents(event => this.push(event));
290
+ #events = [];
291
+ #wake;
292
+ #ended = false;
293
+ constructor(worker) {
294
+ this.worker = worker;
295
+ }
296
+ push(event) { if (!this.#ended) {
297
+ this.#events.push(event);
298
+ this.#wake?.();
299
+ } }
300
+ finish(event) { if (!this.#ended) {
301
+ this.push(event);
302
+ this.#ended = true;
303
+ } }
304
+ async *[Symbol.asyncIterator]() {
305
+ while (true) {
306
+ const event = this.#events.shift();
307
+ if (event)
308
+ yield event;
309
+ else if (this.#ended)
310
+ return;
311
+ else
312
+ await new Promise(resolve => { this.#wake = resolve; });
313
+ }
314
+ }
315
+ async interrupt() { await this.worker.request("abort", {}); }
316
+ async respondToApproval() { throw failure("respondToApproval", "Pi has no native Approval Request"); }
317
+ async respondToQuestion() { throw failure("respondToQuestion", "Pi Questions are not supported"); }
318
+ }
319
+ //# sourceMappingURL=pi-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-process.js","sourceRoot":"","sources":["../src/pi-process.ts"],"names":[],"mappings":"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"}