pilotswarm 0.0.1 → 0.4.0
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 +81 -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 +1793 -0
- package/tui/src/platform.js +984 -0
- package/tui/src/plugin-config.js +239 -0
- package/tui/src/portal.js +7 -0
- package/tui/src/version.js +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 +6104 -0
- package/ui/core/src/formatting.js +1036 -0
- package/ui/core/src/history.js +932 -0
- package/ui/core/src/index.js +13 -0
- package/ui/core/src/layout.js +332 -0
- package/ui/core/src/reducer.js +1935 -0
- package/ui/core/src/selectors.js +5409 -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 +248 -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 +4390 -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-CBgQQk-j.css +1 -0
- package/web/dist/assets/index-DMefB7Wb.js +24 -0
- package/web/dist/assets/msal-CytV9RFv.js +7 -0
- package/web/dist/assets/pilotswarm-DyBlqVTY.js +87 -0
- package/web/dist/assets/react-BZwsW8pe.js +1 -0
- package/web/dist/index.html +16 -0
- package/web/runtime.js +454 -0
- package/web/server.js +276 -0
- package/index.js +0 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { SubscribeRequestSchema, UnsubscribeRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
const FACTS_PREFIXES = ["skills/%", "asks/%"];
|
|
3
|
+
/**
|
|
4
|
+
* Starts a background poller that detects session/resource changes and emits
|
|
5
|
+
* MCP `notifications/resources/updated` notifications. The poller activates
|
|
6
|
+
* when the first subscription arrives and stops when all subscriptions clear.
|
|
7
|
+
*/
|
|
8
|
+
export function enableResourceSubscriptions(server, ctx, pollIntervalMs = 5_000) {
|
|
9
|
+
const subscriptions = new Set();
|
|
10
|
+
let pollTimer = null;
|
|
11
|
+
let lastSnapshot = new Map();
|
|
12
|
+
let lastFactsSnapshot = new Map();
|
|
13
|
+
// Access the lower-level Server for sendResourceUpdated
|
|
14
|
+
const lowLevel = server.server;
|
|
15
|
+
if (!lowLevel?.sendResourceUpdated)
|
|
16
|
+
return;
|
|
17
|
+
function startPoller() {
|
|
18
|
+
if (pollTimer)
|
|
19
|
+
return;
|
|
20
|
+
pollTimer = setInterval(async () => {
|
|
21
|
+
try {
|
|
22
|
+
await pollForChanges();
|
|
23
|
+
await pollFactsChanges();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Swallow — poller is best-effort
|
|
27
|
+
}
|
|
28
|
+
}, pollIntervalMs);
|
|
29
|
+
}
|
|
30
|
+
function stopPoller() {
|
|
31
|
+
if (pollTimer) {
|
|
32
|
+
clearInterval(pollTimer);
|
|
33
|
+
pollTimer = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function pollForChanges() {
|
|
37
|
+
if (subscriptions.size === 0)
|
|
38
|
+
return;
|
|
39
|
+
const sessions = await ctx.mgmt.listSessions();
|
|
40
|
+
const currentSnapshot = new Map();
|
|
41
|
+
for (const s of sessions) {
|
|
42
|
+
currentSnapshot.set(s.sessionId, {
|
|
43
|
+
sessionId: s.sessionId,
|
|
44
|
+
updatedAt: s.updatedAt ?? null,
|
|
45
|
+
status: s.status,
|
|
46
|
+
});
|
|
47
|
+
const prev = lastSnapshot.get(s.sessionId);
|
|
48
|
+
const changed = !prev
|
|
49
|
+
|| prev.updatedAt !== (s.updatedAt ?? null)
|
|
50
|
+
|| prev.status !== s.status;
|
|
51
|
+
if (changed) {
|
|
52
|
+
// Session-specific resource
|
|
53
|
+
const sessionUri = `pilotswarm://sessions/${s.sessionId}`;
|
|
54
|
+
if (subscriptions.has(sessionUri)) {
|
|
55
|
+
try {
|
|
56
|
+
await lowLevel.sendResourceUpdated({ uri: sessionUri });
|
|
57
|
+
}
|
|
58
|
+
catch { /* ignore */ }
|
|
59
|
+
}
|
|
60
|
+
// System agent alias resources — set populated dynamically in
|
|
61
|
+
// ServerContext from mgmt.listSessions(). If we observe a new
|
|
62
|
+
// system agent here that wasn't in the startup snapshot, fold
|
|
63
|
+
// it into the live set so subsequent change notifications fire
|
|
64
|
+
// for it too.
|
|
65
|
+
if (s.isSystem && s.agentId) {
|
|
66
|
+
if (!ctx.systemAgentIds.has(s.agentId)) {
|
|
67
|
+
ctx.systemAgentIds.add(s.agentId);
|
|
68
|
+
}
|
|
69
|
+
const agentUri = `pilotswarm://agents/${s.agentId}`;
|
|
70
|
+
if (subscriptions.has(agentUri)) {
|
|
71
|
+
try {
|
|
72
|
+
await lowLevel.sendResourceUpdated({ uri: agentUri });
|
|
73
|
+
}
|
|
74
|
+
catch { /* ignore */ }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Sessions list changed if any session added/removed/modified
|
|
80
|
+
if (subscriptions.has("pilotswarm://sessions")) {
|
|
81
|
+
const anyChange = currentSnapshot.size !== lastSnapshot.size
|
|
82
|
+
|| [...currentSnapshot.entries()].some(([id, snap]) => {
|
|
83
|
+
const prev = lastSnapshot.get(id);
|
|
84
|
+
return !prev || prev.updatedAt !== snap.updatedAt || prev.status !== snap.status;
|
|
85
|
+
});
|
|
86
|
+
if (anyChange) {
|
|
87
|
+
try {
|
|
88
|
+
await lowLevel.sendResourceUpdated({ uri: "pilotswarm://sessions" });
|
|
89
|
+
}
|
|
90
|
+
catch { /* ignore */ }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
lastSnapshot = currentSnapshot;
|
|
94
|
+
}
|
|
95
|
+
async function pollFactsChanges() {
|
|
96
|
+
const factsUris = [
|
|
97
|
+
"pilotswarm://facts/skills",
|
|
98
|
+
"pilotswarm://facts/asks",
|
|
99
|
+
];
|
|
100
|
+
const subscribedFacts = factsUris.filter(u => subscriptions.has(u));
|
|
101
|
+
if (subscribedFacts.length === 0)
|
|
102
|
+
return;
|
|
103
|
+
const currentFactsSnapshot = new Map();
|
|
104
|
+
for (const uri of subscribedFacts) {
|
|
105
|
+
const prefix = uri === "pilotswarm://facts/skills" ? "skills/%" : "asks/%";
|
|
106
|
+
try {
|
|
107
|
+
const result = await ctx.facts.readFacts({ keyPattern: prefix, limit: 1000 });
|
|
108
|
+
const facts = result.facts ?? [];
|
|
109
|
+
const latestUpdatedAt = facts.reduce((latest, f) => {
|
|
110
|
+
const u = f.updatedAt ?? f.updated_at ?? null;
|
|
111
|
+
if (!u)
|
|
112
|
+
return latest;
|
|
113
|
+
return !latest || u > latest ? u : latest;
|
|
114
|
+
}, null);
|
|
115
|
+
currentFactsSnapshot.set(uri, {
|
|
116
|
+
count: result.count ?? facts.length,
|
|
117
|
+
latestUpdatedAt,
|
|
118
|
+
});
|
|
119
|
+
const prev = lastFactsSnapshot.get(uri);
|
|
120
|
+
const changed = !prev
|
|
121
|
+
|| prev.count !== (result.count ?? facts.length)
|
|
122
|
+
|| prev.latestUpdatedAt !== latestUpdatedAt;
|
|
123
|
+
if (changed) {
|
|
124
|
+
try {
|
|
125
|
+
await lowLevel.sendResourceUpdated({ uri });
|
|
126
|
+
}
|
|
127
|
+
catch { /* ignore */ }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Facts store may not be available
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
lastFactsSnapshot = currentFactsSnapshot;
|
|
135
|
+
}
|
|
136
|
+
// Hook into MCP subscribe/unsubscribe via the low-level server.
|
|
137
|
+
// setRequestHandler requires the SDK's typed Zod schemas — passing a plain
|
|
138
|
+
// `{ method }` object causes the SDK to throw "Schema is missing a method
|
|
139
|
+
// literal" and silently drop the handler.
|
|
140
|
+
lowLevel.setRequestHandler(SubscribeRequestSchema, async (request) => {
|
|
141
|
+
const uri = request?.params?.uri;
|
|
142
|
+
if (uri) {
|
|
143
|
+
subscriptions.add(uri);
|
|
144
|
+
startPoller();
|
|
145
|
+
}
|
|
146
|
+
return {};
|
|
147
|
+
});
|
|
148
|
+
lowLevel.setRequestHandler(UnsubscribeRequestSchema, async (request) => {
|
|
149
|
+
const uri = request?.params?.uri;
|
|
150
|
+
if (uri)
|
|
151
|
+
subscriptions.delete(uri);
|
|
152
|
+
if (subscriptions.size === 0)
|
|
153
|
+
stopPoller();
|
|
154
|
+
return {};
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../src/resources/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAYlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAsD7D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { ListPromptsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import { registerSessionTools } from "./tools/sessions.js";
|
|
4
|
+
import { registerAgentTools } from "./tools/agents.js";
|
|
5
|
+
import { registerFactsTools } from "./tools/facts.js";
|
|
6
|
+
import { registerModelTools } from "./tools/models.js";
|
|
7
|
+
import { registerSessionResources } from "./resources/sessions.js";
|
|
8
|
+
import { registerAgentResources } from "./resources/agents.js";
|
|
9
|
+
import { registerFactsResources } from "./resources/facts.js";
|
|
10
|
+
import { registerModelsResources } from "./resources/models.js";
|
|
11
|
+
import { registerSkillPrompts } from "./prompts/skills.js";
|
|
12
|
+
import { enableResourceSubscriptions } from "./resources/subscriptions.js";
|
|
13
|
+
export function createMcpServer(ctx) {
|
|
14
|
+
const server = new McpServer({
|
|
15
|
+
name: "pilotswarm",
|
|
16
|
+
version: "0.1.0",
|
|
17
|
+
}, {
|
|
18
|
+
capabilities: {
|
|
19
|
+
tools: { listChanged: true },
|
|
20
|
+
resources: { subscribe: true, listChanged: true },
|
|
21
|
+
prompts: { listChanged: true },
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
// Tools
|
|
25
|
+
registerSessionTools(server, ctx);
|
|
26
|
+
registerAgentTools(server, ctx);
|
|
27
|
+
registerFactsTools(server, ctx);
|
|
28
|
+
registerModelTools(server, ctx);
|
|
29
|
+
// Resources
|
|
30
|
+
registerSessionResources(server, ctx);
|
|
31
|
+
registerAgentResources(server, ctx);
|
|
32
|
+
registerFactsResources(server, ctx);
|
|
33
|
+
registerModelsResources(server, ctx);
|
|
34
|
+
// Prompts
|
|
35
|
+
registerSkillPrompts(server, ctx);
|
|
36
|
+
// We advertise the `prompts` capability unconditionally (see constructor
|
|
37
|
+
// above), so honor `prompts/list` even when zero prompts are registered.
|
|
38
|
+
// The high-level McpServer only installs its own ListPrompts handler the
|
|
39
|
+
// first time `.prompt()` runs; without that, advertising the capability
|
|
40
|
+
// but 404'ing the method violates the contract. Install a low-level
|
|
41
|
+
// fallback that returns an empty list. If `.prompt()` later runs, the
|
|
42
|
+
// SDK's `assertCanSetRequestHandler` would conflict — but that's only
|
|
43
|
+
// invoked from `setPromptRequestHandlers()`, which is gated by the
|
|
44
|
+
// `_promptHandlersInitialized` flag the SDK manages itself; since we're
|
|
45
|
+
// claiming the handler first, register a low-level handler and let the
|
|
46
|
+
// SDK skip its own setup. To keep both paths working, we only install
|
|
47
|
+
// the fallback when no prompts were registered above.
|
|
48
|
+
const lowLevel = server.server;
|
|
49
|
+
const sdkPromptsInitialized = server._promptHandlersInitialized === true;
|
|
50
|
+
if (lowLevel?.setRequestHandler && !sdkPromptsInitialized) {
|
|
51
|
+
lowLevel.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
52
|
+
prompts: [],
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
// Resource subscriptions (best-effort push notifications)
|
|
56
|
+
enableResourceSubscriptions(server, ctx);
|
|
57
|
+
return server;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,UAAU,eAAe,CAAC,GAAkB;IAC9C,MAAM,MAAM,GAAG,IAAI,SAAS,CACxB;QACI,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACnB,EACD;QACI,YAAY,EAAE;YACV,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC5B,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;YACjD,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;SACjC;KACJ,CACJ,CAAC;IAEF,QAAQ;IACR,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhC,YAAY;IACZ,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAErC,UAAU;IACV,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAElC,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,sDAAsD;IACtD,MAAM,QAAQ,GAAS,MAAc,CAAC,MAAM,CAAC;IAC7C,MAAM,qBAAqB,GAAI,MAAc,CAAC,0BAA0B,KAAK,IAAI,CAAC;IAClF,IAAI,QAAQ,EAAE,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,QAAQ,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,EAAE;SACd,CAAC,CAAC,CAAC;IACR,CAAC;IAED,0DAA0D;IAC1D,2BAA2B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/tools/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QAwWvE"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerAgentTools(server, ctx) {
|
|
3
|
+
// list_agents — List all sub-agents across sessions (read-only inspection).
|
|
4
|
+
//
|
|
5
|
+
// The external MCP surface deliberately does NOT expose action tools for
|
|
6
|
+
// sub-agents — spawn_agent / message_agent / cancel_agent are reachable
|
|
7
|
+
// only from inside the parent session's reasoning loop, via the
|
|
8
|
+
// in-loop `spawn_agent` tool and related orchestration commands. See
|
|
9
|
+
// `packages/app/mcp/README.md` section "External MCP boundary" for
|
|
10
|
+
// the full rule.
|
|
11
|
+
server.registerTool("list_agents", {
|
|
12
|
+
title: "List Sub-Agents",
|
|
13
|
+
description: "List all sub-agents (child sessions) across PilotSwarm. Shows agent name, status, model, parent session, and task context. " +
|
|
14
|
+
"Optionally filter by parent session or status.",
|
|
15
|
+
inputSchema: {
|
|
16
|
+
parent_session_id: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Filter agents belonging to a specific parent session"),
|
|
20
|
+
status_filter: z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Filter by status (running, idle, waiting, completed, failed)"),
|
|
24
|
+
},
|
|
25
|
+
}, async ({ parent_session_id, status_filter }) => {
|
|
26
|
+
try {
|
|
27
|
+
const sessions = await ctx.mgmt.listSessions();
|
|
28
|
+
// Agents are sessions with a parentSessionId
|
|
29
|
+
let agents = sessions.filter((s) => s.parentSessionId);
|
|
30
|
+
if (parent_session_id) {
|
|
31
|
+
agents = agents.filter((s) => s.parentSessionId === parent_session_id);
|
|
32
|
+
}
|
|
33
|
+
if (status_filter) {
|
|
34
|
+
const f = status_filter.toLowerCase();
|
|
35
|
+
agents = agents.filter((s) => s.status?.toLowerCase() === f);
|
|
36
|
+
}
|
|
37
|
+
const data = agents.map((s) => ({
|
|
38
|
+
agent_session_id: s.sessionId,
|
|
39
|
+
agent_id: s.agentId ?? null,
|
|
40
|
+
title: s.title ?? null,
|
|
41
|
+
status: s.status,
|
|
42
|
+
orchestration_status: s.orchestrationStatus ?? null,
|
|
43
|
+
model: s.model ?? "default",
|
|
44
|
+
parent_session_id: s.parentSessionId,
|
|
45
|
+
is_system: s.isSystem ?? false,
|
|
46
|
+
iterations: s.iterations ?? 0,
|
|
47
|
+
wait_reason: s.waitReason ?? null,
|
|
48
|
+
error: s.error ?? null,
|
|
49
|
+
created_at: s.createdAt,
|
|
50
|
+
updated_at: s.updatedAt ?? null,
|
|
51
|
+
}));
|
|
52
|
+
return {
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: "text",
|
|
56
|
+
text: JSON.stringify({ count: data.length, agents: data }, null, 2),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
65
|
+
isError: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// list_registered_agents — Read PilotSwarm's catalog of agent definitions.
|
|
70
|
+
//
|
|
71
|
+
// Returns agent definitions visible to this MCP server (loaded from
|
|
72
|
+
// configured plugin dirs). Pure read; no creation affordance — external
|
|
73
|
+
// MCP clients cannot spawn from this. Workers in different processes
|
|
74
|
+
// may have a different catalog because plugin dirs are configured
|
|
75
|
+
// per-process; this tool reports only what this MCP server sees.
|
|
76
|
+
server.registerTool("list_registered_agents", {
|
|
77
|
+
title: "List Registered Agents",
|
|
78
|
+
description: "Read PilotSwarm's catalog of registered agent definitions visible to this MCP server. " +
|
|
79
|
+
"Returns name, description, system flag, and parent constraint per definition. " +
|
|
80
|
+
"Pure inspection — does not create or spawn anything. Workers in different processes " +
|
|
81
|
+
"may have a different catalog (configured per-process via --plugin).",
|
|
82
|
+
inputSchema: {
|
|
83
|
+
include_system: z
|
|
84
|
+
.boolean()
|
|
85
|
+
.optional()
|
|
86
|
+
.describe("Include system agent definitions like sweeper, resourcemgr (default false)"),
|
|
87
|
+
},
|
|
88
|
+
}, async ({ include_system }) => {
|
|
89
|
+
try {
|
|
90
|
+
let agents = ctx.registeredAgents;
|
|
91
|
+
if (!include_system) {
|
|
92
|
+
agents = agents.filter((a) => !a.system);
|
|
93
|
+
}
|
|
94
|
+
const data = agents.map((a) => ({
|
|
95
|
+
name: a.name,
|
|
96
|
+
title: a.title ?? null,
|
|
97
|
+
description: a.description ?? null,
|
|
98
|
+
system: Boolean(a.system),
|
|
99
|
+
parent: a.parent ?? null,
|
|
100
|
+
}));
|
|
101
|
+
return {
|
|
102
|
+
content: [
|
|
103
|
+
{
|
|
104
|
+
type: "text",
|
|
105
|
+
text: JSON.stringify({ count: data.length, agents: data }, null, 2),
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
112
|
+
return {
|
|
113
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
114
|
+
isError: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// get_agent_tree — Recursive subtree of a root session.
|
|
119
|
+
//
|
|
120
|
+
// One mgmt.listSessions() call, then in-memory depth-first walk over
|
|
121
|
+
// the parent_session_id graph. Cycle-defensive via visited Set, bounded
|
|
122
|
+
// by max_depth.
|
|
123
|
+
server.registerTool("get_agent_tree", {
|
|
124
|
+
title: "Get Agent Tree",
|
|
125
|
+
description: "Recursive sub-agent tree rooted at the given session. " +
|
|
126
|
+
"Returns nested children with status, agent_id, depth. " +
|
|
127
|
+
"Bounded by max_depth (default 5). " +
|
|
128
|
+
"include_system filters system descendants; the root session is always returned regardless.",
|
|
129
|
+
inputSchema: {
|
|
130
|
+
root_session_id: z
|
|
131
|
+
.string()
|
|
132
|
+
.min(1)
|
|
133
|
+
.describe("Root session id to walk from (top-level or any sub-agent). " +
|
|
134
|
+
"Accepts any non-empty string; PilotSwarm system-agent UUIDs are not strictly RFC-4122 compliant."),
|
|
135
|
+
max_depth: z
|
|
136
|
+
.number()
|
|
137
|
+
.int()
|
|
138
|
+
.min(0)
|
|
139
|
+
.max(20)
|
|
140
|
+
.optional()
|
|
141
|
+
.describe("Maximum recursion depth (default 5)"),
|
|
142
|
+
include_system: z
|
|
143
|
+
.boolean()
|
|
144
|
+
.optional()
|
|
145
|
+
.describe("Include system sub-agents in the tree (default true)"),
|
|
146
|
+
},
|
|
147
|
+
}, async ({ root_session_id, max_depth, include_system }) => {
|
|
148
|
+
try {
|
|
149
|
+
const limit = max_depth ?? 5;
|
|
150
|
+
const includeSystem = include_system ?? true;
|
|
151
|
+
const sessions = await ctx.mgmt.listSessions();
|
|
152
|
+
// Index children by parentSessionId
|
|
153
|
+
const childrenByParent = new Map();
|
|
154
|
+
const sessionById = new Map();
|
|
155
|
+
for (const s of sessions) {
|
|
156
|
+
sessionById.set(s.sessionId, s);
|
|
157
|
+
if (s.parentSessionId) {
|
|
158
|
+
const arr = childrenByParent.get(s.parentSessionId) ?? [];
|
|
159
|
+
arr.push(s);
|
|
160
|
+
childrenByParent.set(s.parentSessionId, arr);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const root = sessionById.get(root_session_id);
|
|
164
|
+
if (!root) {
|
|
165
|
+
return {
|
|
166
|
+
content: [
|
|
167
|
+
{
|
|
168
|
+
type: "text",
|
|
169
|
+
text: JSON.stringify({
|
|
170
|
+
error: "session not found",
|
|
171
|
+
root_session_id,
|
|
172
|
+
}),
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
isError: true,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const visited = new Set();
|
|
179
|
+
let totalNodes = 0;
|
|
180
|
+
let depthReached = 0;
|
|
181
|
+
const buildNode = (s, depth) => {
|
|
182
|
+
if (visited.has(s.sessionId)) {
|
|
183
|
+
return { session_id: s.sessionId, agent_id: s.agentId ?? null, status: s.status, depth, children: [], cycle_detected: true };
|
|
184
|
+
}
|
|
185
|
+
visited.add(s.sessionId);
|
|
186
|
+
totalNodes++;
|
|
187
|
+
if (depth > depthReached)
|
|
188
|
+
depthReached = depth;
|
|
189
|
+
let childNodes = [];
|
|
190
|
+
if (depth < limit) {
|
|
191
|
+
const kids = childrenByParent.get(s.sessionId) ?? [];
|
|
192
|
+
childNodes = kids
|
|
193
|
+
.filter((c) => includeSystem || !c.isSystem)
|
|
194
|
+
.map((c) => buildNode(c, depth + 1));
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
session_id: s.sessionId,
|
|
198
|
+
agent_id: s.agentId ?? null,
|
|
199
|
+
title: s.title ?? null,
|
|
200
|
+
status: s.status,
|
|
201
|
+
is_system: Boolean(s.isSystem),
|
|
202
|
+
depth,
|
|
203
|
+
children: childNodes,
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
const tree = buildNode(root, 0);
|
|
207
|
+
return {
|
|
208
|
+
content: [
|
|
209
|
+
{
|
|
210
|
+
type: "text",
|
|
211
|
+
text: JSON.stringify({ root_session_id, depth_reached: depthReached, total_nodes: totalNodes, tree }, null, 2),
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
218
|
+
return {
|
|
219
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
220
|
+
isError: true,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
// get_session_tree_stats — Aggregated metrics over a session subtree.
|
|
225
|
+
// Wraps mgmt.getSessionTreeStats() and snake_cases the field names.
|
|
226
|
+
server.registerTool("get_session_tree_stats", {
|
|
227
|
+
title: "Get Session Tree Stats",
|
|
228
|
+
description: "Aggregated metrics for a session and all its descendants: token totals, " +
|
|
229
|
+
"session count, dehydration / hydration counts, per-model breakdown, cache hit ratio. " +
|
|
230
|
+
"Pure inspection.",
|
|
231
|
+
inputSchema: {
|
|
232
|
+
session_id: z
|
|
233
|
+
.string()
|
|
234
|
+
.min(1)
|
|
235
|
+
.describe("Root session id of the subtree. Accepts any non-empty string; " +
|
|
236
|
+
"PilotSwarm system-agent UUIDs are not strictly RFC-4122 compliant."),
|
|
237
|
+
},
|
|
238
|
+
}, async ({ session_id }) => {
|
|
239
|
+
try {
|
|
240
|
+
const stats = await ctx.mgmt.getSessionTreeStats(session_id);
|
|
241
|
+
if (!stats) {
|
|
242
|
+
return {
|
|
243
|
+
content: [
|
|
244
|
+
{
|
|
245
|
+
type: "text",
|
|
246
|
+
text: JSON.stringify({ error: "session not found", session_id }),
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
isError: true,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const out = {
|
|
253
|
+
root_session_id: stats.rootSessionId,
|
|
254
|
+
self: {
|
|
255
|
+
session_id: stats.self.sessionId,
|
|
256
|
+
agent_id: stats.self.agentId ?? null,
|
|
257
|
+
model: stats.self.model ?? null,
|
|
258
|
+
reasoning_effort: stats.self.reasoningEffort ?? null,
|
|
259
|
+
parent_session_id: stats.self.parentSessionId ?? null,
|
|
260
|
+
snapshot_size_bytes: stats.self.snapshotSizeBytes,
|
|
261
|
+
dehydration_count: stats.self.dehydrationCount,
|
|
262
|
+
hydration_count: stats.self.hydrationCount,
|
|
263
|
+
lossy_handoff_count: stats.self.lossyHandoffCount,
|
|
264
|
+
last_dehydrated_at: stats.self.lastDehydratedAt ?? null,
|
|
265
|
+
last_hydrated_at: stats.self.lastHydratedAt ?? null,
|
|
266
|
+
last_checkpoint_at: stats.self.lastCheckpointAt ?? null,
|
|
267
|
+
tokens_input: stats.self.tokensInput,
|
|
268
|
+
tokens_output: stats.self.tokensOutput,
|
|
269
|
+
tokens_cache_read: stats.self.tokensCacheRead,
|
|
270
|
+
tokens_cache_write: stats.self.tokensCacheWrite,
|
|
271
|
+
cache_hit_ratio: stats.self.cacheHitRatio,
|
|
272
|
+
deleted_at: stats.self.deletedAt ?? null,
|
|
273
|
+
created_at: stats.self.createdAt,
|
|
274
|
+
updated_at: stats.self.updatedAt,
|
|
275
|
+
},
|
|
276
|
+
tree: {
|
|
277
|
+
session_count: stats.tree.sessionCount,
|
|
278
|
+
total_tokens_input: stats.tree.totalTokensInput,
|
|
279
|
+
total_tokens_output: stats.tree.totalTokensOutput,
|
|
280
|
+
total_tokens_cache_read: stats.tree.totalTokensCacheRead,
|
|
281
|
+
total_tokens_cache_write: stats.tree.totalTokensCacheWrite,
|
|
282
|
+
cache_hit_ratio: stats.tree.cacheHitRatio,
|
|
283
|
+
total_dehydration_count: stats.tree.totalDehydrationCount,
|
|
284
|
+
total_hydration_count: stats.tree.totalHydrationCount,
|
|
285
|
+
total_lossy_handoff_count: stats.tree.totalLossyHandoffCount,
|
|
286
|
+
total_snapshot_size_bytes: stats.tree.totalSnapshotSizeBytes,
|
|
287
|
+
},
|
|
288
|
+
by_model: stats.byModel.map((m) => ({
|
|
289
|
+
model: m.model,
|
|
290
|
+
session_count: m.sessionCount,
|
|
291
|
+
total_tokens_input: m.totalTokensInput,
|
|
292
|
+
total_tokens_output: m.totalTokensOutput,
|
|
293
|
+
total_tokens_cache_read: m.totalTokensCacheRead,
|
|
294
|
+
total_tokens_cache_write: m.totalTokensCacheWrite,
|
|
295
|
+
total_snapshot_size_bytes: m.totalSnapshotSizeBytes,
|
|
296
|
+
cache_hit_ratio: m.cacheHitRatio,
|
|
297
|
+
})),
|
|
298
|
+
};
|
|
299
|
+
return {
|
|
300
|
+
content: [
|
|
301
|
+
{
|
|
302
|
+
type: "text",
|
|
303
|
+
text: JSON.stringify(out, null, 2),
|
|
304
|
+
},
|
|
305
|
+
],
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
310
|
+
return {
|
|
311
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
312
|
+
isError: true,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/tools/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/tools/facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QAuKvE"}
|