@getmarrow/sdk 2.8.0 → 2.9.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
@@ -16,13 +16,61 @@ That's fine for a toy. It's a problem for anything real.
16
16
 
17
17
  ---
18
18
 
19
- ## What's New in v2.7.0
19
+ ## What's New in v2.8.0
20
20
 
21
- - **`marrow.run()`**single-call wrapper. Auto-orients, thinks, runs your function, commits outcome. Zero ceremony.
22
- - **`marrowFromEnv()`** — create client from env vars, defaults to `mode: 'auto'`
23
- - **`createMarrowClient()`** — clean factory export
24
- - **Session identity** pass `sessionId` to tag all requests with `X-Marrow-Session-Id`
25
- - **Auto mode** — set `mode: 'auto'` and Marrow handles orient + think + commit around your actions
21
+ **Backend API Enhancements** Full memory lifecycle management now available:
22
+
23
+ ### Cross-Agent Memory Sharing
24
+ Share memories with specific agents or all agents in your account:
25
+ ```typescript
26
+ // After creating a memory, share it with another agent
27
+ await marrow.memories.share(memoryId, { agentIds: ['darvis', 'barvis'] });
28
+
29
+ // List now includes memories shared with your agents
30
+ const memories = await marrow.memories.list({ agentId: 'jarvis' });
31
+ ```
32
+
33
+ ### Memory Export/Import
34
+ Backup and restore memories across sessions or accounts:
35
+ ```typescript
36
+ // Export all memories to JSON
37
+ const exportData = await marrow.memories.export({ format: 'json', status: 'active' });
38
+
39
+ // Import with merge (dedup) or replace mode
40
+ await marrow.memories.import({ memories: exportData.memories, mode: 'merge' });
41
+ ```
42
+
43
+ ### Advanced FTS Filters
44
+ Precision search with multiple filters:
45
+ ```typescript
46
+ const results = await marrow.memories.retrieve({
47
+ query: 'auth fix',
48
+ from: '2026-04-01',
49
+ to: '2026-04-08',
50
+ tags: ['security', 'marrow'],
51
+ source: 'session_bootstrap',
52
+ status: 'active',
53
+ });
54
+ ```
55
+
56
+ ### New Memory Management Endpoints
57
+ - `GET /v1/memories` — List memories with pagination and filters
58
+ - `GET /v1/memories/:id` — Get single memory by ID
59
+ - `PATCH /v1/memories/:id` — Update memory text, tags, or metadata
60
+ - `POST /v1/memories/:id/outdated` — Mark memory as outdated
61
+ - `POST /v1/memories/:id/supersede` — Atomically replace with new version
62
+ - `DELETE /v1/memories/:id` — Soft delete
63
+ - `GET /v1/memories/export` — Export to JSON or CSV
64
+ - `POST /v1/memories/import` — Import with merge/replace mode
65
+ - `POST /v1/memories/:id/share` — Share with agents
66
+ - `GET /v1/memories/retrieve` — FTS search with filters
67
+
68
+ ### Security Hardening
69
+ - Account isolation enforced (no cross-account leakage)
70
+ - Agent ID validation on all endpoints
71
+ - Audit logging for export/import operations
72
+ - Rate limiting on export (5/hour)
73
+ - SHA-256 dedup on import (checks ALL memories, not just first 200)
26
74
 
27
75
  ---
28
76
 
@@ -86,7 +134,7 @@ const marrow = createMarrowClient(process.env.MARROW_API_KEY!);
86
134
  await marrow.orient();
87
135
  await marrow.think({ action: 'deploy to production', type: 'deployment' });
88
136
  await deployToProduction();
89
- await marrow.commit({ success: true, outcome: 'Deployed v2.7.0 — 0 errors' });
137
+ await marrow.commit({ success: true, outcome: 'Deployed v2.8.0 — 0 errors' });
90
138
  ```
91
139
 
92
140
  ---
@@ -148,224 +196,92 @@ await marrow.wrap(
148
196
  );
149
197
  ```
150
198
 
151
- ### 4. Check
152
- Inspect whether the loop is still open.
153
-
154
- ```typescript
155
- const state = marrow.check();
156
- console.log(state.recommendedNext);
157
- ```
158
-
159
- This is what tells the agent whether it's actually ready to move on.
160
-
161
- ### 5. Commit
162
- Close the loop with outcome memory.
199
+ ### 4. Commit
200
+ Close the loop with the outcome.
163
201
 
164
202
  ```typescript
165
203
  await marrow.commit({
166
- decision_id: decision.decision_id,
167
204
  success: true,
168
- outcome: 'Deployment passed smoke tests',
169
- });
170
- ```
171
-
172
- Now the next session doesn't start from scratch.
173
-
174
- ---
175
-
176
- ## Creating a Client
177
-
178
- ### Factory (recommended)
179
-
180
- ```typescript
181
- import { createMarrowClient } from '@getmarrow/sdk';
182
-
183
- const marrow = createMarrowClient('mrw_...', {
184
- sessionId: 'my-agent-run-42', // optional — sent as X-Marrow-Session-Id header
185
- mode: 'warn', // optional — off | warn | require | auto
205
+ outcome: 'Staging deploy succeeded, running smoke tests',
186
206
  });
187
207
  ```
188
208
 
189
- ### From environment variables
190
-
191
- ```typescript
192
- import { marrowFromEnv } from '@getmarrow/sdk';
193
-
194
- // Reads MARROW_API_KEY (required) and MARROW_BASE_URL (optional)
195
- // Defaults to mode: 'auto'
196
- const marrow = marrowFromEnv({ sessionId: 'my-agent-run-42' });
197
- ```
198
-
199
- ### Direct constructor
200
-
201
- ```typescript
202
- import MarrowClient from '@getmarrow/sdk';
203
-
204
- const marrow = new MarrowClient('mrw_...', { baseUrl: '...', sessionId: '...', mode: 'warn' });
205
- ```
206
-
207
209
  ---
208
210
 
209
- ## Why This Matters
210
-
211
- A normal memory system stores notes.
211
+ ## API Reference
212
212
 
213
- Marrow stores **decision history**:
214
- - what was attempted
215
- - what happened
216
- - what patterns are emerging
217
- - what the agent should do better next time
213
+ ### Core Methods
218
214
 
219
- That's the difference between:
220
- - an agent that "has memory"
221
- - and an agent that actually **improves**
215
+ #### `orient(taskType?)`
216
+ Call at session start. Returns failure warnings from your history.
222
217
 
223
- ---
218
+ #### `think(params)`
219
+ Log intent before acting. Returns pattern intelligence and recommendations.
224
220
 
225
- ## Privacy, Sanitization, and Data Ownership
221
+ #### `commit(params)`
222
+ Log the outcome after acting. Closes the decision loop.
226
223
 
227
- Marrow is designed to be useful **without treating user data casually**.
224
+ #### `run(description, fn, options?)`
225
+ Zero-ceremony wrapper. Handles orient → think → commit automatically.
228
226
 
229
- Key trust properties:
230
- - sensitive inputs can be sanitized before storage when possible
231
- - privacy-preserving pattern learning matters more than hoarding raw user data
232
- - API keys should be passed through environment variables, not hardcoded in source
233
- - the product direction is anonymized learning, not leaking raw private context across agents
234
- - users should be able to export and own their memory data instead of feeling trapped inside a black box
227
+ #### `wrap(meta, fn)`
228
+ Wrap any action to auto-log intent and outcome.
235
229
 
236
- In plain English:
237
- - Marrow should help agents learn from patterns
238
- - while minimizing unnecessary exposure of personal or sensitive information
239
-
240
- ---
230
+ ### Memory Methods
241
231
 
242
- ## What's New in v2.5.4
232
+ #### `listMemories(params?)`
233
+ List memories with optional filters (status, query, limit, agentId).
243
234
 
244
- ### Loop enforcement is live in the SDK
235
+ #### `getMemory(id)`
236
+ Get a single memory by ID.
245
237
 
246
- Marrow now helps agents run a real operating loop, not just log isolated thoughts after the fact.
238
+ #### `updateMemory(id, patch)`
239
+ Update memory text, tags, or metadata.
247
240
 
248
- You can now:
249
- - start the session with `orient()`
250
- - inspect loop state with `check()`
251
- - enable enforcement with `enforce({ mode })`
252
- - gate important work with `beforeAction()` / `afterAction()`
253
- - wrap real actions with `wrap()` so intent/outcome stay connected
241
+ #### `deleteMemory(id, meta?)`
242
+ Soft delete a memory.
254
243
 
255
- ```typescript
256
- const marrow = new MarrowClient(process.env.MARROW_API_KEY!);
244
+ #### `markOutdated(id, meta?)`
245
+ Mark a memory as outdated.
257
246
 
258
- marrow.enforce({ mode: 'warn' });
247
+ #### `supersedeMemory(id, replacement)`
248
+ Atomically replace a memory with a new version.
259
249
 
260
- await marrow.orient();
250
+ #### `shareMemory(id, options)`
251
+ Share a memory with specific agents.
261
252
 
262
- await marrow.think({
263
- action: 'Deploy auth refactor to staging',
264
- type: 'implementation',
265
- });
253
+ #### `exportMemories(options?)`
254
+ Export memories to JSON or CSV.
266
255
 
267
- await marrow.wrap(
268
- {
269
- action: 'Call deployment API',
270
- type: 'implementation',
271
- external: true,
272
- result: 'Staging deploy succeeded',
273
- },
274
- async () => deployToStaging()
275
- );
256
+ #### `importMemories(options)`
257
+ Import memories with merge (dedup) or replace mode.
276
258
 
277
- console.log(marrow.check().recommendedNext);
278
- // "done"
279
- ```
259
+ #### `retrieveMemories(query, params?)`
260
+ Full-text search with filters (from, to, tags, source, status, shared).
280
261
 
281
- ### Enforcement modes
262
+ ### Query Methods
282
263
 
283
- - `off` — track state without nudges or blocking
284
- - `warn` default; remind agents to close the loop without blocking work
285
- - `require` — block important external actions until intent is logged
286
- - `auto` — auto-log intent/outcome around wrapped actions
264
+ #### `ask(query)`
265
+ Query the collective hive in plain English.
287
266
 
288
- ### Also included in this release
267
+ #### `quickStatus()`
268
+ Check health and memory status.
289
269
 
290
- - `think()` returns loop metadata alongside intelligence
291
- - session-start guidance now nudges agents toward `marrow_think`
292
- - `agentPatterns()` still surfaces failure patterns, recurring decisions, and behavioral drift
293
- - `analytics()` still returns health score and performance breakdown
294
- - `think()` still returns `sanitized` and `upgradeHint` when applicable
270
+ #### `analytics()`
271
+ Get agent health score and trends.
295
272
 
296
273
  ---
297
274
 
298
- ## Loop Enforcement
275
+ ## Environment Variables
299
276
 
300
- Marrow now helps agents actually close the loop instead of treating memory like decorative trim.
301
-
302
- ```typescript
303
- const marrow = new MarrowClient(process.env.MARROW_API_KEY!);
304
-
305
- marrow.enforce({ mode: 'warn' }); // default
306
-
307
- await marrow.orient();
308
-
309
- const intent = await marrow.think({
310
- action: 'Deploy auth refactor to staging',
311
- type: 'implementation',
312
- });
313
-
314
- await marrow.wrap(
315
- { action: 'Call deployment API', type: 'implementation', external: true, result: 'Staging deploy succeeded' },
316
- async () => deployToStaging()
317
- );
318
-
319
- console.log(marrow.check().state.recommendedNext);
320
- // → "done"
321
- ```
322
-
323
- ### Modes
324
- - `off` — no loop enforcement
325
- - `warn` — non-blocking reminders, default
326
- - `require` — throws before important external actions if intent is missing, and reminds on incomplete exits
327
- - `auto` — auto-logs intent/outcome around wrapped actions
328
-
329
- ### New SDK APIs
330
- - `marrow.enforce({...})`
331
- - `marrow.check()`
332
- - `marrow.wrap(meta, fn)`
333
- - `marrow.beforeAction(meta)`
334
- - `marrow.afterAction(meta)`
335
-
336
- ### Session start copy
337
- - `Tip: log plans, decisions, and outcomes to Marrow so your agent improves over time.`
338
- - `You have not logged any decisions yet this session. Before acting, call marrow_think.`
277
+ | Variable | Required | Description |
278
+ |----------|----------|-------------|
279
+ | `MARROW_API_KEY` | Yes | Your API key from getmarrow.ai |
280
+ | `MARROW_BASE_URL` | No | Custom API URL (default: `https://api.getmarrow.ai`) |
281
+ | `MARROW_SESSION_ID` | No | Session identifier for multi-agent setups |
339
282
 
340
283
  ---
341
284
 
342
- ## API Reference
285
+ ## License
343
286
 
344
- ### Exports
345
-
346
- | Export | Description |
347
- |--------|-------------|
348
- | `MarrowClient` | Main client class |
349
- | `createMarrowClient(apiKey, options?)` | Factory — creates a MarrowClient |
350
- | `marrowFromEnv(options?)` | Creates client from `MARROW_API_KEY` / `MARROW_BASE_URL` env vars (auto mode default) |
351
- | `MarrowLoopRequiredError` | Thrown in `require` mode when loop is violated |
352
-
353
- ### MarrowClient Methods
354
-
355
- | Method | Description |
356
- |--------|-------------|
357
- | `run(description, fn, options?)` | Zero-ceremony wrapper: orient + think + fn + commit |
358
- | `orient(params?)` | Start session with context from prior decisions |
359
- | `think(params)` | Log intent, get intelligence |
360
- | `commit(params)` | Close the loop with outcome |
361
- | `check()` | Inspect current loop state |
362
- | `enforce(options?)` | Set enforcement mode |
363
- | `wrap(meta, fn)` | Wrap an action with intent/outcome tracking |
364
- | `beforeAction(meta)` | Pre-action enforcement check |
365
- | `afterAction(meta)` | Post-action state update |
366
- | `wrapPublish(action, fn)` | Wrap a publish action |
367
- | `wrapDeploy(action, fn)` | Wrap a deploy action |
368
- | `wrapExternalWrite(action, fn)` | Wrap an external write |
369
- | `wrapHandoff(action, fn)` | Wrap a handoff |
370
- | `agentPatterns(params?)` | Get failure patterns and behavioral drift |
371
- | `analytics()` | Get health score and performance breakdown |
287
+ MIT
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @getmarrow/sdk — MarrowClient Implementation
3
+ */
4
+ import type { MarrowClientOptions, MarrowEnforceOptions, MarrowActionMeta, MarrowCheckResult, MarrowLoopState, MarrowOrientResult, MarrowThinkResult, MarrowCommitResult, MarrowAskResult, MarrowQuickStatusResult, MarrowMemory, MarrowMemoryRetrievalResult, MemoryStatus, MemoryShareOptions, MemoryExportOptions, MemoryImportOptions } from './types';
5
+ export declare class MarrowLoopRequiredError extends Error {
6
+ readonly code = "MARROW_LOOP_REQUIRED";
7
+ readonly state: MarrowLoopState;
8
+ constructor(message: string, state: MarrowLoopState);
9
+ }
10
+ export declare class MarrowClient {
11
+ private apiKey;
12
+ private decisionId;
13
+ private orientWarnings;
14
+ private enforcement;
15
+ private loopState;
16
+ private sessionId;
17
+ private reminderBudget;
18
+ private baseUrl;
19
+ constructor(apiKey: string, options?: MarrowClientOptions | string);
20
+ enforce(options?: MarrowEnforceOptions): MarrowCheckResult;
21
+ check(): MarrowCheckResult;
22
+ run<T>(description: string, fn: () => Promise<T> | T, options?: {
23
+ type?: string;
24
+ context?: Record<string, unknown>;
25
+ }): Promise<T>;
26
+ beforeAction(meta: MarrowActionMeta): Promise<MarrowCheckResult>;
27
+ afterAction(meta: MarrowActionMeta): Promise<MarrowCheckResult>;
28
+ wrap<T>(meta: MarrowActionMeta, fn: () => Promise<T> | T): Promise<T>;
29
+ wrapPublish<T>(action: string, fn: () => Promise<T> | T, meta?: Omit<MarrowActionMeta, 'action' | 'chokePoint' | 'actionClass' | 'external' | 'meaningful'>): Promise<T>;
30
+ wrapDeploy<T>(action: string, fn: () => Promise<T> | T, meta?: Omit<MarrowActionMeta, 'action' | 'chokePoint' | 'actionClass' | 'external' | 'meaningful'>): Promise<T>;
31
+ wrapExternalWrite<T>(action: string, fn: () => Promise<T> | T, meta?: Omit<MarrowActionMeta, 'action' | 'chokePoint' | 'actionClass' | 'external' | 'meaningful'>): Promise<T>;
32
+ wrapHandoff<T>(action: string, fn: () => Promise<T> | T, meta?: Omit<MarrowActionMeta, 'action' | 'chokePoint' | 'actionClass' | 'external' | 'meaningful'>): Promise<T>;
33
+ think(params: {
34
+ action: string;
35
+ type?: string;
36
+ context?: Record<string, unknown>;
37
+ previousSuccess?: boolean;
38
+ previousOutcome?: string;
39
+ previousCausedBy?: string;
40
+ }): Promise<MarrowThinkResult>;
41
+ commit(params: {
42
+ success: boolean;
43
+ outcome: string;
44
+ causedBy?: string;
45
+ }): Promise<MarrowCommitResult>;
46
+ orient(params?: {
47
+ taskType?: string;
48
+ }): Promise<MarrowOrientResult>;
49
+ agentPatterns(params?: {
50
+ type?: string;
51
+ limit?: number;
52
+ }): Promise<{
53
+ failurePatterns: Array<{
54
+ decisionType: string;
55
+ failureRate: number;
56
+ count: number;
57
+ lastSeen: string;
58
+ }>;
59
+ recurringDecisions: Array<{
60
+ decisionType: string;
61
+ frequency: number;
62
+ avgConfidence: number;
63
+ trend: string;
64
+ }>;
65
+ behavioralDrift: {
66
+ successRate7d: number;
67
+ successRate30d: number;
68
+ drift: string;
69
+ direction: string;
70
+ };
71
+ topFailureTypes: string[];
72
+ generatedAt: string;
73
+ }>;
74
+ analytics(): Promise<{
75
+ healthScore: {
76
+ score: number;
77
+ label: string;
78
+ breakdown: Record<string, unknown>;
79
+ trend: string;
80
+ vsLastWeek: string;
81
+ };
82
+ [key: string]: unknown;
83
+ }>;
84
+ ask(query: string): Promise<MarrowAskResult>;
85
+ quickStatus(): Promise<MarrowQuickStatusResult>;
86
+ listMemories(params?: {
87
+ status?: MemoryStatus;
88
+ query?: string;
89
+ includeDeleted?: boolean;
90
+ limit?: number;
91
+ agentId?: string;
92
+ }): Promise<MarrowMemory[]>;
93
+ getMemory(id: string): Promise<MarrowMemory | null>;
94
+ updateMemory(id: string, patch: {
95
+ text?: string;
96
+ source?: string | null;
97
+ tags?: string[];
98
+ actor?: string;
99
+ note?: string;
100
+ }): Promise<MarrowMemory>;
101
+ deleteMemory(id: string, meta?: {
102
+ actor?: string;
103
+ note?: string;
104
+ }): Promise<MarrowMemory>;
105
+ markOutdated(id: string, meta?: {
106
+ actor?: string;
107
+ note?: string;
108
+ }): Promise<MarrowMemory>;
109
+ supersedeMemory(id: string, replacement: {
110
+ text: string;
111
+ source?: string;
112
+ tags?: string[];
113
+ actor?: string;
114
+ note?: string;
115
+ }): Promise<{
116
+ old: MarrowMemory;
117
+ replacement: MarrowMemory;
118
+ }>;
119
+ retrieveMemories(query: string, params?: {
120
+ limit?: number;
121
+ includeStale?: boolean;
122
+ from?: string;
123
+ to?: string;
124
+ tags?: string;
125
+ source?: string;
126
+ status?: MemoryStatus;
127
+ shared?: boolean;
128
+ }): Promise<MarrowMemoryRetrievalResult>;
129
+ shareMemory(id: string, options: MemoryShareOptions): Promise<MarrowMemory>;
130
+ exportMemories(options?: MemoryExportOptions): Promise<{
131
+ exported_at: string;
132
+ account_id: string;
133
+ count: number;
134
+ memories: MarrowMemory[];
135
+ }>;
136
+ importMemories(options: MemoryImportOptions): Promise<{
137
+ imported: number;
138
+ skipped: number;
139
+ errors: string[];
140
+ }>;
141
+ private request;
142
+ }
143
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}