lorenz 0.1.4 → 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.
- package/README.md +83 -20
- package/RELEASE-MANIFEST.json +6 -1
- package/node_modules/@lorenz/agent-sdk/dist/index.d.ts +1 -0
- package/node_modules/@lorenz/agent-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/agent-sdk/dist/index.js +1 -0
- package/node_modules/@lorenz/agent-sdk/dist/index.js.map +1 -1
- package/node_modules/@lorenz/agent-sdk/dist/module.d.ts +38 -0
- package/node_modules/@lorenz/agent-sdk/dist/module.d.ts.map +1 -0
- package/node_modules/@lorenz/agent-sdk/dist/module.js +41 -0
- package/node_modules/@lorenz/agent-sdk/dist/module.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/agentExecutorLoader.d.ts +30 -0
- package/node_modules/@lorenz/cli/dist/agentExecutorLoader.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/agentExecutorLoader.js +63 -0
- package/node_modules/@lorenz/cli/dist/agentExecutorLoader.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/daemon.d.ts +42 -19
- package/node_modules/@lorenz/cli/dist/daemon.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/daemon.js +72 -23
- package/node_modules/@lorenz/cli/dist/daemon.js.map +1 -1
- package/node_modules/@lorenz/cli/dist/daemonLock.d.ts +59 -0
- package/node_modules/@lorenz/cli/dist/daemonLock.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/daemonLock.js +304 -0
- package/node_modules/@lorenz/cli/dist/daemonLock.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/daemonStatus.d.ts +16 -0
- package/node_modules/@lorenz/cli/dist/daemonStatus.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/daemonStatus.js +21 -0
- package/node_modules/@lorenz/cli/dist/daemonStatus.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/doctor.d.ts +6 -0
- package/node_modules/@lorenz/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/doctor.js +39 -2
- package/node_modules/@lorenz/cli/dist/doctor.js.map +1 -1
- package/node_modules/@lorenz/cli/dist/extensionLoader.d.ts +126 -0
- package/node_modules/@lorenz/cli/dist/extensionLoader.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/extensionLoader.js +187 -0
- package/node_modules/@lorenz/cli/dist/extensionLoader.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/flags-manifest.d.ts +42 -0
- package/node_modules/@lorenz/cli/dist/flags-manifest.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/flags-manifest.js +67 -0
- package/node_modules/@lorenz/cli/dist/flags-manifest.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/index.d.ts +6 -0
- package/node_modules/@lorenz/cli/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/index.js +4 -0
- package/node_modules/@lorenz/cli/dist/index.js.map +1 -1
- package/node_modules/@lorenz/cli/dist/leadershipStore.d.ts +42 -0
- package/node_modules/@lorenz/cli/dist/leadershipStore.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/leadershipStore.js +2 -0
- package/node_modules/@lorenz/cli/dist/leadershipStore.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/main.d.ts +11 -7
- package/node_modules/@lorenz/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/main.js +58 -8
- package/node_modules/@lorenz/cli/dist/main.js.map +1 -1
- package/node_modules/@lorenz/cli/dist/toolLoader.d.ts +28 -0
- package/node_modules/@lorenz/cli/dist/toolLoader.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/toolLoader.js +62 -0
- package/node_modules/@lorenz/cli/dist/toolLoader.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/trackerLoader.d.ts +24 -0
- package/node_modules/@lorenz/cli/dist/trackerLoader.d.ts.map +1 -0
- package/node_modules/@lorenz/cli/dist/trackerLoader.js +34 -0
- package/node_modules/@lorenz/cli/dist/trackerLoader.js.map +1 -0
- package/node_modules/@lorenz/cli/dist/workerDriverLoader.d.ts +15 -55
- package/node_modules/@lorenz/cli/dist/workerDriverLoader.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/workerDriverLoader.js +26 -203
- package/node_modules/@lorenz/cli/dist/workerDriverLoader.js.map +1 -1
- package/node_modules/@lorenz/cli/package.json +1 -0
- package/node_modules/@lorenz/config/dist/index.d.ts +1 -1
- package/node_modules/@lorenz/config/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/config/dist/index.js +1 -1
- package/node_modules/@lorenz/config/dist/index.js.map +1 -1
- package/node_modules/@lorenz/config/dist/parse.d.ts +17 -0
- package/node_modules/@lorenz/config/dist/parse.d.ts.map +1 -1
- package/node_modules/@lorenz/config/dist/parse.js +107 -11
- package/node_modules/@lorenz/config/dist/parse.js.map +1 -1
- package/node_modules/@lorenz/config/dist/schemas.d.ts +0 -2
- package/node_modules/@lorenz/config/dist/schemas.d.ts.map +1 -1
- package/node_modules/@lorenz/config/dist/schemas.js +5 -1
- package/node_modules/@lorenz/config/dist/schemas.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.d.ts +55 -21
- package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.js +187 -82
- package/node_modules/@lorenz/dispatch-coordinator/dist/coordinator.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/gate.d.ts +6 -4
- package/node_modules/@lorenz/dispatch-coordinator/dist/gate.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/gate.js +9 -6
- package/node_modules/@lorenz/dispatch-coordinator/dist/gate.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/index.d.ts +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/index.js +5 -6
- package/node_modules/@lorenz/dispatch-coordinator/dist/index.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.d.ts +7 -5
- package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.js +12 -10
- package/node_modules/@lorenz/dispatch-coordinator/dist/mcpEndpointManager.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.d.ts +11 -10
- package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.js +15 -22
- package/node_modules/@lorenz/dispatch-coordinator/dist/nullEndpointManager.js.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/types.d.ts +16 -15
- package/node_modules/@lorenz/dispatch-coordinator/dist/types.d.ts.map +1 -1
- package/node_modules/@lorenz/dispatch-coordinator/dist/types.js +6 -7
- package/node_modules/@lorenz/dispatch-coordinator/dist/types.js.map +1 -1
- package/node_modules/@lorenz/domain/dist/index.d.ts +75 -9
- package/node_modules/@lorenz/domain/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/domain/dist/index.js +40 -0
- package/node_modules/@lorenz/domain/dist/index.js.map +1 -1
- package/node_modules/@lorenz/flags/dist/coerce.d.ts +12 -0
- package/node_modules/@lorenz/flags/dist/coerce.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/coerce.js +44 -0
- package/node_modules/@lorenz/flags/dist/coerce.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/default.d.ts +6 -0
- package/node_modules/@lorenz/flags/dist/default.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/default.js +22 -0
- package/node_modules/@lorenz/flags/dist/default.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/deprecations.d.ts +20 -0
- package/node_modules/@lorenz/flags/dist/deprecations.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/deprecations.js +42 -0
- package/node_modules/@lorenz/flags/dist/deprecations.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/env.d.ts +17 -0
- package/node_modules/@lorenz/flags/dist/env.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/env.js +90 -0
- package/node_modules/@lorenz/flags/dist/env.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/errors.d.ts +22 -0
- package/node_modules/@lorenz/flags/dist/errors.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/errors.js +61 -0
- package/node_modules/@lorenz/flags/dist/errors.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/index.d.ts +8 -0
- package/node_modules/@lorenz/flags/dist/index.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/index.js +11 -0
- package/node_modules/@lorenz/flags/dist/index.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/keys.d.ts +6 -0
- package/node_modules/@lorenz/flags/dist/keys.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/keys.js +15 -0
- package/node_modules/@lorenz/flags/dist/keys.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/layers.d.ts +14 -0
- package/node_modules/@lorenz/flags/dist/layers.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/layers.js +107 -0
- package/node_modules/@lorenz/flags/dist/layers.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/manifest.d.ts +71 -0
- package/node_modules/@lorenz/flags/dist/manifest.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/manifest.js +137 -0
- package/node_modules/@lorenz/flags/dist/manifest.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/resolve.d.ts +8 -0
- package/node_modules/@lorenz/flags/dist/resolve.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/resolve.js +178 -0
- package/node_modules/@lorenz/flags/dist/resolve.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/testing.d.ts +19 -0
- package/node_modules/@lorenz/flags/dist/testing.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/testing.js +68 -0
- package/node_modules/@lorenz/flags/dist/testing.js.map +1 -0
- package/node_modules/@lorenz/flags/dist/types.d.ts +93 -0
- package/node_modules/@lorenz/flags/dist/types.d.ts.map +1 -0
- package/node_modules/@lorenz/flags/dist/types.js +2 -0
- package/node_modules/@lorenz/flags/dist/types.js.map +1 -0
- package/node_modules/@lorenz/flags/package.json +16 -0
- package/node_modules/@lorenz/mcp/dist/agentEndpoint.d.ts +16 -3
- package/node_modules/@lorenz/mcp/dist/agentEndpoint.d.ts.map +1 -1
- package/node_modules/@lorenz/mcp/dist/agentEndpoint.js +105 -17
- package/node_modules/@lorenz/mcp/dist/agentEndpoint.js.map +1 -1
- package/node_modules/@lorenz/mcp/dist/auth.d.ts +88 -0
- package/node_modules/@lorenz/mcp/dist/auth.d.ts.map +1 -1
- package/node_modules/@lorenz/mcp/dist/auth.js +53 -0
- package/node_modules/@lorenz/mcp/dist/auth.js.map +1 -1
- package/node_modules/@lorenz/mcp/dist/index.d.ts +3 -2
- package/node_modules/@lorenz/mcp/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/mcp/dist/index.js +1 -1
- package/node_modules/@lorenz/mcp/dist/index.js.map +1 -1
- package/node_modules/@lorenz/mcp/dist/server.d.ts +22 -0
- package/node_modules/@lorenz/mcp/dist/server.d.ts.map +1 -1
- package/node_modules/@lorenz/mcp/dist/server.js +85 -12
- package/node_modules/@lorenz/mcp/dist/server.js.map +1 -1
- package/node_modules/@lorenz/orchestrator/dist/claimStore.d.ts +157 -0
- package/node_modules/@lorenz/orchestrator/dist/claimStore.d.ts.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/claimStore.js +621 -0
- package/node_modules/@lorenz/orchestrator/dist/claimStore.js.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/codec.d.ts +38 -0
- package/node_modules/@lorenz/orchestrator/dist/codec.d.ts.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/codec.js +176 -0
- package/node_modules/@lorenz/orchestrator/dist/codec.js.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/index.d.ts +55 -51
- package/node_modules/@lorenz/orchestrator/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/orchestrator/dist/index.js +285 -45
- package/node_modules/@lorenz/orchestrator/dist/index.js.map +1 -1
- package/node_modules/@lorenz/orchestrator/dist/sqlite.d.ts +34 -0
- package/node_modules/@lorenz/orchestrator/dist/sqlite.d.ts.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/sqlite.js +142 -0
- package/node_modules/@lorenz/orchestrator/dist/sqlite.js.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/state.d.ts +47 -0
- package/node_modules/@lorenz/orchestrator/dist/state.d.ts.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/state.js +15 -0
- package/node_modules/@lorenz/orchestrator/dist/state.js.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/turso.d.ts +28 -0
- package/node_modules/@lorenz/orchestrator/dist/turso.d.ts.map +1 -0
- package/node_modules/@lorenz/orchestrator/dist/turso.js +125 -0
- package/node_modules/@lorenz/orchestrator/dist/turso.js.map +1 -0
- package/node_modules/@lorenz/orchestrator/package.json +6 -2
- package/node_modules/@lorenz/presenter/dist/index.d.ts +14 -0
- package/node_modules/@lorenz/presenter/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/presenter/dist/index.js +18 -0
- package/node_modules/@lorenz/presenter/dist/index.js.map +1 -1
- package/node_modules/@lorenz/projections/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/projections/dist/index.js +1 -0
- package/node_modules/@lorenz/projections/dist/index.js.map +1 -1
- package/node_modules/@lorenz/runtime/dist/index.d.ts +27 -8
- package/node_modules/@lorenz/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/runtime/dist/index.js +422 -98
- package/node_modules/@lorenz/runtime/dist/index.js.map +1 -1
- package/node_modules/@lorenz/runtime-events/dist/index.d.ts +14 -0
- package/node_modules/@lorenz/runtime-events/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/server/dist/index.js +1 -1
- package/node_modules/@lorenz/server/dist/index.js.map +1 -1
- package/node_modules/@lorenz/ssh/dist/index.d.ts +2 -0
- package/node_modules/@lorenz/ssh/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/ssh/dist/index.js +2 -1
- package/node_modules/@lorenz/ssh/dist/index.js.map +1 -1
- package/node_modules/@lorenz/tool-sdk/dist/index.d.ts +1 -0
- package/node_modules/@lorenz/tool-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/tool-sdk/dist/index.js +1 -0
- package/node_modules/@lorenz/tool-sdk/dist/index.js.map +1 -1
- package/node_modules/@lorenz/tool-sdk/dist/module.d.ts +38 -0
- package/node_modules/@lorenz/tool-sdk/dist/module.d.ts.map +1 -0
- package/node_modules/@lorenz/tool-sdk/dist/module.js +42 -0
- package/node_modules/@lorenz/tool-sdk/dist/module.js.map +1 -0
- package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts +1 -0
- package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/dist/index.js +1 -0
- package/node_modules/@lorenz/tracker-sdk/dist/index.js.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/dist/module.d.ts +37 -0
- package/node_modules/@lorenz/tracker-sdk/dist/module.d.ts.map +1 -0
- package/node_modules/@lorenz/tracker-sdk/dist/module.js +38 -0
- package/node_modules/@lorenz/tracker-sdk/dist/module.js.map +1 -0
- package/node_modules/@lorenz/worker-host-pool/dist/index.d.ts +34 -6
- package/node_modules/@lorenz/worker-host-pool/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/worker-host-pool/dist/index.js +110 -143
- package/node_modules/@lorenz/worker-host-pool/dist/index.js.map +1 -1
- package/node_modules/@lorenz/worker-sdk/dist/index.d.ts +1 -0
- package/node_modules/@lorenz/worker-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/worker-sdk/dist/index.js +1 -0
- package/node_modules/@lorenz/worker-sdk/dist/index.js.map +1 -1
- package/node_modules/@lorenz/worker-sdk/dist/local.d.ts +74 -0
- package/node_modules/@lorenz/worker-sdk/dist/local.d.ts.map +1 -0
- package/node_modules/@lorenz/worker-sdk/dist/local.js +112 -0
- package/node_modules/@lorenz/worker-sdk/dist/local.js.map +1 -0
- package/node_modules/@lorenz/worker-sdk/dist/module.d.ts +8 -16
- package/node_modules/@lorenz/worker-sdk/dist/module.d.ts.map +1 -1
- package/node_modules/@lorenz/worker-sdk/dist/module.js +15 -35
- package/node_modules/@lorenz/worker-sdk/dist/module.js.map +1 -1
- package/node_modules/@lorenz/workflow/dist/index.d.ts +11 -0
- package/node_modules/@lorenz/workflow/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/workflow/dist/index.js +3 -0
- package/node_modules/@lorenz/workflow/dist/index.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -1,31 +1,59 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
5
|
+
[](https://ryanlyn.github.io/lorenz/) [](https://www.npmjs.com/package/lorenz) [](LICENSE) [](https://agentclientprotocol.com/get-started/introduction) [](mise.toml)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
</div>
|
|
8
8
|
|
|
9
|
-
Lorenz
|
|
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
|
-
|
|
11
|
+
## Features
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
<table>
|
|
14
|
+
<tr>
|
|
15
|
+
<td width="50%" valign="top">
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
**Any tracker**<br>
|
|
18
|
+
Linear, Jira, Slack, Obsidian, local files, or in-memory.
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
</td>
|
|
21
|
+
<td width="50%" valign="top">
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
**Harness-agnostic**<br>
|
|
24
|
+
Codex, Claude, or anything that speaks the Agent-Client Protocol.
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
<tr>
|
|
29
|
+
<td width="50%" valign="top">
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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
|
+

|
|
96
|
+
|
|
97
|
+
**Web dashboard**
|
|
98
|
+
|
|
99
|
+

|
|
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
|
|
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
|
-
|
|
151
|
+
<details>
|
|
152
|
+
<summary><b>Contributing & 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).
|
package/RELEASE-MANIFEST.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.1.
|
|
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 +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
|
|
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
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
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}
|
|
52
|
-
*
|
|
53
|
-
* {@link
|
|
54
|
-
* `undefined`
|
|
55
|
-
*
|
|
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} (`
|
|
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
|
-
*
|
|
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,
|
|
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"}
|