experimental-a2 0.12.0 → 0.14.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 (106) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/{actor-DJi3RsNu.d.ts → actor-BfQSE0KC.d.ts} +4 -4
  3. package/dist/{actor-DJi3RsNu.d.ts.map → actor-BfQSE0KC.d.ts.map} +1 -1
  4. package/dist/actor-client.d.ts +1 -1
  5. package/dist/actor-client.js +1 -1
  6. package/dist/actor-react.d.ts +3 -3
  7. package/dist/actor-react.js +2 -2
  8. package/dist/{actor-shared-DI7J5upy.js → actor-shared-B5tJfzt-.js} +2 -2
  9. package/dist/{actor-shared-DI7J5upy.js.map → actor-shared-B5tJfzt-.js.map} +1 -1
  10. package/dist/actor.d.ts +1 -1
  11. package/dist/actor.js +3 -3
  12. package/dist/ai-Cai-lCbj.d.ts +580 -0
  13. package/dist/ai-Cai-lCbj.d.ts.map +1 -0
  14. package/dist/ai-control-CcD4hh3y.js +119 -0
  15. package/dist/ai-control-CcD4hh3y.js.map +1 -0
  16. package/dist/ai-server.d.ts +16 -8
  17. package/dist/ai-server.d.ts.map +1 -1
  18. package/dist/ai-server.js +1322 -475
  19. package/dist/ai-server.js.map +1 -1
  20. package/dist/ai.d.ts +2 -334
  21. package/dist/ai.js +838 -85
  22. package/dist/ai.js.map +1 -1
  23. package/dist/{client-P_NNNRM-.d.ts → client-BAEABRZB.d.ts} +2 -2
  24. package/dist/{client-P_NNNRM-.d.ts.map → client-BAEABRZB.d.ts.map} +1 -1
  25. package/dist/{client-Bf6uSEAk.js → client-BYzHjkwU.js} +21 -6
  26. package/dist/client-BYzHjkwU.js.map +1 -0
  27. package/dist/client.d.ts +1 -1
  28. package/dist/client.js +1 -1
  29. package/dist/{contract-48bUMgcL.js → contract-CKRg_E4q.js} +3 -26
  30. package/dist/contract-CKRg_E4q.js.map +1 -0
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.js +1 -1
  33. package/dist/react.d.ts +2 -2
  34. package/dist/react.js +1 -1
  35. package/dist/{reducer-DJKWm3cp.d.ts → reducer-BcS9VDKC.d.ts} +4 -1
  36. package/dist/{reducer-DJKWm3cp.d.ts.map → reducer-BcS9VDKC.d.ts.map} +1 -1
  37. package/dist/reducer-DEMjEY_O.js +29 -0
  38. package/dist/reducer-DEMjEY_O.js.map +1 -0
  39. package/dist/scheduler-qstash.d.ts +2 -2
  40. package/dist/scheduler-qstash.js +1 -1
  41. package/dist/scheduler-vercel.d.ts +2 -2
  42. package/dist/scheduler-vercel.js +1 -1
  43. package/dist/{server-DjZZa1wr.d.ts → server-Bp5Nd1pF.d.ts} +3 -3
  44. package/dist/{server-DjZZa1wr.d.ts.map → server-Bp5Nd1pF.d.ts.map} +1 -1
  45. package/dist/{server-BeNADlCI.js → server-CjJSGcF7.js} +4 -3
  46. package/dist/server-CjJSGcF7.js.map +1 -0
  47. package/dist/server.d.ts +3 -3
  48. package/dist/server.js +1 -1
  49. package/dist/{store-DtDOWLSn.d.ts → store-D_yhNdPz.d.ts} +7 -2
  50. package/dist/{store-DtDOWLSn.d.ts.map → store-D_yhNdPz.d.ts.map} +1 -1
  51. package/dist/store-N8PXxDAS.js.map +1 -1
  52. package/dist/store-memory.d.ts +1 -1
  53. package/dist/store-postgres.d.ts +1 -1
  54. package/dist/store-postgres.js +19 -0
  55. package/dist/store-postgres.js.map +1 -1
  56. package/dist/store-redis-http.d.ts +1 -1
  57. package/dist/store-redis-http.js +1 -1
  58. package/dist/{store-redis-notify-BUCyXOn0.js → store-redis-notify-D2EI6gwX.js} +27 -2
  59. package/dist/store-redis-notify-D2EI6gwX.js.map +1 -0
  60. package/dist/store-redis.d.ts +1 -1
  61. package/dist/store-redis.js +1 -1
  62. package/dist/store-sqlite.d.ts +1 -1
  63. package/docs/guides/06-ai-agents.mdx +361 -76
  64. package/docs/reference/01-api.mdx +159 -27
  65. package/examples/playground/app/agent/[agentId]/agent-client.tsx +145 -33
  66. package/examples/playground/app/agent/[agentId]/agent-queue.tsx +289 -0
  67. package/examples/playground/app/agent/[agentId]/compaction/route.ts +14 -0
  68. package/examples/playground/app/agent/[agentId]/compaction-event.tsx +38 -0
  69. package/examples/playground/app/agent/[agentId]/compaction-panel.tsx +294 -0
  70. package/examples/playground/app/agent/compaction-settings.test.ts +144 -0
  71. package/examples/playground/app/agent/compaction-settings.ts +49 -0
  72. package/examples/playground/app/agent/compaction-timeline.test.ts +337 -0
  73. package/examples/playground/app/agent/compaction-timeline.ts +198 -0
  74. package/examples/playground/app/agent/model.ts +56 -1
  75. package/examples/playground/app/agent/server.ts +9 -2
  76. package/examples/playground/app/chat/[chatId]/chat-client.tsx +3 -13
  77. package/examples/playground/app/chat/model.ts +2 -2
  78. package/examples/playground/app/chat/server.ts +24 -17
  79. package/examples/playground/app/globals.css +333 -0
  80. package/examples/playground/package.json +1 -1
  81. package/package.json +1 -1
  82. package/src/ai-client-state.ts +185 -0
  83. package/src/ai-control-server.ts +829 -0
  84. package/src/ai-control-state.ts +152 -0
  85. package/src/ai-control.ts +139 -0
  86. package/src/ai-coordinator.ts +99 -32
  87. package/src/ai-model-metadata.ts +108 -0
  88. package/src/ai-progress-batches.ts +68 -0
  89. package/src/ai-projector.ts +76 -15
  90. package/src/ai-sdk-step.ts +5 -2
  91. package/src/ai-server.ts +920 -638
  92. package/src/ai.ts +650 -110
  93. package/src/client.ts +31 -9
  94. package/src/licenses/Apache-2.0.txt +55 -0
  95. package/src/parse-partial-json.ts +441 -0
  96. package/src/reducer.ts +6 -0
  97. package/src/server.ts +8 -4
  98. package/src/store-postgres.ts +27 -0
  99. package/src/store-redis-core.ts +53 -1
  100. package/src/store-redis-notify.ts +1 -0
  101. package/src/store.ts +6 -0
  102. package/dist/ai.d.ts.map +0 -1
  103. package/dist/client-Bf6uSEAk.js.map +0 -1
  104. package/dist/contract-48bUMgcL.js.map +0 -1
  105. package/dist/server-BeNADlCI.js.map +0 -1
  106. package/dist/store-redis-notify-BUCyXOn0.js.map +0 -1
@@ -0,0 +1,119 @@
1
+ //#region src/ai-control-state.ts
2
+ const container = (value) => typeof value === "object" && value !== null;
3
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
4
+ const controlChanges = ({ before, after }) => {
5
+ const changes = [];
6
+ const visit = (left, right, path) => {
7
+ if (same(left, right)) return;
8
+ if (Array.isArray(left) && Array.isArray(right)) {
9
+ let prefix = 0;
10
+ while (prefix < Math.min(left.length, right.length) && same(left[prefix], right[prefix])) prefix += 1;
11
+ let suffix = 0;
12
+ while (suffix < Math.min(left.length, right.length) - prefix && same(left[left.length - 1 - suffix], right[right.length - 1 - suffix])) suffix += 1;
13
+ if (left.length === right.length) for (let index = prefix; index < left.length - suffix; index += 1) visit(left[index], right[index], [...path, index]);
14
+ else changes.push({
15
+ path,
16
+ splice: {
17
+ index: prefix,
18
+ deleteCount: left.length - prefix - suffix,
19
+ items: right.slice(prefix, right.length - suffix)
20
+ }
21
+ });
22
+ return;
23
+ }
24
+ if (container(left) && container(right) && !Array.isArray(left) && !Array.isArray(right)) {
25
+ for (const key of Object.keys(left)) if (!Object.hasOwn(right, key)) changes.push({
26
+ path: [...path, key],
27
+ remove: true
28
+ });
29
+ for (const key of Object.keys(right)) visit(Object.hasOwn(left, key) ? left[key] : void 0, right[key], [...path, key]);
30
+ return;
31
+ }
32
+ changes.push({
33
+ path,
34
+ value: right
35
+ });
36
+ };
37
+ visit(before, after, []);
38
+ return changes;
39
+ };
40
+ const applyControlChanges = ({ state, changes }) => {
41
+ if (changes.length === 0) return state;
42
+ let next = structuredClone(state);
43
+ for (const change of changes) {
44
+ const path = change.path;
45
+ if (path.length === 0) {
46
+ next = structuredClone(change.value);
47
+ continue;
48
+ }
49
+ let target = next;
50
+ for (const key of path.slice(0, -1)) {
51
+ if (!container(target) || !Object.hasOwn(target, key)) throw new TypeError("Invalid AI control change path");
52
+ target = target[key];
53
+ }
54
+ if (!container(target)) throw new TypeError("Invalid AI control change target");
55
+ const parent = target;
56
+ const key = path.at(-1);
57
+ if (change.remove) delete parent[key];
58
+ else if (change.splice) {
59
+ const items = parent[key];
60
+ Object.defineProperty(parent, key, {
61
+ value: [
62
+ ...items.slice(0, change.splice.index),
63
+ ...structuredClone(change.splice.items),
64
+ ...items.slice(change.splice.index + change.splice.deleteCount)
65
+ ],
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true
69
+ });
70
+ } else if (change.move) {
71
+ const items = parent[key];
72
+ const [item] = items.splice(change.move.from, 1);
73
+ items.splice(change.move.to, 0, item);
74
+ } else Object.defineProperty(parent, key, {
75
+ value: structuredClone(change.value),
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true
79
+ });
80
+ }
81
+ return next;
82
+ };
83
+ const controlCommit = (options) => {
84
+ const active = options.after.active;
85
+ const response = options.after.coordinator.response;
86
+ return {
87
+ changes: [...options.moves, ...controlChanges({
88
+ before: options.before,
89
+ after: options.after
90
+ })],
91
+ view: {
92
+ turnId: active?.turnId ?? null,
93
+ version: active?.version ?? null,
94
+ phase: active?.phase ?? null,
95
+ paused: options.after.inbox.paused,
96
+ closed: options.after.coordinator.closed,
97
+ requestId: response?.activeRequestId ?? null,
98
+ responseMessageId: response?.responseMessageId ?? null
99
+ }
100
+ };
101
+ };
102
+ //#endregion
103
+ //#region src/ai-control.ts
104
+ const initialControlState = () => ({
105
+ reservedIds: {},
106
+ inbox: {
107
+ paused: false,
108
+ items: []
109
+ },
110
+ active: null,
111
+ coordinator: {
112
+ closed: false,
113
+ queued: []
114
+ }
115
+ });
116
+ //#endregion
117
+ export { applyControlChanges as n, controlCommit as r, initialControlState as t };
118
+
119
+ //# sourceMappingURL=ai-control-CcD4hh3y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-control-CcD4hh3y.js","names":[],"sources":["../src/ai-control-state.ts","../src/ai-control.ts"],"sourcesContent":["import type {\n AIControlState,\n ControlCommit,\n ControlChange,\n} from './ai-control.ts'\nimport type { UIMessage } from 'ai'\n\ntype RecordValue = Record<string, unknown> | unknown[]\nconst container = (value: unknown): value is RecordValue =>\n typeof value === 'object' && value !== null\nconst same = (left: unknown, right: unknown): boolean =>\n JSON.stringify(left) === JSON.stringify(right)\n\nexport const controlChanges = ({\n before,\n after,\n}: {\n before: unknown\n after: unknown\n}): ControlChange[] => {\n const changes: ControlChange[] = []\n const visit = (\n left: unknown,\n right: unknown,\n path: (string | number)[],\n ): void => {\n if (same(left, right)) return\n if (Array.isArray(left) && Array.isArray(right)) {\n let prefix = 0\n while (\n prefix < Math.min(left.length, right.length) &&\n same(left[prefix], right[prefix])\n )\n prefix += 1\n let suffix = 0\n while (\n suffix < Math.min(left.length, right.length) - prefix &&\n same(left[left.length - 1 - suffix], right[right.length - 1 - suffix])\n )\n suffix += 1\n if (left.length === right.length) {\n for (let index = prefix; index < left.length - suffix; index += 1)\n visit(left[index], right[index], [...path, index])\n } else\n changes.push({\n path,\n splice: {\n index: prefix,\n deleteCount: left.length - prefix - suffix,\n items: right.slice(prefix, right.length - suffix),\n },\n })\n return\n }\n if (\n container(left) &&\n container(right) &&\n !Array.isArray(left) &&\n !Array.isArray(right)\n ) {\n for (const key of Object.keys(left))\n if (!Object.hasOwn(right, key))\n changes.push({ path: [...path, key], remove: true })\n for (const key of Object.keys(right))\n visit(Object.hasOwn(left, key) ? left[key] : undefined, right[key], [\n ...path,\n key,\n ])\n return\n }\n changes.push({ path, value: right })\n }\n visit(before, after, [])\n return changes\n}\n\nexport const applyControlChanges = <T>({\n state,\n changes,\n}: {\n state: T\n changes: readonly ControlChange[]\n}): T => {\n if (changes.length === 0) return state\n let next = structuredClone(state)\n for (const change of changes) {\n const path = change.path\n if (path.length === 0) {\n next = structuredClone(change.value) as T\n continue\n }\n let target: unknown = next\n for (const key of path.slice(0, -1)) {\n if (!container(target) || !Object.hasOwn(target, key))\n throw new TypeError('Invalid AI control change path')\n target = (target as Record<string | number, unknown>)[key]\n }\n if (!container(target))\n throw new TypeError('Invalid AI control change target')\n const parent = target as Record<string | number, unknown>\n const key = path.at(-1)!\n if (change.remove) delete parent[key]\n else if (change.splice) {\n const items = parent[key] as unknown[]\n Object.defineProperty(parent, key, {\n value: [\n ...items.slice(0, change.splice.index),\n ...structuredClone(change.splice.items),\n ...items.slice(change.splice.index + change.splice.deleteCount),\n ],\n enumerable: true,\n configurable: true,\n writable: true,\n })\n } else if (change.move) {\n const items = parent[key] as unknown[]\n const [item] = items.splice(change.move.from, 1)\n items.splice(change.move.to, 0, item)\n } else\n Object.defineProperty(parent, key, {\n value: structuredClone(change.value),\n enumerable: true,\n configurable: true,\n writable: true,\n })\n }\n return next\n}\n\nexport const controlCommit = <M extends UIMessage>(options: {\n before: AIControlState<M>\n after: AIControlState<M>\n moves: ControlChange[]\n}): ControlCommit => {\n const active = options.after.active\n const response = options.after.coordinator.response\n return {\n changes: [\n ...options.moves,\n ...controlChanges({ before: options.before, after: options.after }),\n ],\n view: {\n turnId: active?.turnId ?? null,\n version: active?.version ?? null,\n phase: active?.phase ?? null,\n paused: options.after.inbox.paused,\n closed: options.after.coordinator.closed,\n requestId: response?.activeRequestId ?? null,\n responseMessageId: response?.responseMessageId ?? null,\n },\n }\n}\n","import type { UIMessage } from 'ai'\nimport type { AICoordinatorState } from './ai-coordinator.ts'\nimport type {\n ApprovalRespondedPayload,\n GenerationStartedPayload,\n InputRequestedPayload,\n InputRespondedPayload,\n MessageInterruptedPayload,\n RetryRequestedPayload,\n ToolCalledPayload,\n ToolResultPayload,\n} from './ai.ts'\n\nexport type InboxItem<M extends UIMessage = UIMessage> = {\n id: string\n revision: number\n message: M\n generate: boolean\n afterStepOf?: string\n}\n\nexport type ControlCommand<M extends UIMessage = UIMessage> =\n | { action: 'send'; message: M; generate?: boolean }\n | { action: 'edit'; message: M; expectedRevision: number }\n | { action: 'move'; inputId: string; beforeId: string | null }\n | { action: 'remove'; inputId: string }\n | {\n action: 'send-now'\n inputId: string\n turnId: string | null\n lastSeenIndex?: number\n }\n | { action: 'stop'; turnId: string; lastSeenIndex?: number }\n | { action: 'steer'; turnId: string; message: M; lastSeenIndex?: number }\n | { action: 'pause'; when: 'now' | 'after-turn' }\n | { action: 'resume' }\n | { action: 'tool-result'; result: ToolResultPayload }\n | { action: 'approval'; response: ApprovalRespondedPayload }\n | { action: 'input'; response: InputRespondedPayload }\n | { action: 'request-input'; request: InputRequestedPayload }\n | { action: 'retry'; request: RetryRequestedPayload }\n | { action: 'interrupt'; request: MessageInterruptedPayload }\n\nexport type ControlReceipt = {\n commandId: string\n work?: true\n outcome: 'applied' | 'rejected'\n reason?:\n | 'already-active'\n | 'revision-conflict'\n | 'stale-turn'\n | 'not-found'\n | 'duplicate-input'\n | 'closed'\n | 'stale-work'\n | 'not-user-input'\n}\n\nexport type ActiveTurn<M extends UIMessage = UIMessage> = {\n turnId: string\n input: InboxItem<M>\n phase:\n | 'starting'\n | 'generating'\n | 'tools'\n | 'waiting'\n | 'failed'\n | 'pausing'\n | 'paused'\n}\n\nexport type ControlWork = {\n id: string\n version: number\n settled: boolean\n attempt?: number\n facts?: string[]\n}\n\nexport type AIControlState<M extends UIMessage = UIMessage> = {\n reservedIds: Record<string, true | 'removed'>\n inbox: { paused: boolean; items: InboxItem<M>[] }\n active:\n | (ActiveTurn<M> & {\n version: number\n suspended: boolean\n model: ControlWork | null\n })\n | null\n coordinator: AICoordinatorState\n}\n\nexport type WorkFact = { type: string; id: string; payload: unknown }\nexport type WorkReport = {\n attempt: number\n workId: string\n turnId: string\n version: number\n kind: 'model' | 'tool'\n settled: boolean\n events: WorkFact[]\n}\n\nexport type ToolExecutionRequest = {\n turnId: string\n version: number\n call: ToolCalledPayload\n generation: GenerationStartedPayload\n}\n\nexport const initialControlState = <\n M extends UIMessage,\n>(): AIControlState<M> => ({\n reservedIds: {},\n inbox: { paused: false, items: [] },\n active: null,\n coordinator: { closed: false, queued: [] },\n})\n\nexport type ControlChange = {\n path: (string | number)[]\n value?: unknown\n remove?: true\n splice?: { index: number; deleteCount: number; items: unknown[] }\n move?: { from: number; to: number }\n}\n\nexport type ControlCommit = {\n changes: ControlChange[]\n view: {\n turnId: string | null\n version: number | null\n phase: ActiveTurn['phase'] | null\n paused: boolean\n closed: boolean\n requestId: string | null\n responseMessageId: string | null\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { a as ContractEvent, s as EventDefs } from "./reducer-DJKWm3cp.js";
2
- import { n as A2Server, p as ServerOptions } from "./server-DjZZa1wr.js";
3
- import { AIEventDefs, AIState, AgentDefinition, AgentToolContext, AgentToolEventDefs } from "./ai.js";
4
- import { Instructions, LanguageModel, TextStreamPart, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
1
+ import { a as ContractEvent, s as EventDefs } from "./reducer-BcS9VDKC.js";
2
+ import { n as A2Server, p as ServerOptions, s as HandlerContext } from "./server-Bp5Nd1pF.js";
3
+ import { l as AgentToolContext, o as AgentDefinition, r as AIState, t as AIEventDefs, u as AgentToolEventDefs } from "./ai-Cai-lCbj.js";
4
+ import { Instructions, LanguageModel, ModelMessage, TextStreamPart, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
5
5
  //#region src/ai-sdk-step.d.ts
6
6
  type StreamTextOptions<T extends ToolSet$1> = Parameters<typeof streamText<T>>[0];
7
7
  type ModelStepTimeout<T extends ToolSet$1> = number | Omit<Exclude<StreamTextOptions<T>["timeout"], number | undefined>, "toolMs" | "tools">;
@@ -44,8 +44,9 @@ type AgentGenerateContext<M extends UIMessage, D extends AIEventDefs<M> & EventD
44
44
  generationId: string;
45
45
  responseMessageId: string;
46
46
  messages: M[];
47
+ modelMessages: ModelMessage[];
47
48
  state: AIState<M>;
48
- history: ContractEvent<D>[];
49
+ session: Pick<HandlerContext<D>["session"], "state">;
49
50
  signal: AbortSignal;
50
51
  model: LanguageModel;
51
52
  tools: T;
@@ -60,18 +61,25 @@ type AgentMessageMetadata<M extends UIMessage, D extends AIEventDefs<M> & EventD
60
61
  type AgentResolverContext<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = {
61
62
  event: ContractEvent<D, "ai.generation.requested">;
62
63
  state: AIState<M>;
63
- history: ContractEvent<D>[];
64
+ session: Pick<HandlerContext<D>["session"], "state">;
64
65
  signal: AbortSignal;
65
66
  };
66
67
  type Resolvable<T, C> = T | ((context: C) => T | Promise<T>);
67
68
  type CompactionPolicy<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = {
68
69
  shouldCompact(context: AgentResolverContext<M, D> & {
69
70
  messages: M[];
71
+ modelMessages: ModelMessage[];
70
72
  }): boolean | Promise<boolean>;
71
73
  compact(context: AgentResolverContext<M, D> & {
72
74
  messages: M[];
75
+ modelMessages: ModelMessage[];
73
76
  }): M[] | Promise<M[]>;
74
77
  };
78
+ type AutomaticCompaction = {
79
+ thresholdTokens?: number;
80
+ instructions?: string;
81
+ };
82
+ type CompactionOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs> = false | AutomaticCompaction | CompactionPolicy<M, D>;
75
83
  type AgentGenerationSettings<T extends ToolSet> = AISDKStepSettings<T>;
76
84
  type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet> = {
77
85
  agent: AgentDefinition<M, D>;
@@ -92,7 +100,7 @@ type CreateHandlersOptions<M extends UIMessage, D extends AIEventDefs<M> & Event
92
100
  * The custom stream owns its metadata chunks.
93
101
  */
94
102
  generate?: AgentGenerate<M, D, T>;
95
- compaction?: CompactionPolicy<M, D>;
103
+ compaction?: Resolvable<CompactionOptions<M, D>, AgentResolverContext<M, D>>;
96
104
  /** Progress is durably flushed at either limit, whichever is reached first. */
97
105
  progress?: {
98
106
  maxChunks?: number;
@@ -112,5 +120,5 @@ declare function createHandlers<M extends UIMessage, D extends AIEventDefs<M> &
112
120
  /** Assemble an A2 server with the built-in agent handlers and app extensions. */
113
121
  declare function createAgentServer<M extends UIMessage, D extends AIEventDefs<M> & EventDefs, T extends ToolSet = ToolSet>(options: CreateAgentServerOptions<M, D, T>): A2Server<D>;
114
122
  //#endregion
115
- export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentMessageMetadata, AgentResolverContext, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolSet, createAgentServer, createHandlers, runWithHandlerContext };
123
+ export { AgentGenerate, AgentGenerateContext, AgentGenerationSettings, AgentMessageMetadata, AgentResolverContext, AutomaticCompaction, CompactionOptions, CompactionPolicy, CreateAgentServerOptions, CreateHandlersOptions, type Instructions, type LanguageModel, Resolvable, type ToolSet, createAgentServer, createHandlers, runWithHandlerContext };
116
124
  //# sourceMappingURL=ai-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":"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"}
1
+ {"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":"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"}