@econ-v1/rpc 7.5.18 → 7.5.20
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/focused-element-contract.d.ts +16 -0
- package/dist/focused-element-contract.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/stage-context-publisher.d.ts +22 -0
- package/dist/stage-context-publisher.d.ts.map +1 -0
- package/dist/stage-context.d.ts +5 -0
- package/dist/stage-context.d.ts.map +1 -1
- package/dist/stage-diagnostics-contract.d.ts +17 -0
- package/dist/stage-diagnostics-contract.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/focused-element-contract.js +43 -0
- package/src/index.js +7 -0
- package/src/stage-context-publisher.js +48 -0
- package/src/stage-context.js +2 -1
- package/src/stage-diagnostics-contract.js +46 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @param {unknown} value @returns {FocusedElementResultV1 | string} */
|
|
2
|
+
export function validateFocusedElementResult(value: unknown): FocusedElementResultV1 | string;
|
|
3
|
+
export type FocusedElementMetadataV1 = {
|
|
4
|
+
readonly tag: string;
|
|
5
|
+
readonly role?: string;
|
|
6
|
+
readonly name?: string;
|
|
7
|
+
readonly publicId?: string;
|
|
8
|
+
};
|
|
9
|
+
export type FocusedElementResultV1 = {
|
|
10
|
+
readonly status: "found";
|
|
11
|
+
readonly insideStage: boolean;
|
|
12
|
+
readonly element: FocusedElementMetadataV1;
|
|
13
|
+
} | {
|
|
14
|
+
readonly status: "none" | "private" | "unavailable" | "page_changed";
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=focused-element-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focused-element-contract.d.ts","sourceRoot":"","sources":["../src/focused-element-contract.js"],"names":[],"mappings":"AAUA,wEAAwE;AACxE,oDADY,OAAO,GAAkB,sBAAsB,GAAG,MAAM,CAgCnE;uCAvCa;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;qCACpG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;CAAE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export { SubscriptionStateCell } from "./subscription-state.js";
|
|
2
2
|
export { CLIENT_SERVICES_RETRY_COMMAND } from "./client-services-contract.js";
|
|
3
3
|
export { DEVTOOLS_GRANT } from "./grants-contract.js";
|
|
4
|
+
export { createStageContextPublisher } from "./stage-context-publisher.js";
|
|
4
5
|
export { DEVICE_BOOT_STATE_QUERY } from "./device-boot-contract.js";
|
|
5
6
|
export { CLIENT_DEVICE_PENDING_QUERY } from "./client-device-pending-contract.js";
|
|
6
7
|
export { SYNC_CURSORS_QUERY } from "./sync-cursors-contract.js";
|
|
7
8
|
export { describeClientError } from "./describe-client-error.js";
|
|
9
|
+
export { validateFocusedElementResult } from "./focused-element-contract.js";
|
|
8
10
|
export type KernelRpcClient = import("./client.js").KernelRpcClient;
|
|
9
11
|
export type DescribedClientError = import("./describe-client-error.js").DescribedClientError;
|
|
10
12
|
export type NodeHealthRow = import("./node-health-query.js").NodeHealthRow;
|
|
@@ -204,6 +206,10 @@ export type DevtoolsScriptHostPort = import("@econ-v1/ports").DevtoolsScriptHost
|
|
|
204
206
|
export type HostContextRef = import("./host-context-contract.js").HostContextRef;
|
|
205
207
|
export type HostContextView = import("./host-context-contract.js").HostContextView;
|
|
206
208
|
export type PageUnderstandingV1 = import("./page-understanding-contract.js").PageUnderstandingV1;
|
|
209
|
+
export type StageDiagnosticEntryV1 = import("./stage-diagnostics-contract.js").StageDiagnosticEntryV1;
|
|
210
|
+
export type StageDiagnosticsV1 = import("./stage-diagnostics-contract.js").StageDiagnosticsV1;
|
|
211
|
+
export type FocusedElementMetadataV1 = import("./focused-element-contract.js").FocusedElementMetadataV1;
|
|
212
|
+
export type FocusedElementResultV1 = import("./focused-element-contract.js").FocusedElementResultV1;
|
|
207
213
|
export { DOMAIN_ERROR_CODES, DomainError, SYNC_ERROR_CODES, SyncError, TRANSPORT_ERROR_CODES, TransportError } from "@econ-v1/domain";
|
|
208
214
|
export { deserializeClientError, isJsonValue, isSerializableClientError, serializeClientError } from "./errors.js";
|
|
209
215
|
export { DEFAULT_REQUEST_TIMEOUT_MS, KernelRpcTimeoutError, MessagePortKernelRpcClient } from "./message-port-client.js";
|
|
@@ -227,4 +233,5 @@ export { CHILD_ACTIONS, CHILD_STATE_CODES, describeChildState, isTransientChildS
|
|
|
227
233
|
export { createNodeHealthQuery, NODE_HEALTH_QUERY } from "./node-health-query.js";
|
|
228
234
|
export { createResponsivenessTracker, EMA_HOLD_MS } from "./node-responsiveness.js";
|
|
229
235
|
export { validatePageUnderstanding, contextUtf8Bytes, PAGE_UNDERSTANDING_MAX_BYTES } from "./page-understanding-contract.js";
|
|
236
|
+
export { STAGE_DIAGNOSTICS_MAX_BYTES, validateStageDiagnostics } from "./stage-diagnostics-contract.js";
|
|
230
237
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate stage-authored context and diagnostics before forwarding them to an optional host.
|
|
3
|
+
* @param {{ stageId: string, hostContext: { set(view: object): void, clear(): void }, diagnostics?: { report(value: unknown): void, clear(): void } }} options
|
|
4
|
+
*/
|
|
5
|
+
export function createStageContextPublisher(options: {
|
|
6
|
+
stageId: string;
|
|
7
|
+
hostContext: {
|
|
8
|
+
set(view: object): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
};
|
|
11
|
+
diagnostics?: {
|
|
12
|
+
report(value: unknown): void;
|
|
13
|
+
clear(): void;
|
|
14
|
+
};
|
|
15
|
+
}): {
|
|
16
|
+
/** @param {unknown} view @returns {boolean} */
|
|
17
|
+
publishView(view: unknown): boolean;
|
|
18
|
+
/** @param {unknown} entries @returns {boolean} */
|
|
19
|
+
reportDiagnostics(entries: unknown): boolean;
|
|
20
|
+
clear(): void;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=stage-context-publisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-context-publisher.d.ts","sourceRoot":"","sources":["../src/stage-context-publisher.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qDAFW;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,KAAK,IAAI,IAAI,CAAA;KAAE,CAAA;CAAE;IAU9I,+CAA+C;sBAAnC,OAAO,GAAiB,OAAO;IAW3C,kDAAkD;+BAAtC,OAAO,GAAoB,OAAO;;EAoBrD"}
|
package/dist/stage-context.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ export type StageLoadOptions = {
|
|
|
17
17
|
readonly onEvent?: (event: JsonValue) => void;
|
|
18
18
|
};
|
|
19
19
|
export type PageUnderstandingV1 = import("./page-understanding-contract.js").PageUnderstandingV1;
|
|
20
|
+
export type StageDiagnosticsHost = {
|
|
21
|
+
report(value: import("./stage-diagnostics-contract.js").StageDiagnosticsV1): void;
|
|
22
|
+
clear(): void;
|
|
23
|
+
};
|
|
20
24
|
export type MountedStage = {
|
|
21
25
|
readonly pageUnderstanding?: PageUnderstandingV1 | string;
|
|
22
26
|
unmount(): Promise<void>;
|
|
@@ -115,6 +119,7 @@ export type StageHostShared = {
|
|
|
115
119
|
set(view: object): void;
|
|
116
120
|
clear(): void;
|
|
117
121
|
};
|
|
122
|
+
readonly diagnostics?: StageDiagnosticsHost;
|
|
118
123
|
readonly panel?: AssistantPanelHost;
|
|
119
124
|
};
|
|
120
125
|
export type StageContextV1 = StageContextShared & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-context.d.ts","sourceRoot":"","sources":["../src/stage-context.js"],"names":[],"mappings":"8BAEc,OAAO,iBAAiB,EAAE,eAAe;wBACzC,OAAO,iBAAiB,EAAE,SAAS;0BACnC,OAAO,aAAa,EAAE,WAAW;oCACjC,OAAO,aAAa,EAAE,qBAAqB;gCAC3C,OAAO,aAAa,EAAE,iBAAiB;2BACvC,OAAO,sBAAsB,EAAE,YAAY;gCAC3C,OAAO,4BAA4B,EAAE,iBAAiB;iCACtD,OAAO,6BAA6B,EAAE,kBAAkB;wBACxD,OAAO,iBAAiB,EAAE,SAAS;+BACnC;IAAE,QAAQ,IAAI,SAAS,CAAC;IAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,WAAW,CAAC;IAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;+BACnI;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE;kCAC7E,OAAO,kCAAkC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"stage-context.d.ts","sourceRoot":"","sources":["../src/stage-context.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @param {unknown} value @returns {StageDiagnosticsV1 | string} */
|
|
2
|
+
export function validateStageDiagnostics(value: unknown): StageDiagnosticsV1 | string;
|
|
3
|
+
/** @typedef {{ readonly code: string, readonly severity: "info" | "warning" | "error", readonly summary: string, readonly detail?: string, readonly remediation?: string }} StageDiagnosticEntryV1 */
|
|
4
|
+
/** @typedef {{ readonly schemaVersion: 1, readonly entries: readonly StageDiagnosticEntryV1[] }} StageDiagnosticsV1 */
|
|
5
|
+
export const STAGE_DIAGNOSTICS_MAX_BYTES: 4096;
|
|
6
|
+
export type StageDiagnosticEntryV1 = {
|
|
7
|
+
readonly code: string;
|
|
8
|
+
readonly severity: "info" | "warning" | "error";
|
|
9
|
+
readonly summary: string;
|
|
10
|
+
readonly detail?: string;
|
|
11
|
+
readonly remediation?: string;
|
|
12
|
+
};
|
|
13
|
+
export type StageDiagnosticsV1 = {
|
|
14
|
+
readonly schemaVersion: 1;
|
|
15
|
+
readonly entries: readonly StageDiagnosticEntryV1[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=stage-diagnostics-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-diagnostics-contract.d.ts","sourceRoot":"","sources":["../src/stage-diagnostics-contract.js"],"names":[],"mappings":"AAYA,oEAAoE;AACpE,gDADY,OAAO,GAAkB,kBAAkB,GAAG,MAAM,CAiC/D;AA1CD,sMAAsM;AACtM,uHAAuH;AAEvH,0CAA2C,IAAI,CAAC;qCAHlC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;iCAC7J;IAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAA;CAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@econ-v1/rpc",
|
|
3
|
-
"version": "7.5.
|
|
3
|
+
"version": "7.5.20",
|
|
4
4
|
"description": "Typed runtime and contracts for Node client stage-to-kernel RPC",
|
|
5
5
|
"license": "MIT OR Apache-2.0",
|
|
6
6
|
"author": "Node contributors",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@econ-v1/domain": "7.5.
|
|
60
|
-
"@econ-v1/ports": "7.5.
|
|
59
|
+
"@econ-v1/domain": "7.5.20",
|
|
60
|
+
"@econ-v1/ports": "7.5.20"
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { contextUtf8Bytes } from "./page-understanding-contract.js";
|
|
3
|
+
|
|
4
|
+
/** @typedef {{ readonly tag: string, readonly role?: string, readonly name?: string, readonly publicId?: string }} FocusedElementMetadataV1 */
|
|
5
|
+
/** @typedef {{ readonly status: "found", readonly insideStage: boolean, readonly element: FocusedElementMetadataV1 } | { readonly status: "none" | "private" | "unavailable" | "page_changed" }} FocusedElementResultV1 */
|
|
6
|
+
|
|
7
|
+
const RESULT_KEYS = new Set(["status", "insideStage", "element"]);
|
|
8
|
+
const ELEMENT_KEYS = new Set(["tag", "role", "name", "publicId"]);
|
|
9
|
+
const TEXT_LIMITS = { tag: 64, role: 64, name: 160, publicId: 96 };
|
|
10
|
+
|
|
11
|
+
/** @param {unknown} value @returns {FocusedElementResultV1 | string} */
|
|
12
|
+
export function validateFocusedElementResult(value) {
|
|
13
|
+
let serialized;
|
|
14
|
+
try {
|
|
15
|
+
serialized = JSON.stringify(value);
|
|
16
|
+
} catch {
|
|
17
|
+
return "focused-element:invalid";
|
|
18
|
+
}
|
|
19
|
+
if (typeof serialized !== "string" || contextUtf8Bytes(serialized) > 512) return "focused-element:invalid";
|
|
20
|
+
/** @type {unknown} */
|
|
21
|
+
let detached;
|
|
22
|
+
try {
|
|
23
|
+
detached = JSON.parse(serialized);
|
|
24
|
+
} catch {
|
|
25
|
+
return "focused-element:invalid";
|
|
26
|
+
}
|
|
27
|
+
if (!detached || typeof detached !== "object" || Array.isArray(detached)) return "focused-element:invalid";
|
|
28
|
+
const row = /** @type {Record<string, unknown>} */ (detached);
|
|
29
|
+
if (row.status === "none" || row.status === "private" || row.status === "unavailable" || row.status === "page_changed") {
|
|
30
|
+
return Object.keys(row).length === 1 ? /** @type {FocusedElementResultV1} */ (row) : "focused-element:invalid";
|
|
31
|
+
}
|
|
32
|
+
if (row.status !== "found" || Object.keys(row).some(key => !RESULT_KEYS.has(key)) || typeof row.insideStage !== "boolean") return "focused-element:invalid";
|
|
33
|
+
if (!row.element || typeof row.element !== "object" || Array.isArray(row.element)) return "focused-element:invalid";
|
|
34
|
+
const element = /** @type {Record<string, unknown>} */ (row.element);
|
|
35
|
+
if (Object.keys(element).some(key => !ELEMENT_KEYS.has(key))) return "focused-element:invalid";
|
|
36
|
+
for (const [key, max] of Object.entries(TEXT_LIMITS)) {
|
|
37
|
+
const value = element[key];
|
|
38
|
+
if (key === "tag" && (typeof value !== "string" || !/^[a-z][a-z0-9-]*$/u.test(value))) return "focused-element:invalid";
|
|
39
|
+
if (key !== "tag" && value !== undefined && (typeof value !== "string" || value.trim() === "" || value.length > max)) return "focused-element:invalid";
|
|
40
|
+
if (key === "tag" && typeof value === "string" && value.length > max) return "focused-element:invalid";
|
|
41
|
+
}
|
|
42
|
+
return /** @type {FocusedElementResultV1} */ (row);
|
|
43
|
+
}
|
package/src/index.js
CHANGED
|
@@ -214,6 +214,7 @@ export { BROWSER_TURN_RECORD_CAPABILITY, BROWSER_TURN_RECORD_COMMAND, parseBrows
|
|
|
214
214
|
export { CLIENT_SERVICES_RETRY_COMMAND } from "./client-services-contract.js";
|
|
215
215
|
export { DEVTOOLS_GRANT } from "./grants-contract.js";
|
|
216
216
|
export { HOST_CONTEXT_MAX_BYTES, validateHostContextView } from "./host-context-contract.js";
|
|
217
|
+
export { createStageContextPublisher } from "./stage-context-publisher.js";
|
|
217
218
|
export { L402_ENFORCEMENT_QUERY, L402_ENFORCEMENT_ROW_ID, L402_ENFORCEMENT_SET_COMMAND } from "./l402-enforcement-contract.js";
|
|
218
219
|
export { isRouteMode, MODEL_PICKER_CATALOG_QUERY, MODEL_PICKER_CATALOG_ROW_ID, MODEL_PICKER_RECENTS_LIMIT, MODEL_PICKER_RECENTS_SETTING, MODEL_PICKER_REFRESH_COMMAND, MODEL_PICKER_REFRESH_QUERY, MODEL_PICKER_REFRESH_ROW_ID, MODEL_PICKER_STAGE_ID, parseModelPickerRefreshPayload, ROUTE_MODES, WEB_SEARCH_AUTO } from "./model-picker-contract.js";
|
|
219
220
|
export {
|
|
@@ -293,3 +294,9 @@ export { createResponsivenessTracker, EMA_HOLD_MS } from "./node-responsiveness.
|
|
|
293
294
|
|
|
294
295
|
export { validatePageUnderstanding, contextUtf8Bytes, PAGE_UNDERSTANDING_MAX_BYTES } from "./page-understanding-contract.js";
|
|
295
296
|
/** @typedef {import("./page-understanding-contract.js").PageUnderstandingV1} PageUnderstandingV1 */
|
|
297
|
+
export { STAGE_DIAGNOSTICS_MAX_BYTES, validateStageDiagnostics } from "./stage-diagnostics-contract.js";
|
|
298
|
+
/** @typedef {import("./stage-diagnostics-contract.js").StageDiagnosticEntryV1} StageDiagnosticEntryV1 */
|
|
299
|
+
/** @typedef {import("./stage-diagnostics-contract.js").StageDiagnosticsV1} StageDiagnosticsV1 */
|
|
300
|
+
export { validateFocusedElementResult } from "./focused-element-contract.js";
|
|
301
|
+
/** @typedef {import("./focused-element-contract.js").FocusedElementMetadataV1} FocusedElementMetadataV1 */
|
|
302
|
+
/** @typedef {import("./focused-element-contract.js").FocusedElementResultV1} FocusedElementResultV1 */
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { validateHostContextView } from "./host-context-contract.js";
|
|
3
|
+
import { validateStageDiagnostics } from "./stage-diagnostics-contract.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate stage-authored context and diagnostics before forwarding them to an optional host.
|
|
7
|
+
* @param {{ stageId: string, hostContext: { set(view: object): void, clear(): void }, diagnostics?: { report(value: unknown): void, clear(): void } }} options
|
|
8
|
+
*/
|
|
9
|
+
export function createStageContextPublisher(options) {
|
|
10
|
+
/** @param {string} reason */
|
|
11
|
+
const reportInvalid = (reason) => options.diagnostics?.report({ schemaVersion: 1, entries: [{
|
|
12
|
+
code: "stage.context-invalid", detail: `${options.stageId}: ${reason}`.slice(0, 512),
|
|
13
|
+
remediation: "Publish a HostContextViewV1 value with only supported fields and bounded text.",
|
|
14
|
+
severity: "warning", summary: "The stage view was rejected by the authoring helper.",
|
|
15
|
+
}] });
|
|
16
|
+
return {
|
|
17
|
+
/** @param {unknown} view @returns {boolean} */
|
|
18
|
+
publishView(view) {
|
|
19
|
+
const validated = validateHostContextView(view);
|
|
20
|
+
if (typeof validated === "string") {
|
|
21
|
+
options.hostContext.clear();
|
|
22
|
+
reportInvalid(validated);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
options.hostContext.set(validated);
|
|
26
|
+
return true;
|
|
27
|
+
},
|
|
28
|
+
/** @param {unknown} entries @returns {boolean} */
|
|
29
|
+
reportDiagnostics(entries) {
|
|
30
|
+
const value = { schemaVersion: 1, entries };
|
|
31
|
+
const validated = validateStageDiagnostics(value);
|
|
32
|
+
if (typeof validated === "string") {
|
|
33
|
+
options.diagnostics?.report({ schemaVersion: 1, entries: [{
|
|
34
|
+
code: "stage.diagnostics-invalid", detail: validated,
|
|
35
|
+
remediation: "Publish at most 20 valid StageDiagnosticsV1 entries within the 4096-byte limit.",
|
|
36
|
+
severity: "warning", summary: "Stage diagnostics were rejected by the authoring helper.",
|
|
37
|
+
}] });
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
options.diagnostics?.report(validated);
|
|
41
|
+
return true;
|
|
42
|
+
},
|
|
43
|
+
clear() {
|
|
44
|
+
options.hostContext.clear();
|
|
45
|
+
options.diagnostics?.clear();
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
package/src/stage-context.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
/** @typedef {{ getInput(): JsonValue, subscribeInput(listener: (input: JsonValue) => void): Unsubscribe, emit(event: JsonValue): Promise<void> }} StageComposition */
|
|
13
13
|
/** @typedef {{ readonly input?: JsonValue, readonly onEvent?: (event: JsonValue) => void }} StageLoadOptions */
|
|
14
14
|
/** @typedef {import("./page-understanding-contract.js").PageUnderstandingV1} PageUnderstandingV1 */
|
|
15
|
+
/** @typedef {{ report(value: import("./stage-diagnostics-contract.js").StageDiagnosticsV1): void, clear(): void }} StageDiagnosticsHost */
|
|
15
16
|
/** @typedef {{ readonly pageUnderstanding?: PageUnderstandingV1 | string, unmount(): Promise<void>, setInput(input: JsonValue): Promise<void> }} MountedStage */
|
|
16
17
|
/** @typedef {(appName: string, slot: Element, options?: StageLoadOptions) => Promise<MountedStage>} StageLoadHandler */
|
|
17
18
|
/** @typedef {{ readonly code: "ready" | "starting" | "preparing" | "updating" | "cache-failed" | "blocked" | "needs-approval" | "needs-host-update" | "package-broken" | "offline-unavailable" | "needs-first-sync" | "not-installed" | "unavailable-on-this-node", readonly title?: string, readonly features?: readonly string[], readonly minHost?: string, readonly reason?: string }} StageChildState */
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
/** @typedef {{status:"excluded"|"collecting"|"ready"|"partial"|"unavailable",snapshot:unknown}} AgentPageContextResult */
|
|
35
36
|
/** @typedef {{readonly tabId:string,prepareTurn(conversationId:string):Promise<void>,executeAuthorized(name:string,args:Record<string,unknown>,target:{nodeId:string,pageId:string,navigationRevision:number},verify:()=>Promise<void>):Promise<unknown>,setConversation(selection:{conversationId:string,allowed:boolean,active:boolean}):void,subscribe(listener:(result:AgentPageContextResult)=>void):Unsubscribe,captureForSend():Promise<AgentPageContextResult>,readTarget():Promise<{nodeId:string,pageId:string,navigationRevision:number}|null>}} AgentPageContextHost */
|
|
36
37
|
/** @typedef {{read():unknown,activate(provider:()=>unknown):Unsubscribe,current(view:"stage"|"widget"):unknown,register(view:"stage"|"widget",provider:()=>unknown,releaseDraft?:(current:unknown,accepted:unknown)=>unknown):Unsubscribe,transfer(from:"stage"|"widget",to:"stage"|"widget"):boolean,cancelTransfersFrom?(from:"stage"|"widget"):void,pending(view:"stage"|"widget"):{id:number,state:unknown}|null,subscribe(view:"stage"|"widget",listener:()=>void):Unsubscribe,acknowledge(view:"stage"|"widget",id:number):boolean}} AgentViewWorkspace */
|
|
37
|
-
/** @typedef {{ readonly assistantWorkspace?: AgentViewWorkspace, readonly pageContext?: AgentPageContextHost, navigate(path: string): void, readonly root: Element, readonly context: { set(view: object): void, clear(): void }, readonly panel?: AssistantPanelHost }} StageHostShared */
|
|
38
|
+
/** @typedef {{ readonly assistantWorkspace?: AgentViewWorkspace, readonly pageContext?: AgentPageContextHost, navigate(path: string): void, readonly root: Element, readonly context: { set(view: object): void, clear(): void }, readonly diagnostics?: StageDiagnosticsHost, readonly panel?: AssistantPanelHost }} StageHostShared */
|
|
38
39
|
/** @typedef {StageContextShared & { readonly host: StageHostShared & { readonly uiApi: 1 } }} StageContextV1 */
|
|
39
40
|
/** @typedef {StageContextShared & { readonly host: StageHostShared & { readonly dialogs: DialogCenter, readonly modelPicker: ModelPickerCenter, readonly systemNotices: SystemNoticeCenter, readonly uiApi: 2 } }} StageContextV2 */
|
|
40
41
|
/** @typedef {StageContextV1 | StageContextV2} StageContext */
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { contextUtf8Bytes } from "./page-understanding-contract.js";
|
|
3
|
+
|
|
4
|
+
/** @typedef {{ readonly code: string, readonly severity: "info" | "warning" | "error", readonly summary: string, readonly detail?: string, readonly remediation?: string }} StageDiagnosticEntryV1 */
|
|
5
|
+
/** @typedef {{ readonly schemaVersion: 1, readonly entries: readonly StageDiagnosticEntryV1[] }} StageDiagnosticsV1 */
|
|
6
|
+
|
|
7
|
+
export const STAGE_DIAGNOSTICS_MAX_BYTES = 4096;
|
|
8
|
+
const MAX_ENTRIES = 20;
|
|
9
|
+
const ENTRY_KEYS = new Set(["code", "severity", "summary", "detail", "remediation"]);
|
|
10
|
+
const REPORT_KEYS = new Set(["schemaVersion", "entries"]);
|
|
11
|
+
const CODE_PATTERN = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/;
|
|
12
|
+
|
|
13
|
+
/** @param {unknown} value @returns {StageDiagnosticsV1 | string} */
|
|
14
|
+
export function validateStageDiagnostics(value) {
|
|
15
|
+
let serialized;
|
|
16
|
+
try {
|
|
17
|
+
serialized = JSON.stringify(value);
|
|
18
|
+
} catch {
|
|
19
|
+
return "diagnostics:invalid";
|
|
20
|
+
}
|
|
21
|
+
if (typeof serialized !== "string") return "diagnostics:invalid";
|
|
22
|
+
if (contextUtf8Bytes(serialized) > STAGE_DIAGNOSTICS_MAX_BYTES) return "diagnostics:oversized";
|
|
23
|
+
/** @type {unknown} */
|
|
24
|
+
let detached;
|
|
25
|
+
try {
|
|
26
|
+
detached = JSON.parse(serialized);
|
|
27
|
+
} catch {
|
|
28
|
+
return "diagnostics:invalid";
|
|
29
|
+
}
|
|
30
|
+
if (!detached || typeof detached !== "object" || Array.isArray(detached)) return "diagnostics:invalid";
|
|
31
|
+
const report = /** @type {Record<string, unknown>} */ (detached);
|
|
32
|
+
if (report.schemaVersion !== 1) return "diagnostics:unsupported";
|
|
33
|
+
if (Object.keys(report).some(key => !REPORT_KEYS.has(key))) return "diagnostics:invalid";
|
|
34
|
+
if (!Array.isArray(report.entries) || report.entries.length > MAX_ENTRIES) return "diagnostics:invalid";
|
|
35
|
+
for (const value of report.entries) {
|
|
36
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return "diagnostics:invalid";
|
|
37
|
+
const entry = /** @type {Record<string, unknown>} */ (value);
|
|
38
|
+
if (Object.keys(entry).some(key => !ENTRY_KEYS.has(key))) return "diagnostics:invalid";
|
|
39
|
+
if (typeof entry.code !== "string" || entry.code.length > 64 || !CODE_PATTERN.test(entry.code)) return "diagnostics:invalid";
|
|
40
|
+
if (entry.severity !== "info" && entry.severity !== "warning" && entry.severity !== "error") return "diagnostics:invalid";
|
|
41
|
+
if (typeof entry.summary !== "string" || !entry.summary.trim() || entry.summary.length > 160) return "diagnostics:invalid";
|
|
42
|
+
if (entry.detail !== undefined && (typeof entry.detail !== "string" || entry.detail.length > 512)) return "diagnostics:invalid";
|
|
43
|
+
if (entry.remediation !== undefined && (typeof entry.remediation !== "string" || entry.remediation.length > 512)) return "diagnostics:invalid";
|
|
44
|
+
}
|
|
45
|
+
return /** @type {StageDiagnosticsV1} */ (detached);
|
|
46
|
+
}
|