@action-llama/action-llama 0.12.0 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/cli/commands/chat.js +1 -1
  3. package/dist/cli/commands/chat.js.map +1 -1
  4. package/dist/cli/commands/kill.d.ts.map +1 -1
  5. package/dist/cli/commands/kill.js +1 -0
  6. package/dist/cli/commands/kill.js.map +1 -1
  7. package/dist/cli/commands/logs.js +3 -3
  8. package/dist/cli/commands/logs.js.map +1 -1
  9. package/dist/cli/commands/pause.d.ts.map +1 -1
  10. package/dist/cli/commands/pause.js +1 -0
  11. package/dist/cli/commands/pause.js.map +1 -1
  12. package/dist/cli/commands/push.d.ts.map +1 -1
  13. package/dist/cli/commands/push.js +0 -1
  14. package/dist/cli/commands/push.js.map +1 -1
  15. package/dist/cli/commands/resume.d.ts.map +1 -1
  16. package/dist/cli/commands/resume.js +1 -0
  17. package/dist/cli/commands/resume.js.map +1 -1
  18. package/dist/cli/commands/start.d.ts +1 -0
  19. package/dist/cli/commands/start.d.ts.map +1 -1
  20. package/dist/cli/commands/start.js +6 -0
  21. package/dist/cli/commands/start.js.map +1 -1
  22. package/dist/cli/commands/status.js +2 -2
  23. package/dist/cli/commands/status.js.map +1 -1
  24. package/dist/cli/gateway-client.d.ts +4 -2
  25. package/dist/cli/gateway-client.d.ts.map +1 -1
  26. package/dist/cli/gateway-client.js +6 -4
  27. package/dist/cli/gateway-client.js.map +1 -1
  28. package/dist/cli/main.js +1 -0
  29. package/dist/cli/main.js.map +1 -1
  30. package/dist/cloud/vps/hetzner-api.d.ts +133 -0
  31. package/dist/cloud/vps/hetzner-api.d.ts.map +1 -0
  32. package/dist/cloud/vps/hetzner-api.js +95 -0
  33. package/dist/cloud/vps/hetzner-api.js.map +1 -0
  34. package/dist/cloud/vps/provision.d.ts.map +1 -1
  35. package/dist/cloud/vps/provision.js +414 -3
  36. package/dist/cloud/vps/provision.js.map +1 -1
  37. package/dist/cloud/vps/teardown.d.ts.map +1 -1
  38. package/dist/cloud/vps/teardown.js +18 -15
  39. package/dist/cloud/vps/teardown.js.map +1 -1
  40. package/dist/credentials/builtins/hetzner-api-key.d.ts +4 -0
  41. package/dist/credentials/builtins/hetzner-api-key.d.ts.map +1 -0
  42. package/dist/credentials/builtins/hetzner-api-key.js +24 -0
  43. package/dist/credentials/builtins/hetzner-api-key.js.map +1 -0
  44. package/dist/credentials/builtins/index.d.ts.map +1 -1
  45. package/dist/credentials/builtins/index.js +2 -0
  46. package/dist/credentials/builtins/index.js.map +1 -1
  47. package/dist/gateway/views/logs-page.d.ts.map +1 -1
  48. package/dist/gateway/views/logs-page.js +121 -25
  49. package/dist/gateway/views/logs-page.js.map +1 -1
  50. package/dist/remote/bootstrap.d.ts +5 -4
  51. package/dist/remote/bootstrap.d.ts.map +1 -1
  52. package/dist/remote/bootstrap.js +6 -36
  53. package/dist/remote/bootstrap.js.map +1 -1
  54. package/dist/remote/push.d.ts +1 -2
  55. package/dist/remote/push.d.ts.map +1 -1
  56. package/dist/remote/push.js +42 -13
  57. package/dist/remote/push.js.map +1 -1
  58. package/dist/scheduler/index.js +1 -1
  59. package/dist/scheduler/index.js.map +1 -1
  60. package/dist/shared/config.d.ts +2 -0
  61. package/dist/shared/config.d.ts.map +1 -1
  62. package/dist/shared/config.js.map +1 -1
  63. package/docs/cloud.md +2 -1
  64. package/docs/vps-deployment.md +11 -1
  65. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import type { CredentialDefinition } from "../schema.js";
2
+ declare const hetznerApiKey: CredentialDefinition;
3
+ export default hetznerApiKey;
4
+ //# sourceMappingURL=hetzner-api-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hetzner-api-key.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/hetzner-api-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAA,MAAM,aAAa,EAAE,oBAsBpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ const hetznerApiKey = {
2
+ id: "hetzner_api_key",
3
+ label: "Hetzner API Key",
4
+ description: "API key for Hetzner Cloud VPS provisioning (not needed at agent runtime)",
5
+ helpUrl: "https://console.hetzner.cloud/projects",
6
+ fields: [
7
+ { name: "api_key", label: "API Key", description: "Hetzner Cloud API key", secret: true },
8
+ ],
9
+ envVars: { api_key: "HETZNER_API_KEY" },
10
+ agentContext: "`HETZNER_API_KEY` — Hetzner Cloud API access (provisioning only, not typically needed by agents)",
11
+ async validate(values) {
12
+ const res = await fetch("https://api.hetzner.cloud/v1/server_types", {
13
+ headers: { Authorization: `Bearer ${values.api_key}` },
14
+ });
15
+ if (!res.ok) {
16
+ const body = await res.json().catch(() => ({ error: { message: "Unknown error" } }));
17
+ const errorMessage = body.error?.message || `HTTP ${res.status}`;
18
+ throw new Error(`Hetzner API key validation failed: ${errorMessage}`);
19
+ }
20
+ return true;
21
+ },
22
+ };
23
+ export default hetznerApiKey;
24
+ //# sourceMappingURL=hetzner-api-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hetzner-api-key.js","sourceRoot":"","sources":["../../../src/credentials/builtins/hetzner-api-key.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAyB;IAC1C,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,0EAA0E;IACvF,OAAO,EAAE,wCAAwC;IACjD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE;KAC1F;IACD,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;IACvC,YAAY,EAAE,kGAAkG;IAEhH,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,2CAA2C,EAAE;YACnE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE,EAAE;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAwBzD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAuBnE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAyBzD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAwBnE,CAAC"}
@@ -18,6 +18,7 @@ import netlifyToken from "./netlify-token.js";
18
18
  import xTwitterApi from "./x-twitter-api.js";
19
19
  import bugsnagToken from "./bugsnag-token.js";
20
20
  import vultrApiKey from "./vultr-api-key.js";
21
+ import hetznerApiKey from "./hetzner-api-key.js";
21
22
  import vpsSsh from "./vps-ssh.js";
22
23
  import cloudflareApiToken from "./cloudflare-api-token.js";
23
24
  export const builtinCredentials = {
@@ -41,6 +42,7 @@ export const builtinCredentials = {
41
42
  "x_twitter_api": xTwitterApi,
42
43
  "bugsnag_token": bugsnagToken,
43
44
  "vultr_api_key": vultrApiKey,
45
+ "hetzner_api_key": hetznerApiKey,
44
46
  "vps_ssh": vpsSsh,
45
47
  "cloudflare_api_token": cloudflareApiToken,
46
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,SAAS,EAAE,MAAM;IACjB,uBAAuB,EAAE,mBAAmB;IAC5C,sBAAsB,EAAE,kBAAkB;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,SAAS,EAAE,MAAM;IACjB,sBAAsB,EAAE,kBAAkB;CAC3C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/builtins/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,SAAS,EAAE,MAAM;IACjB,uBAAuB,EAAE,mBAAmB;IAC5C,sBAAsB,EAAE,kBAAkB;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,aAAa;IAChC,SAAS,EAAE,MAAM;IACjB,sBAAsB,EAAE,kBAAkB;CAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logs-page.d.ts","sourceRoot":"","sources":["../../../src/gateway/views/logs-page.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+KxD"}
1
+ {"version":3,"file":"logs-page.d.ts","sourceRoot":"","sources":["../../../src/gateway/views/logs-page.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+QxD"}
@@ -27,14 +27,21 @@ export function renderLogsPage(agentName) {
27
27
  .controls button.active { background: #3b82f6; border-color: #3b82f6; }
28
28
  .controls .status { font-size: 0.8rem; color: #64748b; }
29
29
  .log-container { flex: 1; background: #1e293b; border-radius: 8px; padding: 12px; font-family: 'SF Mono', 'Fira Code', monospace; font-size: 0.75rem; line-height: 1.5; overflow-y: auto; min-height: 0; -webkit-overflow-scrolling: touch; }
30
- .log-line { white-space: pre-wrap; word-break: break-all; }
30
+ .log-line { white-space: pre-wrap; word-break: break-all; padding: 1px 0; }
31
31
  .log-time { color: #64748b; }
32
- .log-level { font-weight: 600; }
33
- .log-level-trace { color: #64748b; }
34
- .log-level-debug { color: #94a3b8; }
35
- .log-level-info { color: #22c55e; }
36
- .log-level-warn { color: #eab308; }
37
- .log-level-error { color: #ef4444; }
32
+ .log-msg { color: #cbd5e1; }
33
+ .log-assistant { color: #f8fafc; font-weight: 500; }
34
+ .log-assistant-cont { color: #f8fafc; padding-left: 7.5em; display: block; }
35
+ .log-bash { color: #22d3ee; }
36
+ .log-tool { color: #60a5fa; }
37
+ .log-tool-error { color: #ef4444; }
38
+ .log-lifecycle { color: #c084fc; font-weight: 600; }
39
+ .log-completed { color: #22c55e; font-weight: 600; }
40
+ .log-dim { color: #64748b; }
41
+ .log-warn { color: #eab308; }
42
+ .log-error { color: #ef4444; font-weight: 600; }
43
+ .log-detail { color: #64748b; padding-left: 7.5em; display: block; font-size: 0.9em; }
44
+ .run-header { border-top: 1px solid #334155; margin-top: 8px; padding-top: 6px; color: #c084fc; font-weight: 600; }
38
45
  .empty { color: #475569; font-style: italic; }
39
46
  .connection-status { font-size: 0.75rem; padding: 2px 8px; border-radius: 3px; }
40
47
  .connection-status.connected { color: #22c55e; }
@@ -101,29 +108,118 @@ export function renderLogsPage(agentName) {
101
108
  lineCountEl.textContent = "0 lines";
102
109
  }
103
110
 
104
- const levelNames = { 10: "TRACE", 20: "DEBUG", 30: "INFO", 40: "WARN", 50: "ERROR", 60: "FATAL" };
105
- const levelClasses = { 10: "trace", 20: "debug", 30: "info", 40: "warn", 50: "error", 60: "error" };
111
+ const SKIP_MSGS = new Set(["event", "tool done"]);
106
112
 
107
- function formatLogEntry(entry) {
108
- let time, level, msg;
109
- try {
110
- const parsed = JSON.parse(entry);
111
- time = parsed.time ? new Date(parsed.time).toLocaleTimeString() : "";
112
- const lvl = parsed.level || 30;
113
- level = levelNames[lvl] || "INFO";
114
- const cls = levelClasses[lvl] || "info";
115
- msg = parsed.msg || entry;
116
- return '<span class="log-time">' + esc(time) + '</span> <span class="log-level log-level-' + cls + '">' + level.padEnd(5) + '</span> ' + esc(msg);
117
- } catch {
118
- return esc(entry);
113
+ function fmtTime(ts) {
114
+ return new Date(ts).toLocaleTimeString("en-US", { hour12: false });
115
+ }
116
+
117
+ function formatEntry(p) {
118
+ var time = '<span class="log-time">' + esc(fmtTime(p.time)) + '</span> ';
119
+ var msg = p.msg || "";
120
+ var lvl = p.level || 30;
121
+
122
+ // Skip noise
123
+ if (SKIP_MSGS.has(msg)) return null;
124
+ if (lvl <= 20 && msg !== "tool start") return null;
125
+
126
+ // Assistant text
127
+ if (msg === "assistant") {
128
+ var text = p.text || "";
129
+ if (!text) return null;
130
+ var lines = text.split("\\n");
131
+ var out = time + '<span class="log-assistant">' + esc(lines[0]) + '</span>';
132
+ for (var i = 1; i < lines.length; i++) {
133
+ out += '<span class="log-assistant-cont">' + esc(lines[i]) + '</span>';
134
+ }
135
+ return out;
136
+ }
137
+
138
+ // Bash command
139
+ if (msg === "bash") {
140
+ return time + '<span class="log-bash">$ ' + esc(p.cmd || "") + '</span>';
141
+ }
142
+
143
+ // Tool start
144
+ if (msg === "tool start") {
145
+ return time + '<span class="log-tool">\\u25b8 ' + esc(p.tool || "unknown") + '</span>';
146
+ }
147
+
148
+ // Tool error
149
+ if (msg === "tool error") {
150
+ var out = time + '<span class="log-tool-error">\\u2717 ' + esc(p.tool || "unknown") + ' failed</span>';
151
+ if (p.cmd) out += '<span class="log-detail">$ ' + esc(String(p.cmd)) + '</span>';
152
+ if (p.result) out += '<span class="log-detail">' + esc(String(p.result).slice(0, 300)) + '</span>';
153
+ return out;
154
+ }
155
+
156
+ // Run start
157
+ if (msg.startsWith && msg.startsWith("Starting ")) {
158
+ var ctr = p.container ? ' <span class="log-dim">(' + esc(p.container) + ')</span>' : "";
159
+ return time + '<span class="log-lifecycle">' + esc(msg) + '</span>' + ctr;
119
160
  }
161
+
162
+ // Run completed
163
+ if (msg === "run completed" || msg === "run completed, rerun requested") {
164
+ var suffix = msg.includes("rerun") ? ' <span class="log-warn">(rerun requested)</span>' : "";
165
+ return time + '<span class="log-completed">Run completed</span>' + suffix;
166
+ }
167
+
168
+ // Container lifecycle
169
+ if (msg === "container launched") {
170
+ var ctr = p.container ? ' ' + esc(p.container) : "";
171
+ return time + '<span class="log-dim">Container launched' + ctr + '</span>';
172
+ }
173
+ if (msg === "container finished" || msg === "container finished (rerun requested)") {
174
+ var el = p.elapsed ? ' (' + esc(p.elapsed) + ')' : "";
175
+ return time + '<span class="log-dim">Container finished' + el + '</span>';
176
+ }
177
+ if (msg === "container starting") {
178
+ var model = p.modelId ? ' <span class="log-dim">model=' + esc(p.modelId) + '</span>' : "";
179
+ return time + '<span class="log-lifecycle">Container starting: ' + esc(p.agentName || "") + '</span>' + model;
180
+ }
181
+ if (msg === "creating agent session" || msg === "session created, sending prompt") {
182
+ return time + '<span class="log-dim">' + esc(msg) + '</span>';
183
+ }
184
+
185
+ // Errors
186
+ if (lvl >= 50) {
187
+ var detail = p.err ? '<span class="log-detail">' + esc(JSON.stringify(p.err).slice(0, 300)) + '</span>' : "";
188
+ return time + '<span class="log-error">ERROR: ' + esc(msg) + '</span>' + detail;
189
+ }
190
+
191
+ // Warnings
192
+ if (lvl >= 40) {
193
+ return time + '<span class="log-warn">WARN: ' + esc(msg) + '</span>';
194
+ }
195
+
196
+ // Catch-all
197
+ return time + '<span class="log-dim">' + esc(msg) + '</span>';
120
198
  }
121
199
 
122
- function appendLine(entry) {
200
+ function maybeRunHeader(p) {
201
+ var msg = p.msg || "";
202
+ if (msg.startsWith && msg.startsWith("Starting ") && (msg.includes(" run") || msg.includes(" container run"))) {
203
+ var name = p.name || "agent";
204
+ var ctr = p.container ? " " + p.container : "";
205
+ return '<div class="log-line run-header">\\u2500\\u2500 ' + esc(name + ctr) + ' ' + "\\u2500".repeat(50) + '</div>';
206
+ }
207
+ return null;
208
+ }
209
+
210
+ function appendEntry(p) {
123
211
  if (emptyMsg && emptyMsg.parentNode) emptyMsg.remove();
124
- const div = document.createElement("div");
212
+ var header = maybeRunHeader(p);
213
+ if (header) {
214
+ var hdiv = document.createElement("div");
215
+ hdiv.innerHTML = header;
216
+ container.appendChild(hdiv.firstChild);
217
+ }
218
+ var html = formatEntry(p);
219
+ if (!html) return;
220
+ var div = document.createElement("div");
125
221
  div.className = "log-line";
126
- div.innerHTML = formatLogEntry(entry);
222
+ div.innerHTML = html;
127
223
  container.appendChild(div);
128
224
  lineCount++;
129
225
  lineCountEl.textContent = lineCount + " line" + (lineCount !== 1 ? "s" : "");
@@ -153,7 +249,7 @@ export function renderLogsPage(agentName) {
153
249
  const res = await fetch("/api/logs/agents/" + encodeURIComponent(agentName) + "?" + params, { credentials: "same-origin" });
154
250
  if (!res.ok) throw new Error(res.status);
155
251
  const data = await res.json();
156
- for (const entry of data.entries) appendLine(JSON.stringify(entry));
252
+ for (const entry of data.entries) appendEntry(entry);
157
253
  if (data.cursor) logCursor = data.cursor;
158
254
  connStatus.textContent = "connected";
159
255
  connStatus.className = "connection-status connected";
@@ -1 +1 @@
1
- {"version":3,"file":"logs-page.js","sourceRoot":"","sources":["../../../src/gateway/views/logs-page.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO;;;;;SAKA,UAAU,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgDpB,UAAU,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;wBAgBP,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwGzC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"logs-page.js","sourceRoot":"","sources":["../../../src/gateway/views/logs-page.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO;;;;;SAKA,UAAU,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuDpB,UAAU,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;wBAgBP,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiMzC,CAAC;AACT,CAAC"}
@@ -1,14 +1,15 @@
1
1
  import type { SshOptions } from "./ssh.js";
2
2
  export interface BootstrapResult {
3
- /** Absolute path to the `al` binary on the remote server. */
4
- alPath: string;
5
3
  /** Absolute path to the `node` binary on the remote server. */
6
4
  nodePath: string;
7
5
  }
8
6
  /**
9
- * Check server prerequisites and install al if missing.
10
- * Throws if a hard requirement (Node >= 20, Docker) is not met.
7
+ * Check server prerequisites (Node >= 20, Docker).
8
+ * Throws if a hard requirement is not met.
11
9
  * Returns resolved binary paths for use in the systemd unit.
10
+ *
11
+ * Note: al itself is not checked here — it is installed as a project
12
+ * dependency via `npm install` during the push.
12
13
  */
13
14
  export declare function bootstrapServer(ssh: SshOptions): Promise<BootstrapResult>;
14
15
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/remote/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAwD/E"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/remote/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CA8B/E"}
@@ -1,17 +1,17 @@
1
1
  import { sshExec } from "./ssh.js";
2
2
  /**
3
- * Check server prerequisites and install al if missing.
4
- * Throws if a hard requirement (Node >= 20, Docker) is not met.
3
+ * Check server prerequisites (Node >= 20, Docker).
4
+ * Throws if a hard requirement is not met.
5
5
  * Returns resolved binary paths for use in the systemd unit.
6
+ *
7
+ * Note: al itself is not checked here — it is installed as a project
8
+ * dependency via `npm install` during the push.
6
9
  */
7
10
  export async function bootstrapServer(ssh) {
8
- // Run all three checks in parallel
9
- const [nodeResult, dockerResult, alResult] = await Promise.allSettled([
11
+ const [nodeResult, dockerResult] = await Promise.allSettled([
10
12
  checkNode(ssh),
11
13
  checkDocker(ssh),
12
- checkAl(ssh),
13
14
  ]);
14
- // Report results and collect errors
15
15
  const errors = [];
16
16
  if (nodeResult.status === "fulfilled") {
17
17
  console.log(` Node.js ${nodeResult.value.version}`);
@@ -25,36 +25,11 @@ export async function bootstrapServer(ssh) {
25
25
  else {
26
26
  errors.push(dockerResult.reason?.message ?? "Docker check failed");
27
27
  }
28
- // al might need install — handle separately
29
- let alPath;
30
- if (alResult.status === "fulfilled") {
31
- console.log(` al ${alResult.value.version}`);
32
- alPath = alResult.value.path;
33
- }
34
- else {
35
- // Try installing al (requires node to be present)
36
- if (nodeResult.status !== "fulfilled") {
37
- errors.push("Cannot install al CLI — Node.js is not available");
38
- }
39
- else {
40
- try {
41
- console.log(" al not found, installing...");
42
- await sshExec(ssh, "npm install -g @action-llama/action-llama@next");
43
- const alVersion = (await sshExec(ssh, "al --version")).trim();
44
- alPath = (await sshExec(ssh, "which al")).trim();
45
- console.log(` al ${alVersion} installed`);
46
- }
47
- catch {
48
- errors.push("Failed to install al CLI on the server");
49
- }
50
- }
51
- }
52
28
  if (errors.length > 0) {
53
29
  throw new Error("Server prerequisites not met:\n" +
54
30
  errors.map(e => ` - ${e}`).join("\n"));
55
31
  }
56
32
  return {
57
- alPath: alPath,
58
33
  nodePath: nodeResult.status === "fulfilled" ? nodeResult.value.path : "",
59
34
  };
60
35
  }
@@ -82,9 +57,4 @@ async function checkDocker(ssh) {
82
57
  throw new Error("Docker is not running on the server. Install and start Docker before running al push.");
83
58
  }
84
59
  }
85
- async function checkAl(ssh) {
86
- const alVersion = (await sshExec(ssh, "al --version")).trim();
87
- const alPath = (await sshExec(ssh, "which al")).trim();
88
- return { version: alVersion, path: alPath };
89
- }
90
60
  //# sourceMappingURL=bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/remote/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/remote/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAOnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAe;IACnD,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QAC1D,SAAS,CAAC,GAAG,CAAC;QACd,WAAW,CAAC,GAAG,CAAC;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,sBAAsB,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,iCAAiC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;KACzE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAe;IACtC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;YAAE,MAAM,GAAG,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAe;IACxC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -5,7 +5,6 @@ export interface PushOptions {
5
5
  projectPath: string;
6
6
  serverConfig: ServerConfig;
7
7
  globalConfig: GlobalConfig;
8
- envName: string;
9
8
  dryRun?: boolean;
10
9
  noCreds?: boolean;
11
10
  noFiles?: boolean;
@@ -13,7 +12,7 @@ export interface PushOptions {
13
12
  /**
14
13
  * Build a systemd unit file for the al scheduler.
15
14
  */
16
- export declare function buildSystemdUnit(projectName: string, basePath: string, binPaths?: BootstrapResult): string;
15
+ export declare function buildSystemdUnit(projectName: string, basePath: string, binPaths?: BootstrapResult, gatewayPort?: number): string;
17
16
  /**
18
17
  * Push project files and credentials to a server, set up systemd, and verify.
19
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/remote/push.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFnE"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/remote/push.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,eAAe,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HnE"}
@@ -10,14 +10,13 @@ import { bootstrapServer } from "./bootstrap.js";
10
10
  /**
11
11
  * Build a systemd unit file for the al scheduler.
12
12
  */
13
- export function buildSystemdUnit(projectName, basePath, binPaths) {
14
- const alExec = binPaths?.alPath ?? "al";
15
- // Collect unique directories containing node and al so systemd can find them
13
+ export function buildSystemdUnit(projectName, basePath, binPaths, gatewayPort) {
14
+ // al is installed as a project dependency — use the local binary
15
+ const alExec = `${basePath}/project/node_modules/.bin/al`;
16
+ // Ensure node is on PATH so the al binary can find it
16
17
  const extraDirs = new Set();
17
18
  if (binPaths?.nodePath)
18
19
  extraDirs.add(dirname(binPaths.nodePath));
19
- if (binPaths?.alPath)
20
- extraDirs.add(dirname(binPaths.alPath));
21
20
  const pathEnv = extraDirs.size > 0
22
21
  ? `\nEnvironment=PATH=${[...extraDirs].join(":")}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`
23
22
  : "";
@@ -29,7 +28,7 @@ Requires=docker.service
29
28
  [Service]
30
29
  Type=simple
31
30
  WorkingDirectory=${basePath}/project
32
- ExecStart=${alExec} start --headless --expose -w
31
+ ExecStart=${alExec} start --headless -w${gatewayPort ? ` --port ${gatewayPort}` : ""}
33
32
  Restart=on-failure
34
33
  RestartSec=5
35
34
  Environment=NODE_ENV=production${pathEnv}
@@ -42,7 +41,7 @@ WantedBy=multi-user.target
42
41
  * Push project files and credentials to a server, set up systemd, and verify.
43
42
  */
44
43
  export async function pushToServer(opts) {
45
- const { projectPath, serverConfig, globalConfig, envName, dryRun, noCreds, noFiles } = opts;
44
+ const { projectPath, serverConfig, globalConfig, dryRun, noCreds, noFiles } = opts;
46
45
  const ssh = sshOptionsFromConfig(serverConfig);
47
46
  const basePath = serverConfig.basePath ?? "/opt/action-llama";
48
47
  const gatewayPort = VPS_CONSTANTS.DEFAULT_GATEWAY_PORT;
@@ -72,6 +71,12 @@ export async function pushToServer(opts) {
72
71
  ];
73
72
  await rsyncTo(ssh, projectPath, `${basePath}/project`, excludes, rsyncFlags);
74
73
  console.log(dryRun ? "(dry-run) Would sync project files" : "Project files synced.");
74
+ // Install project dependencies on the remote
75
+ if (!dryRun) {
76
+ console.log("\n=== Installing dependencies ===\n");
77
+ await sshExec(ssh, `cd ${basePath}/project && npm install`);
78
+ console.log("Dependencies installed.");
79
+ }
75
80
  }
76
81
  // Step 4: Sync credentials
77
82
  if (!noCreds) {
@@ -79,13 +84,37 @@ export async function pushToServer(opts) {
79
84
  await rsyncTo(ssh, CREDENTIALS_DIR, `${basePath}/credentials`, undefined, rsyncFlags);
80
85
  console.log(dryRun ? "(dry-run) Would sync credentials" : "Credentials synced.");
81
86
  }
82
- // Step 5: Write .env.toml on the server
87
+ // Step 5: Configure nginx TLS reverse proxy (certs from provisioning)
88
+ if (!dryRun && !noCreds && serverConfig.cloudflareHostname) {
89
+ console.log("\n=== Configuring nginx ===\n");
90
+ const cfHost = serverConfig.cloudflareHostname;
91
+ const certSrc = `${basePath}/credentials/cloudflare_origin_cert/${cfHost}/certificate`;
92
+ const keySrc = `${basePath}/credentials/cloudflare_origin_cert/${cfHost}/private_key`;
93
+ await sshExec(ssh, `sudo mkdir -p ${VPS_CONSTANTS.NGINX_CERT_DIR}`);
94
+ await sshExec(ssh, `sudo cp ${certSrc} ${VPS_CONSTANTS.NGINX_CERT_PATH}`);
95
+ await sshExec(ssh, `sudo cp ${keySrc} ${VPS_CONSTANTS.NGINX_KEY_PATH}`);
96
+ const { generateNginxConfig } = await import("../cloud/vps/nginx.js");
97
+ const nginxConf = generateNginxConfig(cfHost, gatewayPort);
98
+ const nginxEscaped = nginxConf.replace(/'/g, "'\\''");
99
+ await sshExec(ssh, `sudo tee ${VPS_CONSTANTS.NGINX_SITE_CONFIG} > /dev/null << 'NGINXEOF'\n${nginxEscaped}\nNGINXEOF`);
100
+ await sshExec(ssh, `sudo ln -sfn ${VPS_CONSTANTS.NGINX_SITE_CONFIG} /etc/nginx/sites-enabled/action-llama`);
101
+ await sshExec(ssh, "sudo rm -f /etc/nginx/sites-enabled/default");
102
+ await sshExec(ssh, "sudo nginx -t && sudo systemctl reload nginx");
103
+ console.log(` nginx: ${cfHost} :443 → 127.0.0.1:${gatewayPort}`);
104
+ }
105
+ // Step 6: Write .env.toml on the server
83
106
  if (!dryRun) {
84
107
  console.log("\n=== Writing server .env.toml ===\n");
85
- const envToml = stringifyTOML({
86
- environment: envName,
87
- gateway: { port: gatewayPort },
88
- });
108
+ // Build a self-contained .env.toml — no environment reference needed on the
109
+ // remote since the server is effectively running locally. Inline gateway and
110
+ // telemetry config so the scheduler has everything it needs.
111
+ const remoteEnv = {
112
+ gateway: { ...globalConfig.gateway, port: gatewayPort },
113
+ };
114
+ if (globalConfig.telemetry) {
115
+ remoteEnv.telemetry = globalConfig.telemetry;
116
+ }
117
+ const envToml = stringifyTOML(remoteEnv);
89
118
  // Escape for shell
90
119
  const escaped = envToml.replace(/'/g, "'\\''");
91
120
  await sshExec(ssh, `cat > ${basePath}/project/.env.toml << 'ENVEOF'\n${escaped}\nENVEOF`);
@@ -100,7 +129,7 @@ export async function pushToServer(opts) {
100
129
  }
101
130
  // Step 6: Install systemd unit
102
131
  console.log("\n=== Setting up systemd service ===\n");
103
- const unitContent = buildSystemdUnit(projectName, basePath, binPaths);
132
+ const unitContent = buildSystemdUnit(projectName, basePath, binPaths, gatewayPort);
104
133
  const unitEscaped = unitContent.replace(/'/g, "'\\''");
105
134
  await sshExec(ssh, `sudo tee /etc/systemd/system/action-llama.service > /dev/null << 'UNITEOF'\n${unitEscaped}\nUNITEOF`);
106
135
  await sshExec(ssh, "sudo systemctl daemon-reload");
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/remote/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/remote/push.ts"],"names":[],"mappings":"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"}
@@ -235,7 +235,7 @@ export async function startScheduler(projectPath, globalConfigOverride, statusTr
235
235
  Object.assign(agentImages, buildResult.agentImages);
236
236
  // Import necessary classes for container runners
237
237
  const { ContainerAgentRunner: ContainerAgentRunnerClass } = await import("../agents/container-runner.js");
238
- const gatewayUrl = process.env.GATEWAY_URL || `http://host.docker.internal:${gatewayPort}`;
238
+ const gatewayUrl = process.env.GATEWAY_URL || `http://gateway:8080`;
239
239
  // Gateway callbacks — async (ContainerRegistry persists to StateStore).
240
240
  const registerContainer = gateway
241
241
  ? gateway.registerContainer