pilotswarm 0.0.1 → 0.4.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/README.md +37 -1
- package/mcp/README.md +484 -0
- package/mcp/dist/bin/pilotswarm-mcp.d.ts +3 -0
- package/mcp/dist/bin/pilotswarm-mcp.d.ts.map +1 -0
- package/mcp/dist/bin/pilotswarm-mcp.js +367 -0
- package/mcp/dist/bin/pilotswarm-mcp.js.map +1 -0
- package/mcp/dist/src/auth.d.ts +7 -0
- package/mcp/dist/src/auth.d.ts.map +1 -0
- package/mcp/dist/src/auth.js +99 -0
- package/mcp/dist/src/auth.js.map +1 -0
- package/mcp/dist/src/context.d.ts +48 -0
- package/mcp/dist/src/context.d.ts.map +1 -0
- package/mcp/dist/src/context.js +83 -0
- package/mcp/dist/src/context.js.map +1 -0
- package/mcp/dist/src/index.d.ts +4 -0
- package/mcp/dist/src/index.d.ts.map +1 -0
- package/mcp/dist/src/index.js +3 -0
- package/mcp/dist/src/index.js.map +1 -0
- package/mcp/dist/src/prompts/skills.d.ts +4 -0
- package/mcp/dist/src/prompts/skills.d.ts.map +1 -0
- package/mcp/dist/src/prompts/skills.js +11 -0
- package/mcp/dist/src/prompts/skills.js.map +1 -0
- package/mcp/dist/src/resources/agents.d.ts +4 -0
- package/mcp/dist/src/resources/agents.d.ts.map +1 -0
- package/mcp/dist/src/resources/agents.js +64 -0
- package/mcp/dist/src/resources/agents.js.map +1 -0
- package/mcp/dist/src/resources/facts.d.ts +4 -0
- package/mcp/dist/src/resources/facts.d.ts.map +1 -0
- package/mcp/dist/src/resources/facts.js +125 -0
- package/mcp/dist/src/resources/facts.js.map +1 -0
- package/mcp/dist/src/resources/models.d.ts +4 -0
- package/mcp/dist/src/resources/models.d.ts.map +1 -0
- package/mcp/dist/src/resources/models.js +43 -0
- package/mcp/dist/src/resources/models.js.map +1 -0
- package/mcp/dist/src/resources/sessions.d.ts +4 -0
- package/mcp/dist/src/resources/sessions.d.ts.map +1 -0
- package/mcp/dist/src/resources/sessions.js +190 -0
- package/mcp/dist/src/resources/sessions.js.map +1 -0
- package/mcp/dist/src/resources/subscriptions.d.ts +9 -0
- package/mcp/dist/src/resources/subscriptions.d.ts.map +1 -0
- package/mcp/dist/src/resources/subscriptions.js +157 -0
- package/mcp/dist/src/resources/subscriptions.js.map +1 -0
- package/mcp/dist/src/server.d.ts +4 -0
- package/mcp/dist/src/server.d.ts.map +1 -0
- package/mcp/dist/src/server.js +59 -0
- package/mcp/dist/src/server.js.map +1 -0
- package/mcp/dist/src/tools/agents.d.ts +4 -0
- package/mcp/dist/src/tools/agents.d.ts.map +1 -0
- package/mcp/dist/src/tools/agents.js +317 -0
- package/mcp/dist/src/tools/agents.js.map +1 -0
- package/mcp/dist/src/tools/facts.d.ts +4 -0
- package/mcp/dist/src/tools/facts.d.ts.map +1 -0
- package/mcp/dist/src/tools/facts.js +151 -0
- package/mcp/dist/src/tools/facts.js.map +1 -0
- package/mcp/dist/src/tools/models.d.ts +4 -0
- package/mcp/dist/src/tools/models.d.ts.map +1 -0
- package/mcp/dist/src/tools/models.js +256 -0
- package/mcp/dist/src/tools/models.js.map +1 -0
- package/mcp/dist/src/tools/sessions.d.ts +4 -0
- package/mcp/dist/src/tools/sessions.d.ts.map +1 -0
- package/mcp/dist/src/tools/sessions.js +606 -0
- package/mcp/dist/src/tools/sessions.js.map +1 -0
- package/mcp/dist/src/util/command.d.ts +52 -0
- package/mcp/dist/src/util/command.d.ts.map +1 -0
- package/mcp/dist/src/util/command.js +78 -0
- package/mcp/dist/src/util/command.js.map +1 -0
- package/package.json +82 -6
- package/tui/README.md +35 -0
- package/tui/bin/tui.js +30 -0
- package/tui/plugins/.mcp.json +7 -0
- package/tui/plugins/plugin.json +13 -0
- package/tui/plugins/session-policy.json +8 -0
- package/tui/src/app.js +850 -0
- package/tui/src/auth/cli.js +111 -0
- package/tui/src/auth/entra-auth.js +218 -0
- package/tui/src/bootstrap-env.js +176 -0
- package/tui/src/embedded-workers.js +79 -0
- package/tui/src/http-transport-host.js +106 -0
- package/tui/src/index.js +340 -0
- package/tui/src/node-sdk-transport.js +1794 -0
- package/tui/src/platform.js +984 -0
- package/tui/src/plugin-config.js +273 -0
- package/tui/src/portal.js +7 -0
- package/tui/src/version.js +7 -0
- package/tui/tui-splash-mobile.txt +7 -0
- package/tui/tui-splash.txt +11 -0
- package/ui/core/README.md +6 -0
- package/ui/core/src/commands.js +93 -0
- package/ui/core/src/context-usage.js +212 -0
- package/ui/core/src/controller.js +6201 -0
- package/ui/core/src/formatting.js +1036 -0
- package/ui/core/src/history.js +950 -0
- package/ui/core/src/index.js +13 -0
- package/ui/core/src/layout.js +332 -0
- package/ui/core/src/reducer.js +1952 -0
- package/ui/core/src/selectors.js +5419 -0
- package/ui/core/src/session-errors.js +14 -0
- package/ui/core/src/session-tree.js +151 -0
- package/ui/core/src/state.js +251 -0
- package/ui/core/src/store.js +23 -0
- package/ui/core/src/system-titles.js +24 -0
- package/ui/core/src/themes/catppuccin-mocha.js +56 -0
- package/ui/core/src/themes/cobalt2.js +56 -0
- package/ui/core/src/themes/dark-high-contrast.js +56 -0
- package/ui/core/src/themes/daylight.js +62 -0
- package/ui/core/src/themes/dracula.js +56 -0
- package/ui/core/src/themes/github-dark.js +56 -0
- package/ui/core/src/themes/github-light.js +59 -0
- package/ui/core/src/themes/gruvbox-dark.js +56 -0
- package/ui/core/src/themes/hacker-x-matrix.js +56 -0
- package/ui/core/src/themes/hacker-x-orion-prime.js +56 -0
- package/ui/core/src/themes/helpers.js +79 -0
- package/ui/core/src/themes/high-contrast-mono.js +59 -0
- package/ui/core/src/themes/index.js +52 -0
- package/ui/core/src/themes/light-high-contrast.js +62 -0
- package/ui/core/src/themes/noctis-obscuro.js +56 -0
- package/ui/core/src/themes/noctis.js +56 -0
- package/ui/core/src/themes/paper-ink.js +62 -0
- package/ui/core/src/themes/solarized-ops.js +59 -0
- package/ui/core/src/themes/terminal-green.js +59 -0
- package/ui/core/src/themes/tokyo-night.js +56 -0
- package/ui/react/README.md +5 -0
- package/ui/react/src/chat-status.js +39 -0
- package/ui/react/src/components.js +1989 -0
- package/ui/react/src/index.js +4 -0
- package/ui/react/src/platform.js +15 -0
- package/ui/react/src/use-controller-state.js +38 -0
- package/ui/react/src/web-app.js +4457 -0
- package/web/README.md +198 -0
- package/web/api/router.js +196 -0
- package/web/api/ws.js +152 -0
- package/web/auth/authz/engine.js +204 -0
- package/web/auth/config.js +115 -0
- package/web/auth/index.js +175 -0
- package/web/auth/normalize/entra.js +22 -0
- package/web/auth/providers/entra.js +76 -0
- package/web/auth/providers/none.js +24 -0
- package/web/auth.js +10 -0
- package/web/bin/serve.js +53 -0
- package/web/config.js +20 -0
- package/web/dist/app.js +469 -0
- package/web/dist/assets/index-DmGOcKR-.css +1 -0
- package/web/dist/assets/index-xJ8IzIZY.js +24 -0
- package/web/dist/assets/msal-CytV9RFv.js +7 -0
- package/web/dist/assets/pilotswarm-D9pEmenA.js +90 -0
- package/web/dist/assets/react-CEPDSRB6.js +1 -0
- package/web/dist/index.html +16 -0
- package/web/runtime.js +455 -0
- package/web/server.js +276 -0
- package/index.js +0 -1
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Cache session objects so send_and_wait can reuse them instead of
|
|
3
|
+
// calling resumeSession() which incorrectly assumes the orchestration
|
|
4
|
+
// is already running. Mirrors the TUI pattern of holding onto sess.
|
|
5
|
+
const sessionCache = new Map();
|
|
6
|
+
export function registerSessionTools(server, ctx) {
|
|
7
|
+
// 1. create_session — Create a new PilotSwarm session
|
|
8
|
+
server.registerTool("create_session", {
|
|
9
|
+
title: "Create Session",
|
|
10
|
+
description: "Create a new PilotSwarm session, optionally bound to a named agent",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
model: z.string().optional().describe("Model to use for the session"),
|
|
13
|
+
agent: z.string().optional().describe("Agent name to bind the session to"),
|
|
14
|
+
system_message: z.string().optional().describe("Custom system message for the session"),
|
|
15
|
+
title: z.string().min(1).max(512).optional().describe("Optional title — if omitted, PilotSwarm auto-generates one from the conversation after the first turn"),
|
|
16
|
+
prompt: z.string().optional().describe("Initial message to send immediately after session creation (fire-and-forget)"),
|
|
17
|
+
},
|
|
18
|
+
}, async ({ model, agent, system_message, title, prompt }) => {
|
|
19
|
+
try {
|
|
20
|
+
const config = {};
|
|
21
|
+
if (model !== undefined)
|
|
22
|
+
config.model = model;
|
|
23
|
+
if (system_message !== undefined)
|
|
24
|
+
config.systemMessage = system_message;
|
|
25
|
+
if (title !== undefined)
|
|
26
|
+
config.title = title;
|
|
27
|
+
let session;
|
|
28
|
+
if (agent) {
|
|
29
|
+
if (system_message !== undefined) {
|
|
30
|
+
// createSessionForAgent does not forward systemMessage,
|
|
31
|
+
// so route through createSession directly when the
|
|
32
|
+
// caller supplied a custom system message. The
|
|
33
|
+
// allowedAgentNames guard inside createSession still
|
|
34
|
+
// enforces the agent allowlist.
|
|
35
|
+
session = await ctx.client.createSession({
|
|
36
|
+
agentId: agent,
|
|
37
|
+
boundAgentName: agent,
|
|
38
|
+
model,
|
|
39
|
+
systemMessage: system_message,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
session = await ctx.client.createSessionForAgent(agent, {
|
|
44
|
+
model,
|
|
45
|
+
title,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
session = await ctx.client.createSession({
|
|
51
|
+
model,
|
|
52
|
+
systemMessage: system_message,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Cache the session object for later use by send_and_wait
|
|
56
|
+
sessionCache.set(session.sessionId, session);
|
|
57
|
+
// Persist title via management client (createSession doesn't accept title)
|
|
58
|
+
if (title) {
|
|
59
|
+
try {
|
|
60
|
+
await ctx.mgmt.renameSession(session.sessionId, title);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Best-effort — session still created
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Fire initial prompt if provided (non-blocking)
|
|
67
|
+
let promptSent = false;
|
|
68
|
+
if (prompt) {
|
|
69
|
+
try {
|
|
70
|
+
await session.send(prompt);
|
|
71
|
+
promptSent = true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Best-effort — session still created
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Worker-claim guard: when a prompt was dispatched, a worker
|
|
78
|
+
// must register the orchestration within the configured
|
|
79
|
+
// timeout. Otherwise the row becomes a dead "running" record
|
|
80
|
+
// (orchestrationStatus stays NotFound) that no later
|
|
81
|
+
// sendCommand can clean up. Roll back the row and surface a
|
|
82
|
+
// clear "session could not be created" error so callers know
|
|
83
|
+
// to start a worker process.
|
|
84
|
+
const claimTimeoutMs = (() => {
|
|
85
|
+
const raw = process.env.PILOTSWARM_MCP_WORKER_CLAIM_TIMEOUT_MS;
|
|
86
|
+
const parsed = raw ? parseInt(raw, 10) : NaN;
|
|
87
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 10_000;
|
|
88
|
+
})();
|
|
89
|
+
if (promptSent && claimTimeoutMs > 0) {
|
|
90
|
+
const deadline = Date.now() + claimTimeoutMs;
|
|
91
|
+
const pollMs = 250;
|
|
92
|
+
// A session is "claimed" only once duroxide reports an
|
|
93
|
+
// active orchestration. mgmt.getSession reflects CMS row
|
|
94
|
+
// state (e.g. "Unknown") even before any worker runs, so
|
|
95
|
+
// probe the orchestration directly via getSessionStatus.
|
|
96
|
+
// Any non-NotFound duroxide status (Running, Completed,
|
|
97
|
+
// Failed, Terminated, Suspended) means a worker registered
|
|
98
|
+
// the orchestration at least once.
|
|
99
|
+
let claimed = false;
|
|
100
|
+
while (Date.now() < deadline) {
|
|
101
|
+
try {
|
|
102
|
+
const orch = await ctx.mgmt.getSessionStatus(session.sessionId);
|
|
103
|
+
const orchStatus = orch?.orchestrationStatus;
|
|
104
|
+
if (orchStatus && orchStatus !== "NotFound") {
|
|
105
|
+
claimed = true;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// ignore transient mgmt errors and retry
|
|
111
|
+
}
|
|
112
|
+
await new Promise((resolve) => setTimeout(resolve, pollMs));
|
|
113
|
+
}
|
|
114
|
+
if (!claimed) {
|
|
115
|
+
sessionCache.delete(session.sessionId);
|
|
116
|
+
// Use client.deleteSession (unconditional CMS soft-delete +
|
|
117
|
+
// best-effort orchestration cancel). mgmt.deleteSession routes
|
|
118
|
+
// through sendCommand and rejects when orchestrationStatus is
|
|
119
|
+
// NotFound, which is exactly the case we are cleaning up.
|
|
120
|
+
try {
|
|
121
|
+
await ctx.client.deleteSession(session.sessionId);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// best-effort; row may linger if soft-delete also fails
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
text: JSON.stringify({
|
|
131
|
+
error: "no_worker_claimed",
|
|
132
|
+
created: false,
|
|
133
|
+
purged_session_id: session.sessionId,
|
|
134
|
+
message: "Session could not be created: no PilotSwarm worker claimed the orchestration "
|
|
135
|
+
+ `within ${claimTimeoutMs}ms. The CMS row was rolled back. `
|
|
136
|
+
+ "Start a worker process (e.g. CLI in local mode or Web Portal) "
|
|
137
|
+
+ "against the same DATABASE_URL, then retry.",
|
|
138
|
+
}),
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
isError: true,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
content: [
|
|
147
|
+
{
|
|
148
|
+
type: "text",
|
|
149
|
+
text: JSON.stringify({
|
|
150
|
+
session_id: session.sessionId,
|
|
151
|
+
status: "created",
|
|
152
|
+
model: model ?? "default",
|
|
153
|
+
title: title ?? null,
|
|
154
|
+
...(prompt !== undefined && { prompt_sent: promptSent }),
|
|
155
|
+
}),
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
162
|
+
return {
|
|
163
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
164
|
+
isError: true,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
// 2. send_message — Fire-and-forget message to a session
|
|
169
|
+
server.registerTool("send_message", {
|
|
170
|
+
title: "Send Message",
|
|
171
|
+
description: "Send a fire-and-forget message to a PilotSwarm session",
|
|
172
|
+
inputSchema: {
|
|
173
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to send the message to"),
|
|
174
|
+
message: z.string().describe("The message to send"),
|
|
175
|
+
},
|
|
176
|
+
}, async ({ session_id, message }) => {
|
|
177
|
+
try {
|
|
178
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
179
|
+
if (!existing) {
|
|
180
|
+
return {
|
|
181
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
182
|
+
isError: true,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// Use cached PilotSwarmSession when available; fall back to
|
|
186
|
+
// resumeSession() so a fresh session created via this MCP
|
|
187
|
+
// server's create_session (which doesn't auto-boot the
|
|
188
|
+
// orchestration unless a prompt was supplied) still works.
|
|
189
|
+
// The bare ctx.mgmt.sendMessage(...) path requires an
|
|
190
|
+
// already-live orchestration and throws otherwise — that
|
|
191
|
+
// breaks the canonical "create then send" workflow.
|
|
192
|
+
const session = sessionCache.get(session_id)
|
|
193
|
+
?? await ctx.client.resumeSession(session_id);
|
|
194
|
+
if (!sessionCache.has(session_id))
|
|
195
|
+
sessionCache.set(session_id, session);
|
|
196
|
+
await session.send(message);
|
|
197
|
+
return {
|
|
198
|
+
content: [
|
|
199
|
+
{ type: "text", text: JSON.stringify({ sent: true }) },
|
|
200
|
+
],
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
205
|
+
return {
|
|
206
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
207
|
+
isError: true,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
// 3. send_and_wait — Send message and wait for response
|
|
212
|
+
server.registerTool("send_and_wait", {
|
|
213
|
+
title: "Send and Wait",
|
|
214
|
+
description: "Send a message to a PilotSwarm session and wait for the response",
|
|
215
|
+
inputSchema: {
|
|
216
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to send the message to"),
|
|
217
|
+
message: z.string().describe("The message to send"),
|
|
218
|
+
timeout_ms: z.number().optional().describe("Timeout in milliseconds (default 120000)"),
|
|
219
|
+
},
|
|
220
|
+
}, async ({ session_id, message, timeout_ms }) => {
|
|
221
|
+
try {
|
|
222
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
223
|
+
if (!existing) {
|
|
224
|
+
return {
|
|
225
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
226
|
+
isError: true,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
const timeout = timeout_ms ?? 120_000;
|
|
230
|
+
// Use cached session object if available (preserves correct
|
|
231
|
+
// orchestration creation path). Fall back to resumeSession()
|
|
232
|
+
// for sessions created outside the MCP server.
|
|
233
|
+
const session = sessionCache.get(session_id)
|
|
234
|
+
?? await ctx.client.resumeSession(session_id);
|
|
235
|
+
const response = await session.sendAndWait(message, timeout);
|
|
236
|
+
return {
|
|
237
|
+
content: [
|
|
238
|
+
{
|
|
239
|
+
type: "text",
|
|
240
|
+
text: JSON.stringify({
|
|
241
|
+
response: response ?? null,
|
|
242
|
+
status: response !== undefined ? "completed" : "timeout",
|
|
243
|
+
}),
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
250
|
+
if (msg.toLowerCase().includes("timeout")) {
|
|
251
|
+
return {
|
|
252
|
+
content: [
|
|
253
|
+
{ type: "text", text: JSON.stringify({ error: "timeout" }) },
|
|
254
|
+
],
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
259
|
+
isError: true,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
// 4. send_answer — Answer a pending input_required question
|
|
264
|
+
server.registerTool("send_answer", {
|
|
265
|
+
title: "Send Answer",
|
|
266
|
+
description: "Answer a pending input_required question in a PilotSwarm session",
|
|
267
|
+
inputSchema: {
|
|
268
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session awaiting an answer"),
|
|
269
|
+
answer: z.string().describe("The answer to provide"),
|
|
270
|
+
},
|
|
271
|
+
}, async ({ session_id, answer }) => {
|
|
272
|
+
try {
|
|
273
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
274
|
+
if (!existing) {
|
|
275
|
+
return {
|
|
276
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
277
|
+
isError: true,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
await ctx.mgmt.sendAnswer(session_id, answer);
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{ type: "text", text: JSON.stringify({ sent: true }) },
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
289
|
+
return {
|
|
290
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
291
|
+
isError: true,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
// 5. abort_session — Cancel a running session
|
|
296
|
+
server.registerTool("abort_session", {
|
|
297
|
+
title: "Abort Session",
|
|
298
|
+
description: "Cancel a running PilotSwarm session",
|
|
299
|
+
inputSchema: {
|
|
300
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to abort"),
|
|
301
|
+
reason: z.string().optional().describe("Optional reason for cancellation"),
|
|
302
|
+
},
|
|
303
|
+
}, async ({ session_id, reason }) => {
|
|
304
|
+
try {
|
|
305
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
306
|
+
if (!existing) {
|
|
307
|
+
return {
|
|
308
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
309
|
+
isError: true,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
await ctx.mgmt.cancelSession(session_id, reason);
|
|
313
|
+
sessionCache.delete(session_id);
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{ type: "text", text: JSON.stringify({ aborted: true }) },
|
|
317
|
+
],
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
322
|
+
return {
|
|
323
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
324
|
+
isError: true,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
// 6. rename_session — Rename a session
|
|
329
|
+
server.registerTool("rename_session", {
|
|
330
|
+
title: "Rename Session",
|
|
331
|
+
description: "Rename a PilotSwarm session",
|
|
332
|
+
inputSchema: {
|
|
333
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to rename"),
|
|
334
|
+
title: z.string().min(1).max(512).describe("The new title for the session"),
|
|
335
|
+
},
|
|
336
|
+
}, async ({ session_id, title }) => {
|
|
337
|
+
try {
|
|
338
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
339
|
+
if (!existing) {
|
|
340
|
+
return {
|
|
341
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
342
|
+
isError: true,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
await ctx.mgmt.renameSession(session_id, title);
|
|
346
|
+
return {
|
|
347
|
+
content: [
|
|
348
|
+
{ type: "text", text: JSON.stringify({ renamed: true }) },
|
|
349
|
+
],
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
354
|
+
return {
|
|
355
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
356
|
+
isError: true,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
// 7. list_sessions — List all sessions with status
|
|
361
|
+
server.registerTool("list_sessions", {
|
|
362
|
+
title: "List Sessions",
|
|
363
|
+
description: "List all PilotSwarm sessions with their current status, model, agent info, and parent/child relationships. " +
|
|
364
|
+
"Use status_filter to narrow results (e.g. 'running', 'idle', 'waiting', 'completed', 'failed').",
|
|
365
|
+
inputSchema: {
|
|
366
|
+
status_filter: z
|
|
367
|
+
.string()
|
|
368
|
+
.optional()
|
|
369
|
+
.describe("Filter by status (running, idle, waiting, completed, failed, input_required)"),
|
|
370
|
+
include_system: z
|
|
371
|
+
.boolean()
|
|
372
|
+
.optional()
|
|
373
|
+
.describe("Include system sessions like Sweeper Agent (default false)"),
|
|
374
|
+
agent_id: z
|
|
375
|
+
.string()
|
|
376
|
+
.optional()
|
|
377
|
+
.describe("Filter by agent ID (e.g. 'sweeper', 'resourcemgr', or a custom agent name)"),
|
|
378
|
+
},
|
|
379
|
+
}, async ({ status_filter, include_system, agent_id }) => {
|
|
380
|
+
try {
|
|
381
|
+
let sessions = await ctx.mgmt.listSessions();
|
|
382
|
+
if (!include_system) {
|
|
383
|
+
sessions = sessions.filter((s) => !s.isSystem);
|
|
384
|
+
}
|
|
385
|
+
if (status_filter) {
|
|
386
|
+
const f = status_filter.toLowerCase();
|
|
387
|
+
sessions = sessions.filter((s) => s.status?.toLowerCase() === f);
|
|
388
|
+
}
|
|
389
|
+
if (agent_id) {
|
|
390
|
+
sessions = sessions.filter((s) => s.agentId === agent_id);
|
|
391
|
+
}
|
|
392
|
+
const data = sessions.map((s) => ({
|
|
393
|
+
session_id: s.sessionId,
|
|
394
|
+
title: s.title ?? null,
|
|
395
|
+
status: s.status,
|
|
396
|
+
orchestration_status: s.orchestrationStatus ?? null,
|
|
397
|
+
model: s.model ?? "default",
|
|
398
|
+
agent_id: s.agentId ?? null,
|
|
399
|
+
is_system: s.isSystem ?? false,
|
|
400
|
+
parent_session_id: s.parentSessionId ?? null,
|
|
401
|
+
iterations: s.iterations ?? 0,
|
|
402
|
+
wait_reason: s.waitReason ?? null,
|
|
403
|
+
error: s.error ?? null,
|
|
404
|
+
pending_question: s.pendingQuestion ?? null,
|
|
405
|
+
created_at: s.createdAt,
|
|
406
|
+
updated_at: s.updatedAt ?? null,
|
|
407
|
+
}));
|
|
408
|
+
return {
|
|
409
|
+
content: [
|
|
410
|
+
{
|
|
411
|
+
type: "text",
|
|
412
|
+
text: JSON.stringify({ count: data.length, sessions: data }, null, 2),
|
|
413
|
+
},
|
|
414
|
+
],
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
catch (err) {
|
|
418
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
419
|
+
return {
|
|
420
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
421
|
+
isError: true,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
// 8. get_session_detail — Get detailed info for a single session
|
|
426
|
+
server.registerTool("get_session_detail", {
|
|
427
|
+
title: "Get Session Detail",
|
|
428
|
+
description: "Get detailed information for a specific PilotSwarm session including status, context usage, cron state, and pending questions. " +
|
|
429
|
+
"Use 'include' to fetch additional data: 'status' for live orchestration status, 'response' for latest LLM response, 'dump' for full Markdown dump.",
|
|
430
|
+
inputSchema: {
|
|
431
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session ID to inspect"),
|
|
432
|
+
include: z
|
|
433
|
+
.array(z.enum(["status", "response", "dump"]))
|
|
434
|
+
.optional()
|
|
435
|
+
.describe("Additional data to include: 'status' (orchestration status), 'response' (latest LLM response), 'dump' (full Markdown dump)"),
|
|
436
|
+
},
|
|
437
|
+
}, async ({ session_id, include }) => {
|
|
438
|
+
try {
|
|
439
|
+
const session = await ctx.mgmt.getSession(session_id);
|
|
440
|
+
if (!session) {
|
|
441
|
+
return {
|
|
442
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
443
|
+
isError: true,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
const result = { session };
|
|
447
|
+
const includes = new Set(include ?? []);
|
|
448
|
+
if (includes.has("status")) {
|
|
449
|
+
try {
|
|
450
|
+
result.orchestration_status = await ctx.mgmt.getSessionStatus(session_id);
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
result.orchestration_status = null;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
if (includes.has("response")) {
|
|
457
|
+
try {
|
|
458
|
+
result.latest_response = await ctx.mgmt.getLatestResponse(session_id);
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
result.latest_response = null;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (includes.has("dump")) {
|
|
465
|
+
try {
|
|
466
|
+
result.dump = await ctx.mgmt.dumpSession(session_id);
|
|
467
|
+
}
|
|
468
|
+
catch {
|
|
469
|
+
result.dump = null;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return {
|
|
473
|
+
content: [
|
|
474
|
+
{
|
|
475
|
+
type: "text",
|
|
476
|
+
text: JSON.stringify(result, null, 2),
|
|
477
|
+
},
|
|
478
|
+
],
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
catch (err) {
|
|
482
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
483
|
+
return {
|
|
484
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
485
|
+
isError: true,
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
});
|
|
489
|
+
// 9. delete_session — Delete a session
|
|
490
|
+
server.registerTool("delete_session", {
|
|
491
|
+
title: "Delete Session",
|
|
492
|
+
description: "Delete a PilotSwarm session",
|
|
493
|
+
inputSchema: {
|
|
494
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to delete"),
|
|
495
|
+
},
|
|
496
|
+
}, async ({ session_id }) => {
|
|
497
|
+
try {
|
|
498
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
499
|
+
if (!existing) {
|
|
500
|
+
return {
|
|
501
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
502
|
+
isError: true,
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
// mgmt.deleteSession routes through sendCommand and rejects
|
|
506
|
+
// with "orchestration ... is not started (status=NotFound)"
|
|
507
|
+
// for sessions whose orchestration was never registered (e.g.
|
|
508
|
+
// create_session ran while no worker was active). Fall back
|
|
509
|
+
// to client.deleteSession in that case — it soft-deletes the
|
|
510
|
+
// CMS row directly and best-effort cancels the orchestration.
|
|
511
|
+
if (existing.orchestrationStatus === "NotFound") {
|
|
512
|
+
await ctx.client.deleteSession(session_id);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
await ctx.mgmt.deleteSession(session_id);
|
|
516
|
+
}
|
|
517
|
+
sessionCache.delete(session_id);
|
|
518
|
+
return {
|
|
519
|
+
content: [
|
|
520
|
+
{ type: "text", text: JSON.stringify({ deleted: true }) },
|
|
521
|
+
],
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
catch (err) {
|
|
525
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
526
|
+
return {
|
|
527
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
528
|
+
isError: true,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
// 10. get_session_events — Paginated CMS event stream with optional long-poll
|
|
533
|
+
server.registerTool("get_session_events", {
|
|
534
|
+
title: "Get Session Events",
|
|
535
|
+
description: "Read the CMS event stream for a session. Supports pagination with after_seq and long-polling " +
|
|
536
|
+
"with wait=true to block until new events or a status change arrives.",
|
|
537
|
+
inputSchema: {
|
|
538
|
+
session_id: z.string().uuid({ message: "session_id must be a valid UUID" }).describe("The session to read events for"),
|
|
539
|
+
after_seq: z.number().optional().describe("Return events after this CMS sequence number (for paging)"),
|
|
540
|
+
limit: z.number().optional().describe("Max events to return (default 50)"),
|
|
541
|
+
wait: z.boolean().optional().describe("If true, long-poll until new events or status change arrives"),
|
|
542
|
+
wait_timeout_ms: z.number().optional().describe("Long-poll timeout in ms (default 30000)"),
|
|
543
|
+
after_version: z.number().optional().describe("For wait mode: block until customStatusVersion exceeds this value"),
|
|
544
|
+
},
|
|
545
|
+
}, async ({ session_id, after_seq, limit, wait, wait_timeout_ms, after_version }) => {
|
|
546
|
+
try {
|
|
547
|
+
const existing = await ctx.mgmt.getSession(session_id);
|
|
548
|
+
if (!existing) {
|
|
549
|
+
return {
|
|
550
|
+
content: [{ type: "text", text: JSON.stringify({ error: "session not found", session_id }) }],
|
|
551
|
+
isError: true,
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
const eventLimit = limit ?? 50;
|
|
555
|
+
let statusChange = undefined;
|
|
556
|
+
if (wait) {
|
|
557
|
+
const timeoutMs = wait_timeout_ms ?? 30_000;
|
|
558
|
+
// If after_version not provided, fetch current version first
|
|
559
|
+
let version = after_version;
|
|
560
|
+
if (version === undefined) {
|
|
561
|
+
try {
|
|
562
|
+
const status = await ctx.mgmt.getSessionStatus(session_id);
|
|
563
|
+
version = status?.customStatusVersion ?? 0;
|
|
564
|
+
}
|
|
565
|
+
catch {
|
|
566
|
+
version = 0;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
try {
|
|
570
|
+
statusChange = await ctx.mgmt.waitForStatusChange(session_id, version, 1_000, timeoutMs);
|
|
571
|
+
}
|
|
572
|
+
catch {
|
|
573
|
+
// Timeout or error — still return whatever events exist
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
const events = await ctx.mgmt.getSessionEvents(session_id, after_seq, eventLimit);
|
|
577
|
+
const latestSeq = events.length > 0
|
|
578
|
+
? Math.max(...events.map((e) => e.seq ?? 0))
|
|
579
|
+
: (after_seq ?? 0);
|
|
580
|
+
const result = {
|
|
581
|
+
events,
|
|
582
|
+
latest_seq: latestSeq,
|
|
583
|
+
count: events.length,
|
|
584
|
+
};
|
|
585
|
+
if (statusChange !== undefined) {
|
|
586
|
+
result.status_change = statusChange;
|
|
587
|
+
}
|
|
588
|
+
return {
|
|
589
|
+
content: [
|
|
590
|
+
{
|
|
591
|
+
type: "text",
|
|
592
|
+
text: JSON.stringify(result, null, 2),
|
|
593
|
+
},
|
|
594
|
+
],
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
catch (err) {
|
|
598
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
599
|
+
return {
|
|
600
|
+
content: [{ type: "text", text: `Error: ${msg}` }],
|
|
601
|
+
isError: true,
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
|