@plurnk/plurnk-agui 0.11.7 → 1.0.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 +8 -9
- package/dist/DaemonClient.d.ts +0 -9
- package/dist/DaemonClient.d.ts.map +0 -1
- package/dist/DaemonClient.js +0 -55
- package/dist/DaemonClient.js.map +0 -1
- package/dist/Server.d.ts +0 -10
- package/dist/Server.d.ts.map +0 -1
- package/dist/Server.js +0 -232
- package/dist/Server.js.map +0 -1
- package/dist/bin/serve.d.ts +0 -3
- package/dist/bin/serve.d.ts.map +0 -1
- package/dist/bin/serve.js +0 -9
- package/dist/bin/serve.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-agui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "The plurnk daemon's transport daughter — owns the client interface, serving AG-UI+ (the Agent-User Interaction Protocol + plurnk metadata extensions) as the sole client interaction surface. In-process module activated at the daemon's boot plug-point; any AG-UI frontend is a plurnk client.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"exports": {
|
|
12
12
|
".": {
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
|
+
"plurnk-dev": "./src/index.ts",
|
|
14
15
|
"default": "./dist/index.js"
|
|
15
16
|
},
|
|
16
17
|
"./package.json": "./package.json"
|
|
@@ -27,19 +28,17 @@
|
|
|
27
28
|
"scripts": {
|
|
28
29
|
"test": "npm run test:lint && npm run test:unit && npm run test:intg",
|
|
29
30
|
"test:lint": "tsc --noEmit",
|
|
30
|
-
"test:unit": "node --env-file-if-exists=.env.defaults --test src/*.test.ts",
|
|
31
|
-
"test:intg": "node --env-file-if-exists=.env.defaults --test test/intg/*.test.ts",
|
|
31
|
+
"test:unit": "node --conditions=plurnk-dev --env-file-if-exists=.env.defaults --test src/*.test.ts",
|
|
32
|
+
"test:intg": "node --conditions=plurnk-dev --env-file-if-exists=.env.defaults --test test/intg/*.test.ts",
|
|
32
33
|
"deps:fresh": "npm outdated",
|
|
33
|
-
"prepare": "git config core.hooksPath .githooks || true; npm run build",
|
|
34
34
|
"prepublishOnly": "npm test",
|
|
35
35
|
"build:dist": "tsc -p tsconfig.build.json",
|
|
36
|
-
"build": "npm run build:dist"
|
|
36
|
+
"build": "npm run build:dist",
|
|
37
|
+
"prepack": "npm run build"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@ag-ui/client": "0.0.57",
|
|
40
|
-
"@types/node": "^26.1.1",
|
|
41
41
|
"@types/ws": "8.18.1",
|
|
42
|
-
"typescript": "^7.0.2",
|
|
43
42
|
"ws": "8.21.0"
|
|
44
43
|
},
|
|
45
44
|
"keywords": [
|
|
@@ -60,7 +59,7 @@
|
|
|
60
59
|
"access": "public"
|
|
61
60
|
},
|
|
62
61
|
"dependencies": {
|
|
63
|
-
"@plurnk/plurnk-execs-mcp": "0.
|
|
64
|
-
"@plurnk/plurnk-grammar": "0.
|
|
62
|
+
"@plurnk/plurnk-execs-mcp": "1.0.1",
|
|
63
|
+
"@plurnk/plurnk-grammar": "1.0.1"
|
|
65
64
|
}
|
|
66
65
|
}
|
package/dist/DaemonClient.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export default class DaemonClient {
|
|
2
|
-
#private;
|
|
3
|
-
private constructor();
|
|
4
|
-
static connect(url: string): Promise<DaemonClient>;
|
|
5
|
-
call<T = unknown>(method: string, params?: object): Promise<T>;
|
|
6
|
-
on(method: string, fn: (params: unknown) => void): () => void;
|
|
7
|
-
close(): void;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=DaemonClient.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaemonClient.d.ts","sourceRoot":"","sources":["../src/DaemonClient.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,YAAY;;IAM7B,OAAO,eAeN;IAED,OAAa,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAOvD;IAED,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAMjE;IAED,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAK5D;IAED,KAAK,IAAI,IAAI,CAEZ;CACJ"}
|
package/dist/DaemonClient.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
// An ordinary client of the plurnk daemon's JSON-RPC-over-WebSocket wire — the same protocol
|
|
2
|
-
// the CLI/TUI/nvim clients speak. The bridge holds no state the daemon doesn't (§agui-daemon-client).
|
|
3
|
-
export default class DaemonClient {
|
|
4
|
-
#ws;
|
|
5
|
-
#nextId = 1;
|
|
6
|
-
#pending = new Map();
|
|
7
|
-
#listeners = new Map();
|
|
8
|
-
constructor(ws) {
|
|
9
|
-
this.#ws = ws;
|
|
10
|
-
ws.addEventListener("message", (ev) => {
|
|
11
|
-
const msg = JSON.parse(String(ev.data));
|
|
12
|
-
if (typeof msg.id === "number" && this.#pending.has(msg.id)) {
|
|
13
|
-
const waiter = this.#pending.get(msg.id);
|
|
14
|
-
this.#pending.delete(msg.id);
|
|
15
|
-
if (msg.error !== undefined)
|
|
16
|
-
waiter.reject(new Error(msg.error.message));
|
|
17
|
-
else
|
|
18
|
-
waiter.resolve(msg.result);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (typeof msg.method === "string") {
|
|
22
|
-
for (const fn of this.#listeners.get(msg.method) ?? [])
|
|
23
|
-
fn(msg.params);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
static async connect(url) {
|
|
28
|
-
const ws = new WebSocket(url);
|
|
29
|
-
await new Promise((resolve, reject) => {
|
|
30
|
-
ws.addEventListener("open", () => resolve(), { once: true });
|
|
31
|
-
ws.addEventListener("error", () => reject(new Error(`plurnk-agui: cannot reach the daemon at ${url} — is plurnk-service running?`)), { once: true });
|
|
32
|
-
});
|
|
33
|
-
return new DaemonClient(ws);
|
|
34
|
-
}
|
|
35
|
-
call(method, params = {}) {
|
|
36
|
-
const id = this.#nextId++;
|
|
37
|
-
return new Promise((resolve, reject) => {
|
|
38
|
-
this.#pending.set(id, { resolve: resolve, reject });
|
|
39
|
-
this.#ws.send(JSON.stringify({ jsonrpc: "2.0", id, method, params }));
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
on(method, fn) {
|
|
43
|
-
let set = this.#listeners.get(method);
|
|
44
|
-
if (set === undefined) {
|
|
45
|
-
set = new Set();
|
|
46
|
-
this.#listeners.set(method, set);
|
|
47
|
-
}
|
|
48
|
-
set.add(fn);
|
|
49
|
-
return () => { set.delete(fn); };
|
|
50
|
-
}
|
|
51
|
-
close() {
|
|
52
|
-
this.#ws.close();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=DaemonClient.js.map
|
package/dist/DaemonClient.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaemonClient.js","sourceRoot":"","sources":["../src/DaemonClient.ts"],"names":[],"mappings":"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"}
|
package/dist/Server.d.ts
DELETED
package/dist/Server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,OAAO,MAAM;;IAKvB,cAGC;IAEK,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAMtD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;CAkLJ"}
|
package/dist/Server.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
// The AG-UI face: POST / runs an agent turn and streams the projection as SSE until the loop
|
|
2
|
-
// terminates; POST /resolve answers a pending proposal (file edit, MCP auth, [300] question).
|
|
3
|
-
// An AG-UI threadId IS a plurnk session (`<prefix>-<threadId>`, created on first run, reattached
|
|
4
|
-
// after) — the daemon's extended context persists across AG-UI runs for free (§agui-thread-is-session).
|
|
5
|
-
var _a;
|
|
6
|
-
import { createServer } from "node:http";
|
|
7
|
-
import DaemonClient from "./DaemonClient.js";
|
|
8
|
-
import Translator from "./Translator.js";
|
|
9
|
-
const env = (name) => {
|
|
10
|
-
const v = process.env[name];
|
|
11
|
-
if (v === undefined || v.length === 0)
|
|
12
|
-
throw new Error(`plurnk-agui: ${name} must be set (see .env.example)`);
|
|
13
|
-
return v;
|
|
14
|
-
};
|
|
15
|
-
class Server {
|
|
16
|
-
#http;
|
|
17
|
-
#daemonUrl;
|
|
18
|
-
#threads = new Map();
|
|
19
|
-
constructor() {
|
|
20
|
-
this.#daemonUrl = env("PLURNK_AGUI_DAEMON_URL");
|
|
21
|
-
this.#http = createServer((req, res) => { void this.#route(req, res); });
|
|
22
|
-
}
|
|
23
|
-
async listen() {
|
|
24
|
-
const host = env("PLURNK_AGUI_HOST");
|
|
25
|
-
await new Promise((resolve) => this.#http.listen(Number(env("PLURNK_AGUI_PORT")), host, resolve));
|
|
26
|
-
const addr = this.#http.address();
|
|
27
|
-
if (addr === null || typeof addr === "string")
|
|
28
|
-
throw new Error("plurnk-agui: listener bound no TCP address");
|
|
29
|
-
return { host, port: addr.port }; // the BOUND port — PORT=0 (ephemeral) reports the real one
|
|
30
|
-
}
|
|
31
|
-
async close() {
|
|
32
|
-
for (const t of this.#threads.values())
|
|
33
|
-
t.client.close();
|
|
34
|
-
await new Promise((resolve, reject) => this.#http.close((e) => (e ? reject(e) : resolve())));
|
|
35
|
-
}
|
|
36
|
-
async #route(req, res) {
|
|
37
|
-
try {
|
|
38
|
-
// CORS: browser frontends (the demo page, CopilotKit dev servers) POST cross-origin.
|
|
39
|
-
res.setHeader("access-control-allow-origin", "*");
|
|
40
|
-
res.setHeader("access-control-allow-headers", "content-type, authorization");
|
|
41
|
-
if (req.method === "OPTIONS") {
|
|
42
|
-
res.writeHead(204).end();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
// §agui-auth — empty token = local trust (loopback bind is the boundary, the daemon's
|
|
46
|
-
// own posture); set = every POST carries the bearer, checked before any body read.
|
|
47
|
-
const token = process.env.PLURNK_AGUI_TOKEN ?? "";
|
|
48
|
-
if (token.length > 0 && req.headers.authorization !== `Bearer ${token}`) {
|
|
49
|
-
res.writeHead(401, { "content-type": "application/json" }).end(JSON.stringify({ error: "bearer token required" }));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (req.method === "POST" && (req.url === "/" || req.url === "/agui"))
|
|
53
|
-
return await this.#run(req, res);
|
|
54
|
-
if (req.method === "POST" && req.url === "/resolve")
|
|
55
|
-
return await this.#resolve(req, res);
|
|
56
|
-
if (req.method === "POST" && req.url === "/plurnk/rpc")
|
|
57
|
-
return await this.#rpc(req, res);
|
|
58
|
-
res.writeHead(404, { "content-type": "application/json" }).end(JSON.stringify({ error: "POST / (AG-UI run) or POST /resolve" }));
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
62
|
-
if (!res.headersSent)
|
|
63
|
-
res.writeHead(500, { "content-type": "application/json" });
|
|
64
|
-
res.end(JSON.stringify({ error: message }));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async #thread(threadId, createOptions) {
|
|
68
|
-
const existing = this.#threads.get(threadId);
|
|
69
|
-
if (existing !== undefined)
|
|
70
|
-
return existing;
|
|
71
|
-
const client = await DaemonClient.connect(this.#daemonUrl);
|
|
72
|
-
const name = `${env("PLURNK_AGUI_SESSION_PREFIX")}-${threadId}`;
|
|
73
|
-
// Reattach by NAME via session.list → attach by ID (the daemon's real contract — the
|
|
74
|
-
// earlier attach-by-name silently created a fresh session every bridge restart, found
|
|
75
|
-
// by the service's own the service SPEC proposal-list contract e2e). A rediscovered thread is a REATTACH.
|
|
76
|
-
const listed = await client.call("session.list", {});
|
|
77
|
-
const known = Array.isArray(listed?.sessions) ? listed.sessions.find((x) => x.name === name) : undefined;
|
|
78
|
-
let sessionId;
|
|
79
|
-
let reattached = false;
|
|
80
|
-
let modelRunId = null;
|
|
81
|
-
if (known !== undefined) {
|
|
82
|
-
await client.call("session.attach", { id: known.id });
|
|
83
|
-
sessionId = known.id;
|
|
84
|
-
reattached = true;
|
|
85
|
-
const runs = await client.call("session.runs", {}).catch(() => null);
|
|
86
|
-
modelRunId = (Array.isArray(runs?.runs) ? runs.runs.find((r) => r.name.startsWith("model-"))?.id : undefined) ?? null;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
// §agui-forwarded-props — RunAgentInput.forwardedProps.plurnk is the spec's sanctioned
|
|
90
|
-
// side-channel: session.create options (projectRoot, constraints, settings) ride the
|
|
91
|
-
// thread's FIRST run. The bridge's questions default composes UNDER an explicit one.
|
|
92
|
-
const opts = createOptions ?? {};
|
|
93
|
-
const settings = { ...(env("PLURNK_AGUI_QUESTIONS") === "1" ? { questions: true } : {}), ...(typeof opts.settings === "object" && opts.settings !== null ? opts.settings : {}) };
|
|
94
|
-
const created = await client.call("session.create", {
|
|
95
|
-
name, settings,
|
|
96
|
-
...(typeof opts.projectRoot === "string" ? { projectRoot: opts.projectRoot } : {}),
|
|
97
|
-
...(Array.isArray(opts.constraints) ? { constraints: opts.constraints } : {}),
|
|
98
|
-
});
|
|
99
|
-
sessionId = created.id;
|
|
100
|
-
// created.runId is the CLIENT run — the model run is born at loop.run's drain;
|
|
101
|
-
// the Translator lazily adopts the first model-origin row's run (§agui-topology-scope).
|
|
102
|
-
}
|
|
103
|
-
const thread = { sessionId, client, reattached, modelRunId };
|
|
104
|
-
this.#threads.set(threadId, thread);
|
|
105
|
-
return thread;
|
|
106
|
-
}
|
|
107
|
-
async #run(req, res) {
|
|
108
|
-
const input = JSON.parse(await _a.#body(req));
|
|
109
|
-
if (typeof input.threadId !== "string" || input.threadId.length === 0)
|
|
110
|
-
throw new Error("RunAgentInput.threadId required");
|
|
111
|
-
const lastUser = [...(input.messages ?? [])].reverse().find((m) => m.role === "user");
|
|
112
|
-
if (lastUser?.content === undefined || lastUser.content.length === 0)
|
|
113
|
-
throw new Error("RunAgentInput.messages must carry a user message");
|
|
114
|
-
const forwarded = input.forwardedProps?.plurnk;
|
|
115
|
-
const thread = await this.#thread(input.threadId, forwarded);
|
|
116
|
-
const client = thread.client;
|
|
117
|
-
const translator = new Translator({ threadId: input.threadId, runId: input.runId ?? crypto.randomUUID(), modelRunId: thread.modelRunId, sessionId: thread.sessionId });
|
|
118
|
-
res.writeHead(200, {
|
|
119
|
-
"content-type": "text/event-stream",
|
|
120
|
-
"cache-control": "no-cache",
|
|
121
|
-
"connection": "keep-alive",
|
|
122
|
-
});
|
|
123
|
-
const emit = (events) => {
|
|
124
|
-
for (const e of events)
|
|
125
|
-
res.write(`data: ${JSON.stringify(e)}\n\n`);
|
|
126
|
-
};
|
|
127
|
-
// The state gauge starts TRUE: the daemon's providers.list carries the effective prompt
|
|
128
|
-
// budget (service#345) — passed through verbatim, never recomputed.
|
|
129
|
-
const providers = await client.call("providers.list", {}).catch(() => null);
|
|
130
|
-
const active = Array.isArray(providers?.aliases) ? providers.aliases.find((a) => a.active) ?? null : null;
|
|
131
|
-
emit(translator.runStarted(active === null ? undefined : { budget: { contextSize: active.contextSize }, model: { alias: active.alias, id: active.model } }));
|
|
132
|
-
// A reattached thread starts ORIENTED, not blind: the session log replays as
|
|
133
|
-
// MESSAGES_SNAPSHOT (§agui-replay) and any stopped world re-surfaces immediately —
|
|
134
|
-
// the indefinite-wait ruling's client half (a days-old question is discoverable).
|
|
135
|
-
if (thread.reattached) {
|
|
136
|
-
// The conversation spine lives in the MODEL run (service #214) — log.read defaults
|
|
137
|
-
// to the connection's own run, so resolve the model run via session.runs first.
|
|
138
|
-
const runs = await client.call("session.runs", {}).catch(() => null);
|
|
139
|
-
const modelRun = Array.isArray(runs?.runs) ? runs.runs.find((r) => r.name.startsWith("model-")) : undefined;
|
|
140
|
-
const history = modelRun === undefined ? null : await client.call("log.read", { runId: modelRun.id, limit: 1000 }).catch(() => null);
|
|
141
|
-
if (history !== null && Array.isArray(history.entries))
|
|
142
|
-
emit(translator.replay(history.entries));
|
|
143
|
-
const pending = await client.call("proposal.list", {}).catch(() => null);
|
|
144
|
-
if (pending !== null && Array.isArray(pending.proposals)) {
|
|
145
|
-
for (const pr of pending.proposals)
|
|
146
|
-
emit([{ type: "CUSTOM", name: "plurnk.proposal", value: pr }]);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
const done = new Promise((resolve) => {
|
|
150
|
-
const offEntry = client.on("log/entry", (p) => emit(translator.logEntry(p)));
|
|
151
|
-
const offProposal = client.on("loop/proposal", (p) => emit(translator.proposal(p)));
|
|
152
|
-
// The daemon's telemetry notification is `telemetry/event` (SPEC §8.6) — the
|
|
153
|
-
// earlier `loop/telemetry` subscription matched nothing, so plurnk.telemetry
|
|
154
|
-
// never fired for any bridge client.
|
|
155
|
-
// Project the EVENT, not the {loopId, event} envelope — consumers (WS TUI,
|
|
156
|
-
// CLI, the transport seam) read the TelemetryEvent directly.
|
|
157
|
-
const offTelemetry = client.on("telemetry/event", (p) => emit(translator.telemetry(p.event ?? p)));
|
|
158
|
-
const offQuiesced = client.on("loop/quiesced", (p) => emit([{ type: "CUSTOM", name: "plurnk.quiesced", value: p }]));
|
|
159
|
-
// The stream lifecycle rides ONE family channel: `stream/event` (the start
|
|
160
|
-
// line the TUI renders) AND `stream/concluded` both project to plurnk.stream;
|
|
161
|
-
// the payload self-discriminates (event carries `state`, concluded `closeStatus`).
|
|
162
|
-
const offStreamEvent = client.on("stream/event", (p) => emit([{ type: "CUSTOM", name: "plurnk.stream", value: p }]));
|
|
163
|
-
const offStream = client.on("stream/concluded", (p) => emit([{ type: "CUSTOM", name: "plurnk.stream", value: p }]));
|
|
164
|
-
const offTerm = client.on("loop/terminated", (p) => {
|
|
165
|
-
emit(translator.terminated(p));
|
|
166
|
-
offEntry();
|
|
167
|
-
offProposal();
|
|
168
|
-
offTelemetry();
|
|
169
|
-
offQuiesced();
|
|
170
|
-
offStreamEvent();
|
|
171
|
-
offStream();
|
|
172
|
-
offTerm();
|
|
173
|
-
resolve();
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
// Per-run knobs ride forwardedProps.plurnk (a family client's model switch,
|
|
177
|
-
// ask/act flags, maxTurns) and override the bridge's env defaults — so the TUI
|
|
178
|
-
// keeps /model + mode. Env is the floor when the client sends nothing.
|
|
179
|
-
const fwdFlags = typeof forwarded?.flags === "object" && forwarded.flags !== null ? forwarded.flags : {};
|
|
180
|
-
const ack = await client.call("loop.run", {
|
|
181
|
-
prompt: lastUser.content,
|
|
182
|
-
maxTurns: typeof forwarded?.maxTurns === "number" ? forwarded.maxTurns : Number(env("PLURNK_AGUI_MAX_TURNS")),
|
|
183
|
-
flags: { yolo: env("PLURNK_AGUI_YOLO") === "1", ...fwdFlags },
|
|
184
|
-
...(typeof forwarded?.alias === "string" ? { alias: forwarded.alias } : {}),
|
|
185
|
-
...(typeof forwarded?.model === "string" ? { model: forwarded.model } : {}),
|
|
186
|
-
});
|
|
187
|
-
// AG-UI cancellation: the frontend hanging up IS the abort signal — a dropped SSE
|
|
188
|
-
// stream cancels the loop rather than orphaning a run nobody is watching.
|
|
189
|
-
let finished = false;
|
|
190
|
-
req.on("close", () => {
|
|
191
|
-
if (!finished)
|
|
192
|
-
void client.call("loop.cancel", { loopId: ack.loopId }).catch(() => { });
|
|
193
|
-
});
|
|
194
|
-
await done;
|
|
195
|
-
finished = true;
|
|
196
|
-
res.end();
|
|
197
|
-
}
|
|
198
|
-
// §agui-management-plane — the charter's ONE escape hatch: AG-UI models the RUN plane;
|
|
199
|
-
// the workspace plane (sessions, entry CRUD, providers, auth) rides a boring JSON-RPC
|
|
200
|
-
// passthrough. {threadId, method, params} → the thread's own daemon connection (so session
|
|
201
|
-
// scoping is exactly the thread's), the daemon's response verbatim. The daemon's method
|
|
202
|
-
// registry is the contract — discover it via {method: "discover"}.
|
|
203
|
-
async #rpc(req, res) {
|
|
204
|
-
const p = JSON.parse(await _a.#body(req));
|
|
205
|
-
if (typeof p.threadId !== "string" || p.threadId.length === 0)
|
|
206
|
-
throw new Error("/plurnk/rpc requires threadId");
|
|
207
|
-
if (typeof p.method !== "string" || p.method.length === 0)
|
|
208
|
-
throw new Error("/plurnk/rpc requires method");
|
|
209
|
-
const thread = await this.#thread(p.threadId);
|
|
210
|
-
const result = await thread.client.call(p.method, p.params ?? {});
|
|
211
|
-
res.writeHead(200, { "content-type": "application/json" }).end(JSON.stringify({ result }));
|
|
212
|
-
}
|
|
213
|
-
async #resolve(req, res) {
|
|
214
|
-
const p = JSON.parse(await _a.#body(req));
|
|
215
|
-
const thread = this.#threads.get(p.threadId);
|
|
216
|
-
if (thread === undefined)
|
|
217
|
-
throw new Error(`unknown threadId '${p.threadId}' — resolve rides the thread that raised the proposal`);
|
|
218
|
-
const result = await thread.client.call("loop.resolve", { logEntryId: p.logEntryId, decision: p.decision, ...(p.body !== undefined ? { body: p.body } : {}) });
|
|
219
|
-
res.writeHead(200, { "content-type": "application/json" }).end(JSON.stringify(result ?? { ok: true }));
|
|
220
|
-
}
|
|
221
|
-
static #body(req) {
|
|
222
|
-
return new Promise((resolve, reject) => {
|
|
223
|
-
let data = "";
|
|
224
|
-
req.on("data", (c) => { data += c.toString(); });
|
|
225
|
-
req.on("end", () => resolve(data));
|
|
226
|
-
req.on("error", reject);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
_a = Server;
|
|
231
|
-
export default Server;
|
|
232
|
-
//# sourceMappingURL=Server.js.map
|
package/dist/Server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/serve.d.ts
DELETED
package/dist/bin/serve.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":""}
|
package/dist/bin/serve.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import Server from "../Server.js";
|
|
3
|
-
const server = new Server();
|
|
4
|
-
const { host, port } = await server.listen();
|
|
5
|
-
process.stdout.write(`plurnk-agui http://${host}:${port} → ${process.env.PLURNK_AGUI_DAEMON_URL}\n`);
|
|
6
|
-
for (const sig of ["SIGINT", "SIGTERM"]) {
|
|
7
|
-
process.on(sig, () => { void server.close().then(() => process.exit(0)); });
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=serve.js.map
|
package/dist/bin/serve.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;AAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,IAAI,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,CAAC;AACrG,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC"}
|