@astrosheep/square 0.4.0 → 0.4.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 (187) hide show
  1. package/dist/artifact.d.ts +1 -3
  2. package/dist/artifact.js +12 -36
  3. package/dist/attention-presentation.d.ts +2 -22
  4. package/dist/attention-presentation.js +9 -12
  5. package/dist/boundary-presentation.d.ts +3 -14
  6. package/dist/boundary-presentation.js +29 -104
  7. package/dist/card-presentation.d.ts +1 -0
  8. package/dist/card-presentation.js +2 -0
  9. package/dist/catch-decisions.js +1 -7
  10. package/dist/claude-delivery.d.ts +13 -8
  11. package/dist/claude-delivery.js +40 -93
  12. package/dist/claude-mcp-context.js +2 -2
  13. package/dist/claude-mod.js +28 -140
  14. package/dist/claude-transport.d.ts +3 -3
  15. package/dist/claude-transport.js +20 -44
  16. package/dist/cli/context.js +7 -9
  17. package/dist/cli/observation-commands.d.ts +2 -0
  18. package/dist/cli/observation-commands.js +12 -2
  19. package/dist/cli/registry.js +3 -1
  20. package/dist/codex-address.d.ts +2 -2
  21. package/dist/codex-boundary-state.d.ts +1 -5
  22. package/dist/codex-boundary-state.js +0 -4
  23. package/dist/codex-hook.d.ts +7 -10
  24. package/dist/codex-hook.js +69 -33
  25. package/dist/codex-queue.d.ts +10 -11
  26. package/dist/codex-queue.js +32 -32
  27. package/dist/codex-watch.d.ts +2 -0
  28. package/dist/codex-watch.js +100 -0
  29. package/dist/decisions.js +2 -2
  30. package/dist/delivery-deferral.d.ts +8 -17
  31. package/dist/delivery-deferral.js +0 -28
  32. package/dist/delivery-frame.d.ts +7 -0
  33. package/dist/delivery-frame.js +11 -0
  34. package/dist/delivery-ledger-sqlite.d.ts +97 -0
  35. package/dist/delivery-ledger-sqlite.js +496 -0
  36. package/dist/delivery-ledger.d.ts +196 -0
  37. package/dist/delivery-ledger.js +268 -0
  38. package/dist/delivery-lifetime.d.ts +6 -0
  39. package/dist/delivery-lifetime.js +45 -0
  40. package/dist/harness-links.js +61 -7
  41. package/dist/harness.js +12 -17
  42. package/dist/help.js +2 -0
  43. package/dist/http-delivery.d.ts +5 -9
  44. package/dist/http-delivery.js +20 -77
  45. package/dist/inbox.d.ts +6 -49
  46. package/dist/inbox.js +24 -371
  47. package/dist/index.d.ts +6 -3
  48. package/dist/index.js +4 -1
  49. package/dist/mcp.js +1 -1
  50. package/dist/model.d.ts +7 -47
  51. package/dist/model.js +1 -7
  52. package/dist/notifications.d.ts +24 -20
  53. package/dist/notifications.js +39 -108
  54. package/dist/operation-control.d.ts +4 -0
  55. package/dist/operation-control.js +20 -0
  56. package/dist/packages/agent-delivery/src/claude-native.d.ts +2 -0
  57. package/dist/packages/agent-delivery/src/claude-native.js +5 -0
  58. package/dist/packages/agent-delivery/src/codex-boundary.d.ts +11 -6
  59. package/dist/packages/agent-delivery/src/codex-boundary.js +31 -40
  60. package/dist/packages/agent-delivery/src/codex-hook.d.ts +17 -12
  61. package/dist/packages/agent-delivery/src/codex-hook.js +26 -39
  62. package/dist/packages/agent-delivery/src/codex.d.ts +3 -0
  63. package/dist/packages/agent-delivery/src/codex.js +41 -4
  64. package/dist/packages/agent-delivery/src/index.d.ts +3 -1
  65. package/dist/packages/agent-delivery/src/index.js +1 -1
  66. package/dist/packages/agent-delivery/src/paseo.js +11 -2
  67. package/dist/packages/agent-delivery/src/types.d.ts +1 -0
  68. package/dist/paseo-delivery.d.ts +5 -5
  69. package/dist/paseo-delivery.js +19 -97
  70. package/dist/paseo.d.ts +1 -1
  71. package/dist/paseo.js +1 -1
  72. package/dist/plugins/opencode/index.d.ts +5 -3
  73. package/dist/plugins/opencode/index.js +99 -21
  74. package/dist/plugins/opencode-shared/delivery.d.ts +23 -0
  75. package/dist/plugins/opencode-shared/delivery.js +109 -0
  76. package/dist/plugins/opencode-v1/index.d.ts +28 -0
  77. package/dist/plugins/opencode-v1/index.js +41 -0
  78. package/dist/plugins/opencode-v1/runtime.d.ts +56 -0
  79. package/dist/plugins/opencode-v1/runtime.js +152 -0
  80. package/dist/plugins/opencode-v1/transport.d.ts +13 -0
  81. package/dist/plugins/opencode-v1/transport.js +50 -0
  82. package/dist/plugins/paseo/shared/card-presentation.d.ts +10 -0
  83. package/dist/plugins/paseo/shared/card-presentation.js +7 -0
  84. package/dist/ports.d.ts +31 -90
  85. package/dist/session-lifecycle.d.ts +8 -7
  86. package/dist/session-lifecycle.js +40 -42
  87. package/dist/sqlite-square.d.ts +14 -23
  88. package/dist/sqlite-square.js +132 -139
  89. package/dist/square-api.js +4 -7
  90. package/dist/square-core.d.ts +0 -1
  91. package/dist/square-domain.d.ts +5 -17
  92. package/dist/square-domain.js +104 -221
  93. package/dist/square-facade.d.ts +18 -15
  94. package/dist/square-post.d.ts +53 -0
  95. package/dist/square-post.js +4 -0
  96. package/dist/square-posting.d.ts +13 -0
  97. package/dist/square-posting.js +174 -0
  98. package/dist/square-producer-sqlite.d.ts +11 -0
  99. package/dist/square-producer-sqlite.js +210 -0
  100. package/dist/square-sqlite.d.ts +15 -25
  101. package/dist/square-sqlite.js +150 -226
  102. package/dist/views.d.ts +2 -2
  103. package/dist/views.js +0 -1
  104. package/dist/wake-sink.d.ts +4 -11
  105. package/dist/wake-sink.js +8 -32
  106. package/dist/wake-transports.d.ts +4 -7
  107. package/dist/wake-transports.js +8 -39
  108. package/examples/symmetric-domains.mjs +29 -249
  109. package/guides/change-waits.md +13 -53
  110. package/guides/claude-native.md +19 -175
  111. package/guides/codex-delivery.md +55 -80
  112. package/guides/delivery-primitives.md +48 -207
  113. package/guides/operation-cancellation.md +2 -5
  114. package/guides/participant-ownership.md +25 -89
  115. package/guides/pi-native-delivery.md +19 -56
  116. package/guides/pi-tools.md +6 -8
  117. package/guides/square-api.md +113 -615
  118. package/package.json +8 -8
  119. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  120. package/plugins/claude/hooks/hooks.json +1 -1
  121. package/plugins/claude/{hooks/register.js → mods/square.js} +4 -7
  122. package/plugins/codex/.codex-plugin/plugin.json +1 -1
  123. package/plugins/codex/hooks/hooks.json +11 -23
  124. package/plugins/opencode/index.ts +91 -23
  125. package/plugins/opencode-shared/delivery.ts +91 -0
  126. package/plugins/opencode-v1/index.ts +36 -0
  127. package/plugins/opencode-v1/runtime.ts +134 -0
  128. package/plugins/opencode-v1/transport.ts +41 -0
  129. package/plugins/paseo/OVERVIEW.md +5 -5
  130. package/plugins/paseo/README.md +7 -6
  131. package/plugins/paseo/client/markdown.tsx +5 -5
  132. package/plugins/paseo/client/square-message.tsx +28 -24
  133. package/plugins/paseo/client/transform.ts +8 -5
  134. package/plugins/paseo/shared/card-presentation.ts +16 -0
  135. package/plugins/paseo/shared/message.ts +6 -11
  136. package/plugins/pi/square-pi.js +156 -417
  137. package/dist/channel-artifact.d.ts +0 -10
  138. package/dist/channel-artifact.js +0 -55
  139. package/dist/channel-delivery.d.ts +0 -11
  140. package/dist/channel-delivery.js +0 -51
  141. package/dist/channel-domain.d.ts +0 -3
  142. package/dist/channel-domain.js +0 -83
  143. package/dist/channel-facade.d.ts +0 -76
  144. package/dist/channel-facade.js +0 -1
  145. package/dist/channel-internal.d.ts +0 -126
  146. package/dist/channel-internal.js +0 -440
  147. package/dist/channel-metadata.d.ts +0 -11
  148. package/dist/channel-metadata.js +0 -1
  149. package/dist/channel-ports.d.ts +0 -241
  150. package/dist/channel-ports.js +0 -1
  151. package/dist/channel-presentation.d.ts +0 -17
  152. package/dist/channel-presentation.js +0 -22
  153. package/dist/channel-sqlite-schema.d.ts +0 -13
  154. package/dist/channel-sqlite-schema.js +0 -81
  155. package/dist/channel-transport.d.ts +0 -62
  156. package/dist/channel-transport.js +0 -1
  157. package/dist/channel.d.ts +0 -84
  158. package/dist/channel.js +0 -60
  159. package/dist/claude-delivery-status.d.ts +0 -13
  160. package/dist/claude-delivery-status.js +0 -46
  161. package/dist/cmd/notify-once.d.ts +0 -2
  162. package/dist/cmd/notify-once.js +0 -29
  163. package/dist/delivery-attempts.d.ts +0 -52
  164. package/dist/delivery-attempts.js +0 -73
  165. package/dist/delivery-effects.d.ts +0 -139
  166. package/dist/delivery-effects.js +0 -163
  167. package/dist/delivery-health.d.ts +0 -51
  168. package/dist/delivery-health.js +0 -173
  169. package/dist/delivery-operations.d.ts +0 -22
  170. package/dist/delivery-operations.js +0 -198
  171. package/dist/delivery-primitives.d.ts +0 -5
  172. package/dist/delivery-primitives.js +0 -3
  173. package/dist/delivery.d.ts +0 -56
  174. package/dist/delivery.js +0 -80
  175. package/dist/plugins/opencode/delivery.d.ts +0 -19
  176. package/dist/plugins/opencode/delivery.js +0 -223
  177. package/dist/presentation-operations.d.ts +0 -5
  178. package/dist/presentation-operations.js +0 -86
  179. package/dist/sqlite-channel.d.ts +0 -15
  180. package/dist/sqlite-channel.js +0 -600
  181. package/dist/square-index.d.ts +0 -16
  182. package/dist/square-index.js +0 -106
  183. package/dist/wake-preview.d.ts +0 -7
  184. package/dist/wake-preview.js +0 -15
  185. package/plugins/opencode/delivery.ts +0 -198
  186. /package/dist/{channel-values.d.ts → square-values.d.ts} +0 -0
  187. /package/dist/{channel-values.js → square-values.js} +0 -0
package/dist/harness.js CHANGED
@@ -1,6 +1,4 @@
1
- import fs from 'node:fs';
2
- import { doctorDeliveryHealth } from './delivery-health.js';
3
- import { wakeGraceMs } from './notifications.js';
1
+ import { DeliveryLedger, deliveryLedgerLocation } from './delivery-ledger.js';
4
2
  import { truncateExternalDiagnostic } from './presentation.js';
5
3
  import { doctorClaudePlugin, installClaudePlugin, uninstallClaudePlugin, } from './harness-claude.js';
6
4
  import { doctorCodexPlugin, installCodexPlugin, uninstallCodexPlugin, } from './harness-codex.js';
@@ -18,16 +16,6 @@ async function doctorHost(label, inspect) {
18
16
  return result([`○ ${label} doctor unavailable (${truncateExternalDiagnostic(diagnostic)})`]);
19
17
  }
20
18
  }
21
- function readableSquarePath(squarePath) {
22
- if (squarePath === undefined)
23
- return false;
24
- try {
25
- return fs.statSync(squarePath).isFile() && (fs.accessSync(squarePath, fs.constants.R_OK), true);
26
- }
27
- catch {
28
- return false;
29
- }
30
- }
31
19
  const TARGETS = [
32
20
  {
33
21
  name: 'claude',
@@ -78,10 +66,17 @@ const TARGETS = [
78
66
  {
79
67
  name: 'delivery',
80
68
  capabilities: ['doctor'],
81
- async doctor({ squarePath }) {
82
- return result(readableSquarePath(squarePath)
83
- ? await doctorDeliveryHealth(squarePath, wakeGraceMs())
84
- : ['○ delivery health skipped (no readable square path)']);
69
+ async doctor({ homeDir }) {
70
+ return doctorHost('delivery', async () => {
71
+ const ledger = await DeliveryLedger.open({ location: deliveryLedgerLocation(process.env, homeDir) });
72
+ try {
73
+ const health = await ledger.health();
74
+ return [`· delivery health · ${health.unknownAttempts.length} unknown attempts · ${health.repeatedFailures.length} repeated failures · ${health.sessionsWithoutRoute.length} sessions without route`];
75
+ }
76
+ finally {
77
+ await ledger.close();
78
+ }
79
+ });
85
80
  },
86
81
  },
87
82
  ];
package/dist/help.js CHANGED
@@ -58,6 +58,8 @@ const COMMANDS = [
58
58
  details: ['Options:', ' --for-owner <id> Required opaque owner.', ' --limit <N> Snapshot memberships (default 20, maximum 100).'],
59
59
  },
60
60
  { names: ['codex-hook'], usage: '{command}', summary: 'Present pending attention at one native agent boundary.', hiddenFromIndex: true },
61
+ { names: ['codex-watch'], usage: '{command}', summary: 'Observe pending attention from a native async Stop hook.', hiddenFromIndex: true },
62
+ { names: ['codex-interrupt'], usage: '{command}', summary: 'Cancel pending attention at a native Interrupt boundary.', hiddenFromIndex: true },
61
63
  { names: ['claude-mod'], usage: '{command}', summary: 'Receive a structured operation from the loaded Claude mod.', hiddenFromIndex: true },
62
64
  {
63
65
  names: ['history'], usage: 'history [filters] [output]', usesSquare: true, group: 'participant',
@@ -1,16 +1,12 @@
1
- import type { WakeRoute } from './channel-values.js';
2
- import type { WakeOutcome, WakeRequest, WakeTransportPort } from './channel-transport.js';
1
+ import type { DeliveryCard, DeliveryTransport, DeliveryTransportContext, TransportOutcome } from './delivery-ledger.js';
3
2
  export interface HttpWakeTransportOptions {
4
3
  fetch?: typeof fetch;
5
4
  env?: NodeJS.ProcessEnv;
6
5
  }
7
- /** HTTP accepts wake custody only; it never consumes or presents Square activity. */
8
- export declare class HttpWakeTransport implements WakeTransportPort {
6
+ /** A successful HTTP response acknowledges custody, not presentation. */
7
+ export declare class HttpWakeTransport implements DeliveryTransport {
9
8
  private readonly opts;
9
+ readonly kind = "http";
10
10
  constructor(opts?: HttpWakeTransportOptions);
11
- probe(route: WakeRoute): Promise<boolean | {
12
- outcome: 'not-capable';
13
- diagnostic: string;
14
- }>;
15
- attempt(request: WakeRequest, timeoutMs: number, beforeSend: () => Promise<boolean>): Promise<WakeOutcome>;
11
+ send(card: DeliveryCard, address: Readonly<Record<string, string>>, context: DeliveryTransportContext): Promise<TransportOutcome>;
16
12
  }
@@ -1,99 +1,42 @@
1
- /** Configuration only: probing never contacts the receiver. */
2
- function configuration(route, env) {
3
- if (route.kind !== 'http')
4
- return undefined;
1
+ function configuration(address, env) {
5
2
  try {
6
- const url = new URL(route.address.url);
7
- if (!['http:', 'https:'].includes(url.protocol) || !url.hostname || url.username || url.password
8
- || route.address.url.includes('#'))
3
+ const url = new URL(address.url);
4
+ if (!['http:', 'https:'].includes(url.protocol) || !url.hostname || url.username || url.password || address.url.includes('#'))
9
5
  return undefined;
10
6
  const headers = new Headers({ 'Content-Type': 'application/json' });
11
- const tokenEnv = route.address.tokenEnv;
12
- if (tokenEnv !== undefined) {
13
- const token = tokenEnv.trim() ? env[tokenEnv] : undefined;
14
- // RFC 6750 bearer credentials; whitespace/control characters cannot become headers.
7
+ if (address.tokenEnv !== undefined) {
8
+ const token = address.tokenEnv.trim() ? env[address.tokenEnv] : undefined;
15
9
  if (!token || token !== token.trim() || !/^[A-Za-z0-9._~+\/-]+=*$/.test(token))
16
10
  return undefined;
17
11
  headers.set('Authorization', `Bearer ${token}`);
18
12
  }
19
- return { url: route.address.url, headers };
13
+ return { url: address.url, headers };
20
14
  }
21
15
  catch {
22
16
  return undefined;
23
17
  }
24
18
  }
25
- /** HTTP accepts wake custody only; it never consumes or presents Square activity. */
19
+ /** A successful HTTP response acknowledges custody, not presentation. */
26
20
  export class HttpWakeTransport {
27
21
  opts;
22
+ kind = 'http';
28
23
  constructor(opts = {}) {
29
24
  this.opts = opts;
30
25
  }
31
- async probe(route) {
32
- return configuration(route, this.opts.env ?? process.env) !== undefined
33
- ? true : { outcome: 'not-capable', diagnostic: 'HTTP wake configuration unavailable.' };
34
- }
35
- async attempt(request, timeoutMs, beforeSend) {
36
- const deadline = Date.now() + timeoutMs;
37
- if (request.route.kind !== 'http')
38
- return { outcome: 'not-capable' };
39
- const config = configuration(request.route, this.opts.env ?? process.env);
40
- if (config === undefined)
41
- return { outcome: 'failed', signature: 'http_config_rejected', message: 'Invalid HTTP wake configuration.' };
42
- const controller = new AbortController();
43
- let sent = false;
44
- const budgetUnavailable = () => sent
45
- ? { outcome: 'unknown', signature: 'http_send_timeout', message: 'HTTP wake acceptance is unknown after timeout.' }
46
- : { outcome: 'failed', signature: 'http_pre_send_timeout', message: 'HTTP wake budget elapsed before sending.' };
47
- if (!Number.isFinite(timeoutMs) || Date.now() >= deadline)
48
- return budgetUnavailable();
49
- let timer;
50
- const timeout = new Promise(resolve => {
51
- timer = setTimeout(() => { controller.abort(); resolve(budgetUnavailable()); }, Math.max(0, deadline - Date.now()));
52
- });
53
- const send = async () => {
54
- try {
55
- const preview = request.presentation?.payload;
56
- if (preview === undefined)
57
- return { outcome: 'not-capable', diagnostic: 'No pending Square activity to preview.' };
58
- const body = JSON.stringify({
59
- location: request.location, participant: request.participant, message: request.message, actor: request.actor,
60
- ...(request.attemptN === undefined ? {} : { attemptN: request.attemptN }), preview,
61
- });
62
- if (controller.signal.aborted || Date.now() >= deadline)
63
- return budgetUnavailable();
64
- if (!(await beforeSend()))
65
- return { outcome: 'not-capable' };
66
- // Preview and the final gate spend the same absolute budget as the request.
67
- if (controller.signal.aborted || Date.now() >= deadline)
68
- return budgetUnavailable();
69
- sent = true;
70
- const response = await (this.opts.fetch ?? fetch)(config.url, {
71
- method: 'POST', headers: config.headers, body, redirect: 'manual', signal: controller.signal,
72
- });
73
- // Status is the whole acknowledgement; never wait for or buffer a receiver body.
74
- void response.body?.cancel().catch(() => undefined);
75
- if (response.status >= 200 && response.status < 300)
76
- return { outcome: 'accepted', signature: 'http_accepted' };
77
- return {
78
- outcome: 'failed', signature: response.status >= 500 && response.status < 600 ? 'http_status_transient' : 'http_status_rejected',
79
- message: `HTTP wake returned status ${response.status}.`,
80
- };
81
- }
82
- catch {
83
- // URLs, query credentials and raw fetch exceptions must never reach evidence.
84
- if (controller.signal.aborted)
85
- return budgetUnavailable();
86
- return sent
87
- ? { outcome: 'unknown', signature: 'http_send_unknown', message: 'HTTP wake acceptance is unknown after a network error.' }
88
- : { outcome: 'failed', signature: 'http_pre_send_failed', message: 'HTTP wake could not be prepared.' };
89
- }
90
- };
26
+ async send(card, address, context) {
27
+ const config = configuration(address, this.opts.env ?? process.env);
28
+ if (!config)
29
+ return 'not-capable';
30
+ if (!await context.beforeSend() || context.signal.aborted || Date.now() >= context.deadline)
31
+ return 'not-capable';
91
32
  try {
92
- return await Promise.race([send(), timeout]);
33
+ const response = await (this.opts.fetch ?? fetch)(config.url, { method: 'POST', headers: config.headers,
34
+ body: JSON.stringify({ owner: card.owner, key: card.key, text: card.text }), redirect: 'manual', signal: context.signal });
35
+ void response.body?.cancel().catch(() => undefined);
36
+ return response.status >= 200 && response.status < 300 ? 'accepted' : 'failed';
93
37
  }
94
- finally {
95
- if (timer !== undefined)
96
- clearTimeout(timer);
38
+ catch {
39
+ return 'unknown';
97
40
  }
98
41
  }
99
42
  }
package/dist/inbox.d.ts CHANGED
@@ -1,50 +1,7 @@
1
- import { type Owner, type LocatedSeat, type PendingMembership } from './model.js';
2
- import type { SquareRead } from './ports.js';
3
- import { type NativePendingInput } from './delivery.js';
4
- export interface PendingWaitOptions {
5
- signal?: AbortSignal;
6
- /** Local delivery suppression, never persisted as evidence of receipt. */
7
- excludeKeys?: ReadonlySet<string>;
8
- /** Arm before dispatch; retry only after a substantive change, not our failed evidence write. */
9
- skipImmediate?: boolean;
10
- onChangeArmed?: (armed: boolean) => void;
11
- }
12
- export declare function pendingKey(membership: LocatedSeat, messageIndex: number): string;
13
- /** Revalidate a supplied batch immediately before the boundary's independent claim/send checks. */
14
- export declare function projectBoundaryEligibility(inbox: readonly PendingMembership[]): Promise<PendingMembership[]>;
15
- export interface SessionBindingCandidate {
16
- readonly location: string;
1
+ import type { Owner } from './model.js';
2
+ import type { InboxMembershipSummary } from './square-facade.js';
3
+ /** Filesystem-scoped membership counts. This is a World read, not a delivery scan. */
4
+ export declare function sessionInboxCounts(input: {
17
5
  readonly owner: Owner;
18
- }
19
- /** HOME is a candidate path index; current seats and delivery evidence live in the artifact. */
20
- export declare function projectSessionCandidates(input: SessionSeatQuery): Promise<readonly SessionBindingCandidate[]>;
21
- export interface SessionSeatQuery {
22
- readonly owner?: Owner;
23
- readonly location?: string;
24
- readonly env?: NodeJS.ProcessEnv;
25
- }
26
- /** Lifecycle reads resolve seats and join times, never pending activity bodies. */
27
- export declare function projectSessionSeats(input: SessionSeatQuery, signal?: AbortSignal): Promise<LocatedSeat[]>;
28
- /** Public count boundary: one coherent read per artifact, without pending body hydration. */
29
- export declare function sessionInboxCounts(input: SessionSeatQuery, signal?: AbortSignal): Promise<import('./square-facade.js').InboxMembershipSummary[]>;
30
- export interface NativePendingPreview {
31
- readonly payload: string;
32
- readonly clipped: boolean;
33
- }
34
- export interface NativePendingSource {
35
- readonly text: string;
36
- readonly clipped: boolean;
37
- }
38
- /** One current eligibility + source projection read; senders use text, ACK coverage uses clipped. */
39
- export declare function nativePendingSource(facts: SquareRead, input: NativePendingInput): NativePendingSource | undefined;
40
- /** The sender-facing fixed reminder over the shared source projection. */
41
- export declare function nativePendingPreview(facts: SquareRead, input: NativePendingInput): NativePendingPreview | undefined;
42
- export declare function sessionInbox(owner: Owner, env?: NodeJS.ProcessEnv, signal?: AbortSignal): Promise<PendingMembership[]>;
43
- export interface SessionPendingObserver {
44
- /** Read committed revisions before reusing content; filesystem hints are only for waiting. */
45
- read(options?: Pick<PendingWaitOptions, 'signal' | 'excludeKeys'>): Promise<PendingMembership[]>;
46
- wait(timeoutMs: number, options?: PendingWaitOptions): Promise<PendingMembership[]>;
47
- close(): void;
48
- }
49
- /** Session-scoped projection over process-shared storage change detectors. */
50
- export declare function observeSessionPending(owner: Owner, suppliedEnv?: NodeJS.ProcessEnv): Promise<SessionPendingObserver>;
6
+ readonly cwd?: string;
7
+ }, signal?: AbortSignal): Promise<InboxMembershipSummary[]>;