@blxzer/cursor-trellis-core 0.5.0-beta.4 → 0.5.0

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 (197) hide show
  1. package/channel.d.ts +1 -0
  2. package/channel.js +1 -0
  3. package/index.d.ts +1 -0
  4. package/index.js +1 -0
  5. package/package.json +27 -47
  6. package/task.d.ts +1 -0
  7. package/task.js +1 -0
  8. package/testing.d.ts +1 -0
  9. package/testing.js +1 -0
  10. package/dist/channel/api/assert.d.ts +0 -3
  11. package/dist/channel/api/assert.d.ts.map +0 -1
  12. package/dist/channel/api/assert.js +0 -11
  13. package/dist/channel/api/assert.js.map +0 -1
  14. package/dist/channel/api/context.d.ts +0 -21
  15. package/dist/channel/api/context.d.ts.map +0 -1
  16. package/dist/channel/api/context.js +0 -99
  17. package/dist/channel/api/context.js.map +0 -1
  18. package/dist/channel/api/create.d.ts +0 -9
  19. package/dist/channel/api/create.d.ts.map +0 -1
  20. package/dist/channel/api/create.js +0 -104
  21. package/dist/channel/api/create.js.map +0 -1
  22. package/dist/channel/api/inbox.d.ts +0 -51
  23. package/dist/channel/api/inbox.d.ts.map +0 -1
  24. package/dist/channel/api/inbox.js +0 -176
  25. package/dist/channel/api/inbox.js.map +0 -1
  26. package/dist/channel/api/interrupt.d.ts +0 -31
  27. package/dist/channel/api/interrupt.d.ts.map +0 -1
  28. package/dist/channel/api/interrupt.js +0 -102
  29. package/dist/channel/api/interrupt.js.map +0 -1
  30. package/dist/channel/api/post-thread.d.ts +0 -14
  31. package/dist/channel/api/post-thread.d.ts.map +0 -1
  32. package/dist/channel/api/post-thread.js +0 -109
  33. package/dist/channel/api/post-thread.js.map +0 -1
  34. package/dist/channel/api/read.d.ts +0 -17
  35. package/dist/channel/api/read.d.ts.map +0 -1
  36. package/dist/channel/api/read.js +0 -44
  37. package/dist/channel/api/read.js.map +0 -1
  38. package/dist/channel/api/resolve.d.ts +0 -21
  39. package/dist/channel/api/resolve.d.ts.map +0 -1
  40. package/dist/channel/api/resolve.js +0 -28
  41. package/dist/channel/api/resolve.js.map +0 -1
  42. package/dist/channel/api/runtime.d.ts +0 -70
  43. package/dist/channel/api/runtime.d.ts.map +0 -1
  44. package/dist/channel/api/runtime.js +0 -11
  45. package/dist/channel/api/runtime.js.map +0 -1
  46. package/dist/channel/api/send.d.ts +0 -4
  47. package/dist/channel/api/send.d.ts.map +0 -1
  48. package/dist/channel/api/send.js +0 -52
  49. package/dist/channel/api/send.js.map +0 -1
  50. package/dist/channel/api/spawn.d.ts +0 -13
  51. package/dist/channel/api/spawn.d.ts.map +0 -1
  52. package/dist/channel/api/spawn.js +0 -54
  53. package/dist/channel/api/spawn.js.map +0 -1
  54. package/dist/channel/api/title.d.ts +0 -5
  55. package/dist/channel/api/title.d.ts.map +0 -1
  56. package/dist/channel/api/title.js +0 -40
  57. package/dist/channel/api/title.js.map +0 -1
  58. package/dist/channel/api/types.d.ts +0 -65
  59. package/dist/channel/api/types.d.ts.map +0 -1
  60. package/dist/channel/api/types.js +0 -2
  61. package/dist/channel/api/types.js.map +0 -1
  62. package/dist/channel/api/watch-channels.d.ts +0 -40
  63. package/dist/channel/api/watch-channels.d.ts.map +0 -1
  64. package/dist/channel/api/watch-channels.js +0 -143
  65. package/dist/channel/api/watch-channels.js.map +0 -1
  66. package/dist/channel/api/watch.d.ts +0 -11
  67. package/dist/channel/api/watch.d.ts.map +0 -1
  68. package/dist/channel/api/watch.js +0 -17
  69. package/dist/channel/api/watch.js.map +0 -1
  70. package/dist/channel/api/workers.d.ts +0 -69
  71. package/dist/channel/api/workers.d.ts.map +0 -1
  72. package/dist/channel/api/workers.js +0 -145
  73. package/dist/channel/api/workers.js.map +0 -1
  74. package/dist/channel/index.d.ts +0 -38
  75. package/dist/channel/index.d.ts.map +0 -1
  76. package/dist/channel/index.js +0 -23
  77. package/dist/channel/index.js.map +0 -1
  78. package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
  79. package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
  80. package/dist/channel/internal/store/channel-metadata.js +0 -94
  81. package/dist/channel/internal/store/channel-metadata.js.map +0 -1
  82. package/dist/channel/internal/store/delivery.d.ts +0 -27
  83. package/dist/channel/internal/store/delivery.d.ts.map +0 -1
  84. package/dist/channel/internal/store/delivery.js +0 -37
  85. package/dist/channel/internal/store/delivery.js.map +0 -1
  86. package/dist/channel/internal/store/events.d.ts +0 -215
  87. package/dist/channel/internal/store/events.d.ts.map +0 -1
  88. package/dist/channel/internal/store/events.js +0 -206
  89. package/dist/channel/internal/store/events.js.map +0 -1
  90. package/dist/channel/internal/store/filter.d.ts +0 -21
  91. package/dist/channel/internal/store/filter.d.ts.map +0 -1
  92. package/dist/channel/internal/store/filter.js +0 -75
  93. package/dist/channel/internal/store/filter.js.map +0 -1
  94. package/dist/channel/internal/store/inbox.d.ts +0 -17
  95. package/dist/channel/internal/store/inbox.d.ts.map +0 -1
  96. package/dist/channel/internal/store/inbox.js +0 -30
  97. package/dist/channel/internal/store/inbox.js.map +0 -1
  98. package/dist/channel/internal/store/lock.d.ts +0 -17
  99. package/dist/channel/internal/store/lock.d.ts.map +0 -1
  100. package/dist/channel/internal/store/lock.js +0 -88
  101. package/dist/channel/internal/store/lock.js.map +0 -1
  102. package/dist/channel/internal/store/paths.d.ts +0 -43
  103. package/dist/channel/internal/store/paths.d.ts.map +0 -1
  104. package/dist/channel/internal/store/paths.js +0 -233
  105. package/dist/channel/internal/store/paths.js.map +0 -1
  106. package/dist/channel/internal/store/schema.d.ts +0 -77
  107. package/dist/channel/internal/store/schema.d.ts.map +0 -1
  108. package/dist/channel/internal/store/schema.js +0 -127
  109. package/dist/channel/internal/store/schema.js.map +0 -1
  110. package/dist/channel/internal/store/seq.d.ts +0 -12
  111. package/dist/channel/internal/store/seq.d.ts.map +0 -1
  112. package/dist/channel/internal/store/seq.js +0 -133
  113. package/dist/channel/internal/store/seq.js.map +0 -1
  114. package/dist/channel/internal/store/thread-state.d.ts +0 -37
  115. package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
  116. package/dist/channel/internal/store/thread-state.js +0 -206
  117. package/dist/channel/internal/store/thread-state.js.map +0 -1
  118. package/dist/channel/internal/store/watch.d.ts +0 -10
  119. package/dist/channel/internal/store/watch.d.ts.map +0 -1
  120. package/dist/channel/internal/store/watch.js +0 -122
  121. package/dist/channel/internal/store/watch.js.map +0 -1
  122. package/dist/channel/internal/store/worker-state.d.ts +0 -56
  123. package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
  124. package/dist/channel/internal/store/worker-state.js +0 -220
  125. package/dist/channel/internal/store/worker-state.js.map +0 -1
  126. package/dist/index.d.ts +0 -3
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -7
  129. package/dist/index.js.map +0 -1
  130. package/dist/task/adapter-middleware.d.ts +0 -118
  131. package/dist/task/adapter-middleware.d.ts.map +0 -1
  132. package/dist/task/adapter-middleware.js +0 -508
  133. package/dist/task/adapter-middleware.js.map +0 -1
  134. package/dist/task/contract-migrate.d.ts +0 -29
  135. package/dist/task/contract-migrate.d.ts.map +0 -1
  136. package/dist/task/contract-migrate.js +0 -207
  137. package/dist/task/contract-migrate.js.map +0 -1
  138. package/dist/task/full-quality.d.ts +0 -89
  139. package/dist/task/full-quality.d.ts.map +0 -1
  140. package/dist/task/full-quality.js +0 -379
  141. package/dist/task/full-quality.js.map +0 -1
  142. package/dist/task/index.d.ts +0 -31
  143. package/dist/task/index.d.ts.map +0 -1
  144. package/dist/task/index.js +0 -20
  145. package/dist/task/index.js.map +0 -1
  146. package/dist/task/kernel-cli.d.ts +0 -44
  147. package/dist/task/kernel-cli.d.ts.map +0 -1
  148. package/dist/task/kernel-cli.js +0 -287
  149. package/dist/task/kernel-cli.js.map +0 -1
  150. package/dist/task/kernel-contract.d.ts +0 -113
  151. package/dist/task/kernel-contract.d.ts.map +0 -1
  152. package/dist/task/kernel-contract.js +0 -332
  153. package/dist/task/kernel-contract.js.map +0 -1
  154. package/dist/task/kernel-store.d.ts +0 -99
  155. package/dist/task/kernel-store.d.ts.map +0 -1
  156. package/dist/task/kernel-store.js +0 -735
  157. package/dist/task/kernel-store.js.map +0 -1
  158. package/dist/task/kernel-surface.d.ts +0 -39
  159. package/dist/task/kernel-surface.d.ts.map +0 -1
  160. package/dist/task/kernel-surface.js +0 -73
  161. package/dist/task/kernel-surface.js.map +0 -1
  162. package/dist/task/lite-context-pack.d.ts +0 -71
  163. package/dist/task/lite-context-pack.d.ts.map +0 -1
  164. package/dist/task/lite-context-pack.js +0 -175
  165. package/dist/task/lite-context-pack.js.map +0 -1
  166. package/dist/task/ondemand-topology.d.ts +0 -108
  167. package/dist/task/ondemand-topology.d.ts.map +0 -1
  168. package/dist/task/ondemand-topology.js +0 -453
  169. package/dist/task/ondemand-topology.js.map +0 -1
  170. package/dist/task/p36-artifact-migrate.d.ts +0 -61
  171. package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
  172. package/dist/task/p36-artifact-migrate.js +0 -336
  173. package/dist/task/p36-artifact-migrate.js.map +0 -1
  174. package/dist/task/p36-wave-c.d.ts +0 -39
  175. package/dist/task/p36-wave-c.d.ts.map +0 -1
  176. package/dist/task/p36-wave-c.js +0 -100
  177. package/dist/task/p36-wave-c.js.map +0 -1
  178. package/dist/task/paths.d.ts +0 -37
  179. package/dist/task/paths.d.ts.map +0 -1
  180. package/dist/task/paths.js +0 -49
  181. package/dist/task/paths.js.map +0 -1
  182. package/dist/task/phase.d.ts +0 -27
  183. package/dist/task/phase.d.ts.map +0 -1
  184. package/dist/task/phase.js +0 -24
  185. package/dist/task/phase.js.map +0 -1
  186. package/dist/task/records.d.ts +0 -48
  187. package/dist/task/records.d.ts.map +0 -1
  188. package/dist/task/records.js +0 -100
  189. package/dist/task/records.js.map +0 -1
  190. package/dist/task/schema.d.ts +0 -77
  191. package/dist/task/schema.d.ts.map +0 -1
  192. package/dist/task/schema.js +0 -220
  193. package/dist/task/schema.js.map +0 -1
  194. package/dist/testing/index.d.ts +0 -2
  195. package/dist/testing/index.d.ts.map +0 -1
  196. package/dist/testing/index.js +0 -4
  197. package/dist/testing/index.js.map +0 -1
@@ -1,54 +0,0 @@
1
- import { appendEvent, readChannelEvents, } from "../internal/store/events.js";
2
- import { DEFAULT_INBOX_POLICY } from "../internal/store/inbox.js";
3
- import { reduceWorkerRegistry, } from "../internal/store/worker-state.js";
4
- import { resolveChannelRef } from "./resolve.js";
5
- /**
6
- * Spawn a worker through a provider-injected runtime.
7
- *
8
- * Core resolves the channel, asks the injected runtime to start the
9
- * worker process, appends the durable `spawned` event (with runtime
10
- * metadata and the selected inbox policy), and returns the projected
11
- * {@link WorkerState}. The runtime owns process launch details; core
12
- * owns event writes and state projection.
13
- */
14
- export async function spawnWorker(input, runtime) {
15
- const ref = resolveChannelRef({
16
- channel: input.channel,
17
- ...(input.scope !== undefined ? { scope: input.scope } : {}),
18
- ...(input.projectKey !== undefined
19
- ? { projectKey: input.projectKey }
20
- : {}),
21
- ...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
22
- });
23
- const startInput = {
24
- channel: ref,
25
- workerId: input.workerId,
26
- cwd: input.cwd,
27
- systemPrompt: input.systemPrompt,
28
- ...(input.model !== undefined ? { model: input.model } : {}),
29
- ...(input.resume !== undefined ? { resume: input.resume } : {}),
30
- };
31
- const handle = await runtime.start(startInput);
32
- const inboxPolicy = input.inboxPolicy ?? DEFAULT_INBOX_POLICY;
33
- await appendEvent(input.channel, {
34
- kind: "spawned",
35
- by: input.by,
36
- as: input.workerId,
37
- inboxPolicy,
38
- ...(input.provider ?? handle.provider
39
- ? { provider: input.provider ?? handle.provider }
40
- : {}),
41
- ...(handle.pid !== undefined ? { pid: handle.pid } : {}),
42
- ...(input.agent !== undefined ? { agent: input.agent } : {}),
43
- ...(input.meta !== undefined ? { meta: input.meta } : {}),
44
- }, ref.project);
45
- const events = await readChannelEvents(input.channel, ref.project);
46
- const registry = reduceWorkerRegistry(events, ref);
47
- const state = registry.workers.find((w) => w.workerId === input.workerId);
48
- if (!state) {
49
- // Should never happen — we just appended the spawned event.
50
- throw new Error(`spawnWorker: worker '${input.workerId}' missing from registry after spawn`);
51
- }
52
- return state;
53
- }
54
- //# sourceMappingURL=spawn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/channel/api/spawn.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { type ChannelMetadataEvent } from "../internal/store/events.js";
2
- import type { ClearChannelTitleOptions, SetChannelTitleOptions } from "./types.js";
3
- export declare function setChannelTitle(opts: SetChannelTitleOptions): Promise<ChannelMetadataEvent>;
4
- export declare function clearChannelTitle(opts: ClearChannelTitleOptions): Promise<ChannelMetadataEvent>;
5
- //# sourceMappingURL=title.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../src/channel/api/title.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAuB/B;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAoB/B"}
@@ -1,40 +0,0 @@
1
- import { appendEvent, } from "../internal/store/events.js";
2
- import { resolveChannelRef } from "./resolve.js";
3
- export async function setChannelTitle(opts) {
4
- if (!opts.title || opts.title.length === 0) {
5
- throw new Error("Channel title must not be empty (use clearChannelTitle)");
6
- }
7
- const ref = resolveChannelRef({
8
- channel: opts.channel,
9
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
10
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
11
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
12
- });
13
- const event = await appendEvent(opts.channel, {
14
- kind: "channel",
15
- action: "title",
16
- by: opts.by,
17
- title: opts.title,
18
- ...(opts.origin !== undefined ? { origin: opts.origin } : {}),
19
- ...(opts.meta !== undefined ? { meta: opts.meta } : {}),
20
- }, ref.project);
21
- return event;
22
- }
23
- export async function clearChannelTitle(opts) {
24
- const ref = resolveChannelRef({
25
- channel: opts.channel,
26
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
27
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
28
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
29
- });
30
- const event = await appendEvent(opts.channel, {
31
- kind: "channel",
32
- action: "title",
33
- by: opts.by,
34
- title: null,
35
- ...(opts.origin !== undefined ? { origin: opts.origin } : {}),
36
- ...(opts.meta !== undefined ? { meta: opts.meta } : {}),
37
- }, ref.project);
38
- return event;
39
- }
40
- //# sourceMappingURL=title.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/channel/api/title.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAEZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA4B;IAE5B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,IAAI,CAAC,OAAO,EACZ;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,OAAO;QACf,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,EACD,GAAG,CAAC,OAAO,CACZ,CAAC;IACF,OAAO,KAA6B,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA8B;IAE9B,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,IAAI,CAAC,OAAO,EACZ;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,OAAO;QACf,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI;QACX,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,EACD,GAAG,CAAC,OAAO,CACZ,CAAC;IACF,OAAO,KAA6B,CAAC;AACvC,CAAC"}
@@ -1,65 +0,0 @@
1
- import type { DeliveryMode } from "../internal/store/delivery.js";
2
- import type { ChannelScope, ContextEntry, EventOrigin } from "../internal/store/schema.js";
3
- export interface ChannelAddressOptions {
4
- channel: string;
5
- scope?: ChannelScope;
6
- /** Storage project bucket key. Not the create-event `project` slug. */
7
- projectKey?: string;
8
- /** cwd used to derive the project bucket when scope is "project". */
9
- cwd?: string;
10
- }
11
- export interface MutationCommonOptions {
12
- by: string;
13
- origin?: EventOrigin;
14
- meta?: Record<string, unknown>;
15
- }
16
- export interface CreateChannelOptions extends ChannelAddressOptions, MutationCommonOptions {
17
- type?: "chat" | "forum";
18
- task?: string;
19
- project?: string;
20
- labels?: string[];
21
- description?: string;
22
- context?: ContextEntry[];
23
- ephemeral?: boolean;
24
- force?: boolean;
25
- }
26
- export interface SendMessageOptions extends ChannelAddressOptions, MutationCommonOptions {
27
- idempotencyKey?: string;
28
- text: string;
29
- to?: string | string[];
30
- /**
31
- * Delivery validation mode. Defaults to `appendOnly`, which preserves
32
- * append-only / pre-spawn backlog behavior. Strict modes append the
33
- * message first, then append `undeliverable` events for targeted
34
- * workers that fail the selected condition.
35
- */
36
- deliveryMode?: DeliveryMode;
37
- }
38
- export interface PostThreadOptions extends ChannelAddressOptions, MutationCommonOptions {
39
- idempotencyKey?: string;
40
- action: "opened" | "comment" | "status" | "labels" | "assignees" | "summary" | "processed";
41
- thread: string;
42
- title?: string;
43
- text?: string;
44
- description?: string;
45
- status?: string;
46
- labels?: string[];
47
- assignees?: string[];
48
- summary?: string;
49
- context?: ContextEntry[];
50
- }
51
- export interface ContextMutationOptions extends ChannelAddressOptions, MutationCommonOptions {
52
- context: ContextEntry[];
53
- }
54
- export interface ThreadContextMutationOptions extends ContextMutationOptions {
55
- thread: string;
56
- }
57
- export interface RenameThreadOptions extends ChannelAddressOptions, MutationCommonOptions {
58
- thread: string;
59
- newThread: string;
60
- }
61
- export interface SetChannelTitleOptions extends ChannelAddressOptions, MutationCommonOptions {
62
- title: string;
63
- }
64
- export type ClearChannelTitleOptions = ChannelAddressOptions & MutationCommonOptions;
65
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channel/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CAEjB;AAED,MAAM,WAAW,kBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,iBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EACF,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,WAAW,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBACf,SAAQ,qBAAqB,EAC3B,qBAAqB;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAC1D,qBAAqB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/channel/api/types.ts"],"names":[],"mappings":""}
@@ -1,40 +0,0 @@
1
- import type { ChannelEvent } from "../internal/store/events.js";
2
- import type { ChannelEventFilter } from "../internal/store/filter.js";
3
- import { type ChannelRef } from "../internal/store/schema.js";
4
- /** Stable per-channel cursor key: `${scope}/${project}/${name}`. */
5
- export type ChannelCursorKey = string;
6
- /** Per-channel resume cursor for the cross-channel watcher. */
7
- export type ChannelCursor = Record<ChannelCursorKey, number>;
8
- export declare function channelCursorKey(ref: ChannelRef): ChannelCursorKey;
9
- export interface WatchChannelsInput {
10
- /** Project bucket scope, or the global bucket. */
11
- scope: {
12
- projectKey: string;
13
- } | "global";
14
- filter?: ChannelEventFilter;
15
- /** Per-channel resume cursors keyed by {@link channelCursorKey}. */
16
- cursor?: ChannelCursor;
17
- signal?: AbortSignal;
18
- /**
19
- * When a channel is discovered after the watcher starts, read its
20
- * backlog from seq 0. Default false (tail from end).
21
- */
22
- fromStartNewChannels?: boolean;
23
- /** Channel-discovery poll interval in ms. Default 500. */
24
- discoveryIntervalMs?: number;
25
- }
26
- export interface CrossChannelEvent {
27
- channel: ChannelRef;
28
- event: ChannelEvent;
29
- /** Snapshot of the full cursor map after applying this event. */
30
- cursor: ChannelCursor;
31
- }
32
- /**
33
- * Watch every channel in a project (or the global) scope and fan their
34
- * events into a single stream. Channels created inside the scope after
35
- * the watcher starts are discovered dynamically. Each yielded event
36
- * carries a snapshot of the per-channel cursor map so consumers can
37
- * checkpoint `(channel, seq)` — delivery is at-least-once.
38
- */
39
- export declare function watchChannels(input: WatchChannelsInput): AsyncGenerator<CrossChannelEvent, void, unknown>;
40
- //# sourceMappingURL=watch-channels.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch-channels.d.ts","sourceRoot":"","sources":["../../../src/channel/api/watch-channels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKtE,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,6BAA6B,CAAC;AAGrC,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAElE;AAED,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oEAAoE;IACpE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE,aAAa,CAAC;CACvB;AAYD;;;;;;GAMG;AACH,wBAAuB,aAAa,CAClC,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,CAgIlD"}
@@ -1,143 +0,0 @@
1
- import { channelDir, listChannelNamesInProject, } from "../internal/store/paths.js";
2
- import { GLOBAL_PROJECT_KEY, } from "../internal/store/schema.js";
3
- import { watchEvents } from "../internal/store/watch.js";
4
- export function channelCursorKey(ref) {
5
- return `${ref.scope}/${ref.project}/${ref.name}`;
6
- }
7
- function resolveScope(input) {
8
- if (input.scope === "global") {
9
- return { project: GLOBAL_PROJECT_KEY, scope: "global" };
10
- }
11
- return { project: input.scope.projectKey, scope: "project" };
12
- }
13
- /**
14
- * Watch every channel in a project (or the global) scope and fan their
15
- * events into a single stream. Channels created inside the scope after
16
- * the watcher starts are discovered dynamically. Each yielded event
17
- * carries a snapshot of the per-channel cursor map so consumers can
18
- * checkpoint `(channel, seq)` — delivery is at-least-once.
19
- */
20
- export async function* watchChannels(input) {
21
- const { project, scope } = resolveScope(input);
22
- const filter = input.filter ?? {};
23
- const discoveryIntervalMs = input.discoveryIntervalMs ?? 500;
24
- const cursor = { ...(input.cursor ?? {}) };
25
- const queue = [];
26
- const active = new Set();
27
- const controllers = new Map();
28
- const tasks = new Set();
29
- let wake = null;
30
- let done = false;
31
- let discovery;
32
- let cleaned = false;
33
- const notify = () => {
34
- if (wake) {
35
- const w = wake;
36
- wake = null;
37
- w();
38
- }
39
- };
40
- const cleanup = () => {
41
- if (cleaned)
42
- return;
43
- cleaned = true;
44
- for (const controller of controllers.values()) {
45
- controller.abort();
46
- }
47
- controllers.clear();
48
- if (discovery !== undefined) {
49
- clearInterval(discovery);
50
- discovery = undefined;
51
- }
52
- input.signal?.removeEventListener("abort", abortHandler);
53
- };
54
- const abortHandler = () => {
55
- done = true;
56
- cleanup();
57
- notify();
58
- };
59
- input.signal?.addEventListener("abort", abortHandler);
60
- let initialScan = true;
61
- const startWatcher = (name) => {
62
- const ref = {
63
- name,
64
- scope,
65
- project,
66
- dir: channelDir(name, project),
67
- };
68
- const key = channelCursorKey(ref);
69
- if (active.has(key))
70
- return;
71
- active.add(key);
72
- const controller = new AbortController();
73
- controllers.set(key, controller);
74
- const resume = cursor[key];
75
- const watchOpts = { project };
76
- watchOpts.signal = controller.signal;
77
- if (resume !== undefined) {
78
- watchOpts.sinceSeq = resume;
79
- }
80
- else {
81
- // No prior cursor: initial channels read their backlog; channels
82
- // discovered later follow `fromStartNewChannels`.
83
- watchOpts.fromStart = initialScan
84
- ? true
85
- : (input.fromStartNewChannels ?? false);
86
- }
87
- const task = (async () => {
88
- try {
89
- for await (const ev of watchEvents(name, filter, watchOpts)) {
90
- cursor[key] = ev.seq;
91
- queue.push({ channel: ref, event: ev, cursor: { ...cursor } });
92
- notify();
93
- }
94
- }
95
- catch {
96
- // Watcher ended (abort / fs error). Discovery may restart it
97
- // while the parent watcher is still active.
98
- }
99
- finally {
100
- active.delete(key);
101
- controllers.delete(key);
102
- }
103
- })();
104
- tasks.add(task);
105
- void task.finally(() => {
106
- tasks.delete(task);
107
- });
108
- };
109
- for (const name of listChannelNamesInProject(project)) {
110
- startWatcher(name);
111
- }
112
- initialScan = false;
113
- discovery = setInterval(() => {
114
- if (done)
115
- return;
116
- for (const name of listChannelNamesInProject(project)) {
117
- startWatcher(name);
118
- }
119
- }, discoveryIntervalMs);
120
- try {
121
- while (!done) {
122
- if (input.signal?.aborted)
123
- return;
124
- if (queue.length > 0) {
125
- yield queue.shift();
126
- continue;
127
- }
128
- await new Promise((resolve) => {
129
- wake = resolve;
130
- });
131
- }
132
- // Drain anything that landed during the final wake.
133
- while (queue.length > 0) {
134
- yield queue.shift();
135
- }
136
- }
137
- finally {
138
- done = true;
139
- cleanup();
140
- await Promise.allSettled([...tasks]);
141
- }
142
- }
143
- //# sourceMappingURL=watch-channels.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch-channels.js","sourceRoot":"","sources":["../../../src/channel/api/watch-channels.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { type WatchFilter } from "../internal/store/watch.js";
2
- import type { ChannelEvent } from "../internal/store/events.js";
3
- import type { ChannelAddressOptions } from "./types.js";
4
- export interface WatchChannelOptions extends ChannelAddressOptions {
5
- filter?: WatchFilter;
6
- signal?: AbortSignal;
7
- fromStart?: boolean;
8
- sinceSeq?: number;
9
- }
10
- export declare function watchChannelEvents(opts: WatchChannelOptions): AsyncGenerator<ChannelEvent, void, unknown>;
11
- //# sourceMappingURL=watch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/channel/api/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,GACxB,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAa7C"}
@@ -1,17 +0,0 @@
1
- import { watchEvents, } from "../internal/store/watch.js";
2
- import { resolveChannelRef } from "./resolve.js";
3
- export function watchChannelEvents(opts) {
4
- const ref = resolveChannelRef({
5
- channel: opts.channel,
6
- ...(opts.scope !== undefined ? { scope: opts.scope } : {}),
7
- ...(opts.projectKey !== undefined ? { projectKey: opts.projectKey } : {}),
8
- ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
9
- });
10
- return watchEvents(opts.channel, opts.filter ?? {}, {
11
- project: ref.project,
12
- ...(opts.signal !== undefined ? { signal: opts.signal } : {}),
13
- ...(opts.fromStart !== undefined ? { fromStart: opts.fromStart } : {}),
14
- ...(opts.sinceSeq !== undefined ? { sinceSeq: opts.sinceSeq } : {}),
15
- });
16
- }
17
- //# sourceMappingURL=watch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/channel/api/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAUjD,MAAM,UAAU,kBAAkB,CAChC,IAAyB;IAEzB,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;QAClD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;AACL,CAAC"}
@@ -1,69 +0,0 @@
1
- import { type ChannelEvent } from "../internal/store/events.js";
2
- import type { ChannelScope } from "../internal/store/schema.js";
3
- import { type WorkerState } from "../internal/store/worker-state.js";
4
- export interface ListWorkersInput {
5
- channel: string;
6
- scope?: ChannelScope;
7
- projectKey?: string;
8
- cwd?: string;
9
- /** Include `done` / `error` / `killed` / `crashed` workers. Default false. */
10
- includeTerminal?: boolean;
11
- }
12
- /**
13
- * Project the durable worker registry for a channel. SOT for CLI list /
14
- * status, daemon runtime cards, and tests — do not reparse event logs
15
- * independently.
16
- */
17
- export declare function listWorkers(input: ListWorkersInput): Promise<WorkerState[]>;
18
- export interface WatchWorkersInput extends ListWorkersInput {
19
- sinceSeq?: number;
20
- signal?: AbortSignal;
21
- }
22
- /**
23
- * Watch the durable worker registry. Yields a fresh registry snapshot
24
- * whenever a worker-relevant event lands. The first yield is the current
25
- * snapshot.
26
- */
27
- export declare function watchWorkers(input: WatchWorkersInput): AsyncGenerator<WorkerState[], void, unknown>;
28
- export interface WorkerRuntimeObservation {
29
- workerId: string;
30
- /** Supervisor pid from `<worker>.pid`. */
31
- pid?: number;
32
- /** Worker child pid from `<worker>.worker-pid`. */
33
- workerPid?: number;
34
- supervisorAlive?: boolean;
35
- workerAlive?: boolean;
36
- observedAt: string;
37
- source: "local-pid-files";
38
- }
39
- export interface ProbeWorkerRuntimeInput {
40
- channel: string;
41
- scope?: ChannelScope;
42
- projectKey?: string;
43
- cwd?: string;
44
- }
45
- /**
46
- * Host-local runtime observation. Reads `<worker>.pid` /
47
- * `<worker>.worker-pid` files and checks OS liveness. This is NOT
48
- * durable channel truth — `reduceWorkerRegistry` must never read pid
49
- * files. Only valid on the machine that owns the supervisor files.
50
- */
51
- export declare function probeWorkerRuntime(input: ProbeWorkerRuntimeInput): Promise<WorkerRuntimeObservation[]>;
52
- export interface ReconcileWorkerLivenessInput extends ProbeWorkerRuntimeInput {
53
- now?: () => Date;
54
- /** Append the proposed terminal events. Default false (no durable writes). */
55
- appendTerminalEvents?: boolean;
56
- }
57
- export interface ReconcileWorkerLivenessResult {
58
- observations: WorkerRuntimeObservation[];
59
- proposedEvents: ChannelEvent[];
60
- appended: ChannelEvent[];
61
- }
62
- /**
63
- * Reconcile durable worker state against host-local pid files. Reports
64
- * observations and the durable events it would propose. Only writes when
65
- * `appendTerminalEvents` is true — the default performs no durable
66
- * writes. Valid only on the machine that owns the supervisor files.
67
- */
68
- export declare function reconcileWorkerLiveness(input: ReconcileWorkerLivenessInput): Promise<ReconcileWorkerLivenessResult>;
69
- //# sourceMappingURL=workers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../../src/channel/api/workers.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,mCAAmC,CAAC;AAG3C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAkBD;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,WAAW,EAAE,CAAC,CAOxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAuB,YAAY,CACjC,KAAK,EAAE,iBAAiB,GACvB,cAAc,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CA6B9C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAoBD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CA2BrC;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,wBAAwB,EAAE,CAAC;IACzC,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,6BAA6B,CAAC,CA4CxC"}
@@ -1,145 +0,0 @@
1
- import fs from "node:fs";
2
- import { appendEvent, readChannelEvents, } from "../internal/store/events.js";
3
- import { workerFile } from "../internal/store/paths.js";
4
- import { watchEvents } from "../internal/store/watch.js";
5
- import { reduceWorkerRegistry, } from "../internal/store/worker-state.js";
6
- import { resolveChannelRef } from "./resolve.js";
7
- function resolve(input) {
8
- return resolveChannelRef({
9
- channel: input.channel,
10
- ...(input.scope !== undefined ? { scope: input.scope } : {}),
11
- ...(input.projectKey !== undefined
12
- ? { projectKey: input.projectKey }
13
- : {}),
14
- ...(input.cwd !== undefined ? { cwd: input.cwd } : {}),
15
- });
16
- }
17
- /**
18
- * Project the durable worker registry for a channel. SOT for CLI list /
19
- * status, daemon runtime cards, and tests — do not reparse event logs
20
- * independently.
21
- */
22
- export async function listWorkers(input) {
23
- const ref = resolve(input);
24
- const events = await readChannelEvents(input.channel, ref.project);
25
- const registry = reduceWorkerRegistry(events, ref);
26
- return input.includeTerminal
27
- ? registry.workers
28
- : registry.workers.filter((w) => !w.terminal);
29
- }
30
- /**
31
- * Watch the durable worker registry. Yields a fresh registry snapshot
32
- * whenever a worker-relevant event lands. The first yield is the current
33
- * snapshot.
34
- */
35
- export async function* watchWorkers(input) {
36
- const ref = resolve(input);
37
- const events = await readChannelEvents(input.channel, ref.project);
38
- const snapshot = () => {
39
- const registry = reduceWorkerRegistry(events, ref);
40
- return input.includeTerminal
41
- ? registry.workers
42
- : registry.workers.filter((w) => !w.terminal);
43
- };
44
- yield snapshot();
45
- const lastSeq = events.length > 0 ? events[events.length - 1].seq : 0;
46
- const watchOpts = { project: ref.project, sinceSeq: input.sinceSeq ?? lastSeq };
47
- if (input.signal)
48
- watchOpts.signal = input.signal;
49
- for await (const ev of watchEvents(input.channel, { includeNonMeaningful: true, includeProgress: false }, watchOpts)) {
50
- events.push(ev);
51
- yield snapshot();
52
- }
53
- }
54
- function pidAlive(pid) {
55
- try {
56
- process.kill(pid, 0);
57
- return true;
58
- }
59
- catch {
60
- return false;
61
- }
62
- }
63
- function readPidFile(path) {
64
- try {
65
- const n = Number(fs.readFileSync(path, "utf-8").trim());
66
- return Number.isFinite(n) && n > 0 ? n : undefined;
67
- }
68
- catch {
69
- return undefined;
70
- }
71
- }
72
- /**
73
- * Host-local runtime observation. Reads `<worker>.pid` /
74
- * `<worker>.worker-pid` files and checks OS liveness. This is NOT
75
- * durable channel truth — `reduceWorkerRegistry` must never read pid
76
- * files. Only valid on the machine that owns the supervisor files.
77
- */
78
- export async function probeWorkerRuntime(input) {
79
- const ref = resolve(input);
80
- const events = await readChannelEvents(input.channel, ref.project);
81
- const registry = reduceWorkerRegistry(events, ref);
82
- const observedAt = new Date().toISOString();
83
- return registry.workers.map((w) => {
84
- const pid = readPidFile(workerFile(input.channel, w.workerId, "pid", ref.project));
85
- const workerPid = readPidFile(workerFile(input.channel, w.workerId, "worker-pid", ref.project));
86
- const obs = {
87
- workerId: w.workerId,
88
- observedAt,
89
- source: "local-pid-files",
90
- };
91
- if (pid !== undefined) {
92
- obs.pid = pid;
93
- obs.supervisorAlive = pidAlive(pid);
94
- }
95
- if (workerPid !== undefined) {
96
- obs.workerPid = workerPid;
97
- obs.workerAlive = pidAlive(workerPid);
98
- }
99
- return obs;
100
- });
101
- }
102
- /**
103
- * Reconcile durable worker state against host-local pid files. Reports
104
- * observations and the durable events it would propose. Only writes when
105
- * `appendTerminalEvents` is true — the default performs no durable
106
- * writes. Valid only on the machine that owns the supervisor files.
107
- */
108
- export async function reconcileWorkerLiveness(input) {
109
- const ref = resolve(input);
110
- const events = await readChannelEvents(input.channel, ref.project);
111
- const registry = reduceWorkerRegistry(events, ref);
112
- const observations = await probeWorkerRuntime(input);
113
- const obsById = new Map(observations.map((o) => [o.workerId, o]));
114
- const now = (input.now ?? (() => new Date()))();
115
- const proposedEvents = [];
116
- for (const w of registry.workers) {
117
- if (w.terminal)
118
- continue;
119
- const obs = obsById.get(w.workerId);
120
- // A non-terminal worker whose supervisor pid is gone is a crash that
121
- // never wrote a terminal event.
122
- if (obs?.supervisorAlive === false) {
123
- proposedEvents.push({
124
- seq: 0,
125
- ts: now.toISOString(),
126
- kind: "error",
127
- by: `supervisor:${w.workerId}`,
128
- worker: w.workerId,
129
- message: "supervisor process not alive (reconciled)",
130
- synthesized: true,
131
- });
132
- }
133
- }
134
- const appended = [];
135
- if (input.appendTerminalEvents) {
136
- for (const ev of proposedEvents) {
137
- const { seq: _seq, ts: _ts, ...partial } = ev;
138
- void _seq;
139
- void _ts;
140
- appended.push(await appendEvent(input.channel, partial, ref.project));
141
- }
142
- }
143
- return { observations, proposedEvents, appended };
144
- }
145
- //# sourceMappingURL=workers.js.map