lorenz 0.1.5 → 0.1.6

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 (247) hide show
  1. package/README.md +83 -20
  2. package/RELEASE-MANIFEST.json +6 -1
  3. package/node_modules/@lorenz/agent-sdk/dist/index.d.ts +1 -0
  4. package/node_modules/@lorenz/agent-sdk/dist/index.d.ts.map +1 -1
  5. package/node_modules/@lorenz/agent-sdk/dist/index.js +1 -0
  6. package/node_modules/@lorenz/agent-sdk/dist/index.js.map +1 -1
  7. package/node_modules/@lorenz/agent-sdk/dist/module.d.ts +38 -0
  8. package/node_modules/@lorenz/agent-sdk/dist/module.d.ts.map +1 -0
  9. package/node_modules/@lorenz/agent-sdk/dist/module.js +41 -0
  10. package/node_modules/@lorenz/agent-sdk/dist/module.js.map +1 -0
  11. package/node_modules/@lorenz/cli/dist/agentExecutorLoader.d.ts +30 -0
  12. package/node_modules/@lorenz/cli/dist/agentExecutorLoader.d.ts.map +1 -0
  13. package/node_modules/@lorenz/cli/dist/agentExecutorLoader.js +63 -0
  14. package/node_modules/@lorenz/cli/dist/agentExecutorLoader.js.map +1 -0
  15. package/node_modules/@lorenz/cli/dist/daemon.d.ts +42 -19
  16. package/node_modules/@lorenz/cli/dist/daemon.d.ts.map +1 -1
  17. package/node_modules/@lorenz/cli/dist/daemon.js +72 -23
  18. package/node_modules/@lorenz/cli/dist/daemon.js.map +1 -1
  19. package/node_modules/@lorenz/cli/dist/daemonLock.d.ts +59 -0
  20. package/node_modules/@lorenz/cli/dist/daemonLock.d.ts.map +1 -0
  21. package/node_modules/@lorenz/cli/dist/daemonLock.js +304 -0
  22. package/node_modules/@lorenz/cli/dist/daemonLock.js.map +1 -0
  23. package/node_modules/@lorenz/cli/dist/daemonStatus.d.ts +16 -0
  24. package/node_modules/@lorenz/cli/dist/daemonStatus.d.ts.map +1 -0
  25. package/node_modules/@lorenz/cli/dist/daemonStatus.js +21 -0
  26. package/node_modules/@lorenz/cli/dist/daemonStatus.js.map +1 -0
  27. package/node_modules/@lorenz/cli/dist/doctor.d.ts +6 -0
  28. package/node_modules/@lorenz/cli/dist/doctor.d.ts.map +1 -1
  29. package/node_modules/@lorenz/cli/dist/doctor.js +38 -1
  30. package/node_modules/@lorenz/cli/dist/doctor.js.map +1 -1
  31. package/node_modules/@lorenz/cli/dist/extensionLoader.d.ts +126 -0
  32. package/node_modules/@lorenz/cli/dist/extensionLoader.d.ts.map +1 -0
  33. package/node_modules/@lorenz/cli/dist/extensionLoader.js +187 -0
  34. package/node_modules/@lorenz/cli/dist/extensionLoader.js.map +1 -0
  35. package/node_modules/@lorenz/cli/dist/flags-manifest.d.ts +42 -0
  36. package/node_modules/@lorenz/cli/dist/flags-manifest.d.ts.map +1 -0
  37. package/node_modules/@lorenz/cli/dist/flags-manifest.js +67 -0
  38. package/node_modules/@lorenz/cli/dist/flags-manifest.js.map +1 -0
  39. package/node_modules/@lorenz/cli/dist/index.d.ts +6 -0
  40. package/node_modules/@lorenz/cli/dist/index.d.ts.map +1 -1
  41. package/node_modules/@lorenz/cli/dist/index.js +4 -0
  42. package/node_modules/@lorenz/cli/dist/index.js.map +1 -1
  43. package/node_modules/@lorenz/cli/dist/leadershipStore.d.ts +42 -0
  44. package/node_modules/@lorenz/cli/dist/leadershipStore.d.ts.map +1 -0
  45. package/node_modules/@lorenz/cli/dist/leadershipStore.js +2 -0
  46. package/node_modules/@lorenz/cli/dist/leadershipStore.js.map +1 -0
  47. package/node_modules/@lorenz/cli/dist/main.d.ts +11 -7
  48. package/node_modules/@lorenz/cli/dist/main.d.ts.map +1 -1
  49. package/node_modules/@lorenz/cli/dist/main.js +58 -8
  50. package/node_modules/@lorenz/cli/dist/main.js.map +1 -1
  51. package/node_modules/@lorenz/cli/dist/toolLoader.d.ts +28 -0
  52. package/node_modules/@lorenz/cli/dist/toolLoader.d.ts.map +1 -0
  53. package/node_modules/@lorenz/cli/dist/toolLoader.js +62 -0
  54. package/node_modules/@lorenz/cli/dist/toolLoader.js.map +1 -0
  55. package/node_modules/@lorenz/cli/dist/trackerLoader.d.ts +24 -0
  56. package/node_modules/@lorenz/cli/dist/trackerLoader.d.ts.map +1 -0
  57. package/node_modules/@lorenz/cli/dist/trackerLoader.js +34 -0
  58. package/node_modules/@lorenz/cli/dist/trackerLoader.js.map +1 -0
  59. package/node_modules/@lorenz/cli/dist/workerDriverLoader.d.ts +15 -55
  60. package/node_modules/@lorenz/cli/dist/workerDriverLoader.d.ts.map +1 -1
  61. package/node_modules/@lorenz/cli/dist/workerDriverLoader.js +26 -203
  62. package/node_modules/@lorenz/cli/dist/workerDriverLoader.js.map +1 -1
  63. package/node_modules/@lorenz/cli/package.json +1 -0
  64. package/node_modules/@lorenz/config/dist/index.d.ts +1 -1
  65. package/node_modules/@lorenz/config/dist/index.d.ts.map +1 -1
  66. package/node_modules/@lorenz/config/dist/index.js +1 -1
  67. package/node_modules/@lorenz/config/dist/index.js.map +1 -1
  68. package/node_modules/@lorenz/config/dist/parse.d.ts +17 -0
  69. package/node_modules/@lorenz/config/dist/parse.d.ts.map +1 -1
  70. package/node_modules/@lorenz/config/dist/parse.js +107 -11
  71. package/node_modules/@lorenz/config/dist/parse.js.map +1 -1
  72. package/node_modules/@lorenz/config/dist/schemas.d.ts +0 -2
  73. package/node_modules/@lorenz/config/dist/schemas.d.ts.map +1 -1
  74. package/node_modules/@lorenz/config/dist/schemas.js +5 -1
  75. package/node_modules/@lorenz/config/dist/schemas.js.map +1 -1
  76. package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.d.ts +55 -21
  77. package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.d.ts.map +1 -1
  78. package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.js +187 -82
  79. package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.js.map +1 -1
  80. package/node_modules/@lorenz/dispatch-coordinator/dist/gate.d.ts +6 -4
  81. package/node_modules/@lorenz/dispatch-coordinator/dist/gate.d.ts.map +1 -1
  82. package/node_modules/@lorenz/dispatch-coordinator/dist/gate.js +9 -6
  83. package/node_modules/@lorenz/dispatch-coordinator/dist/gate.js.map +1 -1
  84. package/node_modules/@lorenz/dispatch-coordinator/dist/index.d.ts +1 -1
  85. package/node_modules/@lorenz/dispatch-coordinator/dist/index.d.ts.map +1 -1
  86. package/node_modules/@lorenz/dispatch-coordinator/dist/index.js +5 -6
  87. package/node_modules/@lorenz/dispatch-coordinator/dist/index.js.map +1 -1
  88. package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.d.ts +7 -5
  89. package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.d.ts.map +1 -1
  90. package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.js +12 -10
  91. package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.js.map +1 -1
  92. package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.d.ts +11 -10
  93. package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.d.ts.map +1 -1
  94. package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.js +15 -22
  95. package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.js.map +1 -1
  96. package/node_modules/@lorenz/dispatch-coordinator/dist/types.d.ts +16 -15
  97. package/node_modules/@lorenz/dispatch-coordinator/dist/types.d.ts.map +1 -1
  98. package/node_modules/@lorenz/dispatch-coordinator/dist/types.js +6 -7
  99. package/node_modules/@lorenz/dispatch-coordinator/dist/types.js.map +1 -1
  100. package/node_modules/@lorenz/domain/dist/index.d.ts +75 -9
  101. package/node_modules/@lorenz/domain/dist/index.d.ts.map +1 -1
  102. package/node_modules/@lorenz/domain/dist/index.js +40 -0
  103. package/node_modules/@lorenz/domain/dist/index.js.map +1 -1
  104. package/node_modules/@lorenz/flags/dist/coerce.d.ts +12 -0
  105. package/node_modules/@lorenz/flags/dist/coerce.d.ts.map +1 -0
  106. package/node_modules/@lorenz/flags/dist/coerce.js +44 -0
  107. package/node_modules/@lorenz/flags/dist/coerce.js.map +1 -0
  108. package/node_modules/@lorenz/flags/dist/default.d.ts +6 -0
  109. package/node_modules/@lorenz/flags/dist/default.d.ts.map +1 -0
  110. package/node_modules/@lorenz/flags/dist/default.js +22 -0
  111. package/node_modules/@lorenz/flags/dist/default.js.map +1 -0
  112. package/node_modules/@lorenz/flags/dist/deprecations.d.ts +20 -0
  113. package/node_modules/@lorenz/flags/dist/deprecations.d.ts.map +1 -0
  114. package/node_modules/@lorenz/flags/dist/deprecations.js +42 -0
  115. package/node_modules/@lorenz/flags/dist/deprecations.js.map +1 -0
  116. package/node_modules/@lorenz/flags/dist/env.d.ts +17 -0
  117. package/node_modules/@lorenz/flags/dist/env.d.ts.map +1 -0
  118. package/node_modules/@lorenz/flags/dist/env.js +90 -0
  119. package/node_modules/@lorenz/flags/dist/env.js.map +1 -0
  120. package/node_modules/@lorenz/flags/dist/errors.d.ts +22 -0
  121. package/node_modules/@lorenz/flags/dist/errors.d.ts.map +1 -0
  122. package/node_modules/@lorenz/flags/dist/errors.js +61 -0
  123. package/node_modules/@lorenz/flags/dist/errors.js.map +1 -0
  124. package/node_modules/@lorenz/flags/dist/index.d.ts +8 -0
  125. package/node_modules/@lorenz/flags/dist/index.d.ts.map +1 -0
  126. package/node_modules/@lorenz/flags/dist/index.js +11 -0
  127. package/node_modules/@lorenz/flags/dist/index.js.map +1 -0
  128. package/node_modules/@lorenz/flags/dist/keys.d.ts +6 -0
  129. package/node_modules/@lorenz/flags/dist/keys.d.ts.map +1 -0
  130. package/node_modules/@lorenz/flags/dist/keys.js +15 -0
  131. package/node_modules/@lorenz/flags/dist/keys.js.map +1 -0
  132. package/node_modules/@lorenz/flags/dist/layers.d.ts +14 -0
  133. package/node_modules/@lorenz/flags/dist/layers.d.ts.map +1 -0
  134. package/node_modules/@lorenz/flags/dist/layers.js +107 -0
  135. package/node_modules/@lorenz/flags/dist/layers.js.map +1 -0
  136. package/node_modules/@lorenz/flags/dist/manifest.d.ts +71 -0
  137. package/node_modules/@lorenz/flags/dist/manifest.d.ts.map +1 -0
  138. package/node_modules/@lorenz/flags/dist/manifest.js +137 -0
  139. package/node_modules/@lorenz/flags/dist/manifest.js.map +1 -0
  140. package/node_modules/@lorenz/flags/dist/resolve.d.ts +8 -0
  141. package/node_modules/@lorenz/flags/dist/resolve.d.ts.map +1 -0
  142. package/node_modules/@lorenz/flags/dist/resolve.js +178 -0
  143. package/node_modules/@lorenz/flags/dist/resolve.js.map +1 -0
  144. package/node_modules/@lorenz/flags/dist/testing.d.ts +19 -0
  145. package/node_modules/@lorenz/flags/dist/testing.d.ts.map +1 -0
  146. package/node_modules/@lorenz/flags/dist/testing.js +68 -0
  147. package/node_modules/@lorenz/flags/dist/testing.js.map +1 -0
  148. package/node_modules/@lorenz/flags/dist/types.d.ts +93 -0
  149. package/node_modules/@lorenz/flags/dist/types.d.ts.map +1 -0
  150. package/node_modules/@lorenz/flags/dist/types.js +2 -0
  151. package/node_modules/@lorenz/flags/dist/types.js.map +1 -0
  152. package/node_modules/@lorenz/flags/package.json +16 -0
  153. package/node_modules/@lorenz/mcp/dist/agentEndpoint.d.ts +16 -3
  154. package/node_modules/@lorenz/mcp/dist/agentEndpoint.d.ts.map +1 -1
  155. package/node_modules/@lorenz/mcp/dist/agentEndpoint.js +105 -17
  156. package/node_modules/@lorenz/mcp/dist/agentEndpoint.js.map +1 -1
  157. package/node_modules/@lorenz/mcp/dist/auth.d.ts +88 -0
  158. package/node_modules/@lorenz/mcp/dist/auth.d.ts.map +1 -1
  159. package/node_modules/@lorenz/mcp/dist/auth.js +53 -0
  160. package/node_modules/@lorenz/mcp/dist/auth.js.map +1 -1
  161. package/node_modules/@lorenz/mcp/dist/index.d.ts +3 -2
  162. package/node_modules/@lorenz/mcp/dist/index.d.ts.map +1 -1
  163. package/node_modules/@lorenz/mcp/dist/index.js +1 -1
  164. package/node_modules/@lorenz/mcp/dist/index.js.map +1 -1
  165. package/node_modules/@lorenz/mcp/dist/server.d.ts +22 -0
  166. package/node_modules/@lorenz/mcp/dist/server.d.ts.map +1 -1
  167. package/node_modules/@lorenz/mcp/dist/server.js +85 -12
  168. package/node_modules/@lorenz/mcp/dist/server.js.map +1 -1
  169. package/node_modules/@lorenz/orchestrator/dist/claimStore.d.ts +157 -0
  170. package/node_modules/@lorenz/orchestrator/dist/claimStore.d.ts.map +1 -0
  171. package/node_modules/@lorenz/orchestrator/dist/claimStore.js +621 -0
  172. package/node_modules/@lorenz/orchestrator/dist/claimStore.js.map +1 -0
  173. package/node_modules/@lorenz/orchestrator/dist/codec.d.ts +38 -0
  174. package/node_modules/@lorenz/orchestrator/dist/codec.d.ts.map +1 -0
  175. package/node_modules/@lorenz/orchestrator/dist/codec.js +176 -0
  176. package/node_modules/@lorenz/orchestrator/dist/codec.js.map +1 -0
  177. package/node_modules/@lorenz/orchestrator/dist/index.d.ts +55 -51
  178. package/node_modules/@lorenz/orchestrator/dist/index.d.ts.map +1 -1
  179. package/node_modules/@lorenz/orchestrator/dist/index.js +285 -45
  180. package/node_modules/@lorenz/orchestrator/dist/index.js.map +1 -1
  181. package/node_modules/@lorenz/orchestrator/dist/sqlite.d.ts +34 -0
  182. package/node_modules/@lorenz/orchestrator/dist/sqlite.d.ts.map +1 -0
  183. package/node_modules/@lorenz/orchestrator/dist/sqlite.js +142 -0
  184. package/node_modules/@lorenz/orchestrator/dist/sqlite.js.map +1 -0
  185. package/node_modules/@lorenz/orchestrator/dist/state.d.ts +47 -0
  186. package/node_modules/@lorenz/orchestrator/dist/state.d.ts.map +1 -0
  187. package/node_modules/@lorenz/orchestrator/dist/state.js +15 -0
  188. package/node_modules/@lorenz/orchestrator/dist/state.js.map +1 -0
  189. package/node_modules/@lorenz/orchestrator/dist/turso.d.ts +28 -0
  190. package/node_modules/@lorenz/orchestrator/dist/turso.d.ts.map +1 -0
  191. package/node_modules/@lorenz/orchestrator/dist/turso.js +125 -0
  192. package/node_modules/@lorenz/orchestrator/dist/turso.js.map +1 -0
  193. package/node_modules/@lorenz/orchestrator/package.json +6 -2
  194. package/node_modules/@lorenz/presenter/dist/index.d.ts +14 -0
  195. package/node_modules/@lorenz/presenter/dist/index.d.ts.map +1 -1
  196. package/node_modules/@lorenz/presenter/dist/index.js +18 -0
  197. package/node_modules/@lorenz/presenter/dist/index.js.map +1 -1
  198. package/node_modules/@lorenz/projections/dist/index.d.ts.map +1 -1
  199. package/node_modules/@lorenz/projections/dist/index.js +1 -0
  200. package/node_modules/@lorenz/projections/dist/index.js.map +1 -1
  201. package/node_modules/@lorenz/runtime/dist/index.d.ts +27 -8
  202. package/node_modules/@lorenz/runtime/dist/index.d.ts.map +1 -1
  203. package/node_modules/@lorenz/runtime/dist/index.js +422 -98
  204. package/node_modules/@lorenz/runtime/dist/index.js.map +1 -1
  205. package/node_modules/@lorenz/runtime-events/dist/index.d.ts +14 -0
  206. package/node_modules/@lorenz/runtime-events/dist/index.d.ts.map +1 -1
  207. package/node_modules/@lorenz/ssh/dist/index.d.ts +2 -0
  208. package/node_modules/@lorenz/ssh/dist/index.d.ts.map +1 -1
  209. package/node_modules/@lorenz/ssh/dist/index.js +2 -1
  210. package/node_modules/@lorenz/ssh/dist/index.js.map +1 -1
  211. package/node_modules/@lorenz/tool-sdk/dist/index.d.ts +1 -0
  212. package/node_modules/@lorenz/tool-sdk/dist/index.d.ts.map +1 -1
  213. package/node_modules/@lorenz/tool-sdk/dist/index.js +1 -0
  214. package/node_modules/@lorenz/tool-sdk/dist/index.js.map +1 -1
  215. package/node_modules/@lorenz/tool-sdk/dist/module.d.ts +38 -0
  216. package/node_modules/@lorenz/tool-sdk/dist/module.d.ts.map +1 -0
  217. package/node_modules/@lorenz/tool-sdk/dist/module.js +42 -0
  218. package/node_modules/@lorenz/tool-sdk/dist/module.js.map +1 -0
  219. package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts +1 -0
  220. package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts.map +1 -1
  221. package/node_modules/@lorenz/tracker-sdk/dist/index.js +1 -0
  222. package/node_modules/@lorenz/tracker-sdk/dist/index.js.map +1 -1
  223. package/node_modules/@lorenz/tracker-sdk/dist/module.d.ts +37 -0
  224. package/node_modules/@lorenz/tracker-sdk/dist/module.d.ts.map +1 -0
  225. package/node_modules/@lorenz/tracker-sdk/dist/module.js +38 -0
  226. package/node_modules/@lorenz/tracker-sdk/dist/module.js.map +1 -0
  227. package/node_modules/@lorenz/worker-host-pool/dist/index.d.ts +34 -6
  228. package/node_modules/@lorenz/worker-host-pool/dist/index.d.ts.map +1 -1
  229. package/node_modules/@lorenz/worker-host-pool/dist/index.js +110 -143
  230. package/node_modules/@lorenz/worker-host-pool/dist/index.js.map +1 -1
  231. package/node_modules/@lorenz/worker-sdk/dist/index.d.ts +1 -0
  232. package/node_modules/@lorenz/worker-sdk/dist/index.d.ts.map +1 -1
  233. package/node_modules/@lorenz/worker-sdk/dist/index.js +1 -0
  234. package/node_modules/@lorenz/worker-sdk/dist/index.js.map +1 -1
  235. package/node_modules/@lorenz/worker-sdk/dist/local.d.ts +74 -0
  236. package/node_modules/@lorenz/worker-sdk/dist/local.d.ts.map +1 -0
  237. package/node_modules/@lorenz/worker-sdk/dist/local.js +112 -0
  238. package/node_modules/@lorenz/worker-sdk/dist/local.js.map +1 -0
  239. package/node_modules/@lorenz/worker-sdk/dist/module.d.ts +8 -16
  240. package/node_modules/@lorenz/worker-sdk/dist/module.d.ts.map +1 -1
  241. package/node_modules/@lorenz/worker-sdk/dist/module.js +15 -35
  242. package/node_modules/@lorenz/worker-sdk/dist/module.js.map +1 -1
  243. package/node_modules/@lorenz/workflow/dist/index.d.ts +11 -0
  244. package/node_modules/@lorenz/workflow/dist/index.d.ts.map +1 -1
  245. package/node_modules/@lorenz/workflow/dist/index.js +3 -0
  246. package/node_modules/@lorenz/workflow/dist/index.js.map +1 -1
  247. package/package.json +4 -1
package/README.md CHANGED
@@ -1,31 +1,59 @@
1
- # Lorenz
1
+ <div align="center">
2
2
 
3
- [![Documentation](https://img.shields.io/badge/docs-ryanlyn.github.io%2Florenz-14b8a6)](https://ryanlyn.github.io/lorenz/)
3
+ <a href="https://ryanlyn.github.io/lorenz/"><img src="docs/images/lorenz-banner.png" alt="Lorenz - agent orchestration engine" width="100%"></a>
4
4
 
5
- Originated from [OpenAI Symphony](https://openai.com/index/open-source-codex-orchestration-symphony/), Lorenz lets you declare work on trackers (in-memory, Obsidian markdown files, Linear, Jira, Slack etc.) and manage the dispatch, execution, and convergence of concurrent agent sessions until they reach a specified terminal state. It is harness-agnostic through the [Agent-Client Protocol](https://agentclientprotocol.com/get-started/introduction) with support for local, static SSH boxes, or (experimental) cloud-brokered VMs.
5
+ [![docs](https://img.shields.io/badge/docs-ryanlyn.github.io%2Florenz-78DCE8?style=flat-square&labelColor=2D2A2E)](https://ryanlyn.github.io/lorenz/) [![npm](https://img.shields.io/npm/v/lorenz?style=flat-square&label=npm&color=A9DC76&labelColor=2D2A2E)](https://www.npmjs.com/package/lorenz) [![license](https://img.shields.io/badge/license-Apache--2.0-AB9DF2?style=flat-square&labelColor=2D2A2E)](LICENSE) [![protocol](https://img.shields.io/badge/protocol-ACP-FC9867?style=flat-square&labelColor=2D2A2E)](https://agentclientprotocol.com/get-started/introduction) [![node](https://img.shields.io/badge/node-24%2B-FFD866?style=flat-square&labelColor=2D2A2E)](mise.toml)
6
6
 
7
- ## Screenshots
7
+ </div>
8
8
 
9
- Lorenz ships two operator views over the same runtime snapshot: an Ink terminal dashboard (TUI)
10
- and a web dashboard served by the observability API.
9
+ Originated from [OpenAI Symphony](https://openai.com/index/open-source-codex-orchestration-symphony/), **Lorenz** lets you declare work on a tracker (in-memory, Obsidian markdown files, Linear, Jira, Slack) and manages the dispatch, execution, and convergence of concurrent agent sessions until they reach a specified terminal state. It is harness-agnostic through the [Agent-Client Protocol](https://agentclientprotocol.com/get-started/introduction), running agents on local machines, static SSH boxes, or (experimental) cloud-brokered VMs.
11
10
 
12
- ### Terminal dashboard (TUI)
11
+ ## Features
13
12
 
14
- ![Lorenz terminal dashboard](docs/images/lorenz-tui.png)
13
+ <table>
14
+ <tr>
15
+ <td width="50%" valign="top">
15
16
 
16
- ### Web dashboard
17
+ **Any tracker**<br>
18
+ Linear, Jira, Slack, Obsidian, local files, or in-memory.
17
19
 
18
- ![Lorenz web dashboard](docs/images/lorenz-dashboard.png)
20
+ </td>
21
+ <td width="50%" valign="top">
19
22
 
20
- ## Documentation
23
+ **Harness-agnostic**<br>
24
+ Codex, Claude, or anything that speaks the Agent-Client Protocol.
21
25
 
22
- The published documentation site is at **[ryanlyn.github.io/lorenz](https://ryanlyn.github.io/lorenz/)**, built from [`docs/`](./docs). Start here:
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td width="50%" valign="top">
23
30
 
24
- - [Getting started](./docs/getting-started.md) - install, write a `WORKFLOW.md`, run your first issue.
25
- - [How it works](./docs/how-it-works.md) - the polling, dispatch, and run lifecycle.
26
- - [Configuration reference](./docs/reference/configuration.md) - every front-matter key, default, and meaning.
27
- - [Trackers](./docs/trackers/index.md) - Linear, Jira, Slack, local, and memory sources of issues.
28
- - [CLI](./docs/cli.md) - commands, flags, and run history.
31
+ **Concurrency control**<br>
32
+ Global and per-host caps, with routing labels to share one project across instances.
33
+
34
+ </td>
35
+ <td width="50%" valign="top">
36
+
37
+ **Retry and backoff**<br>
38
+ Rate-limit aware, with stall detection and automatic requeue.
39
+
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <td width="50%" valign="top">
44
+
45
+ **Two operator views**<br>
46
+ An Ink terminal dashboard and a web dashboard over one runtime snapshot.
47
+
48
+ </td>
49
+ <td width="50%" valign="top">
50
+
51
+ **Local, SSH, or cloud workers**<br>
52
+ Disposable local boxes, static SSH hosts, or brokered VMs on demand.
53
+
54
+ </td>
55
+ </tr>
56
+ </table>
29
57
 
30
58
  ## Quickstart
31
59
 
@@ -35,7 +63,7 @@ Running Lorenz is as easy as:
35
63
  npx lorenz WORKFLOW.md
36
64
  ```
37
65
 
38
- with full CLI options:
66
+ The full CLI surface:
39
67
 
40
68
  ```sh
41
69
  lorenz [--once] [--dry-run] [--no-tui] [--port <port>] [--logs-root <path>] [path-to-WORKFLOW.md]
@@ -50,6 +78,36 @@ runs, a Claude ACP bridge for Claude runs, and SSH access for remote workers. Se
50
78
  [Getting started](./docs/getting-started.md) for the full list. Run commands from the repository
51
79
  root unless a command says otherwise.
52
80
 
81
+ ## How It Works
82
+
83
+ Lorenz polls a tracker for eligible issues, dispatches each one to a worker as a concurrent agent
84
+ session, and drives it through its run lifecycle until it reaches a terminal state, honoring
85
+ concurrency caps, retries, and rate limits along the way. The polling, dispatch, and run lifecycle
86
+ are covered in [How it works](./docs/how-it-works.md).
87
+
88
+ ## Dashboards
89
+
90
+ Lorenz ships two operator views over the same runtime snapshot: an Ink terminal dashboard (TUI) and
91
+ a web dashboard served by the observability API.
92
+
93
+ **Terminal dashboard (TUI)**
94
+
95
+ ![Lorenz terminal dashboard](docs/images/lorenz-tui.png)
96
+
97
+ **Web dashboard**
98
+
99
+ ![Lorenz web dashboard](docs/images/lorenz-dashboard.png)
100
+
101
+ ## Documentation
102
+
103
+ The published documentation site is at **[ryanlyn.github.io/lorenz](https://ryanlyn.github.io/lorenz/)**, built from [`docs/`](./docs). Start here:
104
+
105
+ - [Getting started](./docs/getting-started.md) - install, write a `WORKFLOW.md`, run your first issue.
106
+ - [How it works](./docs/how-it-works.md) - the polling, dispatch, and run lifecycle.
107
+ - [Configuration reference](./docs/reference/configuration.md) - every front-matter key, default, and meaning.
108
+ - [Trackers](./docs/trackers/index.md) - Linear, Jira, Slack, local, and memory sources of issues.
109
+ - [CLI](./docs/cli.md) - commands, flags, and run history.
110
+
53
111
  ## Configuration
54
112
 
55
113
  Configuration lives in the YAML front matter of a workflow file. The Markdown body below the front
@@ -79,7 +137,7 @@ complete variable list is in the [Workflow prompt reference](./docs/reference/wo
79
137
  ## Skills
80
138
 
81
139
  The `skills/` directory holds orchestration skills (`lorenz-commit`, `lorenz-push`, `lorenz-pull`,
82
- `lorenz-land`, `lorenz-debug`) referenced by the example workflows. Lorenz copies skills into
140
+ `lorenz-land`, `lorenz-debug`) referenced by the example workflows. Lorenz installs skills into
83
141
  `.lorenz/skills/` in each prepared workspace before the agent starts. See
84
142
  [Skills](./docs/agents/skills.md) for how `agent.skills` and tool-pack skills are resolved.
85
143
 
@@ -90,7 +148,10 @@ retry queue, and dispatch blocks. The web dashboard exposes the same runtime sna
90
148
  HTTP server, started with `--port` or `server.port`. Routes, the WebSocket stream, and `/mcp` tool
91
149
  serving are documented in [Observability](./docs/observability.md).
92
150
 
93
- ## Contributing
151
+ <details>
152
+ <summary><b>Contributing &amp; development</b></summary>
153
+
154
+ <br>
94
155
 
95
156
  ### Requirements
96
157
 
@@ -161,6 +222,8 @@ The checked-in workflow files (`WORKFLOW.md`, `WORKFLOW_FULL_ACCESS.md`) are exe
161
222
  `pnpm test` guards workflow docs, prompt rendering, dashboard snapshots, runtime behavior, and CLI
162
223
  documentation. Update the fixture and the matching test together when the public contract changes.
163
224
 
225
+ </details>
226
+
164
227
  ## License
165
228
 
166
229
  See [CHANGELOG.md](CHANGELOG.md) for notable changes. This project is licensed under the [Apache License 2.0](LICENSE).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "entrypoint": "bin/lorenz",
5
5
  "dashboardDist": "node_modules/@lorenz/dashboard/dist",
6
6
  "installCommand": "npm install --omit=dev",
@@ -65,6 +65,10 @@
65
65
  "name": "@lorenz/domain",
66
66
  "path": "node_modules/@lorenz/domain"
67
67
  },
68
+ {
69
+ "name": "@lorenz/flags",
70
+ "path": "node_modules/@lorenz/flags"
71
+ },
68
72
  {
69
73
  "name": "@lorenz/humanize",
70
74
  "path": "node_modules/@lorenz/humanize"
@@ -189,6 +193,7 @@
189
193
  "@hono/node-server",
190
194
  "@hono/node-ws",
191
195
  "@linear/sdk",
196
+ "@tursodatabase/database",
192
197
  "better-sqlite3",
193
198
  "commander",
194
199
  "diff",
@@ -1,2 +1,3 @@
1
1
  export { AgentExecutorRegistry, defaultAgentExecutorRegistry, type AgentExecutorProvider, } from "./provider.js";
2
+ export { AGENT_EXECUTOR_SDK_VERSION, assertAgentExecutorModule, defineAgentExecutor, type AgentExecutorModule, } from "./module.js";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { AgentExecutorRegistry, defaultAgentExecutorRegistry, } from "./provider.js";
2
+ export { AGENT_EXECUTOR_SDK_VERSION, assertAgentExecutorModule, defineAgentExecutor, } from "./module.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAE7B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAE7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,GAEpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { AgentExecutorProvider } from "./provider.js";
2
+ /**
3
+ * The agent-executor SDK version this build of the engine speaks. Out-of-tree
4
+ * executor modules declare the version they target via
5
+ * {@link AgentExecutorModule.sdkVersion}; the loader rejects a mismatch before the
6
+ * module ever reaches the registry. Major-only: additive, backwards-compatible
7
+ * SDK changes never bump it.
8
+ */
9
+ export declare const AGENT_EXECUTOR_SDK_VERSION = 1;
10
+ /**
11
+ * The unit an OUT-OF-TREE agent-executor module exports: an
12
+ * {@link AgentExecutorProvider} carrying the SDK version it targets. A dynamically
13
+ * imported module crosses a version boundary the daemon cannot type-check, so the
14
+ * explicit `sdkVersion` handshake stands in for the compiler.
15
+ */
16
+ export interface AgentExecutorModule extends AgentExecutorProvider {
17
+ readonly sdkVersion: number;
18
+ }
19
+ /**
20
+ * Structural check + version handshake for a dynamically loaded agent-executor
21
+ * module. `source` names where the value came from so every error is actionable.
22
+ */
23
+ export declare const assertAgentExecutorModule: (value: unknown, source: string) => asserts value is AgentExecutorModule;
24
+ /**
25
+ * Authoring sugar for out-of-tree executor modules: shape-asserts the module at
26
+ * definition time (so a typo fails in the author's tests, not the operator's
27
+ * daemon) and returns it unchanged. Usage:
28
+ *
29
+ * ```ts
30
+ * export default defineAgentExecutor({
31
+ * executor: "acme",
32
+ * sdkVersion: 1,
33
+ * createExecutor: (kind, settings) => new AcmeExecutor(kind, settings),
34
+ * });
35
+ * ```
36
+ */
37
+ export declare function defineAgentExecutor(module: AgentExecutorModule): AgentExecutorModule;
38
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAaD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,CACtC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,KAAK,IAAI,mBAA2C,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAEpF"}
@@ -0,0 +1,41 @@
1
+ import { makeSdkModuleContract } from "@lorenz/domain";
2
+ /**
3
+ * The agent-executor SDK version this build of the engine speaks. Out-of-tree
4
+ * executor modules declare the version they target via
5
+ * {@link AgentExecutorModule.sdkVersion}; the loader rejects a mismatch before the
6
+ * module ever reaches the registry. Major-only: additive, backwards-compatible
7
+ * SDK changes never bump it.
8
+ */
9
+ export const AGENT_EXECUTOR_SDK_VERSION = 1;
10
+ const contract = makeSdkModuleContract({
11
+ errorPrefix: "agent_executor",
12
+ moduleNoun: "an agent executor module",
13
+ identityField: "executor",
14
+ defineCall: "defineAgentExecutor({ executor, sdkVersion, createExecutor })",
15
+ requiredFns: [
16
+ { field: "createExecutor", signature: "createExecutor(kind, settings)", article: "a" },
17
+ ],
18
+ sdkVersion: AGENT_EXECUTOR_SDK_VERSION,
19
+ });
20
+ /**
21
+ * Structural check + version handshake for a dynamically loaded agent-executor
22
+ * module. `source` names where the value came from so every error is actionable.
23
+ */
24
+ export const assertAgentExecutorModule = contract.assertModule;
25
+ /**
26
+ * Authoring sugar for out-of-tree executor modules: shape-asserts the module at
27
+ * definition time (so a typo fails in the author's tests, not the operator's
28
+ * daemon) and returns it unchanged. Usage:
29
+ *
30
+ * ```ts
31
+ * export default defineAgentExecutor({
32
+ * executor: "acme",
33
+ * sdkVersion: 1,
34
+ * createExecutor: (kind, settings) => new AcmeExecutor(kind, settings),
35
+ * });
36
+ * ```
37
+ */
38
+ export function defineAgentExecutor(module) {
39
+ return contract.defineModule(module, "defineAgentExecutor");
40
+ }
41
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIvD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAY5C,MAAM,QAAQ,GAAG,qBAAqB,CAAsB;IAC1D,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,0BAA0B;IACtC,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,+DAA+D;IAC3E,WAAW,EAAE;QACX,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gCAAgC,EAAE,OAAO,EAAE,GAAG,EAAE;KACvF;IACD,UAAU,EAAE,0BAA0B;CACvC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAGM,QAAQ,CAAC,YAAY,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC7D,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type AgentExecutorRegistry } from "@lorenz/agent-sdk";
2
+ import { type EnsureExtensionLoadedOptions, type ExtensionRef } from "./extensionLoader.js";
3
+ /**
4
+ * Out-of-tree agent-executor loading: a configured `agents.<kind>.executor`
5
+ * accepts a module specifier in addition to a registered executor selector.
6
+ * Instantiates the axis-generic {@link createExtensionLoader}; identity field is
7
+ * the provider `executor`. See {@link createExtensionLoader} for the trust
8
+ * boundary, module pinning, and exact-selector-wins resolution shared by every
9
+ * axis.
10
+ *
11
+ * A caller (a `loadWorkflow` prepareRegistries hook or the executor-factory step)
12
+ * invokes {@link ensureAgentExecutorLoaded} for the configured
13
+ * `agents.<kind>.executor` BEFORE the registry resolves it, exactly as
14
+ * `prepareTrackerExtensions` does for trackers.
15
+ */
16
+ /** A parsed configured executor value that is not a registered selector. */
17
+ export type AgentExecutorRef = ExtensionRef;
18
+ /** Options for {@link ensureAgentExecutorLoaded}. */
19
+ export type EnsureAgentExecutorLoadedOptions = EnsureExtensionLoadedOptions;
20
+ /** Parses a configured executor string into its module-specifier form. */
21
+ export declare function parseAgentExecutorRef(executor: string): AgentExecutorRef;
22
+ /**
23
+ * Idempotently makes the configured executor resolvable in `registry` (see
24
+ * {@link createExtensionLoader} for the load/pin semantics). A caller invokes this
25
+ * BEFORE the agent-runner resolves the executor at startup and on every reload, so
26
+ * the runner's `registry.require(agent.executor)` resolves an out-of-tree executor
27
+ * exactly like a built-in.
28
+ */
29
+ export declare function ensureAgentExecutorLoaded(executor: string, registry: AgentExecutorRegistry, options?: EnsureAgentExecutorLoadedOptions): Promise<void>;
30
+ //# sourceMappingURL=agentExecutorLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentExecutorLoader.d.ts","sourceRoot":"","sources":["../src/agentExecutorLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;GAYG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE5C,qDAAqD;AACrD,MAAM,MAAM,gCAAgC,GAAG,4BAA4B,CAAC;AAoD5E,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,63 @@
1
+ import { isRecord } from "@lorenz/domain";
2
+ import { assertAgentExecutorModule, } from "@lorenz/agent-sdk";
3
+ import { createExtensionLoader, } from "./extensionLoader.js";
4
+ const agentExecutorLoader = createExtensionLoader({
5
+ errorPrefix: "agent_executor",
6
+ eventNames: {
7
+ loaded: "agent_executor_loaded",
8
+ pinned: "agent_executor_module_pinned",
9
+ },
10
+ defineHelperName: "defineAgentExecutor",
11
+ unitNoun: "agent executors",
12
+ assertModule: assertAgentExecutorModule,
13
+ looksLikeModule: (value) => isRecord(value) && typeof value["createExecutor"] === "function",
14
+ // Spread the loaded module so every provider hook (createExecutor, parseOptions,
15
+ // validateAgent, configAliases, ...) is preserved and only `executor` is
16
+ // overridden to the configured specifier.
17
+ toFactory: (specifier, module) => ({ ...module, executor: specifier }),
18
+ // The agent axis's identity field is `executor`; map it onto the generic `kind`
19
+ // audit field so the loaded/pinned events stay uniform across axes.
20
+ describeModule: (module) => ({ kind: module.executor, sdkVersion: module.sdkVersion }),
21
+ });
22
+ /**
23
+ * One stable {@link ExtensionRegistry} adapter per underlying
24
+ * {@link AgentExecutorRegistry}. The generic loader keys its pinned-specifier set
25
+ * in a WeakMap by the registry IDENTITY it is handed, so the adapter must be the
26
+ * SAME object across reload calls for the same executor registry - otherwise the
27
+ * module-pinned re-encounter event would never fire. Caching by the real registry
28
+ * preserves that identity.
29
+ */
30
+ const adapters = new WeakMap();
31
+ /**
32
+ * Adapts an {@link AgentExecutorRegistry} to the minimal {@link ExtensionRegistry}
33
+ * surface the generic loader needs. The executor registry exposes `executors()`
34
+ * rather than the generic `kinds()`, so the loader sees registered executor
35
+ * selectors through this thin shim.
36
+ */
37
+ function asExtensionRegistry(registry) {
38
+ let adapter = adapters.get(registry);
39
+ if (adapter === undefined) {
40
+ adapter = {
41
+ get: (executor) => registry.get(executor),
42
+ register: (provider) => registry.register(provider),
43
+ kinds: () => registry.executors(),
44
+ };
45
+ adapters.set(registry, adapter);
46
+ }
47
+ return adapter;
48
+ }
49
+ /** Parses a configured executor string into its module-specifier form. */
50
+ export function parseAgentExecutorRef(executor) {
51
+ return agentExecutorLoader.parseRef(executor);
52
+ }
53
+ /**
54
+ * Idempotently makes the configured executor resolvable in `registry` (see
55
+ * {@link createExtensionLoader} for the load/pin semantics). A caller invokes this
56
+ * BEFORE the agent-runner resolves the executor at startup and on every reload, so
57
+ * the runner's `registry.require(agent.executor)` resolves an out-of-tree executor
58
+ * exactly like a built-in.
59
+ */
60
+ export async function ensureAgentExecutorLoaded(executor, registry, options = {}) {
61
+ return agentExecutorLoader.ensureLoaded(executor, asExtensionRegistry(registry), options);
62
+ }
63
+ //# sourceMappingURL=agentExecutorLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentExecutorLoader.js","sourceRoot":"","sources":["../src/agentExecutorLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,yBAAyB,GAI1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,GAItB,MAAM,sBAAsB,CAAC;AAsB9B,MAAM,mBAAmB,GAAG,qBAAqB,CAA6C;IAC5F,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE;QACV,MAAM,EAAE,uBAAuB;QAC/B,MAAM,EAAE,8BAA8B;KACvC;IACD,gBAAgB,EAAE,qBAAqB;IACvC,QAAQ,EAAE,iBAAiB;IAC3B,YAAY,EAAE,yBAAyB;IACvC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,gBAAgB,CAAC,KAAK,UAAU;IAC5F,iFAAiF;IACjF,yEAAyE;IACzE,0CAA0C;IAC1C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtE,gFAAgF;IAChF,oEAAoE;IACpE,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;CACvF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAmE,CAAC;AAEhG;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,QAA+B;IAE/B,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG;YACR,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;SAClC,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,QAA+B,EAC/B,UAA4C,EAAE;IAE9C,OAAO,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5F,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type AgentExecutorRegistry } from "@lorenz/agent-sdk";
2
2
  import { type RunAgentAttemptInput, type RunResult } from "@lorenz/agent-runner";
3
3
  import { type WorkerDriverRegistry } from "@lorenz/worker-sdk";
4
- import type { DefaultSettingsOptions } from "@lorenz/config";
4
+ import { type DefaultSettingsOptions } from "@lorenz/config";
5
5
  import { type RuntimeTrackerClient, type Settings } from "@lorenz/domain";
6
6
  import { type WorkerPool } from "@lorenz/worker-pool";
7
7
  import { type DispatchCoordinator } from "@lorenz/dispatch-coordinator";
@@ -24,6 +24,27 @@ export interface BackendRegistries {
24
24
  */
25
25
  export declare function registerBuiltinBackends(registries?: BackendRegistries): void;
26
26
  export declare function runtimeDefaultSettingsOptions(): DefaultSettingsOptions;
27
+ /**
28
+ * `loadWorkflow` pre-parse hook: dynamic-import any out-of-tree tracker named by
29
+ * `tracker.kind` (a module specifier rather than a registered kind) and register
30
+ * it into `trackers` under that exact string, BEFORE the config parser resolves
31
+ * the tracker provider. Mirrors {@link buildWorkerPool}'s driver-loading step:
32
+ * the loader is a no-op for a built-in kind, dynamic-imports on a miss, and
33
+ * fail-loud on an unresolvable specifier / SDK mismatch at the same startup point
34
+ * as an unregistered kind. Re-running it on a reload re-encounters an
35
+ * already-loaded specifier and emits `tracker_provider_module_pinned`; a config
36
+ * that switches `tracker.kind` to a NEW specifier hot-loads it.
37
+ *
38
+ * `baseDir` anchors `./relative` specifiers to the workflow file's directory (the
39
+ * most predictable anchor for operators), and `logEvent` routes the
40
+ * `tracker_provider_loaded`/`_module_pinned` audit events to the configured log
41
+ * file when one is known.
42
+ */
43
+ export declare function prepareTrackerExtensions(rawConfig: Record<string, unknown>, context: {
44
+ baseDir: string;
45
+ logFile?: string | undefined;
46
+ trackers?: TrackerRegistry;
47
+ }): Promise<void>;
27
48
  export declare function createTrackerClient(settings: Settings, env?: NodeJS.ProcessEnv): RuntimeTrackerClient;
28
49
  /** Options for {@link buildWorkerPool} / {@link buildDispatchCoordinator}. */
29
50
  export interface BuildWorkerPoolOptions {
@@ -35,32 +56,34 @@ export interface BuildWorkerPoolOptions {
35
56
  baseDir?: string | undefined;
36
57
  }
37
58
  /**
38
- * Constructs the warm worker pool when `worker.worker_pool.enabled` is set, and
39
- * returns `undefined` otherwise so the disabled path stays byte-identical to the
40
- * pre-pool daemon. The pool resolves the configured `driver` against the
41
- * worker-driver registry populated by {@link registerBuiltinBackends}; a driver
42
- * string that is NOT a registered kind is treated as a module specifier and
43
- * dynamic-imported into the registry first (see {@link ensureWorkerDriverLoaded}),
44
- * so third-party drivers load at the same fail-loud startup point - an
45
- * unresolvable driver throws `worker_pool_driver_unavailable` before the pool, the
46
- * runtime, or any provision exists. The write-ahead ledger (only consulted by
47
- * cloud drivers) lives under `<workspace.root>/.lorenz/worker-pool/`.
59
+ * Constructs the warm worker pool for the parsed worker-pool settings. The pool is the single
60
+ * dispatch path, so a parsed config always carries an enabled pool (an absent `worker_pool`
61
+ * defaults to an enabled `local` pool that provisions nothing eagerly). The internal `enabled`
62
+ * field is only flipped off by the reload-drain (a removed pool reconciled to drain to zero); this
63
+ * guard returns `undefined` for such an internally disabled / absent settings object so nothing is
64
+ * rebuilt. The pool resolves the configured `driver` against the worker-driver registry populated
65
+ * by {@link registerBuiltinBackends}; a driver string that is NOT a registered kind is treated as a
66
+ * module specifier and dynamic-imported into the registry first (see
67
+ * {@link ensureWorkerDriverLoaded}), so third-party drivers load at the same fail-loud startup
68
+ * point - an unresolvable driver throws `worker_pool_driver_unavailable` before the pool, the
69
+ * runtime, or any provision exists. The write-ahead ledger (only consulted by cloud drivers) lives
70
+ * under `<workspace.root>/.lorenz/worker-pool/`.
48
71
  */
49
72
  export declare function buildWorkerPool(settings: Settings, _env?: NodeJS.ProcessEnv, options?: BuildWorkerPoolOptions): Promise<WorkerPool | undefined>;
50
73
  /**
51
- * Constructs the runtime-facing {@link DispatchCoordinator} when
52
- * `worker.worker_pool.enabled` is set, wrapping the same {@link WorkerPool} that
53
- * {@link buildWorkerPool} builds and the injected {@link McpEndpointManager}. Returns
54
- * `undefined` when the pool is disabled so the disabled path stays byte-identical
55
- * to the pre-pool daemon.
74
+ * Constructs the runtime-facing {@link DispatchCoordinator}, wrapping the same
75
+ * {@link WorkerPool} that {@link buildWorkerPool} builds and the injected
76
+ * {@link McpEndpointManager}. The pool is the single dispatch path, so a parsed config always
77
+ * yields a coordinator. Returns `undefined` only for an internally disabled / absent settings
78
+ * object (the reload-drain's drained-to-zero shape), mirroring {@link buildWorkerPool}.
56
79
  *
57
- * The CONCRETE per-run {@link McpEndpointManager} (`perRunEndpoint=true`) is wired
80
+ * The CONCRETE per-run {@link McpEndpointManager} (`perRunClaimEnforcement=true`) is wired
58
81
  * here: it OWNS the whole per-run MCP endpoint lease (auth token + refcounted local
59
82
  * mcp server + reverse tunnel) via the injected `acquireAgentMcpEndpointForRun`. The
60
83
  * daemon is the right ownership boundary because it already depends on
61
84
  * `@lorenz/mcp`, keeping `@lorenz/worker-pool` and
62
- * `@lorenz/dispatch-coordinator` free of any mcp/tunnel runtime dependency
63
- * (invariant #8). At the default `slotsPerMachine=1` this opens exactly ONE endpoint
85
+ * `@lorenz/dispatch-coordinator` free of any mcp/tunnel runtime dependency.
86
+ * At the default `slotsPerMachine=1` this opens exactly ONE endpoint
64
87
  * per run (just coordinator-owned), and the manager returns `null` for an empty
65
88
  * (local) worker host so the local path keeps using acp's own endpoint -
66
89
  * byte-identical to the single-tenant path. `buildWorkerPool` stays for the worker-pool
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAe,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQvF,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,6BAA6B,EAC7B,qBAAqB,EAGtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC9C,aAAa,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,GAAE,iBAAsB,GAAG,IAAI,CAqBhF;AAED,wBAAgB,6BAA6B,IAAI,sBAAsB,CAEtE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAEtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,MAAM,CAAC,UAAwB,EACrC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAejC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAiC1C;AAmCD,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAKrF;AAED,eAAO,MAAM,eAAe;;;;CAI3B,CAAC"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAe,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQvF,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,6BAA6B,EAC7B,qBAAqB,EAGtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAK7B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC9C,aAAa,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,GAAE,iBAAsB,GAAG,IAAI,CAsBhF;AAED,wBAAgB,6BAA6B,IAAI,sBAAsB,CAEtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CAAE,GACrF,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAEtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,MAAM,CAAC,UAAwB,EACrC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAejC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAiD1C;AAmCD,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAKrF;AAED,eAAO,MAAM,eAAe;;;;CAI3B,CAAC"}