studiograph 1.1.1 → 1.1.3

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 (147) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +307 -10
  3. package/dist/agent/orchestrator.d.ts +17 -9
  4. package/dist/agent/orchestrator.js +95 -95
  5. package/dist/agent/orchestrator.js.map +1 -1
  6. package/dist/agent/prompts/system.md +168 -0
  7. package/dist/agent/skills/bundled/enrich-entities.md +124 -0
  8. package/dist/agent/skills/bundled/gather-context.md +46 -0
  9. package/dist/agent/skills/skill-loader.d.ts +48 -0
  10. package/dist/agent/skills/skill-loader.js +166 -0
  11. package/dist/agent/skills/skill-loader.js.map +1 -0
  12. package/dist/agent/tools/graph-tools.d.ts +20 -2
  13. package/dist/agent/tools/graph-tools.js +64 -8
  14. package/dist/agent/tools/graph-tools.js.map +1 -1
  15. package/dist/agent/tools/load-skill.d.ts +42 -0
  16. package/dist/agent/tools/load-skill.js +45 -0
  17. package/dist/agent/tools/load-skill.js.map +1 -0
  18. package/dist/agent/tools/tool-loader.d.ts +25 -0
  19. package/dist/agent/tools/tool-loader.js +73 -0
  20. package/dist/agent/tools/tool-loader.js.map +1 -0
  21. package/dist/cli/commands/app.d.ts +7 -0
  22. package/dist/cli/commands/app.js +167 -0
  23. package/dist/cli/commands/app.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +13 -0
  25. package/dist/cli/commands/config.js +276 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/connector.d.ts +33 -0
  28. package/dist/cli/commands/connector.js +170 -0
  29. package/dist/cli/commands/connector.js.map +1 -0
  30. package/dist/cli/commands/deploy.d.ts +11 -0
  31. package/dist/cli/commands/deploy.js +153 -0
  32. package/dist/cli/commands/deploy.js.map +1 -0
  33. package/dist/cli/commands/index.d.ts +15 -0
  34. package/dist/cli/commands/index.js +117 -0
  35. package/dist/cli/commands/index.js.map +1 -0
  36. package/dist/cli/commands/init.js +110 -28
  37. package/dist/cli/commands/init.js.map +1 -1
  38. package/dist/cli/commands/join.js +67 -22
  39. package/dist/cli/commands/join.js.map +1 -1
  40. package/dist/cli/commands/lint.d.ts +8 -0
  41. package/dist/cli/commands/lint.js +70 -0
  42. package/dist/cli/commands/lint.js.map +1 -0
  43. package/dist/cli/commands/mcp.d.ts +27 -0
  44. package/dist/cli/commands/mcp.js +56 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/provision.d.ts +8 -0
  47. package/dist/cli/commands/provision.js +112 -0
  48. package/dist/cli/commands/provision.js.map +1 -0
  49. package/dist/cli/commands/r2.d.ts +2 -0
  50. package/dist/cli/commands/r2.js +186 -4
  51. package/dist/cli/commands/r2.js.map +1 -1
  52. package/dist/cli/commands/serve.js +47 -2
  53. package/dist/cli/commands/serve.js.map +1 -1
  54. package/dist/cli/commands/start.js +210 -71
  55. package/dist/cli/commands/start.js.map +1 -1
  56. package/dist/cli/commands/sync.js +4 -4
  57. package/dist/cli/commands/sync.js.map +1 -1
  58. package/dist/cli/commands/update.d.ts +8 -0
  59. package/dist/cli/commands/update.js +155 -0
  60. package/dist/cli/commands/update.js.map +1 -0
  61. package/dist/cli/index.js +83 -3
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/scaffolding.d.ts +9 -0
  64. package/dist/cli/scaffolding.js +288 -0
  65. package/dist/cli/scaffolding.js.map +1 -0
  66. package/dist/core/graph.d.ts +12 -1
  67. package/dist/core/graph.js +147 -78
  68. package/dist/core/graph.js.map +1 -1
  69. package/dist/core/migration-runner.d.ts +39 -0
  70. package/dist/core/migration-runner.js +221 -0
  71. package/dist/core/migration-runner.js.map +1 -0
  72. package/dist/core/migration-types.d.ts +101 -0
  73. package/dist/core/migration-types.js +21 -0
  74. package/dist/core/migration-types.js.map +1 -0
  75. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +2 -0
  76. package/dist/core/migrations/20260219-formalize-memory-location.js +35 -0
  77. package/dist/core/migrations/20260219-formalize-memory-location.js.map +1 -0
  78. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +12 -0
  79. package/dist/core/migrations/20260220-add-workspace-metadata.js +65 -0
  80. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +1 -0
  81. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +11 -0
  82. package/dist/core/migrations/20260220-add-workspace-readme.js +82 -0
  83. package/dist/core/migrations/20260220-add-workspace-readme.js.map +1 -0
  84. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +9 -0
  85. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +64 -0
  86. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +1 -0
  87. package/dist/core/migrations/index.d.ts +11 -0
  88. package/dist/core/migrations/index.js +23 -0
  89. package/dist/core/migrations/index.js.map +1 -0
  90. package/dist/core/schema-registry.d.ts +36 -0
  91. package/dist/core/schema-registry.js +161 -0
  92. package/dist/core/schema-registry.js.map +1 -0
  93. package/dist/core/types.d.ts +242 -0
  94. package/dist/core/types.js +21 -0
  95. package/dist/core/types.js.map +1 -1
  96. package/dist/core/user-config.d.ts +10 -0
  97. package/dist/core/user-config.js +8 -0
  98. package/dist/core/user-config.js.map +1 -1
  99. package/dist/core/validation.d.ts +973 -32
  100. package/dist/core/validation.js +163 -4
  101. package/dist/core/validation.js.map +1 -1
  102. package/dist/core/workspace-manager.d.ts +26 -2
  103. package/dist/core/workspace-manager.js +113 -15
  104. package/dist/core/workspace-manager.js.map +1 -1
  105. package/dist/core/workspace.d.ts +8 -7
  106. package/dist/core/workspace.js +25 -13
  107. package/dist/core/workspace.js.map +1 -1
  108. package/dist/mcp/connector-manager.d.ts +61 -0
  109. package/dist/mcp/connector-manager.js +178 -0
  110. package/dist/mcp/connector-manager.js.map +1 -0
  111. package/dist/mcp/connectors/definitions.d.ts +43 -0
  112. package/dist/mcp/connectors/definitions.js +140 -0
  113. package/dist/mcp/connectors/definitions.js.map +1 -0
  114. package/dist/mcp/server.d.ts +11 -0
  115. package/dist/mcp/server.js +28 -0
  116. package/dist/mcp/server.js.map +1 -0
  117. package/dist/mcp/tools.d.ts +14 -0
  118. package/dist/mcp/tools.js +172 -0
  119. package/dist/mcp/tools.js.map +1 -0
  120. package/dist/server/index.js +17 -4
  121. package/dist/server/index.js.map +1 -1
  122. package/dist/server/plugin-loader.d.ts +8 -0
  123. package/dist/server/plugin-loader.js +14 -0
  124. package/dist/server/plugin-loader.js.map +1 -1
  125. package/dist/server/routes/graph-api.js +1 -1
  126. package/dist/server/routes/graph-api.js.map +1 -1
  127. package/dist/server/routes/webhook.js +33 -0
  128. package/dist/server/routes/webhook.js.map +1 -1
  129. package/dist/services/github-provisioner.d.ts +1 -0
  130. package/dist/services/github-provisioner.js +11 -0
  131. package/dist/services/github-provisioner.js.map +1 -1
  132. package/dist/services/lint-service.d.ts +27 -0
  133. package/dist/services/lint-service.js +76 -0
  134. package/dist/services/lint-service.js.map +1 -0
  135. package/dist/services/markdown.d.ts +9 -0
  136. package/dist/services/markdown.js +23 -2
  137. package/dist/services/markdown.js.map +1 -1
  138. package/dist/services/memory-service.d.ts +1 -2
  139. package/dist/services/memory-service.js +6 -4
  140. package/dist/services/memory-service.js.map +1 -1
  141. package/dist/services/vector-service.d.ts +77 -0
  142. package/dist/services/vector-service.js +280 -0
  143. package/dist/services/vector-service.js.map +1 -0
  144. package/dist/utils/version-checker.d.ts +23 -0
  145. package/dist/utils/version-checker.js +116 -0
  146. package/dist/utils/version-checker.js.map +1 -0
  147. package/package.json +10 -6
@@ -0,0 +1,64 @@
1
+ import { join } from 'path';
2
+ import * as yaml from 'js-yaml';
3
+ /**
4
+ * Migration: Convert legacy YAML workspace config to JSON
5
+ *
6
+ * Early versions of Studiograph used config.yml for workspace configuration.
7
+ * This migration converts any remaining YAML configs to the new workspace.json
8
+ * format and removes the legacy file.
9
+ */
10
+ export const migration = {
11
+ id: '20260220-migrate-yaml-to-json',
12
+ description: 'Convert legacy YAML workspace config to JSON format',
13
+ targetVersion: '1.2.0',
14
+ async up(context) {
15
+ const yamlPath = join(context.workspacePath, '.studiograph', 'config.yml');
16
+ const jsonPath = join(context.workspacePath, '.studiograph', 'workspace.json');
17
+ // Check if YAML config exists
18
+ if (!context.fileExists(yamlPath)) {
19
+ context.log('No legacy YAML config found - skipping');
20
+ return;
21
+ }
22
+ // If JSON config already exists, we've likely already migrated
23
+ if (context.fileExists(jsonPath)) {
24
+ context.warn('Both YAML and JSON configs exist - removing YAML backup');
25
+ context.deleteFile(yamlPath);
26
+ return;
27
+ }
28
+ context.log('Converting YAML config to JSON...');
29
+ // Read and parse YAML config
30
+ const yamlContent = context.readFile(yamlPath);
31
+ const config = yaml.load(yamlContent);
32
+ // Ensure required fields exist
33
+ if (!config.version)
34
+ config.version = '1.0.0';
35
+ if (!config.created_at)
36
+ config.created_at = new Date().toISOString();
37
+ if (!config.repos)
38
+ config.repos = [];
39
+ // Write as JSON
40
+ context.writeFile(jsonPath, JSON.stringify(config, null, 2));
41
+ context.log(`✓ Converted YAML config to workspace.json`);
42
+ // Remove legacy YAML file
43
+ context.deleteFile(yamlPath);
44
+ context.log(`✓ Removed legacy config.yml`);
45
+ },
46
+ async down(context) {
47
+ const yamlPath = join(context.workspacePath, '.studiograph', 'config.yml');
48
+ const jsonPath = join(context.workspacePath, '.studiograph', 'workspace.json');
49
+ // Rollback: convert JSON back to YAML
50
+ if (context.fileExists(jsonPath)) {
51
+ const jsonContent = context.readFile(jsonPath);
52
+ const config = JSON.parse(jsonContent);
53
+ const yamlContent = yaml.dump(config);
54
+ context.writeFile(yamlPath, yamlContent);
55
+ context.log('Rollback: Restored config.yml from workspace.json');
56
+ }
57
+ },
58
+ async shouldRun(context) {
59
+ const yamlPath = join(context.workspacePath, '.studiograph', 'config.yml');
60
+ // Only run if YAML config exists
61
+ return context.fileExists(yamlPath);
62
+ },
63
+ };
64
+ //# sourceMappingURL=20260220-migrate-yaml-to-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260220-migrate-yaml-to-json.js","sourceRoot":"","sources":["../../../src/core/migrations/20260220-migrate-yaml-to-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * All migrations in chronological order.
3
+ * Naming convention: YYYYMMDD-kebab-case-description.ts
4
+ *
5
+ * Migration execution order:
6
+ * 1. 20260219-formalize-memory-location — Ensures global memory directory
7
+ * 2. 20260220-migrate-yaml-to-json — Converts legacy YAML configs
8
+ * 3. 20260220-add-workspace-metadata — Adds tracking fields
9
+ * 4. 20260220-add-workspace-readme — Creates documentation
10
+ */
11
+ export declare const ALL_MIGRATIONS: import("../migration-types.js").Migration[];
@@ -0,0 +1,23 @@
1
+ import { migration as m20260219 } from './20260219-formalize-memory-location.js';
2
+ import { migration as m20260220_yaml } from './20260220-migrate-yaml-to-json.js';
3
+ import { migration as m20260220_metadata } from './20260220-add-workspace-metadata.js';
4
+ import { migration as m20260220_readme } from './20260220-add-workspace-readme.js';
5
+ // Future migrations added here
6
+ /**
7
+ * All migrations in chronological order.
8
+ * Naming convention: YYYYMMDD-kebab-case-description.ts
9
+ *
10
+ * Migration execution order:
11
+ * 1. 20260219-formalize-memory-location — Ensures global memory directory
12
+ * 2. 20260220-migrate-yaml-to-json — Converts legacy YAML configs
13
+ * 3. 20260220-add-workspace-metadata — Adds tracking fields
14
+ * 4. 20260220-add-workspace-readme — Creates documentation
15
+ */
16
+ export const ALL_MIGRATIONS = [
17
+ m20260219,
18
+ m20260220_yaml,
19
+ m20260220_metadata,
20
+ m20260220_readme,
21
+ // New migrations appended in chronological order
22
+ ];
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACnF,+BAA+B;AAE/B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS;IACT,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,iDAAiD;CAClD,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SchemaRegistry
3
+ *
4
+ * Builds and caches merged Zod schemas from workspace config schema_extensions.
5
+ * Supports additive extensions to existing entity types and fully custom new types.
6
+ */
7
+ import { z } from 'zod';
8
+ import { FieldDefinition, SchemaExtension } from './types.js';
9
+ export declare class SchemaRegistry {
10
+ private extensions;
11
+ private schemaCache;
12
+ private fieldDefsCache;
13
+ constructor(extensions?: Record<string, SchemaExtension>);
14
+ private build;
15
+ /**
16
+ * Get the Zod schema for an entity type (built-in + extensions, or custom).
17
+ * Falls back to the built-in schema, then EntityBaseSchema.
18
+ */
19
+ getSchema(entityType: string): z.ZodTypeAny;
20
+ /**
21
+ * Get the declared field definitions for an entity type.
22
+ * For extended built-in types: returns additional_fields only.
23
+ * For custom types: returns all fields.
24
+ * For types with no extension: returns [].
25
+ */
26
+ getFieldDefs(entityType: string): FieldDefinition[];
27
+ /**
28
+ * Get all entity type names: built-in types + custom extension types.
29
+ */
30
+ getAllTypes(): string[];
31
+ /**
32
+ * Return a formatted prompt section describing the workspace's schema extensions.
33
+ * Returns "" when no extensions are defined.
34
+ */
35
+ toPromptSection(): string;
36
+ }
@@ -0,0 +1,161 @@
1
+ /**
2
+ * SchemaRegistry
3
+ *
4
+ * Builds and caches merged Zod schemas from workspace config schema_extensions.
5
+ * Supports additive extensions to existing entity types and fully custom new types.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ENTITY_SCHEMAS, EntityBaseSchema } from './validation.js';
9
+ /**
10
+ * Build a record of Zod field entries from an array of FieldDefinitions.
11
+ */
12
+ function buildZodFields(fields) {
13
+ const result = {};
14
+ for (const field of fields) {
15
+ let zodType;
16
+ switch (field.type) {
17
+ case 'string':
18
+ zodType = z.string();
19
+ break;
20
+ case 'number':
21
+ zodType = z.number();
22
+ break;
23
+ case 'boolean':
24
+ zodType = z.boolean();
25
+ break;
26
+ case 'enum': {
27
+ const values = field.enum_values;
28
+ if (!values || values.length === 0) {
29
+ zodType = z.string(); // fallback if enum_values missing
30
+ }
31
+ else {
32
+ zodType = z.enum(values);
33
+ }
34
+ break;
35
+ }
36
+ case 'string[]':
37
+ zodType = z.array(z.string());
38
+ break;
39
+ default:
40
+ zodType = z.string();
41
+ }
42
+ if (field.description) {
43
+ zodType = zodType.describe(field.description);
44
+ }
45
+ if (!field.required) {
46
+ zodType = zodType.optional();
47
+ }
48
+ result[field.name] = zodType;
49
+ }
50
+ return result;
51
+ }
52
+ export class SchemaRegistry {
53
+ extensions;
54
+ schemaCache = new Map();
55
+ fieldDefsCache = new Map();
56
+ constructor(extensions) {
57
+ this.extensions = extensions ?? {};
58
+ this.build();
59
+ }
60
+ build() {
61
+ const builtinTypes = new Set(Object.keys(ENTITY_SCHEMAS));
62
+ for (const [typeKey, extension] of Object.entries(this.extensions)) {
63
+ if (builtinTypes.has(typeKey)) {
64
+ // Extend an existing built-in schema
65
+ const base = ENTITY_SCHEMAS[typeKey];
66
+ const additionalFields = extension.additional_fields ?? [];
67
+ if (additionalFields.length > 0) {
68
+ const zodFields = buildZodFields(additionalFields);
69
+ const extended = base.extend(zodFields);
70
+ this.schemaCache.set(typeKey, extended);
71
+ }
72
+ this.fieldDefsCache.set(typeKey, additionalFields);
73
+ }
74
+ else {
75
+ // Build a new custom type from EntityBaseSchema
76
+ const customFields = extension.fields ?? [];
77
+ const zodFields = buildZodFields(customFields);
78
+ const schema = EntityBaseSchema.extend(zodFields).passthrough();
79
+ this.schemaCache.set(typeKey, schema);
80
+ this.fieldDefsCache.set(typeKey, customFields);
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Get the Zod schema for an entity type (built-in + extensions, or custom).
86
+ * Falls back to the built-in schema, then EntityBaseSchema.
87
+ */
88
+ getSchema(entityType) {
89
+ if (this.schemaCache.has(entityType)) {
90
+ return this.schemaCache.get(entityType);
91
+ }
92
+ if (entityType in ENTITY_SCHEMAS) {
93
+ return ENTITY_SCHEMAS[entityType];
94
+ }
95
+ return EntityBaseSchema;
96
+ }
97
+ /**
98
+ * Get the declared field definitions for an entity type.
99
+ * For extended built-in types: returns additional_fields only.
100
+ * For custom types: returns all fields.
101
+ * For types with no extension: returns [].
102
+ */
103
+ getFieldDefs(entityType) {
104
+ return this.fieldDefsCache.get(entityType) ?? [];
105
+ }
106
+ /**
107
+ * Get all entity type names: built-in types + custom extension types.
108
+ */
109
+ getAllTypes() {
110
+ const builtin = Object.keys(ENTITY_SCHEMAS);
111
+ const customTypes = Object.keys(this.extensions).filter(k => !(k in ENTITY_SCHEMAS));
112
+ return [...new Set([...builtin, ...customTypes])];
113
+ }
114
+ /**
115
+ * Return a formatted prompt section describing the workspace's schema extensions.
116
+ * Returns "" when no extensions are defined.
117
+ */
118
+ toPromptSection() {
119
+ if (Object.keys(this.extensions).length === 0) {
120
+ return '';
121
+ }
122
+ const builtinTypes = new Set(Object.keys(ENTITY_SCHEMAS));
123
+ const lines = ['## Workspace Schema Extensions', ''];
124
+ for (const [typeKey, extension] of Object.entries(this.extensions)) {
125
+ const isBuiltin = builtinTypes.has(typeKey);
126
+ const fields = isBuiltin
127
+ ? (extension.additional_fields ?? [])
128
+ : (extension.fields ?? []);
129
+ if (fields.length === 0)
130
+ continue;
131
+ if (isBuiltin) {
132
+ lines.push(`**${typeKey}** — additional fields:`);
133
+ }
134
+ else {
135
+ const desc = extension.description
136
+ ? ` (${extension.description})`
137
+ : '';
138
+ const label = extension.label ?? typeKey;
139
+ lines.push(`**${typeKey}** — custom entity type${desc}:`);
140
+ if (extension.label && extension.label !== typeKey) {
141
+ lines[lines.length - 1] = `**${typeKey}** (${label}) — custom entity type${desc}:`;
142
+ }
143
+ }
144
+ for (const field of fields) {
145
+ const req = field.required ? 'required' : 'optional';
146
+ const typeStr = field.type === 'enum' && field.enum_values?.length
147
+ ? `enum: ${field.enum_values.join('|')}`
148
+ : field.type;
149
+ const descPart = field.description ? `: ${field.description}` : '';
150
+ lines.push(`- \`${field.name}\` (${typeStr}, ${req})${descPart}`);
151
+ }
152
+ lines.push('');
153
+ }
154
+ // Remove trailing empty line
155
+ while (lines.length > 0 && lines[lines.length - 1] === '') {
156
+ lines.pop();
157
+ }
158
+ return lines.join('\n');
159
+ }
160
+ }
161
+ //# sourceMappingURL=schema-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../../src/core/schema-registry.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,122 @@ export type RepoConfigInput = Omit<RepoConfig, 'path' | 'access'> & {
71
71
  /**
72
72
  * Workspace configuration
73
73
  */
74
+ /**
75
+ * Field definition for schema extensions
76
+ */
77
+ export declare const FieldDefinitionSchema: z.ZodObject<{
78
+ name: z.ZodString;
79
+ type: z.ZodEnum<["string", "number", "boolean", "enum", "string[]"]>;
80
+ required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
81
+ description: z.ZodOptional<z.ZodString>;
82
+ enum_values: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
83
+ default: z.ZodOptional<z.ZodUnknown>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ name: string;
86
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
87
+ required: boolean;
88
+ description?: string | undefined;
89
+ enum_values?: string[] | undefined;
90
+ default?: unknown;
91
+ }, {
92
+ name: string;
93
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
94
+ description?: string | undefined;
95
+ required?: boolean | undefined;
96
+ enum_values?: string[] | undefined;
97
+ default?: unknown;
98
+ }>;
99
+ export type FieldDefinition = z.infer<typeof FieldDefinitionSchema>;
100
+ /**
101
+ * Schema extension for an existing or custom entity type
102
+ */
103
+ export declare const SchemaExtensionSchema: z.ZodObject<{
104
+ label: z.ZodOptional<z.ZodString>;
105
+ description: z.ZodOptional<z.ZodString>;
106
+ additional_fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ name: z.ZodString;
108
+ type: z.ZodEnum<["string", "number", "boolean", "enum", "string[]"]>;
109
+ required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
110
+ description: z.ZodOptional<z.ZodString>;
111
+ enum_values: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
112
+ default: z.ZodOptional<z.ZodUnknown>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ name: string;
115
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
116
+ required: boolean;
117
+ description?: string | undefined;
118
+ enum_values?: string[] | undefined;
119
+ default?: unknown;
120
+ }, {
121
+ name: string;
122
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
123
+ description?: string | undefined;
124
+ required?: boolean | undefined;
125
+ enum_values?: string[] | undefined;
126
+ default?: unknown;
127
+ }>, "many">>;
128
+ fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
129
+ name: z.ZodString;
130
+ type: z.ZodEnum<["string", "number", "boolean", "enum", "string[]"]>;
131
+ required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
132
+ description: z.ZodOptional<z.ZodString>;
133
+ enum_values: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
134
+ default: z.ZodOptional<z.ZodUnknown>;
135
+ }, "strip", z.ZodTypeAny, {
136
+ name: string;
137
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
138
+ required: boolean;
139
+ description?: string | undefined;
140
+ enum_values?: string[] | undefined;
141
+ default?: unknown;
142
+ }, {
143
+ name: string;
144
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
145
+ description?: string | undefined;
146
+ required?: boolean | undefined;
147
+ enum_values?: string[] | undefined;
148
+ default?: unknown;
149
+ }>, "many">>;
150
+ }, "strip", z.ZodTypeAny, {
151
+ description?: string | undefined;
152
+ label?: string | undefined;
153
+ additional_fields?: {
154
+ name: string;
155
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
156
+ required: boolean;
157
+ description?: string | undefined;
158
+ enum_values?: string[] | undefined;
159
+ default?: unknown;
160
+ }[] | undefined;
161
+ fields?: {
162
+ name: string;
163
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
164
+ required: boolean;
165
+ description?: string | undefined;
166
+ enum_values?: string[] | undefined;
167
+ default?: unknown;
168
+ }[] | undefined;
169
+ }, {
170
+ description?: string | undefined;
171
+ label?: string | undefined;
172
+ additional_fields?: {
173
+ name: string;
174
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
175
+ description?: string | undefined;
176
+ required?: boolean | undefined;
177
+ enum_values?: string[] | undefined;
178
+ default?: unknown;
179
+ }[] | undefined;
180
+ fields?: {
181
+ name: string;
182
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
183
+ description?: string | undefined;
184
+ required?: boolean | undefined;
185
+ enum_values?: string[] | undefined;
186
+ default?: unknown;
187
+ }[] | undefined;
188
+ }>;
189
+ export type SchemaExtension = z.infer<typeof SchemaExtensionSchema>;
74
190
  export declare const WorkspaceConfigSchema: z.ZodObject<{
75
191
  version: z.ZodString;
76
192
  team_name: z.ZodString;
@@ -127,6 +243,92 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
127
243
  }, {
128
244
  org?: string | undefined;
129
245
  }>>;
246
+ schema_extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
247
+ label: z.ZodOptional<z.ZodString>;
248
+ description: z.ZodOptional<z.ZodString>;
249
+ additional_fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
250
+ name: z.ZodString;
251
+ type: z.ZodEnum<["string", "number", "boolean", "enum", "string[]"]>;
252
+ required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
253
+ description: z.ZodOptional<z.ZodString>;
254
+ enum_values: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
255
+ default: z.ZodOptional<z.ZodUnknown>;
256
+ }, "strip", z.ZodTypeAny, {
257
+ name: string;
258
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
259
+ required: boolean;
260
+ description?: string | undefined;
261
+ enum_values?: string[] | undefined;
262
+ default?: unknown;
263
+ }, {
264
+ name: string;
265
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
266
+ description?: string | undefined;
267
+ required?: boolean | undefined;
268
+ enum_values?: string[] | undefined;
269
+ default?: unknown;
270
+ }>, "many">>;
271
+ fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
272
+ name: z.ZodString;
273
+ type: z.ZodEnum<["string", "number", "boolean", "enum", "string[]"]>;
274
+ required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
275
+ description: z.ZodOptional<z.ZodString>;
276
+ enum_values: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
277
+ default: z.ZodOptional<z.ZodUnknown>;
278
+ }, "strip", z.ZodTypeAny, {
279
+ name: string;
280
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
281
+ required: boolean;
282
+ description?: string | undefined;
283
+ enum_values?: string[] | undefined;
284
+ default?: unknown;
285
+ }, {
286
+ name: string;
287
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
288
+ description?: string | undefined;
289
+ required?: boolean | undefined;
290
+ enum_values?: string[] | undefined;
291
+ default?: unknown;
292
+ }>, "many">>;
293
+ }, "strip", z.ZodTypeAny, {
294
+ description?: string | undefined;
295
+ label?: string | undefined;
296
+ additional_fields?: {
297
+ name: string;
298
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
299
+ required: boolean;
300
+ description?: string | undefined;
301
+ enum_values?: string[] | undefined;
302
+ default?: unknown;
303
+ }[] | undefined;
304
+ fields?: {
305
+ name: string;
306
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
307
+ required: boolean;
308
+ description?: string | undefined;
309
+ enum_values?: string[] | undefined;
310
+ default?: unknown;
311
+ }[] | undefined;
312
+ }, {
313
+ description?: string | undefined;
314
+ label?: string | undefined;
315
+ additional_fields?: {
316
+ name: string;
317
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
318
+ description?: string | undefined;
319
+ required?: boolean | undefined;
320
+ enum_values?: string[] | undefined;
321
+ default?: unknown;
322
+ }[] | undefined;
323
+ fields?: {
324
+ name: string;
325
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
326
+ description?: string | undefined;
327
+ required?: boolean | undefined;
328
+ enum_values?: string[] | undefined;
329
+ default?: unknown;
330
+ }[] | undefined;
331
+ }>>>;
130
332
  }, "strip", z.ZodTypeAny, {
131
333
  created_at: string;
132
334
  version: string;
@@ -153,6 +355,26 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
153
355
  github?: {
154
356
  org?: string | undefined;
155
357
  } | undefined;
358
+ schema_extensions?: Record<string, {
359
+ description?: string | undefined;
360
+ label?: string | undefined;
361
+ additional_fields?: {
362
+ name: string;
363
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
364
+ required: boolean;
365
+ description?: string | undefined;
366
+ enum_values?: string[] | undefined;
367
+ default?: unknown;
368
+ }[] | undefined;
369
+ fields?: {
370
+ name: string;
371
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
372
+ required: boolean;
373
+ description?: string | undefined;
374
+ enum_values?: string[] | undefined;
375
+ default?: unknown;
376
+ }[] | undefined;
377
+ }> | undefined;
156
378
  }, {
157
379
  created_at: string;
158
380
  version: string;
@@ -179,6 +401,26 @@ export declare const WorkspaceConfigSchema: z.ZodObject<{
179
401
  github?: {
180
402
  org?: string | undefined;
181
403
  } | undefined;
404
+ schema_extensions?: Record<string, {
405
+ description?: string | undefined;
406
+ label?: string | undefined;
407
+ additional_fields?: {
408
+ name: string;
409
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
410
+ description?: string | undefined;
411
+ required?: boolean | undefined;
412
+ enum_values?: string[] | undefined;
413
+ default?: unknown;
414
+ }[] | undefined;
415
+ fields?: {
416
+ name: string;
417
+ type: "string" | "number" | "boolean" | "enum" | "string[]";
418
+ description?: string | undefined;
419
+ required?: boolean | undefined;
420
+ enum_values?: string[] | undefined;
421
+ default?: unknown;
422
+ }[] | undefined;
423
+ }> | undefined;
182
424
  }>;
183
425
  export type WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;
184
426
  /**
@@ -37,6 +37,26 @@ export const RepoConfigSchema = z.object({
37
37
  /**
38
38
  * Workspace configuration
39
39
  */
40
+ /**
41
+ * Field definition for schema extensions
42
+ */
43
+ export const FieldDefinitionSchema = z.object({
44
+ name: z.string(),
45
+ type: z.enum(['string', 'number', 'boolean', 'enum', 'string[]']),
46
+ required: z.boolean().optional().default(false),
47
+ description: z.string().optional(),
48
+ enum_values: z.array(z.string()).optional(),
49
+ default: z.unknown().optional(),
50
+ });
51
+ /**
52
+ * Schema extension for an existing or custom entity type
53
+ */
54
+ export const SchemaExtensionSchema = z.object({
55
+ label: z.string().optional(),
56
+ description: z.string().optional(),
57
+ additional_fields: z.array(FieldDefinitionSchema).optional(), // for extending existing types
58
+ fields: z.array(FieldDefinitionSchema).optional(), // for defining new custom types
59
+ });
40
60
  export const WorkspaceConfigSchema = z.object({
41
61
  version: z.string(),
42
62
  team_name: z.string(),
@@ -58,6 +78,7 @@ export const WorkspaceConfigSchema = z.object({
58
78
  github: z.object({
59
79
  org: z.string().optional(),
60
80
  }).optional(),
81
+ schema_extensions: z.record(z.string(), SchemaExtensionSchema).optional(),
61
82
  });
62
83
  /**
63
84
  * Permission error thrown when user lacks access to a repository
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,10 @@ export interface UserConfig {
16
16
  model_provider?: string;
17
17
  model_id?: string;
18
18
  api_key?: string;
19
+ /** Voyage AI API key for semantic search embeddings (Tier 2). Get at https://www.voyageai.com */
20
+ voyage_api_key?: string;
21
+ /** Path to LanceDB vector store. Defaults to ~/.studiograph/vector */
22
+ vector_db_path?: string;
19
23
  r2?: UserR2Config;
20
24
  }
21
25
  export declare const USER_CONFIG_PATH: string;
@@ -34,3 +38,9 @@ export declare function saveUserConfig(config: UserConfig): void;
34
38
  * Merges with any existing user config so other fields are preserved.
35
39
  */
36
40
  export declare function setUserModelConfig(provider: string, modelId: string, apiKey?: string): void;
41
+ /**
42
+ * Resolve the Anthropic credential to pass to the API client.
43
+ * Returns the API key from console.anthropic.com.
44
+ * Note: OAuth tokens are no longer supported per Anthropic's third-party policy.
45
+ */
46
+ export declare function getAnthropicCredential(config: UserConfig): string | undefined;