studiograph 1.1.3 → 1.2.0-beta.10
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.d.ts +53 -0
- package/dist/agent/orchestrator.js +197 -12
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/system.md +43 -11
- 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 +84 -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 +33 -1
- package/dist/agent/tools/graph-tools.js +192 -44
- 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/ops-tools.d.ts +24 -0
- package/dist/agent/tools/ops-tools.js +542 -0
- package/dist/agent/tools/ops-tools.js.map +1 -0
- package/dist/agent/tools/sync-tools.d.ts +33 -0
- package/dist/agent/tools/sync-tools.js +947 -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/app.js +121 -18
- package/dist/cli/commands/app.js.map +1 -1
- 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 +44 -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 +292 -115
- 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 +29 -196
- 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/redeploy.d.ts +9 -0
- package/dist/cli/commands/redeploy.js +203 -0
- package/dist/cli/commands/redeploy.js.map +1 -0
- 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/resolve.d.ts +8 -0
- package/dist/cli/commands/resolve.js +85 -0
- package/dist/cli/commands/resolve.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/serve.js +55 -8
- package/dist/cli/commands/serve.js.map +1 -1
- 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 +307 -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 +81 -5
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +45 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffolding.d.ts +2 -1
- package/dist/cli/scaffolding.js +38 -23
- 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 +40 -12
- package/dist/core/graph.js +344 -104
- 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 +2 -4
- package/dist/core/types.js +1 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +12 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +6 -1
- package/dist/core/workspace-manager.js +29 -4
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +13 -5
- package/dist/core/workspace.js +115 -33
- package/dist/core/workspace.js.map +1 -1
- package/dist/lib/lib/utils.d.ts +2 -0
- package/dist/lib/lib/utils.js +6 -0
- package/dist/lib/lib/utils.js.map +1 -0
- 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 +97 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/plugin-loader.d.ts +8 -0
- package/dist/server/plugin-loader.js +54 -2
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/server/routes/chat.d.ts +3 -2
- package/dist/server/routes/chat.js +67 -16
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/git-api.d.ts +9 -0
- package/dist/server/routes/git-api.js +82 -0
- package/dist/server/routes/git-api.js.map +1 -0
- package/dist/server/routes/graph-api.d.ts +2 -2
- package/dist/server/routes/graph-api.js +164 -3
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/workspace-api.d.ts +9 -0
- package/dist/server/routes/workspace-api.js +170 -0
- package/dist/server/routes/workspace-api.js.map +1 -0
- package/dist/services/assets/base.d.ts +2 -2
- package/dist/services/assets/base.js +4 -4
- package/dist/services/assets/base.js.map +1 -1
- package/dist/services/assets/index.d.ts +6 -6
- package/dist/services/assets/index.js +12 -12
- package/dist/services/assets/index.js.map +1 -1
- package/dist/services/git.d.ts +31 -0
- package/dist/services/git.js +92 -3
- package/dist/services/git.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 +60 -0
- package/dist/services/sync/commit.js +370 -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 +31 -4
- package/dist/utils/git.js +65 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/merge-resolver.d.ts +60 -0
- package/dist/utils/merge-resolver.js +304 -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/dist/web/_app/env.js +1 -0
- package/dist/web/_app/immutable/assets/0.BwJV4fvl.css +1 -0
- package/dist/web/_app/immutable/assets/2.DRHi7ABa.css +1 -0
- package/dist/web/_app/immutable/assets/3.CnAQdPKU.css +1 -0
- package/dist/web/_app/immutable/assets/4.BG92MufE.css +1 -0
- package/dist/web/_app/immutable/assets/5.CfrQIPYs.css +1 -0
- package/dist/web/_app/immutable/assets/ChatPanel.BNzaCFTL.css +1 -0
- package/dist/web/_app/immutable/assets/editor.D6Rjo7RE.css +1 -0
- package/dist/web/_app/immutable/chunks/4QY4j-jX.js +1 -0
- package/dist/web/_app/immutable/chunks/B4G4uWkV.js +1 -0
- package/dist/web/_app/immutable/chunks/BB_5th5W.js +3383 -0
- package/dist/web/_app/immutable/chunks/CUzqHQY_.js +1 -0
- package/dist/web/_app/immutable/chunks/CYrVHOHA.js +1 -0
- package/dist/web/_app/immutable/chunks/CksE5s8n.js +1 -0
- package/dist/web/_app/immutable/chunks/CqkleIqs.js +1 -0
- package/dist/web/_app/immutable/chunks/D0JBkEPE.js +86 -0
- package/dist/web/_app/immutable/chunks/D2K5GzLj.js +1 -0
- package/dist/web/_app/immutable/chunks/DEkoussQ.js +2 -0
- package/dist/web/_app/immutable/chunks/DW-KmHRi.js +1 -0
- package/dist/web/_app/immutable/chunks/DcCr4z9k.js +1 -0
- package/dist/web/_app/immutable/chunks/Dg2wWwJu.js +2 -0
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +18 -0
- package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +5 -0
- package/dist/web/_app/immutable/chunks/DtVH--hH.js +6 -0
- package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +1 -0
- package/dist/web/_app/immutable/chunks/SBEriEQR.js +1 -0
- package/dist/web/_app/immutable/chunks/WSUKABI_.js +1 -0
- package/dist/web/_app/immutable/chunks/YTERt3Ul.js +6 -0
- package/dist/web/_app/immutable/chunks/m_R7HatS.js +1 -0
- package/dist/web/_app/immutable/chunks/vlmEnjfO.js +1 -0
- package/dist/web/_app/immutable/entry/app.B9pwpU_x.js +2 -0
- package/dist/web/_app/immutable/entry/start.CDuNCEco.js +1 -0
- package/dist/web/_app/immutable/nodes/0.YEQhw1us.js +1 -0
- package/dist/web/_app/immutable/nodes/1.CvmHhpRy.js +1 -0
- package/dist/web/_app/immutable/nodes/2.c5k1r7dq.js +1 -0
- package/dist/web/_app/immutable/nodes/3.B24tcdLK.js +1 -0
- package/dist/web/_app/immutable/nodes/4.kX2m5Pp9.js +16 -0
- package/dist/web/_app/immutable/nodes/5.DELt6wTD.js +2 -0
- package/dist/web/_app/version.json +1 -0
- package/dist/web/index.html +41 -0
- package/package.json +21 -7
- /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
package/dist/cli/commands/app.js
CHANGED
|
@@ -5,15 +5,37 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import { intro, outro, spinner, confirm, log } from '@clack/prompts';
|
|
8
|
-
import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, readdirSync } from 'fs';
|
|
8
|
+
import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, readdirSync, rmSync } from 'fs';
|
|
9
9
|
import { join, resolve } from 'path';
|
|
10
|
-
import {
|
|
10
|
+
import { tmpdir } from 'os';
|
|
11
|
+
import { execSync, spawnSync } from 'child_process';
|
|
11
12
|
import { Workspace } from '../../core/workspace.js';
|
|
13
|
+
import { RepoType } from '../../core/types.js';
|
|
14
|
+
/** Check if a source string looks like a Git URL */
|
|
15
|
+
function isGitUrl(source) {
|
|
16
|
+
return (source.startsWith('https://') ||
|
|
17
|
+
source.startsWith('http://') ||
|
|
18
|
+
source.startsWith('git@') ||
|
|
19
|
+
source.startsWith('git://') ||
|
|
20
|
+
source.startsWith('ssh://'));
|
|
21
|
+
}
|
|
22
|
+
/** Clone a Git URL to a temp directory. Returns the cloned path, or null on failure. */
|
|
23
|
+
function cloneToTemp(url, s) {
|
|
24
|
+
const dir = join(tmpdir(), `studiograph-app-${Date.now()}`);
|
|
25
|
+
s.start(`Cloning ${url}...`);
|
|
26
|
+
const result = spawnSync('git', ['clone', '--depth', '1', url, dir], { encoding: 'utf-8', stdio: 'pipe' });
|
|
27
|
+
if (result.status !== 0) {
|
|
28
|
+
s.stop('Clone failed');
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
s.stop('Cloned');
|
|
32
|
+
return dir;
|
|
33
|
+
}
|
|
12
34
|
export const appCommand = new Command('app')
|
|
13
35
|
.description('Manage Studiograph app plugins');
|
|
14
36
|
appCommand
|
|
15
37
|
.command('install <source>')
|
|
16
|
-
.description('Install an app plugin from a local directory')
|
|
38
|
+
.description('Install an app plugin from a local directory or Git URL')
|
|
17
39
|
.option('--no-commit', 'Skip git commit after installing')
|
|
18
40
|
.option('--push', 'Push to remote after committing')
|
|
19
41
|
.action(async (source, options) => {
|
|
@@ -26,7 +48,23 @@ appCommand
|
|
|
26
48
|
process.exit(1);
|
|
27
49
|
return;
|
|
28
50
|
}
|
|
29
|
-
|
|
51
|
+
// If source is a URL, clone to temp dir
|
|
52
|
+
let sourceDir;
|
|
53
|
+
let clonedTempDir = null;
|
|
54
|
+
if (isGitUrl(source)) {
|
|
55
|
+
const s = spinner();
|
|
56
|
+
const tempDir = cloneToTemp(source, s);
|
|
57
|
+
if (!tempDir) {
|
|
58
|
+
outro(`❌ Failed to clone ${source}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
sourceDir = tempDir;
|
|
63
|
+
clonedTempDir = tempDir;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
sourceDir = resolve(source);
|
|
67
|
+
}
|
|
30
68
|
const manifestPath = join(sourceDir, 'app.json');
|
|
31
69
|
if (!existsSync(manifestPath)) {
|
|
32
70
|
outro(`❌ No app.json found in ${sourceDir}`);
|
|
@@ -47,18 +85,31 @@ appCommand
|
|
|
47
85
|
process.exit(1);
|
|
48
86
|
return;
|
|
49
87
|
}
|
|
50
|
-
// Step 1: Build (if declared)
|
|
51
|
-
|
|
88
|
+
// Step 1: Build (if declared, or auto-detect from package.json)
|
|
89
|
+
let buildCmd = manifest.build;
|
|
90
|
+
if (!buildCmd) {
|
|
91
|
+
const pkgPath = join(sourceDir, 'package.json');
|
|
92
|
+
if (existsSync(pkgPath)) {
|
|
93
|
+
try {
|
|
94
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
95
|
+
if (pkg.scripts?.build) {
|
|
96
|
+
buildCmd = 'npm install --ignore-scripts && npm run build';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch { /* ignore */ }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (buildCmd) {
|
|
52
103
|
const buildSpinner = spinner();
|
|
53
104
|
buildSpinner.start(`Building ${manifest.name}...`);
|
|
54
105
|
try {
|
|
55
|
-
execSync(
|
|
106
|
+
execSync(buildCmd, { cwd: sourceDir, stdio: 'pipe' });
|
|
56
107
|
buildSpinner.stop(`Built ${manifest.name}`);
|
|
57
108
|
}
|
|
58
109
|
catch (err) {
|
|
59
110
|
buildSpinner.stop('Build failed');
|
|
60
111
|
const stderr = err?.stderr?.toString() ?? '';
|
|
61
|
-
outro(`❌ Build command failed: ${
|
|
112
|
+
outro(`❌ Build command failed: ${buildCmd}\n${stderr}`);
|
|
62
113
|
process.exit(1);
|
|
63
114
|
return;
|
|
64
115
|
}
|
|
@@ -73,16 +124,19 @@ appCommand
|
|
|
73
124
|
// app.json
|
|
74
125
|
cpSync(manifestPath, join(destDir, 'app.json'));
|
|
75
126
|
installed.push('app.json');
|
|
76
|
-
// plugin file (normalise ./prefix)
|
|
127
|
+
// plugin file (normalise ./prefix, fall back to dist/ if not found at root)
|
|
77
128
|
const pluginRelPath = manifest.plugin.replace(/^\.\//, '');
|
|
78
|
-
|
|
129
|
+
let pluginSrc = join(sourceDir, pluginRelPath);
|
|
130
|
+
if (!existsSync(pluginSrc)) {
|
|
131
|
+
pluginSrc = join(sourceDir, 'dist', pluginRelPath);
|
|
132
|
+
}
|
|
79
133
|
if (existsSync(pluginSrc)) {
|
|
80
134
|
cpSync(pluginSrc, join(destDir, 'plugin.js'));
|
|
81
135
|
installed.push('plugin.js');
|
|
82
136
|
}
|
|
83
137
|
else {
|
|
84
138
|
installSpinner.stop('');
|
|
85
|
-
outro(`❌ Plugin file not found: ${
|
|
139
|
+
outro(`❌ Plugin file not found: ${join(sourceDir, pluginRelPath)} (also checked dist/)`);
|
|
86
140
|
process.exit(1);
|
|
87
141
|
return;
|
|
88
142
|
}
|
|
@@ -108,11 +162,38 @@ appCommand
|
|
|
108
162
|
const count = readdirSync(toolsSrc).length;
|
|
109
163
|
installed.push(`tools/ (${count} entries)`);
|
|
110
164
|
}
|
|
111
|
-
//
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
165
|
+
// public/ — static assets (CSS, JS, fonts, images) served by the plugin
|
|
166
|
+
const publicSrc = join(sourceDir, 'public');
|
|
167
|
+
if (existsSync(publicSrc)) {
|
|
168
|
+
cpSync(publicSrc, join(destDir, 'public'), { recursive: true });
|
|
169
|
+
installed.push('public/');
|
|
170
|
+
}
|
|
171
|
+
// theme/ — resolve from themeDir field, or probe theme/ → themes/ → dist/themes/
|
|
172
|
+
let themeSrcDir = null;
|
|
173
|
+
if (manifest.themeDir) {
|
|
174
|
+
themeSrcDir = join(sourceDir, manifest.themeDir.replace(/^\.\//, ''));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
for (const candidate of ['theme', 'themes', join('dist', 'themes')]) {
|
|
178
|
+
const p = join(sourceDir, candidate);
|
|
179
|
+
if (existsSync(p)) {
|
|
180
|
+
themeSrcDir = p;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (themeSrcDir && existsSync(themeSrcDir)) {
|
|
186
|
+
// If theme dir contains a single subdirectory (e.g. themes/default/),
|
|
187
|
+
// copy its contents directly so files end up at theme/tokens.json
|
|
188
|
+
// rather than theme/default/tokens.json.
|
|
189
|
+
const themeEntries = readdirSync(themeSrcDir);
|
|
190
|
+
const hasTokensJson = themeEntries.includes('tokens.json');
|
|
191
|
+
if (!hasTokensJson && themeEntries.length === 1) {
|
|
192
|
+
const subdir = join(themeSrcDir, themeEntries[0]);
|
|
193
|
+
if (existsSync(join(subdir, 'tokens.json'))) {
|
|
194
|
+
themeSrcDir = subdir;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
116
197
|
const themeDest = join(destDir, 'theme');
|
|
117
198
|
const tokensDestPath = join(themeDest, 'tokens.json');
|
|
118
199
|
const existingTokens = existsSync(tokensDestPath)
|
|
@@ -131,7 +212,25 @@ appCommand
|
|
|
131
212
|
for (const item of installed) {
|
|
132
213
|
log.info(` ✓ ${item}`);
|
|
133
214
|
}
|
|
134
|
-
// Step 3:
|
|
215
|
+
// Step 3: Create app-type repo if it doesn't exist yet
|
|
216
|
+
const existingRepos = (await workspace.loadConfig()).repos;
|
|
217
|
+
const repoExists = existingRepos.some(r => r.name === manifest.name);
|
|
218
|
+
if (!repoExists) {
|
|
219
|
+
const repoSpinner = spinner();
|
|
220
|
+
repoSpinner.start(`Creating ${manifest.name} repo...`);
|
|
221
|
+
try {
|
|
222
|
+
await workspace.registerRepo({
|
|
223
|
+
name: manifest.name,
|
|
224
|
+
type: RepoType.APP,
|
|
225
|
+
description: manifest.description ?? `${manifest.name} app entities`,
|
|
226
|
+
});
|
|
227
|
+
repoSpinner.stop(`Created ${manifest.name} repo`);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
repoSpinner.stop(`Repo creation skipped: ${err.message}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Step 4: Git commit in .studiograph/
|
|
135
234
|
if (options.commit !== false) {
|
|
136
235
|
const commitSpinner = spinner();
|
|
137
236
|
commitSpinner.start('Committing to config repo...');
|
|
@@ -145,7 +244,7 @@ appCommand
|
|
|
145
244
|
commitSpinner.stop('Nothing to commit (already up to date)');
|
|
146
245
|
}
|
|
147
246
|
}
|
|
148
|
-
// Step
|
|
247
|
+
// Step 5: Push
|
|
149
248
|
let shouldPush = options.push ?? false;
|
|
150
249
|
if (!shouldPush && options.commit !== false) {
|
|
151
250
|
const answer = await confirm({ message: 'Push to remote?' });
|
|
@@ -162,6 +261,10 @@ appCommand
|
|
|
162
261
|
pushSpinner.stop('Push failed — run git push manually in .studiograph/');
|
|
163
262
|
}
|
|
164
263
|
}
|
|
264
|
+
// Clean up temp clone
|
|
265
|
+
if (clonedTempDir) {
|
|
266
|
+
rmSync(clonedTempDir, { recursive: true, force: true });
|
|
267
|
+
}
|
|
165
268
|
outro(`✨ ${manifest.name} installed. Restart studiograph serve to apply.`);
|
|
166
269
|
});
|
|
167
270
|
//# sourceMappingURL=app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/commands/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/commands/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* studiograph auth command
|
|
3
3
|
*
|
|
4
4
|
* Subcommands:
|
|
5
|
-
* studiograph auth github — authenticate
|
|
5
|
+
* studiograph auth github — authenticate with a GitHub Personal Access Token
|
|
6
6
|
* studiograph auth status — show current auth status
|
|
7
7
|
* studiograph auth logout — clear stored token
|
|
8
8
|
*/
|
|
@@ -2,37 +2,46 @@
|
|
|
2
2
|
* studiograph auth command
|
|
3
3
|
*
|
|
4
4
|
* Subcommands:
|
|
5
|
-
* studiograph auth github — authenticate
|
|
5
|
+
* studiograph auth github — authenticate with a GitHub Personal Access Token
|
|
6
6
|
* studiograph auth status — show current auth status
|
|
7
7
|
* studiograph auth logout — clear stored token
|
|
8
8
|
*/
|
|
9
9
|
import { Command } from 'commander';
|
|
10
10
|
import { intro, outro, spinner, log } from '@clack/prompts';
|
|
11
|
-
import {
|
|
11
|
+
import { promptForPAT, storeToken, loadToken, clearToken, getGitHubUser, } from '../../auth/github.js';
|
|
12
12
|
const authGithubCommand = new Command('github')
|
|
13
|
-
.description('Authenticate with GitHub using
|
|
13
|
+
.description('Authenticate with GitHub using a Personal Access Token')
|
|
14
14
|
.action(async () => {
|
|
15
15
|
intro('GitHub Authentication');
|
|
16
16
|
try {
|
|
17
|
-
|
|
18
|
-
// runDeviceFlow prints the user_code + URL itself
|
|
19
|
-
const token = await runDeviceFlow();
|
|
17
|
+
const token = await promptForPAT();
|
|
20
18
|
const s = spinner();
|
|
21
|
-
s.start('
|
|
19
|
+
s.start('Verifying token...');
|
|
22
20
|
const user = await getGitHubUser(token);
|
|
23
|
-
s.stop('
|
|
21
|
+
s.stop('Token verified');
|
|
24
22
|
storeToken(token, user);
|
|
25
|
-
outro(
|
|
23
|
+
outro(`Authenticated as ${user.login} (${user.name})`);
|
|
26
24
|
}
|
|
27
25
|
catch (error) {
|
|
28
26
|
log.error(`Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
29
|
-
outro('
|
|
27
|
+
outro('Could not authenticate with GitHub.');
|
|
30
28
|
process.exit(1);
|
|
31
29
|
}
|
|
32
30
|
});
|
|
33
31
|
const authStatusCommand = new Command('status')
|
|
34
32
|
.description('Show current GitHub authentication status')
|
|
35
33
|
.action(() => {
|
|
34
|
+
// Check env vars directly for source detection
|
|
35
|
+
const envSgToken = process.env.STUDIOGRAPH_GITHUB_TOKEN;
|
|
36
|
+
const envGhToken = process.env.GITHUB_TOKEN;
|
|
37
|
+
if (envSgToken) {
|
|
38
|
+
console.log('GitHub auth configured via STUDIOGRAPH_GITHUB_TOKEN environment variable');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (envGhToken) {
|
|
42
|
+
console.log('GitHub auth configured via GITHUB_TOKEN environment variable');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
36
45
|
const stored = loadToken();
|
|
37
46
|
if (stored) {
|
|
38
47
|
console.log(`Authenticated as ${stored.user.login} (${stored.user.name})`);
|
|
@@ -47,6 +56,13 @@ const authStatusCommand = new Command('status')
|
|
|
47
56
|
const authLogoutCommand = new Command('logout')
|
|
48
57
|
.description('Clear stored GitHub token')
|
|
49
58
|
.action(() => {
|
|
59
|
+
const envSgToken = process.env.STUDIOGRAPH_GITHUB_TOKEN;
|
|
60
|
+
const envGhToken = process.env.GITHUB_TOKEN;
|
|
61
|
+
if (envSgToken || envGhToken) {
|
|
62
|
+
const varName = envSgToken ? 'STUDIOGRAPH_GITHUB_TOKEN' : 'GITHUB_TOKEN';
|
|
63
|
+
console.log(`Token is set via ${varName} environment variable. Unset it to log out.`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
50
66
|
const stored = loadToken();
|
|
51
67
|
if (!stored) {
|
|
52
68
|
console.log('Not currently authenticated.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph clone command
|
|
3
|
+
*
|
|
4
|
+
* Clones an entire Studiograph workspace for admin setup on a new machine.
|
|
5
|
+
* Unlike `join` (which resolves identity and filters repos by role), `clone`
|
|
6
|
+
* pulls everything and walks through full setup: LLM provider + connectors.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export declare const cloneCommand: Command;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph clone command
|
|
3
|
+
*
|
|
4
|
+
* Clones an entire Studiograph workspace for admin setup on a new machine.
|
|
5
|
+
* Unlike `join` (which resolves identity and filters repos by role), `clone`
|
|
6
|
+
* pulls everything and walks through full setup: LLM provider + connectors.
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import { intro, confirm, outro, spinner, log } from '@clack/prompts';
|
|
10
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
11
|
+
import { join, resolve } from 'path';
|
|
12
|
+
import { Workspace } from '../../core/workspace.js';
|
|
13
|
+
import { gitClone } from '../../utils/git.js';
|
|
14
|
+
import { runPreflight } from '../../utils/preflight.js';
|
|
15
|
+
import { reindexWorkspace } from '../../services/vector-service.js';
|
|
16
|
+
import { promptGitHubAuthIfNeeded, promptLLMSetupIfNeeded, promptConnectorSetup, } from '../setup-wizard.js';
|
|
17
|
+
export const cloneCommand = new Command('clone')
|
|
18
|
+
.description('Clone an entire workspace with full admin setup (LLM + connectors)')
|
|
19
|
+
.argument('<workspace-url>', 'GitHub URL to the .studiograph config repo')
|
|
20
|
+
.argument('[directory]', 'Directory to create workspace in (default: derived from workspace name)')
|
|
21
|
+
.action(async (workspaceUrl, directory) => {
|
|
22
|
+
intro('Clone Studiograph Workspace');
|
|
23
|
+
const ready = runPreflight();
|
|
24
|
+
if (!ready) {
|
|
25
|
+
process.exit(1);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
// Step 1: Ensure GitHub auth
|
|
30
|
+
await promptGitHubAuthIfNeeded();
|
|
31
|
+
// Step 2: Clone config repo to temp location
|
|
32
|
+
const tempDir = join(process.cwd(), '.studiograph-temp-' + Date.now());
|
|
33
|
+
mkdirSync(tempDir, { recursive: true });
|
|
34
|
+
const cloneSpinner = spinner();
|
|
35
|
+
cloneSpinner.start('Fetching workspace configuration...');
|
|
36
|
+
try {
|
|
37
|
+
gitClone(workspaceUrl, join(tempDir, '.studiograph'));
|
|
38
|
+
cloneSpinner.stop('Configuration fetched');
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
cloneSpinner.stop('Failed');
|
|
42
|
+
const { rmSync } = await import('fs');
|
|
43
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
44
|
+
outro(`Could not clone ${workspaceUrl}. Check the URL and your access permissions.`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Load config to get workspace name
|
|
49
|
+
const tempWorkspace = new Workspace(tempDir);
|
|
50
|
+
const tempConfig = await tempWorkspace.loadConfig();
|
|
51
|
+
// Determine target directory
|
|
52
|
+
let targetDir;
|
|
53
|
+
if (directory === '.') {
|
|
54
|
+
targetDir = process.cwd();
|
|
55
|
+
}
|
|
56
|
+
else if (directory) {
|
|
57
|
+
targetDir = resolve(directory);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const slug = tempConfig.team_name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
61
|
+
targetDir = resolve(slug);
|
|
62
|
+
}
|
|
63
|
+
// Check for existing workspace
|
|
64
|
+
const studiographDir = join(targetDir, '.studiograph');
|
|
65
|
+
if (existsSync(studiographDir)) {
|
|
66
|
+
const { rmSync } = await import('fs');
|
|
67
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
68
|
+
outro(`A .studiograph directory already exists at ${targetDir}`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Create target directory if needed
|
|
73
|
+
if (!existsSync(targetDir)) {
|
|
74
|
+
mkdirSync(targetDir, { recursive: true });
|
|
75
|
+
log.info(`Created directory: ${targetDir}`);
|
|
76
|
+
}
|
|
77
|
+
else if (directory !== '.') {
|
|
78
|
+
const { readdirSync, rmSync } = await import('fs');
|
|
79
|
+
const files = readdirSync(targetDir);
|
|
80
|
+
if (files.length > 0) {
|
|
81
|
+
const proceed = await confirm({
|
|
82
|
+
message: `Directory ${targetDir} is not empty. Continue anyway?`,
|
|
83
|
+
initialValue: false,
|
|
84
|
+
});
|
|
85
|
+
if (!proceed || typeof proceed === 'symbol') {
|
|
86
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
87
|
+
outro('Cancelled');
|
|
88
|
+
process.exit(0);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Move config to final location
|
|
94
|
+
const { renameSync, rmSync } = await import('fs');
|
|
95
|
+
renameSync(join(tempDir, '.studiograph'), studiographDir);
|
|
96
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
97
|
+
// Step 3: Load workspace config
|
|
98
|
+
const workspace = new Workspace(targetDir);
|
|
99
|
+
const config = await workspace.loadConfig();
|
|
100
|
+
log.info(`Workspace: ${config.team_name}`);
|
|
101
|
+
log.info(`${config.repos.length} repositor${config.repos.length === 1 ? 'y' : 'ies'} in workspace`);
|
|
102
|
+
// Step 4: Clone ALL repos (admin — no role filtering)
|
|
103
|
+
const reposWithUrl = config.repos.filter(r => r.github_url);
|
|
104
|
+
const reposWithoutUrl = config.repos.filter(r => !r.github_url);
|
|
105
|
+
if (reposWithoutUrl.length > 0) {
|
|
106
|
+
log.warn(`${reposWithoutUrl.length} repo(s) have no GitHub URL: ${reposWithoutUrl.map(r => r.name).join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
let cloned = 0;
|
|
109
|
+
let failed = 0;
|
|
110
|
+
for (const repo of reposWithUrl) {
|
|
111
|
+
const repoPath = join(targetDir, repo.path);
|
|
112
|
+
if (existsSync(repoPath)) {
|
|
113
|
+
log.warn(`Skipping ${repo.name}: directory already exists`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const repoSpinner = spinner();
|
|
117
|
+
repoSpinner.start(`Cloning ${repo.name}...`);
|
|
118
|
+
try {
|
|
119
|
+
gitClone(repo.github_url, repoPath);
|
|
120
|
+
repoSpinner.stop(`Cloned ${repo.name}`);
|
|
121
|
+
cloned++;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
repoSpinner.stop(`Failed to clone ${repo.name}`);
|
|
125
|
+
log.warn(`Could not clone ${repo.name}: check your GitHub access permissions`);
|
|
126
|
+
failed++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Step 5: Index entities for search
|
|
130
|
+
if (cloned > 0) {
|
|
131
|
+
const indexSpinner = spinner();
|
|
132
|
+
indexSpinner.start('Building search index...');
|
|
133
|
+
try {
|
|
134
|
+
const indexedRepos = reposWithUrl
|
|
135
|
+
.filter(r => r.github_url && existsSync(join(targetDir, r.path)));
|
|
136
|
+
const total = await reindexWorkspace(targetDir, indexedRepos);
|
|
137
|
+
indexSpinner.stop(`Search index ready (${total} entities)`);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
indexSpinner.stop('Search index skipped (non-fatal)');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const parts = [];
|
|
144
|
+
if (cloned > 0)
|
|
145
|
+
parts.push(`${cloned} cloned`);
|
|
146
|
+
if (failed > 0)
|
|
147
|
+
parts.push(`${failed} failed`);
|
|
148
|
+
log.info(`Repos: ${parts.join(', ')}`);
|
|
149
|
+
// Step 6: LLM provider setup
|
|
150
|
+
await promptLLMSetupIfNeeded();
|
|
151
|
+
// Step 7: Connector setup for sync sources
|
|
152
|
+
await promptConnectorSetup(targetDir);
|
|
153
|
+
// Done
|
|
154
|
+
const nextStep = directory === '.' ? '' : `\n\nNext: cd ${targetDir} && studiograph start`;
|
|
155
|
+
if (failed > 0) {
|
|
156
|
+
outro(`Cloned ${config.team_name} with issues (${parts.join(', ')}). Check access permissions.${nextStep}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
outro(`Cloned ${config.team_name} workspace (${parts.join(', ')})${nextStep}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
outro(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/cli/commands/clone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph commit
|
|
3
|
+
*
|
|
4
|
+
* Git commit entity changes across workspace repos.
|
|
5
|
+
* Works after sync apply, enrich run, manual edits, or any other modification.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { Workspace } from '../../core/workspace.js';
|
|
9
|
+
import { commitRepos } from '../../services/sync/commit.js';
|
|
10
|
+
import { header, dimText, error as errorColor } from '../colors.js';
|
|
11
|
+
export const commitCommand = new Command('commit')
|
|
12
|
+
.description('Git commit entity changes across workspace repos')
|
|
13
|
+
.option('--message <prefix>', 'Commit message prefix (default: "update")')
|
|
14
|
+
.option('--config', 'Also commit .studiograph/ config repo changes')
|
|
15
|
+
.action(async (opts) => {
|
|
16
|
+
const workspace = new Workspace(process.cwd());
|
|
17
|
+
if (!workspace.isWorkspace()) {
|
|
18
|
+
console.error('Not in a Studiograph workspace.');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const progress = [];
|
|
23
|
+
await commitRepos(process.cwd(), (msg) => {
|
|
24
|
+
progress.push(msg);
|
|
25
|
+
if (msg.includes('Git commit:') || msg.includes('Git init:')) {
|
|
26
|
+
console.log(dimText(msg));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(msg);
|
|
30
|
+
}
|
|
31
|
+
}, { messagePrefix: opts.message ?? 'update', includeConfig: opts.config });
|
|
32
|
+
if (progress.some(m => m.includes('Git commit'))) {
|
|
33
|
+
console.log(`\n${header('Done.')} Changes committed.`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('No uncommitted changes in any repo.');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error(errorColor('Commit failed:'), err instanceof Error ? err.message : String(err));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../src/cli/commands/commit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;KACzE,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAA4C,EAAE,EAAE;IAC7D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,CACf,OAAO,CAAC,GAAG,EAAE,EACb,CAAC,GAAG,EAAE,EAAE;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EACD,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CACxE,CAAC;QAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -89,6 +89,12 @@ async function runInteractiveSetup(def) {
|
|
|
89
89
|
? { command: def.command, args: def.args }
|
|
90
90
|
: { url: def.url }),
|
|
91
91
|
};
|
|
92
|
+
if (def.type === 'oauth') {
|
|
93
|
+
// OAuth connectors need no manual credentials — auth happens on first connect
|
|
94
|
+
ConnectorManager.saveConfig(config);
|
|
95
|
+
outro(`${def.label} connector saved. You'll be prompted to authorize in your browser on next agent start.`);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
92
98
|
// Prompt for each credential field
|
|
93
99
|
for (const field of def.credentialFields) {
|
|
94
100
|
const value = await promptCredentialField(field);
|
|
@@ -144,9 +150,11 @@ connectorCommand
|
|
|
144
150
|
console.log(` ${''.padEnd(16)} ${cmd}`);
|
|
145
151
|
}
|
|
146
152
|
else {
|
|
147
|
-
const tokenDisplay = c.token?.startsWith('$') ? c.token : (c.token?.slice(0, 8) + '…');
|
|
148
153
|
console.log(` ${''.padEnd(16)} ${c.url}`);
|
|
149
|
-
|
|
154
|
+
if (c.token) {
|
|
155
|
+
const tokenDisplay = c.token.startsWith('$') ? c.token : (c.token.slice(0, 8) + '…');
|
|
156
|
+
console.log(` ${''.padEnd(16)} token: ${tokenDisplay}`);
|
|
157
|
+
}
|
|
150
158
|
}
|
|
151
159
|
if (c.description)
|
|
152
160
|
console.log(` ${''.padEnd(16)} ${c.description}`);
|