@action-llama/action-llama 0.11.1 → 0.11.3
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/AGENTS.md +2 -2
- package/README.md +2 -1
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +9 -0
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +1 -1
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +11 -16
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +26 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli/commands/chat.js +3 -3
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +5 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +40 -22
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +8 -4
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.d.ts +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +5 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +166 -55
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts +4 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +27 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/main.js +12 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/resolve-target.d.ts +27 -0
- package/dist/cli/resolve-target.d.ts.map +1 -0
- package/dist/cli/resolve-target.js +42 -0
- package/dist/cli/resolve-target.js.map +1 -0
- package/dist/cloud/aws/constants.d.ts +2 -2
- package/dist/cloud/aws/constants.d.ts.map +1 -1
- package/dist/cloud/aws/constants.js +2 -2
- package/dist/cloud/aws/constants.js.map +1 -1
- package/dist/cloud/aws/deploy.d.ts +3 -2
- package/dist/cloud/aws/deploy.d.ts.map +1 -1
- package/dist/cloud/aws/deploy.js +8 -29
- package/dist/cloud/aws/deploy.js.map +1 -1
- package/dist/cloud/aws/iam.d.ts +13 -0
- package/dist/cloud/aws/iam.d.ts.map +1 -1
- package/dist/cloud/aws/iam.js +70 -0
- package/dist/cloud/aws/iam.js.map +1 -1
- package/dist/cloud/aws/provider.d.ts +11 -0
- package/dist/cloud/aws/provider.d.ts.map +1 -1
- package/dist/cloud/aws/provider.js +52 -2
- package/dist/cloud/aws/provider.js.map +1 -1
- package/dist/cloud/aws/provision.d.ts.map +1 -1
- package/dist/cloud/aws/provision.js +54 -20
- package/dist/cloud/aws/provision.js.map +1 -1
- package/dist/cloud/gcp/provider.d.ts +4 -0
- package/dist/cloud/gcp/provider.d.ts.map +1 -1
- package/dist/cloud/gcp/provider.js +26 -0
- package/dist/cloud/gcp/provider.js.map +1 -1
- package/dist/cloud/provider.d.ts +6 -0
- package/dist/cloud/provider.d.ts.map +1 -1
- package/dist/cloud/provider.js.map +1 -1
- package/dist/docker/ecs-runtime.d.ts +2 -2
- package/dist/docker/ecs-runtime.d.ts.map +1 -1
- package/dist/docker/ecs-runtime.js +9 -4
- package/dist/docker/ecs-runtime.js.map +1 -1
- package/dist/docker/image.js +1 -1
- package/dist/docker/image.js.map +1 -1
- package/dist/docker/runtime.d.ts +4 -3
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/gateway/call-store.d.ts +6 -1
- package/dist/gateway/call-store.d.ts.map +1 -1
- package/dist/gateway/call-store.js +25 -1
- package/dist/gateway/call-store.js.map +1 -1
- package/dist/gateway/container-registry.d.ts +25 -0
- package/dist/gateway/container-registry.d.ts.map +1 -0
- package/dist/gateway/container-registry.js +43 -0
- package/dist/gateway/container-registry.js.map +1 -0
- package/dist/gateway/index.d.ts +6 -2
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +19 -10
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/lock-store.d.ts +7 -1
- package/dist/gateway/lock-store.d.ts.map +1 -1
- package/dist/gateway/lock-store.js +37 -7
- package/dist/gateway/lock-store.js.map +1 -1
- package/dist/gateway/routes/calls.d.ts +2 -2
- package/dist/gateway/routes/calls.d.ts.map +1 -1
- package/dist/gateway/routes/calls.js.map +1 -1
- package/dist/gateway/routes/control.d.ts +1 -0
- package/dist/gateway/routes/control.d.ts.map +1 -1
- package/dist/gateway/routes/control.js +9 -0
- package/dist/gateway/routes/control.js.map +1 -1
- package/dist/gateway/routes/dashboard.d.ts +6 -0
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +14 -8
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/routes/locks.d.ts +2 -2
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js.map +1 -1
- package/dist/gateway/routes/shutdown.d.ts +2 -2
- package/dist/gateway/routes/shutdown.d.ts.map +1 -1
- package/dist/gateway/routes/shutdown.js +1 -1
- package/dist/gateway/routes/shutdown.js.map +1 -1
- package/dist/gateway/routes/signals.d.ts +2 -2
- package/dist/gateway/routes/signals.d.ts.map +1 -1
- package/dist/gateway/routes/signals.js.map +1 -1
- package/dist/preflight/interpolate.d.ts +10 -0
- package/dist/preflight/interpolate.d.ts.map +1 -0
- package/dist/preflight/interpolate.js +33 -0
- package/dist/preflight/interpolate.js.map +1 -0
- package/dist/preflight/providers/git-clone.d.ts +3 -0
- package/dist/preflight/providers/git-clone.d.ts.map +1 -0
- package/dist/preflight/providers/git-clone.js +36 -0
- package/dist/preflight/providers/git-clone.js.map +1 -0
- package/dist/preflight/providers/http.d.ts +3 -0
- package/dist/preflight/providers/http.d.ts.map +1 -0
- package/dist/preflight/providers/http.js +36 -0
- package/dist/preflight/providers/http.js.map +1 -0
- package/dist/preflight/providers/shell.d.ts +3 -0
- package/dist/preflight/providers/shell.d.ts.map +1 -0
- package/dist/preflight/providers/shell.js +28 -0
- package/dist/preflight/providers/shell.js.map +1 -0
- package/dist/preflight/registry.d.ts +4 -0
- package/dist/preflight/registry.d.ts.map +1 -0
- package/dist/preflight/registry.js +20 -0
- package/dist/preflight/registry.js.map +1 -0
- package/dist/preflight/runner.d.ts +7 -0
- package/dist/preflight/runner.d.ts.map +1 -0
- package/dist/preflight/runner.js +28 -0
- package/dist/preflight/runner.js.map +1 -0
- package/dist/preflight/schema.d.ts +21 -0
- package/dist/preflight/schema.d.ts.map +1 -0
- package/dist/preflight/schema.js +9 -0
- package/dist/preflight/schema.js.map +1 -0
- package/dist/scheduler/event-queue.d.ts +8 -15
- package/dist/scheduler/event-queue.d.ts.map +1 -1
- package/dist/scheduler/event-queue.js +33 -15
- package/dist/scheduler/event-queue.js.map +1 -1
- package/dist/scheduler/execution.d.ts +50 -0
- package/dist/scheduler/execution.d.ts.map +1 -0
- package/dist/scheduler/execution.js +106 -0
- package/dist/scheduler/execution.js.map +1 -0
- package/dist/scheduler/index.d.ts +2 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +91 -179
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runner-pool.d.ts +6 -16
- package/dist/scheduler/runner-pool.d.ts.map +1 -1
- package/dist/scheduler/runner-pool.js +15 -26
- package/dist/scheduler/runner-pool.js.map +1 -1
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +2 -1
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/shared/config.d.ts +2 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +6 -3
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/paths.js +1 -1
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/state-store-dynamo.d.ts +39 -0
- package/dist/shared/state-store-dynamo.d.ts.map +1 -0
- package/dist/shared/state-store-dynamo.js +143 -0
- package/dist/shared/state-store-dynamo.js.map +1 -0
- package/dist/shared/state-store-sqlite.d.ts +28 -0
- package/dist/shared/state-store-sqlite.d.ts.map +1 -0
- package/dist/shared/state-store-sqlite.js +78 -0
- package/dist/shared/state-store-sqlite.js.map +1 -0
- package/dist/shared/state-store.d.ts +51 -0
- package/dist/shared/state-store.d.ts.map +1 -0
- package/dist/shared/state-store.js +31 -0
- package/dist/shared/state-store.js.map +1 -0
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +3 -0
- package/dist/webhooks/providers/github.js.map +1 -1
- package/package.json +6 -2
package/dist/docker/runtime.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ export interface RunningAgent {
|
|
|
65
65
|
taskId: string;
|
|
66
66
|
status: string;
|
|
67
67
|
startedAt?: Date;
|
|
68
|
+
trigger?: string;
|
|
68
69
|
}
|
|
69
70
|
export interface ContainerRuntime {
|
|
70
71
|
/** Whether containers launched by this runtime need a gateway URL */
|
|
@@ -109,15 +110,15 @@ export interface ContainerRuntime {
|
|
|
109
110
|
* For cloud runtimes: no-op.
|
|
110
111
|
*/
|
|
111
112
|
cleanupCredentials(creds: RuntimeCredentials): void;
|
|
112
|
-
/** Fetch recent log entries for an agent. */
|
|
113
|
-
fetchLogs(agentName: string, limit: number): Promise<string[]>;
|
|
113
|
+
/** Fetch recent log entries for an agent, optionally filtered to a specific task/instance. */
|
|
114
|
+
fetchLogs(agentName: string, limit: number, taskId?: string): Promise<string[]>;
|
|
114
115
|
/**
|
|
115
116
|
* Follow logs for an agent by name, polling for new entries.
|
|
116
117
|
* Unlike streamLogs (which follows a specific running task), this polls the
|
|
117
118
|
* agent's log group directly — works even when no task is currently running.
|
|
118
119
|
* Returns a handle to stop polling.
|
|
119
120
|
*/
|
|
120
|
-
followLogs(agentName: string, onLine: (line: string) => void, onStderr?: (text: string) => void): {
|
|
121
|
+
followLogs(agentName: string, onLine: (line: string) => void, onStderr?: (text: string) => void, taskId?: string): {
|
|
121
122
|
stop: () => void;
|
|
122
123
|
};
|
|
123
124
|
/** Return a URL to the cloud console for this task/execution, or null for local runtimes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/docker/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/docker/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { StateStore } from "../shared/state-store.js";
|
|
1
2
|
export type CallStatus = "pending" | "running" | "completed" | "error";
|
|
2
3
|
export interface CallEntry {
|
|
3
4
|
callId: string;
|
|
@@ -15,7 +16,10 @@ export interface CallEntry {
|
|
|
15
16
|
export declare class CallStore {
|
|
16
17
|
private calls;
|
|
17
18
|
private sweepTimer;
|
|
18
|
-
|
|
19
|
+
private store?;
|
|
20
|
+
constructor(sweepIntervalSeconds?: number, store?: StateStore);
|
|
21
|
+
/** Hydrate in-memory state from the persistent store. */
|
|
22
|
+
init(): Promise<void>;
|
|
19
23
|
create(opts: {
|
|
20
24
|
callerAgent: string;
|
|
21
25
|
callerInstanceId: string;
|
|
@@ -34,6 +38,7 @@ export declare class CallStore {
|
|
|
34
38
|
get(callId: string): CallEntry | undefined;
|
|
35
39
|
failAllByCaller(callerInstanceId: string): number;
|
|
36
40
|
private sweep;
|
|
41
|
+
private persist;
|
|
37
42
|
dispose(): void;
|
|
38
43
|
}
|
|
39
44
|
//# sourceMappingURL=call-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-store.d.ts","sourceRoot":"","sources":["../../src/gateway/call-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"call-store.d.ts","sourceRoot":"","sources":["../../src/gateway/call-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,KAAK,CAAC,CAAa;gBAEf,oBAAoB,SAAK,EAAE,KAAK,CAAC,EAAE,UAAU;IAMzD,yDAAyD;IACnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,MAAM,CAAC,IAAI,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,SAAS;IAgBb,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAUvD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAUnD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAW3H,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAcjD,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,OAAO;IAMf,OAAO,IAAI,IAAI;CAOhB"}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
|
+
const NS = "calls";
|
|
2
3
|
export class CallStore {
|
|
3
4
|
calls = new Map();
|
|
4
5
|
sweepTimer;
|
|
5
|
-
|
|
6
|
+
store;
|
|
7
|
+
constructor(sweepIntervalSeconds = 60, store) {
|
|
8
|
+
this.store = store;
|
|
6
9
|
this.sweepTimer = setInterval(() => this.sweep(), sweepIntervalSeconds * 1000);
|
|
7
10
|
if (this.sweepTimer.unref)
|
|
8
11
|
this.sweepTimer.unref();
|
|
9
12
|
}
|
|
13
|
+
/** Hydrate in-memory state from the persistent store. */
|
|
14
|
+
async init() {
|
|
15
|
+
if (!this.store)
|
|
16
|
+
return;
|
|
17
|
+
const entries = await this.store.list(NS);
|
|
18
|
+
for (const { value } of entries) {
|
|
19
|
+
this.calls.set(value.callId, value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
10
22
|
create(opts) {
|
|
11
23
|
const entry = {
|
|
12
24
|
callId: randomUUID(),
|
|
@@ -19,6 +31,7 @@ export class CallStore {
|
|
|
19
31
|
depth: opts.depth,
|
|
20
32
|
};
|
|
21
33
|
this.calls.set(entry.callId, entry);
|
|
34
|
+
this.persist(entry);
|
|
22
35
|
return entry;
|
|
23
36
|
}
|
|
24
37
|
setRunning(callId) {
|
|
@@ -26,6 +39,7 @@ export class CallStore {
|
|
|
26
39
|
if (!entry || entry.status !== "pending")
|
|
27
40
|
return false;
|
|
28
41
|
entry.status = "running";
|
|
42
|
+
this.persist(entry);
|
|
29
43
|
return true;
|
|
30
44
|
}
|
|
31
45
|
complete(callId, returnValue) {
|
|
@@ -35,6 +49,7 @@ export class CallStore {
|
|
|
35
49
|
entry.status = "completed";
|
|
36
50
|
entry.returnValue = returnValue;
|
|
37
51
|
entry.completedAt = Date.now();
|
|
52
|
+
this.persist(entry);
|
|
38
53
|
return true;
|
|
39
54
|
}
|
|
40
55
|
fail(callId, errorMessage) {
|
|
@@ -44,6 +59,7 @@ export class CallStore {
|
|
|
44
59
|
entry.status = "error";
|
|
45
60
|
entry.errorMessage = errorMessage;
|
|
46
61
|
entry.completedAt = Date.now();
|
|
62
|
+
this.persist(entry);
|
|
47
63
|
return true;
|
|
48
64
|
}
|
|
49
65
|
check(callId, callerInstanceId) {
|
|
@@ -68,6 +84,7 @@ export class CallStore {
|
|
|
68
84
|
entry.status = "error";
|
|
69
85
|
entry.errorMessage = "caller container exited";
|
|
70
86
|
entry.completedAt = Date.now();
|
|
87
|
+
this.persist(entry);
|
|
71
88
|
count++;
|
|
72
89
|
}
|
|
73
90
|
}
|
|
@@ -81,15 +98,22 @@ export class CallStore {
|
|
|
81
98
|
if (entry.status === "completed" || entry.status === "error") {
|
|
82
99
|
if (entry.completedAt && now - entry.completedAt > TERMINAL_TTL) {
|
|
83
100
|
this.calls.delete(id);
|
|
101
|
+
this.store?.delete(NS, id).catch(() => { });
|
|
84
102
|
}
|
|
85
103
|
}
|
|
86
104
|
else if (now - entry.createdAt > ACTIVE_TTL) {
|
|
87
105
|
entry.status = "error";
|
|
88
106
|
entry.errorMessage = "call timed out";
|
|
89
107
|
entry.completedAt = now;
|
|
108
|
+
this.persist(entry);
|
|
90
109
|
}
|
|
91
110
|
}
|
|
92
111
|
}
|
|
112
|
+
persist(entry) {
|
|
113
|
+
// TTL: 2 hours for active, 10 minutes after completion
|
|
114
|
+
const ttlSec = entry.completedAt ? 600 : 7200;
|
|
115
|
+
this.store?.set(NS, entry.callId, entry, { ttl: ttlSec }).catch(() => { });
|
|
116
|
+
}
|
|
93
117
|
dispose() {
|
|
94
118
|
if (this.sweepTimer) {
|
|
95
119
|
clearInterval(this.sweepTimer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-store.js","sourceRoot":"","sources":["../../src/gateway/call-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"call-store.js","sourceRoot":"","sources":["../../src/gateway/call-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ContainerRegistration } from "./types.js";
|
|
2
|
+
import type { StateStore } from "../shared/state-store.js";
|
|
3
|
+
/**
|
|
4
|
+
* Container registry backed by a StateStore.
|
|
5
|
+
*
|
|
6
|
+
* Keeps an in-memory cache for fast synchronous lookups (used by every
|
|
7
|
+
* route handler). Writes go to both the cache and the persistent store,
|
|
8
|
+
* so registrations survive scheduler restarts.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ContainerRegistry {
|
|
11
|
+
private cache;
|
|
12
|
+
private store?;
|
|
13
|
+
constructor(store?: StateStore);
|
|
14
|
+
/** Hydrate the in-memory cache from the persistent store. */
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
/** Synchronous lookup — used by route handlers on every request. */
|
|
17
|
+
get(secret: string): ContainerRegistration | undefined;
|
|
18
|
+
/** Register a container. Persists to store. */
|
|
19
|
+
register(secret: string, reg: ContainerRegistration): Promise<void>;
|
|
20
|
+
/** Unregister a container. Persists to store. */
|
|
21
|
+
unregister(secret: string): Promise<void>;
|
|
22
|
+
/** Number of registered containers. */
|
|
23
|
+
get size(): number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=container-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-registry.d.ts","sourceRoot":"","sources":["../../src/gateway/container-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,KAAK,CAAC,CAAa;gBAEf,KAAK,CAAC,EAAE,UAAU;IAI9B,6DAA6D;IACvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,oEAAoE;IACpE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAItD,+CAA+C;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,iDAAiD;IAC3C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,uCAAuC;IACvC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const NS = "containers";
|
|
2
|
+
/**
|
|
3
|
+
* Container registry backed by a StateStore.
|
|
4
|
+
*
|
|
5
|
+
* Keeps an in-memory cache for fast synchronous lookups (used by every
|
|
6
|
+
* route handler). Writes go to both the cache and the persistent store,
|
|
7
|
+
* so registrations survive scheduler restarts.
|
|
8
|
+
*/
|
|
9
|
+
export class ContainerRegistry {
|
|
10
|
+
cache = new Map();
|
|
11
|
+
store;
|
|
12
|
+
constructor(store) {
|
|
13
|
+
this.store = store;
|
|
14
|
+
}
|
|
15
|
+
/** Hydrate the in-memory cache from the persistent store. */
|
|
16
|
+
async init() {
|
|
17
|
+
if (!this.store)
|
|
18
|
+
return;
|
|
19
|
+
const entries = await this.store.list(NS);
|
|
20
|
+
for (const { key, value } of entries) {
|
|
21
|
+
this.cache.set(key, value);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Synchronous lookup — used by route handlers on every request. */
|
|
25
|
+
get(secret) {
|
|
26
|
+
return this.cache.get(secret);
|
|
27
|
+
}
|
|
28
|
+
/** Register a container. Persists to store. */
|
|
29
|
+
async register(secret, reg) {
|
|
30
|
+
this.cache.set(secret, reg);
|
|
31
|
+
await this.store?.set(NS, secret, reg);
|
|
32
|
+
}
|
|
33
|
+
/** Unregister a container. Persists to store. */
|
|
34
|
+
async unregister(secret) {
|
|
35
|
+
this.cache.delete(secret);
|
|
36
|
+
await this.store?.delete(NS, secret);
|
|
37
|
+
}
|
|
38
|
+
/** Number of registered containers. */
|
|
39
|
+
get size() {
|
|
40
|
+
return this.cache.size;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=container-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-registry.js","sourceRoot":"","sources":["../../src/gateway/container-registry.ts"],"names":[],"mappings":"AAGA,MAAM,EAAE,GAAG,YAAY,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;IACjD,KAAK,CAAc;IAE3B,YAAY,KAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAwB,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,GAA0B;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
|
package/dist/gateway/index.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { type CallDispatcher } from "./routes/calls.js";
|
|
|
3
3
|
import { type SignalContext } from "./routes/signals.js";
|
|
4
4
|
import { LockStore } from "./lock-store.js";
|
|
5
5
|
import { CallStore } from "./call-store.js";
|
|
6
|
+
import { ContainerRegistry } from "./container-registry.js";
|
|
6
7
|
import type { ContainerRegistration } from "./types.js";
|
|
8
|
+
import type { StateStore } from "../shared/state-store.js";
|
|
7
9
|
import type { WebhookRegistry } from "../webhooks/registry.js";
|
|
8
10
|
import type { Logger } from "../shared/logger.js";
|
|
9
11
|
import type { StatusTracker } from "../tui/status-tracker.js";
|
|
@@ -23,11 +25,13 @@ export interface GatewayOptions {
|
|
|
23
25
|
signalContext?: SignalContext;
|
|
24
26
|
controlDeps?: ControlRoutesDeps;
|
|
25
27
|
apiKey?: string;
|
|
28
|
+
stateStore?: StateStore;
|
|
26
29
|
}
|
|
27
30
|
export interface GatewayServer {
|
|
28
31
|
server: Server;
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
containerRegistry: ContainerRegistry;
|
|
33
|
+
registerContainer: (secret: string, reg: ContainerRegistration) => Promise<void>;
|
|
34
|
+
unregisterContainer: (secret: string) => Promise<void>;
|
|
31
35
|
lockStore: LockStore;
|
|
32
36
|
callStore: CallStore;
|
|
33
37
|
setCallDispatcher: (dispatcher: CallDispatcher) => void;
|
|
@@ -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,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,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;AAK7D,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;
|
|
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;AAC5D,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;AAK7D,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;CACzB;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,CAmI/E"}
|
package/dist/gateway/index.js
CHANGED
|
@@ -4,20 +4,26 @@ import { registerShutdownRoute } from "./routes/shutdown.js";
|
|
|
4
4
|
import { registerLockRoutes } from "./routes/locks.js";
|
|
5
5
|
import { registerCallRoutes } from "./routes/calls.js";
|
|
6
6
|
import { registerWebhookRoutes } from "./routes/webhooks.js";
|
|
7
|
-
import { registerDashboardRoutes } from "./routes/dashboard.js";
|
|
7
|
+
import { registerDashboardRoutes, registerLoginRoutes } from "./routes/dashboard.js";
|
|
8
8
|
import { registerSignalRoutes } from "./routes/signals.js";
|
|
9
9
|
import { LockStore } from "./lock-store.js";
|
|
10
10
|
import { CallStore } from "./call-store.js";
|
|
11
|
+
import { ContainerRegistry } from "./container-registry.js";
|
|
11
12
|
import { withSpan, getTelemetry } from "../telemetry/index.js";
|
|
12
13
|
import { SpanKind } from "@opentelemetry/api";
|
|
13
14
|
import { authMiddleware } from "./auth.js";
|
|
14
15
|
export async function startGateway(opts) {
|
|
15
|
-
const { port, logger, killContainer, webhookRegistry, webhookSecrets, statusTracker, projectPath, webUI, lockTimeout, signalContext } = opts;
|
|
16
|
+
const { port, logger, killContainer, webhookRegistry, webhookSecrets, statusTracker, projectPath, webUI, lockTimeout, signalContext, stateStore } = opts;
|
|
16
17
|
const app = new Hono();
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
18
|
+
// Create stores backed by the persistent StateStore (if provided).
|
|
19
|
+
const containerRegistry = new ContainerRegistry(stateStore);
|
|
20
|
+
const lockStore = new LockStore(lockTimeout, undefined, stateStore);
|
|
21
|
+
const callStore = new CallStore(undefined, stateStore);
|
|
20
22
|
let callDispatcher;
|
|
23
|
+
// Hydrate in-memory caches from the persistent store.
|
|
24
|
+
await containerRegistry.init();
|
|
25
|
+
await lockStore.init();
|
|
26
|
+
await callStore.init();
|
|
21
27
|
// Add telemetry middleware for HTTP requests
|
|
22
28
|
const telemetry = getTelemetry();
|
|
23
29
|
if (telemetry) {
|
|
@@ -50,6 +56,8 @@ export async function startGateway(opts) {
|
|
|
50
56
|
app.use("/dashboard/*", auth);
|
|
51
57
|
app.use("/dashboard", auth);
|
|
52
58
|
app.use("/locks/status", auth);
|
|
59
|
+
// Always register login/logout so the auth redirect has a target
|
|
60
|
+
registerLoginRoutes(app, opts.apiKey);
|
|
53
61
|
}
|
|
54
62
|
const isPublic = opts.hostname === "0.0.0.0";
|
|
55
63
|
registerLockRoutes(app, containerRegistry, lockStore, logger, {
|
|
@@ -65,6 +73,7 @@ export async function startGateway(opts) {
|
|
|
65
73
|
// Dashboard routes (login/logout are unprotected; dashboard pages are behind authMiddleware above)
|
|
66
74
|
if (webUI && statusTracker) {
|
|
67
75
|
registerDashboardRoutes(app, statusTracker, projectPath, opts.apiKey);
|
|
76
|
+
app.get("/", (c) => c.redirect("/dashboard"));
|
|
68
77
|
}
|
|
69
78
|
// Control routes (for kill, pause, resume commands)
|
|
70
79
|
if (opts.controlDeps) {
|
|
@@ -80,10 +89,10 @@ export async function startGateway(opts) {
|
|
|
80
89
|
server.on("listening", resolve);
|
|
81
90
|
});
|
|
82
91
|
logger.info({ port }, "Gateway server listening");
|
|
83
|
-
const registerContainer = (secret, reg) => {
|
|
84
|
-
containerRegistry.
|
|
92
|
+
const registerContainer = async (secret, reg) => {
|
|
93
|
+
await containerRegistry.register(secret, reg);
|
|
85
94
|
};
|
|
86
|
-
const unregisterContainer = (secret) => {
|
|
95
|
+
const unregisterContainer = async (secret) => {
|
|
87
96
|
const reg = containerRegistry.get(secret);
|
|
88
97
|
if (reg) {
|
|
89
98
|
const released = lockStore.releaseAll(reg.instanceId);
|
|
@@ -95,7 +104,7 @@ export async function startGateway(opts) {
|
|
|
95
104
|
logger.info({ agent: reg.agentName, instance: reg.instanceId, failedCalls }, "failed pending calls on container cleanup");
|
|
96
105
|
}
|
|
97
106
|
}
|
|
98
|
-
containerRegistry.
|
|
107
|
+
await containerRegistry.unregister(secret);
|
|
99
108
|
};
|
|
100
109
|
const setCallDispatcher = (dispatcher) => {
|
|
101
110
|
callDispatcher = dispatcher;
|
|
@@ -105,6 +114,6 @@ export async function startGateway(opts) {
|
|
|
105
114
|
callStore.dispose();
|
|
106
115
|
server.close(() => resolve());
|
|
107
116
|
});
|
|
108
|
-
return { server, registerContainer, unregisterContainer, lockStore, callStore, setCallDispatcher, close };
|
|
117
|
+
return { server, containerRegistry, registerContainer, unregisterContainer, lockStore, callStore, setCallDispatcher, close };
|
|
109
118
|
}
|
|
110
119
|
//# sourceMappingURL=index.js.map
|
|
@@ -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,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { StateStore } from "../shared/state-store.js";
|
|
1
2
|
export interface LockEntry {
|
|
2
3
|
resourceKey: string;
|
|
3
4
|
holder: string;
|
|
@@ -24,13 +25,18 @@ export declare class LockStore {
|
|
|
24
25
|
private holderLocks;
|
|
25
26
|
private sweepTimer;
|
|
26
27
|
private defaultTTL;
|
|
27
|
-
|
|
28
|
+
private store?;
|
|
29
|
+
constructor(defaultTTLSeconds?: number, sweepIntervalSeconds?: number, store?: StateStore);
|
|
30
|
+
/** Hydrate in-memory state from the persistent store. */
|
|
31
|
+
init(): Promise<void>;
|
|
28
32
|
acquire(resourceKey: string, holder: string, ttlSeconds?: number): AcquireResult;
|
|
29
33
|
release(resourceKey: string, holder: string): ReleaseResult;
|
|
30
34
|
heartbeat(resourceKey: string, holder: string, ttlSeconds?: number): HeartbeatResult;
|
|
31
35
|
releaseAll(holder: string): number;
|
|
32
36
|
list(holder?: string): LockEntry[];
|
|
33
37
|
private sweep;
|
|
38
|
+
private persistSet;
|
|
39
|
+
private persistDelete;
|
|
34
40
|
dispose(): void;
|
|
35
41
|
}
|
|
36
42
|
//# 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,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;CACjB;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;
|
|
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;CACjB;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,CAA6B;IAChD,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;IAwChF,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;IAalC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAWlC,OAAO,CAAC,KAAK;IAWb,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,aAAa;IAKrB,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
|
+
const NS_LOCKS = "locks";
|
|
2
|
+
const NS_HOLDERS = "lock-holders";
|
|
1
3
|
export class LockStore {
|
|
2
4
|
locks = new Map();
|
|
3
5
|
holderLocks = new Map(); // holder -> resourceKey
|
|
4
6
|
sweepTimer;
|
|
5
7
|
defaultTTL;
|
|
6
|
-
|
|
8
|
+
store;
|
|
9
|
+
constructor(defaultTTLSeconds = 1800, sweepIntervalSeconds = 30, store) {
|
|
7
10
|
this.defaultTTL = defaultTTLSeconds * 1000;
|
|
11
|
+
this.store = store;
|
|
8
12
|
this.sweepTimer = setInterval(() => this.sweep(), sweepIntervalSeconds * 1000);
|
|
9
13
|
if (this.sweepTimer.unref)
|
|
10
14
|
this.sweepTimer.unref();
|
|
11
15
|
}
|
|
16
|
+
/** Hydrate in-memory state from the persistent store. */
|
|
17
|
+
async init() {
|
|
18
|
+
if (!this.store)
|
|
19
|
+
return;
|
|
20
|
+
const entries = await this.store.list(NS_LOCKS);
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
for (const { value } of entries) {
|
|
23
|
+
if (now < value.expiresAt) {
|
|
24
|
+
this.locks.set(value.resourceKey, value);
|
|
25
|
+
this.holderLocks.set(value.holder, value.resourceKey);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
12
29
|
acquire(resourceKey, holder, ttlSeconds) {
|
|
13
30
|
const existing = this.locks.get(resourceKey);
|
|
14
31
|
// Check if this holder already holds a different lock
|
|
@@ -24,12 +41,14 @@ export class LockStore {
|
|
|
24
41
|
// Expired — clean up
|
|
25
42
|
this.locks.delete(existingHolderKey);
|
|
26
43
|
this.holderLocks.delete(holder);
|
|
44
|
+
this.persistDelete(existingHolderKey, holder);
|
|
27
45
|
}
|
|
28
46
|
if (existing) {
|
|
29
47
|
if (Date.now() >= existing.expiresAt) {
|
|
30
48
|
// Expired — evict
|
|
31
49
|
this.holderLocks.delete(existing.holder);
|
|
32
50
|
this.locks.delete(resourceKey);
|
|
51
|
+
this.persistDelete(resourceKey, existing.holder);
|
|
33
52
|
}
|
|
34
53
|
else if (existing.holder !== holder) {
|
|
35
54
|
return { ok: false, holder: existing.holder, heldSince: existing.heldSince };
|
|
@@ -38,13 +57,10 @@ export class LockStore {
|
|
|
38
57
|
}
|
|
39
58
|
const now = Date.now();
|
|
40
59
|
const ttl = ttlSeconds ? ttlSeconds * 1000 : this.defaultTTL;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
holder,
|
|
44
|
-
heldSince: now,
|
|
45
|
-
expiresAt: now + ttl,
|
|
46
|
-
});
|
|
60
|
+
const entry = { resourceKey, holder, heldSince: now, expiresAt: now + ttl };
|
|
61
|
+
this.locks.set(resourceKey, entry);
|
|
47
62
|
this.holderLocks.set(holder, resourceKey);
|
|
63
|
+
this.persistSet(entry);
|
|
48
64
|
return { ok: true };
|
|
49
65
|
}
|
|
50
66
|
release(resourceKey, holder) {
|
|
@@ -53,6 +69,7 @@ export class LockStore {
|
|
|
53
69
|
this.locks.delete(resourceKey);
|
|
54
70
|
if (this.holderLocks.get(holder) === resourceKey)
|
|
55
71
|
this.holderLocks.delete(holder);
|
|
72
|
+
this.persistDelete(resourceKey, holder);
|
|
56
73
|
return { ok: false, reason: "lock not found" };
|
|
57
74
|
}
|
|
58
75
|
if (existing.holder !== holder) {
|
|
@@ -60,6 +77,7 @@ export class LockStore {
|
|
|
60
77
|
}
|
|
61
78
|
this.locks.delete(resourceKey);
|
|
62
79
|
this.holderLocks.delete(holder);
|
|
80
|
+
this.persistDelete(resourceKey, holder);
|
|
63
81
|
return { ok: true };
|
|
64
82
|
}
|
|
65
83
|
heartbeat(resourceKey, holder, ttlSeconds) {
|
|
@@ -73,6 +91,7 @@ export class LockStore {
|
|
|
73
91
|
}
|
|
74
92
|
const ttl = ttlSeconds ? ttlSeconds * 1000 : this.defaultTTL;
|
|
75
93
|
existing.expiresAt = Date.now() + ttl;
|
|
94
|
+
this.persistSet(existing);
|
|
76
95
|
return { ok: true, expiresAt: existing.expiresAt };
|
|
77
96
|
}
|
|
78
97
|
releaseAll(holder) {
|
|
@@ -80,6 +99,7 @@ export class LockStore {
|
|
|
80
99
|
for (const [rk, entry] of this.locks) {
|
|
81
100
|
if (entry.holder === holder) {
|
|
82
101
|
this.locks.delete(rk);
|
|
102
|
+
this.persistDelete(rk, holder);
|
|
83
103
|
count++;
|
|
84
104
|
}
|
|
85
105
|
}
|
|
@@ -104,9 +124,19 @@ export class LockStore {
|
|
|
104
124
|
if (now >= entry.expiresAt) {
|
|
105
125
|
this.holderLocks.delete(entry.holder);
|
|
106
126
|
this.locks.delete(rk);
|
|
127
|
+
this.persistDelete(rk, entry.holder);
|
|
107
128
|
}
|
|
108
129
|
}
|
|
109
130
|
}
|
|
131
|
+
persistSet(entry) {
|
|
132
|
+
const ttlSec = Math.max(1, Math.ceil((entry.expiresAt - Date.now()) / 1000));
|
|
133
|
+
this.store?.set(NS_LOCKS, entry.resourceKey, entry, { ttl: ttlSec }).catch(() => { });
|
|
134
|
+
this.store?.set(NS_HOLDERS, entry.holder, entry.resourceKey, { ttl: ttlSec }).catch(() => { });
|
|
135
|
+
}
|
|
136
|
+
persistDelete(resourceKey, holder) {
|
|
137
|
+
this.store?.delete(NS_LOCKS, resourceKey).catch(() => { });
|
|
138
|
+
this.store?.delete(NS_HOLDERS, holder).catch(() => { });
|
|
139
|
+
}
|
|
110
140
|
dispose() {
|
|
111
141
|
if (this.sweepTimer) {
|
|
112
142
|
clearInterval(this.sweepTimer);
|
|
@@ -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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Hono } from "hono";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ContainerRegistry } from "../container-registry.js";
|
|
3
3
|
import type { CallStore } from "../call-store.js";
|
|
4
4
|
import type { Logger } from "../../shared/logger.js";
|
|
5
5
|
export type CallDispatcher = (entry: {
|
|
@@ -13,5 +13,5 @@ export type CallDispatcher = (entry: {
|
|
|
13
13
|
ok: boolean;
|
|
14
14
|
reason?: string;
|
|
15
15
|
};
|
|
16
|
-
export declare function registerCallRoutes(app: Hono, containerRegistry:
|
|
16
|
+
export declare function registerCallRoutes(app: Hono, containerRegistry: ContainerRegistry, callStore: CallStore, getDispatcher: () => CallDispatcher | undefined, logger: Logger): void;
|
|
17
17
|
//# sourceMappingURL=calls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjM,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,EACT,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,MAAM,cAAc,GAAG,SAAS,EAC/C,MAAM,EAAE,MAAM,GACb,IAAI,CAsEN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../src/gateway/routes/calls.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,kBAAkB,CAChC,GAAS,EACT,
|
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../src/gateway/routes/calls.ts"],"names":[],"mappings":"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"}
|