studiograph 1.3.3 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/orchestrator.d.ts +10 -0
- package/dist/agent/orchestrator.js +26 -7
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/skills/sync-configuration.md +4 -29
- package/dist/agent/skills/sync-setup.md +2 -4
- package/dist/agent/tools/graph-tools.d.ts +5 -1
- package/dist/agent/tools/graph-tools.js +161 -9
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/ops-tools.js +15 -126
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/permission-tools.d.ts +15 -14
- package/dist/agent/tools/permission-tools.js +65 -128
- package/dist/agent/tools/permission-tools.js.map +1 -1
- package/dist/agent/tools/sync-tools.d.ts +7 -6
- package/dist/agent/tools/sync-tools.js +205 -178
- package/dist/agent/tools/sync-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +13 -0
- package/dist/cli/commands/about.js +97 -0
- package/dist/cli/commands/about.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +5 -2
- package/dist/cli/commands/clone.js +131 -62
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +2 -16
- package/dist/cli/commands/connector.js +32 -109
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +0 -1
- package/dist/cli/commands/deploy.js +13 -103
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.js +6 -93
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.d.ts +3 -2
- package/dist/cli/commands/join.js +142 -97
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/redeploy.js +1 -2
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +1 -3
- package/dist/cli/commands/serve.js +29 -109
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/start.js +1 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync-collection.d.ts +14 -0
- package/dist/cli/commands/sync-collection.js +366 -0
- package/dist/cli/commands/sync-collection.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +4 -2
- package/dist/cli/commands/sync.js +529 -94
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +15 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +0 -13
- package/dist/cli/setup-wizard.js +6 -81
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/graph.d.ts +8 -2
- package/dist/core/graph.js +11 -7
- package/dist/core/graph.js.map +1 -1
- package/dist/core/types.d.ts +149 -21
- package/dist/core/types.js +16 -4
- package/dist/core/types.js.map +1 -1
- package/dist/core/workspace-manager.js +1 -5
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +11 -4
- package/dist/core/workspace.js +61 -26
- package/dist/core/workspace.js.map +1 -1
- package/dist/integrations/asana.d.ts +26 -0
- package/dist/integrations/asana.js +77 -0
- package/dist/integrations/asana.js.map +1 -0
- package/dist/integrations/figma-local.d.ts +16 -0
- package/dist/integrations/figma-local.js +10 -0
- package/dist/integrations/figma-local.js.map +1 -0
- package/dist/integrations/figma.d.ts +17 -0
- package/dist/integrations/figma.js +16 -0
- package/dist/integrations/figma.js.map +1 -0
- package/dist/integrations/granola.d.ts +24 -0
- package/dist/integrations/granola.js +59 -0
- package/dist/integrations/granola.js.map +1 -0
- package/dist/integrations/linear.d.ts +14 -0
- package/dist/integrations/linear.js +70 -0
- package/dist/integrations/linear.js.map +1 -0
- package/dist/integrations/paper-local.d.ts +14 -0
- package/dist/integrations/paper-local.js +10 -0
- package/dist/integrations/paper-local.js.map +1 -0
- package/dist/integrations/paper.d.ts +2 -0
- package/dist/integrations/paper.js +10 -0
- package/dist/integrations/paper.js.map +1 -0
- package/dist/integrations/pipedrive.d.ts +26 -0
- package/dist/integrations/pipedrive.js +97 -0
- package/dist/integrations/pipedrive.js.map +1 -0
- package/dist/integrations/registry.d.ts +15 -0
- package/dist/integrations/registry.js +27 -0
- package/dist/integrations/registry.js.map +1 -0
- package/dist/integrations/types.d.ts +34 -0
- package/dist/integrations/types.js +9 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +45 -31
- package/dist/mcp/connector-manager.js +164 -116
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/server-oauth-provider.d.ts +56 -0
- package/dist/mcp/server-oauth-provider.js +138 -0
- package/dist/mcp/server-oauth-provider.js.map +1 -0
- package/dist/server/chrome/chrome.css +142 -28
- package/dist/server/chrome/chrome.js +46 -220
- package/dist/server/collab-authority.d.ts +70 -0
- package/dist/server/collab-authority.js +218 -0
- package/dist/server/collab-authority.js.map +1 -0
- package/dist/server/collab.d.ts +29 -0
- package/dist/server/collab.js +195 -0
- package/dist/server/collab.js.map +1 -0
- package/dist/server/commit-scheduler.d.ts +39 -0
- package/dist/server/commit-scheduler.js +113 -0
- package/dist/server/commit-scheduler.js.map +1 -0
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +166 -55
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/auth-api.d.ts +6 -0
- package/dist/server/routes/auth-api.js +78 -0
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/chat.js +4 -0
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/collab.d.ts +6 -0
- package/dist/server/routes/collab.js +10 -0
- package/dist/server/routes/collab.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +23 -0
- package/dist/server/routes/git-http.js +251 -0
- package/dist/server/routes/git-http.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +6 -2
- package/dist/server/routes/graph-api.js +266 -82
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +12 -0
- package/dist/server/routes/mcp.js +35 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/permissions-api.d.ts +6 -4
- package/dist/server/routes/permissions-api.js +53 -167
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/sync-api.d.ts +26 -0
- package/dist/server/routes/sync-api.js +757 -0
- package/dist/server/routes/sync-api.js.map +1 -0
- package/dist/server/routes/ws.d.ts +9 -0
- package/dist/server/routes/ws.js +131 -0
- package/dist/server/routes/ws.js.map +1 -0
- package/dist/server/session-manager.d.ts +40 -0
- package/dist/server/session-manager.js +132 -0
- package/dist/server/session-manager.js.map +1 -0
- package/dist/server/ws-hub.d.ts +130 -0
- package/dist/server/ws-hub.js +250 -0
- package/dist/server/ws-hub.js.map +1 -0
- package/dist/server/yjs-manager.d.ts +59 -0
- package/dist/server/yjs-manager.js +194 -0
- package/dist/server/yjs-manager.js.map +1 -0
- package/dist/services/auth-service.d.ts +74 -0
- package/dist/services/auth-service.js +286 -6
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/git.d.ts +6 -0
- package/dist/services/git.js +32 -2
- package/dist/services/git.js.map +1 -1
- package/dist/services/sync/collection-sync.d.ts +73 -0
- package/dist/services/sync/collection-sync.js +726 -0
- package/dist/services/sync/collection-sync.js.map +1 -0
- package/dist/services/sync/commit.js +5 -20
- package/dist/services/sync/commit.js.map +1 -1
- package/dist/services/sync/data-fetcher.d.ts +31 -0
- package/dist/services/sync/data-fetcher.js +12 -0
- package/dist/services/sync/data-fetcher.js.map +1 -0
- package/dist/services/sync/entity-refresh.d.ts +30 -0
- package/dist/services/sync/entity-refresh.js +275 -0
- package/dist/services/sync/entity-refresh.js.map +1 -0
- package/dist/services/sync/frontmatter-extractor.d.ts +2 -2
- package/dist/services/sync/frontmatter-extractor.js +1 -2
- package/dist/services/sync/frontmatter-extractor.js.map +1 -1
- package/dist/services/sync/graph-match.js +1 -1
- package/dist/services/sync/graph-match.js.map +1 -1
- package/dist/services/sync/mcp-client.d.ts +16 -4
- package/dist/services/sync/mcp-client.js +34 -20
- package/dist/services/sync/mcp-client.js.map +1 -1
- package/dist/services/sync/prompts.js +1 -1
- package/dist/services/sync/reconciler.js +1 -2
- package/dist/services/sync/reconciler.js.map +1 -1
- package/dist/services/sync/rest-client.d.ts +40 -0
- package/dist/services/sync/rest-client.js +100 -0
- package/dist/services/sync/rest-client.js.map +1 -0
- package/dist/services/sync/source-config.d.ts +23 -1
- package/dist/services/sync/source-config.js +112 -16
- package/dist/services/sync/source-config.js.map +1 -1
- package/dist/services/sync/source-definitions/asana.d.ts +3 -4
- package/dist/services/sync/source-definitions/asana.js +7 -13
- package/dist/services/sync/source-definitions/asana.js.map +1 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +5 -18
- package/dist/services/sync/source-definitions/definitions.js +4 -22
- package/dist/services/sync/source-definitions/definitions.js.map +1 -1
- package/dist/services/sync/source-definitions/granola.d.ts +1 -1
- package/dist/services/sync/source-definitions/granola.js +11 -18
- package/dist/services/sync/source-definitions/granola.js.map +1 -1
- package/dist/services/sync/source-definitions/linear.d.ts +1 -1
- package/dist/services/sync/source-definitions/linear.js +17 -15
- package/dist/services/sync/source-definitions/linear.js.map +1 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +1 -1
- package/dist/services/sync/source-definitions/pipedrive.js +6 -15
- package/dist/services/sync/source-definitions/pipedrive.js.map +1 -1
- package/dist/services/sync/staging.js +1 -2
- package/dist/services/sync/staging.js.map +1 -1
- package/dist/services/sync/structured-extractor.d.ts +8 -2
- package/dist/services/sync/structured-extractor.js +243 -35
- package/dist/services/sync/structured-extractor.js.map +1 -1
- package/dist/services/sync/types.d.ts +192 -23
- package/dist/services/sync/unstructured-extractor.d.ts +1 -3
- package/dist/services/sync/unstructured-extractor.js +2 -14
- package/dist/services/sync/unstructured-extractor.js.map +1 -1
- package/dist/utils/git.d.ts +33 -20
- package/dist/utils/git.js +119 -62
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/preflight.d.ts +1 -15
- package/dist/utils/preflight.js +1 -35
- package/dist/utils/preflight.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.CupILLQs.css +1 -0
- package/dist/web/_app/immutable/assets/3.CtJi4Cy9.css +1 -0
- package/dist/web/_app/immutable/assets/5.CydFyZSu.css +1 -0
- package/dist/web/_app/immutable/assets/6.kqeOo0OW.css +1 -0
- package/dist/web/_app/immutable/assets/7.CseIx7qQ.css +1 -0
- package/dist/web/_app/immutable/assets/8.BYpFDZHK.css +1 -0
- package/dist/web/_app/immutable/assets/AppShell.Ch_ef9hJ.css +1 -0
- package/dist/web/_app/immutable/assets/ChatPanel.CP-_8txt.css +1 -0
- package/dist/web/_app/immutable/chunks/0oxpWEgM.js +1 -0
- package/dist/web/_app/immutable/chunks/B1y7Wy5O.js +18 -0
- package/dist/web/_app/immutable/chunks/B7eduG_j.js +64 -0
- package/dist/web/_app/immutable/chunks/BBLgaWN8.js +1 -0
- package/dist/web/_app/immutable/chunks/BCB5cYCz.js +2 -0
- package/dist/web/_app/immutable/chunks/{aosHekRC.js → BPUy9_sS.js} +1 -1
- package/dist/web/_app/immutable/chunks/BVBRzmeQ.js +7 -0
- package/dist/web/_app/immutable/chunks/{CUzqHQY_.js → BXuvR8Ks.js} +2 -1
- package/dist/web/_app/immutable/chunks/BeBar3OL.js +1 -0
- package/dist/web/_app/immutable/chunks/BuOTIbJu.js +1 -0
- package/dist/web/_app/immutable/chunks/CLFba8FK.js +5 -0
- package/dist/web/_app/immutable/chunks/CQCkXCml.js +1 -0
- package/dist/web/_app/immutable/chunks/CXuhHL4d.js +1 -0
- package/dist/web/_app/immutable/chunks/Cg9NOuOl.js +27 -0
- package/dist/web/_app/immutable/chunks/Cs5oz2oJ.js +5 -0
- package/dist/web/_app/immutable/chunks/Cs_ROD7H.js +2 -0
- package/dist/web/_app/immutable/chunks/D2aTbzFm.js +3 -0
- package/dist/web/_app/immutable/chunks/D4FXhiC2.js +1 -0
- package/dist/web/_app/immutable/chunks/D4VHRYeB.js +1 -0
- package/dist/web/_app/immutable/chunks/DCGSm8Hl.js +1 -0
- package/dist/web/_app/immutable/chunks/DP09rP34.js +2 -0
- package/dist/web/_app/immutable/chunks/DiP47fAp.js +1 -0
- package/dist/web/_app/immutable/chunks/DptGlK8O.js +1 -0
- package/dist/web/_app/immutable/chunks/O0fx2ss6.js +1 -0
- package/dist/web/_app/immutable/chunks/xBRYfpah.js +1 -0
- package/dist/web/_app/immutable/entry/app.FgnywZP_.js +2 -0
- package/dist/web/_app/immutable/entry/start.Bsa-zlPf.js +1 -0
- package/dist/web/_app/immutable/nodes/0.D3SW-LMc.js +10 -0
- package/dist/web/_app/immutable/nodes/1.y0c5TQTP.js +1 -0
- package/dist/web/_app/immutable/nodes/2.BQfSep9-.js +1 -0
- package/dist/web/_app/immutable/nodes/3.CC4Y-xMM.js +11 -0
- package/dist/web/_app/immutable/nodes/{5.BBpmYkAu.js → 4.Dp0Z-oPW.js} +2 -2
- package/dist/web/_app/immutable/nodes/5.gjZ03DON.js +2 -0
- package/dist/web/_app/immutable/nodes/6.dRNIwcJQ.js +1 -0
- package/dist/web/_app/immutable/nodes/7.I4Gjes3o.js +2 -0
- package/dist/web/_app/immutable/nodes/8.Dj14D7uH.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +10 -12
- package/package.json +12 -2
- package/dist/web/_app/immutable/assets/0.CDbX4Cwz.css +0 -1
- package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +0 -1
- package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +0 -1
- package/dist/web/_app/immutable/assets/6.Bm2i7O0j.css +0 -1
- package/dist/web/_app/immutable/assets/AppShell.D0rmbdqF.css +0 -1
- package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +0 -1
- package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +0 -1
- package/dist/web/_app/immutable/chunks/479TgXB4.js +0 -1
- package/dist/web/_app/immutable/chunks/4QY4j-jX.js +0 -1
- package/dist/web/_app/immutable/chunks/BFb0g4TQ.js +0 -64
- package/dist/web/_app/immutable/chunks/Bopa-Ask.js +0 -1
- package/dist/web/_app/immutable/chunks/COwytaCP.js +0 -1
- package/dist/web/_app/immutable/chunks/DEJSHbC3.js +0 -1
- package/dist/web/_app/immutable/chunks/DNywhIex.js +0 -23
- package/dist/web/_app/immutable/chunks/DTUXhwEY.js +0 -1
- package/dist/web/_app/immutable/chunks/DThXpa0U.js +0 -6
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +0 -18
- package/dist/web/_app/immutable/chunks/Dml-u95b.js +0 -2
- package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +0 -5
- package/dist/web/_app/immutable/chunks/DtVH--hH.js +0 -6
- package/dist/web/_app/immutable/chunks/DvKVaE7M.js +0 -1
- package/dist/web/_app/immutable/chunks/MbiSz-iW.js +0 -2
- package/dist/web/_app/immutable/chunks/bSAC733J.js +0 -1
- package/dist/web/_app/immutable/entry/app.BvodXQQ0.js +0 -2
- package/dist/web/_app/immutable/entry/start.Bkui3Kyw.js +0 -1
- package/dist/web/_app/immutable/nodes/0.DfbCOBhn.js +0 -2
- package/dist/web/_app/immutable/nodes/1.vtxUGpe6.js +0 -1
- package/dist/web/_app/immutable/nodes/2.Cq29oW4h.js +0 -1
- package/dist/web/_app/immutable/nodes/3.SquslPZy.js +0 -1
- package/dist/web/_app/immutable/nodes/4.COV8FR8b.js +0 -16
- package/dist/web/_app/immutable/nodes/6.BBbh6z9I.js +0 -2
- /package/dist/web/_app/immutable/assets/{5.BhKgiXd2.css → 4.BhKgiXd2.css} +0 -0
|
@@ -1,61 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Permission Tools for Studiograph Agent
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Wraps GitHubService methods so the agent can manage permissions conversationally.
|
|
4
|
+
* Self-hosted user and per-collection access management backed by AuthService.
|
|
6
5
|
*/
|
|
7
6
|
import { Type as T } from '@sinclair/typebox';
|
|
8
7
|
import { wrapToolResult } from './graph-tools.js';
|
|
9
|
-
|
|
10
|
-
import { GitHubService } from '../../services/github-service.js';
|
|
11
|
-
function getService(config) {
|
|
12
|
-
const org = config.github?.org;
|
|
13
|
-
if (!org)
|
|
14
|
-
return null;
|
|
15
|
-
const stored = loadToken();
|
|
16
|
-
if (!stored)
|
|
17
|
-
return null;
|
|
18
|
-
return new GitHubService(getAuthenticatedOctokit(stored.token), org);
|
|
19
|
-
}
|
|
20
|
-
function extractRepoName(url) {
|
|
21
|
-
if (!url)
|
|
22
|
-
return undefined;
|
|
23
|
-
const match = url.match(/\/([^/]+?)(?:\.git)?$/);
|
|
24
|
-
return match?.[1];
|
|
25
|
-
}
|
|
26
|
-
function resolveRepoName(config, collection) {
|
|
27
|
-
const repo = config.repos?.find(r => r.name === collection);
|
|
28
|
-
if (!repo)
|
|
29
|
-
return null;
|
|
30
|
-
return extractRepoName(repo.github_url) ?? repo.name;
|
|
31
|
-
}
|
|
32
|
-
const PERMISSION_LABELS = {
|
|
33
|
-
pull: 'Read',
|
|
34
|
-
push: 'Member',
|
|
35
|
-
admin: 'Admin',
|
|
36
|
-
maintain: 'Maintain',
|
|
37
|
-
triage: 'Triage',
|
|
38
|
-
};
|
|
39
|
-
function friendlyPermission(perm) {
|
|
40
|
-
return PERMISSION_LABELS[perm] ?? perm;
|
|
41
|
-
}
|
|
42
|
-
export function createPermissionTools(config) {
|
|
8
|
+
export function createPermissionTools(authService) {
|
|
43
9
|
return [
|
|
44
10
|
{
|
|
45
|
-
name: '
|
|
46
|
-
label: 'List
|
|
47
|
-
description: 'List all
|
|
11
|
+
name: 'permission_list_users',
|
|
12
|
+
label: 'List Users',
|
|
13
|
+
description: 'List all workspace users with their roles and collection access.',
|
|
48
14
|
parameters: T.Object({}),
|
|
49
15
|
execute: async (_toolCallId, _params) => {
|
|
50
|
-
const service = getService(config);
|
|
51
|
-
if (!service)
|
|
52
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
53
16
|
try {
|
|
54
|
-
const
|
|
55
|
-
return wrapToolResult(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
17
|
+
const users = authService.listUsers();
|
|
18
|
+
return wrapToolResult(users.map(u => ({
|
|
19
|
+
id: u.id,
|
|
20
|
+
email: u.email,
|
|
21
|
+
displayName: u.displayName,
|
|
22
|
+
role: u.role,
|
|
23
|
+
collections: u.role === 'admin' ? '(all — admin)' : authService.getUserCollections(u.id),
|
|
59
24
|
})));
|
|
60
25
|
}
|
|
61
26
|
catch (err) {
|
|
@@ -64,44 +29,44 @@ export function createPermissionTools(config) {
|
|
|
64
29
|
},
|
|
65
30
|
},
|
|
66
31
|
{
|
|
67
|
-
name: '
|
|
68
|
-
label: '
|
|
69
|
-
description: '
|
|
32
|
+
name: 'permission_create_user',
|
|
33
|
+
label: 'Create User',
|
|
34
|
+
description: 'Create a new workspace user with email, password, name, and role. Always confirm with the user before calling this.',
|
|
70
35
|
parameters: T.Object({
|
|
71
|
-
|
|
36
|
+
email: T.String({ description: 'Email address' }),
|
|
37
|
+
password: T.String({ description: 'Password (minimum 8 characters)' }),
|
|
38
|
+
name: T.String({ description: 'Display name' }),
|
|
39
|
+
role: T.Optional(T.String({ description: 'Role: admin or member. Defaults to member.' })),
|
|
72
40
|
}),
|
|
73
41
|
execute: async (_toolCallId, params) => {
|
|
74
|
-
const service = getService(config);
|
|
75
|
-
if (!service)
|
|
76
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
77
42
|
try {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
await service.inviteUser(params.username);
|
|
82
|
-
return wrapToolResult({ status: 'invited', username: params.username });
|
|
43
|
+
const role = (params.role === 'admin' ? 'admin' : 'member');
|
|
44
|
+
const user = authService.createUser(params.email, params.password, params.name, role);
|
|
45
|
+
return wrapToolResult({ created: true, email: user.email, displayName: user.displayName, role: user.role });
|
|
83
46
|
}
|
|
84
47
|
catch (err) {
|
|
85
|
-
if (err?.status === 422)
|
|
86
|
-
return wrapToolResult({ status: 'already_invited', username: params.username });
|
|
87
48
|
return wrapToolResult({ error: err.message });
|
|
88
49
|
}
|
|
89
50
|
},
|
|
90
51
|
},
|
|
91
52
|
{
|
|
92
|
-
name: '
|
|
93
|
-
label: '
|
|
94
|
-
description: '
|
|
53
|
+
name: 'permission_delete_user',
|
|
54
|
+
label: 'Delete User',
|
|
55
|
+
description: 'Delete a workspace user by email. Always confirm with the user before calling this.',
|
|
95
56
|
parameters: T.Object({
|
|
96
|
-
|
|
57
|
+
email: T.String({ description: 'Email of the user to delete' }),
|
|
97
58
|
}),
|
|
98
59
|
execute: async (_toolCallId, params) => {
|
|
99
|
-
const service = getService(config);
|
|
100
|
-
if (!service)
|
|
101
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
102
60
|
try {
|
|
103
|
-
|
|
104
|
-
|
|
61
|
+
const users = authService.listUsers();
|
|
62
|
+
const target = users.find(u => u.email === params.email.toLowerCase().trim());
|
|
63
|
+
if (!target)
|
|
64
|
+
return wrapToolResult({ error: `User "${params.email}" not found` });
|
|
65
|
+
if (target.role === 'admin' && users.filter(u => u.role === 'admin').length <= 1) {
|
|
66
|
+
return wrapToolResult({ error: 'Cannot delete the last admin' });
|
|
67
|
+
}
|
|
68
|
+
const deleted = authService.deleteUser(params.email);
|
|
69
|
+
return wrapToolResult(deleted ? { ok: true, email: params.email } : { error: `User "${params.email}" not found` });
|
|
105
70
|
}
|
|
106
71
|
catch (err) {
|
|
107
72
|
return wrapToolResult({ error: err.message });
|
|
@@ -109,31 +74,23 @@ export function createPermissionTools(config) {
|
|
|
109
74
|
},
|
|
110
75
|
},
|
|
111
76
|
{
|
|
112
|
-
name: '
|
|
113
|
-
label: '
|
|
114
|
-
description: '
|
|
77
|
+
name: 'permission_grant_access',
|
|
78
|
+
label: 'Grant Collection Access',
|
|
79
|
+
description: 'Grant a user access to a collection. Specify user by email and collection by name. Always confirm with the user before calling this.',
|
|
115
80
|
parameters: T.Object({
|
|
81
|
+
email: T.String({ description: 'Email of the user to grant access to' }),
|
|
116
82
|
collection: T.String({ description: 'Collection name' }),
|
|
117
83
|
}),
|
|
118
84
|
execute: async (_toolCallId, params) => {
|
|
119
|
-
const service = getService(config);
|
|
120
|
-
if (!service)
|
|
121
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
122
|
-
const repoName = resolveRepoName(config, params.collection);
|
|
123
|
-
if (!repoName)
|
|
124
|
-
return wrapToolResult({ error: `Collection "${params.collection}" not found` });
|
|
125
85
|
try {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
pending: c.pending ?? false,
|
|
135
|
-
})),
|
|
136
|
-
});
|
|
86
|
+
const users = authService.listUsers();
|
|
87
|
+
const user = users.find(u => u.email === params.email.toLowerCase().trim());
|
|
88
|
+
if (!user)
|
|
89
|
+
return wrapToolResult({ error: `User "${params.email}" not found` });
|
|
90
|
+
if (user.role === 'admin')
|
|
91
|
+
return wrapToolResult({ info: 'Admins already have access to all collections' });
|
|
92
|
+
authService.grantCollectionAccess(user.id, params.collection);
|
|
93
|
+
return wrapToolResult({ ok: true, email: params.email, collection: params.collection });
|
|
137
94
|
}
|
|
138
95
|
catch (err) {
|
|
139
96
|
return wrapToolResult({ error: err.message });
|
|
@@ -141,30 +98,21 @@ export function createPermissionTools(config) {
|
|
|
141
98
|
},
|
|
142
99
|
},
|
|
143
100
|
{
|
|
144
|
-
name: '
|
|
145
|
-
label: '
|
|
146
|
-
description: '
|
|
101
|
+
name: 'permission_revoke_access',
|
|
102
|
+
label: 'Revoke Collection Access',
|
|
103
|
+
description: 'Revoke a user\'s access to a collection. Always confirm with the user before calling this.',
|
|
147
104
|
parameters: T.Object({
|
|
105
|
+
email: T.String({ description: 'Email of the user to revoke access from' }),
|
|
148
106
|
collection: T.String({ description: 'Collection name' }),
|
|
149
|
-
username: T.String({ description: 'GitHub username to grant access to' }),
|
|
150
|
-
permission: T.Optional(T.String({ description: 'Permission level: pull (read), push (member), or admin. Defaults to push.' })),
|
|
151
107
|
}),
|
|
152
108
|
execute: async (_toolCallId, params) => {
|
|
153
|
-
const service = getService(config);
|
|
154
|
-
if (!service)
|
|
155
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
156
|
-
const repoName = resolveRepoName(config, params.collection);
|
|
157
|
-
if (!repoName)
|
|
158
|
-
return wrapToolResult({ error: `Collection "${params.collection}" not found` });
|
|
159
109
|
try {
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
status: result.status,
|
|
167
|
-
});
|
|
110
|
+
const users = authService.listUsers();
|
|
111
|
+
const user = users.find(u => u.email === params.email.toLowerCase().trim());
|
|
112
|
+
if (!user)
|
|
113
|
+
return wrapToolResult({ error: `User "${params.email}" not found` });
|
|
114
|
+
authService.revokeCollectionAccess(user.id, params.collection);
|
|
115
|
+
return wrapToolResult({ ok: true, email: params.email, collection: params.collection });
|
|
168
116
|
}
|
|
169
117
|
catch (err) {
|
|
170
118
|
return wrapToolResult({ error: err.message });
|
|
@@ -172,30 +120,19 @@ export function createPermissionTools(config) {
|
|
|
172
120
|
},
|
|
173
121
|
},
|
|
174
122
|
{
|
|
175
|
-
name: '
|
|
176
|
-
label: '
|
|
177
|
-
description: '
|
|
123
|
+
name: 'permission_list_collection_access',
|
|
124
|
+
label: 'List Collection Access',
|
|
125
|
+
description: 'List users who have been granted access to a specific collection.',
|
|
178
126
|
parameters: T.Object({
|
|
179
127
|
collection: T.String({ description: 'Collection name' }),
|
|
180
|
-
username: T.String({ description: 'GitHub username to revoke access from' }),
|
|
181
128
|
}),
|
|
182
129
|
execute: async (_toolCallId, params) => {
|
|
183
|
-
const service = getService(config);
|
|
184
|
-
if (!service)
|
|
185
|
-
return wrapToolResult({ error: 'GitHub not configured' });
|
|
186
|
-
const repoName = resolveRepoName(config, params.collection);
|
|
187
|
-
if (!repoName)
|
|
188
|
-
return wrapToolResult({ error: `Collection "${params.collection}" not found` });
|
|
189
130
|
try {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
await service.revokeUserAccess(repoName, params.username);
|
|
196
|
-
}
|
|
197
|
-
catch { /* not a collaborator */ }
|
|
198
|
-
return wrapToolResult({ ok: true, collection: params.collection, username: params.username });
|
|
131
|
+
const users = authService.getCollectionUsers(params.collection);
|
|
132
|
+
return wrapToolResult({
|
|
133
|
+
collection: params.collection,
|
|
134
|
+
users: users.map(u => ({ email: u.email, displayName: u.displayName, role: u.role })),
|
|
135
|
+
});
|
|
199
136
|
}
|
|
200
137
|
catch (err) {
|
|
201
138
|
return wrapToolResult({ error: err.message });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/permission-tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"permission-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/permission-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Sync &
|
|
2
|
+
* Sync & Workspace Tools for Studiograph Agent
|
|
3
3
|
*
|
|
4
|
-
* These tools allow the agent to
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* - Manage
|
|
4
|
+
* These tools allow the agent to:
|
|
5
|
+
* - Sync external data into collections (collection-scoped sync)
|
|
6
|
+
* - Refresh individual synced entities from their source
|
|
7
|
+
* - Manage workspace git operations (commit, push, pull, status)
|
|
8
|
+
* - Inspect MCP connectors for sync configuration
|
|
8
9
|
*/
|
|
9
10
|
import type { WorkspaceConfig } from '../../core/types.js';
|
|
10
11
|
import type { ConnectorRegistry } from './connector-tools.js';
|
|
@@ -23,7 +24,7 @@ export declare function createSyncTools(workspacePath: string, workspaceConfig:
|
|
|
23
24
|
label: string;
|
|
24
25
|
description: string;
|
|
25
26
|
parameters: import("@sinclair/typebox").TObject<{}>;
|
|
26
|
-
execute: (toolCallId: string,
|
|
27
|
+
execute: (toolCallId: string, _params: any) => Promise<{
|
|
27
28
|
content: {
|
|
28
29
|
type: "text";
|
|
29
30
|
text: string;
|