humanish 0.95.0 → 0.96.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 (88) hide show
  1. package/README.md +4 -2
  2. package/dist/comms-agentmail.d.ts +25 -0
  3. package/dist/comms-agentmail.js +418 -0
  4. package/dist/comms-agentmail.js.map +1 -0
  5. package/dist/comms-connections.d.ts +4 -2
  6. package/dist/comms-connections.js +3 -3
  7. package/dist/comms-connections.js.map +1 -1
  8. package/dist/comms-lease-store.d.ts +90 -0
  9. package/dist/comms-lease-store.js +489 -0
  10. package/dist/comms-lease-store.js.map +1 -0
  11. package/dist/comms-receiving-evidence.d.ts +46 -0
  12. package/dist/comms-receiving-evidence.js +35 -0
  13. package/dist/comms-receiving-evidence.js.map +1 -0
  14. package/dist/comms-receiving-inbox.d.ts +16 -0
  15. package/dist/comms-receiving-inbox.js +410 -0
  16. package/dist/comms-receiving-inbox.js.map +1 -0
  17. package/dist/comms-receiving-runtime.d.ts +25 -0
  18. package/dist/comms-receiving-runtime.js +45 -0
  19. package/dist/comms-receiving-runtime.js.map +1 -0
  20. package/dist/comms-receiving-types.d.ts +98 -0
  21. package/dist/comms-receiving-types.js +2 -0
  22. package/dist/comms-receiving-types.js.map +1 -0
  23. package/dist/comms-receiving.d.ts +58 -0
  24. package/dist/comms-receiving.js +554 -0
  25. package/dist/comms-receiving.js.map +1 -0
  26. package/dist/comms-setup.d.ts +40 -0
  27. package/dist/comms-setup.js +121 -0
  28. package/dist/comms-setup.js.map +1 -0
  29. package/dist/concurrent-shared-world-lab.js +662 -624
  30. package/dist/concurrent-shared-world-lab.js.map +1 -1
  31. package/dist/cua-actor-lab.d.ts +6 -1
  32. package/dist/cua-actor-lab.js +149 -52
  33. package/dist/cua-actor-lab.js.map +1 -1
  34. package/dist/doctor-lab.js +11 -0
  35. package/dist/doctor-lab.js.map +1 -1
  36. package/dist/e2b-terminal-lab.js +3 -0
  37. package/dist/e2b-terminal-lab.js.map +1 -1
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/lab-config.d.ts +20 -3
  42. package/dist/lab-config.js +59 -6
  43. package/dist/lab-config.js.map +1 -1
  44. package/dist/lab-engine.js +8 -3
  45. package/dist/lab-engine.js.map +1 -1
  46. package/dist/lab-summary.d.ts +1 -0
  47. package/dist/lab-summary.js +8 -2
  48. package/dist/lab-summary.js.map +1 -1
  49. package/dist/observer-app.html +1 -1
  50. package/dist/observer-data.js +14 -1
  51. package/dist/observer-data.js.map +1 -1
  52. package/dist/oss-lab.d.ts +1 -1
  53. package/dist/oss-lab.js.map +1 -1
  54. package/dist/oss-meta-lab.d.ts +1 -1
  55. package/dist/oss-meta-lab.js.map +1 -1
  56. package/dist/program.d.ts +2 -0
  57. package/dist/program.js +100 -4
  58. package/dist/program.js.map +1 -1
  59. package/dist/run-narration-secrets.d.ts +5 -0
  60. package/dist/run-narration-secrets.js +68 -0
  61. package/dist/run-narration-secrets.js.map +1 -0
  62. package/dist/run.d.ts +8 -3
  63. package/dist/run.js +26 -4
  64. package/dist/run.js.map +1 -1
  65. package/dist/scripted-browser-lab.js +7 -0
  66. package/dist/scripted-browser-lab.js.map +1 -1
  67. package/dist/shared-world-lab.js +4 -0
  68. package/dist/shared-world-lab.js.map +1 -1
  69. package/dist/study-analysis-engine.js +30 -1
  70. package/dist/study-analysis-engine.js.map +1 -1
  71. package/dist/study-analysis-evidence.js +9 -1
  72. package/dist/study-analysis-evidence.js.map +1 -1
  73. package/dist/tui-app.js +134 -134
  74. package/dist/tui-contract.d.ts +13 -0
  75. package/dist/tui-contract.js.map +1 -1
  76. package/dist/tui-launch.d.ts +2 -0
  77. package/dist/tui-launch.js +9 -1
  78. package/dist/tui-launch.js.map +1 -1
  79. package/docs/architecture/comms-inbox.md +4 -0
  80. package/docs/architecture/real-email-receiving.md +135 -0
  81. package/docs/contracts/run-bundle.md +16 -5
  82. package/docs/contracts/schemas.md +20 -3
  83. package/docs/goals/current.md +5 -5
  84. package/docs/ramp/README.md +13 -5
  85. package/docs/release/0.96.0-real-email-receiving.md +47 -0
  86. package/docs/release/0.96.1-browser-navigation.md +22 -0
  87. package/package.json +2 -1
  88. package/skills/humanish/SKILL.md +33 -13
@@ -0,0 +1,554 @@
1
+ /** Run-scoped real-email receiving. Resource authority and message content stay on the host. */
2
+ import { CommsAuthorityError, CommsLeaseStore, inspectCommsLeaseStore, sameReceivingIdentity, validReceivingIdentity, validReceivingLease } from "./comms-lease-store.js";
3
+ import { COMMS_RECEIVING_SCHEMA } from "./comms-receiving-types.js";
4
+ import { capturedInlineImages } from "./comms-images.js";
5
+ const POLL_MS = 3_000;
6
+ const REQUEST_MS = 15_000;
7
+ const SURFACE_MS = 8_000;
8
+ const EVIDENCE_MS = 5_000;
9
+ // Match the participant renderer's bounded snapshot. Crossing its cap must not poison all later publications.
10
+ const MAX_MESSAGES = 100;
11
+ const MAX_CONTENT_BYTES = 16 * 1024 * 1024;
12
+ const SAFE_PROVIDER_CODES = new Set([
13
+ "agentmail_auth_rejected", "agentmail_rate_limited", "agentmail_unavailable", "agentmail_timeout", "agentmail_cancelled",
14
+ "agentmail_invalid_response", "agentmail_ownership_mismatch", "agentmail_not_found", "agentmail_resource_deleting",
15
+ "agentmail_download_blocked", "agentmail_size_limit", "agentmail_invalid_input", "agentmail_request_limit",
16
+ "agentmail_content_truncated", "agentmail_content_missing", "agentmail_timestamp_missing", "agentmail_attachment_limit",
17
+ "agentmail_attachment_unsupported", "agentmail_attachment_unavailable", "agentmail_message_unavailable",
18
+ "agentmail_pagination_stalled", "agentmail_page_limit"
19
+ ]);
20
+ export class CommsReceivingError extends Error {
21
+ code;
22
+ constructor(code) {
23
+ super("Real email receiving could not complete. Inspect communications coverage and private cleanup status.");
24
+ this.code = code;
25
+ this.name = "CommsReceivingError";
26
+ }
27
+ }
28
+ function errorCode(error, fallback) {
29
+ if (error instanceof CommsReceivingError)
30
+ return error.code;
31
+ if (error instanceof CommsAuthorityError)
32
+ return "comms_authority_unavailable";
33
+ const code = typeof error === "object" && error !== null && "code" in error ? error.code : undefined;
34
+ return typeof code === "string" && SAFE_PROVIDER_CODES.has(code) ? code : fallback;
35
+ }
36
+ function addCode(codes, code) { if (!codes.includes(code) && codes.length < 64)
37
+ codes.push(code); }
38
+ function providerCodes(codes, values) {
39
+ for (const value of values)
40
+ addCode(codes, SAFE_PROVIDER_CODES.has(value) ? value : "provider_coverage_limited");
41
+ }
42
+ function now() { return new Date().toISOString(); }
43
+ function providerTime(value) {
44
+ if (!value || !/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d{1,9})?(?:Z|[+-]\d\d:\d\d)$/.test(value))
45
+ return undefined;
46
+ const time = Date.parse(value);
47
+ return Number.isFinite(time) ? new Date(time).toISOString() : undefined;
48
+ }
49
+ function contentBytes(message) {
50
+ return Buffer.byteLength(message.from) + Buffer.byteLength(message.text) + Buffer.byteLength(message.html ?? "")
51
+ + Buffer.byteLength(message.subject ?? "") + message.inlineImages.reduce((sum, image) => sum + Buffer.byteLength(JSON.stringify(image)), 0);
52
+ }
53
+ /** Provider IDs deduplicate observations, not successful hydration. A later fetch may restore missing content. */
54
+ function reconcileMessage(previous, next) {
55
+ const prefer = (oldValue, newValue) => {
56
+ if (!newValue)
57
+ return oldValue;
58
+ // Received mail is immutable: a retry may fill/truncate a representation, not revise its meaning.
59
+ return !oldValue || newValue.length > oldValue.length ? newValue : oldValue;
60
+ };
61
+ const images = new Map(previous.inlineImages.map(image => [image.contentId, image]));
62
+ for (const image of next.inlineImages)
63
+ if (!images.has(image.contentId))
64
+ images.set(image.contentId, image);
65
+ const html = prefer(previous.html, next.html);
66
+ const subject = previous.subject || next.subject;
67
+ const timestamp = previous.providerTimestamp ?? next.providerTimestamp;
68
+ return { channel: "email", id: previous.id, from: previous.from || next.from,
69
+ text: prefer(previous.text, next.text) ?? "", ...(html === undefined ? {} : { html }),
70
+ ...(subject === undefined ? {} : { subject }), ...(timestamp === undefined ? {} : { providerTimestamp: timestamp }),
71
+ inlineImages: capturedInlineImages([...images.values()]), limitations: next.limitations };
72
+ }
73
+ function visibleContent(message) {
74
+ return JSON.stringify([message.from, message.subject, message.text, message.html, message.inlineImages]);
75
+ }
76
+ /** Deadlines bound even a broken injected dependency; cancellation reaches cooperative I/O. */
77
+ function bounded(operation, timeoutMs, signal) {
78
+ return new Promise((resolve, reject) => {
79
+ const controller = new AbortController();
80
+ let settled = false;
81
+ const finish = (error, value) => {
82
+ if (settled)
83
+ return;
84
+ settled = true;
85
+ clearTimeout(timer);
86
+ signal?.removeEventListener("abort", abort);
87
+ if (error !== undefined)
88
+ reject(error);
89
+ else
90
+ resolve(value);
91
+ };
92
+ const abort = () => { controller.abort(); finish(new CommsReceivingError("comms_cancelled")); };
93
+ const timer = setTimeout(() => { controller.abort(); finish(new CommsReceivingError("comms_deadline_exceeded")); }, timeoutMs);
94
+ if (signal?.aborted) {
95
+ abort();
96
+ return;
97
+ }
98
+ signal?.addEventListener("abort", abort, { once: true });
99
+ // Give cooperative dependencies time to return retained partial results before our hard
100
+ // cancellation. Equal timers make the earlier host timer discard the adapter's partial batch.
101
+ const cooperativeTimeout = Math.max(1, timeoutMs - Math.min(500, Math.floor(timeoutMs / 10)));
102
+ Promise.resolve().then(() => operation({ signal: controller.signal, timeoutMs: cooperativeTimeout })).then(value => finish(undefined, value), error => finish(error));
103
+ });
104
+ }
105
+ class ReceivingRun {
106
+ options;
107
+ store;
108
+ participants = new Map();
109
+ evidence;
110
+ evidenceQueue = Promise.resolve();
111
+ pendingEvidence;
112
+ finishPromise;
113
+ onAbort = () => { void this.finish().catch(() => undefined); };
114
+ constructor(options, store) {
115
+ this.options = options;
116
+ this.store = store;
117
+ this.evidence = { schema: COMMS_RECEIVING_SCHEMA, channel: "email", provider: "agentmail", publication: "restricted-real-communications",
118
+ state: "acquiring", browserConfinement: "mail-surface-only", participants: [],
119
+ limitations: ["delivery_after_observation_end_unknown", "participant_read_not_inferred_from_publication"] };
120
+ for (const record of store.snapshot().leases) {
121
+ const evidence = { participantId: record.participantId, leaseId: record.leaseId,
122
+ acquisition: "pending", cleanup: "pending", observed: 0, published: 0, linkCount: 0, codeCount: 0,
123
+ blockedAssetCount: 0, blockedLinkCount: 0, messages: [], limitations: [] };
124
+ this.evidence.participants.push(evidence);
125
+ this.participants.set(record.participantId, { record, evidence, messages: new Map(), contentBytes: 0, revision: 0, allowedOrigins: [], finished: false });
126
+ }
127
+ }
128
+ snapshot() { return structuredClone(this.evidence); }
129
+ participant(id) {
130
+ const participant = this.participants.get(id);
131
+ if (!participant)
132
+ throw new CommsReceivingError("comms_participant_unknown");
133
+ return participant;
134
+ }
135
+ async persist() {
136
+ const operation = this.evidenceQueue.then(async () => {
137
+ // A timed-out callback may still complete. Never let a later write race its older snapshot.
138
+ if (this.pendingEvidence)
139
+ return false;
140
+ try {
141
+ const pending = Promise.resolve().then(() => this.options.writeEvidence(this.snapshot()));
142
+ this.pendingEvidence = pending;
143
+ void pending.then(() => { if (this.pendingEvidence === pending)
144
+ delete this.pendingEvidence; }, () => { if (this.pendingEvidence === pending)
145
+ delete this.pendingEvidence; });
146
+ await bounded(() => pending, EVIDENCE_MS);
147
+ return true;
148
+ }
149
+ catch {
150
+ addCode(this.evidence.limitations, "evidence_write_failed");
151
+ return false;
152
+ }
153
+ });
154
+ this.evidenceQueue = operation.catch(() => undefined);
155
+ return operation;
156
+ }
157
+ async acquire() {
158
+ try {
159
+ // Establish the publication restriction before any provider resource or participant content.
160
+ if (!await this.persist())
161
+ throw new CommsReceivingError("evidence_write_failed");
162
+ for (const participant of this.participants.values()) {
163
+ if (this.options.signal?.aborted)
164
+ throw new CommsReceivingError("comms_cancelled");
165
+ await this.store.setState(participant.record.participantId, "intent");
166
+ participant.record.state = "intent";
167
+ const lease = await bounded(context => this.options.adapter.acquire(participant.record.clientId, context), REQUEST_MS, this.options.signal);
168
+ if (!validReceivingLease(lease, participant.record.clientId))
169
+ throw new CommsReceivingError("comms_ownership_mismatch");
170
+ // Never release an unexpected duplicate under a second client's authority.
171
+ if ([...this.participants.values()].some(other => other !== participant && other.lease?.resourceId === lease.resourceId)) {
172
+ throw new CommsReceivingError("comms_ownership_mismatch");
173
+ }
174
+ participant.lease = structuredClone(lease);
175
+ await this.store.bind(participant.record.participantId, lease);
176
+ participant.record.state = "active";
177
+ this.options.registerSecrets([lease.address]);
178
+ if ([...this.participants.values()].some(other => other !== participant && other.lease?.address.toLowerCase() === lease.address.toLowerCase())) {
179
+ throw new CommsReceivingError("comms_duplicate_address");
180
+ }
181
+ participant.evidence.acquisition = "active";
182
+ if (!await this.persist())
183
+ throw new CommsReceivingError("evidence_write_failed");
184
+ }
185
+ if (this.options.signal?.aborted)
186
+ throw new CommsReceivingError("comms_cancelled");
187
+ this.evidence.state = "running";
188
+ if (!await this.persist())
189
+ throw new CommsReceivingError("evidence_write_failed");
190
+ this.options.signal?.addEventListener("abort", this.onAbort, { once: true });
191
+ }
192
+ catch (error) {
193
+ const code = errorCode(error, "comms_acquisition_failed");
194
+ addCode(this.evidence.limitations, code);
195
+ for (const participant of this.participants.values()) {
196
+ if (participant.evidence.acquisition === "pending") {
197
+ participant.evidence.acquisition = "failed";
198
+ addCode(participant.evidence.limitations, code);
199
+ }
200
+ }
201
+ await this.finish();
202
+ throw new CommsReceivingError(code);
203
+ }
204
+ }
205
+ address(participantId) {
206
+ const participant = this.participant(participantId);
207
+ if (this.evidence.state !== "running" || !participant.lease || participant.finished || participant.finishing) {
208
+ throw new CommsReceivingError("comms_participant_inactive");
209
+ }
210
+ return participant.lease.address;
211
+ }
212
+ remember(participant, message) {
213
+ if (!message.providerMessageId)
214
+ return;
215
+ const previous = participant.messages.get(message.providerMessageId);
216
+ providerCodes(participant.evidence.limitations, message.limitations);
217
+ const timestamp = providerTime(message.providerTimestamp);
218
+ if (message.providerTimestamp && !timestamp)
219
+ addCode(participant.evidence.limitations, "provider_timestamp_invalid");
220
+ const id = previous?.id ?? `message-${String(participant.messages.size + 1).padStart(6, "0")}`;
221
+ const { providerMessageId: _privateId, ...content } = message;
222
+ const current = previous ? reconcileMessage(previous, { ...content, id }) : { ...content, id };
223
+ const size = contentBytes(current);
224
+ const previousSize = previous ? contentBytes(previous) : 0;
225
+ if ((!previous && participant.messages.size >= MAX_MESSAGES) || participant.contentBytes - previousSize + size > MAX_CONTENT_BYTES) {
226
+ addCode(participant.evidence.limitations, "observation_memory_limit");
227
+ return;
228
+ }
229
+ participant.messages.set(message.providerMessageId, structuredClone(current));
230
+ participant.contentBytes += size - previousSize;
231
+ const contentChanged = !previous || visibleContent(previous) !== visibleContent(current);
232
+ if (contentChanged)
233
+ participant.revision += 1;
234
+ if (previous) {
235
+ const observation = participant.evidence.messages.find(item => item.id === id);
236
+ if (timestamp && observation.providerTimestamp === undefined)
237
+ observation.providerTimestamp = timestamp;
238
+ if (observation.publishedAt && contentChanged) {
239
+ // publishedAt is the first publication, not a claim that a subsequently enriched version was seen.
240
+ addCode(participant.evidence.limitations, "message_content_updated_after_publication");
241
+ }
242
+ }
243
+ else
244
+ participant.evidence.messages.push({ id, firstObservedAt: now(), ...(timestamp ? { providerTimestamp: timestamp } : {}) });
245
+ participant.evidence.observed = participant.messages.size;
246
+ }
247
+ async publish(participant) {
248
+ if (!participant.surface || !participant.lease)
249
+ return false;
250
+ // Polling reconciles provider coverage, but an unchanged visible snapshot needs no desktop I/O.
251
+ // Advance only after acknowledged publication so failures and later hydration remain retryable.
252
+ if (participant.publishedRevision === participant.revision)
253
+ return true;
254
+ if (participant.pendingPublication) {
255
+ addCode(participant.evidence.limitations, "surface_publication_pending");
256
+ return false;
257
+ }
258
+ try {
259
+ const revision = participant.revision;
260
+ const rendered = this.options.render({ address: participant.lease.address, messages: [...participant.messages.values()],
261
+ allowedOrigins: participant.allowedOrigins, ...(participant.originMap ? { originMap: participant.originMap } : {}) });
262
+ this.options.registerSecrets(rendered.secrets);
263
+ participant.evidence.linkCount = rendered.linkCount;
264
+ participant.evidence.codeCount = rendered.codeCount;
265
+ participant.evidence.blockedAssetCount = rendered.blockedAssetCount;
266
+ participant.evidence.blockedLinkCount = rendered.blockedLinkCount;
267
+ if (rendered.blockedAssetCount > 0)
268
+ addCode(participant.evidence.limitations, "remote_or_unsafe_assets_blocked");
269
+ if (rendered.blockedLinkCount > 0)
270
+ addCode(participant.evidence.limitations, "out_of_scope_links_blocked");
271
+ const pending = Promise.resolve().then(() => participant.surface.publish(rendered.files));
272
+ participant.pendingPublication = pending;
273
+ void pending.then(() => { if (participant.pendingPublication === pending)
274
+ delete participant.pendingPublication; }, () => { if (participant.pendingPublication === pending)
275
+ delete participant.pendingPublication; });
276
+ await bounded(() => pending, SURFACE_MS);
277
+ participant.publishedRevision = revision;
278
+ const publishedAt = now();
279
+ for (const message of participant.evidence.messages)
280
+ message.publishedAt ??= publishedAt;
281
+ participant.evidence.published = participant.evidence.messages.filter(message => message.publishedAt !== undefined).length;
282
+ return true;
283
+ }
284
+ catch {
285
+ addCode(participant.evidence.limitations, "surface_publication_failed");
286
+ return false;
287
+ }
288
+ }
289
+ async poll(participant, final = false) {
290
+ if (!participant.lease || (!final && (participant.finishing || participant.finished)))
291
+ return;
292
+ const controller = new AbortController();
293
+ participant.readAbort = controller;
294
+ try {
295
+ await this.store.assertOwnership();
296
+ const batch = await bounded(context => this.options.adapter.read(structuredClone(participant.lease), context), REQUEST_MS, controller.signal);
297
+ for (const message of batch.messages)
298
+ this.remember(participant, message);
299
+ providerCodes(participant.evidence.limitations, batch.limitations);
300
+ if (!batch.complete)
301
+ addCode(participant.evidence.limitations, "provider_coverage_limited");
302
+ }
303
+ catch (error) {
304
+ // A final bounded reconciliation follows an intentional in-flight cancellation.
305
+ if (!(participant.finishing && !final && controller.signal.aborted))
306
+ addCode(participant.evidence.limitations, errorCode(error, "mail_poll_failed"));
307
+ }
308
+ finally {
309
+ delete participant.readAbort;
310
+ }
311
+ // Retained messages are retried even if this provider read failed or no longer lists them.
312
+ await this.persist();
313
+ if (participant.surface)
314
+ await this.publish(participant);
315
+ await this.persist();
316
+ }
317
+ schedule(participant) {
318
+ if (participant.finished || participant.finishing || this.finishPromise)
319
+ return;
320
+ participant.timer = setTimeout(() => {
321
+ participant.task = this.poll(participant).finally(() => { delete participant.task; this.schedule(participant); });
322
+ }, POLL_MS);
323
+ participant.timer.unref();
324
+ }
325
+ async attach(participantId, options) {
326
+ const participant = this.participant(participantId);
327
+ if (this.evidence.state !== "running" || participant.surface || participant.finishing || participant.finished) {
328
+ try {
329
+ await bounded(() => options.surface.stop(), SURFACE_MS);
330
+ }
331
+ catch { /* The caller still owns the desktop. */ }
332
+ throw new CommsReceivingError("comms_participant_inactive");
333
+ }
334
+ participant.surface = options.surface;
335
+ participant.allowedOrigins = [...options.allowedOrigins];
336
+ if (options.originMap)
337
+ participant.originMap = structuredClone(options.originMap);
338
+ participant.task = (async () => {
339
+ if (!await this.publish(participant))
340
+ throw new CommsReceivingError("surface_publication_failed");
341
+ await this.persist();
342
+ await this.poll(participant);
343
+ })();
344
+ try {
345
+ await participant.task;
346
+ }
347
+ finally {
348
+ delete participant.task;
349
+ this.schedule(participant);
350
+ }
351
+ }
352
+ async release(participant) {
353
+ if (!participant.lease) {
354
+ if (participant.record.state === "planned") {
355
+ await this.store.setState(participant.record.participantId, "not-created");
356
+ participant.evidence.cleanup = "absent";
357
+ }
358
+ else {
359
+ await this.store.setState(participant.record.participantId, "unresolved");
360
+ participant.evidence.cleanup = "unresolved";
361
+ addCode(participant.evidence.limitations, "acquisition_outcome_unknown");
362
+ }
363
+ return;
364
+ }
365
+ await this.store.assertOwnership();
366
+ if (!this.store.snapshot().leases.find(item => item.participantId === participant.record.participantId)?.lease) {
367
+ await this.store.bind(participant.record.participantId, participant.lease);
368
+ }
369
+ await this.store.setState(participant.record.participantId, "closing");
370
+ const status = await releaseOwned(this.options.adapter, participant.lease, this.store);
371
+ participant.evidence.cleanup = status;
372
+ await this.store.setState(participant.record.participantId, status);
373
+ if (status === "deleting")
374
+ addCode(participant.evidence.limitations, "cleanup_absence_unconfirmed");
375
+ }
376
+ finishParticipant(participantId) {
377
+ const participant = this.participant(participantId);
378
+ if (participant.finishing)
379
+ return participant.finishing;
380
+ participant.finishing = Promise.resolve().then(async () => {
381
+ if (participant.timer)
382
+ clearTimeout(participant.timer);
383
+ participant.readAbort?.abort();
384
+ try {
385
+ await participant.task;
386
+ }
387
+ catch { /* Final reconciliation retries publication. */ }
388
+ try {
389
+ await this.store.setState(participantId, participant.lease ? "closing" : participant.record.state);
390
+ }
391
+ catch {
392
+ addCode(participant.evidence.limitations, "comms_authority_unavailable");
393
+ }
394
+ if (participant.lease && this.evidence.state === "running")
395
+ await this.poll(participant, true);
396
+ if (!participant.surface && participant.lease)
397
+ addCode(participant.evidence.limitations, "participant_surface_not_attached");
398
+ const evidenceSaved = await this.persist();
399
+ if (participant.surface) {
400
+ try {
401
+ await bounded(() => participant.surface.stop(), SURFACE_MS);
402
+ }
403
+ catch {
404
+ addCode(participant.evidence.limitations, "surface_stop_unconfirmed");
405
+ }
406
+ }
407
+ try {
408
+ if (!evidenceSaved && participant.lease) {
409
+ // Preserve the only retrievable copy when observation evidence could not be committed.
410
+ participant.evidence.cleanup = "unresolved";
411
+ addCode(participant.evidence.limitations, "cleanup_retained_for_evidence");
412
+ await this.store.setState(participantId, "unresolved");
413
+ }
414
+ else
415
+ await this.release(participant);
416
+ }
417
+ catch (error) {
418
+ participant.evidence.cleanup = "unresolved";
419
+ addCode(participant.evidence.limitations, errorCode(error, "cleanup_failed"));
420
+ try {
421
+ await this.store.setState(participantId, "unresolved");
422
+ }
423
+ catch {
424
+ addCode(participant.evidence.limitations, "comms_authority_unavailable");
425
+ }
426
+ }
427
+ participant.finished = true;
428
+ participant.messages.clear();
429
+ await this.persist();
430
+ });
431
+ return participant.finishing;
432
+ }
433
+ finish() {
434
+ this.finishPromise ??= (async () => {
435
+ this.options.signal?.removeEventListener("abort", this.onAbort);
436
+ await Promise.all([...this.participants.keys()].map(id => this.finishParticipant(id)));
437
+ this.evidence.state = "finished";
438
+ await this.persist();
439
+ try {
440
+ await this.store.close();
441
+ }
442
+ catch {
443
+ addCode(this.evidence.limitations, "comms_authority_unavailable");
444
+ await this.persist();
445
+ }
446
+ return this.snapshot();
447
+ })();
448
+ return this.finishPromise;
449
+ }
450
+ }
451
+ async function releaseOwned(adapter, lease, store) {
452
+ // Each call has an operation deadline; the small retry count bounds asynchronous deletion.
453
+ for (let attempt = 0; attempt < 3; attempt += 1) {
454
+ await store.assertOwnership();
455
+ const authority = store.snapshot().leases.find(item => item.clientId === lease.clientId);
456
+ if (!authority || authority.ownership !== "fresh" || authority.lease?.resourceId !== lease.resourceId || authority.lease.address !== lease.address) {
457
+ throw new CommsReceivingError("comms_ownership_mismatch");
458
+ }
459
+ const result = await bounded(context => adapter.release(structuredClone(lease), context), REQUEST_MS);
460
+ if (result.status === "absent")
461
+ return "absent";
462
+ if (result.status !== "deleting")
463
+ throw new CommsReceivingError("cleanup_invalid_result");
464
+ if (attempt < 2)
465
+ await new Promise(resolve => setTimeout(resolve, 250));
466
+ }
467
+ return "deleting";
468
+ }
469
+ export async function startCommsReceiving(options) {
470
+ try {
471
+ if (options.adapter.provider !== "agentmail")
472
+ throw new CommsReceivingError("comms_provider_unsupported");
473
+ const identity = await bounded(context => options.adapter.authenticate(context), REQUEST_MS, options.signal);
474
+ if (!validReceivingIdentity(identity))
475
+ throw new CommsReceivingError("comms_identity_invalid");
476
+ // Fresh-inbox creation is supported only for the organization-scoped route advertised by setup.
477
+ if (identity.scopeType !== "organization")
478
+ throw new CommsReceivingError("comms_scope_unsupported");
479
+ const store = await CommsLeaseStore.create({ cwd: options.cwd, runId: options.runId, connectionName: options.connectionName,
480
+ apiKeyEnv: options.apiKeyEnv, identity, participants: options.participants, ...(options.stateDir ? { stateDir: options.stateDir } : {}) });
481
+ const run = new ReceivingRun(options, store);
482
+ await run.acquire();
483
+ return run;
484
+ }
485
+ catch (error) {
486
+ throw new CommsReceivingError(errorCode(error, "comms_start_failed"));
487
+ }
488
+ }
489
+ /** Side-effect-free local inspection: does not authenticate, enumerate provider resources or replay creation. */
490
+ export async function inspectCommsRecovery(options) {
491
+ return inspectCommsLeaseStore(options);
492
+ }
493
+ /** Explicit mutation: may replay an uncertain original create, then immediately dispose that exact resource. */
494
+ export async function recoverCommsReceiving(options) {
495
+ let store;
496
+ let recovered = 0;
497
+ let unresolved = 0;
498
+ let result;
499
+ try {
500
+ store = await CommsLeaseStore.recover(options);
501
+ const identity = await bounded(context => options.adapter.authenticate(context), REQUEST_MS);
502
+ if (!validReceivingIdentity(identity) || !sameReceivingIdentity(store.snapshot().identity, identity))
503
+ throw new CommsAuthorityError("binding_mismatch");
504
+ for (const record of store.snapshot().leases) {
505
+ if (record.state === "absent" || record.state === "not-created")
506
+ continue;
507
+ try {
508
+ if (record.state === "planned") {
509
+ await store.setState(record.participantId, "not-created");
510
+ continue;
511
+ }
512
+ await store.assertOwnership();
513
+ // Use the recorded client ID even if no resource ID was received before the interruption.
514
+ const lease = record.lease ?? await bounded(context => options.adapter.acquire(record.clientId, context), REQUEST_MS);
515
+ if (!validReceivingLease(lease, record.clientId))
516
+ throw new CommsAuthorityError("binding_mismatch");
517
+ if (!record.lease)
518
+ await store.bind(record.participantId, lease);
519
+ await store.setState(record.participantId, "closing");
520
+ const status = await releaseOwned(options.adapter, lease, store);
521
+ await store.setState(record.participantId, status);
522
+ if (status === "absent")
523
+ recovered += 1;
524
+ else
525
+ unresolved += 1;
526
+ }
527
+ catch {
528
+ unresolved += 1;
529
+ try {
530
+ await store.setState(record.participantId, "unresolved");
531
+ }
532
+ catch { /* Original durable intent remains. */ }
533
+ }
534
+ }
535
+ result = { ok: unresolved === 0, recovered, unresolved, message: unresolved === 0
536
+ ? "Owned inbox cleanup is confirmed absent. This does not establish permanent provider data erasure."
537
+ : "Some owned inbox cleanup is unresolved. Retry explicit recovery with the same connection; no replacement identities were requested." };
538
+ }
539
+ catch (error) {
540
+ unresolved = store?.snapshot().leases.filter(item => item.state !== "absent" && item.state !== "not-created").length ?? 0;
541
+ result = { ok: false, recovered, unresolved, message: error instanceof CommsAuthorityError ? error.message
542
+ : "Communications recovery could not establish provider access. No unverified resource was deleted." };
543
+ }
544
+ if (store) {
545
+ try {
546
+ await store.close();
547
+ }
548
+ catch {
549
+ result = { ...result, ok: false, message: "Communications authority could not be finalized. Inspect local recovery status before retrying." };
550
+ }
551
+ }
552
+ return result;
553
+ }
554
+ //# sourceMappingURL=comms-receiving.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comms-receiving.js","sourceRoot":"","sources":["../src/comms-receiving.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ReceivingAdapter } from "./comms-receiving-types.js";
2
+ export interface CommsCheckResult {
3
+ schema: "humanish.comms-check.v1";
4
+ ok: boolean;
5
+ connection: string;
6
+ online: boolean;
7
+ credentialPresent: boolean;
8
+ authenticated: boolean | null;
9
+ ready: boolean | null;
10
+ permissions: "unknown";
11
+ capacity: "unknown";
12
+ checkedAt: string | null;
13
+ code: string;
14
+ message: string;
15
+ }
16
+ export declare function checkCommsConnection(args: {
17
+ cwd: string;
18
+ connection?: string;
19
+ env: NodeJS.ProcessEnv;
20
+ online?: boolean;
21
+ makeAdapter?: (apiKey: string) => ReceivingAdapter;
22
+ }): Promise<CommsCheckResult>;
23
+ export declare function receivingRequiredKey(cwd: string, connectionName: string): Promise<string | null>;
24
+ export interface CommsConfigureResult {
25
+ schema: "humanish.comms-configure.v1";
26
+ ok: boolean;
27
+ applied: boolean;
28
+ message: string;
29
+ path?: string;
30
+ planToken?: string;
31
+ connection?: string;
32
+ }
33
+ /** Save a local copy, never rewrite a committed manifest or silently shadow it by handle. */
34
+ export declare function configureCommsLab(args: {
35
+ cwd: string;
36
+ lab: string;
37
+ connection: string;
38
+ apply?: boolean;
39
+ planToken?: string;
40
+ }): Promise<CommsConfigureResult>;