@ggui-ai/mcp-server-handlers 0.6.2 → 0.7.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/dist/ops-apps/delete-app.d.ts +26 -9
- package/dist/ops-apps/delete-app.d.ts.map +1 -1
- package/dist/ops-apps/delete-app.js +34 -11
- package/dist/ops-apps/index.d.ts +1 -1
- package/dist/ops-apps/index.d.ts.map +1 -1
- package/dist/ops-apps/index.js +1 -1
- package/dist/ops-apps/types.d.ts +32 -1
- package/dist/ops-apps/types.d.ts.map +1 -1
- package/dist/ops-apps/types.js +16 -0
- package/dist/ops-blueprint/generate.d.ts.map +1 -1
- package/dist/ops-blueprint/generate.js +6 -2
- package/dist/ops-blueprint/register.d.ts.map +1 -1
- package/dist/ops-blueprint/register.js +7 -2
- package/dist/ops-connector-keys/types.d.ts +7 -0
- package/dist/ops-connector-keys/types.d.ts.map +1 -1
- package/dist/renders/blueprint-durability.d.ts +111 -0
- package/dist/renders/blueprint-durability.d.ts.map +1 -0
- package/dist/renders/blueprint-durability.js +85 -0
- package/dist/renders/blueprint-registry.d.ts +24 -0
- package/dist/renders/blueprint-registry.d.ts.map +1 -1
- package/dist/renders/blueprint-registry.js +9 -0
- package/dist/renders/code-delivery-events.d.ts +76 -0
- package/dist/renders/code-delivery-events.d.ts.map +1 -0
- package/dist/renders/code-delivery-events.js +60 -0
- package/dist/renders/fetch-gadget-types.d.ts +7 -3
- package/dist/renders/fetch-gadget-types.d.ts.map +1 -1
- package/dist/renders/fetch-gadget-types.js +7 -3
- package/dist/renders/generation-cache.d.ts +9 -0
- package/dist/renders/generation-cache.d.ts.map +1 -1
- package/dist/renders/handshake.d.ts +5 -3
- package/dist/renders/handshake.d.ts.map +1 -1
- package/dist/renders/handshake.js +9 -4
- package/dist/renders/index.d.ts +3 -0
- package/dist/renders/index.d.ts.map +1 -1
- package/dist/renders/index.js +13 -0
- package/dist/renders/render-identity.d.ts +178 -0
- package/dist/renders/render-identity.d.ts.map +1 -0
- package/dist/renders/render-identity.js +136 -0
- package/dist/renders/render.d.ts +39 -5
- package/dist/renders/render.d.ts.map +1 -1
- package/dist/renders/render.js +198 -83
- package/dist/renders/sync-context.d.ts +13 -1
- package/dist/renders/sync-context.d.ts.map +1 -1
- package/dist/renders/sync-context.js +6 -1
- package/dist/renders/update.d.ts +15 -1
- package/dist/renders/update.d.ts.map +1 -1
- package/dist/renders/update.js +6 -1
- package/package.json +7 -7
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The event names as values, so every emitter — in this package or a
|
|
3
|
+
* storage backend elsewhere — spells them from one place. Importing
|
|
4
|
+
* these is what turns a future rename into a compile error instead of
|
|
5
|
+
* an alert filter that silently stops matching.
|
|
6
|
+
*/
|
|
7
|
+
export const RENDER_IDENTITY_EVENTS = {
|
|
8
|
+
writeFailed: 'render_identity_write_failed',
|
|
9
|
+
refreshFailed: 'render_identity_refresh_failed',
|
|
10
|
+
refreshSkipped: 'render_identity_refresh_skipped',
|
|
11
|
+
rowUnreadable: 'render_identity_row_unreadable',
|
|
12
|
+
propsOverCap: 'render_props_over_cap',
|
|
13
|
+
};
|
|
14
|
+
const WRITE_FAILED_EVENT = RENDER_IDENTITY_EVENTS.writeFailed;
|
|
15
|
+
const REFRESH_FAILED_EVENT = RENDER_IDENTITY_EVENTS.refreshFailed;
|
|
16
|
+
const REFRESH_SKIPPED_EVENT = RENDER_IDENTITY_EVENTS.refreshSkipped;
|
|
17
|
+
/**
|
|
18
|
+
* Project a committed row + its identity slice into the durable
|
|
19
|
+
* record.
|
|
20
|
+
*
|
|
21
|
+
* `createdAt` mirrors the ROW's creation stamp rather than sampling
|
|
22
|
+
* the clock: the record describes exactly one row, and every store
|
|
23
|
+
* preserves `createdAt` across upserts, so a render that commits
|
|
24
|
+
* several times (placeholder → generated, theme overlay) and every
|
|
25
|
+
* later refresh all agree on one value instead of drifting forward.
|
|
26
|
+
*/
|
|
27
|
+
function projectRenderIdentityRecord(session, identity) {
|
|
28
|
+
return {
|
|
29
|
+
sessionId: session.id,
|
|
30
|
+
appId: session.appId,
|
|
31
|
+
// `userId` is the record's whole user story: it is the subject a
|
|
32
|
+
// re-mint authorizes against, and the row carries it on every
|
|
33
|
+
// commit. The row's fuller `endUserIdentity` block is NOT copied
|
|
34
|
+
// here — it would be personal data on an indefinitely-retained
|
|
35
|
+
// record, answering a question `userId` already answers.
|
|
36
|
+
...(session.userId !== undefined ? { userId: session.userId } : {}),
|
|
37
|
+
blueprintId: identity.blueprintId,
|
|
38
|
+
contractKey: identity.contractKey,
|
|
39
|
+
variantKey: identity.variantKey,
|
|
40
|
+
props: session.render.props,
|
|
41
|
+
seqAtLastCommit: session.eventSequence,
|
|
42
|
+
createdAt: session.createdAt,
|
|
43
|
+
updatedAt: Date.now(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Write the identity record for a just-committed render. Best-effort:
|
|
48
|
+
* an absent store is a no-op, and a rejecting store logs
|
|
49
|
+
* `render_identity_write_failed` and returns normally.
|
|
50
|
+
*
|
|
51
|
+
* The caller awaits this, so it adds exactly one store round-trip to
|
|
52
|
+
* the render — never a retry loop, never a background task that
|
|
53
|
+
* outlives the response.
|
|
54
|
+
*
|
|
55
|
+
* `failureEvent` overrides the logged event name for callers whose
|
|
56
|
+
* failure is a distinct operational signal (a refresh on a mutation
|
|
57
|
+
* path is not a first write, and operators alert on them separately).
|
|
58
|
+
*/
|
|
59
|
+
export async function writeRenderIdentity(store, session, identity, failureEvent = WRITE_FAILED_EVENT) {
|
|
60
|
+
if (!store)
|
|
61
|
+
return;
|
|
62
|
+
try {
|
|
63
|
+
await store.put(projectRenderIdentityRecord(session, identity));
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logRenderIdentityFailure(failureEvent, session.id, session.appId, err);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Refresh an EXISTING record after a tool re-committed the render row
|
|
71
|
+
* — `ggui_update` mutating props, `ggui_runtime_sync_context`
|
|
72
|
+
* mirroring a context snapshot.
|
|
73
|
+
*
|
|
74
|
+
* Refreshes only what the row can answer for: props, the sequence at
|
|
75
|
+
* this commit, and `updatedAt`. The identity slice
|
|
76
|
+
* (`blueprintId` / `contractKey` / `variantKey`) is carried forward
|
|
77
|
+
* from the existing record VERBATIM, never recomputed. That is not
|
|
78
|
+
* caution — it is the only correct behaviour available here:
|
|
79
|
+
* `contractKey` is `blueprintKey(agreed contract)`, and the agreed
|
|
80
|
+
* contract lived in the handshake these tools never see. A render row
|
|
81
|
+
* carries its projected specs, not the contract that keyed it, so any
|
|
82
|
+
* key recomputed here would address a different blueprint (or none).
|
|
83
|
+
*
|
|
84
|
+
* For the same reason a MISSING record is skipped rather than
|
|
85
|
+
* created: a record needs an identity, and inventing one would write a
|
|
86
|
+
* locator that points at nothing — strictly worse than no record,
|
|
87
|
+
* because a re-mint would trust it. The skip is announced as
|
|
88
|
+
* `render_identity_refresh_skipped` so an operator who wired a store
|
|
89
|
+
* mid-flight can see which renders predate it.
|
|
90
|
+
*
|
|
91
|
+
* Best-effort throughout, like every write in this module: the tool
|
|
92
|
+
* call succeeds regardless. A consequence worth knowing: because the
|
|
93
|
+
* write rebuilds the WHOLE record from the current row rather than
|
|
94
|
+
* patching fields, any refresh self-heals drift left by an earlier one
|
|
95
|
+
* that failed — a later context sync repairs props and sequence a
|
|
96
|
+
* dropped update-refresh had gone stale on.
|
|
97
|
+
*/
|
|
98
|
+
export async function refreshRenderIdentity(store, session) {
|
|
99
|
+
if (!store)
|
|
100
|
+
return;
|
|
101
|
+
let existing;
|
|
102
|
+
try {
|
|
103
|
+
existing = await store.get(session.id);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
logRenderIdentityFailure(REFRESH_FAILED_EVENT, session.id, session.appId, err);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (!existing) {
|
|
110
|
+
logRenderIdentitySkipped(session.id, 'no-record');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await writeRenderIdentity(store, session, {
|
|
114
|
+
blueprintId: existing.blueprintId,
|
|
115
|
+
contractKey: existing.contractKey,
|
|
116
|
+
variantKey: existing.variantKey,
|
|
117
|
+
}, REFRESH_FAILED_EVENT);
|
|
118
|
+
}
|
|
119
|
+
function logRenderIdentitySkipped(sessionId, reason) {
|
|
120
|
+
// debug, not warn: severity is part of an alertable event's contract,
|
|
121
|
+
// and this one fires on paths where nothing is actionable — a render
|
|
122
|
+
// that predates the store has no record to refresh and never will.
|
|
123
|
+
// The cloud emitter uses debug for the same event; a shared name that
|
|
124
|
+
// pages on one backend and not the other is a broken contract.
|
|
125
|
+
// eslint-disable-next-line no-console -- structured single-line event for log-pipeline pickup
|
|
126
|
+
console.debug(JSON.stringify({ msg: REFRESH_SKIPPED_EVENT, sessionId, reason }));
|
|
127
|
+
}
|
|
128
|
+
function logRenderIdentityFailure(event, sessionId, appId, err) {
|
|
129
|
+
// eslint-disable-next-line no-console -- structured single-line event for log-pipeline pickup
|
|
130
|
+
console.warn(JSON.stringify({
|
|
131
|
+
msg: event,
|
|
132
|
+
sessionId,
|
|
133
|
+
appId,
|
|
134
|
+
error: err instanceof Error ? err.message : String(err),
|
|
135
|
+
}));
|
|
136
|
+
}
|
package/dist/renders/render.d.ts
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
*/
|
|
48
48
|
import { z } from 'zod';
|
|
49
49
|
import { type BlueprintVariance, type DataContract, type GguiSession } from '@ggui-ai/protocol';
|
|
50
|
-
import type { AppMetadataStore, BlueprintProvider, KeyValueStore, LlmSelection, PendingEventConsumer, ProviderKeyRef, RateLimiter, GguiSessionStore, ShortCodeIndex, UiGenerator } from '@ggui-ai/mcp-server-core';
|
|
50
|
+
import type { AppMetadataStore, BlueprintProvider, KeyValueStore, LlmSelection, PendingEventConsumer, ProviderKeyRef, RateLimiter, RenderIdentityStore, GguiSessionStore, ShortCodeIndex, UiGenerator } from '@ggui-ai/mcp-server-core';
|
|
51
51
|
import { type HandlerContext, type HandlerFailure, type SharedHandler } from '../types.js';
|
|
52
52
|
import { type ProvisionalPreviewDeps } from './provisional-preview.js';
|
|
53
53
|
import type { GenerationCacheDeps } from './generation-cache.js';
|
|
@@ -267,6 +267,15 @@ export interface GguiSessionPostSuccessArgs {
|
|
|
267
267
|
export interface GguiRenderHandlerDeps extends RenderSliceMetaDeps {
|
|
268
268
|
/** GguiSession-backing store. Used to mint / replace renders on render. */
|
|
269
269
|
readonly renderStore: GguiSessionStore;
|
|
270
|
+
/**
|
|
271
|
+
* Render-row retention window in ms. Operators align this with
|
|
272
|
+
* chat-history lifetime so rehydration-by-refetch (re-reading the
|
|
273
|
+
* `ui://ggui/render/*` resource after the agent's original render
|
|
274
|
+
* call) finds the row instead of a reaped one. Default:
|
|
275
|
+
* DEFAULT_RENDER_TTL_MS (1h) — the pre-existing memory-hygiene
|
|
276
|
+
* default for in-process stores.
|
|
277
|
+
*/
|
|
278
|
+
readonly renderTtlMs?: number;
|
|
270
279
|
/**
|
|
271
280
|
* Per-app metadata resolver — when bound, render reads
|
|
272
281
|
* `app.gadgets` and runs `assertGadgetsRegistered`
|
|
@@ -361,6 +370,25 @@ export interface GguiRenderHandlerDeps extends RenderSliceMetaDeps {
|
|
|
361
370
|
* just aren't available.
|
|
362
371
|
*/
|
|
363
372
|
readonly shortCodeIndex?: ShortCodeIndex;
|
|
373
|
+
/**
|
|
374
|
+
* Durable render-identity side store. When present, every render
|
|
375
|
+
* commit also writes the record that lets a
|
|
376
|
+
* `ui://ggui/render/{sessionId}/{blueprintKey}` locator re-create the
|
|
377
|
+
* render after the render row is gone — the identity
|
|
378
|
+
* (`blueprintId`, `contractKey`, `variantKey`) plus the props and
|
|
379
|
+
* event sequence at that commit. The locator segment is named for its
|
|
380
|
+
* domain; the record field it comes from is `contractKey`.
|
|
381
|
+
*
|
|
382
|
+
* Writes are best-effort and never block or fail a render: the
|
|
383
|
+
* committed row is the source of truth, and this record is a
|
|
384
|
+
* durability optimization layered on it. A rejecting store logs
|
|
385
|
+
* `render_identity_write_failed` and the render returns normally.
|
|
386
|
+
*
|
|
387
|
+
* Absence of this dep is the "the render row itself is durable"
|
|
388
|
+
* signal — a deployment whose GguiSessionStore outlives the renders it
|
|
389
|
+
* holds already has everything a re-mint needs on the row.
|
|
390
|
+
*/
|
|
391
|
+
readonly renderIdentityStore?: RenderIdentityStore;
|
|
364
392
|
/**
|
|
365
393
|
* Handshake record store. When bound, the handler accepts the
|
|
366
394
|
* handshake-paired input shape `{handshakeId, props?}` and consumes
|
|
@@ -485,10 +513,16 @@ export interface GguiRenderHandlerDeps extends RenderSliceMetaDeps {
|
|
|
485
513
|
*
|
|
486
514
|
* Absent = the bootstrap emits no codeUrl. The iframe mounts via
|
|
487
515
|
* live mode (wsUrl+token) and receives the render — including
|
|
488
|
-
* componentCode — over the live-channel WS subscribe.
|
|
489
|
-
* that
|
|
490
|
-
*
|
|
491
|
-
*
|
|
516
|
+
* componentCode — over the live-channel WS subscribe. A deployment
|
|
517
|
+
* that binds neither this store nor {@link mintWsToken} emits a
|
|
518
|
+
* bootstrap with no mount mode at all: the only surface left is a
|
|
519
|
+
* host that resolves the render's `resourceUri`, which mints its
|
|
520
|
+
* own delivery channel on the read path.
|
|
521
|
+
*
|
|
522
|
+
* Present-but-failing lands in the same wire shape as absent, which
|
|
523
|
+
* is why it does not stay quiet: a rejected write emits
|
|
524
|
+
* `render_code_write_failed` and the render still succeeds. See
|
|
525
|
+
* `code-delivery-events.ts`.
|
|
492
526
|
*/
|
|
493
527
|
readonly codeStore?: import('@ggui-ai/mcp-server-core').CodeStore;
|
|
494
528
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/renders/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAGjB,KAAK,WAAW,EAGjB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/renders/render.ts"],"names":[],"mappings":"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"}
|