trellis-hgl-core 0.6.0-beta.18

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 (202) hide show
  1. package/LICENSE +235 -0
  2. package/dist/channel/api/assert.d.ts +3 -0
  3. package/dist/channel/api/assert.d.ts.map +1 -0
  4. package/dist/channel/api/assert.js +11 -0
  5. package/dist/channel/api/assert.js.map +1 -0
  6. package/dist/channel/api/context.d.ts +21 -0
  7. package/dist/channel/api/context.d.ts.map +1 -0
  8. package/dist/channel/api/context.js +99 -0
  9. package/dist/channel/api/context.js.map +1 -0
  10. package/dist/channel/api/create.d.ts +9 -0
  11. package/dist/channel/api/create.d.ts.map +1 -0
  12. package/dist/channel/api/create.js +104 -0
  13. package/dist/channel/api/create.js.map +1 -0
  14. package/dist/channel/api/inbox.d.ts +51 -0
  15. package/dist/channel/api/inbox.d.ts.map +1 -0
  16. package/dist/channel/api/inbox.js +176 -0
  17. package/dist/channel/api/inbox.js.map +1 -0
  18. package/dist/channel/api/interrupt.d.ts +31 -0
  19. package/dist/channel/api/interrupt.d.ts.map +1 -0
  20. package/dist/channel/api/interrupt.js +102 -0
  21. package/dist/channel/api/interrupt.js.map +1 -0
  22. package/dist/channel/api/post-thread.d.ts +14 -0
  23. package/dist/channel/api/post-thread.d.ts.map +1 -0
  24. package/dist/channel/api/post-thread.js +106 -0
  25. package/dist/channel/api/post-thread.js.map +1 -0
  26. package/dist/channel/api/read.d.ts +17 -0
  27. package/dist/channel/api/read.d.ts.map +1 -0
  28. package/dist/channel/api/read.js +44 -0
  29. package/dist/channel/api/read.js.map +1 -0
  30. package/dist/channel/api/resolve.d.ts +21 -0
  31. package/dist/channel/api/resolve.d.ts.map +1 -0
  32. package/dist/channel/api/resolve.js +28 -0
  33. package/dist/channel/api/resolve.js.map +1 -0
  34. package/dist/channel/api/runtime.d.ts +70 -0
  35. package/dist/channel/api/runtime.d.ts.map +1 -0
  36. package/dist/channel/api/runtime.js +11 -0
  37. package/dist/channel/api/runtime.js.map +1 -0
  38. package/dist/channel/api/send.d.ts +4 -0
  39. package/dist/channel/api/send.d.ts.map +1 -0
  40. package/dist/channel/api/send.js +44 -0
  41. package/dist/channel/api/send.js.map +1 -0
  42. package/dist/channel/api/spawn.d.ts +13 -0
  43. package/dist/channel/api/spawn.d.ts.map +1 -0
  44. package/dist/channel/api/spawn.js +54 -0
  45. package/dist/channel/api/spawn.js.map +1 -0
  46. package/dist/channel/api/title.d.ts +5 -0
  47. package/dist/channel/api/title.d.ts.map +1 -0
  48. package/dist/channel/api/title.js +40 -0
  49. package/dist/channel/api/title.js.map +1 -0
  50. package/dist/channel/api/types.d.ts +64 -0
  51. package/dist/channel/api/types.d.ts.map +1 -0
  52. package/dist/channel/api/types.js +2 -0
  53. package/dist/channel/api/types.js.map +1 -0
  54. package/dist/channel/api/watch-channels.d.ts +40 -0
  55. package/dist/channel/api/watch-channels.d.ts.map +1 -0
  56. package/dist/channel/api/watch-channels.js +143 -0
  57. package/dist/channel/api/watch-channels.js.map +1 -0
  58. package/dist/channel/api/watch.d.ts +11 -0
  59. package/dist/channel/api/watch.d.ts.map +1 -0
  60. package/dist/channel/api/watch.js +17 -0
  61. package/dist/channel/api/watch.js.map +1 -0
  62. package/dist/channel/api/workers.d.ts +69 -0
  63. package/dist/channel/api/workers.d.ts.map +1 -0
  64. package/dist/channel/api/workers.js +145 -0
  65. package/dist/channel/api/workers.js.map +1 -0
  66. package/dist/channel/index.d.ts +38 -0
  67. package/dist/channel/index.d.ts.map +1 -0
  68. package/dist/channel/index.js +23 -0
  69. package/dist/channel/index.js.map +1 -0
  70. package/dist/channel/internal/store/channel-metadata.d.ts +23 -0
  71. package/dist/channel/internal/store/channel-metadata.d.ts.map +1 -0
  72. package/dist/channel/internal/store/channel-metadata.js +94 -0
  73. package/dist/channel/internal/store/channel-metadata.js.map +1 -0
  74. package/dist/channel/internal/store/delivery.d.ts +27 -0
  75. package/dist/channel/internal/store/delivery.d.ts.map +1 -0
  76. package/dist/channel/internal/store/delivery.js +37 -0
  77. package/dist/channel/internal/store/delivery.js.map +1 -0
  78. package/dist/channel/internal/store/events.d.ts +203 -0
  79. package/dist/channel/internal/store/events.d.ts.map +1 -0
  80. package/dist/channel/internal/store/events.js +185 -0
  81. package/dist/channel/internal/store/events.js.map +1 -0
  82. package/dist/channel/internal/store/filter.d.ts +22 -0
  83. package/dist/channel/internal/store/filter.d.ts.map +1 -0
  84. package/dist/channel/internal/store/filter.js +78 -0
  85. package/dist/channel/internal/store/filter.js.map +1 -0
  86. package/dist/channel/internal/store/inbox.d.ts +17 -0
  87. package/dist/channel/internal/store/inbox.d.ts.map +1 -0
  88. package/dist/channel/internal/store/inbox.js +30 -0
  89. package/dist/channel/internal/store/inbox.js.map +1 -0
  90. package/dist/channel/internal/store/lock.d.ts +17 -0
  91. package/dist/channel/internal/store/lock.d.ts.map +1 -0
  92. package/dist/channel/internal/store/lock.js +88 -0
  93. package/dist/channel/internal/store/lock.js.map +1 -0
  94. package/dist/channel/internal/store/paths.d.ts +43 -0
  95. package/dist/channel/internal/store/paths.d.ts.map +1 -0
  96. package/dist/channel/internal/store/paths.js +233 -0
  97. package/dist/channel/internal/store/paths.js.map +1 -0
  98. package/dist/channel/internal/store/schema.d.ts +77 -0
  99. package/dist/channel/internal/store/schema.d.ts.map +1 -0
  100. package/dist/channel/internal/store/schema.js +127 -0
  101. package/dist/channel/internal/store/schema.js.map +1 -0
  102. package/dist/channel/internal/store/seq.d.ts +12 -0
  103. package/dist/channel/internal/store/seq.d.ts.map +1 -0
  104. package/dist/channel/internal/store/seq.js +133 -0
  105. package/dist/channel/internal/store/seq.js.map +1 -0
  106. package/dist/channel/internal/store/thread-state.d.ts +37 -0
  107. package/dist/channel/internal/store/thread-state.d.ts.map +1 -0
  108. package/dist/channel/internal/store/thread-state.js +206 -0
  109. package/dist/channel/internal/store/thread-state.js.map +1 -0
  110. package/dist/channel/internal/store/watch.d.ts +10 -0
  111. package/dist/channel/internal/store/watch.d.ts.map +1 -0
  112. package/dist/channel/internal/store/watch.js +122 -0
  113. package/dist/channel/internal/store/watch.js.map +1 -0
  114. package/dist/channel/internal/store/worker-state.d.ts +49 -0
  115. package/dist/channel/internal/store/worker-state.d.ts.map +1 -0
  116. package/dist/channel/internal/store/worker-state.js +207 -0
  117. package/dist/channel/internal/store/worker-state.js.map +1 -0
  118. package/dist/index.d.ts +3 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +7 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/mem/adapters/claude.d.ts +22 -0
  123. package/dist/mem/adapters/claude.d.ts.map +1 -0
  124. package/dist/mem/adapters/claude.js +252 -0
  125. package/dist/mem/adapters/claude.js.map +1 -0
  126. package/dist/mem/adapters/codex.d.ts +35 -0
  127. package/dist/mem/adapters/codex.d.ts.map +1 -0
  128. package/dist/mem/adapters/codex.js +222 -0
  129. package/dist/mem/adapters/codex.js.map +1 -0
  130. package/dist/mem/adapters/opencode.d.ts +19 -0
  131. package/dist/mem/adapters/opencode.d.ts.map +1 -0
  132. package/dist/mem/adapters/opencode.js +25 -0
  133. package/dist/mem/adapters/opencode.js.map +1 -0
  134. package/dist/mem/context.d.ts +23 -0
  135. package/dist/mem/context.d.ts.map +1 -0
  136. package/dist/mem/context.js +118 -0
  137. package/dist/mem/context.js.map +1 -0
  138. package/dist/mem/dialogue.d.ts +17 -0
  139. package/dist/mem/dialogue.d.ts.map +1 -0
  140. package/dist/mem/dialogue.js +51 -0
  141. package/dist/mem/dialogue.js.map +1 -0
  142. package/dist/mem/filter.d.ts +31 -0
  143. package/dist/mem/filter.d.ts.map +1 -0
  144. package/dist/mem/filter.js +70 -0
  145. package/dist/mem/filter.js.map +1 -0
  146. package/dist/mem/index.d.ts +18 -0
  147. package/dist/mem/index.d.ts.map +1 -0
  148. package/dist/mem/index.js +17 -0
  149. package/dist/mem/index.js.map +1 -0
  150. package/dist/mem/internal/jsonl.d.ts +35 -0
  151. package/dist/mem/internal/jsonl.d.ts.map +1 -0
  152. package/dist/mem/internal/jsonl.js +125 -0
  153. package/dist/mem/internal/jsonl.js.map +1 -0
  154. package/dist/mem/internal/paths.d.ts +18 -0
  155. package/dist/mem/internal/paths.d.ts.map +1 -0
  156. package/dist/mem/internal/paths.js +51 -0
  157. package/dist/mem/internal/paths.js.map +1 -0
  158. package/dist/mem/phase.d.ts +45 -0
  159. package/dist/mem/phase.d.ts.map +1 -0
  160. package/dist/mem/phase.js +220 -0
  161. package/dist/mem/phase.js.map +1 -0
  162. package/dist/mem/projects.d.ts +13 -0
  163. package/dist/mem/projects.d.ts.map +1 -0
  164. package/dist/mem/projects.js +37 -0
  165. package/dist/mem/projects.js.map +1 -0
  166. package/dist/mem/search.d.ts +32 -0
  167. package/dist/mem/search.d.ts.map +1 -0
  168. package/dist/mem/search.js +125 -0
  169. package/dist/mem/search.js.map +1 -0
  170. package/dist/mem/sessions.d.ts +37 -0
  171. package/dist/mem/sessions.d.ts.map +1 -0
  172. package/dist/mem/sessions.js +270 -0
  173. package/dist/mem/sessions.js.map +1 -0
  174. package/dist/mem/types.d.ts +176 -0
  175. package/dist/mem/types.d.ts.map +1 -0
  176. package/dist/mem/types.js +10 -0
  177. package/dist/mem/types.js.map +1 -0
  178. package/dist/task/index.d.ts +9 -0
  179. package/dist/task/index.d.ts.map +1 -0
  180. package/dist/task/index.js +9 -0
  181. package/dist/task/index.js.map +1 -0
  182. package/dist/task/paths.d.ts +37 -0
  183. package/dist/task/paths.d.ts.map +1 -0
  184. package/dist/task/paths.js +49 -0
  185. package/dist/task/paths.js.map +1 -0
  186. package/dist/task/phase.d.ts +27 -0
  187. package/dist/task/phase.d.ts.map +1 -0
  188. package/dist/task/phase.js +24 -0
  189. package/dist/task/phase.js.map +1 -0
  190. package/dist/task/records.d.ts +39 -0
  191. package/dist/task/records.d.ts.map +1 -0
  192. package/dist/task/records.js +89 -0
  193. package/dist/task/records.js.map +1 -0
  194. package/dist/task/schema.d.ts +77 -0
  195. package/dist/task/schema.d.ts.map +1 -0
  196. package/dist/task/schema.js +220 -0
  197. package/dist/task/schema.js.map +1 -0
  198. package/dist/testing/index.d.ts +2 -0
  199. package/dist/testing/index.d.ts.map +1 -0
  200. package/dist/testing/index.js +4 -0
  201. package/dist/testing/index.js.map +1 -0
  202. package/package.json +78 -0
@@ -0,0 +1,203 @@
1
+ import type { ChannelType, ContextEntry, ContextMutationAction, ContextTarget, EventOrigin, InboxPolicy, ThreadAction } from "./schema.js";
2
+ export type ChannelEventKind = "create" | "join" | "leave" | "message" | "thread" | "context" | "channel" | "spawned" | "killed" | "respawned" | "progress" | "done" | "error" | "waiting" | "awake" | "undeliverable" | "interrupt_requested" | "turn_started" | "turn_finished" | "interrupted" | "supervisor_warning";
3
+ export declare const CHANNEL_EVENT_KINDS: ReadonlySet<ChannelEventKind>;
4
+ export declare function parseChannelKind(v: string | undefined): ChannelEventKind | undefined;
5
+ /**
6
+ * Parse a CSV of event kinds into a typed list. Each member is validated
7
+ * through {@link parseChannelKind} so the single-value error message and
8
+ * whitelist remain the SOT. Returns `undefined` when input is undefined
9
+ * or contains no non-empty members.
10
+ */
11
+ export declare function parseChannelKinds(v: string | undefined): ChannelEventKind[] | undefined;
12
+ export interface BaseChannelEvent<K extends ChannelEventKind = ChannelEventKind> {
13
+ seq: number;
14
+ ts: string;
15
+ kind: K;
16
+ by: string;
17
+ to?: string | string[];
18
+ origin?: EventOrigin;
19
+ meta?: Record<string, unknown>;
20
+ [extra: string]: unknown;
21
+ }
22
+ export interface CreateChannelEvent extends BaseChannelEvent<"create"> {
23
+ cwd?: string;
24
+ task?: string;
25
+ /**
26
+ * Stored channel type. May carry the legacy `"thread"` / `"threads"`
27
+ * values on old event logs — `reduceChannelMetadata` does NOT upgrade
28
+ * those to `"forum"`; they project to `"chat"`.
29
+ */
30
+ type?: ChannelType | "thread" | "threads";
31
+ description?: string;
32
+ /** Canonical context entries. */
33
+ context?: ContextEntry[];
34
+ /**
35
+ * Legacy alias kept for compatibility with channels created before
36
+ * `context` was the canonical field.
37
+ *
38
+ * @deprecated
39
+ */
40
+ linkedContext?: ContextEntry[];
41
+ labels?: string[];
42
+ ephemeral?: boolean;
43
+ }
44
+ export interface MessageChannelEvent extends BaseChannelEvent<"message"> {
45
+ text?: string;
46
+ tag?: string;
47
+ }
48
+ export interface ThreadChannelEvent extends BaseChannelEvent<"thread"> {
49
+ action?: ThreadAction;
50
+ thread: string;
51
+ title?: string;
52
+ text?: string;
53
+ description?: string;
54
+ status?: string;
55
+ labels?: string[];
56
+ assignees?: string[];
57
+ summary?: string;
58
+ context?: ContextEntry[];
59
+ /** Legacy alias on old event logs. */
60
+ linkedContext?: ContextEntry[];
61
+ /** Rename target (action === "rename"). */
62
+ newThread?: string;
63
+ }
64
+ export interface ContextChannelEvent extends BaseChannelEvent<"context"> {
65
+ target: ContextTarget;
66
+ action: ContextMutationAction;
67
+ context: ContextEntry[];
68
+ thread?: string;
69
+ }
70
+ export interface ChannelMetadataEvent extends BaseChannelEvent<"channel"> {
71
+ action: "title";
72
+ title?: string | null;
73
+ }
74
+ export interface SpawnedChannelEvent extends BaseChannelEvent<"spawned"> {
75
+ as?: string;
76
+ provider?: string;
77
+ pid?: number;
78
+ agent?: string;
79
+ files?: string[];
80
+ manifests?: string[];
81
+ /**
82
+ * Inbox delivery policy selected at spawn. Durable worker state — the
83
+ * worker registry projects `spawned` events without this field as
84
+ * `explicitOnly`.
85
+ */
86
+ inboxPolicy?: InboxPolicy;
87
+ }
88
+ export interface KilledChannelEvent extends BaseChannelEvent<"killed"> {
89
+ reason?: string;
90
+ signal?: string;
91
+ /** Worker the kill targeted (when written by the CLI kill path). */
92
+ worker?: string;
93
+ timeout_ms?: number;
94
+ }
95
+ export interface DoneChannelEvent extends BaseChannelEvent<"done"> {
96
+ duration_ms?: number;
97
+ exit_code?: number;
98
+ synthesized?: boolean;
99
+ }
100
+ export interface ErrorChannelEvent extends BaseChannelEvent<"error"> {
101
+ message?: string;
102
+ provider?: string;
103
+ synthesized?: boolean;
104
+ exit_code?: number;
105
+ exit_signal?: string;
106
+ }
107
+ export interface ProgressChannelEvent extends BaseChannelEvent<"progress"> {
108
+ detail?: Record<string, unknown>;
109
+ }
110
+ /** Why a worker interrupt was requested. */
111
+ export type InterruptReason = "user" | "system" | "timeout" | "superseded";
112
+ /** How an interrupt was attempted by the worker runtime. */
113
+ export type InterruptMethod = "provider" | "stdin" | "signal" | "none";
114
+ /** Result of an interrupt attempt as reported by the worker runtime. */
115
+ export type InterruptOutcome = "interrupted" | "queued" | "unsupported" | "no-active-turn" | "failed";
116
+ /** Why a message could not be delivered to a targeted worker. */
117
+ export type UndeliverableReason = "worker-terminal" | "worker-unknown";
118
+ export interface UndeliverableChannelEvent extends BaseChannelEvent<"undeliverable"> {
119
+ targetWorker: string;
120
+ messageSeq: number;
121
+ reason: UndeliverableReason;
122
+ }
123
+ export interface InterruptRequestedChannelEvent extends BaseChannelEvent<"interrupt_requested"> {
124
+ worker: string;
125
+ turnId?: string;
126
+ reason?: InterruptReason;
127
+ message?: string;
128
+ }
129
+ export interface TurnStartedChannelEvent extends BaseChannelEvent<"turn_started"> {
130
+ worker: string;
131
+ /**
132
+ * Durable link to the channel `message` event seq that initiated this
133
+ * turn. The worker registry uses this as the "consumed" marker for
134
+ * pending-message projection.
135
+ */
136
+ inputSeq: number;
137
+ turnId?: string;
138
+ }
139
+ export interface TurnFinishedChannelEvent extends BaseChannelEvent<"turn_finished"> {
140
+ worker: string;
141
+ inputSeq?: number;
142
+ turnId?: string;
143
+ outcome?: "done" | "error" | "aborted";
144
+ }
145
+ export interface InterruptedChannelEvent extends BaseChannelEvent<"interrupted"> {
146
+ worker: string;
147
+ turnId?: string;
148
+ reason?: InterruptReason;
149
+ method: InterruptMethod;
150
+ outcome: InterruptOutcome;
151
+ message?: string;
152
+ }
153
+ /** Reason for a supervisor pre-terminal warning event. */
154
+ export type SupervisorWarningReason = "approaching_timeout";
155
+ /**
156
+ * Pre-timeout observability event. Emitted at most once per worker run.
157
+ * Not part of {@link MEANINGFUL_EVENT_KINDS} so plain `wait` does not
158
+ * wake on it; explicit `--kind supervisor_warning` does match.
159
+ */
160
+ export interface SupervisorWarningChannelEvent extends BaseChannelEvent<"supervisor_warning"> {
161
+ worker: string;
162
+ reason: SupervisorWarningReason;
163
+ timeout_ms: number;
164
+ remaining_ms: number;
165
+ }
166
+ export type GenericChannelEvent = BaseChannelEvent<Exclude<ChannelEventKind, "create" | "message" | "thread" | "context" | "channel" | "spawned" | "killed" | "done" | "error" | "progress" | "undeliverable" | "interrupt_requested" | "turn_started" | "turn_finished" | "interrupted" | "supervisor_warning">>;
167
+ export type ChannelEvent = CreateChannelEvent | MessageChannelEvent | ThreadChannelEvent | ContextChannelEvent | ChannelMetadataEvent | SpawnedChannelEvent | KilledChannelEvent | DoneChannelEvent | ErrorChannelEvent | ProgressChannelEvent | UndeliverableChannelEvent | InterruptRequestedChannelEvent | TurnStartedChannelEvent | TurnFinishedChannelEvent | InterruptedChannelEvent | SupervisorWarningChannelEvent | GenericChannelEvent;
168
+ export declare function isCreateEvent(ev: ChannelEvent): ev is CreateChannelEvent;
169
+ export declare function isThreadEvent(ev: ChannelEvent): ev is ThreadChannelEvent;
170
+ export declare function isContextEvent(ev: ChannelEvent): ev is ContextChannelEvent;
171
+ export declare function isChannelMetadataEvent(ev: ChannelEvent): ev is ChannelMetadataEvent;
172
+ export declare function ensureChannelDir(name: string, project?: string): Promise<string>;
173
+ /**
174
+ * Read the last committed seq for a channel. Uses the same reconcile
175
+ * path as `appendEvent` so callers that need a snapshot do not see a
176
+ * stale sidecar.
177
+ */
178
+ export declare function readLastSeq(name: string, project?: string): Promise<number>;
179
+ export interface AppendablePartial {
180
+ kind: ChannelEventKind;
181
+ by: string;
182
+ ts?: string;
183
+ [extra: string]: unknown;
184
+ }
185
+ /**
186
+ * Cursor pagination options for {@link readChannelEvents}. When no field
187
+ * is set the reader returns every event (compatibility default).
188
+ */
189
+ export interface ReadChannelEventsPagination {
190
+ /** Return events with `seq > afterSeq`, ascending. */
191
+ afterSeq?: number;
192
+ /** Return events with `seq < beforeSeq`, ascending. */
193
+ beforeSeq?: number;
194
+ /**
195
+ * Cap the page size. With a cursor, caps the page. Without a cursor,
196
+ * returns the latest N events in ascending seq order.
197
+ */
198
+ limit?: number;
199
+ }
200
+ /** Default page size applied when a cursor is present but `limit` is not. */
201
+ export declare const DEFAULT_CURSOR_PAGE_SIZE = 200;
202
+ export declare function readChannelEvents(name: string, project?: string, pagination?: ReadChannelEventsPagination): Promise<ChannelEvent[]>;
203
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/channel/internal/store/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import { withLock } from "./lock.js";
4
+ import { channelDir, eventsPath, lockPath, seqSidecarPath, } from "./paths.js";
5
+ import { reconcileSeq, writeSidecar } from "./seq.js";
6
+ import { parseEventOrigin } from "./schema.js";
7
+ export const CHANNEL_EVENT_KINDS = new Set([
8
+ "create",
9
+ "join",
10
+ "leave",
11
+ "message",
12
+ "thread",
13
+ "context",
14
+ "channel",
15
+ "spawned",
16
+ "killed",
17
+ "respawned",
18
+ "progress",
19
+ "done",
20
+ "error",
21
+ "waiting",
22
+ "awake",
23
+ "undeliverable",
24
+ "interrupt_requested",
25
+ "turn_started",
26
+ "turn_finished",
27
+ "interrupted",
28
+ "supervisor_warning",
29
+ ]);
30
+ export function parseChannelKind(v) {
31
+ if (v === undefined)
32
+ return undefined;
33
+ if (!CHANNEL_EVENT_KINDS.has(v)) {
34
+ throw new Error(`Invalid --kind '${v}'. Must be one of: ${[...CHANNEL_EVENT_KINDS].join(", ")}`);
35
+ }
36
+ return v;
37
+ }
38
+ /**
39
+ * Parse a CSV of event kinds into a typed list. Each member is validated
40
+ * through {@link parseChannelKind} so the single-value error message and
41
+ * whitelist remain the SOT. Returns `undefined` when input is undefined
42
+ * or contains no non-empty members.
43
+ */
44
+ export function parseChannelKinds(v) {
45
+ if (v === undefined)
46
+ return undefined;
47
+ const parts = v
48
+ .split(",")
49
+ .map((s) => s.trim())
50
+ .filter((s) => s.length > 0);
51
+ if (parts.length === 0)
52
+ return undefined;
53
+ const out = [];
54
+ const seen = new Set();
55
+ for (const part of parts) {
56
+ const parsed = parseChannelKind(part);
57
+ if (parsed === undefined)
58
+ continue;
59
+ if (seen.has(parsed))
60
+ continue;
61
+ seen.add(parsed);
62
+ out.push(parsed);
63
+ }
64
+ return out;
65
+ }
66
+ export function isCreateEvent(ev) {
67
+ return ev.kind === "create";
68
+ }
69
+ export function isThreadEvent(ev) {
70
+ return ev.kind === "thread" && typeof ev.thread === "string";
71
+ }
72
+ export function isContextEvent(ev) {
73
+ return ev.kind === "context";
74
+ }
75
+ export function isChannelMetadataEvent(ev) {
76
+ return ev.kind === "channel";
77
+ }
78
+ export async function ensureChannelDir(name, project) {
79
+ const dir = channelDir(name, project);
80
+ await fsp.mkdir(dir, { recursive: true, mode: 0o700 });
81
+ return dir;
82
+ }
83
+ /**
84
+ * Read the last committed seq for a channel. Uses the same reconcile
85
+ * path as `appendEvent` so callers that need a snapshot do not see a
86
+ * stale sidecar.
87
+ */
88
+ export async function readLastSeq(name, project) {
89
+ const file = eventsPath(name, project);
90
+ if (!fs.existsSync(file))
91
+ return 0;
92
+ return reconcileSeq(file, seqSidecarPath(name, project));
93
+ }
94
+ /**
95
+ * Append a channel event atomically under the channel lock.
96
+ *
97
+ * Internally reconciles the `.seq` sidecar with the JSONL tail to avoid
98
+ * the legacy full-scan path. Sidecar repair happens automatically on
99
+ * corruption, missing file, or sidecar drift in either direction.
100
+ *
101
+ * @internal Trellis CLI-internal write primitive — downstream consumers
102
+ * must go through the typed mutation APIs (`createChannel`,
103
+ * `sendMessage`, etc.).
104
+ */
105
+ export async function appendEvent(name, partial, project) {
106
+ validateEventBase(partial);
107
+ await ensureChannelDir(name, project);
108
+ const jsonl = eventsPath(name, project);
109
+ const sidecar = seqSidecarPath(name, project);
110
+ return withLock(lockPath(name, project), async () => {
111
+ const lastSeq = await reconcileSeq(jsonl, sidecar);
112
+ const event = {
113
+ ...partial,
114
+ seq: lastSeq + 1,
115
+ ts: partial.ts ?? new Date().toISOString(),
116
+ };
117
+ await fsp.appendFile(jsonl, JSON.stringify(event) + "\n", "utf-8");
118
+ await writeSidecar(sidecar, event.seq);
119
+ return event;
120
+ });
121
+ }
122
+ function validateEventBase(partial) {
123
+ const origin = partial.origin;
124
+ if (origin !== undefined) {
125
+ parseEventOrigin(typeof origin === "string" ? origin : String(origin));
126
+ }
127
+ const meta = partial.meta;
128
+ if (meta !== undefined &&
129
+ (meta === null || typeof meta !== "object" || Array.isArray(meta))) {
130
+ throw new Error("meta must be a plain JSON object");
131
+ }
132
+ }
133
+ /** Default page size applied when a cursor is present but `limit` is not. */
134
+ export const DEFAULT_CURSOR_PAGE_SIZE = 200;
135
+ function readAllEvents(file) {
136
+ if (!fs.existsSync(file))
137
+ return [];
138
+ const text = fs.readFileSync(file, "utf-8");
139
+ const events = [];
140
+ for (const line of text.split("\n")) {
141
+ if (!line.trim())
142
+ continue;
143
+ try {
144
+ events.push(JSON.parse(line));
145
+ }
146
+ catch {
147
+ continue;
148
+ }
149
+ }
150
+ return events;
151
+ }
152
+ export async function readChannelEvents(name, project, pagination) {
153
+ const file = eventsPath(name, project);
154
+ const all = readAllEvents(file);
155
+ if (!pagination ||
156
+ (pagination.afterSeq === undefined &&
157
+ pagination.beforeSeq === undefined &&
158
+ pagination.limit === undefined)) {
159
+ return all;
160
+ }
161
+ const { afterSeq, beforeSeq, limit } = pagination;
162
+ if (afterSeq !== undefined && beforeSeq !== undefined) {
163
+ throw new Error("readChannelEvents: pass only one of afterSeq / beforeSeq");
164
+ }
165
+ if (limit !== undefined && (!Number.isInteger(limit) || limit < 0)) {
166
+ throw new Error("readChannelEvents: limit must be a non-negative integer");
167
+ }
168
+ // Events are appended in monotonic seq order; keep that as the contract.
169
+ if (afterSeq !== undefined) {
170
+ const page = all.filter((ev) => ev.seq > afterSeq);
171
+ const cap = limit ?? DEFAULT_CURSOR_PAGE_SIZE;
172
+ return page.slice(0, cap);
173
+ }
174
+ if (beforeSeq !== undefined) {
175
+ const page = all.filter((ev) => ev.seq < beforeSeq);
176
+ const cap = limit ?? DEFAULT_CURSOR_PAGE_SIZE;
177
+ // Newest page first internally; return ascending for stable consumers.
178
+ return page.slice(Math.max(0, page.length - cap));
179
+ }
180
+ // limit only: latest N events in ascending seq order.
181
+ return limit !== undefined
182
+ ? all.slice(Math.max(0, all.length - limit))
183
+ : all;
184
+ }
185
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/channel/internal/store/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ChannelEvent, type ChannelEventKind } from "./events.js";
2
+ import type { ThreadAction } from "./schema.js";
3
+ export declare const MEANINGFUL_EVENT_KINDS: ReadonlySet<ChannelEventKind>;
4
+ export interface ChannelEventFilter {
5
+ from?: string[];
6
+ /**
7
+ * Restrict to one kind (legacy single value) or any of a list (OR
8
+ * semantics). An explicit kind constraint bypasses the default
9
+ * meaningful-kinds filter so non-meaningful kinds can still match
10
+ * when requested directly (e.g. `supervisor_warning`).
11
+ */
12
+ kind?: ChannelEventKind | readonly ChannelEventKind[];
13
+ tag?: string;
14
+ to?: string;
15
+ self?: string;
16
+ includeProgress?: boolean;
17
+ includeNonMeaningful?: boolean;
18
+ thread?: string;
19
+ action?: ThreadAction;
20
+ }
21
+ export declare function matchesEventFilter(ev: ChannelEvent, filter: ChannelEventFilter): boolean;
22
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/channel/internal/store/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,gBAAgB,CAazC,CAAC;AAEzB,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,EAAE,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAaD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAoDT"}
@@ -0,0 +1,78 @@
1
+ import { isThreadEvent, } from "./events.js";
2
+ export const MEANINGFUL_EVENT_KINDS = new Set([
3
+ "create",
4
+ "join",
5
+ "leave",
6
+ "message",
7
+ "thread",
8
+ "context",
9
+ "channel",
10
+ "spawned",
11
+ "killed",
12
+ "respawned",
13
+ "done",
14
+ "error",
15
+ ]);
16
+ function matchesKind(evKind, filterKind) {
17
+ if (filterKind === undefined)
18
+ return true;
19
+ if (typeof filterKind === "string")
20
+ return evKind === filterKind;
21
+ // Empty array = no kind constraint (treat as if filter.kind was undefined).
22
+ if (filterKind.length === 0)
23
+ return true;
24
+ return filterKind.includes(evKind);
25
+ }
26
+ export function matchesEventFilter(ev, filter) {
27
+ if (filter.self && ev.by === filter.self)
28
+ return false;
29
+ // An explicit kind filter is itself the caller's "I know what I want"
30
+ // signal — bypass the default meaningful-kinds gate so non-meaningful
31
+ // kinds like `supervisor_warning` remain matchable when requested.
32
+ const hasExplicitKind = filter.kind !== undefined &&
33
+ (typeof filter.kind === "string" || filter.kind.length > 0);
34
+ if (!filter.includeNonMeaningful &&
35
+ !hasExplicitKind &&
36
+ !MEANINGFUL_EVENT_KINDS.has(ev.kind)) {
37
+ return false;
38
+ }
39
+ if (!filter.includeProgress && ev.kind === "progress")
40
+ return false;
41
+ if (!matchesKind(ev.kind, filter.kind))
42
+ return false;
43
+ if (filter.thread !== undefined) {
44
+ if (!isThreadEvent(ev))
45
+ return false;
46
+ if (ev.thread !== filter.thread)
47
+ return false;
48
+ }
49
+ if (filter.action !== undefined) {
50
+ if (!isThreadEvent(ev))
51
+ return false;
52
+ if (ev.action !== filter.action)
53
+ return false;
54
+ }
55
+ if (filter.from && filter.from.length > 0) {
56
+ if (!filter.from.includes(ev.by))
57
+ return false;
58
+ }
59
+ if (filter.tag !== undefined && ev.tag !== filter.tag) {
60
+ return false;
61
+ }
62
+ if (filter.to) {
63
+ const evTo = ev.to;
64
+ if (filter.to === "exclusive") {
65
+ if (!evTo)
66
+ return false;
67
+ }
68
+ else {
69
+ if (!evTo)
70
+ return true;
71
+ if (Array.isArray(evTo))
72
+ return evTo.includes(filter.to);
73
+ return evTo === filter.to;
74
+ }
75
+ }
76
+ return true;
77
+ }
78
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/channel/internal/store/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ChannelEvent, MessageChannelEvent } from "./events.js";
2
+ import type { InboxPolicy } from "./schema.js";
3
+ /** Default inbox policy applied to workers / spawned events without one. */
4
+ export declare const DEFAULT_INBOX_POLICY: InboxPolicy;
5
+ /**
6
+ * Decide whether a channel `message` event should be delivered to a
7
+ * worker's inbox under the given policy. Single source of truth shared
8
+ * by the worker registry reducer, the delivery helper, and the CLI
9
+ * supervisor inbox watcher.
10
+ *
11
+ * - `explicitOnly`: deliver only when `to` targets the worker.
12
+ * - `broadcastAndExplicit`: also deliver broadcast messages (no `to`).
13
+ *
14
+ * A worker never consumes its own message events.
15
+ */
16
+ export declare function matchesInboxPolicy(ev: ChannelEvent, workerId: string, policy: InboxPolicy): ev is MessageChannelEvent;
17
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../src/channel/internal/store/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,WAA4B,CAAC;AAOhE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAClB,EAAE,IAAI,mBAAmB,CAO3B"}
@@ -0,0 +1,30 @@
1
+ /** Default inbox policy applied to workers / spawned events without one. */
2
+ export const DEFAULT_INBOX_POLICY = "explicitOnly";
3
+ function toList(to) {
4
+ if (to === undefined)
5
+ return [];
6
+ return Array.isArray(to) ? to : [to];
7
+ }
8
+ /**
9
+ * Decide whether a channel `message` event should be delivered to a
10
+ * worker's inbox under the given policy. Single source of truth shared
11
+ * by the worker registry reducer, the delivery helper, and the CLI
12
+ * supervisor inbox watcher.
13
+ *
14
+ * - `explicitOnly`: deliver only when `to` targets the worker.
15
+ * - `broadcastAndExplicit`: also deliver broadcast messages (no `to`).
16
+ *
17
+ * A worker never consumes its own message events.
18
+ */
19
+ export function matchesInboxPolicy(ev, workerId, policy) {
20
+ if (ev.kind !== "message")
21
+ return false;
22
+ if (ev.by === workerId)
23
+ return false;
24
+ const targets = toList(ev.to);
25
+ if (targets.length > 0)
26
+ return targets.includes(workerId);
27
+ // Broadcast (no `to`).
28
+ return policy === "broadcastAndExplicit";
29
+ }
30
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../src/channel/internal/store/inbox.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAgB,cAAc,CAAC;AAEhE,SAAS,MAAM,CAAC,EAAiC;IAC/C,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAgB,EAChB,QAAgB,EAChB,MAAmB;IAEnB,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1D,uBAAuB;IACvB,OAAO,MAAM,KAAK,sBAAsB,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * File-based advisory lock primitive.
3
+ *
4
+ * Uses `open(path, "wx")` (O_EXCL) for atomic creation across processes.
5
+ * Each lockfile stores the holder's pid for forensic + stale-lock
6
+ * recovery. If a lock file exists but the owning pid is no longer alive,
7
+ * the next `acquireLock` will steal it.
8
+ */
9
+ interface AcquireOptions {
10
+ retryIntervalMs?: number;
11
+ maxWaitMs?: number;
12
+ }
13
+ export declare function acquireLock(lockFile: string, opts?: AcquireOptions): Promise<void>;
14
+ export declare function releaseLock(lockFile: string): void;
15
+ export declare function withLock<T>(lockFile: string, fn: () => Promise<T> | T, opts?: AcquireOptions): Promise<T>;
16
+ export {};
17
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../../../src/channel/internal/store/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,UAAU,cAAc;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASlD;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC,CAOZ"}