studiograph 1.1.3 → 1.2.0-beta.2
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 +2 -8
- package/dist/agent/orchestrator.js +56 -11
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/system.md +28 -10
- package/dist/agent/skill-loader.d.ts +48 -0
- package/dist/agent/skill-loader.js +166 -0
- package/dist/agent/skill-loader.js.map +1 -0
- package/dist/agent/skills/{bundled/enrich-entities.md → enrich-entities.md} +12 -0
- package/dist/agent/skills/entity-schema.md +502 -0
- package/dist/agent/skills/obsidian-source-setup.md +246 -0
- package/dist/agent/skills/sync-configuration.md +144 -0
- package/dist/agent/skills/sync-setup.md +68 -0
- package/dist/agent/tools/connector-tools.d.ts +37 -0
- package/dist/agent/tools/connector-tools.js +132 -0
- package/dist/agent/tools/connector-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +39 -0
- package/dist/agent/tools/fs-tools.js +106 -0
- package/dist/agent/tools/fs-tools.js.map +1 -0
- package/dist/agent/tools/graph-tools.d.ts +11 -1
- package/dist/agent/tools/graph-tools.js +90 -29
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/load-skill.d.ts +1 -1
- package/dist/agent/tools/load-skill.js +1 -1
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/sync-tools.d.ts +25 -0
- package/dist/agent/tools/sync-tools.js +691 -0
- package/dist/agent/tools/sync-tools.js.map +1 -0
- package/dist/auth/github.d.ts +11 -8
- package/dist/auth/github.js +56 -75
- package/dist/auth/github.js.map +1 -1
- package/dist/cli/colors.d.ts +54 -0
- package/dist/cli/colors.js +133 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.js +26 -10
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/clone.d.ts +9 -0
- package/dist/cli/commands/clone.js +167 -0
- package/dist/cli/commands/clone.js.map +1 -0
- package/dist/cli/commands/commit.d.ts +8 -0
- package/dist/cli/commands/commit.js +43 -0
- package/dist/cli/commands/commit.js.map +1 -0
- package/dist/cli/commands/connector.js +10 -2
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +4 -6
- package/dist/cli/commands/deploy.js +262 -112
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/enrich.d.ts +11 -0
- package/dist/cli/commands/enrich.js +135 -0
- package/dist/cli/commands/enrich.js.map +1 -0
- package/dist/cli/commands/graphrag.d.ts +12 -0
- package/dist/cli/commands/graphrag.js +122 -0
- package/dist/cli/commands/graphrag.js.map +1 -0
- package/dist/cli/commands/init.js +21 -203
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.js +23 -3
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/orphans.d.ts +8 -0
- package/dist/cli/commands/orphans.js +125 -0
- package/dist/cli/commands/orphans.js.map +1 -0
- package/dist/cli/commands/provision.js +11 -7
- package/dist/cli/commands/provision.js.map +1 -1
- package/dist/cli/commands/r2.js +8 -2
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.js +137 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/review.d.ts +19 -0
- package/dist/cli/commands/review.js +128 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/source.d.ts +16 -0
- package/dist/cli/commands/source.js +159 -0
- package/dist/cli/commands/source.js.map +1 -0
- package/dist/cli/commands/start.js +285 -55
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync-entities.d.ts +13 -0
- package/dist/cli/commands/sync-entities.js +242 -0
- package/dist/cli/commands/sync-entities.js.map +1 -0
- package/dist/cli/commands/sync.js +36 -5
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffolding.d.ts +2 -1
- package/dist/cli/scaffolding.js +36 -22
- package/dist/cli/scaffolding.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +30 -0
- package/dist/cli/setup-wizard.js +244 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/sync-review-interactive.d.ts +31 -0
- package/dist/cli/sync-review-interactive.js +393 -0
- package/dist/cli/sync-review-interactive.js.map +1 -0
- package/dist/cli/theme.d.ts +31 -0
- package/dist/cli/theme.js +116 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/core/graph.d.ts +4 -8
- package/dist/core/graph.js +145 -96
- package/dist/core/graph.js.map +1 -1
- package/dist/core/migration-runner.d.ts +4 -1
- package/dist/core/migration-runner.js +14 -3
- package/dist/core/migration-runner.js.map +1 -1
- package/dist/core/types.d.ts +0 -3
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +6 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/workspace.d.ts +13 -5
- package/dist/core/workspace.js +110 -33
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/connector-manager.d.ts +7 -3
- package/dist/mcp/connector-manager.js +61 -16
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/connectors/asana.d.ts +2 -0
- package/dist/mcp/connectors/asana.js +20 -0
- package/dist/mcp/connectors/asana.js.map +1 -0
- package/dist/mcp/connectors/definitions.d.ts +3 -1
- package/dist/mcp/connectors/definitions.js +19 -127
- package/dist/mcp/connectors/definitions.js.map +1 -1
- package/dist/mcp/connectors/figma.d.ts +5 -0
- package/dist/mcp/connectors/figma.js +21 -0
- package/dist/mcp/connectors/figma.js.map +1 -0
- package/dist/mcp/connectors/gdrive.d.ts +2 -0
- package/dist/mcp/connectors/gdrive.js +20 -0
- package/dist/mcp/connectors/gdrive.js.map +1 -0
- package/dist/mcp/connectors/granola.d.ts +2 -0
- package/dist/mcp/connectors/granola.js +12 -0
- package/dist/mcp/connectors/granola.js.map +1 -0
- package/dist/mcp/connectors/linear.d.ts +2 -0
- package/dist/mcp/connectors/linear.js +19 -0
- package/dist/mcp/connectors/linear.js.map +1 -0
- package/dist/mcp/connectors/obsidian.d.ts +2 -0
- package/dist/mcp/connectors/obsidian.js +19 -0
- package/dist/mcp/connectors/obsidian.js.map +1 -0
- package/dist/mcp/connectors/pipedrive.d.ts +2 -0
- package/dist/mcp/connectors/pipedrive.js +20 -0
- package/dist/mcp/connectors/pipedrive.js.map +1 -0
- package/dist/mcp/connectors/slack.d.ts +2 -0
- package/dist/mcp/connectors/slack.js +21 -0
- package/dist/mcp/connectors/slack.js.map +1 -0
- package/dist/mcp/oauth-provider.d.ts +41 -0
- package/dist/mcp/oauth-provider.js +160 -0
- package/dist/mcp/oauth-provider.js.map +1 -0
- package/dist/server/index.js +14 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/plugin-loader.d.ts +7 -0
- package/dist/server/plugin-loader.js +54 -2
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/services/github-provisioner.d.ts +8 -3
- package/dist/services/github-provisioner.js +35 -8
- package/dist/services/github-provisioner.js.map +1 -1
- package/dist/services/lint-service.js +8 -1
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.js +3 -3
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +1 -1
- package/dist/services/memory-service.js +2 -3
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/orphan-service.d.ts +31 -0
- package/dist/services/orphan-service.js +100 -0
- package/dist/services/orphan-service.js.map +1 -0
- package/dist/services/sync/commit.d.ts +58 -0
- package/dist/services/sync/commit.js +354 -0
- package/dist/services/sync/commit.js.map +1 -0
- package/dist/services/sync/context-index.d.ts +69 -0
- package/dist/services/sync/context-index.js +280 -0
- package/dist/services/sync/context-index.js.map +1 -0
- package/dist/services/sync/derive.d.ts +34 -0
- package/dist/services/sync/derive.js +164 -0
- package/dist/services/sync/derive.js.map +1 -0
- package/dist/services/sync/enrichment-state.d.ts +31 -0
- package/dist/services/sync/enrichment-state.js +63 -0
- package/dist/services/sync/enrichment-state.js.map +1 -0
- package/dist/services/sync/enrichment.d.ts +25 -0
- package/dist/services/sync/enrichment.js +121 -0
- package/dist/services/sync/enrichment.js.map +1 -0
- package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
- package/dist/services/sync/frontmatter-extractor.js +273 -0
- package/dist/services/sync/frontmatter-extractor.js.map +1 -0
- package/dist/services/sync/graph-match-state.d.ts +33 -0
- package/dist/services/sync/graph-match-state.js +61 -0
- package/dist/services/sync/graph-match-state.js.map +1 -0
- package/dist/services/sync/graph-match.d.ts +53 -0
- package/dist/services/sync/graph-match.js +316 -0
- package/dist/services/sync/graph-match.js.map +1 -0
- package/dist/services/sync/graphrag-client.d.ts +43 -0
- package/dist/services/sync/graphrag-client.js +94 -0
- package/dist/services/sync/graphrag-client.js.map +1 -0
- package/dist/services/sync/graphrag-config.d.ts +16 -0
- package/dist/services/sync/graphrag-config.js +39 -0
- package/dist/services/sync/graphrag-config.js.map +1 -0
- package/dist/services/sync/graphrag-context.d.ts +14 -0
- package/dist/services/sync/graphrag-context.js +109 -0
- package/dist/services/sync/graphrag-context.js.map +1 -0
- package/dist/services/sync/graphrag-indexer.d.ts +30 -0
- package/dist/services/sync/graphrag-indexer.js +358 -0
- package/dist/services/sync/graphrag-indexer.js.map +1 -0
- package/dist/services/sync/llm.d.ts +32 -0
- package/dist/services/sync/llm.js +115 -0
- package/dist/services/sync/llm.js.map +1 -0
- package/dist/services/sync/mcp-client.d.ts +59 -0
- package/dist/services/sync/mcp-client.js +285 -0
- package/dist/services/sync/mcp-client.js.map +1 -0
- package/dist/services/sync/model-factory.d.ts +10 -0
- package/dist/services/sync/model-factory.js +24 -0
- package/dist/services/sync/model-factory.js.map +1 -0
- package/dist/services/sync/name-quality.d.ts +31 -0
- package/dist/services/sync/name-quality.js +60 -0
- package/dist/services/sync/name-quality.js.map +1 -0
- package/dist/services/sync/output-schemas.d.ts +92 -0
- package/dist/services/sync/output-schemas.js +43 -0
- package/dist/services/sync/output-schemas.js.map +1 -0
- package/dist/services/sync/prompts.d.ts +19 -0
- package/dist/services/sync/prompts.js +128 -0
- package/dist/services/sync/prompts.js.map +1 -0
- package/dist/services/sync/reconciler.d.ts +48 -0
- package/dist/services/sync/reconciler.js +295 -0
- package/dist/services/sync/reconciler.js.map +1 -0
- package/dist/services/sync/source-config.d.ts +45 -0
- package/dist/services/sync/source-config.js +208 -0
- package/dist/services/sync/source-config.js.map +1 -0
- package/dist/services/sync/source-definitions/asana.d.ts +15 -0
- package/dist/services/sync/source-definitions/asana.js +48 -0
- package/dist/services/sync/source-definitions/asana.js.map +1 -0
- package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
- package/dist/services/sync/source-definitions/definitions.js +26 -0
- package/dist/services/sync/source-definitions/definitions.js.map +1 -0
- package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
- package/dist/services/sync/source-definitions/gdrive.js +68 -0
- package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
- package/dist/services/sync/source-definitions/granola.d.ts +2 -0
- package/dist/services/sync/source-definitions/granola.js +28 -0
- package/dist/services/sync/source-definitions/granola.js.map +1 -0
- package/dist/services/sync/source-definitions/linear.d.ts +2 -0
- package/dist/services/sync/source-definitions/linear.js +60 -0
- package/dist/services/sync/source-definitions/linear.js.map +1 -0
- package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
- package/dist/services/sync/source-definitions/obsidian.js +55 -0
- package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
- package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
- package/dist/services/sync/source-definitions/pipedrive.js +52 -0
- package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
- package/dist/services/sync/staging.d.ts +53 -0
- package/dist/services/sync/staging.js +131 -0
- package/dist/services/sync/staging.js.map +1 -0
- package/dist/services/sync/structured-extractor.d.ts +49 -0
- package/dist/services/sync/structured-extractor.js +344 -0
- package/dist/services/sync/structured-extractor.js.map +1 -0
- package/dist/services/sync/sync-runner.d.ts +32 -0
- package/dist/services/sync/sync-runner.js +195 -0
- package/dist/services/sync/sync-runner.js.map +1 -0
- package/dist/services/sync/sync-state.d.ts +43 -0
- package/dist/services/sync/sync-state.js +154 -0
- package/dist/services/sync/sync-state.js.map +1 -0
- package/dist/services/sync/types.d.ts +203 -0
- package/dist/services/sync/types.js +8 -0
- package/dist/services/sync/types.js.map +1 -0
- package/dist/services/sync/unstructured-extractor.d.ts +29 -0
- package/dist/services/sync/unstructured-extractor.js +197 -0
- package/dist/services/sync/unstructured-extractor.js.map +1 -0
- package/dist/services/vector-service.d.ts +11 -0
- package/dist/services/vector-service.js +42 -0
- package/dist/services/vector-service.js.map +1 -1
- package/dist/utils/git.d.ts +26 -4
- package/dist/utils/git.js +55 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/merge-resolver.d.ts +34 -0
- package/dist/utils/merge-resolver.js +201 -0
- package/dist/utils/merge-resolver.js.map +1 -0
- package/dist/utils/preflight.d.ts +2 -1
- package/dist/utils/preflight.js +8 -1
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/workspace-config.d.ts +8 -0
- package/dist/utils/workspace-config.js +22 -0
- package/dist/utils/workspace-config.js.map +1 -0
- package/package.json +16 -7
- /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph sync
|
|
3
|
+
*
|
|
4
|
+
* Run the entity sync pipeline:
|
|
5
|
+
* studiograph sync — extract + reconcile → staging
|
|
6
|
+
* studiograph sync status — show staging summary
|
|
7
|
+
* studiograph sync apply — write staging → entity files (no git)
|
|
8
|
+
* studiograph sync commit — (deprecated) apply + git commit
|
|
9
|
+
* studiograph sync abort — discard staging
|
|
10
|
+
* studiograph sync review — review entity changes (delegates to top-level review)
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
import { existsSync } from 'fs';
|
|
14
|
+
import { join } from 'path';
|
|
15
|
+
import { spawnSync } from 'child_process';
|
|
16
|
+
import { log } from '@clack/prompts';
|
|
17
|
+
import { Workspace } from '../../core/workspace.js';
|
|
18
|
+
import { loadWorkspaceConfig } from '../../utils/workspace-config.js';
|
|
19
|
+
import { runSync } from '../../services/sync/sync-runner.js';
|
|
20
|
+
import { commitStaging, applyStaging } from '../../services/sync/commit.js';
|
|
21
|
+
import { StagingManager } from '../../services/sync/staging.js';
|
|
22
|
+
import { isGitRepo, gitHasUncommittedChanges } from '../../utils/git.js';
|
|
23
|
+
import { header, count as countColor, entityRef, dimText, created, updated, skipped, error as errorColor, formatAction, formatSummary, } from '../colors.js';
|
|
24
|
+
import { runReview } from './review.js';
|
|
25
|
+
export const syncEntitiesCommand = new Command('sync')
|
|
26
|
+
.description('Sync entities from external sources');
|
|
27
|
+
// ── sync (run pipeline) ──────────────────────────────────────────────────────
|
|
28
|
+
syncEntitiesCommand
|
|
29
|
+
.command('run [sources...]', { isDefault: true })
|
|
30
|
+
.description('Run sync pipeline: extract → reconcile → staging')
|
|
31
|
+
.option('--dry-run', 'Preview without writing staging files')
|
|
32
|
+
.option('--incremental', 'Only sync records updated since last run')
|
|
33
|
+
.action(async (sources, opts) => {
|
|
34
|
+
const workspace = new Workspace(process.cwd());
|
|
35
|
+
if (!workspace.isWorkspace()) {
|
|
36
|
+
console.error('Not in a Studiograph workspace.');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const startTime = Date.now();
|
|
41
|
+
const config = await workspace.loadConfig();
|
|
42
|
+
const result = await runSync({
|
|
43
|
+
workspacePath: process.cwd(),
|
|
44
|
+
sources: sources.length > 0 ? sources : undefined,
|
|
45
|
+
dryRun: opts.dryRun,
|
|
46
|
+
incremental: opts.incremental,
|
|
47
|
+
schemaExtensions: config.schema_extensions,
|
|
48
|
+
}, (msg) => console.log(msg));
|
|
49
|
+
console.log(`\n${header('--- Summary ---')}`);
|
|
50
|
+
console.log(`Sources processed: ${countColor(String(result.sources_processed))}`);
|
|
51
|
+
console.log(`Records extracted: ${countColor(String(result.records_extracted))}`);
|
|
52
|
+
console.log(`Records derived: ${countColor(String(result.records_derived))}`);
|
|
53
|
+
console.log(`Records reconciled: ${countColor(String(result.records_reconciled))}`);
|
|
54
|
+
console.log(`Graph matched: ${countColor(String(result.records_graph_matched))}`);
|
|
55
|
+
console.log(`Staging written: ${countColor(String(result.staging_written))}`);
|
|
56
|
+
if (Object.keys(result.by_entity_type).length > 0) {
|
|
57
|
+
console.log('\nBy entity type:');
|
|
58
|
+
for (const [type, cnt] of Object.entries(result.by_entity_type)) {
|
|
59
|
+
console.log(` ${entityRef(type)}: ${countColor(String(cnt))}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
console.log(`\nCompleted in ${dimText(formatElapsed(Date.now() - startTime))}`);
|
|
63
|
+
if (!opts.dryRun && result.staging_written > 0) {
|
|
64
|
+
console.log(`\nNext: ${header('studiograph sync status')} ${dimText('(inspect staging)')}`);
|
|
65
|
+
console.log(`Then: ${header('studiograph sync apply')} ${dimText('(write to graph)')}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(errorColor('Sync failed:'), err instanceof Error ? err.message : String(err));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// ── sync status ──────────────────────────────────────────────────────────────
|
|
74
|
+
syncEntitiesCommand
|
|
75
|
+
.command('status')
|
|
76
|
+
.description('Show staging summary')
|
|
77
|
+
.action(() => {
|
|
78
|
+
const workspace = new Workspace(process.cwd());
|
|
79
|
+
if (!workspace.isWorkspace()) {
|
|
80
|
+
console.error('Not in a Studiograph workspace.');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
const staging = new StagingManager(process.cwd());
|
|
84
|
+
const summary = staging.getSummary();
|
|
85
|
+
if (summary.total === 0) {
|
|
86
|
+
console.log('No staging files. Run "studiograph sync run" first.');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
console.log(`${header('Staging summary')}: ${countColor(String(summary.total))} entities\n`);
|
|
90
|
+
console.log(` ${created('Create')}: ${countColor(String(summary.creates))}`);
|
|
91
|
+
console.log(` ${updated('Update')}: ${countColor(String(summary.updates))}`);
|
|
92
|
+
console.log(` ${skipped('Skip')}: ${countColor(String(summary.skips))}`);
|
|
93
|
+
if (Object.keys(summary.byType).length > 0) {
|
|
94
|
+
console.log('\nBy type:');
|
|
95
|
+
for (const [type, cnt] of Object.entries(summary.byType)) {
|
|
96
|
+
console.log(` ${entityRef(type)}: ${countColor(String(cnt))}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
console.log(`\nNext: ${header('studiograph sync apply')} ${dimText('(write to graph)')}`);
|
|
100
|
+
console.log(`Or: ${header('studiograph sync abort')} ${dimText('(discard staging)')}`);
|
|
101
|
+
});
|
|
102
|
+
// ── sync apply ───────────────────────────────────────────────────────────────
|
|
103
|
+
syncEntitiesCommand
|
|
104
|
+
.command('apply')
|
|
105
|
+
.description('Write staging files to entity files (no git commit)')
|
|
106
|
+
.option('--force', 'Skip dirty working tree check')
|
|
107
|
+
.action(async (opts) => {
|
|
108
|
+
const workspace = new Workspace(process.cwd());
|
|
109
|
+
if (!workspace.isWorkspace()) {
|
|
110
|
+
console.error('Not in a Studiograph workspace.');
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const startTime = Date.now();
|
|
115
|
+
const result = await applyStaging(process.cwd(), (msg) => {
|
|
116
|
+
const m = msg.match(/^\s+(Created|Updated|Skipped): (\S+)\/(\S+)$/);
|
|
117
|
+
if (m) {
|
|
118
|
+
const actionMap = {
|
|
119
|
+
Created: 'create', Updated: 'update', Skipped: 'skip',
|
|
120
|
+
};
|
|
121
|
+
console.log(formatAction(actionMap[m[1]] ?? 'skip', m[2], m[3]));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(msg);
|
|
125
|
+
}
|
|
126
|
+
}, { force: opts.force });
|
|
127
|
+
console.log(`\nDone: ${formatSummary({ created: result.created, updated: result.updated, skipped: result.skipped })}`);
|
|
128
|
+
console.log(`Completed in ${dimText(formatElapsed(Date.now() - startTime))}`);
|
|
129
|
+
if (result.created > 0 || result.updated > 0) {
|
|
130
|
+
console.log(`\nNext: ${header('studiograph review')} ${dimText('(inspect changes)')}`);
|
|
131
|
+
console.log(`Then: ${header('studiograph commit')} ${dimText('(git commit)')}`);
|
|
132
|
+
console.log(`Or: ${dimText('git checkout -- .')} ${dimText('(discard changes)')}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error(errorColor('Apply failed:'), err instanceof Error ? err.message : String(err));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// ── sync commit (deprecated) ────────────────────────────────────────────────
|
|
141
|
+
syncEntitiesCommand
|
|
142
|
+
.command('commit')
|
|
143
|
+
.description('Write staging files to the graph (deprecated: use sync apply + commit)')
|
|
144
|
+
.option('--force', 'Skip dirty working tree check')
|
|
145
|
+
.option('--no-git', 'Skip auto git-commit after writing')
|
|
146
|
+
.action(async (opts) => {
|
|
147
|
+
console.log(dimText('Note: "sync commit" is deprecated. Use "sync apply" then "studiograph commit" instead.\n'));
|
|
148
|
+
const workspace = new Workspace(process.cwd());
|
|
149
|
+
if (!workspace.isWorkspace()) {
|
|
150
|
+
console.error('Not in a Studiograph workspace.');
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const startTime = Date.now();
|
|
155
|
+
const result = await commitStaging(process.cwd(), (msg) => {
|
|
156
|
+
// Colorize progress lines from commit.ts
|
|
157
|
+
const m = msg.match(/^\s+(Created|Updated|Skipped): (\S+)\/(\S+)$/);
|
|
158
|
+
if (m) {
|
|
159
|
+
const actionMap = {
|
|
160
|
+
Created: 'create', Updated: 'update', Skipped: 'skip',
|
|
161
|
+
};
|
|
162
|
+
console.log(formatAction(actionMap[m[1]] ?? 'skip', m[2], m[3]));
|
|
163
|
+
}
|
|
164
|
+
else if (msg.includes('Git commit:') || msg.includes('Git init:')) {
|
|
165
|
+
console.log(dimText(msg));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(msg);
|
|
169
|
+
}
|
|
170
|
+
}, { force: opts.force, noGit: opts.git === false });
|
|
171
|
+
console.log(`\nDone: ${formatSummary({ created: result.created, updated: result.updated, skipped: result.skipped })}`);
|
|
172
|
+
console.log(`Completed in ${dimText(formatElapsed(Date.now() - startTime))}`);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
console.error(errorColor('Commit failed:'), err instanceof Error ? err.message : String(err));
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
// ── sync abort ───────────────────────────────────────────────────────────────
|
|
180
|
+
syncEntitiesCommand
|
|
181
|
+
.command('abort')
|
|
182
|
+
.description('Discard staging files and revert uncommitted sync changes')
|
|
183
|
+
.action(() => {
|
|
184
|
+
const workspace = new Workspace(process.cwd());
|
|
185
|
+
if (!workspace.isWorkspace()) {
|
|
186
|
+
console.error('Not in a Studiograph workspace.');
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
const staging = new StagingManager(process.cwd());
|
|
190
|
+
const hasStaging = staging.hasStaging();
|
|
191
|
+
if (hasStaging) {
|
|
192
|
+
staging.clear();
|
|
193
|
+
log.success('Staging files discarded.');
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// No staging — check if apply was already run (uncommitted changes in repos)
|
|
197
|
+
const workspacePath = process.cwd();
|
|
198
|
+
const config = loadWorkspaceConfig(workspacePath);
|
|
199
|
+
const repos = config?.repos ?? [];
|
|
200
|
+
let reverted = 0;
|
|
201
|
+
for (const repo of repos) {
|
|
202
|
+
const repoPath = join(workspacePath, repo.path);
|
|
203
|
+
if (!existsSync(repoPath) || !isGitRepo(repoPath))
|
|
204
|
+
continue;
|
|
205
|
+
if (!gitHasUncommittedChanges(repoPath))
|
|
206
|
+
continue;
|
|
207
|
+
const result = spawnSync('git', ['checkout', '--', '.'], { cwd: repoPath, encoding: 'utf-8' });
|
|
208
|
+
if (result.status === 0) {
|
|
209
|
+
// Also clean untracked files created by apply (new entity dirs)
|
|
210
|
+
spawnSync('git', ['clean', '-fd'], { cwd: repoPath, encoding: 'utf-8' });
|
|
211
|
+
console.log(` Reverted: ${repo.name}`);
|
|
212
|
+
reverted++;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (reverted > 0) {
|
|
216
|
+
log.success(`Reverted uncommitted changes in ${reverted} repo${reverted === 1 ? '' : 's'}.`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
console.log('Nothing to abort — no staging files and no uncommitted changes.');
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
// ── sync review (delegates to top-level review command) ─────────────────────
|
|
223
|
+
syncEntitiesCommand
|
|
224
|
+
.command('review')
|
|
225
|
+
.description('Review entity changes (alias for studiograph review)')
|
|
226
|
+
.option('--type <entity_type>', 'Show colored diff for an entity type')
|
|
227
|
+
.option('--file <path>', 'Show colored diff for a specific file')
|
|
228
|
+
.option('--committed', 'Review last commit instead of uncommitted changes')
|
|
229
|
+
.action(async (opts) => {
|
|
230
|
+
await runReview(opts);
|
|
231
|
+
});
|
|
232
|
+
function formatElapsed(ms) {
|
|
233
|
+
if (ms < 1000)
|
|
234
|
+
return `${ms}ms`;
|
|
235
|
+
const secs = ms / 1000;
|
|
236
|
+
if (secs < 60)
|
|
237
|
+
return `${secs.toFixed(1)}s`;
|
|
238
|
+
const mins = Math.floor(secs / 60);
|
|
239
|
+
const remSecs = Math.round(secs % 60);
|
|
240
|
+
return `${mins}m ${remSecs}s`;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=sync-entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-entities.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ import { log, outro } from '@clack/prompts';
|
|
|
10
10
|
import { existsSync } from 'fs';
|
|
11
11
|
import { join } from 'path';
|
|
12
12
|
import { Workspace } from '../../core/workspace.js';
|
|
13
|
-
import { gitPull, gitPush } from '../../utils/git.js';
|
|
13
|
+
import { gitPull, gitPush, gitStashPop } from '../../utils/git.js';
|
|
14
|
+
import { resolveConflicts } from '../../utils/merge-resolver.js';
|
|
14
15
|
async function getRepoEntries(workspace, workspaceRoot) {
|
|
15
16
|
const entries = [];
|
|
16
17
|
// The .studiograph config directory is itself a git repo (when GitHub-provisioned)
|
|
@@ -51,7 +52,7 @@ export const pullCommand = new Command('pull')
|
|
|
51
52
|
continue;
|
|
52
53
|
}
|
|
53
54
|
try {
|
|
54
|
-
const result = gitPull(entry.path);
|
|
55
|
+
const result = gitPull(entry.path, { abortOnConflict: false });
|
|
55
56
|
if (result === 'updated') {
|
|
56
57
|
log.success(`${entry.name}: updated`);
|
|
57
58
|
}
|
|
@@ -59,8 +60,16 @@ export const pullCommand = new Command('pull')
|
|
|
59
60
|
log.info(`${entry.name}: already up to date`);
|
|
60
61
|
}
|
|
61
62
|
else {
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
// Conflict — attempt LLM merge resolution
|
|
64
|
+
const resolution = await resolveConflicts(entry.path, (msg) => log.info(msg));
|
|
65
|
+
gitStashPop(entry.path); // restore any auto-stashed local changes
|
|
66
|
+
if (resolution.success) {
|
|
67
|
+
log.success(`${entry.name}: updated (conflicts resolved by AI)`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
log.warn(`${entry.name}: conflict — resolve manually in ${entry.path}`);
|
|
71
|
+
hasConflict = true;
|
|
72
|
+
}
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
catch (error) {
|
|
@@ -100,7 +109,29 @@ export const pushCommand = new Command('push')
|
|
|
100
109
|
continue;
|
|
101
110
|
}
|
|
102
111
|
try {
|
|
103
|
-
|
|
112
|
+
let result = gitPush(entry.path);
|
|
113
|
+
// Auto pull-rebase and retry if remote has newer commits
|
|
114
|
+
if (result === 'rejected') {
|
|
115
|
+
log.info(`${entry.name}: remote has newer commits, pulling...`);
|
|
116
|
+
const pullResult = gitPull(entry.path, { abortOnConflict: false });
|
|
117
|
+
if (pullResult === 'conflict') {
|
|
118
|
+
const resolution = await resolveConflicts(entry.path, (msg) => log.info(msg));
|
|
119
|
+
gitStashPop(entry.path); // restore any auto-stashed local changes
|
|
120
|
+
if (!resolution.success) {
|
|
121
|
+
log.warn(`${entry.name}: conflict — resolve manually in ${entry.path}`);
|
|
122
|
+
hasError = true;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
log.info(`${entry.name}: conflicts resolved by AI`);
|
|
126
|
+
}
|
|
127
|
+
// Retry push after successful pull
|
|
128
|
+
result = gitPush(entry.path);
|
|
129
|
+
if (result === 'rejected') {
|
|
130
|
+
log.warn(`${entry.name}: push still rejected after pull`);
|
|
131
|
+
hasError = true;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
104
135
|
if (result === 'pushed') {
|
|
105
136
|
log.success(`${entry.name}: pushed`);
|
|
106
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAA0B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { Command } from 'commander';
|
|
|
8
8
|
import { initCommand } from './commands/init.js';
|
|
9
9
|
import { startCommand } from './commands/start.js';
|
|
10
10
|
import { joinCommand } from './commands/join.js';
|
|
11
|
+
import { cloneCommand } from './commands/clone.js';
|
|
11
12
|
import { authCommand } from './commands/auth.js';
|
|
12
13
|
import { membersCommand } from './commands/members.js';
|
|
13
14
|
import { pullCommand, pushCommand } from './commands/sync.js';
|
|
@@ -17,11 +18,19 @@ import { appCommand } from './commands/app.js';
|
|
|
17
18
|
import { deployCommand } from './commands/deploy.js';
|
|
18
19
|
import { mcpCommand } from './commands/mcp.js';
|
|
19
20
|
import { connectorCommand } from './commands/connector.js';
|
|
21
|
+
import { sourceCommand } from './commands/source.js';
|
|
22
|
+
import { syncEntitiesCommand } from './commands/sync-entities.js';
|
|
23
|
+
import { enrichCommand } from './commands/enrich.js';
|
|
24
|
+
import { reviewCommand } from './commands/review.js';
|
|
25
|
+
import { commitCommand } from './commands/commit.js';
|
|
20
26
|
import { indexCommand } from './commands/index.js';
|
|
21
27
|
import { configCommand } from './commands/config.js';
|
|
22
28
|
import { lintCommand } from './commands/lint.js';
|
|
23
29
|
import { updateCommand } from './commands/update.js';
|
|
24
30
|
import { provisionCommand } from './commands/provision.js';
|
|
31
|
+
import { resetCommand } from './commands/reset.js';
|
|
32
|
+
import { graphragCommand } from './commands/graphrag.js';
|
|
33
|
+
import { orphansCommand } from './commands/orphans.js';
|
|
25
34
|
const program = new Command();
|
|
26
35
|
program
|
|
27
36
|
.name('studiograph')
|
|
@@ -52,6 +61,7 @@ program.configureHelp({
|
|
|
52
61
|
'Getting Started:',
|
|
53
62
|
formatItem('init <team-name> [dir]', 'Initialize a new workspace'),
|
|
54
63
|
formatItem('join <url> [dir]', 'Join an existing workspace'),
|
|
64
|
+
formatItem('clone <url> [dir]', 'Clone workspace with full admin setup'),
|
|
55
65
|
formatItem('auth', 'Manage GitHub authentication'),
|
|
56
66
|
'',
|
|
57
67
|
'Daily Workflow:',
|
|
@@ -70,6 +80,15 @@ program.configureHelp({
|
|
|
70
80
|
formatItem('serve', 'Start HTTP server'),
|
|
71
81
|
formatItem('deploy', 'Deploy to hosting platform'),
|
|
72
82
|
'',
|
|
83
|
+
'Data Sync:',
|
|
84
|
+
formatItem('source', 'Manage sync sources'),
|
|
85
|
+
formatItem('sync', 'Sync entities from external sources'),
|
|
86
|
+
formatItem('enrich', 'Enrich entities with context'),
|
|
87
|
+
formatItem('graphrag', 'Knowledge graph for cross-document context'),
|
|
88
|
+
formatItem('review', 'Review entity changes'),
|
|
89
|
+
formatItem('commit', 'Git commit entity changes'),
|
|
90
|
+
formatItem('graphrag', 'LightRAG knowledge graph'),
|
|
91
|
+
'',
|
|
73
92
|
'Integrations & Extensions:',
|
|
74
93
|
formatItem('mcp', 'Claude Desktop integration'),
|
|
75
94
|
formatItem('connector', 'Third-party integrations'),
|
|
@@ -77,6 +96,7 @@ program.configureHelp({
|
|
|
77
96
|
formatItem('r2', 'Cloudflare R2 assets'),
|
|
78
97
|
'',
|
|
79
98
|
'Maintenance:',
|
|
99
|
+
formatItem('reset', 'Reset workspace (remove entity data)'),
|
|
80
100
|
formatItem('update', 'Update Studiograph CLI'),
|
|
81
101
|
formatItem('help [command]', 'Display help for command'),
|
|
82
102
|
];
|
|
@@ -87,6 +107,7 @@ program.configureHelp({
|
|
|
87
107
|
// Getting Started
|
|
88
108
|
program.addCommand(initCommand);
|
|
89
109
|
program.addCommand(joinCommand);
|
|
110
|
+
program.addCommand(cloneCommand);
|
|
90
111
|
program.addCommand(authCommand);
|
|
91
112
|
// Daily Workflow
|
|
92
113
|
program.addCommand(startCommand);
|
|
@@ -97,16 +118,26 @@ program.addCommand(provisionCommand);
|
|
|
97
118
|
program.addCommand(membersCommand);
|
|
98
119
|
program.addCommand(indexCommand);
|
|
99
120
|
program.addCommand(lintCommand);
|
|
121
|
+
program.addCommand(orphansCommand);
|
|
100
122
|
program.addCommand(configCommand);
|
|
101
123
|
// Server & Deployment
|
|
102
124
|
program.addCommand(serveCommand);
|
|
103
125
|
program.addCommand(deployCommand);
|
|
126
|
+
// Data Sync
|
|
127
|
+
program.addCommand(sourceCommand);
|
|
128
|
+
program.addCommand(syncEntitiesCommand);
|
|
129
|
+
program.addCommand(enrichCommand);
|
|
130
|
+
program.addCommand(graphragCommand);
|
|
131
|
+
program.addCommand(reviewCommand);
|
|
132
|
+
program.addCommand(commitCommand);
|
|
133
|
+
program.addCommand(graphragCommand);
|
|
104
134
|
// Integrations & Extensions
|
|
105
135
|
program.addCommand(mcpCommand);
|
|
106
136
|
program.addCommand(connectorCommand);
|
|
107
137
|
program.addCommand(appCommand);
|
|
108
138
|
program.addCommand(r2Command);
|
|
109
139
|
// Maintenance
|
|
140
|
+
program.addCommand(resetCommand);
|
|
110
141
|
program.addCommand(updateCommand);
|
|
111
142
|
// Parse arguments
|
|
112
143
|
program.parse();
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates a connected set of example entities during `studiograph init`
|
|
5
5
|
* to demonstrate the knowledge graph pattern — a client, project, person,
|
|
6
|
-
* meeting, and decision all wikilinked together
|
|
6
|
+
* meeting, and decision all wikilinked together, distributed across repos
|
|
7
|
+
* matching the fluid folder model.
|
|
7
8
|
*/
|
|
8
9
|
import { Workspace } from '../core/workspace.js';
|
|
9
10
|
export declare function scaffoldExampleEntities(workspace: Workspace, teamName: string): Promise<void>;
|
package/dist/cli/scaffolding.js
CHANGED
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates a connected set of example entities during `studiograph init`
|
|
5
5
|
* to demonstrate the knowledge graph pattern — a client, project, person,
|
|
6
|
-
* meeting, and decision all wikilinked together
|
|
6
|
+
* meeting, and decision all wikilinked together, distributed across repos
|
|
7
|
+
* matching the fluid folder model.
|
|
7
8
|
*/
|
|
8
9
|
import { join } from 'path';
|
|
9
10
|
import { writeFileSync } from 'fs';
|
|
10
11
|
import { RepoType } from '../core/types.js';
|
|
11
12
|
import { MarkdownService } from '../services/markdown.js';
|
|
12
|
-
|
|
13
|
+
/** Repos scaffolded during init — one per entity type */
|
|
14
|
+
const STARTER_REPOS = [
|
|
15
|
+
{ name: 'projects', type: RepoType.PROJECT, description: 'Client projects and engagements' },
|
|
16
|
+
{ name: 'clients', type: RepoType.PROJECT, description: 'Client organizations' },
|
|
17
|
+
{ name: 'people', type: RepoType.PROJECT, description: 'Contacts and team members' },
|
|
18
|
+
{ name: 'meetings', type: RepoType.PROJECT, description: 'Meeting notes' },
|
|
19
|
+
];
|
|
13
20
|
function buildEntities(now) {
|
|
14
21
|
const shared = {
|
|
15
22
|
created_by: 'studiograph',
|
|
@@ -20,6 +27,7 @@ function buildEntities(now) {
|
|
|
20
27
|
};
|
|
21
28
|
return [
|
|
22
29
|
{
|
|
30
|
+
repo: 'clients',
|
|
23
31
|
entityType: 'client',
|
|
24
32
|
entityId: 'meridian-health',
|
|
25
33
|
frontmatter: {
|
|
@@ -49,6 +57,7 @@ Regional healthcare network with 12 hospitals across the Midwest. Engaged us for
|
|
|
49
57
|
`,
|
|
50
58
|
},
|
|
51
59
|
{
|
|
60
|
+
repo: 'people',
|
|
52
61
|
entityType: 'person',
|
|
53
62
|
entityId: 'sarah-chen',
|
|
54
63
|
frontmatter: {
|
|
@@ -73,6 +82,7 @@ VP of Marketing at [[meridian-health]]. Primary stakeholder for the [[meridian-r
|
|
|
73
82
|
`,
|
|
74
83
|
},
|
|
75
84
|
{
|
|
85
|
+
repo: 'projects',
|
|
76
86
|
entityType: 'project',
|
|
77
87
|
entityId: 'meridian-rebrand',
|
|
78
88
|
frontmatter: {
|
|
@@ -108,6 +118,7 @@ Comprehensive brand identity refresh for [[meridian-health]] following their mer
|
|
|
108
118
|
`,
|
|
109
119
|
},
|
|
110
120
|
{
|
|
121
|
+
repo: 'meetings',
|
|
111
122
|
entityType: 'meeting',
|
|
112
123
|
entityId: '2026-02-10-kickoff',
|
|
113
124
|
frontmatter: {
|
|
@@ -148,6 +159,7 @@ Kickoff meeting for the [[meridian-rebrand]] project with [[sarah-chen]] and the
|
|
|
148
159
|
`,
|
|
149
160
|
},
|
|
150
161
|
{
|
|
162
|
+
repo: 'projects',
|
|
151
163
|
entityType: 'decision',
|
|
152
164
|
entityId: 'dec-2026-001',
|
|
153
165
|
frontmatter: {
|
|
@@ -241,40 +253,42 @@ studiograph get <entity-id> # View a specific entity
|
|
|
241
253
|
|
|
242
254
|
## Explore the Examples
|
|
243
255
|
|
|
244
|
-
|
|
256
|
+
Example entities are tagged \`example\` and distributed across repos:
|
|
245
257
|
|
|
246
|
-
- \`
|
|
247
|
-
- \`
|
|
248
|
-
- \`
|
|
249
|
-
- \`
|
|
250
|
-
- \`
|
|
258
|
+
- \`clients/meridian-health/main.md\` — a client organization
|
|
259
|
+
- \`people/sarah-chen/main.md\` — a contact linked to the client
|
|
260
|
+
- \`projects/meridian-rebrand/main.md\` — a project linking client, person, and decisions
|
|
261
|
+
- \`projects/dec-2026-001/main.md\` — a structured decision record
|
|
262
|
+
- \`meetings/2026-02-10-kickoff/main.md\` — a meeting with notes and action items
|
|
251
263
|
|
|
252
|
-
Notice how \`[[wikilinks]]\` connect everything into a navigable graph.
|
|
264
|
+
Notice how \`[[wikilinks]]\` connect everything into a navigable graph across repos.
|
|
253
265
|
|
|
254
266
|
## Cleaning Up Examples
|
|
255
267
|
|
|
256
|
-
When you're ready to remove the example entities
|
|
268
|
+
When you're ready to remove the example entities, delete the folders tagged \`example\`:
|
|
257
269
|
|
|
258
270
|
\`\`\`bash
|
|
259
|
-
|
|
260
|
-
rm -rf
|
|
271
|
+
rm -rf clients/meridian-health projects/meridian-rebrand projects/dec-2026-001
|
|
272
|
+
rm -rf people/sarah-chen meetings/2026-02-10-kickoff
|
|
261
273
|
\`\`\`
|
|
262
274
|
`;
|
|
263
275
|
}
|
|
264
276
|
export async function scaffoldExampleEntities(workspace, teamName) {
|
|
265
|
-
const
|
|
266
|
-
// Register
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
277
|
+
const workspacePath = workspace.getWorkspacePath();
|
|
278
|
+
// Register starter repos
|
|
279
|
+
for (const repo of STARTER_REPOS) {
|
|
280
|
+
await workspace.registerRepo({
|
|
281
|
+
name: repo.name,
|
|
282
|
+
type: repo.type,
|
|
283
|
+
description: repo.description,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
// Write example entities into their respective repos
|
|
273
287
|
const md = new MarkdownService();
|
|
274
288
|
const now = new Date().toISOString();
|
|
275
289
|
const entities = buildEntities(now);
|
|
276
290
|
for (const entity of entities) {
|
|
277
|
-
const filePath = join(
|
|
291
|
+
const filePath = join(workspacePath, entity.repo, entity.entityId, 'main.md');
|
|
278
292
|
md.writeFile(filePath, {
|
|
279
293
|
frontmatter: entity.frontmatter,
|
|
280
294
|
content: entity.content,
|
|
@@ -282,7 +296,7 @@ export async function scaffoldExampleEntities(workspace, teamName) {
|
|
|
282
296
|
});
|
|
283
297
|
}
|
|
284
298
|
// Write STUDIOGRAPH.md to workspace root
|
|
285
|
-
const guidePath = join(
|
|
299
|
+
const guidePath = join(workspacePath, 'STUDIOGRAPH.md');
|
|
286
300
|
writeFileSync(guidePath, buildOnboardingGuide(teamName), 'utf-8');
|
|
287
301
|
}
|
|
288
302
|
//# sourceMappingURL=scaffolding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../src/cli/scaffolding.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../src/cli/scaffolding.ts"],"names":[],"mappings":"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"}
|