@brainmcp/brainmcp 0.1.12 → 0.1.14

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 (108) hide show
  1. package/README.md +79 -5
  2. package/dist/agent-config.js +155 -24
  3. package/dist/commands/auth.d.ts +47 -0
  4. package/dist/commands/auth.js +392 -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 +198 -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 +207 -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/endpoints.d.ts +5 -0
  51. package/dist/lib/endpoints.js +31 -0
  52. package/dist/lib/endpoints.js.map +1 -0
  53. package/dist/lib/http.d.ts +3 -0
  54. package/dist/lib/http.js +51 -0
  55. package/dist/lib/http.js.map +1 -0
  56. package/dist/lib/managed.d.ts +8 -0
  57. package/dist/lib/managed.js +72 -6
  58. package/dist/lib/managed.js.map +1 -1
  59. package/dist/lib/oauth-client.d.ts +55 -0
  60. package/dist/lib/oauth-client.js +155 -0
  61. package/dist/lib/oauth-client.js.map +1 -0
  62. package/dist/lib/pkce.d.ts +14 -0
  63. package/dist/lib/pkce.js +33 -0
  64. package/dist/lib/pkce.js.map +1 -0
  65. package/dist/lib/vault.d.ts +26 -0
  66. package/dist/lib/vault.js +221 -0
  67. package/dist/lib/vault.js.map +1 -0
  68. package/dist/runtime/brainmcp-hook-runtime.mjs +3243 -0
  69. package/dist/runtime/capture.d.ts +83 -0
  70. package/dist/runtime/capture.js +332 -0
  71. package/dist/runtime/capture.js.map +1 -0
  72. package/dist/runtime/diagnostics.d.ts +7 -0
  73. package/dist/runtime/diagnostics.js +75 -0
  74. package/dist/runtime/diagnostics.js.map +1 -0
  75. package/dist/runtime/doctor-checks.d.ts +15 -0
  76. package/dist/runtime/doctor-checks.js +233 -0
  77. package/dist/runtime/doctor-checks.js.map +1 -0
  78. package/dist/runtime/flush.d.ts +30 -0
  79. package/dist/runtime/flush.js +193 -0
  80. package/dist/runtime/flush.js.map +1 -0
  81. package/dist/runtime/hook-dispatcher.d.ts +31 -0
  82. package/dist/runtime/hook-dispatcher.js +381 -0
  83. package/dist/runtime/hook-dispatcher.js.map +1 -0
  84. package/dist/runtime/index.d.ts +12 -0
  85. package/dist/runtime/index.js +69 -0
  86. package/dist/runtime/index.js.map +1 -0
  87. package/dist/runtime/installer.d.ts +26 -0
  88. package/dist/runtime/installer.js +134 -0
  89. package/dist/runtime/installer.js.map +1 -0
  90. package/dist/runtime/lock.d.ts +19 -0
  91. package/dist/runtime/lock.js +116 -0
  92. package/dist/runtime/lock.js.map +1 -0
  93. package/dist/runtime/orient.d.ts +55 -0
  94. package/dist/runtime/orient.js +256 -0
  95. package/dist/runtime/orient.js.map +1 -0
  96. package/dist/runtime/queue.d.ts +7 -0
  97. package/dist/runtime/queue.js +80 -0
  98. package/dist/runtime/queue.js.map +1 -0
  99. package/dist/runtime/retention.d.ts +26 -0
  100. package/dist/runtime/retention.js +175 -0
  101. package/dist/runtime/retention.js.map +1 -0
  102. package/dist/runtime/session.d.ts +68 -0
  103. package/dist/runtime/session.js +283 -0
  104. package/dist/runtime/session.js.map +1 -0
  105. package/dist/runtime/storage.d.ts +32 -0
  106. package/dist/runtime/storage.js +236 -0
  107. package/dist/runtime/storage.js.map +1 -0
  108. package/package.json +3 -2
@@ -0,0 +1,349 @@
1
+ import crypto from 'node:crypto';
2
+ import { enableCapture, disableCapture, buildDigestPayload, collectGitMetadata, serializeDigestPayload, MAX_DIGEST_BYTES, readProjectCaptureRestrictions, captureProjectKey, } from '../runtime/capture.js';
3
+ import { readPreferences, resolveStateDir } from '../runtime/storage.js';
4
+ import { listQueueItems } from '../runtime/queue.js';
5
+ import { canEnqueueCapture, flushCaptureQueue } from '../runtime/flush.js';
6
+ import { previewCapturePurge, purgeCaptureLocalState } from '../runtime/retention.js';
7
+ import { loadMostRecentSessionLedger, queueSessionCapture } from '../runtime/session.js';
8
+ import { CLI_EXIT_CODES } from '../lib/cli-contracts.js';
9
+ import { ApiClient } from '../lib/api-client.js';
10
+ import { createDefaultCredentialStore } from '../lib/credentials.js';
11
+ export function captureStatus(options) {
12
+ const prefs = readPreferences(options?.baseDir);
13
+ const queue = listQueueItems(options?.baseDir);
14
+ const count = (status) => queue.filter((item) => item.status === status).length;
15
+ const lastSuccessfulDeliveryAt = queue
16
+ .filter((item) => item.status === 'delivered' && item.deliveredAt)
17
+ .map((item) => item.deliveredAt)
18
+ .sort()
19
+ .at(-1) ?? null;
20
+ const data = {
21
+ enabled: Boolean(prefs?.consent?.captureEnabled),
22
+ includePrompts: Boolean(prefs?.consent?.includePrompts),
23
+ policyVersion: prefs?.consent?.policyVersion ?? '2026-09-02.capture-v1',
24
+ consentedAt: prefs?.consent?.consentedAt ?? null,
25
+ consentRevision: prefs?.consent?.revision ?? 0,
26
+ workspaceId: prefs?.enabledWorkspaceId ?? null,
27
+ maxBytesPerDigest: MAX_DIGEST_BYTES,
28
+ lastSuccessfulDeliveryAt,
29
+ queue: {
30
+ total: queue.length,
31
+ pending: count('pending'),
32
+ sending: count('sending'),
33
+ failed: count('failed'),
34
+ cancelled: count('cancelled'),
35
+ deliveryUnknown: count('delivery_unknown'),
36
+ delivered: count('delivered'),
37
+ },
38
+ };
39
+ return { exitCode: CLI_EXIT_CODES.SUCCESS, data };
40
+ }
41
+ export async function captureEnable(options) {
42
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
43
+ const explicitWorkspace = options?.workspace?.trim();
44
+ if (explicitWorkspace && !UUID_RE.test(explicitWorkspace)) {
45
+ return {
46
+ exitCode: CLI_EXIT_CODES.USAGE_ERROR,
47
+ data: { enabled: false, message: '--workspace must be a workspace UUID.' },
48
+ };
49
+ }
50
+ let kind;
51
+ let scopes = [];
52
+ let workspaces = [];
53
+ let defaultWorkspaceId;
54
+ let workspaceId;
55
+ try {
56
+ let apiClient = options?.apiClient;
57
+ if (!apiClient) {
58
+ const store = options?.store ?? (await createDefaultCredentialStore({
59
+ baseDir: options?.baseDir,
60
+ allowFileCredentials: true,
61
+ warn: () => undefined,
62
+ })).store;
63
+ apiClient = new ApiClient({ store });
64
+ }
65
+ const creds = await apiClient.getEffectiveCredentials();
66
+ kind = creds?.authType;
67
+ scopes = Array.isArray(creds?.scopes)
68
+ ? creds.scopes.filter((item) => typeof item === 'string')
69
+ : [];
70
+ workspaces = Array.isArray(creds?.workspaces)
71
+ ? creds.workspaces.filter((item) => typeof item === 'string')
72
+ : [];
73
+ defaultWorkspaceId = creds?.defaultWorkspaceId;
74
+ }
75
+ catch {
76
+ kind = undefined;
77
+ }
78
+ if (kind === 'service' || (!kind && process.env.BRAINMCP_SERVICE_TOKEN)) {
79
+ return {
80
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
81
+ data: {
82
+ enabled: false,
83
+ message: 'Service tokens cannot enable automatic lifecycle capture. Use an OAuth companion login with --capture-digests.',
84
+ },
85
+ };
86
+ }
87
+ if (!kind) {
88
+ return {
89
+ exitCode: CLI_EXIT_CODES.AUTH_REQUIRED,
90
+ data: {
91
+ enabled: false,
92
+ message: 'Capture was not enabled. Sign in with `brainmcp login --capture-digests` and complete browser consent first.',
93
+ },
94
+ };
95
+ }
96
+ if (kind === 'oauth' && !scopes.includes('digests:write')) {
97
+ return {
98
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
99
+ data: {
100
+ enabled: false,
101
+ message: 'Capture requires the digests:write scope. Re-run `brainmcp login --capture-digests` and approve digest capture in the browser.',
102
+ },
103
+ };
104
+ }
105
+ if (kind === 'oauth' && workspaces.length === 0) {
106
+ return {
107
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
108
+ data: {
109
+ enabled: false,
110
+ message: 'Capture requires an explicit workspace allowlist on the current CLI grant. Re-login and approve workspace access.',
111
+ },
112
+ };
113
+ }
114
+ if (explicitWorkspace && !workspaces.includes(explicitWorkspace)) {
115
+ return {
116
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
117
+ data: {
118
+ enabled: false,
119
+ message: 'The selected workspace is not in this CLI authorization allowlist.',
120
+ },
121
+ };
122
+ }
123
+ workspaceId = [
124
+ explicitWorkspace,
125
+ typeof defaultWorkspaceId === 'string' && workspaces.includes(defaultWorkspaceId)
126
+ ? defaultWorkspaceId
127
+ : undefined,
128
+ workspaces.length === 1 ? workspaces[0] : undefined,
129
+ ]
130
+ .find((id) => typeof id === 'string' && UUID_RE.test(id.trim()))
131
+ ?.trim();
132
+ if (kind === 'oauth' && scopes.includes('digests:write') && !workspaceId) {
133
+ return {
134
+ exitCode: CLI_EXIT_CODES.USAGE_ERROR,
135
+ data: {
136
+ enabled: false,
137
+ message: 'Capture needs a target workspace. Pass --workspace <uuid> or re-login so the grant has a default workspace.',
138
+ },
139
+ };
140
+ }
141
+ const updated = enableCapture({
142
+ baseDir: options?.baseDir,
143
+ includePrompts: options?.includePrompts,
144
+ workspaceId,
145
+ });
146
+ return {
147
+ exitCode: CLI_EXIT_CODES.SUCCESS,
148
+ data: {
149
+ enabled: true,
150
+ includePrompts: Boolean(updated.consent.includePrompts),
151
+ policyVersion: updated.consent.policyVersion,
152
+ workspaceId: updated.enabledWorkspaceId ?? null,
153
+ message: 'Digest capture enabled successfully.',
154
+ },
155
+ };
156
+ }
157
+ export function captureDisable(options) {
158
+ const updated = disableCapture({
159
+ baseDir: options?.baseDir,
160
+ });
161
+ return {
162
+ exitCode: CLI_EXIT_CODES.SUCCESS,
163
+ data: {
164
+ enabled: false,
165
+ includePrompts: false,
166
+ policyVersion: updated.consent.policyVersion,
167
+ message: 'Digest capture disabled and pending automatic items cancelled.',
168
+ },
169
+ };
170
+ }
171
+ export async function captureNow(options) {
172
+ const credentialHome = options?.baseDir;
173
+ options = { ...options, baseDir: resolveStateDir(options?.baseDir) };
174
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
175
+ const prefs = readPreferences(options?.baseDir);
176
+ const workspaceId = (options?.workspace || prefs?.enabledWorkspaceId)?.trim();
177
+ const projectKey = captureProjectKey(options.cwd ?? process.cwd());
178
+ const ledger = loadMostRecentSessionLedger(options?.baseDir, projectKey);
179
+ const projectPolicy = readProjectCaptureRestrictions(options.cwd ?? process.cwd());
180
+ if (!ledger) {
181
+ return {
182
+ exitCode: CLI_EXIT_CODES.CONFIGURATION_ERROR,
183
+ data: {
184
+ captured: false,
185
+ dryRun: Boolean(options?.dryRun),
186
+ requestsSent: 0,
187
+ message: 'No local session ledger is available to capture. Run this command after a managed lifecycle hook has recorded session activity.',
188
+ },
189
+ };
190
+ }
191
+ const payload = buildDigestPayload({
192
+ trigger: 'manual',
193
+ workspaceId: workspaceId || '00000000-0000-4000-8000-000000000000',
194
+ host: 'manual-cli',
195
+ model: ledger.model,
196
+ summary: ledger.assistantSummary,
197
+ paths: ledger.editedPaths,
198
+ gitMetadata: collectGitMetadata(options?.cwd ?? process.cwd()),
199
+ prompts: ledger.prompts,
200
+ includePrompts: prefs?.consent?.includePrompts && !projectPolicy.promptsDisabled,
201
+ });
202
+ if (options?.dryRun) {
203
+ return {
204
+ exitCode: CLI_EXIT_CODES.SUCCESS,
205
+ data: {
206
+ dryRun: true,
207
+ requestsSent: 0,
208
+ payload,
209
+ message: 'Dry run completed. Zero network requests were made. Scrubbing is defense in depth, not consent.',
210
+ },
211
+ };
212
+ }
213
+ if (!workspaceId) {
214
+ return {
215
+ exitCode: CLI_EXIT_CODES.CONFIGURATION_ERROR,
216
+ data: {
217
+ captured: false,
218
+ requestsSent: 0,
219
+ message: 'Select a workspace with --workspace or set enabledWorkspaceId in preferences before capturing.',
220
+ },
221
+ };
222
+ }
223
+ if (!UUID_RE.test(workspaceId)) {
224
+ return {
225
+ exitCode: CLI_EXIT_CODES.CONFIGURATION_ERROR,
226
+ data: {
227
+ captured: false,
228
+ requestsSent: 0,
229
+ message: 'The capture workspace must be a valid workspace UUID.',
230
+ },
231
+ };
232
+ }
233
+ if (!prefs?.consent?.captureEnabled) {
234
+ return {
235
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
236
+ data: {
237
+ captured: false,
238
+ requestsSent: 0,
239
+ message: 'Capture is disabled. Run `brainmcp capture enable` after `brainmcp login --capture-digests`.',
240
+ },
241
+ };
242
+ }
243
+ if (projectPolicy.captureDisabled || ledger.captureRevision !== (prefs.consent.revision ?? 0) || ledger.workspaceId !== workspaceId) {
244
+ return { exitCode: CLI_EXIT_CODES.PERMISSION_DENIED, data: { captured: false, requestsSent: 0,
245
+ message: 'This ledger is restricted by project policy or belongs to a different capture consent/workspace. Record new activity under the current capture settings.' } };
246
+ }
247
+ if (!canEnqueueCapture(options?.baseDir)) {
248
+ return {
249
+ exitCode: CLI_EXIT_CODES.GENERAL_ERROR,
250
+ data: {
251
+ captured: false,
252
+ requestsSent: 0,
253
+ message: 'Local capture queue is full. Run `brainmcp capture purge-local` or wait for retries.',
254
+ },
255
+ };
256
+ }
257
+ let apiClient = options?.apiClient;
258
+ if (!apiClient) {
259
+ const store = options?.store ?? (await createDefaultCredentialStore({
260
+ baseDir: credentialHome,
261
+ allowFileCredentials: true,
262
+ warn: () => undefined,
263
+ })).store;
264
+ apiClient = new ApiClient({ store });
265
+ }
266
+ const creds = await apiClient.getEffectiveCredentials();
267
+ if (creds?.authType !== 'oauth' ||
268
+ !creds.accessToken ||
269
+ !creds.authorizationId ||
270
+ !creds.scopes?.includes('digests:write')) {
271
+ return {
272
+ exitCode: CLI_EXIT_CODES.AUTH_REQUIRED,
273
+ data: {
274
+ captured: false,
275
+ requestsSent: 0,
276
+ payload,
277
+ message: 'Manual capture was not queued. Sign in with `brainmcp login --capture-digests` first so it can be bound to the current authorization.',
278
+ },
279
+ };
280
+ }
281
+ if (!creds.workspaces?.includes(workspaceId)) {
282
+ return {
283
+ exitCode: CLI_EXIT_CODES.PERMISSION_DENIED,
284
+ data: {
285
+ captured: false,
286
+ requestsSent: 0,
287
+ payload,
288
+ message: 'Manual capture was not queued because the selected workspace is outside the current CLI authorization allowlist.',
289
+ },
290
+ };
291
+ }
292
+ const existingItem = listQueueItems(options.baseDir).find((item) => ledger.deliveryIds.includes(item.digestId) &&
293
+ item.captureTrigger === 'manual' && item.authorizationId === creds.authorizationId && item.consentRevision === prefs.consent.revision &&
294
+ item.workspaceId === workspaceId && !['delivered', 'cancelled', 'failed'].includes(item.status));
295
+ const item = (ledger.lastCapturedSequence ?? 0) >= (ledger.lastMeaningfulSequence ?? ledger.eventSequence)
296
+ ? existingItem
297
+ : await queueSessionCapture({
298
+ sessionKey: ledger.sessionKey,
299
+ capturedThroughSequence: ledger.lastMeaningfulSequence ?? ledger.eventSequence,
300
+ baseDir: options.baseDir,
301
+ item: {
302
+ digestId: payload.clientDigestId || crypto.randomUUID(),
303
+ workspaceId,
304
+ captureTrigger: 'manual',
305
+ policyVersion: prefs.consent.policyVersion,
306
+ digestText: serializeDigestPayload(payload),
307
+ authorizationId: creds.authorizationId,
308
+ consentRevision: prefs.consent.revision ?? 0,
309
+ },
310
+ });
311
+ if (!item)
312
+ return { exitCode: CLI_EXIT_CODES.SUCCESS, data: { captured: false, requestsSent: 0, message: 'This session slice has already been queued or delivered.' } };
313
+ const flushed = await flushCaptureQueue({
314
+ apiClient,
315
+ baseDir: options?.baseDir,
316
+ includeManual: true,
317
+ credentials: creds,
318
+ digestId: item.digestId,
319
+ });
320
+ return {
321
+ exitCode: flushed.sent > 0 ? CLI_EXIT_CODES.SUCCESS : CLI_EXIT_CODES.NETWORK_ERROR,
322
+ data: {
323
+ captured: flushed.sent > 0,
324
+ requestsSent: flushed.sent,
325
+ failed: flushed.failed,
326
+ unknown: flushed.unknown,
327
+ payload: JSON.parse(item.digestText),
328
+ message: flushed.sent > 0
329
+ ? 'Manual capture delivered.'
330
+ : 'Manual capture queued but was not accepted. Check `brainmcp capture --status` and doctor.',
331
+ },
332
+ };
333
+ }
334
+ export function capturePurgeLocal(options) {
335
+ const preview = previewCapturePurge(options?.baseDir);
336
+ const removed = purgeCaptureLocalState(options?.baseDir);
337
+ return {
338
+ exitCode: CLI_EXIT_CODES.SUCCESS,
339
+ data: {
340
+ preview,
341
+ removed,
342
+ message: 'BrainMCP-owned local queue, session-ledger, and orientation-cache files purged. Credentials, preferences, and host configuration were preserved.',
343
+ },
344
+ };
345
+ }
346
+ export function capturePurgePreview(options) {
347
+ return previewCapturePurge(options?.baseDir);
348
+ }
349
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type ClientId, type Scope } from '../lib/config.js';
2
+ import type { CredentialStore } from '../lib/credentials.js';
3
+ import type { OAuthClient } from '../lib/oauth-client.js';
4
+ import type { ApiClient } from '../lib/api-client.js';
5
+ export declare const HELP: string;
6
+ export interface ParsedCliArgs {
7
+ command?: string;
8
+ client?: ClientId;
9
+ workspace?: string;
10
+ scope?: Scope;
11
+ root?: string;
12
+ yes: boolean;
13
+ all: boolean;
14
+ captureDigests: boolean;
15
+ force: boolean;
16
+ json: boolean;
17
+ noHooks: boolean;
18
+ writeBackNudge: boolean;
19
+ enable: boolean;
20
+ disable: boolean;
21
+ status: boolean;
22
+ dryRun: boolean;
23
+ purge: boolean;
24
+ includePrompts: boolean;
25
+ now: boolean;
26
+ allowFileCredentials: boolean;
27
+ serviceTokenStdin: boolean;
28
+ storeServiceToken: boolean;
29
+ }
30
+ export declare function parseCliArgs(args: string[]): ParsedCliArgs;
31
+ export declare function defaultConfirm(message: string): Promise<boolean>;
32
+ export interface DispatchContext {
33
+ cwd?: string;
34
+ /** Test/runtime override for ~/.brainmcp; never derived from the project root. */
35
+ baseDir?: string;
36
+ output?: (msg: string) => void;
37
+ confirm?: (msg: string) => Promise<boolean>;
38
+ openBrowser?: (url: string) => Promise<boolean>;
39
+ store?: CredentialStore;
40
+ oauthClient?: OAuthClient;
41
+ apiClient?: ApiClient;
42
+ }
43
+ export declare function dispatch(rawArgs: string[], context?: DispatchContext): Promise<number>;