studiograph 1.3.2 → 1.3.3-next.10

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.
Files changed (118) hide show
  1. package/dist/agent/orchestrator.d.ts +8 -0
  2. package/dist/agent/orchestrator.js +13 -2
  3. package/dist/agent/orchestrator.js.map +1 -1
  4. package/dist/agent/tools/graph-tools.d.ts +5 -1
  5. package/dist/agent/tools/graph-tools.js +161 -9
  6. package/dist/agent/tools/graph-tools.js.map +1 -1
  7. package/dist/agent/tools/permission-tools.d.ts +15 -14
  8. package/dist/agent/tools/permission-tools.js +65 -128
  9. package/dist/agent/tools/permission-tools.js.map +1 -1
  10. package/dist/cli/commands/join.d.ts +3 -2
  11. package/dist/cli/commands/join.js +93 -98
  12. package/dist/cli/commands/join.js.map +1 -1
  13. package/dist/cli/commands/redeploy.js +14 -22
  14. package/dist/cli/commands/redeploy.js.map +1 -1
  15. package/dist/cli/commands/serve.js +3 -3
  16. package/dist/cli/commands/serve.js.map +1 -1
  17. package/dist/cli/commands/sync.d.ts +4 -2
  18. package/dist/cli/commands/sync.js +21 -22
  19. package/dist/cli/commands/sync.js.map +1 -1
  20. package/dist/cli/commands/user.d.ts +7 -0
  21. package/dist/cli/commands/user.js +153 -0
  22. package/dist/cli/commands/user.js.map +1 -0
  23. package/dist/cli/index.js +3 -0
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/core/graph.d.ts +8 -2
  26. package/dist/core/graph.js +11 -7
  27. package/dist/core/graph.js.map +1 -1
  28. package/dist/core/types.d.ts +9 -0
  29. package/dist/core/types.js +1 -0
  30. package/dist/core/types.js.map +1 -1
  31. package/dist/core/workspace-manager.js +1 -5
  32. package/dist/core/workspace-manager.js.map +1 -1
  33. package/dist/core/workspace.js +1 -1
  34. package/dist/core/workspace.js.map +1 -1
  35. package/dist/server/chrome/chrome.js +12 -212
  36. package/dist/server/commit-scheduler.d.ts +39 -0
  37. package/dist/server/commit-scheduler.js +99 -0
  38. package/dist/server/commit-scheduler.js.map +1 -0
  39. package/dist/server/index.js +86 -46
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/server/routes/auth-api.d.ts +8 -0
  42. package/dist/server/routes/auth-api.js +163 -0
  43. package/dist/server/routes/auth-api.js.map +1 -0
  44. package/dist/server/routes/chat.js +4 -0
  45. package/dist/server/routes/chat.js.map +1 -1
  46. package/dist/server/routes/git-http.d.ts +23 -0
  47. package/dist/server/routes/git-http.js +213 -0
  48. package/dist/server/routes/git-http.js.map +1 -0
  49. package/dist/server/routes/graph-api.d.ts +6 -2
  50. package/dist/server/routes/graph-api.js +230 -50
  51. package/dist/server/routes/graph-api.js.map +1 -1
  52. package/dist/server/routes/permissions-api.d.ts +5 -4
  53. package/dist/server/routes/permissions-api.js +39 -167
  54. package/dist/server/routes/permissions-api.js.map +1 -1
  55. package/dist/server/routes/ws.d.ts +7 -0
  56. package/dist/server/routes/ws.js +35 -0
  57. package/dist/server/routes/ws.js.map +1 -0
  58. package/dist/server/ws-hub.d.ts +36 -0
  59. package/dist/server/ws-hub.js +63 -0
  60. package/dist/server/ws-hub.js.map +1 -0
  61. package/dist/services/auth-service.d.ts +77 -0
  62. package/dist/services/auth-service.js +302 -0
  63. package/dist/services/auth-service.js.map +1 -0
  64. package/dist/utils/git.d.ts +21 -1
  65. package/dist/utils/git.js +69 -3
  66. package/dist/utils/git.js.map +1 -1
  67. package/dist/web/_app/immutable/assets/{0.CDbX4Cwz.css → 0.CL-hNrKE.css} +1 -1
  68. package/dist/web/_app/immutable/assets/7.Cn2DG-J6.css +1 -0
  69. package/dist/web/_app/immutable/assets/8.Sm6jB3a0.css +1 -0
  70. package/dist/web/_app/immutable/assets/AppShell.RYbgfVr0.css +1 -0
  71. package/dist/web/_app/immutable/chunks/-lhxaNNQ.js +1 -0
  72. package/dist/web/_app/immutable/chunks/BFD-PG4k.js +2 -0
  73. package/dist/web/_app/immutable/chunks/BKhAbhZ4.js +1 -0
  74. package/dist/web/_app/immutable/chunks/BUuoVpOJ.js +1 -0
  75. package/dist/web/_app/immutable/chunks/BuHHk4nP.js +1 -0
  76. package/dist/web/_app/immutable/chunks/Bv8xNJQh.js +1 -0
  77. package/dist/web/_app/immutable/chunks/C0iyiXwO.js +1 -0
  78. package/dist/web/_app/immutable/chunks/CH-raHh7.js +1 -0
  79. package/dist/web/_app/immutable/chunks/{DTUXhwEY.js → CQo_whF8.js} +1 -1
  80. package/dist/web/_app/immutable/chunks/CiIF45lL.js +1 -0
  81. package/dist/web/_app/immutable/chunks/{DEJSHbC3.js → Cs6vwwZC.js} +1 -1
  82. package/dist/web/_app/immutable/chunks/{C1SF7XfX.js → DJO0wVMY.js} +4 -4
  83. package/dist/web/_app/immutable/chunks/DeY0oOW3.js +2 -0
  84. package/dist/web/_app/immutable/chunks/{BHedmkKI.js → Dj2efhG6.js} +18 -18
  85. package/dist/web/_app/immutable/chunks/ew-IdGn0.js +1 -0
  86. package/dist/web/_app/immutable/chunks/yEjjrv_c.js +23 -0
  87. package/dist/web/_app/immutable/entry/app.BNN66g6y.js +2 -0
  88. package/dist/web/_app/immutable/entry/start.CbKqTiwM.js +1 -0
  89. package/dist/web/_app/immutable/nodes/0.DthLeuCh.js +2 -0
  90. package/dist/web/_app/immutable/nodes/1.ZBkeuxO_.js +1 -0
  91. package/dist/web/_app/immutable/nodes/2.CioLRnGy.js +1 -0
  92. package/dist/web/_app/immutable/nodes/3.Df3ut4ji.js +1 -0
  93. package/dist/web/_app/immutable/nodes/4.HFzA-u2O.js +16 -0
  94. package/dist/web/_app/immutable/nodes/5.h31NMedP.js +4 -0
  95. package/dist/web/_app/immutable/nodes/6.MktCIoXa.js +2 -0
  96. package/dist/web/_app/immutable/nodes/7.CZ7lC_rb.js +1 -0
  97. package/dist/web/_app/immutable/nodes/8.CRf2WFmY.js +1 -0
  98. package/dist/web/_app/version.json +1 -1
  99. package/dist/web/index.html +12 -12
  100. package/package.json +11 -2
  101. package/dist/web/_app/immutable/assets/AppShell.D0rmbdqF.css +0 -1
  102. package/dist/web/_app/immutable/chunks/Bopa-Ask.js +0 -1
  103. package/dist/web/_app/immutable/chunks/CEkx7wvp.js +0 -1
  104. package/dist/web/_app/immutable/chunks/COwytaCP.js +0 -1
  105. package/dist/web/_app/immutable/chunks/Dml-u95b.js +0 -2
  106. package/dist/web/_app/immutable/chunks/DvKVaE7M.js +0 -1
  107. package/dist/web/_app/immutable/chunks/J4wxg_sP.js +0 -23
  108. package/dist/web/_app/immutable/chunks/MbiSz-iW.js +0 -2
  109. package/dist/web/_app/immutable/chunks/bSAC733J.js +0 -1
  110. package/dist/web/_app/immutable/entry/app.B0KkA_jR.js +0 -2
  111. package/dist/web/_app/immutable/entry/start.DFSNI2p-.js +0 -1
  112. package/dist/web/_app/immutable/nodes/0.DfbCOBhn.js +0 -2
  113. package/dist/web/_app/immutable/nodes/1.DMtWWiM4.js +0 -1
  114. package/dist/web/_app/immutable/nodes/2.CgKSJOen.js +0 -1
  115. package/dist/web/_app/immutable/nodes/3.CVYHBZE3.js +0 -1
  116. package/dist/web/_app/immutable/nodes/4.CHN1uWec.js +0 -16
  117. package/dist/web/_app/immutable/nodes/5.B4_87Wva.js +0 -4
  118. package/dist/web/_app/immutable/nodes/6.CGZ970f8.js +0 -2
@@ -2,21 +2,118 @@
2
2
  * Graph API routes
3
3
  *
4
4
  * REST façade over WorkspaceManager.
5
- * Read endpoints are unauthenticated; write endpoints require auth.
5
+ * Enforces per-collection access when users are authenticated via JWT.
6
+ * API key / open mode → full access (no filtering).
6
7
  */
7
8
  import { Workspace } from '../../core/workspace.js';
8
9
  import { existsSync } from 'fs';
9
10
  import { join } from 'path';
10
- export async function registerGraphApiRoutes(fastify, workspaceManager) {
11
- // POST /api/repos — create a new collection
11
+ /** Convert an AuthUser from the request to a GitUser for commit attribution. */
12
+ function reqGitUser(req) {
13
+ const user = req.user;
14
+ if (!user)
15
+ return undefined;
16
+ return { id: String(user.id), name: user.displayName, email: user.email };
17
+ }
18
+ /** Check if a user can see a private repo (only the owner can). */
19
+ function canSeePrivateRepo(repo, user) {
20
+ if (!repo.private)
21
+ return true;
22
+ if (!user)
23
+ return !repo.owner_id; // API key / open mode — only if no owner set
24
+ if (!repo.owner_id)
25
+ return false; // Private without owner — hidden from all users
26
+ return user.id === repo.owner_id;
27
+ }
28
+ /** Get the list of repos the current user can access. */
29
+ function getAccessibleRepos(req, workspaceManager, authService) {
30
+ const allRepos = workspaceManager.getAllRepoConfigs();
31
+ const user = req.user;
32
+ // Filter out private repos owned by other users (applies to all roles)
33
+ const visible = allRepos.filter(r => canSeePrivateRepo(r, user));
34
+ if (!user)
35
+ return visible; // API key / open mode → full access
36
+ if (user.role === 'admin')
37
+ return visible;
38
+ const allowed = new Set(authService.getUserCollections(user.id));
39
+ return visible.filter(r => r.private || allowed.has(r.name));
40
+ }
41
+ /** Check if the current user can access a specific repo. */
42
+ function hasRepoAccess(req, repoName, workspaceManager, authService) {
43
+ const user = req.user;
44
+ const repoConfig = workspaceManager.getRepoConfig(repoName);
45
+ if (repoConfig && !canSeePrivateRepo(repoConfig, user))
46
+ return false;
47
+ if (!user)
48
+ return true; // API key / open mode
49
+ if (repoConfig?.private && repoConfig?.owner_id === user.id)
50
+ return true; // Owner of private repo
51
+ if (user.role === 'admin')
52
+ return true;
53
+ return authService.getUserCollections(user.id).includes(repoName);
54
+ }
55
+ /** Check if the current user is an admin. */
56
+ function isAdmin(req) {
57
+ const user = req.user;
58
+ if (!user)
59
+ return true; // API key / open mode → admin-equivalent
60
+ return user.role === 'admin';
61
+ }
62
+ /**
63
+ * Build a set of all entity IDs visible to the current user.
64
+ * Used to filter wikilinks so users don't see links to entities
65
+ * in collections they can't access.
66
+ */
67
+ function getAccessibleEntityIds(req, workspaceManager, authService) {
68
+ const user = req.user;
69
+ if (!user)
70
+ return null; // API key / open mode → no filtering
71
+ if (user.role === 'admin') {
72
+ // Admins see everything except other users' private repos
73
+ const allRepos = workspaceManager.getAllRepoConfigs();
74
+ const hasHiddenPrivate = allRepos.some(r => r.private && r.owner_id && r.owner_id !== user.id);
75
+ if (!hasHiddenPrivate)
76
+ return null; // No filtering needed
77
+ }
78
+ const repos = getAccessibleRepos(req, workspaceManager, authService);
79
+ const ids = new Set();
80
+ for (const repo of repos) {
81
+ try {
82
+ const graph = workspaceManager.getGraph(repo.name);
83
+ for (const e of graph.search({})) {
84
+ ids.add(e.id);
85
+ }
86
+ }
87
+ catch { /* skip */ }
88
+ }
89
+ return ids;
90
+ }
91
+ /** Filter wikilinks to only those pointing to accessible entities. */
92
+ function filterWikilinks(wikilinks, accessibleIds) {
93
+ if (!accessibleIds)
94
+ return wikilinks;
95
+ return wikilinks.filter(id => accessibleIds.has(id));
96
+ }
97
+ export async function registerGraphApiRoutes(fastify, workspaceManager, authService, wsHub, commitScheduler) {
98
+ // POST /api/repos — create a new collection (admin only, or any user for private collections)
12
99
  fastify.post('/api/repos', async (req, reply) => {
100
+ const user = req.user;
13
101
  const { name, description, private: isPrivate } = req.body || {};
102
+ // Non-private collections require admin
103
+ if (!isPrivate && !isAdmin(req)) {
104
+ return reply.status(403).send({ error: 'Admin access required' });
105
+ }
14
106
  if (!name || !/^[a-z0-9][a-z0-9-]*$/.test(name)) {
15
107
  return reply.status(400).send({ error: 'Collection name must be kebab-case' });
16
108
  }
17
109
  try {
18
110
  const workspace = new Workspace(workspaceManager['workspacePath']);
19
- const repo = await workspace.registerRepo({ name, description, private: isPrivate });
111
+ const repo = await workspace.registerRepo({
112
+ name,
113
+ description,
114
+ private: isPrivate,
115
+ ...(isPrivate && user ? { owner_id: user.id } : {}),
116
+ });
20
117
  workspaceManager.reloadConfig();
21
118
  return reply.status(201).send(repo);
22
119
  }
@@ -24,8 +121,11 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
24
121
  return reply.status(409).send({ error: err.message });
25
122
  }
26
123
  });
27
- // DELETE /api/repos/:repo — remove a collection and delete its files
124
+ // DELETE /api/repos/:repo — remove a collection and delete its files (admin only)
28
125
  fastify.delete('/api/repos/:repo', async (req, reply) => {
126
+ if (!isAdmin(req)) {
127
+ return reply.status(403).send({ error: 'Admin access required' });
128
+ }
29
129
  const { repo } = req.params;
30
130
  try {
31
131
  const workspace = new Workspace(workspaceManager['workspacePath']);
@@ -51,8 +151,11 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
51
151
  return reply.status(500).send({ error: err.message });
52
152
  }
53
153
  });
54
- // PATCH /api/repos/:repo — rename a collection
154
+ // PATCH /api/repos/:repo — rename a collection (admin only)
55
155
  fastify.patch('/api/repos/:repo', async (req, reply) => {
156
+ if (!isAdmin(req)) {
157
+ return reply.status(403).send({ error: 'Admin access required' });
158
+ }
56
159
  const { repo } = req.params;
57
160
  const { name: newName, ...rest } = req.body || {};
58
161
  if ('private' in rest) {
@@ -88,6 +191,8 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
88
191
  if (existsSync(markerPath)) {
89
192
  writeFS(markerPath, JSON.stringify({ repo_name: newName }, null, 2), 'utf-8');
90
193
  }
194
+ // Update collection_access to follow the rename
195
+ authService.renameCollection(repo, newName);
91
196
  workspaceManager.reloadConfig();
92
197
  return reply.send(repoConfig);
93
198
  }
@@ -95,16 +200,19 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
95
200
  return reply.status(500).send({ error: err.message });
96
201
  }
97
202
  });
98
- // GET /api/repos — list all accessible repos (re-reads config to pick up CLI changes)
99
- fastify.get('/api/repos', async (_req, reply) => {
203
+ // GET /api/repos — list accessible repos (re-reads config to pick up CLI changes)
204
+ fastify.get('/api/repos', async (req, reply) => {
100
205
  workspaceManager.reloadConfig();
101
- const repos = workspaceManager.getAllRepoConfigs();
206
+ const repos = getAccessibleRepos(req, workspaceManager, authService);
102
207
  return reply.send(repos);
103
208
  });
104
209
  // GET /api/repos/:repo/entities — list all entities in a repo
105
210
  // ?summary=true returns lightweight objects (no content, minimal data) for sidebar/graph
106
211
  fastify.get('/api/repos/:repo/entities', async (req, reply) => {
107
212
  const { repo } = req.params;
213
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
214
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
215
+ }
108
216
  let graph;
109
217
  try {
110
218
  graph = workspaceManager.getGraph(repo);
@@ -113,20 +221,30 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
113
221
  return reply.status(404).send({ error: err.message });
114
222
  }
115
223
  const entities = graph.search({});
224
+ const accessibleIds = getAccessibleEntityIds(req, workspaceManager, authService);
116
225
  if (req.query.summary === 'true') {
117
226
  const summaries = entities.map(e => ({
118
227
  id: e.id,
119
228
  entityType: e.entityType,
120
229
  data: { name: e.data.name, created_at: e.data.created_at, updated_at: e.data.updated_at },
121
- document: { wikilinks: e.document?.wikilinks ?? [] },
230
+ document: { wikilinks: filterWikilinks(e.document?.wikilinks ?? [], accessibleIds) },
122
231
  }));
123
232
  return reply.send(summaries);
124
233
  }
125
- return reply.send(entities);
234
+ // Full response — filter wikilinks in document
235
+ const filtered = entities.map(e => {
236
+ if (!e.document?.wikilinks?.length)
237
+ return e;
238
+ return { ...e, document: { ...e.document, wikilinks: filterWikilinks(e.document.wikilinks, accessibleIds) } };
239
+ });
240
+ return reply.send(filtered);
126
241
  });
127
242
  // GET /api/repos/:repo/entities/:type — list entities of a type
128
243
  fastify.get('/api/repos/:repo/entities/:type', async (req, reply) => {
129
244
  const { repo, type } = req.params;
245
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
246
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
247
+ }
130
248
  let graph;
131
249
  try {
132
250
  graph = workspaceManager.getGraph(repo);
@@ -135,11 +253,20 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
135
253
  return reply.status(404).send({ error: err.message });
136
254
  }
137
255
  const entities = graph.search({ entityType: type });
138
- return reply.send(entities);
256
+ const accessibleIds = getAccessibleEntityIds(req, workspaceManager, authService);
257
+ const filtered = entities.map(e => {
258
+ if (!e.document?.wikilinks?.length)
259
+ return e;
260
+ return { ...e, document: { ...e.document, wikilinks: filterWikilinks(e.document.wikilinks, accessibleIds) } };
261
+ });
262
+ return reply.send(filtered);
139
263
  });
140
264
  // GET /api/repos/:repo/entities/:type/:id — get single entity
141
265
  fastify.get('/api/repos/:repo/entities/:type/:id', async (req, reply) => {
142
266
  const { repo, type, id } = req.params;
267
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
268
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
269
+ }
143
270
  let graph;
144
271
  try {
145
272
  graph = workspaceManager.getGraph(repo);
@@ -151,31 +278,29 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
151
278
  if (!entity) {
152
279
  return reply.status(404).send({ error: `Entity not found: ${type}/${id}` });
153
280
  }
281
+ if (entity.document?.wikilinks?.length) {
282
+ const accessibleIds = getAccessibleEntityIds(req, workspaceManager, authService);
283
+ return reply.send({
284
+ ...entity,
285
+ document: { ...entity.document, wikilinks: filterWikilinks(entity.document.wikilinks, accessibleIds) },
286
+ });
287
+ }
154
288
  return reply.send(entity);
155
289
  });
156
290
  // GET /api/repos/:repo/entities/:type/:id/contents — list sub-content in entity folder
157
291
  fastify.get('/api/repos/:repo/entities/:type/:id/contents', async (req, reply) => {
158
- const { repo, type, id } = req.params;
159
- let graph;
160
- try {
161
- graph = workspaceManager.getGraph(repo);
162
- }
163
- catch (err) {
164
- return reply.status(404).send({ error: err.message });
292
+ const { repo } = req.params;
293
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
294
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
165
295
  }
166
296
  // Sub-content removed — entities are flat files now
167
297
  return reply.send([]);
168
298
  });
169
299
  // GET /api/repos/:repo/entities/:type/:id/contents/* — read a sub-content file
170
300
  fastify.get('/api/repos/:repo/entities/:type/:id/contents/*', async (req, reply) => {
171
- const { repo, type, id } = req.params;
172
- const filePath = req.params['*'];
173
- let graph;
174
- try {
175
- graph = workspaceManager.getGraph(repo);
176
- }
177
- catch (err) {
178
- return reply.status(404).send({ error: err.message });
301
+ const { repo } = req.params;
302
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
303
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
179
304
  }
180
305
  // Sub-content removed — entities are flat files now
181
306
  return reply.status(404).send({ error: 'Sub-content not supported in flat file layout' });
@@ -183,6 +308,9 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
183
308
  // GET /api/repos/:repo/search?q=&type=&tags= — search within a repo
184
309
  fastify.get('/api/repos/:repo/search', async (req, reply) => {
185
310
  const { repo } = req.params;
311
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
312
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
313
+ }
186
314
  const { q, type, tags } = req.query;
187
315
  let graph;
188
316
  try {
@@ -196,11 +324,17 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
196
324
  entityType: type,
197
325
  tags: tags ? tags.split(',').map(t => t.trim()) : undefined,
198
326
  });
199
- return reply.send(results);
327
+ const accessibleIds = getAccessibleEntityIds(req, workspaceManager, authService);
328
+ const filtered = results.map(e => {
329
+ if (!e.document?.wikilinks?.length)
330
+ return e;
331
+ return { ...e, document: { ...e.document, wikilinks: filterWikilinks(e.document.wikilinks, accessibleIds) } };
332
+ });
333
+ return reply.send(filtered);
200
334
  });
201
335
  // GET /api/graph — full workspace graph topology (nodes + edges)
202
- fastify.get('/api/graph', async (_req, reply) => {
203
- const repos = workspaceManager.getAllRepoConfigs();
336
+ fastify.get('/api/graph', async (req, reply) => {
337
+ const repos = getAccessibleRepos(req, workspaceManager, authService);
204
338
  const nodes = [];
205
339
  const edgeSet = new Set();
206
340
  const edges = [];
@@ -243,17 +377,35 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
243
377
  // GET /api/search?q=&type=&tags=&repos= — cross-repo search
244
378
  fastify.get('/api/search', async (req, reply) => {
245
379
  const { q, type, tags, repos } = req.query;
380
+ const accessibleNames = new Set(getAccessibleRepos(req, workspaceManager, authService).map(r => r.name));
381
+ // Filter requested repos to only accessible ones
382
+ let repoNames = repos ? repos.split(',').map(r => r.trim()) : undefined;
383
+ if (repoNames) {
384
+ repoNames = repoNames.filter(r => accessibleNames.has(r));
385
+ }
386
+ else {
387
+ repoNames = [...accessibleNames];
388
+ }
246
389
  const results = await workspaceManager.search({
247
390
  query: q,
248
391
  entityType: type,
249
392
  tags: tags ? tags.split(',').map(t => t.trim()) : undefined,
250
- repoNames: repos ? repos.split(',').map(r => r.trim()) : undefined,
393
+ repoNames,
394
+ });
395
+ const accessibleIds = getAccessibleEntityIds(req, workspaceManager, authService);
396
+ const filtered = results.map((e) => {
397
+ if (!e.document?.wikilinks?.length)
398
+ return e;
399
+ return { ...e, document: { ...e.document, wikilinks: filterWikilinks(e.document.wikilinks, accessibleIds) } };
251
400
  });
252
- return reply.send(results);
401
+ return reply.send(filtered);
253
402
  });
254
403
  // PUT /api/repos/:repo/entities/:type/:id — update entity (data and/or content)
255
404
  fastify.put('/api/repos/:repo/entities/:type/:id', async (req, reply) => {
256
405
  const { repo, type, id } = req.params;
406
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
407
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
408
+ }
257
409
  let graph;
258
410
  try {
259
411
  graph = workspaceManager.getGraph(repo);
@@ -262,13 +414,23 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
262
414
  return reply.status(404).send({ error: err.message });
263
415
  }
264
416
  try {
417
+ const gitUser = reqGitUser(req);
265
418
  const updated = await graph.update({
266
419
  entityType: type,
267
420
  entityId: id,
268
421
  data: req.body.data,
269
422
  content: req.body.content,
270
423
  commitMessage: `Update ${type}/${id} from web UI`,
271
- skipCommit: true,
424
+ user: gitUser,
425
+ skipCommit: !!commitScheduler, // defer commit if scheduler is active
426
+ });
427
+ if (commitScheduler && gitUser) {
428
+ commitScheduler.markDirty(repo, gitUser, type, id);
429
+ }
430
+ wsHub?.broadcast({
431
+ type: 'entity_change', action: 'updated', repo, entityType: type, entityId: id,
432
+ actor: req.user?.displayName ?? 'API',
433
+ source: 'api', timestamp: new Date().toISOString(),
272
434
  });
273
435
  return reply.send(updated);
274
436
  }
@@ -279,6 +441,9 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
279
441
  // DELETE /api/repos/:repo/entities/:type/:id — delete an entity
280
442
  fastify.delete('/api/repos/:repo/entities/:type/:id', async (req, reply) => {
281
443
  const { repo, type, id } = req.params;
444
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
445
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
446
+ }
282
447
  let graph;
283
448
  try {
284
449
  graph = workspaceManager.getGraph(repo);
@@ -287,7 +452,12 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
287
452
  return reply.status(404).send({ error: err.message });
288
453
  }
289
454
  try {
290
- await graph.delete(type, id, `Delete ${type}/${id} from web UI`);
455
+ await graph.delete(type, id, `Delete ${type}/${id} from web UI`, reqGitUser(req));
456
+ wsHub?.broadcast({
457
+ type: 'entity_change', action: 'deleted', repo, entityType: type, entityId: id,
458
+ actor: req.user?.displayName ?? 'API',
459
+ source: 'api', timestamp: new Date().toISOString(),
460
+ });
291
461
  return reply.send({ ok: true });
292
462
  }
293
463
  catch (err) {
@@ -297,6 +467,9 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
297
467
  // POST /api/repos/:repo/entities — create a new entity
298
468
  fastify.post('/api/repos/:repo/entities', async (req, reply) => {
299
469
  const { repo } = req.params;
470
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
471
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
472
+ }
300
473
  const { entityType, entityId, data = {}, content = '' } = req.body;
301
474
  if (!entityType || !entityId) {
302
475
  return reply.status(400).send({ error: 'entityType and entityId are required' });
@@ -315,7 +488,12 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
315
488
  data: { entity_type: entityType, entity_id: entityId, ...data },
316
489
  content,
317
490
  commitMessage: `Create ${entityType}/${entityId} from web UI`,
318
- skipCommit: true,
491
+ user: reqGitUser(req),
492
+ });
493
+ wsHub?.broadcast({
494
+ type: 'entity_change', action: 'created', repo, entityType, entityId,
495
+ actor: req.user?.displayName ?? 'API',
496
+ source: 'api', timestamp: new Date().toISOString(),
319
497
  });
320
498
  return reply.status(201).send(entity);
321
499
  }
@@ -323,24 +501,26 @@ export async function registerGraphApiRoutes(fastify, workspaceManager) {
323
501
  return reply.status(400).send({ error: err.message });
324
502
  }
325
503
  });
326
- // PUT /api/repos/:repo/entities/:type/:id/contents/*write a sub-content file
327
- fastify.put('/api/repos/:repo/entities/:type/:id/contents/*', async (req, reply) => {
328
- const { repo, type, id } = req.params;
329
- const filePath = req.params['*'];
330
- let graph;
331
- try {
332
- graph = workspaceManager.getGraph(repo);
504
+ // POST /api/repos/:repo/commitflush deferred commits (navigate-away signal)
505
+ fastify.post('/api/repos/:repo/commit', async (req, reply) => {
506
+ if (!commitScheduler) {
507
+ return reply.send({ committed: false });
333
508
  }
334
- catch (err) {
335
- return reply.status(404).send({ error: err.message });
336
- }
337
- try {
338
- // Sub-content removed — entities are flat files now
339
- return reply.status(400).send({ error: 'Sub-content not supported in flat file layout' });
509
+ const { repo } = req.params;
510
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
511
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
340
512
  }
341
- catch (err) {
342
- return reply.status(400).send({ error: err.message });
513
+ const committed = await commitScheduler.flush(repo);
514
+ return reply.send({ committed });
515
+ });
516
+ // PUT /api/repos/:repo/entities/:type/:id/contents/* — write a sub-content file
517
+ fastify.put('/api/repos/:repo/entities/:type/:id/contents/*', async (req, reply) => {
518
+ const { repo } = req.params;
519
+ if (!hasRepoAccess(req, repo, workspaceManager, authService)) {
520
+ return reply.status(404).send({ error: `Collection "${repo}" not found` });
343
521
  }
522
+ // Sub-content removed — entities are flat files now
523
+ return reply.status(400).send({ error: 'Sub-content not supported in flat file layout' });
344
524
  });
345
525
  }
346
526
  //# sourceMappingURL=graph-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph-api.js","sourceRoot":"","sources":["../../../src/server/routes/graph-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-api.js","sourceRoot":"","sources":["../../../src/server/routes/graph-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,gFAAgF;AAChF,SAAS,UAAU,CAAC,GAAmB;IACrC,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,mEAAmE;AACnE,SAAS,iBAAiB,CAAC,IAA8C,EAAE,IAA0B;IACnG,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,6CAA6C;IAC/E,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAE,gDAAgD;IACnF,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;AACnC,CAAC;AAED,yDAAyD;AACzD,SAAS,kBAAkB,CAAC,GAAmB,EAAE,gBAAkC,EAAE,WAAwB;IAC3G,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;IACtD,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,uEAAuE;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,CAAC,oCAAoC;IAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,4DAA4D;AAC5D,SAAS,aAAa,CAAC,GAAmB,EAAE,QAAgB,EAAE,gBAAkC,EAAE,WAAwB;IACxH,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,UAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC9C,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;IAClG,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,6CAA6C;AAC7C,SAAS,OAAO,CAAC,GAAmB;IAClC,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,yCAAyC;IACjE,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,GAAmB,EAAE,gBAAkC,EAAE,WAAwB;IAC/G,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAW,qCAAqC;IACvE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;QACtD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC5D,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,SAAS,eAAe,CAAC,SAAmB,EAAE,aAAiC;IAC7E,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAwB,EACxB,gBAAkC,EAClC,WAAwB,EACxB,KAAa,EACb,eAAiC;IAEjC,8FAA8F;IAC9F,OAAO,CAAC,IAAI,CACV,YAAY,EACZ,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACjE,wCAAwC;QACxC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC;gBACxC,IAAI;gBACJ,WAAW;gBACX,OAAO,EAAE,SAAS;gBAClB,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC,CAAC;YACH,gBAAgB,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kFAAkF;IAClF,OAAO,CAAC,MAAM,CACZ,kBAAkB,EAClB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC/D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAE1E,qBAAqB;YACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,eAAe;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,gBAAgB,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4DAA4D;IAC5D,OAAO,CAAC,KAAK,CACX,kBAAkB,EAClB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAS,CAAC;QACzD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,OAAO,kBAAkB,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEtC,mBAAmB;YACnB,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAClE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,gBAAgB;YAChB,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;YAC1B,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;YAC1B,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAChF,CAAC;YAED,gDAAgD;YAChD,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE5C,gBAAgB,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kFAAkF;IAClF,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7C,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,yFAAyF;IACzF,OAAO,CAAC,GAAG,CACT,2BAA2B,EAC3B,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAEjF,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,IAAI,EAAE,EAAE,IAAI,EAAG,CAAC,CAAC,IAAY,CAAC,IAAI,EAAE,UAAU,EAAG,CAAC,CAAC,IAAY,CAAC,UAAU,EAAE,UAAU,EAAG,CAAC,CAAC,IAAY,CAAC,UAAU,EAAE;gBACpH,QAAQ,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC,EAAE;aACrF,CAAC,CAAC,CAAC;YACJ,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,OAAO,CAAC,GAAG,CACT,iCAAiC,EACjC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAkB,EAAE,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;IAEF,8DAA8D;IAC9D,OAAO,CAAC,GAAG,CACT,qCAAqC,EACrC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACjF,OAAO,KAAK,CAAC,IAAI,CAAC;gBAChB,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;aACvG,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CACF,CAAC;IAEF,uFAAuF;IACvF,OAAO,CAAC,GAAG,CACT,8CAA8C,EAC9C,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,oDAAoD;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CACF,CAAC;IAEF,+EAA+E;IAC/E,OAAO,CAAC,GAAG,CACT,gDAAgD,EAChD,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,oDAAoD;QACpD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC;IAC5F,CAAC,CACF,CAAC;IAEF,oEAAoE;IACpE,OAAO,CAAC,GAAG,CAIT,yBAAyB,EACzB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAEpC,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,IAA8B;YAC1C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACrE,MAAM,KAAK,GAAsD,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAA8C,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAElC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;oBACzB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACxD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACtB,KAAK,CAAC,IAAI,CAAC;4BACT,EAAE,EAAE,MAAM;4BACV,IAAI,EAAE,MAAM,CAAC,UAAU;4BACvB,IAAI,EAAE,UAAU,CAAC,IAAI;yBACtB,CAAC,CAAC;oBACL,CAAC;oBAED,6BAA6B;oBAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;oBACnD,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;wBAC/B,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;wBAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;4BAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACjB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,OAAO,CAAC,GAAG,CAGT,aAAa,EACb,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3C,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACxE,CAAC;QAEF,iDAAiD;QACjD,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,IAA8B;YAC1C,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YACtC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;IAEF,gFAAgF;IAChF,OAAO,CAAC,GAAG,CAIT,qCAAqC,EACrC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;gBACjC,UAAU,EAAE,IAAkB;gBAC9B,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO;gBACzB,aAAa,EAAE,UAAU,IAAI,IAAI,EAAE,cAAc;gBACjD,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,CAAC,CAAC,eAAe,EAAE,sCAAsC;aACtE,CAAC,CAAC;YACH,IAAI,eAAe,IAAI,OAAO,EAAE,CAAC;gBAC/B,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC9E,KAAK,EAAG,GAAW,CAAC,IAAI,EAAE,WAAW,IAAI,KAAK;gBAC9C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,OAAO,CAAC,MAAM,CACZ,qCAAqC,EACrC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,CAAC,IAAkB,EAAE,EAAE,EAAE,UAAU,IAAI,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAChG,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC9E,KAAK,EAAG,GAAW,CAAC,IAAI,EAAE,WAAW,IAAI,KAAK;gBAC9C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uDAAuD;IACvD,OAAO,CAAC,IAAI,CAIV,2BAA2B,EAC3B,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAEnE,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,UAAwB;gBACpC,QAAQ;gBACR,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE;gBAC/D,OAAO;gBACP,aAAa,EAAE,UAAU,UAAU,IAAI,QAAQ,cAAc;gBAC7D,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;aACtB,CAAC,CAAC;YACH,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ;gBACpE,KAAK,EAAG,GAAW,CAAC,IAAI,EAAE,WAAW,IAAI,KAAK;gBAC9C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnD,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,+EAA+E;IAC/E,OAAO,CAAC,IAAI,CACV,yBAAyB,EACzB,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,gFAAgF;IAChF,OAAO,CAAC,GAAG,CAIT,gDAAgD,EAChD,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,IAAI,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,oDAAoD;QACpD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC;IAC5F,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Permissions API routes
3
3
  *
4
- * GitHub-based org, team, and repo access management.
5
- * Only available when GitHub org is configured and user has a valid token.
4
+ * Self-hosted per-collection access management backed by AuthService.
5
+ * All endpoints require admin role.
6
6
  */
7
7
  import type { FastifyInstance } from 'fastify';
8
- import { WorkspaceConfig } from '../../core/types.js';
9
- export declare function registerPermissionsApiRoutes(fastify: FastifyInstance, workspaceConfig: WorkspaceConfig): Promise<void>;
8
+ import { AuthService } from '../../services/auth-service.js';
9
+ import { WorkspaceManager } from '../../core/workspace-manager.js';
10
+ export declare function registerPermissionsApiRoutes(fastify: FastifyInstance, authService: AuthService, workspaceManager: WorkspaceManager): Promise<void>;