@astrosheep/square 0.4.0 → 0.4.2

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 (196) 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-boundary-state.d.ts +20 -0
  11. package/dist/claude-boundary-state.js +84 -0
  12. package/dist/claude-hook.d.ts +2 -0
  13. package/dist/claude-hook.js +231 -0
  14. package/dist/claude-mcp-context.d.ts +1 -1
  15. package/dist/claude-mcp-context.js +12 -3
  16. package/dist/cli/context.js +7 -9
  17. package/dist/cli/observation-commands.d.ts +4 -1
  18. package/dist/cli/observation-commands.js +37 -4
  19. package/dist/cli/registry.js +5 -2
  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-claude.js +3 -4
  41. package/dist/harness-links.js +63 -7
  42. package/dist/harness.js +12 -17
  43. package/dist/help.js +4 -1
  44. package/dist/http-delivery.d.ts +5 -9
  45. package/dist/http-delivery.js +20 -77
  46. package/dist/inbox.d.ts +6 -49
  47. package/dist/inbox.js +24 -371
  48. package/dist/index.d.ts +6 -3
  49. package/dist/index.js +4 -1
  50. package/dist/mcp.js +2 -3
  51. package/dist/model.d.ts +7 -47
  52. package/dist/model.js +1 -7
  53. package/dist/notifications.d.ts +24 -20
  54. package/dist/notifications.js +39 -108
  55. package/dist/operation-control.d.ts +4 -0
  56. package/dist/operation-control.js +20 -0
  57. package/dist/packages/agent-delivery/src/claude-native.d.ts +2 -0
  58. package/dist/packages/agent-delivery/src/claude-native.js +5 -0
  59. package/dist/packages/agent-delivery/src/codex-boundary.d.ts +11 -6
  60. package/dist/packages/agent-delivery/src/codex-boundary.js +31 -40
  61. package/dist/packages/agent-delivery/src/codex-hook.d.ts +17 -12
  62. package/dist/packages/agent-delivery/src/codex-hook.js +26 -39
  63. package/dist/packages/agent-delivery/src/codex.d.ts +3 -0
  64. package/dist/packages/agent-delivery/src/codex.js +41 -4
  65. package/dist/packages/agent-delivery/src/index.d.ts +3 -1
  66. package/dist/packages/agent-delivery/src/index.js +1 -1
  67. package/dist/packages/agent-delivery/src/paseo.js +11 -2
  68. package/dist/packages/agent-delivery/src/types.d.ts +1 -0
  69. package/dist/paseo-delivery.d.ts +5 -5
  70. package/dist/paseo-delivery.js +19 -97
  71. package/dist/paseo.d.ts +1 -1
  72. package/dist/paseo.js +1 -1
  73. package/dist/plugins/opencode/index.d.ts +5 -3
  74. package/dist/plugins/opencode/index.js +99 -21
  75. package/dist/plugins/opencode-shared/delivery.d.ts +23 -0
  76. package/dist/plugins/opencode-shared/delivery.js +109 -0
  77. package/dist/plugins/opencode-v1/index.d.ts +28 -0
  78. package/dist/plugins/opencode-v1/index.js +41 -0
  79. package/dist/plugins/opencode-v1/runtime.d.ts +56 -0
  80. package/dist/plugins/opencode-v1/runtime.js +152 -0
  81. package/dist/plugins/opencode-v1/transport.d.ts +13 -0
  82. package/dist/plugins/opencode-v1/transport.js +50 -0
  83. package/dist/plugins/paseo/shared/card-presentation.d.ts +10 -0
  84. package/dist/plugins/paseo/shared/card-presentation.js +7 -0
  85. package/dist/ports.d.ts +31 -90
  86. package/dist/session-lifecycle.d.ts +8 -7
  87. package/dist/session-lifecycle.js +40 -42
  88. package/dist/sqlite-square.d.ts +14 -23
  89. package/dist/sqlite-square.js +132 -139
  90. package/dist/square-api.js +4 -7
  91. package/dist/square-core.d.ts +0 -1
  92. package/dist/square-domain.d.ts +5 -17
  93. package/dist/square-domain.js +104 -221
  94. package/dist/square-facade.d.ts +18 -15
  95. package/dist/square-post.d.ts +53 -0
  96. package/dist/square-post.js +4 -0
  97. package/dist/square-posting.d.ts +13 -0
  98. package/dist/square-posting.js +174 -0
  99. package/dist/square-producer-sqlite.d.ts +11 -0
  100. package/dist/square-producer-sqlite.js +210 -0
  101. package/dist/square-sqlite.d.ts +15 -25
  102. package/dist/square-sqlite.js +150 -226
  103. package/dist/views.d.ts +2 -2
  104. package/dist/views.js +0 -1
  105. package/dist/wake-sink.d.ts +4 -11
  106. package/dist/wake-sink.js +8 -32
  107. package/dist/wake-transports.d.ts +4 -7
  108. package/dist/wake-transports.js +7 -39
  109. package/examples/symmetric-domains.mjs +29 -249
  110. package/guides/change-waits.md +13 -53
  111. package/guides/claude-native.md +7 -171
  112. package/guides/codex-delivery.md +55 -80
  113. package/guides/delivery-primitives.md +48 -207
  114. package/guides/mcp.md +1 -1
  115. package/guides/operation-cancellation.md +2 -5
  116. package/guides/participant-ownership.md +25 -89
  117. package/guides/pi-native-delivery.md +19 -56
  118. package/guides/pi-tools.md +6 -8
  119. package/guides/square-api.md +113 -615
  120. package/package.json +8 -8
  121. package/plugins/claude/.claude-plugin/plugin.json +2 -3
  122. package/plugins/claude/hooks/hooks.json +11 -1
  123. package/plugins/codex/.codex-plugin/plugin.json +1 -1
  124. package/plugins/codex/hooks/hooks.json +11 -23
  125. package/plugins/opencode/index.ts +91 -23
  126. package/plugins/opencode-shared/delivery.ts +91 -0
  127. package/plugins/opencode-v1/index.ts +36 -0
  128. package/plugins/opencode-v1/runtime.ts +134 -0
  129. package/plugins/opencode-v1/transport.ts +41 -0
  130. package/plugins/paseo/OVERVIEW.md +5 -5
  131. package/plugins/paseo/README.md +7 -6
  132. package/plugins/paseo/client/markdown.tsx +5 -5
  133. package/plugins/paseo/client/square-message.tsx +28 -24
  134. package/plugins/paseo/client/transform.ts +8 -5
  135. package/plugins/paseo/shared/card-presentation.ts +16 -0
  136. package/plugins/paseo/shared/message.ts +6 -11
  137. package/plugins/pi/square-pi.js +156 -417
  138. package/dist/channel-artifact.d.ts +0 -10
  139. package/dist/channel-artifact.js +0 -55
  140. package/dist/channel-delivery.d.ts +0 -11
  141. package/dist/channel-delivery.js +0 -51
  142. package/dist/channel-domain.d.ts +0 -3
  143. package/dist/channel-domain.js +0 -83
  144. package/dist/channel-facade.d.ts +0 -76
  145. package/dist/channel-facade.js +0 -1
  146. package/dist/channel-internal.d.ts +0 -126
  147. package/dist/channel-internal.js +0 -440
  148. package/dist/channel-metadata.d.ts +0 -11
  149. package/dist/channel-metadata.js +0 -1
  150. package/dist/channel-ports.d.ts +0 -241
  151. package/dist/channel-ports.js +0 -1
  152. package/dist/channel-presentation.d.ts +0 -17
  153. package/dist/channel-presentation.js +0 -22
  154. package/dist/channel-sqlite-schema.d.ts +0 -13
  155. package/dist/channel-sqlite-schema.js +0 -81
  156. package/dist/channel-transport.d.ts +0 -62
  157. package/dist/channel-transport.js +0 -1
  158. package/dist/channel.d.ts +0 -84
  159. package/dist/channel.js +0 -60
  160. package/dist/claude-delivery-status.d.ts +0 -13
  161. package/dist/claude-delivery-status.js +0 -46
  162. package/dist/claude-delivery.d.ts +0 -12
  163. package/dist/claude-delivery.js +0 -108
  164. package/dist/claude-mod.d.ts +0 -8
  165. package/dist/claude-mod.js +0 -172
  166. package/dist/claude-transport.d.ts +0 -5
  167. package/dist/claude-transport.js +0 -58
  168. package/dist/cmd/notify-once.d.ts +0 -2
  169. package/dist/cmd/notify-once.js +0 -29
  170. package/dist/delivery-attempts.d.ts +0 -52
  171. package/dist/delivery-attempts.js +0 -73
  172. package/dist/delivery-effects.d.ts +0 -139
  173. package/dist/delivery-effects.js +0 -163
  174. package/dist/delivery-health.d.ts +0 -51
  175. package/dist/delivery-health.js +0 -173
  176. package/dist/delivery-operations.d.ts +0 -22
  177. package/dist/delivery-operations.js +0 -198
  178. package/dist/delivery-primitives.d.ts +0 -5
  179. package/dist/delivery-primitives.js +0 -3
  180. package/dist/delivery.d.ts +0 -56
  181. package/dist/delivery.js +0 -80
  182. package/dist/plugins/opencode/delivery.d.ts +0 -19
  183. package/dist/plugins/opencode/delivery.js +0 -223
  184. package/dist/presentation-operations.d.ts +0 -5
  185. package/dist/presentation-operations.js +0 -86
  186. package/dist/sqlite-channel.d.ts +0 -15
  187. package/dist/sqlite-channel.js +0 -600
  188. package/dist/square-index.d.ts +0 -16
  189. package/dist/square-index.js +0 -106
  190. package/dist/wake-preview.d.ts +0 -7
  191. package/dist/wake-preview.js +0 -15
  192. package/plugins/claude/hooks/register.js +0 -132
  193. package/plugins/claude/types.d.ts +0 -7
  194. package/plugins/opencode/delivery.ts +0 -198
  195. /package/dist/{channel-values.d.ts → square-values.d.ts} +0 -0
  196. /package/dist/{channel-values.js → square-values.js} +0 -0
@@ -1,55 +0,0 @@
1
- import { createArtifactStore, createStoreFile, replaceStoreFile } from './artifact-store.js';
2
- import { channelStoreFormat, initializeStandaloneChannel } from './channel-sqlite-schema.js';
3
- import { createChannelSqlite } from './sqlite-channel.js';
4
- import { wrapChannelWrite } from './channel-domain.js';
5
- import { deliverPending } from './delivery-operations.js';
6
- import { InternalSquareError } from './neutral.js';
7
- const readMethods = [
8
- 'header', 'message', 'messages', 'messageHeads', 'messageCount', 'addresses', 'receipt', 'receiptFacts',
9
- 'directed', 'directedCount', 'endpoint', 'endpointsForOwner', 'endpoints', 'deliveryEvidence', 'deliveryByToken',
10
- 'cancelledThrough', 'deliveryDeferrals', 'receiveClaims', 'claimLease', 'suppressed',
11
- ];
12
- export function channelReads(channel, guard) {
13
- return Object.fromEntries(readMethods.map(name => [name, guard(channel[name])]));
14
- }
15
- export function channelWrites(channel, guard) {
16
- return Object.fromEntries(Object.entries(channel).filter(([, value]) => typeof value === 'function')
17
- .map(([name, value]) => [name, guard(value)]));
18
- }
19
- function channelPort(location, initialize, signal) {
20
- const store = createArtifactStore(location, channelStoreFormat, initialize, signal);
21
- const port = {
22
- read: (select, signal) => store.run(false, ({ db, guard }) => select(channelReads(createChannelSqlite(db), guard)), signal),
23
- transactAs: (authority, change, signal) => store.run(true, ({ db, guard, track }) => {
24
- const channel = createChannelSqlite(db);
25
- track(channel);
26
- return change(wrapChannelWrite(channelReads(channel, guard), channelWrites(channel, guard), authority));
27
- }, signal),
28
- async claimDelivery(input, signal) { return (await port.transactAs({ kind: 'participant', seat: input.seat }, facts => facts.claimDelivery(input), signal)).value; },
29
- async prepareDelivery(input, signal) { return (await port.transactAs({ kind: 'participant', seat: input.seat }, facts => facts.prepareDelivery(input), signal)).value; },
30
- async completeDelivery(input, signal) { return (await port.transactAs({ kind: 'participant', seat: input.seat }, facts => facts.completeDelivery(input), signal)).value; },
31
- async cancelDeliveries(seat, through, signal) {
32
- return (await port.transactAs({ kind: 'participant', seat }, facts => {
33
- const boundary = through ?? facts.header().lastMessageIndex;
34
- return boundary < 0 ? false : facts.cancelThrough(seat, boundary);
35
- }, signal)).value;
36
- },
37
- changed: store.changed, close: store.close,
38
- };
39
- return port;
40
- }
41
- /** Native Channel factories use only lower SQL and the shared physical-store lifetime. */
42
- export function openChannelArtifact(location, signal) { return channelPort(location, undefined, signal); }
43
- export function createMemoryChannelArtifact(description = '# Channel\n') {
44
- return channelPort(':memory:', db => initializeStandaloneChannel(db, 0, description));
45
- }
46
- export async function createChannelArtifactFile(location, description, force, signal) {
47
- if (force)
48
- await replaceStoreFile(location, channelStoreFormat, (db, revision) => initializeStandaloneChannel(db, revision, description), signal);
49
- else if (!await createStoreFile(location, channelStoreFormat, db => initializeStandaloneChannel(db, 0, description), signal))
50
- throw new InternalSquareError('conflict', `Refusing to overwrite existing square: ${location}\nPass -f to overwrite.`);
51
- }
52
- export function channelCourier(artifact, transport, location, clock, preparePresentation) {
53
- return (message) => deliverPending({ artifact, transport, location, now: clock(),
54
- ...(preparePresentation === undefined ? {} : { preparePresentation }), ...(message === undefined ? {} : { message }) });
55
- }
@@ -1,11 +0,0 @@
1
- import type { ChannelRead, ChannelDeliveryEvidence as DeliveryEvidence, MessageHead } from './channel-ports.js';
2
- /** Presentation custody blocks a wake, independently of native wake acceptance. */
3
- export declare function presentationBlocksWake(evidence: readonly DeliveryEvidence[], now: number): boolean;
4
- /** Preselection only: an expired wake dispatch is uncertain, never safe automatic replay. */
5
- export declare function automaticWakeEligible(evidence: readonly DeliveryEvidence[], now: number): boolean;
6
- /** One lower pending message: attached, unconsumed and not suppressed by a live claim. */
7
- export declare function pendingHeadAt(facts: ChannelRead, name: string, index: number, now?: number): MessageHead | undefined;
8
- /** Lower pending selection for one recipient, oldest first. */
9
- export declare function pendingMessageHeads(facts: ChannelRead, name: string, now?: number, suppress?: boolean): MessageHead[];
10
- /** Lower recipients of one message that still owe a wake; other endpoints are untouched. */
11
- export declare function pendingAddresses(facts: ChannelRead, index: number, now?: number): readonly MessageHead[];
@@ -1,51 +0,0 @@
1
- import { automaticDispatchEligible, presentationBlocksDispatch } from './delivery-attempts.js';
2
- function custody(evidence) {
3
- return evidence.map(row => ({ purpose: row.kind === 'wake' ? 'dispatch' : 'presentation', outcome: row.outcome, expiresAt: row.expiresAt }));
4
- }
5
- /** Presentation custody blocks a wake, independently of native wake acceptance. */
6
- export function presentationBlocksWake(evidence, now) {
7
- return presentationBlocksDispatch(custody(evidence), now);
8
- }
9
- /** Preselection only: an expired wake dispatch is uncertain, never safe automatic replay. */
10
- export function automaticWakeEligible(evidence, now) {
11
- return automaticDispatchEligible(custody(evidence), now);
12
- }
13
- /** One lower pending message: attached, unconsumed and not suppressed by a live claim. */
14
- export function pendingHeadAt(facts, name, index, now = Date.now()) {
15
- const endpoint = facts.endpoint(name);
16
- if (endpoint === undefined || endpoint.attachment !== 'attached' || facts.receipt(endpoint.participant, index))
17
- return undefined;
18
- if (facts.suppressed(endpoint.participant, endpoint.generation, index, now))
19
- return undefined;
20
- return facts.directed(endpoint.participant, { afterIndex: index - 1, throughIndex: index, currentGeneration: true }, { edge: 'oldest', limit: 1 }).items[0];
21
- }
22
- /** Lower pending selection for one recipient, oldest first. */
23
- export function pendingMessageHeads(facts, name, now = Date.now(), suppress = true) {
24
- const endpoint = facts.endpoint(name);
25
- if (endpoint === undefined || endpoint.attachment !== 'attached')
26
- return [];
27
- const heads = [];
28
- let afterIndex = -1;
29
- for (;;) {
30
- const page = facts.directed(endpoint.participant, { afterIndex, unseenOnly: true, currentGeneration: true }, { edge: 'oldest', limit: 100 });
31
- for (const head of page.items)
32
- if (!suppress || !facts.suppressed(endpoint.participant, endpoint.generation, head.index, now))
33
- heads.push(head);
34
- if (!page.hasMore)
35
- break;
36
- afterIndex = page.items.at(-1).index;
37
- }
38
- return heads;
39
- }
40
- /** Lower recipients of one message that still owe a wake; other endpoints are untouched. */
41
- export function pendingAddresses(facts, index, now = Date.now()) {
42
- return facts.addresses(index).flatMap(({ recipient, generation }) => {
43
- const current = facts.endpoint(recipient);
44
- if (current === undefined || current.attachment !== 'attached')
45
- return [];
46
- if (generation !== undefined && current.generation !== generation)
47
- return [];
48
- const head = pendingHeadAt(facts, recipient, index, now);
49
- return head === undefined ? [] : [head];
50
- });
51
- }
@@ -1,3 +0,0 @@
1
- import type { ChannelRead, ChannelWrite, ChannelWriteAuthority } from './channel-ports.js';
2
- /** Endpoint custody and operation authority without participant membership or social events. */
3
- export declare function wrapChannelWrite(read: ChannelRead, write: ChannelWrite, authority: ChannelWriteAuthority): ChannelWrite;
@@ -1,83 +0,0 @@
1
- import { SquareError, validateOwner } from './neutral.js';
2
- import { sameName, validateName } from './channel-values.js';
3
- import { validateEndpointGeneration } from './message.js';
4
- /** Endpoint custody and operation authority without participant membership or social events. */
5
- export function wrapChannelWrite(read, write, authority) {
6
- if (!authority || !['send', 'endpoint', 'endpoint-cleanup', 'participant'].includes(authority.kind))
7
- throw new SquareError('invalid_args', 'Channel writes require an explicit authority.');
8
- const name = authority.kind === 'send' ? authority.actor : authority.kind === 'endpoint' ? authority.participant : authority.seat.participant;
9
- validateName(name);
10
- if (authority.kind !== 'send')
11
- validateOwner(authority.kind === 'endpoint' ? authority.owner : authority.seat.owner);
12
- const fail = () => { throw new SquareError('already_joined', 'This operation needs its captured Channel endpoint.'); };
13
- const captured = authority.kind === 'participant' || authority.kind === 'endpoint-cleanup' ? authority.seat : undefined;
14
- if (captured)
15
- validateEndpointGeneration(captured.generation);
16
- function current(ref, allowDetached = false) {
17
- const actual = read.endpoint(ref.participant);
18
- if (!actual || !sameName(ref.participant, name) || actual.owner !== ref.owner || actual.generation !== ref.generation
19
- || !allowDetached && actual.attachment !== 'attached')
20
- fail();
21
- }
22
- function own(ref, allowDetached = false) {
23
- if (authority.kind === 'endpoint') {
24
- if (!sameName(ref.participant, name) || ref.owner !== authority.owner)
25
- fail();
26
- }
27
- else if (!captured || !sameName(ref.participant, captured.participant) || ref.owner !== captured.owner || ref.generation !== captured.generation)
28
- fail();
29
- current(ref, allowDetached);
30
- }
31
- if (authority.kind === 'participant')
32
- current(authority.seat);
33
- const forbidden = () => { throw new SquareError('invalid_args', 'This Channel authority does not permit that mutation.'); };
34
- const facts = Object.assign({}, read, Object.fromEntries(Object.keys(write)
35
- .filter(key => !(key in read)).map(key => [key, forbidden])));
36
- if (authority.kind === 'send' || authority.kind === 'participant') {
37
- facts.publishMessage = draft => {
38
- if (!sameName(draft.from, name))
39
- fail();
40
- if (captured)
41
- current(captured);
42
- return write.publishMessage(draft);
43
- };
44
- }
45
- if (authority.kind === 'endpoint') {
46
- facts.storeEndpoint = endpoint => {
47
- if (!sameName(endpoint.participant, name) || endpoint.owner !== authority.owner)
48
- fail();
49
- return write.storeEndpoint(endpoint);
50
- };
51
- facts.reattachEndpoint = (ref, address) => { own(ref, true); return write.reattachEndpoint(ref, address); };
52
- }
53
- if (authority.kind === 'endpoint' || authority.kind === 'participant')
54
- facts.updateWakeAddress = (ref, address) => { own(ref); return write.updateWakeAddress(ref, address); };
55
- if (authority.kind === 'endpoint-cleanup') {
56
- // Cleanup races are harmless; storage compares the captured owner and generation.
57
- const cleanup = (ref) => {
58
- if (!captured || !sameName(ref.participant, captured.participant) || ref.owner !== captured.owner || ref.generation !== captured.generation)
59
- fail();
60
- };
61
- facts.detachEndpoint = ref => { cleanup(ref); return write.detachEndpoint(ref); };
62
- facts.removeEndpoint = ref => { cleanup(ref); return write.removeEndpoint(ref); };
63
- }
64
- if (authority.kind === 'participant') {
65
- facts.markSeen = (recipient, indexes, at) => { own({ ...authority.seat, participant: recipient }); return write.markSeen(recipient, indexes, at); };
66
- facts.cancelThrough = (ref, through) => {
67
- own(ref);
68
- if (!Number.isSafeInteger(through) || through < 0 || through >= read.header().nextMessageIndex)
69
- throw new SquareError('invalid_args', 'Cancellation boundary must be an assigned message index below the allocator.');
70
- return write.cancelThrough(ref, through);
71
- };
72
- facts.claimDelivery = input => { own(input.seat); return write.claimDelivery(input); };
73
- facts.prepareDelivery = input => { own(input.seat); return write.prepareDelivery(input); };
74
- facts.completeDelivery = input => { own(input.seat); return write.completeDelivery(input); };
75
- facts.observeNativeDelivery = input => { own(input.seat); return write.observeNativeDelivery(input); };
76
- facts.putDeliveryDeferral = (ref, ...args) => { own(ref); return write.putDeliveryDeferral(ref, ...args); };
77
- facts.renewDeliveryDeferral = (ref, ...args) => { own(ref); return write.renewDeliveryDeferral(ref, ...args); };
78
- facts.releaseDeliveryDeferral = (ref, ...args) => { own(ref); return write.releaseDeliveryDeferral(ref, ...args); };
79
- facts.putReceiveClaim = claim => { own({ ...authority.seat, participant: claim.owner, generation: claim.generation }); return write.putReceiveClaim(claim); };
80
- facts.removeReceiveClaim = (owner, namespace, id) => { own({ ...authority.seat, participant: owner }); return write.removeReceiveClaim(owner, namespace, id); };
81
- }
82
- return facts;
83
- }
@@ -1,76 +0,0 @@
1
- import type { MessageMetadata } from './channel-values.js';
2
- import type { MetadataMatch } from './channel-metadata.js';
3
- import type { MessageId } from './message.js';
4
- export type ChannelTruncate = number | false;
5
- export interface ChannelSendInput {
6
- readonly from: string;
7
- readonly to: string | readonly string[];
8
- readonly body: string;
9
- readonly truncate?: ChannelTruncate;
10
- readonly metadata?: MessageMetadata;
11
- }
12
- export interface ChannelSendResult {
13
- readonly id: MessageId;
14
- readonly at: number;
15
- readonly from: string;
16
- readonly to: readonly string[];
17
- readonly body: string;
18
- readonly metadata?: MessageMetadata;
19
- }
20
- export interface ChannelEndpointSummary {
21
- readonly name: string;
22
- readonly generation: string;
23
- readonly attachment: 'attached' | 'detached';
24
- readonly deliveryAvailable: boolean;
25
- readonly unreadCount: number;
26
- readonly lastActiveAt?: number;
27
- }
28
- export interface ChannelMessage {
29
- readonly id: MessageId;
30
- readonly at: number;
31
- readonly from: string;
32
- readonly to: readonly string[];
33
- readonly body: string;
34
- readonly metadata?: MessageMetadata;
35
- }
36
- export interface ChannelPendingResult {
37
- readonly messages: readonly ChannelMessage[];
38
- readonly remaining: number;
39
- }
40
- export interface MessageCursor {
41
- readonly id: MessageId;
42
- readonly direction: 'before' | 'after';
43
- }
44
- export interface MessageSearch {
45
- readonly text: string;
46
- readonly mode: 'literal' | 'regex';
47
- }
48
- export interface MessageQuery {
49
- readonly at?: readonly MessageId[];
50
- readonly from?: readonly string[];
51
- readonly match?: MetadataMatch;
52
- readonly search?: MessageSearch;
53
- readonly cursor?: MessageCursor;
54
- }
55
- export interface ChannelHistoryQuery extends MessageQuery {
56
- readonly limit?: number | null;
57
- readonly order?: 'asc' | 'desc';
58
- }
59
- export interface ChannelPendingOptions extends MessageQuery {
60
- readonly limit?: number;
61
- }
62
- export interface ChannelHistoryResult {
63
- readonly messages: readonly ChannelMessage[];
64
- }
65
- export interface ChannelReceiveResult extends ChannelPendingResult {
66
- readonly consumed: number;
67
- readonly remaining: number;
68
- }
69
- export interface AckResult {
70
- readonly consumed: number;
71
- }
72
- export interface ChannelEndpointHold {
73
- readonly name: string;
74
- readonly generation: string;
75
- readonly attachment: 'attached' | 'detached';
76
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,126 +0,0 @@
1
- import { type MetadataMatch } from './delivery-deferral.js';
2
- import { type Owner } from './neutral.js';
3
- import { type WakeAddress } from './channel-values.js';
4
- import { type HarnessSessionChannel } from './participant-identity.js';
5
- import type { ChannelWriteAuthority, ChannelArtifact, EndpointFact, EndpointRef } from './channel-ports.js';
6
- import type { WakeTransportPort } from './channel-transport.js';
7
- import { validateEndpointGeneration, type MessageId } from './message.js';
8
- import type { AckResult, ChannelEndpointSummary, ChannelReceiveResult, ChannelPendingResult, ChannelHistoryResult, ChannelSendInput, ChannelSendResult, ChannelHistoryQuery, ChannelPendingOptions, ChannelEndpointHold } from './channel-facade.js';
9
- import type { DeliveryDeferral } from './delivery-deferral.js';
10
- import type { OperationControl, OperationFailureDetail } from './neutral.js';
11
- export { harnessOwner, decodeHarnessOwner, localUserOwner } from './owner.js';
12
- export type { MessageMetadata } from './channel-values.js';
13
- export type { MessageSearch, ChannelTruncate, ChannelPendingOptions, MessageCursor, MessageQuery, ChannelPendingResult, ChannelHistoryResult, ChannelHistoryQuery, AckResult, ChannelEndpointSummary, ChannelMessage, ChannelReceiveResult } from './channel-facade.js';
14
- export type { MessageId } from './message.js';
15
- export type { ChannelArtifact } from './channel-ports.js';
16
- export type { ChannelSendInput, ChannelSendResult, DeliveryDeferral, MetadataMatch, OperationControl, Owner, WakeAddress, WakeTransportPort, HarnessSessionChannel };
17
- export interface ResolvedHarnessSession {
18
- readonly channel: HarnessSessionChannel;
19
- readonly sessionId: string;
20
- readonly agentId?: string;
21
- readonly owner: Owner;
22
- readonly wakeAddress?: WakeAddress;
23
- }
24
- export declare function resolveHarnessSession(env?: NodeJS.ProcessEnv): ResolvedHarnessSession | undefined;
25
- export interface ChannelOpenInput {
26
- readonly path: string;
27
- readonly cwd?: string;
28
- readonly env?: NodeJS.ProcessEnv;
29
- readonly clock?: () => number;
30
- /** Transport for post-commit custody; `false` disables delivery for this handle. */
31
- readonly wakeTransport?: WakeTransportPort | false;
32
- }
33
- export interface ChannelCreateInput extends ChannelOpenInput {
34
- readonly force?: boolean;
35
- readonly description?: string;
36
- }
37
- /** Every dependency one Channel needs; the artifact is already opened and narrowed. */
38
- export interface ChannelPortInit {
39
- readonly location: string;
40
- readonly artifact: ChannelArtifact;
41
- readonly clock: () => number;
42
- readonly deliverEffect?: (message?: number) => Promise<void>;
43
- readonly indexPath?: string;
44
- readonly closesArtifact?: boolean;
45
- }
46
- type EndpointOptions = {
47
- readonly owner: Owner;
48
- readonly wakeAddress?: WakeAddress;
49
- };
50
- export declare function checkControl(control?: OperationControl): void;
51
- export declare function squareClock(env: NodeJS.ProcessEnv, clock?: () => number): () => number;
52
- export declare function failure(error: unknown, detail: OperationFailureDetail): Error;
53
- /** Foundational point-to-point endpoint and messaging resource over one artifact port. */
54
- export declare class Channel {
55
- readonly location: string;
56
- readonly artifact: ChannelArtifact;
57
- readonly clock: () => number;
58
- private readonly deliverEffect?;
59
- private readonly indexPath?;
60
- private readonly closesArtifact;
61
- private constructor();
62
- /** Internal composition point for upper resources; no wrapping square is involved. */
63
- static fromPort(init: ChannelPortInit): Channel;
64
- static open(input: ChannelOpenInput, control?: OperationControl): Promise<Channel>;
65
- static create(input: ChannelCreateInput, control?: OperationControl): Promise<Channel>;
66
- static inMemory(input?: Omit<ChannelCreateInput, 'path' | 'force'>): Channel;
67
- remember(owner: Owner): Promise<void>;
68
- /** Establish a new opaque endpoint generation, or take over the existing one explicitly. */
69
- attach(name: string, options: EndpointOptions & {
70
- readonly takeover?: boolean;
71
- }, control?: OperationControl): Promise<ChannelEndpoint>;
72
- /** Restore an exact standing endpoint without changing its generation. */
73
- reattach(name: string, { owner, wakeAddress }: Pick<EndpointOptions, 'owner' | 'wakeAddress'>, control?: OperationControl): Promise<ChannelEndpoint | null>;
74
- private reattachEndpoint;
75
- /** Select one attached endpoint held by an exact owner. */
76
- endpoint(name: string, { owner }: {
77
- readonly owner: Owner;
78
- }): Promise<ChannelEndpoint>;
79
- endpointsOf(owner: Owner): Promise<readonly ChannelEndpointHold[]>;
80
- listEndpoints(control?: OperationControl): Promise<readonly ChannelEndpointSummary[]>;
81
- detach(name: string, identity: {
82
- readonly owner: Owner;
83
- readonly generation: string;
84
- }): Promise<true | null>;
85
- cancelDeliveries(name: string, identity: {
86
- readonly owner: Owner;
87
- readonly generation: string;
88
- }, control?: OperationControl): Promise<boolean>;
89
- remove(name: string, identity: {
90
- readonly owner: Owner;
91
- readonly generation: string;
92
- }): Promise<boolean>;
93
- private held;
94
- /** Commit one message, then run the shared custody runner outside the transaction. */
95
- send(input: ChannelSendInput, control?: OperationControl): Promise<ChannelSendResult>;
96
- sendAs(authority: ChannelWriteAuthority, input: ChannelSendInput, control?: OperationControl): Promise<ChannelSendResult>;
97
- /** Shared post-commit custody runner. */
98
- deliver(message?: number): Promise<void>;
99
- history(query?: ChannelHistoryQuery, control?: OperationControl): Promise<ChannelHistoryResult>;
100
- close(): Promise<void>;
101
- }
102
- /** Captures one recipient endpoint through the channel's own storage, never a wrapped square. */
103
- export declare class ChannelEndpoint {
104
- private readonly channel;
105
- private readonly endpointFact;
106
- constructor(channel: Channel, endpointFact: EndpointFact);
107
- get name(): string;
108
- get generation(): string;
109
- get ref(): EndpointRef;
110
- private get storage();
111
- private get participant();
112
- pending(options?: ChannelPendingOptions, control?: OperationControl): Promise<ChannelPendingResult>;
113
- ack(ids: readonly MessageId[], control?: OperationControl): Promise<AckResult>;
114
- /** Select and consume matching unconsumed messages in one transaction. */
115
- receive(options?: ChannelPendingOptions, control?: OperationControl): Promise<ChannelReceiveResult>;
116
- deferDelivery(input: Readonly<{
117
- match: MetadataMatch;
118
- durationMs: number;
119
- }>, control?: OperationControl): Promise<DeliveryDeferral>;
120
- renewDeliveryDeferral(id: string, durationMs: number, control?: OperationControl): Promise<DeliveryDeferral | null>;
121
- releaseDeliveryDeferral(id: string, control?: OperationControl): Promise<boolean>;
122
- send(input: Omit<ChannelSendInput, 'from'>, control?: OperationControl): Promise<ChannelSendResult>;
123
- /** Standalone Channel retirement; it ends no Agora membership. */
124
- leave(control?: OperationControl): Promise<void>;
125
- }
126
- export { validateEndpointGeneration };