@plurnk/plurnk-agui 1.3.11 → 1.4.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/.env.defaults +8 -6
- package/README.md +11 -3
- package/SPEC.md +285 -88
- package/dist/AguiPlus.d.ts +2 -1
- package/dist/AguiPlus.d.ts.map +1 -1
- package/dist/AguiPlus.js +5 -5
- package/dist/AguiPlus.js.map +1 -1
- package/dist/DaemonSeam.d.ts +13 -26
- package/dist/DaemonSeam.d.ts.map +1 -1
- package/dist/DaemonSeam.js +1 -1
- package/dist/DaemonSeam.js.map +1 -1
- package/dist/EventRouter.d.ts.map +1 -1
- package/dist/EventRouter.js +16 -5
- package/dist/EventRouter.js.map +1 -1
- package/dist/Module.d.ts +5 -7
- package/dist/Module.d.ts.map +1 -1
- package/dist/Module.js +425 -158
- package/dist/Module.js.map +1 -1
- package/dist/Portal.d.ts +1 -0
- package/dist/Portal.d.ts.map +1 -1
- package/dist/Portal.js +12 -8
- package/dist/Portal.js.map +1 -1
- package/dist/ProposalHitl.d.ts.map +1 -1
- package/dist/ProposalHitl.js +48 -39
- package/dist/ProposalHitl.js.map +1 -1
- package/dist/Translator.d.ts +1 -1
- package/dist/Translator.d.ts.map +1 -1
- package/dist/Translator.js +90 -69
- package/dist/Translator.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/observe.d.ts +8 -0
- package/dist/observe.d.ts.map +1 -0
- package/dist/observe.js +56 -0
- package/dist/observe.js.map +1 -0
- package/dist/types.d.ts +8 -20
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +13 -8
package/.env.defaults
CHANGED
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
# The listener's ADDRESS is the daemon's surface (PLURNK_HOST/PLURNK_PORT — owned
|
|
5
5
|
# by plurnk-service); the module owns the semantics on that surface.
|
|
6
6
|
|
|
7
|
-
# Bearer for the module's edge authz. Empty =
|
|
8
|
-
#
|
|
7
|
+
# Bearer for the module's edge authz. Empty = no module-level bearer requirement;
|
|
8
|
+
# set a value and every non-preflight request must carry
|
|
9
|
+
# `authorization: Bearer <it>` ({§agui-http-authorization}).
|
|
9
10
|
PLURNK_AGUI_TOKEN=
|
|
10
11
|
|
|
11
12
|
# Per-run turn cap handed to the engine when a run doesn't carry its own maxTurns.
|
|
12
|
-
# Empty = no module-level
|
|
13
|
+
# Empty = no module-level default; otherwise -1 or a non-negative safe integer
|
|
14
|
+
# (the engine's own operator ceiling still applies).
|
|
13
15
|
PLURNK_AGUI_MAX_TURNS=
|
|
14
16
|
|
|
15
|
-
# SSE heartbeat cadence in milliseconds
|
|
16
|
-
#
|
|
17
|
-
#
|
|
17
|
+
# Required SSE heartbeat cadence in milliseconds, from 0 through 2147483647.
|
|
18
|
+
# A long model generation emits no events, so a comment frame at this cadence keeps
|
|
19
|
+
# consumers fed. 0 disables.
|
|
18
20
|
PLURNK_AGUI_HEARTBEAT_MS=15000
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ interface and translates daemon lifecycle events into AG-UI events.
|
|
|
7
7
|
|
|
8
8
|
`POST /` accepts `RunAgentInput` and returns an AG-UI event stream.
|
|
9
9
|
|
|
10
|
-
PLURNK uses standard AG-UI events for
|
|
10
|
+
PLURNK uses standard AG-UI events for Runs, messages, steps, tool calls, state,
|
|
11
11
|
and approval requests. Additional execution metadata uses namespaced
|
|
12
12
|
`plurnk.*` custom events so generic AG-UI clients can ignore it safely.
|
|
13
13
|
|
|
@@ -27,9 +27,17 @@ daemon.registerModule(Module.init({
|
|
|
27
27
|
}));
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
The service supplies this package's `.env.defaults` through the assembled
|
|
31
|
+
environment before module startup. A direct in-process consumer must provide
|
|
32
|
+
that environment or an explicit `heartbeatMs`; explicit `token`, `maxTurns`,
|
|
33
|
+
and `heartbeatMs` options override their corresponding environment values.
|
|
34
|
+
`SPEC.md` owns the exact value contract.
|
|
35
|
+
|
|
30
36
|
The module owns transport authentication, request validation, event translation,
|
|
31
|
-
and proposal delivery.
|
|
32
|
-
|
|
37
|
+
and proposal delivery. It consumes core's disposition-bearing proposal projection
|
|
38
|
+
for both live events and reconnect rather than rebuilding policy from loop flags.
|
|
39
|
+
Core owns persistence and model-loop policy; clients own rendering and local
|
|
40
|
+
terminal/editor behavior.
|
|
33
41
|
|
|
34
42
|
## Development
|
|
35
43
|
|
package/SPEC.md
CHANGED
|
@@ -7,78 +7,107 @@ recompute them.
|
|
|
7
7
|
|
|
8
8
|
## Architecture
|
|
9
9
|
|
|
10
|
-
- **The module is an in-process plugin of the daemon**
|
|
10
|
+
- §agui-daemon-client **The module is an in-process plugin of the daemon** — activated
|
|
11
11
|
at boot (`registerModule` → the core seam handle); it opens the AG-UI+ listener and owns
|
|
12
12
|
the client interface. No WebSocket, no separate process.
|
|
13
|
-
- **A
|
|
14
|
-
—
|
|
13
|
+
- §agui-thread-binding **A PLURNK workspace is the world; an AG-UI thread is a conversation over it**
|
|
14
|
+
— the lifecycle vocabulary is defined by service {§lifecycle-terms}. PLURNK's machine model ({§machine-processes}) splits the world (a workspace: one
|
|
15
15
|
curated workspace) from the CONVERSATION (a worker: a history over that world). AG-UI's workspace
|
|
16
16
|
concept is the workspace, selected by name, VERBATIM, via `forwardedProps.plurnk.workspace`
|
|
17
17
|
(attach if it exists, create with exactly that name otherwise — no prefix, no forging). The
|
|
18
18
|
workspace is REQUIRED: a worker has no existence without a world, so its absence is a contract
|
|
19
|
-
violation the module rejects (
|
|
19
|
+
violation the module rejects (400) - never a workspace forged from the `threadId`. The
|
|
20
20
|
`threadId` is the conversation over that world, and the name is the identity at
|
|
21
|
-
BOTH levels: `threadId` == the workspace name binds the workspace's
|
|
22
|
-
conversation, `ensureModelWorker` —
|
|
21
|
+
BOTH levels: `threadId` == the workspace name binds the workspace's model worker (the default
|
|
22
|
+
conversation, `ensureModelWorker` — its durable default-conversation role identifies it,
|
|
23
|
+
never a name parse or root ordering); a DISTINCT
|
|
23
24
|
`threadId` names its own conversation worker — found by name if it exists (forks and prior
|
|
24
|
-
conversations are addressable as threads), minted via `createConversationWorker`
|
|
25
|
-
if it doesn't.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
conversations are addressable as threads), minted via `createConversationWorker`
|
|
26
|
+
if it doesn't. The core workspace envelope carries only the workspace and selected client
|
|
27
|
+
actor ({§methods-rebind}); AG-UI owns the separate per-thread conversation binding.
|
|
28
|
+
World-scoped actions (`loop.inject`, `loop.cancel`, `log.read` default,
|
|
29
|
+
`entry.read`, `run.fork`) operate on the THREAD's conversation, never blindly on the model worker.
|
|
30
|
+
Extended context persists across AG-UI Runs because the worker's log does.
|
|
31
|
+
- §agui-run-authority **AG-UI owns the client lifecycle** — `threadId`, `runId`,
|
|
29
32
|
`RUN_STARTED`, `RUN_FINISHED`, `RUN_ERROR`, interrupt outcomes, and `RunAgentInput.resume`
|
|
30
33
|
follow the official `@ag-ui/core` schemas. PLURNK does not maintain a parallel client
|
|
31
34
|
lifecycle dialect. PLURNK owns the internal worker/loop/turn topology and projects it
|
|
32
35
|
through standard events plus namespaced `plurnk.*` extensions.
|
|
33
36
|
|
|
34
|
-
##
|
|
35
|
-
|
|
36
|
-
One daemon notification
|
|
37
|
-
|
|
38
|
-
| plurnk wire
|
|
39
|
-
|
|
40
|
-
| `
|
|
41
|
-
| `log/entry` turn boundary
|
|
42
|
-
| `log/entry` op=PLAN (model)
|
|
43
|
-
| `log/entry` op=SEND (model)
|
|
44
|
-
| `log/entry` other op (model)
|
|
45
|
-
| `log/entry` op=model (mirror)
|
|
46
|
-
| `log/entry` origin≠model
|
|
47
|
-
| `loop/proposal`
|
|
48
|
-
| `loop/terminated`
|
|
49
|
-
|
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
37
|
+
## §agui-projection The projection
|
|
38
|
+
|
|
39
|
+
One accepted Run or daemon notification produces zero-or-more AG-UI events:
|
|
40
|
+
|
|
41
|
+
| plurnk wire | AG-UI events |
|
|
42
|
+
| ------------------------------------------ | ------------ |
|
|
43
|
+
| schema-valid `RunAgentInput` | `RUN_STARTED` + initial `STATE_SNAPSHOT` |
|
|
44
|
+
| `log/entry` turn boundary | `STEP_FINISHED` + `STEP_STARTED` (`turn-<id>`) |
|
|
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) |
|
|
47
|
+
| `log/entry` other op (model) | `TOOL_CALL_START/ARGS/END` (+ `TOOL_CALL_RESULT` when rx exists) |
|
|
48
|
+
| `log/entry` op=model (mirror) | 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
|
+
| `log/entry` origin≠model | `CUSTOM plurnk.ambient` (foists, deltas, narrations) |
|
|
50
|
+
| client-owned `loop/proposal` | `TOOL_CALL_START/ARGS/END`, then `RUN_FINISHED` with an interrupt outcome |
|
|
51
|
+
| `loop/terminated` | `STATE_DELTA` (budget) + `CUSTOM plurnk.terminated` (including the daemon's top-level attribution projection) + `RAW` (the provider's native completion frame, `source: provider`, §475) + `RUN_FINISHED` (`result.status === 200`) or `RUN_ERROR` (otherwise, from the exact RFC 9457 Problem Details) |
|
|
52
|
+
| transport failure after SSE opens | `CUSTOM plurnk.problem` (exact Problem Details) + `RUN_ERROR` (`code` = Problem `type`, `message` = Problem `detail`) |
|
|
53
|
+
| `notice/event` | `CUSTOM plurnk.notice` |
|
|
54
|
+
| `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
|
+
| `workspace/branch-batch` | `CUSTOM plurnk.branch_batch` with the daemon's full queued/running/completed/failed/recovery-required lifecycle payload |
|
|
56
|
+
|
|
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:
|
|
61
|
+
|
|
62
|
+
| Projection | Standard representation |
|
|
63
|
+
| ---------- | ----------------------- |
|
|
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` |
|
|
52
66
|
|
|
53
67
|
- **An op row IS a tool call** — its `coordinate` is the `toolCallId`, its tx the args (one
|
|
54
68
|
delta: a dispatched plurnk op is atomic), its rx the result. The log-shaped richness the
|
|
55
69
|
core vocabulary can't hold (fold state, tags, tokens) stays on the row inside
|
|
56
70
|
`plurnk.ambient`/`TOOL_CALL_RESULT` payloads.
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
- §agui-encrypted-reasoning **Encrypted reasoning projects only onto an entity
|
|
72
|
+
AG-UI actually created.** Core supplies the exact normalized provider-detail
|
|
73
|
+
list on the model mirror row's `attrs.reasoning`. The provider detail `id` is
|
|
74
|
+
forensic identity, not an AG-UI entity ID ({§provider-encrypted-reasoning}).
|
|
75
|
+
|
|
76
|
+
| Condition | Projection |
|
|
77
|
+
| ------------------------------------------- | ---------- |
|
|
78
|
+
| Same-turn SEND + one nonempty message value | One `REASONING_ENCRYPTED_VALUE` with `subtype: "message"` and `entityId` equal to that SEND message's coordinate. |
|
|
79
|
+
| Null or absent provider detail `id` | No effect on correlation; the actual SEND identity owns the client relation. |
|
|
80
|
+
| No SEND or not exactly one message value | No standard encrypted event. Nothing is selected, joined, or overwritten. |
|
|
81
|
+
| Provider-only and unprojected evidence | Detail `id`, `format`, ordering, and every value remain lossless on the `plurnk.row` mirror evidence. |
|
|
82
|
+
| Reattach | The same singular value occupies `encryptedValue` on the corresponding SEND `AssistantMessage` in `MESSAGES_SNAPSHOT`. |
|
|
83
|
+
|
|
84
|
+
AG-UI's single message slot cannot represent multiple provider details without
|
|
85
|
+
losing cardinality. The translator therefore emits neither invented reasoning
|
|
86
|
+
spans nor repeated events whose last value would silently overwrite its
|
|
87
|
+
siblings.
|
|
88
|
+
- §agui-custom-namespace **The custom namespace** — plurnk-specific metadata rides
|
|
72
89
|
`CUSTOM` events named `plurnk.*` (`plurnk.send`, `plurnk.ambient`,
|
|
73
|
-
`plurnk.
|
|
90
|
+
`plurnk.notice`, `plurnk.stream`, `plurnk.branch_batch`, `plurnk.terminated` — the full loop
|
|
74
91
|
outcome the budget `STATE_DELTA` can't hold). Generic frontends skip unknown customs; plurnk-aware frontends render
|
|
75
92
|
them richly. Nothing plurnk-specific ever masquerades as a core event.
|
|
76
|
-
- **Numbers pass through verbatim** {§agui-numbers-passthrough} — the budget `STATE_DELTA`
|
|
77
|
-
carries the daemon's own usage figures (`contextTokens`, `contextSize` = the effective
|
|
78
|
-
prompt budget, service#345). The module never recomputes a number; the daemon's gauge is
|
|
79
|
-
the gauge.
|
|
80
93
|
|
|
81
|
-
|
|
94
|
+
§agui-numbers-passthrough **Usage numbers pass through verbatim.** The module
|
|
95
|
+
never recomputes the daemon's gauge.
|
|
96
|
+
|
|
97
|
+
| AG-UI state location | Daemon source | Meaning |
|
|
98
|
+
|:--------------------------------------------|:-----------------------------------------|:--------|
|
|
99
|
+
| `snapshot.plurnk.providers[*].promptBudget` | `providers.list.aliases[*]` | Each provider alias's effective model-facing prompt ceiling, or `null` when unknown. |
|
|
100
|
+
| `STATE_DELTA /budget/contextTokens` | `loop/terminated.usage.contextTokens` | Latest turn's provider-reported prompt occupancy. |
|
|
101
|
+
| `STATE_DELTA /budget/promptBudget` | `loop/terminated.usage.promptBudget` | Latest turn's effective model-facing prompt ceiling, or `null` when unknown. |
|
|
102
|
+
| `STATE_DELTA /budget/promptTokens` | `loop/terminated.usage.promptTokens` | Loop-total provider-reported prompt usage. |
|
|
103
|
+
| `STATE_DELTA /budget/completionTokens` | `loop/terminated.usage.completionTokens` | Loop-total provider-reported completion usage. |
|
|
104
|
+
|
|
105
|
+
§agui-cost-evidence `plurnk.terminated.usage` preserves the daemon's ordered
|
|
106
|
+
`costs` evidence and nullable `costUsd` projection verbatim. Generic AG-UI has
|
|
107
|
+
no standard monetary field; the custom event therefore distinguishes unknown
|
|
108
|
+
from zero without fabricating either value.
|
|
109
|
+
|
|
110
|
+
- §agui-row-channel **The row channel** — every log row ALSO rides `CUSTOM plurnk.row`
|
|
82
111
|
carrying the full wire entry (fold state, tags-in-signal, tokens, coordinate) alongside its
|
|
83
112
|
core projection. Rich clients (TUI/nvim) render plurnk-native fidelity from `plurnk.row`;
|
|
84
113
|
generic clients never see the difference. This is the metadata channel the exclusive-portal
|
|
@@ -88,75 +117,243 @@ One daemon notification in, zero-or-more AG-UI events out (`Translator`, pure):
|
|
|
88
117
|
`STATE_DELTA`s. A dropped SSE stream cancels the loop (`loop.cancel`) — the frontend hanging
|
|
89
118
|
up IS the abort signal; no worker is orphaned unwatched.
|
|
90
119
|
|
|
91
|
-
- **Reattach replays**
|
|
120
|
+
- §agui-replay **Reattach replays** — a rediscovered thread (the module restarted, a second
|
|
92
121
|
frontend arrived) attaches to its existing workspace by name→id and opens ORIENTED: the model
|
|
93
|
-
worker's
|
|
94
|
-
reachable via live `plurnk.row
|
|
122
|
+
worker's PLAN activities and SEND speech replay as `MESSAGES_SNAPSHOT`; everything else stays
|
|
123
|
+
reachable via live `plurnk.row`. Pending proposals remain durable and are presented as
|
|
95
124
|
interrupts when the owning conversation is resumed; a days-old question is discoverable,
|
|
96
125
|
never converted into a mystery hang.
|
|
97
126
|
|
|
98
|
-
##
|
|
127
|
+
## §agui-proposal-resolve Stop-the-world
|
|
99
128
|
|
|
100
|
-
Every client-owned daemon proposal
|
|
101
|
-
|
|
129
|
+
Every client-owned daemon proposal - file edits and `[300]` operator questions —
|
|
130
|
+
emits an AG-UI tool call and terminates AG-UI Run A with
|
|
102
131
|
`RUN_FINISHED.outcome.type = "interrupt"`. The durable loop remains paused indefinitely
|
|
103
|
-
by default; absence is not an answer. Run B on the same thread supplies standard
|
|
132
|
+
by default; absence is not an answer. AG-UI Run B on the same thread supplies standard
|
|
104
133
|
`RunAgentInput.resume` entries. Each entry correlates through `interruptId = toolCallId =
|
|
105
134
|
"prop:<logEntryId>"`; the module resolves every pending interrupt for that worker, binds
|
|
106
|
-
|
|
135
|
+
AG-UI Run B to the persisted loop, and releases it. A resume containing foreign, partial, or
|
|
107
136
|
multi-worker interrupt sets fails before any proposal is released.
|
|
108
137
|
|
|
109
|
-
|
|
138
|
+
§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:
|
|
139
|
+
|
|
140
|
+
| Disposition owner | AG-UI behavior |
|
|
141
|
+
| ----------------- | ----------------------------------------------------------------------------- |
|
|
142
|
+
| `client` | Emit/re-surface the proposal tool call and standard interrupt |
|
|
143
|
+
| `loop` | Emit no tool call; core applies the carried decision and the Run continues |
|
|
144
|
+
|
|
145
|
+
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.
|
|
146
|
+
|
|
147
|
+
## §agui-management-plane The action surface
|
|
148
|
+
|
|
149
|
+
PLURNK has three inputs through the one AG-UI Run endpoint. A normal user message
|
|
150
|
+
and a standard proposal resume are not management actions and have no invented
|
|
151
|
+
`loop.run` or `loop.resolve` action names.
|
|
152
|
+
|
|
153
|
+
```mermaid
|
|
154
|
+
flowchart LR
|
|
155
|
+
client["AG-UI client"] --> run["POST RunAgentInput"]
|
|
156
|
+
run --> classify{"Input form"}
|
|
157
|
+
classify -->|"textual user message"| loop["CoreSeam.runLoop"]
|
|
158
|
+
classify -->|"RunAgentInput.resume"| proposal["CoreSeam.resolveProposal"]
|
|
159
|
+
classify -->|"forwardedProps.plurnk.action"| actions{"AG-UI action registry"}
|
|
160
|
+
actions --> builtIn["Built-in validation<br/>and typed CoreSeam call"]
|
|
161
|
+
actions --> extension["CoreSeam.invokeModuleAction"]
|
|
162
|
+
loop --> events["Core event source"]
|
|
163
|
+
proposal --> events
|
|
164
|
+
builtIn --> events
|
|
165
|
+
events --> projection["AG-UI projection"]
|
|
166
|
+
extension --> result["plurnk.action.result"]
|
|
167
|
+
projection --> client
|
|
168
|
+
result --> client
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
A management-action Run carries
|
|
172
|
+
`forwardedProps.plurnk.action = { kind, ...params }`. Once settled, it returns
|
|
173
|
+
one `CUSTOM plurnk.action.result` shaped as `{ kind, ok, result | problem }`,
|
|
174
|
+
followed by `RUN_FINISHED`. A proposal-gated action may first end with an
|
|
175
|
+
interrupt and deliver that settled result on the standard resume Run. A failed
|
|
176
|
+
action preserves exact RFC 9457 Problem Details and is the result of a
|
|
177
|
+
successfully transported management Run; it does not turn the Run into
|
|
178
|
+
`RUN_ERROR` or invent a parallel error string. Unknown kinds return an honest
|
|
179
|
+
`unknown-action` Problem. There is no side-channel endpoint.
|
|
180
|
+
|
|
181
|
+
| Public action | Scope | Parameters | Owner / effect |
|
|
182
|
+
|--------------------------|-----------|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|
|
|
183
|
+
| `ping` | Worldless | none | AG-UI-local liveness; returns `{}`. |
|
|
184
|
+
| `discover` | Worldless | none | AG-UI-local public membership manifest ({§discovery}). |
|
|
185
|
+
| `providers.list` | Worldless | none | `CoreSeam.listProviders`. |
|
|
186
|
+
| `workspace.list` | Worldless | none | `CoreSeam.listWorkspaces`. |
|
|
187
|
+
| `workspace.create` | Worldless | `name?`, `projectRoot?`, `settings?`, `constraints?` | Creates or attaches the exact named world, or asks core to create an automatically named world. |
|
|
188
|
+
| `workspace.attach` | Worldless | `id`, `workerId?` | `CoreSeam.attachWorkspace`; returns the selected envelope. |
|
|
189
|
+
| `workspace.workers` | Workspace | `id?` | `CoreSeam.listWorkers`; an explicit id overrides the bound workspace. |
|
|
190
|
+
| `log.read` | Workspace | `workerId?`, log-coordinate filters | `CoreSeam.readLog`; defaults to the thread's conversation worker. |
|
|
191
|
+
| `loop.inject` | Workspace | `prompt` | `CoreSeam.runLoop` on the thread's conversation worker; folds into live work or enqueues a loop. |
|
|
192
|
+
| `loop.cancel` | Workspace | none | `CoreSeam.cancelDrain` on the thread's conversation worker. |
|
|
193
|
+
| `workspace.prompts` | Workspace | `limit?` | `CoreSeam.listPrompts`. |
|
|
194
|
+
| `workspace.rename` | Workspace | `name` | `CoreSeam.renameWorkspace`. |
|
|
195
|
+
| `workspace.constrain` | Workspace | `effect`, `glob` | `CoreSeam.constrain`. |
|
|
196
|
+
| `workspace.unconstrain` | Workspace | `effect`, `glob` | `CoreSeam.unconstrain`. |
|
|
197
|
+
| `workspace.constraints` | Workspace | none | `CoreSeam.listConstraints`. |
|
|
198
|
+
| `workspace.derivation` | Workspace | none | `CoreSeam.workspaceDerivationStatus`. |
|
|
199
|
+
| `entry.read` | Workspace | `target`, `channel?`, `offset?` | Calls `CoreSeam.readEntry` with the thread's conversation worker and preserves validated {§entry-read-result}. |
|
|
200
|
+
| `op.exec` | Workspace | `command` | Constructs one EXEC statement and calls `CoreSeam.dispatchClientAction` on the client worker. |
|
|
201
|
+
| `op.parse` | Workspace | `text` | Parses and projects PLURNK text under {§agui-op-parse}. |
|
|
202
|
+
| `workspace.members` | Workspace | none | `CoreSeam.listMembers`. |
|
|
203
|
+
| `op.look` | Workspace | `text` | Admits one LOOK under {§agui-op-look}, rewrites it to READ, and calls core's no-log `look` projection. |
|
|
204
|
+
| `run.fork` | Workspace | `name?` | `CoreSeam.forkWorker` from the thread's conversation worker. |
|
|
205
|
+
| Registered module action | Worldless | owner-defined | `CoreSeam.invokeModuleAction`; the handler receives only the supplied params and owns their validation and result. |
|
|
206
|
+
|
|
207
|
+
### §agui-op-parse Parsed-operation projection
|
|
208
|
+
|
|
209
|
+
`op.parse` dispatches all trusted-prefix statements as one client action and
|
|
210
|
+
preserves the parser's source order in its `results` array:
|
|
211
|
+
|
|
212
|
+
| Parser output | AG-UI result |
|
|
213
|
+
|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
214
|
+
| Statement before the tail boundary | Its corresponding `CoreSeam.dispatchClientAction` result in the statement's position |
|
|
215
|
+
| Bounded hard error | A 400 `agui/action/parse-failed` result in the error's position, preserving parser detail, line, column, source, and severity |
|
|
216
|
+
| `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 |
|
|
217
|
+
| Text item | No result; text is not dispatchable |
|
|
110
218
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
no side-channel RPC endpoint; the worker envelope is the whole interface. Unknown kinds
|
|
114
|
-
error honestly (`ok:false`). `loop.inject` rides this surface; its steered effect
|
|
115
|
-
streams on the original worker's open SSE. `loop.cancel` is its counterpart — it aborts
|
|
116
|
-
the model worker's active drain (the addressable spelling of the SSE-hangup abort; both
|
|
117
|
-
clients' stop controls ride it). An action that opens a stream remains one live AG-UI run:
|
|
118
|
-
its result is held until every observed stream emits `stream/concluded`, then the result
|
|
119
|
-
and `RUN_FINISHED` close that same run. A client disconnect before settlement cancels the
|
|
120
|
-
action worker with reason `client_disconnected`; it never silently converts the action
|
|
121
|
-
into detached background work.
|
|
219
|
+
No statement at or beyond the tail boundary is dispatched. Every parse failure
|
|
220
|
+
uses `stage: "parsing"` and `retryable: false`.
|
|
122
221
|
|
|
123
|
-
|
|
222
|
+
### §agui-op-look Single-statement observation admission
|
|
223
|
+
|
|
224
|
+
`op.look` admits a parser result only when it contains exactly one LOOK
|
|
225
|
+
statement, no other item, and no `unparsedTail`. Hidden surrounding whitespace
|
|
226
|
+
is not an item. The action never selects a trusted prefix or silently discards
|
|
227
|
+
a parser fact.
|
|
228
|
+
|
|
229
|
+
| Parser result | AG-UI outcome |
|
|
230
|
+
|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
|
|
231
|
+
| First positioned diagnostic | 400 `agui/action/parse-failed`, preserving parser detail, line, column, source, and severity |
|
|
232
|
+
| No diagnostic, with `unparsedTail` | 400 `agui/action/parse-failed`, preserving its reason and position with `source: "grammar"` and `severity: "error"` |
|
|
233
|
+
| Text item, zero or multiple statements, or non-LOOK | 400 `agui/action/invalid-action-parameters` naming the observed admission fact |
|
|
234
|
+
| 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 |
|
|
235
|
+
|
|
236
|
+
Parser failures use `stage: "parsing"`; action-shape failures use
|
|
237
|
+
`stage: "action-validation"`. Both are non-retryable.
|
|
238
|
+
|
|
239
|
+
§agui-module-actions **One public action namespace.** Core rejects empty and
|
|
240
|
+
duplicate extension registrations ({§module-action-registration}). At module
|
|
241
|
+
startup AG-UI rejects any extension name colliding with a built-in before it
|
|
242
|
+
opens the listener. A recognized Problem thrown by an extension crosses the
|
|
243
|
+
boundary unchanged; an unexpected handler exception becomes the generic
|
|
244
|
+
`action-failed` Problem without exposing private exception text.
|
|
245
|
+
|
|
246
|
+
### §discovery Discovery membership
|
|
247
|
+
|
|
248
|
+
The `discover` action returns membership, not a parallel description or schema
|
|
249
|
+
system:
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
type Discovery = {
|
|
253
|
+
methods: Record<string, true>;
|
|
254
|
+
notifications: Record<string, true>;
|
|
255
|
+
display: ClientDisplayCapabilities;
|
|
256
|
+
};
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`display` is Core's validated, contracts-owned installed scheme/MIME projection
|
|
260
|
+
({§client-display-capabilities}). AG-UI adds no fallback, font, theme, or packet
|
|
261
|
+
policy.
|
|
262
|
+
|
|
263
|
+
`methods` contains the 22 built-ins in the table plus every registered module
|
|
264
|
+
action. `notifications` contains exactly these externally projected daemon
|
|
265
|
+
event families:
|
|
266
|
+
|
|
267
|
+
| Notification |
|
|
268
|
+
|--------------|
|
|
269
|
+
| `log/entry` |
|
|
270
|
+
| `loop/terminated` |
|
|
271
|
+
| `loop/proposal` |
|
|
272
|
+
| `notice/event` |
|
|
273
|
+
| `stream/event` |
|
|
274
|
+
| `stream/concluded` |
|
|
275
|
+
| `workspace/branch-batch` |
|
|
276
|
+
|
|
277
|
+
Discovery does not report parameter pseudo-schemas, plugin catalogs, package
|
|
278
|
+
versions, or update availability. Object key order is not a contract.
|
|
279
|
+
|
|
280
|
+
`loop.inject`'s steered effect streams on the original worker's open SSE.
|
|
281
|
+
`loop.cancel` is its counterpart: the addressable spelling of the SSE-hangup
|
|
282
|
+
abort. An action that opens a stream remains one live AG-UI Run; its result is
|
|
283
|
+
held until every observed stream emits `stream/concluded`, then the result and
|
|
284
|
+
`RUN_FINISHED` close that Run. A client disconnect before settlement cancels
|
|
285
|
+
the action worker with reason `client_disconnected`; it never silently converts
|
|
286
|
+
the action into detached background work.
|
|
287
|
+
|
|
288
|
+
## §agui-topology-scope Topology scope
|
|
124
289
|
|
|
125
290
|
The workspace broadcast carries EVERY worker's rows (workers, the plurnk worker, siblings);
|
|
126
|
-
only the thread's model worker projects onto the core vocabulary. Foreign-
|
|
291
|
+
only the thread's model worker projects onto the core vocabulary. Foreign-worker rows ride
|
|
127
292
|
`plurnk.row`/`plurnk.ambient` — visible to rich clients as topology, never interleaved
|
|
128
293
|
into the conversation a generic frontend renders.
|
|
129
294
|
|
|
130
|
-
## Event fan and
|
|
295
|
+
## §agui-broadcast-fan Event fan and AG-UI Run settlement
|
|
131
296
|
|
|
132
|
-
Workspace information fans to every open
|
|
297
|
+
Workspace information fans to every open AG-UI Run: ambient rows and stream activity
|
|
133
298
|
remain visible across the workspace, with each SSE
|
|
134
|
-
using its own render router. Terminal control does not fan. A message
|
|
135
|
-
to the exact `loopId` returned by `
|
|
299
|
+
using its own render router. Terminal control does not fan. A message AG-UI Run binds
|
|
300
|
+
to the exact `loopId` returned by `CoreSeam.runLoop`; a proposal-resume AG-UI Run binds to the
|
|
136
301
|
pending proposal's persisted `loopId` before resolving it. Only that loop's
|
|
137
302
|
`loop/terminated` event may emit `plurnk.terminated` and close the SSE.
|
|
303
|
+
The custom event preserves the daemon's exact universal `result`; failures use
|
|
304
|
+
the Problem `type` as the AG-UI error code and `detail` as its message. The
|
|
305
|
+
module never reconstructs a failure from a status, summary, or exception text.
|
|
138
306
|
Proposal tool calls and interrupt outcomes route only to the proposal's owning
|
|
139
|
-
worker; interrupting sibling
|
|
140
|
-
that race ahead of the `
|
|
307
|
+
worker; interrupting sibling AG-UI Runs would violate AG-UI Run identity. Terminations
|
|
308
|
+
that race ahead of the `runLoop` acknowledgement are held until
|
|
141
309
|
the loop identity is known. A sibling, child, or concurrent loop can therefore
|
|
142
|
-
remain visible as topology without ending or relabelling this
|
|
310
|
+
remain visible as topology without ending or relabelling this AG-UI Run.
|
|
143
311
|
|
|
144
312
|
Two consequences the module owns and a client must handle:
|
|
145
313
|
|
|
146
|
-
- **Multiplicity.** Workspace stream information may arrive on every open
|
|
147
|
-
that funnels all
|
|
148
|
-
through one shared handler (e.g. a single dispatch) must
|
|
314
|
+
- **Multiplicity.** Workspace stream information may arrive on every open AG-UI Run. A client
|
|
315
|
+
that funnels all AG-UI Runs
|
|
316
|
+
through one shared handler (e.g. a single dispatch) must serialize its management Runs —
|
|
149
317
|
one action in flight, the rest queued — or a background action's stream steals the shared
|
|
150
|
-
slot. Both first-party clients do exactly this
|
|
151
|
-
- **No silent drop.** Workspace information never routes to a lone last-binder
|
|
152
|
-
|
|
153
|
-
|
|
318
|
+
slot. Both first-party clients do exactly this through a serialized management lane.
|
|
319
|
+
- **No silent drop.** Workspace information never routes to a lone last-binder; the
|
|
320
|
+
client-side single-slot regression is pinned against here.
|
|
321
|
+
|
|
322
|
+
## §agui-configuration Module configuration
|
|
154
323
|
|
|
155
|
-
|
|
324
|
+
The daemon assembles installed package defaults through
|
|
325
|
+
{§operator-config-env-defaults}; AG-UI reads and validates its own keys from that
|
|
326
|
+
environment. Explicit `Module.init` options override their corresponding environment
|
|
327
|
+
values for direct in-process composition. The listener address remains service-owned.
|
|
328
|
+
|
|
329
|
+
| Input | Owner | Empty or absent | Accepted value | Effect |
|
|
330
|
+
| ---------------------------------- | ------- | -------------------------------------- | ----------------------------------- | ------ |
|
|
331
|
+
| `PLURNK_HOST` / `PLURNK_PORT` | Service | Invalid at service boot | Service-valid host and port | Core supplies the listener address to `Module.init`. |
|
|
332
|
+
| `PLURNK_AGUI_TOKEN` | AG-UI | No module-level bearer requirement | Any string | A non-empty value requires the exact bearer on every non-preflight request. |
|
|
333
|
+
| `PLURNK_AGUI_MAX_TURNS` | AG-UI | No module-level default | `-1` or a non-negative safe integer | Supplies `maxTurns` only when the Run does not carry its own value. |
|
|
334
|
+
| `PLURNK_AGUI_HEARTBEAT_MS` | AG-UI | Invalid; the package floor is required | Integer `0` through `2147483647` | SSE comment-frame cadence in milliseconds; `0` disables it. |
|
|
335
|
+
|
|
336
|
+
## §agui-run-endpoint The AG-UI Run endpoint
|
|
156
337
|
|
|
157
338
|
`POST /` (or `/agui`) accepts a schema-valid AG-UI `RunAgentInput`: the last textual
|
|
158
339
|
`user` message becomes the
|
|
159
|
-
`
|
|
340
|
+
`CoreSeam.runLoop` prompt (`maxTurns`/`flags.auto` from the forwarded PLURNK
|
|
341
|
+
properties or module defaults); the response is `text/event-stream`,
|
|
160
342
|
one `data:` line per event, ending after `RUN_FINISHED`/`RUN_ERROR`. Multimodal user content
|
|
161
343
|
is rejected until the model-loop seam supports it deliberately. Loop auto never answers
|
|
162
344
|
a question — that is the daemon's own rule; the module inherits it.
|
|
345
|
+
|
|
346
|
+
§agui-http-authorization When `PLURNK_AGUI_TOKEN` is non-empty, every
|
|
347
|
+
non-preflight request must carry that exact value as an
|
|
348
|
+
`authorization: Bearer <token>` header. Authorization precedes request-body
|
|
349
|
+
reading. A missing or mismatched credential returns the stable 401
|
|
350
|
+
`bearer-token-required` Problem.
|
|
351
|
+
|
|
352
|
+
§agui-http-failure Failures before SSE headers are sent use
|
|
353
|
+
`application/problem+json` with exact
|
|
354
|
+
RFC 9457 Problem Details. Once SSE has opened, `CUSTOM plurnk.problem` preserves
|
|
355
|
+
that same object and `RUN_ERROR` maps it to the standard AG-UI fields. The custom
|
|
356
|
+
event and `plurnk.terminated.result.problem` are lossless; `RUN_ERROR.code` and
|
|
357
|
+
`message` are the required standard projection, not a second failure object.
|
|
358
|
+
Consumers preserve the exact Problem from the lossless surface and never
|
|
359
|
+
reconstruct one from `RUN_ERROR`.
|
package/dist/AguiPlus.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AguiEvent, type ProposalNotification } from "./types.ts";
|
|
2
2
|
import type { Interrupt, ResumeEntry } from "@ag-ui/core";
|
|
3
|
+
import type { ProblemDetails } from "@plurnk/plurnk-contracts";
|
|
3
4
|
export declare const proposalToolCallId: (logEntryId: number) => string;
|
|
4
5
|
export declare const logEntryIdFromToolCallId: (toolCallId: string) => number | null;
|
|
5
6
|
export declare const proposalToolName: (op: string) => string;
|
|
@@ -49,7 +50,7 @@ export type ActionOutcome = {
|
|
|
49
50
|
result?: unknown;
|
|
50
51
|
} | {
|
|
51
52
|
ok: false;
|
|
52
|
-
|
|
53
|
+
problem: ProblemDetails;
|
|
53
54
|
};
|
|
54
55
|
export declare const actionResult: (kind: string, outcome: ActionOutcome) => AguiEvent;
|
|
55
56
|
//# sourceMappingURL=AguiPlus.d.ts.map
|
package/dist/AguiPlus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AguiPlus.d.ts","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"AAQA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AguiPlus.d.ts","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"AAQA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK/D,eAAO,MAAM,kBAAkB,eAAgB,MAAM,KAAG,MAA8B,CAAC;AACvF,eAAO,MAAM,wBAAwB,eAAgB,MAAM,KAAG,MAAM,GAAG,IAGtE,CAAC;AAOF,eAAO,MAAM,gBAAgB,OAAQ,MAAM,KAAG,MAAqE,CAAC;AAIpH,eAAO,MAAM,gBAAgB,MAAO,oBAAoB,KAAG,SAAS,EAOnE,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAgB,MAAM,KAAG,SAarD,CAAC;AAGH,MAAM,WAAW,UAAU;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3G,eAAO,MAAM,oBAAoB,UAAW,WAAW,KAAG,UAAU,GAAG,IAStE,CAAC;AAIF,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAClG,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9F,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AACD,eAAO,MAAM,aAAa,MAAO,aAAa,KAAG,SAA0E,CAAC;AAC5H,eAAO,MAAM,UAAU,YAAa,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KAAG,SAA8D,CAAC;AAS1J,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAChF,eAAO,MAAM,WAAW,mBAAoB,OAAO,KAAG,aAAa,GAAG,IAOrE,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AACpG,eAAO,MAAM,YAAY,SAAU,MAAM,WAAW,aAAa,KAAG,SACuB,CAAC"}
|
package/dist/AguiPlus.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// The AG-UI+ projection
|
|
2
|
-
//
|
|
1
|
+
// {§agui-projection} The AG-UI+ projection is unit-tested independently of the
|
|
2
|
+
// in-process module. Pure functions:
|
|
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
|
//
|
|
@@ -7,8 +7,8 @@
|
|
|
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 ──────────────────────────────────
|
|
10
|
-
// toolCallId correlates the terminating
|
|
11
|
-
//
|
|
10
|
+
// toolCallId correlates the terminating AG-UI Run's TOOL_CALL and interrupt with the next
|
|
11
|
+
// AG-UI Run's ResumeEntry → the exact pending proposal. Encodes the logEntryId: `prop:<id>`.
|
|
12
12
|
export const proposalToolCallId = (logEntryId) => `prop:${logEntryId}`;
|
|
13
13
|
export const logEntryIdFromToolCallId = (toolCallId) => {
|
|
14
14
|
const m = /^prop:(\d+)$/.exec(toolCallId);
|
|
@@ -26,7 +26,7 @@ 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, staleClobberRisk: p.staleClobberRisk }) },
|
|
30
30
|
{ type: EventType.TOOL_CALL_END, toolCallId },
|
|
31
31
|
];
|
|
32
32
|
};
|
package/dist/AguiPlus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
|