@plurnk/plurnk-agui 3.1.0 → 4.0.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.
Files changed (74) hide show
  1. package/.env.defaults +17 -8
  2. package/README.md +33 -13
  3. package/SPEC.md +589 -268
  4. package/dist/AguiPlus.d.ts +24 -29
  5. package/dist/AguiPlus.d.ts.map +1 -1
  6. package/dist/AguiPlus.js +25 -36
  7. package/dist/AguiPlus.js.map +1 -1
  8. package/dist/AguiSurface.d.ts +1 -2
  9. package/dist/AguiSurface.d.ts.map +1 -1
  10. package/dist/AguiSurface.js +23 -16
  11. package/dist/AguiSurface.js.map +1 -1
  12. package/dist/AuthorizationDocuments.d.ts +33 -0
  13. package/dist/AuthorizationDocuments.d.ts.map +1 -0
  14. package/dist/AuthorizationDocuments.js +84 -0
  15. package/dist/AuthorizationDocuments.js.map +1 -0
  16. package/dist/BuiltinActions.d.ts +11 -5
  17. package/dist/BuiltinActions.d.ts.map +1 -1
  18. package/dist/BuiltinActions.js +73 -125
  19. package/dist/BuiltinActions.js.map +1 -1
  20. package/dist/EventRouter.d.ts +11 -3
  21. package/dist/EventRouter.d.ts.map +1 -1
  22. package/dist/EventRouter.js +17 -32
  23. package/dist/EventRouter.js.map +1 -1
  24. package/dist/MessageAddress.d.ts +7 -5
  25. package/dist/MessageAddress.d.ts.map +1 -1
  26. package/dist/MessageAddress.js +14 -12
  27. package/dist/MessageAddress.js.map +1 -1
  28. package/dist/Module.d.ts +5 -4
  29. package/dist/Module.d.ts.map +1 -1
  30. package/dist/Module.js +221 -82
  31. package/dist/Module.js.map +1 -1
  32. package/dist/OAuthServer.d.ts +30 -0
  33. package/dist/OAuthServer.d.ts.map +1 -0
  34. package/dist/OAuthServer.js +607 -0
  35. package/dist/OAuthServer.js.map +1 -0
  36. package/dist/Portal.d.ts +39 -9
  37. package/dist/Portal.d.ts.map +1 -1
  38. package/dist/Portal.js +414 -141
  39. package/dist/Portal.js.map +1 -1
  40. package/dist/ProposalHitl.d.ts +17 -4
  41. package/dist/ProposalHitl.d.ts.map +1 -1
  42. package/dist/ProposalHitl.js +30 -43
  43. package/dist/ProposalHitl.js.map +1 -1
  44. package/dist/RunHandler.d.ts +18 -8
  45. package/dist/RunHandler.d.ts.map +1 -1
  46. package/dist/RunHandler.js +214 -96
  47. package/dist/RunHandler.js.map +1 -1
  48. package/dist/ThreadAddress.d.ts +8 -0
  49. package/dist/ThreadAddress.d.ts.map +1 -0
  50. package/dist/ThreadAddress.js +18 -0
  51. package/dist/ThreadAddress.js.map +1 -0
  52. package/dist/Translator.d.ts +52 -2
  53. package/dist/Translator.d.ts.map +1 -1
  54. package/dist/Translator.js +390 -117
  55. package/dist/Translator.js.map +1 -1
  56. package/dist/client.d.ts +2 -0
  57. package/dist/client.d.ts.map +1 -0
  58. package/dist/client.js +2 -0
  59. package/dist/client.js.map +1 -0
  60. package/dist/config.d.ts +22 -2
  61. package/dist/config.d.ts.map +1 -1
  62. package/dist/config.js +65 -13
  63. package/dist/config.js.map +1 -1
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/run-events.d.ts +1 -0
  69. package/dist/run-events.d.ts.map +1 -1
  70. package/dist/run-events.js +4 -2
  71. package/dist/run-events.js.map +1 -1
  72. package/dist/types.d.ts +4 -22
  73. package/dist/types.d.ts.map +1 -1
  74. package/package.json +12 -8
@@ -4,37 +4,44 @@ import {} from "node:http";
4
4
  import Portal from "./Portal.js";
5
5
  import Translator from "./Translator.js";
6
6
  import MessageAddress from "./MessageAddress.js";
7
- import { stateDelta, stateSnapshot, parseAction, actionResult } from "./AguiPlus.js";
7
+ import { stateSnapshot, parseAction, actionRunResult, derivationActivity } from "./AguiPlus.js";
8
8
  import { EventType } from "./types.js";
9
9
  import {} from "@ag-ui/core";
10
10
  import { RunAgentInputSchema } from "@ag-ui/core/schemas";
11
11
  import {} from "@plurnk/plurnk-contracts";
12
12
  import {} from "./config.js";
13
+ import {} from "./BuiltinActions.js";
13
14
  import { HttpProblemError, actionFailure } from "./action-results.js";
14
15
  import { httpProblem, runErrorEvents } from "./run-events.js";
15
- const LOOP_ADDRESSED_ACTIONS = new Set(["loop.inject", "loop.cancel"]);
16
16
  export default class RunHandler {
17
17
  #seam;
18
18
  #opts;
19
19
  #portal;
20
+ #stopping;
20
21
  #requiresWorkspace;
21
22
  #controlRun;
22
23
  #envelope;
23
- #conversationWorker;
24
+ #conversation;
25
+ #boundWorker;
26
+ #actionBinding;
24
27
  #workerStatus;
25
28
  #action;
26
- constructor({ seam, opts, portal, requiresWorkspace, controlRun, envelope, conversationWorker, workerStatus, action }) {
29
+ constructor({ seam, opts, portal, stopping, requiresWorkspace, controlRun, envelope, conversation, boundWorker, actionBinding, workerStatus, action }) {
27
30
  this.#seam = seam;
28
31
  this.#opts = opts;
29
32
  this.#portal = portal;
33
+ this.#stopping = stopping;
30
34
  this.#requiresWorkspace = requiresWorkspace;
31
35
  this.#controlRun = controlRun;
32
36
  this.#envelope = envelope;
33
- this.#conversationWorker = conversationWorker;
37
+ this.#conversation = conversation;
38
+ this.#boundWorker = boundWorker;
39
+ this.#actionBinding = actionBinding;
34
40
  this.#workerStatus = workerStatus;
35
41
  this.#action = action;
36
42
  }
37
- async run(req, res, connect = false) {
43
+ // {§agui-http-authorization} — the principal and credential family the perimeter admitted this request under.
44
+ async run(req, res, connect = false, principal = "anonymous", family = null) {
38
45
  let decoded;
39
46
  try {
40
47
  decoded = JSON.parse(await RunHandler.#body(req));
@@ -58,59 +65,85 @@ export default class RunHandler {
58
65
  if (forwarded?.interactive !== undefined && typeof forwarded.interactive !== "boolean") {
59
66
  throw new HttpProblemError(httpProblem("interactive-invalid", 400, "interactive must be a boolean.", { stage: "request-validation", retryable: false }));
60
67
  }
61
- const mode = forwarded?.mode;
62
- if (mode !== undefined && mode !== "sync") {
63
- throw new HttpProblemError(httpProblem("unsupported-run-mode", 400, 'forwardedProps.plurnk.mode must be "sync" when present.', { stage: "request-validation", retryable: false }));
64
- }
65
- const synchronize = connect || mode === "sync";
66
- // Control plane FIRST: a management action that doesn't live in a world (and an
67
- // unknown kind, which is no worker at all) answers without binding — or forging — a
68
- // workspace. Only world-scoped actions and conversations reach #envelope below.
68
+ // {§agui-run-input} A Run does one thing, chosen by its input before anything binds: a resume resolves, an
69
+ // action acts, a new message submits, and a Run that carries none of them synchronizes ({§agui-sync}).
69
70
  const action = parseAction(input.forwardedProps);
70
- if (synchronize && (action !== null || input.resume !== undefined || input.messages.length > 0)) {
71
- throw new HttpProblemError(httpProblem("invalid-sync-input", 400, "Conversation synchronization cannot include messages, an action, or an interrupt resume.", { stage: "request-validation", retryable: false }));
71
+ const fresh = await this.#newMessage(input, forwarded, principal);
72
+ const asks = Number(input.resume !== undefined) + Number(action !== null) + Number(fresh !== null);
73
+ if (connect && asks > 0) {
74
+ throw new HttpProblemError(httpProblem("invalid-connect-input", 400, "A connection cannot include a new message, an action, or an interrupt resume.", { stage: "request-validation", retryable: false }));
75
+ }
76
+ if (asks > 1) {
77
+ throw new HttpProblemError(httpProblem("ambiguous-run-input", 400, "The Run carries more than one of a new message, an action, and an interrupt resume.", { stage: "request-validation", recovery: "Send each in its own Run.", retryable: false }));
72
78
  }
73
- if (action !== null && !this.#requiresWorkspace(action.kind)) {
74
- return await this.#controlRun(action, input, res);
79
+ const synchronize = connect || asks === 0;
80
+ // Control plane FIRST: a management action that doesn't live in a workspace, and one the module does not
81
+ // register or whose input it refuses, answers without binding — or forging — a workspace
82
+ // ({§agui-action-binding}). Only admitted workspace-scoped actions, message Runs and sync Runs reach #envelope below.
83
+ if (action !== null && !this.#requiresWorkspace(action)) {
84
+ return await this.#controlRun(action, input, res, principal);
75
85
  }
76
86
  let prompt = null;
77
87
  let currentUser = null;
78
- if (!synchronize && action === null && input.resume === undefined) {
79
- const lastUser = [...input.messages].reverse().find((message) => message.role === "user");
80
- if (lastUser === undefined || typeof lastUser.content !== "string" || lastUser.content.length === 0) {
81
- throw new HttpProblemError(httpProblem("user-message-required", 400, "A new AG-UI Run requires a non-empty textual user message.", {
82
- stage: "request-validation",
83
- recovery: "Provide a non-empty user message.",
84
- retryable: false,
85
- }));
88
+ if (fresh !== null) {
89
+ if (typeof fresh.content !== "string" || fresh.content.length === 0) {
90
+ throw new HttpProblemError(httpProblem("user-message-text-required", 400, "A new user message must be non-empty text.", { stage: "request-validation", recovery: "Send the message as non-empty text.", retryable: false }));
86
91
  }
87
- prompt = lastUser.content;
88
- currentUser = lastUser;
92
+ prompt = fresh.content;
93
+ currentUser = fresh;
89
94
  }
90
- // A loop-addressed action steers a loop already running in a world; a world that does not
91
- // exist has no loop to steer, so the action never mints one. Everything else may.
92
- const { env, reattached } = await this.#envelope(input.threadId, forwarded, { create: action === null || !LOOP_ADDRESSED_ACTIONS.has(action.kind) });
95
+ // {§agui-thread-binding} {§agui-action-binding} The thread resolves to its worker. A message,
96
+ // a setting, or its owner's session attaching creates it; watching passively
97
+ // or reading never does. A Run that requires an existing worker, or creates nothing, attaches to an
98
+ // existing workspace: a workspace that does not exist has no worker. A resume continues the Run whose interrupt it
99
+ // answers: it binds the worker that Run bound, if any.
100
+ const binding = input.resume !== undefined ? "attach"
101
+ : synchronize ? forwarded?.control === true ? "create" : "required"
102
+ : action === null ? "create" : this.#actionBinding(action);
103
+ const { env, reattached } = await this.#envelope(input.threadId, forwarded, {
104
+ create: binding === "create" || binding === "none",
105
+ worker: binding === "create",
106
+ });
93
107
  const workspaceId = env.workspaceId;
94
- // {§agui-thread-binding} The threadId is the conversation over the
95
- // world. threadId == workspace name binds the model worker (the default conversation);
96
- // a distinct threadId names its own worker: found by name, else minted via
97
- // createConversationWorker. The name is the identity at BOTH levels.
98
- const workerId = await this.#conversationWorker(input.threadId, env);
99
- const control = forwarded?.control === true || (!synchronize && action === null)
100
- || action?.kind === "op.exec" || action?.kind === "op.parse";
101
- const owner = control ? MessageAddress.owner(input.threadId) : undefined;
108
+ const workerId = binding === "create" || binding === "required"
109
+ ? await this.#boundWorker(input.threadId, env, binding, forwarded)
110
+ : input.resume === undefined ? undefined : this.#portal().resumedWorker(workspaceId, input.threadId, input.resume);
111
+ // {§agui-thread-address} Routing identity and the spelling a client used are separate from reply delivery.
112
+ const replyThreads = [input.threadId];
113
+ let address = MessageAddress.owner(principal, input.threadId);
114
+ if (workerId !== undefined) {
115
+ const worker = await this.#seam().readWorker({ workspaceId, identity: { id: workerId } });
116
+ if (worker === null)
117
+ throw new Error("The bound worker is absent.");
118
+ replyThreads.push(worker.name, `${workspaceId}#${worker.name}`, ...await this.#seam().listWorkerReferences({ workspaceId, workerId, namespace: "agui" }));
119
+ // {§agui-worker-owner} An address alias for this worker is not a different owner.
120
+ if (replyThreads.some((threadId) => MessageAddress.owner(principal, threadId) === worker.owner))
121
+ address = worker.owner;
122
+ }
123
+ // {§agui-sync} A passive observation claims nothing; an owner's control connection claims as a message Run does.
124
+ // Either presents the gates addressed to its thread ({§agui-proposal-resolve}).
125
+ const control = forwarded?.control === true || (!synchronize && action === null);
126
+ const owner = control ? address : undefined;
102
127
  if (owner !== undefined) {
103
128
  // {§agui-worker-owner} The Run declares the owner's capability set: the tools it
104
129
  // implements, and whether a person attends it. Unstated, nobody does.
130
+ // An AG-UI owner answers a gate's interrupt ({§agui-proposal-resolve}), so the module declares its review for it:
131
+ // a client declares only the tools it implements.
105
132
  await this.#seam().registerWorkerOwner(workspaceId, {
106
- address: owner, tools: [...new Set(input.tools.map(({ name }) => name))], interactive: forwarded?.interactive === true,
133
+ address: owner, tools: [...new Set(["request_approval", ...input.tools.map(({ name }) => name)])], interactive: forwarded?.interactive === true,
134
+ });
135
+ if (workerId !== undefined)
136
+ await this.#seam().claimWorkerOwner({ workspaceId, workerId, owner });
137
+ // {§agui-owner-activation} — an owner's arrival is the workspace's demand: activation starts now,
138
+ // so a first prompt finds it under way or done, and nothing waits for it here.
139
+ void this.#seam().activateWorkspace({ workspaceId }).catch((cause) => {
140
+ // {§functionality-preparation-cancellation} Shutdown owns and joins this cancellation.
141
+ if (this.#stopping() && cause instanceof DOMException && cause.name === "AbortError")
142
+ return;
143
+ console.error(`AG-UI: activating workspace ${workspaceId} for its owner failed:`, cause);
107
144
  });
108
- for (const claim of [workerId, env.workerId]) {
109
- await this.#seam().claimWorkerOwner({ workspaceId, workerId: claim, owner });
110
- }
111
145
  }
112
146
  let finished = false;
113
- const interrupts = [];
114
147
  const finish = () => {
115
148
  if (finished)
116
149
  return;
@@ -120,18 +153,13 @@ export default class RunHandler {
120
153
  this.#portal().closeRun(workspaceId, boundRun);
121
154
  res.end();
122
155
  };
123
- const emit = (events) => {
156
+ // Terminate-resume, the terminate half ({§agui-proposal-resolve}): the interrupts a gate presents end this AG-UI Run
157
+ // after its events, while their core owner remains paused.
158
+ const emit = (events, interrupts = []) => {
124
159
  if (finished)
125
160
  return;
126
161
  for (const e of events) {
127
162
  res.write(`data: ${JSON.stringify(e)}\n\n`);
128
- // Terminate-resume, the terminate half: a stopped-world tool call
129
- // ends this AG-UI Run while its core owner remains paused.
130
- if (e.type === "TOOL_CALL_END") {
131
- const interrupt = this.#portal().interruptForToolCall(e.toolCallId);
132
- if (interrupt !== null)
133
- interrupts.push(interrupt);
134
- }
135
163
  if (e.type === "RUN_FINISHED" || e.type === "RUN_ERROR")
136
164
  finish();
137
165
  }
@@ -140,27 +168,43 @@ export default class RunHandler {
140
168
  type: EventType.RUN_FINISHED,
141
169
  threadId: input.threadId,
142
170
  runId: input.runId,
143
- outcome: { type: "interrupt", interrupts: interrupts.splice(0) },
171
+ outcome: { type: "interrupt", interrupts },
144
172
  })}\n\n`);
145
173
  finish();
146
174
  }
147
175
  };
148
- const lifecycleWorkerId = action?.kind === "op.exec" || action?.kind === "op.parse" ? env.workerId : workerId;
176
+ // {§agui-run-start} The Portal routes to this Run from the moment it is bound; what reaches it
177
+ // before RUN_STARTED and the snapshot are written follows them, in order. A terminal ends it at once.
178
+ // Each notification's events are held together, so a sync Run can tell the rows its snapshot holds.
179
+ let presented = false;
180
+ const held = [];
181
+ const routed = (events, interrupts = []) => {
182
+ if (presented)
183
+ return emit(events, interrupts);
184
+ const terminal = events.filter(({ type }) => type === EventType.RUN_ERROR || type === EventType.RUN_FINISHED);
185
+ if (terminal.length === 0)
186
+ return void held.push({ events, interrupts });
187
+ held.length = 0;
188
+ emit(terminal);
189
+ };
149
190
  const notificationScope = action === null
150
- ? "conversation"
191
+ ? "worker"
151
192
  : action.kind === "op.exec" || action.kind === "op.parse"
152
193
  ? "operation"
153
194
  : "result";
154
- // {§agui-delegation-observation} — a conversation Run may ask for its descendants' rows.
195
+ // {§agui-delegation-observation} — a message Run may ask for its descendants' rows.
155
196
  const descendants = action === null && forwarded?.descendants === true;
156
197
  const boundRun = this.#portal().openThread({
157
198
  workspaceId,
158
- workerId: lifecycleWorkerId,
199
+ // {§agui-broadcast-fan} An operation Run learns its Worker and Loop from the dispatch that opens them.
200
+ workerId: notificationScope === "operation" ? null : workerId ?? null,
159
201
  threadId: input.threadId,
202
+ replyThreads,
160
203
  notificationScope,
161
- ...(owner === undefined ? {} : { owner }),
204
+ owner: address,
205
+ family,
162
206
  descendants,
163
- emit,
207
+ emit: routed,
164
208
  modelWorkerId: workerId,
165
209
  inputRunId: input.runId,
166
210
  cancelOnDisconnect: prompt !== null || notificationScope === "operation",
@@ -185,7 +229,8 @@ export default class RunHandler {
185
229
  return;
186
230
  }
187
231
  try {
188
- const status = await this.#workerStatus(workspaceId, workerId);
232
+ // A Run that binds no worker has no worker status to report.
233
+ const status = workerId === undefined ? undefined : await this.#workerStatus(workspaceId, workerId);
189
234
  if (finished)
190
235
  return;
191
236
  let providers;
@@ -198,45 +243,61 @@ export default class RunHandler {
198
243
  if (catalogProblem === null)
199
244
  throw cause;
200
245
  }
201
- emit(this.#portal().runStarted(boundRun, stateSnapshot({ ...(providers === undefined ? {} : { providers }), workspace: { id: workspaceId, name: env.workspaceName, projectRoot: env.projectRoot }, status })));
246
+ emit(this.#portal().runStarted(boundRun, stateSnapshot({
247
+ ...(providers === undefined ? {} : { providers }),
248
+ workspace: {
249
+ id: workspaceId, name: env.workspaceName, projectRoot: env.projectRoot, projectLabel: env.projectLabel,
250
+ preparation: this.#seam().workspacePreparationStatus(workspaceId),
251
+ activity: derivationActivity(this.#seam().workspaceDerivationStatus(workspaceId)),
252
+ },
253
+ ...(status === undefined ? {} : { status }),
254
+ })));
255
+ if (!synchronize) {
256
+ presented = true;
257
+ for (const batch of held.splice(0))
258
+ emit(batch.events, batch.interrupts);
259
+ }
202
260
  if (catalogProblem !== undefined)
203
261
  emit([{ type: EventType.CUSTOM, name: "plurnk.problem", value: catalogProblem }]);
204
262
  if (finished)
205
263
  return;
206
- // {§agui-conversation-sync} — the existing Run endpoint can project the
207
- // daemon's durable conversation without admitting a prompt or starting inference.
264
+ // {§agui-sync} — the existing Run endpoint can project the
265
+ // bound worker's durable log without admitting a prompt or starting inference.
208
266
  // A live Loop remains observed; an idle one settles after its snapshot.
209
267
  if (synchronize) {
210
268
  for (const notice of this.#seam().configurationNotices()) {
211
269
  emit([{ type: EventType.CUSTOM, name: "plurnk.notice", value: notice }]);
212
270
  }
213
- const history = await this.#seam().readLog({ workspaceId, workerId, limit: Number.MAX_SAFE_INTEGER });
271
+ // A sync Run requires its worker ({§agui-action-binding}), so one is bound here.
272
+ const history = await this.#history(workspaceId, workerId);
273
+ // {§agui-subagents} A Run that observes its delegation replays it too.
274
+ const subagents = await this.#portal().subagentHistory(boundRun, (descendant) => this.#history(workspaceId, descendant));
214
275
  if (finished)
215
276
  return;
216
- emit(this.#portal().replay(boundRun, history));
277
+ emit(this.#portal().replay(boundRun, history, undefined, subagents));
278
+ // {§agui-sync} What reached the Run while its log was read follows its snapshot, and a row the snapshot
279
+ // already holds as it arrived is not built a second time.
280
+ const replayed = new Map([...history, ...subagents.flatMap(({ entries }) => entries)].map((row) => [row.id, RunHandler.#version(row)]));
281
+ presented = true;
282
+ for (const batch of held.splice(0))
283
+ emit(RunHandler.#unreplayed(batch.events, replayed), batch.interrupts);
217
284
  if (finished)
218
285
  return;
219
286
  await this.#portal().synchronize(workspaceId, boundRun, connect);
220
287
  return;
221
288
  }
222
- // §3 — a management-action AG-UI Run (forwardedProps.plurnk.action): execute via the
223
- // seam; the outcome rides the workspace's CURRENT thread binding (Portal.finishRun),
224
- // never this closure — a proposal-gated action (op.exec → 202) terminates THIS
225
- // AG-UI Run and completes after the resume AG-UI Run rebinds the stream.
289
+ // A management-action AG-UI Run (forwardedProps.plurnk.action): executed via the seam and answered on
290
+ // this Run's own stream; concurrent actions share a workspace, and a result never rides another Run.
291
+ // A client operation's Run observes the loop its dispatch opens ({§agui-broadcast-fan}).
226
292
  if (action !== null) {
227
293
  const finishAction = (outcome) => {
228
- const events = [actionResult(action.kind, outcome)];
229
- // Plain action (stream still open): answer on OUR OWN stream — concurrent
230
- // actions share a workspace, and the workspace binding is whoever bound last
231
- // (results would cross streams). Only a proposal-pause (this stream already
232
- // terminated) hands off to the workspace binding, which the resume AG-UI Run rebinds.
233
- if (!finished) {
234
- this.#portal().finishThread(boundRun, events);
235
- return;
236
- }
237
- this.#portal().finishRun(workspaceId, lifecycleWorkerId, input.threadId, events);
294
+ if (!finished)
295
+ this.#portal().finishThread(boundRun, [], actionRunResult(action.kind, outcome));
238
296
  };
239
- void this.#action(action, input, env, workerId)
297
+ const onLoop = notificationScope === "operation"
298
+ ? (loop) => { this.#portal().bindOperation(boundRun, loop); }
299
+ : undefined;
300
+ void this.#action(action, input, env, workerId, principal, onLoop)
240
301
  // One queue barrier: a dispatch's channel notifies are enqueued but not yet
241
302
  // delivered when its promise resolves — drain them so Portal's stream
242
303
  // bookkeeping arms BEFORE the finish decision (then stream/concluded,
@@ -257,20 +318,23 @@ export default class RunHandler {
257
318
  await this.#portal().resolve(workspaceId, boundRun, input.resume);
258
319
  return;
259
320
  }
260
- if (prompt === null || currentUser === null)
261
- throw new Error("conversation AG-UI Run reached dispatch without a validated prompt");
321
+ if (prompt === null || currentUser === null || workerId === undefined)
322
+ throw new Error("message AG-UI Run reached dispatch without a validated prompt and its worker");
262
323
  if (reattached) {
263
- const history = await this.#seam().readLog({ workspaceId, workerId, limit: Number.MAX_SAFE_INTEGER }).catch(() => null);
324
+ const history = await this.#history(workspaceId, workerId);
264
325
  if (finished)
265
326
  return;
266
- if (history !== null && !RunHandler.#isOriented(input, history)) {
327
+ if (!RunHandler.#isOriented(input, history, replyThreads)) {
267
328
  const replayUser = currentUser ?? undefined;
268
- emit(this.#portal().replay(boundRun, history, replayUser));
329
+ const subagents = await this.#portal().subagentHistory(boundRun, (descendant) => this.#history(workspaceId, descendant));
330
+ if (finished)
331
+ return;
332
+ emit(this.#portal().replay(boundRun, history, replayUser, subagents));
269
333
  }
270
334
  }
271
335
  const started = await this.#portal().run(boundRun, {
272
336
  workspaceId, workerId, prompt,
273
- ...MessageAddress.submission(input, currentUser),
337
+ ...MessageAddress.submission(principal, input, currentUser),
274
338
  ...(forwarded !== undefined && Object.hasOwn(forwarded, "maxTurns")
275
339
  ? { maxTurns: forwarded.maxTurns }
276
340
  : this.#opts().maxTurns !== undefined ? { maxTurns: this.#opts().maxTurns } : {}),
@@ -290,13 +354,8 @@ export default class RunHandler {
290
354
  });
291
355
  if (started !== null && !finished) {
292
356
  const currentStatus = await this.#workerStatus(workspaceId, workerId);
293
- if (!finished) {
294
- emit([stateDelta([{
295
- op: "replace",
296
- path: "/plurnk/status",
297
- value: currentStatus,
298
- }])]);
299
- }
357
+ if (!finished)
358
+ emit(this.#portal().replaceStatus(boundRun, currentStatus));
300
359
  }
301
360
  }
302
361
  catch (err) {
@@ -314,9 +373,68 @@ export default class RunHandler {
314
373
  this.#portal().failThread(boundRun, runErrorEvents(problem));
315
374
  }
316
375
  }
317
- static #isOriented(input, history) {
318
- const durableMessageIds = new Set(history.flatMap((entry) => Translator.isResponse(entry, input.threadId)
319
- ? [String(entry.coordinate ?? entry.id)]
376
+ // {§agui-run-input} The Run's new message: its last message, when that is a user message of the thread's own
377
+ // conversation that is neither one the daemon presented, its id a coordinate the worker's log holds, nor one a
378
+ // client already sent, its address an idempotency key core decides ({§message-idempotency}). Both are keyed reads.
379
+ async #newMessage(input, forwarded, principal) {
380
+ const last = input.messages.at(-1);
381
+ if (last?.role !== "user" || last.subagentRunId !== undefined)
382
+ return null;
383
+ const conversation = await this.#conversation(input.threadId, forwarded);
384
+ if (conversation === null)
385
+ return last;
386
+ const coordinate = /^(\d+)\/(\d+)\/(\d+)$/u.exec(last.id);
387
+ if (coordinate !== null) {
388
+ const [loopSeq, turnSeq, sequence] = coordinate.slice(1).map(Number);
389
+ if ((await this.#seam().readLog({ ...conversation, loopSeq, turnSeq, sequence })).length > 0)
390
+ return null;
391
+ }
392
+ if (typeof last.content !== "string")
393
+ return last;
394
+ const admission = await this.#seam().messageAdmission({
395
+ workspaceId: conversation.workspaceId, address: MessageAddress.render(principal, input.threadId, last.id), body: last.content,
396
+ });
397
+ return admission === "new" ? last : null;
398
+ }
399
+ // {§agui-snapshot} A snapshot is every message the live projection built, so it reads the whole log, page by page.
400
+ async #history(workspaceId, workerId) {
401
+ const rows = [];
402
+ for (let beforeId;;) {
403
+ const cursor = beforeId;
404
+ const page = await this.#seam().readLog({ workspaceId, workerId, limit: Number.MAX_SAFE_INTEGER, ...(cursor === undefined ? {} : { beforeId: cursor }) });
405
+ const older = cursor === undefined ? page : page.filter(({ id }) => id < cursor);
406
+ if (older.length === 0)
407
+ return rows;
408
+ rows.push(...older);
409
+ beforeId = Math.min(...older.map(({ id }) => id));
410
+ }
411
+ }
412
+ // {§agui-sync} A row's version: what a later delivery of the same row can change.
413
+ static #version(row) {
414
+ return JSON.stringify([row.status_rx ?? null, row.signal ?? null, row.attrs ?? null]);
415
+ }
416
+ // {§agui-sync} One notification's events, without the parts of a row the snapshot already holds: none of them when it
417
+ // holds the row as it arrived; when it holds an earlier version, whose call it holds, the later facts folded onto that
418
+ // call, a repeated START and END without arguments ({§agui-proposal-resolve}), and the call's result.
419
+ static #unreplayed(events, replayed) {
420
+ const facts = events.map((event) => event.metadata?.plurnk)
421
+ .find((plurnk) => plurnk?.id !== undefined);
422
+ const whole = events.find((event) => event.type === EventType.CUSTOM && event.name === "plurnk.ambient");
423
+ const row = facts !== undefined ? { id: facts.id, version: RunHandler.#version({ status_rx: facts.status, signal: facts.signal, attrs: facts.attrs }) }
424
+ : whole?.value !== undefined ? { id: whole.value.id, version: RunHandler.#version(whole.value) } : null;
425
+ if (row === null || !replayed.has(row.id))
426
+ return events;
427
+ const held = (event) => (event.type.startsWith("TOOL_CALL_") && event.type !== EventType.TOOL_CALL_RESULT)
428
+ || event.type.startsWith("TEXT_MESSAGE_") || event.type.startsWith("REASONING_");
429
+ if (replayed.get(row.id) !== row.version) {
430
+ return events.filter((event) => !held(event) || event.type === EventType.TOOL_CALL_START || event.type === EventType.TOOL_CALL_END);
431
+ }
432
+ return events.filter((event) => !(held(event) || event.type === EventType.TOOL_CALL_RESULT
433
+ || (event.type === EventType.CUSTOM && event.name === "plurnk.ambient")));
434
+ }
435
+ static #isOriented(input, history, replyThreads) {
436
+ const durableMessageIds = new Set(history.flatMap((entry) => Translator.isResponse(entry, replyThreads)
437
+ ? [Translator.idOf(entry)]
320
438
  : []));
321
439
  return input.messages.some(({ id }) => durableMessageIds.has(id));
322
440
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RunHandler.js","sourceRoot":"","sources":["../src/RunHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,yJAAyJ;AACzJ,OAAO,EAA6C,MAAM,WAAW,CAAC;AACtE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAgE,MAAM,eAAe,CAAC;AACnJ,OAAO,EAAE,SAAS,EAAwD,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAkB,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAA6C,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAA8B,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AAK5F,MAAM,CAAC,OAAO,OAAO,UAAU;IAClB,KAAK,CAAgB;IACrB,KAAK,CAA8B;IACnC,OAAO,CAAe;IACtB,kBAAkB,CAA4B;IAC9C,WAAW,CAAsF;IACjG,SAAS,CAA4J;IACrK,mBAAmB,CAA6D;IAChF,aAAa,CAAsE;IACnF,OAAO,CAAgI;IAEhJ,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAUlH;QACG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,OAAO,GAAG,KAAK;QAChE,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAClC,cAAc,EACd,GAAG,EACH,qCAAqC,EACrC,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC,CAAC;QACP,CAAC;QACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAClC,mBAAmB,EACnB,GAAG,EACH,qEAAqE,EACrE;gBACI,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC3B,SAAS,EAAE,KAAK;aACnB,CACJ,CAAC,CAAC;QACP,CAAC;QACD,MAAM,KAAK,GAAkB,MAAM,CAAC,IAAI,CAAC;QACzC,MAAM,SAAS,GAAI,KAAK,CAAC,cAAmE,EAAE,MAAM,CAAC;QACrG,IAAI,SAAS,EAAE,OAAO,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7E,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,iBAAiB,EAAE,GAAG,EAAE,4BAA4B,EACvF,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrF,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,gCAAgC,EAC/F,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAClC,sBAAsB,EACtB,GAAG,EACH,yDAAyD,EACzD,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC,CAAC;QACP,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,KAAK,MAAM,CAAC;QAE/C,gFAAgF;QAChF,oFAAoF;QACpF,gFAAgF;QAChF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,WAAW,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAClC,oBAAoB,EACpB,GAAG,EACH,0FAA0F,EAC1F,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC,CAAC;QACP,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,WAAW,GAAuB,IAAI,CAAC;QAC3C,IAAI,CAAC,WAAW,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC1F,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClG,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAClC,uBAAuB,EACvB,GAAG,EACH,4DAA4D,EAC5D;oBACI,KAAK,EAAE,oBAAoB;oBAC3B,QAAQ,EAAE,mCAAmC;oBAC7C,SAAS,EAAE,KAAK;iBACnB,CACJ,CAAC,CAAC;YACP,CAAC;YACD,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC1B,WAAW,GAAG,QAAQ,CAAC;QAC3B,CAAC;QAED,0FAA0F;QAC1F,kFAAkF;QAClF,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrJ,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACpC,mEAAmE;QACnE,uFAAuF;QACvF,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,KAAK,IAAI,CAAC;eACzE,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,iFAAiF;YACjF,sEAAsE;YACtE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE;gBAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI;aACzH,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACjF,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAS,EAAE;YACtB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,SAAS,KAAK,IAAI;gBAAE,aAAa,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC/C,GAAG,CAAC,GAAG,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,MAAmB,EAAQ,EAAE;YACvC,IAAI,QAAQ;gBAAE,OAAO;YACrB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACrB,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5C,kEAAkE;gBAClE,2DAA2D;gBAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAChD,CAA4B,CAAC,UAAU,CAC3C,CAAC;oBACF,IAAI,SAAS,KAAK,IAAI;wBAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;oBAAE,MAAM,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC;oBAC9B,IAAI,EAAE,SAAS,CAAC,YAAY;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;iBACnE,CAAC,MAAM,CAAC,CAAC;gBACV,MAAM,EAAE,CAAC;YACb,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC9G,MAAM,iBAAiB,GAAG,MAAM,KAAK,IAAI;YACrC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;gBACrD,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,QAAQ,CAAC;QACnB,yFAAyF;QACzF,MAAM,WAAW,GAAG,MAAM,KAAK,IAAI,IAAI,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC;YACvC,WAAW;YACX,QAAQ,EAAE,iBAAiB;YAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,iBAAiB;YACjB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YACzC,WAAW;YACX,IAAI;YACJ,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,KAAK,CAAC,KAAK;YACvB,kBAAkB,EAAE,MAAM,KAAK,IAAI,IAAI,iBAAiB,KAAK,WAAW;YACxE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,6EAA6E;QAC7E,+CAA+C;QAC/C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QACrH,uEAAuE;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,4EAA4E;QAC5E,MAAM,YAAY,GAAG,GAAS,EAAE;YAC5B,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,EAAE,CAAC;QACb,CAAC,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAAC,YAAY,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9C,IAAI,CAAC;YACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,QAAQ;gBAAE,OAAO;YACrB,IAAI,SAAS,CAAC;YACd,IAAI,cAAc,CAAC;YACnB,IAAI,CAAC;gBAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;YAAC,CAAC;YACzD,OAAO,KAAK,EAAE,CAAC;gBACX,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,cAAc,KAAK,IAAI;oBAAE,MAAM,KAAK,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAC1B,QAAQ,EACR,aAAa,CAAC,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CACtK,CAAC,CAAC;YACH,IAAI,cAAc,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACpH,IAAI,QAAQ;gBAAE,OAAO;YAErB,wEAAwE;YACxE,kFAAkF;YAClF,wEAAwE;YACxE,IAAI,WAAW,EAAE,CAAC;gBACd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC;oBACvD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC7E,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACtG,IAAI,QAAQ;oBAAE,OAAO;gBACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC/C,IAAI,QAAQ;oBAAE,OAAO;gBACrB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACjE,OAAO;YACX,CAAC;YAED,qFAAqF;YACrF,qFAAqF;YACrF,+EAA+E;YAC/E,yEAAyE;YACzE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAQ,EAAE;oBAClD,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;oBACpD,0EAA0E;oBAC1E,6EAA6E;oBAC7E,4EAA4E;oBAC5E,sFAAsF;oBACtF,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACZ,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;wBAC9C,OAAO;oBACX,CAAC;oBACD,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACrF,CAAC,CAAC;gBACF,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC;oBAC3C,4EAA4E;oBAC5E,sEAAsE;oBACtE,sEAAsE;oBACtE,uCAAuC;qBACtC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9F,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;oBACpB,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACxC,YAAY,CAAC,OAAO,KAAK,IAAI;wBACzB,CAAC,CAAC,aAAa,CAAC,eAAe,EAAE,iCAAiC,EAAE,GAAG,CAAC;wBACxE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBACP,OAAO;YACX,CAAC;YAED,8EAA8E;YAC9E,oEAAoE;YACpE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClE,OAAO;YACX,CAAC;YAED,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YAEnI,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACxH,IAAI,QAAQ;oBAAE,OAAO;gBACrB,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC9D,MAAM,UAAU,GAAG,WAAW,IAAI,SAAS,CAAC;oBAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC/C,WAAW,EAAE,QAAQ,EAAE,MAAM;gBAC7B,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;gBAChD,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;oBAC/D,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAkB,EAAE;oBAC5C,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;oBAChE,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAqB,EAAE;oBAChD,CAAC,CAAC,EAAE,CAAC;gBACT,sEAAsE;gBACtE,+CAA+C;gBAC/C,yEAAyE;gBACzE,kEAAkE;gBAClE,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;oBAC/D,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAkB,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACT,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC;oBACpE,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,aAA8B,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;gCACd,EAAE,EAAE,SAAS;gCACb,IAAI,EAAE,gBAAgB;gCACtB,KAAK,EAAE,aAAa;6BACvB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACV,CAAC;YACL,CAAC;QACD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,yDAAyD;YACzD,6EAA6E;YAC7E,+EAA+E;YAC/E,wEAAwE;YACxE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,YAAY,KAAK,IAAI;gBAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,YAAY,IAAI,WAAW,CACvC,YAAY,EACZ,GAAG,EACH,oCAAoC,EACpC;gBACI,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,KAAK;aACnB,CACJ,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAAoB,EAAE,OAA+C;QACpF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACxD,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;YACpC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAGD,MAAM,CAAC,KAAK,CAAC,GAAoB;QAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"RunHandler.js","sourceRoot":"","sources":["../src/RunHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** {§agui-thread-address} Qualified identity is syntax, never a database-existence heuristic. */
2
+ export default class ThreadAddress {
3
+ static parse(threadId: string): {
4
+ workspaceId: number;
5
+ workerName: string;
6
+ } | null;
7
+ }
8
+ //# sourceMappingURL=ThreadAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadAddress.d.ts","sourceRoot":"","sources":["../src/ThreadAddress.ts"],"names":[],"mappings":"AAIA,iGAAiG;AACjG,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAWjF;CACJ"}
@@ -0,0 +1,18 @@
1
+ import { WORKER_NAME } from "@plurnk/plurnk-contracts";
2
+ import { HttpProblemError } from "./action-results.js";
3
+ import { httpProblem } from "./run-events.js";
4
+ /** {§agui-thread-address} Qualified identity is syntax, never a database-existence heuristic. */
5
+ export default class ThreadAddress {
6
+ static parse(threadId) {
7
+ const match = /^([0-9]+)#(.*)$/su.exec(threadId);
8
+ if (match === null)
9
+ return null;
10
+ const workspaceId = Number(match[1]);
11
+ const workerName = match[2];
12
+ if (String(workspaceId) !== match[1] || !Number.isSafeInteger(workspaceId) || workspaceId < 1 || !WORKER_NAME.test(workerName)) {
13
+ throw new HttpProblemError(httpProblem("thread-address-invalid", 400, "The qualified thread address is not <workspace ID>#<worker name>.", { threadId, stage: "request-validation", retryable: false }));
14
+ }
15
+ return { workspaceId, workerName };
16
+ }
17
+ }
18
+ //# sourceMappingURL=ThreadAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadAddress.js","sourceRoot":"","sources":["../src/ThreadAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,iGAAiG;AACjG,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,KAAK,CAAC,QAAgB;QACzB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7H,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,wBAAwB,EAAE,GAAG,EAChE,mEAAmE,EACnE,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;CACJ"}