openkbs 0.0.64 → 0.0.66
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/elastic/README.md +1150 -0
- package/elastic/functions.md +328 -0
- package/elastic/postgres.md +287 -0
- package/elastic/pulse.md +386 -0
- package/elastic/storage.md +291 -0
- package/package.json +1 -1
- package/src/actions.js +76 -92
- package/src/index.js +23 -10
- package/src/utils.js +8 -4
- package/templates/.claude/skills/openkbs/SKILL.md +184 -0
- package/templates/.claude/skills/openkbs/metadata.json +1 -0
- package/templates/.claude/skills/openkbs/reference/backend-sdk.md +428 -0
- package/templates/.claude/skills/openkbs/reference/commands.md +370 -0
- package/templates/.claude/skills/openkbs/reference/elastic-services.md +327 -0
- package/templates/.claude/skills/openkbs/reference/frontend-sdk.md +299 -0
- package/version.json +3 -3
- package/templates/.openkbs/knowledge/metadata.json +0 -3
- package/templates/CLAUDE.md +0 -655
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/app/icon.png +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/app/instructions.txt +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/app/settings.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/scripts/run_job.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/scripts/utils/agent_client.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/actions.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/handler.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/onRequest.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/onRequest.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/onResponse.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Events/onResponse.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Frontend/contentRender.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-copywriter-agent/src/Frontend/contentRender.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/README.md +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/app/instructions.txt +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/app/settings.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Events/actions.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Events/onRequest.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Events/onRequest.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Events/onResponse.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Events/onResponse.json +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Frontend/contentRender.js +0 -0
- /package/templates/{.openkbs/knowledge → .claude/skills/openkbs}/examples/ai-marketing-agent/src/Frontend/contentRender.json +0 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
# Backend SDK Reference
|
|
2
|
+
|
|
3
|
+
The `openkbs` object is available globally in all backend handlers (`onRequest.js`, `onResponse.js`, `actions.js`, `onCronjob.js`, `onPublicAPIRequest.js`).
|
|
4
|
+
|
|
5
|
+
## Search & Content
|
|
6
|
+
|
|
7
|
+
### googleSearch(query, options)
|
|
8
|
+
|
|
9
|
+
Search Google for information.
|
|
10
|
+
|
|
11
|
+
```javascript
|
|
12
|
+
// Web search
|
|
13
|
+
const results = await openkbs.googleSearch('AI trends 2025');
|
|
14
|
+
// Returns: [{ title, link, snippet, pagemap }, ...]
|
|
15
|
+
|
|
16
|
+
// Image search
|
|
17
|
+
const images = await openkbs.googleSearch('sunset photography', { searchType: 'image' });
|
|
18
|
+
// pagemap.cse_image[0].src contains image URL
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### webpageToText(url, options)
|
|
22
|
+
|
|
23
|
+
Extract text content from a webpage.
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
const content = await openkbs.webpageToText('https://example.com');
|
|
27
|
+
// Returns: { content: "page text..." }
|
|
28
|
+
|
|
29
|
+
// With price parsing (extracts structured price data)
|
|
30
|
+
const content = await openkbs.webpageToText('https://shop.com/product', { parsePrice: true });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Image Generation
|
|
34
|
+
|
|
35
|
+
### generateImage(prompt, options)
|
|
36
|
+
|
|
37
|
+
Generate AI images using Gemini or GPT.
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
// Gemini model (default) - supports reference images for editing
|
|
41
|
+
const images = await openkbs.generateImage('sunset over mountains', {
|
|
42
|
+
model: 'gemini-2.5-flash-image',
|
|
43
|
+
aspect_ratio: '16:9', // 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
|
|
44
|
+
n: 1,
|
|
45
|
+
imageUrls: ['reference.jpg'] // optional - for editing/variations
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// GPT model - better for text in images
|
|
49
|
+
const images = await openkbs.generateImage('logo with text', {
|
|
50
|
+
model: 'gpt-image-1',
|
|
51
|
+
size: '1024x1024', // 1024x1024, 1536x1024, 1024x1536, auto
|
|
52
|
+
quality: 'high',
|
|
53
|
+
n: 1
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Returns: [{ b64_json: "base64..." }, ...]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### uploadImage(base64, filename, mimeType)
|
|
60
|
+
|
|
61
|
+
Upload image to permanent S3 storage.
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const uploaded = await openkbs.uploadImage(
|
|
65
|
+
images[0].b64_json,
|
|
66
|
+
'image.png',
|
|
67
|
+
'image/png'
|
|
68
|
+
);
|
|
69
|
+
console.log(uploaded.url); // https://file.openkbs.com/files/.../image.png
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Video Generation
|
|
73
|
+
|
|
74
|
+
### generateVideo(prompt, options)
|
|
75
|
+
|
|
76
|
+
Generate AI videos using Sora 2.
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
const video = await openkbs.generateVideo('cinematic sunset timelapse', {
|
|
80
|
+
video_model: 'sora-2', // or 'sora-2-pro' (higher quality)
|
|
81
|
+
seconds: 8, // 4, 8, or 12
|
|
82
|
+
size: '1280x720' // '1280x720' (landscape) or '720x1280' (portrait)
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// With reference image
|
|
86
|
+
const video = await openkbs.generateVideo('animate this scene', {
|
|
87
|
+
video_model: 'sora-2',
|
|
88
|
+
seconds: 8,
|
|
89
|
+
input_reference_url: 'https://example.com/reference.jpg'
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Returns: [{ status: 'pending'|'completed', video_id: '...', video_url: '...' }]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### checkVideoStatus(videoId)
|
|
96
|
+
|
|
97
|
+
Poll for video generation completion.
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
const status = await openkbs.checkVideoStatus(videoId);
|
|
101
|
+
|
|
102
|
+
if (status[0].status === 'completed') {
|
|
103
|
+
console.log(status[0].video_url);
|
|
104
|
+
} else if (status[0].status === 'pending') {
|
|
105
|
+
// Continue polling
|
|
106
|
+
} else if (status[0].status === 'failed') {
|
|
107
|
+
// Handle error
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Memory System (CRUD)
|
|
112
|
+
|
|
113
|
+
### createItem(params)
|
|
114
|
+
|
|
115
|
+
Create a new item.
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
await openkbs.createItem({
|
|
119
|
+
itemType: 'memory',
|
|
120
|
+
itemId: 'memory_user_name',
|
|
121
|
+
body: { value: 'John', updatedAt: new Date().toISOString() }
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### updateItem(params)
|
|
126
|
+
|
|
127
|
+
Update an existing item.
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
await openkbs.updateItem({
|
|
131
|
+
itemType: 'memory',
|
|
132
|
+
itemId: 'memory_user_name',
|
|
133
|
+
body: { value: 'Jane', updatedAt: new Date().toISOString() }
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### getItem(itemId)
|
|
138
|
+
|
|
139
|
+
Get a single item by ID.
|
|
140
|
+
|
|
141
|
+
```javascript
|
|
142
|
+
const result = await openkbs.getItem('memory_user_name');
|
|
143
|
+
console.log(result.item.body.value); // 'Jane'
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### fetchItems(params)
|
|
147
|
+
|
|
148
|
+
Fetch multiple items with filters.
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
const items = await openkbs.fetchItems({
|
|
152
|
+
itemType: 'memory',
|
|
153
|
+
beginsWith: 'memory_',
|
|
154
|
+
limit: 100
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
for (const { item, meta } of items.items) {
|
|
158
|
+
console.log(meta.itemId, item.body.value);
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### deleteItem(itemId)
|
|
163
|
+
|
|
164
|
+
Delete an item.
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
await openkbs.deleteItem('memory_user_name');
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Upsert Pattern
|
|
171
|
+
|
|
172
|
+
Common pattern for create-or-update:
|
|
173
|
+
|
|
174
|
+
```javascript
|
|
175
|
+
async function upsertItem(itemType, itemId, body) {
|
|
176
|
+
try {
|
|
177
|
+
await openkbs.updateItem({ itemType, itemId, body });
|
|
178
|
+
} catch (e) {
|
|
179
|
+
await openkbs.createItem({ itemType, itemId, body });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Scheduling
|
|
185
|
+
|
|
186
|
+
### Create Scheduled Task
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
await openkbs.kb({
|
|
190
|
+
action: 'createScheduledTask',
|
|
191
|
+
scheduledTime: Date.now() + 60 * 60 * 1000, // 1 hour from now
|
|
192
|
+
taskPayload: {
|
|
193
|
+
message: '[SCHEDULED_TASK] Reminder: Call mom',
|
|
194
|
+
createdAt: Date.now()
|
|
195
|
+
},
|
|
196
|
+
description: 'Call mom reminder'
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Get Scheduled Tasks
|
|
201
|
+
|
|
202
|
+
```javascript
|
|
203
|
+
const tasks = await openkbs.kb({ action: 'getScheduledTasks' });
|
|
204
|
+
// Returns: [{ timestamp, description, taskPayload }, ...]
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Delete Scheduled Task
|
|
208
|
+
|
|
209
|
+
```javascript
|
|
210
|
+
await openkbs.kb({
|
|
211
|
+
action: 'deleteScheduledTask',
|
|
212
|
+
timestamp: 1704067200000
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Deep Research (Async)
|
|
217
|
+
|
|
218
|
+
Autonomous research agent that searches the web and synthesizes reports. Takes 5-20 minutes.
|
|
219
|
+
|
|
220
|
+
### Start Research
|
|
221
|
+
|
|
222
|
+
```javascript
|
|
223
|
+
const researchData = await openkbs.deepResearch(query, params);
|
|
224
|
+
|
|
225
|
+
// query: string - The research topic
|
|
226
|
+
// params: object (optional)
|
|
227
|
+
// - previous_interaction_id: string - For follow-up questions on completed research
|
|
228
|
+
|
|
229
|
+
// Example:
|
|
230
|
+
const result = await openkbs.deepResearch('AI market trends 2025');
|
|
231
|
+
|
|
232
|
+
// With follow-up:
|
|
233
|
+
const followUp = await openkbs.deepResearch('What about healthcare?', {
|
|
234
|
+
previous_interaction_id: 'prev_interaction_id'
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// Returns:
|
|
238
|
+
// - status: 'in_progress' | 'completed'
|
|
239
|
+
// - interaction_id: string
|
|
240
|
+
// - prepaid_credits: number (when in_progress)
|
|
241
|
+
// - output: string (when completed)
|
|
242
|
+
// - usage: { input_tokens, output_tokens } (when completed)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Check Status
|
|
246
|
+
|
|
247
|
+
```javascript
|
|
248
|
+
const status = await openkbs.checkDeepResearchStatus(interactionId, prepaidCredits);
|
|
249
|
+
|
|
250
|
+
// interactionId: string - From previous deepResearch call
|
|
251
|
+
// prepaidCredits: number - From previous response (for billing)
|
|
252
|
+
|
|
253
|
+
// Returns same structure as deepResearch
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## MCP Integration
|
|
257
|
+
|
|
258
|
+
### Call MCP Tool
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
const result = await openkbs.mcp.callTool('brave-search', 'brave_web_search', {
|
|
262
|
+
query: 'React tutorials',
|
|
263
|
+
count: 10
|
|
264
|
+
});
|
|
265
|
+
// Returns: { content: [...] }
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Available MCP servers:
|
|
269
|
+
- `brave-search` - Web search (requires `BRAVE_API_KEY` secret)
|
|
270
|
+
- `github` - Repository management (requires `GITHUB_PERSONAL_ACCESS_TOKEN`)
|
|
271
|
+
- `slack` - Messaging (requires `SLACK_BOT_TOKEN`, `SLACK_TEAM_ID`)
|
|
272
|
+
|
|
273
|
+
## Chat Operations
|
|
274
|
+
|
|
275
|
+
### Create New Chat
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
await openkbs.chats({
|
|
279
|
+
chatTitle: 'Morning Briefing',
|
|
280
|
+
message: '[SCHEDULED_TASK] Create morning summary'
|
|
281
|
+
});
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Communication
|
|
285
|
+
|
|
286
|
+
### Send Email
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
await openkbs.sendMail(
|
|
290
|
+
'user@example.com',
|
|
291
|
+
'Subject Line',
|
|
292
|
+
'<h1>HTML Body</h1>'
|
|
293
|
+
);
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Text to Speech
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
const audio = await openkbs.textToSpeech('Hello world', {
|
|
300
|
+
voice: 'alloy',
|
|
301
|
+
model: 'tts-1'
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Translate
|
|
306
|
+
|
|
307
|
+
```javascript
|
|
308
|
+
const translated = await openkbs.translate('Hello', 'es');
|
|
309
|
+
// Returns: "Hola"
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Encryption
|
|
313
|
+
|
|
314
|
+
### Encrypt/Decrypt
|
|
315
|
+
|
|
316
|
+
```javascript
|
|
317
|
+
const encrypted = await openkbs.encrypt({ sensitive: 'data' });
|
|
318
|
+
const decrypted = await openkbs.decrypt(encrypted);
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Note: Items with `encrypted: true` in itemTypes are automatically encrypted/decrypted.
|
|
322
|
+
|
|
323
|
+
## Embeddings
|
|
324
|
+
|
|
325
|
+
### Create Embeddings
|
|
326
|
+
|
|
327
|
+
```javascript
|
|
328
|
+
const embedding = await openkbs.createEmbeddings(
|
|
329
|
+
'text to embed',
|
|
330
|
+
'text-embedding-3-large'
|
|
331
|
+
);
|
|
332
|
+
// Returns: [0.123, -0.456, ...] (3072 dimensions)
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## File Upload (Presigned URLs)
|
|
336
|
+
|
|
337
|
+
### createPresignedURL
|
|
338
|
+
|
|
339
|
+
Upload files directly to S3 storage.
|
|
340
|
+
|
|
341
|
+
```javascript
|
|
342
|
+
// Get presigned URL for upload
|
|
343
|
+
const presignedUrl = await openkbs.kb({
|
|
344
|
+
action: 'createPresignedURL',
|
|
345
|
+
namespace: 'files',
|
|
346
|
+
fileName: 'document.pdf',
|
|
347
|
+
fileType: 'application/pdf',
|
|
348
|
+
presignedOperation: 'putObject'
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
// Upload using axios (globally available)
|
|
352
|
+
const fileBuffer = Buffer.from(content, 'utf8');
|
|
353
|
+
await axios.put(presignedUrl, fileBuffer, {
|
|
354
|
+
headers: {
|
|
355
|
+
'Content-Type': 'application/pdf',
|
|
356
|
+
'Content-Length': fileBuffer.length
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
// Public URL pattern
|
|
361
|
+
const publicUrl = `https://web.file.vpc1.us/files/${openkbs.kbId}/${fileName}`;
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## VectorDB (Semantic Search)
|
|
365
|
+
|
|
366
|
+
### items() - VectorDB Operations
|
|
367
|
+
|
|
368
|
+
Create and search items with embeddings for semantic search.
|
|
369
|
+
|
|
370
|
+
```javascript
|
|
371
|
+
// Create embeddings first
|
|
372
|
+
const { embeddings, totalTokens } = await openkbs.createEmbeddings(
|
|
373
|
+
'text to embed',
|
|
374
|
+
'text-embedding-3-large' // 3072 dimensions
|
|
375
|
+
);
|
|
376
|
+
|
|
377
|
+
// Create item with embeddings
|
|
378
|
+
await openkbs.items({
|
|
379
|
+
action: 'createItem',
|
|
380
|
+
itemType: 'archive',
|
|
381
|
+
itemId: 'archive_doc_123',
|
|
382
|
+
attributes: [
|
|
383
|
+
{ attrType: 'itemId', attrName: 'itemId', encrypted: false },
|
|
384
|
+
{ attrType: 'body', attrName: 'body', encrypted: true }
|
|
385
|
+
],
|
|
386
|
+
item: { body: await openkbs.encrypt(JSON.stringify(data)) },
|
|
387
|
+
totalTokens,
|
|
388
|
+
embeddings: embeddings.slice(0, 3072),
|
|
389
|
+
embeddingModel: 'text-embedding-3-large',
|
|
390
|
+
embeddingDimension: 3072
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
// Semantic search
|
|
394
|
+
const results = await openkbs.items({
|
|
395
|
+
action: 'searchVectorDBItems',
|
|
396
|
+
queryText: 'find similar documents',
|
|
397
|
+
topK: 10,
|
|
398
|
+
minScore: 0
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
// Results: { items: [{ itemId, body, score }, ...] }
|
|
402
|
+
// Note: body is encrypted, use openkbs.decrypt() to read
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## Utilities
|
|
406
|
+
|
|
407
|
+
### Parse JSON from Text
|
|
408
|
+
|
|
409
|
+
```javascript
|
|
410
|
+
const data = openkbs.parseJSONFromText('Some text {"key": "value"} more text');
|
|
411
|
+
// Returns: { key: "value" }
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### Get Exchange Rates
|
|
415
|
+
|
|
416
|
+
```javascript
|
|
417
|
+
const rates = await openkbs.getExchangeRates('USD');
|
|
418
|
+
// Returns: { EUR: 0.92, GBP: 0.79, ... }
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## Properties
|
|
422
|
+
|
|
423
|
+
```javascript
|
|
424
|
+
openkbs.kbId // Current Knowledge Base ID
|
|
425
|
+
openkbs.clientHeaders // Request headers (IP, user-agent, etc.)
|
|
426
|
+
openkbs.AESKey // Encryption key
|
|
427
|
+
openkbs.chatJWT // Current chat JWT token
|
|
428
|
+
```
|