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.
Files changed (356) hide show
  1. package/README.md +2 -8
  2. package/dist/agent/orchestrator.d.ts +53 -0
  3. package/dist/agent/orchestrator.js +197 -12
  4. package/dist/agent/orchestrator.js.map +1 -1
  5. package/dist/agent/prompts/system.md +43 -11
  6. package/dist/agent/skill-loader.d.ts +48 -0
  7. package/dist/agent/skill-loader.js +166 -0
  8. package/dist/agent/skill-loader.js.map +1 -0
  9. package/dist/agent/skills/{bundled/enrich-entities.md → enrich-entities.md} +12 -0
  10. package/dist/agent/skills/entity-schema.md +502 -0
  11. package/dist/agent/skills/obsidian-source-setup.md +246 -0
  12. package/dist/agent/skills/sync-configuration.md +144 -0
  13. package/dist/agent/skills/sync-setup.md +84 -0
  14. package/dist/agent/tools/connector-tools.d.ts +37 -0
  15. package/dist/agent/tools/connector-tools.js +132 -0
  16. package/dist/agent/tools/connector-tools.js.map +1 -0
  17. package/dist/agent/tools/fs-tools.d.ts +39 -0
  18. package/dist/agent/tools/fs-tools.js +106 -0
  19. package/dist/agent/tools/fs-tools.js.map +1 -0
  20. package/dist/agent/tools/graph-tools.d.ts +33 -1
  21. package/dist/agent/tools/graph-tools.js +192 -44
  22. package/dist/agent/tools/graph-tools.js.map +1 -1
  23. package/dist/agent/tools/load-skill.d.ts +1 -1
  24. package/dist/agent/tools/load-skill.js +1 -1
  25. package/dist/agent/tools/load-skill.js.map +1 -1
  26. package/dist/agent/tools/ops-tools.d.ts +24 -0
  27. package/dist/agent/tools/ops-tools.js +542 -0
  28. package/dist/agent/tools/ops-tools.js.map +1 -0
  29. package/dist/agent/tools/sync-tools.d.ts +33 -0
  30. package/dist/agent/tools/sync-tools.js +947 -0
  31. package/dist/agent/tools/sync-tools.js.map +1 -0
  32. package/dist/auth/github.d.ts +11 -8
  33. package/dist/auth/github.js +56 -75
  34. package/dist/auth/github.js.map +1 -1
  35. package/dist/cli/colors.d.ts +54 -0
  36. package/dist/cli/colors.js +133 -0
  37. package/dist/cli/colors.js.map +1 -0
  38. package/dist/cli/commands/app.js +121 -18
  39. package/dist/cli/commands/app.js.map +1 -1
  40. package/dist/cli/commands/auth.d.ts +1 -1
  41. package/dist/cli/commands/auth.js +26 -10
  42. package/dist/cli/commands/auth.js.map +1 -1
  43. package/dist/cli/commands/clone.d.ts +9 -0
  44. package/dist/cli/commands/clone.js +167 -0
  45. package/dist/cli/commands/clone.js.map +1 -0
  46. package/dist/cli/commands/commit.d.ts +8 -0
  47. package/dist/cli/commands/commit.js +44 -0
  48. package/dist/cli/commands/commit.js.map +1 -0
  49. package/dist/cli/commands/connector.js +10 -2
  50. package/dist/cli/commands/connector.js.map +1 -1
  51. package/dist/cli/commands/deploy.d.ts +4 -6
  52. package/dist/cli/commands/deploy.js +292 -115
  53. package/dist/cli/commands/deploy.js.map +1 -1
  54. package/dist/cli/commands/enrich.d.ts +11 -0
  55. package/dist/cli/commands/enrich.js +135 -0
  56. package/dist/cli/commands/enrich.js.map +1 -0
  57. package/dist/cli/commands/graphrag.d.ts +12 -0
  58. package/dist/cli/commands/graphrag.js +122 -0
  59. package/dist/cli/commands/graphrag.js.map +1 -0
  60. package/dist/cli/commands/init.js +29 -196
  61. package/dist/cli/commands/init.js.map +1 -1
  62. package/dist/cli/commands/join.js +23 -3
  63. package/dist/cli/commands/join.js.map +1 -1
  64. package/dist/cli/commands/orphans.d.ts +8 -0
  65. package/dist/cli/commands/orphans.js +125 -0
  66. package/dist/cli/commands/orphans.js.map +1 -0
  67. package/dist/cli/commands/provision.js +11 -7
  68. package/dist/cli/commands/provision.js.map +1 -1
  69. package/dist/cli/commands/r2.js +8 -2
  70. package/dist/cli/commands/r2.js.map +1 -1
  71. package/dist/cli/commands/redeploy.d.ts +9 -0
  72. package/dist/cli/commands/redeploy.js +203 -0
  73. package/dist/cli/commands/redeploy.js.map +1 -0
  74. package/dist/cli/commands/reset.d.ts +12 -0
  75. package/dist/cli/commands/reset.js +137 -0
  76. package/dist/cli/commands/reset.js.map +1 -0
  77. package/dist/cli/commands/resolve.d.ts +8 -0
  78. package/dist/cli/commands/resolve.js +85 -0
  79. package/dist/cli/commands/resolve.js.map +1 -0
  80. package/dist/cli/commands/review.d.ts +19 -0
  81. package/dist/cli/commands/review.js +128 -0
  82. package/dist/cli/commands/review.js.map +1 -0
  83. package/dist/cli/commands/serve.js +55 -8
  84. package/dist/cli/commands/serve.js.map +1 -1
  85. package/dist/cli/commands/source.d.ts +16 -0
  86. package/dist/cli/commands/source.js +159 -0
  87. package/dist/cli/commands/source.js.map +1 -0
  88. package/dist/cli/commands/start.js +307 -55
  89. package/dist/cli/commands/start.js.map +1 -1
  90. package/dist/cli/commands/sync-entities.d.ts +13 -0
  91. package/dist/cli/commands/sync-entities.js +242 -0
  92. package/dist/cli/commands/sync-entities.js.map +1 -0
  93. package/dist/cli/commands/sync.js +81 -5
  94. package/dist/cli/commands/sync.js.map +1 -1
  95. package/dist/cli/index.js +45 -9
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/cli/scaffolding.d.ts +2 -1
  98. package/dist/cli/scaffolding.js +38 -23
  99. package/dist/cli/scaffolding.js.map +1 -1
  100. package/dist/cli/setup-wizard.d.ts +30 -0
  101. package/dist/cli/setup-wizard.js +244 -0
  102. package/dist/cli/setup-wizard.js.map +1 -0
  103. package/dist/cli/sync-review-interactive.d.ts +31 -0
  104. package/dist/cli/sync-review-interactive.js +393 -0
  105. package/dist/cli/sync-review-interactive.js.map +1 -0
  106. package/dist/cli/theme.d.ts +31 -0
  107. package/dist/cli/theme.js +116 -0
  108. package/dist/cli/theme.js.map +1 -0
  109. package/dist/core/graph.d.ts +40 -12
  110. package/dist/core/graph.js +344 -104
  111. package/dist/core/graph.js.map +1 -1
  112. package/dist/core/migration-runner.d.ts +4 -1
  113. package/dist/core/migration-runner.js +14 -3
  114. package/dist/core/migration-runner.js.map +1 -1
  115. package/dist/core/types.d.ts +2 -4
  116. package/dist/core/types.js +1 -2
  117. package/dist/core/types.js.map +1 -1
  118. package/dist/core/user-config.d.ts +12 -0
  119. package/dist/core/user-config.js.map +1 -1
  120. package/dist/core/workspace-manager.d.ts +6 -1
  121. package/dist/core/workspace-manager.js +29 -4
  122. package/dist/core/workspace-manager.js.map +1 -1
  123. package/dist/core/workspace.d.ts +13 -5
  124. package/dist/core/workspace.js +115 -33
  125. package/dist/core/workspace.js.map +1 -1
  126. package/dist/lib/lib/utils.d.ts +2 -0
  127. package/dist/lib/lib/utils.js +6 -0
  128. package/dist/lib/lib/utils.js.map +1 -0
  129. package/dist/mcp/connector-manager.d.ts +7 -3
  130. package/dist/mcp/connector-manager.js +61 -16
  131. package/dist/mcp/connector-manager.js.map +1 -1
  132. package/dist/mcp/connectors/asana.d.ts +2 -0
  133. package/dist/mcp/connectors/asana.js +20 -0
  134. package/dist/mcp/connectors/asana.js.map +1 -0
  135. package/dist/mcp/connectors/definitions.d.ts +3 -1
  136. package/dist/mcp/connectors/definitions.js +19 -127
  137. package/dist/mcp/connectors/definitions.js.map +1 -1
  138. package/dist/mcp/connectors/figma.d.ts +5 -0
  139. package/dist/mcp/connectors/figma.js +21 -0
  140. package/dist/mcp/connectors/figma.js.map +1 -0
  141. package/dist/mcp/connectors/gdrive.d.ts +2 -0
  142. package/dist/mcp/connectors/gdrive.js +20 -0
  143. package/dist/mcp/connectors/gdrive.js.map +1 -0
  144. package/dist/mcp/connectors/granola.d.ts +2 -0
  145. package/dist/mcp/connectors/granola.js +12 -0
  146. package/dist/mcp/connectors/granola.js.map +1 -0
  147. package/dist/mcp/connectors/linear.d.ts +2 -0
  148. package/dist/mcp/connectors/linear.js +19 -0
  149. package/dist/mcp/connectors/linear.js.map +1 -0
  150. package/dist/mcp/connectors/obsidian.d.ts +2 -0
  151. package/dist/mcp/connectors/obsidian.js +19 -0
  152. package/dist/mcp/connectors/obsidian.js.map +1 -0
  153. package/dist/mcp/connectors/pipedrive.d.ts +2 -0
  154. package/dist/mcp/connectors/pipedrive.js +20 -0
  155. package/dist/mcp/connectors/pipedrive.js.map +1 -0
  156. package/dist/mcp/connectors/slack.d.ts +2 -0
  157. package/dist/mcp/connectors/slack.js +21 -0
  158. package/dist/mcp/connectors/slack.js.map +1 -0
  159. package/dist/mcp/oauth-provider.d.ts +41 -0
  160. package/dist/mcp/oauth-provider.js +160 -0
  161. package/dist/mcp/oauth-provider.js.map +1 -0
  162. package/dist/server/index.js +97 -11
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/plugin-loader.d.ts +8 -0
  165. package/dist/server/plugin-loader.js +54 -2
  166. package/dist/server/plugin-loader.js.map +1 -1
  167. package/dist/server/routes/chat.d.ts +3 -2
  168. package/dist/server/routes/chat.js +67 -16
  169. package/dist/server/routes/chat.js.map +1 -1
  170. package/dist/server/routes/git-api.d.ts +9 -0
  171. package/dist/server/routes/git-api.js +82 -0
  172. package/dist/server/routes/git-api.js.map +1 -0
  173. package/dist/server/routes/graph-api.d.ts +2 -2
  174. package/dist/server/routes/graph-api.js +164 -3
  175. package/dist/server/routes/graph-api.js.map +1 -1
  176. package/dist/server/routes/workspace-api.d.ts +9 -0
  177. package/dist/server/routes/workspace-api.js +170 -0
  178. package/dist/server/routes/workspace-api.js.map +1 -0
  179. package/dist/services/assets/base.d.ts +2 -2
  180. package/dist/services/assets/base.js +4 -4
  181. package/dist/services/assets/base.js.map +1 -1
  182. package/dist/services/assets/index.d.ts +6 -6
  183. package/dist/services/assets/index.js +12 -12
  184. package/dist/services/assets/index.js.map +1 -1
  185. package/dist/services/git.d.ts +31 -0
  186. package/dist/services/git.js +92 -3
  187. package/dist/services/git.js.map +1 -1
  188. package/dist/services/github-provisioner.d.ts +8 -3
  189. package/dist/services/github-provisioner.js +35 -8
  190. package/dist/services/github-provisioner.js.map +1 -1
  191. package/dist/services/lint-service.js +8 -1
  192. package/dist/services/lint-service.js.map +1 -1
  193. package/dist/services/markdown.js +3 -3
  194. package/dist/services/markdown.js.map +1 -1
  195. package/dist/services/memory-service.d.ts +1 -1
  196. package/dist/services/memory-service.js +2 -3
  197. package/dist/services/memory-service.js.map +1 -1
  198. package/dist/services/orphan-service.d.ts +31 -0
  199. package/dist/services/orphan-service.js +100 -0
  200. package/dist/services/orphan-service.js.map +1 -0
  201. package/dist/services/sync/commit.d.ts +60 -0
  202. package/dist/services/sync/commit.js +370 -0
  203. package/dist/services/sync/commit.js.map +1 -0
  204. package/dist/services/sync/context-index.d.ts +69 -0
  205. package/dist/services/sync/context-index.js +280 -0
  206. package/dist/services/sync/context-index.js.map +1 -0
  207. package/dist/services/sync/derive.d.ts +34 -0
  208. package/dist/services/sync/derive.js +164 -0
  209. package/dist/services/sync/derive.js.map +1 -0
  210. package/dist/services/sync/enrichment-state.d.ts +31 -0
  211. package/dist/services/sync/enrichment-state.js +63 -0
  212. package/dist/services/sync/enrichment-state.js.map +1 -0
  213. package/dist/services/sync/enrichment.d.ts +25 -0
  214. package/dist/services/sync/enrichment.js +121 -0
  215. package/dist/services/sync/enrichment.js.map +1 -0
  216. package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
  217. package/dist/services/sync/frontmatter-extractor.js +273 -0
  218. package/dist/services/sync/frontmatter-extractor.js.map +1 -0
  219. package/dist/services/sync/graph-match-state.d.ts +33 -0
  220. package/dist/services/sync/graph-match-state.js +61 -0
  221. package/dist/services/sync/graph-match-state.js.map +1 -0
  222. package/dist/services/sync/graph-match.d.ts +53 -0
  223. package/dist/services/sync/graph-match.js +316 -0
  224. package/dist/services/sync/graph-match.js.map +1 -0
  225. package/dist/services/sync/graphrag-client.d.ts +43 -0
  226. package/dist/services/sync/graphrag-client.js +94 -0
  227. package/dist/services/sync/graphrag-client.js.map +1 -0
  228. package/dist/services/sync/graphrag-config.d.ts +16 -0
  229. package/dist/services/sync/graphrag-config.js +39 -0
  230. package/dist/services/sync/graphrag-config.js.map +1 -0
  231. package/dist/services/sync/graphrag-context.d.ts +14 -0
  232. package/dist/services/sync/graphrag-context.js +109 -0
  233. package/dist/services/sync/graphrag-context.js.map +1 -0
  234. package/dist/services/sync/graphrag-indexer.d.ts +30 -0
  235. package/dist/services/sync/graphrag-indexer.js +358 -0
  236. package/dist/services/sync/graphrag-indexer.js.map +1 -0
  237. package/dist/services/sync/llm.d.ts +32 -0
  238. package/dist/services/sync/llm.js +115 -0
  239. package/dist/services/sync/llm.js.map +1 -0
  240. package/dist/services/sync/mcp-client.d.ts +59 -0
  241. package/dist/services/sync/mcp-client.js +285 -0
  242. package/dist/services/sync/mcp-client.js.map +1 -0
  243. package/dist/services/sync/model-factory.d.ts +10 -0
  244. package/dist/services/sync/model-factory.js +24 -0
  245. package/dist/services/sync/model-factory.js.map +1 -0
  246. package/dist/services/sync/name-quality.d.ts +31 -0
  247. package/dist/services/sync/name-quality.js +60 -0
  248. package/dist/services/sync/name-quality.js.map +1 -0
  249. package/dist/services/sync/output-schemas.d.ts +92 -0
  250. package/dist/services/sync/output-schemas.js +43 -0
  251. package/dist/services/sync/output-schemas.js.map +1 -0
  252. package/dist/services/sync/prompts.d.ts +19 -0
  253. package/dist/services/sync/prompts.js +128 -0
  254. package/dist/services/sync/prompts.js.map +1 -0
  255. package/dist/services/sync/reconciler.d.ts +48 -0
  256. package/dist/services/sync/reconciler.js +295 -0
  257. package/dist/services/sync/reconciler.js.map +1 -0
  258. package/dist/services/sync/source-config.d.ts +45 -0
  259. package/dist/services/sync/source-config.js +208 -0
  260. package/dist/services/sync/source-config.js.map +1 -0
  261. package/dist/services/sync/source-definitions/asana.d.ts +15 -0
  262. package/dist/services/sync/source-definitions/asana.js +48 -0
  263. package/dist/services/sync/source-definitions/asana.js.map +1 -0
  264. package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
  265. package/dist/services/sync/source-definitions/definitions.js +26 -0
  266. package/dist/services/sync/source-definitions/definitions.js.map +1 -0
  267. package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
  268. package/dist/services/sync/source-definitions/gdrive.js +68 -0
  269. package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
  270. package/dist/services/sync/source-definitions/granola.d.ts +2 -0
  271. package/dist/services/sync/source-definitions/granola.js +28 -0
  272. package/dist/services/sync/source-definitions/granola.js.map +1 -0
  273. package/dist/services/sync/source-definitions/linear.d.ts +2 -0
  274. package/dist/services/sync/source-definitions/linear.js +60 -0
  275. package/dist/services/sync/source-definitions/linear.js.map +1 -0
  276. package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
  277. package/dist/services/sync/source-definitions/obsidian.js +55 -0
  278. package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
  279. package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
  280. package/dist/services/sync/source-definitions/pipedrive.js +52 -0
  281. package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
  282. package/dist/services/sync/staging.d.ts +53 -0
  283. package/dist/services/sync/staging.js +131 -0
  284. package/dist/services/sync/staging.js.map +1 -0
  285. package/dist/services/sync/structured-extractor.d.ts +49 -0
  286. package/dist/services/sync/structured-extractor.js +344 -0
  287. package/dist/services/sync/structured-extractor.js.map +1 -0
  288. package/dist/services/sync/sync-runner.d.ts +32 -0
  289. package/dist/services/sync/sync-runner.js +195 -0
  290. package/dist/services/sync/sync-runner.js.map +1 -0
  291. package/dist/services/sync/sync-state.d.ts +43 -0
  292. package/dist/services/sync/sync-state.js +154 -0
  293. package/dist/services/sync/sync-state.js.map +1 -0
  294. package/dist/services/sync/types.d.ts +203 -0
  295. package/dist/services/sync/types.js +8 -0
  296. package/dist/services/sync/types.js.map +1 -0
  297. package/dist/services/sync/unstructured-extractor.d.ts +29 -0
  298. package/dist/services/sync/unstructured-extractor.js +197 -0
  299. package/dist/services/sync/unstructured-extractor.js.map +1 -0
  300. package/dist/services/vector-service.d.ts +11 -0
  301. package/dist/services/vector-service.js +42 -0
  302. package/dist/services/vector-service.js.map +1 -1
  303. package/dist/utils/git.d.ts +31 -4
  304. package/dist/utils/git.js +65 -7
  305. package/dist/utils/git.js.map +1 -1
  306. package/dist/utils/merge-resolver.d.ts +60 -0
  307. package/dist/utils/merge-resolver.js +304 -0
  308. package/dist/utils/merge-resolver.js.map +1 -0
  309. package/dist/utils/preflight.d.ts +2 -1
  310. package/dist/utils/preflight.js +8 -1
  311. package/dist/utils/preflight.js.map +1 -1
  312. package/dist/utils/workspace-config.d.ts +8 -0
  313. package/dist/utils/workspace-config.js +22 -0
  314. package/dist/utils/workspace-config.js.map +1 -0
  315. package/dist/web/_app/env.js +1 -0
  316. package/dist/web/_app/immutable/assets/0.BwJV4fvl.css +1 -0
  317. package/dist/web/_app/immutable/assets/2.DRHi7ABa.css +1 -0
  318. package/dist/web/_app/immutable/assets/3.CnAQdPKU.css +1 -0
  319. package/dist/web/_app/immutable/assets/4.BG92MufE.css +1 -0
  320. package/dist/web/_app/immutable/assets/5.CfrQIPYs.css +1 -0
  321. package/dist/web/_app/immutable/assets/ChatPanel.BNzaCFTL.css +1 -0
  322. package/dist/web/_app/immutable/assets/editor.D6Rjo7RE.css +1 -0
  323. package/dist/web/_app/immutable/chunks/4QY4j-jX.js +1 -0
  324. package/dist/web/_app/immutable/chunks/B4G4uWkV.js +1 -0
  325. package/dist/web/_app/immutable/chunks/BB_5th5W.js +3383 -0
  326. package/dist/web/_app/immutable/chunks/CUzqHQY_.js +1 -0
  327. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +1 -0
  328. package/dist/web/_app/immutable/chunks/CksE5s8n.js +1 -0
  329. package/dist/web/_app/immutable/chunks/CqkleIqs.js +1 -0
  330. package/dist/web/_app/immutable/chunks/D0JBkEPE.js +86 -0
  331. package/dist/web/_app/immutable/chunks/D2K5GzLj.js +1 -0
  332. package/dist/web/_app/immutable/chunks/DEkoussQ.js +2 -0
  333. package/dist/web/_app/immutable/chunks/DW-KmHRi.js +1 -0
  334. package/dist/web/_app/immutable/chunks/DcCr4z9k.js +1 -0
  335. package/dist/web/_app/immutable/chunks/Dg2wWwJu.js +2 -0
  336. package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +18 -0
  337. package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +5 -0
  338. package/dist/web/_app/immutable/chunks/DtVH--hH.js +6 -0
  339. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +1 -0
  340. package/dist/web/_app/immutable/chunks/SBEriEQR.js +1 -0
  341. package/dist/web/_app/immutable/chunks/WSUKABI_.js +1 -0
  342. package/dist/web/_app/immutable/chunks/YTERt3Ul.js +6 -0
  343. package/dist/web/_app/immutable/chunks/m_R7HatS.js +1 -0
  344. package/dist/web/_app/immutable/chunks/vlmEnjfO.js +1 -0
  345. package/dist/web/_app/immutable/entry/app.B9pwpU_x.js +2 -0
  346. package/dist/web/_app/immutable/entry/start.CDuNCEco.js +1 -0
  347. package/dist/web/_app/immutable/nodes/0.YEQhw1us.js +1 -0
  348. package/dist/web/_app/immutable/nodes/1.CvmHhpRy.js +1 -0
  349. package/dist/web/_app/immutable/nodes/2.c5k1r7dq.js +1 -0
  350. package/dist/web/_app/immutable/nodes/3.B24tcdLK.js +1 -0
  351. package/dist/web/_app/immutable/nodes/4.kX2m5Pp9.js +16 -0
  352. package/dist/web/_app/immutable/nodes/5.DELt6wTD.js +2 -0
  353. package/dist/web/_app/version.json +1 -0
  354. package/dist/web/index.html +41 -0
  355. package/package.json +21 -7
  356. /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
@@ -3,13 +3,18 @@
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
- import { RepoType } from '../core/types.js';
11
11
  import { MarkdownService } from '../services/markdown.js';
12
- const REPO_NAME = 'example-project';
12
+ const ENTITY_REPO_MAP = {
13
+ client: 'clients',
14
+ person: 'people',
15
+ project: 'projects',
16
+ meeting: 'meetings',
17
+ };
13
18
  function buildEntities(now) {
14
19
  const shared = {
15
20
  created_by: 'studiograph',
@@ -20,6 +25,7 @@ function buildEntities(now) {
20
25
  };
21
26
  return [
22
27
  {
28
+ repo: 'clients',
23
29
  entityType: 'client',
24
30
  entityId: 'meridian-health',
25
31
  frontmatter: {
@@ -49,6 +55,7 @@ Regional healthcare network with 12 hospitals across the Midwest. Engaged us for
49
55
  `,
50
56
  },
51
57
  {
58
+ repo: 'people',
52
59
  entityType: 'person',
53
60
  entityId: 'sarah-chen',
54
61
  frontmatter: {
@@ -73,6 +80,7 @@ VP of Marketing at [[meridian-health]]. Primary stakeholder for the [[meridian-r
73
80
  `,
74
81
  },
75
82
  {
83
+ repo: 'projects',
76
84
  entityType: 'project',
77
85
  entityId: 'meridian-rebrand',
78
86
  frontmatter: {
@@ -108,6 +116,7 @@ Comprehensive brand identity refresh for [[meridian-health]] following their mer
108
116
  `,
109
117
  },
110
118
  {
119
+ repo: 'meetings',
111
120
  entityType: 'meeting',
112
121
  entityId: '2026-02-10-kickoff',
113
122
  frontmatter: {
@@ -148,6 +157,7 @@ Kickoff meeting for the [[meridian-rebrand]] project with [[sarah-chen]] and the
148
157
  `,
149
158
  },
150
159
  {
160
+ repo: 'projects',
151
161
  entityType: 'decision',
152
162
  entityId: 'dec-2026-001',
153
163
  frontmatter: {
@@ -241,40 +251,45 @@ studiograph get <entity-id> # View a specific entity
241
251
 
242
252
  ## Explore the Examples
243
253
 
244
- Check out the \`example-project/\` repo to see how entities connect:
254
+ Check out the example entities across your repos:
245
255
 
246
- - \`example-project/client/meridian-health.md\` — a client organization
247
- - \`example-project/person/sarah-chen.md\` — a contact linked to the client
248
- - \`example-project/project/meridian-rebrand.md\` — a project linking client, person, and decisions
249
- - \`example-project/meeting/2026-02-10-kickoff.md\` — a meeting with notes and action items
250
- - \`example-project/decision/dec-2026-001.md\` — a structured decision record
256
+ - \`clients/meridian-health/main.md\` — a client organization
257
+ - \`people/sarah-chen/main.md\` — a contact linked to the client
258
+ - \`projects/meridian-rebrand/main.md\` — a project linking client, person, and decisions
259
+ - \`projects/meridian-rebrand/decisions/dec-2026-001.md\` — a decision as sub-content of the project
260
+ - \`meetings/2026-02-10-kickoff/main.md\` — a meeting with notes and action items
251
261
 
252
- Notice how \`[[wikilinks]]\` connect everything into a navigable graph.
262
+ Notice how \`[[wikilinks]]\` connect everything into a navigable graph across repos.
253
263
 
254
264
  ## Cleaning Up Examples
255
265
 
256
- When you're ready to remove the example entities:
266
+ When you're ready to remove the example entities, search for the \`example\` tag and delete the folders:
257
267
 
258
268
  \`\`\`bash
259
- studiograph config repo remove example-project
260
- rm -rf example-project/
269
+ studiograph search --tag example # Find all example entities
270
+ rm -rf clients/meridian-health/
271
+ rm -rf people/sarah-chen/
272
+ rm -rf projects/meridian-rebrand/ # Also removes the decision sub-content
273
+ rm -rf meetings/2026-02-10-kickoff/
261
274
  \`\`\`
262
275
  `;
263
276
  }
264
277
  export async function scaffoldExampleEntities(workspace, teamName) {
265
- const repoPath = join(workspace.getWorkspacePath(), REPO_NAME);
266
- // Register the example-project repo
267
- await workspace.registerRepo({
268
- name: REPO_NAME,
269
- type: RepoType.PROJECT,
270
- description: 'Example entities demonstrating the knowledge graph pattern (safe to delete)',
271
- });
272
- // Write example entities
278
+ const workspacePath = workspace.getWorkspacePath();
273
279
  const md = new MarkdownService();
274
280
  const now = new Date().toISOString();
275
281
  const entities = buildEntities(now);
276
282
  for (const entity of entities) {
277
- const filePath = join(repoPath, entity.entityType, `${entity.entityId}.md`);
283
+ const repo = ENTITY_REPO_MAP[entity.entityType];
284
+ let filePath;
285
+ if (repo) {
286
+ // Standard entity — entity folder with main.md inside the repo
287
+ filePath = join(workspacePath, repo, entity.entityId, 'main.md');
288
+ }
289
+ else {
290
+ // Decision — sub-content inside the project entity folder
291
+ filePath = join(workspacePath, 'projects', 'meridian-rebrand', 'decisions', `${entity.entityId}.md`);
292
+ }
278
293
  md.writeFile(filePath, {
279
294
  frontmatter: entity.frontmatter,
280
295
  content: entity.content,
@@ -282,7 +297,7 @@ export async function scaffoldExampleEntities(workspace, teamName) {
282
297
  });
283
298
  }
284
299
  // Write STUDIOGRAPH.md to workspace root
285
- const guidePath = join(workspace.getWorkspacePath(), 'STUDIOGRAPH.md');
300
+ const guidePath = join(workspacePath, 'STUDIOGRAPH.md');
286
301
  writeFileSync(guidePath, buildOnboardingGuide(teamName), 'utf-8');
287
302
  }
288
303
  //# sourceMappingURL=scaffolding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../src/cli/scaffolding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../src/cli/scaffolding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared setup wizard helpers for join/clone commands.
3
+ *
4
+ * Reusable interactive prompts for:
5
+ * - GitHub PAT authentication
6
+ * - LLM provider configuration
7
+ * - Connector configuration for sync sources
8
+ */
9
+ /**
10
+ * Prompt for GitHub PAT if not authenticated.
11
+ * Returns the stored auth (existing or newly created).
12
+ */
13
+ export declare function promptGitHubAuthIfNeeded(): Promise<{
14
+ token: string;
15
+ user: {
16
+ login: string;
17
+ name: string;
18
+ email: string;
19
+ };
20
+ }>;
21
+ /**
22
+ * Prompt for LLM provider setup if not configured.
23
+ * Checks user config and env vars. Skips if already set.
24
+ */
25
+ export declare function promptLLMSetupIfNeeded(): Promise<void>;
26
+ /**
27
+ * Detect sync sources in the workspace and prompt for missing connectors.
28
+ * Only prompts for connectors that have a known definition.
29
+ */
30
+ export declare function promptConnectorSetup(workspacePath: string): Promise<number>;
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Shared setup wizard helpers for join/clone commands.
3
+ *
4
+ * Reusable interactive prompts for:
5
+ * - GitHub PAT authentication
6
+ * - LLM provider configuration
7
+ * - Connector configuration for sync sources
8
+ */
9
+ import { confirm, select, password, note, log, isCancel } from '@clack/prompts';
10
+ import { loadToken, promptForPAT, storeToken, getGitHubUser } from '../auth/github.js';
11
+ import { loadUserConfig, saveUserConfig } from '../core/user-config.js';
12
+ import { ConnectorManager } from '../mcp/connector-manager.js';
13
+ import { CONNECTOR_DEFINITIONS } from '../mcp/connectors/definitions.js';
14
+ import { SourceConfigManager } from '../services/sync/source-config.js';
15
+ import { text } from '@clack/prompts';
16
+ const MODEL_PROVIDERS = {
17
+ anthropic: {
18
+ name: 'Anthropic (Claude)',
19
+ models: [
20
+ { id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', hint: 'Recommended' },
21
+ { id: 'claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Most capable' },
22
+ { id: 'claude-3-5-haiku-20241022', name: 'Claude 3.5 Haiku', hint: 'Fastest' },
23
+ ],
24
+ envVar: 'ANTHROPIC_API_KEY',
25
+ },
26
+ openai: {
27
+ name: 'OpenAI (GPT)',
28
+ models: [
29
+ { id: 'gpt-4o', name: 'GPT-4o', hint: 'Recommended' },
30
+ { id: 'gpt-4o-mini', name: 'GPT-4o Mini', hint: 'Faster and cheaper' },
31
+ ],
32
+ envVar: 'OPENAI_API_KEY',
33
+ },
34
+ google: {
35
+ name: 'Google (Gemini)',
36
+ models: [
37
+ { id: 'gemini-2.0-flash-exp', name: 'Gemini 2.0 Flash', hint: 'Latest' },
38
+ { id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', hint: 'Most capable' },
39
+ ],
40
+ envVar: 'GOOGLE_API_KEY',
41
+ },
42
+ xai: {
43
+ name: 'xAI (Grok)',
44
+ models: [
45
+ { id: 'grok-2-1212', name: 'Grok 2', hint: 'Latest' },
46
+ ],
47
+ envVar: 'XAI_API_KEY',
48
+ },
49
+ groq: {
50
+ name: 'Groq (Fast Inference)',
51
+ models: [
52
+ { id: 'llama-3.3-70b-versatile', name: 'Llama 3.3 70B', hint: 'Very fast' },
53
+ ],
54
+ envVar: 'GROQ_API_KEY',
55
+ },
56
+ openrouter: {
57
+ name: 'OpenRouter',
58
+ models: [
59
+ { id: 'anthropic/claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Via OpenRouter' },
60
+ { id: 'openai/gpt-4o', name: 'GPT-4o', hint: 'Via OpenRouter' },
61
+ ],
62
+ envVar: 'OPENROUTER_API_KEY',
63
+ },
64
+ };
65
+ /**
66
+ * Prompt for GitHub PAT if not authenticated.
67
+ * Returns the stored auth (existing or newly created).
68
+ */
69
+ export async function promptGitHubAuthIfNeeded() {
70
+ const stored = loadToken();
71
+ if (stored) {
72
+ if (stored.user.login === '_env') {
73
+ log.success('GitHub auth configured (via environment variable)');
74
+ }
75
+ else {
76
+ log.success(`GitHub auth configured (${stored.user.login})`);
77
+ }
78
+ return stored;
79
+ }
80
+ log.info('No GitHub token found. Let\'s set one up.');
81
+ const token = await promptForPAT();
82
+ const user = await getGitHubUser(token);
83
+ storeToken(token, user);
84
+ log.success(`Authenticated as ${user.login}`);
85
+ return { token, user };
86
+ }
87
+ /**
88
+ * Prompt for LLM provider setup if not configured.
89
+ * Checks user config and env vars. Skips if already set.
90
+ */
91
+ export async function promptLLMSetupIfNeeded() {
92
+ const userConfig = loadUserConfig();
93
+ // Check if already configured via user config
94
+ if (userConfig.api_key) {
95
+ const providerName = userConfig.model_provider
96
+ ? MODEL_PROVIDERS[userConfig.model_provider]?.name ?? userConfig.model_provider
97
+ : 'configured';
98
+ log.success(`AI model configured (${providerName})`);
99
+ return;
100
+ }
101
+ // Check common env vars
102
+ const envProviders = [
103
+ { key: 'ANTHROPIC_API_KEY', name: 'Anthropic' },
104
+ { key: 'OPENAI_API_KEY', name: 'OpenAI' },
105
+ { key: 'GOOGLE_API_KEY', name: 'Google' },
106
+ { key: 'XAI_API_KEY', name: 'xAI' },
107
+ { key: 'GROQ_API_KEY', name: 'Groq' },
108
+ { key: 'OPENROUTER_API_KEY', name: 'OpenRouter' },
109
+ ];
110
+ for (const { key, name } of envProviders) {
111
+ if (process.env[key]) {
112
+ log.success(`AI model configured (${name} via ${key})`);
113
+ return;
114
+ }
115
+ }
116
+ // Prompt for setup
117
+ const wantSetup = await confirm({
118
+ message: 'Set up an AI model? (required for `studiograph start`)',
119
+ initialValue: true,
120
+ });
121
+ if (!wantSetup || typeof wantSetup === 'symbol') {
122
+ log.info('Skipped. Run `studiograph config` later to set up.');
123
+ return;
124
+ }
125
+ const providerChoice = await select({
126
+ message: 'Select AI provider:',
127
+ options: Object.entries(MODEL_PROVIDERS).map(([key, provider]) => ({
128
+ value: key,
129
+ label: provider.name,
130
+ })),
131
+ });
132
+ if (typeof providerChoice === 'symbol') {
133
+ log.info('Skipped. Run `studiograph config` later to set up.');
134
+ return;
135
+ }
136
+ const provider = MODEL_PROVIDERS[providerChoice];
137
+ const modelChoice = await select({
138
+ message: `Select ${provider.name} model:`,
139
+ options: provider.models.map(m => ({
140
+ value: m.id,
141
+ label: m.name,
142
+ hint: m.hint,
143
+ })),
144
+ });
145
+ if (typeof modelChoice === 'symbol') {
146
+ log.info('Skipped. Run `studiograph config` later to set up.');
147
+ return;
148
+ }
149
+ const apiKeyInput = await password({
150
+ message: `Enter your ${provider.name} API key:`,
151
+ validate: (value) => {
152
+ if (!value || value.trim().length < 10)
153
+ return 'API key seems too short';
154
+ },
155
+ });
156
+ if (isCancel(apiKeyInput)) {
157
+ log.info('Skipped. Run `studiograph config` later to set up.');
158
+ return;
159
+ }
160
+ userConfig.model_provider = providerChoice;
161
+ userConfig.model_id = modelChoice;
162
+ userConfig.api_key = apiKeyInput.trim();
163
+ saveUserConfig(userConfig);
164
+ log.success(`AI model configured: ${provider.name} — ${modelChoice}`);
165
+ }
166
+ /**
167
+ * Detect sync sources in the workspace and prompt for missing connectors.
168
+ * Only prompts for connectors that have a known definition.
169
+ */
170
+ export async function promptConnectorSetup(workspacePath) {
171
+ const sourceManager = new SourceConfigManager(workspacePath);
172
+ const sources = sourceManager.getAll();
173
+ if (sources.length === 0) {
174
+ return 0;
175
+ }
176
+ // Find unique connector names referenced by enabled sources
177
+ const referencedConnectors = [...new Set(sources.filter(s => s.enabled).map(s => s.connector))];
178
+ const existingConnectors = ConnectorManager.loadConfigs();
179
+ const existingNames = new Set(existingConnectors.map(c => c.name));
180
+ const missingConnectors = referencedConnectors.filter(name => !existingNames.has(name));
181
+ if (missingConnectors.length === 0) {
182
+ log.success(`All ${referencedConnectors.length} sync connector(s) already configured`);
183
+ return 0;
184
+ }
185
+ log.info(`This workspace syncs from ${sources.length} source(s). ${missingConnectors.length} connector(s) need setup.`);
186
+ let configured = 0;
187
+ for (const connectorName of missingConnectors) {
188
+ const def = CONNECTOR_DEFINITIONS[connectorName];
189
+ if (!def) {
190
+ log.warn(`Connector "${connectorName}" has no built-in definition. Set up manually: studiograph connector add ${connectorName}`);
191
+ continue;
192
+ }
193
+ const wantSetup = await confirm({
194
+ message: `Set up ${def.label} connector?`,
195
+ initialValue: true,
196
+ });
197
+ if (!wantSetup || typeof wantSetup === 'symbol') {
198
+ log.info(`Skipped. Run \`studiograph connector add ${connectorName}\` later.`);
199
+ continue;
200
+ }
201
+ if (def.docsUrl) {
202
+ note(def.docsUrl, `${def.label} docs`);
203
+ }
204
+ const config = {
205
+ name: def.name,
206
+ description: def.description,
207
+ type: def.type,
208
+ ...(def.type === 'stdio'
209
+ ? { command: def.command, args: def.args }
210
+ : { url: def.url }),
211
+ };
212
+ let cancelled = false;
213
+ for (const field of def.credentialFields) {
214
+ const promptOpts = {
215
+ message: field.label,
216
+ placeholder: field.placeholder,
217
+ validate: field.required
218
+ ? (v) => (!v?.trim() ? `${field.label} is required` : undefined)
219
+ : undefined,
220
+ };
221
+ const value = field.secret ? await password(promptOpts) : await text(promptOpts);
222
+ if (isCancel(value)) {
223
+ log.info(`Skipped. Run \`studiograph connector add ${connectorName}\` later.`);
224
+ cancelled = true;
225
+ break;
226
+ }
227
+ const key = field.key;
228
+ if (key.startsWith('env.')) {
229
+ const envKey = key.slice(4);
230
+ config.env = { ...(config.env ?? {}), [envKey]: value };
231
+ }
232
+ else {
233
+ config[key] = value;
234
+ }
235
+ }
236
+ if (!cancelled) {
237
+ ConnectorManager.saveConfig(config);
238
+ log.success(`${def.label} connector saved`);
239
+ configured++;
240
+ }
241
+ }
242
+ return configured;
243
+ }
244
+ //# sourceMappingURL=setup-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Interactive review UI for `studiograph sync review`.
3
+ *
4
+ * Uses @clack/prompts for file selection and action menus,
5
+ * and sync-colors for colored diff output.
6
+ */
7
+ export interface ChangedFile {
8
+ path: string;
9
+ relativePath: string;
10
+ repoName: string;
11
+ repoPath: string;
12
+ entityType: string;
13
+ entityId: string;
14
+ status: 'A' | 'M' | 'D';
15
+ }
16
+ export interface ReviewContext {
17
+ workspacePath: string;
18
+ repos: Array<{
19
+ name: string;
20
+ path: string;
21
+ }>;
22
+ committed: boolean;
23
+ }
24
+ export type DiffMode = 'uncommitted' | 'committed' | 'none';
25
+ export declare function detectDiffMode(workspacePath: string, repos: Array<{
26
+ name: string;
27
+ path: string;
28
+ }>): DiffMode;
29
+ export declare function collectChangedFiles(ctx: ReviewContext): ChangedFile[];
30
+ export declare function getFileDiff(file: ChangedFile, committed: boolean): string;
31
+ export declare function runInteractiveReview(ctx: ReviewContext): Promise<void>;