@brainmcp/brainmcp 0.1.12 → 0.1.13

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 (105) hide show
  1. package/README.md +72 -5
  2. package/dist/agent-config.js +153 -24
  3. package/dist/commands/auth.d.ts +47 -0
  4. package/dist/commands/auth.js +390 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/capture.d.ts +34 -0
  7. package/dist/commands/capture.js +349 -0
  8. package/dist/commands/capture.js.map +1 -0
  9. package/dist/commands/dispatch.d.ts +43 -0
  10. package/dist/commands/dispatch.js +287 -0
  11. package/dist/commands/dispatch.js.map +1 -0
  12. package/dist/commands/index.d.ts +4 -0
  13. package/dist/commands/index.js +180 -36
  14. package/dist/commands/index.js.map +1 -1
  15. package/dist/hooks/adapters.d.ts +14 -0
  16. package/dist/hooks/adapters.js +41 -0
  17. package/dist/hooks/adapters.js.map +1 -0
  18. package/dist/hooks/claude.d.ts +24 -0
  19. package/dist/hooks/claude.js +36 -0
  20. package/dist/hooks/claude.js.map +1 -0
  21. package/dist/hooks/codex.d.ts +18 -0
  22. package/dist/hooks/codex.js +36 -0
  23. package/dist/hooks/codex.js.map +1 -0
  24. package/dist/hooks/cursor.d.ts +22 -0
  25. package/dist/hooks/cursor.js +26 -0
  26. package/dist/hooks/cursor.js.map +1 -0
  27. package/dist/hooks/managed-hooks.d.ts +30 -0
  28. package/dist/hooks/managed-hooks.js +189 -0
  29. package/dist/hooks/managed-hooks.js.map +1 -0
  30. package/dist/hooks/vscode.d.ts +22 -0
  31. package/dist/hooks/vscode.js +27 -0
  32. package/dist/hooks/vscode.js.map +1 -0
  33. package/dist/index.js +7 -102
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/api-client.d.ts +32 -0
  36. package/dist/lib/api-client.js +203 -0
  37. package/dist/lib/api-client.js.map +1 -0
  38. package/dist/lib/callback-server.d.ts +17 -0
  39. package/dist/lib/callback-server.js +145 -0
  40. package/dist/lib/callback-server.js.map +1 -0
  41. package/dist/lib/cli-contracts.d.ts +193 -0
  42. package/dist/lib/cli-contracts.js +242 -0
  43. package/dist/lib/cli-contracts.js.map +1 -0
  44. package/dist/lib/config.d.ts +2 -0
  45. package/dist/lib/config.js +11 -0
  46. package/dist/lib/config.js.map +1 -1
  47. package/dist/lib/credentials.d.ts +89 -0
  48. package/dist/lib/credentials.js +304 -0
  49. package/dist/lib/credentials.js.map +1 -0
  50. package/dist/lib/http.d.ts +3 -0
  51. package/dist/lib/http.js +50 -0
  52. package/dist/lib/http.js.map +1 -0
  53. package/dist/lib/managed.d.ts +8 -0
  54. package/dist/lib/managed.js +72 -6
  55. package/dist/lib/managed.js.map +1 -1
  56. package/dist/lib/oauth-client.d.ts +55 -0
  57. package/dist/lib/oauth-client.js +154 -0
  58. package/dist/lib/oauth-client.js.map +1 -0
  59. package/dist/lib/pkce.d.ts +14 -0
  60. package/dist/lib/pkce.js +33 -0
  61. package/dist/lib/pkce.js.map +1 -0
  62. package/dist/lib/vault.d.ts +26 -0
  63. package/dist/lib/vault.js +221 -0
  64. package/dist/lib/vault.js.map +1 -0
  65. package/dist/runtime/brainmcp-hook-runtime.mjs +3211 -0
  66. package/dist/runtime/capture.d.ts +83 -0
  67. package/dist/runtime/capture.js +332 -0
  68. package/dist/runtime/capture.js.map +1 -0
  69. package/dist/runtime/diagnostics.d.ts +7 -0
  70. package/dist/runtime/diagnostics.js +75 -0
  71. package/dist/runtime/diagnostics.js.map +1 -0
  72. package/dist/runtime/doctor-checks.d.ts +14 -0
  73. package/dist/runtime/doctor-checks.js +205 -0
  74. package/dist/runtime/doctor-checks.js.map +1 -0
  75. package/dist/runtime/flush.d.ts +30 -0
  76. package/dist/runtime/flush.js +193 -0
  77. package/dist/runtime/flush.js.map +1 -0
  78. package/dist/runtime/hook-dispatcher.d.ts +31 -0
  79. package/dist/runtime/hook-dispatcher.js +381 -0
  80. package/dist/runtime/hook-dispatcher.js.map +1 -0
  81. package/dist/runtime/index.d.ts +12 -0
  82. package/dist/runtime/index.js +69 -0
  83. package/dist/runtime/index.js.map +1 -0
  84. package/dist/runtime/installer.d.ts +26 -0
  85. package/dist/runtime/installer.js +134 -0
  86. package/dist/runtime/installer.js.map +1 -0
  87. package/dist/runtime/lock.d.ts +19 -0
  88. package/dist/runtime/lock.js +116 -0
  89. package/dist/runtime/lock.js.map +1 -0
  90. package/dist/runtime/orient.d.ts +55 -0
  91. package/dist/runtime/orient.js +255 -0
  92. package/dist/runtime/orient.js.map +1 -0
  93. package/dist/runtime/queue.d.ts +7 -0
  94. package/dist/runtime/queue.js +80 -0
  95. package/dist/runtime/queue.js.map +1 -0
  96. package/dist/runtime/retention.d.ts +26 -0
  97. package/dist/runtime/retention.js +175 -0
  98. package/dist/runtime/retention.js.map +1 -0
  99. package/dist/runtime/session.d.ts +68 -0
  100. package/dist/runtime/session.js +283 -0
  101. package/dist/runtime/session.js.map +1 -0
  102. package/dist/runtime/storage.d.ts +32 -0
  103. package/dist/runtime/storage.js +236 -0
  104. package/dist/runtime/storage.js.map +1 -0
  105. package/package.json +12 -10
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Frozen CLI contracts: command grammar, exit codes, versioned local schemas,
3
+ * normalized hook events, and privacy invariants (AHI-012, AHI-013, AHI-014, AHI-018)
4
+ */
5
+ import type { CaptureFieldPolicy, CaptureQueueStatus, CaptureTrigger, ConsentMode, ConsentProvenance, WorkspaceSelection } from '@braincp/agent-config';
6
+ export type { CaptureFieldPolicy, CaptureQueueStatus, CaptureTrigger };
7
+ export declare const CLI_EXIT_CODES: {
8
+ readonly SUCCESS: 0;
9
+ readonly GENERAL_ERROR: 1;
10
+ readonly USAGE_ERROR: 2;
11
+ readonly AUTH_REQUIRED: 3;
12
+ readonly PERMISSION_DENIED: 4;
13
+ readonly CONFIGURATION_ERROR: 5;
14
+ readonly NETWORK_ERROR: 6;
15
+ };
16
+ export type CliExitCode = (typeof CLI_EXIT_CODES)[keyof typeof CLI_EXIT_CODES];
17
+ export declare const PREFERENCES_SCHEMA_VERSION = 1;
18
+ export declare const CREDENTIALS_SCHEMA_VERSION = 1;
19
+ export declare const STATE_SCHEMA_VERSION = 1;
20
+ export declare const CACHE_SCHEMA_VERSION = 1;
21
+ export declare const SESSION_LEDGER_SCHEMA_VERSION = 1;
22
+ export declare const QUEUE_SCHEMA_VERSION = 1;
23
+ export declare const LOGS_SCHEMA_VERSION = 1;
24
+ export interface PreferencesRecord {
25
+ version: typeof PREFERENCES_SCHEMA_VERSION;
26
+ consent: {
27
+ captureEnabled: boolean;
28
+ includePrompts: boolean;
29
+ policyVersion: string;
30
+ consentedAt?: string;
31
+ revision?: number;
32
+ };
33
+ enabledWorkspaceId?: string;
34
+ nudgeEnabled?: boolean;
35
+ }
36
+ export declare function validatePreferencesRecord(data: unknown): PreferencesRecord;
37
+ export interface RefreshLease {
38
+ fenceId: string;
39
+ acquiredAt: string;
40
+ expiresAt: string;
41
+ }
42
+ export interface OAuthCredentials {
43
+ version: typeof CREDENTIALS_SCHEMA_VERSION;
44
+ type: 'oauth';
45
+ accessToken: string;
46
+ refreshToken?: string;
47
+ expiresAt?: string;
48
+ scopes: string[];
49
+ authorizationId?: string;
50
+ allowedWorkspaceIds?: string[];
51
+ defaultWorkspaceId?: string | null;
52
+ refreshLease?: RefreshLease;
53
+ }
54
+ export interface ServiceCredentials {
55
+ version: typeof CREDENTIALS_SCHEMA_VERSION;
56
+ type: 'service';
57
+ serviceToken: string;
58
+ workspaceId: string;
59
+ serviceCredentialId?: string;
60
+ }
61
+ export type CredentialsRecord = OAuthCredentials | ServiceCredentials;
62
+ export declare function validateCredentialsRecord(data: unknown): CredentialsRecord;
63
+ export interface StateRecord {
64
+ version: typeof STATE_SCHEMA_VERSION;
65
+ authorizationId?: string;
66
+ workspaceId?: string;
67
+ orientCursor?: string;
68
+ cacheMeta?: Record<string, unknown>;
69
+ }
70
+ export declare function validateStateRecord(data: unknown): StateRecord;
71
+ export interface SessionLedgerRecord {
72
+ version: typeof SESSION_LEDGER_SCHEMA_VERSION;
73
+ sessionKey: string;
74
+ createdAt: string;
75
+ lastEventAt: string;
76
+ eventSequence: number;
77
+ lastMeaningfulAt?: string;
78
+ lastMeaningfulSequence?: number;
79
+ lastSuccessfulWriteBackAt?: string;
80
+ lastSuccessfulWriteBackSequence?: number;
81
+ lastCapturedAt?: string;
82
+ lastCapturedSequence?: number;
83
+ lastNudgedAt?: string;
84
+ lastNudgedSequence?: number;
85
+ editedPaths: string[];
86
+ prompts?: string[];
87
+ assistantSummary?: string;
88
+ model?: string;
89
+ deliveryIds: string[];
90
+ captureRevision?: number;
91
+ projectKey?: string;
92
+ workspaceId?: string;
93
+ }
94
+ export declare function validateSessionLedgerRecord(data: unknown): SessionLedgerRecord;
95
+ export interface QueueItemRecord {
96
+ version: typeof QUEUE_SCHEMA_VERSION;
97
+ digestId: string;
98
+ workspaceId: string;
99
+ captureTrigger: CaptureTrigger;
100
+ policyVersion: string;
101
+ digestText: string;
102
+ authorizationId?: string;
103
+ consentRevision?: number;
104
+ status: CaptureQueueStatus;
105
+ attempts: number;
106
+ nextRetryAt?: string;
107
+ lastError?: string;
108
+ createdAt: string;
109
+ updatedAt: string;
110
+ deliveredAt?: string;
111
+ deliveryLease?: {
112
+ owner: string;
113
+ expiresAt: string;
114
+ };
115
+ }
116
+ export declare function validateQueueItemRecord(data: unknown): QueueItemRecord;
117
+ export interface LogEntryRecord {
118
+ timestamp: string;
119
+ level: 'info' | 'warn' | 'error';
120
+ event: string;
121
+ metadata?: Record<string, string | number | boolean>;
122
+ }
123
+ export type SupportedHookHost = 'claude-code' | 'codex' | 'cursor' | 'vscode';
124
+ export interface HookEvent {
125
+ client: SupportedHookHost;
126
+ event: string;
127
+ sessionKey: string;
128
+ cwd?: string;
129
+ workspaceRoots?: string[];
130
+ transcriptPath?: string;
131
+ prompt?: string;
132
+ assistantText?: string;
133
+ toolName?: string;
134
+ toolInput?: unknown;
135
+ toolResult?: unknown;
136
+ stopHookActive?: boolean;
137
+ loopCount?: number;
138
+ status?: string;
139
+ source?: string;
140
+ model?: string;
141
+ /** Set only by a managed command for the separately opted-in nudge ledger. */
142
+ nudgeLedger?: boolean;
143
+ }
144
+ export declare function scrubSecrets(input: string): string;
145
+ export declare function filterRelativePaths(paths: readonly string[], rootDir: string): string[];
146
+ export interface CliLoginJsonResult {
147
+ ok?: boolean;
148
+ status?: 'authenticated';
149
+ type?: 'oauth' | 'service';
150
+ authType?: 'oauth' | 'service';
151
+ clientId?: string;
152
+ scopes: string[];
153
+ workspaceId?: string;
154
+ workspaces?: string[];
155
+ allowedWorkspaceIds?: string[];
156
+ defaultWorkspaceId?: string | null;
157
+ consentMode?: ConsentMode;
158
+ workspaceSelection?: WorkspaceSelection;
159
+ provenance?: ConsentProvenance;
160
+ }
161
+ export interface CliWhoamiJsonResult {
162
+ authenticated?: boolean;
163
+ status?: 'authenticated' | 'unauthenticated';
164
+ type?: 'oauth' | 'service';
165
+ authType?: 'oauth' | 'service';
166
+ userId?: string;
167
+ clientId?: string;
168
+ authorizationId?: string;
169
+ scopes?: string[];
170
+ allowedWorkspaceIds?: string[];
171
+ workspaces?: string[];
172
+ defaultWorkspaceId?: string | null;
173
+ workspaceId?: string;
174
+ consentMode?: ConsentMode;
175
+ workspaceSelection?: WorkspaceSelection;
176
+ policyVersion?: string;
177
+ provenance?: ConsentProvenance;
178
+ storageBackend?: 'os_vault' | 'file' | 'memory' | 'env';
179
+ expiresAt?: string;
180
+ captureEnabled?: boolean;
181
+ }
182
+ export interface CliLogoutJsonResult {
183
+ ok?: boolean;
184
+ status?: 'logged_out';
185
+ type?: 'oauth' | 'service';
186
+ authType?: 'oauth' | 'service';
187
+ clearedCredentials: boolean;
188
+ revokedOnServer?: boolean;
189
+ warning?: string;
190
+ }
191
+ export type CliLoginResponse = CliLoginJsonResult;
192
+ export type CliWhoamiResponse = CliWhoamiJsonResult;
193
+ export type CliLogoutResponse = CliLogoutJsonResult;
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Frozen CLI contracts: command grammar, exit codes, versioned local schemas,
3
+ * normalized hook events, and privacy invariants (AHI-012, AHI-013, AHI-014, AHI-018)
4
+ */
5
+ // =====================================================================
6
+ // CLI Exit Codes (AHI-012)
7
+ // =====================================================================
8
+ export const CLI_EXIT_CODES = {
9
+ SUCCESS: 0,
10
+ GENERAL_ERROR: 1,
11
+ USAGE_ERROR: 2,
12
+ AUTH_REQUIRED: 3,
13
+ PERMISSION_DENIED: 4,
14
+ CONFIGURATION_ERROR: 5,
15
+ NETWORK_ERROR: 6,
16
+ };
17
+ // =====================================================================
18
+ // Versioned Schema Versions (AHI-013)
19
+ // =====================================================================
20
+ export const PREFERENCES_SCHEMA_VERSION = 1;
21
+ export const CREDENTIALS_SCHEMA_VERSION = 1;
22
+ export const STATE_SCHEMA_VERSION = 1;
23
+ export const CACHE_SCHEMA_VERSION = 1;
24
+ export const SESSION_LEDGER_SCHEMA_VERSION = 1;
25
+ export const QUEUE_SCHEMA_VERSION = 1;
26
+ export const LOGS_SCHEMA_VERSION = 1;
27
+ export function validatePreferencesRecord(data) {
28
+ if (!data || typeof data !== 'object') {
29
+ throw new Error('Preferences must be an object');
30
+ }
31
+ const obj = data;
32
+ if (obj.version !== PREFERENCES_SCHEMA_VERSION) {
33
+ throw new Error(`Unsupported preferences schema version: ${String(obj.version)}`);
34
+ }
35
+ if (!obj.consent || typeof obj.consent !== 'object') {
36
+ throw new Error('Preferences must include a consent object');
37
+ }
38
+ const consent = obj.consent;
39
+ if (typeof consent.captureEnabled !== 'boolean') {
40
+ throw new Error('consent.captureEnabled must be a boolean');
41
+ }
42
+ if (typeof consent.includePrompts !== 'boolean') {
43
+ throw new Error('consent.includePrompts must be a boolean');
44
+ }
45
+ if (typeof consent.policyVersion !== 'string' || !consent.policyVersion) {
46
+ throw new Error('consent.policyVersion must be a non-empty string');
47
+ }
48
+ return {
49
+ version: PREFERENCES_SCHEMA_VERSION,
50
+ consent: {
51
+ captureEnabled: consent.captureEnabled,
52
+ includePrompts: consent.includePrompts,
53
+ policyVersion: consent.policyVersion,
54
+ consentedAt: typeof consent.consentedAt === 'string' ? consent.consentedAt : undefined,
55
+ revision: typeof consent.revision === 'number' && Number.isSafeInteger(consent.revision)
56
+ ? Math.max(0, consent.revision)
57
+ : 0,
58
+ },
59
+ enabledWorkspaceId: typeof obj.enabledWorkspaceId === 'string' ? obj.enabledWorkspaceId : undefined,
60
+ nudgeEnabled: typeof obj.nudgeEnabled === 'boolean' ? obj.nudgeEnabled : false,
61
+ };
62
+ }
63
+ export function validateCredentialsRecord(data) {
64
+ if (!data || typeof data !== 'object') {
65
+ throw new Error('Credentials must be an object');
66
+ }
67
+ const obj = data;
68
+ if (obj.version !== CREDENTIALS_SCHEMA_VERSION) {
69
+ throw new Error(`Unsupported credentials schema version: ${String(obj.version)}`);
70
+ }
71
+ if (obj.type === 'oauth') {
72
+ if (typeof obj.accessToken !== 'string' || !obj.accessToken) {
73
+ throw new Error('OAuth credentials require a non-empty accessToken');
74
+ }
75
+ if (!Array.isArray(obj.scopes)) {
76
+ throw new Error('OAuth credentials require a scopes array');
77
+ }
78
+ const record = {
79
+ version: CREDENTIALS_SCHEMA_VERSION,
80
+ type: 'oauth',
81
+ accessToken: obj.accessToken,
82
+ scopes: obj.scopes.filter((s) => typeof s === 'string'),
83
+ };
84
+ if (typeof obj.refreshToken === 'string')
85
+ record.refreshToken = obj.refreshToken;
86
+ if (typeof obj.expiresAt === 'string')
87
+ record.expiresAt = obj.expiresAt;
88
+ if (typeof obj.authorizationId === 'string')
89
+ record.authorizationId = obj.authorizationId;
90
+ if (Array.isArray(obj.allowedWorkspaceIds)) {
91
+ record.allowedWorkspaceIds = obj.allowedWorkspaceIds.filter((w) => typeof w === 'string');
92
+ }
93
+ if (typeof obj.defaultWorkspaceId === 'string')
94
+ record.defaultWorkspaceId = obj.defaultWorkspaceId;
95
+ if (obj.refreshLease && typeof obj.refreshLease === 'object') {
96
+ record.refreshLease = {
97
+ fenceId: String(obj.refreshLease.fenceId),
98
+ acquiredAt: String(obj.refreshLease.acquiredAt),
99
+ expiresAt: String(obj.refreshLease.expiresAt),
100
+ };
101
+ }
102
+ return record;
103
+ }
104
+ if (obj.type === 'service') {
105
+ if (typeof obj.serviceToken !== 'string' || !obj.serviceToken) {
106
+ throw new Error('Service credentials require a non-empty serviceToken');
107
+ }
108
+ if (typeof obj.workspaceId !== 'string' || !obj.workspaceId) {
109
+ throw new Error('Service credentials require a non-empty workspaceId');
110
+ }
111
+ const record = {
112
+ version: CREDENTIALS_SCHEMA_VERSION,
113
+ type: 'service',
114
+ serviceToken: obj.serviceToken,
115
+ workspaceId: obj.workspaceId,
116
+ };
117
+ if (typeof obj.serviceCredentialId === 'string') {
118
+ record.serviceCredentialId = obj.serviceCredentialId;
119
+ }
120
+ return record;
121
+ }
122
+ throw new Error(`Invalid credentials type: ${String(obj.type)}`);
123
+ }
124
+ export function validateStateRecord(data) {
125
+ if (!data || typeof data !== 'object') {
126
+ throw new Error('State must be an object');
127
+ }
128
+ const obj = data;
129
+ if (obj.version !== STATE_SCHEMA_VERSION) {
130
+ throw new Error(`Unsupported state schema version: ${String(obj.version)}`);
131
+ }
132
+ return {
133
+ version: STATE_SCHEMA_VERSION,
134
+ authorizationId: typeof obj.authorizationId === 'string' ? obj.authorizationId : undefined,
135
+ workspaceId: typeof obj.workspaceId === 'string' ? obj.workspaceId : undefined,
136
+ orientCursor: typeof obj.orientCursor === 'string' ? obj.orientCursor : undefined,
137
+ cacheMeta: obj.cacheMeta && typeof obj.cacheMeta === 'object' ? obj.cacheMeta : undefined,
138
+ };
139
+ }
140
+ export function validateSessionLedgerRecord(data) {
141
+ if (!data || typeof data !== 'object') {
142
+ throw new Error('Session ledger must be an object');
143
+ }
144
+ const obj = data;
145
+ if (obj.version !== SESSION_LEDGER_SCHEMA_VERSION) {
146
+ throw new Error(`Unsupported session ledger schema version: ${String(obj.version)}`);
147
+ }
148
+ if (typeof obj.sessionKey !== 'string' || !obj.sessionKey) {
149
+ throw new Error('Session ledger requires a sessionKey');
150
+ }
151
+ return {
152
+ version: SESSION_LEDGER_SCHEMA_VERSION,
153
+ sessionKey: obj.sessionKey,
154
+ createdAt: typeof obj.createdAt === 'string' ? obj.createdAt : new Date().toISOString(),
155
+ lastEventAt: typeof obj.lastEventAt === 'string' ? obj.lastEventAt : new Date().toISOString(),
156
+ eventSequence: typeof obj.eventSequence === 'number' ? obj.eventSequence : 0,
157
+ lastMeaningfulAt: typeof obj.lastMeaningfulAt === 'string' ? obj.lastMeaningfulAt : undefined,
158
+ lastMeaningfulSequence: typeof obj.lastMeaningfulSequence === 'number' ? obj.lastMeaningfulSequence : undefined,
159
+ lastSuccessfulWriteBackAt: typeof obj.lastSuccessfulWriteBackAt === 'string' ? obj.lastSuccessfulWriteBackAt : undefined,
160
+ lastSuccessfulWriteBackSequence: typeof obj.lastSuccessfulWriteBackSequence === 'number' ? obj.lastSuccessfulWriteBackSequence : undefined,
161
+ lastCapturedAt: typeof obj.lastCapturedAt === 'string' ? obj.lastCapturedAt : undefined,
162
+ lastCapturedSequence: typeof obj.lastCapturedSequence === 'number' ? obj.lastCapturedSequence : undefined,
163
+ lastNudgedAt: typeof obj.lastNudgedAt === 'string' ? obj.lastNudgedAt : undefined,
164
+ lastNudgedSequence: typeof obj.lastNudgedSequence === 'number' ? obj.lastNudgedSequence : undefined,
165
+ editedPaths: Array.isArray(obj.editedPaths) ? obj.editedPaths.filter((p) => typeof p === 'string').slice(0, 100) : [],
166
+ prompts: Array.isArray(obj.prompts) ? obj.prompts.filter((p) => typeof p === 'string').slice(0, 50) : undefined,
167
+ assistantSummary: typeof obj.assistantSummary === 'string' ? obj.assistantSummary.slice(0, 4000) : undefined,
168
+ model: typeof obj.model === 'string' ? obj.model.slice(0, 120) : undefined,
169
+ deliveryIds: Array.isArray(obj.deliveryIds) ? obj.deliveryIds.filter((d) => typeof d === 'string').slice(-100) : [],
170
+ captureRevision: typeof obj.captureRevision === 'number' ? obj.captureRevision : undefined,
171
+ projectKey: typeof obj.projectKey === 'string' ? obj.projectKey : undefined,
172
+ workspaceId: typeof obj.workspaceId === 'string' ? obj.workspaceId : undefined,
173
+ };
174
+ }
175
+ export function validateQueueItemRecord(data) {
176
+ if (!data || typeof data !== 'object') {
177
+ throw new Error('Queue item must be an object');
178
+ }
179
+ const obj = data;
180
+ if (obj.version !== QUEUE_SCHEMA_VERSION) {
181
+ throw new Error(`Unsupported queue schema version: ${String(obj.version)}`);
182
+ }
183
+ if (typeof obj.digestId !== 'string' || !obj.digestId) {
184
+ throw new Error('Queue item requires a digestId');
185
+ }
186
+ if (typeof obj.workspaceId !== 'string' || !obj.workspaceId) {
187
+ throw new Error('Queue item requires a workspaceId');
188
+ }
189
+ return {
190
+ version: QUEUE_SCHEMA_VERSION,
191
+ digestId: obj.digestId,
192
+ workspaceId: obj.workspaceId,
193
+ captureTrigger: obj.captureTrigger ?? 'manual',
194
+ policyVersion: typeof obj.policyVersion === 'string' ? obj.policyVersion : '2026-09-02.capture-v1',
195
+ digestText: typeof obj.digestText === 'string' ? obj.digestText : '',
196
+ authorizationId: typeof obj.authorizationId === 'string' ? obj.authorizationId : undefined,
197
+ consentRevision: typeof obj.consentRevision === 'number' && Number.isSafeInteger(obj.consentRevision)
198
+ ? Math.max(0, obj.consentRevision)
199
+ : undefined,
200
+ status: obj.status ?? 'pending',
201
+ attempts: typeof obj.attempts === 'number' ? obj.attempts : 0,
202
+ nextRetryAt: typeof obj.nextRetryAt === 'string' ? obj.nextRetryAt : undefined,
203
+ lastError: typeof obj.lastError === 'string' ? obj.lastError : undefined,
204
+ createdAt: typeof obj.createdAt === 'string' ? obj.createdAt : new Date().toISOString(),
205
+ updatedAt: typeof obj.updatedAt === 'string'
206
+ ? obj.updatedAt
207
+ : typeof obj.createdAt === 'string'
208
+ ? obj.createdAt
209
+ : new Date().toISOString(),
210
+ deliveredAt: typeof obj.deliveredAt === 'string' ? obj.deliveredAt : undefined,
211
+ deliveryLease: obj.deliveryLease && typeof obj.deliveryLease === 'object' &&
212
+ typeof obj.deliveryLease.owner === 'string' &&
213
+ typeof obj.deliveryLease.expiresAt === 'string'
214
+ ? obj.deliveryLease : undefined,
215
+ };
216
+ }
217
+ // =====================================================================
218
+ // Privacy and Sanitization Helpers (AHI-018, AHI-D06, AHI-D18)
219
+ // =====================================================================
220
+ export function scrubSecrets(input) {
221
+ return input
222
+ .replace(/\b(bearer\s+)?([A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,})\b/gi, '[redacted-jwt]')
223
+ .replace(/\b(AKIA[0-9A-Z]{16})\b/g, '[redacted-access-key]')
224
+ .replace(/(password|passwd|api[_-]?key|secret|token)\s*[:=]\s*([^\s"'`<>{}]{8,})/gi, '$1=[redacted-secret]');
225
+ }
226
+ export function filterRelativePaths(paths, rootDir) {
227
+ const normalizedRoot = rootDir.replace(/\\/g, '/').replace(/\/+$/, '');
228
+ const out = [];
229
+ for (const raw of paths) {
230
+ const p = raw.replace(/\\/g, '/');
231
+ if (p.startsWith('/') || /^[a-zA-Z]:\//.test(p)) {
232
+ if (p.startsWith(normalizedRoot + '/')) {
233
+ out.push(p.slice(normalizedRoot.length + 1));
234
+ }
235
+ }
236
+ else if (!p.startsWith('../') && !p.includes('/../')) {
237
+ out.push(p);
238
+ }
239
+ }
240
+ return out;
241
+ }
242
+ //# sourceMappingURL=cli-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-contracts.js","sourceRoot":"","sources":["../../src/lib/cli-contracts.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ export type ClientTarget = {
8
8
  client: ClientId;
9
9
  configPath: string;
10
10
  guidancePath: string;
11
+ hookPath?: string;
12
+ supportsHooks: boolean;
11
13
  configFormat: 'jsonc' | 'toml';
12
14
  /** Top-level server map key: VS Code uses `servers`, everything else `mcpServers`. */
13
15
  configRootKey: 'mcpServers' | 'servers';
@@ -18,6 +18,8 @@ export function targetFor(client, scope) {
18
18
  client,
19
19
  configPath: '.cursor/mcp.json',
20
20
  guidancePath: '.cursor/rules/brainmcp-workspace.mdc',
21
+ hookPath: home ? '.cursor/hooks.json' : '.cursor/hooks.json',
22
+ supportsHooks: true,
21
23
  configFormat: 'jsonc',
22
24
  configRootKey: 'mcpServers',
23
25
  };
@@ -26,6 +28,8 @@ export function targetFor(client, scope) {
26
28
  client,
27
29
  configPath: home ? '.claude.json' : '.mcp.json',
28
30
  guidancePath: home ? '.claude/CLAUDE.md' : 'CLAUDE.md',
31
+ hookPath: home ? '.claude/settings.json' : '.claude/settings.json',
32
+ supportsHooks: true,
29
33
  configFormat: 'jsonc',
30
34
  configRootKey: 'mcpServers',
31
35
  };
@@ -34,6 +38,8 @@ export function targetFor(client, scope) {
34
38
  client,
35
39
  configPath: '.codex/config.toml',
36
40
  guidancePath: home ? '.codex/AGENTS.md' : 'AGENTS.md',
41
+ hookPath: '.codex/hooks.json',
42
+ supportsHooks: true,
37
43
  configFormat: 'toml',
38
44
  configRootKey: 'mcpServers',
39
45
  };
@@ -46,6 +52,8 @@ export function targetFor(client, scope) {
46
52
  guidancePath: home
47
53
  ? '.copilot/instructions/brainmcp.instructions.md'
48
54
  : 'AGENTS.md',
55
+ hookPath: home ? '.copilot/hooks/brainmcp.json' : '.github/hooks/brainmcp.json',
56
+ supportsHooks: true,
49
57
  configFormat: 'jsonc',
50
58
  configRootKey: 'servers',
51
59
  };
@@ -59,6 +67,7 @@ export function targetFor(client, scope) {
59
67
  guidancePath: home
60
68
  ? '.copilot/instructions/brainmcp.instructions.md'
61
69
  : '.github/copilot-instructions.md',
70
+ supportsHooks: false,
62
71
  configFormat: 'jsonc',
63
72
  configRootKey: 'mcpServers',
64
73
  };
@@ -67,6 +76,7 @@ export function targetFor(client, scope) {
67
76
  client,
68
77
  configPath: home ? '.gemini/config/mcp_config.json' : '.agents/mcp_config.json',
69
78
  guidancePath: home ? '.gemini/GEMINI.md' : '.agents/rules/brainmcp.md',
79
+ supportsHooks: false,
70
80
  configFormat: 'jsonc',
71
81
  configRootKey: 'mcpServers',
72
82
  };
@@ -75,6 +85,7 @@ export function targetFor(client, scope) {
75
85
  client,
76
86
  configPath: '.mcp.json',
77
87
  guidancePath: 'AGENTS.md',
88
+ supportsHooks: false,
78
89
  configFormat: 'jsonc',
79
90
  configRootKey: 'mcpServers',
80
91
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { ConsentProvenance } from '@braincp/agent-config';
2
+ import { type SecretVault } from './vault.js';
3
+ export interface StoredCredentials {
4
+ version: 1;
5
+ authType: 'oauth' | 'service';
6
+ accessToken?: string;
7
+ refreshToken?: string;
8
+ expiresAt?: string;
9
+ clientId?: string;
10
+ userId?: string;
11
+ authorizationId?: string;
12
+ scopes?: string[];
13
+ workspaces?: string[];
14
+ defaultWorkspaceId?: string | null;
15
+ provenance?: ConsentProvenance;
16
+ serviceToken?: string;
17
+ refreshLease?: {
18
+ leaseHolder: string;
19
+ expiresAt: string;
20
+ revision: number;
21
+ };
22
+ updatedAt: string;
23
+ }
24
+ export interface CredentialStore {
25
+ get(): Promise<StoredCredentials | null>;
26
+ set(credentials: StoredCredentials): Promise<void>;
27
+ clear(): Promise<void>;
28
+ withRefreshLock<T>(action: (current: StoredCredentials | null) => Promise<T>): Promise<T>;
29
+ adoptLegacySecret?(): Promise<void>;
30
+ }
31
+ export declare class MemoryCredentialStore implements CredentialStore {
32
+ private creds;
33
+ private locked;
34
+ get(): Promise<StoredCredentials | null>;
35
+ set(credentials: StoredCredentials): Promise<void>;
36
+ clear(): Promise<void>;
37
+ adoptLegacySecret(): Promise<void>;
38
+ withRefreshLock<T>(action: (current: StoredCredentials | null) => Promise<T>): Promise<T>;
39
+ }
40
+ export interface FileStoreOptions {
41
+ baseDir?: string;
42
+ warn?: (message: string) => void;
43
+ allowInsecureModesForTesting?: boolean;
44
+ }
45
+ export declare class FileCredentialStore implements CredentialStore {
46
+ private readonly lockContext;
47
+ private baseDir;
48
+ private warn;
49
+ private allowInsecure;
50
+ constructor(options?: FileStoreOptions);
51
+ private credentialPaths;
52
+ private assertSafePath;
53
+ private ensureDirectory;
54
+ get(): Promise<StoredCredentials | null>;
55
+ set(credentials: StoredCredentials): Promise<void>;
56
+ clear(): Promise<void>;
57
+ adoptLegacySecret(): Promise<void>;
58
+ withRefreshLock<T>(action: (current: StoredCredentials | null) => Promise<T>): Promise<T>;
59
+ }
60
+ export type CredentialBackend = 'os_vault' | 'file';
61
+ export declare class VaultCredentialStore implements CredentialStore {
62
+ private readonly vault;
63
+ private readonly lockStore;
64
+ private readonly baseDir?;
65
+ private readonly lockContext;
66
+ constructor(vault: SecretVault, lockStore: FileCredentialStore, baseDir?: string | undefined);
67
+ get backend(): CredentialBackend;
68
+ private backendMarkerPath;
69
+ private secretKey;
70
+ get(): Promise<StoredCredentials | null>;
71
+ set(credentials: StoredCredentials): Promise<void>;
72
+ clear(): Promise<void>;
73
+ adoptLegacySecret(): Promise<void>;
74
+ withRefreshLock<T>(action: (current: StoredCredentials | null) => Promise<T>): Promise<T>;
75
+ }
76
+ export declare const FILE_CREDENTIALS_ACK_FILENAME = "allow-file-credentials";
77
+ export declare function fileCredentialsAcknowledged(baseDir?: string): boolean;
78
+ export declare function writeFileCredentialsAcknowledgement(baseDir?: string): void;
79
+ export interface CreateCredentialStoreOptions {
80
+ baseDir?: string;
81
+ vault?: SecretVault;
82
+ allowFileCredentials?: boolean;
83
+ persistFileAcknowledgement?: boolean;
84
+ warn?: (message: string) => void;
85
+ }
86
+ export declare function createDefaultCredentialStore(options?: CreateCredentialStoreOptions): Promise<{
87
+ store: CredentialStore;
88
+ backend: CredentialBackend;
89
+ }>;