@action-llama/action-llama 0.13.7 → 0.15.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 (249) hide show
  1. package/agent-docs/AGENTS.md +123 -207
  2. package/dist/agents/container-entry.d.ts +1 -3
  3. package/dist/agents/container-entry.d.ts.map +1 -1
  4. package/dist/agents/container-entry.js +208 -154
  5. package/dist/agents/container-entry.js.map +1 -1
  6. package/dist/agents/container-runner.d.ts.map +1 -1
  7. package/dist/agents/container-runner.js +19 -8
  8. package/dist/agents/container-runner.js.map +1 -1
  9. package/dist/agents/context-injection.d.ts +7 -0
  10. package/dist/agents/context-injection.d.ts.map +1 -0
  11. package/dist/agents/context-injection.js +27 -0
  12. package/dist/agents/context-injection.js.map +1 -0
  13. package/dist/agents/execution-engine.d.ts.map +1 -1
  14. package/dist/agents/execution-engine.js +99 -109
  15. package/dist/agents/execution-engine.js.map +1 -1
  16. package/dist/agents/feedback-monitor.d.ts +56 -0
  17. package/dist/agents/feedback-monitor.d.ts.map +1 -0
  18. package/dist/agents/feedback-monitor.js +176 -0
  19. package/dist/agents/feedback-monitor.js.map +1 -0
  20. package/dist/agents/feedback-runner.d.ts +28 -0
  21. package/dist/agents/feedback-runner.d.ts.map +1 -0
  22. package/dist/agents/feedback-runner.js +138 -0
  23. package/dist/agents/feedback-runner.js.map +1 -0
  24. package/dist/agents/model-fallback.d.ts +18 -0
  25. package/dist/agents/model-fallback.d.ts.map +1 -0
  26. package/dist/agents/model-fallback.js +40 -0
  27. package/dist/agents/model-fallback.js.map +1 -0
  28. package/dist/agents/prompt.d.ts +9 -2
  29. package/dist/agents/prompt.d.ts.map +1 -1
  30. package/dist/agents/prompt.js +21 -49
  31. package/dist/agents/prompt.js.map +1 -1
  32. package/dist/agents/runner.d.ts +6 -0
  33. package/dist/agents/runner.d.ts.map +1 -1
  34. package/dist/agents/runner.js +153 -124
  35. package/dist/agents/runner.js.map +1 -1
  36. package/dist/agents/session-factory.d.ts +13 -0
  37. package/dist/agents/session-factory.d.ts.map +1 -0
  38. package/dist/agents/session-factory.js +27 -0
  39. package/dist/agents/session-factory.js.map +1 -0
  40. package/dist/build-info.json +1 -1
  41. package/dist/cli/commands/agent.d.ts.map +1 -1
  42. package/dist/cli/commands/agent.js +89 -23
  43. package/dist/cli/commands/agent.js.map +1 -1
  44. package/dist/cli/commands/chat.d.ts.map +1 -1
  45. package/dist/cli/commands/chat.js +26 -43
  46. package/dist/cli/commands/chat.js.map +1 -1
  47. package/dist/cli/commands/claude.d.ts +4 -0
  48. package/dist/cli/commands/claude.d.ts.map +1 -0
  49. package/dist/cli/commands/claude.js +8 -0
  50. package/dist/cli/commands/claude.js.map +1 -0
  51. package/dist/cli/commands/doctor.d.ts.map +1 -1
  52. package/dist/cli/commands/doctor.js +24 -6
  53. package/dist/cli/commands/doctor.js.map +1 -1
  54. package/dist/cli/commands/mcp.d.ts +8 -0
  55. package/dist/cli/commands/mcp.d.ts.map +1 -0
  56. package/dist/cli/commands/mcp.js +31 -0
  57. package/dist/cli/commands/mcp.js.map +1 -0
  58. package/dist/cli/commands/new.d.ts.map +1 -1
  59. package/dist/cli/commands/new.js +15 -6
  60. package/dist/cli/commands/new.js.map +1 -1
  61. package/dist/cli/commands/run.js +1 -1
  62. package/dist/cli/commands/run.js.map +1 -1
  63. package/dist/cli/commands/start.js +3 -3
  64. package/dist/cli/commands/start.js.map +1 -1
  65. package/dist/cli/commands/stats.d.ts +9 -0
  66. package/dist/cli/commands/stats.d.ts.map +1 -0
  67. package/dist/cli/commands/stats.js +149 -0
  68. package/dist/cli/commands/stats.js.map +1 -0
  69. package/dist/cli/commands/status.d.ts.map +1 -1
  70. package/dist/cli/commands/status.js +3 -0
  71. package/dist/cli/commands/status.js.map +1 -1
  72. package/dist/cli/main.js +50 -3
  73. package/dist/cli/main.js.map +1 -1
  74. package/dist/gateway/index.d.ts +3 -0
  75. package/dist/gateway/index.d.ts.map +1 -1
  76. package/dist/gateway/index.js +7 -1
  77. package/dist/gateway/index.js.map +1 -1
  78. package/dist/gateway/lock-store.d.ts +10 -0
  79. package/dist/gateway/lock-store.d.ts.map +1 -1
  80. package/dist/gateway/lock-store.js +38 -0
  81. package/dist/gateway/lock-store.js.map +1 -1
  82. package/dist/gateway/routes/control.d.ts +2 -0
  83. package/dist/gateway/routes/control.d.ts.map +1 -1
  84. package/dist/gateway/routes/control.js +56 -0
  85. package/dist/gateway/routes/control.js.map +1 -1
  86. package/dist/gateway/routes/dashboard.d.ts +2 -1
  87. package/dist/gateway/routes/dashboard.d.ts.map +1 -1
  88. package/dist/gateway/routes/dashboard.js +112 -6
  89. package/dist/gateway/routes/dashboard.js.map +1 -1
  90. package/dist/gateway/routes/locks.d.ts.map +1 -1
  91. package/dist/gateway/routes/locks.js +39 -0
  92. package/dist/gateway/routes/locks.js.map +1 -1
  93. package/dist/gateway/routes/logs.d.ts.map +1 -1
  94. package/dist/gateway/routes/logs.js +4 -5
  95. package/dist/gateway/routes/logs.js.map +1 -1
  96. package/dist/gateway/routes/stats.d.ts +4 -0
  97. package/dist/gateway/routes/stats.d.ts.map +1 -0
  98. package/dist/gateway/routes/stats.js +25 -0
  99. package/dist/gateway/routes/stats.js.map +1 -0
  100. package/dist/gateway/views/agent-detail-page.d.ts +14 -0
  101. package/dist/gateway/views/agent-detail-page.d.ts.map +1 -0
  102. package/dist/gateway/views/agent-detail-page.js +416 -0
  103. package/dist/gateway/views/agent-detail-page.js.map +1 -0
  104. package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
  105. package/dist/gateway/views/dashboard-page.js +213 -245
  106. package/dist/gateway/views/dashboard-page.js.map +1 -1
  107. package/dist/gateway/views/instance-detail-page.d.ts +30 -0
  108. package/dist/gateway/views/instance-detail-page.d.ts.map +1 -0
  109. package/dist/gateway/views/instance-detail-page.js +360 -0
  110. package/dist/gateway/views/instance-detail-page.js.map +1 -0
  111. package/dist/gateway/views/layout.d.ts +17 -0
  112. package/dist/gateway/views/layout.d.ts.map +1 -0
  113. package/dist/gateway/views/layout.js +153 -0
  114. package/dist/gateway/views/layout.js.map +1 -0
  115. package/dist/gateway/views/login-page.d.ts.map +1 -1
  116. package/dist/gateway/views/login-page.js +24 -37
  117. package/dist/gateway/views/login-page.js.map +1 -1
  118. package/dist/gateway/views/project-config-page.d.ts +12 -0
  119. package/dist/gateway/views/project-config-page.d.ts.map +1 -0
  120. package/dist/gateway/views/project-config-page.js +199 -0
  121. package/dist/gateway/views/project-config-page.js.map +1 -0
  122. package/dist/hooks/runner.d.ts +12 -0
  123. package/dist/hooks/runner.d.ts.map +1 -0
  124. package/dist/hooks/runner.js +32 -0
  125. package/dist/hooks/runner.js.map +1 -0
  126. package/dist/mcp/server.d.ts +5 -0
  127. package/dist/mcp/server.d.ts.map +1 -0
  128. package/dist/mcp/server.js +336 -0
  129. package/dist/mcp/server.js.map +1 -0
  130. package/dist/scheduler/call-dispatcher.d.ts +2 -2
  131. package/dist/scheduler/call-dispatcher.js +3 -3
  132. package/dist/scheduler/call-dispatcher.js.map +1 -1
  133. package/dist/scheduler/execution.d.ts +5 -2
  134. package/dist/scheduler/execution.d.ts.map +1 -1
  135. package/dist/scheduler/execution.js +75 -4
  136. package/dist/scheduler/execution.js.map +1 -1
  137. package/dist/scheduler/gateway-setup.d.ts +2 -0
  138. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  139. package/dist/scheduler/gateway-setup.js +21 -2
  140. package/dist/scheduler/gateway-setup.js.map +1 -1
  141. package/dist/scheduler/image-builder.js +3 -3
  142. package/dist/scheduler/image-builder.js.map +1 -1
  143. package/dist/scheduler/index.d.ts.map +1 -1
  144. package/dist/scheduler/index.js +90 -3
  145. package/dist/scheduler/index.js.map +1 -1
  146. package/dist/scheduler/shutdown.d.ts +2 -0
  147. package/dist/scheduler/shutdown.d.ts.map +1 -1
  148. package/dist/scheduler/shutdown.js +4 -1
  149. package/dist/scheduler/shutdown.js.map +1 -1
  150. package/dist/scheduler/validation.d.ts.map +1 -1
  151. package/dist/scheduler/validation.js +5 -3
  152. package/dist/scheduler/validation.js.map +1 -1
  153. package/dist/scheduler/watcher.d.ts +1 -1
  154. package/dist/scheduler/watcher.js +1 -1
  155. package/dist/scheduler/webhook-setup.d.ts +2 -0
  156. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  157. package/dist/scheduler/webhook-setup.js +2 -0
  158. package/dist/scheduler/webhook-setup.js.map +1 -1
  159. package/dist/setup/prompts.d.ts.map +1 -1
  160. package/dist/setup/prompts.js +35 -6
  161. package/dist/setup/prompts.js.map +1 -1
  162. package/dist/setup/scaffold.d.ts +6 -0
  163. package/dist/setup/scaffold.d.ts.map +1 -1
  164. package/dist/setup/scaffold.js +185 -7
  165. package/dist/setup/scaffold.js.map +1 -1
  166. package/dist/shared/config.d.ts +42 -5
  167. package/dist/shared/config.d.ts.map +1 -1
  168. package/dist/shared/config.js +126 -20
  169. package/dist/shared/config.js.map +1 -1
  170. package/dist/shared/credential-refs.d.ts.map +1 -1
  171. package/dist/shared/credential-refs.js +8 -0
  172. package/dist/shared/credential-refs.js.map +1 -1
  173. package/dist/shared/default-feedback-agent.d.ts +10 -0
  174. package/dist/shared/default-feedback-agent.d.ts.map +1 -0
  175. package/dist/shared/default-feedback-agent.js +114 -0
  176. package/dist/shared/default-feedback-agent.js.map +1 -0
  177. package/dist/shared/environment.d.ts +0 -1
  178. package/dist/shared/environment.d.ts.map +1 -1
  179. package/dist/shared/environment.js +19 -3
  180. package/dist/shared/environment.js.map +1 -1
  181. package/dist/shared/frontmatter.d.ts +11 -0
  182. package/dist/shared/frontmatter.d.ts.map +1 -0
  183. package/dist/shared/frontmatter.js +30 -0
  184. package/dist/shared/frontmatter.js.map +1 -0
  185. package/dist/shared/paths.d.ts +1 -0
  186. package/dist/shared/paths.d.ts.map +1 -1
  187. package/dist/shared/paths.js +3 -0
  188. package/dist/shared/paths.js.map +1 -1
  189. package/dist/shared/usage.d.ts.map +1 -1
  190. package/dist/shared/usage.js +52 -7
  191. package/dist/shared/usage.js.map +1 -1
  192. package/dist/stats/index.d.ts +3 -0
  193. package/dist/stats/index.d.ts.map +1 -0
  194. package/dist/stats/index.js +2 -0
  195. package/dist/stats/index.js.map +1 -0
  196. package/dist/stats/store.d.ts +89 -0
  197. package/dist/stats/store.d.ts.map +1 -0
  198. package/dist/stats/store.js +242 -0
  199. package/dist/stats/store.js.map +1 -0
  200. package/dist/tui/App.d.ts +2 -1
  201. package/dist/tui/App.d.ts.map +1 -1
  202. package/dist/tui/App.js +132 -5
  203. package/dist/tui/App.js.map +1 -1
  204. package/dist/tui/render.d.ts +1 -1
  205. package/dist/tui/render.d.ts.map +1 -1
  206. package/dist/tui/render.js +2 -2
  207. package/dist/tui/render.js.map +1 -1
  208. package/dist/tui/status-tracker.d.ts +18 -1
  209. package/dist/tui/status-tracker.d.ts.map +1 -1
  210. package/dist/tui/status-tracker.js +32 -1
  211. package/dist/tui/status-tracker.js.map +1 -1
  212. package/docker/bin/{al-call → al-subagent} +2 -2
  213. package/docker/bin/{al-check → al-subagent-check} +2 -2
  214. package/docker/bin/{al-wait → al-subagent-wait} +2 -2
  215. package/package.json +8 -21
  216. package/LICENSE +0 -21
  217. package/README.md +0 -192
  218. package/dist/gateway/views/logs-page.d.ts +0 -2
  219. package/dist/gateway/views/logs-page.d.ts.map +0 -1
  220. package/dist/gateway/views/logs-page.js +0 -280
  221. package/dist/gateway/views/logs-page.js.map +0 -1
  222. package/dist/preflight/interpolate.d.ts +0 -10
  223. package/dist/preflight/interpolate.d.ts.map +0 -1
  224. package/dist/preflight/interpolate.js +0 -33
  225. package/dist/preflight/interpolate.js.map +0 -1
  226. package/dist/preflight/providers/git-clone.d.ts +0 -3
  227. package/dist/preflight/providers/git-clone.d.ts.map +0 -1
  228. package/dist/preflight/providers/git-clone.js +0 -36
  229. package/dist/preflight/providers/git-clone.js.map +0 -1
  230. package/dist/preflight/providers/http.d.ts +0 -3
  231. package/dist/preflight/providers/http.d.ts.map +0 -1
  232. package/dist/preflight/providers/http.js +0 -36
  233. package/dist/preflight/providers/http.js.map +0 -1
  234. package/dist/preflight/providers/shell.d.ts +0 -3
  235. package/dist/preflight/providers/shell.d.ts.map +0 -1
  236. package/dist/preflight/providers/shell.js +0 -28
  237. package/dist/preflight/providers/shell.js.map +0 -1
  238. package/dist/preflight/registry.d.ts +0 -4
  239. package/dist/preflight/registry.d.ts.map +0 -1
  240. package/dist/preflight/registry.js +0 -20
  241. package/dist/preflight/registry.js.map +0 -1
  242. package/dist/preflight/runner.d.ts +0 -7
  243. package/dist/preflight/runner.d.ts.map +0 -1
  244. package/dist/preflight/runner.js +0 -28
  245. package/dist/preflight/runner.js.map +0 -1
  246. package/dist/preflight/schema.d.ts +0 -21
  247. package/dist/preflight/schema.d.ts.map +0 -1
  248. package/dist/preflight/schema.js +0 -9
  249. package/dist/preflight/schema.js.map +0 -1
@@ -1,280 +0,0 @@
1
- function escapeHtml(str) {
2
- return str
3
- .replace(/&/g, "&")
4
- .replace(/</g, "&lt;")
5
- .replace(/>/g, "&gt;")
6
- .replace(/"/g, "&quot;");
7
- }
8
- export function renderLogsPage(agentName) {
9
- return `<!DOCTYPE html>
10
- <html lang="en">
11
- <head>
12
- <meta charset="utf-8">
13
- <meta name="viewport" content="width=device-width, initial-scale=1">
14
- <title>${escapeHtml(agentName)} — Logs — Action Llama</title>
15
- <style>
16
- * { margin: 0; padding: 0; box-sizing: border-box; }
17
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; background: #0f172a; color: #e2e8f0; padding: 16px; display: flex; flex-direction: column; height: 100vh; height: 100dvh; }
18
- .top-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-shrink: 0; flex-wrap: wrap; }
19
- .top-bar a { color: #60a5fa; text-decoration: none; font-size: 0.9rem; }
20
- .top-bar a:hover { text-decoration: underline; }
21
- h1 { font-size: 1.2rem; color: #f8fafc; }
22
- .agent-state { font-size: 0.85rem; color: #94a3b8; }
23
- .state-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
24
- .controls { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; flex-shrink: 0; flex-wrap: wrap; }
25
- .controls button { background: #334155; color: #e2e8f0; border: 1px solid #475569; border-radius: 4px; padding: 6px 14px; cursor: pointer; font-size: 0.8rem; -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
26
- .controls button:hover { background: #475569; }
27
- .controls button.active { background: #3b82f6; border-color: #3b82f6; }
28
- .controls .status { font-size: 0.8rem; color: #64748b; }
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; padding: 1px 0; }
31
- .log-time { color: #64748b; }
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; }
45
- .empty { color: #475569; font-style: italic; }
46
- .connection-status { font-size: 0.75rem; padding: 2px 8px; border-radius: 3px; }
47
- .connection-status.connected { color: #22c55e; }
48
- .connection-status.disconnected { color: #ef4444; }
49
-
50
- @media (max-width: 640px) {
51
- body { padding: 10px; }
52
- h1 { font-size: 1.05rem; }
53
- .top-bar { gap: 8px; margin-bottom: 8px; }
54
- .top-bar a { font-size: 0.8rem; }
55
- .controls button { padding: 8px 14px; font-size: 0.8rem; }
56
- .log-container { padding: 10px; font-size: 0.65rem; line-height: 1.45; border-radius: 6px; }
57
- .agent-state { font-size: 0.75rem; }
58
- }
59
-
60
- @media (min-width: 641px) {
61
- body { padding: 24px; }
62
- .log-container { padding: 16px; font-size: 0.8rem; line-height: 1.6; }
63
- }
64
- </style>
65
- </head>
66
- <body>
67
- <div class="top-bar">
68
- <a href="/dashboard">&larr; Dashboard</a>
69
- <h1>${escapeHtml(agentName)}</h1>
70
- <span class="agent-state" id="agent-state"></span>
71
- </div>
72
-
73
- <div class="controls">
74
- <button id="follow-btn" class="active" onclick="toggleFollow()">Follow</button>
75
- <button onclick="clearLogs()">Clear</button>
76
- <span class="status" id="line-count">0 lines</span>
77
- <span class="connection-status connected" id="conn-status">connected</span>
78
- </div>
79
-
80
- <div class="log-container" id="log-container">
81
- <div class="empty" id="empty-msg">Waiting for logs...</div>
82
- </div>
83
-
84
- <script>
85
- const agentName = ${JSON.stringify(agentName)};
86
- const container = document.getElementById("log-container");
87
- const emptyMsg = document.getElementById("empty-msg");
88
- const followBtn = document.getElementById("follow-btn");
89
- const lineCountEl = document.getElementById("line-count");
90
- const connStatus = document.getElementById("conn-status");
91
- const agentStateEl = document.getElementById("agent-state");
92
-
93
- const stateColors = { running: "#22c55e", building: "#eab308", error: "#ef4444", idle: "#6b7280" };
94
- let follow = true;
95
- let lineCount = 0;
96
-
97
- function esc(s) { const d = document.createElement("div"); d.textContent = s; return d.innerHTML; }
98
-
99
- function toggleFollow() {
100
- follow = !follow;
101
- followBtn.classList.toggle("active", follow);
102
- if (follow) container.scrollTop = container.scrollHeight;
103
- }
104
-
105
- function clearLogs() {
106
- container.innerHTML = "";
107
- lineCount = 0;
108
- lineCountEl.textContent = "0 lines";
109
- }
110
-
111
- const SKIP_MSGS = new Set(["event", "tool done"]);
112
-
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;
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>';
198
- }
199
-
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) {
211
- if (emptyMsg && emptyMsg.parentNode) emptyMsg.remove();
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");
221
- div.className = "log-line";
222
- div.innerHTML = html;
223
- container.appendChild(div);
224
- lineCount++;
225
- lineCountEl.textContent = lineCount + " line" + (lineCount !== 1 ? "s" : "");
226
- if (follow) container.scrollTop = container.scrollHeight;
227
- }
228
-
229
- // Pause follow when user scrolls up
230
- container.addEventListener("scroll", () => {
231
- const atBottom = container.scrollHeight - container.scrollTop - container.clientHeight < 50;
232
- if (!atBottom && follow) {
233
- follow = false;
234
- followBtn.classList.remove("active");
235
- } else if (atBottom && !follow) {
236
- follow = true;
237
- followBtn.classList.add("active");
238
- }
239
- });
240
-
241
- // Log polling via cursor-based API
242
- let logCursor = null;
243
- let pollTimer = null;
244
- async function fetchLogs(initial) {
245
- try {
246
- const params = new URLSearchParams();
247
- if (initial) params.set("lines", "100");
248
- if (logCursor) params.set("cursor", logCursor);
249
- const res = await fetch("/api/logs/agents/" + encodeURIComponent(agentName) + "?" + params, { credentials: "same-origin" });
250
- if (!res.ok) throw new Error(res.status);
251
- const data = await res.json();
252
- for (const entry of data.entries) appendEntry(entry);
253
- if (data.cursor) logCursor = data.cursor;
254
- connStatus.textContent = "connected";
255
- connStatus.className = "connection-status connected";
256
- } catch {
257
- connStatus.textContent = "disconnected";
258
- connStatus.className = "connection-status disconnected";
259
- }
260
- }
261
- fetchLogs(true);
262
- pollTimer = setInterval(function() { fetchLogs(false); }, 1500);
263
-
264
- // Status stream for agent state
265
- const statusEs = new EventSource("/dashboard/api/status-stream");
266
- statusEs.onmessage = function(e) {
267
- const data = JSON.parse(e.data);
268
- if (data.agents) {
269
- const agent = data.agents.find(a => a.name === agentName);
270
- if (agent) {
271
- const color = stateColors[agent.state] || "#6b7280";
272
- agentStateEl.innerHTML = '<span class="state-dot" style="background:' + color + '"></span> ' + esc(agent.state);
273
- }
274
- }
275
- };
276
- </script>
277
- </body>
278
- </html>`;
279
- }
280
- //# sourceMappingURL=logs-page.js.map
@@ -1 +0,0 @@
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,10 +0,0 @@
1
- /**
2
- * Environment variable interpolation for preflight params.
3
- *
4
- * Replaces `${VAR_NAME}` tokens in string values with the corresponding
5
- * value from the provided env map. Nested objects and arrays are traversed
6
- * recursively; non-string leaves are returned as-is.
7
- */
8
- export declare function interpolateString(template: string, env: Record<string, string>): string;
9
- export declare function interpolateParams(params: Record<string, unknown>, env: Record<string, string>): Record<string, unknown>;
10
- //# sourceMappingURL=interpolate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/preflight/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIvF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Environment variable interpolation for preflight params.
3
- *
4
- * Replaces `${VAR_NAME}` tokens in string values with the corresponding
5
- * value from the provided env map. Nested objects and arrays are traversed
6
- * recursively; non-string leaves are returned as-is.
7
- */
8
- const ENV_VAR_RE = /\$\{([A-Za-z_][A-Za-z0-9_]*)}/g;
9
- export function interpolateString(template, env) {
10
- return template.replace(ENV_VAR_RE, (_match, name) => {
11
- return env[name] ?? "";
12
- });
13
- }
14
- export function interpolateParams(params, env) {
15
- const result = {};
16
- for (const [key, value] of Object.entries(params)) {
17
- result[key] = interpolateValue(value, env);
18
- }
19
- return result;
20
- }
21
- function interpolateValue(value, env) {
22
- if (typeof value === "string") {
23
- return interpolateString(value, env);
24
- }
25
- if (Array.isArray(value)) {
26
- return value.map((v) => interpolateValue(v, env));
27
- }
28
- if (value !== null && typeof value === "object") {
29
- return interpolateParams(value, env);
30
- }
31
- return value;
32
- }
33
- //# sourceMappingURL=interpolate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/preflight/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,GAA2B;IAC7E,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC3D,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,GAA2B;IAE3B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,GAA2B;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,iBAAiB,CAAC,KAAgC,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { PreflightProvider } from "../schema.js";
2
- export declare const gitCloneProvider: PreflightProvider;
3
- //# sourceMappingURL=git-clone.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-clone.d.ts","sourceRoot":"","sources":["../../../src/preflight/providers/git-clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAGxE,eAAO,MAAM,gBAAgB,EAAE,iBAsC9B,CAAC"}
@@ -1,36 +0,0 @@
1
- import { execSync } from "child_process";
2
- import { interpolateParams } from "../interpolate.js";
3
- export const gitCloneProvider = {
4
- id: "git-clone",
5
- async run(params, ctx) {
6
- const resolved = interpolateParams(params, ctx.env);
7
- const repo = resolved.repo;
8
- if (typeof repo !== "string" || !repo) {
9
- throw new Error("git-clone provider requires a 'repo' param");
10
- }
11
- const dest = resolved.dest;
12
- if (typeof dest !== "string" || !dest) {
13
- throw new Error("git-clone provider requires a 'dest' param");
14
- }
15
- // Expand short "owner/repo" to SSH URL; full URLs pass through
16
- const repoUrl = repo.includes("://") || repo.startsWith("git@")
17
- ? repo
18
- : `git@github.com:${repo}.git`;
19
- const args = ["git", "clone"];
20
- if (typeof resolved.branch === "string" && resolved.branch) {
21
- args.push("--branch", resolved.branch);
22
- }
23
- if (typeof resolved.depth === "number" && resolved.depth > 0) {
24
- args.push("--depth", String(resolved.depth));
25
- }
26
- args.push(repoUrl, dest);
27
- const cmd = args.join(" ");
28
- ctx.logger("info", "preflight git-clone", { repo: repoUrl, dest });
29
- execSync(cmd, {
30
- env: ctx.env,
31
- stdio: ["pipe", "pipe", "pipe"],
32
- });
33
- ctx.logger("info", "preflight git-clone done", { dest });
34
- },
35
- };
36
- //# sourceMappingURL=git-clone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-clone.js","sourceRoot":"","sources":["../../../src/preflight/providers/git-clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,EAAE,EAAE,WAAW;IAEf,KAAK,CAAC,GAAG,CAAC,MAA+B,EAAE,GAAqB;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,+DAA+D;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7D,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC;QAEjC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,QAAQ,CAAC,GAAG,EAAE;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { PreflightProvider } from "../schema.js";
2
- export declare const httpProvider: PreflightProvider;
3
- //# sourceMappingURL=http.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/preflight/providers/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAGxE,eAAO,MAAM,YAAY,EAAE,iBAmC1B,CAAC"}
@@ -1,36 +0,0 @@
1
- import { writeFileSync, mkdirSync } from "fs";
2
- import { dirname } from "path";
3
- import { interpolateParams } from "../interpolate.js";
4
- export const httpProvider = {
5
- id: "http",
6
- async run(params, ctx) {
7
- const resolved = interpolateParams(params, ctx.env);
8
- const url = resolved.url;
9
- if (typeof url !== "string" || !url) {
10
- throw new Error("http provider requires a 'url' param");
11
- }
12
- const output = resolved.output;
13
- if (typeof output !== "string" || !output) {
14
- throw new Error("http provider requires an 'output' param");
15
- }
16
- const method = (typeof resolved.method === "string" ? resolved.method : "GET").toUpperCase();
17
- const headers = {};
18
- if (resolved.headers && typeof resolved.headers === "object" && !Array.isArray(resolved.headers)) {
19
- for (const [k, v] of Object.entries(resolved.headers)) {
20
- if (typeof v === "string")
21
- headers[k] = v;
22
- }
23
- }
24
- const body = typeof resolved.body === "string" ? resolved.body : undefined;
25
- ctx.logger("info", "preflight http", { method, url: url.slice(0, 200) });
26
- const response = await fetch(url, { method, headers, body });
27
- if (!response.ok) {
28
- throw new Error(`HTTP ${response.status} ${response.statusText} from ${url}`);
29
- }
30
- const buffer = Buffer.from(await response.arrayBuffer());
31
- mkdirSync(dirname(output), { recursive: true });
32
- writeFileSync(output, buffer);
33
- ctx.logger("info", "preflight http output written", { path: output, bytes: buffer.length });
34
- },
35
- };
36
- //# sourceMappingURL=http.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/preflight/providers/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAqB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,EAAE,EAAE,MAAM;IAEV,KAAK,CAAC,GAAG,CAAC,MAA+B,EAAE,GAAqB;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7F,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAkC,CAAC,EAAE,CAAC;gBACjF,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3E,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,SAAS,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,+BAA+B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;CACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { PreflightProvider } from "../schema.js";
2
- export declare const shellProvider: PreflightProvider;
3
- //# sourceMappingURL=shell.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/preflight/providers/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAGxE,eAAO,MAAM,aAAa,EAAE,iBA0B3B,CAAC"}
@@ -1,28 +0,0 @@
1
- import { execSync } from "child_process";
2
- import { writeFileSync, mkdirSync } from "fs";
3
- import { dirname } from "path";
4
- import { interpolateParams } from "../interpolate.js";
5
- export const shellProvider = {
6
- id: "shell",
7
- async run(params, ctx) {
8
- const resolved = interpolateParams(params, ctx.env);
9
- const command = resolved.command;
10
- if (typeof command !== "string" || !command) {
11
- throw new Error("shell provider requires a 'command' param");
12
- }
13
- const output = typeof resolved.output === "string" ? resolved.output : undefined;
14
- ctx.logger("info", "preflight shell", { command: command.slice(0, 200) });
15
- const stdout = execSync(command, {
16
- shell: "/bin/sh",
17
- env: ctx.env,
18
- stdio: output ? ["pipe", "pipe", "pipe"] : ["pipe", "inherit", "pipe"],
19
- maxBuffer: 50 * 1024 * 1024, // 50 MB
20
- });
21
- if (output) {
22
- mkdirSync(dirname(output), { recursive: true });
23
- writeFileSync(output, stdout);
24
- ctx.logger("info", "preflight shell output written", { path: output, bytes: stdout.length });
25
- }
26
- },
27
- };
28
- //# sourceMappingURL=shell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/preflight/providers/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAqB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,EAAE,EAAE,OAAO;IAEX,KAAK,CAAC,GAAG,CAAC,MAA+B,EAAE,GAAqB;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjF,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;YACtE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;SACtC,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,gCAAgC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { PreflightProvider } from "./schema.js";
2
- export declare function resolvePreflightProvider(id: string): PreflightProvider;
3
- export declare function listPreflightProviders(): string[];
4
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/preflight/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWrD,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,CAOtE;AAED,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
@@ -1,20 +0,0 @@
1
- import { shellProvider } from "./providers/shell.js";
2
- import { httpProvider } from "./providers/http.js";
3
- import { gitCloneProvider } from "./providers/git-clone.js";
4
- const builtinProviders = {
5
- [shellProvider.id]: shellProvider,
6
- [httpProvider.id]: httpProvider,
7
- [gitCloneProvider.id]: gitCloneProvider,
8
- };
9
- export function resolvePreflightProvider(id) {
10
- const provider = builtinProviders[id];
11
- if (!provider) {
12
- const available = Object.keys(builtinProviders).join(", ");
13
- throw new Error(`Unknown preflight provider "${id}". Available: ${available}`);
14
- }
15
- return provider;
16
- }
17
- export function listPreflightProviders() {
18
- return Object.keys(builtinProviders);
19
- }
20
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/preflight/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,gBAAgB,GAAsC;IAC1D,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,aAAa;IACjC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY;IAC/B,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,gBAAgB;CACxC,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,EAAU;IACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACvC,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { PreflightStep, PreflightContext } from "./schema.js";
2
- /**
3
- * Run all preflight steps sequentially. If a required step fails, throws.
4
- * Optional steps log a warning and continue.
5
- */
6
- export declare function runPreflight(steps: PreflightStep[], ctx: PreflightContext): Promise<void>;
7
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/preflight/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,aAAa,EAAE,EACtB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -1,28 +0,0 @@
1
- import { resolvePreflightProvider } from "./registry.js";
2
- /**
3
- * Run all preflight steps sequentially. If a required step fails, throws.
4
- * Optional steps log a warning and continue.
5
- */
6
- export async function runPreflight(steps, ctx) {
7
- ctx.logger("info", "preflight starting", { stepCount: steps.length });
8
- for (let i = 0; i < steps.length; i++) {
9
- const step = steps[i];
10
- const required = step.required !== false; // default true
11
- const label = `[${i + 1}/${steps.length}] ${step.provider}`;
12
- try {
13
- const provider = resolvePreflightProvider(step.provider);
14
- await provider.run(step.params, ctx);
15
- ctx.logger("info", `preflight step ${label} done`);
16
- }
17
- catch (err) {
18
- const msg = err?.message || String(err);
19
- if (required) {
20
- ctx.logger("error", `preflight step ${label} failed (required)`, { error: msg });
21
- throw new Error(`Required preflight step "${step.provider}" failed: ${msg}`);
22
- }
23
- ctx.logger("warn", `preflight step ${label} failed (optional, continuing)`, { error: msg });
24
- }
25
- }
26
- ctx.logger("info", "preflight complete");
27
- }
28
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/preflight/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAsB,EACtB,GAAqB;IAErB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,eAAe;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,KAAK,oBAAoB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjF,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,QAAQ,aAAa,GAAG,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,KAAK,gCAAgC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Preflight step types and provider interface.
3
- *
4
- * Preflight steps run mechanical data-staging tasks (clone repos, fetch URLs,
5
- * run shell commands) inside the container after credentials are loaded but
6
- * before the LLM session starts. ACTIONS.md references the staged files.
7
- */
8
- export interface PreflightStep {
9
- provider: string;
10
- required?: boolean;
11
- params: Record<string, unknown>;
12
- }
13
- export interface PreflightContext {
14
- env: Record<string, string>;
15
- logger: (level: string, msg: string, data?: Record<string, any>) => void;
16
- }
17
- export interface PreflightProvider {
18
- id: string;
19
- run(params: Record<string, unknown>, ctx: PreflightContext): Promise<void>;
20
- }
21
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/preflight/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Preflight step types and provider interface.
3
- *
4
- * Preflight steps run mechanical data-staging tasks (clone repos, fetch URLs,
5
- * run shell commands) inside the container after credentials are loaded but
6
- * before the LLM session starts. ACTIONS.md references the staged files.
7
- */
8
- export {};
9
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/preflight/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}