@action-llama/action-llama 0.13.3 → 0.13.4

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 (158) hide show
  1. package/README.md +6 -6
  2. package/agent-docs/AGENTS.md +1 -1
  3. package/agent-docs/skills/resource-locks.md +40 -2
  4. package/dist/agents/container-entry.d.ts.map +1 -1
  5. package/dist/agents/container-entry.js +3 -1
  6. package/dist/agents/container-entry.js.map +1 -1
  7. package/dist/agents/execution-engine.d.ts.map +1 -1
  8. package/dist/agents/execution-engine.js +3 -1
  9. package/dist/agents/execution-engine.js.map +1 -1
  10. package/dist/agents/runner.d.ts.map +1 -1
  11. package/dist/agents/runner.js +3 -1
  12. package/dist/agents/runner.js.map +1 -1
  13. package/dist/build-info.json +1 -1
  14. package/dist/cli/commands/chat.js +6 -2
  15. package/dist/cli/commands/chat.js.map +1 -1
  16. package/dist/cli/commands/push.d.ts +1 -0
  17. package/dist/cli/commands/push.d.ts.map +1 -1
  18. package/dist/cli/commands/push.js +22 -4
  19. package/dist/cli/commands/push.js.map +1 -1
  20. package/dist/cli/commands/status.d.ts.map +1 -1
  21. package/dist/cli/commands/status.js +10 -5
  22. package/dist/cli/commands/status.js.map +1 -1
  23. package/dist/cli/main.js +3 -2
  24. package/dist/cli/main.js.map +1 -1
  25. package/dist/cloud/{vps/cloudflare-api.d.ts → cloudflare/api.d.ts} +1 -1
  26. package/dist/cloud/cloudflare/api.d.ts.map +1 -0
  27. package/dist/cloud/{vps/cloudflare-api.js → cloudflare/api.js} +1 -1
  28. package/dist/cloud/cloudflare/api.js.map +1 -0
  29. package/dist/cloud/provider.js +2 -2
  30. package/dist/cloud/provider.js.map +1 -1
  31. package/dist/cloud/vps/provider.d.ts +4 -4
  32. package/dist/cloud/vps/provider.d.ts.map +1 -1
  33. package/dist/cloud/vps/provider.js +4 -4
  34. package/dist/cloud/vps/provider.js.map +1 -1
  35. package/dist/cloud/vps/provision.js +4 -4
  36. package/dist/cloud/vps/provision.js.map +1 -1
  37. package/dist/cloud/vps/teardown.d.ts +2 -2
  38. package/dist/cloud/vps/teardown.d.ts.map +1 -1
  39. package/dist/cloud/vps/teardown.js +3 -3
  40. package/dist/cloud/vps/teardown.js.map +1 -1
  41. package/dist/cloud/vps/verify.js +2 -2
  42. package/dist/cloud/vps/verify.js.map +1 -1
  43. package/dist/credentials/builtins/cloudflare-api-token.js +1 -1
  44. package/dist/credentials/builtins/cloudflare-api-token.js.map +1 -1
  45. package/dist/gateway/auth.d.ts +6 -1
  46. package/dist/gateway/auth.d.ts.map +1 -1
  47. package/dist/gateway/auth.js +21 -4
  48. package/dist/gateway/auth.js.map +1 -1
  49. package/dist/gateway/index.d.ts +1 -0
  50. package/dist/gateway/index.d.ts.map +1 -1
  51. package/dist/gateway/index.js +13 -6
  52. package/dist/gateway/index.js.map +1 -1
  53. package/dist/gateway/lock-store.d.ts +17 -0
  54. package/dist/gateway/lock-store.d.ts.map +1 -1
  55. package/dist/gateway/lock-store.js +101 -28
  56. package/dist/gateway/lock-store.js.map +1 -1
  57. package/dist/gateway/routes/control.d.ts +3 -0
  58. package/dist/gateway/routes/control.d.ts.map +1 -1
  59. package/dist/gateway/routes/control.js +7 -0
  60. package/dist/gateway/routes/control.js.map +1 -1
  61. package/dist/gateway/routes/dashboard.d.ts +6 -1
  62. package/dist/gateway/routes/dashboard.d.ts.map +1 -1
  63. package/dist/gateway/routes/dashboard.js +37 -3
  64. package/dist/gateway/routes/dashboard.js.map +1 -1
  65. package/dist/gateway/routes/locks.d.ts.map +1 -1
  66. package/dist/gateway/routes/locks.js +7 -3
  67. package/dist/gateway/routes/locks.js.map +1 -1
  68. package/dist/gateway/routes/webhooks.d.ts.map +1 -1
  69. package/dist/gateway/routes/webhooks.js +0 -3
  70. package/dist/gateway/routes/webhooks.js.map +1 -1
  71. package/dist/gateway/session-store.d.ts +11 -0
  72. package/dist/gateway/session-store.d.ts.map +1 -0
  73. package/dist/gateway/session-store.js +33 -0
  74. package/dist/gateway/session-store.js.map +1 -0
  75. package/dist/gateway/types.d.ts +5 -0
  76. package/dist/gateway/types.d.ts.map +1 -1
  77. package/dist/remote/push.d.ts +15 -1
  78. package/dist/remote/push.d.ts.map +1 -1
  79. package/dist/remote/push.js +54 -3
  80. package/dist/remote/push.js.map +1 -1
  81. package/dist/scheduler/call-dispatcher.d.ts +11 -0
  82. package/dist/scheduler/call-dispatcher.d.ts.map +1 -0
  83. package/dist/scheduler/call-dispatcher.js +65 -0
  84. package/dist/scheduler/call-dispatcher.js.map +1 -0
  85. package/dist/scheduler/cron-setup.d.ts +41 -0
  86. package/dist/scheduler/cron-setup.d.ts.map +1 -0
  87. package/dist/scheduler/cron-setup.js +94 -0
  88. package/dist/scheduler/cron-setup.js.map +1 -0
  89. package/dist/scheduler/event-queue-sqlite.d.ts +27 -0
  90. package/dist/scheduler/event-queue-sqlite.d.ts.map +1 -0
  91. package/dist/scheduler/event-queue-sqlite.js +105 -0
  92. package/dist/scheduler/event-queue-sqlite.js.map +1 -0
  93. package/dist/scheduler/event-queue.d.ts +31 -9
  94. package/dist/scheduler/event-queue.d.ts.map +1 -1
  95. package/dist/scheduler/event-queue.js +21 -32
  96. package/dist/scheduler/event-queue.js.map +1 -1
  97. package/dist/scheduler/execution.d.ts +9 -2
  98. package/dist/scheduler/execution.d.ts.map +1 -1
  99. package/dist/scheduler/execution.js +64 -48
  100. package/dist/scheduler/execution.js.map +1 -1
  101. package/dist/scheduler/gateway-setup.d.ts +40 -0
  102. package/dist/scheduler/gateway-setup.d.ts.map +1 -0
  103. package/dist/scheduler/gateway-setup.js +135 -0
  104. package/dist/scheduler/gateway-setup.js.map +1 -0
  105. package/dist/scheduler/index.d.ts +4 -7
  106. package/dist/scheduler/index.d.ts.map +1 -1
  107. package/dist/scheduler/index.js +81 -437
  108. package/dist/scheduler/index.js.map +1 -1
  109. package/dist/scheduler/runner-setup.d.ts +34 -0
  110. package/dist/scheduler/runner-setup.d.ts.map +1 -0
  111. package/dist/scheduler/runner-setup.js +63 -0
  112. package/dist/scheduler/runner-setup.js.map +1 -0
  113. package/dist/scheduler/shutdown.d.ts +20 -0
  114. package/dist/scheduler/shutdown.d.ts.map +1 -0
  115. package/dist/scheduler/shutdown.js +38 -0
  116. package/dist/scheduler/shutdown.js.map +1 -0
  117. package/dist/scheduler/state.d.ts +17 -0
  118. package/dist/scheduler/state.d.ts.map +1 -0
  119. package/dist/scheduler/state.js +10 -0
  120. package/dist/scheduler/state.js.map +1 -0
  121. package/dist/scheduler/validation.d.ts +18 -0
  122. package/dist/scheduler/validation.d.ts.map +1 -0
  123. package/dist/scheduler/validation.js +59 -0
  124. package/dist/scheduler/validation.js.map +1 -0
  125. package/dist/scheduler/watcher.d.ts.map +1 -1
  126. package/dist/scheduler/watcher.js +31 -48
  127. package/dist/scheduler/watcher.js.map +1 -1
  128. package/dist/scheduler/webhook-setup.d.ts +18 -1
  129. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  130. package/dist/scheduler/webhook-setup.js +51 -0
  131. package/dist/scheduler/webhook-setup.js.map +1 -1
  132. package/dist/shared/config.d.ts +2 -3
  133. package/dist/shared/config.d.ts.map +1 -1
  134. package/dist/shared/config.js +0 -15
  135. package/dist/shared/config.js.map +1 -1
  136. package/dist/shared/queue-memory.d.ts +16 -0
  137. package/dist/shared/queue-memory.d.ts.map +1 -0
  138. package/dist/shared/queue-memory.js +28 -0
  139. package/dist/shared/queue-memory.js.map +1 -0
  140. package/dist/shared/queue-sqlite.d.ts +28 -0
  141. package/dist/shared/queue-sqlite.d.ts.map +1 -0
  142. package/dist/shared/queue-sqlite.js +86 -0
  143. package/dist/shared/queue-sqlite.js.map +1 -0
  144. package/dist/shared/queue.d.ts +55 -0
  145. package/dist/shared/queue.d.ts.map +1 -0
  146. package/dist/shared/queue.js +22 -0
  147. package/dist/shared/queue.js.map +1 -0
  148. package/dist/shared/server.d.ts +1 -0
  149. package/dist/shared/server.d.ts.map +1 -1
  150. package/dist/shared/server.js +3 -0
  151. package/dist/shared/server.js.map +1 -1
  152. package/package.json +2 -2
  153. package/dist/cloud/vps/cloudflare-api.d.ts.map +0 -1
  154. package/dist/cloud/vps/cloudflare-api.js.map +0 -1
  155. package/dist/gateway/rate-limiter.d.ts +0 -16
  156. package/dist/gateway/rate-limiter.d.ts.map +0 -1
  157. package/dist/gateway/rate-limiter.js +0 -38
  158. package/dist/gateway/rate-limiter.js.map +0 -1
@@ -1,17 +1,18 @@
1
- import { Cron } from "croner";
2
- import { loadGlobalConfig, loadAgentConfig, discoverAgents, validateAgentConfig } from "../shared/config.js";
3
- import { requireCredentialRef } from "../shared/credentials.js";
1
+ import { loadGlobalConfig } from "../shared/config.js";
4
2
  import { createLogger, createFileOnlyLogger } from "../shared/logger.js";
5
3
  import { CONSTANTS } from "../shared/constants.js";
6
- import { ConfigError } from "../shared/errors.js";
7
- import { WorkQueue } from "./event-queue.js";
8
- import { RunnerPool } from "./runner-pool.js";
4
+ import { createWorkQueue } from "./event-queue.js";
9
5
  import { createContainerRuntime, buildAgentImages } from "./runtime-factory.js";
10
- import { resolveWebhookSource, buildFilterFromTrigger, setupWebhookRegistry } from "./webhook-setup.js";
6
+ import { setupWebhookRegistry, registerWebhookBindings } from "./webhook-setup.js";
11
7
  import { initTelemetry } from "../telemetry/index.js";
12
- import { ensureGatewayApiKey } from "../gateway/api-key.js";
13
- import { DEFAULT_MAX_RERUNS, DEFAULT_MAX_TRIGGER_DEPTH, executeRun, drainQueues, runWithReruns, makeWebhookPrompt, makeTriggeredPrompt, } from "./execution.js";
8
+ import { drainQueues } from "./execution.js";
14
9
  import { SchedulerEventBus } from "./events.js";
10
+ import { validateAndDiscover } from "./validation.js";
11
+ import { setupGateway } from "./gateway-setup.js";
12
+ import { createRunnerPools } from "./runner-setup.js";
13
+ import { wireCallDispatcher } from "./call-dispatcher.js";
14
+ import { setupCronJobs, setupEnableDisableHandlers, fireInitialRuns } from "./cron-setup.js";
15
+ import { registerShutdownHandlers } from "./shutdown.js";
15
16
  export { SchedulerEventBus } from "./events.js";
16
17
  export async function startScheduler(projectPath, globalConfigOverride, statusTracker, webUI, expose) {
17
18
  const mkLogger = statusTracker ? createFileOnlyLogger : createLogger;
@@ -30,44 +31,9 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
30
31
  logger.warn({ error: error.message }, "Failed to initialize telemetry");
31
32
  }
32
33
  }
33
- // Discover all agents in the project
34
- const agentNames = discoverAgents(projectPath);
35
- if (agentNames.length === 0) {
36
- throw new ConfigError("No agents found. Run 'al new' to create a project with agents.");
37
- }
38
- const agentConfigs = agentNames.map((name) => loadAgentConfig(projectPath, name));
39
- // Validate each agent has schedule, webhooks, or both
40
- for (const config of agentConfigs) {
41
- validateAgentConfig(config);
42
- }
43
- const activeAgentConfigs = agentConfigs.filter((a) => (a.scale ?? 1) > 0);
44
- // Validate credentials exist for each active agent
45
- const allCredentials = new Set(activeAgentConfigs.flatMap((a) => a.credentials));
46
- for (const credRef of allCredentials) {
47
- await requireCredentialRef(credRef);
48
- }
49
- const maxReruns = globalConfig.maxReruns ?? DEFAULT_MAX_RERUNS;
50
- const maxTriggerDepth = globalConfig.maxCallDepth ?? globalConfig.maxTriggerDepth ?? DEFAULT_MAX_TRIGGER_DEPTH;
51
- const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
52
- const dockerEnabled = true;
53
- const anyWebhooks = activeAgentConfigs.some((a) => a.webhooks?.length);
54
- // Validate pi_auth is not used with Docker (containers can't access host auth storage)
55
- for (const config of activeAgentConfigs) {
56
- if (config.model.authType === "pi_auth") {
57
- throw new ConfigError(`Agent "${config.name}" uses pi_auth which is not supported in container mode. ` +
58
- `Switch to api_key/oauth_token (run 'al doctor').`);
59
- }
60
- }
61
- // Resolve webhook sources from global config
62
- const webhookSources = globalConfig.webhooks ?? {};
63
- // Validate all agent webhook sources reference valid global config entries
64
- if (anyWebhooks) {
65
- for (const config of activeAgentConfigs) {
66
- for (const trigger of config.webhooks ?? []) {
67
- resolveWebhookSource(trigger.source, config.name, webhookSources);
68
- }
69
- }
70
- }
34
+ // Discover agents and validate config
35
+ const validated = await validateAndDiscover(projectPath, globalConfig, logger);
36
+ const { agentConfigs, activeAgentConfigs, maxReruns, maxTriggerDepth, timezone, anyWebhooks, webhookSources } = validated;
71
37
  // Set up webhook registry if any agents use webhooks
72
38
  const { registry: webhookRegistry, secrets: webhookSecrets } = anyWebhooks
73
39
  ? await setupWebhookRegistry(globalConfig, logger)
@@ -78,10 +44,6 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
78
44
  for (const agentConfig of agentConfigs) {
79
45
  statusTracker?.registerAgent(agentConfig.name, agentConfig.scale ?? 1);
80
46
  }
81
- // Declare runner pools and cron jobs early so control route closures can reference them.
82
- // They are populated after image builds complete.
83
- const runnerPools = {};
84
- let cronJobs = [];
85
47
  // Create persistent state store (SQLite)
86
48
  let stateStore;
87
49
  {
@@ -93,124 +55,24 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
93
55
  });
94
56
  logger.info("State store: SQLite (.al/state.db)");
95
57
  }
96
- // Create the lifecycle event bus (no-op in production when no listeners are attached)
58
+ // Create the lifecycle event bus
97
59
  const events = new SchedulerEventBus();
60
+ // Create the shared mutable state container for late-binding closures
61
+ const state = {
62
+ runnerPools: {},
63
+ cronJobs: [],
64
+ schedulerCtx: null,
65
+ };
98
66
  // Start gateway early (before Docker builds) so users can see build status
99
- let gateway;
100
- // Ensure gateway API key exists (fallback generation if doctor wasn't run)
101
- const { key: gatewayApiKey, generated } = await ensureGatewayApiKey();
102
- if (generated) {
103
- logger.info("Generated gateway API key (run 'al doctor' to view it)");
104
- }
105
- const { startGateway } = await import("../gateway/index.js");
106
- const gatewayPort = globalConfig.gateway?.port || 8080;
107
- gateway = await startGateway({
108
- port: gatewayPort,
109
- hostname: expose ? "0.0.0.0" : "127.0.0.1",
110
- logger: mkLogger(projectPath, "gateway"),
111
- killContainer: undefined, // Runtime not ready yet, will handle container ops later
112
- webhookRegistry,
113
- webhookSecrets,
114
- statusTracker,
115
- projectPath,
116
- webUI,
117
- lockTimeout: globalConfig.gateway?.lockTimeout,
118
- apiKey: gatewayApiKey,
119
- stateStore,
120
- events,
121
- controlDeps: {
122
- statusTracker,
123
- logger,
124
- killInstance: async (instanceId) => {
125
- for (const pool of Object.values(runnerPools)) {
126
- if (pool.killInstance(instanceId))
127
- return true;
128
- }
129
- return false;
130
- },
131
- killAgent: async (name) => {
132
- const pool = runnerPools[name];
133
- if (!pool)
134
- return null;
135
- const killed = pool.killAll();
136
- logger.info({ agent: name, killed }, "kill all instances requested via control API");
137
- return { killed };
138
- },
139
- pauseScheduler: async () => {
140
- for (const job of cronJobs) {
141
- job.pause();
142
- }
143
- statusTracker?.setPaused(true);
144
- logger.info("Scheduler paused via control API");
145
- },
146
- resumeScheduler: async () => {
147
- for (const job of cronJobs) {
148
- job.resume();
149
- }
150
- statusTracker?.setPaused(false);
151
- logger.info("Scheduler resumed via control API");
152
- },
153
- triggerAgent: async (name) => {
154
- const pool = runnerPools[name];
155
- if (!pool)
156
- return false;
157
- const runner = pool.getAvailableRunner();
158
- if (!runner)
159
- return false;
160
- const config = agentConfigs.find((a) => a.name === name);
161
- if (!config)
162
- return false;
163
- logger.info({ agent: name }, "manual trigger via control API");
164
- runWithReruns(runner, config, 0, schedulerCtx).catch((err) => {
165
- logger.error({ err, agent: name }, "manual trigger run failed");
166
- });
167
- return true;
168
- },
169
- enableAgent: async (name) => {
170
- if (!statusTracker)
171
- return false;
172
- const config = agentConfigs.find((a) => a.name === name);
173
- if (!config)
174
- return false;
175
- statusTracker.enableAgent(name);
176
- return true;
177
- },
178
- disableAgent: async (name) => {
179
- if (!statusTracker)
180
- return false;
181
- const config = agentConfigs.find((a) => a.name === name);
182
- if (!config)
183
- return false;
184
- statusTracker.disableAgent(name);
185
- return true;
186
- },
187
- stopScheduler: async () => {
188
- logger.info("Stop requested via control API");
189
- schedulerCtx.shuttingDown = true;
190
- schedulerCtx.workQueue.clearAll();
191
- for (const job of cronJobs)
192
- job.stop();
193
- if (gateway)
194
- await gateway.close();
195
- if (stateStore)
196
- await stateStore.close();
197
- if (telemetry) {
198
- try {
199
- await telemetry.shutdown();
200
- }
201
- catch { }
202
- }
203
- process.exit(0);
204
- },
205
- },
67
+ const { gateway, gatewayPort, registerContainer, unregisterContainer } = await setupGateway({
68
+ projectPath, globalConfig, state, agentConfigs,
69
+ webhookRegistry, webhookSecrets, stateStore, events, telemetry,
70
+ mkLogger, statusTracker, webUI, expose, logger,
206
71
  });
207
- logger.info({ port: gatewayPort }, "Gateway started early to show build progress");
208
- // 1. Create the container runtime
72
+ // Create the container runtime
209
73
  const { runtime, agentRuntimeOverrides } = await createContainerRuntime(globalConfig, activeAgentConfigs, logger);
210
74
  logger.info({ runtime: "local" }, "Container mode enabled — initializing infrastructure");
211
- // Check for orphan containers from a previous scheduler run.
212
- // Only clean up containers belonging to agents in this project to avoid
213
- // killing containers from other schedulers running in parallel (e.g. tests).
75
+ // Check for orphan containers from a previous scheduler run
214
76
  try {
215
77
  const ownAgentNames = new Set(activeAgentConfigs.map((a) => a.name));
216
78
  const orphans = (await runtime.listRunningAgents()).filter((o) => ownAgentNames.has(o.agentName));
@@ -231,7 +93,7 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
231
93
  catch (err) {
232
94
  logger.debug({ err }, "orphan detection skipped (runtime does not support listing)");
233
95
  }
234
- // 2. Build base + per-agent images via shared image builder
96
+ // Build base + per-agent images
235
97
  const buildSkills = { locking: true };
236
98
  const buildResult = await buildAgentImages({
237
99
  projectPath, globalConfig, activeAgentConfigs,
@@ -239,298 +101,80 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
239
101
  });
240
102
  baseImage = buildResult.baseImage;
241
103
  Object.assign(agentImages, buildResult.agentImages);
242
- // Import necessary classes for container runners
243
- const { ContainerAgentRunner: ContainerAgentRunnerClass } = await import("../agents/container-runner.js");
244
- const gatewayUrl = process.env.GATEWAY_URL || `http://gateway:${gatewayPort}`;
245
- // Gateway callbacks async (ContainerRegistry persists to StateStore).
246
- const registerContainer = gateway
247
- ? gateway.registerContainer
248
- : async (_secret, _reg) => { };
249
- const unregisterContainer = gateway
250
- ? gateway.unregisterContainer
251
- : async (_secret) => { };
252
- // Enforce project-wide scale limit
253
- let totalScale = 0;
254
- const adjustedConfigs = agentConfigs.map(config => ({ ...config }));
255
- if (globalConfig.scale !== undefined) {
256
- for (let i = 0; i < adjustedConfigs.length; i++) {
257
- const config = adjustedConfigs[i];
258
- const requestedScale = config.scale ?? 1;
259
- const remainingCapacity = globalConfig.scale - totalScale;
260
- if (remainingCapacity <= 0) {
261
- config.scale = 1; // Ensure at least 1 runner per agent
262
- if (requestedScale > 1) {
263
- logger.warn({
264
- agent: config.name,
265
- requested: requestedScale,
266
- reduced: 1,
267
- projectLimit: globalConfig.scale
268
- }, "Agent scale reduced due to project scale limit");
269
- }
270
- totalScale += 1;
271
- }
272
- else if (requestedScale > remainingCapacity) {
273
- config.scale = remainingCapacity;
274
- logger.warn({
275
- agent: config.name,
276
- requested: requestedScale,
277
- reduced: remainingCapacity,
278
- projectLimit: globalConfig.scale
279
- }, "Agent scale reduced due to project scale limit");
280
- totalScale += remainingCapacity;
281
- }
282
- else {
283
- totalScale += requestedScale;
284
- }
285
- }
286
- }
287
- for (const agentConfig of adjustedConfigs) {
288
- const scale = agentConfig.scale ?? 1;
289
- const runners = [];
290
- // Single log file per agent — instances share the file and are distinguished
291
- // by the `instance` field in each log entry (generated per-run by the runner).
292
- const agentLogger = mkLogger(projectPath, agentConfig.name);
293
- for (let i = 0; i < scale; i++) {
294
- const agentRuntime = agentRuntimeOverrides[agentConfig.name] || runtime;
295
- runners.push(new ContainerAgentRunnerClass(agentRuntime, globalConfig, agentConfig, agentLogger, registerContainer, unregisterContainer, gatewayUrl, projectPath, agentImages[agentConfig.name] || baseImage, statusTracker));
296
- }
297
- runnerPools[agentConfig.name] = new RunnerPool(runners);
298
- logger.info({ agent: agentConfig.name, scale }, "Created runner pool");
299
- }
104
+ // Create runner pools
105
+ const { runnerPools, createRunner } = await createRunnerPools({
106
+ globalConfig, agentConfigs, runtime, agentRuntimeOverrides,
107
+ agentImages, baseImage, gatewayPort, registerContainer, unregisterContainer,
108
+ statusTracker, mkLogger, projectPath, logger,
109
+ });
110
+ // Populate late-binding state
111
+ Object.assign(state.runnerPools, runnerPools);
112
+ // Create work queue + scheduler context
300
113
  const queueSize = globalConfig.workQueueSize ?? globalConfig.webhookQueueSize ?? 20;
301
- const workQueue = new WorkQueue(queueSize, stateStore);
302
- await workQueue.init();
114
+ const workQueue = await createWorkQueue(queueSize, {
115
+ type: "sqlite",
116
+ path: (await import("path")).resolve(projectPath, ".al", "work-queue.db"),
117
+ });
303
118
  const skills = { locking: true };
304
- const callStore = gateway?.callStore;
305
- const schedulerCtx = { runnerPools, agentConfigs, maxReruns, maxTriggerDepth, logger, workQueue, shuttingDown: false, skills, useBakedImages: true, events, callStore };
306
- // Wire up the call dispatcher so al-call works from inside containers
307
- if (gateway) {
308
- gateway.setCallDispatcher((entry) => {
309
- if (entry.callerAgent === entry.targetAgent) {
310
- return { ok: false, reason: "agent cannot call itself" };
311
- }
312
- if (entry.depth >= maxTriggerDepth) {
313
- return { ok: false, reason: "trigger depth limit reached" };
314
- }
315
- const targetConfig = agentConfigs.find((a) => a.name === entry.targetAgent);
316
- if (!targetConfig) {
317
- return { ok: false, reason: `target agent "${entry.targetAgent}" not found` };
318
- }
319
- const pool = runnerPools[entry.targetAgent];
320
- if (!pool || pool.size === 0) {
321
- return { ok: false, reason: `target agent "${entry.targetAgent}" is disabled` };
322
- }
323
- const runner = pool.getAvailableRunner();
324
- if (runner) {
325
- logger.info({ caller: entry.callerAgent, target: entry.targetAgent, depth: entry.depth }, "dispatching call");
326
- callStore?.setRunning(entry.callId);
327
- const prompt = makeTriggeredPrompt(targetConfig, entry.callerAgent, entry.context, schedulerCtx);
328
- executeRun(runner, prompt, { type: 'agent', source: entry.callerAgent }, entry.targetAgent, entry.depth + 1, schedulerCtx)
329
- .then(({ result, returnValue }) => {
330
- if (result === "completed" || result === "rerun") {
331
- callStore?.complete(entry.callId, returnValue);
332
- }
333
- else {
334
- callStore?.fail(entry.callId, "agent run failed");
335
- }
336
- return drainQueues(schedulerCtx);
337
- })
338
- .catch((err) => {
339
- callStore?.fail(entry.callId, err?.message || "unknown error");
340
- logger.error({ err, target: entry.targetAgent }, "called agent run failed");
341
- });
342
- }
343
- else {
344
- schedulerCtx.workQueue.enqueue(entry.targetAgent, {
345
- type: 'agent-trigger',
346
- sourceAgent: entry.callerAgent,
347
- context: entry.context,
348
- depth: entry.depth,
349
- callId: entry.callId,
350
- });
351
- logger.info({ caller: entry.callerAgent, target: entry.targetAgent }, "all runners busy, call queued");
352
- }
353
- return { ok: true };
354
- });
355
- }
356
- // Set up webhook bindings (only when gateway is enabled)
119
+ const callStore = gateway.callStore;
120
+ const schedulerCtx = {
121
+ runnerPools, agentConfigs, maxReruns, maxTriggerDepth, logger, workQueue,
122
+ shuttingDown: false, skills, useBakedImages: true, events, callStore, statusTracker,
123
+ isAgentEnabled: statusTracker ? (name) => statusTracker.isAgentEnabled(name) : undefined,
124
+ };
125
+ // Populate late-binding state
126
+ state.schedulerCtx = schedulerCtx;
127
+ // Wire up call dispatcher
128
+ wireCallDispatcher(gateway, schedulerCtx, statusTracker);
129
+ // Set up webhook bindings
357
130
  if (webhookRegistry) {
358
131
  for (const agentConfig of activeAgentConfigs) {
359
132
  if (!agentConfig.webhooks?.length)
360
133
  continue;
361
- const pool = runnerPools[agentConfig.name];
362
- for (const trigger of agentConfig.webhooks) {
363
- const sourceConfig = webhookSources[trigger.source];
364
- const providerType = sourceConfig.type;
365
- const filter = buildFilterFromTrigger(trigger, providerType);
366
- webhookRegistry.addBinding({
367
- agentName: agentConfig.name,
368
- source: sourceConfig.credential,
369
- type: providerType,
370
- filter,
371
- trigger: (context) => {
372
- if (statusTracker && !statusTracker.isAgentEnabled(agentConfig.name))
373
- return false;
374
- const runner = pool.getAvailableRunner();
375
- if (!runner) {
376
- const { dropped } = schedulerCtx.workQueue.enqueue(agentConfig.name, { type: 'webhook', context });
377
- logger.info({ agent: agentConfig.name, event: context.event, queueSize: schedulerCtx.workQueue.size(agentConfig.name) }, "webhook queued");
378
- if (dropped)
379
- logger.warn({ agent: agentConfig.name }, "queue full, oldest event dropped");
380
- return true;
381
- }
382
- logger.info({ agent: agentConfig.name, event: context.event, action: context.action }, "webhook triggering agent");
383
- const prompt = makeWebhookPrompt(agentConfig, context, schedulerCtx);
384
- executeRun(runner, prompt, { type: 'webhook', source: context.event }, agentConfig.name, 0, schedulerCtx)
385
- .then(() => drainQueues(schedulerCtx))
386
- .catch((err) => logger.error({ err, agent: agentConfig.name }, "webhook run failed"));
387
- return true;
388
- },
389
- });
390
- }
391
- }
392
- }
393
- // Set up cron jobs (only for agents with a schedule)
394
- cronJobs = [];
395
- for (const agentConfig of activeAgentConfigs) {
396
- if (!agentConfig.schedule)
397
- continue;
398
- const pool = runnerPools[agentConfig.name];
399
- const job = new Cron(agentConfig.schedule, { timezone }, async () => {
400
- // Skip if agent is disabled
401
- if (statusTracker && !statusTracker.isAgentEnabled(agentConfig.name)) {
402
- logger.info({ agent: agentConfig.name }, "agent is disabled, skipping scheduled run");
403
- return;
404
- }
405
- const availableRunner = pool.getAvailableRunner();
406
- if (!availableRunner) {
407
- logger.warn({ agent: agentConfig.name, running: pool.runningJobCount, scale: pool.size }, "all agent runners busy, skipping scheduled run");
408
- return;
409
- }
410
- logger.info({ agent: agentConfig.name, running: pool.runningJobCount, scale: pool.size }, "triggering scheduled run");
411
- await runWithReruns(availableRunner, agentConfig, 0, schedulerCtx);
412
- });
413
- cronJobs.push(job);
414
- const nextRun = job.nextRun();
415
- if (nextRun) {
416
- statusTracker?.setNextRunAt(agentConfig.name, nextRun);
417
- }
418
- logger.info(`Scheduled ${agentConfig.name}: "${agentConfig.schedule}" (${timezone})`);
419
- }
420
- const webhookUrls = [];
421
- if (anyWebhooks && gateway) {
422
- const gatewayPort = globalConfig.gateway?.port || 8080;
423
- const providerTypes = new Set(agentConfigs.flatMap((a) => a.webhooks?.map((t) => webhookSources[t.source]?.type).filter(Boolean) || []));
424
- for (const pt of providerTypes) {
425
- webhookUrls.push(`http://localhost:${gatewayPort}/webhooks/${pt}`);
134
+ registerWebhookBindings({
135
+ agentConfig,
136
+ pool: runnerPools[agentConfig.name],
137
+ webhookRegistry,
138
+ webhookSources,
139
+ schedulerCtx,
140
+ statusTracker,
141
+ logger,
142
+ });
426
143
  }
427
144
  }
145
+ // Set up cron jobs
146
+ const { cronJobs, agentCronJobs, webhookUrls } = setupCronJobs({
147
+ activeAgentConfigs, runnerPools, schedulerCtx, webhookSources,
148
+ globalConfig, agentConfigs, gateway, statusTracker, logger, timezone, anyWebhooks,
149
+ });
150
+ // Populate late-binding state
151
+ state.cronJobs.push(...cronJobs);
428
152
  for (const url of webhookUrls) {
429
153
  logger.info({ url }, "Webhook endpoint registered");
430
154
  }
431
155
  logger.info(`Scheduler running with ${cronJobs.length} scheduled jobs`);
432
156
  // Handle agent enable/disable events
433
157
  if (statusTracker) {
434
- // Create a map of agent name to cron job for easy lookup
435
- const agentCronJobs = new Map();
436
- for (let i = 0; i < agentConfigs.length; i++) {
437
- const config = agentConfigs[i];
438
- if (config.schedule && cronJobs[i]) {
439
- agentCronJobs.set(config.name, cronJobs[i]);
440
- }
441
- }
442
- statusTracker.on("agent-enabled", (agentName) => {
443
- const job = agentCronJobs.get(agentName);
444
- if (job) {
445
- job.resume();
446
- const nextRun = job.nextRun();
447
- if (nextRun) {
448
- statusTracker.setNextRunAt(agentName, nextRun);
449
- }
450
- logger.info({ agent: agentName }, "agent enabled, cron job resumed");
451
- }
452
- });
453
- statusTracker.on("agent-disabled", (agentName) => {
454
- const job = agentCronJobs.get(agentName);
455
- if (job) {
456
- job.pause();
457
- statusTracker.setNextRunAt(agentName, null);
458
- logger.info({ agent: agentName }, "agent disabled, cron job paused");
459
- }
460
- });
461
- }
462
- // Fire initial run for scheduled agents
463
- for (const agentConfig of agentConfigs) {
464
- if (!agentConfig.schedule)
465
- continue;
466
- const pool = runnerPools[agentConfig.name];
467
- const availableRunner = pool.getAvailableRunner();
468
- if (availableRunner) {
469
- logger.info(`Initial run for ${agentConfig.name}`);
470
- runWithReruns(availableRunner, agentConfig, 0, schedulerCtx).catch((err) => {
471
- logger.error({ err }, `Initial ${agentConfig.name} run failed`);
472
- });
473
- }
474
- else {
475
- logger.warn(`${agentConfig.name}: all runners busy, skipping initial run`);
476
- }
158
+ setupEnableDisableHandlers({ statusTracker, agentCronJobs, logger });
477
159
  }
478
- // Start hot-reload watcher on agents/ directory
160
+ // Fire initial runs + drain persisted queue items
161
+ fireInitialRuns({ agentConfigs, runnerPools, schedulerCtx, logger });
162
+ drainQueues(schedulerCtx).catch((err) => {
163
+ logger.error({ err }, "initial queue drain failed");
164
+ });
165
+ // Start hot-reload watcher
479
166
  const { watchAgents } = await import("./watcher.js");
480
167
  const watcherHandle = watchAgents({
481
- projectPath,
482
- globalConfig,
483
- runtime,
484
- agentRuntimeOverrides,
485
- runnerPools,
486
- agentConfigs,
487
- agentImages,
488
- cronJobs,
489
- schedulerCtx,
490
- webhookRegistry,
491
- webhookSources,
492
- statusTracker,
493
- logger,
494
- skills,
495
- timezone,
496
- baseImage,
497
- createRunner: (agentConfig, image) => {
498
- const agentRuntime = agentRuntimeOverrides[agentConfig.name] || runtime;
499
- return new ContainerAgentRunnerClass(agentRuntime, globalConfig, agentConfig, mkLogger(projectPath, agentConfig.name), registerContainer, unregisterContainer, gatewayUrl, projectPath, image, statusTracker);
500
- },
168
+ projectPath, globalConfig, runtime, agentRuntimeOverrides,
169
+ runnerPools, agentConfigs, agentImages, cronJobs,
170
+ schedulerCtx, webhookRegistry, webhookSources, statusTracker,
171
+ logger, skills, timezone, baseImage, createRunner,
501
172
  });
502
173
  logger.info("Watching agents/ for changes (hot reload enabled)");
503
174
  // Graceful shutdown
504
- const shutdown = async () => {
505
- logger.info("Shutting down scheduler...");
506
- watcherHandle.stop();
507
- schedulerCtx.shuttingDown = true;
508
- schedulerCtx.workQueue.clearAll();
509
- for (const job of cronJobs) {
510
- job.stop();
511
- }
512
- if (gateway) {
513
- await gateway.close();
514
- logger.info("Gateway server stopped");
515
- }
516
- if (stateStore) {
517
- await stateStore.close();
518
- }
519
- // Shutdown telemetry
520
- if (telemetry) {
521
- try {
522
- await telemetry.shutdown();
523
- logger.info("Telemetry shutdown completed");
524
- }
525
- catch (error) {
526
- logger.warn({ error: error.message }, "Error during telemetry shutdown");
527
- }
528
- }
529
- logger.info("All cron jobs stopped");
530
- process.exit(0);
531
- };
532
- process.on("SIGINT", shutdown);
533
- process.on("SIGTERM", shutdown);
175
+ registerShutdownHandlers({
176
+ logger, schedulerCtx, cronJobs, gateway, stateStore, telemetry, watcherHandle,
177
+ });
534
178
  return { cronJobs, runnerPools, gateway, webhookRegistry, webhookUrls, statusTracker, schedulerCtx, events };
535
179
  }
536
180
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"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"}