@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
@@ -11,9 +11,9 @@ export function applyStatusPatch(current, patch, generation, now) {
11
11
  return {
12
12
  observedGeneration: generation,
13
13
  conditions: mergeConditions(current.conditions, patch?.conditions ?? [], generation, now),
14
- controllerStatus: patch !== undefined && Object.hasOwn(patch, "controllerStatus")
15
- ? patch.controllerStatus
16
- : current.controllerStatus,
14
+ resourceManagerStatus: patch !== undefined && Object.hasOwn(patch, "resourceManagerStatus")
15
+ ? patch.resourceManagerStatus
16
+ : current.resourceManagerStatus,
17
17
  ...(patch?.workflowRun === null
18
18
  ? {}
19
19
  : patch?.workflowRun !== undefined
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/resource-managers/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AnyResourceManagerDefinition, ResourceManagerDefinition, ManagedResource } from "./types.js";
2
+ export declare function defineResourceManager<TSpec, TStatus>(definition: ResourceManagerDefinition<TSpec, TStatus>): ResourceManagerDefinition<TSpec, TStatus>;
3
+ export declare function isResourceManagerDefinition(value: unknown): value is AnyResourceManagerDefinition;
4
+ export declare function assertValidResourceManagerDefinition<TSpec, TStatus>(definition: ResourceManagerDefinition<TSpec, TStatus>): void;
5
+ export declare function asAnyResourceManagerDefinition<TSpec, TStatus>(definition: ResourceManagerDefinition<TSpec, TStatus>): AnyResourceManagerDefinition;
6
+ export declare function asTypedResource<TSpec, TStatus>(resource: ManagedResource): ManagedResource<TSpec, TStatus>;
@@ -0,0 +1,45 @@
1
+ const RESOURCE_MANAGER_DEFINITION_BRAND = Symbol.for("pi-workflows.resource-manager-definition");
2
+ const RESOURCE_MANAGER_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
3
+ export function defineResourceManager(definition) {
4
+ assertValidResourceManagerDefinition(definition);
5
+ if (isResourceManagerDefinition(definition)) {
6
+ return definition;
7
+ }
8
+ Object.defineProperty(definition, RESOURCE_MANAGER_DEFINITION_BRAND, {
9
+ value: true,
10
+ enumerable: false,
11
+ configurable: false,
12
+ writable: false,
13
+ });
14
+ return definition;
15
+ }
16
+ export function isResourceManagerDefinition(value) {
17
+ return (value !== null &&
18
+ typeof value === "object" &&
19
+ value[RESOURCE_MANAGER_DEFINITION_BRAND] === true);
20
+ }
21
+ export function assertValidResourceManagerDefinition(definition) {
22
+ if (definition === null || typeof definition !== "object") {
23
+ throw new Error("Invalid resource manager definition: expected an object");
24
+ }
25
+ if (!RESOURCE_MANAGER_NAME_PATTERN.test(definition.name)) {
26
+ throw new Error(`Invalid resource manager definition: name ${JSON.stringify(definition.name)} must match ${RESOURCE_MANAGER_NAME_PATTERN.source}`);
27
+ }
28
+ if (typeof definition.initialStatus !== "function") {
29
+ throw new Error("Invalid resource manager definition: initialStatus must be a function");
30
+ }
31
+ if (typeof definition.reconcile !== "function") {
32
+ throw new Error("Invalid resource manager definition: reconcile must be a function");
33
+ }
34
+ if (definition.timeoutMs !== undefined &&
35
+ (!Number.isSafeInteger(definition.timeoutMs) || definition.timeoutMs <= 0)) {
36
+ throw new Error("Invalid resource manager definition: timeoutMs must be a positive safe integer");
37
+ }
38
+ }
39
+ export function asAnyResourceManagerDefinition(definition) {
40
+ return definition;
41
+ }
42
+ export function asTypedResource(resource) {
43
+ return resource;
44
+ }
45
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/resource-managers/definition.ts"],"names":[],"mappings":"AAMA,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AACjG,MAAM,6BAA6B,GAAG,mBAAmB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CACnC,UAAqD;IAErD,oCAAoC,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,iCAAiC,EAAE;QACnE,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACxB,KAAsC,CAAC,iCAAiC,CAAC,KAAK,IAAI,CACpF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,UAAqD;IAErD,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,6BAA6B,CAAC,MAAM,EAAE,CAClI,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,IACE,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAAqD;IAErD,OAAO,UAAoE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAyB;IAEzB,OAAO,QAA2C,CAAC;AACrD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ResourceManagerStore } from "./store.js";
2
+ import type { ResourceManagerEffects, ResourceManagerQueueClaim, ManagedResource, EffectDefinition, EffectRecord } from "./types.js";
3
+ export declare class ResourceManagerEffectService implements ResourceManagerEffects {
4
+ private readonly store;
5
+ private readonly resource;
6
+ private readonly claim;
7
+ private readonly signal;
8
+ private used;
9
+ constructor(store: ResourceManagerStore, resource: ManagedResource, claim: ResourceManagerQueueClaim, signal: AbortSignal);
10
+ ensure<TRequest>(definition: EffectDefinition<TRequest>): Promise<EffectRecord>;
11
+ private observe;
12
+ private applyObservation;
13
+ private apply;
14
+ private recordEvent;
15
+ }
@@ -1,5 +1,5 @@
1
1
  import { jsonFingerprint } from "./json.js";
2
- export class ControllerEffectService {
2
+ export class ResourceManagerEffectService {
3
3
  store;
4
4
  resource;
5
5
  claim;
@@ -96,7 +96,7 @@ export class ControllerEffectService {
96
96
  }
97
97
  recordEvent(type, effectKey, extra = {}) {
98
98
  this.store.recordEvent({
99
- controller: this.resource.metadata.controller,
99
+ resourceManager: this.resource.metadata.resourceManager,
100
100
  key: this.resource.metadata.key,
101
101
  claim: this.claim,
102
102
  type,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/resource-managers/effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class ManagedResourceConflictError extends Error {
2
+ constructor(resourceManager: string, key: string);
3
+ }
4
+ export declare class ManagedResourceNotFoundError extends Error {
5
+ constructor(resourceManager: string, key: string);
6
+ }
7
+ export declare class EffectRequestConflictError extends Error {
8
+ constructor(key: string);
9
+ }
10
+ export declare class WorkflowRequestConflictError extends Error {
11
+ constructor(key: string);
12
+ }
@@ -0,0 +1,25 @@
1
+ export class ManagedResourceConflictError extends Error {
2
+ constructor(resourceManager, key) {
3
+ super(`Managed resource ${resourceManager}/${key} changed during reconciliation`);
4
+ this.name = "ManagedResourceConflictError";
5
+ }
6
+ }
7
+ export class ManagedResourceNotFoundError extends Error {
8
+ constructor(resourceManager, key) {
9
+ super(`Managed resource not found: ${resourceManager}/${key}`);
10
+ this.name = "ManagedResourceNotFoundError";
11
+ }
12
+ }
13
+ export class EffectRequestConflictError extends Error {
14
+ constructor(key) {
15
+ super(`Effect key ${JSON.stringify(key)} was reused with a different request`);
16
+ this.name = "EffectRequestConflictError";
17
+ }
18
+ }
19
+ export class WorkflowRequestConflictError extends Error {
20
+ constructor(key) {
21
+ super(`Workflow request key ${JSON.stringify(key)} was reused with different input`);
22
+ this.name = "WorkflowRequestConflictError";
23
+ }
24
+ }
25
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/resource-managers/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,eAAuB,EAAE,GAAW;QAC9C,KAAK,CAAC,oBAAoB,eAAe,IAAI,GAAG,gCAAgC,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,eAAuB,EAAE,GAAW;QAC9C,KAAK,CAAC,+BAA+B,eAAe,IAAI,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,GAAW;QACrB,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,GAAW;QACrB,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ export { assertValidResourceManagerDefinition, defineResourceManager, isResourceManagerDefinition, } from "./definition.js";
2
+ export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
3
+ export { EffectRequestConflictError, ManagedResourceConflictError, ManagedResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
4
+ export { ResourceManagerEffectService } from "./effects.js";
5
+ export { canonicalJson, jsonFingerprint } from "./json.js";
6
+ export { ResourceManagerRuntime, type ResourceManagerRuntimeOptions } from "./runtime.js";
7
+ export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
8
+ export { SqliteResourceManagerStore, type RunEventRecord, type WorkflowRunClaimOptions, type WorkflowRunPreparationResult, type WorkflowRunQueueRecord, type WorkflowRunReservationOptions, } from "./sqlite.js";
9
+ export { type ResourceManagerStore, type EffectReservation, type QueueItem, type QueueRequeueOptions, type WorkflowRecordUpdate, type WorkflowReservation, } from "./store.js";
10
+ export { resourceManagerFileStem, resourceManagerSearchDirs, discoverResourceManagers, loadResourceManagerFile, loadDiscoveredResourceManagers, type DiscoveredResourceManager, } from "./loader.js";
11
+ export { ResourceManagerWorkflowCoordinator, type ResourceManagerWorkflowControlRequest, type ResourceManagerWorkflowScheduler, type WorkflowSchedulerRequest, type WorkflowSchedulerResult, } from "./workflows.js";
12
+ export type { AnyResourceManagerDefinition, ChildWorkflowRecord, ChildWorkflowReference, ChildWorkflowRequest, ChildWorkflowState, ManagedResourceCondition, ManagedResourceConditionInput, ManagedResourceConditionStatus, ResourceManagerDefinition, ResourceManagerEffects, ResourceManagerFollowUpResult, ResourceManagerQueueFollowUpRequest, ResourceManagerRemoveFollowUpRequest, ResourceManagerSettingsChangeRequest, ResourceManagerSettingsChangeResult, ResourceManagerEvent, ResourceManagerQueueClaim, ManagedResource, ManagedResourceRef, ManagedResourceStatus, ResourceManagerStatusPatch, ResourceManagerWorkflows, EffectApplication, EffectDefinition, EffectObservation, EffectRecord, EffectState, JsonObject, JsonPrimitive, JsonValue, MaybePromise, ReconcileContext, ReconcileResult, } from "./types.js";
@@ -0,0 +1,12 @@
1
+ export { assertValidResourceManagerDefinition, defineResourceManager, isResourceManagerDefinition, } from "./definition.js";
2
+ export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
3
+ export { EffectRequestConflictError, ManagedResourceConflictError, ManagedResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
4
+ export { ResourceManagerEffectService } from "./effects.js";
5
+ export { canonicalJson, jsonFingerprint } from "./json.js";
6
+ export { ResourceManagerRuntime } from "./runtime.js";
7
+ export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
8
+ export { SqliteResourceManagerStore, } from "./sqlite.js";
9
+ export {} from "./store.js";
10
+ export { resourceManagerFileStem, resourceManagerSearchDirs, discoverResourceManagers, loadResourceManagerFile, loadDiscoveredResourceManagers, } from "./loader.js";
11
+ export { ResourceManagerWorkflowCoordinator, } from "./workflows.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resource-managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAsC,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,0BAA0B,GAM3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAON,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,8BAA8B,GAE/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kCAAkC,GAKnC,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/resource-managers/json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { AnyResourceManagerDefinition } from "./types.js";
2
+ export type DiscoveredResourceManager = {
3
+ name: string;
4
+ path: string;
5
+ source: "project" | "global";
6
+ };
7
+ export declare function resourceManagerSearchDirs(options: {
8
+ cwd: string;
9
+ homeDir?: string;
10
+ }): {
11
+ dir: string;
12
+ source: DiscoveredResourceManager["source"];
13
+ }[];
14
+ export declare function resourceManagerFileStem(filePath: string): string;
15
+ export declare function loadResourceManagerFile(filePath: string): Promise<AnyResourceManagerDefinition>;
16
+ export declare function discoverResourceManagers(options: {
17
+ cwd: string;
18
+ homeDir?: string;
19
+ }): Promise<DiscoveredResourceManager[]>;
20
+ export declare function loadDiscoveredResourceManagers(options: {
21
+ cwd: string;
22
+ homeDir?: string;
23
+ }): Promise<AnyResourceManagerDefinition[]>;
@@ -0,0 +1,75 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+ import { createJiti } from "jiti";
6
+ import { isResourceManagerDefinition } from "./definition.js";
7
+ const RESOURCE_MANAGER_FILE_SUFFIXES = [
8
+ ".resource-manager.ts",
9
+ ".resource-manager.js",
10
+ ".resource-manager.mts",
11
+ ".resource-manager.mjs",
12
+ ];
13
+ export function resourceManagerSearchDirs(options) {
14
+ const homeDir = options.homeDir ?? os.homedir();
15
+ return [
16
+ { dir: path.join(options.cwd, ".pi", "resource-managers"), source: "project" },
17
+ { dir: path.join(homeDir, ".pi", "agent", "resource-managers"), source: "global" },
18
+ ];
19
+ }
20
+ export function resourceManagerFileStem(filePath) {
21
+ const base = path.basename(filePath);
22
+ const suffix = RESOURCE_MANAGER_FILE_SUFFIXES.find((candidate) => base.endsWith(candidate));
23
+ return suffix === undefined ? base : base.slice(0, -suffix.length);
24
+ }
25
+ const RESOURCE_MANAGER_ENTRY = path.join(path.dirname(fileURLToPath(import.meta.url)), "index");
26
+ const WORKFLOW_ENTRY = path.join(path.dirname(fileURLToPath(import.meta.url)), "../workflows/index");
27
+ export async function loadResourceManagerFile(filePath) {
28
+ const absolutePath = path.resolve(filePath);
29
+ const jiti = createJiti(pathToFileURL(absolutePath).href, {
30
+ interopDefault: true,
31
+ moduleCache: false,
32
+ alias: {
33
+ "@osolmaz/pi-workflows/resource-managers": RESOURCE_MANAGER_ENTRY,
34
+ "@osolmaz/pi-workflows": WORKFLOW_ENTRY,
35
+ },
36
+ });
37
+ const loaded = (await jiti.import(absolutePath, { default: true }));
38
+ if (!isResourceManagerDefinition(loaded)) {
39
+ throw new Error(`ResourceManager module must default-export defineResourceManager(...): ${absolutePath}`);
40
+ }
41
+ return loaded;
42
+ }
43
+ export async function discoverResourceManagers(options) {
44
+ const discovered = [];
45
+ const seen = new Set();
46
+ for (const { dir, source } of resourceManagerSearchDirs(options)) {
47
+ for (const filePath of await listResourceManagerFiles(dir)) {
48
+ const name = resourceManagerFileStem(filePath);
49
+ if (seen.has(name)) {
50
+ continue;
51
+ }
52
+ seen.add(name);
53
+ discovered.push({ name, path: filePath, source });
54
+ }
55
+ }
56
+ return discovered;
57
+ }
58
+ export async function loadDiscoveredResourceManagers(options) {
59
+ return await Promise.all((await discoverResourceManagers(options)).map(async (entry) => await loadResourceManagerFile(entry.path)));
60
+ }
61
+ async function listResourceManagerFiles(dir) {
62
+ let entries;
63
+ try {
64
+ entries = await fs.readdir(dir, { withFileTypes: true });
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ return entries
70
+ .filter((entry) => entry.isFile() &&
71
+ RESOURCE_MANAGER_FILE_SUFFIXES.some((suffix) => entry.name.endsWith(suffix)))
72
+ .map((entry) => path.join(dir, entry.name))
73
+ .sort();
74
+ }
75
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/resource-managers/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,8BAA8B,GAAG;IACrC,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;CACxB,CAAC;AAQF,MAAM,UAAU,yBAAyB,CAAC,OAGzC;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,OAAO;QACL,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;QAC9E,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;KACnF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5F,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChG,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,oBAAoB,CACrB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAgB;IAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;QACxD,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE;YACL,yCAAyC,EAAE,sBAAsB;YACjE,uBAAuB,EAAE,cAAc;SACxC;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAY,CAAC;IAC/E,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,0EAA0E,YAAY,EAAE,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAG9C;IACC,MAAM,UAAU,GAAgC,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,MAAM,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,OAGpD;IACC,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,CAAC,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAC3C,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAC3D,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACjD,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO;SACX,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,EAAE;QACd,8BAA8B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC/E;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1C,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ResourceManagerStatusPatch, ReconcileContext, ReconcileResult } from "./types.js";
2
+ export declare function createResultHelpers<TStatus>(): Pick<ReconcileContext<TStatus>, "settled" | "requeue" | "requeueAfter">;
3
+ export declare function settled<TStatus>(status?: ResourceManagerStatusPatch<TStatus>): ReconcileResult<TStatus>;
4
+ export declare function requeue<TStatus>(status?: ResourceManagerStatusPatch<TStatus>): ReconcileResult<TStatus>;
5
+ export declare function requeueAfter<TStatus>(afterMs: number, status?: ResourceManagerStatusPatch<TStatus>): ReconcileResult<TStatus>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/resource-managers/results.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB;IAIjC,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;QACF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;QACF,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO;gBACP,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACT,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { ResourceManagerStore } from "./store.js";
2
+ import type { AnyResourceManagerDefinition, ResourceManagerDefinition, ManagedResource, ManagedResourceRef } from "./types.js";
3
+ import { ResourceManagerWorkflowCoordinator, type ResourceManagerWorkflowScheduler } from "./workflows.js";
4
+ export type ResourceManagerRuntimeOptions = {
5
+ store: ResourceManagerStore;
6
+ resourceManagers: AnyResourceManagerDefinition[];
7
+ workflowScheduler?: ResourceManagerWorkflowScheduler;
8
+ maxConcurrent?: number;
9
+ resourceManagerConcurrency?: Record<string, number>;
10
+ defaultTimeoutMs?: number;
11
+ leaseMs?: number;
12
+ pollIntervalMs?: number;
13
+ baseBackoffMs?: number;
14
+ maxBackoffMs?: number;
15
+ jitterRatio?: number;
16
+ now?: () => Date;
17
+ random?: () => number;
18
+ };
19
+ export declare class ResourceManagerRuntime {
20
+ readonly store: ResourceManagerStore;
21
+ private readonly ownerId;
22
+ private readonly definitions;
23
+ private readonly workflowCoordinator;
24
+ private readonly maxConcurrent;
25
+ private readonly resourceManagerConcurrency;
26
+ private readonly defaultTimeoutMs;
27
+ private readonly leaseMs;
28
+ private readonly pollIntervalMs;
29
+ private readonly baseBackoffMs;
30
+ private readonly maxBackoffMs;
31
+ private readonly jitterRatio;
32
+ private readonly now;
33
+ private readonly random;
34
+ private readonly activeByResourceManager;
35
+ private readonly activeReconciles;
36
+ private runAbort;
37
+ private runnerTasks;
38
+ constructor(options: ResourceManagerRuntimeOptions);
39
+ putResource<TSpec, TStatus>(definition: ResourceManagerDefinition<TSpec, TStatus>, key: string, spec: TSpec): ManagedResource<TSpec, TStatus>;
40
+ putResourceByName(resourceManager: string, key: string, spec: unknown): ManagedResource;
41
+ requestDeletion(ref: ManagedResourceRef): ManagedResource;
42
+ enqueue(ref: ManagedResourceRef, afterMs?: number): void;
43
+ start(): void;
44
+ stop(): Promise<void>;
45
+ runOne(): Promise<boolean>;
46
+ runUntilIdle(maxReconciles?: number): Promise<number>;
47
+ get workflowRequests(): ResourceManagerWorkflowCoordinator;
48
+ private runnerLoop;
49
+ private claimNext;
50
+ private eligibleResourceManagers;
51
+ private processClaim;
52
+ private reconcileClaim;
53
+ private callReconciler;
54
+ private finishSuccessfulClaim;
55
+ private finishFailedClaim;
56
+ private backoffMs;
57
+ private readyQueueExists;
58
+ private recordEvent;
59
+ }