@blxzer/cursor-trellis-core 0.3.3 → 0.3.5

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.
Files changed (46) hide show
  1. package/LICENSE +235 -235
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/rpc/broker/audit.d.ts +16 -0
  7. package/dist/rpc/broker/audit.d.ts.map +1 -0
  8. package/dist/rpc/broker/audit.js +33 -0
  9. package/dist/rpc/broker/audit.js.map +1 -0
  10. package/dist/rpc/broker/in-process.d.ts +62 -0
  11. package/dist/rpc/broker/in-process.d.ts.map +1 -0
  12. package/dist/rpc/broker/in-process.js +490 -0
  13. package/dist/rpc/broker/in-process.js.map +1 -0
  14. package/dist/rpc/broker/journal.d.ts +11 -0
  15. package/dist/rpc/broker/journal.d.ts.map +1 -0
  16. package/dist/rpc/broker/journal.js +17 -0
  17. package/dist/rpc/broker/journal.js.map +1 -0
  18. package/dist/rpc/contract/errors.d.ts +18 -0
  19. package/dist/rpc/contract/errors.d.ts.map +1 -0
  20. package/dist/rpc/contract/errors.js +55 -0
  21. package/dist/rpc/contract/errors.js.map +1 -0
  22. package/dist/rpc/contract/parse.d.ts +9 -0
  23. package/dist/rpc/contract/parse.d.ts.map +1 -0
  24. package/dist/rpc/contract/parse.js +144 -0
  25. package/dist/rpc/contract/parse.js.map +1 -0
  26. package/dist/rpc/contract/topics.d.ts +11 -0
  27. package/dist/rpc/contract/topics.d.ts.map +1 -0
  28. package/dist/rpc/contract/topics.js +42 -0
  29. package/dist/rpc/contract/topics.js.map +1 -0
  30. package/dist/rpc/contract/types.d.ts +54 -0
  31. package/dist/rpc/contract/types.d.ts.map +1 -0
  32. package/dist/rpc/contract/types.js +39 -0
  33. package/dist/rpc/contract/types.js.map +1 -0
  34. package/dist/rpc/index.d.ts +10 -0
  35. package/dist/rpc/index.d.ts.map +1 -0
  36. package/dist/rpc/index.js +11 -0
  37. package/dist/rpc/index.js.map +1 -0
  38. package/dist/rpc/transport/localhost-server.d.ts +36 -0
  39. package/dist/rpc/transport/localhost-server.d.ts.map +1 -0
  40. package/dist/rpc/transport/localhost-server.js +275 -0
  41. package/dist/rpc/transport/localhost-server.js.map +1 -0
  42. package/dist/rpc/transport/websocket.d.ts +20 -0
  43. package/dist/rpc/transport/websocket.d.ts.map +1 -0
  44. package/dist/rpc/transport/websocket.js +156 -0
  45. package/dist/rpc/transport/websocket.js.map +1 -0
  46. package/package.json +6 -1
@@ -0,0 +1,18 @@
1
+ /** RPC-FULL CORE error codes (protocol v1). */
2
+ export declare const RPC_ERROR_CODES: readonly ["RPC_BAD_ENVELOPE", "RPC_UNKNOWN_METHOD", "RPC_NOT_REGISTERED", "RPC_TIMEOUT", "RPC_UNAUTHORIZED", "RPC_HITL_FORBIDDEN", "RPC_INTERNAL"];
3
+ export type RpcErrorCode = (typeof RPC_ERROR_CODES)[number];
4
+ export declare const RPC_ERROR_CODE_SET: ReadonlySet<string>;
5
+ export interface RpcErrorBody {
6
+ code: RpcErrorCode;
7
+ message: string;
8
+ details?: Record<string, unknown>;
9
+ }
10
+ export declare class RpcError extends Error {
11
+ readonly code: RpcErrorCode;
12
+ readonly details?: Record<string, unknown>;
13
+ constructor(code: RpcErrorCode, message: string, details?: Record<string, unknown>);
14
+ toBody(): RpcErrorBody;
15
+ }
16
+ export declare function parseRpcErrorCode(value: unknown): RpcErrorCode;
17
+ export declare function parseRpcErrorBody(value: unknown): RpcErrorBody;
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/rpc/contract/errors.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,eAAO,MAAM,eAAe,oJAQlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAA4B,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQnC,MAAM,IAAI,YAAY;CAKvB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAQ9D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAwB9D"}
@@ -0,0 +1,55 @@
1
+ /** RPC-FULL CORE error codes (protocol v1). */
2
+ export const RPC_ERROR_CODES = [
3
+ "RPC_BAD_ENVELOPE",
4
+ "RPC_UNKNOWN_METHOD",
5
+ "RPC_NOT_REGISTERED",
6
+ "RPC_TIMEOUT",
7
+ "RPC_UNAUTHORIZED",
8
+ "RPC_HITL_FORBIDDEN",
9
+ "RPC_INTERNAL",
10
+ ];
11
+ export const RPC_ERROR_CODE_SET = new Set(RPC_ERROR_CODES);
12
+ export class RpcError extends Error {
13
+ code;
14
+ details;
15
+ constructor(code, message, details) {
16
+ super(message);
17
+ this.name = "RpcError";
18
+ this.code = code;
19
+ if (details !== undefined)
20
+ this.details = details;
21
+ }
22
+ toBody() {
23
+ const body = { code: this.code, message: this.message };
24
+ if (this.details !== undefined)
25
+ body.details = this.details;
26
+ return body;
27
+ }
28
+ }
29
+ export function parseRpcErrorCode(value) {
30
+ if (typeof value !== "string" || !RPC_ERROR_CODE_SET.has(value)) {
31
+ throw new RpcError("RPC_BAD_ENVELOPE", `Invalid RPC error code: ${String(value)}`);
32
+ }
33
+ return value;
34
+ }
35
+ export function parseRpcErrorBody(value) {
36
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
37
+ throw new RpcError("RPC_BAD_ENVELOPE", "error must be an object");
38
+ }
39
+ const raw = value;
40
+ const code = parseRpcErrorCode(raw.code);
41
+ if (typeof raw.message !== "string" || raw.message.length === 0) {
42
+ throw new RpcError("RPC_BAD_ENVELOPE", "error.message must be a non-empty string");
43
+ }
44
+ const body = { code, message: raw.message };
45
+ if (raw.details !== undefined) {
46
+ if (raw.details === null ||
47
+ typeof raw.details !== "object" ||
48
+ Array.isArray(raw.details)) {
49
+ throw new RpcError("RPC_BAD_ENVELOPE", "error.details must be an object");
50
+ }
51
+ body.details = raw.details;
52
+ }
53
+ return body;
54
+ }
55
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/rpc/contract/errors.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,aAAa;IACb,kBAAkB;IAClB,oBAAoB;IACpB,cAAc;CACN,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAQhF,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IACnB,OAAO,CAA2B;IAE3C,YACE,IAAkB,EAClB,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACpD,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,2BAA2B,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,KAAqB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1D,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IACE,GAAG,CAAC,OAAO,KAAK,IAAI;YACpB,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAC1B,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAkC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type RpcAddress, type RpcEnvelope, type RpcEventName, type RpcMethod } from "./types.js";
2
+ export declare function parseRpcAddress(value: unknown): RpcAddress;
3
+ export declare function parseRpcMethod(value: unknown): RpcMethod;
4
+ export declare function parseRpcEventName(value: unknown): RpcEventName;
5
+ export declare function isHitlForbiddenMethod(method: string): boolean;
6
+ export declare function assertMethodAllowed(method: string): void;
7
+ export declare function parseRpcEnvelope(value: unknown): RpcEnvelope;
8
+ export declare function addressKey(address: RpcAddress): string;
9
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/rpc/contract/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAe1D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAQxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAQ9D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAS7D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQxD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAyF5D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,144 @@
1
+ import { parseRpcErrorBody, RpcError } from "./errors.js";
2
+ import { RPC_ADDRESS_KINDS, RPC_EVENT_NAMES, RPC_HITL_FORBIDDEN_METHODS, RPC_MESSAGE_TYPES, RPC_METHODS, RPC_PROTOCOL_VERSION, } from "./types.js";
3
+ const ADDRESS_KIND_SET = new Set(RPC_ADDRESS_KINDS);
4
+ const MESSAGE_TYPE_SET = new Set(RPC_MESSAGE_TYPES);
5
+ const METHOD_SET = new Set(RPC_METHODS);
6
+ const EVENT_SET = new Set(RPC_EVENT_NAMES);
7
+ function isRecord(value) {
8
+ return value !== null && typeof value === "object" && !Array.isArray(value);
9
+ }
10
+ function requireNonEmptyString(value, field) {
11
+ if (typeof value !== "string" || value.trim().length === 0) {
12
+ throw new RpcError("RPC_BAD_ENVELOPE", `${field} must be a non-empty string`);
13
+ }
14
+ return value;
15
+ }
16
+ export function parseRpcAddress(value) {
17
+ if (!isRecord(value)) {
18
+ throw new RpcError("RPC_BAD_ENVELOPE", "address must be an object");
19
+ }
20
+ const kindRaw = requireNonEmptyString(value.kind, "address.kind");
21
+ if (!ADDRESS_KIND_SET.has(kindRaw)) {
22
+ throw new RpcError("RPC_BAD_ENVELOPE", `Invalid address.kind: ${kindRaw}`);
23
+ }
24
+ return {
25
+ kind: kindRaw,
26
+ id: requireNonEmptyString(value.id, "address.id"),
27
+ };
28
+ }
29
+ export function parseRpcMethod(value) {
30
+ const method = requireNonEmptyString(value, "method");
31
+ if (!METHOD_SET.has(method)) {
32
+ throw new RpcError("RPC_UNKNOWN_METHOD", `Unknown RPC method: ${method}`, {
33
+ method,
34
+ });
35
+ }
36
+ return method;
37
+ }
38
+ export function parseRpcEventName(value) {
39
+ const event = requireNonEmptyString(value, "event");
40
+ if (!EVENT_SET.has(event)) {
41
+ throw new RpcError("RPC_BAD_ENVELOPE", `Unknown RPC event: ${event}`, {
42
+ event,
43
+ });
44
+ }
45
+ return event;
46
+ }
47
+ export function isHitlForbiddenMethod(method) {
48
+ if (RPC_HITL_FORBIDDEN_METHODS.includes(method)) {
49
+ return true;
50
+ }
51
+ return (method.startsWith("trellis.approve") ||
52
+ method.startsWith("trellis.integrate") ||
53
+ method.startsWith("trellis.startExecution"));
54
+ }
55
+ export function assertMethodAllowed(method) {
56
+ if (isHitlForbiddenMethod(method)) {
57
+ throw new RpcError("RPC_HITL_FORBIDDEN", `Broker must not auto-approve Trellis HITL gates via method '${method}'`, { method });
58
+ }
59
+ }
60
+ export function parseRpcEnvelope(value) {
61
+ if (!isRecord(value)) {
62
+ throw new RpcError("RPC_BAD_ENVELOPE", "envelope must be an object");
63
+ }
64
+ if (value.v !== RPC_PROTOCOL_VERSION) {
65
+ throw new RpcError("RPC_BAD_ENVELOPE", `Unsupported protocol version: ${String(value.v)}`, { expected: RPC_PROTOCOL_VERSION });
66
+ }
67
+ const typeRaw = requireNonEmptyString(value.type, "type");
68
+ if (!MESSAGE_TYPE_SET.has(typeRaw)) {
69
+ throw new RpcError("RPC_BAD_ENVELOPE", `Invalid message type: ${typeRaw}`);
70
+ }
71
+ const type = typeRaw;
72
+ const envelope = {
73
+ v: RPC_PROTOCOL_VERSION,
74
+ id: requireNonEmptyString(value.id, "id"),
75
+ type,
76
+ from: parseRpcAddress(value.from),
77
+ ts: requireNonEmptyString(value.ts, "ts"),
78
+ payload: {},
79
+ };
80
+ if (value.method !== undefined && value.method !== null) {
81
+ envelope.method = requireNonEmptyString(value.method, "method");
82
+ }
83
+ if (value.event !== undefined && value.event !== null) {
84
+ envelope.event = requireNonEmptyString(value.event, "event");
85
+ }
86
+ if (value.to === null) {
87
+ envelope.to = null;
88
+ }
89
+ else if (value.to !== undefined) {
90
+ envelope.to = parseRpcAddress(value.to);
91
+ }
92
+ if (value.campaignId === null) {
93
+ envelope.campaignId = null;
94
+ }
95
+ else if (value.campaignId !== undefined) {
96
+ envelope.campaignId = requireNonEmptyString(value.campaignId, "campaignId");
97
+ }
98
+ if (value.correlationId === null) {
99
+ envelope.correlationId = null;
100
+ }
101
+ else if (value.correlationId !== undefined) {
102
+ envelope.correlationId = requireNonEmptyString(value.correlationId, "correlationId");
103
+ }
104
+ if (value.topic === null) {
105
+ envelope.topic = null;
106
+ }
107
+ else if (value.topic !== undefined) {
108
+ envelope.topic = requireNonEmptyString(value.topic, "topic");
109
+ }
110
+ if (value.payload === undefined || value.payload === null) {
111
+ envelope.payload = {};
112
+ }
113
+ else if (!isRecord(value.payload)) {
114
+ throw new RpcError("RPC_BAD_ENVELOPE", "payload must be an object");
115
+ }
116
+ else {
117
+ envelope.payload = value.payload;
118
+ }
119
+ if (value.error === null) {
120
+ envelope.error = null;
121
+ }
122
+ else if (value.error !== undefined) {
123
+ envelope.error = parseRpcErrorBody(value.error);
124
+ }
125
+ if (type === "req" || type === "res") {
126
+ if (!envelope.method) {
127
+ throw new RpcError("RPC_BAD_ENVELOPE", `${type} messages require method`);
128
+ }
129
+ if (type === "req") {
130
+ assertMethodAllowed(envelope.method);
131
+ }
132
+ }
133
+ if (type === "event") {
134
+ if (!envelope.event) {
135
+ throw new RpcError("RPC_BAD_ENVELOPE", "event messages require event");
136
+ }
137
+ parseRpcEventName(envelope.event);
138
+ }
139
+ return envelope;
140
+ }
141
+ export function addressKey(address) {
142
+ return `${address.kind}:${address.id}`;
143
+ }
144
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/rpc/contract/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare function campaignBroadcastTopic(campaignId: string): string;
2
+ export declare function campaignStageTopic(campaignId: string, stageId: string): string;
3
+ export declare function parseCampaignTopic(topic: string): {
4
+ kind: "broadcast";
5
+ campaignId: string;
6
+ } | {
7
+ kind: "stage";
8
+ campaignId: string;
9
+ stageId: string;
10
+ };
11
+ //# sourceMappingURL=topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../../src/rpc/contract/topics.ts"],"names":[],"mappings":"AAKA,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAajE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgB9E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAEX;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBzD"}
@@ -0,0 +1,42 @@
1
+ import { RpcError } from "./errors.js";
2
+ const BROADCAST_RE = /^campaign:([^:]+):broadcast$/;
3
+ const STAGE_RE = /^campaign:([^:]+):stage:([^:]+)$/;
4
+ export function campaignBroadcastTopic(campaignId) {
5
+ const id = campaignId.trim();
6
+ if (!id) {
7
+ throw new RpcError("RPC_BAD_ENVELOPE", "campaignId must be non-empty");
8
+ }
9
+ if (id.includes(":")) {
10
+ throw new RpcError("RPC_BAD_ENVELOPE", "campaignId must not contain ':'", { campaignId: id });
11
+ }
12
+ return `campaign:${id}:broadcast`;
13
+ }
14
+ export function campaignStageTopic(campaignId, stageId) {
15
+ const c = campaignId.trim();
16
+ const s = stageId.trim();
17
+ if (!c || !s) {
18
+ throw new RpcError("RPC_BAD_ENVELOPE", "campaignId and stageId must be non-empty");
19
+ }
20
+ if (c.includes(":") || s.includes(":")) {
21
+ throw new RpcError("RPC_BAD_ENVELOPE", "campaignId/stageId must not contain ':'");
22
+ }
23
+ return `campaign:${c}:stage:${s}`;
24
+ }
25
+ export function parseCampaignTopic(topic) {
26
+ const broadcast = BROADCAST_RE.exec(topic);
27
+ if (broadcast?.[1]) {
28
+ return { kind: "broadcast", campaignId: broadcast[1] };
29
+ }
30
+ const stage = STAGE_RE.exec(topic);
31
+ if (stage?.[1] && stage[2]) {
32
+ return {
33
+ kind: "stage",
34
+ campaignId: stage[1],
35
+ stageId: stage[2],
36
+ };
37
+ }
38
+ throw new RpcError("RPC_BAD_ENVELOPE", `Invalid campaign topic: ${topic}`, {
39
+ topic,
40
+ });
41
+ }
42
+ //# sourceMappingURL=topics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../../src/rpc/contract/topics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,YAAY,GAAG,8BAA8B,CAAC;AACpD,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,iCAAiC,EACjC,EAAE,UAAU,EAAE,EAAE,EAAE,CACnB,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,EAAE,YAAY,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,OAAe;IACpE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAa;IAIb,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;SAClB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,2BAA2B,KAAK,EAAE,EAAE;QACzE,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,54 @@
1
+ /** RPC-FULL CORE wire types (protocol v1). See `.cstl/spec/Trellis/framework/rpc-full-core.md`. */
2
+ import type { RpcErrorBody } from "./errors.js";
3
+ export declare const RPC_PROTOCOL_VERSION: 1;
4
+ export declare const RPC_ADDRESS_KINDS: readonly ["worker", "session", "cli", "sdk", "broker"];
5
+ export type RpcAddressKind = (typeof RPC_ADDRESS_KINDS)[number];
6
+ export interface RpcAddress {
7
+ kind: RpcAddressKind;
8
+ id: string;
9
+ }
10
+ export declare const RPC_MESSAGE_TYPES: readonly ["req", "res", "event", "ack", "heartbeat"];
11
+ export type RpcMessageType = (typeof RPC_MESSAGE_TYPES)[number];
12
+ export declare const RPC_METHODS: readonly ["register", "heartbeat", "send", "request", "ack", "subscribe", "publish", "status"];
13
+ export type RpcMethod = (typeof RPC_METHODS)[number];
14
+ export declare const RPC_EVENT_NAMES: readonly ["trellis.child.state", "trellis.gate.pending", "trellis.unit.ready", "trellis.campaign.topic"];
15
+ export type RpcEventName = (typeof RPC_EVENT_NAMES)[number];
16
+ /** Methods that must never be executed by the broker (HITL non-bypass). */
17
+ export declare const RPC_HITL_FORBIDDEN_METHODS: readonly ["trellis.approveGate", "trellis.startExecution", "trellis.integrateChild"];
18
+ export type RpcHitlForbiddenMethod = (typeof RPC_HITL_FORBIDDEN_METHODS)[number];
19
+ export interface RpcEnvelope {
20
+ v: typeof RPC_PROTOCOL_VERSION;
21
+ id: string;
22
+ type: RpcMessageType;
23
+ method?: string;
24
+ event?: string;
25
+ from: RpcAddress;
26
+ to?: RpcAddress | null;
27
+ campaignId?: string | null;
28
+ correlationId?: string | null;
29
+ topic?: string | null;
30
+ ts: string;
31
+ payload: Record<string, unknown>;
32
+ error?: RpcErrorBody | null;
33
+ }
34
+ export interface RpcRegisterPayload {
35
+ kind: RpcAddressKind;
36
+ id: string;
37
+ campaignId?: string;
38
+ token?: string;
39
+ }
40
+ export interface RpcSendPayload {
41
+ body: Record<string, unknown>;
42
+ }
43
+ export interface RpcStatusClient {
44
+ address: RpcAddress;
45
+ campaignId?: string;
46
+ lastSeenAt: string;
47
+ }
48
+ export interface RpcStatusSnapshot {
49
+ protocolVersion: typeof RPC_PROTOCOL_VERSION;
50
+ clients: RpcStatusClient[];
51
+ topics: string[];
52
+ auditCount: number;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/rpc/contract/types.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAEnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAE/C,eAAO,MAAM,iBAAiB,wDAMpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,iBAAiB,sDAMpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,eAAO,MAAM,WAAW,gGASd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,eAAe,0GAKlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,sFAI7B,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,OAAO,oBAAoB,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,OAAO,oBAAoB,CAAC;IAC7C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,39 @@
1
+ /** RPC-FULL CORE wire types (protocol v1). See `.cstl/spec/Trellis/framework/rpc-full-core.md`. */
2
+ export const RPC_PROTOCOL_VERSION = 1;
3
+ export const RPC_ADDRESS_KINDS = [
4
+ "worker",
5
+ "session",
6
+ "cli",
7
+ "sdk",
8
+ "broker",
9
+ ];
10
+ export const RPC_MESSAGE_TYPES = [
11
+ "req",
12
+ "res",
13
+ "event",
14
+ "ack",
15
+ "heartbeat",
16
+ ];
17
+ export const RPC_METHODS = [
18
+ "register",
19
+ "heartbeat",
20
+ "send",
21
+ "request",
22
+ "ack",
23
+ "subscribe",
24
+ "publish",
25
+ "status",
26
+ ];
27
+ export const RPC_EVENT_NAMES = [
28
+ "trellis.child.state",
29
+ "trellis.gate.pending",
30
+ "trellis.unit.ready",
31
+ "trellis.campaign.topic",
32
+ ];
33
+ /** Methods that must never be executed by the broker (HITL non-bypass). */
34
+ export const RPC_HITL_FORBIDDEN_METHODS = [
35
+ "trellis.approveGate",
36
+ "trellis.startExecution",
37
+ "trellis.integrateChild",
38
+ ];
39
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/rpc/contract/types.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAInG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ;IACR,SAAS;IACT,KAAK;IACL,KAAK;IACL,QAAQ;CACA,CAAC;AASX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU;IACV,WAAW;IACX,MAAM;IACN,SAAS;IACT,KAAK;IACL,WAAW;IACX,SAAS;IACT,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,qBAAqB;IACrB,sBAAsB;IACtB,oBAAoB;IACpB,wBAAwB;CAChB,CAAC;AAIX,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,qBAAqB;IACrB,wBAAwB;IACxB,wBAAwB;CAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { RPC_ERROR_CODES, RPC_ERROR_CODE_SET, RpcError, parseRpcErrorCode, parseRpcErrorBody, type RpcErrorCode, type RpcErrorBody, } from "./contract/errors.js";
2
+ export { RPC_PROTOCOL_VERSION, RPC_ADDRESS_KINDS, RPC_MESSAGE_TYPES, RPC_METHODS, RPC_EVENT_NAMES, RPC_HITL_FORBIDDEN_METHODS, type RpcAddressKind, type RpcAddress, type RpcMessageType, type RpcMethod, type RpcEventName, type RpcHitlForbiddenMethod, type RpcEnvelope, type RpcRegisterPayload, type RpcSendPayload, type RpcStatusClient, type RpcStatusSnapshot, } from "./contract/types.js";
3
+ export { parseRpcAddress, parseRpcMethod, parseRpcEventName, parseRpcEnvelope, isHitlForbiddenMethod, assertMethodAllowed, addressKey, } from "./contract/parse.js";
4
+ export { campaignBroadcastTopic, campaignStageTopic, parseCampaignTopic, } from "./contract/topics.js";
5
+ export { RpcAuditLog, type RpcAuditEntry } from "./broker/audit.js";
6
+ export { RpcJournal } from "./broker/journal.js";
7
+ export { InProcessBroker, type InProcessBrokerOptions, type RpcDeliveryListener, } from "./broker/in-process.js";
8
+ export { LocalhostRpcServer, type LocalhostRpcServerOptions, type LocalhostRpcServerInfo, } from "./transport/localhost-server.js";
9
+ export { MinimalWebSocket, acceptWebSocket, isWebSocketUpgrade, } from "./transport/websocket.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Public RPC-FULL CORE surface (protocol v1).
2
+ export { RPC_ERROR_CODES, RPC_ERROR_CODE_SET, RpcError, parseRpcErrorCode, parseRpcErrorBody, } from "./contract/errors.js";
3
+ export { RPC_PROTOCOL_VERSION, RPC_ADDRESS_KINDS, RPC_MESSAGE_TYPES, RPC_METHODS, RPC_EVENT_NAMES, RPC_HITL_FORBIDDEN_METHODS, } from "./contract/types.js";
4
+ export { parseRpcAddress, parseRpcMethod, parseRpcEventName, parseRpcEnvelope, isHitlForbiddenMethod, assertMethodAllowed, addressKey, } from "./contract/parse.js";
5
+ export { campaignBroadcastTopic, campaignStageTopic, parseCampaignTopic, } from "./contract/topics.js";
6
+ export { RpcAuditLog } from "./broker/audit.js";
7
+ export { RpcJournal } from "./broker/journal.js";
8
+ export { InProcessBroker, } from "./broker/in-process.js";
9
+ export { LocalhostRpcServer, } from "./transport/localhost-server.js";
10
+ export { MinimalWebSocket, acceptWebSocket, isWebSocketUpgrade, } from "./transport/websocket.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,0BAA0B,GAY3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EACL,eAAe,GAGhB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,GAGnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { InProcessBroker } from "../broker/in-process.js";
2
+ export interface LocalhostRpcServerOptions {
3
+ broker?: InProcessBroker;
4
+ host?: string;
5
+ port?: number;
6
+ token?: string;
7
+ heartbeatTimeoutMs?: number;
8
+ journalDir?: string;
9
+ }
10
+ export interface LocalhostRpcServerInfo {
11
+ host: string;
12
+ port: number;
13
+ url: string;
14
+ }
15
+ /**
16
+ * Localhost RPC-FULL CORE server: HTTP JSON + WebSocket push (+ SSE fallback).
17
+ */
18
+ export declare class LocalhostRpcServer {
19
+ readonly broker: InProcessBroker;
20
+ private readonly host;
21
+ private readonly port;
22
+ private server;
23
+ private readonly sockets;
24
+ private readonly sse;
25
+ private unsubDeliver;
26
+ constructor(options?: LocalhostRpcServerOptions);
27
+ listen(): Promise<LocalhostRpcServerInfo>;
28
+ close(): Promise<void>;
29
+ info(): LocalhostRpcServerInfo;
30
+ private pushToAddress;
31
+ private bindSocket;
32
+ private handleUpgrade;
33
+ private handleHttp;
34
+ private handleSse;
35
+ }
36
+ //# sourceMappingURL=localhost-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localhost-server.d.ts","sourceRoot":"","sources":["../../../src/rpc/transport/localhost-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAU1D,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAuCD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;IACnE,OAAO,CAAC,YAAY,CAA6B;gBAErC,OAAO,GAAE,yBAA8B;IAoB7C,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAuBzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,IAAI,IAAI,sBAAsB;IAY9B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,aAAa;YAgDP,UAAU;IAqCxB,OAAO,CAAC,SAAS;CAiDlB"}