@ably/ai-transport 0.0.1 → 0.2.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 (167) hide show
  1. package/README.md +114 -116
  2. package/dist/ably-ai-transport.js +1743 -961
  3. package/dist/ably-ai-transport.js.map +1 -1
  4. package/dist/ably-ai-transport.umd.cjs +1 -1
  5. package/dist/ably-ai-transport.umd.cjs.map +1 -1
  6. package/dist/constants.d.ts +117 -39
  7. package/dist/core/agent.d.ts +29 -0
  8. package/dist/core/codec/decoder.d.ts +20 -23
  9. package/dist/core/codec/encoder.d.ts +11 -8
  10. package/dist/core/codec/index.d.ts +1 -2
  11. package/dist/core/codec/lifecycle-tracker.d.ts +10 -9
  12. package/dist/core/codec/types.d.ts +410 -101
  13. package/dist/core/transport/agent-session.d.ts +10 -0
  14. package/dist/core/transport/branch-chain.d.ts +43 -0
  15. package/dist/core/transport/client-session.d.ts +13 -0
  16. package/dist/core/transport/decode-fold.d.ts +47 -0
  17. package/dist/core/transport/headers.d.ts +97 -17
  18. package/dist/core/transport/index.d.ts +5 -3
  19. package/dist/core/transport/internal/bounded-map.d.ts +20 -0
  20. package/dist/core/transport/invocation.d.ts +74 -0
  21. package/dist/core/transport/load-conversation.d.ts +128 -0
  22. package/dist/core/transport/load-history.d.ts +39 -0
  23. package/dist/core/transport/pipe-stream.d.ts +9 -8
  24. package/dist/core/transport/run-manager.d.ts +78 -0
  25. package/dist/core/transport/tree.d.ts +435 -0
  26. package/dist/core/transport/types/agent.d.ts +353 -0
  27. package/dist/core/transport/types/client.d.ts +168 -0
  28. package/dist/core/transport/types/shared.d.ts +24 -0
  29. package/dist/core/transport/types/tree.d.ts +315 -0
  30. package/dist/core/transport/types/view.d.ts +222 -0
  31. package/dist/core/transport/types.d.ts +13 -402
  32. package/dist/core/transport/view.d.ts +354 -0
  33. package/dist/errors.d.ts +37 -9
  34. package/dist/index.d.ts +6 -6
  35. package/dist/logger.d.ts +12 -0
  36. package/dist/react/ably-ai-transport-react.js +1164 -645
  37. package/dist/react/ably-ai-transport-react.js.map +1 -1
  38. package/dist/react/ably-ai-transport-react.umd.cjs +1 -1
  39. package/dist/react/ably-ai-transport-react.umd.cjs.map +1 -1
  40. package/dist/react/contexts/client-session-context.d.ts +36 -0
  41. package/dist/react/contexts/client-session-provider.d.ts +53 -0
  42. package/dist/react/create-session-hooks.d.ts +116 -0
  43. package/dist/react/index.d.ts +16 -10
  44. package/dist/react/internal/use-resolved-session.d.ts +36 -0
  45. package/dist/react/use-ably-messages.d.ts +20 -11
  46. package/dist/react/use-client-session.d.ts +81 -0
  47. package/dist/react/use-create-view.d.ts +23 -0
  48. package/dist/react/use-tree.d.ts +35 -0
  49. package/dist/react/use-view.d.ts +110 -0
  50. package/dist/utils.d.ts +32 -23
  51. package/dist/vercel/ably-ai-transport-vercel.js +2748 -1625
  52. package/dist/vercel/ably-ai-transport-vercel.js.map +1 -1
  53. package/dist/vercel/ably-ai-transport-vercel.umd.cjs +1 -1
  54. package/dist/vercel/ably-ai-transport-vercel.umd.cjs.map +1 -1
  55. package/dist/vercel/codec/decoder.d.ts +5 -18
  56. package/dist/vercel/codec/encoder.d.ts +6 -36
  57. package/dist/vercel/codec/events.d.ts +51 -0
  58. package/dist/vercel/codec/index.d.ts +24 -12
  59. package/dist/vercel/codec/reducer.d.ts +144 -0
  60. package/dist/vercel/codec/tool-transitions.d.ts +50 -0
  61. package/dist/vercel/index.d.ts +4 -2
  62. package/dist/vercel/react/ably-ai-transport-vercel-react.js +10298 -1410
  63. package/dist/vercel/react/ably-ai-transport-vercel-react.js.map +1 -1
  64. package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs +70 -1
  65. package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs.map +1 -1
  66. package/dist/vercel/react/contexts/chat-transport-context.d.ts +33 -0
  67. package/dist/vercel/react/contexts/chat-transport-provider.d.ts +96 -0
  68. package/dist/vercel/react/index.d.ts +4 -0
  69. package/dist/vercel/react/use-chat-transport.d.ts +66 -21
  70. package/dist/vercel/react/use-message-sync.d.ts +31 -12
  71. package/dist/vercel/run-end-reason.d.ts +29 -0
  72. package/dist/vercel/transport/chat-transport.d.ts +71 -30
  73. package/dist/vercel/transport/index.d.ts +25 -18
  74. package/dist/vercel/transport/run-output-stream.d.ts +56 -0
  75. package/dist/version.d.ts +2 -0
  76. package/package.json +47 -34
  77. package/src/constants.ts +126 -47
  78. package/src/core/agent.ts +68 -0
  79. package/src/core/codec/decoder.ts +71 -98
  80. package/src/core/codec/encoder.ts +115 -58
  81. package/src/core/codec/index.ts +13 -6
  82. package/src/core/codec/lifecycle-tracker.ts +10 -9
  83. package/src/core/codec/types.ts +438 -106
  84. package/src/core/transport/agent-session.ts +1344 -0
  85. package/src/core/transport/branch-chain.ts +58 -0
  86. package/src/core/transport/client-session.ts +775 -0
  87. package/src/core/transport/decode-fold.ts +91 -0
  88. package/src/core/transport/headers.ts +182 -19
  89. package/src/core/transport/index.ts +29 -22
  90. package/src/core/transport/internal/bounded-map.ts +27 -0
  91. package/src/core/transport/invocation.ts +98 -0
  92. package/src/core/transport/load-conversation.ts +355 -0
  93. package/src/core/transport/load-history.ts +269 -0
  94. package/src/core/transport/pipe-stream.ts +58 -40
  95. package/src/core/transport/run-manager.ts +249 -0
  96. package/src/core/transport/tree.ts +1167 -0
  97. package/src/core/transport/types/agent.ts +407 -0
  98. package/src/core/transport/types/client.ts +211 -0
  99. package/src/core/transport/types/shared.ts +27 -0
  100. package/src/core/transport/types/tree.ts +344 -0
  101. package/src/core/transport/types/view.ts +259 -0
  102. package/src/core/transport/types.ts +13 -527
  103. package/src/core/transport/view.ts +1271 -0
  104. package/src/errors.ts +42 -9
  105. package/src/event-emitter.ts +3 -2
  106. package/src/index.ts +55 -39
  107. package/src/logger.ts +14 -1
  108. package/src/react/contexts/client-session-context.ts +41 -0
  109. package/src/react/contexts/client-session-provider.tsx +186 -0
  110. package/src/react/create-session-hooks.ts +141 -0
  111. package/src/react/index.ts +27 -10
  112. package/src/react/internal/use-resolved-session.ts +63 -0
  113. package/src/react/use-ably-messages.ts +47 -19
  114. package/src/react/use-client-session.ts +201 -0
  115. package/src/react/use-create-view.ts +72 -0
  116. package/src/react/use-tree.ts +84 -0
  117. package/src/react/use-view.ts +275 -0
  118. package/src/react/vite.config.ts +4 -1
  119. package/src/utils.ts +63 -45
  120. package/src/vercel/codec/decoder.ts +336 -255
  121. package/src/vercel/codec/encoder.ts +348 -196
  122. package/src/vercel/codec/events.ts +87 -0
  123. package/src/vercel/codec/index.ts +59 -14
  124. package/src/vercel/codec/reducer.ts +977 -0
  125. package/src/vercel/codec/tool-transitions.ts +122 -0
  126. package/src/vercel/index.ts +7 -3
  127. package/src/vercel/react/contexts/chat-transport-context.ts +41 -0
  128. package/src/vercel/react/contexts/chat-transport-provider.tsx +150 -0
  129. package/src/vercel/react/index.ts +13 -1
  130. package/src/vercel/react/use-chat-transport.ts +162 -42
  131. package/src/vercel/react/use-message-sync.ts +121 -22
  132. package/src/vercel/react/vite.config.ts +4 -2
  133. package/src/vercel/run-end-reason.ts +78 -0
  134. package/src/vercel/transport/chat-transport.ts +553 -113
  135. package/src/vercel/transport/index.ts +40 -28
  136. package/src/vercel/transport/run-output-stream.ts +170 -0
  137. package/src/version.ts +2 -0
  138. package/dist/core/transport/client-transport.d.ts +0 -10
  139. package/dist/core/transport/conversation-tree.d.ts +0 -9
  140. package/dist/core/transport/decode-history.d.ts +0 -41
  141. package/dist/core/transport/server-transport.d.ts +0 -7
  142. package/dist/core/transport/stream-router.d.ts +0 -19
  143. package/dist/core/transport/turn-manager.d.ts +0 -34
  144. package/dist/react/use-active-turns.d.ts +0 -8
  145. package/dist/react/use-client-transport.d.ts +0 -7
  146. package/dist/react/use-conversation-tree.d.ts +0 -20
  147. package/dist/react/use-edit.d.ts +0 -7
  148. package/dist/react/use-history.d.ts +0 -19
  149. package/dist/react/use-messages.d.ts +0 -7
  150. package/dist/react/use-regenerate.d.ts +0 -7
  151. package/dist/react/use-send.d.ts +0 -7
  152. package/dist/vercel/codec/accumulator.d.ts +0 -21
  153. package/src/core/transport/client-transport.ts +0 -959
  154. package/src/core/transport/conversation-tree.ts +0 -434
  155. package/src/core/transport/decode-history.ts +0 -337
  156. package/src/core/transport/server-transport.ts +0 -458
  157. package/src/core/transport/stream-router.ts +0 -118
  158. package/src/core/transport/turn-manager.ts +0 -147
  159. package/src/react/use-active-turns.ts +0 -61
  160. package/src/react/use-client-transport.ts +0 -37
  161. package/src/react/use-conversation-tree.ts +0 -71
  162. package/src/react/use-edit.ts +0 -24
  163. package/src/react/use-history.ts +0 -111
  164. package/src/react/use-messages.ts +0 -32
  165. package/src/react/use-regenerate.ts +0 -24
  166. package/src/react/use-send.ts +0 -25
  167. package/src/vercel/codec/accumulator.ts +0 -603
package/dist/utils.d.ts CHANGED
@@ -7,11 +7,21 @@
7
7
  */
8
8
  import type * as Ably from 'ably';
9
9
  /**
10
- * Extract extras.headers from an Ably InboundMessage.
10
+ * Extract the transport-tier headers (`extras.ai.transport`) from an Ably
11
+ * InboundMessage. These are the generic transport headers (run/stream/identity/
12
+ * branching), set and read by the transport layer.
11
13
  * @param message - The Ably message to extract headers from.
12
- * @returns The headers record, or an empty object if absent.
14
+ * @returns The transport headers record, or an empty object if absent.
13
15
  */
14
- export declare const getHeaders: (message: Ably.InboundMessage) => Record<string, string>;
16
+ export declare const getTransportHeaders: (message: Ably.InboundMessage) => Record<string, string>;
17
+ /**
18
+ * Extract the codec-tier headers (`extras.ai.codec`) from an Ably
19
+ * InboundMessage. These are the codec's own headers, with no prefix — the
20
+ * tier isolates them from transport headers.
21
+ * @param message - The Ably message to extract headers from.
22
+ * @returns The codec headers record, or an empty object if absent.
23
+ */
24
+ export declare const getCodecHeaders: (message: Ably.InboundMessage) => Record<string, string>;
15
25
  /**
16
26
  * Parse a JSON string, returning undefined on failure.
17
27
  * @param value - The JSON string to parse.
@@ -26,13 +36,6 @@ export declare const parseJson: (value: string | undefined) => unknown;
26
36
  * @param value - The value to set.
27
37
  */
28
38
  export declare const setIfPresent: (headers: Record<string, string>, key: string, value: unknown) => void;
29
- /**
30
- * Set multiple headers at once, skipping entries whose values are undefined or null.
31
- * Each value is converted using the same rules as {@link setIfPresent}.
32
- * @param headers - The headers object to mutate.
33
- * @param entries - Key-value pairs to set.
34
- */
35
- export declare const setHeadersIfPresent: (headers: Record<string, string>, entries: Record<string, unknown>) => void;
36
39
  /**
37
40
  * Merge two header records into a new object. Later values override earlier ones.
38
41
  * Undefined inputs are treated as empty.
@@ -47,19 +50,24 @@ export declare const mergeHeaders: (base: Record<string, string> | undefined, ov
47
50
  * @returns True if "true", false for any other string, or undefined if absent.
48
51
  */
49
52
  export declare const parseBool: (value: string | undefined) => boolean | undefined;
53
+ /** A record carrying an optional Ably `serial`, orderable by {@link compareBySerial}. */
54
+ interface HasSerial {
55
+ /** Ably serial, or undefined if the server has not yet assigned one. */
56
+ readonly serial?: string;
57
+ }
50
58
  /**
51
- * Build a domain headers record from key-value pairs. Each key is automatically
52
- * prefixed with {@link DOMAIN_HEADER_PREFIX}. Values that are undefined or null
53
- * are skipped; strings are set directly; booleans, numbers, and objects are
54
- * converted using the same rules as {@link setIfPresent}.
55
- * @param entries - Unprefixed key-value pairs (e.g. `{ toolCallId: 'tc-1' }` becomes `{ 'x-domain-toolCallId': 'tc-1' }`).
56
- * @returns A new headers record with prefixed keys.
59
+ * Comparator that orders records by their Ably `serial` ascending
60
+ * (chronological). Serials are lexicographically comparable; records whose
61
+ * serial is undefined sort last. Pass directly to `Array.prototype.sort`.
62
+ * @param a - First record to compare.
63
+ * @param b - Second record to compare.
64
+ * @returns Negative if `a` precedes `b`, positive if `a` follows `b`, 0 if equal.
57
65
  */
58
- export declare const domainHeaders: (entries: Record<string, unknown>) => Record<string, string>;
66
+ export declare const compareBySerial: (a: HasSerial, b: HasSerial) => number;
59
67
  /**
60
- * Read a domain header value from a headers record.
61
- * @param headers - The headers record to read from.
62
- * @param key - The unprefixed domain key (e.g. `'toolCallId'` reads `'x-domain-toolCallId'`).
68
+ * Read a domain header value from a codec-tier headers record.
69
+ * @param headers - The codec headers record to read from.
70
+ * @param key - The domain key (e.g. `'toolCallId'`).
63
71
  * @returns The header value, or undefined if absent.
64
72
  */
65
73
  export declare const getDomainHeader: (headers: Record<string, string>, key: string) => string | undefined;
@@ -94,7 +102,7 @@ export interface DomainHeaderReader {
94
102
  str(key: string): string | undefined;
95
103
  /** Read a domain header as a string, falling back to a default if absent. */
96
104
  strOr(key: string, fallback: string): string;
97
- /** Read a domain header as a boolean ("true"/"false"), or undefined if absent. */
105
+ /** Read a domain header as a boolean: `true` only for the exact string "true", `false` for any other present value, or undefined if absent. */
98
106
  bool(key: string): boolean | undefined;
99
107
  /** Read a domain header as parsed JSON, or undefined if absent or invalid. */
100
108
  json(key: string): unknown;
@@ -121,7 +129,8 @@ export interface DomainHeaderWriter {
121
129
  build(): Record<string, string>;
122
130
  }
123
131
  /**
124
- * Create a {@link DomainHeaderWriter} for building a domain headers record.
125
- * @returns A fluent builder that prefixes each key with the domain header prefix.
132
+ * Create a {@link DomainHeaderWriter} for building a codec-tier headers record.
133
+ * @returns A fluent builder that accumulates codec headers under their bare keys.
126
134
  */
127
135
  export declare const headerWriter: () => DomainHeaderWriter;
136
+ export {};