@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.
Files changed (112) hide show
  1. package/dist/agents/prompt.d.ts.map +1 -1
  2. package/dist/agents/prompt.js +11 -49
  3. package/dist/agents/prompt.js.map +1 -1
  4. package/dist/agents/scheduler-tools.d.ts +7 -0
  5. package/dist/agents/scheduler-tools.d.ts.map +1 -1
  6. package/dist/agents/scheduler-tools.js +99 -1
  7. package/dist/agents/scheduler-tools.js.map +1 -1
  8. package/dist/agents/status-reporter.d.ts +1 -1
  9. package/dist/agents/status-reporter.js +1 -1
  10. package/dist/agents/transport-runner.d.ts +28 -0
  11. package/dist/agents/transport-runner.d.ts.map +1 -1
  12. package/dist/agents/transport-runner.js +192 -54
  13. package/dist/agents/transport-runner.js.map +1 -1
  14. package/dist/build-info.json +1 -1
  15. package/dist/cli/commands/logs.d.ts.map +1 -1
  16. package/dist/cli/commands/logs.js +51 -339
  17. package/dist/cli/commands/logs.js.map +1 -1
  18. package/dist/control/routes/dashboard-api.d.ts.map +1 -1
  19. package/dist/control/routes/dashboard-api.js +2 -1
  20. package/dist/control/routes/dashboard-api.js.map +1 -1
  21. package/dist/control/session-store.js +1 -1
  22. package/dist/control/session-store.js.map +1 -1
  23. package/dist/docker/image.d.ts +33 -0
  24. package/dist/docker/image.d.ts.map +1 -0
  25. package/dist/docker/image.js +103 -0
  26. package/dist/docker/image.js.map +1 -0
  27. package/dist/docker/local-runtime.js +1 -1
  28. package/dist/docker/local-runtime.js.map +1 -1
  29. package/dist/docker/ssh-docker-runtime.js +1 -1
  30. package/dist/docker/ssh-docker-runtime.js.map +1 -1
  31. package/dist/execution/execution.d.ts +4 -1
  32. package/dist/execution/execution.d.ts.map +1 -1
  33. package/dist/execution/execution.js +9 -0
  34. package/dist/execution/execution.js.map +1 -1
  35. package/dist/execution/lifecycle/agent-lifecycle.d.ts +7 -0
  36. package/dist/execution/lifecycle/agent-lifecycle.d.ts.map +1 -1
  37. package/dist/execution/lifecycle/agent-lifecycle.js +65 -5
  38. package/dist/execution/lifecycle/agent-lifecycle.js.map +1 -1
  39. package/dist/execution/lifecycle/index.d.ts +2 -2
  40. package/dist/execution/lifecycle/index.d.ts.map +1 -1
  41. package/dist/execution/lifecycle/index.js +4 -2
  42. package/dist/execution/lifecycle/index.js.map +1 -1
  43. package/dist/execution/lifecycle/instance-lifecycle.d.ts +24 -0
  44. package/dist/execution/lifecycle/instance-lifecycle.d.ts.map +1 -1
  45. package/dist/execution/lifecycle/instance-lifecycle.js +41 -3
  46. package/dist/execution/lifecycle/instance-lifecycle.js.map +1 -1
  47. package/dist/execution/runner-setup.d.ts +3 -0
  48. package/dist/execution/runner-setup.d.ts.map +1 -1
  49. package/dist/execution/runner-setup.js +2 -1
  50. package/dist/execution/runner-setup.js.map +1 -1
  51. package/dist/execution/waiting-registry.d.ts +84 -0
  52. package/dist/execution/waiting-registry.d.ts.map +1 -0
  53. package/dist/execution/waiting-registry.js +185 -0
  54. package/dist/execution/waiting-registry.js.map +1 -0
  55. package/dist/frontend/assets/index-Bij4b7-g.js +16 -0
  56. package/dist/frontend/assets/index-Bij4b7-g.js.map +1 -0
  57. package/dist/frontend/assets/index-D11bfFWQ.css +2 -0
  58. package/dist/frontend/index.html +2 -2
  59. package/dist/scheduler/index.d.ts.map +1 -1
  60. package/dist/scheduler/index.js +21 -3
  61. package/dist/scheduler/index.js.map +1 -1
  62. package/dist/scheduler/types.d.ts +1 -1
  63. package/dist/scheduler/types.d.ts.map +1 -1
  64. package/dist/shared/config/types.d.ts +2 -0
  65. package/dist/shared/config/types.d.ts.map +1 -1
  66. package/dist/shared/constants.d.ts +2 -0
  67. package/dist/shared/constants.d.ts.map +1 -1
  68. package/dist/shared/constants.js +2 -0
  69. package/dist/shared/constants.js.map +1 -1
  70. package/dist/transport/docker-exec.d.ts +2 -2
  71. package/dist/transport/docker-exec.d.ts.map +1 -1
  72. package/dist/transport/docker-exec.js +22 -110
  73. package/dist/transport/docker-exec.js.map +1 -1
  74. package/dist/transport/host-user.js +1 -1
  75. package/dist/transport/host-user.js.map +1 -1
  76. package/dist/transport/memory.d.ts +1 -0
  77. package/dist/transport/memory.d.ts.map +1 -1
  78. package/dist/transport/memory.js +3 -0
  79. package/dist/transport/memory.js.map +1 -1
  80. package/dist/transport/ssh.js +1 -1
  81. package/dist/transport/ssh.js.map +1 -1
  82. package/dist/transport/transport.d.ts +2 -0
  83. package/dist/transport/transport.d.ts.map +1 -1
  84. package/dist/transport/transport.js.map +1 -1
  85. package/dist/tui/App.d.ts.map +1 -1
  86. package/dist/tui/App.js +5 -4
  87. package/dist/tui/App.js.map +1 -1
  88. package/dist/tui/status-tracker.d.ts +11 -2
  89. package/dist/tui/status-tracker.d.ts.map +1 -1
  90. package/dist/tui/status-tracker.js +44 -0
  91. package/dist/tui/status-tracker.js.map +1 -1
  92. package/package.json +7 -2
  93. package/dist/agents/bash-prefix.d.ts +0 -9
  94. package/dist/agents/bash-prefix.d.ts.map +0 -1
  95. package/dist/agents/bash-prefix.js +0 -25
  96. package/dist/agents/bash-prefix.js.map +0 -1
  97. package/dist/frontend/assets/index-DnSu-8Kw.js +0 -16
  98. package/dist/frontend/assets/index-DnSu-8Kw.js.map +0 -1
  99. package/dist/frontend/assets/index-Z0IOXEax.css +0 -2
  100. package/docker/bin/_http-exit +0 -35
  101. package/docker/bin/al-exit +0 -4
  102. package/docker/bin/al-export +0 -50
  103. package/docker/bin/al-rerun +0 -8
  104. package/docker/bin/al-return +0 -14
  105. package/docker/bin/al-shutdown +0 -5
  106. package/docker/bin/al-status +0 -9
  107. package/docker/bin/al-subagent +0 -13
  108. package/docker/bin/al-subagent-check +0 -10
  109. package/docker/bin/al-subagent-wait +0 -37
  110. package/docker/bin/rlock +0 -12
  111. package/docker/bin/rlock-heartbeat +0 -12
  112. 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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"}