pilotswarm 0.5.13 → 0.5.15
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 +6 -0
- package/mcp/README.md +14 -2
- package/mcp/dist/src/context.d.ts +13 -0
- package/mcp/dist/src/context.d.ts.map +1 -1
- package/mcp/dist/src/context.js +20 -0
- package/mcp/dist/src/context.js.map +1 -1
- package/mcp/dist/src/server.d.ts.map +1 -1
- package/mcp/dist/src/server.js +5 -1
- package/mcp/dist/src/server.js.map +1 -1
- package/mcp/dist/src/tools/capabilities.d.ts +4 -0
- package/mcp/dist/src/tools/capabilities.d.ts.map +1 -1
- package/mcp/dist/src/tools/capabilities.js +13 -0
- package/mcp/dist/src/tools/capabilities.js.map +1 -1
- package/mcp/dist/src/tools/groups.d.ts +5 -4
- package/mcp/dist/src/tools/groups.d.ts.map +1 -1
- package/mcp/dist/src/tools/groups.js +43 -20
- package/mcp/dist/src/tools/groups.js.map +1 -1
- package/mcp/dist/src/tools/sessions.d.ts.map +1 -1
- package/mcp/dist/src/tools/sessions.js +118 -2
- package/mcp/dist/src/tools/sessions.js.map +1 -1
- package/package.json +3 -2
- package/tui/src/app.js +19 -2
- package/tui/src/auth/cli.js +13 -0
- package/tui/src/node-sdk-transport.js +99 -13
- package/tui/tui-splash-mobile.txt +5 -7
- package/tui/tui-splash.txt +13 -9
- package/ui/core/src/commands.js +2 -0
- package/ui/core/src/controller.js +454 -35
- package/ui/core/src/history.js +19 -1
- package/ui/core/src/reducer.js +121 -8
- package/ui/core/src/selectors.js +204 -14
- package/ui/core/src/state.js +3 -0
- package/ui/core/src/themes/helpers.js +4 -0
- package/ui/react/src/components.js +95 -6
- package/ui/react/src/web-app.js +798 -157
- package/web/api/router.js +7 -6
- package/web/api/ws.js +9 -0
- package/web/auth/index.js +5 -0
- package/web/auth/providers/dev.js +119 -0
- package/web/authz.js +142 -0
- package/web/dist/assets/index-CZizkB5Z.js +24 -0
- package/web/dist/assets/index-D9e2TGjO.css +1 -0
- package/web/dist/assets/pilotswarm-KMqn3ZJs.js +90 -0
- package/web/dist/assets/react-l0sNRNKZ.js +1 -0
- package/web/dist/index.html +3 -4
- package/web/runtime.js +553 -37
- package/web/server.js +2 -2
- package/web/dist/assets/index-bQ2QInMX.js +0 -24
- package/web/dist/assets/index-oldX95Tp.css +0 -1
- package/web/dist/assets/pilotswarm-DRs6o-lA.js +0 -90
- package/web/dist/assets/react-C9iQPS2h.js +0 -1
package/README.md
CHANGED
|
@@ -91,6 +91,12 @@ Your Entra app role gates the surface: admin-only tools (embedder start/stop,
|
|
|
91
91
|
`facts_admin`, `restart_system_session`, graph-namespace writes) register only
|
|
92
92
|
for admin credentials.
|
|
93
93
|
|
|
94
|
+
On shared deployments, sessions are owner-scoped. Owners can open a whole
|
|
95
|
+
session tree as read/write or grant a named teammate targeted read/write access;
|
|
96
|
+
management, deletion, and sharing remain owner/admin operations. The portal,
|
|
97
|
+
TUI, Web API, WebSocket stream, and MCP server enforce the same rules. See the
|
|
98
|
+
[security and sharing guide](https://github.com/affandar/pilotswarm/blob/main/docs/user-guide/security-and-sharing.md).
|
|
99
|
+
|
|
94
100
|
### Claude Code
|
|
95
101
|
|
|
96
102
|
```bash
|
package/mcp/README.md
CHANGED
|
@@ -380,6 +380,12 @@ with `get_capabilities` to see the shape of this server.
|
|
|
380
380
|
| `list_sessions` | Discovery — list all sessions with status, model, agent info, and parent/child relationships; keyset pagination via `limit`/`cursor`/`include_deleted` |
|
|
381
381
|
| `get_session_detail` | Discovery — get detailed info for a session including status, context usage, cron state, and pending questions |
|
|
382
382
|
| `get_session_events` | Discovery — CMS event stream with `after_seq` forward paging, `before_seq` history paging, `event_types` server-side filter, and long-poll support |
|
|
383
|
+
| `get_session_access` | Effective caller access, visibility, relation, and owner for one session tree |
|
|
384
|
+
| `set_session_visibility` | Set `private`, `shared_read`, or `shared_write` on an owned session tree |
|
|
385
|
+
| `grant_session_share` / `revoke_session_share` | Owner/admin targeted read/write grant management |
|
|
386
|
+
| `list_session_shares` | Owner/admin listing of targeted grants on a session tree |
|
|
387
|
+
| `list_known_users` | Bounded member directory used to resolve a grantee; helper only, not an allowlist |
|
|
388
|
+
| `list_authz_audit` | Owner audit for one session or admin fleet-wide authorization audit |
|
|
383
389
|
|
|
384
390
|
### Turn & Queue Control
|
|
385
391
|
|
|
@@ -394,8 +400,8 @@ with `get_capabilities` to see the shape of this server.
|
|
|
394
400
|
|
|
395
401
|
| Tool | Description |
|
|
396
402
|
|------|-------------|
|
|
397
|
-
| `list_session_groups` | List groups; `include_sessions` adds
|
|
398
|
-
| `manage_session_group` | `action: create \| update \| assign \| move \| cancel \| complete \| delete` —
|
|
403
|
+
| `list_session_groups` | List YOUR groups (private per-user organization); `include_sessions` adds the sessions you placed in each |
|
|
404
|
+
| `manage_session_group` | `action: create \| update \| place \| assign \| move \| cancel \| complete \| delete` — `place` puts sessions you can read into your own groups (assign/move are deprecated aliases; cancel/complete are deprecated) |
|
|
399
405
|
|
|
400
406
|
### Artifacts *(web)*
|
|
401
407
|
|
|
@@ -464,6 +470,12 @@ External clients **cannot** spawn, message, or cancel a sub-agent. Calling a rem
|
|
|
464
470
|
|
|
465
471
|
Top-level session control (`create_session`, `send_message`, `delete_session`, etc.) is unaffected by this boundary — those tools remain on the external surface.
|
|
466
472
|
|
|
473
|
+
Session visibility still applies to every MCP operation. A server running with
|
|
474
|
+
`--api-url` acts as the cached Entra principal from `pilotswarm auth login` (or
|
|
475
|
+
the supplied bearer token): unreadable sessions are absent/not-found, writes
|
|
476
|
+
require owner/admin, `shared_write`, or a targeted write grant, and sharing
|
|
477
|
+
metadata is owner/admin only.
|
|
478
|
+
|
|
467
479
|
### Agent Management
|
|
468
480
|
|
|
469
481
|
| Tool | Description |
|
|
@@ -34,6 +34,19 @@ export interface ServerContext {
|
|
|
34
34
|
* [admin]-tagged tools register iff true.
|
|
35
35
|
*/
|
|
36
36
|
admin: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The caller's normalized role (`admin` | `user` | `anonymous` | null),
|
|
39
|
+
* and the deployment's ownership/visibility posture. Web mode reads these
|
|
40
|
+
* from /auth/me and /bootstrap; direct mode is privileged (`admin`) with
|
|
41
|
+
* enforcement off. Surfaced by get_capabilities so an agent can explain a
|
|
42
|
+
* refusal instead of retrying blindly.
|
|
43
|
+
*/
|
|
44
|
+
role: string | null;
|
|
45
|
+
authz: {
|
|
46
|
+
ownershipEnforced: boolean;
|
|
47
|
+
defaultVisibility: string;
|
|
48
|
+
systemVisibility: string;
|
|
49
|
+
};
|
|
37
50
|
/** True when running over the Web API (`--api-url`); false in direct mode. */
|
|
38
51
|
webMode: boolean;
|
|
39
52
|
models: ModelProviderRegistry | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAQ1B,qBAAqB,EAErB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE;;;;;;OAMG;IACH,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC;;;;;OAKG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACjC,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAQ1B,qBAAqB,EAErB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE;QAAE,iBAAiB,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE;;;;;;OAMG;IACH,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC;;;;;OAKG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACjC,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiMtF"}
|
package/mcp/dist/src/context.js
CHANGED
|
@@ -8,6 +8,8 @@ export async function createContext(opts) {
|
|
|
8
8
|
let graph = null;
|
|
9
9
|
let api = null;
|
|
10
10
|
let admin = false;
|
|
11
|
+
let ctxRole = null;
|
|
12
|
+
let ctxAuthz = { ownershipEnforced: false, defaultVisibility: "private", systemVisibility: "read" };
|
|
11
13
|
let webAgents = null;
|
|
12
14
|
if (opts.apiUrl) {
|
|
13
15
|
// Web API mode (supported): no database credentials in this process.
|
|
@@ -34,10 +36,25 @@ export async function createContext(opts) {
|
|
|
34
36
|
const me = await api.getAuthContext();
|
|
35
37
|
const role = me?.authorization?.role;
|
|
36
38
|
admin = role === "admin" || role === "anonymous";
|
|
39
|
+
ctxRole = typeof role === "string" ? role : null;
|
|
37
40
|
}
|
|
38
41
|
catch {
|
|
39
42
|
admin = false;
|
|
40
43
|
}
|
|
44
|
+
// Ownership/visibility posture from /bootstrap (security model).
|
|
45
|
+
try {
|
|
46
|
+
const boot = await api.getBootstrap();
|
|
47
|
+
if (boot?.authz && typeof boot.authz === "object") {
|
|
48
|
+
ctxAuthz = {
|
|
49
|
+
ownershipEnforced: Boolean(boot.authz.ownershipEnforced),
|
|
50
|
+
defaultVisibility: String(boot.authz.defaultVisibility || "private"),
|
|
51
|
+
systemVisibility: String(boot.authz.systemVisibility || "read"),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// leave defaults
|
|
57
|
+
}
|
|
41
58
|
// Registered agents: the deployment's creatable-agent catalog is the
|
|
42
59
|
// truth in web mode — local plugin dirs may diverge from what
|
|
43
60
|
// createSessionForAgent will accept.
|
|
@@ -61,6 +78,7 @@ export async function createContext(opts) {
|
|
|
61
78
|
// Direct mode (internal/testing): straight to the datastore. A
|
|
62
79
|
// process holding DATABASE_URL is definitionally privileged.
|
|
63
80
|
admin = true;
|
|
81
|
+
ctxRole = "admin";
|
|
64
82
|
client = new PilotSwarmClient({ store: opts.store });
|
|
65
83
|
await client.start();
|
|
66
84
|
mgmt = new PilotSwarmManagementClient({ store: opts.store });
|
|
@@ -166,6 +184,8 @@ export async function createContext(opts) {
|
|
|
166
184
|
graph,
|
|
167
185
|
api,
|
|
168
186
|
admin,
|
|
187
|
+
role: ctxRole,
|
|
188
|
+
authz: ctxAuthz,
|
|
169
189
|
webMode: Boolean(opts.apiUrl),
|
|
170
190
|
models,
|
|
171
191
|
skills,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAElB,UAAU,EACV,cAAc,GAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;AAwBlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,
|
|
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;AAwBlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA0G7D"}
|
package/mcp/dist/src/server.js
CHANGED
|
@@ -58,8 +58,12 @@ export function createMcpServer(ctx) {
|
|
|
58
58
|
"show status input_required; answer with send_answer. stop_turn aborts one turn; abort_session",
|
|
59
59
|
"cancels the whole session; complete_session marks success.",
|
|
60
60
|
"",
|
|
61
|
+
"Session groups are private per-user organization: manage_session_group place puts sessions you",
|
|
62
|
+
"can read into YOUR groups without changing what anyone else sees, and deleting a group removes",
|
|
63
|
+
"only your grouping — never the sessions.",
|
|
64
|
+
"",
|
|
61
65
|
"Destructive tools (delete_session, delete_fact, facts_admin, delete_graph_namespace,",
|
|
62
|
-
"manage_session_group cancel
|
|
66
|
+
"manage_session_group cancel) act immediately — verify targets before calling.",
|
|
63
67
|
"",
|
|
64
68
|
"Reference: https://github.com/affandar/PilotSwarm — docs/user-guide/ (usage guide),",
|
|
65
69
|
"docs/api/reference.md (the Web API this server fronts), packages/app/mcp/README.md (this",
|
|
@@ -1 +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,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,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,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,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;QACD,mEAAmE;QACnE,YAAY,EAAE;YACV,gGAAgG;YAChG,uEAAuE;YACvE,EAAE;YACF,kGAAkG;YAClG,gGAAgG;YAChG,4FAA4F;YAC5F,kGAAkG;YAClG,6FAA6F;YAC7F,oEAAoE;YACpE,kGAAkG;YAClG,8FAA8F;YAC9F,0FAA0F;YAC1F,8FAA8F;YAC9F,iDAAiD;YACjD,EAAE;YACF,gGAAgG;YAChG,gGAAgG;YAChG,oGAAoG;YACpG,EAAE;YACF,gGAAgG;YAChG,iGAAiG;YACjG,+FAA+F;YAC/F,4DAA4D;YAC5D,EAAE;YACF,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,10 @@ import type { ServerContext } from "../context.js";
|
|
|
12
12
|
export declare function buildCapabilities(ctx: ServerContext): {
|
|
13
13
|
mode: string;
|
|
14
14
|
admin: boolean;
|
|
15
|
+
role: string | null;
|
|
16
|
+
ownership_enforced: boolean;
|
|
17
|
+
default_visibility: string;
|
|
18
|
+
viewerScopedGroups: boolean;
|
|
15
19
|
facts: {
|
|
16
20
|
search: boolean;
|
|
17
21
|
embedder: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;;;;;EA8BnD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QA0C5E"}
|
|
@@ -12,6 +12,19 @@ export function buildCapabilities(ctx) {
|
|
|
12
12
|
return {
|
|
13
13
|
mode: ctx.webMode ? "web" : "direct",
|
|
14
14
|
admin: ctx.admin,
|
|
15
|
+
// Ownership/visibility posture (security model): the caller's role and
|
|
16
|
+
// whether the deployment enforces per-user session access. When
|
|
17
|
+
// ownership_enforced is true, list_sessions returns only sessions you
|
|
18
|
+
// can read and a send/read to another user's private session is
|
|
19
|
+
// refused with the reason in the error.
|
|
20
|
+
role: ctx.role ?? null,
|
|
21
|
+
ownership_enforced: ctx.authz?.ownershipEnforced ?? false,
|
|
22
|
+
default_visibility: ctx.authz?.defaultVisibility ?? "private",
|
|
23
|
+
// Session groups are private per-user organization: list_session_groups
|
|
24
|
+
// returns only the caller's groups, session views carry viewer_group_id
|
|
25
|
+
// (the caller's own placement), and manage_session_group 'place' needs
|
|
26
|
+
// only read access to the sessions being organized.
|
|
27
|
+
viewerScopedGroups: true,
|
|
15
28
|
facts: {
|
|
16
29
|
search: Boolean(ctx.enhancedFacts?.capabilities.search),
|
|
17
30
|
embedder: Boolean(ctx.enhancedFacts?.capabilities.embedder),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAkB;IAChD,OAAO;QACH,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACpC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE;YACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC;YACvD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,QAAQ,CAAC;SAC9D;QACD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,qEAAqE;QACrE,8BAA8B;QAC9B,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAQ,GAAG,CAAC,KAAa,CAAC,mBAAmB,KAAK,UAAU,CAAC;QACpG,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAQ,GAAG,CAAC,KAAa,CAAC,UAAU,KAAK,UAAU,CAAC;QACtF,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO;QACrD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;QACjC,iBAAiB,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM;KACjD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,GAAkB;IACzE,MAAM,CAAC,YAAY,CACf,kBAAkB,EAClB;QACI,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACP,oGAAoG;cAClG,sGAAsG;cACtG,qGAAqG;cACrG,gDAAgD;QACtD,WAAW,EAAE,EAAE;KAClB,EACD,cAAc,CAAC,KAAK,IAAI,EAAE;QACtB,gEAAgE;QAChE,iEAAiE;QACjE,+DAA+D;QAC/D,kEAAkE;QAClE,iDAAiD;QACjD,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,IAAI,CAAC;gBACD,MAAM,CAAC,GAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACpD,eAAe,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;YACnF,CAAC;YAAC,MAAM,CAAC;gBACL,eAAe,GAAG,IAAI,CAAC;YAC3B,CAAC;QACL,CAAC;QACD,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,CAAC;YACD,YAAY,GAAG,GAAG,CAAC,MAAM;gBACrB,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;gBACnC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACL,YAAY,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,OAAO,UAAU,CAAC;YACd,GAAG,iBAAiB,CAAC,GAAG,CAAC;YACzB,gBAAgB,EAAE,eAAe;YACjC,aAAa,EAAE,YAAY;SAC9B,CAAC,CAAC;IACP,CAAC,CAAC,CACL,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { ServerContext } from "../context.js";
|
|
3
3
|
/**
|
|
4
|
-
* Session-group tools (proposal G5). Groups are
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* tool-count
|
|
4
|
+
* Session-group tools (proposal G5). Groups are each user's PRIVATE
|
|
5
|
+
* organization of sessions: placements are viewer-scoped, so organizing a
|
|
6
|
+
* session into your group never changes what anyone else sees. Seven write
|
|
7
|
+
* routes consolidate into one action-dispatched tool to keep tool-count
|
|
8
|
+
* growth sane.
|
|
8
9
|
*/
|
|
9
10
|
export declare function registerGroupTools(server: McpServer, ctx: ServerContext): void;
|
|
10
11
|
//# sourceMappingURL=groups.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/tools/groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/tools/groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QAyHvE"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { jsonResult, errorResult, withToolErrors } from "../util/respond.js";
|
|
3
3
|
/**
|
|
4
|
-
* Session-group tools (proposal G5). Groups are
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* tool-count
|
|
4
|
+
* Session-group tools (proposal G5). Groups are each user's PRIVATE
|
|
5
|
+
* organization of sessions: placements are viewer-scoped, so organizing a
|
|
6
|
+
* session into your group never changes what anyone else sees. Seven write
|
|
7
|
+
* routes consolidate into one action-dispatched tool to keep tool-count
|
|
8
|
+
* growth sane.
|
|
8
9
|
*/
|
|
9
10
|
export function registerGroupTools(server, ctx) {
|
|
10
11
|
server.registerTool("list_session_groups", {
|
|
11
12
|
title: "List Session Groups",
|
|
12
|
-
description: "List PilotSwarm session groups
|
|
13
|
-
+ "
|
|
13
|
+
description: "List YOUR PilotSwarm session groups (groups are private per-user organization; other users' groups "
|
|
14
|
+
+ "are never returned). Set include_sessions to also return the sessions you placed in each group "
|
|
15
|
+
+ "(derived from list_sessions' viewer_group_id).",
|
|
14
16
|
inputSchema: {
|
|
15
17
|
include_sessions: z.boolean().optional().describe("Also return member sessions per group (default false)"),
|
|
16
18
|
},
|
|
@@ -24,7 +26,7 @@ export function registerGroupTools(server, ctx) {
|
|
|
24
26
|
const sessions = await ctx.mgmt.listSessions();
|
|
25
27
|
const byGroup = new Map();
|
|
26
28
|
for (const s of sessions) {
|
|
27
|
-
const gid = s.
|
|
29
|
+
const gid = s.viewerGroupId ?? null;
|
|
28
30
|
if (!gid)
|
|
29
31
|
continue;
|
|
30
32
|
const arr = byGroup.get(gid) ?? [];
|
|
@@ -37,22 +39,37 @@ export function registerGroupTools(server, ctx) {
|
|
|
37
39
|
}));
|
|
38
40
|
return jsonResult({ count: enriched.length, groups: enriched });
|
|
39
41
|
}));
|
|
42
|
+
// Viewer-private placement. Web mode: the server derives the placing
|
|
43
|
+
// viewer from the credential. Direct mode (admin/test-only) carries no
|
|
44
|
+
// request principal, so it routes through the deprecated alias, which
|
|
45
|
+
// places for the target group's owner (or clears each session owner's
|
|
46
|
+
// placement when ungrouping).
|
|
47
|
+
const placeSessions = async (groupId, sessionIds) => {
|
|
48
|
+
if (ctx.webMode) {
|
|
49
|
+
return await ctx.mgmt.placeSessionsInGroup(sessionIds, groupId);
|
|
50
|
+
}
|
|
51
|
+
return await ctx.mgmt.moveSessionsToGroup(groupId, sessionIds);
|
|
52
|
+
};
|
|
40
53
|
server.registerTool("manage_session_group", {
|
|
41
54
|
title: "Manage Session Group",
|
|
42
|
-
description: "Session-group lifecycle, dispatched by action
|
|
55
|
+
description: "Session-group lifecycle, dispatched by action. Groups are YOUR private per-user organization: "
|
|
56
|
+
+ "placing a session only changes how it appears to you, read access to a session suffices to place "
|
|
57
|
+
+ "it, and recipients of shared sessions organize them into their own groups.\n"
|
|
43
58
|
+ " create — create a group (title required)\n"
|
|
44
59
|
+ " update — patch title/description (group_id required)\n"
|
|
45
|
-
+ "
|
|
46
|
-
+ "
|
|
47
|
-
+ "
|
|
48
|
-
+ "
|
|
49
|
-
+ "
|
|
60
|
+
+ " place — place session_ids' trees into your group_id (null/omitted group_id = ungroup); "
|
|
61
|
+
+ "returns per-root {rootSessionId, placed, reason}\n"
|
|
62
|
+
+ " assign — deprecated alias of place (group_id required)\n"
|
|
63
|
+
+ " move — deprecated alias of place (null/omitted group_id = ungroup)\n"
|
|
64
|
+
+ " cancel — deprecated: cancel every session in the group\n"
|
|
65
|
+
+ " complete — deprecated: complete every session in the group\n"
|
|
66
|
+
+ " delete — delete one of your groups (its placements are cleared; sessions are untouched)",
|
|
50
67
|
inputSchema: {
|
|
51
|
-
action: z.enum(["create", "update", "assign", "move", "cancel", "complete", "delete"]).describe("The operation to perform"),
|
|
52
|
-
group_id: z.string().optional().describe("Target group (required for all actions except create; optional for move = ungroup)"),
|
|
68
|
+
action: z.enum(["create", "update", "place", "assign", "move", "cancel", "complete", "delete"]).describe("The operation to perform"),
|
|
69
|
+
group_id: z.string().optional().describe("Target group (required for all actions except create; optional for place/move = ungroup)"),
|
|
53
70
|
title: z.string().optional().describe("Group title (create/update)"),
|
|
54
71
|
description: z.string().optional().describe("Group description (create/update)"),
|
|
55
|
-
session_ids: z.array(z.string()).optional().describe("Sessions to assign/move"),
|
|
72
|
+
session_ids: z.array(z.string()).optional().describe("Sessions to place/assign/move"),
|
|
56
73
|
reason: z.string().optional().describe("Reason (cancel/complete/delete)"),
|
|
57
74
|
},
|
|
58
75
|
}, withToolErrors(async ({ action, group_id, title, description, session_ids, reason }) => {
|
|
@@ -69,19 +86,25 @@ export function registerGroupTools(server, ctx) {
|
|
|
69
86
|
const group = await ctx.mgmt.updateSessionGroup(group_id, { title, description });
|
|
70
87
|
return jsonResult({ updated: true, group });
|
|
71
88
|
}
|
|
89
|
+
case "place": {
|
|
90
|
+
if (!session_ids?.length)
|
|
91
|
+
return errorResult("place requires session_ids");
|
|
92
|
+
const results = await placeSessions(group_id ?? null, session_ids);
|
|
93
|
+
return jsonResult({ placed: true, group_id: group_id ?? null, results: results ?? null });
|
|
94
|
+
}
|
|
72
95
|
case "assign": {
|
|
73
96
|
if (!group_id)
|
|
74
97
|
return errorResult("assign requires group_id");
|
|
75
98
|
if (!session_ids?.length)
|
|
76
99
|
return errorResult("assign requires session_ids");
|
|
77
|
-
await
|
|
78
|
-
return jsonResult({ assigned: true, group_id, session_ids });
|
|
100
|
+
const results = await placeSessions(group_id, session_ids);
|
|
101
|
+
return jsonResult({ assigned: true, group_id, session_ids, results: results ?? null });
|
|
79
102
|
}
|
|
80
103
|
case "move": {
|
|
81
104
|
if (!session_ids?.length)
|
|
82
105
|
return errorResult("move requires session_ids");
|
|
83
|
-
await
|
|
84
|
-
return jsonResult({ moved: true, group_id: group_id ?? null, session_ids });
|
|
106
|
+
const results = await placeSessions(group_id ?? null, session_ids);
|
|
107
|
+
return jsonResult({ moved: true, group_id: group_id ?? null, session_ids, results: results ?? null });
|
|
85
108
|
}
|
|
86
109
|
case "cancel": {
|
|
87
110
|
if (!group_id)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/tools/groups.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7E
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/tools/groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/tools/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/tools/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QAqzBzE"}
|
|
@@ -17,7 +17,7 @@ export function registerSessionTools(server, ctx) {
|
|
|
17
17
|
prompt: z.string().optional().describe("Initial message to send immediately after session creation (fire-and-forget)"),
|
|
18
18
|
reasoning_effort: z.string().optional().describe("Reasoning effort for the session's model (e.g. low, medium, high)"),
|
|
19
19
|
context_tier: z.string().optional().describe("Context-window tier for the session's model: 'default' (smaller window) or 'long_context'"),
|
|
20
|
-
group_id: z.string().optional().describe("
|
|
20
|
+
group_id: z.string().optional().describe("One of YOUR session groups to place the new session in (groups are private per-user organization; fails if the group is not yours)"),
|
|
21
21
|
splash: z.string().optional().describe("Splash text shown in the portal UI (agent-bound sessions only)"),
|
|
22
22
|
},
|
|
23
23
|
}, async ({ model, agent, system_message, title, prompt, reasoning_effort, context_tier, group_id, splash }) => {
|
|
@@ -334,11 +334,126 @@ export function registerSessionTools(server, ctx) {
|
|
|
334
334
|
};
|
|
335
335
|
}
|
|
336
336
|
});
|
|
337
|
+
// ── Session sharing (security model) ─────────────────────────────
|
|
338
|
+
// Owner-or-admin operations; the server enforces and returns the authz
|
|
339
|
+
// reason in the error when refused. Registered for all callers.
|
|
340
|
+
// Web mode: dispatch through the API (server enforces). Direct mode
|
|
341
|
+
// (admin/test-only): call the management client with POSITIONAL args —
|
|
342
|
+
// its signatures are (sessionId, …), not a single params object.
|
|
343
|
+
const callShare = async (op, params, positional) => {
|
|
344
|
+
if (ctx.api)
|
|
345
|
+
return ctx.api.call(op, params);
|
|
346
|
+
return ctx.mgmt[op]?.(...positional);
|
|
347
|
+
};
|
|
348
|
+
const shareError = (err, session_id) => ({
|
|
349
|
+
content: [{ type: "text", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err), session_id }) }],
|
|
350
|
+
isError: true,
|
|
351
|
+
});
|
|
352
|
+
server.registerTool("set_session_visibility", {
|
|
353
|
+
title: "Set Session Visibility",
|
|
354
|
+
description: "Set the sharing level of a session's tree (owner or admin only): "
|
|
355
|
+
+ "'private' (only owner + admins), 'shared_read' (every user can view), "
|
|
356
|
+
+ "'shared_write' (every user can view and send). Applies to the whole sub-agent tree.",
|
|
357
|
+
inputSchema: {
|
|
358
|
+
session_id: sessionIdShape().describe("Session whose tree visibility to set"),
|
|
359
|
+
visibility: z.enum(["private", "shared_read", "shared_write"]).describe("New visibility level"),
|
|
360
|
+
},
|
|
361
|
+
}, async ({ session_id, visibility }) => {
|
|
362
|
+
try {
|
|
363
|
+
await callShare("setSessionVisibility", { sessionId: session_id, visibility }, [session_id, visibility]);
|
|
364
|
+
return { content: [{ type: "text", text: JSON.stringify({ session_id, visibility }) }] };
|
|
365
|
+
}
|
|
366
|
+
catch (err) {
|
|
367
|
+
return shareError(err, session_id);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
server.registerTool("grant_session_share", {
|
|
371
|
+
title: "Grant Session Share",
|
|
372
|
+
description: "Grant a specific user read or write access to a session's tree (owner or admin only). "
|
|
373
|
+
+ "Refused with the reason in the error if you are not the owner/admin, or on a system session. "
|
|
374
|
+
+ "The grantee does NOT need to have signed in yet: list_known_users is only a lookup helper. "
|
|
375
|
+
+ "If the grantee's stable subject is unknown, pass their EMAIL as the subject — the grant "
|
|
376
|
+
+ "binds automatically the first time they sign in.",
|
|
377
|
+
inputSchema: {
|
|
378
|
+
session_id: sessionIdShape().describe("Session whose tree to share"),
|
|
379
|
+
provider: z.string().describe("Grantee auth provider (e.g. 'entra', 'dev')"),
|
|
380
|
+
subject: z.string().describe("Grantee stable subject id, or their email if they have never signed in"),
|
|
381
|
+
access: z.enum(["read", "write"]).describe("Access level to grant"),
|
|
382
|
+
email: z.string().nullish().describe("Optional grantee email for display"),
|
|
383
|
+
display_name: z.string().nullish().describe("Optional grantee display name"),
|
|
384
|
+
},
|
|
385
|
+
}, async ({ session_id, provider, subject, access, email, display_name }) => {
|
|
386
|
+
try {
|
|
387
|
+
const grantee = { provider, subject, email: email ?? null, displayName: display_name ?? null };
|
|
388
|
+
await callShare("grantSessionShare", { sessionId: session_id, user: grantee, access }, [session_id, grantee, access]);
|
|
389
|
+
return { content: [{ type: "text", text: JSON.stringify({ session_id, granted: { provider, subject, access } }) }] };
|
|
390
|
+
}
|
|
391
|
+
catch (err) {
|
|
392
|
+
return shareError(err, session_id);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
server.registerTool("revoke_session_share", {
|
|
396
|
+
title: "Revoke Session Share",
|
|
397
|
+
description: "Revoke a user's targeted share on a session's tree (owner or admin only).",
|
|
398
|
+
inputSchema: {
|
|
399
|
+
session_id: sessionIdShape().describe("Session whose share to revoke"),
|
|
400
|
+
provider: z.string().describe("Grantee auth provider"),
|
|
401
|
+
subject: z.string().describe("Grantee stable subject id"),
|
|
402
|
+
},
|
|
403
|
+
}, async ({ session_id, provider, subject }) => {
|
|
404
|
+
try {
|
|
405
|
+
await callShare("revokeSessionShare", { sessionId: session_id, user: { provider, subject } }, [session_id, { provider, subject }]);
|
|
406
|
+
return { content: [{ type: "text", text: JSON.stringify({ session_id, revoked: { provider, subject } }) }] };
|
|
407
|
+
}
|
|
408
|
+
catch (err) {
|
|
409
|
+
return shareError(err, session_id);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
server.registerTool("list_session_shares", {
|
|
413
|
+
title: "List Session Shares",
|
|
414
|
+
description: "List the targeted user grants on a session's tree (owner or admin only).",
|
|
415
|
+
inputSchema: {
|
|
416
|
+
session_id: sessionIdShape().describe("Session whose shares to list"),
|
|
417
|
+
},
|
|
418
|
+
}, async ({ session_id }) => {
|
|
419
|
+
try {
|
|
420
|
+
const shares = await callShare("listSessionShares", { sessionId: session_id }, [session_id]);
|
|
421
|
+
return { content: [{ type: "text", text: JSON.stringify({ session_id, shares: shares ?? [] }) }] };
|
|
422
|
+
}
|
|
423
|
+
catch (err) {
|
|
424
|
+
return shareError(err, session_id);
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
server.registerTool("list_known_users", {
|
|
428
|
+
title: "List Known Users",
|
|
429
|
+
description: "Directory of users who have signed in at least once (provider, subject, email, display name) — "
|
|
430
|
+
+ "a HELPER for resolving a grantee's stable subject by name/email before grant_session_share. "
|
|
431
|
+
+ "It is NOT an allowlist: grants may target someone who is not in this directory — even someone "
|
|
432
|
+
+ "who has never signed in. For such users pass their email as the subject; the grant binds "
|
|
433
|
+
+ "automatically when they first sign in.",
|
|
434
|
+
inputSchema: {
|
|
435
|
+
limit: z.number().int().min(1).max(2000).nullish().describe("Max entries to return (default 500)"),
|
|
436
|
+
},
|
|
437
|
+
}, async ({ limit }) => {
|
|
438
|
+
try {
|
|
439
|
+
const users = ctx.api
|
|
440
|
+
? await ctx.api.call("listKnownUsers", limit != null ? { limit } : {})
|
|
441
|
+
: await ctx.mgmt.listKnownUsers?.(limit != null ? { limit } : undefined);
|
|
442
|
+
return { content: [{ type: "text", text: JSON.stringify({ users: users ?? [] }) }] };
|
|
443
|
+
}
|
|
444
|
+
catch (err) {
|
|
445
|
+
return {
|
|
446
|
+
content: [{ type: "text", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
|
|
447
|
+
isError: true,
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
});
|
|
337
451
|
// 7. list_sessions — List all sessions with status
|
|
338
452
|
server.registerTool("list_sessions", {
|
|
339
453
|
title: "List Sessions",
|
|
340
454
|
description: "List all PilotSwarm sessions with their current status, model, agent info, and parent/child relationships. " +
|
|
341
|
-
"Use status_filter to narrow results (e.g. 'running', 'idle', 'waiting', 'completed', 'failed')."
|
|
455
|
+
"Use status_filter to narrow results (e.g. 'running', 'idle', 'waiting', 'completed', 'failed'). " +
|
|
456
|
+
"viewer_group_id is YOUR private group placement for the session's tree (groups are per-user organization).",
|
|
342
457
|
inputSchema: {
|
|
343
458
|
status_filter: z
|
|
344
459
|
.string()
|
|
@@ -402,6 +517,7 @@ export function registerSessionTools(server, ctx) {
|
|
|
402
517
|
agent_id: s.agentId ?? null,
|
|
403
518
|
is_system: s.isSystem ?? false,
|
|
404
519
|
parent_session_id: s.parentSessionId ?? null,
|
|
520
|
+
viewer_group_id: s.viewerGroupId ?? null,
|
|
405
521
|
iterations: s.iterations ?? 0,
|
|
406
522
|
wait_reason: s.waitReason ?? null,
|
|
407
523
|
error: s.error ?? null,
|