pilotswarm-sdk 0.1.3
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/agent-loader.d.ts +61 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +212 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/artifact-tools.d.ts +31 -0
- package/dist/artifact-tools.d.ts.map +1 -0
- package/dist/artifact-tools.js +190 -0
- package/dist/artifact-tools.js.map +1 -0
- package/dist/blob-store.d.ts +73 -0
- package/dist/blob-store.d.ts.map +1 -0
- package/dist/blob-store.js +220 -0
- package/dist/blob-store.js.map +1 -0
- package/dist/client.d.ts +159 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +676 -0
- package/dist/client.js.map +1 -0
- package/dist/cms.d.ts +129 -0
- package/dist/cms.d.ts.map +1 -0
- package/dist/cms.js +313 -0
- package/dist/cms.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/managed-session.d.ts +70 -0
- package/dist/managed-session.d.ts.map +1 -0
- package/dist/managed-session.js +717 -0
- package/dist/managed-session.js.map +1 -0
- package/dist/management-client.d.ts +171 -0
- package/dist/management-client.d.ts.map +1 -0
- package/dist/management-client.js +401 -0
- package/dist/management-client.js.map +1 -0
- package/dist/mcp-loader.d.ts +50 -0
- package/dist/mcp-loader.d.ts.map +1 -0
- package/dist/mcp-loader.js +83 -0
- package/dist/mcp-loader.js.map +1 -0
- package/dist/model-providers.d.ts +143 -0
- package/dist/model-providers.d.ts.map +1 -0
- package/dist/model-providers.js +228 -0
- package/dist/model-providers.js.map +1 -0
- package/dist/orchestration-registry.d.ts +7 -0
- package/dist/orchestration-registry.d.ts.map +1 -0
- package/dist/orchestration-registry.js +49 -0
- package/dist/orchestration-registry.js.map +1 -0
- package/dist/orchestration.d.ts +36 -0
- package/dist/orchestration.d.ts.map +1 -0
- package/dist/orchestration.js +1357 -0
- package/dist/orchestration.js.map +1 -0
- package/dist/orchestration_1_0_0.d.ts +20 -0
- package/dist/orchestration_1_0_0.d.ts.map +1 -0
- package/dist/orchestration_1_0_0.js +497 -0
- package/dist/orchestration_1_0_0.js.map +1 -0
- package/dist/orchestration_1_0_1.d.ts +19 -0
- package/dist/orchestration_1_0_1.d.ts.map +1 -0
- package/dist/orchestration_1_0_1.js +546 -0
- package/dist/orchestration_1_0_1.js.map +1 -0
- package/dist/orchestration_1_0_10.d.ts +36 -0
- package/dist/orchestration_1_0_10.d.ts.map +1 -0
- package/dist/orchestration_1_0_10.js +1253 -0
- package/dist/orchestration_1_0_10.js.map +1 -0
- package/dist/orchestration_1_0_11.d.ts +36 -0
- package/dist/orchestration_1_0_11.d.ts.map +1 -0
- package/dist/orchestration_1_0_11.js +1255 -0
- package/dist/orchestration_1_0_11.js.map +1 -0
- package/dist/orchestration_1_0_12.d.ts +36 -0
- package/dist/orchestration_1_0_12.d.ts.map +1 -0
- package/dist/orchestration_1_0_12.js +1250 -0
- package/dist/orchestration_1_0_12.js.map +1 -0
- package/dist/orchestration_1_0_13.d.ts +36 -0
- package/dist/orchestration_1_0_13.d.ts.map +1 -0
- package/dist/orchestration_1_0_13.js +1260 -0
- package/dist/orchestration_1_0_13.js.map +1 -0
- package/dist/orchestration_1_0_14.d.ts +36 -0
- package/dist/orchestration_1_0_14.d.ts.map +1 -0
- package/dist/orchestration_1_0_14.js +1258 -0
- package/dist/orchestration_1_0_14.js.map +1 -0
- package/dist/orchestration_1_0_15.d.ts +36 -0
- package/dist/orchestration_1_0_15.d.ts.map +1 -0
- package/dist/orchestration_1_0_15.js +1266 -0
- package/dist/orchestration_1_0_15.js.map +1 -0
- package/dist/orchestration_1_0_16.d.ts +36 -0
- package/dist/orchestration_1_0_16.d.ts.map +1 -0
- package/dist/orchestration_1_0_16.js +1275 -0
- package/dist/orchestration_1_0_16.js.map +1 -0
- package/dist/orchestration_1_0_17.d.ts +36 -0
- package/dist/orchestration_1_0_17.d.ts.map +1 -0
- package/dist/orchestration_1_0_17.js +1314 -0
- package/dist/orchestration_1_0_17.js.map +1 -0
- package/dist/orchestration_1_0_18.d.ts +36 -0
- package/dist/orchestration_1_0_18.d.ts.map +1 -0
- package/dist/orchestration_1_0_18.js +1328 -0
- package/dist/orchestration_1_0_18.js.map +1 -0
- package/dist/orchestration_1_0_19.d.ts +36 -0
- package/dist/orchestration_1_0_19.d.ts.map +1 -0
- package/dist/orchestration_1_0_19.js +1324 -0
- package/dist/orchestration_1_0_19.js.map +1 -0
- package/dist/orchestration_1_0_2.d.ts +19 -0
- package/dist/orchestration_1_0_2.d.ts.map +1 -0
- package/dist/orchestration_1_0_2.js +749 -0
- package/dist/orchestration_1_0_2.js.map +1 -0
- package/dist/orchestration_1_0_20.d.ts +36 -0
- package/dist/orchestration_1_0_20.d.ts.map +1 -0
- package/dist/orchestration_1_0_20.js +1347 -0
- package/dist/orchestration_1_0_20.js.map +1 -0
- package/dist/orchestration_1_0_3.d.ts +19 -0
- package/dist/orchestration_1_0_3.d.ts.map +1 -0
- package/dist/orchestration_1_0_3.js +826 -0
- package/dist/orchestration_1_0_3.js.map +1 -0
- package/dist/orchestration_1_0_4.d.ts +19 -0
- package/dist/orchestration_1_0_4.d.ts.map +1 -0
- package/dist/orchestration_1_0_4.js +1020 -0
- package/dist/orchestration_1_0_4.js.map +1 -0
- package/dist/orchestration_1_0_5.d.ts +19 -0
- package/dist/orchestration_1_0_5.d.ts.map +1 -0
- package/dist/orchestration_1_0_5.js +1027 -0
- package/dist/orchestration_1_0_5.js.map +1 -0
- package/dist/orchestration_1_0_6.d.ts +19 -0
- package/dist/orchestration_1_0_6.d.ts.map +1 -0
- package/dist/orchestration_1_0_6.js +1034 -0
- package/dist/orchestration_1_0_6.js.map +1 -0
- package/dist/orchestration_1_0_7.d.ts +19 -0
- package/dist/orchestration_1_0_7.d.ts.map +1 -0
- package/dist/orchestration_1_0_7.js +1085 -0
- package/dist/orchestration_1_0_7.js.map +1 -0
- package/dist/orchestration_1_0_8.d.ts +36 -0
- package/dist/orchestration_1_0_8.d.ts.map +1 -0
- package/dist/orchestration_1_0_8.js +1106 -0
- package/dist/orchestration_1_0_8.js.map +1 -0
- package/dist/orchestration_1_0_9.d.ts +36 -0
- package/dist/orchestration_1_0_9.d.ts.map +1 -0
- package/dist/orchestration_1_0_9.js +1207 -0
- package/dist/orchestration_1_0_9.js.map +1 -0
- package/dist/prompt-layering.d.ts +16 -0
- package/dist/prompt-layering.d.ts.map +1 -0
- package/dist/prompt-layering.js +60 -0
- package/dist/prompt-layering.js.map +1 -0
- package/dist/resourcemgr-tools.d.ts +27 -0
- package/dist/resourcemgr-tools.d.ts.map +1 -0
- package/dist/resourcemgr-tools.js +638 -0
- package/dist/resourcemgr-tools.js.map +1 -0
- package/dist/session-dumper.d.ts +26 -0
- package/dist/session-dumper.d.ts.map +1 -0
- package/dist/session-dumper.js +272 -0
- package/dist/session-dumper.js.map +1 -0
- package/dist/session-manager.d.ts +152 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +493 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session-proxy.d.ts +68 -0
- package/dist/session-proxy.d.ts.map +1 -0
- package/dist/session-proxy.js +665 -0
- package/dist/session-proxy.js.map +1 -0
- package/dist/session-store.d.ts +35 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +88 -0
- package/dist/session-store.js.map +1 -0
- package/dist/skills.d.ts +31 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +93 -0
- package/dist/skills.js.map +1 -0
- package/dist/sweeper-tools.d.ts +28 -0
- package/dist/sweeper-tools.d.ts.map +1 -0
- package/dist/sweeper-tools.js +332 -0
- package/dist/sweeper-tools.js.map +1 -0
- package/dist/types.d.ts +498 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +128 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +562 -0
- package/dist/worker.js.map +1 -0
- package/package.json +74 -0
- package/plugins/mgmt/agents/pilotswarm.agent.md +59 -0
- package/plugins/mgmt/agents/resourcemgr.agent.md +111 -0
- package/plugins/mgmt/agents/sweeper.agent.md +67 -0
- package/plugins/mgmt/skills/resourcemgr/SKILL.md +41 -0
- package/plugins/mgmt/skills/resourcemgr/tools.json +1 -0
- package/plugins/mgmt/skills/sweeper/SKILL.md +44 -0
- package/plugins/mgmt/skills/sweeper/tools.json +1 -0
- package/plugins/system/agents/default.agent.md +58 -0
- package/plugins/system/skills/durable-timers/SKILL.md +39 -0
- package/plugins/system/skills/sub-agents/SKILL.md +75 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sweeper Agent Tools — system maintenance tools for scanning and cleaning
|
|
3
|
+
* up completed/zombie sessions.
|
|
4
|
+
*
|
|
5
|
+
* Leverages duroxide's bulk prune APIs (deleteInstanceBulk, pruneExecutionsBulk)
|
|
6
|
+
* for efficient cleanup, plus CMS-level soft-delete for session metadata.
|
|
7
|
+
*
|
|
8
|
+
* These are registered as worker-level tools and referenced by the Sweeper
|
|
9
|
+
* Agent session via toolNames.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
import { defineTool } from "@github/copilot-sdk";
|
|
15
|
+
/**
|
|
16
|
+
* Create sweeper tools bound to the given CMS catalog and duroxide client.
|
|
17
|
+
*
|
|
18
|
+
* Call this after the worker has initialized the catalog and duroxide provider,
|
|
19
|
+
* then register the returned tools via `worker.registerTools(tools)`.
|
|
20
|
+
*/
|
|
21
|
+
export function createSweeperTools(opts) {
|
|
22
|
+
const { catalog, duroxideClient } = opts;
|
|
23
|
+
// ── scan_completed_sessions ───────────────────────────────
|
|
24
|
+
const scanTool = defineTool("scan_completed_sessions", {
|
|
25
|
+
description: "Scan for completed, failed, or orphaned sessions that are eligible for cleanup. " +
|
|
26
|
+
"Returns a list of sessions that have been idle/completed longer than the specified grace period.",
|
|
27
|
+
parameters: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
graceMinutes: {
|
|
31
|
+
type: "number",
|
|
32
|
+
description: "Only return sessions that completed/failed more than this many minutes ago. Default: 5",
|
|
33
|
+
},
|
|
34
|
+
includeOrphans: {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
description: "Include orphaned sub-agents whose parent session no longer exists. Default: true",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
handler: async (args) => {
|
|
41
|
+
const graceMinutes = args.graceMinutes ?? 5;
|
|
42
|
+
const includeOrphans = args.includeOrphans ?? true;
|
|
43
|
+
const results = [];
|
|
44
|
+
try {
|
|
45
|
+
const allSessions = await catalog.listSessions();
|
|
46
|
+
const sessionIds = new Set(allSessions.map(s => s.sessionId));
|
|
47
|
+
const cutoff = new Date(Date.now() - graceMinutes * 60 * 1000);
|
|
48
|
+
for (const session of allSessions) {
|
|
49
|
+
// Never touch system sessions
|
|
50
|
+
if (session.isSystem)
|
|
51
|
+
continue;
|
|
52
|
+
let orchStatus = {};
|
|
53
|
+
let customStatus = {};
|
|
54
|
+
try {
|
|
55
|
+
orchStatus = await duroxideClient.getStatus(`session-${session.sessionId}`);
|
|
56
|
+
if (orchStatus.customStatus) {
|
|
57
|
+
customStatus = typeof orchStatus.customStatus === "string"
|
|
58
|
+
? JSON.parse(orchStatus.customStatus)
|
|
59
|
+
: orchStatus.customStatus;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Orchestration not found — treat as completed
|
|
64
|
+
orchStatus = { status: "NotFound" };
|
|
65
|
+
}
|
|
66
|
+
const ageMs = Date.now() - session.updatedAt.getTime();
|
|
67
|
+
const ageStr = ageMs > 3_600_000
|
|
68
|
+
? `${Math.round(ageMs / 3_600_000)}h`
|
|
69
|
+
: `${Math.round(ageMs / 60_000)}m`;
|
|
70
|
+
// Check for completed/failed orchestrations
|
|
71
|
+
if (orchStatus.status === "Completed" ||
|
|
72
|
+
orchStatus.status === "Failed" ||
|
|
73
|
+
orchStatus.status === "Terminated" ||
|
|
74
|
+
orchStatus.status === "NotFound") {
|
|
75
|
+
if (session.updatedAt < cutoff) {
|
|
76
|
+
results.push({
|
|
77
|
+
sessionId: session.sessionId,
|
|
78
|
+
parentSessionId: session.parentSessionId ?? undefined,
|
|
79
|
+
status: orchStatus.status,
|
|
80
|
+
title: session.title ?? undefined,
|
|
81
|
+
age: ageStr,
|
|
82
|
+
reason: `Orchestration ${orchStatus.status.toLowerCase()}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Check for idle sub-agents (completed their task but orch still running)
|
|
88
|
+
if (session.parentSessionId &&
|
|
89
|
+
customStatus.status === "idle" &&
|
|
90
|
+
session.updatedAt < cutoff) {
|
|
91
|
+
results.push({
|
|
92
|
+
sessionId: session.sessionId,
|
|
93
|
+
parentSessionId: session.parentSessionId,
|
|
94
|
+
status: "zombie",
|
|
95
|
+
title: session.title ?? undefined,
|
|
96
|
+
age: ageStr,
|
|
97
|
+
reason: "Sub-agent idle (zombie)",
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Check for orphaned sub-agents
|
|
102
|
+
if (includeOrphans &&
|
|
103
|
+
session.parentSessionId &&
|
|
104
|
+
!sessionIds.has(session.parentSessionId) &&
|
|
105
|
+
session.updatedAt < cutoff) {
|
|
106
|
+
results.push({
|
|
107
|
+
sessionId: session.sessionId,
|
|
108
|
+
parentSessionId: session.parentSessionId,
|
|
109
|
+
status: "orphan",
|
|
110
|
+
title: session.title ?? undefined,
|
|
111
|
+
age: ageStr,
|
|
112
|
+
reason: "Parent session no longer exists",
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
found: results.length,
|
|
118
|
+
graceMinutes,
|
|
119
|
+
sessions: results,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
return { error: err.message, found: 0, sessions: [] };
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
// ── cleanup_session ──────────────────────────────────────
|
|
128
|
+
const cleanupTool = defineTool("cleanup_session", {
|
|
129
|
+
description: "Delete a completed/zombie session and all its descendants. " +
|
|
130
|
+
"Removes from CMS (soft-delete) and deletes the duroxide orchestration instance. " +
|
|
131
|
+
"Refuses to delete system sessions.",
|
|
132
|
+
parameters: {
|
|
133
|
+
type: "object",
|
|
134
|
+
properties: {
|
|
135
|
+
sessionId: {
|
|
136
|
+
type: "string",
|
|
137
|
+
description: "The session ID to clean up",
|
|
138
|
+
},
|
|
139
|
+
reason: {
|
|
140
|
+
type: "string",
|
|
141
|
+
description: "Reason for cleanup (logged for auditing)",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
required: ["sessionId"],
|
|
145
|
+
},
|
|
146
|
+
handler: async (args) => {
|
|
147
|
+
const { sessionId, reason } = args;
|
|
148
|
+
const deleteReason = reason ?? "Cleaned up by Sweeper Agent";
|
|
149
|
+
try {
|
|
150
|
+
// Check if session exists and is not a system session
|
|
151
|
+
const session = await catalog.getSession(sessionId);
|
|
152
|
+
if (!session) {
|
|
153
|
+
return { ok: false, error: "Session not found" };
|
|
154
|
+
}
|
|
155
|
+
if (session.isSystem) {
|
|
156
|
+
return { ok: false, error: "Cannot delete system session" };
|
|
157
|
+
}
|
|
158
|
+
// Find and delete all descendants first
|
|
159
|
+
const descendants = await catalog.getDescendantSessionIds(sessionId);
|
|
160
|
+
let deletedCount = 0;
|
|
161
|
+
for (const descId of descendants) {
|
|
162
|
+
try {
|
|
163
|
+
await catalog.softDeleteSession(descId);
|
|
164
|
+
try {
|
|
165
|
+
await duroxideClient.deleteInstance(`session-${descId}`, true);
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
deletedCount++;
|
|
169
|
+
}
|
|
170
|
+
catch { }
|
|
171
|
+
}
|
|
172
|
+
// Delete the session itself
|
|
173
|
+
await catalog.softDeleteSession(sessionId);
|
|
174
|
+
try {
|
|
175
|
+
await duroxideClient.deleteInstance(`session-${sessionId}`, true);
|
|
176
|
+
}
|
|
177
|
+
catch { }
|
|
178
|
+
deletedCount++;
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
sessionId,
|
|
182
|
+
deletedCount,
|
|
183
|
+
reason: deleteReason,
|
|
184
|
+
descendants: descendants.length,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
return { ok: false, error: err.message };
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
// ── prune_orchestrations ─────────────────────────────────
|
|
193
|
+
// Uses duroxide's bulk APIs for efficient cleanup at the orchestration level.
|
|
194
|
+
// Modeled after toygres's system-pruner pattern.
|
|
195
|
+
const pruneTool = defineTool("prune_orchestrations", {
|
|
196
|
+
description: "Bulk prune duroxide orchestration state. " +
|
|
197
|
+
"Two operations: (1) delete terminal (Completed/Failed/Terminated) orchestration " +
|
|
198
|
+
"instances older than N minutes, and (2) prune old executions from all instances, " +
|
|
199
|
+
"keeping only the last N executions per instance. " +
|
|
200
|
+
"This is a system-level operation that cleans up duroxide storage directly.",
|
|
201
|
+
parameters: {
|
|
202
|
+
type: "object",
|
|
203
|
+
properties: {
|
|
204
|
+
deleteTerminalOlderThanMinutes: {
|
|
205
|
+
type: "number",
|
|
206
|
+
description: "Delete completed/failed orchestration instances older than this many minutes. Default: 5",
|
|
207
|
+
},
|
|
208
|
+
keepExecutions: {
|
|
209
|
+
type: "number",
|
|
210
|
+
description: "Keep only the last N executions per instance (current execution is never pruned). Default: 3",
|
|
211
|
+
},
|
|
212
|
+
batchLimit: {
|
|
213
|
+
type: "number",
|
|
214
|
+
description: "Max instances to process per batch. Default: 1000",
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
handler: async (args) => {
|
|
219
|
+
const deleteMinutes = args.deleteTerminalOlderThanMinutes ?? 5;
|
|
220
|
+
const keepExecutions = args.keepExecutions ?? 3;
|
|
221
|
+
const batchLimit = args.batchLimit ?? 1000;
|
|
222
|
+
try {
|
|
223
|
+
const cutoffMs = Date.now() - deleteMinutes * 60 * 1000;
|
|
224
|
+
// Step 1: Delete terminal instances older than cutoff
|
|
225
|
+
const deleteResult = await duroxideClient.deleteInstanceBulk({
|
|
226
|
+
completedBefore: cutoffMs,
|
|
227
|
+
limit: batchLimit,
|
|
228
|
+
});
|
|
229
|
+
// Step 2: Prune old executions across all instances
|
|
230
|
+
const pruneResult = await duroxideClient.pruneExecutionsBulk({ limit: batchLimit }, { keepLast: keepExecutions });
|
|
231
|
+
// Step 3: Also soft-delete CMS rows for deleted terminal instances
|
|
232
|
+
// (CMS may have stale rows for instances duroxide just deleted)
|
|
233
|
+
let cmsCleanedUp = 0;
|
|
234
|
+
try {
|
|
235
|
+
const cmsSessions = await catalog.listSessions();
|
|
236
|
+
for (const s of cmsSessions) {
|
|
237
|
+
if (s.isSystem)
|
|
238
|
+
continue;
|
|
239
|
+
try {
|
|
240
|
+
await duroxideClient.getStatus(`session-${s.sessionId}`);
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Instance no longer exists in duroxide — clean up CMS
|
|
244
|
+
try {
|
|
245
|
+
await catalog.softDeleteSession(s.sessionId);
|
|
246
|
+
cmsCleanedUp++;
|
|
247
|
+
}
|
|
248
|
+
catch { }
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch { }
|
|
253
|
+
return {
|
|
254
|
+
ok: true,
|
|
255
|
+
deleteTerminal: {
|
|
256
|
+
instancesDeleted: deleteResult.instancesDeleted ?? 0,
|
|
257
|
+
executionsDeleted: deleteResult.executionsDeleted ?? 0,
|
|
258
|
+
eventsDeleted: deleteResult.eventsDeleted ?? 0,
|
|
259
|
+
},
|
|
260
|
+
pruneExecutions: {
|
|
261
|
+
instancesProcessed: pruneResult.instancesProcessed ?? 0,
|
|
262
|
+
executionsDeleted: pruneResult.executionsDeleted ?? 0,
|
|
263
|
+
eventsDeleted: pruneResult.eventsDeleted ?? 0,
|
|
264
|
+
},
|
|
265
|
+
cmsCleanedUp,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
return { ok: false, error: err.message };
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
// ── get_system_stats ─────────────────────────────────────
|
|
274
|
+
const statsTool = defineTool("get_system_stats", {
|
|
275
|
+
description: "Get runtime statistics: total sessions, active count, completed count, " +
|
|
276
|
+
"zombie count, memory usage, uptime, and database connection info.",
|
|
277
|
+
parameters: {
|
|
278
|
+
type: "object",
|
|
279
|
+
properties: {},
|
|
280
|
+
},
|
|
281
|
+
handler: async () => {
|
|
282
|
+
try {
|
|
283
|
+
const allSessions = await catalog.listSessions();
|
|
284
|
+
// Parse database host/name from store URL (strip credentials)
|
|
285
|
+
let database = {};
|
|
286
|
+
if (opts.storeUrl) {
|
|
287
|
+
try {
|
|
288
|
+
const url = new URL(opts.storeUrl);
|
|
289
|
+
database.host = url.hostname;
|
|
290
|
+
database.port = url.port || "5432";
|
|
291
|
+
database.name = url.pathname.replace(/^\//, "") || "postgres";
|
|
292
|
+
// Detect provider from hostname
|
|
293
|
+
if (url.hostname.includes(".horizondb.azure.com"))
|
|
294
|
+
database.provider = "Azure HorizonDB";
|
|
295
|
+
else if (url.hostname.includes(".postgres.database.azure.com"))
|
|
296
|
+
database.provider = "Azure Flexible Server";
|
|
297
|
+
else if (url.hostname.includes(".azure.com"))
|
|
298
|
+
database.provider = "Azure";
|
|
299
|
+
else
|
|
300
|
+
database.provider = "PostgreSQL";
|
|
301
|
+
}
|
|
302
|
+
catch { }
|
|
303
|
+
}
|
|
304
|
+
const stats = {
|
|
305
|
+
total: allSessions.length,
|
|
306
|
+
byState: {},
|
|
307
|
+
systemSessions: 0,
|
|
308
|
+
subAgents: 0,
|
|
309
|
+
rootSessions: 0,
|
|
310
|
+
memoryMB: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
|
|
311
|
+
uptimeMinutes: Math.round(process.uptime() / 60),
|
|
312
|
+
database,
|
|
313
|
+
};
|
|
314
|
+
for (const s of allSessions) {
|
|
315
|
+
stats.byState[s.state] = (stats.byState[s.state] ?? 0) + 1;
|
|
316
|
+
if (s.isSystem)
|
|
317
|
+
stats.systemSessions++;
|
|
318
|
+
if (s.parentSessionId)
|
|
319
|
+
stats.subAgents++;
|
|
320
|
+
else
|
|
321
|
+
stats.rootSessions++;
|
|
322
|
+
}
|
|
323
|
+
return stats;
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
return { error: err.message };
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
return [scanTool, cleanupTool, pruneTool, statsTool];
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=sweeper-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweeper-tools.js","sourceRoot":"","sources":["../src/sweeper-tools.ts"],"names":[],"mappings":"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"}
|