@action-llama/action-llama 0.13.7 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-docs/AGENTS.md +123 -207
- package/dist/agents/container-entry.d.ts +1 -3
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +208 -154
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +19 -8
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/context-injection.d.ts +7 -0
- package/dist/agents/context-injection.d.ts.map +1 -0
- package/dist/agents/context-injection.js +27 -0
- package/dist/agents/context-injection.js.map +1 -0
- package/dist/agents/execution-engine.d.ts.map +1 -1
- package/dist/agents/execution-engine.js +99 -109
- package/dist/agents/execution-engine.js.map +1 -1
- package/dist/agents/model-fallback.d.ts +18 -0
- package/dist/agents/model-fallback.d.ts.map +1 -0
- package/dist/agents/model-fallback.js +40 -0
- package/dist/agents/model-fallback.js.map +1 -0
- package/dist/agents/prompt.d.ts +9 -2
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +21 -49
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/runner.d.ts +2 -0
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +142 -124
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/session-factory.d.ts +13 -0
- package/dist/agents/session-factory.d.ts.map +1 -0
- package/dist/agents/session-factory.js +27 -0
- package/dist/agents/session-factory.js.map +1 -0
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +43 -23
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +26 -43
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/claude.d.ts +4 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +8 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +24 -6
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +8 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +31 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +15 -6
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.js +2 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +9 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +149 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +3 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +50 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +7 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/lock-store.d.ts +10 -0
- package/dist/gateway/lock-store.d.ts.map +1 -1
- package/dist/gateway/lock-store.js +38 -0
- package/dist/gateway/lock-store.js.map +1 -1
- package/dist/gateway/routes/dashboard.d.ts +2 -1
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +26 -6
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js +39 -0
- package/dist/gateway/routes/locks.js.map +1 -1
- package/dist/gateway/routes/logs.d.ts.map +1 -1
- package/dist/gateway/routes/logs.js +4 -5
- package/dist/gateway/routes/logs.js.map +1 -1
- package/dist/gateway/routes/stats.d.ts +4 -0
- package/dist/gateway/routes/stats.d.ts.map +1 -0
- package/dist/gateway/routes/stats.js +25 -0
- package/dist/gateway/routes/stats.js.map +1 -0
- package/dist/gateway/views/agent-detail-page.d.ts +12 -0
- package/dist/gateway/views/agent-detail-page.d.ts.map +1 -0
- package/dist/gateway/views/agent-detail-page.js +303 -0
- package/dist/gateway/views/agent-detail-page.js.map +1 -0
- package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
- package/dist/gateway/views/dashboard-page.js +179 -245
- package/dist/gateway/views/dashboard-page.js.map +1 -1
- package/dist/gateway/views/instance-detail-page.d.ts +24 -0
- package/dist/gateway/views/instance-detail-page.d.ts.map +1 -0
- package/dist/gateway/views/instance-detail-page.js +277 -0
- package/dist/gateway/views/instance-detail-page.js.map +1 -0
- package/dist/gateway/views/layout.d.ts +17 -0
- package/dist/gateway/views/layout.d.ts.map +1 -0
- package/dist/gateway/views/layout.js +153 -0
- package/dist/gateway/views/layout.js.map +1 -0
- package/dist/gateway/views/login-page.d.ts.map +1 -1
- package/dist/gateway/views/login-page.js +24 -37
- package/dist/gateway/views/login-page.js.map +1 -1
- package/dist/hooks/runner.d.ts +12 -0
- package/dist/hooks/runner.d.ts.map +1 -0
- package/dist/hooks/runner.js +32 -0
- package/dist/hooks/runner.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +336 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/scheduler/call-dispatcher.d.ts +2 -2
- package/dist/scheduler/call-dispatcher.js +3 -3
- package/dist/scheduler/call-dispatcher.js.map +1 -1
- package/dist/scheduler/execution.d.ts +5 -2
- package/dist/scheduler/execution.d.ts.map +1 -1
- package/dist/scheduler/execution.js +75 -4
- package/dist/scheduler/execution.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +2 -0
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +3 -2
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/image-builder.js +3 -3
- package/dist/scheduler/image-builder.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +16 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/shutdown.d.ts +2 -0
- package/dist/scheduler/shutdown.d.ts.map +1 -1
- package/dist/scheduler/shutdown.js +4 -1
- package/dist/scheduler/shutdown.js.map +1 -1
- package/dist/scheduler/validation.d.ts.map +1 -1
- package/dist/scheduler/validation.js +5 -3
- package/dist/scheduler/validation.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +1 -1
- package/dist/scheduler/watcher.js +1 -1
- package/dist/scheduler/webhook-setup.d.ts +2 -0
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +2 -0
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/setup/prompts.d.ts.map +1 -1
- package/dist/setup/prompts.js +35 -6
- package/dist/setup/prompts.js.map +1 -1
- package/dist/setup/scaffold.d.ts +6 -0
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +185 -7
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/shared/config.d.ts +16 -5
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +75 -18
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credential-refs.d.ts.map +1 -1
- package/dist/shared/credential-refs.js +8 -0
- package/dist/shared/credential-refs.js.map +1 -1
- package/dist/shared/environment.d.ts +0 -1
- package/dist/shared/environment.d.ts.map +1 -1
- package/dist/shared/environment.js +19 -3
- package/dist/shared/environment.js.map +1 -1
- package/dist/shared/frontmatter.d.ts +11 -0
- package/dist/shared/frontmatter.d.ts.map +1 -0
- package/dist/shared/frontmatter.js +30 -0
- package/dist/shared/frontmatter.js.map +1 -0
- package/dist/shared/paths.d.ts +1 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +3 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/stats/index.d.ts +3 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/index.js +2 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/store.d.ts +89 -0
- package/dist/stats/store.d.ts.map +1 -0
- package/dist/stats/store.js +242 -0
- package/dist/stats/store.js.map +1 -0
- package/dist/tui/status-tracker.d.ts +6 -1
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +11 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/docker/bin/{al-call → al-subagent} +2 -2
- package/docker/bin/{al-check → al-subagent-check} +2 -2
- package/docker/bin/{al-wait → al-subagent-wait} +2 -2
- package/package.json +8 -21
- package/LICENSE +0 -21
- package/README.md +0 -192
- package/dist/gateway/views/logs-page.d.ts +0 -2
- package/dist/gateway/views/logs-page.d.ts.map +0 -1
- package/dist/gateway/views/logs-page.js +0 -280
- package/dist/gateway/views/logs-page.js.map +0 -1
- package/dist/preflight/interpolate.d.ts +0 -10
- package/dist/preflight/interpolate.d.ts.map +0 -1
- package/dist/preflight/interpolate.js +0 -33
- package/dist/preflight/interpolate.js.map +0 -1
- package/dist/preflight/providers/git-clone.d.ts +0 -3
- package/dist/preflight/providers/git-clone.d.ts.map +0 -1
- package/dist/preflight/providers/git-clone.js +0 -36
- package/dist/preflight/providers/git-clone.js.map +0 -1
- package/dist/preflight/providers/http.d.ts +0 -3
- package/dist/preflight/providers/http.d.ts.map +0 -1
- package/dist/preflight/providers/http.js +0 -36
- package/dist/preflight/providers/http.js.map +0 -1
- package/dist/preflight/providers/shell.d.ts +0 -3
- package/dist/preflight/providers/shell.d.ts.map +0 -1
- package/dist/preflight/providers/shell.js +0 -28
- package/dist/preflight/providers/shell.js.map +0 -1
- package/dist/preflight/registry.d.ts +0 -4
- package/dist/preflight/registry.d.ts.map +0 -1
- package/dist/preflight/registry.js +0 -20
- package/dist/preflight/registry.js.map +0 -1
- package/dist/preflight/runner.d.ts +0 -7
- package/dist/preflight/runner.d.ts.map +0 -1
- package/dist/preflight/runner.js +0 -28
- package/dist/preflight/runner.js.map +0 -1
- package/dist/preflight/schema.d.ts +0 -21
- package/dist/preflight/schema.d.ts.map +0 -1
- package/dist/preflight/schema.js +0 -9
- package/dist/preflight/schema.js.map +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { escapeHtml, formatDuration, formatCost, formatTokens, renderLayout } from "./layout.js";
|
|
2
|
+
function stateColor(state) {
|
|
3
|
+
switch (state) {
|
|
4
|
+
case "running": return { dot: "bg-green-500", text: "text-green-600 dark:text-green-400" };
|
|
5
|
+
case "building": return { dot: "bg-yellow-500", text: "text-yellow-600 dark:text-yellow-400" };
|
|
6
|
+
case "error": return { dot: "bg-red-500", text: "text-red-600 dark:text-red-400" };
|
|
7
|
+
case "idle": return { dot: "bg-slate-400", text: "text-slate-500 dark:text-slate-400" };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function instanceStatusColor(status) {
|
|
11
|
+
switch (status) {
|
|
12
|
+
case "running": return "text-green-600 dark:text-green-400";
|
|
13
|
+
case "completed": return "text-slate-600 dark:text-slate-300";
|
|
14
|
+
case "error": return "text-red-600 dark:text-red-400";
|
|
15
|
+
case "killed": return "text-yellow-600 dark:text-yellow-400";
|
|
16
|
+
default: return "text-slate-500";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function instanceCardStyle(status) {
|
|
20
|
+
switch (status) {
|
|
21
|
+
case "running": return { bg: "bg-green-50 dark:bg-green-950/30", border: "border-green-200 dark:border-green-900", dot: "bg-green-500", pulse: "animate-pulse" };
|
|
22
|
+
case "completed": return { bg: "bg-slate-50 dark:bg-slate-900", border: "border-slate-200 dark:border-slate-800", dot: "bg-slate-400", pulse: "" };
|
|
23
|
+
case "error": return { bg: "bg-red-50 dark:bg-red-950/30", border: "border-red-200 dark:border-red-900", dot: "bg-red-500", pulse: "" };
|
|
24
|
+
case "killed": return { bg: "bg-yellow-50 dark:bg-yellow-950/30", border: "border-yellow-200 dark:border-yellow-900", dot: "bg-yellow-500", pulse: "" };
|
|
25
|
+
default: return { bg: "bg-slate-50 dark:bg-slate-900", border: "border-slate-200 dark:border-slate-800", dot: "bg-slate-400", pulse: "" };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function renderInstanceCard(inst, agentName) {
|
|
29
|
+
const s = instanceCardStyle(inst.status);
|
|
30
|
+
const killBtn = inst.status === "running"
|
|
31
|
+
? `<button class="px-2 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors" onclick="killInstance('${escapeHtml(inst.id)}')">Kill</button>`
|
|
32
|
+
: "";
|
|
33
|
+
return `<div class="${s.bg} border ${s.border} rounded-lg p-3 flex items-center justify-between" data-instance="${escapeHtml(inst.id)}">
|
|
34
|
+
<div>
|
|
35
|
+
<a href="/dashboard/agents/${escapeHtml(agentName)}/instances/${escapeHtml(inst.id)}" class="text-blue-600 dark:text-blue-400 hover:underline font-mono text-sm">${escapeHtml(inst.id)}</a>
|
|
36
|
+
<span class="ml-2 text-xs text-slate-500">${escapeHtml(inst.trigger)}</span>
|
|
37
|
+
<span class="ml-2 text-xs text-slate-400">started ${escapeHtml(inst.startedAt.toLocaleTimeString())}</span>
|
|
38
|
+
<span class="ml-2 text-xs ${instanceStatusColor(inst.status)}">${escapeHtml(inst.status)}</span>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="flex items-center gap-2">
|
|
41
|
+
${killBtn}
|
|
42
|
+
<span class="state-dot ${s.dot} inline-block ${s.pulse}"></span>
|
|
43
|
+
</div>
|
|
44
|
+
</div>`;
|
|
45
|
+
}
|
|
46
|
+
function renderStatCard(label, value) {
|
|
47
|
+
return `<div class="bg-slate-50 dark:bg-slate-900 rounded-lg border border-slate-200 dark:border-slate-800 p-3">
|
|
48
|
+
<div class="text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wide mb-1">${escapeHtml(label)}</div>
|
|
49
|
+
<div class="text-lg font-semibold text-slate-900 dark:text-white">${value}</div>
|
|
50
|
+
</div>`;
|
|
51
|
+
}
|
|
52
|
+
export function renderAgentDetailPage(data) {
|
|
53
|
+
const { agentName, agent, summary, runningInstances, totalHistorical } = data;
|
|
54
|
+
const colors = agent ? stateColor(agent.state) : { dot: "bg-slate-400", text: "text-slate-400" };
|
|
55
|
+
const stateHtml = agent
|
|
56
|
+
? `<span class="state-dot ${colors.dot} inline-block mr-1.5"></span><span class="${colors.text}">${escapeHtml(agent.state)}</span>`
|
|
57
|
+
: '<span class="text-slate-400">unknown</span>';
|
|
58
|
+
const content = `
|
|
59
|
+
<div class="flex flex-wrap items-center justify-between gap-3 mb-6">
|
|
60
|
+
<div class="flex items-center gap-3">
|
|
61
|
+
<h1 class="text-xl sm:text-2xl font-bold text-slate-900 dark:text-white">${escapeHtml(agentName)}</h1>
|
|
62
|
+
<span id="agent-state" class="text-sm">${stateHtml}</span>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="flex items-center gap-2">
|
|
65
|
+
<button class="px-3 py-1.5 text-sm rounded-md font-bold bg-green-600 hover:bg-green-700 text-white transition-colors" onclick="triggerAgent('${escapeHtml(agentName)}')">Run</button>
|
|
66
|
+
<button class="px-3 py-1.5 text-sm rounded-md font-bold bg-red-600 hover:bg-red-700 text-white transition-colors" onclick="killAgent()">Kill</button>
|
|
67
|
+
<button id="toggle-btn" class="px-3 py-1.5 text-sm rounded-md font-bold border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 hover:bg-slate-50 dark:hover:bg-slate-700 text-slate-700 dark:text-slate-200 transition-colors" onclick="toggleEnabled()">${agent?.enabled !== false ? "Disable" : "Enable"}</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 mb-6">
|
|
72
|
+
${renderStatCard("Total Runs", `${summary?.totalRuns ?? 0}`)}
|
|
73
|
+
${renderStatCard("Success", `${summary?.okRuns ?? 0}`)}
|
|
74
|
+
${renderStatCard("Errors", `${summary?.errorRuns ?? 0}`)}
|
|
75
|
+
${renderStatCard("Avg Duration", summary?.avgDurationMs ? formatDuration(summary.avgDurationMs) : "\u2014")}
|
|
76
|
+
${renderStatCard("Total Tokens", formatTokens(summary?.totalTokens ?? 0))}
|
|
77
|
+
${renderStatCard("Total Cost", formatCost(summary?.totalCost ?? 0))}
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<!-- Session instances -->
|
|
81
|
+
<div id="running-section" class="${runningInstances.length > 0 ? "" : "hidden"} mb-6">
|
|
82
|
+
<h2 class="text-base font-semibold text-slate-900 dark:text-white mb-3">Session Instances</h2>
|
|
83
|
+
<div id="running-instances" class="space-y-2">
|
|
84
|
+
${runningInstances.map((inst) => renderInstanceCard(inst, agentName)).join("\n")}
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<!-- Instance history -->
|
|
89
|
+
<h2 class="text-base font-semibold text-slate-900 dark:text-white mb-3">Instance History <span id="total-count" class="text-sm font-normal text-slate-400">(${totalHistorical} total)</span></h2>
|
|
90
|
+
<div class="overflow-x-auto mb-4">
|
|
91
|
+
<table class="w-full">
|
|
92
|
+
<thead>
|
|
93
|
+
<tr class="border-b-2 border-slate-200 dark:border-slate-700">
|
|
94
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Instance</th>
|
|
95
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Trigger</th>
|
|
96
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Status</th>
|
|
97
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Started</th>
|
|
98
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Duration</th>
|
|
99
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Tokens</th>
|
|
100
|
+
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Cost</th>
|
|
101
|
+
</tr>
|
|
102
|
+
</thead>
|
|
103
|
+
<tbody id="history-body" class="divide-y divide-slate-100 dark:divide-slate-800">
|
|
104
|
+
<tr><td colspan="7" class="px-3 py-6 text-center text-slate-400 italic">Loading...</td></tr>
|
|
105
|
+
</tbody>
|
|
106
|
+
</table>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="flex justify-between items-center mb-8" id="pagination">
|
|
109
|
+
<button id="prev-btn" class="px-3 py-1.5 text-sm rounded-md border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 hover:bg-slate-50 dark:hover:bg-slate-700 text-slate-700 dark:text-slate-200 transition-colors disabled:opacity-40 disabled:cursor-not-allowed" onclick="prevPage()" disabled>Previous</button>
|
|
110
|
+
<span id="page-info" class="text-sm text-slate-400"></span>
|
|
111
|
+
<button id="next-btn" class="px-3 py-1.5 text-sm rounded-md border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 hover:bg-slate-50 dark:hover:bg-slate-700 text-slate-700 dark:text-slate-200 transition-colors disabled:opacity-40 disabled:cursor-not-allowed" onclick="nextPage()" disabled>Next</button>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<!-- Aggregate logs -->
|
|
115
|
+
<h2 class="text-base font-semibold text-slate-900 dark:text-white mb-3">Recent Logs</h2>
|
|
116
|
+
<div id="agent-log-container" class="bg-slate-50 dark:bg-slate-900 rounded-lg border border-slate-200 dark:border-slate-800 p-3 sm:p-4 font-mono text-xs sm:text-sm leading-relaxed overflow-y-auto scrollbar-thin" style="height: 300px;">
|
|
117
|
+
<div id="agent-log-empty" class="text-slate-400 italic">Loading logs...</div>
|
|
118
|
+
</div>`;
|
|
119
|
+
const scripts = `<script>
|
|
120
|
+
var agentName = ${JSON.stringify(agentName)};
|
|
121
|
+
var currentPage = 1;
|
|
122
|
+
var pageSize = 10;
|
|
123
|
+
var totalItems = ${totalHistorical};
|
|
124
|
+
var agentEnabled = ${agent?.enabled !== false ? "true" : "false"};
|
|
125
|
+
|
|
126
|
+
var stateColors = { running: "bg-green-500", building: "bg-yellow-500", error: "bg-red-500", idle: "bg-slate-400" };
|
|
127
|
+
var stateTextColors = { running: "text-green-600 dark:text-green-400", building: "text-yellow-600 dark:text-yellow-400", error: "text-red-600 dark:text-red-400", idle: "text-slate-500 dark:text-slate-400" };
|
|
128
|
+
|
|
129
|
+
function resultColor(result) {
|
|
130
|
+
if (result === "completed" || result === "rerun") return "text-green-600 dark:text-green-400";
|
|
131
|
+
if (result === "error") return "text-red-600 dark:text-red-400";
|
|
132
|
+
return "text-slate-500 dark:text-slate-400";
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function instStyle(status) {
|
|
136
|
+
if (status === "running") return { bg: "bg-green-50 dark:bg-green-950/30", border: "border-green-200 dark:border-green-900", dot: "bg-green-500", pulse: "animate-pulse" };
|
|
137
|
+
if (status === "error") return { bg: "bg-red-50 dark:bg-red-950/30", border: "border-red-200 dark:border-red-900", dot: "bg-red-500", pulse: "" };
|
|
138
|
+
if (status === "killed") return { bg: "bg-yellow-50 dark:bg-yellow-950/30", border: "border-yellow-200 dark:border-yellow-900", dot: "bg-yellow-500", pulse: "" };
|
|
139
|
+
return { bg: "bg-slate-50 dark:bg-slate-900", border: "border-slate-200 dark:border-slate-800", dot: "bg-slate-400", pulse: "" };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function instStatusColor(status) {
|
|
143
|
+
if (status === "running") return "text-green-600 dark:text-green-400";
|
|
144
|
+
if (status === "error") return "text-red-600 dark:text-red-400";
|
|
145
|
+
if (status === "killed") return "text-yellow-600 dark:text-yellow-400";
|
|
146
|
+
return "text-slate-600 dark:text-slate-300";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function renderHistoryRow(r) {
|
|
150
|
+
var started = new Date(r.started_at).toLocaleString();
|
|
151
|
+
var rc = resultColor(r.result);
|
|
152
|
+
return '<tr class="hover:bg-slate-50 dark:hover:bg-slate-900/50 transition-colors">' +
|
|
153
|
+
'<td class="px-3 py-2.5"><a href="/dashboard/agents/' + esc(agentName) + '/instances/' + esc(r.instance_id) + '" class="text-blue-600 dark:text-blue-400 hover:underline font-mono text-xs">' + esc(r.instance_id) + '</a></td>' +
|
|
154
|
+
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + esc(r.trigger_type) + '</td>' +
|
|
155
|
+
'<td class="px-3 py-2.5 text-sm ' + rc + '">' + esc(r.result) + '</td>' +
|
|
156
|
+
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + esc(started) + '</td>' +
|
|
157
|
+
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + fmtDur(r.duration_ms) + '</td>' +
|
|
158
|
+
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + fmtTokens(r.total_tokens || 0) + '</td>' +
|
|
159
|
+
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + fmtCost(r.cost_usd || 0) + '</td></tr>';
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function loadPage(page) {
|
|
163
|
+
currentPage = page;
|
|
164
|
+
fetch("/api/stats/agents/" + encodeURIComponent(agentName) + "/runs?page=" + page + "&limit=" + pageSize, { credentials: "same-origin" })
|
|
165
|
+
.then(function(r) { return r.json(); })
|
|
166
|
+
.then(function(data) {
|
|
167
|
+
totalItems = data.total;
|
|
168
|
+
var tbody = document.getElementById("history-body");
|
|
169
|
+
if (data.runs.length > 0) {
|
|
170
|
+
tbody.innerHTML = data.runs.map(renderHistoryRow).join("");
|
|
171
|
+
} else {
|
|
172
|
+
tbody.innerHTML = '<tr><td colspan="7" class="px-3 py-6 text-center text-slate-400 italic">No run history</td></tr>';
|
|
173
|
+
}
|
|
174
|
+
document.getElementById("total-count").textContent = "(" + totalItems + " total)";
|
|
175
|
+
var totalPages = Math.max(1, Math.ceil(totalItems / pageSize));
|
|
176
|
+
document.getElementById("page-info").textContent = "Page " + currentPage + " of " + totalPages;
|
|
177
|
+
document.getElementById("prev-btn").disabled = currentPage <= 1;
|
|
178
|
+
document.getElementById("next-btn").disabled = currentPage >= totalPages;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function prevPage() { if (currentPage > 1) loadPage(currentPage - 1); }
|
|
183
|
+
function nextPage() { loadPage(currentPage + 1); }
|
|
184
|
+
|
|
185
|
+
loadPage(1);
|
|
186
|
+
|
|
187
|
+
// SSE for live updates
|
|
188
|
+
var es = new EventSource("/dashboard/api/status-stream");
|
|
189
|
+
es.onmessage = function(e) {
|
|
190
|
+
var data = JSON.parse(e.data);
|
|
191
|
+
if (data.agents) {
|
|
192
|
+
var agent = data.agents.find(function(a) { return a.name === agentName; });
|
|
193
|
+
if (agent) {
|
|
194
|
+
var dotClass = stateColors[agent.state] || "bg-slate-400";
|
|
195
|
+
var textClass = stateTextColors[agent.state] || "text-slate-400";
|
|
196
|
+
document.getElementById("agent-state").innerHTML = '<span class="state-dot ' + dotClass + ' inline-block mr-1.5"></span><span class="' + textClass + '">' + esc(agent.state) + '</span>';
|
|
197
|
+
agentEnabled = agent.enabled;
|
|
198
|
+
document.getElementById("toggle-btn").textContent = agentEnabled ? "Disable" : "Enable";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (data.instances) {
|
|
202
|
+
var mine = data.instances.filter(function(i) { return i.agentName === agentName; });
|
|
203
|
+
var section = document.getElementById("running-section");
|
|
204
|
+
var container = document.getElementById("running-instances");
|
|
205
|
+
if (mine.length > 0) {
|
|
206
|
+
section.classList.remove("hidden");
|
|
207
|
+
container.innerHTML = mine.map(function(inst) {
|
|
208
|
+
var st = instStyle(inst.status);
|
|
209
|
+
var killBtn = inst.status === "running"
|
|
210
|
+
? '<button class="px-2 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors" onclick="killInstance(\\\'' + esc(inst.id) + '\\\')">Kill</button>'
|
|
211
|
+
: "";
|
|
212
|
+
var statusColor = instStatusColor(inst.status);
|
|
213
|
+
return '<div class="' + st.bg + ' border ' + st.border + ' rounded-lg p-3 flex items-center justify-between" data-instance="' + esc(inst.id) + '">' +
|
|
214
|
+
'<div><a href="/dashboard/agents/' + esc(agentName) + '/instances/' + esc(inst.id) + '" class="text-blue-600 dark:text-blue-400 hover:underline font-mono text-sm">' + esc(inst.id) + '</a>' +
|
|
215
|
+
'<span class="ml-2 text-xs text-slate-500">' + esc(inst.trigger) + '</span>' +
|
|
216
|
+
'<span class="ml-2 text-xs text-slate-400">started ' + fmtTime(inst.startedAt) + '</span>' +
|
|
217
|
+
'<span class="ml-2 text-xs ' + statusColor + '">' + esc(inst.status) + '</span></div>' +
|
|
218
|
+
'<div class="flex items-center gap-2">' + killBtn +
|
|
219
|
+
'<span class="state-dot ' + st.dot + ' inline-block ' + st.pulse + '"></span></div></div>';
|
|
220
|
+
}).join("");
|
|
221
|
+
} else {
|
|
222
|
+
section.classList.add("hidden");
|
|
223
|
+
container.innerHTML = "";
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
function triggerAgent(name) {
|
|
229
|
+
ctrlPost("/control/trigger/" + encodeURIComponent(name));
|
|
230
|
+
}
|
|
231
|
+
function toggleEnabled() {
|
|
232
|
+
var action = agentEnabled ? "disable" : "enable";
|
|
233
|
+
ctrlPost("/control/agents/" + encodeURIComponent(agentName) + "/" + action);
|
|
234
|
+
}
|
|
235
|
+
function killAgent() {
|
|
236
|
+
if (!confirm("Kill all instances of agent '" + agentName + "'?")) return;
|
|
237
|
+
ctrlPost("/control/agents/" + encodeURIComponent(agentName) + "/kill");
|
|
238
|
+
}
|
|
239
|
+
function killInstance(id) {
|
|
240
|
+
if (!confirm("Kill instance " + id + "?")) return;
|
|
241
|
+
ctrlPost("/control/kill/" + encodeURIComponent(id));
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Aggregate log viewer
|
|
245
|
+
var SKIP_LOG_MSGS = { "event": 1, "tool done": 1 };
|
|
246
|
+
function formatAgentLogEntry(p) {
|
|
247
|
+
var time = '<span class="text-slate-400">' + esc(new Date(p.time).toLocaleTimeString("en-US", { hour12: false })) + '</span> ';
|
|
248
|
+
var msg = p.msg || "";
|
|
249
|
+
var lvl = p.level || 30;
|
|
250
|
+
var inst = p.instance ? '<span class="text-purple-400">[' + esc(p.instance.slice(0, 8)) + ']</span> ' : "";
|
|
251
|
+
if (SKIP_LOG_MSGS[msg]) return null;
|
|
252
|
+
if (lvl <= 20 && msg !== "tool start") return null;
|
|
253
|
+
if (msg === "assistant") {
|
|
254
|
+
var text = p.text || "";
|
|
255
|
+
if (!text) return null;
|
|
256
|
+
return time + inst + '<span class="text-slate-900 dark:text-white font-medium">' + esc(text.split("\\n")[0]) + '</span>';
|
|
257
|
+
}
|
|
258
|
+
if (msg === "bash") return time + inst + '<span class="text-cyan-500">$ ' + esc(p.cmd || "") + '</span>';
|
|
259
|
+
if (msg === "tool start") return time + inst + '<span class="text-blue-500">\\u25b8 ' + esc(p.tool || "unknown") + '</span>';
|
|
260
|
+
if (msg === "run completed" || msg === "run completed, rerun requested") return time + inst + '<span class="text-green-500 font-semibold">Run completed</span>';
|
|
261
|
+
if (lvl >= 50) return time + inst + '<span class="text-red-500 font-semibold">ERROR: ' + esc(msg) + '</span>';
|
|
262
|
+
if (lvl >= 40) return time + inst + '<span class="text-yellow-500">WARN: ' + esc(msg) + '</span>';
|
|
263
|
+
return time + inst + '<span class="text-slate-400">' + esc(msg) + '</span>';
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
var agentLogContainer = document.getElementById("agent-log-container");
|
|
267
|
+
var agentLogEmpty = document.getElementById("agent-log-empty");
|
|
268
|
+
var agentLogCursor = null;
|
|
269
|
+
async function fetchAgentLogs(initial) {
|
|
270
|
+
try {
|
|
271
|
+
var params = new URLSearchParams();
|
|
272
|
+
if (initial) params.set("lines", "200");
|
|
273
|
+
if (agentLogCursor) params.set("cursor", agentLogCursor);
|
|
274
|
+
var res = await fetch("/api/logs/agents/" + encodeURIComponent(agentName) + "?" + params, { credentials: "same-origin" });
|
|
275
|
+
if (!res.ok) return;
|
|
276
|
+
var data = await res.json();
|
|
277
|
+
if (data.entries.length > 0 && agentLogEmpty && agentLogEmpty.parentNode) agentLogEmpty.remove();
|
|
278
|
+
for (var i = 0; i < data.entries.length; i++) {
|
|
279
|
+
var html = formatAgentLogEntry(data.entries[i]);
|
|
280
|
+
if (!html) continue;
|
|
281
|
+
var div = document.createElement("div");
|
|
282
|
+
div.className = "whitespace-pre-wrap break-all py-px";
|
|
283
|
+
div.innerHTML = html;
|
|
284
|
+
agentLogContainer.appendChild(div);
|
|
285
|
+
}
|
|
286
|
+
if (data.cursor) agentLogCursor = data.cursor;
|
|
287
|
+
agentLogContainer.scrollTop = agentLogContainer.scrollHeight;
|
|
288
|
+
} catch(e) {}
|
|
289
|
+
}
|
|
290
|
+
fetchAgentLogs(true);
|
|
291
|
+
setInterval(function() { fetchAgentLogs(false); }, 2000);
|
|
292
|
+
</script>`;
|
|
293
|
+
return renderLayout({
|
|
294
|
+
title: agentName,
|
|
295
|
+
breadcrumbs: [
|
|
296
|
+
{ label: "Dashboard", href: "/dashboard" },
|
|
297
|
+
{ label: agentName },
|
|
298
|
+
],
|
|
299
|
+
content,
|
|
300
|
+
scripts,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=agent-detail-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detail-page.js","sourceRoot":"","sources":["../../../src/gateway/views/agent-detail-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-page.d.ts","sourceRoot":"","sources":["../../../src/gateway/views/dashboard-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard-page.d.ts","sourceRoot":"","sources":["../../../src/gateway/views/dashboard-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAoGvF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAmL7H"}
|