@witqq/agent-sdk 0.6.1 → 0.8.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 (145) hide show
  1. package/README.md +539 -6
  2. package/dist/{types-BvwNzZCj.d.cts → agent-CW9XbmG_.d.ts} +148 -95
  3. package/dist/{types-BvwNzZCj.d.ts → agent-DxY68NZL.d.cts} +148 -95
  4. package/dist/auth/index.cjs +260 -2
  5. package/dist/auth/index.cjs.map +1 -1
  6. package/dist/auth/index.d.cts +21 -138
  7. package/dist/auth/index.d.ts +21 -138
  8. package/dist/auth/index.js +260 -3
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/backends/claude.cjs +653 -140
  11. package/dist/backends/claude.cjs.map +1 -1
  12. package/dist/backends/claude.d.cts +4 -1
  13. package/dist/backends/claude.d.ts +4 -1
  14. package/dist/backends/claude.js +653 -140
  15. package/dist/backends/claude.js.map +1 -1
  16. package/dist/backends/copilot.cjs +428 -88
  17. package/dist/backends/copilot.cjs.map +1 -1
  18. package/dist/backends/copilot.d.cts +13 -4
  19. package/dist/backends/copilot.d.ts +13 -4
  20. package/dist/backends/copilot.js +428 -88
  21. package/dist/backends/copilot.js.map +1 -1
  22. package/dist/backends/vercel-ai.cjs +349 -77
  23. package/dist/backends/vercel-ai.cjs.map +1 -1
  24. package/dist/backends/vercel-ai.d.cts +3 -1
  25. package/dist/backends/vercel-ai.d.ts +3 -1
  26. package/dist/backends/vercel-ai.js +349 -77
  27. package/dist/backends/vercel-ai.js.map +1 -1
  28. package/dist/backends-BSrsBYFn.d.cts +39 -0
  29. package/dist/backends-BSrsBYFn.d.ts +39 -0
  30. package/dist/chat/accumulator.cjs +147 -0
  31. package/dist/chat/accumulator.cjs.map +1 -0
  32. package/dist/chat/accumulator.d.cts +64 -0
  33. package/dist/chat/accumulator.d.ts +64 -0
  34. package/dist/chat/accumulator.js +145 -0
  35. package/dist/chat/accumulator.js.map +1 -0
  36. package/dist/chat/backends.cjs +3524 -0
  37. package/dist/chat/backends.cjs.map +1 -0
  38. package/dist/chat/backends.d.cts +66 -0
  39. package/dist/chat/backends.d.ts +66 -0
  40. package/dist/chat/backends.js +3512 -0
  41. package/dist/chat/backends.js.map +1 -0
  42. package/dist/chat/context.cjs +280 -0
  43. package/dist/chat/context.cjs.map +1 -0
  44. package/dist/chat/context.d.cts +191 -0
  45. package/dist/chat/context.d.ts +191 -0
  46. package/dist/chat/context.js +277 -0
  47. package/dist/chat/context.js.map +1 -0
  48. package/dist/chat/core.cjs +305 -0
  49. package/dist/chat/core.cjs.map +1 -0
  50. package/dist/chat/core.d.cts +84 -0
  51. package/dist/chat/core.d.ts +84 -0
  52. package/dist/chat/core.js +282 -0
  53. package/dist/chat/core.js.map +1 -0
  54. package/dist/chat/errors.cjs +273 -0
  55. package/dist/chat/errors.cjs.map +1 -0
  56. package/dist/chat/errors.d.cts +97 -0
  57. package/dist/chat/errors.d.ts +97 -0
  58. package/dist/chat/errors.js +266 -0
  59. package/dist/chat/errors.js.map +1 -0
  60. package/dist/chat/events.cjs +203 -0
  61. package/dist/chat/events.cjs.map +1 -0
  62. package/dist/chat/events.d.cts +245 -0
  63. package/dist/chat/events.d.ts +245 -0
  64. package/dist/chat/events.js +196 -0
  65. package/dist/chat/events.js.map +1 -0
  66. package/dist/chat/index.cjs +5550 -0
  67. package/dist/chat/index.cjs.map +1 -0
  68. package/dist/chat/index.d.cts +77 -0
  69. package/dist/chat/index.d.ts +77 -0
  70. package/dist/chat/index.js +5505 -0
  71. package/dist/chat/index.js.map +1 -0
  72. package/dist/chat/react/theme.css +2517 -0
  73. package/dist/chat/react.cjs +3589 -0
  74. package/dist/chat/react.cjs.map +1 -0
  75. package/dist/chat/react.d.cts +1088 -0
  76. package/dist/chat/react.d.ts +1088 -0
  77. package/dist/chat/react.js +3547 -0
  78. package/dist/chat/react.js.map +1 -0
  79. package/dist/chat/runtime.cjs +1245 -0
  80. package/dist/chat/runtime.cjs.map +1 -0
  81. package/dist/chat/runtime.d.cts +182 -0
  82. package/dist/chat/runtime.d.ts +182 -0
  83. package/dist/chat/runtime.js +1243 -0
  84. package/dist/chat/runtime.js.map +1 -0
  85. package/dist/chat/server.cjs +2668 -0
  86. package/dist/chat/server.cjs.map +1 -0
  87. package/dist/chat/server.d.cts +648 -0
  88. package/dist/chat/server.d.ts +648 -0
  89. package/dist/chat/server.js +2628 -0
  90. package/dist/chat/server.js.map +1 -0
  91. package/dist/chat/sessions.cjs +380 -0
  92. package/dist/chat/sessions.cjs.map +1 -0
  93. package/dist/chat/sessions.d.cts +158 -0
  94. package/dist/chat/sessions.d.ts +158 -0
  95. package/dist/chat/sessions.js +376 -0
  96. package/dist/chat/sessions.js.map +1 -0
  97. package/dist/chat/sqlite.cjs +441 -0
  98. package/dist/chat/sqlite.cjs.map +1 -0
  99. package/dist/chat/sqlite.d.cts +128 -0
  100. package/dist/chat/sqlite.d.ts +128 -0
  101. package/dist/chat/sqlite.js +435 -0
  102. package/dist/chat/sqlite.js.map +1 -0
  103. package/dist/chat/state.cjs +190 -0
  104. package/dist/chat/state.cjs.map +1 -0
  105. package/dist/chat/state.d.cts +95 -0
  106. package/dist/chat/state.d.ts +95 -0
  107. package/dist/chat/state.js +180 -0
  108. package/dist/chat/state.js.map +1 -0
  109. package/dist/chat/storage.cjs +249 -0
  110. package/dist/chat/storage.cjs.map +1 -0
  111. package/dist/chat/storage.d.cts +197 -0
  112. package/dist/chat/storage.d.ts +197 -0
  113. package/dist/chat/storage.js +245 -0
  114. package/dist/chat/storage.js.map +1 -0
  115. package/dist/errors-C-so0M4t.d.cts +33 -0
  116. package/dist/errors-C-so0M4t.d.ts +33 -0
  117. package/dist/errors-CmVvczxZ.d.cts +28 -0
  118. package/dist/errors-CmVvczxZ.d.ts +28 -0
  119. package/dist/in-process-transport-C1JnJGVR.d.ts +228 -0
  120. package/dist/in-process-transport-C7DSqPyX.d.cts +228 -0
  121. package/dist/index.cjs +365 -59
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.d.cts +322 -125
  124. package/dist/index.d.ts +322 -125
  125. package/dist/index.js +359 -60
  126. package/dist/index.js.map +1 -1
  127. package/dist/provider-types-PTSlRPNB.d.cts +39 -0
  128. package/dist/provider-types-PTSlRPNB.d.ts +39 -0
  129. package/dist/refresh-manager-B81PpYBr.d.cts +153 -0
  130. package/dist/refresh-manager-Dlv_iNZi.d.ts +153 -0
  131. package/dist/testing.cjs +383 -0
  132. package/dist/testing.cjs.map +1 -0
  133. package/dist/testing.d.cts +132 -0
  134. package/dist/testing.d.ts +132 -0
  135. package/dist/testing.js +377 -0
  136. package/dist/testing.js.map +1 -0
  137. package/dist/token-store-CSUBgYwn.d.ts +48 -0
  138. package/dist/token-store-CuC4hB9Z.d.cts +48 -0
  139. package/dist/transport-Cdh3M0tS.d.cts +68 -0
  140. package/dist/transport-Ciap4PWK.d.ts +68 -0
  141. package/dist/types-4vbcmPTp.d.cts +143 -0
  142. package/dist/types-BxggH0Yh.d.ts +143 -0
  143. package/dist/types-DRgd_9R7.d.cts +363 -0
  144. package/dist/types-ajANVzf7.d.ts +363 -0
  145. package/package.json +178 -6
@@ -0,0 +1,182 @@
1
+ import { I as IChatBackend, e as ChatMiddleware, f as ChatIdLike, c as ChatMessage, R as RuntimeStatus, g as ChatSession, b as ChatId, S as SendMessageOptions, a as ChatEvent, h as RuntimeSendOptions } from '../types-ajANVzf7.js';
2
+ import { T as ToolDefinition, M as ModelInfo } from '../agent-CW9XbmG_.js';
3
+ import { IChatSessionStore, CreateSessionOptions, SessionListOptions } from './sessions.js';
4
+ import { ContextWindowConfig, ContextStats } from './context.js';
5
+ import { A as AuthToken } from '../types-BxggH0Yh.js';
6
+ import { P as ProviderConfig } from '../provider-types-PTSlRPNB.js';
7
+ import '../errors-C-so0M4t.js';
8
+ import 'zod';
9
+ import './storage.js';
10
+ import '../errors-CmVvczxZ.js';
11
+
12
+ /**
13
+ * @witqq/agent-sdk/chat/runtime
14
+ *
15
+ * Unified chat runtime orchestrator. Creates a fully-wired runtime instance
16
+ * from a configuration object, managing backend adapters, sessions, context
17
+ * trimming, streaming, and middleware in a single facade.
18
+ *
19
+ * Usage:
20
+ * ```typescript
21
+ * import { createChatRuntime } from "@witqq/agent-sdk/chat/runtime";
22
+ * const runtime = createChatRuntime({ backends: { ... }, sessionStore, ... });
23
+ * const session = await runtime.createSession({ config: { model: "gpt-4", backend: "copilot" } });
24
+ * for await (const event of runtime.send(session.id, "Hello")) { ... }
25
+ * ```
26
+ */
27
+
28
+ /** Factory function that creates a backend adapter on demand */
29
+ type BackendAdapterFactory = (credentials: AuthToken) => IChatBackend | Promise<IChatBackend>;
30
+ /** Configuration for creating a chat runtime via createChatRuntime() */
31
+ interface ChatRuntimeOptions {
32
+ /** Map of backend name → adapter factory (lazy creation on first use) */
33
+ backends: Record<string, BackendAdapterFactory>;
34
+ /** Default backend name (must be a key in `backends`) */
35
+ defaultBackend: string;
36
+ /** Session store for persistence */
37
+ sessionStore: IChatSessionStore;
38
+ /** Context window configuration (optional) */
39
+ context?: ContextWindowConfig;
40
+ /** Middleware pipeline (optional, applied in order) */
41
+ middleware?: ChatMiddleware[];
42
+ /** Retry configuration for pre-stream connection errors */
43
+ retryConfig?: StreamRetryConfig;
44
+ /**
45
+ * Stream inactivity timeout in milliseconds (optional).
46
+ * When set, aborts the stream if no events arrive within this window.
47
+ * Timer resets after each received event.
48
+ */
49
+ streamTimeoutMs?: number;
50
+ /**
51
+ * Called when context trimming removes messages.
52
+ * Use for archiving, logging, or analytics.
53
+ */
54
+ onContextTrimmed?: (sessionId: ChatIdLike, removedMessages: ChatMessage[]) => void;
55
+ /**
56
+ * Initial tools to register on the runtime.
57
+ * Equivalent to calling `registerTool()` for each tool after creation.
58
+ */
59
+ tools?: ToolDefinition[];
60
+ }
61
+ /** Retry configuration for pre-stream failures (renamed to avoid clash with agent-level RetryConfig) */
62
+ interface StreamRetryConfig {
63
+ /** Maximum number of attempts (default: 1 = no retry) */
64
+ maxAttempts: number;
65
+ /** Delay between retries in milliseconds */
66
+ delayMs: number;
67
+ }
68
+ /** @deprecated Use StreamRetryConfig */
69
+ type RetryConfig = StreamRetryConfig;
70
+ /** Information about a registered backend */
71
+ interface BackendInfo {
72
+ /** Backend name (key in backends map) */
73
+ name: string;
74
+ }
75
+ /**
76
+ * Provider CRUD operations — separated per Interface Segregation Principle.
77
+ * Implemented by IChatClient (which needs provider management for UI).
78
+ * Not required on IChatRuntime (providers are a handler-layer concern).
79
+ */
80
+ interface IProviderClient {
81
+ listProviders(): Promise<ProviderConfig[]>;
82
+ createProvider(config: Omit<ProviderConfig, "id" | "createdAt">): Promise<ProviderConfig>;
83
+ updateProvider(id: string, changes: Partial<Omit<ProviderConfig, "id" | "createdAt">>): Promise<void>;
84
+ deleteProvider(id: string): Promise<void>;
85
+ }
86
+ /** Callback for provider selection changes */
87
+ type SelectionChangeCallback = (providerId: string | null) => void;
88
+ /**
89
+ * Client-side interface for interacting with a remote chat server.
90
+ * Fully self-contained — no shared base with IChatRuntime.
91
+ * Extends IProviderClient for provider CRUD (ISP).
92
+ * Used by React components and remote clients.
93
+ *
94
+ * @typeParam TMetadata - Type-level convenience for message metadata.
95
+ * NOT enforced at the storage boundary — session stores always use `unknown`.
96
+ * Consumers are responsible for metadata shape consistency.
97
+ */
98
+ interface IChatClient<TMetadata extends Record<string, unknown> = Record<string, unknown>> extends IProviderClient {
99
+ readonly status: RuntimeStatus;
100
+ dispose(): Promise<void>;
101
+ createSession(options: CreateSessionOptions<TMetadata>): Promise<ChatSession<TMetadata>>;
102
+ getSession(id: ChatIdLike): Promise<ChatSession<TMetadata> | null>;
103
+ listSessions(options?: SessionListOptions): Promise<ChatSession<TMetadata>[]>;
104
+ deleteSession(id: ChatIdLike): Promise<void>;
105
+ switchSession(id: ChatIdLike): Promise<ChatSession<TMetadata>>;
106
+ readonly activeSessionId: ChatId | null;
107
+ /**
108
+ * Send a message. Options are optional — the server handler resolves
109
+ * model and backend from provider selection state.
110
+ * Compare with IChatRuntime.send() where RuntimeSendOptions is required.
111
+ */
112
+ send(sessionId: ChatIdLike, message: string, options?: SendMessageOptions): AsyncIterable<ChatEvent>;
113
+ abort(): void;
114
+ selectProvider(providerId: string): void;
115
+ readonly selectedProviderId: string | null;
116
+ onSelectionChange(callback: SelectionChangeCallback): () => void;
117
+ onSessionChange(callback: () => void): () => void;
118
+ listModels(): Promise<ModelInfo[]>;
119
+ listBackends(): Promise<BackendInfo[]>;
120
+ getContextStats(sessionId: ChatIdLike): Promise<ContextStats | null>;
121
+ }
122
+ /**
123
+ * Server-side chat runtime. Fully self-contained — no shared base with IChatClient.
124
+ * Manages backend adapters, tools, middleware, and context trimming.
125
+ * Does NOT include client-facing provider CRUD or selection — those are
126
+ * handled by the server handler layer.
127
+ *
128
+ * @typeParam TMetadata - Type-level convenience for message metadata.
129
+ * NOT enforced at the storage boundary — session stores always use `unknown`.
130
+ * Casts in `ChatRuntime.createSession()`/`getSession()` are intentionally unsafe
131
+ * to provide typed access. Consumers are responsible for metadata shape consistency.
132
+ */
133
+ interface IChatRuntime<TMetadata extends Record<string, unknown> = Record<string, unknown>> {
134
+ readonly status: RuntimeStatus;
135
+ dispose(): Promise<void>;
136
+ createSession(options: CreateSessionOptions<TMetadata>): Promise<ChatSession<TMetadata>>;
137
+ getSession(id: ChatIdLike): Promise<ChatSession<TMetadata> | null>;
138
+ listSessions(options?: SessionListOptions): Promise<ChatSession<TMetadata>[]>;
139
+ deleteSession(id: ChatIdLike): Promise<void>;
140
+ /**
141
+ * Send a message. RuntimeSendOptions is required on the server — the caller
142
+ * (usually a handler) must supply backend, model, and credentials.
143
+ * Compare with IChatClient.send() where options are optional.
144
+ */
145
+ send(sessionId: ChatIdLike, message: string, options: RuntimeSendOptions): AsyncIterable<ChatEvent>;
146
+ abort(): void;
147
+ onSessionChange(callback: () => void): () => void;
148
+ listModels(options?: {
149
+ backend?: string;
150
+ credentials?: AuthToken;
151
+ }): Promise<ModelInfo[]>;
152
+ listBackends(): Promise<BackendInfo[]>;
153
+ registerTool(tool: ToolDefinition): void;
154
+ removeTool(name: string): void;
155
+ readonly registeredTools: ReadonlyMap<string, ToolDefinition>;
156
+ use(middleware: ChatMiddleware): void;
157
+ removeMiddleware(middleware: ChatMiddleware): void;
158
+ getContextStats(sessionId: ChatIdLike): Promise<ContextStats | null>;
159
+ }
160
+ /**
161
+ * Create a fully-wired chat runtime from configuration.
162
+ *
163
+ * @param options - Runtime configuration (backends, session store, context, middleware)
164
+ * @returns IChatRuntime instance ready to use
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * import { createChatRuntime } from "@witqq/agent-sdk/chat/runtime";
169
+ * import { InMemorySessionStore } from "@witqq/agent-sdk/chat/sessions";
170
+ *
171
+ * const runtime = createChatRuntime({
172
+ * backends: {
173
+ * copilot: () => new CopilotAdapter({ agentConfig: { model: "gpt-4" } }),
174
+ * },
175
+ * defaultBackend: "copilot",
176
+ * sessionStore: new InMemorySessionStore(),
177
+ * });
178
+ * ```
179
+ */
180
+ declare function createChatRuntime<TMetadata extends Record<string, unknown> = Record<string, unknown>>(options: ChatRuntimeOptions): IChatRuntime<TMetadata>;
181
+
182
+ export { type BackendAdapterFactory, type BackendInfo, type ChatRuntimeOptions, type IChatClient, type IChatRuntime, type IProviderClient, type RetryConfig, type SelectionChangeCallback, type StreamRetryConfig, createChatRuntime };