@ggui-ai/protocol-reference-server 0.15.0 → 0.17.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/README.md +1 -1
- package/dist/conformance-host.js +3 -3
- package/dist/host-context.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/render.d.ts +1 -1
- package/dist/render.js +1 -1
- package/dist/server.js +4 -4
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ kit grounds the claim empirically rather than by assertion.
|
|
|
14
14
|
- WebSocket transport matching the ggui live-channel wire.
|
|
15
15
|
- In-memory render store with a consume-buffer event ledger (no persistence).
|
|
16
16
|
- `schemaVersion` handshake with `UPGRADE_REQUIRED` on mismatch.
|
|
17
|
-
- Subscribe
|
|
17
|
+
- Subscribe app scope: the subscribe's `appId` must match the GguiSession's
|
|
18
18
|
bound `appId` or the subscribe is rejected with an `error` frame, code
|
|
19
19
|
`APP_MISMATCH` (an unknown session id still provisions on subscribe,
|
|
20
20
|
binding the subscribe's own `appId`).
|
package/dist/conformance-host.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* introspection seam — `session-state` fixtures (stateful obligations
|
|
29
29
|
* with no wire response, e.g. `host-context-observed-persists`) grade
|
|
30
30
|
* by reading the GguiSession field back after the observation window.
|
|
31
|
-
* Readable fields: `hostContext`, `appId` (the
|
|
31
|
+
* Readable fields: `hostContext`, `appId` (the app-scope column the
|
|
32
32
|
* `absent-appid-defaults` fixture grades identity-default resolution
|
|
33
33
|
* against). Unknown fields throw with a clear message so the kit
|
|
34
34
|
* records an honest SKIP, never a weakened pass.
|
|
@@ -151,11 +151,11 @@ export function createReferenceConformanceHost({ serverInstance, }) {
|
|
|
151
151
|
return render.hostContext;
|
|
152
152
|
}
|
|
153
153
|
if (field === 'appId') {
|
|
154
|
-
// The
|
|
154
|
+
// The app-scope column on the live render row — the kit's
|
|
155
155
|
// `absent-appid-defaults` fixture reads it back to grade the
|
|
156
156
|
// SPEC §12.2 identity-default resolution (a subscribe that
|
|
157
157
|
// omits `appId` binds the deployment default, never an
|
|
158
|
-
// undefined
|
|
158
|
+
// undefined app id).
|
|
159
159
|
return render.appId;
|
|
160
160
|
}
|
|
161
161
|
throw new Error(`reference server does not expose GguiSession field '${field}' via readSessionField — readable fields: hostContext, appId`);
|
package/dist/host-context.d.ts
CHANGED
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
* persists NOTHING: a partial write from half-valid input would
|
|
27
27
|
* fabricate state the client never coherently observed.
|
|
28
28
|
*
|
|
29
|
-
*
|
|
29
|
+
* Scoping note: the first-party handler scopes the write through its
|
|
30
30
|
* subscriber binding (`NOT_SUBSCRIBED` / `SESSION_MISMATCH` error
|
|
31
31
|
* frames). The reference server has no auth identity by design
|
|
32
|
-
* (accepts any bearer), so its
|
|
32
|
+
* (accepts any bearer), so its scope is the render lookup
|
|
33
33
|
* itself — the caller drops frames whose `payload.sessionId` names an
|
|
34
34
|
* unknown render, mirroring the action path's unknown-render posture.
|
|
35
35
|
*/
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ export const REFERENCE_SERVER_VERSION = '0.1.0';
|
|
|
28
28
|
export { ReferenceServer } from './server.js';
|
|
29
29
|
// Deployment-level identity-default app id (SPEC §12.2: a subscribe
|
|
30
30
|
// MAY omit `appId`; this no-auth server resolves every caller to this
|
|
31
|
-
// deployment-wide
|
|
31
|
+
// deployment-wide app id). Exported so external runners can assert
|
|
32
32
|
// the bound default without restating the literal.
|
|
33
33
|
export { DEPLOYMENT_DEFAULT_APP_ID } from './render.js';
|
|
34
34
|
export { createReferenceConformanceHost, } from './conformance-host.js';
|
package/dist/render.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ import type { ActionSpec, HostContextProjection } from '@ggui-ai/protocol';
|
|
|
35
35
|
* model is no-auth — every caller is the same anonymous identity — so
|
|
36
36
|
* the per-identity mapping a real deployment configures collapses to
|
|
37
37
|
* one deployment-wide constant. The value matches the conformance
|
|
38
|
-
* kit's conventional
|
|
38
|
+
* kit's conventional app id (`'conformance'`, the appId the kit's
|
|
39
39
|
* runner stamps on its subscribe frames) because grading by the kit is
|
|
40
40
|
* the only deployment context this package has.
|
|
41
41
|
*/
|
package/dist/render.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* model is no-auth — every caller is the same anonymous identity — so
|
|
6
6
|
* the per-identity mapping a real deployment configures collapses to
|
|
7
7
|
* one deployment-wide constant. The value matches the conformance
|
|
8
|
-
* kit's conventional
|
|
8
|
+
* kit's conventional app id (`'conformance'`, the appId the kit's
|
|
9
9
|
* runner stamps on its subscribe frames) because grading by the kit is
|
|
10
10
|
* the only deployment context this package has.
|
|
11
11
|
*/
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `ReferenceServer` — the minimal WS live-channel server this package
|
|
3
3
|
* exports. Honest scope: SPEC §12.2 wire (subscribe incl. the §12.2
|
|
4
|
-
* appId-
|
|
4
|
+
* appId app-scope MUST → APP_MISMATCH), version handshake, the single
|
|
5
5
|
* action-routing model (action → consume-buffer append → ack with
|
|
6
6
|
* sequence; undeclared actions AND schema-violating payloads rejected
|
|
7
7
|
* with CONTRACT_VIOLATION per SPEC §4.6 receipt validation), and
|
|
@@ -175,7 +175,7 @@ export class ReferenceServer {
|
|
|
175
175
|
// obligation is purely stateful: persist the validated
|
|
176
176
|
// projection onto the named render (idempotent overwrite). The
|
|
177
177
|
// first-party server scopes the write through its subscriber
|
|
178
|
-
// binding; this no-auth server's
|
|
178
|
+
// binding; this no-auth server's scope is the render
|
|
179
179
|
// lookup itself — malformed frames and unknown renders drop,
|
|
180
180
|
// mirroring the action path.
|
|
181
181
|
const parsed = parseHostContextObservedFrame(frame);
|
|
@@ -204,7 +204,7 @@ export class ReferenceServer {
|
|
|
204
204
|
// every caller is the same anonymous identity — so the
|
|
205
205
|
// identity-default collapses to the deployment-level
|
|
206
206
|
// {@link DEPLOYMENT_DEFAULT_APP_ID}; the resolved value flows
|
|
207
|
-
// through the SAME
|
|
207
|
+
// through the SAME app-scope gate + provision-on-subscribe path a
|
|
208
208
|
// client-supplied appId takes. A PRESENT-but-non-string `appId` is
|
|
209
209
|
// still a malformed frame and takes the missing-`sessionId`
|
|
210
210
|
// posture: silently dropped, no error frame, no render
|
|
@@ -254,7 +254,7 @@ export class ReferenceServer {
|
|
|
254
254
|
}
|
|
255
255
|
return;
|
|
256
256
|
}
|
|
257
|
-
// SPEC §12.2
|
|
257
|
+
// SPEC §12.2 app-scope MUST: the subscribe's `appId` MUST match the
|
|
258
258
|
// GguiSession's bound appId or the subscribe fails APP_MISMATCH
|
|
259
259
|
// (§12.2.3). The code is deliberately distinct from
|
|
260
260
|
// SESSION_NOT_FOUND — the GguiSession EXISTS, it is reachable only
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ggui-ai/protocol-reference-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Minimal reference implementation of the ggui protocol. Implements exactly enough of the live-channel WebSocket wire to pass the @ggui-ai/protocol-conformance kit. Not a production server — it exists to prove the protocol is vendor-neutral: an independent, from-scratch implementation passing the kit grounds that claim empirically.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ggui",
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"ws": "^8.20.1",
|
|
32
|
-
"@ggui-ai/protocol": "0.
|
|
32
|
+
"@ggui-ai/protocol": "0.17.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.0.0",
|
|
36
36
|
"@types/ws": "^8.5.10",
|
|
37
37
|
"typescript": "^5.0.0",
|
|
38
38
|
"vitest": "^3.2.6",
|
|
39
|
-
"@ggui-ai/protocol-conformance": "0.
|
|
39
|
+
"@ggui-ai/protocol-conformance": "0.17.0"
|
|
40
40
|
},
|
|
41
41
|
"repository": {
|
|
42
42
|
"type": "git",
|