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.
- package/README.md +18 -0
- package/dist/agent/orchestrator.d.ts +69 -0
- package/dist/agent/orchestrator.js +211 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/tools/graph-tools.d.ts +30 -0
- package/dist/agent/tools/graph-tools.js +536 -0
- package/dist/agent/tools/graph-tools.js.map +1 -0
- package/dist/auth/github.d.ts +53 -0
- package/dist/auth/github.js +180 -0
- package/dist/auth/github.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +10 -0
- package/dist/cli/commands/auth.js +63 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.js +299 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/join.d.ts +14 -0
- package/dist/cli/commands/join.js +230 -0
- package/dist/cli/commands/join.js.map +1 -0
- package/dist/cli/commands/members.d.ts +11 -0
- package/dist/cli/commands/members.js +230 -0
- package/dist/cli/commands/members.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +17 -0
- package/dist/cli/commands/serve.js +90 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/start.d.ts +7 -0
- package/dist/cli/commands/start.js +381 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +10 -0
- package/dist/cli/commands/sync.js +121 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/graph.d.ts +169 -0
- package/dist/core/graph.js +558 -0
- package/dist/core/graph.js.map +1 -0
- package/dist/core/types.d.ts +216 -0
- package/dist/core/types.js +71 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/user-config.d.ts +31 -0
- package/dist/core/user-config.js +50 -0
- package/dist/core/user-config.js.map +1 -0
- package/dist/core/validation.d.ts +2371 -0
- package/dist/core/validation.js +432 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/core/workspace-manager.d.ts +104 -0
- package/dist/core/workspace-manager.js +432 -0
- package/dist/core/workspace-manager.js.map +1 -0
- package/dist/core/workspace.d.ts +103 -0
- package/dist/core/workspace.js +306 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/server/index.d.ts +25 -0
- package/dist/server/index.js +84 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/plugin-loader.d.ts +31 -0
- package/dist/server/plugin-loader.js +81 -0
- package/dist/server/plugin-loader.js.map +1 -0
- package/dist/server/routes/chat.d.ts +11 -0
- package/dist/server/routes/chat.js +66 -0
- package/dist/server/routes/chat.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +9 -0
- package/dist/server/routes/graph-api.js +72 -0
- package/dist/server/routes/graph-api.js.map +1 -0
- package/dist/server/routes/webhook.d.ts +14 -0
- package/dist/server/routes/webhook.js +69 -0
- package/dist/server/routes/webhook.js.map +1 -0
- package/dist/services/assets/base.d.ts +69 -0
- package/dist/services/assets/base.js +113 -0
- package/dist/services/assets/base.js.map +1 -0
- package/dist/services/assets/index.d.ts +36 -0
- package/dist/services/assets/index.js +89 -0
- package/dist/services/assets/index.js.map +1 -0
- package/dist/services/assets/local.d.ts +42 -0
- package/dist/services/assets/local.js +161 -0
- package/dist/services/assets/local.js.map +1 -0
- package/dist/services/assets/r2.d.ts +36 -0
- package/dist/services/assets/r2.js +182 -0
- package/dist/services/assets/r2.js.map +1 -0
- package/dist/services/csv-service.d.ts +36 -0
- package/dist/services/csv-service.js +143 -0
- package/dist/services/csv-service.js.map +1 -0
- package/dist/services/git.d.ts +99 -0
- package/dist/services/git.js +306 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/github-provisioner.d.ts +30 -0
- package/dist/services/github-provisioner.js +89 -0
- package/dist/services/github-provisioner.js.map +1 -0
- package/dist/services/markdown.d.ts +82 -0
- package/dist/services/markdown.js +338 -0
- package/dist/services/markdown.js.map +1 -0
- package/dist/services/memory-service.d.ts +74 -0
- package/dist/services/memory-service.js +183 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/utils/git.d.ts +28 -0
- package/dist/utils/git.js +55 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/preflight.d.ts +44 -0
- package/dist/utils/preflight.js +95 -0
- package/dist/utils/preflight.js.map +1 -0
- 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
|
+
}
|