hebbrix 2.2.1 → 2.3.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.
package/README.md CHANGED
@@ -1,787 +1,100 @@
1
1
  # Hebbrix TypeScript SDK
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/hebbrix.svg)](https://www.npmjs.com/package/hebbrix)
4
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
5
- [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
3
+ Typed TypeScript/JavaScript client for Hebbrix memory, retrieval, and
4
+ outcome-learning APIs.
6
5
 
7
- Official TypeScript/JavaScript SDK for the Hebbrix api - **the only memory API with Reinforcement Learning**.
8
-
9
- ## 🚀 Features
10
-
11
- - ✅ **Complete API Coverage** - All 50+ endpoints supported
12
- - ✅ **Reinforcement Learning** - Train AI agents to optimize memory operations
13
- - ✅ **Temporal Knowledge Graphs** - Track facts over time with bi-temporal model
14
- - ✅ **Procedural Memory** - Store and execute learned skills
15
- - ✅ **Working Memory** - Short-term context buffer for conversations
16
- - ✅ **Memory Consolidation** - Automatic compression of episodic memories
17
- - ✅ **ProofLoop** - Learn from outcomes with automatic, verifiable evidence receipts
18
- - ✅ **Promise-based** - Native async/await support
19
- - ✅ **Type-safe** - Complete TypeScript type definitions
20
- - ✅ **Universal** - Works in Node.js and browsers
21
- - ✅ **Clean API** - Intuitive, developer-friendly interface
22
-
23
- ## 📦 Installation
6
+ ## Install
24
7
 
25
8
  ```bash
26
- npm install hebbrix
27
- # or
28
- yarn add hebbrix
29
- # or
30
- pnpm add hebbrix
31
- ```
32
-
33
- ## 🔥 Quick Start
34
-
35
- ```typescript
36
- import { MemoryClient } from 'hebbrix';
37
-
38
- const main = async () => {
39
- // Initialize client
40
- const client = new MemoryClient({ apiKey: 'hbx_your_api_key' });
41
-
42
- // Create a collection
43
- const collection = await client.collections.create({
44
- name: 'My AI Agent',
45
- description: 'Personal memory for my chatbot',
46
- });
47
-
48
- // Store a memory
49
- const memory = await client.memories.create({
50
- collection_id: collection.id,
51
- content: 'User prefers dark mode and loves TypeScript',
52
- importance: 0.9,
53
- wait_for_index: true,
54
- });
55
-
56
- // Batch writes have an explicit two-mode contract. With wait_for_index=true,
57
- // success means every item is searchable; a server deadline rejects with a
58
- // retryable error instead of returning a misleading successful 202.
59
- const batch = await client.memories.createBatch({
60
- memories: [{ content: 'First fact' }, { content: 'Second fact' }],
61
- collection_id: collection.id,
62
- wait_for_index: true,
63
- idempotency_key: 'import-42',
64
- });
65
-
66
- // For fire-and-forget batches, poll every item (with timeout/cancellation):
67
- // await client.memories.waitForBatchSearchable(batch, { signal });
68
-
69
- // Search memories
70
- const results = await client.search({
71
- query: 'What programming language does user like?',
72
- collection_id: collection.id,
73
- limit: 5,
74
- });
75
-
76
- console.log(results);
77
-
78
- // Reason over memories
79
- const answer = await client.reason({
80
- query: 'What are user preferences?',
81
- provider: 'gemini',
82
- });
83
-
84
- console.log(answer.answer);
85
- console.log(answer.sources);
86
- };
87
-
88
- main();
9
+ npm install hebbrix@2.3.0
89
10
  ```
90
11
 
91
- ## ProofLoop: search decision outcome → proof
92
-
93
- ```typescript
94
- const search = await client.searchWithProof({
95
- query: 'What should the agent do next?',
96
- collection_id: 'collection-42',
97
- user_id: 'customer-7',
98
- });
99
- const decision = await client.proofloop.decide({
100
- policy_key: 'agent.next_action',
101
- candidates: [{ action_key: 'act' }, { action_key: 'ask' }],
102
- collection_id: 'collection-42',
103
- user_id: 'customer-7',
104
- proof_context: search.proof_context,
105
- });
106
- await client.proofloop.recordOutcome(decision.decision_id, {
107
- success: true,
108
- idempotency_key: 'run-123-result',
109
- });
110
- const proof = await client.proofloop.proof(decision.decision_id);
111
- ```
112
-
113
- ## 📚 Complete API Guide
114
-
115
- ### 1. Authentication
116
-
117
- ```typescript
118
- import { MemoryClient } from 'hebbrix';
119
-
120
- // Using API key
121
- const client = new MemoryClient({ apiKey: 'hbx_...' });
122
-
123
- // Or register a new user
124
- const authResponse = await client.auth.register(
125
- 'user@example.com',
126
- 'secure_password',
127
- 'John Doe'
128
- );
129
-
130
- // Login
131
- const loginResponse = await client.auth.login(
132
- 'user@example.com',
133
- 'secure_password'
134
- );
135
-
136
- // Create API key
137
- const apiKey = await client.auth.createApiKey('My App Key');
138
- console.log(apiKey.api_key); // hbx_...
139
-
140
- // Get current user
141
- const user = await client.auth.getMe();
142
- console.log(user.email);
143
- ```
12
+ Node.js 16+ and modern browsers are supported.
144
13
 
145
- ### 2. Collections
14
+ ## Quick start
146
15
 
147
16
  ```typescript
148
- // Create collection
149
- const collection = await client.collections.create({
150
- name: 'Research Notes',
151
- description: 'AI research papers and notes',
152
- metadata: { category: 'research' },
153
- });
154
-
155
- // List collections
156
- const collections = await client.collections.list({ limit: 10, skip: 0 });
157
-
158
- // Get collection
159
- const retrieved = await client.collections.get(collection.id);
160
-
161
- // Update collection
162
- const updated = await client.collections.update(collection.id, {
163
- name: 'Updated Name',
164
- description: 'New description',
165
- });
166
-
167
- // Delete collection
168
- await client.collections.delete(collection.id);
169
- ```
170
-
171
- ### 3. Memories (Episodic)
17
+ import { MemoryClient } from "hebbrix";
172
18
 
173
- ```typescript
174
- // Create memory
19
+ const client = new MemoryClient({ apiKey: "hbx_your_api_key" });
20
+ const collection = await client.collections.create({ name: "Support memory" });
175
21
  const memory = await client.memories.create({
176
22
  collection_id: collection.id,
177
- content: 'User completed onboarding tutorial',
178
- importance: 0.7,
179
- metadata: { event: 'onboarding', timestamp: new Date().toISOString() },
23
+ content: "Customer prefers concise replies",
24
+ wait_for_index: true,
25
+ idempotency_key: "customer-42-preference-v1",
180
26
  });
181
-
182
- // List memories
183
- const memories = await client.memories.list({
184
- collection_id: collection.id,
185
- limit: 50,
186
- skip: 0,
187
- });
188
-
189
- // Get memory with metadata
190
- const retrieved = await client.memories.get(memory.id);
191
- console.log(retrieved.content);
192
- console.log(retrieved.importance);
193
- console.log(retrieved.metadata);
194
-
195
- // Update memory
196
- const updated = await client.memories.update(memory.id, {
197
- content: 'Updated content',
198
- importance: 0.9,
199
- });
200
-
201
- // Delete memory
202
- await client.memories.delete(memory.id);
203
- ```
204
-
205
- ### 4. Search & Retrieval
206
-
207
- ```typescript
208
- // Hybrid search (Vector + BM25)
209
27
  const results = await client.search({
210
- query: 'machine learning concepts',
211
- collection_id: collection.id,
212
- limit: 10,
213
- search_type: 'hybrid', // 'vector' | 'bm25' | 'hybrid' | 'graph'
214
- filters: { category: 'research' },
215
- });
216
-
217
- // Vector-only search
218
- const vectorResults = await client.search({
219
- query: 'neural networks',
220
- search_type: 'vector',
221
- });
222
-
223
- // BM25 keyword search
224
- const keywordResults = await client.search({
225
- query: 'specific technical terms',
226
- search_type: 'bm25',
227
- });
228
-
229
- // Knowledge graph search
230
- const graphResults = await client.search({
231
- query: 'related concepts',
232
- search_type: 'graph',
233
- });
234
- ```
235
-
236
- ### 5. Reasoning (RAG)
237
-
238
- ```typescript
239
- // Reason over memories with Gemini
240
- const answer = await client.reason({
241
- query: 'Summarize what I learned about reinforcement learning',
28
+ query: "How should replies be formatted?",
242
29
  collection_id: collection.id,
243
- provider: 'gemini',
244
- include_steps: true,
245
- });
246
-
247
- console.log(answer.answer);
248
- console.log(answer.sources); // Source memories used
249
- console.log(answer.reasoning_context); // Reasoning steps (if include_steps=true)
250
-
251
- // Use different LLM providers
252
- const openaiAnswer = await client.reason({
253
- query: 'Explain the key concepts',
254
- provider: 'openai', // 'gemini' | 'openai' | 'anthropic'
255
- });
256
-
257
- const anthropicAnswer = await client.reason({
258
- query: 'What are the main takeaways?',
259
- provider: 'anthropic',
260
30
  });
31
+ console.log(memory, results);
261
32
  ```
262
33
 
263
- ### 6. Reinforcement Learning
264
-
265
- **The only memory API with RL training!**
266
-
267
- ```typescript
268
- // Train Memory Manager agent (decides what to remember/forget)
269
- const training = await client.rl.trainMemoryManager({
270
- collection_id: collection.id,
271
- num_episodes: 100,
272
- });
273
-
274
- console.log(training.metrics); // Training metrics
275
-
276
- // Train Answer Agent (optimizes retrieval strategy)
277
- const answerTraining = await client.rl.trainAnswerAgent({
278
- collection_id: collection.id,
279
- num_episodes: 50,
280
- });
281
-
282
- // Get RL training metrics
283
- const metrics = await client.rl.getMetrics();
284
- console.log(metrics.memory_manager_performance);
285
- console.log(metrics.answer_agent_performance);
286
-
287
- // Evaluate trained agent
288
- const evaluation = await client.rl.evaluate('memory-manager', collection.id);
289
- console.log(evaluation.accuracy);
290
- console.log(evaluation.recall);
291
- ```
34
+ ## Durable readiness
292
35
 
293
- ### 7. Procedural Memory
36
+ Memory writes return either a searchable completion or a durable `202` receipt.
37
+ A durable receipt means the database commit succeeded while indexing is still
38
+ converging; it is not a failure and does not justify a duplicate write.
294
39
 
295
- Store and execute learned procedures.
40
+ When `wait_for_index: true`, the SDK accepts the receipt and polls its status
41
+ URL. It returns only after `searchable: true`. If the client deadline expires,
42
+ it throws `IndexingTimeoutError`; the error retains the receipt, durable memory
43
+ IDs, and status URL. Reuse the same idempotency key with the same body to recover
44
+ the same logical resources.
296
45
 
297
46
  ```typescript
298
- // Create a procedure
299
- const procedure = await client.procedural.create({
300
- name: 'Daily Summary',
301
- description: 'Generate daily summary of important events',
302
- trigger_condition: 'time.hour == 18', // 6 PM daily
303
- action_sequence: [
304
- 'search(query="today", limit=20)',
305
- 'consolidate(threshold=0.7)',
306
- 'generate_summary()',
307
- ],
308
- collection_id: collection.id,
309
- category: 'automation',
310
- metadata: { frequency: 'daily' },
311
- });
312
-
313
- // List procedures
314
- const procedures = await client.procedural.list({
315
- collection_id: collection.id,
316
- category: 'automation',
317
- limit: 50,
318
- });
319
-
320
- // Get procedure
321
- const retrieved = await client.procedural.get(procedure.id);
322
-
323
- // Execute procedure
324
- const result = await client.procedural.execute(procedure.id, {
325
- context: { user_id: 'user_123' },
326
- });
327
-
328
- console.log(result.output);
329
- console.log(result.execution_time);
330
-
331
- // Update procedure
332
- const updated = await client.procedural.update(procedure.id, {
333
- name: 'Updated Daily Summary',
334
- action_sequence: ['search(query="important", limit=10)', 'summarize()'],
47
+ const receipt = await client.memories.createBatch({
48
+ memories: [{ content: "First fact" }, { content: "Second fact" }],
49
+ collection_id: "collection-42",
50
+ wait_for_index: false,
51
+ idempotency_key: "import-42",
335
52
  });
336
-
337
- // Delete procedure
338
- await client.procedural.delete(procedure.id);
339
- // DELETE is tenant-scoped and idempotent: deleted, absent, and foreign IDs all
340
- // return 204 without revealing whether another tenant owns the identifier.
53
+ const completed = await client.memories.waitForBatchSearchable(receipt);
341
54
  ```
342
55
 
343
- ### 8. Temporal Knowledge Graphs
56
+ ## Pagination
344
57
 
345
- Track facts over time with bi-temporal modeling.
58
+ `collections.list()` returns `Promise<CursorPage<Collection>>`, matching the
59
+ runtime response. Read collections from `page.items` and pass
60
+ `page.next_cursor` into the next call. `memories.list()` returns item arrays for
61
+ backward compatibility; use `memories.listPage()` for cursor metadata.
346
62
 
347
63
  ```typescript
348
- // Add temporal fact
349
- const fact = await client.temporal.addFact({
350
- subject: 'User_123',
351
- predicate: 'works_at',
352
- object: 'TechCorp',
353
- valid_from: '2024-01-01',
354
- valid_until: '2024-12-31',
355
- confidence: 0.95,
356
- source_memory_id: memory.id,
357
- metadata: { position: 'Engineer' },
358
- });
359
-
360
- // Query facts (current state)
361
- const facts = await client.temporal.queryFacts({
362
- subject: 'User_123',
363
- predicate: 'works_at',
364
- });
365
-
366
- // Query facts at specific time
367
- const historicalFacts = await client.temporal.queryFacts({
368
- subject: 'User_123',
369
- at_time: '2024-06-15',
370
- });
371
-
372
- // Point-in-time query (knowledge state at timestamp)
373
- const snapshot = await client.temporal.pointInTime(
374
- '2024-06-15T10:00:00Z',
375
- 'User_123'
376
- );
377
-
378
- console.log(snapshot.facts); // All facts valid at that time
379
- console.log(snapshot.relationships); // Graph relationships
64
+ let cursor: string | undefined;
65
+ do {
66
+ const page = await client.collections.list({ limit: 100, cursor });
67
+ for (const collection of page.items) console.log(collection.id);
68
+ cursor = page.next_cursor ?? undefined;
69
+ } while (cursor);
380
70
  ```
381
71
 
382
- ### 9. Working Memory
383
-
384
- Short-term context buffer for conversations.
72
+ ## Advanced capabilities and entitlements
385
73
 
386
- ```typescript
387
- // Add to working memory
388
- await client.workingMemory.add({
389
- role: 'user',
390
- content: 'I want to learn about machine learning',
391
- metadata: { timestamp: new Date().toISOString() },
392
- });
74
+ The client exposes the canonical `/v1` temporal, working-memory, consolidation,
75
+ memory-tool, and RL contracts. RL metrics and evaluation require the Pro plan.
76
+ Process-wide RL training and checkpoint mutation require an admin role.
77
+ Entitlement failures throw `EntitlementError` and preserve the stable error
78
+ code, current/required plan, request ID, and support action.
393
79
 
394
- await client.workingMemory.add({
395
- role: 'assistant',
396
- content: 'I can help you with that! What aspect interests you?',
397
- metadata: { timestamp: new Date().toISOString() },
398
- });
399
-
400
- // Get current context (last N items)
401
- const context = await client.workingMemory.getContext();
402
- console.log(context.items); // Recent conversation items
403
- console.log(context.buffer_size); // Current buffer size
404
-
405
- // Compress working memory (convert to episodic)
406
- const compressed = await client.workingMemory.compress();
407
- console.log(compressed.compressed_memories); // New episodic memories created
408
- console.log(compressed.compression_ratio);
409
-
410
- // Clear working memory
411
- await client.workingMemory.clear();
412
- ```
413
-
414
- ### 10. Memory Consolidation
415
-
416
- Automatic compression of episodic memories.
417
-
418
- ```typescript
419
- // Trigger consolidation
420
- const consolidation = await client.consolidation.consolidate(collection.id, 100);
421
-
422
- console.log(consolidation.original_count); // Before consolidation
423
- console.log(consolidation.consolidated_count); // After consolidation
424
- console.log(consolidation.compression_ratio);
425
-
426
- // Get consolidation statistics
427
- const stats = await client.consolidation.getStats(collection.id);
428
- console.log(stats.total_memories);
429
- console.log(stats.consolidation_eligible);
430
- console.log(stats.last_consolidation);
431
-
432
- // Archive old memories
433
- const archived = await client.consolidation.archive(
434
- collection.id,
435
- '2024-01-01' // Archive memories before this date
436
- );
437
-
438
- console.log(archived.archived_count);
439
- console.log(archived.archived_ids);
440
- ```
441
-
442
- ### 11. Memory Tools (Self-Editing)
443
-
444
- Advanced memory manipulation tools.
445
-
446
- ```typescript
447
- // Replace memory content
448
- const replaced = await client.memoryTools.replace({
449
- memory_id: memory.id,
450
- new_content: 'Updated information with corrections',
451
- reason: 'Fixed inaccurate information',
452
- });
453
-
454
- // Insert memory at specific position
455
- const inserted = await client.memoryTools.insert({
456
- collection_id: collection.id,
457
- content: 'Important context that was missing',
458
- position: 5,
459
- reason: 'Adding missing context',
460
- });
461
-
462
- // Rethink memory in light of new information
463
- const rethought = await client.memoryTools.rethink(
464
- memory.id,
465
- 'New evidence suggests different interpretation'
466
- );
467
-
468
- console.log(rethought.original_content);
469
- console.log(rethought.updated_content);
470
- console.log(rethought.changes);
471
- ```
472
-
473
- ### 12. World Model & Planning
474
-
475
- Simulate retrieval and plan memory operations.
476
-
477
- ```typescript
478
- // Imagine retrieval without actually retrieving
479
- const imagination = await client.worldModel.imagineRetrieval(
480
- 'machine learning papers',
481
- collection.id
482
- );
483
-
484
- console.log(imagination.expected_results); // Predicted results
485
- console.log(imagination.confidence); // Prediction confidence
486
- console.log(imagination.should_retrieve); // Recommendation
487
-
488
- // Plan memory operations to achieve goal
489
- const plan = await client.worldModel.plan(
490
- 'Prepare comprehensive summary of Q1 research',
491
- collection.id
492
- );
493
-
494
- console.log(plan.steps); // Planned operations
495
- console.log(plan.estimated_time); // Time estimate
496
- console.log(plan.required_resources); // Resources needed
497
-
498
- // Example plan output:
499
- // {
500
- // steps: [
501
- // { action: 'search', params: { query: 'Q1 research', limit: 50 } },
502
- // { action: 'consolidate', params: { threshold: 0.8 } },
503
- // { action: 'reason', params: { query: 'summarize findings' } }
504
- // ],
505
- // estimated_time: 2.5,
506
- // required_resources: { tokens: 5000, api_calls: 3 }
507
- // }
508
- ```
509
-
510
- ## 🎯 Advanced Examples
511
-
512
- ### Building a Smart Chatbot
513
-
514
- ```typescript
515
- import { MemoryClient } from 'hebbrix';
516
-
517
- class SmartChatbot {
518
- private client: MemoryClient;
519
- private collectionId: string;
520
-
521
- constructor(apiKey: string) {
522
- this.client = new MemoryClient({ apiKey });
523
- }
524
-
525
- async initialize() {
526
- const collection = await this.client.collections.create({
527
- name: 'Chatbot Memory',
528
- description: 'User interactions and preferences',
529
- });
530
- this.collectionId = collection.id;
531
- }
532
-
533
- async chat(userMessage: string): Promise<string> {
534
- // Add to working memory
535
- await this.client.workingMemory.add({
536
- role: 'user',
537
- content: userMessage,
538
- });
539
-
540
- // Search relevant memories
541
- const relevantMemories = await this.client.search({
542
- query: userMessage,
543
- collection_id: this.collectionId,
544
- limit: 5,
545
- });
546
-
547
- // Generate response using reasoning
548
- const response = await this.client.reason({
549
- query: userMessage,
550
- collection_id: this.collectionId,
551
- provider: 'gemini',
552
- });
553
-
554
- // Store interaction
555
- await this.client.memories.create({
556
- collection_id: this.collectionId,
557
- content: `User asked: "${userMessage}". Bot responded: "${response.answer}"`,
558
- importance: 0.6,
559
- });
560
-
561
- // Add response to working memory
562
- await this.client.workingMemory.add({
563
- role: 'assistant',
564
- content: response.answer,
565
- });
566
-
567
- return response.answer;
568
- }
569
-
570
- async trainOnConversations() {
571
- // Train RL agent to optimize memory management
572
- await this.client.rl.trainMemoryManager({
573
- collection_id: this.collectionId,
574
- num_episodes: 100,
575
- });
576
- }
577
- }
578
-
579
- // Usage
580
- const bot = new SmartChatbot('hbx_...');
581
- await bot.initialize();
582
-
583
- const answer = await bot.chat('What did we discuss yesterday?');
584
- console.log(answer);
585
-
586
- await bot.trainOnConversations();
587
- ```
588
-
589
- ### Knowledge Graph Construction
590
-
591
- ```typescript
592
- // Build temporal knowledge graph from documents
593
- async function buildKnowledgeGraph(client: MemoryClient, collectionId: string) {
594
- // Add entities and relationships
595
- await client.temporal.addFact({
596
- subject: 'GPT-5',
597
- predicate: 'developed_by',
598
- object: 'OpenAI',
599
- valid_from: '2025-08-01',
600
- confidence: 1.0,
601
- });
602
-
603
- await client.temporal.addFact({
604
- subject: 'GPT-5',
605
- predicate: 'is_a',
606
- object: 'Large Language Model',
607
- valid_from: '2025-08-01',
608
- confidence: 1.0,
609
- });
610
-
611
- await client.temporal.addFact({
612
- subject: 'OpenAI',
613
- predicate: 'founded_in',
614
- object: '2015',
615
- valid_from: '2015-12-11',
616
- confidence: 1.0,
617
- });
618
-
619
- // Query relationships
620
- const facts = await client.temporal.queryFacts({
621
- subject: 'GPT-5',
622
- });
623
-
624
- console.log(facts); // All facts about GPT-5
625
-
626
- // Historical query
627
- const snapshot = await client.temporal.pointInTime(
628
- '2025-01-01T00:00:00Z',
629
- 'OpenAI'
630
- );
631
-
632
- console.log(snapshot); // OpenAI's state before GPT-5 release
633
- }
634
- ```
635
-
636
- ## 🛡️ Error Handling
637
-
638
- ```typescript
639
- import {
640
- HebbrixError,
641
- AuthenticationError,
642
- ValidationError,
643
- NotFoundError,
644
- RateLimitError,
645
- ServerError,
646
- } from '@hebbrix/sdk';
647
-
648
- try {
649
- const memory = await client.memories.get('invalid_id');
650
- } catch (error) {
651
- if (error instanceof NotFoundError) {
652
- console.log('Memory not found');
653
- } else if (error instanceof AuthenticationError) {
654
- console.log('Invalid API key');
655
- } else if (error instanceof RateLimitError) {
656
- console.log('Rate limit exceeded, retry after:', error.retryAfter);
657
- } else if (error instanceof ValidationError) {
658
- console.log('Validation errors:', error.errors);
659
- } else if (error instanceof ServerError) {
660
- console.log('Server error:', error.message);
661
- } else if (error instanceof HebbrixError) {
662
- console.log('API error:', error.statusCode, error.message);
663
- }
664
- }
665
- ```
666
-
667
- ## ⚙️ Configuration
668
-
669
- ```typescript
670
- const client = new MemoryClient({
671
- // Required: API key
672
- apiKey: 'hbx_...',
673
-
674
- // Optional: Custom base URL (default: https://api.hebbrix.com)
675
- baseUrl: 'https://api.yourdomain.com',
676
-
677
- // Optional: Request timeout in milliseconds (default: 30000)
678
- timeout: 60000,
679
- });
680
- ```
681
-
682
- ## 🌐 Browser Usage
683
-
684
- The SDK works in browsers with native Fetch API support:
685
-
686
- ```html
687
- <script type="module">
688
- import { MemoryClient } from 'https://cdn.jsdelivr.net/npm/hebbrix/dist/index.mjs';
689
-
690
- const client = new MemoryClient({ apiKey: 'hbx_...' });
691
-
692
- const results = await client.search({ query: 'test' });
693
- console.log(results);
694
- </script>
695
- ```
696
-
697
- ## 📊 Comparison with Competitors
698
-
699
- | Feature | Hebbrix | Mem0 | Zep | Letta | Supermemory |
700
- |---------|-----------|------|-----|-------|-------------|
701
- | Reinforcement Learning | ✅ | ❌ | ❌ | ❌ | ❌ |
702
- | Temporal Knowledge Graphs | ✅ | ❌ | ✅ | ❌ | ❌ |
703
- | Procedural Memory | ✅ | ❌ | ❌ | ✅ | ❌ |
704
- | Working Memory Buffer | ✅ | ❌ | ✅ | ✅ | ❌ |
705
- | Memory Consolidation | ✅ | ❌ | ❌ | ❌ | ❌ |
706
- | Hybrid Search | ✅ | ✅ | ✅ | ❌ | ✅ |
707
- | Graph Search | ✅ | ❌ | ❌ | ❌ | ❌ |
708
- | Self-Editing Tools | ✅ | ❌ | ❌ | ❌ | ❌ |
709
- | World Model Planning | ✅ | ❌ | ❌ | ❌ | ❌ |
710
- | Multi-LLM Support | ✅ | ✅ | ✅ | ✅ | ✅ |
711
-
712
- **Hebbrix is the only memory API with:**
713
- - RL-based memory optimization (Memory-R1 framework)
714
- - Bi-temporal knowledge graphs
715
- - Full memory consolidation pipeline
716
- - Self-editing capabilities
717
- - World model-based planning
718
-
719
- ## 🏗️ Development
720
-
721
- ```bash
722
- # Install dependencies
723
- npm install
724
-
725
- # Build
726
- npm run build
727
-
728
- # Development mode with watch
729
- npm run dev
730
-
731
- # Run tests
732
- npm test
733
-
734
- # Lint code
735
- npm run lint
736
-
737
- # Format code
738
- npm run format
739
- ```
740
-
741
- ## 📘 TypeScript Support
742
-
743
- The SDK is written in TypeScript and includes complete type definitions:
744
-
745
- ```typescript
746
- import type {
747
- MemoryClient,
748
- Memory,
749
- Collection,
750
- SearchResult,
751
- ReasoningResponse,
752
- } from '@hebbrix/sdk';
753
-
754
- const client = new MemoryClient({ apiKey: 'hbx_...' });
755
-
756
- // Full type inference
757
- const memory: Memory = await client.memories.create({
758
- collection_id: 'col_123',
759
- content: 'Typed content',
760
- });
761
-
762
- // Type-safe search results
763
- const results: SearchResult[] = await client.search({
764
- query: 'test',
765
- });
766
-
767
- // Type-safe reasoning response
768
- const answer: ReasoningResponse = await client.reason({
769
- query: 'question',
770
- });
771
- ```
80
+ The experimental World Model is intentionally not exported by this public SDK.
81
+ It remains withdrawn until a trained, versioned production model artifact and
82
+ an end-to-end public serving contract are available.
772
83
 
773
- ## 🔗 Links
84
+ The authoritative account capability matrix is available from
85
+ `GET /v1/users/me/capabilities`.
774
86
 
775
- - **Documentation**: https://docs.hebbrix.com
776
- - **API Reference**: https://api.hebbrix.com/docs
777
- - **GitHub**: https://github.com/hebbrix/hebbrix
778
- - **Examples**: https://github.com/hebbrix/examples
779
- - **npm Package**: https://www.npmjs.com/package/hebbrix
87
+ ## Release compatibility
780
88
 
781
- ## 📄 License
89
+ The production API publishes exact build and artifact compatibility at
90
+ [`GET /v1/release`](https://api.hebbrix.com/v1/release). The public OpenAPI is
91
+ [`/openapi.json`](https://api.hebbrix.com/openapi.json).
782
92
 
783
- MIT License - see [LICENSE](LICENSE) for details
93
+ - [Documentation](https://docs.hebbrix.com)
94
+ - [API reference](https://api.hebbrix.com/docs)
95
+ - [npm package](https://www.npmjs.com/package/hebbrix)
96
+ - [Support](https://www.hebbrix.com/contact)
784
97
 
785
- ---
98
+ ## License
786
99
 
787
- **Built with ❤️ by the Hebbrix team**
100
+ MIT. See `LICENSE` in the distribution.