studiograph 1.1.3 → 1.2.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +2 -8
  2. package/dist/agent/orchestrator.js +56 -11
  3. package/dist/agent/orchestrator.js.map +1 -1
  4. package/dist/agent/prompts/system.md +28 -10
  5. package/dist/agent/skill-loader.d.ts +48 -0
  6. package/dist/agent/skill-loader.js +166 -0
  7. package/dist/agent/skill-loader.js.map +1 -0
  8. package/dist/agent/skills/{bundled/enrich-entities.md → enrich-entities.md} +12 -0
  9. package/dist/agent/skills/entity-schema.md +502 -0
  10. package/dist/agent/skills/obsidian-source-setup.md +246 -0
  11. package/dist/agent/skills/sync-configuration.md +144 -0
  12. package/dist/agent/skills/sync-setup.md +68 -0
  13. package/dist/agent/tools/connector-tools.d.ts +37 -0
  14. package/dist/agent/tools/connector-tools.js +132 -0
  15. package/dist/agent/tools/connector-tools.js.map +1 -0
  16. package/dist/agent/tools/fs-tools.d.ts +39 -0
  17. package/dist/agent/tools/fs-tools.js +106 -0
  18. package/dist/agent/tools/fs-tools.js.map +1 -0
  19. package/dist/agent/tools/graph-tools.d.ts +11 -1
  20. package/dist/agent/tools/graph-tools.js +90 -29
  21. package/dist/agent/tools/graph-tools.js.map +1 -1
  22. package/dist/agent/tools/load-skill.d.ts +1 -1
  23. package/dist/agent/tools/load-skill.js +1 -1
  24. package/dist/agent/tools/load-skill.js.map +1 -1
  25. package/dist/agent/tools/sync-tools.d.ts +25 -0
  26. package/dist/agent/tools/sync-tools.js +691 -0
  27. package/dist/agent/tools/sync-tools.js.map +1 -0
  28. package/dist/auth/github.d.ts +11 -8
  29. package/dist/auth/github.js +56 -75
  30. package/dist/auth/github.js.map +1 -1
  31. package/dist/cli/colors.d.ts +54 -0
  32. package/dist/cli/colors.js +133 -0
  33. package/dist/cli/colors.js.map +1 -0
  34. package/dist/cli/commands/auth.d.ts +1 -1
  35. package/dist/cli/commands/auth.js +26 -10
  36. package/dist/cli/commands/auth.js.map +1 -1
  37. package/dist/cli/commands/clone.d.ts +9 -0
  38. package/dist/cli/commands/clone.js +167 -0
  39. package/dist/cli/commands/clone.js.map +1 -0
  40. package/dist/cli/commands/commit.d.ts +8 -0
  41. package/dist/cli/commands/commit.js +43 -0
  42. package/dist/cli/commands/commit.js.map +1 -0
  43. package/dist/cli/commands/connector.js +10 -2
  44. package/dist/cli/commands/connector.js.map +1 -1
  45. package/dist/cli/commands/deploy.d.ts +4 -6
  46. package/dist/cli/commands/deploy.js +262 -112
  47. package/dist/cli/commands/deploy.js.map +1 -1
  48. package/dist/cli/commands/enrich.d.ts +11 -0
  49. package/dist/cli/commands/enrich.js +135 -0
  50. package/dist/cli/commands/enrich.js.map +1 -0
  51. package/dist/cli/commands/graphrag.d.ts +12 -0
  52. package/dist/cli/commands/graphrag.js +122 -0
  53. package/dist/cli/commands/graphrag.js.map +1 -0
  54. package/dist/cli/commands/init.js +21 -203
  55. package/dist/cli/commands/init.js.map +1 -1
  56. package/dist/cli/commands/join.js +23 -3
  57. package/dist/cli/commands/join.js.map +1 -1
  58. package/dist/cli/commands/orphans.d.ts +8 -0
  59. package/dist/cli/commands/orphans.js +125 -0
  60. package/dist/cli/commands/orphans.js.map +1 -0
  61. package/dist/cli/commands/provision.js +11 -7
  62. package/dist/cli/commands/provision.js.map +1 -1
  63. package/dist/cli/commands/r2.js +8 -2
  64. package/dist/cli/commands/r2.js.map +1 -1
  65. package/dist/cli/commands/reset.d.ts +12 -0
  66. package/dist/cli/commands/reset.js +137 -0
  67. package/dist/cli/commands/reset.js.map +1 -0
  68. package/dist/cli/commands/review.d.ts +19 -0
  69. package/dist/cli/commands/review.js +128 -0
  70. package/dist/cli/commands/review.js.map +1 -0
  71. package/dist/cli/commands/source.d.ts +16 -0
  72. package/dist/cli/commands/source.js +159 -0
  73. package/dist/cli/commands/source.js.map +1 -0
  74. package/dist/cli/commands/start.js +285 -55
  75. package/dist/cli/commands/start.js.map +1 -1
  76. package/dist/cli/commands/sync-entities.d.ts +13 -0
  77. package/dist/cli/commands/sync-entities.js +242 -0
  78. package/dist/cli/commands/sync-entities.js.map +1 -0
  79. package/dist/cli/commands/sync.js +36 -5
  80. package/dist/cli/commands/sync.js.map +1 -1
  81. package/dist/cli/index.js +31 -0
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/cli/scaffolding.d.ts +2 -1
  84. package/dist/cli/scaffolding.js +36 -22
  85. package/dist/cli/scaffolding.js.map +1 -1
  86. package/dist/cli/setup-wizard.d.ts +30 -0
  87. package/dist/cli/setup-wizard.js +244 -0
  88. package/dist/cli/setup-wizard.js.map +1 -0
  89. package/dist/cli/sync-review-interactive.d.ts +31 -0
  90. package/dist/cli/sync-review-interactive.js +393 -0
  91. package/dist/cli/sync-review-interactive.js.map +1 -0
  92. package/dist/cli/theme.d.ts +31 -0
  93. package/dist/cli/theme.js +116 -0
  94. package/dist/cli/theme.js.map +1 -0
  95. package/dist/core/graph.d.ts +4 -8
  96. package/dist/core/graph.js +145 -96
  97. package/dist/core/graph.js.map +1 -1
  98. package/dist/core/migration-runner.d.ts +4 -1
  99. package/dist/core/migration-runner.js +14 -3
  100. package/dist/core/migration-runner.js.map +1 -1
  101. package/dist/core/types.d.ts +0 -3
  102. package/dist/core/types.js +0 -2
  103. package/dist/core/types.js.map +1 -1
  104. package/dist/core/user-config.d.ts +6 -0
  105. package/dist/core/user-config.js.map +1 -1
  106. package/dist/core/workspace.d.ts +13 -5
  107. package/dist/core/workspace.js +110 -33
  108. package/dist/core/workspace.js.map +1 -1
  109. package/dist/mcp/connector-manager.d.ts +7 -3
  110. package/dist/mcp/connector-manager.js +61 -16
  111. package/dist/mcp/connector-manager.js.map +1 -1
  112. package/dist/mcp/connectors/asana.d.ts +2 -0
  113. package/dist/mcp/connectors/asana.js +20 -0
  114. package/dist/mcp/connectors/asana.js.map +1 -0
  115. package/dist/mcp/connectors/definitions.d.ts +3 -1
  116. package/dist/mcp/connectors/definitions.js +19 -127
  117. package/dist/mcp/connectors/definitions.js.map +1 -1
  118. package/dist/mcp/connectors/figma.d.ts +5 -0
  119. package/dist/mcp/connectors/figma.js +21 -0
  120. package/dist/mcp/connectors/figma.js.map +1 -0
  121. package/dist/mcp/connectors/gdrive.d.ts +2 -0
  122. package/dist/mcp/connectors/gdrive.js +20 -0
  123. package/dist/mcp/connectors/gdrive.js.map +1 -0
  124. package/dist/mcp/connectors/granola.d.ts +2 -0
  125. package/dist/mcp/connectors/granola.js +12 -0
  126. package/dist/mcp/connectors/granola.js.map +1 -0
  127. package/dist/mcp/connectors/linear.d.ts +2 -0
  128. package/dist/mcp/connectors/linear.js +19 -0
  129. package/dist/mcp/connectors/linear.js.map +1 -0
  130. package/dist/mcp/connectors/obsidian.d.ts +2 -0
  131. package/dist/mcp/connectors/obsidian.js +19 -0
  132. package/dist/mcp/connectors/obsidian.js.map +1 -0
  133. package/dist/mcp/connectors/pipedrive.d.ts +2 -0
  134. package/dist/mcp/connectors/pipedrive.js +20 -0
  135. package/dist/mcp/connectors/pipedrive.js.map +1 -0
  136. package/dist/mcp/connectors/slack.d.ts +2 -0
  137. package/dist/mcp/connectors/slack.js +21 -0
  138. package/dist/mcp/connectors/slack.js.map +1 -0
  139. package/dist/mcp/oauth-provider.d.ts +41 -0
  140. package/dist/mcp/oauth-provider.js +160 -0
  141. package/dist/mcp/oauth-provider.js.map +1 -0
  142. package/dist/server/index.js +14 -9
  143. package/dist/server/index.js.map +1 -1
  144. package/dist/server/plugin-loader.d.ts +7 -0
  145. package/dist/server/plugin-loader.js +54 -2
  146. package/dist/server/plugin-loader.js.map +1 -1
  147. package/dist/services/github-provisioner.d.ts +8 -3
  148. package/dist/services/github-provisioner.js +35 -8
  149. package/dist/services/github-provisioner.js.map +1 -1
  150. package/dist/services/lint-service.js +8 -1
  151. package/dist/services/lint-service.js.map +1 -1
  152. package/dist/services/markdown.js +3 -3
  153. package/dist/services/markdown.js.map +1 -1
  154. package/dist/services/memory-service.d.ts +1 -1
  155. package/dist/services/memory-service.js +2 -3
  156. package/dist/services/memory-service.js.map +1 -1
  157. package/dist/services/orphan-service.d.ts +31 -0
  158. package/dist/services/orphan-service.js +100 -0
  159. package/dist/services/orphan-service.js.map +1 -0
  160. package/dist/services/sync/commit.d.ts +58 -0
  161. package/dist/services/sync/commit.js +354 -0
  162. package/dist/services/sync/commit.js.map +1 -0
  163. package/dist/services/sync/context-index.d.ts +69 -0
  164. package/dist/services/sync/context-index.js +280 -0
  165. package/dist/services/sync/context-index.js.map +1 -0
  166. package/dist/services/sync/derive.d.ts +34 -0
  167. package/dist/services/sync/derive.js +164 -0
  168. package/dist/services/sync/derive.js.map +1 -0
  169. package/dist/services/sync/enrichment-state.d.ts +31 -0
  170. package/dist/services/sync/enrichment-state.js +63 -0
  171. package/dist/services/sync/enrichment-state.js.map +1 -0
  172. package/dist/services/sync/enrichment.d.ts +25 -0
  173. package/dist/services/sync/enrichment.js +121 -0
  174. package/dist/services/sync/enrichment.js.map +1 -0
  175. package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
  176. package/dist/services/sync/frontmatter-extractor.js +273 -0
  177. package/dist/services/sync/frontmatter-extractor.js.map +1 -0
  178. package/dist/services/sync/graph-match-state.d.ts +33 -0
  179. package/dist/services/sync/graph-match-state.js +61 -0
  180. package/dist/services/sync/graph-match-state.js.map +1 -0
  181. package/dist/services/sync/graph-match.d.ts +53 -0
  182. package/dist/services/sync/graph-match.js +316 -0
  183. package/dist/services/sync/graph-match.js.map +1 -0
  184. package/dist/services/sync/graphrag-client.d.ts +43 -0
  185. package/dist/services/sync/graphrag-client.js +94 -0
  186. package/dist/services/sync/graphrag-client.js.map +1 -0
  187. package/dist/services/sync/graphrag-config.d.ts +16 -0
  188. package/dist/services/sync/graphrag-config.js +39 -0
  189. package/dist/services/sync/graphrag-config.js.map +1 -0
  190. package/dist/services/sync/graphrag-context.d.ts +14 -0
  191. package/dist/services/sync/graphrag-context.js +109 -0
  192. package/dist/services/sync/graphrag-context.js.map +1 -0
  193. package/dist/services/sync/graphrag-indexer.d.ts +30 -0
  194. package/dist/services/sync/graphrag-indexer.js +358 -0
  195. package/dist/services/sync/graphrag-indexer.js.map +1 -0
  196. package/dist/services/sync/llm.d.ts +32 -0
  197. package/dist/services/sync/llm.js +115 -0
  198. package/dist/services/sync/llm.js.map +1 -0
  199. package/dist/services/sync/mcp-client.d.ts +59 -0
  200. package/dist/services/sync/mcp-client.js +285 -0
  201. package/dist/services/sync/mcp-client.js.map +1 -0
  202. package/dist/services/sync/model-factory.d.ts +10 -0
  203. package/dist/services/sync/model-factory.js +24 -0
  204. package/dist/services/sync/model-factory.js.map +1 -0
  205. package/dist/services/sync/name-quality.d.ts +31 -0
  206. package/dist/services/sync/name-quality.js +60 -0
  207. package/dist/services/sync/name-quality.js.map +1 -0
  208. package/dist/services/sync/output-schemas.d.ts +92 -0
  209. package/dist/services/sync/output-schemas.js +43 -0
  210. package/dist/services/sync/output-schemas.js.map +1 -0
  211. package/dist/services/sync/prompts.d.ts +19 -0
  212. package/dist/services/sync/prompts.js +128 -0
  213. package/dist/services/sync/prompts.js.map +1 -0
  214. package/dist/services/sync/reconciler.d.ts +48 -0
  215. package/dist/services/sync/reconciler.js +295 -0
  216. package/dist/services/sync/reconciler.js.map +1 -0
  217. package/dist/services/sync/source-config.d.ts +45 -0
  218. package/dist/services/sync/source-config.js +208 -0
  219. package/dist/services/sync/source-config.js.map +1 -0
  220. package/dist/services/sync/source-definitions/asana.d.ts +15 -0
  221. package/dist/services/sync/source-definitions/asana.js +48 -0
  222. package/dist/services/sync/source-definitions/asana.js.map +1 -0
  223. package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
  224. package/dist/services/sync/source-definitions/definitions.js +26 -0
  225. package/dist/services/sync/source-definitions/definitions.js.map +1 -0
  226. package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
  227. package/dist/services/sync/source-definitions/gdrive.js +68 -0
  228. package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
  229. package/dist/services/sync/source-definitions/granola.d.ts +2 -0
  230. package/dist/services/sync/source-definitions/granola.js +28 -0
  231. package/dist/services/sync/source-definitions/granola.js.map +1 -0
  232. package/dist/services/sync/source-definitions/linear.d.ts +2 -0
  233. package/dist/services/sync/source-definitions/linear.js +60 -0
  234. package/dist/services/sync/source-definitions/linear.js.map +1 -0
  235. package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
  236. package/dist/services/sync/source-definitions/obsidian.js +55 -0
  237. package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
  238. package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
  239. package/dist/services/sync/source-definitions/pipedrive.js +52 -0
  240. package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
  241. package/dist/services/sync/staging.d.ts +53 -0
  242. package/dist/services/sync/staging.js +131 -0
  243. package/dist/services/sync/staging.js.map +1 -0
  244. package/dist/services/sync/structured-extractor.d.ts +49 -0
  245. package/dist/services/sync/structured-extractor.js +344 -0
  246. package/dist/services/sync/structured-extractor.js.map +1 -0
  247. package/dist/services/sync/sync-runner.d.ts +32 -0
  248. package/dist/services/sync/sync-runner.js +195 -0
  249. package/dist/services/sync/sync-runner.js.map +1 -0
  250. package/dist/services/sync/sync-state.d.ts +43 -0
  251. package/dist/services/sync/sync-state.js +154 -0
  252. package/dist/services/sync/sync-state.js.map +1 -0
  253. package/dist/services/sync/types.d.ts +203 -0
  254. package/dist/services/sync/types.js +8 -0
  255. package/dist/services/sync/types.js.map +1 -0
  256. package/dist/services/sync/unstructured-extractor.d.ts +29 -0
  257. package/dist/services/sync/unstructured-extractor.js +197 -0
  258. package/dist/services/sync/unstructured-extractor.js.map +1 -0
  259. package/dist/services/vector-service.d.ts +11 -0
  260. package/dist/services/vector-service.js +42 -0
  261. package/dist/services/vector-service.js.map +1 -1
  262. package/dist/utils/git.d.ts +26 -4
  263. package/dist/utils/git.js +55 -7
  264. package/dist/utils/git.js.map +1 -1
  265. package/dist/utils/merge-resolver.d.ts +34 -0
  266. package/dist/utils/merge-resolver.js +201 -0
  267. package/dist/utils/merge-resolver.js.map +1 -0
  268. package/dist/utils/preflight.d.ts +2 -1
  269. package/dist/utils/preflight.js +8 -1
  270. package/dist/utils/preflight.js.map +1 -1
  271. package/dist/utils/workspace-config.d.ts +8 -0
  272. package/dist/utils/workspace-config.js +22 -0
  273. package/dist/utils/workspace-config.js.map +1 -0
  274. package/package.json +16 -7
  275. /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/mcp/connectors/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqCH,iFAAiF;AAEjF,MAAM,CAAC,MAAM,qBAAqB,GAAwC;IAExE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,4BAA4B;QACjC,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,iDAAiD;gBAC9D,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,aAAa;aAC3B;SACF;QACD,OAAO,EAAE,6BAA6B;KACvC;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC;QAC3B,2EAA2E;QAC3E,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,oBAAoB;KAC9B;IAED,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,oCAAoC,CAAC;QAClD,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,qBAAqB;gBAC1B,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,uDAAuD;oBAClE,qDAAqD;gBACvD,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,UAAU;aACxB;SACF;QACD,OAAO,EAAE,kDAAkD;KAC5D;IAED,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,wCAAwC,CAAC;QACtD,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,yBAAyB;gBAC9B,KAAK,EAAE,qBAAqB;gBAC5B,WAAW,EAAE,iEAAiE;gBAC9E,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,gBAAgB;aAC9B;SACF;QACD,OAAO,EAAE,8CAA8C;KACxD;IAED,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,4DAA4D;QACzE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,qCAAqC,CAAC;QACnD,8EAA8E;QAC9E,iFAAiF;QACjF,+BAA+B;QAC/B,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,6BAA6B;gBAClC,KAAK,EAAE,uCAAuC;gBAC9C,WAAW,EAAE,wFAAwF;gBACrG,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,mCAAmC;aACjD;SACF;QACD,OAAO,EAAE,sEAAsE;KAChF;IAED,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;QACzB,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,wBAAwB;gBAC7B,KAAK,EAAE,6BAA6B;gBACpC,WAAW,EAAE,uEAAuE;gBACpF,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,4BAA4B;aAC1C;SACF;QACD,OAAO,EAAE,yDAAyD;KACnE;IAED,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,2BAA2B;QAChC,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,6BAA6B;gBACpC,WAAW,EAAE,kEAAkE;gBAC/E,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,UAAU;aACxB;SACF;QACD,OAAO,EAAE,oDAAoD;KAC9D;CACF,CAAC"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/mcp/connectors/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAqCzC,iFAAiF;AAEjF,MAAM,CAAC,MAAM,qBAAqB,GAAwC;IACxE,MAAM;IACN,OAAO;IACP,KAAK;IACL,SAAS;IACT,MAAM;IACN,KAAK;IACL,KAAK;IACL,cAAc,EAAE,WAAW;IAC3B,QAAQ;CACT,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ /** Local desktop server — requires Figma desktop app running with Dev Mode MCP enabled. */
3
+ export declare const figma: ConnectorDefinition;
4
+ /** Remote OAuth server — full tool set including generate_figma_design. Requires Figma client approval. */
5
+ export declare const figmaRemote: ConnectorDefinition;
@@ -0,0 +1,21 @@
1
+ /** Local desktop server — requires Figma desktop app running with Dev Mode MCP enabled. */
2
+ export const figma = {
3
+ name: 'figma',
4
+ label: 'Figma (desktop)',
5
+ description: 'Figma — read designs, generate FigJam diagrams, Code Connect mappings (via desktop app)',
6
+ type: 'http',
7
+ url: 'http://127.0.0.1:3845/mcp',
8
+ credentialFields: [],
9
+ docsUrl: 'https://developers.figma.com/docs/figma-mcp-server/local-server-installation/',
10
+ };
11
+ /** Remote OAuth server — full tool set including generate_figma_design. Requires Figma client approval. */
12
+ export const figmaRemote = {
13
+ name: 'figma-remote',
14
+ label: 'Figma (remote)',
15
+ description: 'Figma — full tool set including design generation (via OAuth)',
16
+ type: 'oauth',
17
+ url: 'https://mcp.figma.com/mcp',
18
+ credentialFields: [],
19
+ docsUrl: 'https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/',
20
+ };
21
+ //# sourceMappingURL=figma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma.js","sourceRoot":"","sources":["../../../src/mcp/connectors/figma.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,MAAM,CAAC,MAAM,KAAK,GAAwB;IACxC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,yFAAyF;IACtG,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,2BAA2B;IAChC,gBAAgB,EAAE,EAAE;IACpB,OAAO,EAAE,+EAA+E;CACzF,CAAC;AAEF,2GAA2G;AAC3G,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,+DAA+D;IAC5E,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,2BAA2B;IAChC,gBAAgB,EAAE,EAAE;IACpB,OAAO,EAAE,gFAAgF;CAC1F,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const gdrive: ConnectorDefinition;
@@ -0,0 +1,20 @@
1
+ export const gdrive = {
2
+ name: 'gdrive',
3
+ label: 'Google Drive',
4
+ description: 'Google Drive — read/write docs, sheets, folders, and file metadata',
5
+ type: 'stdio',
6
+ command: 'npx',
7
+ args: ['-y', '@anthropic-ai/google-docs-mcp@latest'],
8
+ credentialFields: [
9
+ {
10
+ key: 'env.GOOGLE_OAUTH_CREDENTIALS',
11
+ label: 'Path to Google OAuth credentials JSON',
12
+ description: 'Download from: Google Cloud Console → APIs & Services → Credentials → OAuth 2.0 Client',
13
+ secret: false,
14
+ required: true,
15
+ placeholder: '~/.config/google/credentials.json',
16
+ },
17
+ ],
18
+ docsUrl: 'https://www.npmjs.com/package/@anthropic-ai/google-docs-mcp',
19
+ };
20
+ //# sourceMappingURL=gdrive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdrive.js","sourceRoot":"","sources":["../../../src/mcp/connectors/gdrive.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAwB;IACzC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,oEAAoE;IACjF,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,sCAAsC,CAAC;IACpD,gBAAgB,EAAE;QAChB;YACE,GAAG,EAAE,8BAA8B;YACnC,KAAK,EAAE,uCAAuC;YAC9C,WAAW,EAAE,wFAAwF;YACrG,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,mCAAmC;SACjD;KACF;IACD,OAAO,EAAE,6DAA6D;CACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const granola: ConnectorDefinition;
@@ -0,0 +1,12 @@
1
+ export const granola = {
2
+ name: 'granola',
3
+ label: 'Granola',
4
+ description: 'Granola — search and read AI-summarized meeting notes',
5
+ type: 'stdio',
6
+ command: 'npx',
7
+ args: ['-y', 'granola-mcp'],
8
+ // No credential fields — Granola reads auth from the installed Granola app
9
+ credentialFields: [],
10
+ docsUrl: 'https://granola.ai',
11
+ };
12
+ //# sourceMappingURL=granola.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"granola.js","sourceRoot":"","sources":["../../../src/mcp/connectors/granola.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAwB;IAC1C,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,uDAAuD;IACpE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,EAAE,EAAE;IACpB,OAAO,EAAE,oBAAoB;CAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const linear: ConnectorDefinition;
@@ -0,0 +1,19 @@
1
+ export const linear = {
2
+ name: 'linear',
3
+ label: 'Linear',
4
+ description: 'Linear issue tracking — create/update issues, search projects',
5
+ type: 'http',
6
+ url: 'https://mcp.linear.app/mcp',
7
+ credentialFields: [
8
+ {
9
+ key: 'token',
10
+ label: 'Linear API key',
11
+ description: 'Settings → API → Personal API keys → Create key',
12
+ secret: true,
13
+ required: true,
14
+ placeholder: 'lin_api_...',
15
+ },
16
+ ],
17
+ docsUrl: 'https://linear.app/docs/api',
18
+ };
19
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/mcp/connectors/linear.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAwB;IACzC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,+DAA+D;IAC5E,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,4BAA4B;IACjC,gBAAgB,EAAE;QAChB;YACE,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,iDAAiD;YAC9D,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,aAAa;SAC3B;KACF;IACD,OAAO,EAAE,6BAA6B;CACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const obsidian: ConnectorDefinition;
@@ -0,0 +1,19 @@
1
+ export const obsidian = {
2
+ name: 'obsidian',
3
+ label: 'Obsidian',
4
+ description: 'Obsidian — read and search vault files via a user-provided MCP server',
5
+ type: 'stdio',
6
+ // No command/args — user provides their own MCP server binary
7
+ credentialFields: [
8
+ {
9
+ key: 'env.OBSIDIAN_VAULT',
10
+ label: 'Path to Obsidian vault',
11
+ description: 'Absolute path to the vault directory on disk',
12
+ secret: false,
13
+ required: false,
14
+ placeholder: '~/Vaults/MyVault',
15
+ },
16
+ ],
17
+ docsUrl: 'https://obsidian.md',
18
+ };
19
+ //# sourceMappingURL=obsidian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.js","sourceRoot":"","sources":["../../../src/mcp/connectors/obsidian.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,uEAAuE;IACpF,IAAI,EAAE,OAAO;IACb,8DAA8D;IAC9D,gBAAgB,EAAE;QAChB;YACE,GAAG,EAAE,oBAAoB;YACzB,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,8CAA8C;YAC3D,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,kBAAkB;SAChC;KACF;IACD,OAAO,EAAE,qBAAqB;CAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const pipedrive: ConnectorDefinition;
@@ -0,0 +1,20 @@
1
+ export const pipedrive = {
2
+ name: 'pipedrive',
3
+ label: 'Pipedrive',
4
+ description: 'Pipedrive CRM — contacts, deals, activities, pipeline',
5
+ type: 'stdio',
6
+ command: 'npx',
7
+ args: ['-y', '@modelcontextprotocol/server-pipedrive'],
8
+ credentialFields: [
9
+ {
10
+ key: 'env.PIPEDRIVE_API_TOKEN',
11
+ label: 'Pipedrive API token',
12
+ description: 'Settings → Personal preferences → API → Your personal API token',
13
+ secret: true,
14
+ required: true,
15
+ placeholder: 'your-api-token',
16
+ },
17
+ ],
18
+ docsUrl: 'https://developers.pipedrive.com/docs/api/v1',
19
+ };
20
+ //# sourceMappingURL=pipedrive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipedrive.js","sourceRoot":"","sources":["../../../src/mcp/connectors/pipedrive.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,uDAAuD;IACpE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,wCAAwC,CAAC;IACtD,gBAAgB,EAAE;QAChB;YACE,GAAG,EAAE,yBAAyB;YAC9B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,iEAAiE;YAC9E,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,gBAAgB;SAC9B;KACF;IACD,OAAO,EAAE,8CAA8C;CACxD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ConnectorDefinition } from './definitions.js';
2
+ export declare const slack: ConnectorDefinition;
@@ -0,0 +1,21 @@
1
+ export const slack = {
2
+ name: 'slack',
3
+ label: 'Slack',
4
+ description: 'Slack — search messages, list channels, post updates',
5
+ type: 'stdio',
6
+ command: 'npx',
7
+ args: ['-y', '@modelcontextprotocol/server-slack'],
8
+ credentialFields: [
9
+ {
10
+ key: 'env.SLACK_BOT_TOKEN',
11
+ label: 'Slack token',
12
+ description: 'Bot token (xoxb-...) or User OAuth token (xoxp-...). ' +
13
+ 'Create at: api.slack.com/apps → OAuth & Permissions',
14
+ secret: true,
15
+ required: true,
16
+ placeholder: 'xoxb-...',
17
+ },
18
+ ],
19
+ docsUrl: 'https://api.slack.com/authentication/token-types',
20
+ };
21
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/mcp/connectors/slack.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAwB;IACxC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,sDAAsD;IACnE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,oCAAoC,CAAC;IAClD,gBAAgB,EAAE;QAChB;YACE,GAAG,EAAE,qBAAqB;YAC1B,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,uDAAuD;gBAClE,qDAAqD;YACvD,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,UAAU;SACxB;KACF;IACD,OAAO,EAAE,kDAAkD;CAC5D,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * OAuth Client Provider for MCP Connectors
3
+ *
4
+ * Implements OAuthClientProvider from the MCP SDK to support OAuth-based
5
+ * MCP servers (Figma, Linear, etc.) using dynamic client registration.
6
+ *
7
+ * Storage: ~/.studiograph/connectors/<name>.oauth.json (tokens, client info, PKCE verifier)
8
+ * Auth flow: opens browser → local callback server → exchanges code for tokens
9
+ *
10
+ * Works with any MCP server that supports RFC 8414 (OAuth metadata discovery)
11
+ * and RFC 7591 (dynamic client registration). No pre-registered client secrets needed.
12
+ */
13
+ import type { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js';
14
+ import type { OAuthClientMetadata, OAuthClientInformationMixed, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
15
+ /**
16
+ * File-backed OAuth provider for a single connector.
17
+ * Stores tokens and client info alongside the connector config.
18
+ */
19
+ export declare class ConnectorOAuthProvider implements OAuthClientProvider {
20
+ private connectorName;
21
+ private storagePath;
22
+ constructor(connectorName: string);
23
+ get redirectUrl(): URL;
24
+ get clientMetadata(): OAuthClientMetadata;
25
+ clientInformation(): Promise<OAuthClientInformationMixed | undefined>;
26
+ saveClientInformation(info: OAuthClientInformationMixed): Promise<void>;
27
+ tokens(): Promise<OAuthTokens | undefined>;
28
+ saveTokens(tokens: OAuthTokens): Promise<void>;
29
+ redirectToAuthorization(authorizationUrl: URL): Promise<void>;
30
+ saveCodeVerifier(codeVerifier: string): Promise<void>;
31
+ codeVerifier(): Promise<string>;
32
+ invalidateCredentials(scope: 'all' | 'client' | 'tokens' | 'verifier'): Promise<void>;
33
+ private _load;
34
+ private _save;
35
+ }
36
+ /**
37
+ * Start a temporary local HTTP server to receive the OAuth callback.
38
+ * Returns a promise that resolves with the authorization code.
39
+ * Server auto-closes after receiving the callback or timing out.
40
+ */
41
+ export declare function waitForOAuthCallback(timeoutMs?: number): Promise<string>;
@@ -0,0 +1,160 @@
1
+ /**
2
+ * OAuth Client Provider for MCP Connectors
3
+ *
4
+ * Implements OAuthClientProvider from the MCP SDK to support OAuth-based
5
+ * MCP servers (Figma, Linear, etc.) using dynamic client registration.
6
+ *
7
+ * Storage: ~/.studiograph/connectors/<name>.oauth.json (tokens, client info, PKCE verifier)
8
+ * Auth flow: opens browser → local callback server → exchanges code for tokens
9
+ *
10
+ * Works with any MCP server that supports RFC 8414 (OAuth metadata discovery)
11
+ * and RFC 7591 (dynamic client registration). No pre-registered client secrets needed.
12
+ */
13
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
14
+ import { join } from 'path';
15
+ import { createServer } from 'http';
16
+ import { CONNECTORS_DIR } from './connector-manager.js';
17
+ const CALLBACK_PORT = 38741; // Fixed port for OAuth callbacks
18
+ const CALLBACK_PATH = '/oauth/callback';
19
+ const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
20
+ /**
21
+ * File-backed OAuth provider for a single connector.
22
+ * Stores tokens and client info alongside the connector config.
23
+ */
24
+ export class ConnectorOAuthProvider {
25
+ connectorName;
26
+ storagePath;
27
+ constructor(connectorName) {
28
+ this.connectorName = connectorName;
29
+ this.storagePath = join(CONNECTORS_DIR, `${connectorName}.oauth.json`);
30
+ }
31
+ get redirectUrl() {
32
+ return new URL(REDIRECT_URI);
33
+ }
34
+ get clientMetadata() {
35
+ return {
36
+ redirect_uris: [REDIRECT_URI],
37
+ client_name: 'Studiograph',
38
+ grant_types: ['authorization_code', 'refresh_token'],
39
+ response_types: ['code'],
40
+ token_endpoint_auth_method: 'none', // public client — no secret
41
+ };
42
+ }
43
+ async clientInformation() {
44
+ return this._load().clientInfo;
45
+ }
46
+ async saveClientInformation(info) {
47
+ const data = this._load();
48
+ data.clientInfo = info;
49
+ this._save(data);
50
+ }
51
+ async tokens() {
52
+ return this._load().tokens;
53
+ }
54
+ async saveTokens(tokens) {
55
+ const data = this._load();
56
+ data.tokens = tokens;
57
+ this._save(data);
58
+ }
59
+ async redirectToAuthorization(authorizationUrl) {
60
+ // Open browser to authorization URL
61
+ const { exec } = await import('child_process');
62
+ const url = authorizationUrl.toString();
63
+ const platform = process.platform;
64
+ if (platform === 'darwin') {
65
+ exec(`open "${url}"`);
66
+ }
67
+ else if (platform === 'win32') {
68
+ exec(`start "" "${url}"`);
69
+ }
70
+ else {
71
+ exec(`xdg-open "${url}"`);
72
+ }
73
+ console.log(`[connectors] Opening browser for ${this.connectorName} authorization...`);
74
+ }
75
+ async saveCodeVerifier(codeVerifier) {
76
+ const data = this._load();
77
+ data.codeVerifier = codeVerifier;
78
+ this._save(data);
79
+ }
80
+ async codeVerifier() {
81
+ const data = this._load();
82
+ return data.codeVerifier ?? '';
83
+ }
84
+ async invalidateCredentials(scope) {
85
+ const data = this._load();
86
+ if (scope === 'all' || scope === 'tokens')
87
+ data.tokens = undefined;
88
+ if (scope === 'all' || scope === 'client')
89
+ data.clientInfo = undefined;
90
+ if (scope === 'all' || scope === 'verifier')
91
+ data.codeVerifier = undefined;
92
+ this._save(data);
93
+ }
94
+ // ── storage helpers ──────────────────────────────────────────────────────
95
+ _load() {
96
+ if (!existsSync(this.storagePath))
97
+ return {};
98
+ try {
99
+ return JSON.parse(readFileSync(this.storagePath, 'utf-8'));
100
+ }
101
+ catch {
102
+ return {};
103
+ }
104
+ }
105
+ _save(data) {
106
+ mkdirSync(CONNECTORS_DIR, { recursive: true });
107
+ writeFileSync(this.storagePath, JSON.stringify(data, null, 2) + '\n', { mode: 0o600 });
108
+ }
109
+ }
110
+ // ── Callback server ──────────────────────────────────────────────────────────
111
+ /**
112
+ * Start a temporary local HTTP server to receive the OAuth callback.
113
+ * Returns a promise that resolves with the authorization code.
114
+ * Server auto-closes after receiving the callback or timing out.
115
+ */
116
+ export function waitForOAuthCallback(timeoutMs = 120_000) {
117
+ return new Promise((resolve, reject) => {
118
+ let server;
119
+ const timeout = setTimeout(() => {
120
+ server?.close();
121
+ reject(new Error('OAuth callback timed out (2 minutes)'));
122
+ }, timeoutMs);
123
+ server = createServer((req, res) => {
124
+ const url = new URL(req.url ?? '/', `http://localhost:${CALLBACK_PORT}`);
125
+ if (url.pathname !== CALLBACK_PATH) {
126
+ res.writeHead(404);
127
+ res.end('Not found');
128
+ return;
129
+ }
130
+ const code = url.searchParams.get('code');
131
+ const error = url.searchParams.get('error');
132
+ if (error) {
133
+ res.writeHead(200, { 'Content-Type': 'text/html' });
134
+ res.end(`<html><body><h2>Authorization failed</h2><p>${error}</p><p>You can close this tab.</p></body></html>`);
135
+ clearTimeout(timeout);
136
+ server.close();
137
+ reject(new Error(`OAuth authorization denied: ${error}`));
138
+ return;
139
+ }
140
+ if (!code) {
141
+ res.writeHead(400, { 'Content-Type': 'text/html' });
142
+ res.end('<html><body><h2>Missing authorization code</h2><p>You can close this tab.</p></body></html>');
143
+ return;
144
+ }
145
+ res.writeHead(200, { 'Content-Type': 'text/html' });
146
+ res.end('<html><body><h2>Authorization successful</h2><p>You can close this tab and return to Studiograph.</p></body></html>');
147
+ clearTimeout(timeout);
148
+ server.close();
149
+ resolve(code);
150
+ });
151
+ server.listen(CALLBACK_PORT, () => {
152
+ // Server ready — browser will be opened by redirectToAuthorization()
153
+ });
154
+ server.on('error', (err) => {
155
+ clearTimeout(timeout);
156
+ reject(new Error(`Failed to start OAuth callback server: ${err.message}`));
157
+ });
158
+ });
159
+ }
160
+ //# sourceMappingURL=oauth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-provider.js","sourceRoot":"","sources":["../../src/mcp/oauth-provider.ts"],"names":[],"mappings":"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"}
@@ -68,15 +68,20 @@ export async function createServer(config) {
68
68
  if (toolsDir)
69
69
  appToolsDirs.push(toolsDir);
70
70
  }
71
- // Initialize agent — skills/tools dirs are resolved before agent starts
72
- const agent = new AgentOrchestrator({
73
- workspacePath: config.workspacePath,
74
- workspaceConfig: config.workspaceConfig,
75
- gitUser: config.gitUser,
76
- skillsDirs: appSkillsDirs,
77
- toolsDirs: appToolsDirs,
78
- });
79
- await registerChatRoutes(fastify, agent);
71
+ // Initialize agent — non-fatal so the server can still serve graph API and apps
72
+ try {
73
+ const agent = new AgentOrchestrator({
74
+ workspacePath: config.workspacePath,
75
+ workspaceConfig: config.workspaceConfig,
76
+ gitUser: config.gitUser,
77
+ skillsDirs: appSkillsDirs,
78
+ toolsDirs: appToolsDirs,
79
+ });
80
+ await registerChatRoutes(fastify, agent);
81
+ }
82
+ catch (err) {
83
+ fastify.log.warn(`Agent not available: ${err.message ?? err} — chat routes disabled`);
84
+ }
80
85
  // GitHub webhook route
81
86
  await registerWebhookRoutes(fastify, config.workspaceManager, config.webhookSecret);
82
87
  // Mount app plugins
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Scans .studiograph/apps/ for installed apps, parses their manifests,
5
5
  * and mounts their Fastify plugins under the declared mountPath.
6
+ * Also serves static assets from each app's static/ directory.
6
7
  */
7
8
  import type { FastifyInstance } from 'fastify';
8
9
  import { WorkspaceManager } from '../core/workspace-manager.js';
@@ -29,8 +30,14 @@ export declare class PluginLoader {
29
30
  * Return the tools directory for a given app, if it exists.
30
31
  */
31
32
  getToolsDir(appsDir: string, manifest: AppManifest): string | null;
33
+ /**
34
+ * Return the static assets directory for a given app, if it exists.
35
+ */
36
+ getStaticDir(appsDir: string, manifest: AppManifest): string | null;
32
37
  /**
33
38
  * Dynamically import and register a plugin under its mountPath.
39
+ * Also mounts a static file handler at {mountPath}/static/* if the
40
+ * app has a static/ directory.
34
41
  */
35
42
  mountPlugin(fastify: FastifyInstance, manifest: AppManifest, appDir: string, opts: {
36
43
  workspaceManager: WorkspaceManager;
@@ -3,9 +3,31 @@
3
3
  *
4
4
  * Scans .studiograph/apps/ for installed apps, parses their manifests,
5
5
  * and mounts their Fastify plugins under the declared mountPath.
6
+ * Also serves static assets from each app's static/ directory.
6
7
  */
7
- import { existsSync, readdirSync, readFileSync } from 'fs';
8
- import { join } from 'path';
8
+ import { existsSync, readdirSync, readFileSync, createReadStream } from 'fs';
9
+ import { join, extname } from 'path';
10
+ const MIME_TYPES = {
11
+ '.html': 'text/html',
12
+ '.css': 'text/css',
13
+ '.js': 'application/javascript',
14
+ '.mjs': 'application/javascript',
15
+ '.json': 'application/json',
16
+ '.png': 'image/png',
17
+ '.jpg': 'image/jpeg',
18
+ '.jpeg': 'image/jpeg',
19
+ '.gif': 'image/gif',
20
+ '.svg': 'image/svg+xml',
21
+ '.ico': 'image/x-icon',
22
+ '.woff': 'font/woff',
23
+ '.woff2': 'font/woff2',
24
+ '.ttf': 'font/ttf',
25
+ '.otf': 'font/otf',
26
+ '.webp': 'image/webp',
27
+ '.avif': 'image/avif',
28
+ '.mp4': 'video/mp4',
29
+ '.webm': 'video/webm',
30
+ };
9
31
  export class PluginLoader {
10
32
  /**
11
33
  * Scan appsDir for installed apps and return their manifests.
@@ -70,8 +92,17 @@ export class PluginLoader {
70
92
  const dir = join(appsDir, manifest.name, 'tools');
71
93
  return existsSync(dir) ? dir : null;
72
94
  }
95
+ /**
96
+ * Return the static assets directory for a given app, if it exists.
97
+ */
98
+ getStaticDir(appsDir, manifest) {
99
+ const dir = join(appsDir, manifest.name, 'static');
100
+ return existsSync(dir) ? dir : null;
101
+ }
73
102
  /**
74
103
  * Dynamically import and register a plugin under its mountPath.
104
+ * Also mounts a static file handler at {mountPath}/static/* if the
105
+ * app has a static/ directory.
75
106
  */
76
107
  async mountPlugin(fastify, manifest, appDir, opts) {
77
108
  const pluginPath = join(appDir, manifest.name, manifest.plugin);
@@ -84,12 +115,33 @@ export class PluginLoader {
84
115
  if (typeof pluginFn !== 'function') {
85
116
  throw new Error(`Plugin at ${pluginPath} does not export a function`);
86
117
  }
118
+ const staticDir = this.getStaticDir(appDir, manifest);
87
119
  await fastify.register(pluginFn, {
88
120
  prefix: manifest.mountPath,
89
121
  workspaceManager: opts.workspaceManager,
90
122
  gitUser: opts.gitUser,
91
123
  appsDir: appDir,
124
+ staticDir,
92
125
  });
126
+ // Mount static file handler if app has a static/ directory
127
+ if (staticDir) {
128
+ await fastify.register(async (instance) => {
129
+ instance.get('/*', async (req, reply) => {
130
+ const filePath = req.params['*'];
131
+ if (!filePath || filePath.includes('..')) {
132
+ return reply.status(400).send({ error: 'Invalid path' });
133
+ }
134
+ const fullPath = join(staticDir, filePath);
135
+ if (!existsSync(fullPath)) {
136
+ return reply.status(404).send({ error: 'Not found' });
137
+ }
138
+ const ext = extname(fullPath).toLowerCase();
139
+ const contentType = MIME_TYPES[ext] || 'application/octet-stream';
140
+ reply.type(contentType);
141
+ return reply.send(createReadStream(fullPath));
142
+ });
143
+ }, { prefix: `${manifest.mountPath}/static` });
144
+ }
93
145
  }
94
146
  }
95
147
  //# sourceMappingURL=plugin-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/server/plugin-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/server/plugin-loader.ts"],"names":[],"mappings":"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"}