@stacklink/sdk 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 (60) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +50 -0
  3. package/compatibility.json +30 -0
  4. package/dist/src/domain/knowledge-meta-tools.d.ts +12 -0
  5. package/dist/src/domain/knowledge-meta-tools.d.ts.map +1 -0
  6. package/dist/src/domain/knowledge-meta-tools.js +38 -0
  7. package/dist/src/domain/knowledge-meta-tools.js.map +1 -0
  8. package/dist/src/domain/memory-contract.d.ts +3399 -0
  9. package/dist/src/domain/memory-contract.d.ts.map +1 -0
  10. package/dist/src/domain/memory-contract.js +931 -0
  11. package/dist/src/domain/memory-contract.js.map +1 -0
  12. package/dist/src/domain/memory-meta-tools.d.ts +5 -0
  13. package/dist/src/domain/memory-meta-tools.d.ts.map +1 -0
  14. package/dist/src/domain/memory-meta-tools.js +18 -0
  15. package/dist/src/domain/memory-meta-tools.js.map +1 -0
  16. package/dist/src/domain/platform-mcp-tools.d.ts +3 -0
  17. package/dist/src/domain/platform-mcp-tools.d.ts.map +1 -0
  18. package/dist/src/domain/platform-mcp-tools.js +30 -0
  19. package/dist/src/domain/platform-mcp-tools.js.map +1 -0
  20. package/dist/src/domain/provider-branding.d.ts +27 -0
  21. package/dist/src/domain/provider-branding.d.ts.map +1 -0
  22. package/dist/src/domain/provider-branding.js +256 -0
  23. package/dist/src/domain/provider-branding.js.map +1 -0
  24. package/dist/src/domain/stacklink-meta-tools.d.ts +80 -0
  25. package/dist/src/domain/stacklink-meta-tools.d.ts.map +1 -0
  26. package/dist/src/domain/stacklink-meta-tools.js +456 -0
  27. package/dist/src/domain/stacklink-meta-tools.js.map +1 -0
  28. package/dist/src/sdk/claude-agent.d.ts +14 -0
  29. package/dist/src/sdk/claude-agent.d.ts.map +1 -0
  30. package/dist/src/sdk/claude-agent.js +15 -0
  31. package/dist/src/sdk/claude-agent.js.map +1 -0
  32. package/dist/src/sdk/framework-tools.d.ts +19 -0
  33. package/dist/src/sdk/framework-tools.d.ts.map +1 -0
  34. package/dist/src/sdk/framework-tools.js +26 -0
  35. package/dist/src/sdk/framework-tools.js.map +1 -0
  36. package/dist/src/sdk/index.d.ts +3443 -0
  37. package/dist/src/sdk/index.d.ts.map +1 -0
  38. package/dist/src/sdk/index.js +2782 -0
  39. package/dist/src/sdk/index.js.map +1 -0
  40. package/dist/src/sdk/langchain.d.ts +9 -0
  41. package/dist/src/sdk/langchain.d.ts.map +1 -0
  42. package/dist/src/sdk/langchain.js +11 -0
  43. package/dist/src/sdk/langchain.js.map +1 -0
  44. package/dist/src/sdk/memory-lifecycle.d.ts +75 -0
  45. package/dist/src/sdk/memory-lifecycle.d.ts.map +1 -0
  46. package/dist/src/sdk/memory-lifecycle.js +128 -0
  47. package/dist/src/sdk/memory-lifecycle.js.map +1 -0
  48. package/dist/src/sdk/openai-agents.d.ts +45 -0
  49. package/dist/src/sdk/openai-agents.d.ts.map +1 -0
  50. package/dist/src/sdk/openai-agents.js +182 -0
  51. package/dist/src/sdk/openai-agents.js.map +1 -0
  52. package/dist/src/sdk/openai.d.ts +12 -0
  53. package/dist/src/sdk/openai.d.ts.map +1 -0
  54. package/dist/src/sdk/openai.js +271 -0
  55. package/dist/src/sdk/openai.js.map +1 -0
  56. package/dist/src/sdk/vercel-ai.d.ts +11 -0
  57. package/dist/src/sdk/vercel-ai.d.ts.map +1 -0
  58. package/dist/src/sdk/vercel-ai.js +226 -0
  59. package/dist/src/sdk/vercel-ai.js.map +1 -0
  60. package/package.json +81 -0
@@ -0,0 +1,182 @@
1
+ import { createStacklinkMemoryLifecycle, } from './memory-lifecycle.js';
2
+ import { tool } from '@openai/agents';
3
+ import { listStacklinkFrameworkTools } from './framework-tools.js';
4
+ export function createStacklinkOpenAIAgentsTools(session) {
5
+ return listStacklinkFrameworkTools(session).map((entry) => tool({
6
+ name: entry.name,
7
+ description: entry.description,
8
+ parameters: openAIAgentsParameters(entry.parameters),
9
+ strict: false,
10
+ execute: async (input) => serializeAgentToolResult(await entry.execute(input)),
11
+ }));
12
+ }
13
+ function openAIAgentsParameters(parameters) {
14
+ return {
15
+ ...parameters,
16
+ type: 'object',
17
+ properties: isRecord(parameters.properties) ? parameters.properties : {},
18
+ required: Array.isArray(parameters.required)
19
+ ? parameters.required.filter((value) => typeof value === 'string')
20
+ : [],
21
+ additionalProperties: true,
22
+ };
23
+ }
24
+ function serializeAgentToolResult(result) {
25
+ if (typeof result === 'string')
26
+ return result;
27
+ if (result === undefined)
28
+ return 'null';
29
+ return JSON.stringify(result, (_key, value) => (typeof value === 'bigint' ? value.toString() : value));
30
+ }
31
+ function isRecord(value) {
32
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
33
+ }
34
+ export function withStacklinkMemory(runner, options) {
35
+ const lifecycle = createStacklinkMemoryLifecycle({
36
+ ...options,
37
+ applicationKey: options.applicationKey ?? 'openai-agents',
38
+ });
39
+ const contextHeading = options.contextHeading ?? 'Stacklink Memory context';
40
+ return new Proxy(runner, {
41
+ get(target, property, receiver) {
42
+ if (property !== 'run') {
43
+ const value = Reflect.get(target, property, receiver);
44
+ return typeof value === 'function' ? value.bind(target) : value;
45
+ }
46
+ return async (agent, input, runOptions = {}) => {
47
+ const userText = options.resolveQuery?.({ agent, input, options: runOptions }) ?? agentsInputUserText(input);
48
+ const recalled = await lifecycle.recall(userText);
49
+ const runFilter = typeof runOptions.callModelInputFilter === 'function'
50
+ ? runOptions.callModelInputFilter
51
+ : runner.config?.callModelInputFilter;
52
+ const nextOptions = {
53
+ ...runOptions,
54
+ ...(recalled ? {
55
+ callModelInputFilter: async (args) => {
56
+ const filtered = runFilter ? await runFilter(args) : args.modelData;
57
+ return {
58
+ ...filtered,
59
+ instructions: appendInstructions(filtered.instructions, `${contextHeading}\n\n${recalled.promptText}`),
60
+ };
61
+ },
62
+ } : {}),
63
+ };
64
+ const result = await runner.run(agent, input, nextOptions);
65
+ if (isStreamedAgentResult(result)) {
66
+ return wrapStreamedAgentResult(result, async () => {
67
+ await captureAgentResult(result, agent, input, userText);
68
+ });
69
+ }
70
+ await captureAgentResult(result, agent, input, userText);
71
+ return result;
72
+ };
73
+ },
74
+ });
75
+ async function captureAgentResult(result, agent, input, userText) {
76
+ const record = asRecord(result);
77
+ if (!record
78
+ || record.error
79
+ || record.cancelled === true
80
+ || (Array.isArray(record.interruptions) && record.interruptions.length > 0)) {
81
+ return;
82
+ }
83
+ const assistantText = finalOutputText(record.finalOutput);
84
+ const responseId = stringValue(record.lastResponseId);
85
+ const turnId = options.resolveTurnId?.({ agent, input, result, responseId });
86
+ const turn = turnId ? { turnId } : {};
87
+ await lifecycle.captureCompletedTurn({
88
+ userText,
89
+ assistantText,
90
+ turn,
91
+ framework: 'openai-agents-sdk',
92
+ responseId,
93
+ });
94
+ }
95
+ }
96
+ function wrapStreamedAgentResult(result, capture) {
97
+ const completed = Promise.resolve(result.completed).then(async () => {
98
+ await capture();
99
+ });
100
+ return new Proxy(result, {
101
+ get(target, property, receiver) {
102
+ if (property === 'completed')
103
+ return completed;
104
+ if (property === Symbol.asyncIterator) {
105
+ const iteratorFactory = Reflect.get(target, property, receiver);
106
+ if (typeof iteratorFactory !== 'function')
107
+ return iteratorFactory;
108
+ return () => {
109
+ const iterator = iteratorFactory.call(target);
110
+ return {
111
+ async next() {
112
+ const next = await iterator.next();
113
+ if (next.done)
114
+ await completed;
115
+ return next;
116
+ },
117
+ async return() {
118
+ return iterator.return
119
+ ? iterator.return()
120
+ : { done: true, value: undefined };
121
+ },
122
+ async throw(error) {
123
+ if (iterator.throw)
124
+ return iterator.throw(error);
125
+ throw error;
126
+ },
127
+ };
128
+ };
129
+ }
130
+ const value = Reflect.get(target, property, receiver);
131
+ return typeof value === 'function' ? value.bind(target) : value;
132
+ },
133
+ });
134
+ }
135
+ function isStreamedAgentResult(value) {
136
+ const record = asRecord(value);
137
+ return Boolean(record)
138
+ && Boolean(record?.completed)
139
+ && typeof record?.[Symbol.asyncIterator] === 'function';
140
+ }
141
+ function agentsInputUserText(input) {
142
+ if (typeof input === 'string')
143
+ return input;
144
+ if (!Array.isArray(input))
145
+ return '';
146
+ for (let index = input.length - 1; index >= 0; index -= 1) {
147
+ const item = asRecord(input[index]);
148
+ if (item?.role !== 'user')
149
+ continue;
150
+ if (typeof item.content === 'string')
151
+ return item.content;
152
+ if (!Array.isArray(item.content))
153
+ return '';
154
+ return item.content.flatMap((part) => {
155
+ const content = asRecord(part);
156
+ if ((content?.type === 'input_text' || content?.type === 'text') && typeof content.text === 'string') {
157
+ return [content.text];
158
+ }
159
+ return [];
160
+ }).join('\n');
161
+ }
162
+ return '';
163
+ }
164
+ function appendInstructions(existing, memory) {
165
+ return existing && existing.length > 0 ? `${existing}\n\n${memory}` : memory;
166
+ }
167
+ function finalOutputText(value) {
168
+ if (typeof value === 'string')
169
+ return value;
170
+ if (value === undefined || value === null)
171
+ return '';
172
+ return JSON.stringify(value);
173
+ }
174
+ function asRecord(value) {
175
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value)
176
+ ? value
177
+ : undefined;
178
+ }
179
+ function stringValue(value) {
180
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
181
+ }
182
+ //# sourceMappingURL=openai-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-agents.js","sourceRoot":"","sources":["../../../../../src/sdk/openai-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type OpenAI from 'openai';
2
+ import { type StacklinkMemoryLifecycleOptions } from './memory-lifecycle.js';
3
+ export interface StacklinkOpenAIMemoryOptions extends StacklinkMemoryLifecycleOptions {
4
+ contextHeading?: string | undefined;
5
+ resolveTurnId?: ((input: {
6
+ surface: 'responses' | 'chat.completions';
7
+ request: Record<string, unknown>;
8
+ responseId?: string | undefined;
9
+ }) => string | undefined) | undefined;
10
+ }
11
+ export declare function withStacklinkMemory<TClient extends OpenAI>(client: TClient, options: StacklinkOpenAIMemoryOptions): TClient;
12
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAEL,KAAK,+BAA+B,EAErC,MAAM,uBAAuB,CAAC;AAC/B,MAAM,WAAW,4BAA6B,SAAQ,+BAA+B;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QACvB,OAAO,EAAE,WAAW,GAAG,kBAAkB,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACjC,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACvC;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,EACxD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAkGT"}
@@ -0,0 +1,271 @@
1
+ import { Stream } from 'openai/streaming';
2
+ import { createStacklinkMemoryLifecycle, } from './memory-lifecycle.js';
3
+ export function withStacklinkMemory(client, options) {
4
+ const lifecycle = createStacklinkMemoryLifecycle({
5
+ ...options,
6
+ applicationKey: options.applicationKey ?? 'openai',
7
+ });
8
+ const contextHeading = options.contextHeading ?? 'Stacklink Memory context';
9
+ const responses = proxyResource(client.responses, {
10
+ create: (original, body, requestOptions) => {
11
+ const userText = responseRequestUserText(body.input);
12
+ return deferredOpenAIRequest(async () => {
13
+ const recalled = await lifecycle.recall(userText);
14
+ const nextBody = recalled
15
+ ? injectResponseMemory(body, contextHeading, recalled.promptText)
16
+ : { ...body };
17
+ return { request: original(nextBody, requestOptions) };
18
+ }, async (value) => {
19
+ if (body.stream === true && isOpenAIStream(value)) {
20
+ return wrapResponseStream(value, async (assistantText, responseId) => {
21
+ await capture('responses', body, userText, assistantText, responseId);
22
+ });
23
+ }
24
+ const response = asRecord(value);
25
+ if (response?.status === 'completed') {
26
+ await capture('responses', body, userText, typeof response.output_text === 'string' ? response.output_text : '', stringValue(response.id));
27
+ }
28
+ return value;
29
+ });
30
+ },
31
+ });
32
+ const completions = proxyResource(client.chat.completions, {
33
+ create: (original, body, requestOptions) => {
34
+ const userText = chatRequestUserText(body.messages);
35
+ return deferredOpenAIRequest(async () => {
36
+ const recalled = await lifecycle.recall(userText);
37
+ const nextBody = recalled
38
+ ? injectChatMemory(body, contextHeading, recalled.promptText)
39
+ : { ...body };
40
+ return { request: original(nextBody, requestOptions) };
41
+ }, async (value) => {
42
+ if (body.stream === true && isOpenAIStream(value)) {
43
+ return wrapChatCompletionStream(value, async (assistantText, responseId) => {
44
+ await capture('chat.completions', body, userText, assistantText, responseId);
45
+ });
46
+ }
47
+ const response = asRecord(value);
48
+ const choice = Array.isArray(response?.choices) ? asRecord(response.choices[0]) : undefined;
49
+ const message = asRecord(choice?.message);
50
+ const finishReason = stringValue(choice?.finish_reason);
51
+ if (finishReason === 'stop' || finishReason === 'length') {
52
+ await capture('chat.completions', body, userText, stringValue(message?.content) ?? '', stringValue(response?.id));
53
+ }
54
+ return value;
55
+ });
56
+ },
57
+ });
58
+ const chat = proxyResource(client.chat, { completions });
59
+ const wrapped = proxyResource(client, { responses, chat });
60
+ return wrapped;
61
+ async function capture(surface, request, userText, assistantText, responseId) {
62
+ const resolvedTurnId = options.resolveTurnId?.({ surface, request, responseId });
63
+ const turn = {
64
+ ...(resolvedTurnId ? { turnId: resolvedTurnId } : {}),
65
+ };
66
+ await lifecycle.captureCompletedTurn({
67
+ userText,
68
+ assistantText,
69
+ turn,
70
+ framework: surface === 'responses' ? 'openai-responses' : 'openai-chat-completions',
71
+ responseId,
72
+ });
73
+ }
74
+ }
75
+ function injectResponseMemory(body, heading, promptText) {
76
+ const existing = typeof body.instructions === 'string' && body.instructions.length > 0
77
+ ? body.instructions
78
+ : undefined;
79
+ return {
80
+ ...body,
81
+ instructions: [existing, `${heading}\n\n${promptText}`].filter((value) => value !== undefined).join('\n\n'),
82
+ };
83
+ }
84
+ function injectChatMemory(body, heading, promptText) {
85
+ const messages = Array.isArray(body.messages) ? body.messages : [];
86
+ const firstConversationMessage = messages.findIndex((message) => {
87
+ const role = stringValue(asRecord(message)?.role);
88
+ return role !== 'system' && role !== 'developer';
89
+ });
90
+ const insertionIndex = firstConversationMessage === -1 ? messages.length : firstConversationMessage;
91
+ return {
92
+ ...body,
93
+ messages: [
94
+ ...messages.slice(0, insertionIndex),
95
+ { role: 'system', content: `${heading}\n\n${promptText}` },
96
+ ...messages.slice(insertionIndex),
97
+ ],
98
+ };
99
+ }
100
+ function responseRequestUserText(input) {
101
+ if (typeof input === 'string')
102
+ return input;
103
+ if (!Array.isArray(input))
104
+ return '';
105
+ for (let index = input.length - 1; index >= 0; index -= 1) {
106
+ const item = asRecord(input[index]);
107
+ if (item?.role !== 'user')
108
+ continue;
109
+ if (typeof item.content === 'string')
110
+ return item.content;
111
+ if (!Array.isArray(item.content))
112
+ return '';
113
+ return item.content.flatMap((part) => {
114
+ const content = asRecord(part);
115
+ return content?.type === 'input_text' && typeof content.text === 'string' ? [content.text] : [];
116
+ }).join('\n');
117
+ }
118
+ return '';
119
+ }
120
+ function chatRequestUserText(messages) {
121
+ if (!Array.isArray(messages))
122
+ return '';
123
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
124
+ const message = asRecord(messages[index]);
125
+ if (message?.role !== 'user')
126
+ continue;
127
+ if (typeof message.content === 'string')
128
+ return message.content;
129
+ if (!Array.isArray(message.content))
130
+ return '';
131
+ return message.content.flatMap((part) => {
132
+ const content = asRecord(part);
133
+ return content?.type === 'text' && typeof content.text === 'string' ? [content.text] : [];
134
+ }).join('\n');
135
+ }
136
+ return '';
137
+ }
138
+ function wrapResponseStream(source, capture) {
139
+ let assistantText = '';
140
+ let completedResponseId;
141
+ let completed = false;
142
+ return observeOpenAIStream(source, {
143
+ item(value) {
144
+ const event = asRecord(value);
145
+ if (event?.type === 'response.output_text.delta' && typeof event.delta === 'string') {
146
+ assistantText += event.delta;
147
+ }
148
+ if (event?.type === 'response.completed') {
149
+ completed = true;
150
+ const response = asRecord(event.response);
151
+ completedResponseId = stringValue(response?.id);
152
+ if (assistantText.length === 0 && typeof response?.output_text === 'string') {
153
+ assistantText = response.output_text;
154
+ }
155
+ }
156
+ },
157
+ async complete() {
158
+ if (completed)
159
+ await capture(assistantText, completedResponseId);
160
+ },
161
+ });
162
+ }
163
+ function wrapChatCompletionStream(source, capture) {
164
+ let assistantText = '';
165
+ let responseId;
166
+ let finishReason;
167
+ return observeOpenAIStream(source, {
168
+ item(value) {
169
+ const chunk = asRecord(value);
170
+ responseId ??= stringValue(chunk?.id);
171
+ const choice = Array.isArray(chunk?.choices) ? asRecord(chunk.choices[0]) : undefined;
172
+ const delta = asRecord(choice?.delta);
173
+ if (typeof delta?.content === 'string')
174
+ assistantText += delta.content;
175
+ finishReason = stringValue(choice?.finish_reason) ?? finishReason;
176
+ },
177
+ async complete() {
178
+ if (finishReason === 'stop' || finishReason === 'length') {
179
+ await capture(assistantText, responseId);
180
+ }
181
+ },
182
+ });
183
+ }
184
+ function observeOpenAIStream(source, observer) {
185
+ return new Stream(() => {
186
+ const iterator = source[Symbol.asyncIterator]();
187
+ let completed = false;
188
+ return {
189
+ async next() {
190
+ const result = await iterator.next();
191
+ if (result.done) {
192
+ if (!completed) {
193
+ completed = true;
194
+ await observer.complete();
195
+ }
196
+ return result;
197
+ }
198
+ observer.item(result.value);
199
+ return result;
200
+ },
201
+ async return() {
202
+ return iterator.return
203
+ ? iterator.return()
204
+ : { done: true, value: undefined };
205
+ },
206
+ async throw(error) {
207
+ if (iterator.throw)
208
+ return iterator.throw(error);
209
+ throw error;
210
+ },
211
+ };
212
+ }, source.controller);
213
+ }
214
+ function deferredOpenAIRequest(create, transform) {
215
+ const request = Promise.resolve().then(create);
216
+ return new DeferredOpenAIRequest(request, transform);
217
+ }
218
+ class DeferredOpenAIRequest extends Promise {
219
+ requestPromise;
220
+ dataPromise;
221
+ static get [Symbol.species]() {
222
+ return Promise;
223
+ }
224
+ constructor(requestPromise, transform) {
225
+ const dataPromise = requestPromise.then(({ request }) => Promise.resolve(request).then(transform));
226
+ super((resolve, reject) => dataPromise.then(resolve, reject));
227
+ this.requestPromise = requestPromise;
228
+ this.dataPromise = dataPromise;
229
+ }
230
+ asResponse() {
231
+ return this.requestPromise.then(({ request }) => request.asResponse());
232
+ }
233
+ async withResponse() {
234
+ const [data, response] = await Promise.all([this.dataPromise, this.asResponse()]);
235
+ return {
236
+ data,
237
+ response,
238
+ request_id: response.headers.get('x-request-id'),
239
+ };
240
+ }
241
+ }
242
+ function proxyResource(target, overrides) {
243
+ return new Proxy(target, {
244
+ get(resource, property, receiver) {
245
+ if (Object.hasOwn(overrides, property)) {
246
+ const override = overrides[property];
247
+ if (typeof override === 'function') {
248
+ const original = Reflect.get(resource, property, receiver);
249
+ if (typeof original !== 'function')
250
+ return override;
251
+ return (...args) => override(original.bind(resource), ...args);
252
+ }
253
+ return override;
254
+ }
255
+ const value = Reflect.get(resource, property, receiver);
256
+ return typeof value === 'function' ? value.bind(resource) : value;
257
+ },
258
+ });
259
+ }
260
+ function isOpenAIStream(value) {
261
+ return value instanceof Stream;
262
+ }
263
+ function asRecord(value) {
264
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value)
265
+ ? value
266
+ : undefined;
267
+ }
268
+ function stringValue(value) {
269
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
270
+ }
271
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../../src/sdk/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type LanguageModel, type ToolSet } from 'ai';
2
+ import type { LanguageModelV4Middleware } from '@ai-sdk/provider';
3
+ import { type StacklinkMemoryLifecycleOptions } from './memory-lifecycle.js';
4
+ import { type StacklinkFrameworkSession } from './framework-tools.js';
5
+ export declare function createStacklinkVercelTools(session: StacklinkFrameworkSession): ToolSet;
6
+ export interface StacklinkVercelMemoryOptions extends StacklinkMemoryLifecycleOptions {
7
+ contextHeading?: string | undefined;
8
+ }
9
+ export declare function withStacklinkMemory(model: Exclude<LanguageModel, string>, options: StacklinkVercelMemoryOptions): import("@ai-sdk/provider").LanguageModelV4;
10
+ export declare function createStacklinkMemoryMiddleware(options: StacklinkVercelMemoryOptions): LanguageModelV4Middleware;
11
+ //# sourceMappingURL=vercel-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/vercel-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAC3F,OAAO,KAAK,EAIV,yBAAyB,EAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,+BAA+B,EAGrC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA+B,KAAK,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAST;AAED,MAAM,WAAW,4BAA6B,SAAQ,+BAA+B;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAOD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,EACrC,OAAO,EAAE,4BAA4B,8CAMtC;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,4BAA4B,GACpC,yBAAyB,CAkF3B"}