@action-llama/action-llama 0.28.0 → 0.29.0
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/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +11 -49
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/scheduler-tools.d.ts +7 -0
- package/dist/agents/scheduler-tools.d.ts.map +1 -1
- package/dist/agents/scheduler-tools.js +99 -1
- package/dist/agents/scheduler-tools.js.map +1 -1
- package/dist/agents/status-reporter.d.ts +1 -1
- package/dist/agents/status-reporter.js +1 -1
- package/dist/agents/transport-runner.d.ts +28 -0
- package/dist/agents/transport-runner.d.ts.map +1 -1
- package/dist/agents/transport-runner.js +192 -54
- package/dist/agents/transport-runner.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +51 -339
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/control/routes/dashboard-api.d.ts.map +1 -1
- package/dist/control/routes/dashboard-api.js +2 -1
- package/dist/control/routes/dashboard-api.js.map +1 -1
- package/dist/control/session-store.js +1 -1
- package/dist/control/session-store.js.map +1 -1
- package/dist/docker/image.d.ts +33 -0
- package/dist/docker/image.d.ts.map +1 -0
- package/dist/docker/image.js +103 -0
- package/dist/docker/image.js.map +1 -0
- package/dist/docker/local-runtime.js +1 -1
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/ssh-docker-runtime.js +1 -1
- package/dist/docker/ssh-docker-runtime.js.map +1 -1
- package/dist/execution/execution.d.ts +4 -1
- package/dist/execution/execution.d.ts.map +1 -1
- package/dist/execution/execution.js +9 -0
- package/dist/execution/execution.js.map +1 -1
- package/dist/execution/lifecycle/agent-lifecycle.d.ts +7 -0
- package/dist/execution/lifecycle/agent-lifecycle.d.ts.map +1 -1
- package/dist/execution/lifecycle/agent-lifecycle.js +65 -5
- package/dist/execution/lifecycle/agent-lifecycle.js.map +1 -1
- package/dist/execution/lifecycle/index.d.ts +2 -2
- package/dist/execution/lifecycle/index.d.ts.map +1 -1
- package/dist/execution/lifecycle/index.js +4 -2
- package/dist/execution/lifecycle/index.js.map +1 -1
- package/dist/execution/lifecycle/instance-lifecycle.d.ts +24 -0
- package/dist/execution/lifecycle/instance-lifecycle.d.ts.map +1 -1
- package/dist/execution/lifecycle/instance-lifecycle.js +41 -3
- package/dist/execution/lifecycle/instance-lifecycle.js.map +1 -1
- package/dist/execution/runner-setup.d.ts +3 -0
- package/dist/execution/runner-setup.d.ts.map +1 -1
- package/dist/execution/runner-setup.js +2 -1
- package/dist/execution/runner-setup.js.map +1 -1
- package/dist/execution/waiting-registry.d.ts +84 -0
- package/dist/execution/waiting-registry.d.ts.map +1 -0
- package/dist/execution/waiting-registry.js +185 -0
- package/dist/execution/waiting-registry.js.map +1 -0
- package/dist/frontend/assets/index-Bij4b7-g.js +16 -0
- package/dist/frontend/assets/index-Bij4b7-g.js.map +1 -0
- package/dist/frontend/assets/index-D11bfFWQ.css +2 -0
- package/dist/frontend/index.html +2 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +21 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/shared/config/types.d.ts +2 -0
- package/dist/shared/config/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +2 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/transport/docker-exec.d.ts +2 -2
- package/dist/transport/docker-exec.d.ts.map +1 -1
- package/dist/transport/docker-exec.js +22 -110
- package/dist/transport/docker-exec.js.map +1 -1
- package/dist/transport/host-user.js +1 -1
- package/dist/transport/host-user.js.map +1 -1
- package/dist/transport/memory.d.ts +1 -0
- package/dist/transport/memory.d.ts.map +1 -1
- package/dist/transport/memory.js +3 -0
- package/dist/transport/memory.js.map +1 -1
- package/dist/transport/ssh.js +1 -1
- package/dist/transport/ssh.js.map +1 -1
- package/dist/transport/transport.d.ts +2 -0
- package/dist/transport/transport.d.ts.map +1 -1
- package/dist/transport/transport.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +5 -4
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +11 -2
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +44 -0
- package/dist/tui/status-tracker.js.map +1 -1
- package/package.json +7 -2
- package/dist/agents/bash-prefix.d.ts +0 -9
- package/dist/agents/bash-prefix.d.ts.map +0 -1
- package/dist/agents/bash-prefix.js +0 -25
- package/dist/agents/bash-prefix.js.map +0 -1
- package/dist/frontend/assets/index-DnSu-8Kw.js +0 -16
- package/dist/frontend/assets/index-DnSu-8Kw.js.map +0 -1
- package/dist/frontend/assets/index-Z0IOXEax.css +0 -2
- package/docker/bin/_http-exit +0 -35
- package/docker/bin/al-exit +0 -4
- package/docker/bin/al-export +0 -50
- package/docker/bin/al-rerun +0 -8
- package/docker/bin/al-return +0 -14
- package/docker/bin/al-shutdown +0 -5
- package/docker/bin/al-status +0 -9
- package/docker/bin/al-subagent +0 -13
- package/docker/bin/al-subagent-check +0 -10
- package/docker/bin/al-subagent-wait +0 -37
- package/docker/bin/rlock +0 -12
- package/docker/bin/rlock-heartbeat +0 -12
- package/docker/bin/runlock +0 -12
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WaitingRegistry — tracks agent instances that are suspended mid-conversation,
|
|
3
|
+
* waiting for a specific trigger (webhook or agent-trigger) to resume.
|
|
4
|
+
*
|
|
5
|
+
* Instances are matched FIFO within each agent. The registry is the single source
|
|
6
|
+
* of truth for all waiting instances and handles matching, timeout cleanup, and
|
|
7
|
+
* persistence to the KV store for restart recovery.
|
|
8
|
+
*/
|
|
9
|
+
// ── Dot-path matching helper ─────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Check if a dot-path key matches a value in an object.
|
|
12
|
+
* e.g. matchDotPath({ a: { b: "c" } }, "a.b", "c") → true
|
|
13
|
+
*/
|
|
14
|
+
export function matchDotPath(obj, key, value) {
|
|
15
|
+
const parts = key.split(".");
|
|
16
|
+
let current = obj;
|
|
17
|
+
for (const part of parts) {
|
|
18
|
+
if (current == null || typeof current !== "object")
|
|
19
|
+
return false;
|
|
20
|
+
current = current[part];
|
|
21
|
+
}
|
|
22
|
+
return String(current) === value;
|
|
23
|
+
}
|
|
24
|
+
// ── Registry ─────────────────────────────────────────────────
|
|
25
|
+
const KV_NAMESPACE = "waiting-instances";
|
|
26
|
+
export class WaitingRegistry {
|
|
27
|
+
entries = new Map();
|
|
28
|
+
/**
|
|
29
|
+
* Register a waiting instance. Starts its timeout timer.
|
|
30
|
+
*/
|
|
31
|
+
register(entry) {
|
|
32
|
+
// Start timeout timer
|
|
33
|
+
const remaining = entry.deadline - Date.now();
|
|
34
|
+
if (remaining <= 0) {
|
|
35
|
+
// Already expired — reject immediately
|
|
36
|
+
entry.reject?.(new Error("Wait timeout expired before registration"));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
entry.timeoutTimer = setTimeout(() => {
|
|
40
|
+
const removed = this.remove(entry.instanceId);
|
|
41
|
+
if (removed) {
|
|
42
|
+
removed.reject?.(new Error("Wait timeout expired"));
|
|
43
|
+
}
|
|
44
|
+
}, remaining);
|
|
45
|
+
entry.timeoutTimer.unref?.();
|
|
46
|
+
this.entries.set(entry.instanceId, entry);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Find and remove a matching waiting instance for a webhook trigger (FIFO).
|
|
50
|
+
* Returns null if no match found.
|
|
51
|
+
*/
|
|
52
|
+
matchWebhook(agentName, context) {
|
|
53
|
+
// Find all entries for this agent, sorted by registeredAt (FIFO)
|
|
54
|
+
const candidates = this.getByAgent(agentName)
|
|
55
|
+
.filter((e) => e.filter.type === "webhook")
|
|
56
|
+
.sort((a, b) => a.registeredAt - b.registeredAt);
|
|
57
|
+
for (const entry of candidates) {
|
|
58
|
+
const filter = entry.filter;
|
|
59
|
+
// Check source filter
|
|
60
|
+
if (filter.source && filter.source !== context.source)
|
|
61
|
+
continue;
|
|
62
|
+
// Check event filter
|
|
63
|
+
if (filter.event && filter.event !== context.event)
|
|
64
|
+
continue;
|
|
65
|
+
// Check dot-path match predicates on the context
|
|
66
|
+
if (filter.match) {
|
|
67
|
+
let allMatch = true;
|
|
68
|
+
for (const [key, value] of Object.entries(filter.match)) {
|
|
69
|
+
if (!matchDotPath(context, key, value)) {
|
|
70
|
+
allMatch = false;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!allMatch)
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Match found — remove from registry and clear timeout
|
|
78
|
+
return this._removeAndCleanup(entry.instanceId);
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Find and remove a matching waiting instance for an agent trigger (FIFO).
|
|
84
|
+
* Returns null if no match found.
|
|
85
|
+
*/
|
|
86
|
+
matchAgentTrigger(agentName, sourceAgent) {
|
|
87
|
+
const candidates = this.getByAgent(agentName)
|
|
88
|
+
.filter((e) => e.filter.type === "agent-trigger")
|
|
89
|
+
.sort((a, b) => a.registeredAt - b.registeredAt);
|
|
90
|
+
for (const entry of candidates) {
|
|
91
|
+
const filter = entry.filter;
|
|
92
|
+
// If sourceAgent is specified, it must match
|
|
93
|
+
if (filter.sourceAgent && filter.sourceAgent !== sourceAgent)
|
|
94
|
+
continue;
|
|
95
|
+
return this._removeAndCleanup(entry.instanceId);
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Remove a waiting instance by ID (for timeout/kill).
|
|
101
|
+
*/
|
|
102
|
+
remove(instanceId) {
|
|
103
|
+
return this._removeAndCleanup(instanceId);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get all waiting instances for a specific agent.
|
|
107
|
+
*/
|
|
108
|
+
getByAgent(agentName) {
|
|
109
|
+
return Array.from(this.entries.values()).filter((e) => e.agentName === agentName);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get all waiting instances.
|
|
113
|
+
*/
|
|
114
|
+
getAll() {
|
|
115
|
+
return Array.from(this.entries.values());
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the total number of waiting instances.
|
|
119
|
+
*/
|
|
120
|
+
count() {
|
|
121
|
+
return this.entries.size;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Persist all waiting instances to the KV store.
|
|
125
|
+
*/
|
|
126
|
+
async persist(store) {
|
|
127
|
+
// Clear existing entries
|
|
128
|
+
await store.kv.deleteAll(KV_NAMESPACE);
|
|
129
|
+
for (const entry of this.entries.values()) {
|
|
130
|
+
const persisted = {
|
|
131
|
+
instanceId: entry.instanceId,
|
|
132
|
+
agentName: entry.agentName,
|
|
133
|
+
filter: entry.filter,
|
|
134
|
+
deadline: entry.deadline,
|
|
135
|
+
registeredAt: entry.registeredAt,
|
|
136
|
+
runId: entry.runId,
|
|
137
|
+
runtimeType: entry.runtimeType,
|
|
138
|
+
cwd: entry.cwd,
|
|
139
|
+
};
|
|
140
|
+
await store.kv.set(KV_NAMESPACE, entry.instanceId, persisted);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Rehydrate waiting instances from the KV store.
|
|
145
|
+
* Returns a new registry with loaded entries (no in-memory resolve/reject callbacks).
|
|
146
|
+
*/
|
|
147
|
+
static async rehydrate(store) {
|
|
148
|
+
const registry = new WaitingRegistry();
|
|
149
|
+
const entries = await store.kv.list(KV_NAMESPACE);
|
|
150
|
+
const now = Date.now();
|
|
151
|
+
for (const { value } of entries) {
|
|
152
|
+
// Skip expired entries
|
|
153
|
+
if (value.deadline <= now) {
|
|
154
|
+
await store.kv.delete(KV_NAMESPACE, value.instanceId);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const entry = {
|
|
158
|
+
...value,
|
|
159
|
+
// No resolve/reject — cold restart instances get new runners on match
|
|
160
|
+
};
|
|
161
|
+
// Start timeout timer for remaining time
|
|
162
|
+
entry.timeoutTimer = setTimeout(() => {
|
|
163
|
+
registry.remove(entry.instanceId);
|
|
164
|
+
}, entry.deadline - now);
|
|
165
|
+
entry.timeoutTimer.unref?.();
|
|
166
|
+
registry.entries.set(entry.instanceId, entry);
|
|
167
|
+
}
|
|
168
|
+
return registry;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Remove an entry and clean up its timeout timer.
|
|
172
|
+
*/
|
|
173
|
+
_removeAndCleanup(instanceId) {
|
|
174
|
+
const entry = this.entries.get(instanceId);
|
|
175
|
+
if (!entry)
|
|
176
|
+
return null;
|
|
177
|
+
this.entries.delete(instanceId);
|
|
178
|
+
if (entry.timeoutTimer) {
|
|
179
|
+
clearTimeout(entry.timeoutTimer);
|
|
180
|
+
entry.timeoutTimer = undefined;
|
|
181
|
+
}
|
|
182
|
+
return entry;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=waiting-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waiting-registry.js","sourceRoot":"","sources":["../../src/execution/waiting-registry.ts"],"names":[],"mappings":"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"}
|