studiograph 1.1.2 → 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 +87 -6
  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,155 @@
1
+ /**
2
+ * studiograph update
3
+ *
4
+ * Self-update command that checks for and installs the latest version
5
+ * from GitHub releases or npm registry.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { intro, outro, spinner, confirm, log } from '@clack/prompts';
9
+ import { execSync, spawnSync } from 'child_process';
10
+ import { readFileSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { dirname } from 'path';
14
+ // Get current CLI version
15
+ function getCurrentVersion() {
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ const pkgPath = join(__dirname, '../../../package.json');
19
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
20
+ return pkg.version;
21
+ }
22
+ // Check npm for latest version
23
+ async function getLatestNpmVersion() {
24
+ try {
25
+ const result = execSync('npm view studiograph version', {
26
+ encoding: 'utf-8',
27
+ stdio: 'pipe',
28
+ });
29
+ return result.trim();
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ // Compare semantic versions
36
+ function compareVersions(v1, v2) {
37
+ const parts1 = v1.split('.').map(Number);
38
+ const parts2 = v2.split('.').map(Number);
39
+ for (let i = 0; i < 3; i++) {
40
+ if (parts1[i] > parts2[i])
41
+ return 1;
42
+ if (parts1[i] < parts2[i])
43
+ return -1;
44
+ }
45
+ return 0;
46
+ }
47
+ // Detect package manager
48
+ function detectPackageManager() {
49
+ // Check if we're installed globally
50
+ try {
51
+ const globalPath = execSync('which studiograph', { encoding: 'utf-8' }).trim();
52
+ if (globalPath.includes('/.yarn/'))
53
+ return 'yarn';
54
+ if (globalPath.includes('/.pnpm/'))
55
+ return 'pnpm';
56
+ return 'npm';
57
+ }
58
+ catch {
59
+ return 'npm';
60
+ }
61
+ }
62
+ // Update via package manager
63
+ function updateViaPM(pm) {
64
+ const commands = {
65
+ npm: ['npm', 'install', '-g', 'studiograph@latest'],
66
+ yarn: ['yarn', 'global', 'add', 'studiograph@latest'],
67
+ pnpm: ['pnpm', 'add', '-g', 'studiograph@latest'],
68
+ };
69
+ try {
70
+ const result = spawnSync(commands[pm][0], commands[pm].slice(1), {
71
+ stdio: 'inherit',
72
+ shell: true,
73
+ });
74
+ return result.status === 0;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ export const updateCommand = new Command('update')
81
+ .description('Check for and install the latest version of Studiograph')
82
+ .option('--check', 'Check for updates without installing')
83
+ .option('--force', 'Force reinstall current version')
84
+ .action(async (options) => {
85
+ intro('Studiograph Update');
86
+ const s = spinner();
87
+ s.start('Checking for updates...');
88
+ const currentVersion = getCurrentVersion();
89
+ const latestVersion = await getLatestNpmVersion();
90
+ if (!latestVersion) {
91
+ s.stop('Could not check for updates');
92
+ log.error('Failed to fetch latest version from npm registry');
93
+ outro('Update check failed. Try again later or update manually with:');
94
+ console.log(' npm install -g studiograph@latest');
95
+ process.exit(1);
96
+ }
97
+ s.stop();
98
+ const comparison = compareVersions(latestVersion, currentVersion);
99
+ if (comparison === 0 && !options.force) {
100
+ log.success(`You're already on the latest version (v${currentVersion})`);
101
+ outro('No update needed');
102
+ return;
103
+ }
104
+ if (comparison < 0) {
105
+ log.warn(`You're on v${currentVersion}, which is newer than npm (v${latestVersion})`);
106
+ log.info('You may be using a development version');
107
+ outro('No update needed');
108
+ return;
109
+ }
110
+ // Update available
111
+ log.info(`Current version: v${currentVersion}`);
112
+ log.success(`Latest version: v${latestVersion}`);
113
+ if (options.check) {
114
+ outro('Update available. Run `studiograph update` to install');
115
+ return;
116
+ }
117
+ // Confirm update
118
+ const shouldUpdate = await confirm({
119
+ message: `Update to v${latestVersion}?`,
120
+ initialValue: true,
121
+ });
122
+ if (typeof shouldUpdate === 'symbol' || !shouldUpdate) {
123
+ outro('Update cancelled');
124
+ return;
125
+ }
126
+ // Detect package manager
127
+ const pm = detectPackageManager();
128
+ log.info(`Detected package manager: ${pm}`);
129
+ // Perform update
130
+ const updateSpinner = spinner();
131
+ updateSpinner.start(`Installing v${latestVersion} via ${pm}...`);
132
+ const success = updateViaPM(pm);
133
+ if (success) {
134
+ updateSpinner.stop(`✓ Updated to v${latestVersion}`);
135
+ // Verify new version
136
+ const newVersion = getCurrentVersion();
137
+ if (newVersion === latestVersion) {
138
+ log.success('Update completed successfully!');
139
+ outro(`Studiograph is now at v${newVersion}`);
140
+ }
141
+ else {
142
+ log.warn('Update may have succeeded, but version check shows unexpected result');
143
+ log.info('Try running `studiograph --version` to verify');
144
+ outro('Update completed');
145
+ }
146
+ }
147
+ else {
148
+ updateSpinner.stop('Update failed');
149
+ log.error('Failed to install update via package manager');
150
+ outro('You can try updating manually with:');
151
+ console.log(` ${pm} ${pm === 'npm' ? 'install -g' : 'global add'} studiograph@latest`);
152
+ process.exit(1);
153
+ }
154
+ });
155
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -13,21 +13,101 @@ import { membersCommand } from './commands/members.js';
13
13
  import { pullCommand, pushCommand } from './commands/sync.js';
14
14
  import { serveCommand } from './commands/serve.js';
15
15
  import { r2Command } from './commands/r2.js';
16
+ import { appCommand } from './commands/app.js';
17
+ import { deployCommand } from './commands/deploy.js';
18
+ import { mcpCommand } from './commands/mcp.js';
19
+ import { connectorCommand } from './commands/connector.js';
20
+ import { indexCommand } from './commands/index.js';
21
+ import { configCommand } from './commands/config.js';
22
+ import { lintCommand } from './commands/lint.js';
23
+ import { updateCommand } from './commands/update.js';
24
+ import { provisionCommand } from './commands/provision.js';
16
25
  const program = new Command();
17
26
  program
18
27
  .name('studiograph')
19
28
  .description('Team-based AI agent platform with Git-backed knowledge graphs')
20
29
  .version('1.0.0');
21
- // Register commands
30
+ // Configure custom help to show grouped commands
31
+ program.configureHelp({
32
+ sortSubcommands: false,
33
+ // Override the command list formatter to show grouped commands
34
+ formatHelp: (cmd, helper) => {
35
+ const termWidth = helper.padWidth(cmd, helper);
36
+ const helpWidth = helper.helpWidth || 80;
37
+ const itemIndentWidth = 2;
38
+ const itemSeparatorWidth = 2;
39
+ const formatItem = (term, description) => {
40
+ const pad = ' '.repeat(Math.max(0, termWidth - term.length + itemSeparatorWidth));
41
+ return `${' '.repeat(itemIndentWidth)}${term}${pad}${description}`;
42
+ };
43
+ const sections = [
44
+ `Usage: ${helper.commandUsage(cmd)}`,
45
+ '',
46
+ helper.commandDescription(cmd),
47
+ '',
48
+ 'Options:',
49
+ ...cmd.options.map(opt => formatItem(helper.optionTerm(opt), helper.optionDescription(opt))),
50
+ formatItem('-h, --help', 'display help for command'),
51
+ '',
52
+ 'Getting Started:',
53
+ formatItem('init <team-name> [dir]', 'Initialize a new workspace'),
54
+ formatItem('join <url> [dir]', 'Join an existing workspace'),
55
+ formatItem('auth', 'Manage GitHub authentication'),
56
+ '',
57
+ 'Daily Workflow:',
58
+ formatItem('start', 'Start the AI agent'),
59
+ formatItem('pull', 'Pull latest changes'),
60
+ formatItem('push', 'Push local commits'),
61
+ '',
62
+ 'Workspace Management:',
63
+ formatItem('provision', 'Push workspace to GitHub'),
64
+ formatItem('members', 'Manage team members'),
65
+ formatItem('index', 'Index for search'),
66
+ formatItem('lint', 'Check entity completeness'),
67
+ formatItem('config', 'Manage configuration'),
68
+ '',
69
+ 'Server & Deployment:',
70
+ formatItem('serve', 'Start HTTP server'),
71
+ formatItem('deploy', 'Deploy to hosting platform'),
72
+ '',
73
+ 'Integrations & Extensions:',
74
+ formatItem('mcp', 'Claude Desktop integration'),
75
+ formatItem('connector', 'Third-party integrations'),
76
+ formatItem('app', 'Manage app plugins'),
77
+ formatItem('r2', 'Cloudflare R2 assets'),
78
+ '',
79
+ 'Maintenance:',
80
+ formatItem('update', 'Update Studiograph CLI'),
81
+ formatItem('help [command]', 'Display help for command'),
82
+ ];
83
+ return sections.join('\n');
84
+ },
85
+ });
86
+ // Register commands in grouped order
87
+ // Getting Started
22
88
  program.addCommand(initCommand);
23
- program.addCommand(startCommand);
24
89
  program.addCommand(joinCommand);
25
90
  program.addCommand(authCommand);
26
- program.addCommand(membersCommand);
91
+ // Daily Workflow
92
+ program.addCommand(startCommand);
27
93
  program.addCommand(pullCommand);
28
94
  program.addCommand(pushCommand);
95
+ // Workspace Management
96
+ program.addCommand(provisionCommand);
97
+ program.addCommand(membersCommand);
98
+ program.addCommand(indexCommand);
99
+ program.addCommand(lintCommand);
100
+ program.addCommand(configCommand);
101
+ // Server & Deployment
29
102
  program.addCommand(serveCommand);
103
+ program.addCommand(deployCommand);
104
+ // Integrations & Extensions
105
+ program.addCommand(mcpCommand);
106
+ program.addCommand(connectorCommand);
107
+ program.addCommand(appCommand);
30
108
  program.addCommand(r2Command);
109
+ // Maintenance
110
+ program.addCommand(updateCommand);
31
111
  // Parse arguments
32
112
  program.parse();
33
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAE9B,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Example entity scaffolding for new workspaces
3
+ *
4
+ * Creates a connected set of example entities during `studiograph init`
5
+ * to demonstrate the knowledge graph pattern — a client, project, person,
6
+ * meeting, and decision all wikilinked together.
7
+ */
8
+ import { Workspace } from '../core/workspace.js';
9
+ export declare function scaffoldExampleEntities(workspace: Workspace, teamName: string): Promise<void>;
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Example entity scaffolding for new workspaces
3
+ *
4
+ * Creates a connected set of example entities during `studiograph init`
5
+ * to demonstrate the knowledge graph pattern — a client, project, person,
6
+ * meeting, and decision all wikilinked together.
7
+ */
8
+ import { join } from 'path';
9
+ import { writeFileSync } from 'fs';
10
+ import { RepoType } from '../core/types.js';
11
+ import { MarkdownService } from '../services/markdown.js';
12
+ const REPO_NAME = 'example-project';
13
+ function buildEntities(now) {
14
+ const shared = {
15
+ created_by: 'studiograph',
16
+ updated_by: 'studiograph',
17
+ created_at: now,
18
+ updated_at: now,
19
+ tags: ['example'],
20
+ };
21
+ return [
22
+ {
23
+ entityType: 'client',
24
+ entityId: 'meridian-health',
25
+ frontmatter: {
26
+ entity_type: 'client',
27
+ entity_id: 'meridian-health',
28
+ ...shared,
29
+ name: 'Meridian Health',
30
+ type: 'corporate',
31
+ status: 'active',
32
+ industry: 'Healthcare',
33
+ contacts: ['[[sarah-chen]]'],
34
+ projects: ['[[meridian-rebrand]]'],
35
+ },
36
+ content: `# Meridian Health
37
+
38
+ Regional healthcare network with 12 hospitals across the Midwest. Engaged us for a comprehensive brand refresh following their merger with Lakeside Medical Group.
39
+
40
+ ## Relationship History
41
+
42
+ - **2025-Q4** — Initial outreach via referral from [[sarah-chen]]
43
+ - **2026-Q1** — Discovery workshops and brand audit
44
+ - **2026-Q1** — Kicked off [[meridian-rebrand]]
45
+
46
+ ## Key Contacts
47
+
48
+ - [[sarah-chen]] — VP of Marketing, primary stakeholder
49
+ `,
50
+ },
51
+ {
52
+ entityType: 'person',
53
+ entityId: 'sarah-chen',
54
+ frontmatter: {
55
+ entity_type: 'person',
56
+ entity_id: 'sarah-chen',
57
+ ...shared,
58
+ name: 'Sarah Chen',
59
+ role: 'VP of Marketing',
60
+ status: 'client',
61
+ organization: '[[meridian-health]]',
62
+ projects: ['[[meridian-rebrand]]'],
63
+ },
64
+ content: `# Sarah Chen
65
+
66
+ VP of Marketing at [[meridian-health]]. Primary stakeholder for the [[meridian-rebrand]] engagement.
67
+
68
+ ## Notes
69
+
70
+ - Prefers async communication (email/Slack over calls)
71
+ - Strong opinions on accessibility — ensure all deliverables meet WCAG 2.1 AA
72
+ - Previously led rebrand at Cedar Health (2023)
73
+ `,
74
+ },
75
+ {
76
+ entityType: 'project',
77
+ entityId: 'meridian-rebrand',
78
+ frontmatter: {
79
+ entity_type: 'project',
80
+ entity_id: 'meridian-rebrand',
81
+ ...shared,
82
+ name: 'Meridian Health Brand Refresh',
83
+ client: '[[meridian-health]]',
84
+ status: 'active',
85
+ start_date: '2026-02-10',
86
+ team: ['[[sarah-chen]]'],
87
+ },
88
+ content: `# Meridian Health Brand Refresh
89
+
90
+ Comprehensive brand identity refresh for [[meridian-health]] following their merger with Lakeside Medical Group. The goal is to create a unified brand that honors both organizations' heritage while signaling a forward-looking, patient-centered vision.
91
+
92
+ ## Objectives
93
+
94
+ 1. Unified visual identity across all 12 hospital locations
95
+ 2. Updated brand guidelines and asset library
96
+ 3. Digital-first brand system (web, app, social)
97
+
98
+ ## Key Decisions
99
+
100
+ - [[dec-2026-001]] — Adopt evolutionary brand refresh (not revolutionary)
101
+
102
+ ## Timeline
103
+
104
+ - **Feb 2026** — Discovery & audit (see [[2026-02-10-kickoff]])
105
+ - **Mar 2026** — Concept development
106
+ - **Apr 2026** — Refinement & testing
107
+ - **May 2026** — Final delivery & rollout planning
108
+ `,
109
+ },
110
+ {
111
+ entityType: 'meeting',
112
+ entityId: '2026-02-10-kickoff',
113
+ frontmatter: {
114
+ entity_type: 'meeting',
115
+ entity_id: '2026-02-10-kickoff',
116
+ ...shared,
117
+ name: 'Meridian Rebrand Kickoff',
118
+ date: '2026-02-10',
119
+ attendees: ['[[sarah-chen]]'],
120
+ related_projects: ['[[meridian-rebrand]]'],
121
+ },
122
+ content: `# Meridian Rebrand Kickoff
123
+
124
+ Kickoff meeting for the [[meridian-rebrand]] project with [[sarah-chen]] and the Meridian marketing team.
125
+
126
+ ## Agenda
127
+
128
+ 1. Introductions and project overview
129
+ 2. Brand audit findings review
130
+ 3. Timeline and milestones
131
+ 4. Decision on brand refresh approach
132
+
133
+ ## Discussion Notes
134
+
135
+ - Meridian team emphasized the importance of retaining trust signals from both legacy brands
136
+ - Patient research shows strong emotional attachment to the Lakeside "caring hands" motif
137
+ - Board has approved budget for full rollout by Q3 2026
138
+
139
+ ## Decisions Made
140
+
141
+ - [[dec-2026-001]] — Agreed to pursue an evolutionary refresh rather than a complete rebrand
142
+
143
+ ## Action Items
144
+
145
+ - [ ] Share brand audit deck with Meridian team
146
+ - [ ] Schedule stakeholder interviews (week of Feb 17)
147
+ - [ ] Draft creative brief by Feb 14
148
+ `,
149
+ },
150
+ {
151
+ entityType: 'decision',
152
+ entityId: 'dec-2026-001',
153
+ frontmatter: {
154
+ entity_type: 'decision',
155
+ entity_id: 'dec-2026-001',
156
+ ...shared,
157
+ id: 'DEC-2026-001',
158
+ title: 'Adopt evolutionary brand refresh',
159
+ date: '2026-02-10',
160
+ status: 'accepted',
161
+ decision_makers: ['[[sarah-chen]]'],
162
+ stakeholders: ['[[meridian-health]]'],
163
+ },
164
+ content: `# DEC-2026-001: Adopt Evolutionary Brand Refresh
165
+
166
+ ## Context
167
+
168
+ Following the merger of [[meridian-health]] and Lakeside Medical Group, the combined organization needs a unified brand identity. The core question: should we build an entirely new brand from scratch, or evolve the existing Meridian identity?
169
+
170
+ ## Alternatives Considered
171
+
172
+ 1. **Revolutionary rebrand** — entirely new name, logo, and visual system
173
+ 2. **Evolutionary refresh** — retain Meridian name and core equity, modernize visual system, incorporate Lakeside heritage elements
174
+ 3. **Dual-brand** — maintain both brands with a shared parent identity
175
+
176
+ ## Decision
177
+
178
+ Option 2: Evolutionary refresh. Retain the Meridian Health name and update the visual identity to reflect the merged organization's expanded scope and values.
179
+
180
+ ## Rationale
181
+
182
+ - Patient research shows 78% brand recognition for "Meridian" in core markets
183
+ - Revolutionary rebrand estimated at 2x the budget and timeline
184
+ - Lakeside heritage can be honored through visual motifs without a name change
185
+
186
+ ## Consequences
187
+
188
+ - **Positive:** Preserves brand equity, faster rollout, lower risk
189
+ - **Negative:** Some Lakeside staff may feel underrepresented; requires careful internal communications
190
+ `,
191
+ },
192
+ ];
193
+ }
194
+ function buildOnboardingGuide(teamName) {
195
+ return `# Welcome to ${teamName}
196
+
197
+ This workspace is powered by **Studiograph** — a knowledge graph for creative teams. Your team's knowledge is stored as Markdown files with YAML frontmatter, connected by \`[[wikilinks]]\`.
198
+
199
+ ## How It Works
200
+
201
+ Every piece of knowledge is an **entity** — a Markdown file with structured metadata:
202
+
203
+ \`\`\`markdown
204
+ ---
205
+ entity_type: project
206
+ entity_id: my-project
207
+ name: "My Project"
208
+ status: active
209
+ created_at: 2026-02-20T00:00:00.000Z
210
+ updated_at: 2026-02-20T00:00:00.000Z
211
+ created_by: your-name
212
+ updated_by: your-name
213
+ ---
214
+
215
+ # My Project
216
+
217
+ Project details here. Link to other entities with [[wikilinks]].
218
+ \`\`\`
219
+
220
+ ## Entity Types
221
+
222
+ | Type | Purpose | Example |
223
+ |------|---------|---------|
224
+ | \`client\` | Client organizations | Meridian Health |
225
+ | \`project\` | Engagements & initiatives | Brand refresh |
226
+ | \`person\` | Contacts & team members | Sarah Chen |
227
+ | \`meeting\` | Meeting notes & action items | Kickoff meeting |
228
+ | \`decision\` | Structured decision records | DEC-2026-001 |
229
+ | \`proposal\` | Client proposals & SOWs | — |
230
+ | \`deliverable\` | Scoped outputs & artifacts | — |
231
+ | \`brief\` | Project briefs | — |
232
+
233
+ ## Common Commands
234
+
235
+ \`\`\`bash
236
+ studiograph start # Start an interactive AI session
237
+ studiograph search "query" # Search across all repos
238
+ studiograph list # List entities in a repo
239
+ studiograph get <entity-id> # View a specific entity
240
+ \`\`\`
241
+
242
+ ## Explore the Examples
243
+
244
+ Check out the \`example-project/\` repo to see how entities connect:
245
+
246
+ - \`example-project/client/meridian-health.md\` — a client organization
247
+ - \`example-project/person/sarah-chen.md\` — a contact linked to the client
248
+ - \`example-project/project/meridian-rebrand.md\` — a project linking client, person, and decisions
249
+ - \`example-project/meeting/2026-02-10-kickoff.md\` — a meeting with notes and action items
250
+ - \`example-project/decision/dec-2026-001.md\` — a structured decision record
251
+
252
+ Notice how \`[[wikilinks]]\` connect everything into a navigable graph.
253
+
254
+ ## Cleaning Up Examples
255
+
256
+ When you're ready to remove the example entities:
257
+
258
+ \`\`\`bash
259
+ studiograph config repo remove example-project
260
+ rm -rf example-project/
261
+ \`\`\`
262
+ `;
263
+ }
264
+ export async function scaffoldExampleEntities(workspace, teamName) {
265
+ const repoPath = join(workspace.getWorkspacePath(), REPO_NAME);
266
+ // Register the example-project repo
267
+ await workspace.registerRepo({
268
+ name: REPO_NAME,
269
+ type: RepoType.PROJECT,
270
+ description: 'Example entities demonstrating the knowledge graph pattern (safe to delete)',
271
+ });
272
+ // Write example entities
273
+ const md = new MarkdownService();
274
+ const now = new Date().toISOString();
275
+ const entities = buildEntities(now);
276
+ for (const entity of entities) {
277
+ const filePath = join(repoPath, entity.entityType, `${entity.entityId}.md`);
278
+ md.writeFile(filePath, {
279
+ frontmatter: entity.frontmatter,
280
+ content: entity.content,
281
+ wikilinks: [],
282
+ });
283
+ }
284
+ // Write STUDIOGRAPH.md to workspace root
285
+ const guidePath = join(workspace.getWorkspacePath(), 'STUDIOGRAPH.md');
286
+ writeFileSync(guidePath, buildOnboardingGuide(teamName), 'utf-8');
287
+ }
288
+ //# sourceMappingURL=scaffolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../src/cli/scaffolding.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,18 @@ import { GitUser } from '../services/git.js';
8
8
  import { MarkdownDocument } from '../services/markdown.js';
9
9
  import { AssetInfo, AssetConfig } from '../services/assets/index.js';
10
10
  import { EntityType, type EntityData, type DatasetRow } from './validation.js';
11
+ import { SchemaRegistry } from './schema-registry.js';
11
12
  import { type DatasetFilter } from '../services/csv-service.js';
13
+ import { type VectorService } from '../services/vector-service.js';
12
14
  export interface GraphConfig {
13
15
  repoPath: string;
16
+ repoName: string;
14
17
  assetConfig?: AssetConfig;
15
18
  gitUser: GitUser;
19
+ vectorService?: VectorService;
20
+ schemaRegistry?: SchemaRegistry;
21
+ /** When true, all git operations are skipped. Used for the private/ graph. */
22
+ noGit?: boolean;
16
23
  }
17
24
  export interface EntityFile {
18
25
  id: string;
@@ -50,11 +57,15 @@ export interface UpdateEntityOptions {
50
57
  }
51
58
  export declare class BaseGraphManager {
52
59
  private repoPath;
53
- private gitService;
60
+ readonly repoName: string;
61
+ private gitService?;
62
+ private noGit;
54
63
  private markdownService;
55
64
  private assetService?;
56
65
  private gitUser;
57
66
  private csvService;
67
+ private vectorService?;
68
+ private schemaRegistry?;
58
69
  constructor(config: GraphConfig);
59
70
  /**
60
71
  * Ensure repository exists