@farazirfan/costar-server-executor 1.7.55 → 1.7.56

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.
@@ -61,15 +61,27 @@ export function createDbOpsRouter(deps) {
61
61
  res.status(500).json({ error: error.message });
62
62
  }
63
63
  });
64
- /** Get activity by ID */
65
- router.get("/activity/:id", (req, res) => {
64
+ /** Get activity stats (must be before :id route) */
65
+ router.get("/activity/stats", (_req, res) => {
66
66
  try {
67
- const activity = getActivityById(req.params.id);
68
- if (!activity) {
69
- res.status(404).json({ error: "Activity not found" });
67
+ const stats = getActivityStats(deps.userId);
68
+ res.json(stats);
69
+ }
70
+ catch (error) {
71
+ res.status(500).json({ error: error.message });
72
+ }
73
+ });
74
+ /** Keyword search (must be before :id route) */
75
+ router.get("/activity/search", (req, res) => {
76
+ try {
77
+ const query = req.query.q;
78
+ const limit = parseInt(req.query.limit) || 10;
79
+ if (!query) {
80
+ res.status(400).json({ error: "q query parameter is required" });
70
81
  return;
71
82
  }
72
- res.json(activity);
83
+ const results = searchActivityByKeywords(deps.userId, query, limit);
84
+ res.json(results);
73
85
  }
74
86
  catch (error) {
75
87
  res.status(500).json({ error: error.message });
@@ -99,27 +111,15 @@ export function createDbOpsRouter(deps) {
99
111
  res.status(500).json({ error: error.message });
100
112
  }
101
113
  });
102
- /** Get activity stats */
103
- router.get("/activity/stats", (_req, res) => {
104
- try {
105
- const stats = getActivityStats(deps.userId);
106
- res.json(stats);
107
- }
108
- catch (error) {
109
- res.status(500).json({ error: error.message });
110
- }
111
- });
112
- /** Keyword search */
113
- router.get("/activity/search", (req, res) => {
114
+ /** Get activity by ID (must be LAST — catches all /activity/:anything) */
115
+ router.get("/activity/:id", (req, res) => {
114
116
  try {
115
- const query = req.query.q;
116
- const limit = parseInt(req.query.limit) || 10;
117
- if (!query) {
118
- res.status(400).json({ error: "q query parameter is required" });
117
+ const activity = getActivityById(req.params.id);
118
+ if (!activity) {
119
+ res.status(404).json({ error: "Activity not found" });
119
120
  return;
120
121
  }
121
- const results = searchActivityByKeywords(deps.userId, query, limit);
122
- res.json(results);
122
+ res.json(activity);
123
123
  }
124
124
  catch (error) {
125
125
  res.status(500).json({ error: error.message });
@@ -1 +1 @@
1
- {"version":3,"file":"db-ops.js","sourceRoot":"","sources":["../../src/routes/db-ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-ops.js","sourceRoot":"","sources":["../../src/routes/db-ops.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC;IACpD,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAwBzD;AAyBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAiBhD;AAkTD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CnE;AA6BD;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB1C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAI9D,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC;IACpD,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAwBzD;AAyBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAiBhD;AAsTD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CnE;AA6BD;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB1C"}
package/dist/server.js CHANGED
@@ -21,6 +21,7 @@ import { startWebServer } from "./web-server.js";
21
21
  import { interceptConsoleLogs } from "./utils/log-buffer.js";
22
22
  import { S3FileWatcher } from "./services/s3-file-watcher.js";
23
23
  import { initDatabase, closeDatabase } from "./db/local-database.js";
24
+ import { runStartupMigrations } from "./startup/migrate.js";
24
25
  /**
25
26
  * Validate server configuration
26
27
  */
@@ -124,6 +125,9 @@ async function initializeServer(config) {
124
125
  catch (err) {
125
126
  console.warn("[SERVER] Local database init failed (non-fatal, better-sqlite3 may not be installed):", err);
126
127
  }
128
+ // 1c. Run startup migrations (cron Supabase → local, auto-generate CLIENT_API_TOKEN)
129
+ // OpenClaw pattern: detect on load, migrate if needed, idempotent
130
+ await runStartupMigrations(config.userId);
127
131
  // 2. Ensure workspace directory and create template files
128
132
  console.log("[SERVER] Setting up workspace...");
129
133
  const workspaceDir = config.workspaceDir || getDefaultWorkspaceDir();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Startup Migrations — One-time data migration on server start
3
+ *
4
+ * Follows OpenClaw's "detect on load, migrate if needed, idempotent" pattern.
5
+ * Each migration checks its own precondition (e.g., local store empty)
6
+ * so it's safe to run every startup without a version tracker.
7
+ */
8
+ /**
9
+ * Migrate cron jobs from Supabase to local JSON store.
10
+ *
11
+ * Precondition: local store has zero jobs for this user.
12
+ * If Supabase has jobs, copies them to the local store.
13
+ * Naturally idempotent — once local store has jobs, this is a no-op.
14
+ */
15
+ export declare function migrateCronJobsFromSupabase(userId: string): Promise<void>;
16
+ /**
17
+ * Ensure CLIENT_API_TOKEN exists.
18
+ *
19
+ * If missing from env, generates a random 48-char hex token (192 bits),
20
+ * writes it to ~/.costar/.env, and sets it in process.env for this run.
21
+ * Also updates user_sandboxes metadata in Supabase so Flutter client can read it.
22
+ *
23
+ * Follows OpenClaw's ensureGatewayStartupAuth pattern.
24
+ */
25
+ export declare function ensureClientApiToken(userId: string): Promise<string>;
26
+ /**
27
+ * Run all startup migrations.
28
+ * Called once during server initialization, after Supabase is ready.
29
+ * All migrations are idempotent and non-fatal.
30
+ */
31
+ export declare function runStartupMigrations(userId: string): Promise<void>;
32
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/startup/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD/E;AAMD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB1E;AAkED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxE"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Startup Migrations — One-time data migration on server start
3
+ *
4
+ * Follows OpenClaw's "detect on load, migrate if needed, idempotent" pattern.
5
+ * Each migration checks its own precondition (e.g., local store empty)
6
+ * so it's safe to run every startup without a version tracker.
7
+ */
8
+ import crypto from "node:crypto";
9
+ import * as localCronStore from "../cron/local-store.js";
10
+ import { getAllCronJobs } from "../supabase/cron-jobs.js";
11
+ import { getSupabase, isSupabaseInitialized } from "../supabase/client.js";
12
+ import { writeGlobalEnv } from "../cli/env-loader.js";
13
+ // ═══════════════════════════════════════════════════════
14
+ // CRON MIGRATION: Supabase → Local JSON
15
+ // ═══════════════════════════════════════════════════════
16
+ /** Normalize Supabase status to local store status */
17
+ function normalizeStatus(status) {
18
+ switch (status) {
19
+ case "active": return "active";
20
+ case "paused": return "paused";
21
+ case "completed": return "completed";
22
+ case "error": return "error";
23
+ case "failed": return "error"; // Supabase "failed" → local "error"
24
+ case "disabled": return "paused"; // Supabase "disabled" → local "paused"
25
+ default: return "active";
26
+ }
27
+ }
28
+ /**
29
+ * Migrate cron jobs from Supabase to local JSON store.
30
+ *
31
+ * Precondition: local store has zero jobs for this user.
32
+ * If Supabase has jobs, copies them to the local store.
33
+ * Naturally idempotent — once local store has jobs, this is a no-op.
34
+ */
35
+ export async function migrateCronJobsFromSupabase(userId) {
36
+ try {
37
+ // Check local store first (fast path)
38
+ const localJobs = localCronStore.getAllJobs(userId);
39
+ if (localJobs.length > 0) {
40
+ console.log(`[MIGRATE] Cron: local store already has ${localJobs.length} jobs — skipping`);
41
+ return;
42
+ }
43
+ // Check if Supabase is available
44
+ if (!isSupabaseInitialized()) {
45
+ console.log("[MIGRATE] Cron: Supabase not initialized — skipping migration");
46
+ return;
47
+ }
48
+ // Fetch from Supabase (include disabled jobs — migrate everything)
49
+ console.log("[MIGRATE] Cron: local store empty, checking Supabase...");
50
+ const supabaseJobs = await getAllCronJobs(userId, true);
51
+ if (supabaseJobs.length === 0) {
52
+ console.log("[MIGRATE] Cron: no jobs in Supabase either — nothing to migrate");
53
+ return;
54
+ }
55
+ // Map Supabase format → local format and save
56
+ const store = localCronStore.loadJobs();
57
+ for (const sj of supabaseJobs) {
58
+ store.jobs.push({
59
+ id: sj.id,
60
+ user_id: sj.user_id,
61
+ name: sj.name || "Unnamed job",
62
+ instruction: sj.instruction || "",
63
+ enabled: sj.enabled !== false,
64
+ schedule_type: sj.schedule_type || "cron",
65
+ cron_expression: sj.cron_expression || undefined,
66
+ schedule_value: sj.schedule_value || undefined,
67
+ schedule_at: sj.schedule_at ? String(sj.schedule_at) : undefined,
68
+ timezone: sj.timezone || undefined,
69
+ delete_after_run: sj.delete_after_run || false,
70
+ status: normalizeStatus(sj.status),
71
+ next_run_at: sj.next_run_at || undefined,
72
+ retry_count: sj.retry_count || 0,
73
+ max_retries: sj.max_retries || 3,
74
+ created_at: sj.created_at || new Date().toISOString(),
75
+ updated_at: sj.updated_at || new Date().toISOString(),
76
+ });
77
+ }
78
+ localCronStore.saveJobs(store);
79
+ console.log(`[MIGRATE] Cron: migrated ${supabaseJobs.length} jobs from Supabase → local store`);
80
+ }
81
+ catch (err) {
82
+ // Non-fatal — server can operate without migrated cron jobs
83
+ console.error("[MIGRATE] Cron migration failed (non-fatal):", err);
84
+ }
85
+ }
86
+ // ═══════════════════════════════════════════════════════
87
+ // CLIENT API TOKEN: Auto-generate + persist
88
+ // ═══════════════════════════════════════════════════════
89
+ /**
90
+ * Ensure CLIENT_API_TOKEN exists.
91
+ *
92
+ * If missing from env, generates a random 48-char hex token (192 bits),
93
+ * writes it to ~/.costar/.env, and sets it in process.env for this run.
94
+ * Also updates user_sandboxes metadata in Supabase so Flutter client can read it.
95
+ *
96
+ * Follows OpenClaw's ensureGatewayStartupAuth pattern.
97
+ */
98
+ export async function ensureClientApiToken(userId) {
99
+ const existing = process.env.CLIENT_API_TOKEN;
100
+ if (existing) {
101
+ console.log("[MIGRATE] CLIENT_API_TOKEN: already set");
102
+ return existing;
103
+ }
104
+ // Generate new token (OpenClaw pattern: crypto.randomBytes)
105
+ const token = crypto.randomBytes(24).toString("hex");
106
+ console.log(`[MIGRATE] CLIENT_API_TOKEN: generated new token (${token.slice(0, 8)}...)`);
107
+ // Persist to .env
108
+ writeGlobalEnv({ CLIENT_API_TOKEN: token });
109
+ process.env.CLIENT_API_TOKEN = token;
110
+ console.log("[MIGRATE] CLIENT_API_TOKEN: persisted to ~/.costar/.env");
111
+ // Update Supabase user_sandboxes metadata so Flutter client can read the token
112
+ await persistTokenToSupabase(userId, token);
113
+ return token;
114
+ }
115
+ /**
116
+ * Update user_sandboxes.metadata with client_api_token.
117
+ * Best-effort — if Supabase is unavailable or table doesn't exist, we skip.
118
+ */
119
+ async function persistTokenToSupabase(userId, token) {
120
+ try {
121
+ if (!isSupabaseInitialized()) {
122
+ console.log("[MIGRATE] CLIENT_API_TOKEN: Supabase not ready — skipping metadata update");
123
+ return;
124
+ }
125
+ const supabase = getSupabase();
126
+ const sandboxId = process.env.SANDBOX_ID;
127
+ if (!sandboxId) {
128
+ console.log("[MIGRATE] CLIENT_API_TOKEN: no SANDBOX_ID — skipping Supabase metadata update");
129
+ return;
130
+ }
131
+ // Read current metadata
132
+ const { data: row, error: readErr } = await supabase
133
+ .from("user_sandboxes")
134
+ .select("metadata")
135
+ .eq("user_id", userId)
136
+ .eq("sandbox_id", sandboxId)
137
+ .maybeSingle();
138
+ if (readErr) {
139
+ console.warn("[MIGRATE] CLIENT_API_TOKEN: error reading user_sandboxes:", readErr.message);
140
+ return;
141
+ }
142
+ if (!row) {
143
+ console.warn("[MIGRATE] CLIENT_API_TOKEN: no sandbox record found for user");
144
+ return;
145
+ }
146
+ // Merge token into existing metadata
147
+ const currentMeta = (typeof row.metadata === "string"
148
+ ? JSON.parse(row.metadata)
149
+ : row.metadata) || {};
150
+ const updatedMeta = { ...currentMeta, client_api_token: token };
151
+ const { error: writeErr } = await supabase
152
+ .from("user_sandboxes")
153
+ .update({ metadata: updatedMeta })
154
+ .eq("user_id", userId)
155
+ .eq("sandbox_id", sandboxId);
156
+ if (writeErr) {
157
+ console.warn("[MIGRATE] CLIENT_API_TOKEN: error updating metadata:", writeErr.message);
158
+ return;
159
+ }
160
+ console.log("[MIGRATE] CLIENT_API_TOKEN: persisted to Supabase user_sandboxes metadata");
161
+ }
162
+ catch (err) {
163
+ console.warn("[MIGRATE] CLIENT_API_TOKEN: Supabase update failed (non-fatal):", err);
164
+ }
165
+ }
166
+ // ═══════════════════════════════════════════════════════
167
+ // MAIN ENTRY POINT
168
+ // ═══════════════════════════════════════════════════════
169
+ /**
170
+ * Run all startup migrations.
171
+ * Called once during server initialization, after Supabase is ready.
172
+ * All migrations are idempotent and non-fatal.
173
+ */
174
+ export async function runStartupMigrations(userId) {
175
+ console.log("[MIGRATE] Running startup migrations...");
176
+ await ensureClientApiToken(userId);
177
+ await migrateCronJobsFromSupabase(userId);
178
+ console.log("[MIGRATE] Startup migrations complete");
179
+ }
180
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/startup/migrate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farazirfan/costar-server-executor",
3
- "version": "1.7.55",
3
+ "version": "1.7.56",
4
4
  "description": "CoStar Server Executor - 24/7 autonomous agent in TypeScript (cloned from OpenClaw)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/public/index.html CHANGED
@@ -1154,6 +1154,67 @@
1154
1154
  background: var(--bg-primary);
1155
1155
  }
1156
1156
 
1157
+ /* ─── Table Filter Toolbar ─────────────────────── */
1158
+ .table-toolbar {
1159
+ display: flex;
1160
+ gap: 8px;
1161
+ align-items: center;
1162
+ margin-bottom: 16px;
1163
+ flex-wrap: wrap;
1164
+ }
1165
+ .table-toolbar select {
1166
+ width: auto;
1167
+ min-width: 130px;
1168
+ }
1169
+ .table-toolbar input[type="search"] {
1170
+ width: auto;
1171
+ min-width: 200px;
1172
+ }
1173
+
1174
+ /* ─── Row Detail (modals) ──────────────────────── */
1175
+ .row-detail-section {
1176
+ margin-bottom: 12px;
1177
+ }
1178
+ .row-detail-section:last-child {
1179
+ margin-bottom: 0;
1180
+ }
1181
+ .row-detail-label {
1182
+ font-size: 11px;
1183
+ font-weight: 600;
1184
+ text-transform: uppercase;
1185
+ letter-spacing: 0.05em;
1186
+ color: var(--text-muted);
1187
+ margin-bottom: 4px;
1188
+ }
1189
+ .row-detail-section pre {
1190
+ font-family: var(--mono);
1191
+ font-size: 12px;
1192
+ color: var(--text-secondary);
1193
+ white-space: pre-wrap;
1194
+ word-break: break-all;
1195
+ max-height: 300px;
1196
+ overflow-y: auto;
1197
+ margin: 0;
1198
+ background: var(--bg-secondary);
1199
+ padding: 10px;
1200
+ border-radius: var(--radius);
1201
+ }
1202
+
1203
+ /* ─── Clickable table rows ─────────────────────── */
1204
+ tr.expandable { cursor: pointer; }
1205
+ tr.expandable:hover td { background: var(--bg-hover, var(--bg-secondary)); }
1206
+
1207
+ /* ─── Active project highlight ─────────────────── */
1208
+ .project-active-row td {
1209
+ border-left: 3px solid var(--green);
1210
+ }
1211
+
1212
+ /* ─── Load More ────────────────────────────────── */
1213
+ .load-more-row {
1214
+ text-align: center;
1215
+ padding: 16px;
1216
+ }
1217
+
1157
1218
  /* ─── Responsive ────────────────────────────────── */
1158
1219
  @media (max-width: 768px) {
1159
1220
  .sidebar { display: none; }
@@ -1205,6 +1266,21 @@
1205
1266
  </button>
1206
1267
  </div>
1207
1268
 
1269
+ <div class="nav-section">
1270
+ <div class="nav-section-label">Data</div>
1271
+ <button class="nav-item" data-page="activity" onclick="navigate('activity')">
1272
+ <span class="icon">&#128200;</span> Activity
1273
+ <span class="badge" id="activity-badge" style="display:none">0</span>
1274
+ </button>
1275
+ <button class="nav-item" data-page="assets" onclick="navigate('assets')">
1276
+ <span class="icon">&#128230;</span> Assets
1277
+ <span class="badge" id="assets-badge" style="display:none">0</span>
1278
+ </button>
1279
+ <button class="nav-item" data-page="projects" onclick="navigate('projects')">
1280
+ <span class="icon">&#128194;</span> Projects
1281
+ </button>
1282
+ </div>
1283
+
1208
1284
  <div class="nav-section">
1209
1285
  <div class="nav-section-label">Configuration</div>
1210
1286
  <button class="nav-item" data-page="skills" onclick="navigate('skills')">
@@ -1267,6 +1343,16 @@
1267
1343
  <div class="stat-value" id="stat-memory">--</div>
1268
1344
  <div class="stat-sub" id="stat-memory-sub">--</div>
1269
1345
  </div>
1346
+ <div class="stat-card">
1347
+ <div class="stat-label">Activities</div>
1348
+ <div class="stat-value" id="stat-activities">--</div>
1349
+ <div class="stat-sub" id="stat-activities-sub">--</div>
1350
+ </div>
1351
+ <div class="stat-card">
1352
+ <div class="stat-label">Active Project</div>
1353
+ <div class="stat-value" id="stat-project" style="font-size:16px;">--</div>
1354
+ <div class="stat-sub" id="stat-project-sub">--</div>
1355
+ </div>
1270
1356
  </div>
1271
1357
 
1272
1358
  <div class="card">
@@ -1427,6 +1513,136 @@
1427
1513
  </div>
1428
1514
  </div>
1429
1515
 
1516
+ <!-- ═══ Activity Page ═══ -->
1517
+ <div class="page" id="page-activity">
1518
+ <div class="table-toolbar">
1519
+ <input type="search" id="activity-search" placeholder="Search activities..."
1520
+ onkeydown="if(event.key==='Enter') searchActivity()" />
1521
+ <select id="activity-status-filter" onchange="loadActivity()">
1522
+ <option value="">All Status</option>
1523
+ <option value="completed">Completed</option>
1524
+ <option value="pending">Pending</option>
1525
+ <option value="failed">Failed</option>
1526
+ </select>
1527
+ <select id="activity-executor-filter" onchange="loadActivity()">
1528
+ <option value="">All Executors</option>
1529
+ <option value="client">Client</option>
1530
+ <option value="server">Server</option>
1531
+ </select>
1532
+ <button class="btn btn-sm" onclick="loadActivity()">Refresh</button>
1533
+ </div>
1534
+
1535
+ <div class="stat-grid" id="activity-stats-grid">
1536
+ <div class="stat-card">
1537
+ <div class="stat-label">Total Activities</div>
1538
+ <div class="stat-value" id="activity-stat-total">--</div>
1539
+ </div>
1540
+ <div class="stat-card">
1541
+ <div class="stat-label">Completed</div>
1542
+ <div class="stat-value" id="activity-stat-completed">--</div>
1543
+ </div>
1544
+ <div class="stat-card">
1545
+ <div class="stat-label">Failed</div>
1546
+ <div class="stat-value" id="activity-stat-failed">--</div>
1547
+ </div>
1548
+ <div class="stat-card">
1549
+ <div class="stat-label">Avg Duration</div>
1550
+ <div class="stat-value" id="activity-stat-duration">--</div>
1551
+ </div>
1552
+ </div>
1553
+
1554
+ <div class="card">
1555
+ <div class="card-header">
1556
+ <h3>Agent Activity</h3>
1557
+ <span style="font-size:12px;color:var(--text-muted);" id="activity-count-label"></span>
1558
+ </div>
1559
+ <div class="table-wrap">
1560
+ <table>
1561
+ <thead>
1562
+ <tr>
1563
+ <th>Time</th>
1564
+ <th>Request</th>
1565
+ <th>Status</th>
1566
+ <th>Executor</th>
1567
+ <th>Tools</th>
1568
+ <th>Duration</th>
1569
+ </tr>
1570
+ </thead>
1571
+ <tbody id="activity-table-body">
1572
+ <tr><td colspan="6"><div class="loading-center"><div class="spinner"></div></div></td></tr>
1573
+ </tbody>
1574
+ </table>
1575
+ </div>
1576
+ <div class="load-more-row" id="activity-load-more" style="display:none;">
1577
+ <button class="btn btn-sm" onclick="loadMoreActivity()">Load More</button>
1578
+ </div>
1579
+ </div>
1580
+ </div>
1581
+
1582
+ <!-- ═══ Assets Page ═══ -->
1583
+ <div class="page" id="page-assets">
1584
+ <div class="table-toolbar">
1585
+ <select id="assets-type-filter" onchange="loadAssets()">
1586
+ <option value="">All Types</option>
1587
+ <option value="image">Image</option>
1588
+ <option value="document">Document</option>
1589
+ <option value="audio">Audio</option>
1590
+ <option value="video">Video</option>
1591
+ <option value="code">Code</option>
1592
+ <option value="other">Other</option>
1593
+ </select>
1594
+ <button class="btn btn-sm" onclick="loadAssets()">Refresh</button>
1595
+ </div>
1596
+
1597
+ <div class="card">
1598
+ <div class="card-header">
1599
+ <h3>Assets</h3>
1600
+ <span style="font-size:12px;color:var(--text-muted);" id="assets-count-label"></span>
1601
+ </div>
1602
+ <div class="table-wrap">
1603
+ <table>
1604
+ <thead>
1605
+ <tr>
1606
+ <th>Name</th>
1607
+ <th>Type</th>
1608
+ <th>Path / URL</th>
1609
+ <th>Created</th>
1610
+ </tr>
1611
+ </thead>
1612
+ <tbody id="assets-table-body">
1613
+ <tr><td colspan="4"><div class="loading-center"><div class="spinner"></div></div></td></tr>
1614
+ </tbody>
1615
+ </table>
1616
+ </div>
1617
+ </div>
1618
+ </div>
1619
+
1620
+ <!-- ═══ Projects Page ═══ -->
1621
+ <div class="page" id="page-projects">
1622
+ <div class="card">
1623
+ <div class="card-header">
1624
+ <h3>Projects</h3>
1625
+ <button class="btn btn-sm" onclick="loadProjects()">Refresh</button>
1626
+ </div>
1627
+ <div class="table-wrap">
1628
+ <table>
1629
+ <thead>
1630
+ <tr>
1631
+ <th>Name</th>
1632
+ <th>Description</th>
1633
+ <th>Path</th>
1634
+ <th>Status</th>
1635
+ <th>Created</th>
1636
+ </tr>
1637
+ </thead>
1638
+ <tbody id="projects-table-body">
1639
+ <tr><td colspan="5"><div class="loading-center"><div class="spinner"></div></div></td></tr>
1640
+ </tbody>
1641
+ </table>
1642
+ </div>
1643
+ </div>
1644
+ </div>
1645
+
1430
1646
  <!-- ═══ Skills Page ═══ -->
1431
1647
  <div class="page" id="page-skills">
1432
1648
  <div class="skill-grid" id="skills-grid">
@@ -1592,6 +1808,28 @@
1592
1808
  </div>
1593
1809
  </div>
1594
1810
 
1811
+ <!-- Activity Detail Modal -->
1812
+ <div class="modal-overlay" id="activity-modal">
1813
+ <div class="modal" style="max-width:800px;">
1814
+ <h3 id="activity-modal-title">Activity Detail</h3>
1815
+ <div id="activity-modal-content"></div>
1816
+ <div class="modal-actions">
1817
+ <button class="btn" onclick="closeActivityModal()">Close</button>
1818
+ </div>
1819
+ </div>
1820
+ </div>
1821
+
1822
+ <!-- Cron History Modal -->
1823
+ <div class="modal-overlay" id="cron-history-modal">
1824
+ <div class="modal" style="max-width:700px;">
1825
+ <h3 id="cron-history-modal-title">Run History</h3>
1826
+ <div id="cron-history-modal-content"></div>
1827
+ <div class="modal-actions">
1828
+ <button class="btn" onclick="closeCronHistoryModal()">Close</button>
1829
+ </div>
1830
+ </div>
1831
+ </div>
1832
+
1595
1833
  <script>
1596
1834
  /* ═══════════════════════════════════════════════
1597
1835
  * CoStar Dashboard - Client-side JS
@@ -1643,6 +1881,9 @@
1643
1881
  chat: 'Chat',
1644
1882
  sessions: 'Sessions',
1645
1883
  cron: 'Cron Jobs',
1884
+ activity: 'Activity',
1885
+ assets: 'Assets',
1886
+ projects: 'Projects',
1646
1887
  skills: 'Skills',
1647
1888
  workspace: 'Workspace',
1648
1889
  logs: 'Logs',
@@ -1656,6 +1897,9 @@
1656
1897
  case 'chat': initChat(); break;
1657
1898
  case 'sessions': loadSessionFiles(); startSessionPolling(); break;
1658
1899
  case 'cron': loadCronJobs(); loadCronStatus(); break;
1900
+ case 'activity': loadActivity(); break;
1901
+ case 'assets': loadAssets(); break;
1902
+ case 'projects': loadProjects(); break;
1659
1903
  case 'skills': loadSkills(); break;
1660
1904
  case 'workspace': loadWorkspaceFiles(); break;
1661
1905
  case 'logs': loadLogs(); startLogStream(); break;
@@ -1679,9 +1923,11 @@
1679
1923
  // ─── Dashboard ───────────────────────────────────
1680
1924
  async function loadDashboard() {
1681
1925
  try {
1682
- const [status, versionInfo] = await Promise.all([
1926
+ const [status, versionInfo, dbStats, dbProjects] = await Promise.all([
1683
1927
  api('/api/status'),
1684
1928
  api('/api/version').catch(() => null),
1929
+ api('/api/db/activity/stats').catch(() => null),
1930
+ api('/api/db/projects?limit=50').catch(() => null),
1685
1931
  ]);
1686
1932
  const a = status.agent;
1687
1933
 
@@ -1723,6 +1969,20 @@
1723
1969
  row('Cron Scheduler', cronStatus.isRunning ? 'Running' : 'Stopped'),
1724
1970
  row('Cron Last Check', cronStatus.lastCheckAt ? new Date(cronStatus.lastCheckAt).toLocaleString() : 'Never'),
1725
1971
  ].join('');
1972
+ // DB stats
1973
+ if (dbStats) {
1974
+ document.getElementById('stat-activities').textContent = dbStats.total || 0;
1975
+ document.getElementById('stat-activities-sub').textContent =
1976
+ `${dbStats.completed || 0} completed, ${dbStats.failed || 0} failed`;
1977
+ }
1978
+
1979
+ if (dbProjects && Array.isArray(dbProjects)) {
1980
+ const active = dbProjects.find(p => p.is_active === 1 || p.is_active === true);
1981
+ document.getElementById('stat-project').textContent = active ? active.name : 'None';
1982
+ document.getElementById('stat-project-sub').textContent =
1983
+ `${dbProjects.length} total project${dbProjects.length !== 1 ? 's' : ''}`;
1984
+ }
1985
+
1726
1986
  // Load session info alongside dashboard
1727
1987
  loadSessionInfo();
1728
1988
  } catch (err) {
@@ -2336,14 +2596,16 @@
2336
2596
  const lastRun = job.last_run_at ? new Date(job.last_run_at).toLocaleString() : '--';
2337
2597
  const nextRun = job.next_run_at ? new Date(job.next_run_at).toLocaleString() : '--';
2338
2598
 
2599
+ const taskPreview = (job.task || job.instruction || '').substring(0, 80);
2339
2600
  return `<tr>
2340
- <td><strong>${esc(job.name || job.id)}</strong><br><span style="font-size:11px;color:var(--text-muted);">${esc((job.task || '').substring(0, 80))}</span></td>
2601
+ <td><strong>${esc(job.name || job.id)}</strong><br><span style="font-size:11px;color:var(--text-muted);">${esc(taskPreview)}</span></td>
2341
2602
  <td><code style="font-size:12px;">${esc(schedule)}</code></td>
2342
2603
  <td>${statusTag}</td>
2343
2604
  <td style="font-size:12px;">${lastRun}</td>
2344
2605
  <td style="font-size:12px;">${nextRun}</td>
2345
2606
  <td>
2346
2607
  <button class="btn btn-sm" onclick="triggerCronJob('${job.id}')">Run</button>
2608
+ <button class="btn btn-sm" onclick="showCronHistory('${job.id}', '${esc(job.name || job.id)}')">History</button>
2347
2609
  <button class="btn btn-sm btn-danger" onclick="deleteCronJob('${job.id}')">Delete</button>
2348
2610
  </td>
2349
2611
  </tr>`;
@@ -2432,6 +2694,349 @@
2432
2694
  }
2433
2695
  }
2434
2696
 
2697
+ // ─── Activity ──────────────────────────────────────
2698
+ let activityOffset = 0;
2699
+ const ACTIVITY_PAGE_SIZE = 50;
2700
+
2701
+ async function loadActivity() {
2702
+ activityOffset = 0;
2703
+ try {
2704
+ const status = document.getElementById('activity-status-filter').value;
2705
+ const executor = document.getElementById('activity-executor-filter').value;
2706
+ const params = new URLSearchParams({ limit: String(ACTIVITY_PAGE_SIZE) });
2707
+ if (status) params.set('status', status);
2708
+ if (executor) params.set('executor', executor);
2709
+
2710
+ const [stats, activities] = await Promise.all([
2711
+ api('/api/db/activity/stats').catch(() => null),
2712
+ api(`/api/db/activity?${params}`),
2713
+ ]);
2714
+
2715
+ // Render stats
2716
+ if (stats) {
2717
+ document.getElementById('activity-stat-total').textContent = stats.total || 0;
2718
+ document.getElementById('activity-stat-completed').textContent = stats.completed || 0;
2719
+ document.getElementById('activity-stat-failed').textContent = stats.failed || 0;
2720
+ document.getElementById('activity-stat-duration').textContent =
2721
+ stats.avgDuration ? formatDurationShort(stats.avgDuration) : '--';
2722
+
2723
+ const badge = document.getElementById('activity-badge');
2724
+ if (badge && stats.total > 0) {
2725
+ badge.textContent = stats.total;
2726
+ badge.style.display = '';
2727
+ }
2728
+ }
2729
+
2730
+ renderActivityTable(Array.isArray(activities) ? activities : []);
2731
+ } catch (err) {
2732
+ document.getElementById('activity-table-body').innerHTML =
2733
+ `<tr><td colspan="6" style="color:var(--red);padding:16px;">Error: ${esc(err.message)}</td></tr>`;
2734
+ }
2735
+ }
2736
+
2737
+ async function searchActivity() {
2738
+ const query = document.getElementById('activity-search').value.trim();
2739
+ if (!query) { loadActivity(); return; }
2740
+
2741
+ try {
2742
+ const results = await api(`/api/db/activity/search?q=${encodeURIComponent(query)}&limit=50`);
2743
+ const arr = Array.isArray(results) ? results : [];
2744
+ renderActivityTable(arr);
2745
+ document.getElementById('activity-load-more').style.display = 'none';
2746
+ document.getElementById('activity-count-label').textContent =
2747
+ `${arr.length} search result${arr.length !== 1 ? 's' : ''}`;
2748
+ } catch (err) {
2749
+ document.getElementById('activity-table-body').innerHTML =
2750
+ `<tr><td colspan="6" style="color:var(--red);padding:16px;">Error: ${esc(err.message)}</td></tr>`;
2751
+ }
2752
+ }
2753
+
2754
+ function renderActivityRow(a) {
2755
+ const time = new Date(a.created_at);
2756
+ const dateStr = time.toLocaleDateString([], { month: 'short', day: 'numeric' });
2757
+ const timeStr = time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
2758
+ const requestPreview = esc((a.request || '').substring(0, 80));
2759
+ const statusTag = a.status === 'completed'
2760
+ ? '<span class="tag tag-green">Completed</span>'
2761
+ : a.status === 'failed'
2762
+ ? '<span class="tag tag-red">Failed</span>'
2763
+ : '<span class="tag tag-yellow">Pending</span>';
2764
+ const executorTag = a.executor === 'client'
2765
+ ? '<span class="tag tag-blue">Client</span>'
2766
+ : '<span class="tag tag-muted">Server</span>';
2767
+ const duration = a.duration ? formatDurationShort(a.duration) : '--';
2768
+
2769
+ return `<tr class="expandable" onclick="showActivityDetail('${esc(a.id)}')">
2770
+ <td style="font-size:12px;white-space:nowrap;font-family:var(--mono);">${dateStr}<br>${timeStr}</td>
2771
+ <td><span style="font-size:13px;">${requestPreview || '<em style="color:var(--text-muted);">No request</em>'}</span></td>
2772
+ <td>${statusTag}</td>
2773
+ <td>${executorTag}</td>
2774
+ <td style="font-family:var(--mono);font-size:12px;">${a.tool_calls || 0}</td>
2775
+ <td style="font-family:var(--mono);font-size:12px;">${duration}</td>
2776
+ </tr>`;
2777
+ }
2778
+
2779
+ function renderActivityTable(activities) {
2780
+ const tbody = document.getElementById('activity-table-body');
2781
+
2782
+ if (!activities || activities.length === 0) {
2783
+ tbody.innerHTML = `<tr><td colspan="6"><div class="empty-state">
2784
+ <div class="empty-icon">&#128200;</div>
2785
+ <p>No activity records found.</p>
2786
+ </div></td></tr>`;
2787
+ document.getElementById('activity-load-more').style.display = 'none';
2788
+ document.getElementById('activity-count-label').textContent = '';
2789
+ return;
2790
+ }
2791
+
2792
+ document.getElementById('activity-count-label').textContent =
2793
+ `${activities.length} record${activities.length !== 1 ? 's' : ''}`;
2794
+
2795
+ tbody.innerHTML = activities.map(renderActivityRow).join('');
2796
+
2797
+ document.getElementById('activity-load-more').style.display =
2798
+ activities.length >= ACTIVITY_PAGE_SIZE ? '' : 'none';
2799
+ }
2800
+
2801
+ async function loadMoreActivity() {
2802
+ activityOffset += ACTIVITY_PAGE_SIZE;
2803
+ try {
2804
+ const status = document.getElementById('activity-status-filter').value;
2805
+ const params = new URLSearchParams({
2806
+ limit: String(ACTIVITY_PAGE_SIZE),
2807
+ offset: String(activityOffset),
2808
+ });
2809
+ if (status) params.set('status', status);
2810
+
2811
+ const more = await api(`/api/db/activity?${params}`);
2812
+ const arr = Array.isArray(more) ? more : [];
2813
+ if (arr.length > 0) {
2814
+ const tbody = document.getElementById('activity-table-body');
2815
+ tbody.innerHTML += arr.map(renderActivityRow).join('');
2816
+ }
2817
+ if (arr.length < ACTIVITY_PAGE_SIZE) {
2818
+ document.getElementById('activity-load-more').style.display = 'none';
2819
+ }
2820
+ } catch (err) {
2821
+ alert('Failed to load more: ' + err.message);
2822
+ }
2823
+ }
2824
+
2825
+ async function showActivityDetail(id) {
2826
+ try {
2827
+ const a = await api(`/api/db/activity/${id}`);
2828
+ document.getElementById('activity-modal-title').textContent =
2829
+ `Activity ${id.substring(0, 8)}...`;
2830
+
2831
+ let html = `<div class="config-list" style="margin-bottom:16px;">
2832
+ ${row('ID', a.id)}
2833
+ ${row('Status', a.status)}
2834
+ ${row('Executor', a.executor || '--')}
2835
+ ${row('Source', a.source || '--')}
2836
+ ${row('Tool Calls', a.tool_calls || 0)}
2837
+ ${row('Duration', a.duration ? formatDurationShort(a.duration) : '--')}
2838
+ ${row('Created', new Date(a.created_at).toLocaleString())}
2839
+ ${row('Updated', new Date(a.updated_at).toLocaleString())}
2840
+ ${a.keywords ? row('Keywords', a.keywords) : ''}
2841
+ ${a.categories ? row('Categories', a.categories) : ''}
2842
+ </div>`;
2843
+
2844
+ if (a.request) {
2845
+ html += `<div class="row-detail-section">
2846
+ <div class="row-detail-label">Request</div>
2847
+ <pre>${esc(a.request)}</pre>
2848
+ </div>`;
2849
+ }
2850
+
2851
+ if (a.response) {
2852
+ html += `<div class="row-detail-section">
2853
+ <div class="row-detail-label">Response</div>
2854
+ <pre>${esc(a.response)}</pre>
2855
+ </div>`;
2856
+ }
2857
+
2858
+ if (a.error) {
2859
+ html += `<div class="row-detail-section">
2860
+ <div class="row-detail-label">Error</div>
2861
+ <pre style="color:var(--red);">${esc(a.error)}</pre>
2862
+ </div>`;
2863
+ }
2864
+
2865
+ document.getElementById('activity-modal-content').innerHTML = html;
2866
+ document.getElementById('activity-modal').classList.add('open');
2867
+ } catch (err) {
2868
+ alert('Failed to load activity: ' + err.message);
2869
+ }
2870
+ }
2871
+
2872
+ function closeActivityModal() {
2873
+ document.getElementById('activity-modal').classList.remove('open');
2874
+ }
2875
+
2876
+ // ─── Assets ──────────────────────────────────────
2877
+ async function loadAssets() {
2878
+ try {
2879
+ const assets = await api('/api/db/assets?limit=200');
2880
+ const arr = Array.isArray(assets) ? assets : [];
2881
+
2882
+ const badge = document.getElementById('assets-badge');
2883
+ if (badge && arr.length > 0) {
2884
+ badge.textContent = arr.length;
2885
+ badge.style.display = '';
2886
+ }
2887
+
2888
+ renderAssetsTable(arr);
2889
+ } catch (err) {
2890
+ document.getElementById('assets-table-body').innerHTML =
2891
+ `<tr><td colspan="4" style="color:var(--red);padding:16px;">Error: ${esc(err.message)}</td></tr>`;
2892
+ }
2893
+ }
2894
+
2895
+ function renderAssetsTable(assets) {
2896
+ const tbody = document.getElementById('assets-table-body');
2897
+ const typeFilter = document.getElementById('assets-type-filter').value;
2898
+
2899
+ let filtered = assets;
2900
+ if (typeFilter) {
2901
+ filtered = assets.filter(a => (a.type || '').toLowerCase() === typeFilter);
2902
+ }
2903
+
2904
+ if (filtered.length === 0) {
2905
+ tbody.innerHTML = `<tr><td colspan="4"><div class="empty-state">
2906
+ <div class="empty-icon">&#128230;</div>
2907
+ <p>No assets found.</p>
2908
+ </div></td></tr>`;
2909
+ document.getElementById('assets-count-label').textContent = '';
2910
+ return;
2911
+ }
2912
+
2913
+ document.getElementById('assets-count-label').textContent =
2914
+ `${filtered.length} asset${filtered.length !== 1 ? 's' : ''}`;
2915
+
2916
+ tbody.innerHTML = filtered.map(a => {
2917
+ const typeTag = a.type
2918
+ ? `<span class="tag tag-blue">${esc(a.type)}</span>`
2919
+ : '<span class="tag tag-muted">unknown</span>';
2920
+
2921
+ const pathOrUrl = a.local_file_path || a.remote_url || '--';
2922
+ const pathDisplay = pathOrUrl.length > 60
2923
+ ? pathOrUrl.substring(0, 30) + '...' + pathOrUrl.slice(-25)
2924
+ : pathOrUrl;
2925
+
2926
+ const created = new Date(a.created_at);
2927
+ const dateStr = created.toLocaleDateString([], { month: 'short', day: 'numeric' });
2928
+
2929
+ return `<tr>
2930
+ <td><strong>${esc(a.name || 'Unnamed')}</strong>
2931
+ ${a.description ? '<br><span style="font-size:11px;color:var(--text-muted);">' + esc(a.description.substring(0, 60)) + '</span>' : ''}
2932
+ </td>
2933
+ <td>${typeTag}</td>
2934
+ <td><code style="font-size:11px;" title="${esc(pathOrUrl)}">${esc(pathDisplay)}</code></td>
2935
+ <td style="font-size:12px;white-space:nowrap;">${dateStr}</td>
2936
+ </tr>`;
2937
+ }).join('');
2938
+ }
2939
+
2940
+ // ─── Projects ────────────────────────────────────
2941
+ async function loadProjects() {
2942
+ try {
2943
+ const projects = await api('/api/db/projects?limit=100');
2944
+ const arr = Array.isArray(projects) ? projects : [];
2945
+ renderProjectsTable(arr);
2946
+ } catch (err) {
2947
+ document.getElementById('projects-table-body').innerHTML =
2948
+ `<tr><td colspan="5" style="color:var(--red);padding:16px;">Error: ${esc(err.message)}</td></tr>`;
2949
+ }
2950
+ }
2951
+
2952
+ function renderProjectsTable(projects) {
2953
+ const tbody = document.getElementById('projects-table-body');
2954
+
2955
+ if (projects.length === 0) {
2956
+ tbody.innerHTML = `<tr><td colspan="5"><div class="empty-state">
2957
+ <div class="empty-icon">&#128194;</div>
2958
+ <p>No projects found.</p>
2959
+ </div></td></tr>`;
2960
+ return;
2961
+ }
2962
+
2963
+ tbody.innerHTML = projects.map(p => {
2964
+ const isActive = p.is_active === 1 || p.is_active === true;
2965
+ const statusTag = isActive
2966
+ ? '<span class="tag tag-green">Active</span>'
2967
+ : '<span class="tag tag-muted">Inactive</span>';
2968
+
2969
+ const created = new Date(p.created_at);
2970
+ const dateStr = created.toLocaleDateString([], { month: 'short', day: 'numeric' });
2971
+
2972
+ const descPreview = esc((p.description || '').substring(0, 80));
2973
+ const pathDisplay = p.project_path || '--';
2974
+
2975
+ return `<tr class="${isActive ? 'project-active-row' : ''}">
2976
+ <td><strong>${esc(p.name || 'Unnamed')}</strong></td>
2977
+ <td><span style="font-size:12px;color:var(--text-secondary);">${descPreview || '--'}</span></td>
2978
+ <td><code style="font-size:11px;">${esc(pathDisplay)}</code></td>
2979
+ <td>${statusTag}</td>
2980
+ <td style="font-size:12px;white-space:nowrap;">${dateStr}</td>
2981
+ </tr>`;
2982
+ }).join('');
2983
+ }
2984
+
2985
+ // ─── Cron History ────────────────────────────────
2986
+ async function showCronHistory(jobId, jobName) {
2987
+ try {
2988
+ document.getElementById('cron-history-modal-title').textContent =
2989
+ `Run History: ${jobName}`;
2990
+ document.getElementById('cron-history-modal-content').innerHTML =
2991
+ '<div class="loading-center"><div class="spinner"></div></div>';
2992
+ document.getElementById('cron-history-modal').classList.add('open');
2993
+
2994
+ const history = await api(`/api/cron/history?jobId=${encodeURIComponent(jobId)}&limit=50`);
2995
+ const entries = Array.isArray(history) ? history : [];
2996
+
2997
+ if (entries.length === 0) {
2998
+ document.getElementById('cron-history-modal-content').innerHTML =
2999
+ '<div class="empty-state" style="padding:20px;"><p>No run history for this job.</p></div>';
3000
+ return;
3001
+ }
3002
+
3003
+ let html = '<div class="table-wrap"><table><thead><tr>' +
3004
+ '<th>Time</th><th>Status</th><th>Duration</th><th>Summary</th>' +
3005
+ '</tr></thead><tbody>';
3006
+
3007
+ html += entries.map(e => {
3008
+ const time = new Date(e.ts);
3009
+ const timeStr = time.toLocaleString();
3010
+
3011
+ const statusTag = e.status === 'ok'
3012
+ ? '<span class="tag tag-green">OK</span>'
3013
+ : e.status === 'error'
3014
+ ? '<span class="tag tag-red">Error</span>'
3015
+ : '<span class="tag tag-yellow">Skipped</span>';
3016
+
3017
+ const duration = e.durationMs ? formatDurationShort(e.durationMs) : '--';
3018
+ const summary = esc((e.summary || e.error || '').substring(0, 100));
3019
+
3020
+ return `<tr>
3021
+ <td style="font-size:12px;white-space:nowrap;font-family:var(--mono);">${timeStr}</td>
3022
+ <td>${statusTag}</td>
3023
+ <td style="font-family:var(--mono);font-size:12px;">${duration}</td>
3024
+ <td style="font-size:12px;color:${e.error ? 'var(--red)' : 'var(--text-secondary)'};">${summary}</td>
3025
+ </tr>`;
3026
+ }).join('');
3027
+
3028
+ html += '</tbody></table></div>';
3029
+ document.getElementById('cron-history-modal-content').innerHTML = html;
3030
+ } catch (err) {
3031
+ document.getElementById('cron-history-modal-content').innerHTML =
3032
+ `<div style="color:var(--red);padding:16px;">Error: ${esc(err.message)}</div>`;
3033
+ }
3034
+ }
3035
+
3036
+ function closeCronHistoryModal() {
3037
+ document.getElementById('cron-history-modal').classList.remove('open');
3038
+ }
3039
+
2435
3040
  // ─── Skills ──────────────────────────────────────
2436
3041
  async function loadSkills() {
2437
3042
  try {