@osolmaz/pi-workflows 0.16.0 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +18 -2
  2. package/dist/channels/adapter-entry.d.ts +3 -0
  3. package/dist/channels/adapter-entry.js +203 -0
  4. package/dist/channels/adapter-entry.js.map +1 -0
  5. package/dist/channels/config.d.ts +43 -0
  6. package/dist/channels/config.js +234 -0
  7. package/dist/channels/config.js.map +1 -0
  8. package/dist/channels/protocol.d.ts +94 -0
  9. package/dist/channels/protocol.js +219 -0
  10. package/dist/channels/protocol.js.map +1 -0
  11. package/dist/channels/telegram.d.ts +46 -0
  12. package/dist/channels/telegram.js +285 -0
  13. package/dist/channels/telegram.js.map +1 -0
  14. package/dist/client/client.d.ts +1 -0
  15. package/dist/client/client.js +5 -1
  16. package/dist/client/client.js.map +1 -1
  17. package/dist/client/index.d.ts +1 -1
  18. package/dist/client/protocol.d.ts +1 -1
  19. package/dist/client/protocol.js +11 -5
  20. package/dist/client/protocol.js.map +1 -1
  21. package/dist/client/view.d.ts +48 -16
  22. package/dist/client/view.js +1 -0
  23. package/dist/client/view.js.map +1 -1
  24. package/dist/controllers/index.d.ts +1 -1
  25. package/dist/controllers/index.js.map +1 -1
  26. package/dist/controllers/sqlite.d.ts +20 -165
  27. package/dist/controllers/sqlite.js +178 -436
  28. package/dist/controllers/sqlite.js.map +1 -1
  29. package/dist/extension/index.d.ts +23 -2
  30. package/dist/extension/index.js +637 -534
  31. package/dist/extension/index.js.map +1 -1
  32. package/dist/extension/recorder.d.ts +95 -0
  33. package/dist/extension/recorder.js +530 -0
  34. package/dist/extension/recorder.js.map +1 -0
  35. package/dist/extension/remote-recorder-store.d.ts +25 -0
  36. package/dist/extension/remote-recorder-store.js +81 -0
  37. package/dist/extension/remote-recorder-store.js.map +1 -0
  38. package/dist/extension/session-events.d.ts +134 -0
  39. package/dist/extension/session-events.js +60 -0
  40. package/dist/extension/session-events.js.map +1 -0
  41. package/dist/extension/session-view.d.ts +2 -0
  42. package/dist/extension/session-view.js +60 -2
  43. package/dist/extension/session-view.js.map +1 -1
  44. package/dist/extension/step-message.d.ts +6 -4
  45. package/dist/extension/step-message.js +12 -6
  46. package/dist/extension/step-message.js.map +1 -1
  47. package/dist/extension/widget.d.ts +2 -2
  48. package/dist/extension/widget.js +28 -18
  49. package/dist/extension/widget.js.map +1 -1
  50. package/dist/extension/workflow-message-coordinator.d.ts +28 -0
  51. package/dist/extension/workflow-message-coordinator.js +346 -0
  52. package/dist/extension/workflow-message-coordinator.js.map +1 -0
  53. package/dist/host/channel-effects.d.ts +72 -0
  54. package/dist/host/channel-effects.js +271 -0
  55. package/dist/host/channel-effects.js.map +1 -0
  56. package/dist/host/channel-supervisor.d.ts +21 -0
  57. package/dist/host/channel-supervisor.js +54 -0
  58. package/dist/host/channel-supervisor.js.map +1 -0
  59. package/dist/host/runner.d.ts +50 -8
  60. package/dist/host/runner.js +1632 -341
  61. package/dist/host/runner.js.map +1 -1
  62. package/dist/host/state.d.ts +19 -16
  63. package/dist/host/state.js +251 -63
  64. package/dist/host/state.js.map +1 -1
  65. package/dist/host/view.d.ts +19 -9
  66. package/dist/host/view.js +227 -119
  67. package/dist/host/view.js.map +1 -1
  68. package/dist/host/worker-entry.d.ts +4 -1
  69. package/dist/host/worker-entry.js +23 -24
  70. package/dist/host/worker-entry.js.map +1 -1
  71. package/dist/host/worker-protocol.d.ts +15 -0
  72. package/dist/host/worker-protocol.js.map +1 -1
  73. package/dist/state/prune.js +3 -25
  74. package/dist/state/prune.js.map +1 -1
  75. package/dist/state/schema.js +76 -97
  76. package/dist/state/schema.js.map +1 -1
  77. package/dist/state/workflow-messages.d.ts +98 -0
  78. package/dist/state/workflow-messages.js +366 -0
  79. package/dist/state/workflow-messages.js.map +1 -0
  80. package/dist/viewer/render.js +1 -1
  81. package/dist/viewer/render.js.map +1 -1
  82. package/dist/viewer/tui.d.ts +1 -1
  83. package/dist/viewer/tui.js +65 -8
  84. package/dist/viewer/tui.js.map +1 -1
  85. package/dist/workflows/composition.js +0 -4
  86. package/dist/workflows/composition.js.map +1 -1
  87. package/dist/workflows/definition.js +0 -8
  88. package/dist/workflows/definition.js.map +1 -1
  89. package/dist/workflows/engine.js +4 -5
  90. package/dist/workflows/engine.js.map +1 -1
  91. package/dist/workflows/human-decision.d.ts +2 -0
  92. package/dist/workflows/human-decision.js +8 -2
  93. package/dist/workflows/human-decision.js.map +1 -1
  94. package/dist/workflows/index.d.ts +1 -1
  95. package/dist/workflows/index.js.map +1 -1
  96. package/dist/workflows/schema.js +0 -4
  97. package/dist/workflows/schema.js.map +1 -1
  98. package/dist/workflows/settings.d.ts +1 -8
  99. package/dist/workflows/settings.js.map +1 -1
  100. package/dist/workflows/store.d.ts +20 -19
  101. package/dist/workflows/store.js +163 -354
  102. package/dist/workflows/store.js.map +1 -1
  103. package/dist/workflows/tool-input.d.ts +21 -0
  104. package/dist/workflows/tool-input.js +23 -1
  105. package/dist/workflows/tool-input.js.map +1 -1
  106. package/dist/workflows/types.d.ts +6 -8
  107. package/dist/workflows/workflow-message-content.d.ts +38 -0
  108. package/dist/workflows/workflow-message-content.js +157 -0
  109. package/dist/workflows/workflow-message-content.js.map +1 -0
  110. package/docs/2026-08-18-herdr-piw-plan.md +2 -1
  111. package/docs/2026-08-20-durable-workflow-launch-plan.md +1 -1
  112. package/docs/2026-08-25-workflow-follow-ups.md +26 -50
  113. package/docs/2026-08-30-out-of-process-workflow-host-plan.md +3 -3
  114. package/docs/2026-09-01-restore-session-delivery-controls-plan.md +4 -0
  115. package/docs/2026-09-01-unified-workflow-client-plan.md +5 -1
  116. package/docs/2026-09-02-installed-live-e2e-plan.md +15 -1
  117. package/docs/2026-09-02-unify-workflow-messages-plan.md +562 -0
  118. package/docs/2026-09-04-workflow-run-state-plan.md +363 -0
  119. package/docs/DEFERRED_TURNS.md +66 -294
  120. package/docs/HUMAN_DECISIONS.md +29 -30
  121. package/docs/HUMAN_DECISION_PRESENTATIONS.md +4 -11
  122. package/docs/SQLITE_STATE.md +25 -17
  123. package/docs/WORKFLOW_HOST.md +105 -31
  124. package/docs/WORKFLOW_STEP_MESSAGES.md +166 -75
  125. package/docs/live-replay-protocol.md +8 -4
  126. package/docs/tui-viewer.md +3 -1
  127. package/docs/workflows.md +44 -28
  128. package/herdr-plugin.toml +1 -1
  129. package/package.json +1 -1
  130. package/plugins/herdr/viewer.mjs +14 -5
  131. package/src/channels/adapter-entry.ts +220 -0
  132. package/src/channels/config.ts +296 -0
  133. package/src/channels/protocol.ts +333 -0
  134. package/src/channels/telegram.ts +335 -0
  135. package/src/client/client.ts +6 -2
  136. package/src/client/index.ts +2 -1
  137. package/src/client/protocol.ts +11 -5
  138. package/src/client/view.ts +51 -18
  139. package/src/controllers/index.ts +0 -1
  140. package/src/controllers/sqlite.ts +247 -845
  141. package/src/extension/index.ts +712 -647
  142. package/src/extension/recorder.ts +687 -0
  143. package/src/extension/remote-recorder-store.ts +126 -0
  144. package/src/extension/session-events.ts +119 -0
  145. package/src/extension/session-view.ts +86 -3
  146. package/src/extension/step-message.ts +19 -9
  147. package/src/extension/widget.ts +37 -17
  148. package/src/extension/workflow-message-coordinator.ts +398 -0
  149. package/src/host/channel-effects.ts +465 -0
  150. package/src/host/channel-supervisor.ts +73 -0
  151. package/src/host/runner.ts +2163 -525
  152. package/src/host/state.ts +333 -94
  153. package/src/host/view.ts +254 -122
  154. package/src/host/worker-entry.ts +38 -30
  155. package/src/host/worker-protocol.ts +11 -0
  156. package/src/state/prune.ts +3 -31
  157. package/src/state/schema.ts +76 -97
  158. package/src/state/workflow-messages.ts +599 -0
  159. package/src/viewer/render.ts +1 -5
  160. package/src/viewer/tui.ts +71 -6
  161. package/src/workflows/composition.ts +0 -5
  162. package/src/workflows/definition.ts +0 -8
  163. package/src/workflows/engine.ts +4 -6
  164. package/src/workflows/human-decision.ts +18 -2
  165. package/src/workflows/index.ts +0 -1
  166. package/src/workflows/schema.ts +0 -6
  167. package/src/workflows/settings.ts +1 -20
  168. package/src/workflows/store.ts +237 -489
  169. package/src/workflows/tool-input.ts +36 -1
  170. package/src/workflows/types.ts +6 -8
  171. package/src/workflows/workflow-message-content.ts +197 -0
  172. package/dist/extension/decision-channels.d.ts +0 -134
  173. package/dist/extension/decision-channels.js +0 -1307
  174. package/dist/extension/decision-channels.js.map +0 -1
  175. package/src/extension/decision-channels.ts +0 -1826
@@ -0,0 +1,271 @@
1
+ import { createHash } from "node:crypto";
2
+ import { StateDatabase } from "../state/database.js";
3
+ import { canonicalJson } from "../state/json.js";
4
+ import { StateMutationStore } from "../state/mutation.js";
5
+ export class ChannelEffectStore {
6
+ state;
7
+ mutations;
8
+ constructor(state) {
9
+ this.state = state;
10
+ this.mutations = new StateMutationStore(state);
11
+ }
12
+ ensureApplying(options) {
13
+ const effectId = channelEffectId(options.channelId, options.decisionId, options.request.requestDigest, options.purpose);
14
+ const existing = this.read(effectId);
15
+ if (existing !== undefined) {
16
+ if (existing.status === "rejected" && existing.attemptNumber < options.maxAutomaticAttempts) {
17
+ return this.beginAttempt(existing, options.ownerId, options.leaseGeneration, "automatic", options.ownerId);
18
+ }
19
+ return existing;
20
+ }
21
+ const payload = {
22
+ schema: "pi-workflows.channel-effect.v1",
23
+ channelId: options.channelId,
24
+ profile: options.profile,
25
+ decisionId: options.decisionId,
26
+ purpose: options.purpose,
27
+ request: options.request,
28
+ };
29
+ const now = Date.now();
30
+ const payloadHash = this.state.putJson(payload, now);
31
+ const sourceRevision = this.resourceRevision(options.channelResourceId);
32
+ const resourceId = this.mutations.ensureResource("effect", effectId, now);
33
+ this.mutations.mutate({
34
+ resourceId,
35
+ operation: "channel.effect.create",
36
+ actor: { type: "host", id: options.ownerId },
37
+ expectedRevision: 0,
38
+ }, "effect.applying", () => {
39
+ this.state.connection
40
+ .prepare(`INSERT INTO effects(
41
+ effect_id, resource_id, source_resource_id, source_revision,
42
+ effect_type, idempotency_key, payload_hash, owner_scope,
43
+ status, attempt_count, created_at, updated_at
44
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, 'channel', 'applying', 1, ?, ?)`)
45
+ .run(effectId, resourceId, options.channelResourceId, sourceRevision, `channel.${options.purpose}`, effectId, payloadHash, now, now);
46
+ this.insertAttempt(effectId, 1, options.ownerId, options.leaseGeneration, now);
47
+ }, { now, payload: { channelId: options.channelId, decisionId: options.decisionId } });
48
+ return this.require(effectId);
49
+ }
50
+ settle(options) {
51
+ const current = this.require(options.effectId);
52
+ if (current.status !== "applying" || current.attemptNumber !== options.attemptNumber) {
53
+ throw new Error("Channel effect attempt is stale");
54
+ }
55
+ const now = Date.now();
56
+ const resultHash = options.result === undefined ? null : this.state.putJson(options.result, now);
57
+ const errorHash = options.error === undefined ? null : this.state.putText(options.error, now);
58
+ this.mutations.mutate({
59
+ resourceId: current.resourceId,
60
+ operation: "channel.effect.settle",
61
+ actor: { type: options.actorType, id: options.actorId },
62
+ expectedRevision: this.resourceRevision(current.resourceId),
63
+ }, `effect.${options.outcome}`, () => {
64
+ const changed = this.state.connection
65
+ .prepare(`UPDATE effects
66
+ SET status = ?, result_hash = ?, error_hash = ?, updated_at = ?, settled_at = ?
67
+ WHERE effect_id = ? AND status = 'applying' AND attempt_count = ?`)
68
+ .run(options.outcome, resultHash, errorHash, now, now, options.effectId, options.attemptNumber);
69
+ if (changed.changes !== 1)
70
+ throw new Error("Channel effect attempt changed");
71
+ this.state.connection
72
+ .prepare(`UPDATE effect_attempts
73
+ SET finished_at = ?, outcome = ?, result_hash = ?, error_hash = ?
74
+ WHERE effect_id = ? AND attempt_number = ? AND finished_at IS NULL`)
75
+ .run(now, options.outcome, resultHash, errorHash, options.effectId, options.attemptNumber);
76
+ }, { now, payload: { attemptNumber: options.attemptNumber } });
77
+ return this.require(options.effectId);
78
+ }
79
+ markApplyingAmbiguous(options) {
80
+ const rows = this.state.connection
81
+ .prepare(`SELECT effect_id AS effectId
82
+ FROM effects
83
+ WHERE owner_scope = 'channel' AND status = 'applying'
84
+ AND (? IS NULL OR source_resource_id = ?)
85
+ ORDER BY created_at`)
86
+ .all(options.sourceResourceId ?? null, options.sourceResourceId ?? null);
87
+ const settled = [];
88
+ for (const row of rows) {
89
+ if (!isEffectIdRow(row))
90
+ continue;
91
+ const current = this.require(row.effectId);
92
+ if (options.stableMessageIds !== undefined &&
93
+ !options.stableMessageIds.includes(channelEffectAttemptId(current.effectId, current.attemptNumber))) {
94
+ continue;
95
+ }
96
+ settled.push(this.settle({
97
+ effectId: current.effectId,
98
+ attemptNumber: current.attemptNumber,
99
+ outcome: "ambiguous",
100
+ error: options.error,
101
+ actorType: "channel",
102
+ actorId: options.actorId,
103
+ }));
104
+ }
105
+ return settled;
106
+ }
107
+ recover(options) {
108
+ const current = this.listAmbiguous().find((effect) => channelEffectAttemptId(effect.effectId, effect.attemptNumber) === options.stableMessageId);
109
+ if (current === undefined)
110
+ throw new Error("Ambiguous channel operation was not found");
111
+ if (options.action === "confirm") {
112
+ return this.confirmAmbiguous(current, options.actorId);
113
+ }
114
+ return this.beginAttempt(current, options.ownerId, options.leaseGeneration, "explicit", options.actorId);
115
+ }
116
+ read(effectId) {
117
+ const row = this.state.connection
118
+ .prepare(`SELECT e.effect_id AS effectId, e.resource_id AS resourceId,
119
+ e.source_resource_id AS sourceResourceId, e.status,
120
+ e.attempt_count AS attemptNumber, a.started_at AS attemptStartedAt,
121
+ e.settled_at AS settledAt, e.payload_hash AS payloadHash,
122
+ e.result_hash AS resultHash
123
+ FROM effects e JOIN effect_attempts a
124
+ ON a.effect_id = e.effect_id AND a.attempt_number = e.attempt_count
125
+ WHERE e.effect_id = ? AND e.owner_scope = 'channel'`)
126
+ .get(effectId);
127
+ return isEffectRow(row) ? this.materialize(row) : undefined;
128
+ }
129
+ listAmbiguous() {
130
+ return this.state.connection
131
+ .prepare(`SELECT e.effect_id AS effectId, e.resource_id AS resourceId,
132
+ e.source_resource_id AS sourceResourceId, e.status,
133
+ e.attempt_count AS attemptNumber, a.started_at AS attemptStartedAt,
134
+ e.settled_at AS settledAt, e.payload_hash AS payloadHash,
135
+ e.result_hash AS resultHash
136
+ FROM effects e JOIN effect_attempts a
137
+ ON a.effect_id = e.effect_id AND a.attempt_number = e.attempt_count
138
+ WHERE e.owner_scope = 'channel' AND e.status = 'ambiguous'
139
+ ORDER BY e.created_at`)
140
+ .all()
141
+ .filter(isEffectRow)
142
+ .map((row) => this.materialize(row));
143
+ }
144
+ confirmAmbiguous(current, actorId) {
145
+ const now = Date.now();
146
+ this.mutations.mutate({
147
+ resourceId: current.resourceId,
148
+ operation: "channel.effect.confirm",
149
+ actor: { type: "human", id: actorId },
150
+ expectedRevision: this.resourceRevision(current.resourceId),
151
+ }, "effect.recovered_confirmed", () => {
152
+ const changed = this.state.connection
153
+ .prepare(`UPDATE effects SET status = 'applied', updated_at = ?, settled_at = ?
154
+ WHERE effect_id = ? AND status = 'ambiguous' AND attempt_count = ?`)
155
+ .run(now, now, current.effectId, current.attemptNumber);
156
+ if (changed.changes !== 1)
157
+ throw new Error("Channel effect recovery is stale");
158
+ }, { now, payload: { attemptNumber: current.attemptNumber } });
159
+ return this.require(current.effectId);
160
+ }
161
+ beginAttempt(current, ownerId, leaseGeneration, reason, actorId) {
162
+ if (current.status !== "rejected" && current.status !== "ambiguous") {
163
+ throw new Error("Channel effect is not retryable");
164
+ }
165
+ const attemptNumber = current.attemptNumber + 1;
166
+ const now = Date.now();
167
+ this.mutations.mutate({
168
+ resourceId: current.resourceId,
169
+ operation: "channel.effect.retry",
170
+ actor: { type: reason === "explicit" ? "human" : "host", id: actorId },
171
+ expectedRevision: this.resourceRevision(current.resourceId),
172
+ }, "effect.applying", () => {
173
+ const changed = this.state.connection
174
+ .prepare(`UPDATE effects
175
+ SET status = 'applying', attempt_count = ?, result_hash = NULL,
176
+ error_hash = NULL, updated_at = ?, settled_at = NULL
177
+ WHERE effect_id = ? AND status = ? AND attempt_count = ?`)
178
+ .run(attemptNumber, now, current.effectId, current.status, current.attemptNumber);
179
+ if (changed.changes !== 1)
180
+ throw new Error("Channel effect retry is stale");
181
+ this.insertAttempt(current.effectId, attemptNumber, ownerId, leaseGeneration, now);
182
+ }, { now, payload: { attemptNumber, reason } });
183
+ return this.require(current.effectId);
184
+ }
185
+ insertAttempt(effectId, attemptNumber, ownerId, leaseGeneration, now) {
186
+ this.state.connection
187
+ .prepare(`INSERT INTO effect_attempts(
188
+ effect_id, attempt_number, owner_id, lease_generation, started_at
189
+ ) VALUES (?, ?, ?, ?, ?)`)
190
+ .run(effectId, attemptNumber, ownerId, leaseGeneration, now);
191
+ }
192
+ require(effectId) {
193
+ const value = this.read(effectId);
194
+ if (value === undefined)
195
+ throw new Error(`Channel effect is missing: ${effectId}`);
196
+ return value;
197
+ }
198
+ materialize(row) {
199
+ const payload = this.state.readJson(row.payloadHash);
200
+ if (!isChannelEffectPayload(payload))
201
+ throw new Error("Channel effect payload is invalid");
202
+ return {
203
+ effectId: row.effectId,
204
+ resourceId: row.resourceId,
205
+ sourceResourceId: row.sourceResourceId,
206
+ status: row.status,
207
+ attemptNumber: row.attemptNumber,
208
+ attemptStartedAt: row.attemptStartedAt,
209
+ ...(row.settledAt === null ? {} : { settledAt: row.settledAt }),
210
+ payload,
211
+ ...(row.resultHash === null ? {} : { result: this.state.readJson(row.resultHash) }),
212
+ };
213
+ }
214
+ resourceRevision(resourceId) {
215
+ const row = this.state.connection
216
+ .prepare("SELECT revision FROM resources WHERE resource_id = ?")
217
+ .get(resourceId);
218
+ if (!isRevisionRow(row))
219
+ throw new Error(`Resource is missing: ${resourceId}`);
220
+ return row.revision;
221
+ }
222
+ }
223
+ export function channelEffectId(channelId, decisionId, requestDigest, purpose) {
224
+ return `effect-${createHash("sha256")
225
+ .update(canonicalJson({ channelId, decisionId, requestDigest, purpose }))
226
+ .digest("hex")
227
+ .slice(0, 40)}`;
228
+ }
229
+ export function channelEffectAttemptId(effectId, attemptNumber) {
230
+ return `channel-${createHash("sha256").update(`${effectId}\0${attemptNumber}`).digest("hex")}`;
231
+ }
232
+ function isChannelEffectPayload(value) {
233
+ if (value === null || typeof value !== "object" || Array.isArray(value))
234
+ return false;
235
+ const payload = value;
236
+ return (payload.schema === "pi-workflows.channel-effect.v1" &&
237
+ typeof payload.channelId === "string" &&
238
+ typeof payload.profile === "string" &&
239
+ typeof payload.decisionId === "string" &&
240
+ (payload.purpose === "delivery" || payload.purpose === "settlement") &&
241
+ payload.request !== null &&
242
+ typeof payload.request === "object");
243
+ }
244
+ function isEffectRow(value) {
245
+ if (value === null || typeof value !== "object" || Array.isArray(value))
246
+ return false;
247
+ const row = value;
248
+ return (typeof row.effectId === "string" &&
249
+ typeof row.resourceId === "string" &&
250
+ typeof row.sourceResourceId === "string" &&
251
+ typeof row.status === "string" &&
252
+ ["pending", "applying", "applied", "rejected", "ambiguous", "cancelled"].includes(row.status) &&
253
+ typeof row.attemptNumber === "number" &&
254
+ typeof row.attemptStartedAt === "number" &&
255
+ (row.settledAt === null || typeof row.settledAt === "number") &&
256
+ Buffer.isBuffer(row.payloadHash) &&
257
+ (row.resultHash === null || Buffer.isBuffer(row.resultHash)));
258
+ }
259
+ function isEffectIdRow(value) {
260
+ return (value !== null &&
261
+ typeof value === "object" &&
262
+ !Array.isArray(value) &&
263
+ typeof value.effectId === "string");
264
+ }
265
+ function isRevisionRow(value) {
266
+ return (value !== null &&
267
+ typeof value === "object" &&
268
+ !Array.isArray(value) &&
269
+ typeof value.revision === "number");
270
+ }
271
+ //# sourceMappingURL=channel-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-effects.js","sourceRoot":"","sources":["../../src/host/channel-effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ChannelAdapterLaunch, type ChannelAdapterMessage, type ChannelAdapterResponse } from "../channels/protocol.js";
2
+ import { type SupervisedWorkerResult } from "./child-worker-supervisor.js";
3
+ import { HostProcessRegistry, type ProcessIdentity } from "./processes.js";
4
+ import type { WorkerOutcome } from "./state.js";
5
+ export declare class ChannelAdapterSupervisor {
6
+ readonly launch: ChannelAdapterLaunch;
7
+ private readonly options;
8
+ private readonly supervisor;
9
+ constructor(launch: ChannelAdapterLaunch, options: {
10
+ registry: HostProcessRegistry;
11
+ onMessage: (message: ChannelAdapterMessage) => Promise<ChannelAdapterResponse>;
12
+ env?: Record<string, string>;
13
+ startupTimeoutMs?: number;
14
+ adapterEntryPath?: string;
15
+ onSpawn?: (identity: ProcessIdentity) => void;
16
+ onDiagnostic?: (message: string) => void;
17
+ });
18
+ start(): Promise<void>;
19
+ wait(): Promise<SupervisedWorkerResult>;
20
+ stop(outcome?: WorkerOutcome): Promise<void>;
21
+ }
@@ -0,0 +1,54 @@
1
+ import fs from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { fileURLToPath } from "node:url";
4
+ import { encodeChannelLaunch } from "../channels/adapter-entry.js";
5
+ import { encodeChannelLine, parseChannelAdapterMessage, } from "../channels/protocol.js";
6
+ import { ChildWorkerSupervisor } from "./child-worker-supervisor.js";
7
+ import { HostProcessRegistry } from "./processes.js";
8
+ export class ChannelAdapterSupervisor {
9
+ launch;
10
+ options;
11
+ supervisor;
12
+ constructor(launch, options) {
13
+ this.launch = launch;
14
+ this.options = options;
15
+ this.supervisor = new ChildWorkerSupervisor({
16
+ label: `Telegram channel adapter ${launch.profile}`,
17
+ registry: options.registry,
18
+ onMessage: options.onMessage,
19
+ parseMessage: parseChannelAdapterMessage,
20
+ encodeResponse: encodeChannelLine,
21
+ isReady: (message) => message.kind === "channel.ready",
22
+ isTerminal: (message) => message.kind === "channel.exiting",
23
+ ...(options.startupTimeoutMs === undefined
24
+ ? {}
25
+ : { startupTimeoutMs: options.startupTimeoutMs }),
26
+ ...(options.onSpawn === undefined ? {} : { onSpawn: options.onSpawn }),
27
+ ...(options.onDiagnostic === undefined ? {} : { onDiagnostic: options.onDiagnostic }),
28
+ });
29
+ }
30
+ async start() {
31
+ const builtEntry = fileURLToPath(new URL("../channels/adapter-entry.js", import.meta.url));
32
+ const sourceEntry = fileURLToPath(new URL("../channels/adapter-entry.ts", import.meta.url));
33
+ const adapterEntry = this.options.adapterEntryPath ?? builtEntry;
34
+ const args = this.options.adapterEntryPath === undefined && !fs.existsSync(builtEntry)
35
+ ? ["--import", createRequire(import.meta.url).resolve("tsx"), sourceEntry]
36
+ : [adapterEntry];
37
+ await this.supervisor.start({
38
+ args,
39
+ cwd: process.cwd(),
40
+ env: {
41
+ ...process.env,
42
+ ...this.options.env,
43
+ PI_WORKFLOWS_CHANNEL_LAUNCH: encodeChannelLaunch(this.launch),
44
+ },
45
+ });
46
+ }
47
+ async wait() {
48
+ return await this.supervisor.wait();
49
+ }
50
+ async stop(outcome = "cancelled") {
51
+ await this.supervisor.stop(outcome);
52
+ }
53
+ }
54
+ //# sourceMappingURL=channel-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-supervisor.js","sourceRoot":"","sources":["../../src/host/channel-supervisor.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export type WorkflowHostOptions = {
14
14
  workerEntryPath?: string;
15
15
  workerStartupTimeoutMs?: number;
16
16
  controllerWorkerEntryPath?: string;
17
+ channelAdapterEntryPath?: string;
17
18
  onLog?: (message: string) => void;
18
19
  };
19
20
  /** Global package-owned host. It writes state and supervises code-only workers. */
@@ -28,12 +29,14 @@ export declare class WorkflowHost {
28
29
  private readonly hostState;
29
30
  private readonly queue;
30
31
  private readonly decisions;
32
+ private readonly channelEffects;
31
33
  private readonly runStore;
32
34
  private readonly views;
33
35
  private readonly registry;
34
36
  private readonly activeRuns;
35
37
  private readonly workerDescendants;
36
38
  private readonly activeControllers;
39
+ private readonly activeChannels;
37
40
  private readonly controlClaims;
38
41
  private readonly activationTasks;
39
42
  private readonly maintenanceCommands;
@@ -41,7 +44,8 @@ export declare class WorkflowHost {
41
44
  private readonly pendingRunClaims;
42
45
  private readonly pendingResumes;
43
46
  private readonly blockedRuns;
44
- private readonly deliveryClaims;
47
+ private readonly pendingTerminalMessageReconciliations;
48
+ private readonly sessionCoordinators;
45
49
  private readonly sockets;
46
50
  private readonly connections;
47
51
  private server;
@@ -53,6 +57,10 @@ export declare class WorkflowHost {
53
57
  private started;
54
58
  private controllerPollActive;
55
59
  private decisionTimeoutActive;
60
+ private decisionChannelConfig;
61
+ private decisionChannelError;
62
+ private channelReloading;
63
+ private nextTerminalMessageReconciliationAt;
56
64
  constructor(options?: WorkflowHostOptions);
57
65
  get endpoint(): string;
58
66
  private get runClaimLeaseMs();
@@ -63,31 +71,57 @@ export declare class WorkflowHost {
63
71
  private startTimers;
64
72
  private listen;
65
73
  private handleConnection;
74
+ private detachSessionCoordinators;
66
75
  private handleClientRequest;
67
76
  private executeMaintenanceCommand;
68
77
  private addSubscription;
78
+ private sessionCoordinatorView;
79
+ private requireSessionCoordinator;
80
+ private requireSessionCommand;
81
+ private reportWorkflowBranch;
82
+ private reportWorkflowTurn;
83
+ private applyWorkflowTurnEnd;
69
84
  private publishViews;
70
85
  private publishConnection;
71
86
  private submitInteractionAndWait;
72
87
  private handleRequest;
73
88
  private executeOperation;
89
+ private restartRun;
90
+ private queueSessionFollowUp;
91
+ private removeSessionFollowUp;
92
+ private changeSessionWorkflowSettings;
93
+ private recordSessionBatch;
74
94
  private executeControllerOperation;
75
95
  private statusReceipt;
76
96
  private stateStatusReceipt;
77
- private rememberDeliveryClaim;
78
- private deliveryClaim;
79
- private validateDelivery;
80
- private claimNotification;
81
- private deliverNotification;
82
- private claimTurn;
83
- private resolveTurn;
84
97
  private answerCheckpoint;
85
98
  private answerDecision;
99
+ private acceptDecisionAnswer;
86
100
  private prepareDecisionContinuation;
87
101
  private prepareContinuation;
88
102
  private startRun;
89
103
  private publishInteractionUpdate;
90
104
  private submitInteraction;
105
+ private decisionChannelStatus;
106
+ private markApplyingChannelEffectsAmbiguous;
107
+ private recoverDecisionChannel;
108
+ private reloadDecisionChannels;
109
+ private startDecisionChannel;
110
+ private ensureChannelResource;
111
+ private handleChannelExit;
112
+ private handleChannelMessage;
113
+ private applyChannelMessage;
114
+ private nextChannelCommand;
115
+ private ensureApplyingChannelEffect;
116
+ private recordChannelEffectResult;
117
+ private confirmedChannelMessageReferences;
118
+ private saveChannelCursor;
119
+ private channelCursor;
120
+ private channelEventExists;
121
+ private recordChannelEvent;
122
+ private recordChannelMutation;
123
+ private recordChannelResourceMutation;
124
+ private channelRevision;
91
125
  private claimControllerOne;
92
126
  private activateController;
93
127
  private handleControllerWorkerMessage;
@@ -117,6 +151,14 @@ export declare class WorkflowHost {
117
151
  private parkForInteraction;
118
152
  private prepareInteractionResume;
119
153
  private applyLifecycleProjection;
154
+ private ensureTerminalWorkflowMessage;
155
+ private tryEnsureTerminalWorkflowMessage;
156
+ private terminalWorkflowMessageRequired;
157
+ private terminalWorkflowMessageMissing;
158
+ private discoverMissingTerminalWorkflowMessages;
159
+ private scheduleTerminalWorkflowMessageReconciliation;
160
+ private reconcilePendingTerminalWorkflowMessages;
161
+ private terminalAncestorOutcomes;
120
162
  private completeControllerWorkflow;
121
163
  private commitActivePause;
122
164
  private recoverWorkerExit;