@action-llama/action-llama 0.16.0 → 0.17.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/dist/agents/container-runner.d.ts +1 -1
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +42 -49
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/runner.d.ts +0 -4
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +0 -10
- package/dist/agents/runner.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +0 -46
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +33 -16
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/new.d.ts +7 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +54 -23
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +1 -0
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.js +1 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +5 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/vps/nginx.d.ts +4 -1
- package/dist/cloud/vps/nginx.d.ts.map +1 -1
- package/dist/cloud/vps/nginx.js +43 -12
- package/dist/cloud/vps/nginx.js.map +1 -1
- package/dist/{gateway → control}/api-key.d.ts.map +1 -1
- package/dist/{gateway → control}/api-key.js.map +1 -1
- package/dist/{gateway → control}/auth.d.ts.map +1 -1
- package/dist/{gateway → control}/auth.js.map +1 -1
- package/dist/control/index.d.ts +11 -0
- package/dist/control/index.d.ts.map +1 -0
- package/dist/control/index.js +8 -0
- package/dist/control/index.js.map +1 -0
- package/dist/{gateway → control}/routes/control.d.ts.map +1 -1
- package/dist/{gateway → control}/routes/control.js.map +1 -1
- package/dist/control/routes/dashboard-api.d.ts +20 -0
- package/dist/control/routes/dashboard-api.d.ts.map +1 -0
- package/dist/control/routes/dashboard-api.js +168 -0
- package/dist/control/routes/dashboard-api.js.map +1 -0
- package/dist/control/routes/dashboard.d.ts +8 -0
- package/dist/control/routes/dashboard.d.ts.map +1 -0
- package/dist/control/routes/dashboard.js +53 -0
- package/dist/control/routes/dashboard.js.map +1 -0
- package/dist/{gateway → control}/routes/logs.d.ts.map +1 -1
- package/dist/{gateway → control}/routes/logs.js.map +1 -1
- package/dist/{gateway → control}/routes/stats.d.ts.map +1 -1
- package/dist/{gateway → control}/routes/stats.js +13 -0
- package/dist/control/routes/stats.js.map +1 -0
- package/dist/{gateway → control}/session-store.d.ts.map +1 -1
- package/dist/{gateway → control}/session-store.js.map +1 -1
- package/dist/control/types.d.ts +6 -0
- package/dist/control/types.d.ts.map +1 -0
- package/dist/{gateway → control}/types.js.map +1 -1
- package/dist/credentials/providers/file.d.ts +13 -0
- package/dist/credentials/providers/file.d.ts.map +1 -0
- package/dist/credentials/providers/file.js +34 -0
- package/dist/credentials/providers/file.js.map +1 -0
- package/dist/credentials/providers/index.d.ts +13 -0
- package/dist/credentials/providers/index.d.ts.map +1 -0
- package/dist/credentials/providers/index.js +70 -0
- package/dist/credentials/providers/index.js.map +1 -0
- package/dist/credentials/providers/vault.d.ts +19 -0
- package/dist/credentials/providers/vault.d.ts.map +1 -0
- package/dist/credentials/providers/vault.js +94 -0
- package/dist/credentials/providers/vault.js.map +1 -0
- package/dist/docker/providers/index.d.ts +13 -0
- package/dist/docker/providers/index.d.ts.map +1 -0
- package/dist/docker/providers/index.js +74 -0
- package/dist/docker/providers/index.js.map +1 -0
- package/dist/{scheduler → events}/cron-setup.d.ts +7 -12
- package/dist/events/cron-setup.d.ts.map +1 -0
- package/dist/{scheduler → events}/cron-setup.js +4 -33
- package/dist/events/cron-setup.js.map +1 -0
- package/dist/events/event-queue-sqlite.d.ts.map +1 -0
- package/dist/events/event-queue-sqlite.js.map +1 -0
- package/dist/events/event-queue-unified.d.ts.map +1 -0
- package/dist/events/event-queue-unified.js.map +1 -0
- package/dist/{scheduler → events}/event-queue.d.ts +2 -16
- package/dist/events/event-queue.d.ts.map +1 -0
- package/dist/events/event-queue.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +5 -0
- package/dist/events/index.js.map +1 -0
- package/dist/{gateway → events}/routes/webhooks.d.ts +2 -1
- package/dist/events/routes/webhooks.d.ts.map +1 -0
- package/dist/events/routes/webhooks.js +201 -0
- package/dist/events/routes/webhooks.js.map +1 -0
- package/dist/{scheduler → events}/webhook-setup.d.ts +8 -6
- package/dist/events/webhook-setup.d.ts.map +1 -0
- package/dist/{scheduler → events}/webhook-setup.js +2 -24
- package/dist/events/webhook-setup.js.map +1 -0
- package/dist/{scheduler → execution}/call-dispatcher.d.ts.map +1 -1
- package/dist/{scheduler → execution}/call-dispatcher.js.map +1 -1
- package/dist/execution/call-store.d.ts.map +1 -0
- package/dist/execution/call-store.js.map +1 -0
- package/dist/execution/container-registry.d.ts.map +1 -0
- package/dist/execution/container-registry.js.map +1 -0
- package/dist/{scheduler → execution}/execution.d.ts +4 -3
- package/dist/execution/execution.d.ts.map +1 -0
- package/dist/{scheduler → execution}/execution.js +2 -1
- package/dist/execution/execution.js.map +1 -0
- package/dist/{scheduler → execution}/image-builder.d.ts +1 -1
- package/dist/execution/image-builder.d.ts.map +1 -0
- package/dist/{scheduler → execution}/image-builder.js +2 -0
- package/dist/execution/image-builder.js.map +1 -0
- package/dist/execution/index.d.ts +21 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +14 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/{scheduler → execution}/lifecycle/agent-lifecycle.d.ts.map +1 -1
- package/dist/{scheduler → execution}/lifecycle/agent-lifecycle.js.map +1 -1
- package/dist/{scheduler → execution}/lifecycle/index.d.ts.map +1 -1
- package/dist/{scheduler → execution}/lifecycle/index.js.map +1 -1
- package/dist/{scheduler → execution}/lifecycle/instance-lifecycle.d.ts.map +1 -1
- package/dist/{scheduler → execution}/lifecycle/instance-lifecycle.js.map +1 -1
- package/dist/execution/lock-store.d.ts.map +1 -0
- package/dist/execution/lock-store.js.map +1 -0
- package/dist/execution/routes/calls.d.ts.map +1 -0
- package/dist/execution/routes/calls.js.map +1 -0
- package/dist/execution/routes/locks.d.ts.map +1 -0
- package/dist/{gateway → execution}/routes/locks.js +1 -0
- package/dist/execution/routes/locks.js.map +1 -0
- package/dist/execution/routes/shutdown.d.ts.map +1 -0
- package/dist/execution/routes/shutdown.js.map +1 -0
- package/dist/execution/routes/signals.d.ts.map +1 -0
- package/dist/execution/routes/signals.js.map +1 -0
- package/dist/{scheduler → execution}/runner-pool.d.ts.map +1 -1
- package/dist/{scheduler → execution}/runner-pool.js.map +1 -1
- package/dist/{scheduler → execution}/runner-setup.d.ts +1 -1
- package/dist/execution/runner-setup.d.ts.map +1 -0
- package/dist/{scheduler → execution}/runner-setup.js.map +1 -1
- package/dist/{scheduler → execution}/runtime-factory.d.ts +1 -1
- package/dist/{scheduler → execution}/runtime-factory.d.ts.map +1 -1
- package/dist/execution/runtime-factory.js +46 -0
- package/dist/execution/runtime-factory.js.map +1 -0
- package/dist/{gateway → execution}/types.d.ts +0 -5
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +2 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/extensions/index.d.ts +4 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +5 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +15 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +120 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/registry.d.ts +32 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +123 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +74 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +2 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/gateway/index.d.ts +13 -8
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +90 -21
- package/dist/gateway/index.js.map +1 -1
- package/dist/models/providers/anthropic.d.ts +17 -0
- package/dist/models/providers/anthropic.d.ts.map +1 -0
- package/dist/models/providers/anthropic.js +73 -0
- package/dist/models/providers/anthropic.js.map +1 -0
- package/dist/models/providers/custom.d.ts +18 -0
- package/dist/models/providers/custom.d.ts.map +1 -0
- package/dist/models/providers/custom.js +104 -0
- package/dist/models/providers/custom.js.map +1 -0
- package/dist/models/providers/index.d.ts +17 -0
- package/dist/models/providers/index.d.ts.map +1 -0
- package/dist/models/providers/index.js +107 -0
- package/dist/models/providers/index.js.map +1 -0
- package/dist/models/providers/openai.d.ts +18 -0
- package/dist/models/providers/openai.d.ts.map +1 -0
- package/dist/models/providers/openai.js +88 -0
- package/dist/models/providers/openai.js.map +1 -0
- package/dist/models/types.d.ts +51 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +5 -0
- package/dist/models/types.js.map +1 -0
- package/dist/remote/push.d.ts.map +1 -1
- package/dist/remote/push.js +58 -8
- package/dist/remote/push.js.map +1 -1
- package/dist/scheduler/gateway-setup.js +5 -5
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.d.ts +3 -3
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +64 -91
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/shutdown.d.ts +1 -1
- package/dist/scheduler/shutdown.d.ts.map +1 -1
- package/dist/scheduler/state.d.ts +2 -2
- package/dist/scheduler/state.d.ts.map +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/validation.js +2 -2
- package/dist/scheduler/validation.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +2 -2
- package/dist/scheduler/watcher.d.ts.map +1 -1
- package/dist/scheduler/watcher.js +36 -10
- package/dist/scheduler/watcher.js.map +1 -1
- package/dist/shared/config.d.ts +11 -13
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +59 -25
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/constants.d.ts +0 -8
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +0 -46
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/environment.d.ts +7 -0
- package/dist/shared/environment.d.ts.map +1 -1
- package/dist/shared/environment.js +29 -0
- package/dist/shared/environment.js.map +1 -1
- package/dist/shared/usage.d.ts.map +1 -1
- package/dist/shared/usage.js +14 -9
- package/dist/shared/usage.js.map +1 -1
- package/dist/shared/validation.d.ts +0 -7
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +28 -77
- package/dist/shared/validation.js.map +1 -1
- package/dist/shared/work-queue.d.ts +17 -0
- package/dist/shared/work-queue.d.ts.map +1 -0
- package/dist/shared/work-queue.js +2 -0
- package/dist/shared/work-queue.js.map +1 -0
- package/dist/stats/index.d.ts +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/store.d.ts +45 -0
- package/dist/stats/store.d.ts.map +1 -1
- package/dist/stats/store.js +118 -2
- package/dist/stats/store.js.map +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +7 -9
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/providers/index.d.ts +5 -0
- package/dist/telemetry/providers/index.d.ts.map +1 -0
- package/dist/telemetry/providers/index.js +5 -0
- package/dist/telemetry/providers/index.js.map +1 -0
- package/dist/telemetry/providers/otel.d.ts +5 -0
- package/dist/telemetry/providers/otel.d.ts.map +1 -1
- package/dist/telemetry/providers/otel.js +45 -0
- package/dist/telemetry/providers/otel.js.map +1 -1
- package/dist/tui/App.js +5 -5
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +2 -2
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +8 -23
- package/dist/tui/status-tracker.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts +1 -0
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +3 -0
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/index.d.ts +25 -0
- package/dist/webhooks/providers/index.d.ts.map +1 -0
- package/dist/webhooks/providers/index.js +144 -0
- package/dist/webhooks/providers/index.js.map +1 -0
- package/dist/webhooks/registry.d.ts +1 -1
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +5 -1
- package/dist/webhooks/registry.js.map +1 -1
- package/dist/webhooks/types.d.ts +2 -0
- package/dist/webhooks/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/dist/agents/feedback-monitor.d.ts +0 -56
- package/dist/agents/feedback-monitor.d.ts.map +0 -1
- package/dist/agents/feedback-monitor.js +0 -176
- package/dist/agents/feedback-monitor.js.map +0 -1
- package/dist/agents/feedback-runner.d.ts +0 -28
- package/dist/agents/feedback-runner.d.ts.map +0 -1
- package/dist/agents/feedback-runner.js +0 -138
- package/dist/agents/feedback-runner.js.map +0 -1
- package/dist/gateway/call-store.d.ts.map +0 -1
- package/dist/gateway/call-store.js.map +0 -1
- package/dist/gateway/container-registry.d.ts.map +0 -1
- package/dist/gateway/container-registry.js.map +0 -1
- package/dist/gateway/lock-store.d.ts.map +0 -1
- package/dist/gateway/lock-store.js.map +0 -1
- package/dist/gateway/routes/calls.d.ts.map +0 -1
- package/dist/gateway/routes/calls.js.map +0 -1
- package/dist/gateway/routes/dashboard.d.ts +0 -16
- package/dist/gateway/routes/dashboard.d.ts.map +0 -1
- package/dist/gateway/routes/dashboard.js +0 -235
- package/dist/gateway/routes/dashboard.js.map +0 -1
- package/dist/gateway/routes/locks.d.ts.map +0 -1
- package/dist/gateway/routes/locks.js.map +0 -1
- package/dist/gateway/routes/shutdown.d.ts.map +0 -1
- package/dist/gateway/routes/shutdown.js.map +0 -1
- package/dist/gateway/routes/signals.d.ts.map +0 -1
- package/dist/gateway/routes/signals.js.map +0 -1
- package/dist/gateway/routes/stats.js.map +0 -1
- package/dist/gateway/routes/webhooks.d.ts.map +0 -1
- package/dist/gateway/routes/webhooks.js +0 -65
- package/dist/gateway/routes/webhooks.js.map +0 -1
- package/dist/gateway/types.d.ts.map +0 -1
- package/dist/gateway/views/agent-detail-page.d.ts +0 -14
- package/dist/gateway/views/agent-detail-page.d.ts.map +0 -1
- package/dist/gateway/views/agent-detail-page.js +0 -416
- package/dist/gateway/views/agent-detail-page.js.map +0 -1
- package/dist/gateway/views/dashboard-page.d.ts +0 -3
- package/dist/gateway/views/dashboard-page.d.ts.map +0 -1
- package/dist/gateway/views/dashboard-page.js +0 -300
- package/dist/gateway/views/dashboard-page.js.map +0 -1
- package/dist/gateway/views/instance-detail-page.d.ts +0 -30
- package/dist/gateway/views/instance-detail-page.d.ts.map +0 -1
- package/dist/gateway/views/instance-detail-page.js +0 -360
- package/dist/gateway/views/instance-detail-page.js.map +0 -1
- package/dist/gateway/views/layout.d.ts +0 -17
- package/dist/gateway/views/layout.d.ts.map +0 -1
- package/dist/gateway/views/layout.js +0 -153
- package/dist/gateway/views/layout.js.map +0 -1
- package/dist/gateway/views/login-page.d.ts +0 -2
- package/dist/gateway/views/login-page.d.ts.map +0 -1
- package/dist/gateway/views/login-page.js +0 -41
- package/dist/gateway/views/login-page.js.map +0 -1
- package/dist/gateway/views/project-config-page.d.ts +0 -12
- package/dist/gateway/views/project-config-page.d.ts.map +0 -1
- package/dist/gateway/views/project-config-page.js +0 -199
- package/dist/gateway/views/project-config-page.js.map +0 -1
- package/dist/scheduler/cron-setup.d.ts.map +0 -1
- package/dist/scheduler/cron-setup.js.map +0 -1
- package/dist/scheduler/event-queue-sqlite.d.ts.map +0 -1
- package/dist/scheduler/event-queue-sqlite.js.map +0 -1
- package/dist/scheduler/event-queue-unified.d.ts.map +0 -1
- package/dist/scheduler/event-queue-unified.js.map +0 -1
- package/dist/scheduler/event-queue.d.ts.map +0 -1
- package/dist/scheduler/event-queue.js.map +0 -1
- package/dist/scheduler/execution.d.ts.map +0 -1
- package/dist/scheduler/execution.js.map +0 -1
- package/dist/scheduler/image-builder.d.ts.map +0 -1
- package/dist/scheduler/image-builder.js.map +0 -1
- package/dist/scheduler/runner-setup.d.ts.map +0 -1
- package/dist/scheduler/runtime-factory.js +0 -37
- package/dist/scheduler/runtime-factory.js.map +0 -1
- package/dist/scheduler/webhook-setup.d.ts.map +0 -1
- package/dist/scheduler/webhook-setup.js.map +0 -1
- package/dist/shared/default-feedback-agent.d.ts +0 -10
- package/dist/shared/default-feedback-agent.d.ts.map +0 -1
- package/dist/shared/default-feedback-agent.js +0 -114
- package/dist/shared/default-feedback-agent.js.map +0 -1
- /package/dist/{gateway → control}/api-key.d.ts +0 -0
- /package/dist/{gateway → control}/api-key.js +0 -0
- /package/dist/{gateway → control}/auth.d.ts +0 -0
- /package/dist/{gateway → control}/auth.js +0 -0
- /package/dist/{gateway → control}/routes/control.d.ts +0 -0
- /package/dist/{gateway → control}/routes/control.js +0 -0
- /package/dist/{gateway → control}/routes/logs.d.ts +0 -0
- /package/dist/{gateway → control}/routes/logs.js +0 -0
- /package/dist/{gateway → control}/routes/stats.d.ts +0 -0
- /package/dist/{gateway → control}/session-store.d.ts +0 -0
- /package/dist/{gateway → control}/session-store.js +0 -0
- /package/dist/{gateway → control}/types.js +0 -0
- /package/dist/{scheduler → events}/event-queue-sqlite.d.ts +0 -0
- /package/dist/{scheduler → events}/event-queue-sqlite.js +0 -0
- /package/dist/{scheduler → events}/event-queue-unified.d.ts +0 -0
- /package/dist/{scheduler → events}/event-queue-unified.js +0 -0
- /package/dist/{scheduler → events}/event-queue.js +0 -0
- /package/dist/{scheduler → execution}/call-dispatcher.d.ts +0 -0
- /package/dist/{scheduler → execution}/call-dispatcher.js +0 -0
- /package/dist/{gateway → execution}/call-store.d.ts +0 -0
- /package/dist/{gateway → execution}/call-store.js +0 -0
- /package/dist/{gateway → execution}/container-registry.d.ts +0 -0
- /package/dist/{gateway → execution}/container-registry.js +0 -0
- /package/dist/{scheduler → execution}/lifecycle/agent-lifecycle.d.ts +0 -0
- /package/dist/{scheduler → execution}/lifecycle/agent-lifecycle.js +0 -0
- /package/dist/{scheduler → execution}/lifecycle/index.d.ts +0 -0
- /package/dist/{scheduler → execution}/lifecycle/index.js +0 -0
- /package/dist/{scheduler → execution}/lifecycle/instance-lifecycle.d.ts +0 -0
- /package/dist/{scheduler → execution}/lifecycle/instance-lifecycle.js +0 -0
- /package/dist/{gateway → execution}/lock-store.d.ts +0 -0
- /package/dist/{gateway → execution}/lock-store.js +0 -0
- /package/dist/{gateway → execution}/routes/calls.d.ts +0 -0
- /package/dist/{gateway → execution}/routes/calls.js +0 -0
- /package/dist/{gateway → execution}/routes/locks.d.ts +0 -0
- /package/dist/{gateway → execution}/routes/shutdown.d.ts +0 -0
- /package/dist/{gateway → execution}/routes/shutdown.js +0 -0
- /package/dist/{gateway → execution}/routes/signals.d.ts +0 -0
- /package/dist/{gateway → execution}/routes/signals.js +0 -0
- /package/dist/{scheduler → execution}/runner-pool.d.ts +0 -0
- /package/dist/{scheduler → execution}/runner-pool.js +0 -0
- /package/dist/{scheduler → execution}/runner-setup.js +0 -0
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { escapeHtml, formatDuration, formatTime, 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 formatScale(agent) {
|
|
11
|
-
if (agent.state === "running" && agent.scale > 1)
|
|
12
|
-
return `running ${agent.runningCount}/${agent.scale}`;
|
|
13
|
-
if (agent.scale > 1)
|
|
14
|
-
return `${agent.state} (\u00d7${agent.scale})`;
|
|
15
|
-
return agent.state;
|
|
16
|
-
}
|
|
17
|
-
function renderStatCard(label, value, id) {
|
|
18
|
-
const idAttr = id ? ` id="${id}"` : "";
|
|
19
|
-
return `<div class="bg-slate-50 dark:bg-slate-900 rounded-lg border border-slate-200 dark:border-slate-800 p-3 sm:p-4">
|
|
20
|
-
<div class="text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wide mb-1">${escapeHtml(label)}</div>
|
|
21
|
-
<div class="text-lg sm:text-xl font-semibold text-slate-900 dark:text-white"${idAttr}>${value}</div>
|
|
22
|
-
</div>`;
|
|
23
|
-
}
|
|
24
|
-
function renderTokenBar(agent, totalSessionTokens) {
|
|
25
|
-
const tokens = agent.cumulativeUsage?.totalTokens ?? 0;
|
|
26
|
-
const pct = totalSessionTokens > 0 ? Math.round((tokens / totalSessionTokens) * 100) : 0;
|
|
27
|
-
return `<div class="flex items-center gap-2">
|
|
28
|
-
<div class="flex-1 h-2 bg-slate-200 dark:bg-slate-700 rounded-full overflow-hidden" style="min-width:60px">
|
|
29
|
-
<div class="h-full bg-blue-500 rounded-full" style="width:${pct}%"></div>
|
|
30
|
-
</div>
|
|
31
|
-
<span class="text-xs text-slate-500 dark:text-slate-400 whitespace-nowrap">${formatTokens(tokens)}</span>
|
|
32
|
-
</div>`;
|
|
33
|
-
}
|
|
34
|
-
function renderAgentRow(agent, totalSessionTokens) {
|
|
35
|
-
const colors = stateColor(agent.state);
|
|
36
|
-
const toggleLabel = agent.enabled ? "Disable" : "Enable";
|
|
37
|
-
const toggleAction = agent.enabled ? "disable" : "enable";
|
|
38
|
-
const descHtml = agent.description
|
|
39
|
-
? `<div class="text-xs text-slate-400 mt-0.5">${escapeHtml(agent.description)}</div>`
|
|
40
|
-
: "";
|
|
41
|
-
return `<tr data-agent="${escapeHtml(agent.name)}" class="hover:bg-slate-50 dark:hover:bg-slate-900/50 transition-colors">
|
|
42
|
-
<td class="px-3 py-2.5">
|
|
43
|
-
<a href="/dashboard/agents/${escapeHtml(agent.name)}" class="text-blue-600 dark:text-blue-400 hover:underline font-medium">${escapeHtml(agent.name)}</a>
|
|
44
|
-
${descHtml}
|
|
45
|
-
</td>
|
|
46
|
-
<td class="px-3 py-2.5"><span class="state-dot ${colors.dot} mr-1.5 inline-block"></span><span class="${colors.text} text-sm">${escapeHtml(formatScale(agent))}</span></td>
|
|
47
|
-
<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">${formatTime(agent.lastRunAt)}</td>
|
|
48
|
-
<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">${agent.lastRunDuration != null ? formatDuration(agent.lastRunDuration) : "\u2014"}</td>
|
|
49
|
-
<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">${formatTime(agent.nextRunAt)}</td>
|
|
50
|
-
<td class="px-3 py-2.5" style="min-width:120px">${renderTokenBar(agent, totalSessionTokens)}</td>
|
|
51
|
-
<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">${agent.locks && agent.locks.length > 0 ? agent.locks.map(l => escapeHtml(l.resourceKey.replace(/^[^:]+:\/\//, ""))).join(", ") : "\u2014"}</td>
|
|
52
|
-
<td class="px-3 py-2.5 whitespace-nowrap">
|
|
53
|
-
<button class="px-2 py-1 text-xs rounded font-bold bg-green-600 hover:bg-green-700 text-white transition-colors mr-1" onclick="triggerAgent('${escapeHtml(agent.name)}')">Run</button>
|
|
54
|
-
<button class="px-2 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors mr-1" onclick="killAgent('${escapeHtml(agent.name)}')">Kill</button>
|
|
55
|
-
<button class="px-2 py-1 text-xs rounded 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="toggleAgent('${escapeHtml(agent.name)}','${toggleAction}')">${toggleLabel}</button>
|
|
56
|
-
</td>
|
|
57
|
-
</tr>`;
|
|
58
|
-
}
|
|
59
|
-
function renderAgentCard(agent) {
|
|
60
|
-
const colors = stateColor(agent.state);
|
|
61
|
-
const toggleLabel = agent.enabled ? "Disable" : "Enable";
|
|
62
|
-
const toggleAction = agent.enabled ? "disable" : "enable";
|
|
63
|
-
const descHtml = agent.description
|
|
64
|
-
? `<div class="text-xs text-slate-400 mb-1">${escapeHtml(agent.description)}</div>`
|
|
65
|
-
: "";
|
|
66
|
-
return `<div class="bg-white dark:bg-slate-900 rounded-lg border border-slate-200 dark:border-slate-800 p-3 mb-2">
|
|
67
|
-
<a href="/dashboard/agents/${escapeHtml(agent.name)}" class="block">
|
|
68
|
-
<div class="flex justify-between items-center mb-1">
|
|
69
|
-
<span class="text-blue-600 dark:text-blue-400 font-semibold text-sm">${escapeHtml(agent.name)}</span>
|
|
70
|
-
<span class="text-xs ${colors.text}"><span class="state-dot ${colors.dot} mr-1 inline-block"></span>${escapeHtml(formatScale(agent))}</span>
|
|
71
|
-
</div>
|
|
72
|
-
${descHtml}
|
|
73
|
-
<div class="flex gap-3 text-xs text-slate-400">
|
|
74
|
-
<span>Last: ${formatTime(agent.lastRunAt)}</span>
|
|
75
|
-
<span>${agent.lastRunDuration != null ? formatDuration(agent.lastRunDuration) : ""}</span>
|
|
76
|
-
<span>Next: ${formatTime(agent.nextRunAt)}</span>
|
|
77
|
-
</div>
|
|
78
|
-
</a>
|
|
79
|
-
<div class="flex gap-2 mt-2 pt-2 border-t border-slate-100 dark:border-slate-800">
|
|
80
|
-
<button class="px-2.5 py-1 text-xs rounded font-bold bg-green-600 hover:bg-green-700 text-white transition-colors" onclick="triggerAgent('${escapeHtml(agent.name)}')">Run</button>
|
|
81
|
-
<button class="px-2.5 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors" onclick="killAgent('${escapeHtml(agent.name)}')">Kill</button>
|
|
82
|
-
<button class="px-2.5 py-1 text-xs rounded 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="toggleAgent('${escapeHtml(agent.name)}','${toggleAction}')">${toggleLabel}</button>
|
|
83
|
-
</div>
|
|
84
|
-
</div>`;
|
|
85
|
-
}
|
|
86
|
-
function formatLogLine(log) {
|
|
87
|
-
const time = log.timestamp.toLocaleTimeString();
|
|
88
|
-
return `<span class="text-slate-400">${escapeHtml(time)}</span> <span class="text-indigo-400">[${escapeHtml(log.agent)}]</span> ${escapeHtml(log.message)}`;
|
|
89
|
-
}
|
|
90
|
-
export function renderDashboardPage(agents, schedulerInfo, recentLogs) {
|
|
91
|
-
const sessionTokens = agents.reduce((sum, a) => sum + (a.cumulativeUsage?.totalTokens ?? 0), 0);
|
|
92
|
-
const sessionCost = agents.reduce((sum, a) => sum + (a.cumulativeUsage?.cost ?? 0), 0);
|
|
93
|
-
const content = `
|
|
94
|
-
<div class="flex flex-wrap items-center justify-between gap-3 mb-6">
|
|
95
|
-
<h1 class="text-xl sm:text-2xl font-bold text-slate-900 dark:text-white">Dashboard</h1>
|
|
96
|
-
<div class="flex items-center gap-2">
|
|
97
|
-
<a href="/dashboard/config" 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">Config</a>
|
|
98
|
-
<button id="pause-btn" class="px-3 py-1.5 text-sm rounded-md font-bold border border-yellow-500 bg-yellow-500 hover:bg-yellow-600 text-white transition-colors" onclick="togglePause()">${schedulerInfo?.paused ? "Resume" : "Pause"}</button>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
|
|
102
|
-
<div class="grid grid-cols-2 gap-3 mb-6">
|
|
103
|
-
${renderStatCard("Session Tokens", formatTokens(sessionTokens), "stat-tokens")}
|
|
104
|
-
${renderStatCard("Session Cost", formatCost(sessionCost), "stat-cost")}
|
|
105
|
-
</div>
|
|
106
|
-
|
|
107
|
-
<!-- Desktop table -->
|
|
108
|
-
<div class="hidden sm:block mb-8">
|
|
109
|
-
<table class="w-full">
|
|
110
|
-
<thead>
|
|
111
|
-
<tr class="border-b-2 border-slate-200 dark:border-slate-700">
|
|
112
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Agent</th>
|
|
113
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">State</th>
|
|
114
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Last Run</th>
|
|
115
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Duration</th>
|
|
116
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Next Run</th>
|
|
117
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Tokens Used</th>
|
|
118
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Locks</th>
|
|
119
|
-
<th class="text-left px-3 py-2 text-xs text-slate-500 dark:text-slate-400 uppercase tracking-wider font-medium">Actions</th>
|
|
120
|
-
</tr>
|
|
121
|
-
</thead>
|
|
122
|
-
<tbody id="agent-table-body" class="divide-y divide-slate-100 dark:divide-slate-800">
|
|
123
|
-
${agents.length > 0 ? agents.map((a) => renderAgentRow(a, sessionTokens)).join("\n") : '<tr><td colspan="8" class="px-3 py-8 text-center text-slate-400 italic">No agents registered</td></tr>'}
|
|
124
|
-
</tbody>
|
|
125
|
-
</table>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
<!-- Mobile cards -->
|
|
129
|
-
<div class="sm:hidden mb-6" id="agent-cards">
|
|
130
|
-
${agents.length > 0 ? agents.map(renderAgentCard).join("\n") : '<div class="text-slate-400 italic text-center py-6">No agents registered</div>'}
|
|
131
|
-
</div>
|
|
132
|
-
|
|
133
|
-
<h2 class="text-base font-semibold text-slate-900 dark:text-white mb-3">Recent Activity</h2>
|
|
134
|
-
<div 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 max-h-72 overflow-y-auto scrollbar-thin" id="recent-logs">
|
|
135
|
-
${recentLogs.length > 0 ? recentLogs.map((l) => `<div class="whitespace-pre-wrap break-all">${formatLogLine(l)}</div>`).join("\n") : '<div class="text-slate-400 italic">No recent activity</div>'}
|
|
136
|
-
</div>`;
|
|
137
|
-
const scripts = `<script>
|
|
138
|
-
var stateColors = { running: "bg-green-500", building: "bg-yellow-500", error: "bg-red-500", idle: "bg-slate-400" };
|
|
139
|
-
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" };
|
|
140
|
-
|
|
141
|
-
function fmtScale(a) {
|
|
142
|
-
if (a.state === "running" && a.scale > 1) return "running " + a.runningCount + "/" + a.scale;
|
|
143
|
-
if (a.scale > 1) return a.state + " (\\u00d7" + a.scale + ")";
|
|
144
|
-
return a.state;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function sessionTotalTokens(agents) {
|
|
148
|
-
var total = 0;
|
|
149
|
-
for (var i = 0; i < agents.length; i++) {
|
|
150
|
-
if (agents[i].cumulativeUsage) total += agents[i].cumulativeUsage.totalTokens || 0;
|
|
151
|
-
}
|
|
152
|
-
return total;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function sessionTotalCost(agents) {
|
|
156
|
-
var total = 0;
|
|
157
|
-
for (var i = 0; i < agents.length; i++) {
|
|
158
|
-
if (agents[i].cumulativeUsage) total += agents[i].cumulativeUsage.cost || 0;
|
|
159
|
-
}
|
|
160
|
-
return total;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function tokenBar(a, totalTokens) {
|
|
164
|
-
var tokens = (a.cumulativeUsage && a.cumulativeUsage.totalTokens) || 0;
|
|
165
|
-
var pct = totalTokens > 0 ? Math.round((tokens / totalTokens) * 100) : 0;
|
|
166
|
-
return '<div class="flex items-center gap-2">' +
|
|
167
|
-
'<div class="flex-1 h-2 bg-slate-200 dark:bg-slate-700 rounded-full overflow-hidden" style="min-width:60px">' +
|
|
168
|
-
'<div class="h-full bg-blue-500 rounded-full" style="width:' + pct + '%"></div></div>' +
|
|
169
|
-
'<span class="text-xs text-slate-500 dark:text-slate-400 whitespace-nowrap">' + fmtTokens(tokens) + '</span></div>';
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
var _cachedAgents = null;
|
|
173
|
-
|
|
174
|
-
function renderRow(a) {
|
|
175
|
-
var dotClass = stateColors[a.state] || "bg-slate-400";
|
|
176
|
-
var textClass = stateTextColors[a.state] || "text-slate-400";
|
|
177
|
-
var toggleLabel = a.enabled ? "Disable" : "Enable";
|
|
178
|
-
var toggleAction = a.enabled ? "disable" : "enable";
|
|
179
|
-
var totalTok = _cachedAgents ? sessionTotalTokens(_cachedAgents) : 0;
|
|
180
|
-
return '<tr data-agent="' + esc(a.name) + '" class="hover:bg-slate-50 dark:hover:bg-slate-900/50 transition-colors">' +
|
|
181
|
-
'<td class="px-3 py-2.5"><a href="/dashboard/agents/' + esc(a.name) + '" class="text-blue-600 dark:text-blue-400 hover:underline font-medium">' + esc(a.name) + '</a></td>' +
|
|
182
|
-
'<td class="px-3 py-2.5"><span class="state-dot ' + dotClass + ' mr-1.5 inline-block"></span><span class="' + textClass + ' text-sm">' + esc(fmtScale(a)) + '</span></td>' +
|
|
183
|
-
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + fmtTime(a.lastRunAt) + '</td>' +
|
|
184
|
-
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + (a.lastRunDuration != null ? fmtDur(a.lastRunDuration) : "\\u2014") + '</td>' +
|
|
185
|
-
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + fmtTime(a.nextRunAt) + '</td>' +
|
|
186
|
-
'<td class="px-3 py-2.5" style="min-width:120px">' + tokenBar(a, totalTok) + '</td>' +
|
|
187
|
-
'<td class="px-3 py-2.5 text-sm text-slate-600 dark:text-slate-300">' + (a.locks && a.locks.length > 0 ? a.locks.map(function(l) { return esc(l.resourceKey.replace(/^[^:]+:\\/\\//, "")); }).join(", ") : "\\u2014") + '</td>' +
|
|
188
|
-
'<td class="px-3 py-2.5 whitespace-nowrap">' +
|
|
189
|
-
'<button class="px-2 py-1 text-xs rounded font-bold bg-green-600 hover:bg-green-700 text-white transition-colors mr-1" onclick="triggerAgent(\\'' + esc(a.name) + '\\')">Run</button>' +
|
|
190
|
-
'<button class="px-2 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors mr-1" onclick="killAgent(\\'' + esc(a.name) + '\\')">Kill</button>' +
|
|
191
|
-
'<button class="px-2 py-1 text-xs rounded 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="toggleAgent(\\'' + esc(a.name) + '\\',\\'' + toggleAction + '\\')">' + toggleLabel + '</button></td></tr>';
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function renderCard(a) {
|
|
195
|
-
var dotClass = stateColors[a.state] || "bg-slate-400";
|
|
196
|
-
var textClass = stateTextColors[a.state] || "text-slate-400";
|
|
197
|
-
var toggleLabel = a.enabled ? "Disable" : "Enable";
|
|
198
|
-
var toggleAction = a.enabled ? "disable" : "enable";
|
|
199
|
-
return '<div class="bg-white dark:bg-slate-900 rounded-lg border border-slate-200 dark:border-slate-800 p-3 mb-2">' +
|
|
200
|
-
'<a href="/dashboard/agents/' + esc(a.name) + '" class="block">' +
|
|
201
|
-
'<div class="flex justify-between items-center mb-1"><span class="text-blue-600 dark:text-blue-400 font-semibold text-sm">' + esc(a.name) + '</span>' +
|
|
202
|
-
'<span class="text-xs ' + textClass + '"><span class="state-dot ' + dotClass + ' mr-1 inline-block"></span>' + esc(fmtScale(a)) + '</span></div>' +
|
|
203
|
-
'<div class="flex gap-3 text-xs text-slate-400"><span>Last: ' + fmtTime(a.lastRunAt) + '</span><span>' + (a.lastRunDuration != null ? fmtDur(a.lastRunDuration) : "") + '</span><span>Next: ' + fmtTime(a.nextRunAt) + '</span></div></a>' +
|
|
204
|
-
'<div class="flex gap-2 mt-2 pt-2 border-t border-slate-100 dark:border-slate-800">' +
|
|
205
|
-
'<button class="px-2.5 py-1 text-xs rounded font-bold bg-green-600 hover:bg-green-700 text-white transition-colors" onclick="triggerAgent(\\'' + esc(a.name) + '\\')">Run</button>' +
|
|
206
|
-
'<button class="px-2.5 py-1 text-xs rounded font-bold bg-red-600 hover:bg-red-700 text-white transition-colors" onclick="killAgent(\\'' + esc(a.name) + '\\')">Kill</button>' +
|
|
207
|
-
'<button class="px-2.5 py-1 text-xs rounded 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="toggleAgent(\\'' + esc(a.name) + '\\',\\'' + toggleAction + '\\')">' + toggleLabel + '</button></div></div>';
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
function renderLog(l) {
|
|
211
|
-
var t = new Date(l.timestamp).toLocaleTimeString();
|
|
212
|
-
return '<div class="whitespace-pre-wrap break-all"><span class="text-slate-400">' + esc(t) + '</span> <span class="text-indigo-400">[' + esc(l.agent) + ']</span> ' + esc(l.message) + '</div>';
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
var es = new EventSource("/dashboard/api/status-stream");
|
|
216
|
-
es.onmessage = function(e) {
|
|
217
|
-
var data = JSON.parse(e.data);
|
|
218
|
-
if (data.agents) {
|
|
219
|
-
_cachedAgents = data.agents;
|
|
220
|
-
var tbody = document.getElementById("agent-table-body");
|
|
221
|
-
if (data.agents.length > 0) {
|
|
222
|
-
tbody.innerHTML = data.agents.map(renderRow).join("");
|
|
223
|
-
} else {
|
|
224
|
-
tbody.innerHTML = '<tr><td colspan="8" class="px-3 py-8 text-center text-slate-400 italic">No agents registered</td></tr>';
|
|
225
|
-
}
|
|
226
|
-
var cards = document.getElementById("agent-cards");
|
|
227
|
-
if (data.agents.length > 0) {
|
|
228
|
-
cards.innerHTML = data.agents.map(renderCard).join("");
|
|
229
|
-
} else {
|
|
230
|
-
cards.innerHTML = '<div class="text-slate-400 italic text-center py-6">No agents registered</div>';
|
|
231
|
-
}
|
|
232
|
-
// Update session stats
|
|
233
|
-
var tokEl = document.getElementById("stat-tokens");
|
|
234
|
-
var costEl = document.getElementById("stat-cost");
|
|
235
|
-
if (tokEl) tokEl.textContent = fmtTokens(sessionTotalTokens(data.agents));
|
|
236
|
-
if (costEl) costEl.textContent = fmtCost(sessionTotalCost(data.agents));
|
|
237
|
-
}
|
|
238
|
-
if (data.recentLogs && data.recentLogs.length > 0) {
|
|
239
|
-
var logsDiv = document.getElementById("recent-logs");
|
|
240
|
-
logsDiv.innerHTML = data.recentLogs.map(renderLog).join("");
|
|
241
|
-
logsDiv.scrollTop = logsDiv.scrollHeight;
|
|
242
|
-
}
|
|
243
|
-
if (data.schedulerInfo) {
|
|
244
|
-
var btn = document.getElementById("pause-btn");
|
|
245
|
-
if (btn) {
|
|
246
|
-
schedulerPaused = !!data.schedulerInfo.paused;
|
|
247
|
-
btn.textContent = schedulerPaused ? "Resume" : "Pause";
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
// Fetch locks periodically
|
|
253
|
-
async function fetchLocks() {
|
|
254
|
-
try {
|
|
255
|
-
var res = await fetch("/dashboard/api/locks");
|
|
256
|
-
if (res.ok) {
|
|
257
|
-
var data = await res.json();
|
|
258
|
-
if (data.locks && _cachedAgents) {
|
|
259
|
-
// Group locks by agent
|
|
260
|
-
var locksByAgent = {};
|
|
261
|
-
for (var i = 0; i < data.locks.length; i++) {
|
|
262
|
-
var lock = data.locks[i];
|
|
263
|
-
if (!locksByAgent[lock.agentName]) locksByAgent[lock.agentName] = [];
|
|
264
|
-
locksByAgent[lock.agentName].push(lock);
|
|
265
|
-
}
|
|
266
|
-
// Update agent locks
|
|
267
|
-
for (var j = 0; j < _cachedAgents.length; j++) {
|
|
268
|
-
_cachedAgents[j].locks = locksByAgent[_cachedAgents[j].name] || [];
|
|
269
|
-
}
|
|
270
|
-
// Re-render table
|
|
271
|
-
var tbody = document.getElementById("agent-table-body");
|
|
272
|
-
if (_cachedAgents.length > 0) {
|
|
273
|
-
tbody.innerHTML = _cachedAgents.map(renderRow).join("");
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
} catch(e) {}
|
|
278
|
-
}
|
|
279
|
-
setInterval(fetchLocks, 2000);
|
|
280
|
-
fetchLocks(); // Initial fetch
|
|
281
|
-
|
|
282
|
-
var schedulerPaused = ${schedulerInfo?.paused ? "true" : "false"};
|
|
283
|
-
|
|
284
|
-
function triggerAgent(name) {
|
|
285
|
-
ctrlPost("/control/trigger/" + encodeURIComponent(name));
|
|
286
|
-
}
|
|
287
|
-
function toggleAgent(name, action) {
|
|
288
|
-
ctrlPost("/control/agents/" + encodeURIComponent(name) + "/" + action);
|
|
289
|
-
}
|
|
290
|
-
function killAgent(name) {
|
|
291
|
-
if (!confirm("Kill all instances of agent '" + name + "'?")) return;
|
|
292
|
-
ctrlPost("/control/agents/" + encodeURIComponent(name) + "/kill");
|
|
293
|
-
}
|
|
294
|
-
function togglePause() {
|
|
295
|
-
ctrlPost(schedulerPaused ? "/control/resume" : "/control/pause");
|
|
296
|
-
}
|
|
297
|
-
</script>`;
|
|
298
|
-
return renderLayout({ title: "Dashboard", content, scripts });
|
|
299
|
-
}
|
|
300
|
-
//# sourceMappingURL=dashboard-page.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-page.js","sourceRoot":"","sources":["../../../src/gateway/views/dashboard-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface InstanceDetailData {
|
|
2
|
-
agentName: string;
|
|
3
|
-
instanceId: string;
|
|
4
|
-
run: {
|
|
5
|
-
instance_id: string;
|
|
6
|
-
agent_name: string;
|
|
7
|
-
trigger_type: string;
|
|
8
|
-
trigger_source?: string;
|
|
9
|
-
result: string;
|
|
10
|
-
exit_code?: number;
|
|
11
|
-
started_at: number;
|
|
12
|
-
duration_ms: number;
|
|
13
|
-
input_tokens: number;
|
|
14
|
-
output_tokens: number;
|
|
15
|
-
cache_read_tokens: number;
|
|
16
|
-
cache_write_tokens: number;
|
|
17
|
-
total_tokens: number;
|
|
18
|
-
cost_usd: number;
|
|
19
|
-
turn_count: number;
|
|
20
|
-
error_message?: string;
|
|
21
|
-
} | null;
|
|
22
|
-
runningInstance?: {
|
|
23
|
-
id: string;
|
|
24
|
-
status: string;
|
|
25
|
-
startedAt: Date;
|
|
26
|
-
trigger: string;
|
|
27
|
-
} | null;
|
|
28
|
-
}
|
|
29
|
-
export declare function renderInstanceDetailPage(data: InstanceDetailData): string;
|
|
30
|
-
//# sourceMappingURL=instance-detail-page.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instance-detail-page.d.ts","sourceRoot":"","sources":["../../../src/gateway/views/instance-detail-page.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,eAAe,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;KAAE,GAAG,IAAI,CAAC;CAC5F;AAqBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAgIzE"}
|