@plurnk/plurnk-agui 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SPEC.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # @plurnk/plurnk-agui — the projection contract
2
2
 
3
- The module is the daemon's external client interface. It consumes core's
4
- in-process module seam and emits the Agent-User Interaction Protocol over
5
- HTTP/SSE. Core's numbers and semantics pass through; the module does not
6
- recompute them.
3
+ The module is the daemon's AG-UI client interface. It consumes the
4
+ contracts-owned {§application-port} and emits the Agent-User Interaction
5
+ Protocol over HTTP/SSE. Core's numbers and semantics pass through; the module
6
+ does not recompute them.
7
7
 
8
8
  ## Architecture
9
9
 
10
10
  - §agui-daemon-client **The module is an in-process plugin of the daemon** — activated
11
- at boot (`registerModule` → the core seam handle); it opens the AG-UI+ listener and owns
11
+ at boot (`registerModule` → the application port); it opens the AG-UI+ listener and owns
12
12
  the client interface. No WebSocket, no separate process.
13
13
  - §agui-thread-binding **A PLURNK workspace is the world; an AG-UI thread is a conversation over it**
14
14
  — the lifecycle vocabulary is defined by service {§lifecycle-terms}. PLURNK's machine model ({§machine-processes}) splits the world (a workspace: one
@@ -43,26 +43,48 @@ One accepted Run or daemon notification produces zero-or-more AG-UI events:
43
43
  | schema-valid `RunAgentInput` | `RUN_STARTED` + initial `STATE_SNAPSHOT` |
44
44
  | `log/entry` turn boundary | `STEP_FINISHED` + `STEP_STARTED` (`turn-<id>`) |
45
45
  | `log/entry` op=PLAN (model) | `ACTIVITY_SNAPSHOT` {§agui-plan-activity} |
46
- | `log/entry` op=SEND (model) | `TEXT_MESSAGE_START/CONTENT/END` + `CUSTOM plurnk.send` (signal/status) |
46
+ | `log/entry` op=SEND (model) | Optional readable-reasoning sequence {§agui-readable-reasoning}, then `TEXT_MESSAGE_START/CONTENT/END` + `CUSTOM plurnk.send` (signal/status) |
47
47
  | `log/entry` other op (model) | `TOOL_CALL_START/ARGS/END` (+ `TOOL_CALL_RESULT` when rx exists) |
48
- | `log/entry` actionless `kind=model_emission` | At most one `REASONING_ENCRYPTED_VALUE`, attached to the same turn's actual SEND assistant message when {§agui-encrypted-reasoning} is satisfied; otherwise nothing beyond the forensic row. |
48
+ | `log/entry` actionless `kind=turnOps` or `kind=emissionAttempt` | At most one `REASONING_ENCRYPTED_VALUE`, attached to the same turn's actual SEND assistant message when {§agui-encrypted-reasoning} is satisfied; otherwise nothing beyond the forensic row. |
49
49
  | `log/entry` origin≠model | `CUSTOM plurnk.ambient` (foists, deltas, narrations) |
50
50
  | client-owned `loop/proposal` | `TOOL_CALL_START/ARGS/END`, then `RUN_FINISHED` with an interrupt outcome |
51
51
  | `loop/terminated` | `STATE_DELTA` (latest-turn gauge only) + `CUSTOM plurnk.terminated` (the complete daemon terminal, including physical-request accounting and top-level attribution) + `RAW` (the provider's opaque metadata bag, `source: provider`, §475) + `RUN_FINISHED` (`result.status === 200`) or `RUN_ERROR` (otherwise, from the exact RFC 9457 Problem Details) |
52
52
  | transport failure after SSE opens | `CUSTOM plurnk.problem` (exact Problem Details) + `RUN_ERROR` (`code` = Problem `type`, `message` = Problem `detail`) |
53
53
  | `notice/event` | `CUSTOM plurnk.notice` |
54
+ | `reasoning/event` | Standard live `REASONING_START` → `REASONING_MESSAGE_START` → one or more `REASONING_MESSAGE_CONTENT` → `REASONING_MESSAGE_END` → `REASONING_END` {§agui-readable-reasoning} |
54
55
  | `stream/event` + `stream/concluded` | `CUSTOM plurnk.stream` + `ACTIVITY_SNAPSHOT` (the standard background-activity channel: `activityType` = the scheme, replace-snapshot, §475). A conclusion preserves its exact universal `result`, including RFC 9457 Problem Details; AG-UI does not reconstruct failure from a status or summary. |
55
56
  | `workspace/branch-batch` | `CUSTOM plurnk.branch_batch` with the daemon's full queued/running/completed/failed/recovery-required lifecycle payload |
56
57
 
57
- §agui-plan-activity **PLAN is activity, not reasoning.** PLAN is the model's public,
58
- durable statement of intended goals. Provider reasoning is a separate channel, so PLAN
59
- never projects into AG-UI `REASONING_*` events. Live delivery and reattach preserve the
60
- same log identity and verbatim goals:
58
+ §agui-plan-activity **PLAN is replaceable activity, not reasoning.** PLAN is the
59
+ ACP projection of the model's complete current {§plan-value}, produced only at
60
+ this standards boundary under {§plan-acp-projection}. Provider reasoning is a
61
+ separate channel, so PLAN never projects into AG-UI `REASONING_*` events. The thread-stable
62
+ `<threadId>/plan` identity makes every live update replace the prior activity;
63
+ reattach includes only the newest model PLAN. The same ACP projection replaces
64
+ `tx.body` on every client-facing PLAN `CUSTOM plurnk.row` and
65
+ `CUSTOM plurnk.ambient`; all other row and transaction fields remain intact:
61
66
 
62
67
  | Projection | Standard representation |
63
68
  | ---------- | ----------------------- |
64
- | live | `ACTIVITY_SNAPSHOT { messageId: coordinate ?? id, activityType: "PLAN", content: { goals: body }, replace: true }` |
65
- | reattach | `ActivityMessage { id: coordinate ?? id, role: "activity", activityType: "PLAN", content: { goals: body } }` inside `MESSAGES_SNAPSHOT` |
69
+ | live | `ACTIVITY_SNAPSHOT { messageId: "<threadId>/plan", activityType: "PLAN", content: AcpPlan, replace: true }` |
70
+ | reattach | The newest `ActivityMessage { id: "<threadId>/plan", role: "activity", activityType: "PLAN", content: AcpPlan }` at its chronological position inside `MESSAGES_SNAPSHOT` |
71
+
72
+ §agui-readable-reasoning **Readable provider reasoning uses AG-UI's standard
73
+ reasoning channel.** A core `{§notifications-reasoning-event}` for the thread's
74
+ model worker projects each exact delta immediately through one balanced standard
75
+ reasoning lifecycle identified by its durable model-call id. Foreign-worker and
76
+ BARE reasoning never enter the thread. Failed or rejected calls may therefore
77
+ leave honest transient reasoning that is not replayed.
78
+
79
+ Core also derives the admitted SEND's optional complete `reasoning` from its
80
+ durable packet ({§methods-readable-reasoning}). When that value was not already
81
+ delivered by the completed live stream, projection emits it atomically before
82
+ the SEND speech under `<SEND identity>/reasoning`; otherwise it emits no
83
+ duplicate. Reattach replaces transient attempt presentation with the durable
84
+ accepted `ReasoningMessage` immediately before its SEND `AssistantMessage` in
85
+ `MESSAGES_SNAPSHOT`. Empty evidence emits nothing, PLAN never substitutes for
86
+ reasoning ({§agui-plan-activity}), and the SEND row still precedes its text
87
+ sequence.
66
88
 
67
89
  - **An op row IS a tool call** — its `coordinate` is the `toolCallId`, its tx the args (one
68
90
  delta: a dispatched plurnk op is atomic), its rx the result. The log-shaped richness the
@@ -70,7 +92,7 @@ same log identity and verbatim goals:
70
92
  `plurnk.ambient`/`TOOL_CALL_RESULT` payloads.
71
93
  - §agui-encrypted-reasoning **Encrypted reasoning projects only onto an entity
72
94
  AG-UI actually created.** Core supplies the exact normalized provider-detail
73
- list on the actionless `attrs.kind="model_emission"` row's `attrs.reasoning`.
95
+ list on an actionless model source row's `attrs.reasoning`.
74
96
  No synthetic operation is introduced. The provider detail `id` is
75
97
  forensic identity, not an AG-UI entity ID ({§provider-encrypted-reasoning}).
76
98
 
@@ -116,10 +138,10 @@ ignore the extension; PLURNK clients consume the same contracts-owned shape as
116
138
  every other daemon surface.
117
139
 
118
140
  - §agui-row-channel **The row channel** — every log row ALSO rides `CUSTOM plurnk.row`
119
- carrying the full wire entry (fold state, durable tags, curation weight, coordinate) alongside its
120
- core projection. Rich clients (TUI/nvim) render plurnk-native fidelity from `plurnk.row`;
121
- generic clients never see the difference. This is the metadata channel the exclusive-portal
122
- migration stands on.
141
+ carrying the complete client-facing row (fold state, durable tags, curation weight, coordinate)
142
+ alongside its core projection. PLAN `tx.body` follows {§agui-plan-activity}; rich clients
143
+ (TUI/nvim) never receive the internal Plan extension. Generic clients ignore this metadata
144
+ channel.
123
145
  - **The gauge starts true** — `RUN_STARTED` is followed by a `STATE_SNAPSHOT` carrying the
124
146
  daemon's `providers.list` truth (the effective input capacity, the active model), then
125
147
  `STATE_DELTA`s. A dropped SSE stream cancels the loop (`loop.cancel`) — the frontend hanging
@@ -127,7 +149,7 @@ every other daemon surface.
127
149
 
128
150
  - §agui-replay **Reattach replays** — a rediscovered thread (the module restarted, a second
129
151
  frontend arrived) attaches to its existing workspace by name→id and opens ORIENTED: the model
130
- worker's PLAN activities and SEND speech replay as `MESSAGES_SNAPSHOT`; everything else stays
152
+ worker's current PLAN activity and SEND speech replay as `MESSAGES_SNAPSHOT`; everything else stays
131
153
  reachable via live `plurnk.row`. Pending proposals and client interactions remain durable while
132
154
  their operation owners are live and are presented as interrupts when the owning conversation is
133
155
  resumed; a days-old question is discoverable, never converted into a mystery hang.
@@ -150,7 +172,7 @@ interrupt carries its optional `message` and `responseSchema`. A resolved resume
150
172
  the generic resolved payload, while AG-UI cancellation becomes interaction cancellation. AG-UI
151
173
  never sees or reconstructs an upstream protocol's continuation state.
152
174
 
153
- §agui-proposal-disposition **AG-UI consumes disposition; it does not infer policy.** Both the live `loop/proposal` payload and `CoreSeam.pendingProposals()` return the contracts-owned `ProposalProjection`. `disposition.owner` is the sole presentation branch:
175
+ §agui-proposal-disposition **AG-UI consumes disposition; it does not infer policy.** Both the live `loop/proposal` payload and `ApplicationPort.pendingProposals()` return the contracts-owned `ProposalProjection`. `disposition.owner` is the sole presentation branch:
154
176
 
155
177
  | Disposition owner | AG-UI behavior |
156
178
  | ----------------- | ----------------------------------------------------------------------------- |
@@ -159,10 +181,11 @@ never sees or reconstructs an upstream protocol's continuation state.
159
181
 
160
182
  Raw `auto`, `noProposals`, operation, attrs, and stale-target facts remain visible evidence but are not re-evaluated here. Reconnect filters by the same disposition, so an internal policy failure cannot silently turn client presentation into an accidental fallback.
161
183
 
162
- §agui-provider-policy-forwarding A textual Run forwards `alias`, `model`,
163
- `childAlias`, and `childModel` from `forwardedProps.plurnk` unchanged to
164
- `CoreSeam.runLoop`; an explicit `childAlias: null` remains distinguishable from
165
- an omitted service-default selection.
184
+ §agui-provider-policy-forwarding A textual Run forwards `selector` and
185
+ `childSelector` from `forwardedProps.plurnk` unchanged to `ApplicationPort.runLoop`.
186
+ Each string is one declared alias or exact provider/model route; an explicit
187
+ `childSelector: null` remains distinguishable from an omitted service-default
188
+ selection.
166
189
 
167
190
  ## §agui-management-plane The action surface
168
191
 
@@ -174,11 +197,11 @@ and a standard interrupt resume are not management actions and have no invented
174
197
  flowchart LR
175
198
  client["AG-UI client"] --> run["POST RunAgentInput"]
176
199
  run --> classify{"Input form"}
177
- classify -->|"textual user message"| loop["CoreSeam.runLoop"]
178
- classify -->|"RunAgentInput.resume"| resume["CoreSeam proposal / interaction resolution"]
200
+ classify -->|"textual user message"| loop["ApplicationPort.runLoop"]
201
+ classify -->|"RunAgentInput.resume"| resume["ApplicationPort proposal / interaction resolution"]
179
202
  classify -->|"forwardedProps.plurnk.action"| actions{"AG-UI action registry"}
180
- actions --> builtIn["Built-in validation<br/>and typed CoreSeam call"]
181
- actions --> extension["Scoped CoreSeam.invokeModuleAction"]
203
+ actions --> builtIn["Advertised schema admission<br/>and typed ApplicationPort call"]
204
+ actions --> extension["Scoped ApplicationPort.invokeModuleAction"]
182
205
  loop --> events["Core event source"]
183
206
  resume --> events
184
207
  builtIn --> events
@@ -202,37 +225,67 @@ successfully transported management Run; it does not turn the Run into
202
225
  |--------------------------|-----------|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|
203
226
  | `ping` | Worldless | none | AG-UI-local liveness; returns `{}`. |
204
227
  | `discover` | Worldless | none | AG-UI-local public membership manifest ({§discovery}). |
205
- | `providers.list` | Worldless | none | `CoreSeam.listProviders`. |
206
- | `workspace.list` | Worldless | none | `CoreSeam.listWorkspaces`. |
228
+ | `providers.list` | Worldless | none | `ApplicationPort.listProviders`. |
229
+ | `models.list` | Worldless | `provider?`, `search?`, `availability?`, `offset?`, `limit?` | Returns one bounded {§model-catalog-wire} page from `ApplicationPort.listModels` under {§model-catalog}. |
230
+ | `workspace.list` | Worldless | none | `ApplicationPort.listWorkspaces`. |
207
231
  | `workspace.create` | Worldless | `name?`, `projectRoot?`, `settings?`, `constraints?` | Creates or attaches the exact named world, or asks core to create an automatically named world. |
208
- | `workspace.attach` | Worldless | `id`, `workerId?` | `CoreSeam.attachWorkspace`; returns the selected envelope. |
209
- | `workspace.workers` | Workspace | `id?` | `CoreSeam.listWorkers`; an explicit id overrides the bound workspace. |
210
- | `log.read` | Workspace | `workerId?`, log-coordinate filters | `CoreSeam.readLog`; defaults to the thread's conversation worker. |
211
- | `loop.inject` | Workspace | `prompt` | `CoreSeam.runLoop` on the thread's conversation worker; folds into live work or enqueues a loop. |
212
- | `loop.cancel` | Workspace | none | `CoreSeam.cancelDrain` on the thread's conversation worker. |
213
- | `workspace.prompts` | Workspace | `limit?` | `CoreSeam.listPrompts`. |
214
- | `workspace.rename` | Workspace | `name` | `CoreSeam.renameWorkspace`. |
215
- | `workspace.constrain` | Workspace | `effect`, `glob` | `CoreSeam.constrain`. |
216
- | `workspace.unconstrain` | Workspace | `effect`, `glob` | `CoreSeam.unconstrain`. |
217
- | `workspace.constraints` | Workspace | none | `CoreSeam.listConstraints`. |
218
- | `workspace.derivation` | Workspace | none | `CoreSeam.workspaceDerivationStatus`. |
219
- | `entry.read` | Workspace | `target`, `workerId?`, `channel?`, `offset?` | Calls `CoreSeam.readEntry` from the explicit worker perspective or the thread conversation by default, preserving validated {§entry-read-result}. |
220
- | `op.exec` | Workspace | `command` | Constructs one EXEC statement and calls `CoreSeam.dispatchClientAction` on the client worker. |
232
+ | `workspace.attach` | Worldless | `id`, `workerId?` | `ApplicationPort.attachWorkspace`; returns the selected envelope. |
233
+ | `workspace.workers` | Workspace | `id?` | `ApplicationPort.listWorkers`; an explicit id overrides the bound workspace. |
234
+ | `log.read` | Workspace | `workerId?`, log-coordinate filters | `ApplicationPort.readLog`; defaults to the thread's conversation worker. |
235
+ | `loop.inject` | Workspace | `prompt` | `ApplicationPort.runLoop` on the thread's conversation worker; folds into live work or enqueues a loop. |
236
+ | `loop.cancel` | Workspace | `reason?` | `ApplicationPort.cancelDrain` on the thread's conversation worker. |
237
+ | `workspace.prompts` | Workspace | `limit?` | `ApplicationPort.listPrompts`. |
238
+ | `workspace.rename` | Workspace | `name` | `ApplicationPort.renameWorkspace`. |
239
+ | `workspace.constrain` | Workspace | `effect`, `glob` | `ApplicationPort.constrain`. |
240
+ | `workspace.unconstrain` | Workspace | `effect`, `glob` | `ApplicationPort.unconstrain`. |
241
+ | `workspace.constraints` | Workspace | none | `ApplicationPort.listConstraints`. |
242
+ | `workspace.derivation` | Workspace | none | `ApplicationPort.workspaceDerivationStatus`. |
243
+ | `entry.read` | Workspace | `target`, `workerId?`, `channel?`, `offset?` | Calls `ApplicationPort.readEntry` from the explicit worker perspective or the thread conversation by default, preserving validated {§entry-read-result}. |
244
+ | `op.exec` | Workspace | `command` | Constructs one EXEC statement and calls `ApplicationPort.dispatchClientAction` on the client worker, attached to the conversation Worker (`conversationWorkerId`, else the workspace's model worker) for Functionality. |
221
245
  | `op.parse` | Workspace | `text` | Parses and projects PLURNK text under {§agui-op-parse}. |
222
- | `workspace.members` | Workspace | none | `CoreSeam.listMembers`. |
246
+ | `workspace.members` | Workspace | none | `ApplicationPort.listMembers`. |
223
247
  | `op.look` | Workspace | `text` | Admits one LOOK under {§agui-op-look}, rewrites it to READ, and calls core's no-log `look` projection. |
224
- | `run.fork` | Workspace | `name?` | `CoreSeam.forkWorker` from the thread's conversation worker. |
225
- | Registered module action | Owner-declared | owner-defined | `CoreSeam.invokeModuleAction`; AG-UI passes either a worldless context or the already-bound workspace context outside supplied params. The owner validates params and owns the result. |
248
+ | `run.fork` | Workspace | `name?` | `ApplicationPort.forkWorker` from the thread's conversation worker. |
249
+ | `worker.model.get` | Workspace | none | `ApplicationPort.readWorkerModel` on the thread's conversation worker; returns `{ model, spawnModel }` as resolved specs or `null`. |
250
+ | `worker.model.set` | Workspace | `selector` | `ApplicationPort.setWorkerModel` on the thread's conversation worker; persists the resolved selection and returns it. |
251
+ | `worker.child.set` | Workspace | `selector` | `ApplicationPort.setWorkerSpawnModel` on the thread's conversation worker; persists the override (`null` means inherit) and returns it. |
252
+ | `worker.reasoning.get` | Workspace | none | `ApplicationPort.readWorkerReasoning` on the thread's conversation worker; returns its durable policy and the policies supported by both its model and optional spawn model. |
253
+ | `worker.reasoning.set` | Workspace | `policy` | `ApplicationPort.setWorkerReasoning` on the thread's conversation worker; validates and persists the policy between loops. |
254
+ | `worker.settings.get` | Workspace | none | `ApplicationPort.readWorkerSettings` on the thread's conversation worker; returns the worker's behavioral-rules bag ({§worker-settings}). |
255
+ | `worker.settings.set` | Workspace | `settings` | `ApplicationPort.setWorkerSettings` on the thread's conversation worker; merges the known keys and returns the normalized bag. |
256
+ | Registered module action | Owner-declared | owner-defined | `ApplicationPort.invokeModuleAction`; AG-UI enforces the owner's input/output schemas and passes a worldless, bound-workspace, or bound-conversation-Worker context outside supplied params. The owner retains semantic validation and the effect. |
257
+
258
+ §agui-constraint-provenance Constraint projections include `source: "explicit" | "create"`. Inputs never accept that field: client-authored constraints persist as `explicit`, while `create` identifies an exact pick generated by the core file-creation transaction. For `create`, `glob` carries the literal canonical path rather than pattern syntax ({§fs-create-incorporation}).
259
+
260
+ §agui-worker-model-actions **Worker model selection is server-backed.**
261
+ `worker.model.get`, `worker.model.set`, and `worker.child.set` operate on the
262
+ thread's bound conversation worker under {§worker-model-selection}. They are
263
+ the client's durable `/model` and `/child`; a client must not reassert a
264
+ model on every loop. The get action returns the worker's resolved durable
265
+ model and spawn override (`null` for an unset worker or inherit); the set
266
+ actions accept one alias-or-exact-route selector, resolve and persist before returning, failing with the owning
267
+ problem when the selector is unresolvable or the daemon is deliberately
268
+ modelless.
269
+
270
+ §agui-worker-reasoning-actions **Reasoning policy has its own worker action.**
271
+ `worker.reasoning.get` returns the durable policy and the supported-policy
272
+ intersection of the selected model and optional spawn model. `worker.reasoning.set` accepts one policy from
273
+ {§reasoning-policy-wire}; core owns its durable {§worker-reasoning-policy}
274
+ validation and refuses mutation while a
275
+ loop is active or parked.
226
276
 
227
277
  §agui-module-action-scope **An extension action uses the same management plane,
228
- not a private endpoint.** `CoreSeam.listModuleActions()` returns its exact
229
- `{ name, scope }` descriptors. A worldless action follows the control path and
278
+ not a private endpoint.** `ApplicationPort.listModuleActions()` returns its exact
279
+ `{ name, scope, inputSchema, outputSchema }` descriptors under
280
+ {§agui-discovery-contract}. A worldless action follows the control path and
230
281
  cannot establish a workspace. A workspace action follows ordinary thread
231
282
  binding, resolves the client envelope first, and invokes core with
232
283
  `{ scope: "workspace", workspaceId: envelope.workspaceId }`; an `id`,
233
284
  `workspaceId`, or similarly named owner parameter cannot override that
234
- identity. `discover.methods` advertises both kinds by name without importing
235
- the extension owner.
285
+ identity. A Worker action additionally receives the thread's bound conversation
286
+ Worker as `{ scope: "worker", workspaceId, workerId }`; client parameters cannot
287
+ select either authority coordinate. `discover.actions` advertises all three
288
+ kinds without importing the extension owner.
236
289
 
237
290
  ### §agui-op-parse Parsed-operation projection
238
291
 
@@ -241,7 +294,7 @@ preserves the parser's source order in its `results` array:
241
294
 
242
295
  | Parser output | AG-UI result |
243
296
  |------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
244
- | Statement before the tail boundary | Its corresponding `CoreSeam.dispatchClientAction` result in the statement's position |
297
+ | Statement before the tail boundary | Its corresponding `ApplicationPort.dispatchClientAction` result in the statement's position |
245
298
  | Bounded hard error | A 400 `agui/action/parse-failed` result in the error's position, preserving parser detail, line, column, source, and severity |
246
299
  | `unparsedTail` under {§unparsed-tail-boundary} | Exactly one final 400 `agui/action/parse-failed` result with its verbatim reason and position, `source: "grammar"`, and no adapter-authored recovery |
247
300
  | Text item | No result; text is not dispatchable |
@@ -261,7 +314,7 @@ a parser fact.
261
314
  | First positioned diagnostic | 400 `agui/action/parse-failed`, preserving parser detail, line, column, source, and severity |
262
315
  | No diagnostic, with `unparsedTail` | 400 `agui/action/parse-failed`, preserving its reason and position with `source: "grammar"` and `severity: "error"` |
263
316
  | Text item, zero or multiple statements, or non-LOOK | 400 `agui/action/invalid-action-parameters` naming the observed admission fact |
264
- | Exactly one LOOK and no other parser fact | Change only `op` to READ and call `CoreSeam.look` under {§op-look}; return its exact `OperationResult` through the action envelope |
317
+ | Exactly one LOOK and no other parser fact | Change only `op` to READ and call `ApplicationPort.look` under {§op-look}; return its exact `OperationResult` through the action envelope |
265
318
 
266
319
  Parser failures use `stage: "parsing"`; action-shape failures use
267
320
  `stage: "action-validation"`. Both are non-retryable.
@@ -269,19 +322,26 @@ Parser failures use `stage: "parsing"`; action-shape failures use
269
322
  §agui-module-actions **One public action namespace.** Core rejects empty and
270
323
  duplicate extension registrations ({§module-action-registration}). At module
271
324
  startup AG-UI rejects any extension name colliding with a built-in before it
272
- opens the listener. A recognized Problem thrown by an extension crosses the
325
+ opens the listener. The resulting executable registry is the sole source for
326
+ scope classification, input admission, dispatch, output projection, and
327
+ discovery under {§agui-action-schema-enforcement}. A recognized Problem thrown by an extension crosses the
273
328
  boundary unchanged; an unexpected handler exception becomes the generic
274
329
  `action-failed` Problem without exposing private exception text.
275
330
 
276
- ### §discovery Discovery membership
331
+ ### §discovery Discovery contract
277
332
 
278
- The `discover` action returns membership, not a parallel description or schema
279
- system:
333
+ The `discover` action returns the complete schema-bearing
334
+ {§agui-discovery-contract} projection of the executable registry:
280
335
 
281
336
  ```ts
282
337
  type Discovery = {
283
- methods: Record<string, true>;
284
- notifications: Record<string, true>;
338
+ schemaVersion: 1;
339
+ actions: Record<string, {
340
+ scope: "worldless" | "workspace";
341
+ inputSchema: JsonSchema;
342
+ outputSchema: JsonSchema;
343
+ }>;
344
+ notifications: Record<string, { payloadSchema: JsonSchema }>;
285
345
  display: ClientDisplayCapabilities;
286
346
  };
287
347
  ```
@@ -290,7 +350,7 @@ type Discovery = {
290
350
  ({§client-display-capabilities}). AG-UI adds no fallback, font, theme, or packet
291
351
  policy.
292
352
 
293
- `methods` contains the 22 built-ins in the table plus every registered module
353
+ `actions` contains the 30 built-ins in the table plus every registered module
294
354
  action. `notifications` contains exactly these externally projected daemon
295
355
  event families:
296
356
 
@@ -299,13 +359,18 @@ event families:
299
359
  | `log/entry` |
300
360
  | `loop/terminated` |
301
361
  | `loop/proposal` |
362
+ | `loop/interaction` |
302
363
  | `notice/event` |
364
+ | `reasoning/event` |
303
365
  | `stream/event` |
304
366
  | `stream/concluded` |
305
367
  | `workspace/branch-batch` |
306
368
 
307
- Discovery does not report parameter pseudo-schemas, plugin catalogs, package
308
- versions, or update availability. Object key order is not a contract.
369
+ The schemas are the same executable values used for runtime admission and
370
+ projection. `plurnk-agui` owns the built-in action and notification registry;
371
+ discovery never reconstructs it from handlers. It does not report plugin
372
+ catalogs, package versions, or update availability. Object key order is not a
373
+ contract.
309
374
 
310
375
  `loop.inject`'s steered effect streams on the original worker's open SSE.
311
376
  `loop.cancel` is its counterpart: the addressable spelling of the SSE-hangup
@@ -327,14 +392,16 @@ into the conversation a generic frontend renders.
327
392
  Workspace information fans to every open AG-UI Run: ambient rows and stream activity
328
393
  remain visible across the workspace, with each SSE
329
394
  using its own render router. Terminal control does not fan. A message AG-UI Run binds
330
- to the exact `loopId` returned by `CoreSeam.runLoop`; an interrupt-resume AG-UI Run binds to the
395
+ to the exact `loopId` returned by `ApplicationPort.runLoop`; an interrupt-resume AG-UI Run binds to the
331
396
  pending item's persisted `loopId` before resolving it. Only that loop's
332
397
  `loop/terminated` event may emit `plurnk.terminated` and close the SSE.
333
398
  The custom event preserves the daemon's exact universal `result`; failures use
334
399
  the Problem `type` as the AG-UI error code and `detail` as its message. The
335
400
  module never reconstructs a failure from a status, summary, or exception text.
336
- Stopped-world tool calls and interrupt outcomes route only to their owning worker;
337
- interrupting sibling AG-UI Runs would violate AG-UI Run identity. Terminations
401
+ Stopped-world tool calls and interrupt outcomes first route to open Runs bound to
402
+ their persisted loop. When no Run owns that loop, they route to their owning
403
+ worker's Runs so an action-produced interrupt can settle its initiating Run. They
404
+ never interrupt a concurrent Run while an exact loop owner is live. Terminations
338
405
  that race ahead of the `runLoop` acknowledgement are held until
339
406
  the loop identity is known. A sibling, child, or concurrent loop can therefore
340
407
  remain visible as topology without ending or relabelling this AG-UI Run.
@@ -367,7 +434,7 @@ values for direct in-process composition. The listener address remains service-o
367
434
 
368
435
  `POST /` (or `/agui`) accepts a schema-valid AG-UI `RunAgentInput`: the last textual
369
436
  `user` message becomes the
370
- `CoreSeam.runLoop` prompt (`maxTurns`/`flags.auto` from the forwarded PLURNK
437
+ `ApplicationPort.runLoop` prompt (`maxTurns`/`flags.auto` from the forwarded PLURNK
371
438
  properties or module defaults); the response is `text/event-stream`,
372
439
  one `data:` line per event, ending after `RUN_FINISHED`/`RUN_ERROR`. Multimodal user content
373
440
  is rejected until the model-loop seam supports it deliberately. Loop auto never answers
@@ -3,7 +3,7 @@ import type { Interrupt, ResumeEntry } from "@ag-ui/core";
3
3
  import type { ClientInteractionProjection, ClientInteractionResolution, ProblemDetails } from "@plurnk/plurnk-contracts";
4
4
  export declare const proposalToolCallId: (logEntryId: number) => string;
5
5
  export declare const logEntryIdFromToolCallId: (toolCallId: string) => number | null;
6
- export declare const proposalToolName: (op: string) => string;
6
+ export declare const proposalToolName: (_op: string) => string;
7
7
  export declare const proposalToolCall: (p: ProposalNotification) => AguiEvent[];
8
8
  export declare const proposalInterrupt: (logEntryId: number) => Interrupt;
9
9
  export interface Resolution {
@@ -41,6 +41,7 @@ export interface AguiPlusState {
41
41
  constraints?: Array<{
42
42
  effect: string;
43
43
  glob: string;
44
+ source: "explicit" | "create";
44
45
  }>;
45
46
  }
46
47
  export interface AguiBudgetState {
@@ -1 +1 @@
1
- {"version":3,"file":"AguiPlus.d.ts","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AguiPlus.d.ts","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
package/dist/AguiPlus.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // engine state → AG-UI events, and the inverse resume-mapping. No transport, no I/O
4
4
  // — so it ports into the in-process module unchanged when the seam lands.
5
5
  //
6
- // §1 proposals/[300] questions → tool-calls (terminate-resume HITL); §2 reads →
6
+ // §1 proposals → tool-calls (terminate-resume HITL); §2 reads →
7
7
  // shared STATE. This is the flagship choreography de-risked as logic before code.
8
8
  import { EventType } from "./types.js";
9
9
  // ── §1 — stop-the-world → tool-call ──────────────────────────────────
@@ -16,17 +16,17 @@ export const logEntryIdFromToolCallId = (toolCallId) => {
16
16
  };
17
17
  // Tool-call NAME — AG-UI terminology all the way up to the seam: the client-facing
18
18
  // name is AG-UI-conventional, not plurnk-namespaced.
19
- // A side-effecting proposal is an approval request; a [300] question elicits input.
20
- // The plurnk correlation rides the opaque toolCallId (`prop:<logEntryId>`), so the
21
- // generic names carry no plurnk vocabulary upward.
22
- export const proposalToolName = (op) => (op === "SEND" ? "request_user_input" : "request_approval");
19
+ // A side-effecting proposal is an approval request. The plurnk correlation rides
20
+ // the opaque toolCallId (`prop:<logEntryId>`), so the generic name carries no
21
+ // plurnk vocabulary upward.
22
+ export const proposalToolName = (_op) => "request_approval";
23
23
  // The worker's tail when it hits a pause: the tool-call, then the CALLER emits
24
24
  // RUN_FINISHED to terminate. The loop stays paused in-engine — untouched.
25
25
  export const proposalToolCall = (p) => {
26
26
  const toolCallId = proposalToolCallId(p.logEntryId);
27
27
  return [
28
28
  { type: EventType.TOOL_CALL_START, toolCallId, toolCallName: proposalToolName(p.op) },
29
- { type: EventType.TOOL_CALL_ARGS, toolCallId, delta: JSON.stringify({ op: p.op, target: p.target, body: p.body, attrs: p.attrs, staleClobberRisk: p.staleClobberRisk }) },
29
+ { type: EventType.TOOL_CALL_ARGS, toolCallId, delta: JSON.stringify({ op: p.op, target: p.target, body: p.body, attrs: p.attrs, flags: p.flags }) },
30
30
  { type: EventType.TOOL_CALL_END, toolCallId },
31
31
  ];
32
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { JsonSchema } from "@plurnk/plurnk-contracts";
2
+ export type AguiActionScope = "worldless" | "workspace" | "worker";
3
+ export interface AguiActionContract {
4
+ readonly scope: AguiActionScope;
5
+ readonly inputSchema: JsonSchema;
6
+ readonly outputSchema: JsonSchema;
7
+ }
8
+ export interface AguiNotificationContract {
9
+ readonly payloadSchema: JsonSchema;
10
+ }
11
+ export declare const AGUI_BUILTIN_ACTIONS: Readonly<{
12
+ ping: AguiActionContract;
13
+ discover: AguiActionContract;
14
+ "providers.list": AguiActionContract;
15
+ "models.list": AguiActionContract;
16
+ "workspace.list": AguiActionContract;
17
+ "workspace.create": AguiActionContract;
18
+ "workspace.attach": AguiActionContract;
19
+ "workspace.workers": AguiActionContract;
20
+ "log.read": AguiActionContract;
21
+ "loop.inject": AguiActionContract;
22
+ "loop.cancel": AguiActionContract;
23
+ "workspace.prompts": AguiActionContract;
24
+ "workspace.rename": AguiActionContract;
25
+ "workspace.constrain": AguiActionContract;
26
+ "workspace.unconstrain": AguiActionContract;
27
+ "workspace.constraints": AguiActionContract;
28
+ "workspace.derivation": AguiActionContract;
29
+ "entry.read": AguiActionContract;
30
+ "op.exec": AguiActionContract;
31
+ "op.parse": AguiActionContract;
32
+ "workspace.members": AguiActionContract;
33
+ "op.look": AguiActionContract;
34
+ "run.fork": AguiActionContract;
35
+ "worker.model.get": AguiActionContract;
36
+ "worker.model.set": AguiActionContract;
37
+ "worker.child.set": AguiActionContract;
38
+ "worker.reasoning.get": AguiActionContract;
39
+ "worker.reasoning.set": AguiActionContract;
40
+ "worker.settings.get": AguiActionContract;
41
+ "worker.settings.set": AguiActionContract;
42
+ }>;
43
+ export declare const AGUI_NOTIFICATIONS: Readonly<{
44
+ "log/entry": AguiNotificationContract;
45
+ "loop/terminated": AguiNotificationContract;
46
+ "loop/proposal": AguiNotificationContract;
47
+ "loop/interaction": AguiNotificationContract;
48
+ "notice/event": AguiNotificationContract;
49
+ "reasoning/event": AguiNotificationContract;
50
+ "stream/event": AguiNotificationContract;
51
+ "stream/concluded": AguiNotificationContract;
52
+ "workspace/branch-batch": AguiNotificationContract;
53
+ }>;
54
+ export type AguiBuiltinActionName = keyof typeof AGUI_BUILTIN_ACTIONS;
55
+ export type AguiNotificationName = keyof typeof AGUI_NOTIFICATIONS;
56
+ //# sourceMappingURL=AguiSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AguiSurface.d.ts","sourceRoot":"","sources":["../src/AguiSurface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;CACtC;AAuED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0FwB,CAAC;AA4B1D,eAAO,MAAM,kBAAkB;;;;;;;;;;EA4DgC,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,kBAAkB,CAAC"}