studiograph 1.1.2 → 1.2.0-beta.1

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 (349) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +301 -10
  3. package/dist/agent/orchestrator.d.ts +17 -9
  4. package/dist/agent/orchestrator.js +142 -97
  5. package/dist/agent/orchestrator.js.map +1 -1
  6. package/dist/agent/prompts/system.md +186 -0
  7. package/dist/agent/skill-loader.d.ts +48 -0
  8. package/dist/agent/skill-loader.js +166 -0
  9. package/dist/agent/skill-loader.js.map +1 -0
  10. package/dist/agent/skills/enrich-entities.md +136 -0
  11. package/dist/agent/skills/entity-schema.md +502 -0
  12. package/dist/agent/skills/gather-context.md +46 -0
  13. package/dist/agent/skills/obsidian-source-setup.md +246 -0
  14. package/dist/agent/skills/skill-loader.d.ts +48 -0
  15. package/dist/agent/skills/skill-loader.js +166 -0
  16. package/dist/agent/skills/skill-loader.js.map +1 -0
  17. package/dist/agent/skills/sync-configuration.md +144 -0
  18. package/dist/agent/skills/sync-setup.md +68 -0
  19. package/dist/agent/tools/connector-tools.d.ts +37 -0
  20. package/dist/agent/tools/connector-tools.js +132 -0
  21. package/dist/agent/tools/connector-tools.js.map +1 -0
  22. package/dist/agent/tools/fs-tools.d.ts +39 -0
  23. package/dist/agent/tools/fs-tools.js +106 -0
  24. package/dist/agent/tools/fs-tools.js.map +1 -0
  25. package/dist/agent/tools/graph-tools.d.ts +30 -2
  26. package/dist/agent/tools/graph-tools.js +154 -37
  27. package/dist/agent/tools/graph-tools.js.map +1 -1
  28. package/dist/agent/tools/load-skill.d.ts +42 -0
  29. package/dist/agent/tools/load-skill.js +45 -0
  30. package/dist/agent/tools/load-skill.js.map +1 -0
  31. package/dist/agent/tools/sync-tools.d.ts +25 -0
  32. package/dist/agent/tools/sync-tools.js +691 -0
  33. package/dist/agent/tools/sync-tools.js.map +1 -0
  34. package/dist/agent/tools/tool-loader.d.ts +25 -0
  35. package/dist/agent/tools/tool-loader.js +73 -0
  36. package/dist/agent/tools/tool-loader.js.map +1 -0
  37. package/dist/auth/github.d.ts +11 -8
  38. package/dist/auth/github.js +56 -75
  39. package/dist/auth/github.js.map +1 -1
  40. package/dist/cli/colors.d.ts +54 -0
  41. package/dist/cli/colors.js +133 -0
  42. package/dist/cli/colors.js.map +1 -0
  43. package/dist/cli/commands/app.d.ts +7 -0
  44. package/dist/cli/commands/app.js +167 -0
  45. package/dist/cli/commands/app.js.map +1 -0
  46. package/dist/cli/commands/auth.d.ts +1 -1
  47. package/dist/cli/commands/auth.js +26 -10
  48. package/dist/cli/commands/auth.js.map +1 -1
  49. package/dist/cli/commands/clone.d.ts +9 -0
  50. package/dist/cli/commands/clone.js +167 -0
  51. package/dist/cli/commands/clone.js.map +1 -0
  52. package/dist/cli/commands/commit.d.ts +8 -0
  53. package/dist/cli/commands/commit.js +43 -0
  54. package/dist/cli/commands/commit.js.map +1 -0
  55. package/dist/cli/commands/config.d.ts +13 -0
  56. package/dist/cli/commands/config.js +276 -0
  57. package/dist/cli/commands/config.js.map +1 -0
  58. package/dist/cli/commands/connector.d.ts +33 -0
  59. package/dist/cli/commands/connector.js +178 -0
  60. package/dist/cli/commands/connector.js.map +1 -0
  61. package/dist/cli/commands/deploy.d.ts +11 -0
  62. package/dist/cli/commands/deploy.js +153 -0
  63. package/dist/cli/commands/deploy.js.map +1 -0
  64. package/dist/cli/commands/enrich.d.ts +11 -0
  65. package/dist/cli/commands/enrich.js +135 -0
  66. package/dist/cli/commands/enrich.js.map +1 -0
  67. package/dist/cli/commands/graphrag.d.ts +12 -0
  68. package/dist/cli/commands/graphrag.js +122 -0
  69. package/dist/cli/commands/graphrag.js.map +1 -0
  70. package/dist/cli/commands/index.d.ts +15 -0
  71. package/dist/cli/commands/index.js +117 -0
  72. package/dist/cli/commands/index.js.map +1 -0
  73. package/dist/cli/commands/init.js +110 -210
  74. package/dist/cli/commands/init.js.map +1 -1
  75. package/dist/cli/commands/join.js +89 -24
  76. package/dist/cli/commands/join.js.map +1 -1
  77. package/dist/cli/commands/lint.d.ts +8 -0
  78. package/dist/cli/commands/lint.js +70 -0
  79. package/dist/cli/commands/lint.js.map +1 -0
  80. package/dist/cli/commands/mcp.d.ts +27 -0
  81. package/dist/cli/commands/mcp.js +56 -0
  82. package/dist/cli/commands/mcp.js.map +1 -0
  83. package/dist/cli/commands/orphans.d.ts +8 -0
  84. package/dist/cli/commands/orphans.js +125 -0
  85. package/dist/cli/commands/orphans.js.map +1 -0
  86. package/dist/cli/commands/provision.d.ts +8 -0
  87. package/dist/cli/commands/provision.js +116 -0
  88. package/dist/cli/commands/provision.js.map +1 -0
  89. package/dist/cli/commands/r2.d.ts +2 -0
  90. package/dist/cli/commands/r2.js +87 -6
  91. package/dist/cli/commands/r2.js.map +1 -1
  92. package/dist/cli/commands/reset.d.ts +12 -0
  93. package/dist/cli/commands/reset.js +137 -0
  94. package/dist/cli/commands/reset.js.map +1 -0
  95. package/dist/cli/commands/review.d.ts +19 -0
  96. package/dist/cli/commands/review.js +128 -0
  97. package/dist/cli/commands/review.js.map +1 -0
  98. package/dist/cli/commands/serve.js +47 -2
  99. package/dist/cli/commands/serve.js.map +1 -1
  100. package/dist/cli/commands/source.d.ts +16 -0
  101. package/dist/cli/commands/source.js +159 -0
  102. package/dist/cli/commands/source.js.map +1 -0
  103. package/dist/cli/commands/start.js +472 -103
  104. package/dist/cli/commands/start.js.map +1 -1
  105. package/dist/cli/commands/sync-entities.d.ts +13 -0
  106. package/dist/cli/commands/sync-entities.js +242 -0
  107. package/dist/cli/commands/sync-entities.js.map +1 -0
  108. package/dist/cli/commands/sync.js +40 -9
  109. package/dist/cli/commands/sync.js.map +1 -1
  110. package/dist/cli/commands/update.d.ts +8 -0
  111. package/dist/cli/commands/update.js +155 -0
  112. package/dist/cli/commands/update.js.map +1 -0
  113. package/dist/cli/index.js +114 -3
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/scaffolding.d.ts +10 -0
  116. package/dist/cli/scaffolding.js +302 -0
  117. package/dist/cli/scaffolding.js.map +1 -0
  118. package/dist/cli/setup-wizard.d.ts +30 -0
  119. package/dist/cli/setup-wizard.js +244 -0
  120. package/dist/cli/setup-wizard.js.map +1 -0
  121. package/dist/cli/sync-review-interactive.d.ts +31 -0
  122. package/dist/cli/sync-review-interactive.js +393 -0
  123. package/dist/cli/sync-review-interactive.js.map +1 -0
  124. package/dist/cli/theme.d.ts +31 -0
  125. package/dist/cli/theme.js +116 -0
  126. package/dist/cli/theme.js.map +1 -0
  127. package/dist/core/graph.d.ts +16 -9
  128. package/dist/core/graph.js +263 -145
  129. package/dist/core/graph.js.map +1 -1
  130. package/dist/core/migration-runner.d.ts +42 -0
  131. package/dist/core/migration-runner.js +232 -0
  132. package/dist/core/migration-runner.js.map +1 -0
  133. package/dist/core/migration-types.d.ts +101 -0
  134. package/dist/core/migration-types.js +21 -0
  135. package/dist/core/migration-types.js.map +1 -0
  136. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +2 -0
  137. package/dist/core/migrations/20260219-formalize-memory-location.js +35 -0
  138. package/dist/core/migrations/20260219-formalize-memory-location.js.map +1 -0
  139. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +12 -0
  140. package/dist/core/migrations/20260220-add-workspace-metadata.js +65 -0
  141. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +1 -0
  142. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +11 -0
  143. package/dist/core/migrations/20260220-add-workspace-readme.js +82 -0
  144. package/dist/core/migrations/20260220-add-workspace-readme.js.map +1 -0
  145. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +9 -0
  146. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +64 -0
  147. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +1 -0
  148. package/dist/core/migrations/index.d.ts +11 -0
  149. package/dist/core/migrations/index.js +23 -0
  150. package/dist/core/migrations/index.js.map +1 -0
  151. package/dist/core/schema-registry.d.ts +36 -0
  152. package/dist/core/schema-registry.js +161 -0
  153. package/dist/core/schema-registry.js.map +1 -0
  154. package/dist/core/types.d.ts +242 -3
  155. package/dist/core/types.js +21 -2
  156. package/dist/core/types.js.map +1 -1
  157. package/dist/core/user-config.d.ts +16 -0
  158. package/dist/core/user-config.js +8 -0
  159. package/dist/core/user-config.js.map +1 -1
  160. package/dist/core/validation.d.ts +973 -32
  161. package/dist/core/validation.js +163 -4
  162. package/dist/core/validation.js.map +1 -1
  163. package/dist/core/workspace-manager.d.ts +26 -2
  164. package/dist/core/workspace-manager.js +113 -15
  165. package/dist/core/workspace-manager.js.map +1 -1
  166. package/dist/core/workspace.d.ts +20 -11
  167. package/dist/core/workspace.js +123 -34
  168. package/dist/core/workspace.js.map +1 -1
  169. package/dist/mcp/connector-manager.d.ts +65 -0
  170. package/dist/mcp/connector-manager.js +223 -0
  171. package/dist/mcp/connector-manager.js.map +1 -0
  172. package/dist/mcp/connectors/asana.d.ts +2 -0
  173. package/dist/mcp/connectors/asana.js +20 -0
  174. package/dist/mcp/connectors/asana.js.map +1 -0
  175. package/dist/mcp/connectors/definitions.d.ts +45 -0
  176. package/dist/mcp/connectors/definitions.js +32 -0
  177. package/dist/mcp/connectors/definitions.js.map +1 -0
  178. package/dist/mcp/connectors/figma.d.ts +5 -0
  179. package/dist/mcp/connectors/figma.js +21 -0
  180. package/dist/mcp/connectors/figma.js.map +1 -0
  181. package/dist/mcp/connectors/gdrive.d.ts +2 -0
  182. package/dist/mcp/connectors/gdrive.js +20 -0
  183. package/dist/mcp/connectors/gdrive.js.map +1 -0
  184. package/dist/mcp/connectors/granola.d.ts +2 -0
  185. package/dist/mcp/connectors/granola.js +12 -0
  186. package/dist/mcp/connectors/granola.js.map +1 -0
  187. package/dist/mcp/connectors/linear.d.ts +2 -0
  188. package/dist/mcp/connectors/linear.js +19 -0
  189. package/dist/mcp/connectors/linear.js.map +1 -0
  190. package/dist/mcp/connectors/obsidian.d.ts +2 -0
  191. package/dist/mcp/connectors/obsidian.js +19 -0
  192. package/dist/mcp/connectors/obsidian.js.map +1 -0
  193. package/dist/mcp/connectors/pipedrive.d.ts +2 -0
  194. package/dist/mcp/connectors/pipedrive.js +20 -0
  195. package/dist/mcp/connectors/pipedrive.js.map +1 -0
  196. package/dist/mcp/connectors/slack.d.ts +2 -0
  197. package/dist/mcp/connectors/slack.js +21 -0
  198. package/dist/mcp/connectors/slack.js.map +1 -0
  199. package/dist/mcp/oauth-provider.d.ts +41 -0
  200. package/dist/mcp/oauth-provider.js +160 -0
  201. package/dist/mcp/oauth-provider.js.map +1 -0
  202. package/dist/mcp/server.d.ts +11 -0
  203. package/dist/mcp/server.js +28 -0
  204. package/dist/mcp/server.js.map +1 -0
  205. package/dist/mcp/tools.d.ts +14 -0
  206. package/dist/mcp/tools.js +172 -0
  207. package/dist/mcp/tools.js.map +1 -0
  208. package/dist/server/index.js +17 -4
  209. package/dist/server/index.js.map +1 -1
  210. package/dist/server/plugin-loader.d.ts +15 -0
  211. package/dist/server/plugin-loader.js +68 -2
  212. package/dist/server/plugin-loader.js.map +1 -1
  213. package/dist/server/routes/graph-api.js +1 -1
  214. package/dist/server/routes/graph-api.js.map +1 -1
  215. package/dist/server/routes/webhook.js +33 -0
  216. package/dist/server/routes/webhook.js.map +1 -1
  217. package/dist/services/github-provisioner.d.ts +9 -3
  218. package/dist/services/github-provisioner.js +46 -8
  219. package/dist/services/github-provisioner.js.map +1 -1
  220. package/dist/services/lint-service.d.ts +27 -0
  221. package/dist/services/lint-service.js +83 -0
  222. package/dist/services/lint-service.js.map +1 -0
  223. package/dist/services/markdown.d.ts +9 -0
  224. package/dist/services/markdown.js +26 -5
  225. package/dist/services/markdown.js.map +1 -1
  226. package/dist/services/memory-service.d.ts +1 -2
  227. package/dist/services/memory-service.js +5 -4
  228. package/dist/services/memory-service.js.map +1 -1
  229. package/dist/services/orphan-service.d.ts +31 -0
  230. package/dist/services/orphan-service.js +100 -0
  231. package/dist/services/orphan-service.js.map +1 -0
  232. package/dist/services/sync/commit.d.ts +58 -0
  233. package/dist/services/sync/commit.js +350 -0
  234. package/dist/services/sync/commit.js.map +1 -0
  235. package/dist/services/sync/context-index.d.ts +69 -0
  236. package/dist/services/sync/context-index.js +280 -0
  237. package/dist/services/sync/context-index.js.map +1 -0
  238. package/dist/services/sync/derive.d.ts +34 -0
  239. package/dist/services/sync/derive.js +164 -0
  240. package/dist/services/sync/derive.js.map +1 -0
  241. package/dist/services/sync/enrichment-state.d.ts +31 -0
  242. package/dist/services/sync/enrichment-state.js +63 -0
  243. package/dist/services/sync/enrichment-state.js.map +1 -0
  244. package/dist/services/sync/enrichment.d.ts +25 -0
  245. package/dist/services/sync/enrichment.js +121 -0
  246. package/dist/services/sync/enrichment.js.map +1 -0
  247. package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
  248. package/dist/services/sync/frontmatter-extractor.js +273 -0
  249. package/dist/services/sync/frontmatter-extractor.js.map +1 -0
  250. package/dist/services/sync/graph-match-state.d.ts +33 -0
  251. package/dist/services/sync/graph-match-state.js +61 -0
  252. package/dist/services/sync/graph-match-state.js.map +1 -0
  253. package/dist/services/sync/graph-match.d.ts +53 -0
  254. package/dist/services/sync/graph-match.js +316 -0
  255. package/dist/services/sync/graph-match.js.map +1 -0
  256. package/dist/services/sync/graphrag-client.d.ts +43 -0
  257. package/dist/services/sync/graphrag-client.js +94 -0
  258. package/dist/services/sync/graphrag-client.js.map +1 -0
  259. package/dist/services/sync/graphrag-config.d.ts +16 -0
  260. package/dist/services/sync/graphrag-config.js +39 -0
  261. package/dist/services/sync/graphrag-config.js.map +1 -0
  262. package/dist/services/sync/graphrag-context.d.ts +14 -0
  263. package/dist/services/sync/graphrag-context.js +109 -0
  264. package/dist/services/sync/graphrag-context.js.map +1 -0
  265. package/dist/services/sync/graphrag-indexer.d.ts +30 -0
  266. package/dist/services/sync/graphrag-indexer.js +358 -0
  267. package/dist/services/sync/graphrag-indexer.js.map +1 -0
  268. package/dist/services/sync/llm.d.ts +32 -0
  269. package/dist/services/sync/llm.js +115 -0
  270. package/dist/services/sync/llm.js.map +1 -0
  271. package/dist/services/sync/mcp-client.d.ts +59 -0
  272. package/dist/services/sync/mcp-client.js +285 -0
  273. package/dist/services/sync/mcp-client.js.map +1 -0
  274. package/dist/services/sync/model-factory.d.ts +10 -0
  275. package/dist/services/sync/model-factory.js +24 -0
  276. package/dist/services/sync/model-factory.js.map +1 -0
  277. package/dist/services/sync/name-quality.d.ts +31 -0
  278. package/dist/services/sync/name-quality.js +60 -0
  279. package/dist/services/sync/name-quality.js.map +1 -0
  280. package/dist/services/sync/output-schemas.d.ts +92 -0
  281. package/dist/services/sync/output-schemas.js +43 -0
  282. package/dist/services/sync/output-schemas.js.map +1 -0
  283. package/dist/services/sync/prompts.d.ts +19 -0
  284. package/dist/services/sync/prompts.js +128 -0
  285. package/dist/services/sync/prompts.js.map +1 -0
  286. package/dist/services/sync/reconciler.d.ts +48 -0
  287. package/dist/services/sync/reconciler.js +295 -0
  288. package/dist/services/sync/reconciler.js.map +1 -0
  289. package/dist/services/sync/source-config.d.ts +45 -0
  290. package/dist/services/sync/source-config.js +208 -0
  291. package/dist/services/sync/source-config.js.map +1 -0
  292. package/dist/services/sync/source-definitions/asana.d.ts +15 -0
  293. package/dist/services/sync/source-definitions/asana.js +48 -0
  294. package/dist/services/sync/source-definitions/asana.js.map +1 -0
  295. package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
  296. package/dist/services/sync/source-definitions/definitions.js +26 -0
  297. package/dist/services/sync/source-definitions/definitions.js.map +1 -0
  298. package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
  299. package/dist/services/sync/source-definitions/gdrive.js +68 -0
  300. package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
  301. package/dist/services/sync/source-definitions/granola.d.ts +2 -0
  302. package/dist/services/sync/source-definitions/granola.js +28 -0
  303. package/dist/services/sync/source-definitions/granola.js.map +1 -0
  304. package/dist/services/sync/source-definitions/linear.d.ts +2 -0
  305. package/dist/services/sync/source-definitions/linear.js +60 -0
  306. package/dist/services/sync/source-definitions/linear.js.map +1 -0
  307. package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
  308. package/dist/services/sync/source-definitions/obsidian.js +55 -0
  309. package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
  310. package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
  311. package/dist/services/sync/source-definitions/pipedrive.js +52 -0
  312. package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
  313. package/dist/services/sync/staging.d.ts +53 -0
  314. package/dist/services/sync/staging.js +131 -0
  315. package/dist/services/sync/staging.js.map +1 -0
  316. package/dist/services/sync/structured-extractor.d.ts +49 -0
  317. package/dist/services/sync/structured-extractor.js +344 -0
  318. package/dist/services/sync/structured-extractor.js.map +1 -0
  319. package/dist/services/sync/sync-runner.d.ts +32 -0
  320. package/dist/services/sync/sync-runner.js +195 -0
  321. package/dist/services/sync/sync-runner.js.map +1 -0
  322. package/dist/services/sync/sync-state.d.ts +43 -0
  323. package/dist/services/sync/sync-state.js +154 -0
  324. package/dist/services/sync/sync-state.js.map +1 -0
  325. package/dist/services/sync/types.d.ts +203 -0
  326. package/dist/services/sync/types.js +8 -0
  327. package/dist/services/sync/types.js.map +1 -0
  328. package/dist/services/sync/unstructured-extractor.d.ts +29 -0
  329. package/dist/services/sync/unstructured-extractor.js +197 -0
  330. package/dist/services/sync/unstructured-extractor.js.map +1 -0
  331. package/dist/services/vector-service.d.ts +88 -0
  332. package/dist/services/vector-service.js +322 -0
  333. package/dist/services/vector-service.js.map +1 -0
  334. package/dist/utils/git.d.ts +26 -4
  335. package/dist/utils/git.js +55 -7
  336. package/dist/utils/git.js.map +1 -1
  337. package/dist/utils/merge-resolver.d.ts +34 -0
  338. package/dist/utils/merge-resolver.js +201 -0
  339. package/dist/utils/merge-resolver.js.map +1 -0
  340. package/dist/utils/preflight.d.ts +2 -1
  341. package/dist/utils/preflight.js +8 -1
  342. package/dist/utils/preflight.js.map +1 -1
  343. package/dist/utils/version-checker.d.ts +23 -0
  344. package/dist/utils/version-checker.js +116 -0
  345. package/dist/utils/version-checker.js.map +1 -0
  346. package/dist/utils/workspace-config.d.ts +8 -0
  347. package/dist/utils/workspace-config.js +22 -0
  348. package/dist/utils/workspace-config.js.map +1 -0
  349. package/package.json +24 -11
@@ -0,0 +1,276 @@
1
+ /**
2
+ * studiograph config command
3
+ *
4
+ * Interactive configuration management for ~/.studiograph/user.json.
5
+ *
6
+ * Usage:
7
+ * studiograph config # Interactive menu
8
+ * studiograph config set model_provider anthropic # Direct set
9
+ * studiograph config get model_provider # Direct get
10
+ * studiograph config list # Show all config
11
+ */
12
+ import { Command } from 'commander';
13
+ import { loadUserConfig, saveUserConfig } from '../../core/user-config.js';
14
+ import { intro, outro, select, text, spinner } from '@clack/prompts';
15
+ const ALLOWED_KEYS = new Set([
16
+ 'model_provider',
17
+ 'model_id',
18
+ 'api_key',
19
+ 'voyage_api_key',
20
+ 'vector_db_path',
21
+ ]);
22
+ const VALID_PROVIDERS = new Set([
23
+ 'anthropic',
24
+ 'openai',
25
+ 'google',
26
+ 'xai',
27
+ 'groq',
28
+ 'openrouter',
29
+ ]);
30
+ // Model provider configurations (same as start.ts)
31
+ const MODEL_PROVIDERS = {
32
+ anthropic: {
33
+ name: 'Anthropic (Claude)',
34
+ models: [
35
+ { id: 'claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Most capable' },
36
+ { id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', hint: 'Recommended' },
37
+ { id: 'claude-3-7-sonnet-20250219', name: 'Claude 3.7 Sonnet', hint: 'Faster' },
38
+ { id: 'claude-3-5-haiku-20241022', name: 'Claude 3.5 Haiku', hint: 'Fastest' },
39
+ ],
40
+ envVar: 'ANTHROPIC_API_KEY',
41
+ },
42
+ openai: {
43
+ name: 'OpenAI (GPT)',
44
+ models: [
45
+ { id: 'gpt-4o', name: 'GPT-4o', hint: 'Recommended' },
46
+ { id: 'gpt-4o-mini', name: 'GPT-4o Mini', hint: 'Faster and cheaper' },
47
+ { id: 'gpt-4-turbo', name: 'GPT-4 Turbo', hint: 'Previous generation' },
48
+ ],
49
+ envVar: 'OPENAI_API_KEY',
50
+ },
51
+ google: {
52
+ name: 'Google (Gemini)',
53
+ models: [
54
+ { id: 'gemini-2.0-flash-exp', name: 'Gemini 2.0 Flash', hint: 'Latest experimental' },
55
+ { id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', hint: 'Most capable' },
56
+ { id: 'gemini-1.5-flash', name: 'Gemini 1.5 Flash', hint: 'Fast' },
57
+ ],
58
+ envVar: 'GOOGLE_API_KEY',
59
+ },
60
+ xai: {
61
+ name: 'xAI (Grok)',
62
+ models: [
63
+ { id: 'grok-2-1212', name: 'Grok 2', hint: 'Latest' },
64
+ { id: 'grok-2-vision-1212', name: 'Grok 2 Vision', hint: 'With vision' },
65
+ ],
66
+ envVar: 'XAI_API_KEY',
67
+ },
68
+ groq: {
69
+ name: 'Groq (Fast Inference)',
70
+ models: [
71
+ { id: 'llama-3.3-70b-versatile', name: 'Llama 3.3 70B', hint: 'Very fast' },
72
+ { id: 'mixtral-8x7b-32768', name: 'Mixtral 8x7B', hint: 'Fast and capable' },
73
+ ],
74
+ envVar: 'GROQ_API_KEY',
75
+ },
76
+ openrouter: {
77
+ name: 'OpenRouter',
78
+ models: [
79
+ { id: 'anthropic/claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Via OpenRouter' },
80
+ { id: 'openai/gpt-4o', name: 'GPT-4o', hint: 'Via OpenRouter' },
81
+ { id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B', hint: 'Open source' },
82
+ ],
83
+ envVar: 'OPENROUTER_API_KEY',
84
+ },
85
+ };
86
+ export const configCommand = new Command('config')
87
+ .description('Manage user configuration (interactive or direct commands)')
88
+ .action(async () => {
89
+ // Interactive mode when called without subcommands
90
+ await runInteractiveConfig();
91
+ });
92
+ configCommand
93
+ .command('set <key> <value>')
94
+ .description('Set a config value in ~/.studiograph/user.json')
95
+ .action((key, value) => {
96
+ if (!ALLOWED_KEYS.has(key)) {
97
+ console.error(`❌ Unknown config key: ${key}`);
98
+ console.error(` Supported keys: ${[...ALLOWED_KEYS].join(', ')}`);
99
+ process.exit(1);
100
+ }
101
+ if (key === 'model_provider' && !VALID_PROVIDERS.has(value)) {
102
+ console.error(`❌ Invalid provider: ${value}`);
103
+ console.error(` Supported providers: ${[...VALID_PROVIDERS].join(', ')}`);
104
+ process.exit(1);
105
+ }
106
+ const config = loadUserConfig();
107
+ config[key] = value;
108
+ saveUserConfig(config);
109
+ console.log(`✓ Set ${key}`);
110
+ });
111
+ configCommand
112
+ .command('get <key>')
113
+ .description('Get a config value from ~/.studiograph/user.json')
114
+ .action((key) => {
115
+ const config = loadUserConfig();
116
+ const value = config[key];
117
+ if (value === undefined) {
118
+ console.log(`(not set)`);
119
+ }
120
+ else {
121
+ console.log(value);
122
+ }
123
+ });
124
+ configCommand
125
+ .command('list')
126
+ .description('Show all user configuration')
127
+ .action(() => {
128
+ const config = loadUserConfig();
129
+ console.log('\nUser Configuration (~/.studiograph/user.json):\n');
130
+ if (config.model_provider) {
131
+ console.log(`Model Provider: ${config.model_provider}`);
132
+ }
133
+ if (config.model_id) {
134
+ console.log(`Model ID: ${config.model_id}`);
135
+ }
136
+ if (config.api_key) {
137
+ console.log(`API Key: ${config.api_key.slice(0, 12)}...`);
138
+ }
139
+ if (config.voyage_api_key) {
140
+ console.log(`Voyage API Key: ${config.voyage_api_key.slice(0, 12)}...`);
141
+ }
142
+ if (config.vector_db_path) {
143
+ console.log(`Vector DB Path: ${config.vector_db_path}`);
144
+ }
145
+ if (!config.model_provider && !config.voyage_api_key && !config.vector_db_path) {
146
+ console.log('(no configuration set)');
147
+ }
148
+ console.log('');
149
+ });
150
+ async function runInteractiveConfig() {
151
+ intro('Configuration');
152
+ const config = loadUserConfig();
153
+ const category = await select({
154
+ message: 'What would you like to configure?',
155
+ options: [
156
+ { value: 'model', label: 'AI Model & API Key', hint: 'Change provider, model, or credentials' },
157
+ { value: 'vector', label: 'Vector Search', hint: 'Voyage API key and vector DB path' },
158
+ { value: 'view', label: 'View Current Config', hint: 'Show all settings' },
159
+ { value: 'exit', label: 'Exit', hint: '' },
160
+ ],
161
+ });
162
+ if (typeof category === 'symbol' || category === 'exit') {
163
+ outro('Cancelled');
164
+ return;
165
+ }
166
+ if (category === 'view') {
167
+ console.log('\n');
168
+ if (config.model_provider) {
169
+ const provider = MODEL_PROVIDERS[config.model_provider];
170
+ console.log(`AI Model: ${provider?.name || config.model_provider}`);
171
+ console.log(`Model ID: ${config.model_id || '(not set)'}`);
172
+ console.log(`API Key: ${config.api_key ? config.api_key.slice(0, 12) + '...' : '(not set)'}`);
173
+ }
174
+ else {
175
+ console.log(`AI Model: (not set)`);
176
+ }
177
+ console.log('');
178
+ console.log(`Voyage API Key: ${config.voyage_api_key ? config.voyage_api_key.slice(0, 12) + '...' : '(not set)'}`);
179
+ console.log(`Vector DB Path: ${config.vector_db_path || '(not set)'}`);
180
+ console.log('');
181
+ outro('Configuration displayed');
182
+ return;
183
+ }
184
+ if (category === 'model') {
185
+ // Model configuration
186
+ const providerChoice = await select({
187
+ message: 'Select AI provider:',
188
+ options: Object.entries(MODEL_PROVIDERS).map(([key, provider]) => ({
189
+ value: key,
190
+ label: provider.name,
191
+ })),
192
+ });
193
+ if (typeof providerChoice === 'symbol') {
194
+ outro('Cancelled');
195
+ return;
196
+ }
197
+ const provider = MODEL_PROVIDERS[providerChoice];
198
+ const modelChoice = await select({
199
+ message: `Select ${provider.name} model:`,
200
+ options: provider.models.map(m => ({
201
+ value: m.id,
202
+ label: m.name,
203
+ hint: m.hint,
204
+ })),
205
+ });
206
+ if (typeof modelChoice === 'symbol') {
207
+ outro('Cancelled');
208
+ return;
209
+ }
210
+ const apiKeyInput = await text({
211
+ message: `Enter your ${provider.name} API key:`,
212
+ placeholder: `${provider.envVar}`,
213
+ validate: (value) => {
214
+ if (!value || value.length < 10)
215
+ return 'API key seems too short';
216
+ },
217
+ });
218
+ if (typeof apiKeyInput !== 'string') {
219
+ outro('Cancelled');
220
+ return;
221
+ }
222
+ const s = spinner();
223
+ s.start('Saving configuration...');
224
+ config.model_provider = providerChoice;
225
+ config.model_id = modelChoice;
226
+ config.api_key = apiKeyInput;
227
+ saveUserConfig(config);
228
+ s.stop('Configuration saved ✓');
229
+ outro(`Model configured: ${provider.name} - ${modelChoice}`);
230
+ }
231
+ else if (category === 'vector') {
232
+ // Vector search configuration
233
+ const vectorOption = await select({
234
+ message: 'Configure:',
235
+ options: [
236
+ { value: 'voyage_key', label: 'Voyage API Key', hint: 'For semantic search embeddings' },
237
+ { value: 'vector_path', label: 'Vector DB Path', hint: 'LanceDB storage location' },
238
+ ],
239
+ });
240
+ if (typeof vectorOption === 'symbol') {
241
+ outro('Cancelled');
242
+ return;
243
+ }
244
+ if (vectorOption === 'voyage_key') {
245
+ const keyInput = await text({
246
+ message: 'Enter your Voyage AI API key:',
247
+ placeholder: 'pa-...',
248
+ validate: (value) => {
249
+ if (!value || value.length < 10)
250
+ return 'API key seems too short';
251
+ },
252
+ });
253
+ if (typeof keyInput !== 'string') {
254
+ outro('Cancelled');
255
+ return;
256
+ }
257
+ config.voyage_api_key = keyInput;
258
+ saveUserConfig(config);
259
+ outro('Voyage API key saved ✓');
260
+ }
261
+ else {
262
+ const pathInput = await text({
263
+ message: 'Enter vector DB path:',
264
+ placeholder: '~/.studiograph/vector',
265
+ });
266
+ if (typeof pathInput !== 'string') {
267
+ outro('Cancelled');
268
+ return;
269
+ }
270
+ config.vector_db_path = pathInput;
271
+ saveUserConfig(config);
272
+ outro('Vector DB path saved ✓');
273
+ }
274
+ }
275
+ }
276
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * studiograph connector
3
+ *
4
+ * Manage MCP connectors — integrations with third-party MCP servers
5
+ * (Linear, Granola, Slack, etc.) that the Studiograph agent can query on demand.
6
+ *
7
+ * Connector configs are stored at ~/.studiograph/connectors/<name>.json
8
+ * (mode 0600 — tokens never leave your machine).
9
+ *
10
+ * Interactive setup (known connectors):
11
+ * studiograph connector add slack
12
+ * studiograph connector add linear
13
+ *
14
+ * Manual setup (any connector):
15
+ * studiograph connector add linear \
16
+ * --url https://mcp.linear.app/mcp \
17
+ * --token lin_api_xxxx \
18
+ * --description "Linear project management"
19
+ *
20
+ * studiograph connector add granola \
21
+ * --command node \
22
+ * --args "/Users/you/mcp-servers/granola-mcp/dist/index.js" \
23
+ * --description "Granola meeting notes"
24
+ *
25
+ * studiograph connector list
26
+ * studiograph connector remove linear
27
+ *
28
+ * Once added, the connector's tools are available to the agent as
29
+ * <name>__<tool> (e.g. "linear__search_issues", "granola__search_granola_notes").
30
+ * The agent discovers them automatically on the next `studiograph start`.
31
+ */
32
+ import { Command } from 'commander';
33
+ export declare const connectorCommand: Command;
@@ -0,0 +1,178 @@
1
+ /**
2
+ * studiograph connector
3
+ *
4
+ * Manage MCP connectors — integrations with third-party MCP servers
5
+ * (Linear, Granola, Slack, etc.) that the Studiograph agent can query on demand.
6
+ *
7
+ * Connector configs are stored at ~/.studiograph/connectors/<name>.json
8
+ * (mode 0600 — tokens never leave your machine).
9
+ *
10
+ * Interactive setup (known connectors):
11
+ * studiograph connector add slack
12
+ * studiograph connector add linear
13
+ *
14
+ * Manual setup (any connector):
15
+ * studiograph connector add linear \
16
+ * --url https://mcp.linear.app/mcp \
17
+ * --token lin_api_xxxx \
18
+ * --description "Linear project management"
19
+ *
20
+ * studiograph connector add granola \
21
+ * --command node \
22
+ * --args "/Users/you/mcp-servers/granola-mcp/dist/index.js" \
23
+ * --description "Granola meeting notes"
24
+ *
25
+ * studiograph connector list
26
+ * studiograph connector remove linear
27
+ *
28
+ * Once added, the connector's tools are available to the agent as
29
+ * <name>__<tool> (e.g. "linear__search_issues", "granola__search_granola_notes").
30
+ * The agent discovers them automatically on the next `studiograph start`.
31
+ */
32
+ import { Command } from 'commander';
33
+ import { intro, outro, text, password, note, isCancel, cancel } from '@clack/prompts';
34
+ import { ConnectorManager, CONNECTORS_DIR } from '../../mcp/connector-manager.js';
35
+ import { CONNECTOR_DEFINITIONS } from '../../mcp/connectors/definitions.js';
36
+ export const connectorCommand = new Command('connector')
37
+ .description('Manage MCP connectors for third-party service integrations');
38
+ // ── connector add ─────────────────────────────────────────────────────────────
39
+ connectorCommand
40
+ .command('add <name>')
41
+ .description('Add or update a connector')
42
+ .option('--url <url>', 'Remote MCP server URL (http type)')
43
+ .option('--token <token>', 'Bearer token or $ENV_VAR reference (http type)')
44
+ .option('--command <command>', 'Executable to spawn (stdio type, e.g. "node")')
45
+ .option('--args <args...>', 'Arguments for the command (stdio type)')
46
+ .option('--description <desc>', 'Human-readable description')
47
+ .action(async (name, opts) => {
48
+ if (!/^[a-z0-9_-]+$/.test(name)) {
49
+ console.error(`Connector name must be lowercase alphanumeric/dash/underscore. Got: "${name}"`);
50
+ process.exit(1);
51
+ }
52
+ const isHttp = !!(opts.url && opts.token);
53
+ const isStdio = !!opts.command;
54
+ // If no transport flags provided, check for a known connector definition
55
+ if (!isHttp && !isStdio) {
56
+ const def = CONNECTOR_DEFINITIONS[name];
57
+ if (def) {
58
+ await runInteractiveSetup(def);
59
+ return;
60
+ }
61
+ console.error(`Connector "${name}" is not a known connector.`);
62
+ console.error('Provide either --url + --token (http) or --command (stdio).');
63
+ console.error(`Known connectors: ${Object.keys(CONNECTOR_DEFINITIONS).join(', ')}`);
64
+ process.exit(1);
65
+ }
66
+ const config = {
67
+ name,
68
+ description: opts.description,
69
+ ...(isStdio
70
+ ? { type: 'stdio', command: opts.command, args: opts.args }
71
+ : { type: 'http', url: opts.url, token: opts.token }),
72
+ };
73
+ ConnectorManager.saveConfig(config);
74
+ console.log(`Connector "${name}" saved to ${CONNECTORS_DIR}/${name}.json`);
75
+ console.log(`Tools will be available as ${name}__<tool_name> on the next agent start.`);
76
+ });
77
+ // ── Interactive setup ─────────────────────────────────────────────────────────
78
+ async function runInteractiveSetup(def) {
79
+ intro(`Setting up ${def.label} connector`);
80
+ if (def.docsUrl) {
81
+ note(def.docsUrl, 'Docs');
82
+ }
83
+ // Start with the transport defaults from the definition
84
+ const config = {
85
+ name: def.name,
86
+ description: def.description,
87
+ type: def.type,
88
+ ...(def.type === 'stdio'
89
+ ? { command: def.command, args: def.args }
90
+ : { url: def.url }),
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
+ }
98
+ // Prompt for each credential field
99
+ for (const field of def.credentialFields) {
100
+ const value = await promptCredentialField(field);
101
+ if (isCancel(value)) {
102
+ cancel('Setup cancelled.');
103
+ process.exit(0);
104
+ }
105
+ applyCredential(config, field.key, value);
106
+ }
107
+ ConnectorManager.saveConfig(config);
108
+ outro(`${def.label} connector saved. Tools available as ${def.name}__<tool_name> on next agent start.`);
109
+ }
110
+ /** Prompt for a single credential field using @clack/prompts. */
111
+ async function promptCredentialField(field) {
112
+ const promptOpts = {
113
+ message: field.label,
114
+ placeholder: field.placeholder,
115
+ hint: field.description,
116
+ validate: field.required
117
+ ? (v) => (!v?.trim() ? `${field.label} is required` : undefined)
118
+ : undefined,
119
+ };
120
+ return field.secret ? password(promptOpts) : text(promptOpts);
121
+ }
122
+ /** Write a credential value into the connector config at the given dot-path. */
123
+ function applyCredential(config, key, value) {
124
+ if (key.startsWith('env.')) {
125
+ const envKey = key.slice(4);
126
+ config.env = { ...(config.env ?? {}), [envKey]: value };
127
+ }
128
+ else {
129
+ config[key] = value;
130
+ }
131
+ }
132
+ // ── connector list ────────────────────────────────────────────────────────────
133
+ connectorCommand
134
+ .command('list')
135
+ .description('List configured connectors')
136
+ .action(() => {
137
+ const configs = ConnectorManager.loadConfigs();
138
+ if (configs.length === 0) {
139
+ console.log('No connectors configured.');
140
+ console.log(`Known connectors: ${Object.keys(CONNECTOR_DEFINITIONS).join(', ')}`);
141
+ console.log('Run: studiograph connector add <name>');
142
+ return;
143
+ }
144
+ console.log(`Configured connectors (${configs.length}):\n`);
145
+ for (const c of configs) {
146
+ const type = c.type ?? (c.command ? 'stdio' : 'http');
147
+ console.log(` ${c.name.padEnd(16)} [${type}]`);
148
+ if (type === 'stdio') {
149
+ const cmd = [c.command, ...(c.args ?? [])].join(' ');
150
+ console.log(` ${''.padEnd(16)} ${cmd}`);
151
+ }
152
+ else {
153
+ console.log(` ${''.padEnd(16)} ${c.url}`);
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
+ }
158
+ }
159
+ if (c.description)
160
+ console.log(` ${''.padEnd(16)} ${c.description}`);
161
+ console.log();
162
+ }
163
+ });
164
+ // ── connector remove ──────────────────────────────────────────────────────────
165
+ connectorCommand
166
+ .command('remove <name>')
167
+ .description('Remove a connector')
168
+ .action((name) => {
169
+ const removed = ConnectorManager.removeConfig(name);
170
+ if (removed) {
171
+ console.log(`Connector "${name}" removed.`);
172
+ }
173
+ else {
174
+ console.error(`No connector named "${name}" found.`);
175
+ process.exit(1);
176
+ }
177
+ });
178
+ //# sourceMappingURL=connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/cli/commands/connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * studiograph deploy — guided deployment wizard
3
+ *
4
+ * Currently supports Railway. Additional targets (Render, Fly) can be added
5
+ * as subcommands following the same pattern.
6
+ *
7
+ * Usage:
8
+ * studiograph deploy railway
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare const deployCommand: Command;