@moltzap/client 2026.506.0 → 2026.507.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.
Files changed (93) hide show
  1. package/dist/cli/commands/contacts.d.ts.map +1 -1
  2. package/dist/cli/commands/contacts.js +3 -3
  3. package/dist/cli/commands/contacts.js.map +1 -1
  4. package/dist/cli/commands/conversations.d.ts.map +1 -1
  5. package/dist/cli/commands/conversations.js +11 -11
  6. package/dist/cli/commands/conversations.js.map +1 -1
  7. package/dist/cli/commands/messages.d.ts.map +1 -1
  8. package/dist/cli/commands/messages.js +3 -3
  9. package/dist/cli/commands/messages.js.map +1 -1
  10. package/dist/cli/commands/send.d.ts.map +1 -1
  11. package/dist/cli/commands/send.js +3 -3
  12. package/dist/cli/commands/send.js.map +1 -1
  13. package/dist/cli/commands/test-transport.d.ts.map +1 -1
  14. package/dist/cli/commands/test-transport.js +11 -8
  15. package/dist/cli/commands/test-transport.js.map +1 -1
  16. package/dist/cli/http-client.d.ts +2 -2
  17. package/dist/cli/http-client.d.ts.map +1 -1
  18. package/dist/cli/socket-client.d.ts +4 -3
  19. package/dist/cli/socket-client.d.ts.map +1 -1
  20. package/dist/cli/socket-client.js +6 -4
  21. package/dist/cli/socket-client.js.map +1 -1
  22. package/dist/cli/transport.d.ts +3 -3
  23. package/dist/cli/transport.d.ts.map +1 -1
  24. package/dist/cli/transport.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/internal/__tests__/app-callback-test-requests.d.ts +2 -2
  29. package/dist/internal/__tests__/app-callback-test-requests.d.ts.map +1 -1
  30. package/dist/internal/__tests__/app-callback-test-requests.js +3 -2
  31. package/dist/internal/__tests__/app-callback-test-requests.js.map +1 -1
  32. package/dist/internal/app-callback-dispatcher-errors.d.ts +3 -3
  33. package/dist/internal/app-callback-dispatcher-errors.d.ts.map +1 -1
  34. package/dist/internal/app-callback-partition-key.d.ts +2 -2
  35. package/dist/internal/app-callback-partition-key.d.ts.map +1 -1
  36. package/dist/runtime/errors.d.ts +2 -12
  37. package/dist/runtime/errors.d.ts.map +1 -1
  38. package/dist/runtime/errors.js +4 -3
  39. package/dist/runtime/errors.js.map +1 -1
  40. package/dist/runtime/frame.d.ts +11 -18
  41. package/dist/runtime/frame.d.ts.map +1 -1
  42. package/dist/runtime/frame.js +23 -53
  43. package/dist/runtime/frame.js.map +1 -1
  44. package/dist/runtime/frame.test.js +28 -34
  45. package/dist/runtime/frame.test.js.map +1 -1
  46. package/dist/runtime/subscribers.d.ts +8 -11
  47. package/dist/runtime/subscribers.d.ts.map +1 -1
  48. package/dist/runtime/subscribers.js.map +1 -1
  49. package/dist/runtime/subscribers.test.js +8 -14
  50. package/dist/runtime/subscribers.test.js.map +1 -1
  51. package/dist/service.d.ts +5 -8
  52. package/dist/service.d.ts.map +1 -1
  53. package/dist/service.js +44 -65
  54. package/dist/service.js.map +1 -1
  55. package/dist/service.test.js +9 -9
  56. package/dist/service.test.js.map +1 -1
  57. package/dist/test/index.d.ts +1 -1
  58. package/dist/test/index.js +1 -1
  59. package/dist/test-utils/conformance-adapter.d.ts +5 -5
  60. package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
  61. package/dist/test-utils/conformance-adapter.js +26 -29
  62. package/dist/test-utils/conformance-adapter.js.map +1 -1
  63. package/dist/test-utils/fake-service.d.ts +4 -4
  64. package/dist/test-utils/fake-service.d.ts.map +1 -1
  65. package/dist/test-utils/fake-service.js +19 -10
  66. package/dist/test-utils/fake-service.js.map +1 -1
  67. package/dist/test-utils/ids.d.ts +2 -6
  68. package/dist/test-utils/ids.d.ts.map +1 -1
  69. package/dist/test-utils/ids.js +1 -2
  70. package/dist/test-utils/ids.js.map +1 -1
  71. package/dist/ws-client.d.ts +11 -89
  72. package/dist/ws-client.d.ts.map +1 -1
  73. package/dist/ws-client.js +56 -153
  74. package/dist/ws-client.js.map +1 -1
  75. package/dist/ws-client.test.js +35 -48
  76. package/dist/ws-client.test.js.map +1 -1
  77. package/package.json +3 -4
  78. package/dist/runtime/index.d.ts +0 -3
  79. package/dist/runtime/index.d.ts.map +0 -1
  80. package/dist/runtime/index.js +0 -3
  81. package/dist/runtime/index.js.map +0 -1
  82. package/dist/runtime/notification-types.types-check.d.ts +0 -2
  83. package/dist/runtime/notification-types.types-check.d.ts.map +0 -1
  84. package/dist/runtime/notification-types.types-check.js +0 -57
  85. package/dist/runtime/notification-types.types-check.js.map +0 -1
  86. package/dist/service.typed-bridge.test.d.ts +0 -2
  87. package/dist/service.typed-bridge.test.d.ts.map +0 -1
  88. package/dist/service.typed-bridge.test.js +0 -93
  89. package/dist/service.typed-bridge.test.js.map +0 -1
  90. package/dist/ws-client.typed-bridge.test.d.ts +0 -2
  91. package/dist/ws-client.typed-bridge.test.d.ts.map +0 -1
  92. package/dist/ws-client.typed-bridge.test.js +0 -105
  93. package/dist/ws-client.typed-bridge.test.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { TaskAuthorizeDispatch, type Static } from "@moltzap/protocol";
1
+ import { TaskAuthorizeDispatch, type ParamsOf } from "@moltzap/protocol";
2
2
  import { type PartitionableRequest } from "../app-callback-partition-key.js";
3
3
  export declare const SESSION_A: string & import("effect/Brand").Brand<"TaskId">;
4
4
  export declare const SESSION_B: string & import("effect/Brand").Brand<"TaskId">;
@@ -17,6 +17,6 @@ export declare const conversationIdForIndex: (index: number) => string & import(
17
17
  * envelope, the params layout — because werewolf's dispatch state
18
18
  * machine consumes it unchanged.
19
19
  */
20
- export declare function authorizeDispatchParams(taskId?: string & import("effect/Brand").Brand<"TaskId">, conv?: string & import("effect/Brand").Brand<"ConversationId">): Static<typeof TaskAuthorizeDispatch.paramsSchema>;
20
+ export declare function authorizeDispatchParams(taskId?: string & import("effect/Brand").Brand<"TaskId">, conv?: string & import("effect/Brand").Brand<"ConversationId">): ParamsOf<typeof TaskAuthorizeDispatch>;
21
21
  export declare function authorizeDispatch(id: string, taskId?: string & import("effect/Brand").Brand<"TaskId">, conv?: string & import("effect/Brand").Brand<"ConversationId">): PartitionableRequest;
22
22
  //# sourceMappingURL=app-callback-test-requests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-callback-test-requests.d.ts","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAKrB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,eAAO,MAAM,SAAS,iDAAqD,CAAC;AAC5E,eAAO,MAAM,SAAS,iDAAqD,CAAC;AAC5E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,OAAO,kDAAkD,CAAC;AACvE,eAAO,MAAM,SAAS,oDAAoD,CAAC;AAG3E,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,4DAGjD,CAAC;AAEJ;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,kDAAY,EAClB,IAAI,0DAAS,GACZ,MAAM,CAAC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAanD;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,MAAM,kDAAY,EAClB,IAAI,0DAAS,GACZ,oBAAoB,CAQtB"}
1
+ {"version":3,"file":"app-callback-test-requests.d.ts","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,eAAO,MAAM,SAAS,iDAAqD,CAAC;AAC5E,eAAO,MAAM,SAAS,iDAAqD,CAAC;AAC5E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,MAAM,yDAAyD,CAAC;AAC7E,eAAO,MAAM,OAAO,kDAAkD,CAAC;AACvE,eAAO,MAAM,SAAS,oDAAoD,CAAC;AAG3E,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,4DAGjD,CAAC;AAEJ;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,kDAAY,EAClB,IAAI,0DAAS,GACZ,QAAQ,CAAC,OAAO,qBAAqB,CAAC,CAaxC;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,MAAM,kDAAY,EAClB,IAAI,0DAAS,GACZ,oBAAoB,CAQtB"}
@@ -1,4 +1,5 @@
1
- import { agentId, TaskAuthorizeDispatch, conversationId, jsonRpcStringId, messageId, taskId as makeTaskId, } from "@moltzap/protocol";
1
+ import { TaskAuthorizeDispatch, } from "@moltzap/protocol";
2
+ import { agentId, conversationId, messageId, taskId as makeTaskId, } from "@moltzap/protocol/testing";
2
3
  import {} from "../app-callback-partition-key.js";
3
4
  export const SESSION_A = makeTaskId("11111111-1111-4111-8111-111111111111");
4
5
  export const SESSION_B = makeTaskId("22222222-2222-4222-8222-222222222222");
@@ -35,7 +36,7 @@ export function authorizeDispatchParams(taskId = SESSION_A, conv = CONV_X) {
35
36
  export function authorizeDispatch(id, taskId = SESSION_A, conv = CONV_X) {
36
37
  const params = authorizeDispatchParams(taskId, conv);
37
38
  return {
38
- id: jsonRpcStringId(id),
39
+ id: id,
39
40
  definition: TaskAuthorizeDispatch,
40
41
  params,
41
42
  partition: { taskId, conversationId: conv },
@@ -1 +1 @@
1
- {"version":3,"file":"app-callback-test-requests.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,SAAS,EACT,MAAM,IAAI,UAAU,GAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA6B,MAAM,kCAAkC,CAAC;AAE7E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,sCAAsC,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,sCAAsC,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC3E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,EAAE,CACtD,cAAc,CACZ,2BAA2B,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAC/E,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAM,GAAG,SAAS,EAClB,IAAI,GAAG,MAAM;IAEb,OAAO;QACL,MAAM;QACN,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;QACnD,OAAO,EAAE;YACP,EAAE,EAAE,SAAS;YACb,aAAa,EAAE,OAAO;YACtB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACzC;QACD,OAAO,EAAE,CAAC;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,EAAU,EACV,MAAM,GAAG,SAAS,EAClB,IAAI,GAAG,MAAM;IAEb,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO;QACL,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC;QACvB,UAAU,EAAE,qBAAqB;QACjC,MAAM;QACN,SAAS,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"app-callback-test-requests.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-test-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,OAAO,EACP,cAAc,EACd,SAAS,EACT,MAAM,IAAI,UAAU,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAA6B,MAAM,kCAAkC,CAAC;AAE7E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,sCAAsC,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,sCAAsC,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC3E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,EAAE,CACtD,cAAc,CACZ,2BAA2B,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAC/E,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAM,GAAG,SAAS,EAClB,IAAI,GAAG,MAAM;IAEb,OAAO;QACL,MAAM;QACN,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;QACnD,OAAO,EAAE;YACP,EAAE,EAAE,SAAS;YACb,aAAa,EAAE,OAAO;YACtB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACzC;QACD,OAAO,EAAE,CAAC;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,EAAU,EACV,MAAM,GAAG,SAAS,EAClB,IAAI,GAAG,MAAM;IAEb,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO;QACL,EAAE,EAAE,EAAe;QACnB,UAAU,EAAE,qBAAqB;QACjC,MAAM;QACN,SAAS,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;KAC5C,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { JsonRpcStringId } from "@moltzap/protocol";
1
+ import type { JsonRpcId } from "@moltzap/protocol";
2
2
  declare const PartitionLimitError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
3
3
  readonly _tag: "PartitionLimitError";
4
4
  } & Readonly<A>;
@@ -16,7 +16,7 @@ export declare class PartitionLimitError extends PartitionLimitError_base<{
16
16
  readonly key: string;
17
17
  readonly activePartitions: number;
18
18
  readonly maxPartitions: number;
19
- readonly requestId: JsonRpcStringId;
19
+ readonly requestId: JsonRpcId;
20
20
  }> {
21
21
  }
22
22
  declare const PartitionQueueFullError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
@@ -35,7 +35,7 @@ declare const PartitionQueueFullError_base: new <A extends Record<string, any> =
35
35
  export declare class PartitionQueueFullError extends PartitionQueueFullError_base<{
36
36
  readonly key: string;
37
37
  readonly capacity: number;
38
- readonly requestId: JsonRpcStringId;
38
+ readonly requestId: JsonRpcId;
39
39
  }> {
40
40
  }
41
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"app-callback-dispatcher-errors.d.ts","sourceRoot":"","sources":["../../src/internal/app-callback-dispatcher-errors.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;;;;AAEzD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CAAC;CAAG;;;;AAEL;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,6BAE3C;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CAAC;CAAG;AAEL;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"app-callback-dispatcher-errors.d.ts","sourceRoot":"","sources":["../../src/internal/app-callback-dispatcher-errors.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;;;;AAEnD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC;CAAG;;;;AAEL;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,6BAE3C;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC;CAAG;AAEL;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,uBAAuB,CAAC"}
@@ -12,7 +12,7 @@
12
12
  * rejected before a request can enter the dispatcher.
13
13
  */
14
14
  import { Brand } from "effect";
15
- import { type AnyTaskCallbackRpcDefinition, type DecodedRpcRequest, type JsonRpcStringId } from "@moltzap/protocol";
15
+ import { type AnyTaskCallbackRpcDefinition, type DecodedRpcRequest, type JsonRpcId } from "@moltzap/protocol";
16
16
  /**
17
17
  * Branded partition-key string. Constructed only by `extractPartitionKey`.
18
18
  * Format is opaque to consumers; equality is value equality.
@@ -36,7 +36,7 @@ export interface AppCallbackPartitionRoute {
36
36
  * app-callback descriptor and validated params against that descriptor.
37
37
  */
38
38
  export type PartitionableRequest = DecodedRpcRequest<AnyTaskCallbackRpcDefinition> & {
39
- readonly id: JsonRpcStringId;
39
+ readonly id: JsonRpcId;
40
40
  readonly partition: AppCallbackPartitionRoute;
41
41
  };
42
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"app-callback-partition-key.d.ts","sourceRoot":"","sources":["../../src/internal/app-callback-partition-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAErC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAChE,eAAO,MAAM,YAAY,uCAAgC,CAAC;;;;AAE1D,qBAAa,0BAA2B,SAAQ,gCAE9C;IACA,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAwBL,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC9B,iBAAiB,CAAC,4BAA4B,CAAC,GAAG;IAChD,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CAId;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;CACnD,CA6BA"}
1
+ {"version":3,"file":"app-callback-partition-key.d.ts","sourceRoot":"","sources":["../../src/internal/app-callback-partition-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAErC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAChE,eAAO,MAAM,YAAY,uCAAgC,CAAC;;;;AAE1D,qBAAa,0BAA2B,SAAQ,gCAE9C;IACA,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAwBL,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC9B,iBAAiB,CAAC,4BAA4B,CAAC,GAAG;IAChD,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CAId;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;CACnD,CA6BA"}
@@ -1,13 +1,4 @@
1
- import type { TaskCallbackRpcMethodName } from "@moltzap/protocol";
2
- declare const MalformedFrameError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
3
- readonly _tag: "MalformedFrameError";
4
- } & Readonly<A>;
5
- /** Inbound frame failed to parse as JSON or did not match the expected shape. */
6
- export declare class MalformedFrameError extends MalformedFrameError_base<{
7
- readonly raw: string;
8
- readonly cause?: unknown;
9
- }> {
10
- }
1
+ export { MalformedFrameError } from "@moltzap/protocol";
11
2
  declare const AgentNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
12
3
  readonly _tag: "AgentNotFoundError";
13
4
  } & Readonly<A>;
@@ -26,9 +17,8 @@ declare const DuplicateServerRpcHandlerError_base: new <A extends Record<string,
26
17
  * forces the duplicate registration to surface at the call site.
27
18
  */
28
19
  export declare class DuplicateServerRpcHandlerError extends DuplicateServerRpcHandlerError_base<{
29
- readonly method: TaskCallbackRpcMethodName;
20
+ readonly method: string;
30
21
  }> {
31
22
  get message(): string;
32
23
  }
33
- export {};
34
24
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;;;;AAEnE,iFAAiF;AACjF,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;AAEL,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;CAC5C,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;;;;AAExD,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
@@ -1,7 +1,8 @@
1
1
  import { Data } from "effect";
2
- /** Inbound frame failed to parse as JSON or did not match the expected shape. */
3
- export class MalformedFrameError extends Data.TaggedError("MalformedFrameError") {
4
- }
2
+ // `MalformedFrameError` is now protocol-side (`@moltzap/protocol`); both
3
+ // client and server share the same class. Re-exported here for the
4
+ // existing client-package import surface.
5
+ export { MalformedFrameError } from "@moltzap/protocol";
5
6
  /** A name→agent lookup returned no results. */
6
7
  export class AgentNotFoundError extends Data.TaggedError("AgentNotFoundError") {
7
8
  get message() {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,iFAAiF;AACjF,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CACvD,qBAAqB,CAIrB;CAAG;AAEL,+CAA+C;AAC/C,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAE3E;IACA,IAAa,OAAO;QAClB,OAAO,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,IAAI,CAAC,WAAW,CAClE,gCAAgC,CAGhC;IACA,IAAa,OAAO;QAClB,OAAO,qDAAqD,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5E,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,yEAAyE;AACzE,mEAAmE;AACnE,0CAA0C;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,+CAA+C;AAC/C,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAE3E;IACA,IAAa,OAAO;QAClB,OAAO,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,IAAI,CAAC,WAAW,CAClE,gCAAgC,CAGhC;IACA,IAAa,OAAO;QAClB,OAAO,qDAAqD,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5E,CAAC;CACF"}
@@ -1,32 +1,25 @@
1
1
  import { Effect } from "effect";
2
- import { type AnyTaskCallbackRpcDefinition, type DecodedNotification, type DecodedNotificationFrame, type DecodedRpcRequest, type JsonRpcStringId, type RawDecodedNotification, type ResponseFrame, type UnknownDecodedNotification } from "@moltzap/protocol";
3
- import { MalformedFrameError } from "./errors.js";
2
+ import { MalformedFrameError, type AnyTaskCallbackRpcDefinition, type AnyNotificationDefinition, type DecodedNotification, type DecodedResponseSuccess, type DecodedResponseError, type JsonRpcId, type ParamsOf } from "@moltzap/protocol";
4
3
  import { type AppCallbackPartitionRoute } from "../internal/app-callback-partition-key.js";
5
- export type { DecodedNotification, DecodedNotificationFrame, RawDecodedNotification, UnknownDecodedNotification, };
6
- /** Decoded response frame — narrowed from the protocol's `ResponseFrame`. */
7
- export interface DecodedResponse {
8
- readonly _tag: "Response";
9
- readonly id: JsonRpcStringId;
10
- readonly result?: unknown;
11
- readonly error?: Extract<ResponseFrame, {
12
- error: unknown;
13
- }>["error"];
14
- }
4
+ export type { DecodedNotification };
5
+ /** Decoded response frame — XOR success | error, mirrors the protocol-level
6
+ * discriminated arms. */
7
+ export type DecodedResponse = DecodedResponseSuccess | DecodedResponseError;
15
8
  /**
16
9
  * Decoded server-initiated (taskCallback) request frame. The client
17
10
  * routes these to its per-method handler registry; the server is the
18
11
  * originator and awaits a matching JSON-RPC response with the same id.
19
12
  *
20
- * Phase 9b consumer-migration (sub-issue #460): the legacy "appCallback"
21
- * group retired (3 deletions + the rename of `apps/onBeforeDispatch` →
22
- * `task/authorizeDispatch`). The dispatch shape and routing remain
23
- * unchanged; only the group name moved.
13
+ * Carries the partition route alongside the protocol-level decoded request.
24
14
  */
25
- export type DecodedServerRequest<D extends AnyTaskCallbackRpcDefinition = AnyTaskCallbackRpcDefinition> = DecodedRpcRequest<D> & {
15
+ export type DecodedServerRequest<D extends AnyTaskCallbackRpcDefinition = AnyTaskCallbackRpcDefinition> = {
26
16
  readonly _tag: "ServerRequest";
17
+ readonly id: JsonRpcId;
18
+ readonly definition: D;
19
+ readonly params: ParamsOf<D>;
27
20
  readonly partition: AppCallbackPartitionRoute;
28
21
  };
29
- export type DecodedFrame = DecodedResponse | DecodedNotificationFrame | DecodedServerRequest;
22
+ export type DecodedFrame = DecodedResponse | DecodedNotification<AnyNotificationDefinition> | DecodedServerRequest;
30
23
  export declare const splitRawFrames: (raw: string) => Effect.Effect<ReadonlyArray<string>, MalformedFrameError>;
31
24
  /**
32
25
  * Central typed inbound frame decoder. JSON.parse + shape validation via the
@@ -1 +1 @@
1
- {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAEL,KAAK,4BAA4B,EAQjC,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAEpB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,GAC3B,CAAC;AAEF,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,4BAA4B,GAAG,4BAA4B,IACnE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,wBAAwB,GACxB,oBAAoB,CAAC;AAuFzB,eAAO,MAAM,cAAc,GACzB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAsEvD,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAwB7D,CAAC"}
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAEL,mBAAmB,EAEnB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC;yBACyB;AACzB,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,4BAA4B,GAAG,4BAA4B,IACnE;IACF,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,mBAAmB,CAAC,yBAAyB,CAAC,GAC9C,oBAAoB,CAAC;AA8CzB,eAAO,MAAM,cAAc,GACzB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAsEvD,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,mBAAmB,CA2B7D,CAAC"}
@@ -1,60 +1,28 @@
1
1
  import { Effect } from "effect";
2
- import { validators, TaskAuthorizeDispatch, taskCallbackRpcGroup, decodeRpcRequest, isDecodedRpcRequest, isJsonRpcStringId, notificationGroup, } from "@moltzap/protocol";
3
- import { MalformedFrameError } from "./errors.js";
2
+ import { decodeServerInbound, MalformedFrameError, TaskAuthorizeDispatch, } from "@moltzap/protocol";
4
3
  import {} from "../internal/app-callback-partition-key.js";
5
4
  const isFramePadding = (char) => char === "\u0000" || char === "\ufeff" || /\s/u.test(char);
6
- const toDecodedFrame = (parsed) => {
7
- const raw = JSON.stringify(parsed);
8
- if (validators.responseFrame(parsed)) {
9
- if (!isJsonRpcStringId(parsed.id)) {
10
- return Effect.fail(new MalformedFrameError({ raw }));
11
- }
12
- return Effect.succeed({
13
- _tag: "Response",
14
- id: parsed.id,
15
- result: "result" in parsed ? parsed.result : undefined,
16
- error: "error" in parsed ? parsed.error : undefined,
17
- });
18
- }
19
- if (validators.requestFrame(parsed)) {
20
- return decodeRpcRequest(taskCallbackRpcGroup, parsed).pipe(Effect.mapError((cause) => new MalformedFrameError({ raw, cause })), Effect.flatMap((request) => appCallbackPartitionRoute(request).pipe(Effect.map((partition) => ({
21
- _tag: "ServerRequest",
22
- ...request,
23
- partition,
24
- })))));
25
- }
26
- if (validators.notificationFrame(parsed)) {
27
- return toDecodedNotification(parsed);
28
- }
29
- return Effect.fail(new MalformedFrameError({ raw }));
30
- };
31
- const toDecodedNotification = (parsed) => {
32
- // Opacity contract (`delivery/payload-opacity-client`,
33
- // `boundary/schema-exhaustive-fuzz-client`): no payload validation
34
- // here. `_tag` and `definition` attach non-enumerably so the
35
- // decoded value still satisfies `validators.notificationFrame`'s
36
- // strict `additionalProperties: false`. Unknown methods (no
37
- // descriptor) emit `UnknownDecodedNotification`; production typed
38
- // handlers exclude that branch via the `definition` discriminator.
39
- const definition = notificationGroup.byName.get(parsed.method);
40
- Object.defineProperty(parsed, "_tag", {
41
- value: "Notification",
42
- enumerable: false,
43
- });
44
- if (definition !== undefined) {
45
- Object.defineProperty(parsed, "definition", {
46
- value: definition,
47
- enumerable: false,
48
- });
49
- return Effect.succeed(parsed);
50
- }
51
- return Effect.succeed(parsed);
5
+ const liftServerInbound = (decoded, raw) => {
6
+ if (decoded._tag === "ResponseSuccess")
7
+ return Effect.succeed(decoded);
8
+ if (decoded._tag === "ResponseError")
9
+ return Effect.succeed(decoded);
10
+ if (decoded._tag === "Notification")
11
+ return Effect.succeed(decoded);
12
+ return appCallbackPartitionRoute(decoded.definition, decoded.params).pipe(Effect.map((partition) => ({
13
+ _tag: "ServerRequest",
14
+ id: decoded.id,
15
+ definition: decoded.definition,
16
+ params: decoded.params,
17
+ partition,
18
+ })), Effect.mapError((cause) => new MalformedFrameError({ raw, cause })));
52
19
  };
53
- const appCallbackPartitionRoute = (request) => {
54
- if (isDecodedRpcRequest(TaskAuthorizeDispatch, request)) {
20
+ const appCallbackPartitionRoute = (definition, params) => {
21
+ if (definition === TaskAuthorizeDispatch &&
22
+ TaskAuthorizeDispatch.validateParams(params)) {
55
23
  return Effect.succeed({
56
- taskId: request.params.taskId,
57
- conversationId: request.params.conversationId,
24
+ taskId: params.taskId,
25
+ conversationId: params.conversationId,
58
26
  });
59
27
  }
60
28
  return Effect.fail(new MalformedFrameError({
@@ -139,7 +107,9 @@ export const decodeFrames = (raw) => Effect.gen(function* () {
139
107
  catch (err) {
140
108
  return yield* Effect.fail(new MalformedFrameError({ raw: frameText, cause: err }));
141
109
  }
142
- const decoded = yield* toDecodedFrame(parsed).pipe(Effect.mapError((cause) => new MalformedFrameError({ raw: frameText, cause })));
110
+ const decoded = yield* decodeServerInbound(parsed).pipe(Effect.flatMap((d) => liftServerInbound(d, frameText)), Effect.mapError((cause) => cause instanceof MalformedFrameError
111
+ ? cause
112
+ : new MalformedFrameError({ raw: frameText, cause })));
143
113
  decodedFrames.push(decoded);
144
114
  }
145
115
  return decodedFrames;
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import { Effect } from "effect";
1
+ import { Effect, Exit } from "effect";
2
2
  import { describe, expect, it } from "vitest";
3
- import { MessageReceivedNotificationDefinition, TaskClosedNotificationDefinition, agentId, conversationId, messageId, notificationFrame, } from "@moltzap/protocol";
3
+ import { MessageReceivedNotificationDefinition } from "@moltzap/protocol";
4
+ import { agentId, conversationId, messageId } from "@moltzap/protocol/testing";
4
5
  import { decodeFrames } from "./frame.js";
6
+ import { MalformedFrameError } from "./errors.js";
5
7
  const TEST_MESSAGE = {
6
8
  id: messageId("11111111-1111-4111-8111-111111111111"),
7
9
  conversationId: conversationId("22222222-2222-4222-8222-222222222222"),
@@ -11,7 +13,7 @@ const TEST_MESSAGE = {
11
13
  };
12
14
  describe("decodeFrames", () => {
13
15
  it("decodes padded chunks that contain both a notification and a response", async () => {
14
- const raw = JSON.stringify(notificationFrame(MessageReceivedNotificationDefinition, {
16
+ const raw = JSON.stringify(MessageReceivedNotificationDefinition.encode({
15
17
  message: TEST_MESSAGE,
16
18
  })) +
17
19
  "\u0000\n" +
@@ -28,19 +30,17 @@ describe("decodeFrames", () => {
28
30
  params: { message: TEST_MESSAGE },
29
31
  });
30
32
  expect(decoded[1]).toMatchObject({
31
- _tag: "Response",
33
+ _tag: "ResponseSuccess",
32
34
  id: "rpc-7",
33
35
  result: { ok: true },
34
36
  });
35
37
  });
36
- // R2 regression: drift detection lives at the typed-handler boundary,
37
- // not the wire decoder. The wire decoder is payload-opaque (conformance
38
- // §5 C3 / E2 require it) but attaches the protocol definition to every
39
- // known-method notification, so subscribers can validate via
40
- // `definition.validateParams` and reject stale shapes — e.g. a
41
- // pre-Phase-7 `task/closed` carrying `sessionId` instead of
42
- // `{taskId, conversations, closedBy: {agentId, ownerId}}`.
43
- it("attaches definition for known methods so subscribers can reject stale `task/closed` payload", async () => {
38
+ // S9 fail-close: stale shapes are rejected at the wire boundary.
39
+ // Pre-Phase-7 `task/closed` carrying `sessionId` instead of
40
+ // `{taskId, conversations, closedBy: {agentId, ownerId}}` decodes to
41
+ // `MalformedFrameError`; subscribers no longer need to defend
42
+ // against drift downstream because the decoder fails closed.
43
+ it("fail-closes stale `task/closed` payload at the wire boundary", async () => {
44
44
  const stale = JSON.stringify({
45
45
  jsonrpc: "2.0",
46
46
  method: "task/closed",
@@ -49,28 +49,22 @@ describe("decodeFrames", () => {
49
49
  closedBy: "33333333-3333-4333-8333-333333333333",
50
50
  },
51
51
  });
52
- const decoded = await Effect.runPromise(decodeFrames(stale));
53
- expect(decoded).toHaveLength(1);
54
- const notification = decoded[0];
55
- expect(notification._tag).toBe("Notification");
56
- expect(notification.method).toBe(TaskClosedNotificationDefinition.name);
57
- // R14: assert the decoder ATTACHES the live definition by reference
58
- // identity (not via the global registry roundtrip — that would pass
59
- // even if the decoder dropped the attachment).
60
- expect(notification.definition).toBe(TaskClosedNotificationDefinition);
61
- // The attached definition rejects the stale payload — subscribers /
62
- // typed handlers can detect drift even though the decoder itself
63
- // stays opaque.
64
- expect(notification.definition.validateParams(notification.params)).toBe(false);
65
- // And the live shape passes — proves the validator is not vacuously false.
66
- expect(notification.definition.validateParams({
67
- taskId: "11111111-1111-4111-8111-111111111111",
68
- conversations: { main: "22222222-2222-4222-8222-222222222222" },
69
- closedBy: {
70
- agentId: "33333333-3333-4333-8333-333333333333",
71
- ownerId: "owner-1",
72
- },
73
- })).toBe(true);
52
+ const exit = await Effect.runPromiseExit(decodeFrames(stale));
53
+ expect(Exit.isFailure(exit)).toBe(true);
54
+ if (Exit.isFailure(exit)) {
55
+ const error = exit.cause._tag === "Fail" ? exit.cause.error : null;
56
+ expect(error).toBeInstanceOf(MalformedFrameError);
57
+ }
58
+ });
59
+ // S9 also rejects unknown notification methods at the wire boundary.
60
+ it("fail-closes unknown notification method", async () => {
61
+ const stranger = JSON.stringify({
62
+ jsonrpc: "2.0",
63
+ method: "some/unregistered-method",
64
+ params: {},
65
+ });
66
+ const exit = await Effect.runPromiseExit(decodeFrames(stranger));
67
+ expect(Exit.isFailure(exit)).toBe(true);
74
68
  });
75
69
  });
76
70
  //# sourceMappingURL=frame.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,qCAAqC,EACrC,gCAAgC,EAChC,OAAO,EACP,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAA+B,MAAM,YAAY,CAAC;AAEvE,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE,SAAS,CAAC,sCAAsC,CAAC;IACrD,cAAc,EAAE,cAAc,CAAC,sCAAsC,CAAC;IACtE,QAAQ,EAAE,OAAO,CAAC,sCAAsC,CAAC;IACzD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,SAAS,EAAE,0BAA0B;CACtC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GACP,IAAI,CAAC,SAAS,CACZ,iBAAiB,CAAC,qCAAqC,EAAE;YACvD,OAAO,EAAE,YAAY;SACtB,CAAC,CACH;YACD,UAAU;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO;gBACX,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;aACrB,CAAC,CAAC;QAEL,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,qCAAqC,CAAC,IAAI;YAClD,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,6DAA6D;IAC7D,+DAA+D;IAC/D,4DAA4D;IAC5D,2DAA2D;IAC3D,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE;gBACN,SAAS,EAAE,sCAAsC;gBACjD,QAAQ,EAAE,sCAAsC;aACjD;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAE7B,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAExE,oEAAoE;QACpE,oEAAoE;QACpE,+CAA+C;QAC/C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEvE,oEAAoE;QACpE,iEAAiE;QACjE,gBAAgB;QAChB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACtE,KAAK,CACN,CAAC;QAEF,2EAA2E;QAC3E,MAAM,CACJ,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;YACrC,MAAM,EAAE,sCAAsC;YAC9C,aAAa,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE;YAC/D,QAAQ,EAAE;gBACR,OAAO,EAAE,sCAAsC;gBAC/C,OAAO,EAAE,SAAS;aACnB;SACF,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@
30
30
  * `register`, `dispatch`, and `closeAll` are `Effect<T, never>`.
31
31
  */
32
32
  import { Brand, Effect } from "effect";
33
- import type { DecodedNotificationFrame } from "./frame.js";
33
+ import type { AnyNotificationDefinition, DecodedNotification } from "@moltzap/protocol";
34
34
  interface FilterableNotificationFrame {
35
35
  readonly method: string;
36
36
  readonly params?: unknown;
@@ -82,13 +82,10 @@ export interface NotificationSubscription {
82
82
  * dispatch fiber. Must not throw — throws are caught by the registry,
83
83
  * logged via the injected logger, and swallowed.
84
84
  *
85
- * The frame type is the pre-validation
86
- * `DecodedNotificationFrame` union (known method with raw `params:
87
- * unknown`, or unknown method with no descriptor). Subscribers run
88
- * BEFORE the typed-bridge lift in `validateNotificationParams`, so
89
- * `params` is genuinely opaque here — handlers that need a typed
90
- * payload must validate themselves (`frame.definition?.validateParams`)
91
- * or live behind the typed-handler bridge in `service.handleNotification`.
85
+ * The frame is a known-descriptor `DecodedNotification` (post-S9
86
+ * fail-close: malformed / unknown-method frames are rejected before
87
+ * dispatch). Handlers receive validated `params` typed as
88
+ * `NotificationParamsOf<D>` for the matching definition.
92
89
  *
93
90
  * Returning an `Effect` (not a plain `void`) lets handlers compose with
94
91
  * Effect-native downstream code without an extra runSync shim. The
@@ -97,7 +94,7 @@ export interface NotificationSubscription {
97
94
  * handler on subscription A does not reorder frames seen by
98
95
  * subscription B across frames.
99
96
  */
100
- export type SubscriberHandler = (frame: DecodedNotificationFrame) => Effect.Effect<void, never>;
97
+ export type SubscriberHandler = (frame: DecodedNotification<AnyNotificationDefinition>) => Effect.Effect<void, never>;
101
98
  /**
102
99
  * Subscriber registry. One instance per `MoltZapWsClient`, created at
103
100
  * construction time and owned by the client. Not exported from the
@@ -120,7 +117,7 @@ export interface SubscriberRegistry {
120
117
  * live-subscription list at the start of dispatch so
121
118
  * unsubscribe-during-dispatch observes next-frame semantics (OQ-3 A).
122
119
  *
123
- * Frames are pre-validation (`DecodedNotificationFrame` union) — the
120
+ * Frames are pre-validation (`DecodedNotification<AnyNotificationDefinition>` union) — the
124
121
  * type-system contract that subscribers see RAW frames, not the lifted
125
122
  * `DecodedNotification<D>` shape that typed handlers see.
126
123
  *
@@ -128,7 +125,7 @@ export interface SubscriberRegistry {
128
125
  * handlers block later subscriptions for this frame but never
129
126
  * reorder frame N relative to frame N+1.
130
127
  */
131
- readonly dispatch: (frame: DecodedNotificationFrame) => Effect.Effect<void, never>;
128
+ readonly dispatch: (frame: DecodedNotification<AnyNotificationDefinition>) => Effect.Effect<void, never>;
132
129
  /**
133
130
  * Drop every live subscription. Called from `MoltZapWsClient.close`
134
131
  * so handlers stop firing once the client is torn down. Idempotent.
@@ -1 +1 @@
1
- {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,UAAU,2BAA2B;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpE,eAAO,MAAM,cAAc,yCAAkC,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,wBAAwB,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,iBAAiB,KACvB,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAEpD;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,wBAAwB,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC/C;AAcD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC1D,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CA8C3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAmBT"}
1
+ {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,2BAA2B;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpE,eAAO,MAAM,cAAc,yCAAkC,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,KAClD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,iBAAiB,KACvB,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAEpD;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,KAClD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC/C;AAcD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC1D,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CA8C3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAmBT"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/runtime/subscribers.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,8 @@
16
16
  */
17
17
  import { describe, expect, it, vi } from "vitest";
18
18
  import { Effect, Ref } from "effect";
19
- import { TaskFailedNotificationDefinition, ConversationArchivedNotificationDefinition, agentId, conversationId, notificationFrame as makeNotificationFrame, taskId, } from "@moltzap/protocol";
19
+ import { ConversationArchivedNotificationDefinition, } from "@moltzap/protocol";
20
+ import { agentId, conversationId, taskId, TaskFailedNotificationDefinition, } from "@moltzap/protocol/testing";
20
21
  import { makeSubscriberRegistry, matchesFilter } from "./subscribers.js";
21
22
  const TASK_ID = taskId("11111111-1111-4111-8111-111111111111");
22
23
  const CONV_1 = conversationId("22222222-2222-4222-8222-222222222222");
@@ -27,25 +28,18 @@ const filterableNotification = (method, params) => ({
27
28
  params,
28
29
  });
29
30
  const decodedNotification = (definition, params) => {
30
- // Construct a RawDecodedNotification<D> directly from the typed
31
+ // Construct a DecodedNotification<D> directly from the typed
31
32
  // descriptor + params — bypassing the wire decoder is intentional
32
33
  // for test fixtures so the result type stays narrow to D rather than
33
- // collapsing to the group's union. Subscribers receive the
34
- // pre-validation `RawDecodedNotification<D>` shape (params: unknown);
35
- // payload-typed fixtures are still safe to construct because
36
- // `NotificationParamsOf<D>` assigns to `unknown`.
37
- const frame = makeNotificationFrame(definition, params);
38
- const decoded = {
39
- ...frame,
34
+ // collapsing to the group's union.
35
+ const frame = definition.encode(params);
36
+ return {
37
+ _tag: "Notification",
38
+ jsonrpc: frame.jsonrpc,
40
39
  definition,
41
40
  method: definition.name,
42
41
  params,
43
42
  };
44
- Object.defineProperty(decoded, "_tag", {
45
- value: "Notification",
46
- enumerable: false,
47
- });
48
- return decoded;
49
43
  };
50
44
  const taskFailedNotification = () => decodedNotification(TaskFailedNotificationDefinition, {
51
45
  taskId: TASK_ID,