@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.
- package/channel.d.ts +1 -0
- package/channel.js +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +27 -47
- package/task.d.ts +1 -0
- package/task.js +1 -0
- package/testing.d.ts +1 -0
- package/testing.js +1 -0
- package/dist/channel/api/assert.d.ts +0 -3
- package/dist/channel/api/assert.d.ts.map +0 -1
- package/dist/channel/api/assert.js +0 -11
- package/dist/channel/api/assert.js.map +0 -1
- package/dist/channel/api/context.d.ts +0 -21
- package/dist/channel/api/context.d.ts.map +0 -1
- package/dist/channel/api/context.js +0 -99
- package/dist/channel/api/context.js.map +0 -1
- package/dist/channel/api/create.d.ts +0 -9
- package/dist/channel/api/create.d.ts.map +0 -1
- package/dist/channel/api/create.js +0 -104
- package/dist/channel/api/create.js.map +0 -1
- package/dist/channel/api/inbox.d.ts +0 -51
- package/dist/channel/api/inbox.d.ts.map +0 -1
- package/dist/channel/api/inbox.js +0 -176
- package/dist/channel/api/inbox.js.map +0 -1
- package/dist/channel/api/interrupt.d.ts +0 -31
- package/dist/channel/api/interrupt.d.ts.map +0 -1
- package/dist/channel/api/interrupt.js +0 -102
- package/dist/channel/api/interrupt.js.map +0 -1
- package/dist/channel/api/post-thread.d.ts +0 -14
- package/dist/channel/api/post-thread.d.ts.map +0 -1
- package/dist/channel/api/post-thread.js +0 -109
- package/dist/channel/api/post-thread.js.map +0 -1
- package/dist/channel/api/read.d.ts +0 -17
- package/dist/channel/api/read.d.ts.map +0 -1
- package/dist/channel/api/read.js +0 -44
- package/dist/channel/api/read.js.map +0 -1
- package/dist/channel/api/resolve.d.ts +0 -21
- package/dist/channel/api/resolve.d.ts.map +0 -1
- package/dist/channel/api/resolve.js +0 -28
- package/dist/channel/api/resolve.js.map +0 -1
- package/dist/channel/api/runtime.d.ts +0 -70
- package/dist/channel/api/runtime.d.ts.map +0 -1
- package/dist/channel/api/runtime.js +0 -11
- package/dist/channel/api/runtime.js.map +0 -1
- package/dist/channel/api/send.d.ts +0 -4
- package/dist/channel/api/send.d.ts.map +0 -1
- package/dist/channel/api/send.js +0 -52
- package/dist/channel/api/send.js.map +0 -1
- package/dist/channel/api/spawn.d.ts +0 -13
- package/dist/channel/api/spawn.d.ts.map +0 -1
- package/dist/channel/api/spawn.js +0 -54
- package/dist/channel/api/spawn.js.map +0 -1
- package/dist/channel/api/title.d.ts +0 -5
- package/dist/channel/api/title.d.ts.map +0 -1
- package/dist/channel/api/title.js +0 -40
- package/dist/channel/api/title.js.map +0 -1
- package/dist/channel/api/types.d.ts +0 -65
- package/dist/channel/api/types.d.ts.map +0 -1
- package/dist/channel/api/types.js +0 -2
- package/dist/channel/api/types.js.map +0 -1
- package/dist/channel/api/watch-channels.d.ts +0 -40
- package/dist/channel/api/watch-channels.d.ts.map +0 -1
- package/dist/channel/api/watch-channels.js +0 -143
- package/dist/channel/api/watch-channels.js.map +0 -1
- package/dist/channel/api/watch.d.ts +0 -11
- package/dist/channel/api/watch.d.ts.map +0 -1
- package/dist/channel/api/watch.js +0 -17
- package/dist/channel/api/watch.js.map +0 -1
- package/dist/channel/api/workers.d.ts +0 -69
- package/dist/channel/api/workers.d.ts.map +0 -1
- package/dist/channel/api/workers.js +0 -145
- package/dist/channel/api/workers.js.map +0 -1
- package/dist/channel/index.d.ts +0 -38
- package/dist/channel/index.d.ts.map +0 -1
- package/dist/channel/index.js +0 -23
- package/dist/channel/index.js.map +0 -1
- package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
- package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
- package/dist/channel/internal/store/channel-metadata.js +0 -94
- package/dist/channel/internal/store/channel-metadata.js.map +0 -1
- package/dist/channel/internal/store/delivery.d.ts +0 -27
- package/dist/channel/internal/store/delivery.d.ts.map +0 -1
- package/dist/channel/internal/store/delivery.js +0 -37
- package/dist/channel/internal/store/delivery.js.map +0 -1
- package/dist/channel/internal/store/events.d.ts +0 -215
- package/dist/channel/internal/store/events.d.ts.map +0 -1
- package/dist/channel/internal/store/events.js +0 -206
- package/dist/channel/internal/store/events.js.map +0 -1
- package/dist/channel/internal/store/filter.d.ts +0 -21
- package/dist/channel/internal/store/filter.d.ts.map +0 -1
- package/dist/channel/internal/store/filter.js +0 -75
- package/dist/channel/internal/store/filter.js.map +0 -1
- package/dist/channel/internal/store/inbox.d.ts +0 -17
- package/dist/channel/internal/store/inbox.d.ts.map +0 -1
- package/dist/channel/internal/store/inbox.js +0 -30
- package/dist/channel/internal/store/inbox.js.map +0 -1
- package/dist/channel/internal/store/lock.d.ts +0 -17
- package/dist/channel/internal/store/lock.d.ts.map +0 -1
- package/dist/channel/internal/store/lock.js +0 -88
- package/dist/channel/internal/store/lock.js.map +0 -1
- package/dist/channel/internal/store/paths.d.ts +0 -43
- package/dist/channel/internal/store/paths.d.ts.map +0 -1
- package/dist/channel/internal/store/paths.js +0 -233
- package/dist/channel/internal/store/paths.js.map +0 -1
- package/dist/channel/internal/store/schema.d.ts +0 -77
- package/dist/channel/internal/store/schema.d.ts.map +0 -1
- package/dist/channel/internal/store/schema.js +0 -127
- package/dist/channel/internal/store/schema.js.map +0 -1
- package/dist/channel/internal/store/seq.d.ts +0 -12
- package/dist/channel/internal/store/seq.d.ts.map +0 -1
- package/dist/channel/internal/store/seq.js +0 -133
- package/dist/channel/internal/store/seq.js.map +0 -1
- package/dist/channel/internal/store/thread-state.d.ts +0 -37
- package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
- package/dist/channel/internal/store/thread-state.js +0 -206
- package/dist/channel/internal/store/thread-state.js.map +0 -1
- package/dist/channel/internal/store/watch.d.ts +0 -10
- package/dist/channel/internal/store/watch.d.ts.map +0 -1
- package/dist/channel/internal/store/watch.js +0 -122
- package/dist/channel/internal/store/watch.js.map +0 -1
- package/dist/channel/internal/store/worker-state.d.ts +0 -56
- package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
- package/dist/channel/internal/store/worker-state.js +0 -220
- package/dist/channel/internal/store/worker-state.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -7
- package/dist/index.js.map +0 -1
- package/dist/task/adapter-middleware.d.ts +0 -118
- package/dist/task/adapter-middleware.d.ts.map +0 -1
- package/dist/task/adapter-middleware.js +0 -508
- package/dist/task/adapter-middleware.js.map +0 -1
- package/dist/task/contract-migrate.d.ts +0 -29
- package/dist/task/contract-migrate.d.ts.map +0 -1
- package/dist/task/contract-migrate.js +0 -207
- package/dist/task/contract-migrate.js.map +0 -1
- package/dist/task/full-quality.d.ts +0 -89
- package/dist/task/full-quality.d.ts.map +0 -1
- package/dist/task/full-quality.js +0 -379
- package/dist/task/full-quality.js.map +0 -1
- package/dist/task/index.d.ts +0 -31
- package/dist/task/index.d.ts.map +0 -1
- package/dist/task/index.js +0 -20
- package/dist/task/index.js.map +0 -1
- package/dist/task/kernel-cli.d.ts +0 -44
- package/dist/task/kernel-cli.d.ts.map +0 -1
- package/dist/task/kernel-cli.js +0 -287
- package/dist/task/kernel-cli.js.map +0 -1
- package/dist/task/kernel-contract.d.ts +0 -113
- package/dist/task/kernel-contract.d.ts.map +0 -1
- package/dist/task/kernel-contract.js +0 -332
- package/dist/task/kernel-contract.js.map +0 -1
- package/dist/task/kernel-store.d.ts +0 -99
- package/dist/task/kernel-store.d.ts.map +0 -1
- package/dist/task/kernel-store.js +0 -735
- package/dist/task/kernel-store.js.map +0 -1
- package/dist/task/kernel-surface.d.ts +0 -39
- package/dist/task/kernel-surface.d.ts.map +0 -1
- package/dist/task/kernel-surface.js +0 -73
- package/dist/task/kernel-surface.js.map +0 -1
- package/dist/task/lite-context-pack.d.ts +0 -71
- package/dist/task/lite-context-pack.d.ts.map +0 -1
- package/dist/task/lite-context-pack.js +0 -175
- package/dist/task/lite-context-pack.js.map +0 -1
- package/dist/task/ondemand-topology.d.ts +0 -108
- package/dist/task/ondemand-topology.d.ts.map +0 -1
- package/dist/task/ondemand-topology.js +0 -453
- package/dist/task/ondemand-topology.js.map +0 -1
- package/dist/task/p36-artifact-migrate.d.ts +0 -61
- package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
- package/dist/task/p36-artifact-migrate.js +0 -336
- package/dist/task/p36-artifact-migrate.js.map +0 -1
- package/dist/task/p36-wave-c.d.ts +0 -39
- package/dist/task/p36-wave-c.d.ts.map +0 -1
- package/dist/task/p36-wave-c.js +0 -100
- package/dist/task/p36-wave-c.js.map +0 -1
- package/dist/task/paths.d.ts +0 -37
- package/dist/task/paths.d.ts.map +0 -1
- package/dist/task/paths.js +0 -49
- package/dist/task/paths.js.map +0 -1
- package/dist/task/phase.d.ts +0 -27
- package/dist/task/phase.d.ts.map +0 -1
- package/dist/task/phase.js +0 -24
- package/dist/task/phase.js.map +0 -1
- package/dist/task/records.d.ts +0 -48
- package/dist/task/records.d.ts.map +0 -1
- package/dist/task/records.js +0 -100
- package/dist/task/records.js.map +0 -1
- package/dist/task/schema.d.ts +0 -77
- package/dist/task/schema.d.ts.map +0 -1
- package/dist/task/schema.js +0 -220
- package/dist/task/schema.js.map +0 -1
- package/dist/testing/index.d.ts +0 -2
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -4
- 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":"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"}
|
|
@@ -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 +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
|