import {
Skald,
MemoData,
CreateMemoResponse,
Memo,
ListMemosResponse,
UpdateMemoData,
UpdateMemoResponse,
IdType,
Filter,
FilterOperator,
FilterType,
SearchRequest,
SearchResponse,
SearchMethod,
ChatRequest,
ChatResponse,
ChatStreamEvent,
GenerateDocRequest,
GenerateDocResponse,
GenerateDocStreamEvent
} 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');
// 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',
search_method: 'chunk_vector_search' as SearchMethod,
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 || '');
}
}
// Generate document with filters and types
const generateDocResponse: GenerateDocResponse = await skald.generateDoc({
prompt: 'Create a product requirements document for a new mobile app',
rules: 'Use formal business language. Include sections for: Overview, Requirements',
filters
});
// Streaming document generation with types
const docStream = skald.streamedGenerateDoc({
prompt: 'Write a technical specification',
rules: 'Include Architecture and Security sections',
filters
});
for await (const event of docStream) {
const typedEvent: GenerateDocStreamEvent = event;
if (typedEvent.type === 'token') {
process.stdout.write(typedEvent.content || '');
} else if (typedEvent.type === 'done') {
console.log('\nDone!');
}
}