@action-llama/action-llama 0.10.0 → 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/container-entry.d.ts +31 -0
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +67 -108
- package/dist/agents/container-entry.js.map +1 -1
- 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/lambda-handler.d.ts +2 -5
- package/dist/agents/lambda-handler.d.ts.map +1 -1
- package/dist/agents/lambda-handler.js +8 -9
- package/dist/agents/lambda-handler.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/agents/signals.d.ts +9 -0
- package/dist/agents/signals.d.ts.map +1 -1
- package/dist/agents/signals.js +11 -0
- package/dist/agents/signals.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 +36 -34
- 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/cloud/scheduler-image.d.ts.map +1 -1
- package/dist/cloud/scheduler-image.js +9 -3
- package/dist/cloud/scheduler-image.js.map +1 -1
- package/dist/docker/aws-shared.d.ts.map +1 -1
- package/dist/docker/aws-shared.js +42 -19
- package/dist/docker/aws-shared.js.map +1 -1
- package/dist/docker/lambda-runtime.d.ts +2 -0
- package/dist/docker/lambda-runtime.d.ts.map +1 -1
- package/dist/docker/lambda-runtime.js +28 -10
- package/dist/docker/lambda-runtime.js.map +1 -1
- 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/docker/Dockerfile +6 -9
- package/docker/bin/al-call +8 -0
- package/docker/bin/al-check +4 -0
- package/docker/bin/al-exit +4 -0
- package/docker/bin/al-rerun +8 -0
- package/docker/bin/al-return +14 -0
- package/docker/bin/al-shutdown +5 -0
- package/docker/bin/al-status +9 -0
- package/docker/bin/al-wait +29 -0
- package/docker/bin/rlock +5 -0
- package/docker/bin/rlock-heartbeat +5 -0
- package/docker/bin/runlock +5 -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
package/dist/shared/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/shared/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE9E,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,IAAY;IAChD,OAAO,kBAAkB,KAAK,IAAI,IAAI,MAAM,CAAC;AAC/C,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,GAAG,GAA2B,EAAE,GAAG,OAAO,CAAC,GAAG,EAA4B,CAAC;IACjF,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,eAAe,GAAG,WAAW,YAAY,6DAA6D,CAAC;IAC7G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,GAAY;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC1C,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,SAAS,EAAE;KACjB,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/github.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGvG,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,MAAM,SAAY;IAElB,eAAe,CACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,GAAG,IAAI;IAIhB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,cAAc,GAAG,IAAI;IAsBzF,OAAO,CAAC,cAAc;IAoGtB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;CAgDvE"}
|
|
@@ -1,27 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const MAX_TEXT_LENGTH = 4000;
|
|
3
|
-
function truncate(text, max = MAX_TEXT_LENGTH) {
|
|
4
|
-
if (!text)
|
|
5
|
-
return undefined;
|
|
6
|
-
return text.length > max ? text.slice(0, max) + "..." : text;
|
|
7
|
-
}
|
|
1
|
+
import { truncateEventText as truncate, validateHmacSignature } from "../validation.js";
|
|
8
2
|
export class GitHubWebhookProvider {
|
|
9
3
|
source = "github";
|
|
10
4
|
validateRequest(headers, rawBody, secrets) {
|
|
11
|
-
|
|
12
|
-
if (!secrets || Object.keys(secrets).length === 0)
|
|
13
|
-
return "_unsigned";
|
|
14
|
-
const signature = headers["x-hub-signature-256"];
|
|
15
|
-
if (!signature)
|
|
16
|
-
return null;
|
|
17
|
-
// Try each configured secret — different orgs/repos may use different secrets
|
|
18
|
-
for (const [instanceName, secret] of Object.entries(secrets)) {
|
|
19
|
-
const expected = "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
|
|
20
|
-
if (signature.length === expected.length && timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
|
|
21
|
-
return instanceName;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
5
|
+
return validateHmacSignature(rawBody, headers["x-hub-signature-256"], secrets, "sha256=");
|
|
25
6
|
}
|
|
26
7
|
parseEvent(headers, body) {
|
|
27
8
|
const event = headers["x-github-event"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/webhooks/providers/github.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/webhooks/providers/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/linear.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGvG,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,MAAM,SAAY;IAElB,eAAe,CACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,GAAG,IAAI;IAIhB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,cAAc,GAAG,IAAI;IAmCzF,OAAO,CAAC,cAAc;IA8CtB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;CAoCvE"}
|
|
@@ -1,27 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const MAX_TEXT_LENGTH = 4000;
|
|
3
|
-
function truncate(text, max = MAX_TEXT_LENGTH) {
|
|
4
|
-
if (!text)
|
|
5
|
-
return undefined;
|
|
6
|
-
return text.length > max ? text.slice(0, max) + "..." : text;
|
|
7
|
-
}
|
|
1
|
+
import { truncateEventText as truncate, validateHmacSignature } from "../validation.js";
|
|
8
2
|
export class LinearWebhookProvider {
|
|
9
3
|
source = "linear";
|
|
10
4
|
validateRequest(headers, rawBody, secrets) {
|
|
11
|
-
|
|
12
|
-
if (!secrets || Object.keys(secrets).length === 0)
|
|
13
|
-
return "_unsigned";
|
|
14
|
-
const signature = headers["linear-signature"];
|
|
15
|
-
if (!signature)
|
|
16
|
-
return null;
|
|
17
|
-
// Try each configured secret — different workspaces may use different secrets
|
|
18
|
-
for (const [instanceName, secret] of Object.entries(secrets)) {
|
|
19
|
-
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
|
|
20
|
-
if (signature.length === expected.length && timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
|
|
21
|
-
return instanceName;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
5
|
+
return validateHmacSignature(rawBody, headers["linear-signature"], secrets);
|
|
25
6
|
}
|
|
26
7
|
parseEvent(headers, body) {
|
|
27
8
|
const action = body.action;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/webhooks/providers/linear.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/webhooks/providers/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/sentry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../src/webhooks/providers/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGvG,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,MAAM,SAAY;IAElB,eAAe,CACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,GAAG,IAAI;IAIhB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,cAAc,GAAG,IAAI;IAezF,OAAO,CAAC,cAAc;IA2EtB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;CASvE"}
|
|
@@ -1,26 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const MAX_TEXT_LENGTH = 4000;
|
|
3
|
-
function truncate(text, max = MAX_TEXT_LENGTH) {
|
|
4
|
-
if (!text)
|
|
5
|
-
return undefined;
|
|
6
|
-
return text.length > max ? text.slice(0, max) + "..." : text;
|
|
7
|
-
}
|
|
1
|
+
import { truncateEventText as truncate, validateHmacSignature } from "../validation.js";
|
|
8
2
|
export class SentryWebhookProvider {
|
|
9
3
|
source = "sentry";
|
|
10
4
|
validateRequest(headers, rawBody, secrets) {
|
|
11
|
-
|
|
12
|
-
if (!secrets || Object.keys(secrets).length === 0)
|
|
13
|
-
return "_unsigned";
|
|
14
|
-
const signature = headers["sentry-hook-signature"];
|
|
15
|
-
if (!signature)
|
|
16
|
-
return null;
|
|
17
|
-
for (const [instanceName, secret] of Object.entries(secrets)) {
|
|
18
|
-
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
|
|
19
|
-
if (signature.length === expected.length && timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
|
|
20
|
-
return instanceName;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return null;
|
|
5
|
+
return validateHmacSignature(rawBody, headers["sentry-hook-signature"], secrets);
|
|
24
6
|
}
|
|
25
7
|
parseEvent(headers, body) {
|
|
26
8
|
const resource = headers["sentry-hook-resource"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/webhooks/providers/sentry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/webhooks/providers/sentry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truncate text to a maximum length, appending "..." if truncated.
|
|
3
|
+
*/
|
|
4
|
+
export declare function truncateEventText(text: string | undefined | null, max?: number): string | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Validate an HMAC-SHA256 webhook signature against one or more secrets.
|
|
7
|
+
*
|
|
8
|
+
* Returns the instance name of the matching secret, "_unsigned" if no secrets
|
|
9
|
+
* are configured (unsigned webhooks allowed), or null if validation fails.
|
|
10
|
+
*
|
|
11
|
+
* @param rawBody - The raw request body string
|
|
12
|
+
* @param signature - The signature header value (e.g. "sha256=abc123" or just "abc123")
|
|
13
|
+
* @param secrets - Map of instance name → secret value
|
|
14
|
+
* @param prefix - Optional prefix the provider prepends to the HMAC hex (e.g. "sha256=" for GitHub)
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateHmacSignature(rawBody: string, signature: string | undefined, secrets: Record<string, string> | undefined, prefix?: string): string | null;
|
|
17
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/webhooks/validation.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,GAAG,SAAkB,GAAG,MAAM,GAAG,SAAS,CAG5G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC3C,MAAM,SAAK,GACV,MAAM,GAAG,IAAI,CAef"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from "crypto";
|
|
2
|
+
const MAX_TEXT_LENGTH = 4000;
|
|
3
|
+
/**
|
|
4
|
+
* Truncate text to a maximum length, appending "..." if truncated.
|
|
5
|
+
*/
|
|
6
|
+
export function truncateEventText(text, max = MAX_TEXT_LENGTH) {
|
|
7
|
+
if (!text)
|
|
8
|
+
return undefined;
|
|
9
|
+
return text.length > max ? text.slice(0, max) + "..." : text;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Validate an HMAC-SHA256 webhook signature against one or more secrets.
|
|
13
|
+
*
|
|
14
|
+
* Returns the instance name of the matching secret, "_unsigned" if no secrets
|
|
15
|
+
* are configured (unsigned webhooks allowed), or null if validation fails.
|
|
16
|
+
*
|
|
17
|
+
* @param rawBody - The raw request body string
|
|
18
|
+
* @param signature - The signature header value (e.g. "sha256=abc123" or just "abc123")
|
|
19
|
+
* @param secrets - Map of instance name → secret value
|
|
20
|
+
* @param prefix - Optional prefix the provider prepends to the HMAC hex (e.g. "sha256=" for GitHub)
|
|
21
|
+
*/
|
|
22
|
+
export function validateHmacSignature(rawBody, signature, secrets, prefix = "") {
|
|
23
|
+
// If no secrets configured, skip validation (allow unsigned webhooks)
|
|
24
|
+
if (!secrets || Object.keys(secrets).length === 0)
|
|
25
|
+
return "_unsigned";
|
|
26
|
+
if (!signature)
|
|
27
|
+
return null;
|
|
28
|
+
// Try each configured secret — different orgs/repos may use different secrets
|
|
29
|
+
for (const [instanceName, secret] of Object.entries(secrets)) {
|
|
30
|
+
const expected = prefix + createHmac("sha256", secret).update(rawBody).digest("hex");
|
|
31
|
+
if (signature.length === expected.length && timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
|
|
32
|
+
return instanceName;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/webhooks/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAErD,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA+B,EAAE,GAAG,GAAG,eAAe;IACtF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,SAA6B,EAC7B,OAA2C,EAC3C,MAAM,GAAG,EAAE;IAEX,sEAAsE;IACtE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAEtE,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,8EAA8E;IAC9E,KAAK,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC3G,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/docker/Dockerfile
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
# syntax=docker/dockerfile:1
|
|
2
|
-
FROM public.ecr.aws/docker/library/node:20-
|
|
2
|
+
FROM public.ecr.aws/docker/library/node:20-alpine
|
|
3
3
|
|
|
4
|
-
RUN
|
|
5
|
-
git \
|
|
6
|
-
curl \
|
|
7
|
-
jq \
|
|
8
|
-
ca-certificates \
|
|
9
|
-
openssh-client \
|
|
10
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
4
|
+
RUN apk add --no-cache git curl jq ca-certificates openssh-client
|
|
11
5
|
|
|
12
6
|
# Copy application
|
|
13
7
|
WORKDIR /app
|
|
14
8
|
COPY package.json ./
|
|
15
|
-
RUN --mount=type=cache,target=/root/.npm npm install --
|
|
9
|
+
RUN --mount=type=cache,target=/root/.npm npm install --omit=dev --omit=optional
|
|
16
10
|
COPY dist/ ./dist/
|
|
17
11
|
|
|
12
|
+
# Bake shell scripts into image so container-entry doesn't write them at runtime
|
|
13
|
+
COPY docker/bin/ /app/bin/
|
|
14
|
+
|
|
18
15
|
# Use the built-in node user (uid 1000) instead of root
|
|
19
16
|
USER node
|
|
20
17
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ -z "$GATEWAY_URL" ]; then echo '{"ok":false,"reason":"no gateway"}'; exit 1; fi
|
|
3
|
+
if [ -z "$1" ]; then echo '{"ok":false,"reason":"usage: echo ctx | al-call <agent>"}'; exit 1; fi
|
|
4
|
+
CONTEXT=$(cat)
|
|
5
|
+
curl -s -X POST "$GATEWAY_URL/calls" \
|
|
6
|
+
-H 'Content-Type: application/json' \
|
|
7
|
+
-d "$(jq -n --arg s "$SHUTDOWN_SECRET" --arg t "$1" --arg c "$CONTEXT" \
|
|
8
|
+
'{secret:$s,targetAgent:$t,context:$c}')"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
touch "$AL_SIGNAL_DIR/rerun"
|
|
3
|
+
if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
|
|
4
|
+
curl -s -X POST "$GATEWAY_URL/signals/rerun" \
|
|
5
|
+
-H 'Content-Type: application/json' \
|
|
6
|
+
-d '{"secret":"'"$SHUTDOWN_SECRET"'"}' > /dev/null 2>&1 || true
|
|
7
|
+
fi
|
|
8
|
+
echo '{"ok":true}'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ $# -gt 0 ]; then
|
|
3
|
+
VALUE="$*"
|
|
4
|
+
else
|
|
5
|
+
VALUE=$(cat)
|
|
6
|
+
fi
|
|
7
|
+
printf '%s' "$VALUE" > "$AL_SIGNAL_DIR/return"
|
|
8
|
+
if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
|
|
9
|
+
PAYLOAD=$(printf '{"secret":"%s","value":%s}' "$SHUTDOWN_SECRET" "$(printf '%s' "$VALUE" | jq -Rs .)")
|
|
10
|
+
curl -s -X POST "$GATEWAY_URL/signals/return" \
|
|
11
|
+
-H 'Content-Type: application/json' \
|
|
12
|
+
-d "$PAYLOAD" > /dev/null 2>&1 || true
|
|
13
|
+
fi
|
|
14
|
+
echo '{"ok":true}'
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ -z "$1" ]; then echo '{"ok":false,"error":"usage: al-status \"<text>\""}'; exit 1; fi
|
|
3
|
+
printf '%s' "$1" > "$AL_SIGNAL_DIR/status"
|
|
4
|
+
if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
|
|
5
|
+
curl -s -X POST "$GATEWAY_URL/signals/status" \
|
|
6
|
+
-H 'Content-Type: application/json' \
|
|
7
|
+
-d "$(printf '{"secret":"%s","text":"%s"}' "$SHUTDOWN_SECRET" "$1")" > /dev/null 2>&1 || true
|
|
8
|
+
fi
|
|
9
|
+
echo '{"ok":true}'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ -z "$GATEWAY_URL" ]; then echo '{"error":"no gateway"}'; exit 1; fi
|
|
3
|
+
TIMEOUT=900
|
|
4
|
+
IDS=""
|
|
5
|
+
while [ $# -gt 0 ]; do
|
|
6
|
+
case "$1" in
|
|
7
|
+
--timeout) TIMEOUT="$2"; shift 2;;
|
|
8
|
+
*) IDS="$IDS $1"; shift;;
|
|
9
|
+
esac
|
|
10
|
+
done
|
|
11
|
+
if [ -z "$IDS" ]; then echo '{"error":"usage: al-wait <callId> [callId...] [--timeout N]"}'; exit 1; fi
|
|
12
|
+
ELAPSED=0
|
|
13
|
+
while [ "$ELAPSED" -lt "$TIMEOUT" ]; do
|
|
14
|
+
ALL_DONE=true
|
|
15
|
+
for id in $IDS; do
|
|
16
|
+
STATUS=$(curl -s "$GATEWAY_URL/calls/$id?secret=$SHUTDOWN_SECRET" | jq -r .status)
|
|
17
|
+
case "$STATUS" in running|pending) ALL_DONE=false;; esac
|
|
18
|
+
done
|
|
19
|
+
if $ALL_DONE; then break; fi
|
|
20
|
+
sleep 5; ELAPSED=$((ELAPSED + 5))
|
|
21
|
+
done
|
|
22
|
+
RESULT="{"
|
|
23
|
+
FIRST=true
|
|
24
|
+
for id in $IDS; do
|
|
25
|
+
$FIRST || RESULT="$RESULT,"
|
|
26
|
+
FIRST=false
|
|
27
|
+
RESULT="$RESULT\"$id\":$(curl -s "$GATEWAY_URL/calls/$id?secret=$SHUTDOWN_SECRET")"
|
|
28
|
+
done
|
|
29
|
+
echo "$RESULT}"
|
package/docker/bin/rlock
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ -z "$GATEWAY_URL" ]; then echo '{"ok":true}'; exit 0; fi
|
|
3
|
+
curl -s -X POST "$GATEWAY_URL/locks/heartbeat" \
|
|
4
|
+
-H 'Content-Type: application/json' \
|
|
5
|
+
-d '{"secret":"'"$SHUTDOWN_SECRET"'","resourceKey":"'"$1"'"}' || echo '{"ok":true,"note":"gateway unreachable"}'
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if [ -z "$GATEWAY_URL" ]; then echo '{"ok":true}'; exit 0; fi
|
|
3
|
+
curl -s -X POST "$GATEWAY_URL/locks/release" \
|
|
4
|
+
-H 'Content-Type: application/json' \
|
|
5
|
+
-d '{"secret":"'"$SHUTDOWN_SECRET"'","resourceKey":"'"$1"'"}' || echo '{"ok":true,"note":"gateway unreachable, lock will expire"}'
|
package/package.json
CHANGED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AgentConfig, GlobalConfig } from "../shared/config.js";
|
|
2
|
-
/**
|
|
3
|
-
* Validates that all agents have at least a schedule or webhooks configured (unless they are disabled with scale=0)
|
|
4
|
-
*/
|
|
5
|
-
export declare function validateAgentConfigs(agentConfigs: AgentConfig[]): void;
|
|
6
|
-
/**
|
|
7
|
-
* Validates that all required credentials exist for active agents
|
|
8
|
-
*/
|
|
9
|
-
export declare function validateCredentials(agentConfigs: AgentConfig[]): Promise<void>;
|
|
10
|
-
/**
|
|
11
|
-
* Validates ECS IAM roles if using cloud ECS mode
|
|
12
|
-
*/
|
|
13
|
-
export declare function validateEcsRolesIfNeeded(globalConfig: GlobalConfig, projectPath: string): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* Validates that pi_auth is not used with Docker mode (unsupported)
|
|
16
|
-
*/
|
|
17
|
-
export declare function validateDockerCompatibility(agentConfigs: AgentConfig[], dockerEnabled: boolean): void;
|
|
18
|
-
//# sourceMappingURL=config-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../src/scheduler/config-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGrE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAStE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,WAAW,EAAE,EAC3B,aAAa,EAAE,OAAO,GACrB,IAAI,CAWN"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { requireCredentialRef } from "../shared/credentials.js";
|
|
2
|
-
/**
|
|
3
|
-
* Validates that all agents have at least a schedule or webhooks configured (unless they are disabled with scale=0)
|
|
4
|
-
*/
|
|
5
|
-
export function validateAgentConfigs(agentConfigs) {
|
|
6
|
-
for (const config of agentConfigs) {
|
|
7
|
-
const isDisabled = (config.scale ?? 1) === 0;
|
|
8
|
-
if (!isDisabled && !config.schedule && (!config.webhooks || config.webhooks.length === 0)) {
|
|
9
|
-
throw new Error(`Agent "${config.name}" must have a schedule, webhooks, or both`);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Validates that all required credentials exist for active agents
|
|
15
|
-
*/
|
|
16
|
-
export async function validateCredentials(agentConfigs) {
|
|
17
|
-
const activeAgentConfigs = agentConfigs.filter((a) => (a.scale ?? 1) > 0);
|
|
18
|
-
const allCredentials = new Set(activeAgentConfigs.flatMap((a) => a.credentials));
|
|
19
|
-
for (const credRef of allCredentials) {
|
|
20
|
-
await requireCredentialRef(credRef);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Validates ECS IAM roles if using cloud ECS mode
|
|
25
|
-
*/
|
|
26
|
-
export async function validateEcsRolesIfNeeded(globalConfig, projectPath) {
|
|
27
|
-
if (globalConfig.cloud?.provider === "ecs") {
|
|
28
|
-
const { validateEcsRoles } = await import("../cli/commands/doctor.js");
|
|
29
|
-
try {
|
|
30
|
-
await validateEcsRoles(projectPath, globalConfig.cloud);
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
throw new Error(`❌ ECS IAM role validation failed\n\n` +
|
|
34
|
-
`${err.message}\n\n` +
|
|
35
|
-
`This validation prevents runtime failures when agents try to start.\n` +
|
|
36
|
-
`Fix the IAM roles before starting the scheduler.`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Validates that pi_auth is not used with Docker mode (unsupported)
|
|
42
|
-
*/
|
|
43
|
-
export function validateDockerCompatibility(agentConfigs, dockerEnabled) {
|
|
44
|
-
if (!dockerEnabled)
|
|
45
|
-
return;
|
|
46
|
-
for (const config of agentConfigs) {
|
|
47
|
-
if (config.model.authType === "pi_auth") {
|
|
48
|
-
throw new Error(`Agent "${config.name}" uses pi_auth which is not supported in Docker mode. ` +
|
|
49
|
-
`Switch to api_key/oauth_token (run 'al doctor').`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=config-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/scheduler/config-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAA2B;IAC9D,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,IAAI,2CAA2C,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAA2B;IACnE,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,YAA0B,EAC1B,WAAmB;IAEnB,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC3C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,sCAAsC;gBACtC,GAAG,GAAG,CAAC,OAAO,MAAM;gBACpB,uEAAuE;gBACvE,kDAAkD,CACnD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAA2B,EAC3B,aAAsB;IAEtB,IAAI,CAAC,aAAa;QAAE,OAAO;IAE3B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,IAAI,wDAAwD;gBAC7E,kDAAkD,CACnD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Cron } from "croner";
|
|
2
|
-
import type { AgentConfig } from "../shared/config.js";
|
|
3
|
-
import type { RunnerPool } from "./runner-pool.js";
|
|
4
|
-
import type { SchedulerContext } from "./webhook-setup.js";
|
|
5
|
-
export declare class CronManager {
|
|
6
|
-
private cronJobs;
|
|
7
|
-
private agentCronJobs;
|
|
8
|
-
setupCronJobs(agentConfigs: AgentConfig[], runnerPools: Record<string, RunnerPool>, ctx: SchedulerContext, runWithReruns: (runner: any, agentConfig: AgentConfig, depth: number, ctx: SchedulerContext) => Promise<void>, statusTracker?: any): Cron[];
|
|
9
|
-
linkToStatusTracker(agentConfigs: AgentConfig[], statusTracker: any): void;
|
|
10
|
-
stopAll(): void;
|
|
11
|
-
getCronJobs(): Cron[];
|
|
12
|
-
getJobForAgent(agentName: string): Cron | undefined;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=cron-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron-manager.d.ts","sourceRoot":"","sources":["../../src/scheduler/cron-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,aAAa,CAA2B;IAEhD,aAAa,CACX,YAAY,EAAE,WAAW,EAAE,EAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7G,aAAa,CAAC,EAAE,GAAG,GAClB,IAAI,EAAE;IAqCT,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,GAAG,GAAG,IAAI;IA0B1E,OAAO,IAAI,IAAI;IAQf,WAAW,IAAI,IAAI,EAAE;IAIrB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAGpD"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { Cron } from "croner";
|
|
2
|
-
export class CronManager {
|
|
3
|
-
cronJobs = [];
|
|
4
|
-
agentCronJobs = new Map();
|
|
5
|
-
setupCronJobs(agentConfigs, runnerPools, ctx, runWithReruns, statusTracker // StatusTracker
|
|
6
|
-
) {
|
|
7
|
-
const activeAgentConfigs = agentConfigs.filter((a) => (a.scale ?? 1) > 0);
|
|
8
|
-
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
9
|
-
for (const agentConfig of activeAgentConfigs) {
|
|
10
|
-
if (!agentConfig.schedule)
|
|
11
|
-
continue;
|
|
12
|
-
const pool = runnerPools[agentConfig.name];
|
|
13
|
-
const job = new Cron(agentConfig.schedule, { timezone }, async () => {
|
|
14
|
-
// Skip if agent is disabled
|
|
15
|
-
if (statusTracker && !statusTracker.isAgentEnabled(agentConfig.name)) {
|
|
16
|
-
ctx.logger.info({ agent: agentConfig.name }, "agent is disabled, skipping scheduled run");
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const availableRunner = pool.getAvailableRunner();
|
|
20
|
-
if (!availableRunner) {
|
|
21
|
-
ctx.logger.warn({ agent: agentConfig.name, running: pool.runningJobCount, scale: pool.size }, "all agent runners busy, skipping scheduled run");
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
ctx.logger.info({ agent: agentConfig.name, running: pool.runningJobCount, scale: pool.size }, "triggering scheduled run");
|
|
25
|
-
await runWithReruns(availableRunner, agentConfig, 0, ctx);
|
|
26
|
-
});
|
|
27
|
-
this.cronJobs.push(job);
|
|
28
|
-
this.agentCronJobs.set(agentConfig.name, job);
|
|
29
|
-
const nextRun = job.nextRun();
|
|
30
|
-
if (nextRun) {
|
|
31
|
-
statusTracker?.setNextRunAt(agentConfig.name, nextRun);
|
|
32
|
-
}
|
|
33
|
-
ctx.logger.info(`Scheduled ${agentConfig.name}: "${agentConfig.schedule}" (${timezone})`);
|
|
34
|
-
}
|
|
35
|
-
return this.cronJobs;
|
|
36
|
-
}
|
|
37
|
-
linkToStatusTracker(agentConfigs, statusTracker) {
|
|
38
|
-
if (!statusTracker)
|
|
39
|
-
return;
|
|
40
|
-
statusTracker.on("agent-enabled", (agentName) => {
|
|
41
|
-
const job = this.agentCronJobs.get(agentName);
|
|
42
|
-
if (job) {
|
|
43
|
-
job.resume();
|
|
44
|
-
const nextRun = job.nextRun();
|
|
45
|
-
if (nextRun) {
|
|
46
|
-
statusTracker.setNextRunAt(agentName, nextRun);
|
|
47
|
-
}
|
|
48
|
-
// Using ctx.logger would require passing it, so we'll log through status tracker
|
|
49
|
-
statusTracker.addLogLine?.(agentName, "agent enabled, cron job resumed");
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
statusTracker.on("agent-disabled", (agentName) => {
|
|
53
|
-
const job = this.agentCronJobs.get(agentName);
|
|
54
|
-
if (job) {
|
|
55
|
-
job.pause();
|
|
56
|
-
statusTracker.setNextRunAt(agentName, null);
|
|
57
|
-
statusTracker.addLogLine?.(agentName, "agent disabled, cron job paused");
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
stopAll() {
|
|
62
|
-
for (const job of this.cronJobs) {
|
|
63
|
-
job.stop();
|
|
64
|
-
}
|
|
65
|
-
this.cronJobs = [];
|
|
66
|
-
this.agentCronJobs.clear();
|
|
67
|
-
}
|
|
68
|
-
getCronJobs() {
|
|
69
|
-
return [...this.cronJobs];
|
|
70
|
-
}
|
|
71
|
-
getJobForAgent(agentName) {
|
|
72
|
-
return this.agentCronJobs.get(agentName);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=cron-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron-manager.js","sourceRoot":"","sources":["../../src/scheduler/cron-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Cron } from "croner";
|
|
2
|
-
import type { Logger } from "../shared/logger.js";
|
|
3
|
-
import type { GatewayServer } from "../gateway/index.js";
|
|
4
|
-
import type { WorkQueue } from "./event-queue.js";
|
|
5
|
-
export declare class ShutdownHandler {
|
|
6
|
-
private cronJobs;
|
|
7
|
-
private gateway?;
|
|
8
|
-
private webhookQueue?;
|
|
9
|
-
private logger;
|
|
10
|
-
private registered;
|
|
11
|
-
constructor(logger: Logger);
|
|
12
|
-
register(cronJobs: Cron[], gateway?: GatewayServer, webhookQueue?: WorkQueue<any>): void;
|
|
13
|
-
private shutdown;
|
|
14
|
-
triggerShutdown(): Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=shutdown-handler.d.ts.map
|