studiograph 1.3.3-next.9 → 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 +2 -0
- package/dist/agent/orchestrator.js +13 -5
- 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/ops-tools.js +15 -126
- package/dist/agent/tools/ops-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.js +51 -1
- 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.js +518 -82
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +12 -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/types.d.ts +140 -21
- package/dist/core/types.js +15 -4
- package/dist/core/types.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 +51 -25
- 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 +1 -1
- package/dist/server/commit-scheduler.js +18 -4
- package/dist/server/commit-scheduler.js.map +1 -1
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +89 -18
- 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 +55 -0
- package/dist/server/routes/auth-api.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 +1 -1
- package/dist/server/routes/git-http.js +53 -15
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api.d.ts +2 -2
- package/dist/server/routes/graph-api.js +59 -55
- 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 +2 -1
- package/dist/server/routes/permissions-api.js +16 -2
- 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 +4 -2
- package/dist/server/routes/ws.js +100 -4
- package/dist/server/routes/ws.js.map +1 -1
- 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 +95 -1
- package/dist/server/ws-hub.js +192 -5
- package/dist/server/ws-hub.js.map +1 -1
- 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 +30 -2
- package/dist/services/auth-service.js +116 -11
- 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 +24 -20
- package/dist/utils/git.js +99 -65
- 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.Sm6jB3a0.css → 8.BYpFDZHK.css} +1 -1
- 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/4.Dp0Z-oPW.js +4 -0
- 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 +4 -2
- package/dist/web/_app/immutable/assets/0.CF0XhAap.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/7.Cn2DG-J6.css +0 -1
- package/dist/web/_app/immutable/assets/AppShell.CztjTuKY.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/4QY4j-jX.js +0 -1
- package/dist/web/_app/immutable/chunks/B3Kdf1r4.js +0 -6
- package/dist/web/_app/immutable/chunks/BIo3H1KR.js +0 -2
- package/dist/web/_app/immutable/chunks/BJLM1w2L.js +0 -23
- package/dist/web/_app/immutable/chunks/BLCwEMdm.js +0 -1
- package/dist/web/_app/immutable/chunks/BSYvCVJt.js +0 -1
- package/dist/web/_app/immutable/chunks/Ba5JX1o9.js +0 -1
- package/dist/web/_app/immutable/chunks/Bj34y868.js +0 -64
- package/dist/web/_app/immutable/chunks/BrWpHgBJ.js +0 -1
- package/dist/web/_app/immutable/chunks/C3g_lwol.js +0 -1
- package/dist/web/_app/immutable/chunks/CXnPm09s.js +0 -1
- package/dist/web/_app/immutable/chunks/ClOTom10.js +0 -1
- package/dist/web/_app/immutable/chunks/CtT4aw_G.js +0 -1
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +0 -18
- 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/Dzd9kdLj.js +0 -2
- package/dist/web/_app/immutable/chunks/L91a_BGe.js +0 -1
- package/dist/web/_app/immutable/chunks/bHAllEMt.js +0 -1
- package/dist/web/_app/immutable/entry/app.CdrgaaFb.js +0 -2
- package/dist/web/_app/immutable/entry/start.t9LMjt48.js +0 -1
- package/dist/web/_app/immutable/nodes/0.P-Xfebn4.js +0 -2
- package/dist/web/_app/immutable/nodes/1.DiZlq1e6.js +0 -1
- package/dist/web/_app/immutable/nodes/2.ByIZ5J2p.js +0 -1
- package/dist/web/_app/immutable/nodes/3.D7JhktsZ.js +0 -1
- package/dist/web/_app/immutable/nodes/4.BtMeWbPx.js +0 -16
- package/dist/web/_app/immutable/nodes/5.CCYG1pbQ.js +0 -4
- package/dist/web/_app/immutable/nodes/6.CL_Ah04j.js +0 -2
- package/dist/web/_app/immutable/nodes/7.BMTaosAj.js +0 -1
- package/dist/web/_app/immutable/nodes/8.mrPg67cz.js +0 -1
- /package/dist/web/_app/immutable/assets/{5.BhKgiXd2.css → 4.BhKgiXd2.css} +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CollabServer — real-time co-editing via Hocuspocus (Yjs CRDT).
|
|
3
|
+
*
|
|
4
|
+
* Each entity body is a shared Y.Text document named "{repo}/{entityType}/{entityId}".
|
|
5
|
+
* Frontmatter is NOT part of the shared document (edited via property inputs separately).
|
|
6
|
+
*
|
|
7
|
+
* - onAuthenticate: verifies __sg_token cookie or Hocuspocus token param
|
|
8
|
+
* - onLoadDocument: seeds Y.Text from the entity's body on disk (first connect only)
|
|
9
|
+
* - onStoreDocument: persists the merged body back to disk after debounce (2s idle)
|
|
10
|
+
*/
|
|
11
|
+
import { Hocuspocus } from '@hocuspocus/server';
|
|
12
|
+
import * as Y from 'yjs';
|
|
13
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
14
|
+
import { join, dirname } from 'node:path';
|
|
15
|
+
export class CollabServer {
|
|
16
|
+
workspacePath;
|
|
17
|
+
workspaceManager;
|
|
18
|
+
sessionManager;
|
|
19
|
+
authService;
|
|
20
|
+
hocus;
|
|
21
|
+
constructor(workspacePath, workspaceManager, sessionManager, authService) {
|
|
22
|
+
this.workspacePath = workspacePath;
|
|
23
|
+
this.workspaceManager = workspaceManager;
|
|
24
|
+
this.sessionManager = sessionManager;
|
|
25
|
+
this.authService = authService;
|
|
26
|
+
this.hocus = new Hocuspocus({
|
|
27
|
+
debounce: 2000,
|
|
28
|
+
maxDebounce: 10000,
|
|
29
|
+
quiet: true,
|
|
30
|
+
onAuthenticate: this.onAuthenticate.bind(this),
|
|
31
|
+
onLoadDocument: this.onLoadDocument.bind(this),
|
|
32
|
+
onStoreDocument: this.onStoreDocument.bind(this),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async onAuthenticate(payload) {
|
|
36
|
+
const { token, requestHeaders, documentName } = payload;
|
|
37
|
+
// Browsers automatically send cookies with the WS upgrade request.
|
|
38
|
+
// Fall back to the Hocuspocus token param for non-browser clients.
|
|
39
|
+
const cookieToken = parseCookie(requestHeaders.cookie ?? '', '__sg_token');
|
|
40
|
+
const resolvedToken = cookieToken || token || '';
|
|
41
|
+
const [repo] = documentName.split('/');
|
|
42
|
+
if (!this.authService.hasUsers()) {
|
|
43
|
+
return { userId: 'anon', userName: 'Anonymous', userEmail: 'anon@local' };
|
|
44
|
+
}
|
|
45
|
+
if (!resolvedToken)
|
|
46
|
+
throw new Error('Unauthorized');
|
|
47
|
+
const user = this.authService.verifyToken(resolvedToken);
|
|
48
|
+
if (!user)
|
|
49
|
+
throw new Error('Invalid token');
|
|
50
|
+
// Check collection-level access
|
|
51
|
+
if (user.role !== 'admin' && repo) {
|
|
52
|
+
const collections = this.authService.getUserCollections(user.id);
|
|
53
|
+
if (!collections.includes(repo))
|
|
54
|
+
throw new Error('Forbidden');
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
userId: String(user.id),
|
|
58
|
+
userName: user.displayName,
|
|
59
|
+
userEmail: user.email,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
yjsStatePath(repo, entityType, entityId) {
|
|
63
|
+
return join(this.workspacePath, '.studiograph', 'yjs', repo, entityType, `${entityId}.bin`);
|
|
64
|
+
}
|
|
65
|
+
async onLoadDocument(payload) {
|
|
66
|
+
const { document, documentName } = payload;
|
|
67
|
+
const [repo, entityType, entityId] = documentName.split('/');
|
|
68
|
+
if (!repo || !entityType || !entityId)
|
|
69
|
+
return;
|
|
70
|
+
// Restore persisted Y state first — this preserves vector clocks so the client
|
|
71
|
+
// merge is a no-op rather than a duplicate insert.
|
|
72
|
+
try {
|
|
73
|
+
const statePath = this.yjsStatePath(repo, entityType, entityId);
|
|
74
|
+
if (existsSync(statePath)) {
|
|
75
|
+
Y.applyUpdate(document, readFileSync(statePath));
|
|
76
|
+
console.log(`[collab] onLoadDocument ${documentName}: restored from .bin (yText length: ${document.getText('content').length})`);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.warn(`[collab] onLoadDocument ${documentName}: .bin corrupt/unreadable, falling through to seed`, err.message);
|
|
82
|
+
}
|
|
83
|
+
// No persisted Y state yet (first load) — seed from disk content.
|
|
84
|
+
// CRITICAL: persist .bin immediately after seeding so that if the doc is
|
|
85
|
+
// destroyed and recreated (user navigates away and back before debounce),
|
|
86
|
+
// the next onLoadDocument restores from .bin with matching vector clocks.
|
|
87
|
+
// Without this, the client's cached Yjs state has operations the new server
|
|
88
|
+
// doc has never seen, causing them to be replayed as new inserts → duplication.
|
|
89
|
+
try {
|
|
90
|
+
const graph = this.workspaceManager.getGraph(repo);
|
|
91
|
+
const entity = graph.get(entityType, entityId);
|
|
92
|
+
const body = entity?.document?.content ?? '';
|
|
93
|
+
if (body) {
|
|
94
|
+
const yText = document.getText('content');
|
|
95
|
+
const preLen = yText.length;
|
|
96
|
+
document.transact(() => {
|
|
97
|
+
if (yText.length > 0)
|
|
98
|
+
yText.delete(0, yText.length);
|
|
99
|
+
yText.insert(0, body);
|
|
100
|
+
});
|
|
101
|
+
console.log(`[collab] onLoadDocument ${documentName}: seeded from disk (pre: ${preLen}, post: ${yText.length}, disk: ${body.length})`);
|
|
102
|
+
// Persist Y state immediately so subsequent loads use .bin path
|
|
103
|
+
try {
|
|
104
|
+
const statePath = this.yjsStatePath(repo, entityType, entityId);
|
|
105
|
+
mkdirSync(dirname(statePath), { recursive: true });
|
|
106
|
+
writeFileSync(statePath, Buffer.from(Y.encodeStateAsUpdate(document)));
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Non-fatal but increases duplication risk on rapid navigation
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Entity not found or unreadable — leave the doc empty, client will handle it
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async onStoreDocument(payload) {
|
|
118
|
+
const { document, documentName, context } = payload;
|
|
119
|
+
const [repo, entityType, entityId] = documentName.split('/');
|
|
120
|
+
if (!repo || !entityType || !entityId)
|
|
121
|
+
return;
|
|
122
|
+
const ctx = context;
|
|
123
|
+
const gitUser = {
|
|
124
|
+
id: ctx?.userId ?? 'collab',
|
|
125
|
+
name: ctx?.userName ?? 'Collab',
|
|
126
|
+
email: ctx?.userEmail ?? 'collab@studiograph',
|
|
127
|
+
};
|
|
128
|
+
try {
|
|
129
|
+
const graph = this.workspaceManager.getGraph(repo);
|
|
130
|
+
const body = document.getText('content').toString();
|
|
131
|
+
const existing = graph.get(entityType, entityId);
|
|
132
|
+
const existingBody = existing?.document?.content ?? '';
|
|
133
|
+
// Skip write if content hasn't changed. Hocuspocus fires onStoreDocument
|
|
134
|
+
// whenever all clients disconnect (even read-only views), so without this
|
|
135
|
+
// guard every note visit creates a session and triggers a spurious git commit
|
|
136
|
+
// + "X saved changes" toast for other users.
|
|
137
|
+
if (body === existingBody)
|
|
138
|
+
return;
|
|
139
|
+
// Guard against CRDT duplication: if the Y.Text body contains the existing
|
|
140
|
+
// body repeated (a known failure mode when Y state is lost and re-seeded on
|
|
141
|
+
// top of a stale client doc), skip the write and log diagnostics.
|
|
142
|
+
if (existingBody && body.length > existingBody.length && body.startsWith(existingBody)
|
|
143
|
+
&& body.slice(existingBody.length).trim() === existingBody.trim()) {
|
|
144
|
+
const statePath = this.yjsStatePath(repo, entityType, entityId);
|
|
145
|
+
const hasBin = existsSync(statePath);
|
|
146
|
+
console.warn(`[collab] DUPLICATION DETECTED for ${documentName}\n` +
|
|
147
|
+
` body length: ${body.length}, existing length: ${existingBody.length} (${(body.length / existingBody.length).toFixed(1)}x)\n` +
|
|
148
|
+
` yjs .bin exists: ${hasBin}\n` +
|
|
149
|
+
` connected clients: ${payload.document.getConnectionsCount?.() ?? 'unknown'}\n` +
|
|
150
|
+
` context user: ${ctx?.userName ?? 'unknown'}\n` +
|
|
151
|
+
` Blocked write. Investigate: was .bin missing on onLoadDocument? Did a stale client reconnect?`);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Also handles the empty-body race: if Y.Text is empty but disk has content,
|
|
155
|
+
// skip to prevent overwriting real content with nothing.
|
|
156
|
+
if (!body && existingBody)
|
|
157
|
+
return;
|
|
158
|
+
// Update body only — frontmatter is preserved because we don't pass `data`
|
|
159
|
+
const updated = await graph.update({
|
|
160
|
+
entityType: entityType,
|
|
161
|
+
entityId,
|
|
162
|
+
content: body,
|
|
163
|
+
skipCommit: true,
|
|
164
|
+
});
|
|
165
|
+
this.sessionManager.markDirty(repo, gitUser, entityType, entityId, updated.path);
|
|
166
|
+
// Persist Y binary state so onLoadDocument can restore exact CRDT state on restart
|
|
167
|
+
try {
|
|
168
|
+
const statePath = this.yjsStatePath(repo, entityType, entityId);
|
|
169
|
+
mkdirSync(dirname(statePath), { recursive: true });
|
|
170
|
+
writeFileSync(statePath, Buffer.from(Y.encodeStateAsUpdate(document)));
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Non-fatal — worst case is text seeding on next restart (duplication risk)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
console.warn(`[collab] Failed to persist ${documentName}:`, err.message);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
handleConnection(socket, req) {
|
|
181
|
+
this.hocus.handleConnection(socket, req);
|
|
182
|
+
}
|
|
183
|
+
destroy() {
|
|
184
|
+
this.hocus.closeConnections();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function parseCookie(cookieHeader, name) {
|
|
188
|
+
for (const part of cookieHeader.split(';')) {
|
|
189
|
+
const [k, ...rest] = part.trim().split('=');
|
|
190
|
+
if (k === name)
|
|
191
|
+
return rest.join('=');
|
|
192
|
+
}
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=collab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collab.js","sourceRoot":"","sources":["../../src/server/collab.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare class CommitScheduler {
|
|
|
20
20
|
* Mark a repo as dirty after a disk write. The commit will be deferred
|
|
21
21
|
* until flush() is called or the threshold timer fires.
|
|
22
22
|
*/
|
|
23
|
-
markDirty(repoName: string, user: GitUser, entityType: string, entityId: string): void;
|
|
23
|
+
markDirty(repoName: string, user: GitUser, entityType: string, entityId: string, filePath?: string): void;
|
|
24
24
|
/**
|
|
25
25
|
* Immediately commit a specific repo (called on navigate-away signal).
|
|
26
26
|
* Returns true if there was something to commit.
|
|
@@ -23,18 +23,24 @@ export class CommitScheduler {
|
|
|
23
23
|
* Mark a repo as dirty after a disk write. The commit will be deferred
|
|
24
24
|
* until flush() is called or the threshold timer fires.
|
|
25
25
|
*/
|
|
26
|
-
markDirty(repoName, user, entityType, entityId) {
|
|
26
|
+
markDirty(repoName, user, entityType, entityId, filePath) {
|
|
27
27
|
const existing = this.dirty.get(repoName);
|
|
28
28
|
if (existing) {
|
|
29
29
|
existing.user = user; // last editor wins for attribution
|
|
30
30
|
existing.entities.add(`${entityType}/${entityId}`);
|
|
31
|
+
if (filePath)
|
|
32
|
+
existing.filePaths.add(filePath);
|
|
31
33
|
}
|
|
32
34
|
else {
|
|
33
|
-
|
|
35
|
+
const entry = {
|
|
34
36
|
user,
|
|
35
37
|
dirtyAt: Date.now(),
|
|
36
38
|
entities: new Set([`${entityType}/${entityId}`]),
|
|
37
|
-
|
|
39
|
+
filePaths: new Set(),
|
|
40
|
+
};
|
|
41
|
+
if (filePath)
|
|
42
|
+
entry.filePaths.add(filePath);
|
|
43
|
+
this.dirty.set(repoName, entry);
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
@@ -79,7 +85,15 @@ export class CommitScheduler {
|
|
|
79
85
|
const entityList = Array.from(entry.entities).slice(0, 5).join(', ');
|
|
80
86
|
const overflow = entry.entities.size > 5 ? ` (+${entry.entities.size - 5} more)` : '';
|
|
81
87
|
const message = `Update ${entityList}${overflow} from web UI`;
|
|
82
|
-
|
|
88
|
+
// Stage only the specific files that were edited, not unrelated untracked files
|
|
89
|
+
// (e.g. sync-created entities waiting for manual commit)
|
|
90
|
+
if (entry.filePaths.size > 0) {
|
|
91
|
+
gitService.commitFiles(Array.from(entry.filePaths), message, entry.user);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Fallback: no file paths tracked — commit all (legacy callers)
|
|
95
|
+
gitService.commitAll(message, entry.user);
|
|
96
|
+
}
|
|
83
97
|
return true;
|
|
84
98
|
}
|
|
85
99
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit-scheduler.js","sourceRoot":"","sources":["../../src/server/commit-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"commit-scheduler.js","sourceRoot":"","sources":["../../src/server/commit-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,OAAO,eAAe;IAClB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,KAAK,GAA0C,IAAI,CAAC;IACpD,gBAAgB,CAAmB;IACnC,WAAW,CAAS;IAE5B,YAAY,gBAAkC,EAAE,WAAW,GAAG,MAAM;QAClE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,+CAA+C;QAC/C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAgB,EAAE,IAAa,EAAE,UAAkB,EAAE,QAAgB,EAAE,QAAiB;QAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,mCAAmC;YACzD,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC;YACnD,IAAI,QAAQ;gBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAe;gBACxB,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC;gBAChD,SAAS,EAAE,IAAI,GAAG,EAAU;aAC7B,CAAC;YACF,IAAI,QAAQ;gBAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,QAAgB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAiB;QAC1D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAE9B,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;gBAAE,OAAO,KAAK,CAAC;YAEtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,OAAO,GAAG,UAAU,UAAU,GAAG,QAAQ,cAAc,CAAC;YAE9D,gFAAgF;YAChF,yDAAyD;YACzD,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7B,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,uCAAuC,QAAQ,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,4CAA4C;QAC5C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Hosts:
|
|
5
5
|
* - Graph API (read-only REST over WorkspaceManager)
|
|
6
6
|
* - Agent chat via POST /api/chat and SSE GET /api/chat/stream
|
|
7
|
-
* - GitHub webhook for git pull on push (Config 2 deployments)
|
|
8
7
|
* - App plugins mounted via PluginLoader
|
|
9
8
|
*/
|
|
10
9
|
import { type FastifyInstance } from 'fastify';
|
|
@@ -20,6 +19,5 @@ export interface ServerConfig {
|
|
|
20
19
|
port: number;
|
|
21
20
|
host: string;
|
|
22
21
|
apiKeys: string[];
|
|
23
|
-
webhookSecret?: string;
|
|
24
22
|
}
|
|
25
23
|
export declare function createServer(config: ServerConfig): Promise<FastifyInstance>;
|
package/dist/server/index.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Hosts:
|
|
5
5
|
* - Graph API (read-only REST over WorkspaceManager)
|
|
6
6
|
* - Agent chat via POST /api/chat and SSE GET /api/chat/stream
|
|
7
|
-
* - GitHub webhook for git pull on push (Config 2 deployments)
|
|
8
7
|
* - App plugins mounted via PluginLoader
|
|
9
8
|
*/
|
|
10
9
|
import Fastify from 'fastify';
|
|
@@ -13,20 +12,23 @@ import cors from '@fastify/cors';
|
|
|
13
12
|
import websocket from '@fastify/websocket';
|
|
14
13
|
import { existsSync, readFileSync, createReadStream, statSync } from 'fs';
|
|
15
14
|
import { join, extname } from 'path';
|
|
15
|
+
import { Workspace } from '../core/workspace.js';
|
|
16
16
|
import { AgentOrchestrator } from '../agent/orchestrator.js';
|
|
17
17
|
import { PluginLoader, MIME_TYPES } from './plugin-loader.js';
|
|
18
18
|
import { registerGraphApiRoutes } from './routes/graph-api.js';
|
|
19
19
|
import { registerChatRoutes } from './routes/chat.js';
|
|
20
|
-
import { registerWebhookRoutes } from './routes/webhook.js';
|
|
21
20
|
import { registerWorkspaceApiRoutes } from './routes/workspace-api.js';
|
|
22
21
|
import { registerPermissionsApiRoutes } from './routes/permissions-api.js';
|
|
23
22
|
import { registerAuthApiRoutes } from './routes/auth-api.js';
|
|
24
23
|
import { registerGitHttpRoutes } from './routes/git-http.js';
|
|
24
|
+
import { registerSyncApiRoutes } from './routes/sync-api.js';
|
|
25
|
+
import { registerMcpRoutes } from './routes/mcp.js';
|
|
25
26
|
import { AuthService } from '../services/auth-service.js';
|
|
26
27
|
import { MemoryService } from '../services/memory-service.js';
|
|
27
28
|
import { WsHub } from './ws-hub.js';
|
|
28
29
|
import { registerWsRoute } from './routes/ws.js';
|
|
29
|
-
import {
|
|
30
|
+
import { SessionManager } from './session-manager.js';
|
|
31
|
+
import { YjsManager } from './yjs-manager.js';
|
|
30
32
|
/**
|
|
31
33
|
* Auth middleware — validates JWT cookie or Authorization: Bearer <key> header.
|
|
32
34
|
* When users exist in the auth database, all routes require authentication
|
|
@@ -38,8 +40,8 @@ function createAuthHook(apiKeys, authService) {
|
|
|
38
40
|
// Always allow auth endpoints
|
|
39
41
|
if (req.url.startsWith('/api/auth/'))
|
|
40
42
|
return;
|
|
41
|
-
//
|
|
42
|
-
if (req.url.startsWith('/
|
|
43
|
+
// OAuth callbacks identify the user via the state parameter, not cookies
|
|
44
|
+
if (req.url.startsWith('/api/oauth/callback/'))
|
|
43
45
|
return;
|
|
44
46
|
// Git HTTP routes have their own Basic Auth
|
|
45
47
|
if (req.url.startsWith('/git/'))
|
|
@@ -82,15 +84,30 @@ function createAuthHook(apiKeys, authService) {
|
|
|
82
84
|
const bearer = authHeader?.startsWith('Bearer ') ? authHeader.slice(7) : undefined;
|
|
83
85
|
if (bearer && apiKeys.includes(bearer))
|
|
84
86
|
return;
|
|
87
|
+
// Check Basic Auth (CLI join command)
|
|
88
|
+
if (authHeader?.startsWith('Basic ')) {
|
|
89
|
+
try {
|
|
90
|
+
const decoded = Buffer.from(authHeader.slice(6), 'base64').toString('utf-8');
|
|
91
|
+
const [email, password] = decoded.split(':');
|
|
92
|
+
if (email && password) {
|
|
93
|
+
const result = authService.authenticate(email, password);
|
|
94
|
+
if (result) {
|
|
95
|
+
req.user = result.user;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch { /* fall through to 401 */ }
|
|
101
|
+
}
|
|
85
102
|
return reply.status(401).send({ error: 'Unauthorized' });
|
|
86
103
|
};
|
|
87
104
|
}
|
|
88
105
|
export async function createServer(config) {
|
|
89
|
-
const isRemote = !!process.env.STUDIOGRAPH_CONFIG_REPO;
|
|
90
106
|
const fastify = Fastify({
|
|
91
|
-
logger:
|
|
107
|
+
logger: process.env.STUDIOGRAPH_LOG === '1'
|
|
92
108
|
? true
|
|
93
109
|
: { level: 'warn' },
|
|
110
|
+
bodyLimit: 10 * 1024 * 1024, // 10 MB — entities can be large (e.g. meeting transcripts)
|
|
94
111
|
});
|
|
95
112
|
// CORS
|
|
96
113
|
await fastify.register(cors, {
|
|
@@ -101,7 +118,6 @@ export async function createServer(config) {
|
|
|
101
118
|
await fastify.register(cookie);
|
|
102
119
|
// WebSocket support for real-time notifications
|
|
103
120
|
await fastify.register(websocket);
|
|
104
|
-
// Parse raw body for webhook HMAC validation
|
|
105
121
|
fastify.addContentTypeParser('application/json', { parseAs: 'buffer' }, (req, body, done) => {
|
|
106
122
|
try {
|
|
107
123
|
req.rawBody = body;
|
|
@@ -120,25 +136,32 @@ export async function createServer(config) {
|
|
|
120
136
|
done(null); // Don't consume the body — the route handler pipes req.raw directly
|
|
121
137
|
});
|
|
122
138
|
}
|
|
123
|
-
// Initialize auth service, WebSocket hub, and
|
|
139
|
+
// Initialize auth service, WebSocket hub, session manager, and collab server
|
|
124
140
|
const authService = new AuthService(config.workspacePath);
|
|
141
|
+
// Ensure API key is committed to auth-seed.json so `studiograph pull` can use it
|
|
142
|
+
authService.syncApiKeyToSeed();
|
|
125
143
|
const wsHub = new WsHub();
|
|
126
|
-
const
|
|
144
|
+
const sessionManager = new SessionManager(config.workspaceManager, wsHub);
|
|
145
|
+
const yjsManager = new YjsManager(config.workspaceManager);
|
|
127
146
|
// Register auth API routes (before the auth hook so they are always accessible)
|
|
128
147
|
await registerAuthApiRoutes(fastify, authService);
|
|
129
148
|
// Auth hook — applied to all routes
|
|
130
149
|
const authHook = createAuthHook(config.apiKeys, authService);
|
|
131
150
|
fastify.addHook('preHandler', authHook);
|
|
132
|
-
// Register WebSocket route (real-time change notifications)
|
|
133
|
-
await registerWsRoute(fastify, wsHub, authService);
|
|
151
|
+
// Register WebSocket route (real-time change notifications + cursor broadcasting)
|
|
152
|
+
await registerWsRoute(fastify, wsHub, authService, yjsManager);
|
|
134
153
|
// Register graph API routes (with per-collection access filtering)
|
|
135
|
-
await registerGraphApiRoutes(fastify, config.workspaceManager, authService, wsHub,
|
|
154
|
+
await registerGraphApiRoutes(fastify, config.workspaceManager, authService, wsHub, sessionManager);
|
|
136
155
|
// Register workspace API routes (git operations)
|
|
137
156
|
await registerWorkspaceApiRoutes(fastify, config.workspaceManager, config.gitUser);
|
|
138
157
|
// Register permissions API routes (self-hosted collection access)
|
|
139
|
-
await registerPermissionsApiRoutes(fastify, authService, config.workspaceManager);
|
|
158
|
+
await registerPermissionsApiRoutes(fastify, authService, config.workspaceManager, wsHub);
|
|
140
159
|
// Register git Smart HTTP routes (clone/fetch/push with Basic Auth)
|
|
141
160
|
await registerGitHttpRoutes(fastify, config.workspaceManager, authService, config.workspacePath, wsHub);
|
|
161
|
+
// Register sync API routes (collection-scoped sync)
|
|
162
|
+
await registerSyncApiRoutes(fastify, config.workspaceManager, authService, config.workspacePath, wsHub);
|
|
163
|
+
// Register MCP Streamable HTTP endpoint
|
|
164
|
+
await registerMcpRoutes(fastify, config.workspaceManager);
|
|
142
165
|
// Serve chrome assets (shared header/footer for app editors)
|
|
143
166
|
const chromeDir = join(import.meta.dirname, 'chrome');
|
|
144
167
|
if (existsSync(chromeDir)) {
|
|
@@ -183,14 +206,13 @@ export async function createServer(config) {
|
|
|
183
206
|
skillsDirs: appSkillsDirs,
|
|
184
207
|
toolsDirs: appToolsDirs,
|
|
185
208
|
recentMemory,
|
|
209
|
+
workspaceManager: config.workspaceManager,
|
|
186
210
|
});
|
|
187
211
|
await registerChatRoutes(fastify, agent, memoryService);
|
|
188
212
|
}
|
|
189
213
|
catch (err) {
|
|
190
214
|
fastify.log.warn(`Agent not available: ${err.message ?? err} — chat routes disabled`);
|
|
191
215
|
}
|
|
192
|
-
// GitHub webhook route
|
|
193
|
-
await registerWebhookRoutes(fastify, config.workspaceManager, config.webhookSecret);
|
|
194
216
|
// GET /api/apps — list installed app manifests with resolved entity type names
|
|
195
217
|
const resolvedApps = manifests.map(m => {
|
|
196
218
|
let entityTypes = [];
|
|
@@ -211,9 +233,51 @@ export async function createServer(config) {
|
|
|
211
233
|
fastify.get('/api/apps', async (_req, reply) => {
|
|
212
234
|
return reply.send(resolvedApps);
|
|
213
235
|
});
|
|
214
|
-
// GET /api/workspace — workspace metadata
|
|
236
|
+
// GET /api/workspace — workspace metadata
|
|
215
237
|
fastify.get('/api/workspace', async (_req, reply) => {
|
|
216
|
-
|
|
238
|
+
const workspace = new Workspace(config.workspacePath);
|
|
239
|
+
const about = workspace.loadAbout();
|
|
240
|
+
return reply.send({ name: config.workspaceConfig.team_name, about });
|
|
241
|
+
});
|
|
242
|
+
// PUT /api/workspace — update workspace identity (admin only)
|
|
243
|
+
fastify.put('/api/workspace', async (req, reply) => {
|
|
244
|
+
const user = req.user;
|
|
245
|
+
if (user && user.role !== 'admin') {
|
|
246
|
+
return reply.status(403).send({ error: 'Admin access required' });
|
|
247
|
+
}
|
|
248
|
+
const { name, about } = req.body ?? {};
|
|
249
|
+
const workspace = new Workspace(config.workspacePath);
|
|
250
|
+
if (typeof name === 'string' && name.trim()) {
|
|
251
|
+
config.workspaceConfig.team_name = name.trim();
|
|
252
|
+
workspace.writeConfig(config.workspaceConfig);
|
|
253
|
+
}
|
|
254
|
+
if (typeof about === 'string') {
|
|
255
|
+
workspace.writeAbout(about);
|
|
256
|
+
}
|
|
257
|
+
return reply.send({ success: true });
|
|
258
|
+
});
|
|
259
|
+
// GET /api/workspace/mcp-config — MCP client configuration snippet (admin only)
|
|
260
|
+
fastify.get('/api/workspace/mcp-config', async (req, reply) => {
|
|
261
|
+
const user = req.user;
|
|
262
|
+
if (user && user.role !== 'admin') {
|
|
263
|
+
return reply.status(403).send({ error: 'Admin access required' });
|
|
264
|
+
}
|
|
265
|
+
const proto = req.headers['x-forwarded-proto'] === 'https' ? 'https' : (req.protocol ?? 'http');
|
|
266
|
+
const host = req.headers['x-forwarded-host'] || req.headers.host || 'localhost';
|
|
267
|
+
const baseUrl = `${proto}://${host}`;
|
|
268
|
+
const apiKey = authService.getApiKey();
|
|
269
|
+
const mcpConfig = {
|
|
270
|
+
mcpServers: {
|
|
271
|
+
studiograph: {
|
|
272
|
+
type: 'streamable-http',
|
|
273
|
+
url: `${baseUrl}/mcp`,
|
|
274
|
+
headers: {
|
|
275
|
+
Authorization: `Bearer ${apiKey}`,
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
return reply.send({ config: mcpConfig });
|
|
217
281
|
});
|
|
218
282
|
// DELETE /api/memory — clear all agent memory files
|
|
219
283
|
fastify.delete('/api/memory', async (_req, reply) => {
|
|
@@ -290,6 +354,13 @@ export async function createServer(config) {
|
|
|
290
354
|
});
|
|
291
355
|
fastify.log.info('Web UI enabled — serving from dist/web/');
|
|
292
356
|
}
|
|
357
|
+
// Graceful shutdown — flush pending git commits before server closes
|
|
358
|
+
fastify.addHook('onClose', async () => {
|
|
359
|
+
await sessionManager.flushAll();
|
|
360
|
+
sessionManager.destroy();
|
|
361
|
+
yjsManager.destroy();
|
|
362
|
+
wsHub.destroy();
|
|
363
|
+
});
|
|
293
364
|
return fastify;
|
|
294
365
|
}
|
|
295
366
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,4 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { FastifyInstance } from 'fastify';
|
|
7
7
|
import type { AuthService } from '../../services/auth-service.js';
|
|
8
|
+
/** Check if an email is currently locked out. Returns seconds remaining, or 0 if not locked. */
|
|
9
|
+
export declare function checkRateLimit(email: string): number;
|
|
10
|
+
/** Record a failed login attempt. */
|
|
11
|
+
export declare function recordFailedAttempt(email: string): void;
|
|
12
|
+
/** Clear failed attempts on successful login. */
|
|
13
|
+
export declare function clearAttempts(email: string): void;
|
|
8
14
|
export declare function registerAuthApiRoutes(fastify: FastifyInstance, authService: AuthService): Promise<void>;
|