@plurnk/plurnk-agui 1.0.5 → 1.0.7
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/README.md +13 -13
- package/SPEC.md +59 -24
- package/dist/AguiPlus.d.ts +3 -3
- package/dist/AguiPlus.d.ts.map +1 -1
- package/dist/AguiPlus.js +2 -2
- package/dist/AguiPlus.js.map +1 -1
- package/dist/DaemonSeam.d.ts +43 -43
- 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 +2 -2
- package/dist/EventRouter.d.ts.map +1 -1
- package/dist/EventRouter.js +24 -3
- package/dist/EventRouter.js.map +1 -1
- package/dist/Module.d.ts.map +1 -1
- package/dist/Module.js +173 -154
- package/dist/Module.js.map +1 -1
- package/dist/Portal.d.ts +8 -8
- package/dist/Portal.d.ts.map +1 -1
- package/dist/Portal.js +29 -29
- package/dist/Portal.js.map +1 -1
- package/dist/ProposalHitl.d.ts +2 -2
- package/dist/ProposalHitl.d.ts.map +1 -1
- package/dist/ProposalHitl.js +12 -12
- package/dist/ProposalHitl.js.map +1 -1
- package/dist/Translator.d.ts +2 -2
- package/dist/Translator.d.ts.map +1 -1
- package/dist/Translator.js +81 -29
- package/dist/Translator.js.map +1 -1
- package/dist/types.d.ts +38 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -11,14 +11,14 @@ Vendor-agnostic, MIT.
|
|
|
11
11
|
An **in-process module** of the daemon, not an external service: the daemon activates it
|
|
12
12
|
at boot (`daemon.registerModule(Module.init(opts))`), handing it the curated core seam
|
|
13
13
|
(event source, loop-control, op dispatch, journal/metadata reads, proposal HITL,
|
|
14
|
-
|
|
15
|
-
owns the transport+security line at that edge: bearer auth, per-
|
|
14
|
+
workspace lifecycle — plurnk-service#355). The module opens its own HTTP/SSE listener and
|
|
15
|
+
owns the transport+security line at that edge: bearer auth, per-workspace authorization,
|
|
16
16
|
input validation. Below the seam: plurnk terms (loop/turn/proposal). Above: AG-UI terms
|
|
17
17
|
(run/message/tool-call/state). This module is the translation.
|
|
18
18
|
|
|
19
19
|
## The interface (AG-UI+)
|
|
20
20
|
|
|
21
|
-
One endpoint: `POST /` with `RunAgentInput` (`threadId`, `
|
|
21
|
+
One endpoint: `POST /` with `RunAgentInput` (`threadId`, `workerId`, `messages`,
|
|
22
22
|
`forwardedProps`) → `text/event-stream` of AG-UI events.
|
|
23
23
|
|
|
24
24
|
- **Runs**: turns are `STEP_*`; PLAN is `THINKING_TEXT_MESSAGE_*`; SEND bodies are
|
|
@@ -26,19 +26,19 @@ One endpoint: `POST /` with `RunAgentInput` (`threadId`, `runId`, `messages`,
|
|
|
26
26
|
Numbers pass through verbatim (`contextSize` = the daemon's effective prompt budget).
|
|
27
27
|
- **HITL, terminate-resume**: a stopped-world proposal (file edit, exec, MCP auth) emits
|
|
28
28
|
a `request_approval` tool-call — a `SEND[300]` operator question emits
|
|
29
|
-
`request_user_input` — and the
|
|
30
|
-
The next
|
|
29
|
+
`request_user_input` — and the worker **finishes** while the loop stays paused in-engine.
|
|
30
|
+
The next worker's tool-result message (`toolCallId: "prop:<id>"`, content
|
|
31
31
|
`{decision: accept|reject|cancel, body?}`) resolves it; the continued loop streams there.
|
|
32
32
|
Pending proposals re-surface on (re)connect — a days-old question is discoverable.
|
|
33
|
-
- **Reads ride STATE**: providers/aliases/budget/
|
|
33
|
+
- **Reads ride STATE**: providers/aliases/budget/workspace arrive as `STATE_SNAPSHOT` on
|
|
34
34
|
`RUN_STARTED` and `STATE_DELTA` on change — observed, not polled.
|
|
35
|
-
- **The
|
|
36
|
-
name, verbatim (attach-or-create). It is REQUIRED — a
|
|
37
|
-
so its absence is rejected (500), never forged from the `threadId`.
|
|
38
|
-
`forwardedProps.plurnk` (`projectRoot`, `constraints`, `settings`); per-
|
|
39
|
-
(`maxTurns`, `flags`, `alias`/`model`) every
|
|
40
|
-
- **The thread is the CONVERSATION**: a `threadId` binds a
|
|
41
|
-
today the
|
|
35
|
+
- **The workspace is the WORLD**: `forwardedProps.plurnk.workspace` selects the workspace by
|
|
36
|
+
name, verbatim (attach-or-create). It is REQUIRED — a worker has no existence without a world,
|
|
37
|
+
so its absence is rejected (500), never forged from the `threadId`. Workspace options ride the workspace's first run:
|
|
38
|
+
`forwardedProps.plurnk` (`projectRoot`, `constraints`, `settings`); per-worker knobs
|
|
39
|
+
(`maxTurns`, `flags`, `alias`/`model`) every worker.
|
|
40
|
+
- **The thread is the CONVERSATION**: a `threadId` binds a worker over the selected world —
|
|
41
|
+
today the workspace's model worker (`ensureModelWorker`), so extended context persists across runs;
|
|
42
42
|
history replays as `MESSAGES_SNAPSHOT` on reattach. Distinct second conversations over one
|
|
43
43
|
world gate on plurnk-service#366. (Machine model: service SPEC §machine-processes.)
|
|
44
44
|
- **Cancel**: dropping the SSE aborts a live loop (hangup is the abort); a
|
package/SPEC.md
CHANGED
|
@@ -11,20 +11,20 @@ through, never recomputed. Every `{§}` anchor below is cited by a `[§]` test.
|
|
|
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
13
|
- **A plurnk SESSION is the world; an AG-UI THREAD is a conversation over it** {§agui-thread-is-run}
|
|
14
|
-
— plurnk's machine model (service SPEC §machine-processes) splits the WORLD (a
|
|
15
|
-
curated workspace) from the CONVERSATION (a
|
|
16
|
-
concept is the workspace, selected by name, VERBATIM, via `forwardedProps.plurnk.
|
|
14
|
+
— plurnk's machine model (service SPEC §machine-processes) splits the WORLD (a workspace: one
|
|
15
|
+
curated workspace) from the CONVERSATION (a worker: a history over that world). AG-UI's workspace
|
|
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
19
|
violation the module rejects (500) — never a workspace forged from the `threadId`. The
|
|
20
20
|
`threadId` is the conversation — a RUN over that world, and the name is the identity at
|
|
21
|
-
BOTH levels: `threadId` == the
|
|
22
|
-
conversation, `
|
|
23
|
-
`threadId` names its own conversation
|
|
24
|
-
conversations are addressable as threads), minted via `
|
|
21
|
+
BOTH levels: `threadId` == the workspace name binds the workspace's MODEL run (the default
|
|
22
|
+
conversation, `ensureModelWorker` — origin identifies it, never a name parse); a DISTINCT
|
|
23
|
+
`threadId` names its own conversation worker — found by name if it exists (forks and prior
|
|
24
|
+
conversations are addressable as threads), minted via `createConversationWorker` (svc#366)
|
|
25
25
|
if it doesn't. World-scoped actions (`loop.inject`, `loop.cancel`, `log.read` default,
|
|
26
|
-
`run.fork`) operate on the THREAD's conversation, never blindly on the model
|
|
27
|
-
Extended context persists across AG-UI runs because the
|
|
26
|
+
`run.fork`) operate on the THREAD's conversation, never blindly on the model worker.
|
|
27
|
+
Extended context persists across AG-UI runs because the worker's log does.
|
|
28
28
|
- **Family-internal runtime deps only** {§agui-zero-dep} — `@plurnk/*` packages (the grammar,
|
|
29
29
|
for edge parsing) are welcome, exact-pinned; third-party runtime deps (e.g. `@ag-ui/core`
|
|
30
30
|
with its Zod) stay out. Event shapes remain hand-defined plain JSON.
|
|
@@ -40,21 +40,38 @@ One daemon notification in, zero-or-more AG-UI events out (`Translator`, pure):
|
|
|
40
40
|
|---|---|
|
|
41
41
|
| `loop.run` accepted | `RUN_STARTED` |
|
|
42
42
|
| `log/entry` turn boundary | `STEP_FINISHED` + `STEP_STARTED` (`turn-<id>`) |
|
|
43
|
-
| `log/entry` op=PLAN (model) | `
|
|
43
|
+
| `log/entry` op=PLAN (model) | `REASONING_START` + `REASONING_MESSAGE_START/CONTENT/END` + `REASONING_END` (§475: current AG-UI reasoning; the deprecated THINKING_* is retired) |
|
|
44
44
|
| `log/entry` op=SEND (model) | `TEXT_MESSAGE_START/CONTENT/END` + `CUSTOM plurnk.send` (signal/status) |
|
|
45
45
|
| `log/entry` other op (model) | `TOOL_CALL_START/ARGS/END` (+ `TOOL_CALL_RESULT` when rx exists) |
|
|
46
|
-
| `log/entry` op=model (mirror) | nothing — forensic
|
|
46
|
+
| `log/entry` op=model (mirror) | a correlated `REASONING_START` / `REASONING_ENCRYPTED_VALUE`* / `REASONING_END` span when the reasoning-item `attrs.reasoning` is present (see §agui-sealed-reasoning); otherwise nothing — forensic |
|
|
47
47
|
| `log/entry` origin≠model | `CUSTOM plurnk.ambient` (foists, deltas, narrations) |
|
|
48
48
|
| `loop/proposal` | `CUSTOM plurnk.proposal` |
|
|
49
|
-
| `loop/terminated` | `STATE_DELTA` (budget) + `CUSTOM plurnk.terminated` (
|
|
49
|
+
| `loop/terminated` | `STATE_DELTA` (budget) + `CUSTOM plurnk.terminated` + `RAW` (the provider's native completion frame, `source: provider`, §475) + `RUN_FINISHED` (200) or `RUN_ERROR` (else) |
|
|
50
50
|
| `telemetry/event` | `CUSTOM plurnk.telemetry` |
|
|
51
|
-
| `stream/event` + `stream/concluded` | `CUSTOM plurnk.stream` (
|
|
51
|
+
| `stream/event` + `stream/concluded` | `CUSTOM plurnk.stream` + `ACTIVITY_SNAPSHOT` (the standard background-activity channel: `activityType` = the scheme, replace-snapshot, §475) |
|
|
52
52
|
| `loop/quiesced` | `CUSTOM plurnk.quiesced` |
|
|
53
53
|
|
|
54
54
|
- **An op row IS a tool call** — its `coordinate` is the `toolCallId`, its tx the args (one
|
|
55
55
|
delta: a dispatched plurnk op is atomic), its rx the result. The log-shaped richness the
|
|
56
56
|
core vocabulary can't hold (fold state, tags, tokens) stays on the row inside
|
|
57
57
|
`plurnk.ambient`/`TOOL_CALL_RESULT` payloads.
|
|
58
|
+
- **Sealed reasoning: a hard interface to the standard** {§agui-sealed-reasoning} — reasoning
|
|
59
|
+
transmission is a SOLVED problem (OpenAI Responses / AG-UI reasoning-item; DIVERGENCES row 3 =
|
|
60
|
+
reasoning CONVERGED, with no exception for its representation), so agui consumes the standard
|
|
61
|
+
shape VERBATIM and does not translate a bespoke one. The REQUIRED seam contract: core surfaces
|
|
62
|
+
the model's reasoning as ONE addressable item on the model row's `attrs.reasoning` —
|
|
63
|
+
`{ id: string, subtype: "message" | "tool-call", encrypted?: [{ data, format }] }` — where `id`
|
|
64
|
+
is the reasoning entity's identity (the SAME id its open reasoning carries, so open text and
|
|
65
|
+
sealed value are two faces of one entity, per the Responses model). agui projects
|
|
66
|
+
`REASONING_ENCRYPTED_VALUE` (@ag-ui/core shape: `subtype`/`entityId`/`encryptedValue`, never
|
|
67
|
+
`messageId`/`value`) with `entityId` = the item `id`, correlated to a `REASONING_START/END` span
|
|
68
|
+
keyed by that same `id`. `format` has no AG-UI slot; it rides `plurnk.row` losslessly.
|
|
69
|
+
- **Deliberately broken until core delivers the shape** — the interface fails CLOSED: any row
|
|
70
|
+
lacking a well-formed reasoning-item (including the pre-convergence `{ reasoningEncrypted:
|
|
71
|
+
[{ data, format }] }` carrier, which has no `id`/`subtype`) projects NOTHING. agui never
|
|
72
|
+
synthesizes an id or guesses a subtype to manufacture a schema-valid event. The gap is the
|
|
73
|
+
forcing function: `REASONING_ENCRYPTED_VALUE` is unserved until the seam carries the reasoning-
|
|
74
|
+
item, and closing it is core's convergence obligation (#482), not agui's to translate around.
|
|
58
75
|
- **The custom namespace** {§agui-custom-namespace} — everything plurnk-specific rides
|
|
59
76
|
`CUSTOM` events named `plurnk.*` (`plurnk.send`, `plurnk.ambient`, `plurnk.proposal`,
|
|
60
77
|
`plurnk.telemetry`, `plurnk.stream`, `plurnk.quiesced`, `plurnk.terminated` — the full loop
|
|
@@ -73,11 +90,11 @@ One daemon notification in, zero-or-more AG-UI events out (`Translator`, pure):
|
|
|
73
90
|
- **The gauge starts true** — `RUN_STARTED` is followed by a `STATE_SNAPSHOT` carrying the
|
|
74
91
|
daemon's `providers.list` truth (the effective prompt budget, the active model), then
|
|
75
92
|
`STATE_DELTA`s. A dropped SSE stream cancels the loop (`loop.cancel`) — the frontend hanging
|
|
76
|
-
up IS the abort signal; no
|
|
93
|
+
up IS the abort signal; no worker is orphaned unwatched.
|
|
77
94
|
|
|
78
95
|
- **Reattach replays** {§agui-replay} — a rediscovered thread (the bridge restarted, a second
|
|
79
|
-
frontend arrived) attaches to its existing
|
|
80
|
-
|
|
96
|
+
frontend arrived) attaches to its existing workspace by name→id and opens ORIENTED: the model
|
|
97
|
+
worker's SENDs replay as `MESSAGES_SNAPSHOT` (the conversation spine; everything else stays
|
|
81
98
|
reachable via live `plurnk.row`), and every pending stop-the-world proposal re-surfaces
|
|
82
99
|
immediately via the daemon's `proposal.list` — the indefinite-wait ruling's client half: a
|
|
83
100
|
days-old question is discoverable, never a mystery hang.
|
|
@@ -90,26 +107,44 @@ surfaces as `CUSTOM plurnk.proposal` carrying `{logEntryId, op, target, body, at
|
|
|
90
107
|
`POST /resolve {threadId, logEntryId, decision, body?}` — a passthrough to the daemon's
|
|
91
108
|
`loop.resolve`, where an accept `body` is the answer. The SSE stream stays open while the
|
|
92
109
|
world is stopped — **indefinitely by default** (service ruling: a stopped world waits for its
|
|
93
|
-
human; the timeout is operator opt-in) — and the
|
|
110
|
+
human; the timeout is operator opt-in) — and the worker resumes on resolution.
|
|
94
111
|
|
|
95
112
|
## The action surface {§agui-management-plane}
|
|
96
113
|
|
|
97
114
|
A verb is a §3 action run: `forwardedProps.plurnk.action = {kind, …params}` in, one
|
|
98
115
|
`CUSTOM plurnk.action.result` (`{kind, ok, result|error}`) out, `RUN_FINISHED`. There is
|
|
99
|
-
no side-channel RPC endpoint; the
|
|
116
|
+
no side-channel RPC endpoint; the worker envelope is the whole interface. Unknown kinds
|
|
100
117
|
error honestly (`ok:false`). `loop.inject` rides this surface; its steered effect
|
|
101
|
-
streams on the original
|
|
102
|
-
the model
|
|
118
|
+
streams on the original worker's open SSE. `loop.cancel` is its counterpart — it aborts
|
|
119
|
+
the model worker's active drain (the addressable spelling of the SSE-hangup abort; both
|
|
103
120
|
clients' stop controls ride it).
|
|
104
121
|
|
|
105
122
|
## Topology scope {§agui-topology-scope}
|
|
106
123
|
|
|
107
|
-
The
|
|
108
|
-
only the thread's model
|
|
124
|
+
The workspace broadcast carries EVERY worker's rows (workers, the plurnk worker, siblings);
|
|
125
|
+
only the thread's model worker projects onto the core vocabulary. Foreign-run rows ride
|
|
109
126
|
`plurnk.row`/`plurnk.ambient` — visible to rich clients as topology, never interleaved
|
|
110
127
|
into the conversation a generic frontend renders.
|
|
111
128
|
|
|
112
|
-
##
|
|
129
|
+
## Broadcast fan {§agui-broadcast-fan}
|
|
130
|
+
|
|
131
|
+
One workspace fans EVERY event to ALL its open runs — the WS-wire semantics preserved:
|
|
132
|
+
each concurrent SSE is an independent subscriber with its own render router. This is a
|
|
133
|
+
broadcast, never a single "current" binding: a resumed exec's output, a loop's rows, and a
|
|
134
|
+
proposal's TOOL_CALL triple all reach every open run of the workspace. Two consequences the
|
|
135
|
+
module OWNS and a client MUST handle:
|
|
136
|
+
|
|
137
|
+
- **Multiplicity.** A proposal-paused action's result and a workspace stream event arrive
|
|
138
|
+
on every open run — so a client with N concurrent runs sees N copies. Clients demux/dedupe
|
|
139
|
+
by `logEntryId` (proposals) and by run identity (results). A client that funnels all runs
|
|
140
|
+
through one shared handler (e.g. a single dispatch) must SERIALIZE its management runs —
|
|
141
|
+
one action in flight, the rest queued — or a background action's stream steals the shared
|
|
142
|
+
slot. Both first-party clients do exactly this (nvim's management lane, svc#504).
|
|
143
|
+
- **No silent drop.** The fan never routes to a lone last-binder — a regression to that
|
|
144
|
+
shape is what svc#504 reported (a client-side single-slot handler, since fixed) and is
|
|
145
|
+
pinned against here.
|
|
146
|
+
|
|
147
|
+
## The worker endpoint {§agui-run-endpoint}
|
|
113
148
|
|
|
114
149
|
`POST /` (or `/agui`) with an AG-UI `RunAgentInput` body: the last `user` message becomes the
|
|
115
150
|
`loop.run` prompt (`maxTurns`/`flags.yolo` from env); the response is `text/event-stream`,
|
package/dist/AguiPlus.d.ts
CHANGED
|
@@ -19,15 +19,15 @@ export interface AguiPlusState {
|
|
|
19
19
|
alias: string;
|
|
20
20
|
model: string;
|
|
21
21
|
active: boolean;
|
|
22
|
-
|
|
22
|
+
promptBudget: number | null;
|
|
23
23
|
}>;
|
|
24
|
-
|
|
24
|
+
workspace?: {
|
|
25
25
|
id: number;
|
|
26
26
|
name: string;
|
|
27
27
|
projectRoot?: string | null;
|
|
28
28
|
budget?: number | null;
|
|
29
29
|
};
|
|
30
|
-
|
|
30
|
+
workspaces?: Array<{
|
|
31
31
|
id: number;
|
|
32
32
|
name: string;
|
|
33
33
|
}>;
|
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,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlE,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;AAKF,MAAM,WAAW,iBAAiB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3F,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,wBAAwB,MAAO,iBAAiB,KAAG,UAAU,GAAG,IAiB5E,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,
|
|
1
|
+
{"version":3,"file":"AguiPlus.d.ts","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlE,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;AAKF,MAAM,WAAW,iBAAiB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3F,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,wBAAwB,MAAO,iBAAiB,KAAG,UAAU,GAAG,IAiB5E,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,SAAkE,CAAC;AACpH,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,SAAsD,CAAC;AASlJ,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,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,eAAO,MAAM,YAAY,SAAU,MAAM,WAAW,aAAa,KAAG,SACe,CAAC"}
|
package/dist/AguiPlus.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// §1 proposals/[300] questions → tool-calls (terminate-resume HITL); §2 reads →
|
|
7
7
|
// shared STATE. This is the flagship choreography de-risked as logic before code.
|
|
8
8
|
// ── §1 — stop-the-world → tool-call ──────────────────────────────────
|
|
9
|
-
// toolCallId correlates the TERMINATING
|
|
9
|
+
// toolCallId correlates the TERMINATING worker's TOOL_CALL with the RESUME worker's
|
|
10
10
|
// tool-result → the exact pending proposal. Encodes the logEntryId: `prop:<id>`.
|
|
11
11
|
export const proposalToolCallId = (logEntryId) => `prop:${logEntryId}`;
|
|
12
12
|
export const logEntryIdFromToolCallId = (toolCallId) => {
|
|
@@ -19,7 +19,7 @@ export const logEntryIdFromToolCallId = (toolCallId) => {
|
|
|
19
19
|
// The plurnk correlation rides the opaque toolCallId (`prop:<logEntryId>`), so the
|
|
20
20
|
// generic names carry no plurnk vocabulary upward.
|
|
21
21
|
export const proposalToolName = (op) => (op === "SEND" ? "request_user_input" : "request_approval");
|
|
22
|
-
// The
|
|
22
|
+
// The worker's tail when it hits a pause: the tool-call, then the CALLER emits
|
|
23
23
|
// RUN_FINISHED to terminate. The loop stays paused in-engine — untouched.
|
|
24
24
|
export const proposalToolCall = (p) => {
|
|
25
25
|
const toolCallId = proposalToolCallId(p.logEntryId);
|
package/dist/AguiPlus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mFAAmF;AACnF,oFAAoF;AACpF,0EAA0E;AAC1E,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAIlF,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"AguiPlus.js","sourceRoot":"","sources":["../src/AguiPlus.ts"],"names":[],"mappings":"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"}
|
package/dist/DaemonSeam.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface ProposalResolution {
|
|
|
6
6
|
}
|
|
7
7
|
export interface PendingProposal {
|
|
8
8
|
logEntryId: number;
|
|
9
|
-
|
|
9
|
+
workerId: number;
|
|
10
10
|
loopId: number;
|
|
11
11
|
turnId: number;
|
|
12
12
|
op: string;
|
|
@@ -20,13 +20,13 @@ import type { PlurnkStatement } from "@plurnk/plurnk-grammar";
|
|
|
20
20
|
export type { PlurnkStatement };
|
|
21
21
|
export type LogEntryWire = Record<string, unknown>;
|
|
22
22
|
export interface DaemonSeam {
|
|
23
|
-
subscribeToEvents(handler: (
|
|
24
|
-
pendingProposals(
|
|
23
|
+
subscribeToEvents(handler: (workspaceId: number | null, method: string, params: unknown) => void): () => void;
|
|
24
|
+
pendingProposals(workspaceId: number): Promise<PendingProposal[]>;
|
|
25
25
|
resolveProposal(logEntryId: number, resolution: ProposalResolution): void;
|
|
26
|
-
|
|
26
|
+
ensureModelWorker(workspaceId: number): Promise<number>;
|
|
27
27
|
runLoop(args: {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
workspaceId: number;
|
|
29
|
+
workerId: number;
|
|
30
30
|
prompt: string;
|
|
31
31
|
maxTurns?: number;
|
|
32
32
|
flags?: {
|
|
@@ -40,18 +40,18 @@ export interface DaemonSeam {
|
|
|
40
40
|
loopId: number;
|
|
41
41
|
turnSeq?: number;
|
|
42
42
|
}>;
|
|
43
|
-
cancelDrain(
|
|
43
|
+
cancelDrain(workerId: number, reason?: string): boolean;
|
|
44
44
|
dispatchAsClient(args: {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
workspaceId: number;
|
|
46
|
+
workerId: number;
|
|
47
47
|
statement: PlurnkStatement;
|
|
48
48
|
}): Promise<{
|
|
49
49
|
status: number;
|
|
50
50
|
[key: string]: unknown;
|
|
51
51
|
}>;
|
|
52
52
|
readLog(args: {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
workspaceId: number;
|
|
54
|
+
workerId: number;
|
|
55
55
|
loopId?: number;
|
|
56
56
|
turnId?: number;
|
|
57
57
|
sinceId?: number;
|
|
@@ -66,10 +66,10 @@ export interface DaemonSeam {
|
|
|
66
66
|
provider: string;
|
|
67
67
|
model: string;
|
|
68
68
|
active: boolean;
|
|
69
|
-
|
|
69
|
+
promptBudget: number | null;
|
|
70
70
|
}>;
|
|
71
71
|
};
|
|
72
|
-
|
|
72
|
+
createWorkspace(args: {
|
|
73
73
|
name?: string;
|
|
74
74
|
projectRoot?: string | null;
|
|
75
75
|
settings?: string;
|
|
@@ -78,40 +78,40 @@ export interface DaemonSeam {
|
|
|
78
78
|
glob: string;
|
|
79
79
|
}>;
|
|
80
80
|
}): Promise<ClientEnvelope>;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
attachWorkspace(args: {
|
|
82
|
+
workspaceId: number;
|
|
83
|
+
workerId?: number;
|
|
84
|
+
workerName?: string;
|
|
85
85
|
}): Promise<ClientEnvelope>;
|
|
86
|
-
|
|
86
|
+
listWorkspaces(): Promise<Array<{
|
|
87
87
|
id: number;
|
|
88
88
|
name: string;
|
|
89
89
|
}>>;
|
|
90
|
-
|
|
90
|
+
listWorkers(workspaceId: number): Promise<Array<{
|
|
91
91
|
id: number;
|
|
92
92
|
name: string;
|
|
93
93
|
}>>;
|
|
94
|
-
listPrompts(
|
|
95
|
-
|
|
94
|
+
listPrompts(workspaceId: number, limit?: number): Promise<string[]>;
|
|
95
|
+
renameWorkspace(workspaceId: number, name: string): Promise<{
|
|
96
96
|
id: number;
|
|
97
97
|
name: string;
|
|
98
98
|
}>;
|
|
99
|
-
constrain(
|
|
99
|
+
constrain(workspaceId: number, effect: string, glob: string): Promise<{
|
|
100
100
|
effect: string;
|
|
101
101
|
glob: string;
|
|
102
102
|
}>;
|
|
103
|
-
unconstrain(
|
|
103
|
+
unconstrain(workspaceId: number, effect: string, glob: string): Promise<{
|
|
104
104
|
effect: string;
|
|
105
105
|
glob: string;
|
|
106
106
|
}>;
|
|
107
|
-
listConstraints(
|
|
107
|
+
listConstraints(workspaceId: number): Promise<Array<{
|
|
108
108
|
effect: string;
|
|
109
109
|
glob: string;
|
|
110
110
|
}>> | Array<{
|
|
111
111
|
effect: string;
|
|
112
112
|
glob: string;
|
|
113
113
|
}>;
|
|
114
|
-
listMembers(
|
|
114
|
+
listMembers(workspaceId: number): Promise<{
|
|
115
115
|
members: Array<{
|
|
116
116
|
path: string;
|
|
117
117
|
effect: string;
|
|
@@ -119,15 +119,15 @@ export interface DaemonSeam {
|
|
|
119
119
|
hidden: string[];
|
|
120
120
|
}>;
|
|
121
121
|
look(args: {
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
workspaceId: number;
|
|
123
|
+
workerId: number;
|
|
124
124
|
statement: PlurnkStatement;
|
|
125
125
|
}): Promise<{
|
|
126
126
|
status: number;
|
|
127
127
|
[key: string]: unknown;
|
|
128
128
|
}>;
|
|
129
129
|
readEntry(args: {
|
|
130
|
-
|
|
130
|
+
workspaceId: number;
|
|
131
131
|
target: string;
|
|
132
132
|
channel?: string;
|
|
133
133
|
offset?: number;
|
|
@@ -135,30 +135,30 @@ export interface DaemonSeam {
|
|
|
135
135
|
status: number;
|
|
136
136
|
entry: unknown;
|
|
137
137
|
}>;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
forkWorker(args: {
|
|
139
|
+
workspaceId: number;
|
|
140
|
+
workerId: number;
|
|
141
141
|
name?: string;
|
|
142
142
|
}): Promise<{
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
143
|
+
workerId: number;
|
|
144
|
+
workerName: string | null;
|
|
145
|
+
parentWorkerId: number;
|
|
146
146
|
}>;
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
createConversationWorker(args: {
|
|
148
|
+
workspaceId: number;
|
|
149
149
|
name?: string;
|
|
150
150
|
}): Promise<{
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
workerId: number;
|
|
152
|
+
workerName: string;
|
|
153
153
|
}>;
|
|
154
154
|
}
|
|
155
155
|
export interface ClientEnvelope {
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
workspaceId: number;
|
|
157
|
+
workspaceName: string;
|
|
158
158
|
projectRoot: string | null;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
workerId: number;
|
|
160
|
+
workerName: string;
|
|
161
|
+
modelWorkerId: number | null;
|
|
162
162
|
clientLoopId: number | null;
|
|
163
163
|
}
|
|
164
164
|
//# sourceMappingURL=DaemonSeam.d.ts.map
|
package/dist/DaemonSeam.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DaemonSeam.d.ts","sourceRoot":"","sources":["../src/DaemonSeam.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"DaemonSeam.d.ts","sourceRoot":"","sources":["../src/DaemonSeam.ts"],"names":[],"mappings":"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"}
|
package/dist/DaemonSeam.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// My coupling to the daemon's in-process client-interface seam (service#355). The
|
|
2
2
|
// module depends on THIS interface — the committed, tested contract — never the
|
|
3
3
|
// Daemon class's guts. It grows as the service lands hooks (loop-control,
|
|
4
|
-
//
|
|
4
|
+
// workspace/envelope, reads, fork, execs/auth, the boot plug-point); today it carries
|
|
5
5
|
// what's published: the event source (B) and proposal read + resolve (C + A-resolve).
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=DaemonSeam.js.map
|
package/dist/DaemonSeam.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DaemonSeam.js","sourceRoot":"","sources":["../src/DaemonSeam.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,gFAAgF;AAChF,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"DaemonSeam.js","sourceRoot":"","sources":["../src/DaemonSeam.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,gFAAgF;AAChF,0EAA0E;AAC1E,sFAAsF;AACtF,sFAAsF"}
|
package/dist/EventRouter.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export default class EventRouter {
|
|
|
4
4
|
constructor(args: {
|
|
5
5
|
threadId: string;
|
|
6
6
|
runId: string;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
modelWorkerId?: number | null;
|
|
8
|
+
workspaceId?: number | null;
|
|
9
9
|
});
|
|
10
10
|
runStarted(snapshot?: unknown): AguiEvent[];
|
|
11
11
|
replay(entries: Array<Record<string, unknown>>): AguiEvent[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventRouter.d.ts","sourceRoot":"","sources":["../src/EventRouter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAgD,MAAM,YAAY,CAAC;AAE1F,MAAM,CAAC,OAAO,OAAO,WAAW;;IAG5B,YAAY,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"EventRouter.d.ts","sourceRoot":"","sources":["../src/EventRouter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAgD,MAAM,YAAY,CAAC;AAE1F,MAAM,CAAC,OAAO,OAAO,WAAW;;IAG5B,YAAY,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAEhH;IAED,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAAyC;IACpF,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EAAE,CAAoC;IAEhG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,CAiBlD;CAgBJ"}
|
package/dist/EventRouter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The module's per-
|
|
1
|
+
// The module's per-worker render core (plurnk-agui#2). Routes a daemon event
|
|
2
2
|
// (method, params) from the seam's event source → AG-UI events, composing the proven
|
|
3
3
|
// projections: log/entry → core vocab, loop/terminated → RUN_FINISHED + budget STATE,
|
|
4
4
|
// telemetry/stream → CUSTOM. Per-run state (turn tracking, model-run binding) lives in
|
|
@@ -18,10 +18,31 @@ export default class EventRouter {
|
|
|
18
18
|
case "loop/terminated": return this.#t.terminated(params);
|
|
19
19
|
case "telemetry/event": return this.#t.telemetry(params.event ?? params);
|
|
20
20
|
case "stream/event":
|
|
21
|
-
case "stream/concluded": return [
|
|
21
|
+
case "stream/concluded": return [
|
|
22
|
+
// Family channel (rich, full payload) AND the standard ACTIVITY channel (§475):
|
|
23
|
+
// an exec/search stream is 'in-progress activity between chat messages'. A
|
|
24
|
+
// replace-snapshot per event is the stateless conformant form — each carries the
|
|
25
|
+
// full current view; activityType is the stream's scheme (SEARCH/EXEC/…).
|
|
26
|
+
{ type: "CUSTOM", name: "plurnk.stream", value: params },
|
|
27
|
+
EventRouter.#activity(params),
|
|
28
|
+
];
|
|
22
29
|
case "loop/proposal": return []; // ProposalHitl owns HITL (terminate-resume tool-call)
|
|
23
|
-
default: return []; //
|
|
30
|
+
default: return []; // workspace/created + anything unmodeled: the module handles out-of-band
|
|
24
31
|
}
|
|
25
32
|
}
|
|
33
|
+
// A stream event → the standard ACTIVITY snapshot. messageId = the stream's entry id
|
|
34
|
+
// (so a frontend keys deltas/updates to one activity); activityType = the scheme,
|
|
35
|
+
// uppercased (SEARCH, EXEC, …), the protocol's discriminator; content = the full
|
|
36
|
+
// payload; replace = true (each is the complete current view — stateless, conformant).
|
|
37
|
+
static #activity(params) {
|
|
38
|
+
const p = (params ?? {});
|
|
39
|
+
return {
|
|
40
|
+
type: "ACTIVITY_SNAPSHOT",
|
|
41
|
+
messageId: `stream-${p.entryId ?? 0}`,
|
|
42
|
+
activityType: typeof p.scheme === "string" && p.scheme.length > 0 ? p.scheme.toUpperCase() : "STREAM",
|
|
43
|
+
content: params,
|
|
44
|
+
replace: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
26
47
|
}
|
|
27
48
|
//# sourceMappingURL=EventRouter.js.map
|
package/dist/EventRouter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventRouter.js","sourceRoot":"","sources":["../src/EventRouter.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"EventRouter.js","sourceRoot":"","sources":["../src/EventRouter.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,qFAAqF;AACrF,sFAAsF;AACtF,uFAAuF;AACvF,wFAAwF;AACxF,kFAAkF;AAElF,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,EAAE,CAAa;IAEf,YAAY,IAAqG;QAC7G,IAAI,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,QAAkB,IAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,OAAuC,IAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhG,KAAK,CAAC,MAAc,EAAE,MAAe;QACjC,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAA8B,CAAC,CAAC;YAC1E,KAAK,iBAAiB,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAgC,CAAC,CAAC;YACpF,KAAK,iBAAiB,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAE,MAA8B,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;YAClG,KAAK,cAAc,CAAC;YACpB,KAAK,kBAAkB,EAAE,OAAO;gBAC5B,gFAAgF;gBAChF,2EAA2E;gBAC3E,iFAAiF;gBACjF,0EAA0E;gBAC1E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;gBACxD,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;aAChC,CAAC;YACF,KAAK,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,sDAAsD;YACvF,SAAS,OAAO,EAAE,CAAC,CAAC,yEAAyE;QACjG,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,kFAAkF;IAClF,iFAAiF;IACjF,uFAAuF;IACvF,MAAM,CAAC,SAAS,CAAC,MAAe;QAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAA0C,CAAC;QAClE,OAAO;YACH,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE;YACrC,YAAY,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ;YACrG,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;CACJ"}
|
package/dist/Module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,iBAAiB,CAAC;AAKnF,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;;IAkBvB,YAAY,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAKhD;IAGD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAMtE;IAEK,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAMtD;IAED,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAIxC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;
|
|
1
|
+
{"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../src/Module.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAmC,MAAM,iBAAiB,CAAC;AAKnF,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;;IAkBvB,YAAY,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAKhD;IAGD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAMtE;IAEK,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAMtD;IAED,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAIxC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;CA+XJ"}
|