@animalabs/agent-framework 0.6.6 → 0.6.8

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 (117) hide show
  1. package/README.md +78 -0
  2. package/dist/src/agent.d.ts +5 -1
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +35 -1
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server.js +0 -0
  7. package/dist/src/api/server.d.ts.map +1 -1
  8. package/dist/src/api/server.js +7 -2
  9. package/dist/src/api/server.js.map +1 -1
  10. package/dist/src/framework.d.ts +91 -3
  11. package/dist/src/framework.d.ts.map +1 -1
  12. package/dist/src/framework.js +988 -82
  13. package/dist/src/framework.js.map +1 -1
  14. package/dist/src/gate/event-gate.d.ts.map +1 -1
  15. package/dist/src/gate/event-gate.js +9 -2
  16. package/dist/src/gate/event-gate.js.map +1 -1
  17. package/dist/src/index.d.ts +4 -0
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +3 -0
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/mcpl/channel-registry.d.ts +3 -1
  22. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  23. package/dist/src/mcpl/channel-registry.js +29 -15
  24. package/dist/src/mcpl/channel-registry.js.map +1 -1
  25. package/dist/src/mcpl/server-connection.d.ts +36 -3
  26. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  27. package/dist/src/mcpl/server-connection.js +142 -28
  28. package/dist/src/mcpl/server-connection.js.map +1 -1
  29. package/dist/src/modules/workspace/index.d.ts +12 -1
  30. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  31. package/dist/src/modules/workspace/index.js +661 -2
  32. package/dist/src/modules/workspace/index.js.map +1 -1
  33. package/dist/src/modules/workspace/types.d.ts +4 -0
  34. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  35. package/dist/src/modules/workspace/types.js.map +1 -1
  36. package/dist/src/recovery/discord-awareness-outbox.d.ts +99 -0
  37. package/dist/src/recovery/discord-awareness-outbox.d.ts.map +1 -0
  38. package/dist/src/recovery/discord-awareness-outbox.js +334 -0
  39. package/dist/src/recovery/discord-awareness-outbox.js.map +1 -0
  40. package/dist/src/recovery/offline-branch.d.ts +45 -0
  41. package/dist/src/recovery/offline-branch.d.ts.map +1 -0
  42. package/dist/src/recovery/offline-branch.js +362 -0
  43. package/dist/src/recovery/offline-branch.js.map +1 -0
  44. package/dist/src/recovery/recover-cli.d.ts +3 -0
  45. package/dist/src/recovery/recover-cli.d.ts.map +1 -0
  46. package/dist/src/recovery/recover-cli.js +129 -0
  47. package/dist/src/recovery/recover-cli.js.map +1 -0
  48. package/dist/src/types/agent.d.ts +10 -0
  49. package/dist/src/types/agent.d.ts.map +1 -1
  50. package/dist/src/types/framework.d.ts +14 -0
  51. package/dist/src/types/framework.d.ts.map +1 -1
  52. package/dist/src/types/module.d.ts +31 -0
  53. package/dist/src/types/module.d.ts.map +1 -1
  54. package/dist/src/types/trace.d.ts +2 -0
  55. package/dist/src/types/trace.d.ts.map +1 -1
  56. package/dist/test/agent-runtime-settings.test.js +200 -93
  57. package/dist/test/agent-runtime-settings.test.js.map +1 -1
  58. package/dist/test/busy-agent-scheduler.test.d.ts +2 -0
  59. package/dist/test/busy-agent-scheduler.test.d.ts.map +1 -0
  60. package/dist/test/busy-agent-scheduler.test.js +62 -0
  61. package/dist/test/busy-agent-scheduler.test.js.map +1 -0
  62. package/dist/test/channel-lifecycle-provenance.test.d.ts +2 -0
  63. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +1 -0
  64. package/dist/test/channel-lifecycle-provenance.test.js +47 -0
  65. package/dist/test/channel-lifecycle-provenance.test.js.map +1 -0
  66. package/dist/test/discord-awareness-outbox.test.d.ts +2 -0
  67. package/dist/test/discord-awareness-outbox.test.d.ts.map +1 -0
  68. package/dist/test/discord-awareness-outbox.test.js +248 -0
  69. package/dist/test/discord-awareness-outbox.test.js.map +1 -0
  70. package/dist/test/maintenance-timer.test.js +100 -0
  71. package/dist/test/maintenance-timer.test.js.map +1 -1
  72. package/dist/test/mcpl-awareness-barrier.test.d.ts +2 -0
  73. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +1 -0
  74. package/dist/test/mcpl-awareness-barrier.test.js +618 -0
  75. package/dist/test/mcpl-awareness-barrier.test.js.map +1 -0
  76. package/dist/test/mcpl-reconnect-reregistration.test.js +22 -3
  77. package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -1
  78. package/dist/test/mcpl-request-timeout.test.js +15 -0
  79. package/dist/test/mcpl-request-timeout.test.js.map +1 -1
  80. package/dist/test/offline-recovery-branch.test.d.ts +2 -0
  81. package/dist/test/offline-recovery-branch.test.d.ts.map +1 -0
  82. package/dist/test/offline-recovery-branch.test.js +226 -0
  83. package/dist/test/offline-recovery-branch.test.js.map +1 -0
  84. package/dist/test/present-while-acting.test.d.ts +3 -2
  85. package/dist/test/present-while-acting.test.d.ts.map +1 -1
  86. package/dist/test/present-while-acting.test.js +31 -3
  87. package/dist/test/present-while-acting.test.js.map +1 -1
  88. package/dist/test/refusal-single-call.test.d.ts +2 -0
  89. package/dist/test/refusal-single-call.test.d.ts.map +1 -0
  90. package/dist/test/refusal-single-call.test.js +177 -0
  91. package/dist/test/refusal-single-call.test.js.map +1 -0
  92. package/dist/test/same-round-think-policy.test.d.ts +2 -0
  93. package/dist/test/same-round-think-policy.test.d.ts.map +1 -0
  94. package/dist/test/same-round-think-policy.test.js +853 -0
  95. package/dist/test/same-round-think-policy.test.js.map +1 -0
  96. package/dist/test/workspace-read-image.test.d.ts +2 -0
  97. package/dist/test/workspace-read-image.test.d.ts.map +1 -0
  98. package/dist/test/workspace-read-image.test.js +518 -0
  99. package/dist/test/workspace-read-image.test.js.map +1 -0
  100. package/dist/tsconfig.tsbuildinfo +1 -1
  101. package/package.json +5 -3
  102. package/src/agent.ts +39 -2
  103. package/src/api/server.ts +8 -2
  104. package/src/framework.ts +1180 -79
  105. package/src/gate/event-gate.ts +15 -3
  106. package/src/index.ts +20 -0
  107. package/src/mcpl/channel-registry.ts +31 -16
  108. package/src/mcpl/server-connection.ts +163 -28
  109. package/src/modules/workspace/index.ts +759 -2
  110. package/src/modules/workspace/types.ts +5 -0
  111. package/src/recovery/discord-awareness-outbox.ts +459 -0
  112. package/src/recovery/offline-branch.ts +510 -0
  113. package/src/recovery/recover-cli.ts +130 -0
  114. package/src/types/agent.ts +14 -0
  115. package/src/types/framework.ts +17 -0
  116. package/src/types/module.ts +33 -0
  117. package/src/types/trace.ts +2 -0
@@ -0,0 +1,334 @@
1
+ import { mkdirSync, readFileSync, renameSync, writeFileSync, } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ export const DEFAULT_DISCORD_AWARENESS_EMOJI = '💤';
5
+ export function defaultDiscordAwarenessOutboxPath(storePath) {
6
+ return join(storePath, 'recovery', 'discord-awareness-outbox.json');
7
+ }
8
+ /** Extract Discord addressing metadata without reading message content. */
9
+ export function extractDiscordAwarenessRefs(messages, forcedServerId) {
10
+ const refs = new Map();
11
+ for (const message of messages) {
12
+ const metadata = message.metadata ?? {};
13
+ const channelId = typeof metadata.channelId === 'string' ? metadata.channelId : '';
14
+ const messageId = typeof metadata.messageId === 'string' ? metadata.messageId : '';
15
+ const metadataServerId = typeof metadata.serverId === 'string' ? metadata.serverId : '';
16
+ const serverId = forcedServerId ?? metadataServerId;
17
+ if (!channelId || !messageId || !serverId)
18
+ continue;
19
+ const isDiscord = serverId.toLowerCase().includes('discord') || channelId.startsWith('discord:');
20
+ if (!isDiscord)
21
+ continue;
22
+ const ref = { serverId, channelId, messageId };
23
+ refs.set(refKey(ref), ref);
24
+ }
25
+ return [...refs.values()];
26
+ }
27
+ /**
28
+ * A branch-independent, durable operation ledger for Discord awareness marks.
29
+ *
30
+ * Completed entries are retained. Reconciliation derives whether their emoji
31
+ * should currently exist from Chronicle branch ancestry, queuing `remove`
32
+ * after switching away from a recovery branch and `add` when returning to it.
33
+ */
34
+ export class DiscordAwarenessOutbox {
35
+ path;
36
+ constructor(path) {
37
+ this.path = path;
38
+ }
39
+ prepare(input) {
40
+ const refs = dedupeRefs(input.refs);
41
+ if (refs.length === 0 && !input.suppressionIntervals?.length)
42
+ return null;
43
+ const document = this.read();
44
+ const batch = {
45
+ id: randomUUID(),
46
+ status: 'prepared',
47
+ agentName: input.agentName,
48
+ sourceBranch: input.sourceBranch,
49
+ targetBranch: input.targetBranch,
50
+ emoji: input.emoji ?? DEFAULT_DISCORD_AWARENESS_EMOJI,
51
+ createdAt: Date.now(),
52
+ refs: refs.map((ref) => ({
53
+ ...ref,
54
+ desired: false,
55
+ markerPresent: false,
56
+ deliveryStatus: 'applied',
57
+ attempts: 0,
58
+ })),
59
+ activationPolicy: input.activationPolicy ?? 'target-branch',
60
+ suppressionIntervals: input.suppressionIntervals?.map((interval) => ({ ...interval })),
61
+ };
62
+ document.batches.push(batch);
63
+ this.write(document);
64
+ return structuredClone(batch);
65
+ }
66
+ /** Activate after Chronicle has safely switched to the target branch. */
67
+ activate(batchId) {
68
+ const document = this.read();
69
+ const batch = document.batches.find((candidate) => candidate.id === batchId);
70
+ if (!batch)
71
+ throw new Error(`Discord awareness outbox batch not found: ${batchId}`);
72
+ batch.status = 'active';
73
+ for (const ref of batch.refs)
74
+ setDesired(ref, true);
75
+ this.write(document);
76
+ }
77
+ /**
78
+ * Reconcile every retained ledger entry against the active branch. A marker
79
+ * is desired when any active batch for the same ref+emoji has a target branch
80
+ * in the active branch's ancestry.
81
+ */
82
+ reconcileForBranch(branchName, branches = []) {
83
+ const document = this.read();
84
+ let activated = 0;
85
+ for (const batch of document.batches) {
86
+ if (batch.status === 'prepared'
87
+ && (batch.activationPolicy ?? 'target-branch') === 'target-branch'
88
+ && isTargetActive(branchName, batch.targetBranch, branches)) {
89
+ batch.status = 'active';
90
+ activated++;
91
+ }
92
+ }
93
+ const desiredKeys = new Set();
94
+ for (const batch of document.batches) {
95
+ if (batch.status !== 'active')
96
+ continue;
97
+ if (!isTargetActive(branchName, batch.targetBranch, branches))
98
+ continue;
99
+ for (const ref of batch.refs)
100
+ desiredKeys.add(markerKey(batch.emoji, ref));
101
+ }
102
+ let queued = 0;
103
+ for (const batch of document.batches) {
104
+ if (batch.status !== 'active')
105
+ continue;
106
+ for (const ref of batch.refs) {
107
+ setDesired(ref, desiredKeys.has(markerKey(batch.emoji, ref)));
108
+ if (ref.deliveryStatus === 'pending')
109
+ queued++;
110
+ }
111
+ }
112
+ this.write(document);
113
+ return { activated, queued };
114
+ }
115
+ /** Backward-compatible startup helper. */
116
+ activatePreparedForBranch(branchName, branches = []) {
117
+ return this.reconcileForBranch(branchName, branches).activated;
118
+ }
119
+ pending(serverId) {
120
+ const operations = [];
121
+ for (const batch of this.read().batches) {
122
+ if (batch.status !== 'active')
123
+ continue;
124
+ for (const ref of batch.refs) {
125
+ if (ref.deliveryStatus !== 'pending')
126
+ continue;
127
+ if (serverId !== undefined && ref.serverId !== serverId)
128
+ continue;
129
+ operations.push({
130
+ batchId: batch.id,
131
+ emoji: batch.emoji,
132
+ action: ref.desired ? 'add' : 'remove',
133
+ ref: { ...ref },
134
+ });
135
+ }
136
+ }
137
+ return operations;
138
+ }
139
+ recordSuccess(batchId, ref, action) {
140
+ const document = this.read();
141
+ const entry = findEntry(document, batchId, ref);
142
+ if (!entry)
143
+ return;
144
+ entry.markerPresent = action === 'add';
145
+ entry.deliveryStatus = entry.markerPresent === entry.desired ? 'applied' : 'pending';
146
+ entry.attempts++;
147
+ entry.lastAction = action;
148
+ entry.lastAttemptAt = Date.now();
149
+ delete entry.lastError;
150
+ this.write(document);
151
+ }
152
+ recordFailure(batchId, ref, action, error, permanent) {
153
+ const document = this.read();
154
+ const entry = findEntry(document, batchId, ref);
155
+ if (!entry)
156
+ return;
157
+ entry.deliveryStatus = permanent ? 'permanent-failure' : 'pending';
158
+ entry.attempts++;
159
+ entry.lastAction = action;
160
+ entry.lastAttemptAt = Date.now();
161
+ entry.lastError = error;
162
+ this.write(document);
163
+ }
164
+ /** Compatibility alias for older callers that only acknowledged adds. */
165
+ acknowledge(batchId, ref) {
166
+ this.recordSuccess(batchId, ref, 'add');
167
+ }
168
+ batches() {
169
+ return structuredClone(this.read().batches);
170
+ }
171
+ preparedSuppressionsForBranch(branchName, branches = []) {
172
+ return structuredClone(this.read().batches.filter((batch) => batch.status === 'prepared'
173
+ && batch.activationPolicy === 'explicit'
174
+ && !!batch.suppressionIntervals?.length
175
+ && isTargetActive(branchName, batch.targetBranch, branches)));
176
+ }
177
+ read() {
178
+ let parsed;
179
+ try {
180
+ parsed = JSON.parse(readFileSync(this.path, 'utf8'));
181
+ }
182
+ catch (error) {
183
+ if (error.code === 'ENOENT') {
184
+ return { version: 2, batches: [] };
185
+ }
186
+ throw new Error(`Could not read Discord awareness outbox ${this.path}: ${error instanceof Error ? error.message : String(error)}`);
187
+ }
188
+ if (isDocumentV2(parsed))
189
+ return parsed;
190
+ if (isDocumentV1(parsed))
191
+ return migrateV1(parsed);
192
+ throw new Error(`Invalid Discord awareness outbox document: ${this.path}`);
193
+ }
194
+ write(document) {
195
+ mkdirSync(dirname(this.path), { recursive: true });
196
+ const temporary = `${this.path}.${process.pid}.${randomUUID()}.tmp`;
197
+ writeFileSync(temporary, `${JSON.stringify(document, null, 2)}\n`, { mode: 0o600 });
198
+ renameSync(temporary, this.path);
199
+ }
200
+ }
201
+ function setDesired(ref, desired) {
202
+ const changed = ref.desired !== desired;
203
+ ref.desired = desired;
204
+ if (ref.markerPresent === desired) {
205
+ ref.deliveryStatus = 'applied';
206
+ return;
207
+ }
208
+ const action = desired ? 'add' : 'remove';
209
+ if (changed || ref.lastAction !== action || ref.deliveryStatus !== 'permanent-failure') {
210
+ ref.deliveryStatus = 'pending';
211
+ }
212
+ }
213
+ function isTargetActive(activeName, targetName, branches) {
214
+ if (activeName === targetName)
215
+ return true;
216
+ const byName = new Map(branches.map((branch) => [branch.name, branch]));
217
+ const byId = new Map(branches.map((branch) => [branch.id, branch]));
218
+ let cursor = byName.get(activeName);
219
+ const visited = new Set();
220
+ while (cursor?.parentId && !visited.has(cursor.id)) {
221
+ visited.add(cursor.id);
222
+ cursor = byId.get(cursor.parentId);
223
+ if (cursor?.name === targetName)
224
+ return true;
225
+ }
226
+ return false;
227
+ }
228
+ function findEntry(document, batchId, ref) {
229
+ return document.batches
230
+ .find((batch) => batch.id === batchId)
231
+ ?.refs.find((candidate) => refKey(candidate) === refKey(ref));
232
+ }
233
+ function dedupeRefs(refs) {
234
+ const deduped = new Map();
235
+ for (const ref of refs) {
236
+ if (!ref.serverId || !ref.channelId || !ref.messageId)
237
+ continue;
238
+ deduped.set(refKey(ref), { ...ref });
239
+ }
240
+ return [...deduped.values()];
241
+ }
242
+ function refKey(ref) {
243
+ return `${ref.serverId}\0${ref.channelId}\0${ref.messageId}`;
244
+ }
245
+ function markerKey(emoji, ref) {
246
+ return `${emoji}\0${refKey(ref)}`;
247
+ }
248
+ function isEntry(value) {
249
+ if (!value || typeof value !== 'object')
250
+ return false;
251
+ const entry = value;
252
+ return typeof entry.serverId === 'string'
253
+ && typeof entry.channelId === 'string'
254
+ && typeof entry.messageId === 'string'
255
+ && typeof entry.desired === 'boolean'
256
+ && typeof entry.markerPresent === 'boolean'
257
+ && (entry.deliveryStatus === 'pending'
258
+ || entry.deliveryStatus === 'applied'
259
+ || entry.deliveryStatus === 'permanent-failure')
260
+ && typeof entry.attempts === 'number'
261
+ && (entry.lastAction === undefined || entry.lastAction === 'add' || entry.lastAction === 'remove')
262
+ && (entry.lastAttemptAt === undefined || typeof entry.lastAttemptAt === 'number')
263
+ && (entry.lastError === undefined || typeof entry.lastError === 'string');
264
+ }
265
+ function isDocumentV2(value) {
266
+ if (!value || typeof value !== 'object')
267
+ return false;
268
+ const document = value;
269
+ if (document.version !== 2 || !Array.isArray(document.batches))
270
+ return false;
271
+ return document.batches.every((batch) => {
272
+ if (!batch || typeof batch !== 'object')
273
+ return false;
274
+ const candidate = batch;
275
+ return typeof candidate.id === 'string'
276
+ && (candidate.status === 'prepared' || candidate.status === 'active')
277
+ && typeof candidate.agentName === 'string'
278
+ && typeof candidate.sourceBranch === 'string'
279
+ && typeof candidate.targetBranch === 'string'
280
+ && typeof candidate.emoji === 'string'
281
+ && typeof candidate.createdAt === 'number'
282
+ && Array.isArray(candidate.refs)
283
+ && (candidate.activationPolicy === undefined
284
+ || candidate.activationPolicy === 'target-branch'
285
+ || candidate.activationPolicy === 'explicit')
286
+ && (candidate.suppressionIntervals === undefined
287
+ || (Array.isArray(candidate.suppressionIntervals)
288
+ && candidate.suppressionIntervals.every((interval) => !!interval
289
+ && typeof interval.fromId === 'string'
290
+ && typeof interval.toId === 'string')))
291
+ && candidate.refs.every(isEntry);
292
+ });
293
+ }
294
+ function isDocumentV1(value) {
295
+ if (!value || typeof value !== 'object')
296
+ return false;
297
+ const document = value;
298
+ if (document.version !== 1 || !Array.isArray(document.batches))
299
+ return false;
300
+ return document.batches.every((batch) => {
301
+ if (!batch || typeof batch !== 'object')
302
+ return false;
303
+ const candidate = batch;
304
+ return typeof candidate.id === 'string'
305
+ && (candidate.status === 'prepared' || candidate.status === 'pending')
306
+ && typeof candidate.agentName === 'string'
307
+ && typeof candidate.sourceBranch === 'string'
308
+ && typeof candidate.targetBranch === 'string'
309
+ && typeof candidate.emoji === 'string'
310
+ && typeof candidate.createdAt === 'number'
311
+ && Array.isArray(candidate.refs)
312
+ && candidate.refs.every((ref) => !!ref
313
+ && typeof ref.serverId === 'string'
314
+ && typeof ref.channelId === 'string'
315
+ && typeof ref.messageId === 'string');
316
+ });
317
+ }
318
+ function migrateV1(document) {
319
+ return {
320
+ version: 2,
321
+ batches: document.batches.map((batch) => ({
322
+ ...batch,
323
+ status: batch.status === 'pending' ? 'active' : 'prepared',
324
+ refs: batch.refs.map((ref) => ({
325
+ ...ref,
326
+ desired: batch.status === 'pending',
327
+ markerPresent: false,
328
+ deliveryStatus: batch.status === 'pending' ? 'pending' : 'applied',
329
+ attempts: 0,
330
+ })),
331
+ })),
332
+ };
333
+ }
334
+ //# sourceMappingURL=discord-awareness-outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-awareness-outbox.js","sourceRoot":"","sources":["../../../src/recovery/discord-awareness-outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type DiscordAwarenessRef } from './discord-awareness-outbox.js';
2
+ export interface OfflineRecoveryBranchOptions {
3
+ storePath: string;
4
+ agentName: string;
5
+ /** Preferred: Discord message that remains as the last visible anchor. */
6
+ messageId?: string;
7
+ /** Exact internal ContextManager message ID that remains as the anchor. */
8
+ contextId?: string;
9
+ /** Backward-compatible alternative: remove the newest N context entries. */
10
+ messages?: number;
11
+ /** Exact Discord messages to suppress on the new branch. */
12
+ suppressMessageIds?: string[];
13
+ /** Inclusive context-order ranges between Discord message endpoints. */
14
+ suppressRanges?: Array<{
15
+ fromMessageId: string;
16
+ toMessageId: string;
17
+ }>;
18
+ branchName?: string;
19
+ /** Defaults to the primary-agent namespace `agents/{agentName}`. */
20
+ namespace?: string;
21
+ /** Use for old message records that do not carry metadata.serverId. */
22
+ discordServerId?: string;
23
+ outboxPath?: string;
24
+ emoji?: string;
25
+ dryRun?: boolean;
26
+ }
27
+ export interface OfflineRecoveryBranchResult {
28
+ dryRun: boolean;
29
+ sourceBranch: string;
30
+ targetBranch: string;
31
+ messagesRemoved: number;
32
+ messagesSuppressed: number;
33
+ discordMarkersQueued: number;
34
+ refs: DiscordAwarenessRef[];
35
+ outboxPath: string;
36
+ }
37
+ /**
38
+ * Create a safe Chronicle branch while the normal agent host is stopped.
39
+ *
40
+ * History is scanned in bounded windows and blobs are not re-inlined. The
41
+ * affected messages are never compiled and their content is never written to
42
+ * the recovery outbox; only Discord addressing metadata leaves Chronicle.
43
+ */
44
+ export declare function createOfflineRecoveryBranch(options: OfflineRecoveryBranchOptions): Promise<OfflineRecoveryBranchResult>;
45
+ //# sourceMappingURL=offline-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-branch.d.ts","sourceRoot":"","sources":["../../../src/recovery/offline-branch.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,wEAAwE;IACxE,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CA6KtC"}