@dmsdc-ai/aigentry-brain 0.0.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 (136) hide show
  1. package/bin/aigentry-brain-mcp.mjs +17 -0
  2. package/bin/aigentry-brain-setup.mjs +17 -0
  3. package/bin/aigentry-brain.mjs +17 -0
  4. package/dist/audit/AuditTrail.d.ts +15 -0
  5. package/dist/audit/AuditTrail.js +43 -0
  6. package/dist/audit/AuditTrail.js.map +1 -0
  7. package/dist/backend/GitBackend.d.ts +27 -0
  8. package/dist/backend/GitBackend.js +201 -0
  9. package/dist/backend/GitBackend.js.map +1 -0
  10. package/dist/backend/SyncBackend.d.ts +13 -0
  11. package/dist/backend/SyncBackend.js +2 -0
  12. package/dist/backend/SyncBackend.js.map +1 -0
  13. package/dist/cli/AutoUpdater.d.ts +7 -0
  14. package/dist/cli/AutoUpdater.js +275 -0
  15. package/dist/cli/AutoUpdater.js.map +1 -0
  16. package/dist/cli/ConfigStore.d.ts +17 -0
  17. package/dist/cli/ConfigStore.js +50 -0
  18. package/dist/cli/ConfigStore.js.map +1 -0
  19. package/dist/cli/GhIntegration.d.ts +55 -0
  20. package/dist/cli/GhIntegration.js +192 -0
  21. package/dist/cli/GhIntegration.js.map +1 -0
  22. package/dist/cli/Prerequisites.d.ts +48 -0
  23. package/dist/cli/Prerequisites.js +182 -0
  24. package/dist/cli/Prerequisites.js.map +1 -0
  25. package/dist/cli/SetupWizard.d.ts +26 -0
  26. package/dist/cli/SetupWizard.js +407 -0
  27. package/dist/cli/SetupWizard.js.map +1 -0
  28. package/dist/cli/braincli.d.ts +2 -0
  29. package/dist/cli/braincli.js +260 -0
  30. package/dist/cli/braincli.js.map +1 -0
  31. package/dist/cli/setup.d.ts +25 -0
  32. package/dist/cli/setup.js +238 -0
  33. package/dist/cli/setup.js.map +1 -0
  34. package/dist/context/ConfidenceGuard.d.ts +11 -0
  35. package/dist/context/ConfidenceGuard.js +32 -0
  36. package/dist/context/ConfidenceGuard.js.map +1 -0
  37. package/dist/context/ContextBudgetPolicy.d.ts +21 -0
  38. package/dist/context/ContextBudgetPolicy.js +136 -0
  39. package/dist/context/ContextBudgetPolicy.js.map +1 -0
  40. package/dist/context/ContextPacker.d.ts +30 -0
  41. package/dist/context/ContextPacker.js +219 -0
  42. package/dist/context/ContextPacker.js.map +1 -0
  43. package/dist/context/ContextRestoreService.d.ts +39 -0
  44. package/dist/context/ContextRestoreService.js +134 -0
  45. package/dist/context/ContextRestoreService.js.map +1 -0
  46. package/dist/contract/BrainContract.d.ts +93 -0
  47. package/dist/contract/BrainContract.js +245 -0
  48. package/dist/contract/BrainContract.js.map +1 -0
  49. package/dist/core/ContentDedup.d.ts +43 -0
  50. package/dist/core/ContentDedup.js +145 -0
  51. package/dist/core/ContentDedup.js.map +1 -0
  52. package/dist/core/EntityGraph.d.ts +66 -0
  53. package/dist/core/EntityGraph.js +196 -0
  54. package/dist/core/EntityGraph.js.map +1 -0
  55. package/dist/core/EntrySchema.d.ts +46 -0
  56. package/dist/core/EntrySchema.js +4 -0
  57. package/dist/core/EntrySchema.js.map +1 -0
  58. package/dist/core/GraphStore.d.ts +16 -0
  59. package/dist/core/GraphStore.js +29 -0
  60. package/dist/core/GraphStore.js.map +1 -0
  61. package/dist/core/MemoryDecay.d.ts +49 -0
  62. package/dist/core/MemoryDecay.js +113 -0
  63. package/dist/core/MemoryDecay.js.map +1 -0
  64. package/dist/core/ProfileFormat.d.ts +38 -0
  65. package/dist/core/ProfileFormat.js +254 -0
  66. package/dist/core/ProfileFormat.js.map +1 -0
  67. package/dist/core/ProfileManager.d.ts +80 -0
  68. package/dist/core/ProfileManager.js +269 -0
  69. package/dist/core/ProfileManager.js.map +1 -0
  70. package/dist/core/SchemaMigration.d.ts +12 -0
  71. package/dist/core/SchemaMigration.js +34 -0
  72. package/dist/core/SchemaMigration.js.map +1 -0
  73. package/dist/crypto/AgeCrypto.d.ts +26 -0
  74. package/dist/crypto/AgeCrypto.js +101 -0
  75. package/dist/crypto/AgeCrypto.js.map +1 -0
  76. package/dist/index.d.ts +38 -0
  77. package/dist/index.js +30 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/mcp/BrainMcpServer.d.ts +13 -0
  80. package/dist/mcp/BrainMcpServer.js +223 -0
  81. package/dist/mcp/BrainMcpServer.js.map +1 -0
  82. package/dist/mcp/cli.d.ts +2 -0
  83. package/dist/mcp/cli.js +107 -0
  84. package/dist/mcp/cli.js.map +1 -0
  85. package/dist/metrics/ResumeMetrics.d.ts +20 -0
  86. package/dist/metrics/ResumeMetrics.js +46 -0
  87. package/dist/metrics/ResumeMetrics.js.map +1 -0
  88. package/dist/peers/PeerStore.d.ts +17 -0
  89. package/dist/peers/PeerStore.js +65 -0
  90. package/dist/peers/PeerStore.js.map +1 -0
  91. package/dist/policy/PolicyEngine.d.ts +16 -0
  92. package/dist/policy/PolicyEngine.js +70 -0
  93. package/dist/policy/PolicyEngine.js.map +1 -0
  94. package/dist/policy/PolicyEnvelope.d.ts +7 -0
  95. package/dist/policy/PolicyEnvelope.js +2 -0
  96. package/dist/policy/PolicyEnvelope.js.map +1 -0
  97. package/dist/policy/RetentionParser.d.ts +6 -0
  98. package/dist/policy/RetentionParser.js +48 -0
  99. package/dist/policy/RetentionParser.js.map +1 -0
  100. package/dist/shared/AtomicWrite.d.ts +1 -0
  101. package/dist/shared/AtomicWrite.js +11 -0
  102. package/dist/shared/AtomicWrite.js.map +1 -0
  103. package/dist/shared/Clock.d.ts +11 -0
  104. package/dist/shared/Clock.js +17 -0
  105. package/dist/shared/Clock.js.map +1 -0
  106. package/dist/shared/Config.d.ts +15 -0
  107. package/dist/shared/Config.js +67 -0
  108. package/dist/shared/Config.js.map +1 -0
  109. package/dist/shared/Encryption.d.ts +19 -0
  110. package/dist/shared/Encryption.js +47 -0
  111. package/dist/shared/Encryption.js.map +1 -0
  112. package/dist/shared/Logger.d.ts +12 -0
  113. package/dist/shared/Logger.js +40 -0
  114. package/dist/shared/Logger.js.map +1 -0
  115. package/dist/shared/Mutex.d.ts +7 -0
  116. package/dist/shared/Mutex.js +34 -0
  117. package/dist/shared/Mutex.js.map +1 -0
  118. package/dist/shared/SetupErrors.d.ts +31 -0
  119. package/dist/shared/SetupErrors.js +155 -0
  120. package/dist/shared/SetupErrors.js.map +1 -0
  121. package/dist/status/SyncStatusStore.d.ts +17 -0
  122. package/dist/status/SyncStatusStore.js +48 -0
  123. package/dist/status/SyncStatusStore.js.map +1 -0
  124. package/dist/sync/AutoCommitter.d.ts +17 -0
  125. package/dist/sync/AutoCommitter.js +68 -0
  126. package/dist/sync/AutoCommitter.js.map +1 -0
  127. package/dist/sync/ConflictResolver.d.ts +7 -0
  128. package/dist/sync/ConflictResolver.js +56 -0
  129. package/dist/sync/ConflictResolver.js.map +1 -0
  130. package/dist/sync/PushPullManager.d.ts +23 -0
  131. package/dist/sync/PushPullManager.js +155 -0
  132. package/dist/sync/PushPullManager.js.map +1 -0
  133. package/dist/sync/SyncEngine.d.ts +43 -0
  134. package/dist/sync/SyncEngine.js +145 -0
  135. package/dist/sync/SyncEngine.js.map +1 -0
  136. package/package.json +65 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Migration v1 → v2: Add tags field to entries that don't have it.
3
+ */
4
+ const v1ToV2 = {
5
+ from: 1,
6
+ to: 2,
7
+ migrate(profile) {
8
+ return {
9
+ ...profile,
10
+ version: 2,
11
+ entries: profile.entries.map(e => ({
12
+ ...e,
13
+ tags: e.tags ?? [],
14
+ media_pointers: e.media_pointers ?? [],
15
+ })),
16
+ };
17
+ },
18
+ };
19
+ const MIGRATIONS = [v1ToV2];
20
+ export const CURRENT_SCHEMA_VERSION = 2;
21
+ /**
22
+ * Apply all necessary migrations to bring a profile up to the current version.
23
+ * Returns the migrated profile. If already current, returns as-is.
24
+ */
25
+ export function migrateProfile(profile) {
26
+ let current = profile;
27
+ for (const migration of MIGRATIONS) {
28
+ if (current.version === migration.from) {
29
+ current = migration.migrate(current);
30
+ }
31
+ }
32
+ return current;
33
+ }
34
+ //# sourceMappingURL=SchemaMigration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaMigration.js","sourceRoot":"","sources":["../../src/core/SchemaMigration.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,MAAM,GAAoB;IAC9B,IAAI,EAAE,CAAC;IACP,EAAE,EAAE,CAAC;IACL,OAAO,CAAC,OAAO;QACb,OAAO;YACL,GAAG,OAAO;YACV,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,GAAG,CAAC;gBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE;aACvC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,GAAsB,CAAC,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACvC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface AgeKeyPair {
2
+ identity: string;
3
+ recipient: string;
4
+ }
5
+ export declare class AgeKeyError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export declare class AgeDecryptError extends Error {
9
+ constructor(message: string);
10
+ }
11
+ /** Generate a new age key pair using age-encryption npm. */
12
+ export declare function generateKeyPair(): Promise<AgeKeyPair>;
13
+ /** Read an existing age key file (compatible with age CLI format). */
14
+ export declare function readKeyFile(keyPath?: string): AgeKeyPair;
15
+ /** Ensure age key file exists; generate if missing. Returns key pair + whether it was generated. */
16
+ export declare function ensureKeyFile(keyPath?: string): Promise<AgeKeyPair & {
17
+ generated: boolean;
18
+ }>;
19
+ /** Encrypt a plaintext string for one or more age recipients. Returns base64-encoded ciphertext. */
20
+ export declare function encryptBlock(plaintext: string, recipients: string[]): Promise<string>;
21
+ /** Decrypt a base64-encoded ciphertext with an age identity. Returns plaintext string. */
22
+ export declare function decryptBlock(ct: string, identity: string): Promise<string>;
23
+ /** Encrypt multiple entries. uuid → plaintext ⇒ uuid → base64 ciphertext. */
24
+ export declare function encryptEntries(entries: Record<string, string>, recipients: string[]): Promise<Record<string, string>>;
25
+ /** Decrypt multiple entries. uuid → base64 ciphertext ⇒ uuid → plaintext. */
26
+ export declare function decryptEntries(entries: Record<string, string>, identity: string): Promise<Record<string, string>>;
@@ -0,0 +1,101 @@
1
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ export class AgeKeyError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = 'AgeKeyError';
8
+ }
9
+ }
10
+ export class AgeDecryptError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = 'AgeDecryptError';
14
+ }
15
+ }
16
+ const DEFAULT_KEY_PATH = join(homedir(), '.config', 'sops', 'age', 'keys.txt');
17
+ /** Generate a new age key pair using age-encryption npm. */
18
+ export async function generateKeyPair() {
19
+ const age = await import('age-encryption');
20
+ const identity = await age.generateIdentity();
21
+ const recipient = await age.identityToRecipient(identity);
22
+ return { identity, recipient };
23
+ }
24
+ /** Read an existing age key file (compatible with age CLI format). */
25
+ export function readKeyFile(keyPath = DEFAULT_KEY_PATH) {
26
+ let content;
27
+ try {
28
+ content = readFileSync(keyPath, 'utf-8');
29
+ }
30
+ catch {
31
+ throw new AgeKeyError(`Age key file not found: ${keyPath}`);
32
+ }
33
+ const identityMatch = content.match(/AGE-SECRET-KEY-\w+/);
34
+ const recipientMatch = content.match(/age1\w+/);
35
+ if (!identityMatch || !recipientMatch) {
36
+ throw new AgeKeyError(`Could not parse age key from: ${keyPath}`);
37
+ }
38
+ return { identity: identityMatch[0], recipient: recipientMatch[0] };
39
+ }
40
+ /** Ensure age key file exists; generate if missing. Returns key pair + whether it was generated. */
41
+ export async function ensureKeyFile(keyPath = DEFAULT_KEY_PATH) {
42
+ try {
43
+ const existing = readKeyFile(keyPath);
44
+ return { ...existing, generated: false };
45
+ }
46
+ catch {
47
+ // Generate new key
48
+ const age = await import('age-encryption');
49
+ const identity = await age.generateIdentity();
50
+ const recipient = await age.identityToRecipient(identity);
51
+ const keyDir = join(keyPath, '..');
52
+ mkdirSync(keyDir, { recursive: true });
53
+ const content = [
54
+ `# created: ${new Date().toISOString()}`,
55
+ `# public key: ${recipient}`,
56
+ identity,
57
+ '',
58
+ ].join('\n');
59
+ writeFileSync(keyPath, content, { mode: 0o600 });
60
+ return { identity, recipient, generated: true };
61
+ }
62
+ }
63
+ /** Encrypt a plaintext string for one or more age recipients. Returns base64-encoded ciphertext. */
64
+ export async function encryptBlock(plaintext, recipients) {
65
+ const age = await import('age-encryption');
66
+ const encrypter = new age.Encrypter();
67
+ for (const r of recipients) {
68
+ encrypter.addRecipient(r);
69
+ }
70
+ const ciphertext = await encrypter.encrypt(plaintext);
71
+ return Buffer.from(ciphertext).toString('base64');
72
+ }
73
+ /** Decrypt a base64-encoded ciphertext with an age identity. Returns plaintext string. */
74
+ export async function decryptBlock(ct, identity) {
75
+ const age = await import('age-encryption');
76
+ const decrypter = new age.Decrypter();
77
+ decrypter.addIdentity(identity);
78
+ try {
79
+ return await decrypter.decrypt(Buffer.from(ct, 'base64'), 'text');
80
+ }
81
+ catch (err) {
82
+ throw new AgeDecryptError(`Decryption failed (wrong key or corrupted data): ${err instanceof Error ? err.message : String(err)}`);
83
+ }
84
+ }
85
+ /** Encrypt multiple entries. uuid → plaintext ⇒ uuid → base64 ciphertext. */
86
+ export async function encryptEntries(entries, recipients) {
87
+ const result = {};
88
+ for (const [id, plaintext] of Object.entries(entries)) {
89
+ result[id] = await encryptBlock(plaintext, recipients);
90
+ }
91
+ return result;
92
+ }
93
+ /** Decrypt multiple entries. uuid → base64 ciphertext ⇒ uuid → plaintext. */
94
+ export async function decryptEntries(entries, identity) {
95
+ const result = {};
96
+ for (const [id, ct] of Object.entries(entries)) {
97
+ result[id] = await decryptBlock(ct, identity);
98
+ }
99
+ return result;
100
+ }
101
+ //# sourceMappingURL=AgeCrypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgeCrypto.js","sourceRoot":"","sources":["../../src/crypto/AgeCrypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type { Entry, MemoryProfile, ConflictLogEntry, MediaPointer, MediaKind, MediaChannel, MediaPurpose, MediaStatus, } from './core/EntrySchema.js';
2
+ export { createEntryId } from './core/EntrySchema.js';
3
+ export { ProfileFormat } from './core/ProfileFormat.js';
4
+ export { ProfileManager } from './core/ProfileManager.js';
5
+ export { migrateProfile, CURRENT_SCHEMA_VERSION } from './core/SchemaMigration.js';
6
+ export type { SchemaMigration } from './core/SchemaMigration.js';
7
+ export type { SyncBackend } from './backend/SyncBackend.js';
8
+ export { GitBackend } from './backend/GitBackend.js';
9
+ export { ConflictResolver, CONFLICT_LOG_MAX } from './sync/ConflictResolver.js';
10
+ export { AutoCommitter } from './sync/AutoCommitter.js';
11
+ export { PushPullManager } from './sync/PushPullManager.js';
12
+ export { SyncEngine } from './sync/SyncEngine.js';
13
+ export type { SyncEngineConfig } from './sync/SyncEngine.js';
14
+ export { SyncStatusStore } from './status/SyncStatusStore.js';
15
+ export type { SyncStatus, SyncStatusFile } from './status/SyncStatusStore.js';
16
+ export { SystemClock, FakeClock } from './shared/Clock.js';
17
+ export type { Clock } from './shared/Clock.js';
18
+ export { Mutex } from './shared/Mutex.js';
19
+ export { atomicWrite } from './shared/AtomicWrite.js';
20
+ export { createLogger } from './shared/Logger.js';
21
+ export type { LogLevel, Logger, LoggerOptions } from './shared/Logger.js';
22
+ export { loadConfig } from './shared/Config.js';
23
+ export type { BrainConfig } from './shared/Config.js';
24
+ export { SetupError, getErrorGuide, formatErrorGuide, classifyError } from './shared/SetupErrors.js';
25
+ export type { ContextMode, ContextBudgetPlan, SlotBudget } from './context/ContextBudgetPolicy.js';
26
+ export { buildContextBudgetPlan } from './context/ContextBudgetPolicy.js';
27
+ export type { ContextBlock, ContextSlot, PackContextInput, PackedContextResult } from './context/ContextPacker.js';
28
+ export { packContext } from './context/ContextPacker.js';
29
+ export type { ScoredEvidence } from './context/ConfidenceGuard.js';
30
+ export { calculateRecallConfidence, shouldAskClarification, evaluateRecallConfidence, } from './context/ConfidenceGuard.js';
31
+ export { ContextRestoreService, entryToContextBlock } from './context/ContextRestoreService.js';
32
+ export type { ContextResumeOptions, ContextResumeResult } from './context/ContextRestoreService.js';
33
+ export { startResumeTimer, computeResumeResult } from './metrics/ResumeMetrics.js';
34
+ export type { ResumeResult, ResumeTimer } from './metrics/ResumeMetrics.js';
35
+ export { BrainContract } from './contract/BrainContract.js';
36
+ export type { QueryFilter, BrainContractConfig } from './contract/BrainContract.js';
37
+ export { createBrainMcpServer } from './mcp/BrainMcpServer.js';
38
+ export type { BrainMcpServerOptions } from './mcp/BrainMcpServer.js';
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ export { createEntryId } from './core/EntrySchema.js';
2
+ export { ProfileFormat } from './core/ProfileFormat.js';
3
+ export { ProfileManager } from './core/ProfileManager.js';
4
+ export { migrateProfile, CURRENT_SCHEMA_VERSION } from './core/SchemaMigration.js';
5
+ export { GitBackend } from './backend/GitBackend.js';
6
+ // Sync
7
+ export { ConflictResolver, CONFLICT_LOG_MAX } from './sync/ConflictResolver.js';
8
+ export { AutoCommitter } from './sync/AutoCommitter.js';
9
+ export { PushPullManager } from './sync/PushPullManager.js';
10
+ export { SyncEngine } from './sync/SyncEngine.js';
11
+ // Status
12
+ export { SyncStatusStore } from './status/SyncStatusStore.js';
13
+ // Shared
14
+ export { SystemClock, FakeClock } from './shared/Clock.js';
15
+ export { Mutex } from './shared/Mutex.js';
16
+ export { atomicWrite } from './shared/AtomicWrite.js';
17
+ export { createLogger } from './shared/Logger.js';
18
+ export { loadConfig } from './shared/Config.js';
19
+ export { SetupError, getErrorGuide, formatErrorGuide, classifyError } from './shared/SetupErrors.js';
20
+ export { buildContextBudgetPlan } from './context/ContextBudgetPolicy.js';
21
+ export { packContext } from './context/ContextPacker.js';
22
+ export { calculateRecallConfidence, shouldAskClarification, evaluateRecallConfidence, } from './context/ConfidenceGuard.js';
23
+ export { ContextRestoreService, entryToContextBlock } from './context/ContextRestoreService.js';
24
+ // Metrics
25
+ export { startResumeTimer, computeResumeResult } from './metrics/ResumeMetrics.js';
26
+ // Contract
27
+ export { BrainContract } from './contract/BrainContract.js';
28
+ // MCP
29
+ export { createBrainMcpServer } from './mcp/BrainMcpServer.js';
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO;AACP,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAGhG,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGnF,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM;AACN,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { BrainContract } from '../contract/BrainContract.js';
3
+ import type { PeerStore } from '../peers/PeerStore.js';
4
+ export interface BrainMcpServerOptions {
5
+ contract: BrainContract;
6
+ name?: string;
7
+ version?: string;
8
+ peerStore?: PeerStore;
9
+ }
10
+ /**
11
+ * Create an MCP server that exposes BrainContract as 8 tools.
12
+ */
13
+ export declare function createBrainMcpServer(options: BrainMcpServerOptions): McpServer;
@@ -0,0 +1,223 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ /**
4
+ * Create an MCP server that exposes BrainContract as 8 tools.
5
+ */
6
+ export function createBrainMcpServer(options) {
7
+ const { contract, peerStore } = options;
8
+ const server = new McpServer({
9
+ name: options.name ?? 'aigentry-brain',
10
+ version: options.version ?? '0.1.0',
11
+ });
12
+ const mediaPointerSchema = z.object({
13
+ kind: z.enum(['video', 'audio', 'image']),
14
+ provider: z.string().max(64),
15
+ url: z.string().max(2048),
16
+ title: z.string().max(256).optional(),
17
+ duration_sec: z.number().int().nonnegative().optional(),
18
+ checksum: z.string().max(128).optional(),
19
+ channel: z.enum(['platform', 'messenger']).optional(),
20
+ purpose: z.enum(['storage', 'share']).optional(),
21
+ status: z.enum(['ready', 'pending', 'broken']).optional(),
22
+ });
23
+ // 1. brain_append — Create or update a memory entry
24
+ server.registerTool('brain_append', {
25
+ description: 'Create a new memory entry or update an existing one by id.',
26
+ inputSchema: {
27
+ category: z.string().max(128).describe('Entry category (e.g., preference, skill, fact, context, habit, summary, decision, constraint, identity, observation)'),
28
+ content: z.string().max(4096).describe('The memory content text'),
29
+ source: z.string().max(128).describe('Source of the memory (e.g., user, auto, session, settings)'),
30
+ id: z.string().max(128).optional().describe('Entry id to update (omit to create new)'),
31
+ confidence: z.number().min(0).max(1).optional().describe('Confidence score 0-1 (default 0.5)'),
32
+ tags: z.array(z.string().max(64)).max(20).optional().describe('Tags for categorization (max 20 tags, each max 64 chars)'),
33
+ mediaPointers: z.array(mediaPointerSchema).max(20).optional().describe('Optional external media pointers (BYOS). Messenger pointers are share-only.'),
34
+ },
35
+ }, async ({ category, content, source, id, confidence, tags, mediaPointers }) => {
36
+ const entry = await contract.append({
37
+ category,
38
+ content,
39
+ source,
40
+ ...(id ? { id } : {}),
41
+ ...(confidence !== undefined ? { confidence } : {}),
42
+ ...(tags ? { tags } : {}),
43
+ ...(mediaPointers ? { media_pointers: mediaPointers } : {}),
44
+ });
45
+ return {
46
+ content: [{ type: 'text', text: JSON.stringify(entry, null, 2) }],
47
+ };
48
+ });
49
+ // 2. brain_query — Query memory entries with optional filters
50
+ server.registerTool('brain_query', {
51
+ description: 'Query active memory entries. Supports filtering by category, source, and time range.',
52
+ inputSchema: {
53
+ category: z.string().max(128).optional().describe('Filter by category'),
54
+ source: z.string().max(128).optional().describe('Filter by source'),
55
+ since: z.string().optional().describe('ISO timestamp — only entries updated after this time'),
56
+ contentQuery: z.string().max(256).optional().describe('Case-insensitive substring search on entry content'),
57
+ tags: z.array(z.string().max(64)).max(20).optional().describe('Filter entries that have ALL specified tags'),
58
+ },
59
+ }, async ({ category, source, since, contentQuery, tags }) => {
60
+ const filter = {
61
+ ...(category ? { category } : {}),
62
+ ...(source ? { source } : {}),
63
+ ...(since ? { since } : {}),
64
+ ...(contentQuery ? { contentQuery } : {}),
65
+ ...(tags && tags.length > 0 ? { tags } : {}),
66
+ };
67
+ const entries = await contract.query(Object.keys(filter).length > 0 ? filter : undefined);
68
+ return {
69
+ content: [{ type: 'text', text: JSON.stringify(entries, null, 2) }],
70
+ };
71
+ });
72
+ // 3. brain_erase — Soft-delete a memory entry
73
+ server.registerTool('brain_erase', {
74
+ description: 'Soft-delete a memory entry by id. Returns whether the entry was found and deleted.',
75
+ inputSchema: {
76
+ id: z.string().max(128).describe('The entry id to delete'),
77
+ },
78
+ }, async ({ id }) => {
79
+ const deleted = await contract.erase(id);
80
+ return {
81
+ content: [{ type: 'text', text: JSON.stringify({ deleted, id }) }],
82
+ };
83
+ });
84
+ // 4. brain_context_resume — Restore context for AI consumption
85
+ server.registerTool('brain_context_resume', {
86
+ description: 'Pack memory entries into a context window budget for AI consumption. Returns selected entries, packing metrics, and resume quality.',
87
+ inputSchema: {
88
+ windowTokens: z.number().int().positive().describe('Total context window size in tokens'),
89
+ mode: z.enum(['coding', 'qa', 'strategy']).optional().describe('Context mode affecting slot allocation (default: coding)'),
90
+ confidenceThreshold: z.number().min(0).max(1).optional().describe('Minimum recall confidence threshold'),
91
+ },
92
+ }, async ({ windowTokens, mode, confidenceThreshold }) => {
93
+ const result = await contract.contextResume({
94
+ windowTokens,
95
+ mode: mode,
96
+ confidenceThreshold,
97
+ });
98
+ return {
99
+ content: [{
100
+ type: 'text',
101
+ text: JSON.stringify({
102
+ restoredCount: result.restoredEntries.length,
103
+ selectedCount: result.packed.selected.length,
104
+ droppedCount: result.packed.dropped.length,
105
+ usedTokens: result.packed.usedInputTokens,
106
+ recallConfidence: result.packed.recallConfidence,
107
+ resumeMs: result.resume.resumeMs,
108
+ lossRate: result.resume.lossRate,
109
+ success: result.resume.success,
110
+ }, null, 2),
111
+ }],
112
+ };
113
+ });
114
+ // 5. brain_sync_status — Get current sync status
115
+ server.registerTool('brain_sync_status', {
116
+ description: 'Get the current sync status including last sync time and state.',
117
+ }, async () => {
118
+ const status = await contract.syncStatus();
119
+ return {
120
+ content: [{ type: 'text', text: JSON.stringify(status, null, 2) }],
121
+ };
122
+ });
123
+ // 6. brain_health — System health check
124
+ server.registerTool('brain_health', {
125
+ description: 'Get system health report including profile accessibility, entry count, sync status, and uptime.',
126
+ }, async () => {
127
+ const health = await contract.health();
128
+ return {
129
+ content: [{ type: 'text', text: JSON.stringify(health, null, 2) }],
130
+ };
131
+ });
132
+ // 7. brain_append_batch — Batch create/update entries
133
+ server.registerTool('brain_append_batch', {
134
+ description: 'Create or update multiple memory entries in a single operation.',
135
+ inputSchema: {
136
+ entries: z.array(z.object({
137
+ category: z.string().max(128),
138
+ content: z.string().max(4096),
139
+ source: z.string().max(128),
140
+ id: z.string().max(128).optional(),
141
+ confidence: z.number().min(0).max(1).optional(),
142
+ tags: z.array(z.string().max(64)).max(20).optional(),
143
+ mediaPointers: z.array(mediaPointerSchema).max(20).optional(),
144
+ })).min(1).max(100).describe('Array of entries to create/update (max 100)'),
145
+ },
146
+ }, async ({ entries: items }) => {
147
+ const normalized = items.map(item => ({
148
+ ...item,
149
+ ...(item.mediaPointers ? { media_pointers: item.mediaPointers } : {}),
150
+ }));
151
+ const results = await contract.appendBatch(normalized);
152
+ return {
153
+ content: [{ type: 'text', text: JSON.stringify({ count: results.length, entries: results }, null, 2) }],
154
+ };
155
+ });
156
+ // 8. brain_erase_batch — Batch soft-delete entries
157
+ server.registerTool('brain_erase_batch', {
158
+ description: 'Soft-delete multiple memory entries by id in a single operation.',
159
+ inputSchema: {
160
+ ids: z.array(z.string().max(128)).min(1).max(100).describe('Array of entry ids to delete (max 100)'),
161
+ },
162
+ }, async ({ ids }) => {
163
+ const result = await contract.eraseBatch(ids);
164
+ return {
165
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
166
+ };
167
+ });
168
+ // 9. brain_sync_pull — Pull changes from remote repository
169
+ server.registerTool('brain_sync_pull', {
170
+ description: 'Pull changes from remote repository. Requires BRAIN_REMOTE_URL to be configured.',
171
+ }, async () => {
172
+ const result = await contract.syncPull();
173
+ return {
174
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
175
+ };
176
+ });
177
+ // 10. brain_sync_push — Push local changes to remote repository
178
+ server.registerTool('brain_sync_push', {
179
+ description: 'Push local changes to remote repository. Requires BRAIN_REMOTE_URL to be configured.',
180
+ }, async () => {
181
+ const result = await contract.syncPush();
182
+ return {
183
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
184
+ };
185
+ });
186
+ // 11. brain_peers_list — List all registered peer devices
187
+ server.registerTool('brain_peers_list', {
188
+ description: 'List all registered peer devices for cross-machine sync.',
189
+ }, async () => {
190
+ if (!peerStore) {
191
+ return {
192
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Peer discovery not configured' }) }],
193
+ };
194
+ }
195
+ const peers = await peerStore.list();
196
+ return {
197
+ content: [{ type: 'text', text: JSON.stringify(peers, null, 2) }],
198
+ };
199
+ });
200
+ // 12. brain_peers_register — Register a new peer device
201
+ server.registerTool('brain_peers_register', {
202
+ description: 'Register a new peer device for cross-machine sync.',
203
+ inputSchema: {
204
+ id: z.string().min(1).max(128).describe('Unique peer device identifier'),
205
+ remote_url: z.string().optional().describe('Optional remote URL for this peer'),
206
+ },
207
+ }, async ({ id, remote_url }) => {
208
+ if (!peerStore) {
209
+ return {
210
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Peer discovery not configured' }) }],
211
+ };
212
+ }
213
+ const peer = await peerStore.register({
214
+ id,
215
+ ...(remote_url ? { remote_url } : {}),
216
+ });
217
+ return {
218
+ content: [{ type: 'text', text: JSON.stringify(peer, null, 2) }],
219
+ };
220
+ });
221
+ return server;
222
+ }
223
+ //# sourceMappingURL=BrainMcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrainMcpServer.js","sourceRoot":"","sources":["../../src/mcp/BrainMcpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { ProfileManager } from '../core/ProfileManager.js';
6
+ import { SyncStatusStore } from '../status/SyncStatusStore.js';
7
+ import { SystemClock } from '../shared/Clock.js';
8
+ import { BrainContract } from '../contract/BrainContract.js';
9
+ import { SyncEngine } from '../sync/SyncEngine.js';
10
+ import { loadConfig } from '../shared/Config.js';
11
+ import { createLogger } from '../shared/Logger.js';
12
+ import { createBrainMcpServer } from './BrainMcpServer.js';
13
+ import { AuditTrail } from '../audit/AuditTrail.js';
14
+ import { PeerStore } from '../peers/PeerStore.js';
15
+ import { checkAndUpdate } from '../cli/AutoUpdater.js';
16
+ // Background auto-update check (non-blocking)
17
+ checkAndUpdate();
18
+ const config = loadConfig();
19
+ const logger = createLogger('cli', { level: config.logLevel, deviceId: config.deviceId });
20
+ // Log config source for debugging
21
+ if (config.remoteUrl) {
22
+ logger.info('Sync enabled', { remoteUrl: config.remoteUrl, deviceId: config.deviceId });
23
+ }
24
+ const pm = new ProfileManager(config.profilePath, SystemClock, config.deviceId);
25
+ const statusStore = new SyncStatusStore(config.statusPath);
26
+ /**
27
+ * Adapter that wraps SyncEngine and exposes pull/push compatible with ISyncEngine.
28
+ * Uses PushPullManager internally via the engine's public accessor (accessed via cast).
29
+ */
30
+ class SyncEngineAdapter {
31
+ engine;
32
+ constructor(engine) {
33
+ this.engine = engine;
34
+ }
35
+ async pull() {
36
+ try {
37
+ // Access pushPullManager through the engine (internal field via cast for CMP v0.1)
38
+ const ppm = this.engine.pushPullManager;
39
+ await ppm.syncPull();
40
+ return { pulled: true, status: 'synced' };
41
+ }
42
+ catch (err) {
43
+ return { pulled: false, status: `error: ${String(err)}` };
44
+ }
45
+ }
46
+ async push() {
47
+ try {
48
+ const ppm = this.engine.pushPullManager;
49
+ await ppm.enqueuePush();
50
+ return { pushed: true, status: 'synced' };
51
+ }
52
+ catch (err) {
53
+ return { pushed: false, status: `error: ${String(err)}` };
54
+ }
55
+ }
56
+ }
57
+ let syncEngine = null;
58
+ if (config.remoteUrl) {
59
+ const repoPath = config.repoPath ?? join(homedir(), '.aigentry', 'repo');
60
+ const realEngine = new SyncEngine({
61
+ repoPath,
62
+ remoteUrl: config.remoteUrl,
63
+ deviceId: config.deviceId,
64
+ pullIntervalMs: 5 * 60 * 1000, // 5-minute periodic pull for cross-machine sync
65
+ });
66
+ syncEngine = new SyncEngineAdapter(realEngine);
67
+ // Background start — don't block MCP server
68
+ realEngine.start().catch(err => {
69
+ logger.warn('SyncEngine start failed', { error: String(err) });
70
+ });
71
+ }
72
+ const auditPath = join(homedir(), '.aigentry', 'audit.jsonl');
73
+ const auditTrail = new AuditTrail(auditPath);
74
+ const contract = new BrainContract({
75
+ profileManager: pm,
76
+ statusStore,
77
+ syncEngine,
78
+ auditTrail,
79
+ policyConfig: {
80
+ currentProjectId: config.projectId ?? 'default',
81
+ defaultScope: config.defaultScope ?? 'user',
82
+ },
83
+ });
84
+ const peerStore = new PeerStore(config.peersPath ?? join(homedir(), '.aigentry', 'peers.yaml'));
85
+ const server = createBrainMcpServer({ contract, name: config.serverName, version: config.serverVersion, peerStore });
86
+ async function main() {
87
+ const transport = new StdioServerTransport();
88
+ await server.connect(transport);
89
+ logger.info('aigentry-brain MCP server running on stdio', {
90
+ profilePath: config.profilePath,
91
+ deviceId: config.deviceId,
92
+ logLevel: config.logLevel,
93
+ });
94
+ }
95
+ async function shutdown() {
96
+ logger.info('Shutting down...');
97
+ await server.close();
98
+ logger.info('Shutdown complete');
99
+ process.exit(0);
100
+ }
101
+ process.on('SIGINT', () => { shutdown().catch(() => process.exit(1)); });
102
+ process.on('SIGTERM', () => { shutdown().catch(() => process.exit(1)); });
103
+ main().catch((err) => {
104
+ logger.error('Fatal error', { err: String(err) });
105
+ process.exit(1);
106
+ });
107
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":"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"}