@ably/ai-transport 0.0.1

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 (118) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +426 -0
  3. package/dist/ably-ai-transport.js +1388 -0
  4. package/dist/ably-ai-transport.js.map +1 -0
  5. package/dist/ably-ai-transport.umd.cjs +2 -0
  6. package/dist/ably-ai-transport.umd.cjs.map +1 -0
  7. package/dist/constants.d.ts +50 -0
  8. package/dist/core/codec/decoder.d.ts +62 -0
  9. package/dist/core/codec/encoder.d.ts +56 -0
  10. package/dist/core/codec/index.d.ts +8 -0
  11. package/dist/core/codec/lifecycle-tracker.d.ts +74 -0
  12. package/dist/core/codec/types.d.ts +188 -0
  13. package/dist/core/transport/client-transport.d.ts +10 -0
  14. package/dist/core/transport/conversation-tree.d.ts +9 -0
  15. package/dist/core/transport/decode-history.d.ts +41 -0
  16. package/dist/core/transport/headers.d.ts +26 -0
  17. package/dist/core/transport/index.d.ts +4 -0
  18. package/dist/core/transport/pipe-stream.d.ts +16 -0
  19. package/dist/core/transport/server-transport.d.ts +7 -0
  20. package/dist/core/transport/stream-router.d.ts +19 -0
  21. package/dist/core/transport/turn-manager.d.ts +34 -0
  22. package/dist/core/transport/types.d.ts +407 -0
  23. package/dist/errors.d.ts +46 -0
  24. package/dist/event-emitter.d.ts +65 -0
  25. package/dist/index.d.ts +11 -0
  26. package/dist/logger.d.ts +103 -0
  27. package/dist/react/ably-ai-transport-react.js +823 -0
  28. package/dist/react/ably-ai-transport-react.js.map +1 -0
  29. package/dist/react/ably-ai-transport-react.umd.cjs +2 -0
  30. package/dist/react/ably-ai-transport-react.umd.cjs.map +1 -0
  31. package/dist/react/index.d.ts +11 -0
  32. package/dist/react/use-ably-messages.d.ts +18 -0
  33. package/dist/react/use-active-turns.d.ts +8 -0
  34. package/dist/react/use-client-transport.d.ts +7 -0
  35. package/dist/react/use-conversation-tree.d.ts +20 -0
  36. package/dist/react/use-edit.d.ts +7 -0
  37. package/dist/react/use-history.d.ts +19 -0
  38. package/dist/react/use-messages.d.ts +7 -0
  39. package/dist/react/use-regenerate.d.ts +7 -0
  40. package/dist/react/use-send.d.ts +7 -0
  41. package/dist/utils.d.ts +127 -0
  42. package/dist/vercel/ably-ai-transport-vercel.js +2331 -0
  43. package/dist/vercel/ably-ai-transport-vercel.js.map +1 -0
  44. package/dist/vercel/ably-ai-transport-vercel.umd.cjs +2 -0
  45. package/dist/vercel/ably-ai-transport-vercel.umd.cjs.map +1 -0
  46. package/dist/vercel/codec/accumulator.d.ts +21 -0
  47. package/dist/vercel/codec/decoder.d.ts +22 -0
  48. package/dist/vercel/codec/encoder.d.ts +41 -0
  49. package/dist/vercel/codec/index.d.ts +22 -0
  50. package/dist/vercel/index.d.ts +3 -0
  51. package/dist/vercel/react/ably-ai-transport-vercel-react.js +2082 -0
  52. package/dist/vercel/react/ably-ai-transport-vercel-react.js.map +1 -0
  53. package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs +2 -0
  54. package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs.map +1 -0
  55. package/dist/vercel/react/index.d.ts +3 -0
  56. package/dist/vercel/react/use-chat-transport.d.ts +29 -0
  57. package/dist/vercel/react/use-message-sync.d.ts +19 -0
  58. package/dist/vercel/transport/chat-transport.d.ts +118 -0
  59. package/dist/vercel/transport/index.d.ts +36 -0
  60. package/package.json +123 -0
  61. package/react/README.md +3 -0
  62. package/react/index.d.ts +1 -0
  63. package/react/index.js +1 -0
  64. package/react/index.umd.cjs +1 -0
  65. package/src/constants.ts +98 -0
  66. package/src/core/codec/decoder.ts +402 -0
  67. package/src/core/codec/encoder.ts +470 -0
  68. package/src/core/codec/index.ts +28 -0
  69. package/src/core/codec/lifecycle-tracker.ts +140 -0
  70. package/src/core/codec/types.ts +249 -0
  71. package/src/core/transport/client-transport.ts +959 -0
  72. package/src/core/transport/conversation-tree.ts +434 -0
  73. package/src/core/transport/decode-history.ts +337 -0
  74. package/src/core/transport/headers.ts +46 -0
  75. package/src/core/transport/index.ts +34 -0
  76. package/src/core/transport/pipe-stream.ts +95 -0
  77. package/src/core/transport/server-transport.ts +458 -0
  78. package/src/core/transport/stream-router.ts +118 -0
  79. package/src/core/transport/turn-manager.ts +147 -0
  80. package/src/core/transport/types.ts +533 -0
  81. package/src/errors.ts +58 -0
  82. package/src/event-emitter.ts +103 -0
  83. package/src/index.ts +89 -0
  84. package/src/logger.ts +241 -0
  85. package/src/react/index.ts +11 -0
  86. package/src/react/use-ably-messages.ts +37 -0
  87. package/src/react/use-active-turns.ts +61 -0
  88. package/src/react/use-client-transport.ts +37 -0
  89. package/src/react/use-conversation-tree.ts +71 -0
  90. package/src/react/use-edit.ts +24 -0
  91. package/src/react/use-history.ts +111 -0
  92. package/src/react/use-messages.ts +32 -0
  93. package/src/react/use-regenerate.ts +24 -0
  94. package/src/react/use-send.ts +25 -0
  95. package/src/react/vite.config.ts +32 -0
  96. package/src/tsconfig.json +25 -0
  97. package/src/utils.ts +230 -0
  98. package/src/vercel/codec/accumulator.ts +603 -0
  99. package/src/vercel/codec/decoder.ts +615 -0
  100. package/src/vercel/codec/encoder.ts +396 -0
  101. package/src/vercel/codec/index.ts +37 -0
  102. package/src/vercel/index.ts +12 -0
  103. package/src/vercel/react/index.ts +4 -0
  104. package/src/vercel/react/use-chat-transport.ts +60 -0
  105. package/src/vercel/react/use-message-sync.ts +34 -0
  106. package/src/vercel/react/vite.config.ts +33 -0
  107. package/src/vercel/transport/chat-transport.ts +278 -0
  108. package/src/vercel/transport/index.ts +56 -0
  109. package/src/vercel/vite.config.ts +33 -0
  110. package/src/vite.config.ts +31 -0
  111. package/vercel/README.md +3 -0
  112. package/vercel/index.d.ts +1 -0
  113. package/vercel/index.js +1 -0
  114. package/vercel/index.umd.cjs +1 -0
  115. package/vercel/react/README.md +3 -0
  116. package/vercel/react/index.d.ts +1 -0
  117. package/vercel/react/index.js +1 -0
  118. package/vercel/react/index.umd.cjs +1 -0
@@ -0,0 +1,21 @@
1
+ import { MessageAccumulator } from '../../core/codec/types.js';
2
+ /**
3
+ * Vercel AI SDK Message Accumulator
4
+ *
5
+ * Builds and maintains a UIMessage[] list from decoder outputs.
6
+ * Implements MessageAccumulator<UIMessageChunk, UIMessage>.
7
+ *
8
+ * The accumulator consumes DecoderOutput[] from the decoder and groups
9
+ * streaming events into UIMessage objects using lifecycle boundaries
10
+ * (start/finish). Complete messages (from writeMessages) are inserted
11
+ * directly.
12
+ *
13
+ * Multiple messages can be in-progress concurrently — each is identified
14
+ * by the `messageId` field on DecoderOutput (read from x-ably-msg-id).
15
+ */
16
+ import type * as AI from 'ai';
17
+ /**
18
+ * Create a Vercel AI SDK accumulator that builds UIMessage[] from decoder outputs.
19
+ * @returns A {@link MessageAccumulator} for UIMessageChunk/UIMessage.
20
+ */
21
+ export declare const createAccumulator: () => MessageAccumulator<AI.UIMessageChunk, AI.UIMessage>;
@@ -0,0 +1,22 @@
1
+ import { DecoderCoreOptions } from '../../core/codec/decoder.js';
2
+ import { StreamDecoder } from '../../core/codec/types.js';
3
+ /**
4
+ * Vercel AI SDK Decoder
5
+ *
6
+ * Maps Ably inbound messages to DecoderOutput<UIMessageChunk, UIMessage>[].
7
+ *
8
+ * Delegates action dispatch and serial tracking to the decoder core.
9
+ * This file contains only the Vercel-specific event building, discrete
10
+ * event decoding, and synthetic event emission.
11
+ *
12
+ * Domain-specific headers use the `x-domain-` prefix. Transport-level
13
+ * headers use the `x-ably-` prefix.
14
+ */
15
+ import type * as AI from 'ai';
16
+ /**
17
+ * Create a Vercel AI SDK decoder that maps Ably messages to UIMessageChunk
18
+ * events and UIMessage objects via the decoder core.
19
+ * @param options - Decoder configuration (callbacks, logger).
20
+ * @returns A {@link StreamDecoder} for UIMessageChunk/UIMessage.
21
+ */
22
+ export declare const createDecoder: (options?: DecoderCoreOptions) => StreamDecoder<AI.UIMessageChunk, AI.UIMessage>;
@@ -0,0 +1,41 @@
1
+ import { EncoderCoreOptions } from '../../core/codec/encoder.js';
2
+ import { ChannelWriter, StreamEncoder } from '../../core/codec/types.js';
3
+ /**
4
+ * Vercel AI SDK Encoder
5
+ *
6
+ * Maps UIMessageChunk events and complete UIMessage objects to Ably channel
7
+ * operations (publish, appendMessage, updateMessage).
8
+ *
9
+ * Delegates the message append lifecycle (publish, append, close, abort,
10
+ * flush/recover) to the encoder core. This file contains only the
11
+ * Vercel-specific event-to-operation mapping.
12
+ *
13
+ * Domain-specific headers use the `x-domain-` prefix to distinguish them
14
+ * from transport-level `x-ably-` headers.
15
+ *
16
+ * ## Core operations and domain headers
17
+ *
18
+ * Each UIMessageChunk maps to exactly one encoder core operation. Domain
19
+ * headers are passed to every operation that accepts them — the core handles
20
+ * merging, persistence, and deduplication:
21
+ *
22
+ * - **`startStream`**: Opens a message stream. Domain headers become
23
+ * "persistent headers" — the core repeats them on every subsequent append.
24
+ * - **`appendStream`**: Appends a text delta. Data only, no headers parameter.
25
+ * The core automatically carries persistent headers from start.
26
+ * - **`closeStream`**: Closes the stream. Pass all domain headers from the
27
+ * chunk — the core merges them on top of persistent headers, so changed
28
+ * values (e.g. updated providerMetadata) are picked up and unchanged
29
+ * values are harmlessly deduplicated.
30
+ * - **`publishDiscrete`**: Publishes a standalone message. All domain headers
31
+ * for the chunk are passed directly.
32
+ */
33
+ import type * as AI from 'ai';
34
+ /**
35
+ * Create a Vercel AI SDK encoder that maps UIMessageChunk events to Ably
36
+ * channel operations via the encoder core.
37
+ * @param writer - The channel writer to publish messages through.
38
+ * @param options - Encoder configuration (clientId, extras, hooks, logger).
39
+ * @returns A {@link StreamEncoder} for UIMessageChunk/UIMessage.
40
+ */
41
+ export declare const createEncoder: (writer: ChannelWriter, options?: EncoderCoreOptions) => StreamEncoder<AI.UIMessageChunk, AI.UIMessage>;
@@ -0,0 +1,22 @@
1
+ import { Codec } from '../../core/codec/types.js';
2
+ /**
3
+ * Vercel AI SDK codec — maps UIMessageChunk events and UIMessage objects
4
+ * to/from native Ably message primitives (publish, append, update, delete).
5
+ *
6
+ * ```ts
7
+ * import { UIMessageCodec } from '@ably/ai-transport/vercel';
8
+ *
9
+ * const encoder = UIMessageCodec.createEncoder(writer, options);
10
+ * const decoder = UIMessageCodec.createDecoder();
11
+ * const accumulator = UIMessageCodec.createAccumulator();
12
+ * ```
13
+ */
14
+ import type * as AI from 'ai';
15
+ /**
16
+ * Vercel AI SDK codec implementing `Codec<UIMessageChunk, UIMessage>`.
17
+ *
18
+ * Provides factory methods for creating encoders, decoders, and accumulators
19
+ * that map between Vercel's UIMessageChunk/UIMessage types and Ably's native
20
+ * message primitives.
21
+ */
22
+ export declare const UIMessageCodec: Codec<AI.UIMessageChunk, AI.UIMessage>;
@@ -0,0 +1,3 @@
1
+ export { UIMessageCodec } from './codec/index.js';
2
+ export type { ChatTransport, ChatTransportOptions, SendMessagesRequestContext, VercelClientTransportOptions, VercelServerTransportOptions, } from './transport/index.js';
3
+ export { createChatTransport, createClientTransport, createServerTransport } from './transport/index.js';