studiograph 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +18 -0
  2. package/dist/agent/orchestrator.d.ts +69 -0
  3. package/dist/agent/orchestrator.js +211 -0
  4. package/dist/agent/orchestrator.js.map +1 -0
  5. package/dist/agent/tools/graph-tools.d.ts +30 -0
  6. package/dist/agent/tools/graph-tools.js +536 -0
  7. package/dist/agent/tools/graph-tools.js.map +1 -0
  8. package/dist/auth/github.d.ts +53 -0
  9. package/dist/auth/github.js +180 -0
  10. package/dist/auth/github.js.map +1 -0
  11. package/dist/cli/commands/auth.d.ts +10 -0
  12. package/dist/cli/commands/auth.js +63 -0
  13. package/dist/cli/commands/auth.js.map +1 -0
  14. package/dist/cli/commands/init.d.ts +7 -0
  15. package/dist/cli/commands/init.js +299 -0
  16. package/dist/cli/commands/init.js.map +1 -0
  17. package/dist/cli/commands/join.d.ts +14 -0
  18. package/dist/cli/commands/join.js +230 -0
  19. package/dist/cli/commands/join.js.map +1 -0
  20. package/dist/cli/commands/members.d.ts +11 -0
  21. package/dist/cli/commands/members.js +230 -0
  22. package/dist/cli/commands/members.js.map +1 -0
  23. package/dist/cli/commands/serve.d.ts +17 -0
  24. package/dist/cli/commands/serve.js +90 -0
  25. package/dist/cli/commands/serve.js.map +1 -0
  26. package/dist/cli/commands/start.d.ts +7 -0
  27. package/dist/cli/commands/start.js +381 -0
  28. package/dist/cli/commands/start.js.map +1 -0
  29. package/dist/cli/commands/sync.d.ts +10 -0
  30. package/dist/cli/commands/sync.js +121 -0
  31. package/dist/cli/commands/sync.js.map +1 -0
  32. package/dist/cli/index.d.ts +7 -0
  33. package/dist/cli/index.js +31 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/core/graph.d.ts +169 -0
  36. package/dist/core/graph.js +558 -0
  37. package/dist/core/graph.js.map +1 -0
  38. package/dist/core/types.d.ts +216 -0
  39. package/dist/core/types.js +71 -0
  40. package/dist/core/types.js.map +1 -0
  41. package/dist/core/user-config.d.ts +31 -0
  42. package/dist/core/user-config.js +50 -0
  43. package/dist/core/user-config.js.map +1 -0
  44. package/dist/core/validation.d.ts +2371 -0
  45. package/dist/core/validation.js +432 -0
  46. package/dist/core/validation.js.map +1 -0
  47. package/dist/core/workspace-manager.d.ts +104 -0
  48. package/dist/core/workspace-manager.js +432 -0
  49. package/dist/core/workspace-manager.js.map +1 -0
  50. package/dist/core/workspace.d.ts +103 -0
  51. package/dist/core/workspace.js +306 -0
  52. package/dist/core/workspace.js.map +1 -0
  53. package/dist/server/index.d.ts +25 -0
  54. package/dist/server/index.js +84 -0
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/plugin-loader.d.ts +31 -0
  57. package/dist/server/plugin-loader.js +81 -0
  58. package/dist/server/plugin-loader.js.map +1 -0
  59. package/dist/server/routes/chat.d.ts +11 -0
  60. package/dist/server/routes/chat.js +66 -0
  61. package/dist/server/routes/chat.js.map +1 -0
  62. package/dist/server/routes/graph-api.d.ts +9 -0
  63. package/dist/server/routes/graph-api.js +72 -0
  64. package/dist/server/routes/graph-api.js.map +1 -0
  65. package/dist/server/routes/webhook.d.ts +14 -0
  66. package/dist/server/routes/webhook.js +69 -0
  67. package/dist/server/routes/webhook.js.map +1 -0
  68. package/dist/services/assets/base.d.ts +69 -0
  69. package/dist/services/assets/base.js +113 -0
  70. package/dist/services/assets/base.js.map +1 -0
  71. package/dist/services/assets/index.d.ts +36 -0
  72. package/dist/services/assets/index.js +89 -0
  73. package/dist/services/assets/index.js.map +1 -0
  74. package/dist/services/assets/local.d.ts +42 -0
  75. package/dist/services/assets/local.js +161 -0
  76. package/dist/services/assets/local.js.map +1 -0
  77. package/dist/services/assets/r2.d.ts +36 -0
  78. package/dist/services/assets/r2.js +182 -0
  79. package/dist/services/assets/r2.js.map +1 -0
  80. package/dist/services/csv-service.d.ts +36 -0
  81. package/dist/services/csv-service.js +143 -0
  82. package/dist/services/csv-service.js.map +1 -0
  83. package/dist/services/git.d.ts +99 -0
  84. package/dist/services/git.js +306 -0
  85. package/dist/services/git.js.map +1 -0
  86. package/dist/services/github-provisioner.d.ts +30 -0
  87. package/dist/services/github-provisioner.js +89 -0
  88. package/dist/services/github-provisioner.js.map +1 -0
  89. package/dist/services/markdown.d.ts +82 -0
  90. package/dist/services/markdown.js +338 -0
  91. package/dist/services/markdown.js.map +1 -0
  92. package/dist/services/memory-service.d.ts +74 -0
  93. package/dist/services/memory-service.js +183 -0
  94. package/dist/services/memory-service.js.map +1 -0
  95. package/dist/utils/git.d.ts +28 -0
  96. package/dist/utils/git.js +55 -0
  97. package/dist/utils/git.js.map +1 -0
  98. package/dist/utils/preflight.d.ts +44 -0
  99. package/dist/utils/preflight.js +95 -0
  100. package/dist/utils/preflight.js.map +1 -0
  101. package/package.json +55 -0
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Entity validation schemas for Studiograph
3
+ *
4
+ * Based on real-world templates from Schema Design's Obsidian vault,
5
+ * generalized for use by any creative service firm.
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Base entity schema - all entities have these fields
10
+ */
11
+ export const EntityBaseSchema = z.object({
12
+ entity_type: z.string().min(1, 'Entity type is required'),
13
+ entity_id: z.string()
14
+ .regex(/^[a-z0-9-]+$/, 'Entity ID must be kebab-case (lowercase letters, numbers, hyphens only)')
15
+ .min(1, 'Entity ID is required'),
16
+ created_at: z.string().datetime('Invalid datetime format'),
17
+ updated_at: z.string().datetime('Invalid datetime format'),
18
+ created_by: z.string().min(1, 'Created by is required'),
19
+ updated_by: z.string().min(1, 'Updated by is required'),
20
+ visibility: z.enum(['public', 'team', 'admin', 'restricted'])
21
+ .default('team')
22
+ .describe('Access level for this entity'),
23
+ restricted_to: z.array(z.string())
24
+ .optional()
25
+ .describe('User IDs with access (if visibility=restricted)'),
26
+ sensitive_fields: z.array(z.string())
27
+ .optional()
28
+ .describe('Fields that contain sensitive data'),
29
+ tags: z.array(z.string())
30
+ .optional()
31
+ .describe('Tags for categorization'),
32
+ }).passthrough(); // Allow custom fields beyond the base schema
33
+ /**
34
+ * PROJECT REPO ENTITIES
35
+ * Used in project-specific repositories (one per client/project)
36
+ */
37
+ /**
38
+ * Project entity - represents a client engagement or internal initiative
39
+ */
40
+ export const ProjectSchema = EntityBaseSchema.extend({
41
+ entity_type: z.literal('project'),
42
+ name: z.string().min(1, 'Project name is required'),
43
+ client: z.string().optional().describe('Client name or wikilink'),
44
+ website_url: z.string().url().optional().describe('Project website URL'),
45
+ start_date: z.string().optional().describe('Project start date (ISO 8601 or human-readable)'),
46
+ end_date: z.string().optional().describe('Project end date'),
47
+ target_completion: z.string().optional().describe('Target completion date'),
48
+ year_released: z.number().optional().describe('Year the project was released'),
49
+ status: z.enum(['planning', 'active', 'on-hold', 'completed', 'archived'])
50
+ .optional()
51
+ .describe('Current project status'),
52
+ related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
53
+ related_areas: z.array(z.string()).optional().describe('Practice areas (e.g., [[Data Visualization]])'),
54
+ team: z.array(z.string()).optional().describe('Team member wikilinks'),
55
+ deliverables: z.array(z.string()).optional().describe('Project deliverables'),
56
+ });
57
+ /**
58
+ * Meeting entity - captures meeting notes, decisions, and action items
59
+ */
60
+ export const MeetingSchema = EntityBaseSchema.extend({
61
+ entity_type: z.literal('meeting'),
62
+ name: z.string().min(1, 'Meeting name/subject is required'),
63
+ date: z.string().describe('Meeting date (ISO 8601 or human-readable)'),
64
+ attendees: z.array(z.string()).optional().describe('Attendee names or wikilinks'),
65
+ related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
66
+ related_organizations: z.array(z.string()).optional().describe('Related organization wikilinks'),
67
+ related_areas: z.array(z.string()).optional().describe('Practice area wikilinks'),
68
+ agenda: z.string().optional().describe('Meeting agenda (markdown)'),
69
+ notes: z.string().optional().describe('Meeting notes (markdown)'),
70
+ action_items: z.array(z.string()).optional().describe('Action items from the meeting'),
71
+ summary: z.string().optional().describe('Meeting summary'),
72
+ });
73
+ /**
74
+ * Decision entity - structured decision records (ADR-style)
75
+ * Format: DEC-YYYY-NNN
76
+ */
77
+ export const DecisionSchema = EntityBaseSchema.extend({
78
+ entity_type: z.literal('decision'),
79
+ id: z.string()
80
+ .regex(/^DEC-\d{4}-\d{3}$/, 'Decision ID must be in format DEC-YYYY-NNN')
81
+ .describe('Unique decision identifier'),
82
+ title: z.string().min(1, 'Decision title is required'),
83
+ date: z.string().describe('Decision date (ISO 8601 or human-readable)'),
84
+ status: z.enum(['proposed', 'accepted', 'rejected', 'deprecated', 'superseded'])
85
+ .default('proposed')
86
+ .describe('Current status of the decision'),
87
+ decision_makers: z.array(z.string())
88
+ .optional()
89
+ .describe('People who made the decision'),
90
+ stakeholders: z.array(z.string())
91
+ .optional()
92
+ .describe('People affected by the decision'),
93
+ related_decisions: z.array(z.string())
94
+ .optional()
95
+ .describe('Related decision wikilinks'),
96
+ supersedes: z.string()
97
+ .optional()
98
+ .describe('Decision this one replaces (wikilink)'),
99
+ superseded_by: z.string()
100
+ .optional()
101
+ .describe('Decision that replaces this one (wikilink)'),
102
+ context: z.string()
103
+ .optional()
104
+ .describe('Background and why this decision was needed'),
105
+ alternatives: z.string()
106
+ .optional()
107
+ .describe('Alternatives considered (markdown)'),
108
+ decision: z.string()
109
+ .optional()
110
+ .describe('The actual decision made'),
111
+ rationale: z.string()
112
+ .optional()
113
+ .describe('Why this decision was chosen'),
114
+ consequences: z.string()
115
+ .optional()
116
+ .describe('Positive/negative outcomes and risks'),
117
+ enables: z.array(z.string())
118
+ .optional()
119
+ .describe('Decisions this one enables'),
120
+ });
121
+ /**
122
+ * Brief entity - project briefs and requirements
123
+ */
124
+ export const BriefSchema = EntityBaseSchema.extend({
125
+ entity_type: z.literal('brief'),
126
+ project_name: z.string().min(1, 'Project name is required'),
127
+ client: z.string().optional().describe('Client name or wikilink'),
128
+ start_date: z.string().optional().describe('Project start date'),
129
+ target_completion: z.string().optional().describe('Target completion date'),
130
+ status: z.enum(['planning', 'approved', 'in-progress', 'completed'])
131
+ .default('planning')
132
+ .describe('Brief status'),
133
+ objectives: z.array(z.string()).optional().describe('Project objectives'),
134
+ target_users: z.string().optional().describe('Target users/audience'),
135
+ success_criteria: z.array(z.string()).optional().describe('Success criteria'),
136
+ constraints: z.string().optional().describe('Constraints (timeline, budget, technical)'),
137
+ stakeholders: z.array(z.string()).optional().describe('Key stakeholder wikilinks'),
138
+ deliverables: z.array(z.string()).optional().describe('Expected deliverables'),
139
+ related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
140
+ });
141
+ /**
142
+ * Artifact entity - deliverables and project outputs
143
+ */
144
+ export const ArtifactSchema = EntityBaseSchema.extend({
145
+ entity_type: z.literal('artifact'),
146
+ name: z.string().min(1, 'Artifact name is required'),
147
+ type: z.string()
148
+ .optional()
149
+ .describe('Artifact type (e.g., presentation, prototype, report, design-file)'),
150
+ project: z.string().optional().describe('Related project wikilink'),
151
+ date_created: z.string().optional().describe('Creation date'),
152
+ description: z.string().optional().describe('Artifact description'),
153
+ url: z.string().optional().describe('URL or file path'),
154
+ version: z.string().optional().describe('Version number'),
155
+ });
156
+ /**
157
+ * FUNCTION REPO ENTITIES
158
+ * Used in function-specific repositories (business operations)
159
+ */
160
+ /**
161
+ * Proposal entity - client proposals and SOWs
162
+ */
163
+ export const ProposalSchema = EntityBaseSchema.extend({
164
+ entity_type: z.literal('proposal'),
165
+ name: z.string().min(1, 'Proposal name is required'),
166
+ client: z.string().optional().describe('Client name or wikilink'),
167
+ project_name: z.string().optional().describe('Project name'),
168
+ date: z.string().optional().describe('Proposal date'),
169
+ version: z.string().optional().describe('Version (e.g., v1, v2)'),
170
+ status: z.enum(['draft', 'sent', 'accepted', 'rejected', 'negotiating'])
171
+ .default('draft')
172
+ .describe('Proposal status'),
173
+ deliverables: z.array(z.string()).optional().describe('Proposed deliverables'),
174
+ phases: z.string().optional().describe('Project phases (markdown)'),
175
+ team: z.array(z.string()).optional().describe('Proposed team members'),
176
+ schedule: z.string().optional().describe('Proposed schedule'),
177
+ fees: z.string().optional().describe('Fee structure'),
178
+ payment_terms: z.string().optional().describe('Payment terms and schedule'),
179
+ });
180
+ /**
181
+ * Contract entity - SOWs, MSAs, NDAs
182
+ */
183
+ export const ContractSchema = EntityBaseSchema.extend({
184
+ entity_type: z.literal('contract'),
185
+ name: z.string().min(1, 'Contract name is required'),
186
+ type: z.enum(['sow', 'msa', 'nda', 'other'])
187
+ .optional()
188
+ .describe('Contract type'),
189
+ client: z.string().optional().describe('Client name or wikilink'),
190
+ project: z.string().optional().describe('Related project wikilink'),
191
+ date_signed: z.string().optional().describe('Signature date'),
192
+ start_date: z.string().optional().describe('Contract start date'),
193
+ end_date: z.string().optional().describe('Contract end date'),
194
+ status: z.enum(['draft', 'pending', 'signed', 'completed', 'terminated'])
195
+ .default('draft')
196
+ .describe('Contract status'),
197
+ value: z.string().optional().describe('Contract value'),
198
+ payment_terms: z.string().optional().describe('Payment terms'),
199
+ });
200
+ /**
201
+ * Person entity - team members, clients, contacts
202
+ */
203
+ export const PersonSchema = EntityBaseSchema.extend({
204
+ entity_type: z.literal('person'),
205
+ name: z.string().min(1, 'Person name is required'),
206
+ role: z.string().optional().describe('Role or title'),
207
+ status: z.enum(['current', 'former', 'contractor', 'client', 'partner'])
208
+ .optional()
209
+ .describe('Relationship status'),
210
+ email: z.string().email().optional().describe('Email address'),
211
+ location: z.string().optional().describe('Location'),
212
+ organization: z.string().optional().describe('Organization wikilink'),
213
+ years_experience: z.number().optional().describe('Years of experience'),
214
+ bio: z.string().optional().describe('Biography (markdown)'),
215
+ projects: z.array(z.string()).optional().describe('Related project wikilinks'),
216
+ });
217
+ /**
218
+ * Client entity - client organizations and companies
219
+ */
220
+ export const ClientSchema = EntityBaseSchema.extend({
221
+ entity_type: z.literal('client'),
222
+ name: z.string().min(1, 'Client name is required'),
223
+ type: z.enum(['corporate', 'nonprofit', 'government', 'startup', 'agency', 'other'])
224
+ .optional()
225
+ .describe('Organization type'),
226
+ status: z.enum(['active', 'inactive', 'prospect', 'former'])
227
+ .default('active')
228
+ .describe('Client status'),
229
+ industry: z.string().optional().describe('Industry sector'),
230
+ website: z.string().url().optional().describe('Website URL'),
231
+ location: z.string().optional().describe('Primary location'),
232
+ size: z.enum(['small', 'medium', 'large', 'enterprise'])
233
+ .optional()
234
+ .describe('Organization size'),
235
+ contacts: z.array(z.string()).optional().describe('Related person wikilinks'),
236
+ projects: z.array(z.string()).optional().describe('Related project wikilinks'),
237
+ relationship_start: z.string().optional().describe('When the relationship started'),
238
+ notes: z.string().optional().describe('Additional notes (markdown)'),
239
+ });
240
+ /**
241
+ * Financial Plan entity - budgets, rates, forecasts
242
+ */
243
+ export const FinancialPlanSchema = EntityBaseSchema.extend({
244
+ entity_type: z.literal('financial-plan'),
245
+ name: z.string().min(1, 'Financial plan name is required'),
246
+ type: z.enum(['budget', 'forecast', 'rates', 'compensation'])
247
+ .optional()
248
+ .describe('Plan type'),
249
+ period: z.string().optional().describe('Time period (e.g., Q1 2026, FY2026)'),
250
+ project: z.string().optional().describe('Related project wikilink'),
251
+ amounts: z.string().optional().describe('Financial amounts (markdown table)'),
252
+ });
253
+ /**
254
+ * SHARED RESOURCE REPO ENTITIES
255
+ * Used in shared knowledge repositories
256
+ */
257
+ /**
258
+ * Template entity - document templates and boilerplates
259
+ */
260
+ export const TemplateSchema = EntityBaseSchema.extend({
261
+ entity_type: z.literal('template'),
262
+ name: z.string().min(1, 'Template name is required'),
263
+ category: z.string()
264
+ .optional()
265
+ .describe('Template category (e.g., proposal, brief, sow, meeting-notes)'),
266
+ description: z.string().optional().describe('Template description'),
267
+ template_content: z.string().optional().describe('Template content (markdown)'),
268
+ variables: z.array(z.string())
269
+ .optional()
270
+ .describe('Template variables (e.g., {{project_name}})'),
271
+ });
272
+ /**
273
+ * Process entity - workflows and methodologies
274
+ */
275
+ export const ProcessSchema = EntityBaseSchema.extend({
276
+ entity_type: z.literal('process'),
277
+ name: z.string().min(1, 'Process name is required'),
278
+ description: z.string().optional().describe('Process description'),
279
+ steps: z.string().optional().describe('Process steps (markdown)'),
280
+ related_areas: z.array(z.string()).optional().describe('Related practice areas'),
281
+ related_templates: z.array(z.string()).optional().describe('Related template wikilinks'),
282
+ });
283
+ /**
284
+ * Standard entity - guidelines and best practices
285
+ */
286
+ export const StandardSchema = EntityBaseSchema.extend({
287
+ entity_type: z.literal('standard'),
288
+ name: z.string().min(1, 'Standard name is required'),
289
+ category: z.string()
290
+ .optional()
291
+ .describe('Standard category (e.g., accessibility, design-principles, code-standards)'),
292
+ description: z.string().optional().describe('Standard description'),
293
+ guidelines: z.string().optional().describe('Guidelines (markdown)'),
294
+ examples: z.array(z.string()).optional().describe('Example wikilinks'),
295
+ });
296
+ /**
297
+ * Reference entity - external references and inspirations
298
+ */
299
+ export const ReferenceSchema = EntityBaseSchema.extend({
300
+ entity_type: z.literal('reference'),
301
+ name: z.string().min(1, 'Reference name is required'),
302
+ type: z.enum(['article', 'video', 'visualization', 'website', 'research', 'podcast', 'project', 'tool'])
303
+ .optional()
304
+ .describe('Reference type'),
305
+ date: z.string().optional().describe('Publication or creation date'),
306
+ source: z.string().optional().describe('Source/author'),
307
+ link: z.string().optional().describe('URL'),
308
+ related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
309
+ related_people: z.array(z.string()).optional().describe('Related people wikilinks'),
310
+ related_areas: z.array(z.string()).optional().describe('Related practice areas'),
311
+ description: z.string().optional().describe('Reference description'),
312
+ });
313
+ /**
314
+ * Technique entity - methods and patterns
315
+ */
316
+ export const TechniqueSchema = EntityBaseSchema.extend({
317
+ entity_type: z.literal('technique'),
318
+ name: z.string().min(1, 'Technique name is required'),
319
+ category: z.string()
320
+ .optional()
321
+ .describe('Technique category (e.g., visualization, interaction-pattern, data-structure)'),
322
+ description: z.string().optional().describe('Technique description'),
323
+ difficulty: z.enum(['beginner', 'intermediate', 'advanced'])
324
+ .optional()
325
+ .describe('Difficulty level'),
326
+ related_frameworks: z.array(z.string()).optional().describe('Related framework wikilinks'),
327
+ examples: z.array(z.string()).optional().describe('Example wikilinks'),
328
+ });
329
+ /**
330
+ * Dataset entity - structured tabular data with CSV body
331
+ */
332
+ export const ColumnDefinitionSchema = z.object({
333
+ name: z.string().min(1),
334
+ type: z.enum(['string', 'number', 'boolean', 'date']),
335
+ required: z.boolean().optional(),
336
+ description: z.string().optional(),
337
+ });
338
+ export const DatasetSchema = EntityBaseSchema.extend({
339
+ entity_type: z.literal('dataset'),
340
+ name: z.string().min(1, 'Dataset name is required'),
341
+ schema: z.array(ColumnDefinitionSchema).min(1, 'At least one column required'),
342
+ });
343
+ // ── App entity types ────────────────────────────────────────────────────────
344
+ /**
345
+ * Deck — presentation deck managed by the Schema Slides app plugin.
346
+ * The document body is the full slide markdown (HTML comment directives + slide content).
347
+ */
348
+ export const DeckSchema = EntityBaseSchema.extend({
349
+ entity_type: z.literal('deck'),
350
+ title: z.string().min(1, 'Deck title is required'),
351
+ client: z.string().optional(),
352
+ date: z.string().min(1, 'Date is required'),
353
+ phase: z.string().optional(),
354
+ theme: z.enum(['dark', 'light']).default('dark'),
355
+ status: z.enum(['draft', 'review', 'approved']).default('draft'),
356
+ related_project: z.string().optional(),
357
+ related_client: z.string().optional(),
358
+ });
359
+ /**
360
+ * Schema registry - maps entity types to their schemas
361
+ */
362
+ export const ENTITY_SCHEMAS = {
363
+ // Project repos
364
+ project: ProjectSchema,
365
+ meeting: MeetingSchema,
366
+ decision: DecisionSchema,
367
+ brief: BriefSchema,
368
+ artifact: ArtifactSchema,
369
+ // Function repos
370
+ proposal: ProposalSchema,
371
+ contract: ContractSchema,
372
+ person: PersonSchema,
373
+ client: ClientSchema,
374
+ 'financial-plan': FinancialPlanSchema,
375
+ // Shared resource repos
376
+ template: TemplateSchema,
377
+ process: ProcessSchema,
378
+ standard: StandardSchema,
379
+ reference: ReferenceSchema,
380
+ technique: TechniqueSchema,
381
+ // Dataset
382
+ dataset: DatasetSchema,
383
+ // App entity types (registered by app plugins)
384
+ deck: DeckSchema,
385
+ };
386
+ /**
387
+ * Validation helper with helpful error messages
388
+ */
389
+ export function validateEntity(entityType, data) {
390
+ const schema = ENTITY_SCHEMAS[entityType];
391
+ if (!schema) {
392
+ throw new Error(`Unknown entity type: ${entityType}`);
393
+ }
394
+ try {
395
+ return schema.parse(data);
396
+ }
397
+ catch (error) {
398
+ if (error instanceof z.ZodError) {
399
+ const messages = error.errors.map(e => {
400
+ const path = e.path.join('.');
401
+ return ` - ${path}: ${e.message}`;
402
+ });
403
+ throw new Error(`Validation failed for ${entityType}:\n${messages.join('\n')}`);
404
+ }
405
+ throw error;
406
+ }
407
+ }
408
+ /**
409
+ * Validate custom entity type (no schema, just base fields)
410
+ */
411
+ export function validateCustomEntity(data) {
412
+ try {
413
+ return EntityBaseSchema.parse(data);
414
+ }
415
+ catch (error) {
416
+ if (error instanceof z.ZodError) {
417
+ const messages = error.errors.map(e => {
418
+ const path = e.path.join('.');
419
+ return ` - ${path}: ${e.message}`;
420
+ });
421
+ throw new Error(`Validation failed for custom entity:\n${messages.join('\n')}`);
422
+ }
423
+ throw error;
424
+ }
425
+ }
426
+ /**
427
+ * Check if entity type is a known type
428
+ */
429
+ export function isKnownEntityType(type) {
430
+ return type in ENTITY_SCHEMAS;
431
+ }
432
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Workspace Manager
3
+ *
4
+ * Coordinates multiple repository graph managers.
5
+ * Provides cross-repo search, wikilink validation, and unified operations.
6
+ */
7
+ import { BaseGraphManager, type EntityFile, type SearchOptions as BaseSearchOptions } from './graph.js';
8
+ import { WorkspaceConfig, RepoConfig, User } from './types.js';
9
+ import { GitUser } from '../services/git.js';
10
+ import { EntityType } from './validation.js';
11
+ export interface WorkspaceSearchOptions extends BaseSearchOptions {
12
+ repoNames?: string[];
13
+ }
14
+ export interface CrossRepoEntityFile extends EntityFile {
15
+ repoName: string;
16
+ }
17
+ export declare class WorkspaceManager {
18
+ private workspacePath;
19
+ private config;
20
+ private graphs;
21
+ private gitUser;
22
+ private user;
23
+ constructor(workspacePath: string, config: WorkspaceConfig, gitUser: GitUser, user: User);
24
+ /**
25
+ * Initialize graph managers for all configured repos
26
+ */
27
+ private initializeGraphs;
28
+ /**
29
+ * Check if user has access to a repository
30
+ */
31
+ private canAccessRepo;
32
+ /**
33
+ * Get graph manager for a specific repo
34
+ * @throws PermissionError if user lacks access to repo
35
+ */
36
+ getGraph(repoName: string): BaseGraphManager;
37
+ /**
38
+ * Get all repository names (filtered by user access)
39
+ */
40
+ getRepoNames(): string[];
41
+ /**
42
+ * Get repository configuration
43
+ */
44
+ getRepoConfig(repoName: string): RepoConfig | undefined;
45
+ /**
46
+ * Get all repository configurations (filtered by user access)
47
+ */
48
+ getAllRepoConfigs(): RepoConfig[];
49
+ /**
50
+ * Search across all repositories (filtered by user access)
51
+ */
52
+ search(options: WorkspaceSearchOptions): CrossRepoEntityFile[];
53
+ /**
54
+ * List entities across all repositories (filtered by user access)
55
+ */
56
+ list(entityType?: EntityType, limit?: number): CrossRepoEntityFile[];
57
+ /**
58
+ * Find entity across all repositories (filtered by user access)
59
+ */
60
+ findEntity(entityType: EntityType, entityId: string): CrossRepoEntityFile | null;
61
+ /**
62
+ * Validate wikilinks across all repositories (filtered by user access)
63
+ * @throws PermissionError if user lacks access to source repo
64
+ */
65
+ validateWikilinks(repoName: string, entityType: EntityType, entityId: string): {
66
+ valid: string[];
67
+ broken: string[];
68
+ crossRepo: Array<{
69
+ link: string;
70
+ repo: string;
71
+ }>;
72
+ inaccessible: Array<{
73
+ link: string;
74
+ repo: string;
75
+ requiredAccess: string;
76
+ }>;
77
+ };
78
+ /**
79
+ * Get entities related to a given entity (cross-repo, filtered by user access)
80
+ * @throws PermissionError if user lacks access to source repo
81
+ */
82
+ getRelated(repoName: string, entityType: EntityType, entityId: string): CrossRepoEntityFile[];
83
+ /**
84
+ * Get backlinks across all repositories (filtered by user access)
85
+ */
86
+ getBacklinks(repoName: string, entityType: EntityType, entityId: string): CrossRepoEntityFile[];
87
+ /**
88
+ * Get workspace summary statistics (filtered by user access)
89
+ */
90
+ getSummary(): {
91
+ totalRepos: number;
92
+ totalEntities: number;
93
+ entitiesByType: Record<string, number>;
94
+ entitiesByRepo: Record<string, number>;
95
+ };
96
+ /**
97
+ * Discover repos in workspace (find .studiograph marker files)
98
+ */
99
+ static discoverRepos(workspacePath: string): Array<{
100
+ name: string;
101
+ path: string;
102
+ type: string;
103
+ }>;
104
+ }