import {
Skald,
MemoData,
CreateMemoResponse,
MemoFileData,
CreateMemoFromFileResponse,
MemoStatus,
MemoStatusResponse,
Memo,
ListMemosResponse,
UpdateMemoData,
UpdateMemoResponse,
IdType,
Filter,
FilterOperator,
FilterType,
SearchRequest,
SearchResponse,
ChatRequest,
ChatResponse,
ChatStreamEvent
} from '@skald-labs/skald-node';
const skald = new Skald('your-api-key-here');
// Create a memo with types
const memoData: MemoData = {
title: 'My Memo',
content: 'Content here',
tags: ['tag1', 'tag2'],
metadata: { department: 'engineering' }
};
const createResponse: CreateMemoResponse = await skald.createMemo(memoData);
// Get memo with types
const memo: Memo = await skald.getMemo('550e8400-e29b-41d4-a716-446655440000');
const memoByRef: Memo = await skald.getMemo('external-id-123', 'reference_id' as IdType);
// List memos with types
const memos: ListMemosResponse = await skald.listMemos({ page: 1, page_size: 20 });
// Update memo with types
const updateData: UpdateMemoData = {
title: 'Updated Title',
metadata: { status: 'reviewed' }
};
const updateResponse: UpdateMemoResponse = await skald.updateMemo(
'550e8400-e29b-41d4-a716-446655440000',
updateData
);
// Delete memo
await skald.deleteMemo('550e8400-e29b-41d4-a716-446655440000');
// Upload a file
import * as fs from 'fs';
const fileBuffer = fs.readFileSync('./document.pdf');
const fileData: MemoFileData = {
file: fileBuffer,
filename: 'document.pdf',
metadata: { type: 'report' },
tags: ['document'],
source: 'local'
};
const uploadResponse: CreateMemoFromFileResponse = await skald.createMemoFromFile(fileData);
// Check processing status
const statusResponse: MemoStatusResponse = await skald.checkMemoStatus(uploadResponse.memo_uuid);
const status: MemoStatus = statusResponse.status; // 'processing' | 'processed' | 'error'
// Search with filters and types
const filters: Filter[] = [
{
field: 'source',
operator: 'eq' as FilterOperator,
value: 'notion',
filter_type: 'native_field' as FilterType
},
{
field: 'department',
operator: 'eq' as FilterOperator,
value: 'engineering',
filter_type: 'custom_metadata' as FilterType
}
];
const searchRequest: SearchRequest = {
query: 'quarterly goals',
limit: 10,
filters
};
const searchResponse: SearchResponse = await skald.search(searchRequest);
// Chat with filters and types
const chatResponse: ChatResponse = await skald.chat({
query: 'What are our quarterly goals?',
filters
});
// Streaming chat with types
const stream = skald.streamedChat({
query: 'What are our quarterly goals?',
filters
});
for await (const event of stream) {
const typedEvent: ChatStreamEvent = event;
if (typedEvent.type === 'token') {
process.stdout.write(typedEvent.content || '');
}
}