contextmate 0.1.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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +142 -0
  3. package/dist/src/adapters/base.d.ts +32 -0
  4. package/dist/src/adapters/base.d.ts.map +1 -0
  5. package/dist/src/adapters/base.js +49 -0
  6. package/dist/src/adapters/base.js.map +1 -0
  7. package/dist/src/adapters/claude.d.ts +30 -0
  8. package/dist/src/adapters/claude.d.ts.map +1 -0
  9. package/dist/src/adapters/claude.js +534 -0
  10. package/dist/src/adapters/claude.js.map +1 -0
  11. package/dist/src/adapters/index.d.ts +7 -0
  12. package/dist/src/adapters/index.d.ts.map +1 -0
  13. package/dist/src/adapters/index.js +16 -0
  14. package/dist/src/adapters/index.js.map +1 -0
  15. package/dist/src/adapters/openclaw.d.ts +15 -0
  16. package/dist/src/adapters/openclaw.d.ts.map +1 -0
  17. package/dist/src/adapters/openclaw.js +198 -0
  18. package/dist/src/adapters/openclaw.js.map +1 -0
  19. package/dist/src/bin/contextmate.d.ts +3 -0
  20. package/dist/src/bin/contextmate.d.ts.map +1 -0
  21. package/dist/src/bin/contextmate.js +4 -0
  22. package/dist/src/bin/contextmate.js.map +1 -0
  23. package/dist/src/cli/adapter.d.ts +3 -0
  24. package/dist/src/cli/adapter.d.ts.map +1 -0
  25. package/dist/src/cli/adapter.js +187 -0
  26. package/dist/src/cli/adapter.js.map +1 -0
  27. package/dist/src/cli/daemon.d.ts +3 -0
  28. package/dist/src/cli/daemon.d.ts.map +1 -0
  29. package/dist/src/cli/daemon.js +212 -0
  30. package/dist/src/cli/daemon.js.map +1 -0
  31. package/dist/src/cli/files.d.ts +3 -0
  32. package/dist/src/cli/files.d.ts.map +1 -0
  33. package/dist/src/cli/files.js +158 -0
  34. package/dist/src/cli/files.js.map +1 -0
  35. package/dist/src/cli/index.d.ts +3 -0
  36. package/dist/src/cli/index.d.ts.map +1 -0
  37. package/dist/src/cli/index.js +20 -0
  38. package/dist/src/cli/index.js.map +1 -0
  39. package/dist/src/cli/init.d.ts +3 -0
  40. package/dist/src/cli/init.d.ts.map +1 -0
  41. package/dist/src/cli/init.js +88 -0
  42. package/dist/src/cli/init.js.map +1 -0
  43. package/dist/src/cli/log.d.ts +3 -0
  44. package/dist/src/cli/log.d.ts.map +1 -0
  45. package/dist/src/cli/log.js +141 -0
  46. package/dist/src/cli/log.js.map +1 -0
  47. package/dist/src/cli/mcp.d.ts +3 -0
  48. package/dist/src/cli/mcp.d.ts.map +1 -0
  49. package/dist/src/cli/mcp.js +186 -0
  50. package/dist/src/cli/mcp.js.map +1 -0
  51. package/dist/src/cli/status.d.ts +3 -0
  52. package/dist/src/cli/status.d.ts.map +1 -0
  53. package/dist/src/cli/status.js +107 -0
  54. package/dist/src/cli/status.js.map +1 -0
  55. package/dist/src/config.d.ts +42 -0
  56. package/dist/src/config.d.ts.map +1 -0
  57. package/dist/src/config.js +93 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/crypto/auth.d.ts +4 -0
  60. package/dist/src/crypto/auth.d.ts.map +1 -0
  61. package/dist/src/crypto/auth.js +21 -0
  62. package/dist/src/crypto/auth.js.map +1 -0
  63. package/dist/src/crypto/encrypt.d.ts +9 -0
  64. package/dist/src/crypto/encrypt.d.ts.map +1 -0
  65. package/dist/src/crypto/encrypt.js +39 -0
  66. package/dist/src/crypto/encrypt.js.map +1 -0
  67. package/dist/src/crypto/index.d.ts +4 -0
  68. package/dist/src/crypto/index.d.ts.map +1 -0
  69. package/dist/src/crypto/index.js +4 -0
  70. package/dist/src/crypto/index.js.map +1 -0
  71. package/dist/src/crypto/keys.d.ts +9 -0
  72. package/dist/src/crypto/keys.d.ts.map +1 -0
  73. package/dist/src/crypto/keys.js +43 -0
  74. package/dist/src/crypto/keys.js.map +1 -0
  75. package/dist/src/mcp/embeddings.d.ts +16 -0
  76. package/dist/src/mcp/embeddings.d.ts.map +1 -0
  77. package/dist/src/mcp/embeddings.js +237 -0
  78. package/dist/src/mcp/embeddings.js.map +1 -0
  79. package/dist/src/mcp/index.d.ts +10 -0
  80. package/dist/src/mcp/index.d.ts.map +1 -0
  81. package/dist/src/mcp/index.js +6 -0
  82. package/dist/src/mcp/index.js.map +1 -0
  83. package/dist/src/mcp/rerank.d.ts +14 -0
  84. package/dist/src/mcp/rerank.d.ts.map +1 -0
  85. package/dist/src/mcp/rerank.js +47 -0
  86. package/dist/src/mcp/rerank.js.map +1 -0
  87. package/dist/src/mcp/scope.d.ts +26 -0
  88. package/dist/src/mcp/scope.d.ts.map +1 -0
  89. package/dist/src/mcp/scope.js +71 -0
  90. package/dist/src/mcp/scope.js.map +1 -0
  91. package/dist/src/mcp/search.d.ts +18 -0
  92. package/dist/src/mcp/search.d.ts.map +1 -0
  93. package/dist/src/mcp/search.js +110 -0
  94. package/dist/src/mcp/search.js.map +1 -0
  95. package/dist/src/mcp/server.d.ts +15 -0
  96. package/dist/src/mcp/server.d.ts.map +1 -0
  97. package/dist/src/mcp/server.js +340 -0
  98. package/dist/src/mcp/server.js.map +1 -0
  99. package/dist/src/sync/client.d.ts +25 -0
  100. package/dist/src/sync/client.d.ts.map +1 -0
  101. package/dist/src/sync/client.js +109 -0
  102. package/dist/src/sync/client.js.map +1 -0
  103. package/dist/src/sync/engine.d.ts +21 -0
  104. package/dist/src/sync/engine.d.ts.map +1 -0
  105. package/dist/src/sync/engine.js +304 -0
  106. package/dist/src/sync/engine.js.map +1 -0
  107. package/dist/src/sync/index.d.ts +6 -0
  108. package/dist/src/sync/index.d.ts.map +1 -0
  109. package/dist/src/sync/index.js +6 -0
  110. package/dist/src/sync/index.js.map +1 -0
  111. package/dist/src/sync/state.d.ts +33 -0
  112. package/dist/src/sync/state.d.ts.map +1 -0
  113. package/dist/src/sync/state.js +146 -0
  114. package/dist/src/sync/state.js.map +1 -0
  115. package/dist/src/sync/watcher.d.ts +14 -0
  116. package/dist/src/sync/watcher.d.ts.map +1 -0
  117. package/dist/src/sync/watcher.js +74 -0
  118. package/dist/src/sync/watcher.js.map +1 -0
  119. package/dist/src/sync/websocket.d.ts +22 -0
  120. package/dist/src/sync/websocket.d.ts.map +1 -0
  121. package/dist/src/sync/websocket.js +103 -0
  122. package/dist/src/sync/websocket.js.map +1 -0
  123. package/dist/src/types.d.ts +63 -0
  124. package/dist/src/types.d.ts.map +1 -0
  125. package/dist/src/types.js +2 -0
  126. package/dist/src/types.js.map +1 -0
  127. package/dist/src/utils/paths.d.ts +9 -0
  128. package/dist/src/utils/paths.d.ts.map +1 -0
  129. package/dist/src/utils/paths.js +24 -0
  130. package/dist/src/utils/paths.js.map +1 -0
  131. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/sync/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export declare class SyncWebSocket extends EventEmitter {
3
+ private ws;
4
+ private readonly url;
5
+ private readonly token;
6
+ private reconnectAttempts;
7
+ private reconnectTimer;
8
+ private heartbeatTimer;
9
+ private shouldReconnect;
10
+ private static readonly MAX_BACKOFF_MS;
11
+ private static readonly HEARTBEAT_INTERVAL_MS;
12
+ constructor(url: string, token: string);
13
+ connect(): void;
14
+ disconnect(): void;
15
+ isConnected(): boolean;
16
+ private doConnect;
17
+ private handleMessage;
18
+ private scheduleReconnect;
19
+ private startHeartbeat;
20
+ private stopHeartbeat;
21
+ }
22
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/sync/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAS;gBAE1C,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMtC,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IAgBlB,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;CAMtB"}
@@ -0,0 +1,103 @@
1
+ import WebSocket from 'ws';
2
+ import { EventEmitter } from 'node:events';
3
+ export class SyncWebSocket extends EventEmitter {
4
+ ws = null;
5
+ url;
6
+ token;
7
+ reconnectAttempts = 0;
8
+ reconnectTimer = null;
9
+ heartbeatTimer = null;
10
+ shouldReconnect = false;
11
+ static MAX_BACKOFF_MS = 30000;
12
+ static HEARTBEAT_INTERVAL_MS = 30000;
13
+ constructor(url, token) {
14
+ super();
15
+ this.url = url;
16
+ this.token = token;
17
+ }
18
+ connect() {
19
+ this.shouldReconnect = true;
20
+ this.doConnect();
21
+ }
22
+ disconnect() {
23
+ this.shouldReconnect = false;
24
+ if (this.reconnectTimer) {
25
+ clearTimeout(this.reconnectTimer);
26
+ this.reconnectTimer = null;
27
+ }
28
+ this.stopHeartbeat();
29
+ if (this.ws) {
30
+ this.ws.close();
31
+ this.ws = null;
32
+ }
33
+ }
34
+ isConnected() {
35
+ return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
36
+ }
37
+ doConnect() {
38
+ const wsUrl = `${this.url}/ws?token=${encodeURIComponent(this.token)}`;
39
+ this.ws = new WebSocket(wsUrl);
40
+ this.ws.on('open', () => {
41
+ this.reconnectAttempts = 0;
42
+ this.startHeartbeat();
43
+ this.emit('connected');
44
+ });
45
+ this.ws.on('message', (data) => {
46
+ try {
47
+ const message = JSON.parse(data.toString());
48
+ this.handleMessage(message);
49
+ }
50
+ catch {
51
+ // Ignore malformed messages
52
+ }
53
+ });
54
+ this.ws.on('close', () => {
55
+ this.stopHeartbeat();
56
+ this.emit('disconnected');
57
+ this.scheduleReconnect();
58
+ });
59
+ this.ws.on('error', () => {
60
+ // The 'close' event will follow, which handles reconnection
61
+ });
62
+ }
63
+ handleMessage(message) {
64
+ switch (message.type) {
65
+ case 'file-updated':
66
+ if (message.path !== undefined && message.version !== undefined) {
67
+ const event = { path: message.path, version: message.version };
68
+ this.emit('file-updated', event);
69
+ }
70
+ break;
71
+ case 'file-deleted':
72
+ if (message.path !== undefined) {
73
+ const event = { path: message.path };
74
+ this.emit('file-deleted', event);
75
+ }
76
+ break;
77
+ }
78
+ }
79
+ scheduleReconnect() {
80
+ if (!this.shouldReconnect)
81
+ return;
82
+ // Exponential backoff: 1s, 2s, 4s, 8s, 16s, max 30s
83
+ const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), SyncWebSocket.MAX_BACKOFF_MS);
84
+ this.reconnectAttempts++;
85
+ this.reconnectTimer = setTimeout(() => {
86
+ this.doConnect();
87
+ }, delay);
88
+ }
89
+ startHeartbeat() {
90
+ this.heartbeatTimer = setInterval(() => {
91
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
92
+ this.ws.ping();
93
+ }
94
+ }, SyncWebSocket.HEARTBEAT_INTERVAL_MS);
95
+ }
96
+ stopHeartbeat() {
97
+ if (this.heartbeatTimer) {
98
+ clearInterval(this.heartbeatTimer);
99
+ this.heartbeatTimer = null;
100
+ }
101
+ }
102
+ }
103
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/sync/websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export type SyncState = 'synced' | 'modified' | 'conflict' | 'pending' | 'deleted';
2
+ export interface SyncFile {
3
+ id: string;
4
+ path: string;
5
+ contentHash: string;
6
+ encryptedHash: string;
7
+ version: number;
8
+ size: number;
9
+ lastModified: number;
10
+ syncState: SyncState;
11
+ }
12
+ export interface DeviceInfo {
13
+ id: string;
14
+ name: string;
15
+ publicKey: string;
16
+ lastSeen: number;
17
+ current: boolean;
18
+ }
19
+ export interface EncryptedBlob {
20
+ version: number;
21
+ nonce: Uint8Array;
22
+ ciphertext: Uint8Array;
23
+ }
24
+ export interface FileMetadata {
25
+ path: string;
26
+ version: number;
27
+ encryptedHash: string;
28
+ size: number;
29
+ updatedAt: number;
30
+ }
31
+ export interface ApiKeyInfo {
32
+ id: string;
33
+ name: string;
34
+ scope: string;
35
+ permissions: ApiPermission;
36
+ createdAt: number;
37
+ lastUsed: number | null;
38
+ }
39
+ export type ApiPermission = 'read' | 'read-write';
40
+ export interface RemoteChange {
41
+ path: string;
42
+ action: 'updated' | 'deleted';
43
+ version: number;
44
+ encryptedHash: string;
45
+ timestamp: number;
46
+ }
47
+ export interface SyncResult {
48
+ uploaded: string[];
49
+ downloaded: string[];
50
+ conflicts: string[];
51
+ errors: Array<{
52
+ path: string;
53
+ error: string;
54
+ }>;
55
+ }
56
+ export interface AdapterInfo {
57
+ name: string;
58
+ enabled: boolean;
59
+ workspacePath: string;
60
+ status: 'connected' | 'disconnected' | 'error';
61
+ linkedFiles: number;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ContextMateConfig } from '../config.js';
2
+ export declare function getVaultPath(config: ContextMateConfig): string;
3
+ export declare function getDataPath(config: ContextMateConfig): string;
4
+ export declare function getBackupsPath(): string;
5
+ export declare function getSyncDbPath(config: ContextMateConfig): string;
6
+ export declare function getSearchDbPath(config: ContextMateConfig): string;
7
+ export declare function getPidFilePath(config: ContextMateConfig): string;
8
+ export declare function relativePath(vaultPath: string, absolutePath: string): string;
9
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE9D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE7D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEhE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE5E"}
@@ -0,0 +1,24 @@
1
+ import { join, relative } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ export function getVaultPath(config) {
4
+ return config.vault.path;
5
+ }
6
+ export function getDataPath(config) {
7
+ return config.data.path;
8
+ }
9
+ export function getBackupsPath() {
10
+ return join(homedir(), '.contextmate', 'backups');
11
+ }
12
+ export function getSyncDbPath(config) {
13
+ return join(config.data.path, 'sync.db');
14
+ }
15
+ export function getSearchDbPath(config) {
16
+ return join(config.data.path, 'search.db');
17
+ }
18
+ export function getPidFilePath(config) {
19
+ return join(config.data.path, 'daemon.pid');
20
+ }
21
+ export function relativePath(vaultPath, absolutePath) {
22
+ return relative(vaultPath, absolutePath);
23
+ }
24
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,YAAoB;IAClE,OAAO,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "contextmate",
3
+ "version": "0.1.0",
4
+ "description": "Zero-knowledge encrypted sync for AI agent context",
5
+ "type": "module",
6
+ "bin": {
7
+ "contextmate": "./dist/bin/contextmate.js"
8
+ },
9
+ "files": [
10
+ "dist/"
11
+ ],
12
+ "keywords": [
13
+ "ai",
14
+ "agents",
15
+ "sync",
16
+ "encryption",
17
+ "zero-knowledge",
18
+ "mcp",
19
+ "cli",
20
+ "context"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/contextmate/contextmate"
25
+ },
26
+ "homepage": "https://contextmate.dev",
27
+ "author": "Alex Furmansky",
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "tsx watch src/bin/contextmate.ts",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest",
33
+ "lint": "tsc --noEmit",
34
+ "start": "node dist/bin/contextmate.js"
35
+ },
36
+ "engines": {
37
+ "node": ">=20.0.0"
38
+ },
39
+ "dependencies": {
40
+ "@modelcontextprotocol/sdk": "^1.12.1",
41
+ "@noble/ciphers": "^1.2.1",
42
+ "@noble/hashes": "^1.7.1",
43
+ "argon2": "^0.41.1",
44
+ "better-sqlite3": "^11.8.1",
45
+ "chalk": "^5.4.1",
46
+ "chokidar": "^4.0.3",
47
+ "commander": "^13.1.0",
48
+ "smol-toml": "^1.3.1",
49
+ "ws": "^8.18.0",
50
+ "zod": "^3.24.2"
51
+ },
52
+ "devDependencies": {
53
+ "@types/better-sqlite3": "^7.6.13",
54
+ "@types/node": "^22.13.1",
55
+ "@types/ws": "^8.5.14",
56
+ "tsx": "^4.19.2",
57
+ "typescript": "^5.7.3",
58
+ "vitest": "^3.0.5"
59
+ },
60
+ "license": "MIT"
61
+ }