@mondaydotcomorg/atp-runtime 0.17.14
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.
- package/README.md +389 -0
- package/dist/approval/handler.d.ts +12 -0
- package/dist/approval/handler.d.ts.map +1 -0
- package/dist/approval/handler.js +17 -0
- package/dist/approval/handler.js.map +1 -0
- package/dist/approval/index.d.ts +17 -0
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +94 -0
- package/dist/approval/index.js.map +1 -0
- package/dist/approval/types.d.ts +21 -0
- package/dist/approval/types.d.ts.map +1 -0
- package/dist/approval/types.js +5 -0
- package/dist/approval/types.js.map +1 -0
- package/dist/cache/backends.d.ts +39 -0
- package/dist/cache/backends.d.ts.map +1 -0
- package/dist/cache/backends.js +167 -0
- package/dist/cache/backends.js.map +1 -0
- package/dist/cache/index.d.ts +32 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +103 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/types.d.ts +20 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/embedding/index.d.ts +39 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +162 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/types.d.ts +28 -0
- package/dist/embedding/types.d.ts.map +1 -0
- package/dist/embedding/types.js +5 -0
- package/dist/embedding/types.js.map +1 -0
- package/dist/embedding/utils.d.ts +11 -0
- package/dist/embedding/utils.d.ts.map +1 -0
- package/dist/embedding/utils.js +30 -0
- package/dist/embedding/utils.js.map +1 -0
- package/dist/embedding/vector-store.d.ts +64 -0
- package/dist/embedding/vector-store.d.ts.map +1 -0
- package/dist/embedding/vector-store.js +142 -0
- package/dist/embedding/vector-store.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/callback.d.ts +13 -0
- package/dist/llm/callback.d.ts.map +1 -0
- package/dist/llm/callback.js +19 -0
- package/dist/llm/callback.js.map +1 -0
- package/dist/llm/index.d.ts +29 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +118 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/replay.d.ts +47 -0
- package/dist/llm/replay.d.ts.map +1 -0
- package/dist/llm/replay.js +114 -0
- package/dist/llm/replay.js.map +1 -0
- package/dist/llm/types.d.ts +24 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/log/index.d.ts +12 -0
- package/dist/log/index.d.ts.map +1 -0
- package/dist/log/index.js +166 -0
- package/dist/log/index.js.map +1 -0
- package/dist/log/types.d.ts +19 -0
- package/dist/log/types.d.ts.map +1 -0
- package/dist/log/types.js +5 -0
- package/dist/log/types.js.map +1 -0
- package/dist/metadata/decorators.d.ts +27 -0
- package/dist/metadata/decorators.d.ts.map +1 -0
- package/dist/metadata/decorators.js +38 -0
- package/dist/metadata/decorators.js.map +1 -0
- package/dist/metadata/generated.d.ts +18 -0
- package/dist/metadata/generated.d.ts.map +1 -0
- package/dist/metadata/generated.js +290 -0
- package/dist/metadata/generated.js.map +1 -0
- package/dist/metadata/index.d.ts +11 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +45 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/types.d.ts +22 -0
- package/dist/metadata/types.d.ts.map +1 -0
- package/dist/metadata/types.js +6 -0
- package/dist/metadata/types.js.map +1 -0
- package/dist/pause/index.d.ts +11 -0
- package/dist/pause/index.d.ts.map +1 -0
- package/dist/pause/index.js +15 -0
- package/dist/pause/index.js.map +1 -0
- package/dist/pause/types.d.ts +46 -0
- package/dist/pause/types.d.ts.map +1 -0
- package/dist/pause/types.js +57 -0
- package/dist/pause/types.js.map +1 -0
- package/dist/progress/index.d.ts +19 -0
- package/dist/progress/index.d.ts.map +1 -0
- package/dist/progress/index.js +61 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/types.d.ts +7 -0
- package/dist/progress/types.d.ts.map +1 -0
- package/dist/progress/types.js +2 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/registry.d.ts +16 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +16 -0
- package/dist/registry.js.map +1 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +31 -0
- package/dist/utils.js.map +1 -0
- package/package.json +51 -0
- package/src/approval/handler.ts +26 -0
- package/src/approval/index.ts +95 -0
- package/src/approval/types.ts +23 -0
- package/src/cache/backends.ts +196 -0
- package/src/cache/index.ts +74 -0
- package/src/cache/types.ts +20 -0
- package/src/embedding/index.ts +153 -0
- package/src/embedding/types.ts +31 -0
- package/src/embedding/utils.ts +34 -0
- package/src/embedding/vector-store.ts +164 -0
- package/src/index.ts +35 -0
- package/src/llm/callback.ts +24 -0
- package/src/llm/index.ts +121 -0
- package/src/llm/replay.ts +141 -0
- package/src/llm/types.ts +29 -0
- package/src/log/index.ts +167 -0
- package/src/log/types.ts +21 -0
- package/src/metadata/decorators.ts +44 -0
- package/src/metadata/generated.ts +293 -0
- package/src/metadata/index.ts +61 -0
- package/src/metadata/types.ts +24 -0
- package/src/pause/index.ts +28 -0
- package/src/pause/types.ts +57 -0
- package/src/progress/index.ts +50 -0
- package/src/progress/types.ts +6 -0
- package/src/registry.ts +22 -0
- package/src/utils.ts +37 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTO-GENERATED - DO NOT EDIT
|
|
3
|
+
* Generated by scripts/generate-metadata.ts
|
|
4
|
+
*
|
|
5
|
+
* Hybrid approach:
|
|
6
|
+
* - ts-json-schema-generator (OSS) for most types
|
|
7
|
+
* - ts-morph fallback for types OSS can't handle (generics)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { RuntimeAPIMetadata } from './types';
|
|
11
|
+
|
|
12
|
+
export const GENERATED_METADATA: RuntimeAPIMetadata[] = [
|
|
13
|
+
{
|
|
14
|
+
"name": "approval",
|
|
15
|
+
"description": "Approval API - Request explicit human approval for sensitive operations",
|
|
16
|
+
"methods": [
|
|
17
|
+
{
|
|
18
|
+
"name": "request",
|
|
19
|
+
"description": "Request approval from a human",
|
|
20
|
+
"params": [
|
|
21
|
+
{
|
|
22
|
+
"name": "message",
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "The message to display to the user",
|
|
25
|
+
"optional": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "context",
|
|
29
|
+
"type": "Record<string, unknown>",
|
|
30
|
+
"description": "Optional context information about what needs approval",
|
|
31
|
+
"optional": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"returns": "Promise<ApprovalResponse>"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "cache",
|
|
40
|
+
"description": "Cache API - Store and retrieve data with optional TTL",
|
|
41
|
+
"methods": [
|
|
42
|
+
{
|
|
43
|
+
"name": "get",
|
|
44
|
+
"description": "Get a value from cache by key",
|
|
45
|
+
"params": [
|
|
46
|
+
{
|
|
47
|
+
"name": "key",
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "Cache key",
|
|
50
|
+
"optional": false
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"returns": "Promise<T | null>"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "set",
|
|
57
|
+
"description": "Set a value in cache with optional TTL",
|
|
58
|
+
"params": [
|
|
59
|
+
{
|
|
60
|
+
"name": "key",
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Cache key",
|
|
63
|
+
"optional": false
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "value",
|
|
67
|
+
"type": "unknown",
|
|
68
|
+
"description": "Value to cache",
|
|
69
|
+
"optional": false
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "ttl",
|
|
73
|
+
"type": "number",
|
|
74
|
+
"description": "Time to live in seconds",
|
|
75
|
+
"optional": true
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"returns": "Promise<void>"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "delete",
|
|
82
|
+
"description": "Delete a value from cache",
|
|
83
|
+
"params": [
|
|
84
|
+
{
|
|
85
|
+
"name": "key",
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "Cache key to delete",
|
|
88
|
+
"optional": false
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"returns": "Promise<void>"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "has",
|
|
95
|
+
"description": "Check if a key exists in cache",
|
|
96
|
+
"params": [
|
|
97
|
+
{
|
|
98
|
+
"name": "key",
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Cache key to check",
|
|
101
|
+
"optional": false
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"returns": "Promise<boolean>"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "clear",
|
|
108
|
+
"description": "Clear all cache entries",
|
|
109
|
+
"params": [],
|
|
110
|
+
"returns": "Promise<void>"
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "embedding",
|
|
116
|
+
"description": "Embedding API - Client-side embedding with server-side vector storage",
|
|
117
|
+
"methods": [
|
|
118
|
+
{
|
|
119
|
+
"name": "embed",
|
|
120
|
+
"description": "Request client to generate and store embeddings",
|
|
121
|
+
"params": [
|
|
122
|
+
{
|
|
123
|
+
"name": "input",
|
|
124
|
+
"type": "string | string[]",
|
|
125
|
+
"description": "Text(s) to embed",
|
|
126
|
+
"optional": false
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "metadata",
|
|
130
|
+
"type": "Record<string, unknown>",
|
|
131
|
+
"description": "Optional metadata to store with embeddings",
|
|
132
|
+
"optional": true
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"returns": "Promise<string | string[]>"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"name": "search",
|
|
139
|
+
"description": "Search stored embeddings by similarity",
|
|
140
|
+
"params": [
|
|
141
|
+
{
|
|
142
|
+
"name": "query",
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Search query text (will be embedded by client)",
|
|
145
|
+
"optional": false
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "options",
|
|
149
|
+
"type": "Omit<SearchOptions, 'query'>",
|
|
150
|
+
"description": "Search options (topK, minSimilarity, filter)",
|
|
151
|
+
"optional": true
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"returns": "Promise<SearchResult[]>"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "similarity",
|
|
158
|
+
"description": "Calculate cosine similarity between two embedding vectors",
|
|
159
|
+
"params": [
|
|
160
|
+
{
|
|
161
|
+
"name": "embedding1",
|
|
162
|
+
"type": "number[]",
|
|
163
|
+
"description": "First embedding vector",
|
|
164
|
+
"optional": false
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"name": "embedding2",
|
|
168
|
+
"type": "number[]",
|
|
169
|
+
"description": "Second embedding vector",
|
|
170
|
+
"optional": false
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"returns": "number"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "getAll",
|
|
177
|
+
"description": "Get all stored embeddings",
|
|
178
|
+
"params": [],
|
|
179
|
+
"returns": "EmbeddingRecord[]"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"name": "count",
|
|
183
|
+
"description": "Get count of stored embeddings",
|
|
184
|
+
"params": [],
|
|
185
|
+
"returns": "number"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"name": "llm",
|
|
191
|
+
"description": "LLM API - Large Language Model calls using client-provided LLM (requires client.provideLLM())",
|
|
192
|
+
"methods": [
|
|
193
|
+
{
|
|
194
|
+
"name": "call",
|
|
195
|
+
"description": "Make an LLM call with a prompt",
|
|
196
|
+
"params": [
|
|
197
|
+
{
|
|
198
|
+
"name": "options",
|
|
199
|
+
"type": "LLMCallOptions",
|
|
200
|
+
"description": "LLM call options including prompt",
|
|
201
|
+
"optional": false
|
|
202
|
+
}
|
|
203
|
+
],
|
|
204
|
+
"returns": "Promise<string>"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "extract",
|
|
208
|
+
"description": "Extract structured data from text using an LLM",
|
|
209
|
+
"params": [
|
|
210
|
+
{
|
|
211
|
+
"name": "options",
|
|
212
|
+
"type": "LLMExtractOptions",
|
|
213
|
+
"description": "Extraction options with JSON schema",
|
|
214
|
+
"optional": false
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"returns": "Promise<T>"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "classify",
|
|
221
|
+
"description": "Classify text into one of the provided categories",
|
|
222
|
+
"params": [
|
|
223
|
+
{
|
|
224
|
+
"name": "options",
|
|
225
|
+
"type": "LLMClassifyOptions",
|
|
226
|
+
"description": "Classification options with categories",
|
|
227
|
+
"optional": false
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
"returns": "Promise<string>"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "progress",
|
|
236
|
+
"description": "Progress API - Report execution progress to clients",
|
|
237
|
+
"methods": [
|
|
238
|
+
{
|
|
239
|
+
"name": "report",
|
|
240
|
+
"description": "Report progress with message and completion fraction",
|
|
241
|
+
"params": [
|
|
242
|
+
{
|
|
243
|
+
"name": "message",
|
|
244
|
+
"type": "string",
|
|
245
|
+
"description": "Progress message",
|
|
246
|
+
"optional": false
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"name": "fraction",
|
|
250
|
+
"type": "number",
|
|
251
|
+
"description": "Completion fraction (0-1)",
|
|
252
|
+
"optional": false
|
|
253
|
+
}
|
|
254
|
+
],
|
|
255
|
+
"returns": "void"
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
];
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Type definitions extracted using ts-json-schema-generator
|
|
263
|
+
*/
|
|
264
|
+
export const TYPE_REGISTRY = [
|
|
265
|
+
{
|
|
266
|
+
"name": "ApprovalResponse",
|
|
267
|
+
"definition": "export interface ApprovalResponse<T = unknown> {\n\tapproved: boolean;\n\tresponse?: T;\n\ttimestamp: number;\n}"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"name": "SearchOptions",
|
|
271
|
+
"definition": "interface SearchOptions {\n query: string;\n topK?: number;\n minSimilarity?: number;\n filter?: Record<string, unknown>;\n}"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"name": "SearchResult",
|
|
275
|
+
"definition": "interface SearchResult {\n id: string;\n text: string;\n similarity: number;\n metadata?: Record<string, unknown>;\n}"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "EmbeddingRecord",
|
|
279
|
+
"definition": "interface EmbeddingRecord {\n id: string;\n text: string;\n embedding: number[];\n metadata?: Record<string, unknown>;\n}"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "LLMCallOptions",
|
|
283
|
+
"definition": "interface LLMCallOptions {\n prompt: string;\n context?: Record<string, unknown>;\n model?: string;\n maxTokens?: number;\n temperature?: number;\n systemPrompt?: string;\n}"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "LLMExtractOptions",
|
|
287
|
+
"definition": "interface LLMExtractOptions {\n prompt: string;\n context?: Record<string, unknown>;\n schema: unknown;\n}"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"name": "LLMClassifyOptions",
|
|
291
|
+
"definition": "interface LLMClassifyOptions {\n text: string;\n categories: string[];\n context?: Record<string, unknown>;\n}"
|
|
292
|
+
}
|
|
293
|
+
];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata and Type Generation Utilities
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export type { RuntimeAPIParam, RuntimeAPIMethod, RuntimeAPIMetadata } from './types.js';
|
|
6
|
+
export { RuntimeAPI, RuntimeMethod } from './decorators.js';
|
|
7
|
+
|
|
8
|
+
import type { RuntimeAPIMetadata } from './types.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generates TypeScript definitions from runtime API metadata
|
|
12
|
+
*/
|
|
13
|
+
export function generateRuntimeTypes(apis: RuntimeAPIMetadata[]): string {
|
|
14
|
+
let typescript = '// Runtime SDK\ndeclare const atp: {\n';
|
|
15
|
+
|
|
16
|
+
for (const api of apis) {
|
|
17
|
+
typescript += ` /**\n`;
|
|
18
|
+
for (const line of api.description.split('\n')) {
|
|
19
|
+
typescript += ` * ${line}\n`;
|
|
20
|
+
}
|
|
21
|
+
typescript += ` */\n`;
|
|
22
|
+
|
|
23
|
+
typescript += ` ${api.name}: {\n`;
|
|
24
|
+
|
|
25
|
+
for (const method of api.methods) {
|
|
26
|
+
typescript += ` /**\n`;
|
|
27
|
+
typescript += ` * ${method.description}\n`;
|
|
28
|
+
|
|
29
|
+
for (const param of method.params) {
|
|
30
|
+
if (param.description) {
|
|
31
|
+
typescript += ` * @param ${param.name} - ${param.description}\n`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (method.returns !== 'void') {
|
|
36
|
+
const returnDesc = method.returns.startsWith('Promise')
|
|
37
|
+
? 'Promise resolving to result'
|
|
38
|
+
: 'Result value';
|
|
39
|
+
typescript += ` * @returns ${returnDesc}\n`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
typescript += ` */\n`;
|
|
43
|
+
|
|
44
|
+
const paramStrings = method.params.map((p) => {
|
|
45
|
+
const optional = p.optional ? '?' : '';
|
|
46
|
+
const type = p.type.includes('\n') ? p.type.replace(/\n/g, '\n ') : p.type;
|
|
47
|
+
return `${p.name}${optional}: ${type}`;
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
typescript += ` ${method.name}(${paramStrings.join(', ')}): ${method.returns};\n`;
|
|
51
|
+
|
|
52
|
+
typescript += `\n`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
typescript += ` };\n\n`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
typescript += '};\n\n';
|
|
59
|
+
|
|
60
|
+
return typescript;
|
|
61
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common metadata interface for runtime APIs
|
|
3
|
+
* Each runtime module exports its metadata for the type generator
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface RuntimeAPIParam {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
optional?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface RuntimeAPIMethod {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
params: RuntimeAPIParam[];
|
|
17
|
+
returns: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface RuntimeAPIMetadata {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
methods: RuntimeAPIMethod[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PauseExecutionError, CallbackType } from './types.js';
|
|
2
|
+
|
|
3
|
+
export {
|
|
4
|
+
PauseExecutionError,
|
|
5
|
+
CallbackType,
|
|
6
|
+
LLMOperation,
|
|
7
|
+
EmbeddingOperation,
|
|
8
|
+
ApprovalOperation,
|
|
9
|
+
ToolOperation,
|
|
10
|
+
} from './types.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Helper to create pause error
|
|
14
|
+
*/
|
|
15
|
+
export function pauseForCallback(
|
|
16
|
+
type: CallbackType,
|
|
17
|
+
operation: string,
|
|
18
|
+
payload: Record<string, unknown>
|
|
19
|
+
): never {
|
|
20
|
+
throw new PauseExecutionError(type, operation, payload);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Check if error is a pause request
|
|
25
|
+
*/
|
|
26
|
+
export function isPauseError(error: unknown): error is PauseExecutionError {
|
|
27
|
+
return error instanceof PauseExecutionError;
|
|
28
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callback types that can pause execution
|
|
3
|
+
*/
|
|
4
|
+
export enum CallbackType {
|
|
5
|
+
LLM = 'llm',
|
|
6
|
+
APPROVAL = 'approval',
|
|
7
|
+
EMBEDDING = 'embedding',
|
|
8
|
+
TOOL = 'tool',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* LLM callback operations
|
|
13
|
+
*/
|
|
14
|
+
export enum LLMOperation {
|
|
15
|
+
CALL = 'call',
|
|
16
|
+
EXTRACT = 'extract',
|
|
17
|
+
CLASSIFY = 'classify',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Embedding callback operations
|
|
22
|
+
*/
|
|
23
|
+
export enum EmbeddingOperation {
|
|
24
|
+
EMBED = 'embed',
|
|
25
|
+
SEARCH = 'search',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Approval callback operations
|
|
30
|
+
*/
|
|
31
|
+
export enum ApprovalOperation {
|
|
32
|
+
REQUEST = 'request',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Tool callback operations
|
|
37
|
+
*/
|
|
38
|
+
export enum ToolOperation {
|
|
39
|
+
CALL = 'call',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Thrown when execution needs to pause for client callback
|
|
44
|
+
*/
|
|
45
|
+
export class PauseExecutionError extends Error {
|
|
46
|
+
public readonly type: CallbackType;
|
|
47
|
+
public readonly operation: string;
|
|
48
|
+
public readonly payload: Record<string, unknown>;
|
|
49
|
+
|
|
50
|
+
constructor(type: CallbackType, operation: string, payload: Record<string, unknown>) {
|
|
51
|
+
super(`Execution paused: waiting for ${type}.${operation}`);
|
|
52
|
+
this.name = 'PauseExecutionError';
|
|
53
|
+
this.type = type;
|
|
54
|
+
this.operation = operation;
|
|
55
|
+
this.payload = payload;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress API - Clean refactored version with decorators
|
|
3
|
+
*
|
|
4
|
+
* Benefits:
|
|
5
|
+
* - No duplication between implementation and metadata
|
|
6
|
+
* - Types auto-detected from TypeScript signatures
|
|
7
|
+
*/
|
|
8
|
+
import { RuntimeAPI, RuntimeMethod } from '../metadata/decorators.js';
|
|
9
|
+
import type { ProgressCallback } from './types.js';
|
|
10
|
+
|
|
11
|
+
export type { ProgressCallback } from './types.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Global progress callback (set by executor)
|
|
15
|
+
*/
|
|
16
|
+
let progressCallback: ProgressCallback | null = null;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Set the progress callback handler
|
|
20
|
+
*/
|
|
21
|
+
export function setProgressCallback(callback: ProgressCallback | null): void {
|
|
22
|
+
progressCallback = callback;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Progress Runtime API
|
|
27
|
+
*
|
|
28
|
+
* Allows reporting execution progress to clients
|
|
29
|
+
*/
|
|
30
|
+
@RuntimeAPI('progress', 'Progress API - Report execution progress to clients')
|
|
31
|
+
class ProgressAPI {
|
|
32
|
+
/**
|
|
33
|
+
* Report progress with message and completion fraction
|
|
34
|
+
*/
|
|
35
|
+
@RuntimeMethod('Report progress with message and completion fraction', {
|
|
36
|
+
message: { description: 'Progress message' },
|
|
37
|
+
fraction: { description: 'Completion fraction (0-1)' },
|
|
38
|
+
})
|
|
39
|
+
report(message: string, fraction: number): void {
|
|
40
|
+
if (progressCallback) {
|
|
41
|
+
try {
|
|
42
|
+
progressCallback(message, fraction);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Progress callback error:', error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const progress = new ProgressAPI();
|
package/src/registry.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime API Registry
|
|
3
|
+
*
|
|
4
|
+
*/
|
|
5
|
+
import type { RuntimeAPIMetadata } from './metadata/index.js';
|
|
6
|
+
import { GENERATED_METADATA } from './metadata/generated.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Get all registered runtime APIs metadata
|
|
10
|
+
*
|
|
11
|
+
* This is generated at BUILD TIME by ts-morph, not at runtime
|
|
12
|
+
*/
|
|
13
|
+
export function getAllAPIs(): RuntimeAPIMetadata[] {
|
|
14
|
+
return GENERATED_METADATA;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Get metadata for a specific API by name
|
|
19
|
+
*/
|
|
20
|
+
export function getAPI(name: string): RuntimeAPIMetadata | undefined {
|
|
21
|
+
return GENERATED_METADATA.find((api) => api.name === name);
|
|
22
|
+
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface RetryOptions {
|
|
2
|
+
maxAttempts: number;
|
|
3
|
+
delayMs: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const utils = {
|
|
7
|
+
async sleep(ms: number): Promise<void> {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
async retry<T>(fn: () => Promise<T>, options: RetryOptions): Promise<T> {
|
|
12
|
+
let lastError: Error | undefined;
|
|
13
|
+
for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {
|
|
14
|
+
try {
|
|
15
|
+
return await fn();
|
|
16
|
+
} catch (error) {
|
|
17
|
+
lastError = error as Error;
|
|
18
|
+
if (attempt < options.maxAttempts) {
|
|
19
|
+
await this.sleep(options.delayMs);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
throw lastError;
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
async parallel<T>(tasks: Array<() => Promise<T>>): Promise<T[]> {
|
|
27
|
+
return Promise.all(tasks.map((task) => task()));
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
async sequence<T>(tasks: Array<() => Promise<T>>): Promise<T[]> {
|
|
31
|
+
const results: T[] = [];
|
|
32
|
+
for (const task of tasks) {
|
|
33
|
+
results.push(await task());
|
|
34
|
+
}
|
|
35
|
+
return results;
|
|
36
|
+
},
|
|
37
|
+
};
|