@action-llama/action-llama 0.10.1 → 0.10.2
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/dist/agents/execution-engine.d.ts.map +1 -1
- package/dist/agents/execution-engine.js +2 -15
- package/dist/agents/execution-engine.js.map +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +2 -15
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli/commands/cloud-iam.d.ts +17 -0
- package/dist/cli/commands/cloud-iam.d.ts.map +1 -0
- package/dist/cli/commands/cloud-iam.js +591 -0
- package/dist/cli/commands/cloud-iam.js.map +1 -0
- package/dist/cli/commands/cloud-setup-ecs.d.ts +9 -0
- package/dist/cli/commands/cloud-setup-ecs.d.ts.map +1 -0
- package/dist/cli/commands/cloud-setup-ecs.js +697 -0
- package/dist/cli/commands/cloud-setup-ecs.js.map +1 -0
- package/dist/cli/commands/cloud-setup.d.ts.map +1 -1
- package/dist/cli/commands/cloud-setup.js +2 -827
- package/dist/cli/commands/cloud-setup.js.map +1 -1
- package/dist/cli/commands/creds.d.ts.map +1 -1
- package/dist/cli/commands/creds.js +2 -4
- package/dist/cli/commands/creds.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -3
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +60 -635
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/kill.d.ts.map +1 -1
- package/dist/cli/commands/kill.js +11 -14
- package/dist/cli/commands/kill.js.map +1 -1
- package/dist/cli/commands/pause.d.ts.map +1 -1
- package/dist/cli/commands/pause.js +11 -14
- package/dist/cli/commands/pause.js.map +1 -1
- package/dist/cli/commands/resume.d.ts.map +1 -1
- package/dist/cli/commands/resume.js +11 -14
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/main.js +34 -32
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/with-command.d.ts +13 -0
- package/dist/cli/with-command.d.ts.map +1 -0
- package/dist/cli/with-command.js +45 -0
- package/dist/cli/with-command.js.map +1 -0
- package/dist/gateway/index.d.ts +1 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +5 -2
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/rate-limiter.d.ts +16 -0
- package/dist/gateway/rate-limiter.d.ts.map +1 -0
- package/dist/gateway/rate-limiter.js +38 -0
- package/dist/gateway/rate-limiter.js.map +1 -0
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +8 -0
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/routes/locks.d.ts +3 -1
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js +18 -13
- package/dist/gateway/routes/locks.js.map +1 -1
- package/dist/gateway/routes/webhooks.d.ts.map +1 -1
- package/dist/gateway/routes/webhooks.js +14 -0
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/scheduler/index.d.ts +1 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +22 -180
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runtime-factory.d.ts +24 -4
- package/dist/scheduler/runtime-factory.d.ts.map +1 -1
- package/dist/scheduler/runtime-factory.js +60 -64
- package/dist/scheduler/runtime-factory.js.map +1 -1
- package/dist/scheduler/webhook-setup.d.ts +11 -20
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +22 -68
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/shared/config.d.ts +1 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +13 -2
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credentials.d.ts.map +1 -1
- package/dist/shared/credentials.js +2 -1
- package/dist/shared/credentials.js.map +1 -1
- package/dist/shared/errors.d.ts +34 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +47 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/git.d.ts.map +1 -1
- package/dist/shared/git.js +3 -2
- package/dist/shared/git.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +2 -21
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/linear.d.ts.map +1 -1
- package/dist/webhooks/providers/linear.js +2 -21
- package/dist/webhooks/providers/linear.js.map +1 -1
- package/dist/webhooks/providers/sentry.d.ts.map +1 -1
- package/dist/webhooks/providers/sentry.js +2 -20
- package/dist/webhooks/providers/sentry.js.map +1 -1
- package/dist/webhooks/validation.d.ts +17 -0
- package/dist/webhooks/validation.d.ts.map +1 -0
- package/dist/webhooks/validation.js +37 -0
- package/dist/webhooks/validation.js.map +1 -0
- package/package.json +1 -1
- package/dist/scheduler/config-validator.d.ts +0 -18
- package/dist/scheduler/config-validator.d.ts.map +0 -1
- package/dist/scheduler/config-validator.js +0 -53
- package/dist/scheduler/config-validator.js.map +0 -1
- package/dist/scheduler/cron-manager.d.ts +0 -14
- package/dist/scheduler/cron-manager.d.ts.map +0 -1
- package/dist/scheduler/cron-manager.js +0 -75
- package/dist/scheduler/cron-manager.js.map +0 -1
- package/dist/scheduler/shutdown-handler.d.ts +0 -16
- package/dist/scheduler/shutdown-handler.d.ts.map +0 -1
- package/dist/scheduler/shutdown-handler.js +0 -44
- package/dist/scheduler/shutdown-handler.js.map +0 -1
- package/dist/scheduler/trigger-dispatcher.d.ts +0 -12
- package/dist/scheduler/trigger-dispatcher.d.ts.map +0 -1
- package/dist/scheduler/trigger-dispatcher.js +0 -46
- package/dist/scheduler/trigger-dispatcher.js.map +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory sliding-window rate limiter keyed by IP.
|
|
3
|
+
* Designed for single-process use (local scheduler or cloud scheduler instance).
|
|
4
|
+
*/
|
|
5
|
+
export function rateLimiter(opts) {
|
|
6
|
+
const hits = new Map();
|
|
7
|
+
// Periodically clean up old entries to prevent unbounded growth
|
|
8
|
+
const cleanup = setInterval(() => {
|
|
9
|
+
const cutoff = Date.now() - opts.windowMs;
|
|
10
|
+
for (const [key, timestamps] of hits) {
|
|
11
|
+
const filtered = timestamps.filter((t) => t > cutoff);
|
|
12
|
+
if (filtered.length === 0) {
|
|
13
|
+
hits.delete(key);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
hits.set(key, filtered);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}, opts.windowMs);
|
|
20
|
+
if (cleanup.unref)
|
|
21
|
+
cleanup.unref();
|
|
22
|
+
return async (c, next) => {
|
|
23
|
+
const ip = c.req.header("x-forwarded-for")?.split(",")[0]?.trim()
|
|
24
|
+
|| c.req.header("x-real-ip")
|
|
25
|
+
|| "unknown";
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
const cutoff = now - opts.windowMs;
|
|
28
|
+
const timestamps = (hits.get(ip) || []).filter((t) => t > cutoff);
|
|
29
|
+
if (timestamps.length >= opts.max) {
|
|
30
|
+
c.header("Retry-After", String(Math.ceil(opts.windowMs / 1000)));
|
|
31
|
+
return c.json({ error: "too many requests" }, 429);
|
|
32
|
+
}
|
|
33
|
+
timestamps.push(now);
|
|
34
|
+
hits.set(ip, timestamps);
|
|
35
|
+
await next();
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/gateway/rate-limiter.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEzC,gEAAgE;IAChE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClB,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAEnC,OAAO,KAAK,EAAE,CAAU,EAAE,IAAU,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;eAC5D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;eACzB,SAAS,CAAC;QAEf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAElE,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACzB,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAiB,MAAM,MAAM,CAAC;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAiB,MAAM,MAAM,CAAC;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AA8DjE,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,aAAa,EAC5B,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAiJN"}
|
|
@@ -7,7 +7,11 @@ import { timingSafeEqual } from "crypto";
|
|
|
7
7
|
function logsDir(projectPath) {
|
|
8
8
|
return resolve(projectPath, ".al", "logs");
|
|
9
9
|
}
|
|
10
|
+
const SAFE_AGENT_NAME = /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/;
|
|
10
11
|
function findLogFiles(projectPath, agentName) {
|
|
12
|
+
// Reject names that could cause path traversal
|
|
13
|
+
if (!SAFE_AGENT_NAME.test(agentName))
|
|
14
|
+
return [];
|
|
11
15
|
const dir = logsDir(projectPath);
|
|
12
16
|
try {
|
|
13
17
|
return readdirSync(dir)
|
|
@@ -61,6 +65,10 @@ export function registerDashboardRoutes(app, statusTracker, projectPath) {
|
|
|
61
65
|
app.use("/dashboard/*", basicAuthMiddleware(dashboardSecret));
|
|
62
66
|
app.use("/dashboard", basicAuthMiddleware(dashboardSecret));
|
|
63
67
|
}
|
|
68
|
+
else {
|
|
69
|
+
console.warn("[security] Dashboard is running without authentication. " +
|
|
70
|
+
"Set AL_DASHBOARD_SECRET to require a password.");
|
|
71
|
+
}
|
|
64
72
|
// Main dashboard page
|
|
65
73
|
app.get("/dashboard", (c) => {
|
|
66
74
|
const agents = statusTracker.getAllAgents();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/gateway/routes/dashboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/gateway/routes/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,7 @@ import type { Hono } from "hono";
|
|
|
2
2
|
import type { ContainerRegistration } from "../types.js";
|
|
3
3
|
import type { LockStore } from "../lock-store.js";
|
|
4
4
|
import type { Logger } from "../../shared/logger.js";
|
|
5
|
-
export declare function registerLockRoutes(app: Hono, containerRegistry: Map<string, ContainerRegistration>, lockStore: LockStore, logger: Logger
|
|
5
|
+
export declare function registerLockRoutes(app: Hono, containerRegistry: Map<string, ContainerRegistration>, lockStore: LockStore, logger: Logger, opts?: {
|
|
6
|
+
skipStatusEndpoint?: boolean;
|
|
7
|
+
}): void;
|
|
6
8
|
//# sourceMappingURL=locks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/locks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,EACT,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACrD,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/locks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,EACT,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACrD,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,IAAI,CA4IN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function registerLockRoutes(app, containerRegistry, lockStore, logger) {
|
|
1
|
+
export function registerLockRoutes(app, containerRegistry, lockStore, logger, opts) {
|
|
2
2
|
app.post("/locks/acquire", async (c) => {
|
|
3
3
|
let body;
|
|
4
4
|
try {
|
|
@@ -94,19 +94,24 @@ export function registerLockRoutes(app, containerRegistry, lockStore, logger) {
|
|
|
94
94
|
if (!reg) {
|
|
95
95
|
return c.json({ error: "invalid secret" }, 403);
|
|
96
96
|
}
|
|
97
|
-
return
|
|
97
|
+
// Only return locks held by the requesting agent's instance
|
|
98
|
+
return c.json(lockStore.list(reg.instanceId));
|
|
98
99
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
agentName,
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
// /locks/status is local-only — not registered in cloud mode where the
|
|
101
|
+
// gateway is publicly reachable and this endpoint has no authentication.
|
|
102
|
+
if (!opts?.skipStatusEndpoint) {
|
|
103
|
+
app.get("/locks/status", (c) => {
|
|
104
|
+
const locks = lockStore.list().map((lock) => {
|
|
105
|
+
// Extract agent name from holder (typically "agentName-instanceNumber")
|
|
106
|
+
const agentName = lock.holder.split("-").slice(0, -1).join("-") || lock.holder;
|
|
107
|
+
return {
|
|
108
|
+
resourceKey: lock.resourceKey,
|
|
109
|
+
agentName,
|
|
110
|
+
heldSince: lock.heldSince,
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
return c.json({ locks });
|
|
108
114
|
});
|
|
109
|
-
|
|
110
|
-
});
|
|
115
|
+
}
|
|
111
116
|
}
|
|
112
117
|
//# sourceMappingURL=locks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/gateway/routes/locks.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,kBAAkB,CAChC,GAAS,EACT,iBAAqD,EACrD,SAAoB,EACpB,MAAc;
|
|
1
|
+
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/gateway/routes/locks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,IAAI,EACT,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtD,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI,CAmFN"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { rateLimiter } from "../rate-limiter.js";
|
|
1
2
|
export function registerWebhookRoutes(app, registry, webhookSecrets, logger, statusTracker) {
|
|
3
|
+
// Rate limit webhook endpoint: 120 requests per minute per IP
|
|
4
|
+
app.use("/webhooks/*", rateLimiter({ max: 120, windowMs: 60_000 }));
|
|
2
5
|
app.post("/webhooks/:source", async (c) => {
|
|
3
6
|
const source = c.req.param("source");
|
|
4
7
|
logger.debug({ source }, "webhook request received");
|
|
@@ -8,6 +11,13 @@ export function registerWebhookRoutes(app, registry, webhookSecrets, logger, sta
|
|
|
8
11
|
statusTracker?.addLogLine("webhook", `Rejected: unknown source "${source}"`);
|
|
9
12
|
return c.json({ error: `unknown webhook source: ${source}` }, 404);
|
|
10
13
|
}
|
|
14
|
+
// Reject oversized payloads (10 MB limit)
|
|
15
|
+
const MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
16
|
+
const contentLength = parseInt(c.req.header("content-length") || "0", 10);
|
|
17
|
+
if (contentLength > MAX_BODY_SIZE) {
|
|
18
|
+
logger.warn({ source, contentLength }, "webhook rejected: payload too large");
|
|
19
|
+
return c.json({ error: "payload too large" }, 413);
|
|
20
|
+
}
|
|
11
21
|
let rawBody;
|
|
12
22
|
try {
|
|
13
23
|
rawBody = await c.req.text();
|
|
@@ -17,6 +27,10 @@ export function registerWebhookRoutes(app, registry, webhookSecrets, logger, sta
|
|
|
17
27
|
statusTracker?.addLogLine("webhook", `Failed to read body from ${source}: ${err.message}`);
|
|
18
28
|
return c.json({ error: "failed to read request body" }, 400);
|
|
19
29
|
}
|
|
30
|
+
if (rawBody.length > MAX_BODY_SIZE) {
|
|
31
|
+
logger.warn({ source, bodyLength: rawBody.length }, "webhook rejected: payload too large");
|
|
32
|
+
return c.json({ error: "payload too large" }, 413);
|
|
33
|
+
}
|
|
20
34
|
logger.debug({ source, bodyLength: rawBody.length }, "webhook body read ok");
|
|
21
35
|
// Extract headers as a flat map
|
|
22
36
|
const headers = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/gateway/routes/webhooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/gateway/routes/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Cron } from "croner";
|
|
2
2
|
import type { GlobalConfig } from "../shared/config.js";
|
|
3
3
|
import type { StatusTracker } from "../tui/status-tracker.js";
|
|
4
|
-
import { WebhookRegistry } from "../webhooks/registry.js";
|
|
5
4
|
import type { GatewayServer } from "../gateway/index.js";
|
|
6
5
|
import { RunnerPool } from "./runner-pool.js";
|
|
7
6
|
export declare function startScheduler(projectPath: string, globalConfigOverride?: GlobalConfig, statusTracker?: StatusTracker, cloudMode?: boolean, gatewayEnabled?: boolean, webUI?: boolean): Promise<{
|
|
8
7
|
cronJobs: Cron<undefined>[];
|
|
9
8
|
runnerPools: Record<string, RunnerPool>;
|
|
10
9
|
gateway: GatewayServer | undefined;
|
|
11
|
-
webhookRegistry: WebhookRegistry | undefined;
|
|
10
|
+
webhookRegistry: import("../webhooks/registry.js").WebhookRegistry | undefined;
|
|
12
11
|
webhookUrls: string[];
|
|
13
12
|
statusTracker: StatusTracker | undefined;
|
|
14
13
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAmJ/D,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO;;;;;;;GAyY3L"}
|
package/dist/scheduler/index.js
CHANGED
|
@@ -1,74 +1,14 @@
|
|
|
1
1
|
import { Cron } from "croner";
|
|
2
2
|
import { loadGlobalConfig, loadAgentConfig, discoverAgents, validateAgentConfig } from "../shared/config.js";
|
|
3
|
-
import { requireCredentialRef
|
|
3
|
+
import { requireCredentialRef } from "../shared/credentials.js";
|
|
4
4
|
import { createLogger, createFileOnlyLogger } from "../shared/logger.js";
|
|
5
5
|
import { buildScheduledPrompt, buildWebhookPrompt, buildCalledPrompt, buildScheduledSuffix, buildWebhookSuffix, buildCalledSuffix, } from "../agents/prompt.js";
|
|
6
|
-
import { WebhookRegistry } from "../webhooks/registry.js";
|
|
7
|
-
import { GitHubWebhookProvider } from "../webhooks/providers/github.js";
|
|
8
|
-
import { SentryWebhookProvider } from "../webhooks/providers/sentry.js";
|
|
9
|
-
import { LinearWebhookProvider } from "../webhooks/providers/linear.js";
|
|
10
6
|
import { AWS_CONSTANTS } from "../shared/aws-constants.js";
|
|
11
|
-
import {
|
|
7
|
+
import { ConfigError } from "../shared/errors.js";
|
|
12
8
|
import { WorkQueue } from "./event-queue.js";
|
|
13
9
|
import { RunnerPool } from "./runner-pool.js";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
github: "github_webhook_secret",
|
|
17
|
-
sentry: "sentry_client_secret",
|
|
18
|
-
linear: "linear_webhook_secret",
|
|
19
|
-
};
|
|
20
|
-
function resolveWebhookSource(sourceName, agentName, webhookSources) {
|
|
21
|
-
const source = webhookSources[sourceName];
|
|
22
|
-
if (!source) {
|
|
23
|
-
const available = Object.keys(webhookSources).join(", ") || "(none)";
|
|
24
|
-
throw new Error(`Agent "${agentName}" references webhook source "${sourceName}" ` +
|
|
25
|
-
`which is not defined in config.toml [webhooks]. Available: ${available}`);
|
|
26
|
-
}
|
|
27
|
-
return source;
|
|
28
|
-
}
|
|
29
|
-
function buildFilterFromTrigger(trigger, providerType) {
|
|
30
|
-
if (providerType === "github") {
|
|
31
|
-
const f = {};
|
|
32
|
-
if (trigger.events)
|
|
33
|
-
f.events = trigger.events;
|
|
34
|
-
if (trigger.actions)
|
|
35
|
-
f.actions = trigger.actions;
|
|
36
|
-
if (trigger.repos)
|
|
37
|
-
f.repos = trigger.repos;
|
|
38
|
-
if (trigger.labels)
|
|
39
|
-
f.labels = trigger.labels;
|
|
40
|
-
if (trigger.assignee)
|
|
41
|
-
f.assignee = trigger.assignee;
|
|
42
|
-
if (trigger.author)
|
|
43
|
-
f.author = trigger.author;
|
|
44
|
-
if (trigger.branches)
|
|
45
|
-
f.branches = trigger.branches;
|
|
46
|
-
return Object.keys(f).length > 0 ? f : undefined;
|
|
47
|
-
}
|
|
48
|
-
if (providerType === "sentry") {
|
|
49
|
-
const f = {};
|
|
50
|
-
if (trigger.resources)
|
|
51
|
-
f.resources = trigger.resources;
|
|
52
|
-
return Object.keys(f).length > 0 ? f : undefined;
|
|
53
|
-
}
|
|
54
|
-
if (providerType === "linear") {
|
|
55
|
-
const f = {};
|
|
56
|
-
if (trigger.events)
|
|
57
|
-
f.events = trigger.events;
|
|
58
|
-
if (trigger.actions)
|
|
59
|
-
f.actions = trigger.actions;
|
|
60
|
-
if (trigger.organizations)
|
|
61
|
-
f.organizations = trigger.organizations;
|
|
62
|
-
if (trigger.labels)
|
|
63
|
-
f.labels = trigger.labels;
|
|
64
|
-
if (trigger.assignee)
|
|
65
|
-
f.assignee = trigger.assignee;
|
|
66
|
-
if (trigger.author)
|
|
67
|
-
f.author = trigger.author;
|
|
68
|
-
return Object.keys(f).length > 0 ? f : undefined;
|
|
69
|
-
}
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
10
|
+
import { createContainerRuntime, buildAgentImages } from "./runtime-factory.js";
|
|
11
|
+
import { resolveWebhookSource, buildFilterFromTrigger, setupWebhookRegistry } from "./webhook-setup.js";
|
|
72
12
|
const DEFAULT_MAX_RERUNS = 10;
|
|
73
13
|
const DEFAULT_MAX_TRIGGER_DEPTH = 3;
|
|
74
14
|
// Prompt helpers: when images have baked-in static files, only pass the dynamic suffix.
|
|
@@ -176,7 +116,7 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
176
116
|
// Discover all agents in the project
|
|
177
117
|
const agentNames = discoverAgents(projectPath);
|
|
178
118
|
if (agentNames.length === 0) {
|
|
179
|
-
throw new
|
|
119
|
+
throw new ConfigError("No agents found. Run 'al new' to create a project with agents.");
|
|
180
120
|
}
|
|
181
121
|
const agentConfigs = agentNames.map((name) => loadAgentConfig(projectPath, name));
|
|
182
122
|
// Validate each agent has schedule, webhooks, or both
|
|
@@ -213,7 +153,7 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
213
153
|
// Validate pi_auth is not used with Docker (containers can't access host auth storage)
|
|
214
154
|
for (const config of activeAgentConfigs) {
|
|
215
155
|
if (config.model.authType === "pi_auth") {
|
|
216
|
-
throw new
|
|
156
|
+
throw new ConfigError(`Agent "${config.name}" uses pi_auth which is not supported in container mode. ` +
|
|
217
157
|
`Switch to api_key/oauth_token (run 'al doctor').`);
|
|
218
158
|
}
|
|
219
159
|
}
|
|
@@ -228,40 +168,12 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
228
168
|
}
|
|
229
169
|
}
|
|
230
170
|
// Set up webhook registry if any agents use webhooks
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
webhookRegistry = new WebhookRegistry(logger);
|
|
235
|
-
// Register providers
|
|
236
|
-
webhookRegistry.registerProvider(new GitHubWebhookProvider());
|
|
237
|
-
webhookRegistry.registerProvider(new SentryWebhookProvider());
|
|
238
|
-
webhookRegistry.registerProvider(new LinearWebhookProvider());
|
|
239
|
-
// Load secrets for each provider type referenced by webhook sources
|
|
240
|
-
const providerTypes = new Set(Object.values(webhookSources).map(s => s.type));
|
|
241
|
-
for (const providerType of providerTypes) {
|
|
242
|
-
const credType = PROVIDER_TO_CREDENTIAL[providerType];
|
|
243
|
-
if (!credType)
|
|
244
|
-
continue;
|
|
245
|
-
const instances = await listCredentialInstances(credType);
|
|
246
|
-
const secrets = {};
|
|
247
|
-
for (const inst of instances) {
|
|
248
|
-
const secret = await loadCredentialField(credType, inst, "secret");
|
|
249
|
-
if (secret)
|
|
250
|
-
secrets[inst] = secret;
|
|
251
|
-
}
|
|
252
|
-
if (Object.keys(secrets).length > 0) {
|
|
253
|
-
webhookSecrets[providerType] = secrets;
|
|
254
|
-
logger.info({ providerType, count: Object.keys(secrets).length }, "loaded webhook secrets");
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
let runtime;
|
|
259
|
-
let agentRuntimeOverrides = {};
|
|
171
|
+
const { registry: webhookRegistry, secrets: webhookSecrets } = anyWebhooks
|
|
172
|
+
? await setupWebhookRegistry(globalConfig, logger)
|
|
173
|
+
: { registry: undefined, secrets: {} };
|
|
260
174
|
let baseImage = AWS_CONSTANTS.DEFAULT_IMAGE;
|
|
261
175
|
const agentImages = {};
|
|
262
|
-
// Determine runtime type from cloud mode or local
|
|
263
176
|
const useCloudRuntime = cloudMode && globalConfig.cloud;
|
|
264
|
-
const runtimeType = useCloudRuntime ? globalConfig.cloud.provider : "local";
|
|
265
177
|
// Register agents early so the TUI shows them during image builds
|
|
266
178
|
for (const agentConfig of agentConfigs) {
|
|
267
179
|
statusTracker?.registerAgent(agentConfig.name, agentConfig.scale ?? 1);
|
|
@@ -281,15 +193,18 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
281
193
|
const gatewayPort = globalConfig.gateway?.port || 8080;
|
|
282
194
|
gateway = await startGateway({
|
|
283
195
|
port: gatewayPort,
|
|
196
|
+
hostname: cloudMode ? "0.0.0.0" : "127.0.0.1",
|
|
284
197
|
logger: mkLogger(projectPath, "gateway"),
|
|
285
198
|
killContainer: undefined, // Runtime not ready yet, will handle container ops later
|
|
286
199
|
webhookRegistry,
|
|
287
200
|
webhookSecrets,
|
|
288
201
|
statusTracker,
|
|
289
202
|
projectPath,
|
|
290
|
-
webUI,
|
|
203
|
+
webUI: cloudMode ? false : webUI,
|
|
291
204
|
lockTimeout: globalConfig.gateway?.lockTimeout,
|
|
292
|
-
|
|
205
|
+
// Control routes, dashboard, and lock status are local-only.
|
|
206
|
+
// In cloud mode, use cloud-native tools (console, CLI) for these operations.
|
|
207
|
+
controlDeps: cloudMode ? undefined : {
|
|
293
208
|
statusTracker,
|
|
294
209
|
killInstance: async (instanceId) => {
|
|
295
210
|
for (const pool of Object.values(runnerPools)) {
|
|
@@ -316,90 +231,19 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
316
231
|
});
|
|
317
232
|
logger.info({ port: gatewayPort }, "Gateway started early to show build progress");
|
|
318
233
|
}
|
|
319
|
-
logger.info({ runtime: runtimeType }, "Container mode enabled — initializing infrastructure");
|
|
320
234
|
// 1. Create the container runtime
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
const { gcpProject, region, artifactRegistry, serviceAccount, secretPrefix } = globalConfig.cloud;
|
|
324
|
-
if (!gcpProject || !region || !artifactRegistry || !serviceAccount) {
|
|
325
|
-
throw new Error("Cloud Run runtime requires cloud.gcpProject, cloud.region, " +
|
|
326
|
-
"cloud.artifactRegistry, and cloud.serviceAccount in config.toml");
|
|
327
|
-
}
|
|
328
|
-
runtime = new CloudRunJobRuntime({ gcpProject, region, artifactRegistry, serviceAccount, secretPrefix });
|
|
329
|
-
logger.info({ gcpProject, region }, "Using Cloud Run Jobs runtime");
|
|
330
|
-
}
|
|
331
|
-
else if (useCloudRuntime && globalConfig.cloud.provider === "ecs") {
|
|
332
|
-
const { ECSFargateRuntime } = await import("../docker/ecs-runtime.js");
|
|
333
|
-
const cc = globalConfig.cloud;
|
|
334
|
-
if (!cc.awsRegion || !cc.ecsCluster || !cc.ecrRepository || !cc.executionRoleArn || !cc.taskRoleArn || !cc.subnets?.length) {
|
|
335
|
-
throw new Error("ECS runtime requires cloud.awsRegion, cloud.ecsCluster, cloud.ecrRepository, " +
|
|
336
|
-
"cloud.executionRoleArn, cloud.taskRoleArn, and cloud.subnets in config.toml");
|
|
337
|
-
}
|
|
338
|
-
runtime = new ECSFargateRuntime({
|
|
339
|
-
awsRegion: cc.awsRegion,
|
|
340
|
-
ecsCluster: cc.ecsCluster,
|
|
341
|
-
ecrRepository: cc.ecrRepository,
|
|
342
|
-
executionRoleArn: cc.executionRoleArn,
|
|
343
|
-
taskRoleArn: cc.taskRoleArn,
|
|
344
|
-
subnets: cc.subnets,
|
|
345
|
-
securityGroups: cc.securityGroups,
|
|
346
|
-
secretPrefix: cc.awsSecretPrefix,
|
|
347
|
-
buildBucket: cc.buildBucket,
|
|
348
|
-
});
|
|
349
|
-
// Create Lambda runtime for short-running agents (timeout <= 900s)
|
|
350
|
-
const { LambdaRuntime } = await import("../docker/lambda-runtime.js");
|
|
351
|
-
const lambdaRuntime = new LambdaRuntime({
|
|
352
|
-
awsRegion: cc.awsRegion,
|
|
353
|
-
ecrRepository: cc.ecrRepository,
|
|
354
|
-
secretPrefix: cc.awsSecretPrefix,
|
|
355
|
-
buildBucket: cc.buildBucket,
|
|
356
|
-
lambdaRoleArn: cc.lambdaRoleArn,
|
|
357
|
-
lambdaSubnets: cc.lambdaSubnets,
|
|
358
|
-
lambdaSecurityGroups: cc.lambdaSecurityGroups,
|
|
359
|
-
});
|
|
360
|
-
// Per-agent runtime selection: Lambda for short agents, ECS for long ones
|
|
361
|
-
agentRuntimeOverrides = {};
|
|
362
|
-
for (const ac of activeAgentConfigs) {
|
|
363
|
-
const effectiveTimeout = ac.timeout ?? globalConfig.local?.timeout ?? 900;
|
|
364
|
-
if (effectiveTimeout <= AWS_CONSTANTS.LAMBDA_MAX_TIMEOUT) {
|
|
365
|
-
agentRuntimeOverrides[ac.name] = lambdaRuntime;
|
|
366
|
-
logger.info({ agent: ac.name, timeout: effectiveTimeout }, "Routing to Lambda (timeout <= 900s)");
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
logger.info({ region: cc.awsRegion, cluster: cc.ecsCluster }, "Using ECS Fargate runtime");
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
// Local runtime needs Docker running
|
|
373
|
-
const { execFileSync } = await import("child_process");
|
|
374
|
-
try {
|
|
375
|
-
execFileSync("docker", ["info"], { stdio: "pipe", timeout: 10000 });
|
|
376
|
-
}
|
|
377
|
-
catch {
|
|
378
|
-
throw new Error("Docker is not running. Start Docker Desktop (or the Docker daemon) and try again.");
|
|
379
|
-
}
|
|
380
|
-
const { LocalDockerRuntime } = await import("../docker/local-runtime.js");
|
|
381
|
-
runtime = new LocalDockerRuntime();
|
|
382
|
-
// Local-only: ensure Docker network
|
|
383
|
-
logger.info("Ensuring Docker network...");
|
|
384
|
-
const { ensureNetwork } = await import("../docker/network.js");
|
|
385
|
-
ensureNetwork();
|
|
386
|
-
}
|
|
235
|
+
const { runtime, agentRuntimeOverrides, runtimeType } = await createContainerRuntime(globalConfig, activeAgentConfigs, cloudMode, logger);
|
|
236
|
+
logger.info({ runtime: runtimeType }, "Container mode enabled — initializing infrastructure");
|
|
387
237
|
// 2. Build base + per-agent images via shared image builder
|
|
388
238
|
const buildSkills = { locking: true };
|
|
389
|
-
const buildResult = await
|
|
390
|
-
projectPath,
|
|
391
|
-
|
|
392
|
-
activeAgentConfigs,
|
|
393
|
-
runtime: runtime,
|
|
394
|
-
runtimeType,
|
|
395
|
-
statusTracker,
|
|
396
|
-
logger,
|
|
397
|
-
skills: buildSkills,
|
|
239
|
+
const buildResult = await buildAgentImages({
|
|
240
|
+
projectPath, globalConfig, activeAgentConfigs,
|
|
241
|
+
runtime, runtimeType, statusTracker, logger, skills: buildSkills,
|
|
398
242
|
});
|
|
399
243
|
baseImage = buildResult.baseImage;
|
|
400
244
|
Object.assign(agentImages, buildResult.agentImages);
|
|
401
245
|
// Import necessary classes for container runners
|
|
402
|
-
const ContainerAgentRunnerClass =
|
|
246
|
+
const { ContainerAgentRunner: ContainerAgentRunnerClass } = await import("../agents/container-runner.js");
|
|
403
247
|
const gatewayPort = globalConfig.gateway?.port || 8080;
|
|
404
248
|
const gatewayUrl = gatewayEnabled
|
|
405
249
|
? (process.env.GATEWAY_URL
|
|
@@ -422,10 +266,8 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
|
|
|
422
266
|
const runners = [];
|
|
423
267
|
for (let i = 0; i < scale; i++) {
|
|
424
268
|
const instanceId = scale >= 2 ? `${agentConfig.name}(${i + 1})` : agentConfig.name;
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
runners.push(new ContainerAgentRunnerClass(agentRuntime, globalConfig, agentConfig, mkLogger(projectPath, instanceId), registerContainer, unregisterContainer, gatewayUrl, projectPath, agentImages[agentConfig.name] || baseImage, statusTracker, instanceId));
|
|
428
|
-
}
|
|
269
|
+
const agentRuntime = agentRuntimeOverrides[agentConfig.name] || runtime;
|
|
270
|
+
runners.push(new ContainerAgentRunnerClass(agentRuntime, globalConfig, agentConfig, mkLogger(projectPath, instanceId), registerContainer, unregisterContainer, gatewayUrl, projectPath, agentImages[agentConfig.name] || baseImage, statusTracker, instanceId));
|
|
429
271
|
}
|
|
430
272
|
runnerPools[agentConfig.name] = new RunnerPool(runners);
|
|
431
273
|
logger.info({ agent: agentConfig.name, scale }, "Created runner pool");
|