aismemory 0.5.0 → 0.5.1

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.
Files changed (77) hide show
  1. package/dist/__tests__/auth-staleness.test.d.ts +9 -0
  2. package/dist/__tests__/auth-staleness.test.js +46 -0
  3. package/dist/__tests__/auth-staleness.test.js.map +1 -0
  4. package/dist/__tests__/auto-handoff.test.js +108 -2
  5. package/dist/__tests__/auto-handoff.test.js.map +1 -1
  6. package/dist/__tests__/config.test.js +6 -3
  7. package/dist/__tests__/config.test.js.map +1 -1
  8. package/dist/__tests__/env-agent.test.d.ts +1 -0
  9. package/dist/__tests__/env-agent.test.js +19 -0
  10. package/dist/__tests__/env-agent.test.js.map +1 -0
  11. package/dist/__tests__/existing-hashes.test.d.ts +1 -0
  12. package/dist/__tests__/existing-hashes.test.js +122 -0
  13. package/dist/__tests__/existing-hashes.test.js.map +1 -0
  14. package/dist/__tests__/hydration.test.js +38 -0
  15. package/dist/__tests__/hydration.test.js.map +1 -1
  16. package/dist/__tests__/local-mirror.test.js +4 -0
  17. package/dist/__tests__/local-mirror.test.js.map +1 -1
  18. package/dist/__tests__/oauth-credentials.test.d.ts +1 -0
  19. package/dist/__tests__/oauth-credentials.test.js +29 -0
  20. package/dist/__tests__/oauth-credentials.test.js.map +1 -0
  21. package/dist/__tests__/pipeline-ingestion.test.js +112 -1
  22. package/dist/__tests__/pipeline-ingestion.test.js.map +1 -1
  23. package/dist/__tests__/refresh.test.js +24 -0
  24. package/dist/__tests__/refresh.test.js.map +1 -1
  25. package/dist/__tests__/sync-memory-cli.test.d.ts +1 -0
  26. package/dist/__tests__/sync-memory-cli.test.js +200 -0
  27. package/dist/__tests__/sync-memory-cli.test.js.map +1 -0
  28. package/dist/__tests__/telemetry.test.d.ts +1 -0
  29. package/dist/__tests__/telemetry.test.js +67 -0
  30. package/dist/__tests__/telemetry.test.js.map +1 -0
  31. package/dist/__tests__/token-expiry-reauth.test.d.ts +1 -0
  32. package/dist/__tests__/token-expiry-reauth.test.js +201 -0
  33. package/dist/__tests__/token-expiry-reauth.test.js.map +1 -0
  34. package/dist/__tests__/tool-args.test.d.ts +1 -0
  35. package/dist/__tests__/tool-args.test.js +78 -0
  36. package/dist/__tests__/tool-args.test.js.map +1 -0
  37. package/dist/auth-staleness.d.ts +27 -0
  38. package/dist/auth-staleness.js +41 -0
  39. package/dist/auth-staleness.js.map +1 -0
  40. package/dist/auto-handoff.d.ts +2 -0
  41. package/dist/auto-handoff.js +40 -16
  42. package/dist/auto-handoff.js.map +1 -1
  43. package/dist/cli/sync-memory.js +31 -36
  44. package/dist/cli/sync-memory.js.map +1 -1
  45. package/dist/config.js +4 -1
  46. package/dist/config.js.map +1 -1
  47. package/dist/env-agent.d.ts +10 -0
  48. package/dist/env-agent.js +14 -0
  49. package/dist/env-agent.js.map +1 -0
  50. package/dist/hydration.js +54 -3
  51. package/dist/hydration.js.map +1 -1
  52. package/dist/index.js +229 -113
  53. package/dist/index.js.map +1 -1
  54. package/dist/local-mirror.d.ts +5 -0
  55. package/dist/local-mirror.js +72 -14
  56. package/dist/local-mirror.js.map +1 -1
  57. package/dist/oauth-credentials.d.ts +14 -0
  58. package/dist/oauth-credentials.js +35 -0
  59. package/dist/oauth-credentials.js.map +1 -0
  60. package/dist/pipeline/bulk-store.d.ts +46 -0
  61. package/dist/pipeline/bulk-store.js +165 -0
  62. package/dist/pipeline/bulk-store.js.map +1 -0
  63. package/dist/pipeline/existing-hashes.d.ts +20 -0
  64. package/dist/pipeline/existing-hashes.js +111 -0
  65. package/dist/pipeline/existing-hashes.js.map +1 -0
  66. package/dist/pipeline/ingestion.d.ts +8 -4
  67. package/dist/pipeline/ingestion.js +36 -8
  68. package/dist/pipeline/ingestion.js.map +1 -1
  69. package/dist/telemetry.d.ts +22 -0
  70. package/dist/telemetry.js +28 -0
  71. package/dist/telemetry.js.map +1 -0
  72. package/dist/tool-args.d.ts +52 -0
  73. package/dist/tool-args.js +78 -0
  74. package/dist/tool-args.js.map +1 -0
  75. package/dist/trust-ledger.js +2 -2
  76. package/dist/trust-ledger.js.map +1 -1
  77. package/package.json +9 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"existing-hashes.js","sourceRoot":"","sources":["../../src/pipeline/existing-hashes.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export interface BulkStoreResult {
15
15
  }
16
16
  export type BulkStoreFn = (drafts: AisMemoryDraft[]) => Promise<BulkStoreResult>;
17
17
  export type ReviewFn = (drafts: AisMemoryDraft[]) => Promise<AisMemoryDraft[]>;
18
+ /** AIS bulk endpoint limit — must not exceed this per request. */
19
+ export declare const BULK_BATCH_SIZE = 100;
18
20
  export interface IngestionOptions {
19
21
  adapter: SourceAdapter;
20
22
  rawSourceData: string | FilesystemResult;
@@ -43,10 +45,12 @@ export interface IngestionOptions {
43
45
  * Failure semantics:
44
46
  * - If `bulkStore` throws, neither ledger nor mirror is updated — the caller
45
47
  * may safely retry the entire run without double-counting.
46
- * - If `mirror.append` throws after a successful `bulkStore`, the ledger has
47
- * already been advanced (AIS accepted the memories) and the failure is
48
- * surfaced as a `warnings` entry rather than an exception so the caller
49
- * receives a valid `SyncResult`.
48
+ * - If `bulkStore` returns any failures, the trust ledger is not advanced —
49
+ * partial AIS writes must not count toward auto-commit trust.
50
+ * - If `mirror.append` throws after a fully successful `bulkStore`, the
51
+ * ledger has already been advanced (AIS accepted all memories) and the
52
+ * failure is surfaced as a `warnings` entry rather than an exception so
53
+ * the caller receives a valid `SyncResult`.
50
54
  *
51
55
  * Zero-import path:
52
56
  * - When all candidates are dedupe-skipped or rejected by `review`,
@@ -1,5 +1,7 @@
1
1
  import { preCommitDedupe } from './dedupe.js';
2
2
  import { applyTrustTags } from './trust-tagger.js';
3
+ /** AIS bulk endpoint limit — must not exceed this per request. */
4
+ export const BULK_BATCH_SIZE = 100;
3
5
  /**
4
6
  * Run the full ingestion pipeline for a single source adapter + scope pair.
5
7
  *
@@ -15,10 +17,12 @@ import { applyTrustTags } from './trust-tagger.js';
15
17
  * Failure semantics:
16
18
  * - If `bulkStore` throws, neither ledger nor mirror is updated — the caller
17
19
  * may safely retry the entire run without double-counting.
18
- * - If `mirror.append` throws after a successful `bulkStore`, the ledger has
19
- * already been advanced (AIS accepted the memories) and the failure is
20
- * surfaced as a `warnings` entry rather than an exception so the caller
21
- * receives a valid `SyncResult`.
20
+ * - If `bulkStore` returns any failures, the trust ledger is not advanced —
21
+ * partial AIS writes must not count toward auto-commit trust.
22
+ * - If `mirror.append` throws after a fully successful `bulkStore`, the
23
+ * ledger has already been advanced (AIS accepted all memories) and the
24
+ * failure is surfaced as a `warnings` entry rather than an exception so
25
+ * the caller receives a valid `SyncResult`.
22
26
  *
23
27
  * Zero-import path:
24
28
  * - When all candidates are dedupe-skipped or rejected by `review`,
@@ -47,10 +51,13 @@ export async function runIngestion(options) {
47
51
  failed: [],
48
52
  };
49
53
  }
50
- const storeResult = await bulkStore(approved);
51
- // Advance the trust ledger FIRST — if AIS accepted the memories, the
52
- // trust ladder must reflect that regardless of local-mirror success.
53
- ledger.recordSync(agentId, adapter.id, scopeKey);
54
+ // Split approved drafts into chunks to stay within AIS bulk limit.
55
+ const storeResult = await chunkedBulkStore(bulkStore, approved);
56
+ // Advance trust only on a clean bulk store partial failures must not
57
+ // increment syncCount toward auto-commit.
58
+ if (storeResult.failed.length === 0) {
59
+ ledger.recordSync(agentId, adapter.id, scopeKey);
60
+ }
54
61
  const mirrorEntries = storeResult.created.map((c) => ({
55
62
  aisMemoryId: c.id,
56
63
  memory: approved[c.index],
@@ -72,6 +79,27 @@ export async function runIngestion(options) {
72
79
  failed: storeResult.failed,
73
80
  };
74
81
  }
82
+ /**
83
+ * Call `fn` in batches of BULK_BATCH_SIZE, remapping per-batch indices to
84
+ * global indices so callers see a single aggregated BulkStoreResult.
85
+ */
86
+ async function chunkedBulkStore(fn, drafts) {
87
+ if (drafts.length <= BULK_BATCH_SIZE) {
88
+ return fn(drafts);
89
+ }
90
+ const aggregated = { created: [], failed: [] };
91
+ for (let offset = 0; offset < drafts.length; offset += BULK_BATCH_SIZE) {
92
+ const chunk = drafts.slice(offset, offset + BULK_BATCH_SIZE);
93
+ const result = await fn(chunk);
94
+ for (const c of result.created) {
95
+ aggregated.created.push({ index: c.index + offset, id: c.id });
96
+ }
97
+ for (const f of result.failed) {
98
+ aggregated.failed.push({ index: f.index + offset, error: f.error });
99
+ }
100
+ }
101
+ return aggregated;
102
+ }
75
103
  function scopeToKey(scope) {
76
104
  // Stable multi-field encoding prevents collisions when optional fields
77
105
  // are absent. Pipe separator is safe because none of the component
@@ -1 +1 @@
1
- {"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../src/pipeline/ingestion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../src/pipeline/ingestion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type TelemetryEventName = 'auth.device_flow.start' | 'auth.key.success' | 'auth.key.fallback' | 'tool.call' | 'ais.http.failure';
2
+ export interface TelemetryEvent {
3
+ event: TelemetryEventName;
4
+ ts: string;
5
+ /** SHA-256 prefix of agent id (16 hex chars), when applicable */
6
+ agentIdHash?: string;
7
+ tool?: string;
8
+ path?: string;
9
+ latencyMs?: number;
10
+ status?: 'ok' | 'error';
11
+ httpStatus?: number;
12
+ error?: string;
13
+ detail?: string;
14
+ }
15
+ /** Returns whether structured telemetry emission is enabled. */
16
+ export declare function isTelemetryEnabled(): boolean;
17
+ /** One-way hash for agent id — safe for operational dashboards. */
18
+ export declare function hashAgentId(agentId: string): string;
19
+ /** Emit a single JSON telemetry line when opt-in is enabled. */
20
+ export declare function emitTelemetry(event: Omit<TelemetryEvent, 'ts'> & {
21
+ ts?: string;
22
+ }): void;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Opt-in structured telemetry for aismemory MCP (JSON lines on stderr).
3
+ *
4
+ * Enable with AISMEMORY_TELEMETRY=1 (or "true"/"yes"). Events are suitable for
5
+ * log aggregation; agent IDs are hashed — never emitted in plain text.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ const TRUTHY = new Set(['1', 'true', 'yes', 'on']);
9
+ /** Returns whether structured telemetry emission is enabled. */
10
+ export function isTelemetryEnabled() {
11
+ const raw = process.env['AISMEMORY_TELEMETRY']?.trim().toLowerCase();
12
+ return raw !== undefined && TRUTHY.has(raw);
13
+ }
14
+ /** One-way hash for agent id — safe for operational dashboards. */
15
+ export function hashAgentId(agentId) {
16
+ return createHash('sha256').update(agentId).digest('hex').slice(0, 16);
17
+ }
18
+ /** Emit a single JSON telemetry line when opt-in is enabled. */
19
+ export function emitTelemetry(event) {
20
+ if (!isTelemetryEnabled())
21
+ return;
22
+ const payload = {
23
+ ...event,
24
+ ts: event.ts ?? new Date().toISOString(),
25
+ };
26
+ process.stderr.write(`[aismemory-telemetry] ${JSON.stringify(payload)}\n`);
27
+ }
28
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAuBzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnD,gEAAgE;AAChE,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrE,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,KAAmD;IAC/E,IAAI,CAAC,kBAAkB,EAAE;QAAE,OAAO;IAClC,MAAM,OAAO,GAAmB;QAC9B,GAAG,KAAK;QACR,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACzC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Runtime validation for MCP tool arguments before AIS HTTP calls.
3
+ * Schemas mirror the JSON Schema declared in `tools` (index.ts) and AIS limits.
4
+ */
5
+ import { z } from 'zod';
6
+ /** Max content/query length for memories (matches AIS memory-handlers). */
7
+ export declare const MAX_MEMORY_CONTENT_LENGTH: number;
8
+ /** Max recall limit (matches AIS memory-handlers). */
9
+ export declare const MAX_QUERY_LIMIT = 100;
10
+ export declare const rememberArgsSchema: z.ZodObject<{
11
+ content: z.ZodString;
12
+ type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
13
+ goal: "goal";
14
+ fact: "fact";
15
+ event: "event";
16
+ lesson: "lesson";
17
+ context: "context";
18
+ task: "task";
19
+ }>>>;
20
+ importance: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
21
+ }, z.core.$strip>;
22
+ export declare const recallArgsSchema: z.ZodObject<{
23
+ query: z.ZodString;
24
+ limit: z.ZodOptional<z.ZodNumber>;
25
+ type: z.ZodOptional<z.ZodEnum<{
26
+ goal: "goal";
27
+ fact: "fact";
28
+ event: "event";
29
+ lesson: "lesson";
30
+ context: "context";
31
+ task: "task";
32
+ }>>;
33
+ }, z.core.$strip>;
34
+ export declare const handoffArgsSchema: z.ZodObject<{
35
+ summary: z.ZodOptional<z.ZodString>;
36
+ keyLearnings: z.ZodOptional<z.ZodArray<z.ZodString>>;
37
+ }, z.core.$strip>;
38
+ export declare const agentLoadArgsSchema: z.ZodObject<{
39
+ query: z.ZodString;
40
+ }, z.core.$strip>;
41
+ /** Tools with no parameters — reject unexpected keys. */
42
+ export declare const emptyArgsSchema: z.ZodObject<{}, z.core.$strict>;
43
+ export type RememberArgs = z.infer<typeof rememberArgsSchema>;
44
+ export type RecallArgs = z.infer<typeof recallArgsSchema>;
45
+ export type HandoffArgs = z.infer<typeof handoffArgsSchema>;
46
+ export type AgentLoadArgs = z.infer<typeof agentLoadArgsSchema>;
47
+ export declare function formatValidationError(error: z.ZodError): string;
48
+ export declare function parseRememberArgs(raw: unknown): RememberArgs;
49
+ export declare function parseRecallArgs(raw: unknown): RecallArgs;
50
+ export declare function parseHandoffArgs(raw: unknown): HandoffArgs;
51
+ export declare function parseAgentLoadArgs(raw: unknown): AgentLoadArgs;
52
+ export declare function parseEmptyToolArgs(raw: unknown): Record<string, never>;
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Runtime validation for MCP tool arguments before AIS HTTP calls.
3
+ * Schemas mirror the JSON Schema declared in `tools` (index.ts) and AIS limits.
4
+ */
5
+ import { z } from 'zod';
6
+ /** Max content/query length for memories (matches AIS memory-handlers). */
7
+ export const MAX_MEMORY_CONTENT_LENGTH = 256 * 1024;
8
+ /** Max recall limit (matches AIS memory-handlers). */
9
+ export const MAX_QUERY_LIMIT = 100;
10
+ const memoryTypeSchema = z.enum(['fact', 'event', 'lesson', 'context', 'goal', 'task']);
11
+ export const rememberArgsSchema = z.object({
12
+ content: z
13
+ .string({ message: 'content is required and must be a string' })
14
+ .min(1, 'content is required and must be a string')
15
+ .max(MAX_MEMORY_CONTENT_LENGTH, `content exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`),
16
+ type: memoryTypeSchema.optional().default('context'),
17
+ importance: z.number().min(0).max(1).optional().default(0.5),
18
+ });
19
+ export const recallArgsSchema = z.object({
20
+ query: z
21
+ .string({ message: 'query is required and must be a string' })
22
+ .min(1, 'query is required and must be a string')
23
+ .max(MAX_MEMORY_CONTENT_LENGTH, `query exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`),
24
+ limit: z.number().int().min(1).max(MAX_QUERY_LIMIT).optional(),
25
+ type: memoryTypeSchema.optional(),
26
+ });
27
+ export const handoffArgsSchema = z.object({
28
+ summary: z
29
+ .string()
30
+ .max(MAX_MEMORY_CONTENT_LENGTH, `summary exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`)
31
+ .optional(),
32
+ keyLearnings: z
33
+ .array(z
34
+ .string()
35
+ .max(MAX_MEMORY_CONTENT_LENGTH, `keyLearnings item exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`))
36
+ .max(100, 'keyLearnings exceeds maximum of 100 items')
37
+ .optional(),
38
+ });
39
+ export const agentLoadArgsSchema = z.object({
40
+ query: z
41
+ .string({ message: 'agent_load: query is required' })
42
+ .trim()
43
+ .min(1, 'agent_load: query is required')
44
+ .max(500, 'agent_load: query exceeds maximum length of 500 characters'),
45
+ });
46
+ /** Tools with no parameters — reject unexpected keys. */
47
+ export const emptyArgsSchema = z.object({}).strict();
48
+ export function formatValidationError(error) {
49
+ return error.issues
50
+ .map((issue) => {
51
+ const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
52
+ return `${path}${issue.message}`;
53
+ })
54
+ .join('; ');
55
+ }
56
+ function parseOrThrow(schema, raw) {
57
+ const result = schema.safeParse(raw);
58
+ if (!result.success) {
59
+ throw new Error(formatValidationError(result.error));
60
+ }
61
+ return result.data;
62
+ }
63
+ export function parseRememberArgs(raw) {
64
+ return parseOrThrow(rememberArgsSchema, raw);
65
+ }
66
+ export function parseRecallArgs(raw) {
67
+ return parseOrThrow(recallArgsSchema, raw);
68
+ }
69
+ export function parseHandoffArgs(raw) {
70
+ return parseOrThrow(handoffArgsSchema, raw);
71
+ }
72
+ export function parseAgentLoadArgs(raw) {
73
+ return parseOrThrow(agentLoadArgsSchema, raw);
74
+ }
75
+ export function parseEmptyToolArgs(raw) {
76
+ return parseOrThrow(emptyArgsSchema, raw);
77
+ }
78
+ //# sourceMappingURL=tool-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-args.js","sourceRoot":"","sources":["../src/tool-args.ts"],"names":[],"mappings":"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"}
@@ -19,10 +19,10 @@ export class TrustLedger {
19
19
  const backup = `${this.filePath}.corrupt-${Date.now()}`;
20
20
  try {
21
21
  renameSync(this.filePath, backup);
22
- console.warn(`[TrustLedger] Corrupt ledger file renamed to ${backup}; starting fresh.`);
22
+ process.stderr.write(`[TrustLedger] Corrupt ledger file renamed to ${backup}; starting fresh.\n`);
23
23
  }
24
24
  catch {
25
- console.warn(`[TrustLedger] Corrupt ledger file could not be backed up; starting fresh.`);
25
+ process.stderr.write(`[TrustLedger] Corrupt ledger file could not be backed up; starting fresh.\n`);
26
26
  }
27
27
  this.data = {};
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trust-ledger.js","sourceRoot":"","sources":["../src/trust-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trust-ledger.js","sourceRoot":"","sources":["../src/trust-ledger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "name": "aismemory",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Persistent memory for AI agents. MCP server that connects to Agent Identity Service.",
5
5
  "type": "module",
6
- "bin": "dist/index.js",
6
+ "bin": {
7
+ "aismemory": "dist/index.js",
8
+ "aismemory-sync": "dist/cli/sync-memory.js"
9
+ },
7
10
  "main": "dist/index.js",
8
11
  "files": [
9
12
  "dist",
10
13
  "README.md"
11
14
  ],
12
15
  "scripts": {
13
- "build": "tsc && chmod +x dist/index.js",
16
+ "build": "tsc && chmod +x dist/index.js dist/cli/sync-memory.js",
14
17
  "prepack": "npm run build",
18
+ "sync": "node dist/cli/sync-memory.js",
15
19
  "test": "vitest run"
16
20
  },
17
21
  "keywords": [
@@ -25,7 +29,8 @@
25
29
  "author": "Agents & Swarms <hello@agentsandswarms.ai>",
26
30
  "license": "MIT",
27
31
  "dependencies": {
28
- "@modelcontextprotocol/sdk": "^1.25.0"
32
+ "@modelcontextprotocol/sdk": "^1.25.0",
33
+ "zod": "^4.1.13"
29
34
  },
30
35
  "devDependencies": {
31
36
  "typescript": "^5.7.0",