@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.
- package/README.md +6 -6
- package/agent-docs/AGENTS.md +1 -1
- package/agent-docs/skills/resource-locks.md +40 -2
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +3 -1
- 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 +3 -1
- package/dist/agents/execution-engine.js.map +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +3 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/chat.js +6 -2
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/push.d.ts +1 -0
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +22 -4
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +10 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +3 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/{vps/cloudflare-api.d.ts → cloudflare/api.d.ts} +1 -1
- package/dist/cloud/cloudflare/api.d.ts.map +1 -0
- package/dist/cloud/{vps/cloudflare-api.js → cloudflare/api.js} +1 -1
- package/dist/cloud/cloudflare/api.js.map +1 -0
- package/dist/cloud/provider.js +2 -2
- package/dist/cloud/provider.js.map +1 -1
- package/dist/cloud/vps/provider.d.ts +4 -4
- package/dist/cloud/vps/provider.d.ts.map +1 -1
- package/dist/cloud/vps/provider.js +4 -4
- package/dist/cloud/vps/provider.js.map +1 -1
- package/dist/cloud/vps/provision.js +4 -4
- package/dist/cloud/vps/provision.js.map +1 -1
- package/dist/cloud/vps/teardown.d.ts +2 -2
- package/dist/cloud/vps/teardown.d.ts.map +1 -1
- package/dist/cloud/vps/teardown.js +3 -3
- package/dist/cloud/vps/teardown.js.map +1 -1
- package/dist/cloud/vps/verify.js +2 -2
- package/dist/cloud/vps/verify.js.map +1 -1
- package/dist/credentials/builtins/cloudflare-api-token.js +1 -1
- package/dist/credentials/builtins/cloudflare-api-token.js.map +1 -1
- package/dist/gateway/auth.d.ts +6 -1
- package/dist/gateway/auth.d.ts.map +1 -1
- package/dist/gateway/auth.js +21 -4
- package/dist/gateway/auth.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 +13 -6
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/lock-store.d.ts +17 -0
- package/dist/gateway/lock-store.d.ts.map +1 -1
- package/dist/gateway/lock-store.js +101 -28
- package/dist/gateway/lock-store.js.map +1 -1
- package/dist/gateway/routes/control.d.ts +3 -0
- package/dist/gateway/routes/control.d.ts.map +1 -1
- package/dist/gateway/routes/control.js +7 -0
- package/dist/gateway/routes/control.js.map +1 -1
- package/dist/gateway/routes/dashboard.d.ts +6 -1
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +37 -3
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js +7 -3
- 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 +0 -3
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/gateway/session-store.d.ts +11 -0
- package/dist/gateway/session-store.d.ts.map +1 -0
- package/dist/gateway/session-store.js +33 -0
- package/dist/gateway/session-store.js.map +1 -0
- package/dist/gateway/types.d.ts +5 -0
- package/dist/gateway/types.d.ts.map +1 -1
- package/dist/remote/push.d.ts +15 -1
- package/dist/remote/push.d.ts.map +1 -1
- package/dist/remote/push.js +54 -3
- package/dist/remote/push.js.map +1 -1
- package/dist/scheduler/call-dispatcher.d.ts +11 -0
- package/dist/scheduler/call-dispatcher.d.ts.map +1 -0
- package/dist/scheduler/call-dispatcher.js +65 -0
- package/dist/scheduler/call-dispatcher.js.map +1 -0
- package/dist/scheduler/cron-setup.d.ts +41 -0
- package/dist/scheduler/cron-setup.d.ts.map +1 -0
- package/dist/scheduler/cron-setup.js +94 -0
- package/dist/scheduler/cron-setup.js.map +1 -0
- package/dist/scheduler/event-queue-sqlite.d.ts +27 -0
- package/dist/scheduler/event-queue-sqlite.d.ts.map +1 -0
- package/dist/scheduler/event-queue-sqlite.js +105 -0
- package/dist/scheduler/event-queue-sqlite.js.map +1 -0
- package/dist/scheduler/event-queue.d.ts +31 -9
- package/dist/scheduler/event-queue.d.ts.map +1 -1
- package/dist/scheduler/event-queue.js +21 -32
- package/dist/scheduler/event-queue.js.map +1 -1
- package/dist/scheduler/execution.d.ts +9 -2
- package/dist/scheduler/execution.d.ts.map +1 -1
- package/dist/scheduler/execution.js +64 -48
- package/dist/scheduler/execution.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +40 -0
- package/dist/scheduler/gateway-setup.d.ts.map +1 -0
- package/dist/scheduler/gateway-setup.js +135 -0
- package/dist/scheduler/gateway-setup.js.map +1 -0
- package/dist/scheduler/index.d.ts +4 -7
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +81 -437
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runner-setup.d.ts +34 -0
- package/dist/scheduler/runner-setup.d.ts.map +1 -0
- package/dist/scheduler/runner-setup.js +63 -0
- package/dist/scheduler/runner-setup.js.map +1 -0
- package/dist/scheduler/shutdown.d.ts +20 -0
- package/dist/scheduler/shutdown.d.ts.map +1 -0
- package/dist/scheduler/shutdown.js +38 -0
- package/dist/scheduler/shutdown.js.map +1 -0
- package/dist/scheduler/state.d.ts +17 -0
- package/dist/scheduler/state.d.ts.map +1 -0
- package/dist/scheduler/state.js +10 -0
- package/dist/scheduler/state.js.map +1 -0
- package/dist/scheduler/validation.d.ts +18 -0
- package/dist/scheduler/validation.d.ts.map +1 -0
- package/dist/scheduler/validation.js +59 -0
- package/dist/scheduler/validation.js.map +1 -0
- package/dist/scheduler/watcher.d.ts.map +1 -1
- package/dist/scheduler/watcher.js +31 -48
- package/dist/scheduler/watcher.js.map +1 -1
- package/dist/scheduler/webhook-setup.d.ts +18 -1
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +51 -0
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/shared/config.d.ts +2 -3
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +0 -15
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/queue-memory.d.ts +16 -0
- package/dist/shared/queue-memory.d.ts.map +1 -0
- package/dist/shared/queue-memory.js +28 -0
- package/dist/shared/queue-memory.js.map +1 -0
- package/dist/shared/queue-sqlite.d.ts +28 -0
- package/dist/shared/queue-sqlite.d.ts.map +1 -0
- package/dist/shared/queue-sqlite.js +86 -0
- package/dist/shared/queue-sqlite.js.map +1 -0
- package/dist/shared/queue.d.ts +55 -0
- package/dist/shared/queue.d.ts.map +1 -0
- package/dist/shared/queue.js +22 -0
- package/dist/shared/queue.js.map +1 -0
- package/dist/shared/server.d.ts +1 -0
- package/dist/shared/server.d.ts.map +1 -1
- package/dist/shared/server.js +3 -0
- package/dist/shared/server.js.map +1 -1
- package/package.json +2 -2
- package/dist/cloud/vps/cloudflare-api.d.ts.map +0 -1
- package/dist/cloud/vps/cloudflare-api.js.map +0 -1
- package/dist/gateway/rate-limiter.d.ts +0 -16
- package/dist/gateway/rate-limiter.d.ts.map +0 -1
- package/dist/gateway/rate-limiter.js +0 -38
- package/dist/gateway/rate-limiter.js.map +0 -1
package/dist/cloud/vps/verify.js
CHANGED
|
@@ -100,7 +100,7 @@ async function checkDns(server, mode) {
|
|
|
100
100
|
if (!cfToken) {
|
|
101
101
|
return { name: "DNS", status: "warn", detail: "no Cloudflare API token credential", fixable: false };
|
|
102
102
|
}
|
|
103
|
-
const { findDnsRecord, upsertDnsRecord } = await import("
|
|
103
|
+
const { findDnsRecord, upsertDnsRecord } = await import("../cloudflare/api.js");
|
|
104
104
|
const hostname = server.cloudflareHostname;
|
|
105
105
|
const zoneId = server.cloudflareZoneId;
|
|
106
106
|
const record = await findDnsRecord(cfToken, zoneId, hostname);
|
|
@@ -135,7 +135,7 @@ async function checkSslMode(server, mode) {
|
|
|
135
135
|
if (!cfToken) {
|
|
136
136
|
return { name: "Cloudflare SSL", status: "warn", detail: "no Cloudflare API token credential", fixable: false };
|
|
137
137
|
}
|
|
138
|
-
const { getSslMode, setSslMode } = await import("
|
|
138
|
+
const { getSslMode, setSslMode } = await import("../cloudflare/api.js");
|
|
139
139
|
const zoneId = server.cloudflareZoneId;
|
|
140
140
|
const current = await getSslMode(cfToken, zoneId);
|
|
141
141
|
if (current === "strict") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cloud/vps/verify.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cloud/vps/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ const cloudflareApiToken = {
|
|
|
9
9
|
envVars: { api_token: "CLOUDFLARE_API_TOKEN" },
|
|
10
10
|
agentContext: "`CLOUDFLARE_API_TOKEN` — Cloudflare API access (provisioning only, not typically needed by agents)",
|
|
11
11
|
async validate(values) {
|
|
12
|
-
const { verifyToken } = await import("../../cloud/
|
|
12
|
+
const { verifyToken } = await import("../../cloud/cloudflare/api.js");
|
|
13
13
|
const active = await verifyToken(values.api_token);
|
|
14
14
|
if (!active) {
|
|
15
15
|
throw new Error("Cloudflare API token is not active");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-api-token.js","sourceRoot":"","sources":["../../../src/credentials/builtins/cloudflare-api-token.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,qFAAqF;IAClG,OAAO,EAAE,gDAAgD;IACzD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,uEAAuE,EAAE,MAAM,EAAE,IAAI,EAAE;KAC9I;IACD,OAAO,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;IAC9C,YAAY,EAAE,oGAAoG;IAElH,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cloudflare-api-token.js","sourceRoot":"","sources":["../../../src/credentials/builtins/cloudflare-api-token.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,qFAAqF;IAClG,OAAO,EAAE,gDAAgD;IACzD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,uEAAuE,EAAE,MAAM,EAAE,IAAI,EAAE;KAC9I;IACD,OAAO,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;IAC9C,YAAY,EAAE,oGAAoG;IAElH,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
package/dist/gateway/auth.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context, Next } from "hono";
|
|
2
|
+
import type { SessionStore } from "./session-store.js";
|
|
2
3
|
/**
|
|
3
4
|
* Timing-safe string comparison.
|
|
4
5
|
*/
|
|
@@ -8,9 +9,13 @@ export declare function safeCompare(a: string, b: string): boolean;
|
|
|
8
9
|
* 1. `Authorization: Bearer <key>` header (CLI / programmatic)
|
|
9
10
|
* 2. `al_session` cookie (browser / Web UI)
|
|
10
11
|
*
|
|
12
|
+
* When a SessionStore is provided, the cookie value is treated as an opaque
|
|
13
|
+
* session ID looked up server-side. Without a SessionStore, the cookie value
|
|
14
|
+
* is compared directly to the API key (backward compatibility).
|
|
15
|
+
*
|
|
11
16
|
* Browser HTML requests to protected paths are redirected to /login on 401.
|
|
12
17
|
*/
|
|
13
|
-
export declare function authMiddleware(apiKey: string): (c: Context, next: Next) => Promise<(Response & import("hono").TypedResponse<undefined, 302, "redirect">) | (Response & import("hono").TypedResponse<{
|
|
18
|
+
export declare function authMiddleware(apiKey: string, sessionStore?: SessionStore): (c: Context, next: Next) => Promise<(Response & import("hono").TypedResponse<undefined, 302, "redirect">) | (Response & import("hono").TypedResponse<{
|
|
14
19
|
error: string;
|
|
15
20
|
}, 401, "json">) | undefined>;
|
|
16
21
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/gateway/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/gateway/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,IAC1D,GAAG,OAAO,EAAE,MAAM,IAAI;;8BAsCrC"}
|
package/dist/gateway/auth.js
CHANGED
|
@@ -14,9 +14,13 @@ export function safeCompare(a, b) {
|
|
|
14
14
|
* 1. `Authorization: Bearer <key>` header (CLI / programmatic)
|
|
15
15
|
* 2. `al_session` cookie (browser / Web UI)
|
|
16
16
|
*
|
|
17
|
+
* When a SessionStore is provided, the cookie value is treated as an opaque
|
|
18
|
+
* session ID looked up server-side. Without a SessionStore, the cookie value
|
|
19
|
+
* is compared directly to the API key (backward compatibility).
|
|
20
|
+
*
|
|
17
21
|
* Browser HTML requests to protected paths are redirected to /login on 401.
|
|
18
22
|
*/
|
|
19
|
-
export function authMiddleware(apiKey) {
|
|
23
|
+
export function authMiddleware(apiKey, sessionStore) {
|
|
20
24
|
return async (c, next) => {
|
|
21
25
|
// 1. Check Bearer token
|
|
22
26
|
const authHeader = c.req.header("Authorization");
|
|
@@ -30,9 +34,22 @@ export function authMiddleware(apiKey) {
|
|
|
30
34
|
// 2. Check session cookie
|
|
31
35
|
const cookie = parseCookie(c.req.header("Cookie") || "");
|
|
32
36
|
const sessionToken = cookie["al_session"];
|
|
33
|
-
if (sessionToken
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
if (sessionToken) {
|
|
38
|
+
if (sessionStore) {
|
|
39
|
+
// Session store present: validate as opaque session ID
|
|
40
|
+
const session = await sessionStore.getSession(sessionToken);
|
|
41
|
+
if (session) {
|
|
42
|
+
await next();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Backward compatibility: compare cookie value directly to API key
|
|
48
|
+
if (safeCompare(sessionToken, apiKey)) {
|
|
49
|
+
await next();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
36
53
|
}
|
|
37
54
|
// 401 — redirect browsers to login page, return JSON for API clients
|
|
38
55
|
const accept = c.req.header("Accept") || "";
|
package/dist/gateway/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/gateway/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/gateway/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wDAAwD;IACxD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqK/E"}
|
package/dist/gateway/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { registerSignalRoutes } from "./routes/signals.js";
|
|
|
9
9
|
import { LockStore } from "./lock-store.js";
|
|
10
10
|
import { CallStore } from "./call-store.js";
|
|
11
11
|
import { ContainerRegistry } from "./container-registry.js";
|
|
12
|
+
import { SessionStore } from "./session-store.js";
|
|
12
13
|
import { withSpan, getTelemetry } from "../telemetry/index.js";
|
|
13
14
|
import { SpanKind } from "@opentelemetry/api";
|
|
14
15
|
import { authMiddleware } from "./auth.js";
|
|
@@ -71,16 +72,17 @@ export async function startGateway(opts) {
|
|
|
71
72
|
registerShutdownRoute(app, containerRegistry, killFn, logger);
|
|
72
73
|
// Apply auth middleware to protected routes when an API key is configured
|
|
73
74
|
if (opts.apiKey) {
|
|
74
|
-
const
|
|
75
|
+
const sessionStore = stateStore ? new SessionStore(stateStore) : undefined;
|
|
76
|
+
const auth = authMiddleware(opts.apiKey, sessionStore);
|
|
75
77
|
app.use("/control/*", auth);
|
|
76
78
|
app.use("/dashboard/*", auth);
|
|
77
79
|
app.use("/dashboard", auth);
|
|
78
80
|
app.use("/locks/status", auth);
|
|
79
81
|
app.use("/api/logs/*", auth);
|
|
80
82
|
// Always register login/logout so the auth redirect has a target
|
|
81
|
-
registerLoginRoutes(app, opts.apiKey);
|
|
83
|
+
registerLoginRoutes(app, opts.apiKey, sessionStore);
|
|
82
84
|
}
|
|
83
|
-
registerLockRoutes(app, containerRegistry, lockStore, logger, { events: opts.events });
|
|
85
|
+
registerLockRoutes(app, containerRegistry, lockStore, logger, { skipStatusEndpoint: opts.skipStatusEndpoint, events: opts.events });
|
|
84
86
|
registerCallRoutes(app, containerRegistry, callStore, () => callDispatcher, logger, opts.events);
|
|
85
87
|
// Signal routes
|
|
86
88
|
registerSignalRoutes(app, containerRegistry, logger, statusTracker, signalContext, opts.events);
|
|
@@ -90,8 +92,13 @@ export async function startGateway(opts) {
|
|
|
90
92
|
}
|
|
91
93
|
// Dashboard routes (login/logout are unprotected; dashboard pages are behind authMiddleware above)
|
|
92
94
|
if (webUI && statusTracker) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
if (!opts.apiKey) {
|
|
96
|
+
logger.error("Dashboard UI requested but no API key configured. Dashboard will not be enabled for security.");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
registerDashboardRoutes(app, statusTracker, projectPath, opts.apiKey);
|
|
100
|
+
app.get("/", (c) => c.redirect("/dashboard"));
|
|
101
|
+
}
|
|
95
102
|
}
|
|
96
103
|
// Log API routes — available regardless of webUI flag (CLI needs them)
|
|
97
104
|
if (projectPath) {
|
|
@@ -99,7 +106,7 @@ export async function startGateway(opts) {
|
|
|
99
106
|
registerLogRoutes(app, projectPath);
|
|
100
107
|
// Warn if log endpoints are exposed without authentication
|
|
101
108
|
if (!opts.apiKey) {
|
|
102
|
-
logger.warn("Log endpoints are exposed without authentication. Consider setting up a gateway API key for security.");
|
|
109
|
+
logger.warn("Log and dashboard endpoints are exposed without authentication. Consider setting up a gateway API key for security.");
|
|
103
110
|
}
|
|
104
111
|
}
|
|
105
112
|
// Control routes (for kill, pause, resume commands)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAsB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export interface AcquireResult {
|
|
|
10
10
|
holder?: string;
|
|
11
11
|
heldSince?: number;
|
|
12
12
|
reason?: string;
|
|
13
|
+
deadlock?: boolean;
|
|
14
|
+
cycle?: string[];
|
|
13
15
|
}
|
|
14
16
|
export interface ReleaseResult {
|
|
15
17
|
ok: boolean;
|
|
@@ -23,6 +25,7 @@ export interface HeartbeatResult {
|
|
|
23
25
|
export declare class LockStore {
|
|
24
26
|
private locks;
|
|
25
27
|
private holderLocks;
|
|
28
|
+
private waitingFor;
|
|
26
29
|
private sweepTimer;
|
|
27
30
|
private defaultTTL;
|
|
28
31
|
private store?;
|
|
@@ -34,9 +37,23 @@ export declare class LockStore {
|
|
|
34
37
|
heartbeat(resourceKey: string, holder: string, ttlSeconds?: number): HeartbeatResult;
|
|
35
38
|
releaseAll(holder: string): number;
|
|
36
39
|
list(holder?: string): LockEntry[];
|
|
40
|
+
/**
|
|
41
|
+
* Detect a deadlock cycle if `holder` tries to acquire `targetResource`.
|
|
42
|
+
*
|
|
43
|
+
* Follows the wait-for graph: holder wants targetResource (held by B),
|
|
44
|
+
* B is waiting for something (held by C), ... until we reach holder again
|
|
45
|
+
* (cycle) or a dead end (no cycle).
|
|
46
|
+
*
|
|
47
|
+
* Returns the cycle path as alternating [holder, resource, holder, resource, ...]
|
|
48
|
+
* or null if no cycle exists.
|
|
49
|
+
*/
|
|
50
|
+
private detectCycle;
|
|
51
|
+
private addHolderLock;
|
|
52
|
+
private removeHolderLock;
|
|
37
53
|
private sweep;
|
|
38
54
|
private persistSet;
|
|
39
55
|
private persistDelete;
|
|
56
|
+
private persistHolderIndex;
|
|
40
57
|
dispose(): void;
|
|
41
58
|
}
|
|
42
59
|
//# sourceMappingURL=lock-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock-store.d.ts","sourceRoot":"","sources":["../../src/gateway/lock-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"lock-store.d.ts","sourceRoot":"","sources":["../../src/gateway/lock-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAa;gBAEf,iBAAiB,SAAO,EAAE,oBAAoB,SAAK,EAAE,KAAK,CAAC,EAAE,UAAU;IAOnF,yDAAyD;IACnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IAuChF,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa;IAoB3D,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe;IAkBpF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAgBlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAWlC;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,KAAK;IAiBb,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,IAAI,IAAI;CAShB"}
|
|
@@ -2,7 +2,8 @@ const NS_LOCKS = "locks";
|
|
|
2
2
|
const NS_HOLDERS = "lock-holders";
|
|
3
3
|
export class LockStore {
|
|
4
4
|
locks = new Map();
|
|
5
|
-
holderLocks = new Map(); // holder ->
|
|
5
|
+
holderLocks = new Map(); // holder -> resourceKeys
|
|
6
|
+
waitingFor = new Map(); // holder -> resourceKey they failed to acquire
|
|
6
7
|
sweepTimer;
|
|
7
8
|
defaultTTL;
|
|
8
9
|
store;
|
|
@@ -22,44 +23,43 @@ export class LockStore {
|
|
|
22
23
|
for (const { value } of entries) {
|
|
23
24
|
if (now < value.expiresAt) {
|
|
24
25
|
this.locks.set(value.resourceKey, value);
|
|
25
|
-
this.
|
|
26
|
+
this.addHolderLock(value.holder, value.resourceKey);
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
acquire(resourceKey, holder, ttlSeconds) {
|
|
30
31
|
const existing = this.locks.get(resourceKey);
|
|
31
|
-
// Check if this holder already holds a different lock
|
|
32
|
-
const existingHolderKey = this.holderLocks.get(holder);
|
|
33
|
-
if (existingHolderKey && existingHolderKey !== resourceKey) {
|
|
34
|
-
const existingHolderLock = this.locks.get(existingHolderKey);
|
|
35
|
-
if (existingHolderLock && Date.now() < existingHolderLock.expiresAt) {
|
|
36
|
-
return {
|
|
37
|
-
ok: false,
|
|
38
|
-
reason: `already holding lock on ${existingHolderLock.resourceKey} — release it first`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
// Expired — clean up
|
|
42
|
-
this.locks.delete(existingHolderKey);
|
|
43
|
-
this.holderLocks.delete(holder);
|
|
44
|
-
this.persistDelete(existingHolderKey, holder);
|
|
45
|
-
}
|
|
46
32
|
if (existing) {
|
|
47
33
|
if (Date.now() >= existing.expiresAt) {
|
|
48
34
|
// Expired — evict
|
|
49
|
-
this.
|
|
35
|
+
this.removeHolderLock(existing.holder, resourceKey);
|
|
50
36
|
this.locks.delete(resourceKey);
|
|
51
37
|
this.persistDelete(resourceKey, existing.holder);
|
|
52
38
|
}
|
|
53
39
|
else if (existing.holder !== holder) {
|
|
40
|
+
// Resource held by another — check for deadlock cycle
|
|
41
|
+
const cycle = this.detectCycle(holder, resourceKey);
|
|
42
|
+
if (cycle) {
|
|
43
|
+
this.waitingFor.set(holder, resourceKey);
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
reason: `possible deadlock: ${[...cycle, cycle[0]].join(" \u2192 ")}`,
|
|
47
|
+
deadlock: true,
|
|
48
|
+
cycle,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
this.waitingFor.set(holder, resourceKey);
|
|
54
52
|
return { ok: false, holder: existing.holder, heldSince: existing.heldSince };
|
|
55
53
|
}
|
|
56
54
|
// Same holder re-acquiring — refresh below
|
|
57
55
|
}
|
|
56
|
+
// Acquired — clear waiting state
|
|
57
|
+
this.waitingFor.delete(holder);
|
|
58
58
|
const now = Date.now();
|
|
59
59
|
const ttl = ttlSeconds ? ttlSeconds * 1000 : this.defaultTTL;
|
|
60
60
|
const entry = { resourceKey, holder, heldSince: now, expiresAt: now + ttl };
|
|
61
61
|
this.locks.set(resourceKey, entry);
|
|
62
|
-
this.
|
|
62
|
+
this.addHolderLock(holder, resourceKey);
|
|
63
63
|
this.persistSet(entry);
|
|
64
64
|
return { ok: true };
|
|
65
65
|
}
|
|
@@ -67,8 +67,7 @@ export class LockStore {
|
|
|
67
67
|
const existing = this.locks.get(resourceKey);
|
|
68
68
|
if (!existing || Date.now() >= existing.expiresAt) {
|
|
69
69
|
this.locks.delete(resourceKey);
|
|
70
|
-
|
|
71
|
-
this.holderLocks.delete(holder);
|
|
70
|
+
this.removeHolderLock(holder, resourceKey);
|
|
72
71
|
this.persistDelete(resourceKey, holder);
|
|
73
72
|
return { ok: false, reason: "lock not found" };
|
|
74
73
|
}
|
|
@@ -76,7 +75,7 @@ export class LockStore {
|
|
|
76
75
|
return { ok: false, reason: `held by ${existing.holder}` };
|
|
77
76
|
}
|
|
78
77
|
this.locks.delete(resourceKey);
|
|
79
|
-
this.
|
|
78
|
+
this.removeHolderLock(holder, resourceKey);
|
|
80
79
|
this.persistDelete(resourceKey, holder);
|
|
81
80
|
return { ok: true };
|
|
82
81
|
}
|
|
@@ -96,14 +95,17 @@ export class LockStore {
|
|
|
96
95
|
}
|
|
97
96
|
releaseAll(holder) {
|
|
98
97
|
let count = 0;
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
const holderKeys = this.holderLocks.get(holder);
|
|
99
|
+
if (holderKeys) {
|
|
100
|
+
for (const rk of holderKeys) {
|
|
101
101
|
this.locks.delete(rk);
|
|
102
|
-
this.
|
|
102
|
+
this.store?.delete(NS_LOCKS, rk).catch(() => { });
|
|
103
103
|
count++;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
this.holderLocks.delete(holder);
|
|
107
|
+
this.waitingFor.delete(holder);
|
|
108
|
+
this.store?.delete(NS_HOLDERS, holder).catch(() => { });
|
|
107
109
|
return count;
|
|
108
110
|
}
|
|
109
111
|
list(holder) {
|
|
@@ -118,24 +120,94 @@ export class LockStore {
|
|
|
118
120
|
}
|
|
119
121
|
return result;
|
|
120
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Detect a deadlock cycle if `holder` tries to acquire `targetResource`.
|
|
125
|
+
*
|
|
126
|
+
* Follows the wait-for graph: holder wants targetResource (held by B),
|
|
127
|
+
* B is waiting for something (held by C), ... until we reach holder again
|
|
128
|
+
* (cycle) or a dead end (no cycle).
|
|
129
|
+
*
|
|
130
|
+
* Returns the cycle path as alternating [holder, resource, holder, resource, ...]
|
|
131
|
+
* or null if no cycle exists.
|
|
132
|
+
*/
|
|
133
|
+
detectCycle(holder, targetResource) {
|
|
134
|
+
const visited = new Set([holder]);
|
|
135
|
+
const path = [holder, targetResource];
|
|
136
|
+
let currentResource = targetResource;
|
|
137
|
+
for (;;) {
|
|
138
|
+
const lock = this.locks.get(currentResource);
|
|
139
|
+
if (!lock || Date.now() >= lock.expiresAt)
|
|
140
|
+
return null;
|
|
141
|
+
const blocker = lock.holder;
|
|
142
|
+
if (blocker === holder)
|
|
143
|
+
return path; // cycle back to the requesting holder
|
|
144
|
+
if (visited.has(blocker))
|
|
145
|
+
return null; // cycle doesn't involve the requesting holder
|
|
146
|
+
visited.add(blocker);
|
|
147
|
+
path.push(blocker);
|
|
148
|
+
const waitingResource = this.waitingFor.get(blocker);
|
|
149
|
+
if (!waitingResource)
|
|
150
|
+
return null;
|
|
151
|
+
path.push(waitingResource);
|
|
152
|
+
currentResource = waitingResource;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
addHolderLock(holder, resourceKey) {
|
|
156
|
+
let keys = this.holderLocks.get(holder);
|
|
157
|
+
if (!keys) {
|
|
158
|
+
keys = new Set();
|
|
159
|
+
this.holderLocks.set(holder, keys);
|
|
160
|
+
}
|
|
161
|
+
keys.add(resourceKey);
|
|
162
|
+
}
|
|
163
|
+
removeHolderLock(holder, resourceKey) {
|
|
164
|
+
const keys = this.holderLocks.get(holder);
|
|
165
|
+
if (keys) {
|
|
166
|
+
keys.delete(resourceKey);
|
|
167
|
+
if (keys.size === 0)
|
|
168
|
+
this.holderLocks.delete(holder);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
121
171
|
sweep() {
|
|
122
172
|
const now = Date.now();
|
|
123
173
|
for (const [rk, entry] of this.locks) {
|
|
124
174
|
if (now >= entry.expiresAt) {
|
|
125
|
-
this.
|
|
175
|
+
this.removeHolderLock(entry.holder, rk);
|
|
126
176
|
this.locks.delete(rk);
|
|
127
177
|
this.persistDelete(rk, entry.holder);
|
|
128
178
|
}
|
|
129
179
|
}
|
|
180
|
+
// Clean up stale waiting-for entries where the holder no longer holds locks
|
|
181
|
+
for (const [holder] of this.waitingFor) {
|
|
182
|
+
if (!this.holderLocks.has(holder)) {
|
|
183
|
+
this.waitingFor.delete(holder);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
130
186
|
}
|
|
131
187
|
persistSet(entry) {
|
|
132
188
|
const ttlSec = Math.max(1, Math.ceil((entry.expiresAt - Date.now()) / 1000));
|
|
133
189
|
this.store?.set(NS_LOCKS, entry.resourceKey, entry, { ttl: ttlSec }).catch(() => { });
|
|
134
|
-
this.
|
|
190
|
+
this.persistHolderIndex(entry.holder);
|
|
135
191
|
}
|
|
136
192
|
persistDelete(resourceKey, holder) {
|
|
137
193
|
this.store?.delete(NS_LOCKS, resourceKey).catch(() => { });
|
|
138
|
-
this.
|
|
194
|
+
this.persistHolderIndex(holder);
|
|
195
|
+
}
|
|
196
|
+
persistHolderIndex(holder) {
|
|
197
|
+
const keys = this.holderLocks.get(holder);
|
|
198
|
+
if (!keys || keys.size === 0) {
|
|
199
|
+
this.store?.delete(NS_HOLDERS, holder).catch(() => { });
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Use the max remaining TTL across all held locks
|
|
203
|
+
let maxExpiry = 0;
|
|
204
|
+
for (const rk of keys) {
|
|
205
|
+
const lock = this.locks.get(rk);
|
|
206
|
+
if (lock)
|
|
207
|
+
maxExpiry = Math.max(maxExpiry, lock.expiresAt);
|
|
208
|
+
}
|
|
209
|
+
const ttlSec = Math.max(1, Math.ceil((maxExpiry - Date.now()) / 1000));
|
|
210
|
+
this.store?.set(NS_HOLDERS, holder, [...keys], { ttl: ttlSec }).catch(() => { });
|
|
139
211
|
}
|
|
140
212
|
dispose() {
|
|
141
213
|
if (this.sweepTimer) {
|
|
@@ -144,6 +216,7 @@ export class LockStore {
|
|
|
144
216
|
}
|
|
145
217
|
this.locks.clear();
|
|
146
218
|
this.holderLocks.clear();
|
|
219
|
+
this.waitingFor.clear();
|
|
147
220
|
}
|
|
148
221
|
}
|
|
149
222
|
//# sourceMappingURL=lock-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock-store.js","sourceRoot":"","sources":["../../src/gateway/lock-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lock-store.js","sourceRoot":"","sources":["../../src/gateway/lock-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,9 @@ export interface ControlRoutesDeps {
|
|
|
14
14
|
disableAgent?: (name: string) => Promise<boolean>;
|
|
15
15
|
stopScheduler?: () => Promise<void>;
|
|
16
16
|
logger?: Logger;
|
|
17
|
+
workQueue?: {
|
|
18
|
+
size(agentName: string): number;
|
|
19
|
+
};
|
|
17
20
|
}
|
|
18
21
|
export declare function registerControlRoutes(app: Hono, deps: ControlRoutesDeps): void;
|
|
19
22
|
//# sourceMappingURL=control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChE,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAChE,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,QAiOvE"}
|
|
@@ -207,11 +207,18 @@ export function registerControlRoutes(app, deps) {
|
|
|
207
207
|
const schedulerInfo = statusTracker.getSchedulerInfo();
|
|
208
208
|
const instances = statusTracker.getInstances();
|
|
209
209
|
const agents = statusTracker.getAllAgents();
|
|
210
|
+
const queueSizes = {};
|
|
211
|
+
if (deps.workQueue) {
|
|
212
|
+
for (const agent of agents) {
|
|
213
|
+
queueSizes[agent.name] = deps.workQueue.size(agent.name);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
210
216
|
return c.json({
|
|
211
217
|
scheduler: schedulerInfo,
|
|
212
218
|
instances,
|
|
213
219
|
agents,
|
|
214
220
|
running: instances.length,
|
|
221
|
+
queueSizes,
|
|
215
222
|
});
|
|
216
223
|
});
|
|
217
224
|
}
|