@1mbrain/sdk 0.1.0 → 0.1.3

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/dist/hermes.d.ts DELETED
@@ -1,185 +0,0 @@
1
- /**
2
- * @1mbrain/hermes-adapter
3
- *
4
- * NOTE: This is an optional convenience wrapper tailored specifically for the Hermes
5
- * agent framework. It serves as a reference/blueprint. For other frameworks or gateways,
6
- * use the generic `OneMBrainClient` directly from '@1mbrain/sdk'.
7
- *
8
- * Hermes context objects are automatically mapped to the correct 1MBrain memory type,
9
- * importance score, and metadata tags, so you never have to think about them in your
10
- * agent code.
11
- *
12
- * Quick start:
13
- *
14
- * ```ts
15
- * import { HermesMemoryAdapter } from '@1mbrain/sdk/hermes';
16
- *
17
- * const memory = new HermesMemoryAdapter({
18
- * apiUrl: process.env.ONEMILLION_API_URL!,
19
- * apiKey: process.env.ONEMILLION_API_KEY!,
20
- * agentId: 'hermes-agent-1', // your instance name/namespace
21
- * defaultImportance: 0.6,
22
- * });
23
- *
24
- * // Store an episodic memory from a conversation turn
25
- * await memory.rememberTurn({
26
- * userMessage: "What is VibeAman pricing?",
27
- * assistantReply: "VibeAman starts at Rp 150k/month.",
28
- * });
29
- *
30
- * // Store a persistent user preference
31
- * await memory.rememberPreference('preferred_language', 'Bahasa Indonesia');
32
- *
33
- * // Store a procedural pattern
34
- * await memory.rememberProcedure('push_to_github', 'Create PRD → push markdown deliverable');
35
- *
36
- * // Recall with automatic context enrichment
37
- * const results = await memory.recall('pricing');
38
- * ```
39
- */
40
- import type { AssociateInput, Memory, SearchResult } from './index.js';
41
- export interface HermesMemoryAdapterConfig {
42
- apiUrl: string;
43
- apiKey: string;
44
- agentId?: string;
45
- /** Default importance score for new memories (0–1). Defaults to 0.6. */
46
- defaultImportance?: number;
47
- /** Custom fetch implementation (useful in Cloudflare Workers / Edge). */
48
- fetch?: typeof fetch;
49
- }
50
- export interface HermesTurn {
51
- /** The raw user message from the current conversation turn. */
52
- userMessage: string;
53
- /** The assistant reply that was generated for this turn. */
54
- assistantReply?: string;
55
- /** Optional topic tags to attach to this episodic memory. */
56
- topics?: string[];
57
- /** Optional conversation / session ID for grouping. */
58
- sessionId?: string;
59
- }
60
- export interface HermesRecallOptions {
61
- /** Maximum number of results (default: 8). */
62
- limit?: number;
63
- /**
64
- * Restrict recall to a specific memory type.
65
- * When omitted, all types are searched.
66
- */
67
- type?: 'episodic' | 'semantic' | 'procedural' | 'entity' | 'warning';
68
- /** Filter by tags. */
69
- tags?: string[];
70
- /** Number of graph hops for spreading activation (default: 2). */
71
- maxHops?: number;
72
- /**
73
- * If provided, override the default agentId for this call.
74
- * Useful when querying another Hermes instance's memory.
75
- */
76
- agentId?: string;
77
- }
78
- export declare class HermesMemoryAdapter {
79
- private readonly client;
80
- private readonly defaultImportance;
81
- private readonly agentId?;
82
- constructor(config: HermesMemoryAdapterConfig);
83
- /**
84
- * Store a conversation turn as an episodic memory.
85
- * The content is formatted as a Q&A pair for rich recall later.
86
- */
87
- rememberTurn(turn: HermesTurn, agentId?: string): Promise<Memory>;
88
- /**
89
- * Store a durable user preference as a semantic memory.
90
- * Semantic memories don't decay as fast and are weighted higher on recall.
91
- */
92
- rememberPreference(key: string, value: string, agentId?: string): Promise<Memory>;
93
- /**
94
- * Store a learned behavioural pattern or workflow as a procedural memory.
95
- * Procedural memories carry high importance by default.
96
- */
97
- rememberProcedure(name: string, pattern: string, agentId?: string): Promise<Memory>;
98
- /**
99
- * General-purpose remember — uses sensible Hermes defaults.
100
- * Delegates directly to the underlying SDK client.
101
- */
102
- remember(content: string, options?: {
103
- type?: 'episodic' | 'semantic' | 'procedural';
104
- importance?: number;
105
- tags?: string[];
106
- agentId?: string;
107
- }): Promise<Memory>;
108
- /**
109
- * Recall memories relevant to the given query.
110
- * Automatically uses spreading activation (2 hops) for richer results.
111
- */
112
- recall(query: string, options?: HermesRecallOptions): Promise<SearchResult[]>;
113
- /**
114
- * Recall only episodic memories (conversation history).
115
- */
116
- recallHistory(query: string, limit?: number, agentId?: string): Promise<SearchResult[]>;
117
- /**
118
- * Recall only semantic memories (facts & preferences).
119
- */
120
- recallFacts(query: string, limit?: number, agentId?: string): Promise<SearchResult[]>;
121
- /**
122
- * Recall only procedural memories (learned workflows).
123
- */
124
- recallProcedures(query: string, limit?: number, agentId?: string): Promise<SearchResult[]>;
125
- /** Hard-delete a memory by ID. */
126
- forget(memoryId: string, agentId?: string): Promise<boolean>;
127
- /** Create an explicit association between two memories. */
128
- associate(sourceId: string, targetId: string, strength?: number, agentId?: string, relationType?: AssociateInput['relationType']): Promise<boolean>;
129
- /**
130
- * Build a formatted memory context block for injection into an LLM system prompt.
131
- *
132
- * Returns a markdown-formatted string listing the most relevant memories
133
- * so Hermes can surface them to the model without manual formatting.
134
- *
135
- * @example
136
- * const ctx = await memory.buildContext('user preferences');
137
- * systemPrompt = `${baseSystemPrompt}\n\n${ctx}`;
138
- */
139
- buildContext(query: string, limit?: number, agentId?: string): Promise<string>;
140
- /**
141
- * Ingest a web page URL and store its factual content as memories.
142
- *
143
- * The server-side pipeline automatically:
144
- * 1. Fetches the URL
145
- * 2. Converts HTML → Markdown (noise stripped)
146
- * 3. Chunks the content
147
- * 4. Extracts factual claims via LLM (using your configured provider)
148
- * 5. Stores facts with type/importance/metadata auto-set
149
- * 6. Deduplicates (won't re-ingest the same page content twice)
150
- *
151
- * Works from any gateway: Telegram, Discord, browser extension, CLI.
152
- *
153
- * @example
154
- * // Telegram bot handler
155
- * if (message.startsWith('/learn ')) {
156
- * const url = message.slice(7).trim();
157
- * const result = await memory.learnFromUrl(url);
158
- * return `✅ Learned ${result.storedCount} facts from "${result.title}"`;
159
- * }
160
- */
161
- learnFromUrl(url: string, options?: {
162
- agentId?: string;
163
- confidenceThreshold?: number;
164
- maxChunkChars?: number;
165
- deduplicate?: boolean;
166
- }): Promise<{
167
- ok: boolean;
168
- title: string;
169
- url: string;
170
- storedCount: number;
171
- deduplicated: boolean;
172
- memoryIds: string[];
173
- error?: string;
174
- }>;
175
- /**
176
- * Recall memories that were ingested from a specific source domain or URL pattern.
177
- *
178
- * Uses the `domain:` tag automatically added during ingestion.
179
- *
180
- * @example
181
- * const newsFromKompas = await memory.recallFromSource('kompas.com', 'AI regulation');
182
- */
183
- recallFromSource(domain: string, query: string, limit?: number, agentId?: string): Promise<SearchResult[]>;
184
- }
185
- //# sourceMappingURL=hermes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../src/hermes.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,99 +0,0 @@
1
- import type { CreateAssociationInput, CreateMemoryInput, Memory, SearchMemoryInput, SearchResult } from '@1mbrain/core';
2
- export interface OneMBrainClientConfig {
3
- apiUrl: string;
4
- apiKey: string;
5
- agentId?: string;
6
- fetch?: typeof fetch;
7
- }
8
- export type RememberInput = Omit<CreateMemoryInput, 'agentId'> & {
9
- agentId?: string;
10
- };
11
- export type RecallInput = Omit<SearchMemoryInput, 'agentId'> & {
12
- agentId?: string;
13
- };
14
- export type AssociateInput = Omit<CreateAssociationInput, 'sourceId' | 'agentId'> & {
15
- agentId?: string;
16
- };
17
- export interface IngestUrlOptions {
18
- agentId?: string;
19
- confidenceThreshold?: number;
20
- maxChunkChars?: number;
21
- deduplicate?: boolean;
22
- }
23
- export interface IngestResult {
24
- title: string;
25
- url: string;
26
- sourceHash: string;
27
- chunkCount: number;
28
- extractedCount: number;
29
- storedCount: number;
30
- skippedCount: number;
31
- errorCount: number;
32
- deduplicated: boolean;
33
- memoryIds: string[];
34
- }
35
- export interface ConsolidateOptions {
36
- agentId?: string;
37
- dryRun?: boolean;
38
- clusterStrategy?: 'tags' | 'graph' | 'hybrid';
39
- }
40
- export interface ConsolidationResult {
41
- agentId: string;
42
- triggerReason: 'sleep-cycle' | 'threshold';
43
- dryRun: boolean;
44
- storedCount: number;
45
- archivedCount: number;
46
- clustersProcessed: number;
47
- skipped: {
48
- noCandidates: number;
49
- tooSmallClusters: number;
50
- summarizationFailed: number;
51
- dryRun: number;
52
- };
53
- errors: string[];
54
- summaryIds: string[];
55
- }
56
- export interface ApiEnvelope<T> {
57
- success: boolean;
58
- data: T;
59
- meta?: Record<string, unknown>;
60
- message?: string;
61
- }
62
- export declare class OneMBrainError extends Error {
63
- readonly status: number;
64
- readonly details?: unknown | undefined;
65
- constructor(message: string, status: number, details?: unknown | undefined);
66
- }
67
- export declare class OneMBrainClient {
68
- private readonly apiUrl;
69
- private readonly apiKey;
70
- private readonly agentId?;
71
- private readonly fetchFn;
72
- constructor(config: OneMBrainClientConfig);
73
- remember(input: RememberInput): Promise<Memory>;
74
- recall(input: RecallInput): Promise<SearchResult[]>;
75
- forget(id: string, options?: {
76
- agentId?: string;
77
- }): Promise<boolean>;
78
- associate(sourceId: string, input: AssociateInput): Promise<boolean>;
79
- /**
80
- * Ingest a web page URL into memory.
81
- *
82
- * The server-side pipeline will:
83
- * 1. Fetch the page HTML
84
- * 2. Extract main content → Markdown
85
- * 3. Chunk and extract factual claims via LLM
86
- * 4. Store facts as memories (type, importance, metadata auto-set)
87
- *
88
- * Works from any gateway: Telegram, Discord, browser extension, CLI.
89
- *
90
- * @param url - The URL to ingest
91
- * @param options - Optional overrides (agentId, confidenceThreshold, etc.)
92
- */
93
- ingestUrl(url: string, options?: IngestUrlOptions): Promise<IngestResult>;
94
- consolidate(options?: ConsolidateOptions): Promise<ConsolidationResult>;
95
- private resolveAgentId;
96
- private request;
97
- }
98
- export type { Memory, SearchResult };
99
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}