@osolmaz/pi-workflows 0.16.1 → 0.16.3

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 (327) hide show
  1. package/README.md +41 -41
  2. package/dist/builtins/monitor.workflow.d.ts +1 -1
  3. package/dist/builtins/monitor.workflow.js +8 -8
  4. package/dist/builtins/pi-agent-group.js +3 -3
  5. package/dist/builtins/pi-agent-group.js.map +1 -1
  6. package/dist/channels/adapter-entry.js +14 -14
  7. package/dist/channels/adapter-entry.js.map +1 -1
  8. package/dist/client/client.d.ts +6 -6
  9. package/dist/client/client.js +27 -27
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/protocol.d.ts +4 -1
  12. package/dist/client/protocol.js +17 -11
  13. package/dist/client/protocol.js.map +1 -1
  14. package/dist/client/resolver.d.ts +4 -4
  15. package/dist/client/view.d.ts +7 -1
  16. package/dist/client/view.js +1 -0
  17. package/dist/client/view.js.map +1 -1
  18. package/dist/extension/index.d.ts +1 -1
  19. package/dist/extension/index.js +66 -47
  20. package/dist/extension/index.js.map +1 -1
  21. package/dist/extension/recorder.d.ts +1 -1
  22. package/dist/extension/recorder.js +1 -1
  23. package/dist/extension/recorder.js.map +1 -1
  24. package/dist/extension/remote-recorder-store.d.ts +1 -1
  25. package/dist/extension/remote-recorder-store.js +2 -2
  26. package/dist/extension/remote-recorder-store.js.map +1 -1
  27. package/dist/extension/{controller-command.d.ts → resource-manager-command.d.ts} +6 -6
  28. package/dist/extension/{controller-command.js → resource-manager-command.js} +7 -7
  29. package/dist/extension/resource-manager-command.js.map +1 -0
  30. package/dist/extension/session-delivery.d.ts +1 -1
  31. package/dist/extension/session-delivery.js +2 -2
  32. package/dist/extension/session-delivery.js.map +1 -1
  33. package/dist/extension/session-view.d.ts +1 -1
  34. package/dist/extension/session-view.js +1 -1
  35. package/dist/extension/session-view.js.map +1 -1
  36. package/dist/extension/workflow-message-coordinator.d.ts +4 -3
  37. package/dist/extension/workflow-message-coordinator.js +81 -29
  38. package/dist/extension/workflow-message-coordinator.js.map +1 -1
  39. package/dist/resource-managers/conditions.d.ts +6 -0
  40. package/dist/{controllers → resource-managers}/conditions.js +3 -3
  41. package/dist/resource-managers/conditions.js.map +1 -0
  42. package/dist/resource-managers/definition.d.ts +6 -0
  43. package/dist/resource-managers/definition.js +45 -0
  44. package/dist/resource-managers/definition.js.map +1 -0
  45. package/dist/resource-managers/effects.d.ts +15 -0
  46. package/dist/{controllers → resource-managers}/effects.js +2 -2
  47. package/dist/resource-managers/effects.js.map +1 -0
  48. package/dist/resource-managers/errors.d.ts +12 -0
  49. package/dist/resource-managers/errors.js +25 -0
  50. package/dist/resource-managers/errors.js.map +1 -0
  51. package/dist/resource-managers/index.d.ts +12 -0
  52. package/dist/resource-managers/index.js +12 -0
  53. package/dist/resource-managers/index.js.map +1 -0
  54. package/dist/resource-managers/json.js.map +1 -0
  55. package/dist/resource-managers/loader.d.ts +23 -0
  56. package/dist/resource-managers/loader.js +75 -0
  57. package/dist/resource-managers/loader.js.map +1 -0
  58. package/dist/resource-managers/results.d.ts +5 -0
  59. package/dist/resource-managers/results.js.map +1 -0
  60. package/dist/resource-managers/runtime.d.ts +59 -0
  61. package/dist/{controllers/manager.js → resource-managers/runtime.js} +57 -57
  62. package/dist/resource-managers/runtime.js.map +1 -0
  63. package/dist/{controllers → resource-managers}/sqlite.d.ts +51 -43
  64. package/dist/{controllers → resource-managers}/sqlite.js +187 -125
  65. package/dist/resource-managers/sqlite.js.map +1 -0
  66. package/dist/{controllers → resource-managers}/store.d.ts +33 -33
  67. package/dist/{controllers → resource-managers}/store.js.map +1 -1
  68. package/dist/{controllers → resource-managers}/types.d.ts +41 -41
  69. package/dist/{controllers → resource-managers}/types.js.map +1 -1
  70. package/dist/resource-managers/workflows.d.ts +34 -0
  71. package/dist/{controllers → resource-managers}/workflows.js +15 -15
  72. package/dist/resource-managers/workflows.js.map +1 -0
  73. package/dist/server/channel-effects.js.map +1 -0
  74. package/dist/{host → server}/channel-supervisor.d.ts +6 -6
  75. package/dist/{host → server}/channel-supervisor.js +3 -3
  76. package/dist/server/channel-supervisor.js.map +1 -0
  77. package/dist/{host/child-worker-supervisor.d.ts → server/child-runner-supervisor.d.ts} +15 -13
  78. package/dist/{host/child-worker-supervisor.js → server/child-runner-supervisor.js} +6 -5
  79. package/dist/server/child-runner-supervisor.js.map +1 -0
  80. package/dist/{host → server}/processes.d.ts +3 -3
  81. package/dist/{host → server}/processes.js +3 -3
  82. package/dist/server/processes.js.map +1 -0
  83. package/dist/{host → server}/resolver-entry.d.ts +6 -6
  84. package/dist/{host → server}/resolver-entry.js +14 -14
  85. package/dist/server/resolver-entry.js.map +1 -0
  86. package/dist/server/resource-runner-entry.d.ts +2 -0
  87. package/dist/{host/controller-worker-entry.js → server/resource-runner-entry.js} +33 -33
  88. package/dist/server/resource-runner-entry.js.map +1 -0
  89. package/dist/server/resource-runner-protocol.d.ts +36 -0
  90. package/dist/server/resource-runner-protocol.js +49 -0
  91. package/dist/server/resource-runner-protocol.js.map +1 -0
  92. package/dist/server/resource-runner-supervisor.d.ts +21 -0
  93. package/dist/{host/worker-supervisor.js → server/resource-runner-supervisor.js} +17 -17
  94. package/dist/server/resource-runner-supervisor.js.map +1 -0
  95. package/dist/{host → server}/rpc-bridge.d.ts +3 -3
  96. package/dist/{host → server}/rpc-bridge.js +3 -3
  97. package/dist/server/rpc-bridge.js.map +1 -0
  98. package/dist/{host → server}/rpc-executor.d.ts +1 -1
  99. package/dist/{host → server}/rpc-executor.js +3 -3
  100. package/dist/server/rpc-executor.js.map +1 -0
  101. package/dist/{host/host-entry.js → server/server-entry.js} +6 -6
  102. package/dist/server/server-entry.js.map +1 -0
  103. package/dist/{host/runner.d.ts → server/server.d.ts} +47 -39
  104. package/dist/{host/runner.js → server/server.js} +624 -535
  105. package/dist/server/server.js.map +1 -0
  106. package/dist/{host → server}/state.d.ts +25 -25
  107. package/dist/{host → server}/state.js +49 -49
  108. package/dist/server/state.js.map +1 -0
  109. package/dist/{host → server}/view.d.ts +7 -7
  110. package/dist/{host → server}/view.js +19 -15
  111. package/dist/server/view.js.map +1 -0
  112. package/dist/server/workflow-runner-content.d.ts +6 -0
  113. package/dist/server/workflow-runner-content.js +96 -0
  114. package/dist/server/workflow-runner-content.js.map +1 -0
  115. package/dist/server/workflow-runner-entry.d.ts +13 -0
  116. package/dist/{host/worker-entry.js → server/workflow-runner-entry.js} +89 -57
  117. package/dist/server/workflow-runner-entry.js.map +1 -0
  118. package/dist/server/workflow-runner-protocol.d.ts +69 -0
  119. package/dist/server/workflow-runner-protocol.js +176 -0
  120. package/dist/server/workflow-runner-protocol.js.map +1 -0
  121. package/dist/{host/worker-store.d.ts → server/workflow-runner-store.d.ts} +11 -11
  122. package/dist/{host/worker-store.js → server/workflow-runner-store.js} +8 -8
  123. package/dist/server/workflow-runner-store.js.map +1 -0
  124. package/dist/server/workflow-runner-supervisor.d.ts +22 -0
  125. package/dist/server/workflow-runner-supervisor.js +56 -0
  126. package/dist/server/workflow-runner-supervisor.js.map +1 -0
  127. package/dist/state/prune.d.ts +1 -1
  128. package/dist/state/prune.js +17 -10
  129. package/dist/state/prune.js.map +1 -1
  130. package/dist/state/schema.js +2 -2
  131. package/dist/state/workflow-messages.d.ts +3 -1
  132. package/dist/state/workflow-messages.js +32 -1
  133. package/dist/state/workflow-messages.js.map +1 -1
  134. package/dist/viewer/backup.js +1 -1
  135. package/dist/viewer/backup.js.map +1 -1
  136. package/dist/viewer/cli.d.ts +2 -2
  137. package/dist/viewer/cli.js +46 -32
  138. package/dist/viewer/cli.js.map +1 -1
  139. package/dist/viewer/tui.d.ts +1 -1
  140. package/dist/viewer/tui.js +1 -1
  141. package/dist/viewer/tui.js.map +1 -1
  142. package/dist/workflows/command-batch.js +2 -2
  143. package/dist/workflows/composition.js +0 -4
  144. package/dist/workflows/composition.js.map +1 -1
  145. package/dist/workflows/definition.js +0 -8
  146. package/dist/workflows/definition.js.map +1 -1
  147. package/dist/workflows/engine.js +18 -20
  148. package/dist/workflows/engine.js.map +1 -1
  149. package/dist/workflows/schema.js +0 -4
  150. package/dist/workflows/schema.js.map +1 -1
  151. package/dist/workflows/store.d.ts +27 -11
  152. package/dist/workflows/store.js +66 -18
  153. package/dist/workflows/store.js.map +1 -1
  154. package/dist/workflows/types.d.ts +3 -5
  155. package/docs/2026-08-20-durable-workflow-launch-plan.md +12 -12
  156. package/docs/2026-08-25-workflow-follow-ups.md +7 -7
  157. package/docs/2026-08-25-workflow-settings.md +3 -3
  158. package/docs/2026-08-30-out-of-process-workflow-host-plan.md +3 -3
  159. package/docs/2026-09-01-restore-session-delivery-controls-plan.md +5 -5
  160. package/docs/2026-09-01-unified-workflow-client-plan.md +6 -6
  161. package/docs/2026-09-02-installed-live-e2e-plan.md +3 -3
  162. package/docs/2026-09-02-unify-workflow-messages-plan.md +8 -8
  163. package/docs/2026-09-04-workflow-run-state-plan.md +363 -0
  164. package/docs/DEFERRED_TURNS.md +7 -7
  165. package/docs/DESIGN_PHILOSOPHY.md +1 -1
  166. package/docs/HUMAN_DECISIONS.md +11 -11
  167. package/docs/HUMAN_DECISION_PRESENTATIONS.md +4 -4
  168. package/docs/MONITOR.md +1 -1
  169. package/docs/RESOURCE_MANAGERS.md +221 -0
  170. package/docs/SQLITE_STATE.md +40 -34
  171. package/docs/WORKFLOW_COMPOSITION.md +1 -1
  172. package/docs/{WORKFLOW_HOST.md → WORKFLOW_SERVER.md} +131 -116
  173. package/docs/WORKFLOW_STEP_MESSAGES.md +18 -18
  174. package/docs/WORKFLOW_UPDATES.md +16 -16
  175. package/docs/development.md +15 -14
  176. package/docs/live-replay-protocol.md +20 -20
  177. package/docs/plans/2026-08-04-controller-runtime-plan.md +25 -25
  178. package/docs/plans/2026-08-05-always-on-workflows-plan.md +8 -8
  179. package/docs/plans/2026-08-10-agent-managed-monitor-workflows-plan.md +2 -2
  180. package/docs/plans/2026-08-13-session-addressed-workflow-notifications-plan.md +1 -1
  181. package/docs/plans/2026-08-16-workflow-updates-plan.md +5 -5
  182. package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
  183. package/docs/plans/2026-08-20-bounded-command-batches-plan.md +1 -1
  184. package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +3 -3
  185. package/docs/plans/2026-08-21-sanity-check-plan.md +2 -2
  186. package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +5 -5
  187. package/docs/plans/2026-08-23-sqlite-state-plan.md +25 -25
  188. package/docs/plans/2026-08-25-live-workflow-settings-plan.md +4 -4
  189. package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +3 -3
  190. package/docs/plans/2026-09-04-workflow-runner-resume-state-plan.md +318 -0
  191. package/docs/plans/piw-viewer-experience-implementation-plan.md +1 -1
  192. package/docs/tui-viewer.md +9 -9
  193. package/docs/workflows.md +78 -63
  194. package/examples/{controllers/pull-request.controller.ts → resource-managers/pull-request.resource-manager.ts} +12 -12
  195. package/herdr-plugin.toml +1 -1
  196. package/package.json +5 -5
  197. package/protocol/client.v1.schema.json +7 -7
  198. package/protocol/fixtures/client-v1.json +1 -1
  199. package/src/builtins/monitor.workflow.ts +9 -9
  200. package/src/builtins/pi-agent-group.ts +3 -3
  201. package/src/channels/adapter-entry.ts +14 -14
  202. package/src/client/client.ts +33 -32
  203. package/src/client/protocol.ts +16 -11
  204. package/src/client/resolver.ts +4 -4
  205. package/src/client/view.ts +9 -1
  206. package/src/extension/index.ts +81 -53
  207. package/src/extension/recorder.ts +1 -1
  208. package/src/extension/remote-recorder-store.ts +2 -2
  209. package/src/extension/resource-manager-command.ts +45 -0
  210. package/src/extension/session-delivery.ts +2 -2
  211. package/src/extension/session-view.ts +1 -1
  212. package/src/extension/workflow-message-coordinator.ts +94 -30
  213. package/src/{controllers → resource-managers}/conditions.ts +23 -23
  214. package/src/resource-managers/definition.ts +71 -0
  215. package/src/{controllers → resource-managers}/effects.ts +9 -9
  216. package/src/resource-managers/errors.ts +27 -0
  217. package/src/resource-managers/index.ts +88 -0
  218. package/src/resource-managers/loader.ts +111 -0
  219. package/src/{controllers → resource-managers}/results.ts +4 -4
  220. package/src/{controllers/manager.ts → resource-managers/runtime.ts} +95 -92
  221. package/src/{controllers → resource-managers}/sqlite.ts +275 -181
  222. package/src/{controllers → resource-managers}/store.ts +46 -38
  223. package/src/{controllers → resource-managers}/types.ts +50 -41
  224. package/src/{controllers → resource-managers}/workflows.ts +43 -41
  225. package/src/{host → server}/channel-supervisor.ts +8 -8
  226. package/src/{host/child-worker-supervisor.ts → server/child-runner-supervisor.ts} +22 -18
  227. package/src/{host → server}/processes.ts +3 -3
  228. package/src/{host → server}/resolver-entry.ts +28 -25
  229. package/src/{host/controller-worker-entry.ts → server/resource-runner-entry.ts} +67 -65
  230. package/src/server/resource-runner-protocol.ts +103 -0
  231. package/src/server/resource-runner-supervisor.ts +76 -0
  232. package/src/{host → server}/rpc-bridge.ts +3 -3
  233. package/src/{host → server}/rpc-executor.ts +4 -4
  234. package/src/{host/host-entry.ts → server/server-entry.ts} +5 -5
  235. package/src/{host/runner.ts → server/server.ts} +786 -672
  236. package/src/{host → server}/state.ts +78 -67
  237. package/src/{host → server}/view.ts +21 -17
  238. package/src/server/workflow-runner-content.ts +119 -0
  239. package/src/{host/worker-entry.ts → server/workflow-runner-entry.ts} +131 -82
  240. package/src/server/workflow-runner-protocol.ts +241 -0
  241. package/src/{host/worker-store.ts → server/workflow-runner-store.ts} +18 -20
  242. package/src/server/workflow-runner-supervisor.ts +79 -0
  243. package/src/state/prune.ts +27 -9
  244. package/src/state/schema.ts +2 -2
  245. package/src/state/workflow-messages.ts +52 -1
  246. package/src/viewer/backup.ts +1 -1
  247. package/src/viewer/cli.ts +50 -36
  248. package/src/viewer/tui.ts +1 -1
  249. package/src/workflows/command-batch.ts +2 -2
  250. package/src/workflows/composition.ts +0 -5
  251. package/src/workflows/definition.ts +0 -8
  252. package/src/workflows/engine.ts +18 -21
  253. package/src/workflows/schema.ts +0 -6
  254. package/src/workflows/store.ts +95 -28
  255. package/src/workflows/types.ts +3 -5
  256. package/dist/controllers/conditions.d.ts +0 -6
  257. package/dist/controllers/conditions.js.map +0 -1
  258. package/dist/controllers/definition.d.ts +0 -6
  259. package/dist/controllers/definition.js +0 -45
  260. package/dist/controllers/definition.js.map +0 -1
  261. package/dist/controllers/effects.d.ts +0 -15
  262. package/dist/controllers/effects.js.map +0 -1
  263. package/dist/controllers/errors.d.ts +0 -12
  264. package/dist/controllers/errors.js +0 -25
  265. package/dist/controllers/errors.js.map +0 -1
  266. package/dist/controllers/index.d.ts +0 -12
  267. package/dist/controllers/index.js +0 -12
  268. package/dist/controllers/index.js.map +0 -1
  269. package/dist/controllers/json.js.map +0 -1
  270. package/dist/controllers/loader.d.ts +0 -23
  271. package/dist/controllers/loader.js +0 -74
  272. package/dist/controllers/loader.js.map +0 -1
  273. package/dist/controllers/manager.d.ts +0 -59
  274. package/dist/controllers/manager.js.map +0 -1
  275. package/dist/controllers/results.d.ts +0 -5
  276. package/dist/controllers/results.js.map +0 -1
  277. package/dist/controllers/sqlite.js.map +0 -1
  278. package/dist/controllers/workflows.d.ts +0 -34
  279. package/dist/controllers/workflows.js.map +0 -1
  280. package/dist/extension/controller-command.js.map +0 -1
  281. package/dist/host/channel-effects.js.map +0 -1
  282. package/dist/host/channel-supervisor.js.map +0 -1
  283. package/dist/host/child-worker-supervisor.js.map +0 -1
  284. package/dist/host/controller-worker-entry.d.ts +0 -2
  285. package/dist/host/controller-worker-entry.js.map +0 -1
  286. package/dist/host/controller-worker-protocol.d.ts +0 -36
  287. package/dist/host/controller-worker-protocol.js +0 -49
  288. package/dist/host/controller-worker-protocol.js.map +0 -1
  289. package/dist/host/controller-worker-supervisor.d.ts +0 -21
  290. package/dist/host/controller-worker-supervisor.js +0 -54
  291. package/dist/host/controller-worker-supervisor.js.map +0 -1
  292. package/dist/host/host-entry.js.map +0 -1
  293. package/dist/host/processes.js.map +0 -1
  294. package/dist/host/resolver-entry.js.map +0 -1
  295. package/dist/host/rpc-bridge.js.map +0 -1
  296. package/dist/host/rpc-executor.js.map +0 -1
  297. package/dist/host/runner.js.map +0 -1
  298. package/dist/host/state.js.map +0 -1
  299. package/dist/host/view.js.map +0 -1
  300. package/dist/host/worker-entry.d.ts +0 -10
  301. package/dist/host/worker-entry.js.map +0 -1
  302. package/dist/host/worker-protocol.d.ts +0 -31
  303. package/dist/host/worker-protocol.js +0 -122
  304. package/dist/host/worker-protocol.js.map +0 -1
  305. package/dist/host/worker-store.js.map +0 -1
  306. package/dist/host/worker-supervisor.d.ts +0 -22
  307. package/dist/host/worker-supervisor.js.map +0 -1
  308. package/docs/CONTROLLERS.md +0 -217
  309. package/src/controllers/definition.ts +0 -65
  310. package/src/controllers/errors.ts +0 -27
  311. package/src/controllers/index.ts +0 -88
  312. package/src/controllers/loader.ts +0 -104
  313. package/src/extension/controller-command.ts +0 -45
  314. package/src/host/controller-worker-protocol.ts +0 -104
  315. package/src/host/controller-worker-supervisor.ts +0 -79
  316. package/src/host/worker-protocol.ts +0 -165
  317. package/src/host/worker-supervisor.ts +0 -74
  318. /package/dist/{controllers → resource-managers}/json.d.ts +0 -0
  319. /package/dist/{controllers → resource-managers}/json.js +0 -0
  320. /package/dist/{controllers → resource-managers}/results.js +0 -0
  321. /package/dist/{controllers → resource-managers}/store.js +0 -0
  322. /package/dist/{controllers → resource-managers}/types.js +0 -0
  323. /package/dist/{host → server}/channel-effects.d.ts +0 -0
  324. /package/dist/{host → server}/channel-effects.js +0 -0
  325. /package/dist/{host/host-entry.d.ts → server/server-entry.d.ts} +0 -0
  326. /package/src/{controllers → resource-managers}/json.ts +0 -0
  327. /package/src/{host → server}/channel-effects.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  import type {
2
2
  ChildWorkflowRecord,
3
- ControllerEvent,
4
- ControllerQueueClaim,
5
- ControllerResource,
6
- ControllerResourceRef,
7
- ControllerResourceStatus,
3
+ ResourceManagerEvent,
4
+ ResourceManagerQueueClaim,
5
+ ManagedResource,
6
+ ManagedResourceRef,
7
+ ManagedResourceStatus,
8
8
  EffectRecord,
9
9
  JsonObject,
10
10
  } from "./types.js";
@@ -15,7 +15,7 @@ export type QueueRequeueOptions = {
15
15
  };
16
16
 
17
17
  export type QueueItem = {
18
- controller: string;
18
+ resourceManager: string;
19
19
  key: string;
20
20
  availableAt: string;
21
21
  consecutiveErrors: number;
@@ -39,61 +39,65 @@ export type WorkflowRecordUpdate = {
39
39
  error?: string | null;
40
40
  };
41
41
 
42
- export interface ControllerStore {
42
+ export interface ResourceManagerStore {
43
43
  close(): void;
44
44
 
45
45
  putResource<TSpec, TStatus>(options: {
46
- controller: string;
46
+ resourceManager: string;
47
47
  key: string;
48
48
  spec: TSpec;
49
49
  initialStatus: TStatus;
50
50
  now?: string;
51
- }): ControllerResource<TSpec, TStatus>;
51
+ }): ManagedResource<TSpec, TStatus>;
52
52
  getResource<TSpec = unknown, TStatus = unknown>(
53
- ref: ControllerResourceRef,
54
- ): ControllerResource<TSpec, TStatus> | undefined;
55
- getResourceByUid(uid: string): ControllerResource | undefined;
53
+ ref: ManagedResourceRef,
54
+ ): ManagedResource<TSpec, TStatus> | undefined;
55
+ getResourceByUid(uid: string): ManagedResource | undefined;
56
56
  listResources<TSpec = unknown, TStatus = unknown>(options?: {
57
- controller?: string;
58
- }): ControllerResource<TSpec, TStatus>[];
57
+ resourceManager?: string;
58
+ }): ManagedResource<TSpec, TStatus>[];
59
59
  updateStatus<TStatus>(options: {
60
- ref: ControllerResourceRef;
60
+ ref: ManagedResourceRef;
61
61
  expectedResourceVersion: number;
62
- claim: ControllerQueueClaim;
63
- status: ControllerResourceStatus<TStatus>;
62
+ claim: ResourceManagerQueueClaim;
63
+ status: ManagedResourceStatus<TStatus>;
64
64
  finalizers?: string[];
65
65
  now?: string;
66
- }): ControllerResource<unknown, TStatus>;
67
- requestDeletion(ref: ControllerResourceRef, now?: string): ControllerResource;
66
+ }): ManagedResource<unknown, TStatus>;
67
+ requestDeletion(ref: ManagedResourceRef, now?: string): ManagedResource;
68
68
  updateFinalizers(options: {
69
- ref: ControllerResourceRef;
69
+ ref: ManagedResourceRef;
70
70
  expectedResourceVersion: number;
71
71
  finalizers: string[];
72
72
  now?: string;
73
- }): ControllerResource;
73
+ }): ManagedResource;
74
74
  deleteResource(
75
- ref: ControllerResourceRef,
75
+ ref: ManagedResourceRef,
76
76
  expectedResourceVersion: number,
77
- claim: ControllerQueueClaim,
77
+ claim: ResourceManagerQueueClaim,
78
78
  ): boolean;
79
79
 
80
- enqueue(ref: ControllerResourceRef, availableAt?: string): void;
80
+ enqueue(ref: ManagedResourceRef, availableAt?: string): void;
81
81
  claimNext(options: {
82
- controllers: string[];
82
+ resourceManagers: string[];
83
83
  ownerId: string;
84
84
  leaseMs: number;
85
85
  now?: string;
86
- exclude?: ControllerResourceRef[];
87
- }): ControllerQueueClaim | undefined;
88
- renewClaim(claim: ControllerQueueClaim, leaseMs: number, now?: string): boolean;
89
- settleClaim(claim: ControllerQueueClaim, now?: string): boolean;
90
- requeueClaim(claim: ControllerQueueClaim, options: QueueRequeueOptions, now?: string): boolean;
86
+ exclude?: ManagedResourceRef[];
87
+ }): ResourceManagerQueueClaim | undefined;
88
+ renewClaim(claim: ResourceManagerQueueClaim, leaseMs: number, now?: string): boolean;
89
+ settleClaim(claim: ResourceManagerQueueClaim, now?: string): boolean;
90
+ requeueClaim(
91
+ claim: ResourceManagerQueueClaim,
92
+ options: QueueRequeueOptions,
93
+ now?: string,
94
+ ): boolean;
91
95
  listQueue(): QueueItem[];
92
96
 
93
97
  reserveEffect(options: {
94
98
  key: string;
95
99
  resourceUid: string;
96
- claim: ControllerQueueClaim;
100
+ claim: ResourceManagerQueueClaim;
97
101
  generation: number;
98
102
  kind: string;
99
103
  requestFingerprint: string;
@@ -103,7 +107,7 @@ export interface ControllerStore {
103
107
  updateEffect(options: {
104
108
  resourceUid: string;
105
109
  key: string;
106
- claim: ControllerQueueClaim;
110
+ claim: ResourceManagerQueueClaim;
107
111
  state: EffectRecord["state"];
108
112
  externalRef?: string;
109
113
  error?: string;
@@ -113,7 +117,7 @@ export interface ControllerStore {
113
117
 
114
118
  reserveWorkflow(options: {
115
119
  resourceUid: string;
116
- claim: ControllerQueueClaim;
120
+ claim: ResourceManagerQueueClaim;
117
121
  requestKey: string;
118
122
  workflow: string;
119
123
  inputFingerprint: string;
@@ -123,18 +127,22 @@ export interface ControllerStore {
123
127
  updateWorkflow(
124
128
  requestId: string,
125
129
  update: WorkflowRecordUpdate,
126
- claim: ControllerQueueClaim,
130
+ claim: ResourceManagerQueueClaim,
127
131
  ): ChildWorkflowRecord;
128
132
  completeWorkflow(requestId: string, update: WorkflowRecordUpdate): ChildWorkflowRecord;
129
133
  listWorkflows(resourceUid: string): ChildWorkflowRecord[];
130
134
 
131
135
  recordEvent(options: {
132
- controller: string;
136
+ resourceManager: string;
133
137
  key: string;
134
- claim?: ControllerQueueClaim;
138
+ claim?: ResourceManagerQueueClaim;
135
139
  type: string;
136
140
  payload?: JsonObject;
137
141
  now?: string;
138
- }): ControllerEvent;
139
- listEvents(options?: { controller?: string; key?: string; limit?: number }): ControllerEvent[];
142
+ }): ResourceManagerEvent;
143
+ listEvents(options?: {
144
+ resourceManager?: string;
145
+ key?: string;
146
+ limit?: number;
147
+ }): ResourceManagerEvent[];
140
148
  }
@@ -5,11 +5,11 @@ export type JsonPrimitive = string | number | boolean | null;
5
5
  export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };
6
6
  export type JsonObject = { [key: string]: JsonValue };
7
7
 
8
- export type ControllerConditionStatus = true | false | "unknown";
8
+ export type ManagedResourceConditionStatus = true | false | "unknown";
9
9
 
10
- export type ControllerCondition = {
10
+ export type ManagedResourceCondition = {
11
11
  type: string;
12
- status: ControllerConditionStatus;
12
+ status: ManagedResourceConditionStatus;
13
13
  reason: string;
14
14
  message?: string;
15
15
  observedGeneration: number;
@@ -31,17 +31,17 @@ export type ChildWorkflowReference = {
31
31
  attempt: number;
32
32
  };
33
33
 
34
- export type ControllerResourceStatus<TStatus> = {
34
+ export type ManagedResourceStatus<TStatus> = {
35
35
  observedGeneration: number;
36
- conditions: ControllerCondition[];
37
- controllerStatus: TStatus;
36
+ conditions: ManagedResourceCondition[];
37
+ resourceManagerStatus: TStatus;
38
38
  workflowRun?: ChildWorkflowReference;
39
39
  };
40
40
 
41
- export type ControllerResource<TSpec = unknown, TStatus = unknown> = {
41
+ export type ManagedResource<TSpec = unknown, TStatus = unknown> = {
42
42
  metadata: {
43
43
  uid: string;
44
- controller: string;
44
+ resourceManager: string;
45
45
  key: string;
46
46
  resourceVersion: number;
47
47
  generation: number;
@@ -49,24 +49,24 @@ export type ControllerResource<TSpec = unknown, TStatus = unknown> = {
49
49
  finalizers: string[];
50
50
  };
51
51
  spec: TSpec;
52
- status: ControllerResourceStatus<TStatus>;
52
+ status: ManagedResourceStatus<TStatus>;
53
53
  };
54
54
 
55
- export type ControllerResourceRef = {
56
- controller: string;
55
+ export type ManagedResourceRef = {
56
+ resourceManager: string;
57
57
  key: string;
58
58
  };
59
59
 
60
- export type ControllerConditionInput = {
60
+ export type ManagedResourceConditionInput = {
61
61
  type: string;
62
- status: ControllerConditionStatus;
62
+ status: ManagedResourceConditionStatus;
63
63
  reason: string;
64
64
  message?: string;
65
65
  };
66
66
 
67
- export type ControllerStatusPatch<TStatus> = {
68
- controllerStatus?: TStatus;
69
- conditions?: ControllerConditionInput[];
67
+ export type ResourceManagerStatusPatch<TStatus> = {
68
+ resourceManagerStatus?: TStatus;
69
+ conditions?: ManagedResourceConditionInput[];
70
70
  workflowRun?: ChildWorkflowReference | null;
71
71
  finalizers?: string[];
72
72
  };
@@ -74,12 +74,12 @@ export type ControllerStatusPatch<TStatus> = {
74
74
  export type ReconcileResult<TStatus> =
75
75
  | {
76
76
  kind: "settled";
77
- status?: ControllerStatusPatch<TStatus>;
77
+ status?: ResourceManagerStatusPatch<TStatus>;
78
78
  }
79
79
  | {
80
80
  kind: "requeue";
81
81
  afterMs?: number;
82
- status?: ControllerStatusPatch<TStatus>;
82
+ status?: ResourceManagerStatusPatch<TStatus>;
83
83
  };
84
84
 
85
85
  export type EffectState = "pending" | "applied" | "rejected" | "indeterminate";
@@ -115,7 +115,7 @@ export type EffectDefinition<TRequest> = {
115
115
  apply: (signal: AbortSignal) => MaybePromise<EffectApplication>;
116
116
  };
117
117
 
118
- export interface ControllerEffects {
118
+ export interface ResourceManagerEffects {
119
119
  ensure<TRequest>(definition: EffectDefinition<TRequest>): Promise<EffectRecord>;
120
120
  }
121
121
 
@@ -133,7 +133,7 @@ export type ChildWorkflowRecord = ChildWorkflowReference & {
133
133
  error?: string;
134
134
  };
135
135
 
136
- export type ControllerSettingsChangeRequest = {
136
+ export type ResourceManagerSettingsChangeRequest = {
137
137
  requestKey: string;
138
138
  runId: string;
139
139
  scopeId?: string;
@@ -141,20 +141,20 @@ export type ControllerSettingsChangeRequest = {
141
141
  patch: JsonPatch;
142
142
  };
143
143
 
144
- export type ControllerSettingsChangeResult = {
144
+ export type ResourceManagerSettingsChangeResult = {
145
145
  runId: string;
146
146
  scopeId: string;
147
147
  changeNumber: number;
148
148
  adopted: boolean;
149
149
  };
150
150
 
151
- export type ControllerQueueFollowUpRequest = {
151
+ export type ResourceManagerQueueFollowUpRequest = {
152
152
  requestKey: string;
153
153
  runId: string;
154
154
  prompt: string;
155
155
  };
156
156
 
157
- export type ControllerFollowUpResult = {
157
+ export type ResourceManagerFollowUpResult = {
158
158
  runId: string;
159
159
  followUpId: string;
160
160
  order: number;
@@ -162,50 +162,59 @@ export type ControllerFollowUpResult = {
162
162
  adopted: boolean;
163
163
  };
164
164
 
165
- export type ControllerRemoveFollowUpRequest = {
165
+ export type ResourceManagerRemoveFollowUpRequest = {
166
166
  requestKey: string;
167
167
  runId: string;
168
168
  followUpId: string;
169
169
  };
170
170
 
171
- export interface ControllerWorkflows {
171
+ export interface ResourceManagerWorkflows {
172
172
  ensure(request: ChildWorkflowRequest): Promise<ChildWorkflowRecord>;
173
- changeSettings(request: ControllerSettingsChangeRequest): Promise<ControllerSettingsChangeResult>;
174
- queueFollowUp(request: ControllerQueueFollowUpRequest): Promise<ControllerFollowUpResult>;
175
- removeFollowUp(request: ControllerRemoveFollowUpRequest): Promise<ControllerFollowUpResult>;
173
+ changeSettings(
174
+ request: ResourceManagerSettingsChangeRequest,
175
+ ): Promise<ResourceManagerSettingsChangeResult>;
176
+ queueFollowUp(
177
+ request: ResourceManagerQueueFollowUpRequest,
178
+ ): Promise<ResourceManagerFollowUpResult>;
179
+ removeFollowUp(
180
+ request: ResourceManagerRemoveFollowUpRequest,
181
+ ): Promise<ResourceManagerFollowUpResult>;
176
182
  }
177
183
 
178
184
  export type ReconcileContext<TStatus> = {
179
185
  signal: AbortSignal;
180
- effects: ControllerEffects;
181
- workflows: ControllerWorkflows;
182
- settled(status?: ControllerStatusPatch<TStatus>): ReconcileResult<TStatus>;
183
- requeue(status?: ControllerStatusPatch<TStatus>): ReconcileResult<TStatus>;
184
- requeueAfter(afterMs: number, status?: ControllerStatusPatch<TStatus>): ReconcileResult<TStatus>;
186
+ effects: ResourceManagerEffects;
187
+ workflows: ResourceManagerWorkflows;
188
+ settled(status?: ResourceManagerStatusPatch<TStatus>): ReconcileResult<TStatus>;
189
+ requeue(status?: ResourceManagerStatusPatch<TStatus>): ReconcileResult<TStatus>;
190
+ requeueAfter(
191
+ afterMs: number,
192
+ status?: ResourceManagerStatusPatch<TStatus>,
193
+ ): ReconcileResult<TStatus>;
185
194
  };
186
195
 
187
- export type ControllerDefinition<TSpec = unknown, TStatus = unknown> = {
196
+ export type ResourceManagerDefinition<TSpec = unknown, TStatus = unknown> = {
188
197
  name: string;
189
198
  initialStatus: (spec: TSpec) => TStatus;
190
199
  reconcile: (
191
200
  context: ReconcileContext<TStatus>,
192
- resource: ControllerResource<TSpec, TStatus>,
201
+ resource: ManagedResource<TSpec, TStatus>,
193
202
  ) => MaybePromise<ReconcileResult<TStatus>>;
194
203
  timeoutMs?: number;
195
204
  };
196
205
 
197
- export type AnyControllerDefinition = {
206
+ export type AnyResourceManagerDefinition = {
198
207
  name: string;
199
208
  initialStatus(spec: unknown): unknown;
200
209
  reconcile(
201
210
  context: ReconcileContext<unknown>,
202
- resource: ControllerResource,
211
+ resource: ManagedResource,
203
212
  ): MaybePromise<ReconcileResult<unknown>>;
204
213
  timeoutMs?: number;
205
214
  };
206
215
 
207
- export type ControllerQueueClaim = {
208
- controller: string;
216
+ export type ResourceManagerQueueClaim = {
217
+ resourceManager: string;
209
218
  key: string;
210
219
  ownerId: string;
211
220
  token: string;
@@ -216,10 +225,10 @@ export type ControllerQueueClaim = {
216
225
  expiresAt: string;
217
226
  };
218
227
 
219
- export type ControllerEvent = {
228
+ export type ResourceManagerEvent = {
220
229
  seq: number;
221
230
  recordedAt: string;
222
- controller: string;
231
+ resourceManager: string;
223
232
  key: string;
224
233
  type: string;
225
234
  payload: JsonObject;
@@ -1,18 +1,18 @@
1
1
  import { createRunId } from "../workflows/store.js";
2
2
  import { jsonFingerprint } from "./json.js";
3
- import type { ControllerStore } from "./store.js";
3
+ import type { ResourceManagerStore } from "./store.js";
4
4
  import type {
5
5
  ChildWorkflowRecord,
6
6
  ChildWorkflowRequest,
7
7
  ChildWorkflowState,
8
- ControllerFollowUpResult,
9
- ControllerQueueClaim,
10
- ControllerQueueFollowUpRequest,
11
- ControllerRemoveFollowUpRequest,
12
- ControllerResource,
13
- ControllerSettingsChangeRequest,
14
- ControllerSettingsChangeResult,
15
- ControllerWorkflows,
8
+ ResourceManagerFollowUpResult,
9
+ ResourceManagerQueueClaim,
10
+ ResourceManagerQueueFollowUpRequest,
11
+ ResourceManagerRemoveFollowUpRequest,
12
+ ManagedResource,
13
+ ResourceManagerSettingsChangeRequest,
14
+ ResourceManagerSettingsChangeResult,
15
+ ResourceManagerWorkflows,
16
16
  } from "./types.js";
17
17
 
18
18
  export type WorkflowSchedulerRequest = {
@@ -29,86 +29,88 @@ export type WorkflowSchedulerResult = {
29
29
  error?: string;
30
30
  };
31
31
 
32
- export type ControllerWorkflowControlRequest<TRequest> = TRequest & {
33
- controllerResourceUid: string;
32
+ export type ResourceManagerWorkflowControlRequest<TRequest> = TRequest & {
33
+ managedResourceUid: string;
34
34
  actorRequestKey: string;
35
35
  };
36
36
 
37
- export interface ControllerWorkflowScheduler {
37
+ export interface ResourceManagerWorkflowScheduler {
38
38
  ensure(
39
39
  request: WorkflowSchedulerRequest,
40
40
  signal: AbortSignal,
41
41
  onComplete: (result: WorkflowSchedulerResult) => void,
42
42
  ): Promise<WorkflowSchedulerResult>;
43
43
  changeSettings?(
44
- request: ControllerWorkflowControlRequest<ControllerSettingsChangeRequest>,
44
+ request: ResourceManagerWorkflowControlRequest<ResourceManagerSettingsChangeRequest>,
45
45
  signal: AbortSignal,
46
- ): Promise<ControllerSettingsChangeResult>;
46
+ ): Promise<ResourceManagerSettingsChangeResult>;
47
47
  queueFollowUp?(
48
- request: ControllerWorkflowControlRequest<ControllerQueueFollowUpRequest>,
48
+ request: ResourceManagerWorkflowControlRequest<ResourceManagerQueueFollowUpRequest>,
49
49
  signal: AbortSignal,
50
- ): Promise<ControllerFollowUpResult>;
50
+ ): Promise<ResourceManagerFollowUpResult>;
51
51
  removeFollowUp?(
52
- request: ControllerWorkflowControlRequest<ControllerRemoveFollowUpRequest>,
52
+ request: ResourceManagerWorkflowControlRequest<ResourceManagerRemoveFollowUpRequest>,
53
53
  signal: AbortSignal,
54
- ): Promise<ControllerFollowUpResult>;
54
+ ): Promise<ResourceManagerFollowUpResult>;
55
55
  }
56
56
 
57
- function controllerRequestKey(resource: ControllerResource, requestKey: string): string {
57
+ function resourceManagerRequestKey(resource: ManagedResource, requestKey: string): string {
58
58
  if (requestKey.trim().length === 0) {
59
- throw new Error("Controller workflow requestKey must not be empty");
59
+ throw new Error("ResourceManager workflow requestKey must not be empty");
60
60
  }
61
- return `controller:${resource.metadata.uid}:${requestKey}`;
61
+ return `resourceManager:${resource.metadata.uid}:${requestKey}`;
62
62
  }
63
63
 
64
- export class ControllerWorkflowCoordinator {
64
+ export class ResourceManagerWorkflowCoordinator {
65
65
  constructor(
66
- private readonly store: ControllerStore,
67
- private readonly scheduler?: ControllerWorkflowScheduler,
66
+ private readonly store: ResourceManagerStore,
67
+ private readonly scheduler?: ResourceManagerWorkflowScheduler,
68
68
  ) {}
69
69
 
70
70
  forResource(
71
- resource: ControllerResource,
72
- claim: ControllerQueueClaim,
71
+ resource: ManagedResource,
72
+ claim: ResourceManagerQueueClaim,
73
73
  signal: AbortSignal,
74
- ): ControllerWorkflows {
74
+ ): ResourceManagerWorkflows {
75
75
  return {
76
76
  ensure: async (request) => await this.ensure(resource, claim, request, signal),
77
77
  changeSettings: async (request) => {
78
78
  if (this.scheduler?.changeSettings === undefined) {
79
- throw new Error("This controller host does not support workflow settings changes");
79
+ throw new Error(
80
+ "This resource manager runtime does not support workflow settings changes",
81
+ );
80
82
  }
81
83
  return await this.scheduler.changeSettings(
82
84
  {
83
85
  ...request,
84
- controllerResourceUid: resource.metadata.uid,
85
- actorRequestKey: controllerRequestKey(resource, request.requestKey),
86
+ managedResourceUid: resource.metadata.uid,
87
+ actorRequestKey: resourceManagerRequestKey(resource, request.requestKey),
86
88
  },
87
89
  signal,
88
90
  );
89
91
  },
90
92
  queueFollowUp: async (request) => {
91
93
  if (this.scheduler?.queueFollowUp === undefined) {
92
- throw new Error("This controller host does not support workflow follow-ups");
94
+ throw new Error("This resource manager runtime does not support workflow follow-ups");
93
95
  }
94
96
  return await this.scheduler.queueFollowUp(
95
97
  {
96
98
  ...request,
97
- controllerResourceUid: resource.metadata.uid,
98
- actorRequestKey: controllerRequestKey(resource, request.requestKey),
99
+ managedResourceUid: resource.metadata.uid,
100
+ actorRequestKey: resourceManagerRequestKey(resource, request.requestKey),
99
101
  },
100
102
  signal,
101
103
  );
102
104
  },
103
105
  removeFollowUp: async (request) => {
104
106
  if (this.scheduler?.removeFollowUp === undefined) {
105
- throw new Error("This controller host does not support workflow follow-ups");
107
+ throw new Error("This resource manager runtime does not support workflow follow-ups");
106
108
  }
107
109
  return await this.scheduler.removeFollowUp(
108
110
  {
109
111
  ...request,
110
- controllerResourceUid: resource.metadata.uid,
111
- actorRequestKey: controllerRequestKey(resource, request.requestKey),
112
+ managedResourceUid: resource.metadata.uid,
113
+ actorRequestKey: resourceManagerRequestKey(resource, request.requestKey),
112
114
  },
113
115
  signal,
114
116
  );
@@ -131,8 +133,8 @@ export class ControllerWorkflowCoordinator {
131
133
  }
132
134
 
133
135
  private async ensure(
134
- resource: ControllerResource,
135
- claim: ControllerQueueClaim,
136
+ resource: ManagedResource,
137
+ claim: ResourceManagerQueueClaim,
136
138
  request: ChildWorkflowRequest,
137
139
  signal: AbortSignal,
138
140
  ): Promise<ChildWorkflowRecord> {
@@ -212,7 +214,7 @@ export class ControllerWorkflowCoordinator {
212
214
  const resource = this.store.getResourceByUid(resourceUid);
213
215
  if (resource !== undefined) {
214
216
  this.store.enqueue({
215
- controller: resource.metadata.controller,
217
+ resourceManager: resource.metadata.resourceManager,
216
218
  key: resource.metadata.key,
217
219
  });
218
220
  }
@@ -221,14 +223,14 @@ export class ControllerWorkflowCoordinator {
221
223
  private recordEvent(
222
224
  record: ChildWorkflowRecord,
223
225
  type: string,
224
- claim: ControllerQueueClaim,
226
+ claim: ResourceManagerQueueClaim,
225
227
  ): void {
226
228
  const resource = this.store.getResourceByUid(record.resourceUid);
227
229
  if (resource === undefined) {
228
230
  return;
229
231
  }
230
232
  this.store.recordEvent({
231
- controller: resource.metadata.controller,
233
+ resourceManager: resource.metadata.resourceManager,
232
234
  key: resource.metadata.key,
233
235
  claim,
234
236
  type,
@@ -9,17 +9,17 @@ import {
9
9
  type ChannelAdapterMessage,
10
10
  type ChannelAdapterResponse,
11
11
  } from "../channels/protocol.js";
12
- import { ChildWorkerSupervisor, type SupervisedWorkerResult } from "./child-worker-supervisor.js";
13
- import { HostProcessRegistry, type ProcessIdentity } from "./processes.js";
14
- import type { WorkerOutcome } from "./state.js";
12
+ import { ChildRunnerSupervisor, type SupervisedRunnerResult } from "./child-runner-supervisor.js";
13
+ import { ServerProcessRegistry, type ProcessIdentity } from "./processes.js";
14
+ import type { RunnerOutcome } from "./state.js";
15
15
 
16
16
  export class ChannelAdapterSupervisor {
17
- private readonly supervisor: ChildWorkerSupervisor<ChannelAdapterMessage, ChannelAdapterResponse>;
17
+ private readonly supervisor: ChildRunnerSupervisor<ChannelAdapterMessage, ChannelAdapterResponse>;
18
18
 
19
19
  constructor(
20
20
  readonly launch: ChannelAdapterLaunch,
21
21
  private readonly options: {
22
- registry: HostProcessRegistry;
22
+ registry: ServerProcessRegistry;
23
23
  onMessage: (message: ChannelAdapterMessage) => Promise<ChannelAdapterResponse>;
24
24
  env?: Record<string, string>;
25
25
  startupTimeoutMs?: number;
@@ -28,7 +28,7 @@ export class ChannelAdapterSupervisor {
28
28
  onDiagnostic?: (message: string) => void;
29
29
  },
30
30
  ) {
31
- this.supervisor = new ChildWorkerSupervisor({
31
+ this.supervisor = new ChildRunnerSupervisor({
32
32
  label: `Telegram channel adapter ${launch.profile}`,
33
33
  registry: options.registry,
34
34
  onMessage: options.onMessage,
@@ -63,11 +63,11 @@ export class ChannelAdapterSupervisor {
63
63
  });
64
64
  }
65
65
 
66
- async wait(): Promise<SupervisedWorkerResult> {
66
+ async wait(): Promise<SupervisedRunnerResult> {
67
67
  return await this.supervisor.wait();
68
68
  }
69
69
 
70
- async stop(outcome: WorkerOutcome = "cancelled"): Promise<void> {
70
+ async stop(outcome: RunnerOutcome = "cancelled"): Promise<void> {
71
71
  await this.supervisor.stop(outcome);
72
72
  }
73
73
  }