studiograph 1.3.48-next.13 → 1.3.48-next.131

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 (1008) hide show
  1. package/README.md +7 -7
  2. package/dist/agent/agent-pool.d.ts +27 -1
  3. package/dist/agent/agent-pool.js +55 -12
  4. package/dist/agent/agent-pool.js.map +1 -1
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +29 -2
  9. package/dist/agent/orchestrator.js +251 -38
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +30 -0
  12. package/dist/agent/prompts/entity-types-section.js +83 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +106 -47
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/entity-schema.md +79 -343
  19. package/dist/agent/skills/interview/entity-templates.md +38 -37
  20. package/dist/agent/skills/interview/question-domains.md +54 -49
  21. package/dist/agent/skills/interview/skill.md +89 -14
  22. package/dist/agent/tools/capture-tools.d.ts +31 -0
  23. package/dist/agent/tools/capture-tools.js +40 -0
  24. package/dist/agent/tools/capture-tools.js.map +1 -0
  25. package/dist/agent/tools/folder-tools.d.ts +47 -0
  26. package/dist/agent/tools/folder-tools.js +249 -0
  27. package/dist/agent/tools/folder-tools.js.map +1 -0
  28. package/dist/agent/tools/fs-tools.d.ts +6 -5
  29. package/dist/agent/tools/fs-tools.js +5 -5
  30. package/dist/agent/tools/fs-tools.js.map +1 -1
  31. package/dist/agent/tools/graph-tools.d.ts +25 -72
  32. package/dist/agent/tools/graph-tools.js +362 -366
  33. package/dist/agent/tools/graph-tools.js.map +1 -1
  34. package/dist/agent/tools/history-tools.d.ts +95 -0
  35. package/dist/agent/tools/history-tools.js +461 -0
  36. package/dist/agent/tools/history-tools.js.map +1 -0
  37. package/dist/agent/tools/load-skill.d.ts +6 -5
  38. package/dist/agent/tools/load-skill.js +3 -3
  39. package/dist/agent/tools/load-skill.js.map +1 -1
  40. package/dist/agent/tools/message-tools.d.ts +13 -11
  41. package/dist/agent/tools/message-tools.js +31 -39
  42. package/dist/agent/tools/message-tools.js.map +1 -1
  43. package/dist/agent/tools/ops-tools.d.ts +5 -4
  44. package/dist/agent/tools/ops-tools.js +99 -212
  45. package/dist/agent/tools/ops-tools.js.map +1 -1
  46. package/dist/agent/tools/permission-tools.d.ts +39 -16
  47. package/dist/agent/tools/permission-tools.js +66 -41
  48. package/dist/agent/tools/permission-tools.js.map +1 -1
  49. package/dist/agent/tools/tool-loader.js +5 -4
  50. package/dist/agent/tools/tool-loader.js.map +1 -1
  51. package/dist/agent/tools/web-tools.js +58 -9
  52. package/dist/agent/tools/web-tools.js.map +1 -1
  53. package/dist/cli/commands/about.d.ts +1 -0
  54. package/dist/cli/commands/about.js +55 -3
  55. package/dist/cli/commands/about.js.map +1 -1
  56. package/dist/cli/commands/audit.d.ts +21 -0
  57. package/dist/cli/commands/audit.js +174 -0
  58. package/dist/cli/commands/audit.js.map +1 -0
  59. package/dist/cli/commands/clear.d.ts +5 -0
  60. package/dist/cli/commands/clear.js +144 -1
  61. package/dist/cli/commands/clear.js.map +1 -1
  62. package/dist/cli/commands/clone.d.ts +1 -1
  63. package/dist/cli/commands/clone.js +82 -23
  64. package/dist/cli/commands/clone.js.map +1 -1
  65. package/dist/cli/commands/deploy.js +79 -18
  66. package/dist/cli/commands/deploy.js.map +1 -1
  67. package/dist/cli/commands/folder.d.ts +11 -0
  68. package/dist/cli/commands/folder.js +186 -0
  69. package/dist/cli/commands/folder.js.map +1 -0
  70. package/dist/cli/commands/index.js +2 -2
  71. package/dist/cli/commands/index.js.map +1 -1
  72. package/dist/cli/commands/init.js +16 -14
  73. package/dist/cli/commands/init.js.map +1 -1
  74. package/dist/cli/commands/join.d.ts +1 -1
  75. package/dist/cli/commands/join.js +26 -14
  76. package/dist/cli/commands/join.js.map +1 -1
  77. package/dist/cli/commands/mcp.js +12 -4
  78. package/dist/cli/commands/mcp.js.map +1 -1
  79. package/dist/cli/commands/r2.d.ts +3 -0
  80. package/dist/cli/commands/r2.js +196 -1
  81. package/dist/cli/commands/r2.js.map +1 -1
  82. package/dist/cli/commands/redeploy.js +41 -1
  83. package/dist/cli/commands/redeploy.js.map +1 -1
  84. package/dist/cli/commands/secrets.d.ts +23 -0
  85. package/dist/cli/commands/secrets.js +256 -0
  86. package/dist/cli/commands/secrets.js.map +1 -0
  87. package/dist/cli/commands/serve.js +143 -24
  88. package/dist/cli/commands/serve.js.map +1 -1
  89. package/dist/cli/commands/start.js +140 -71
  90. package/dist/cli/commands/start.js.map +1 -1
  91. package/dist/cli/commands/sync.d.ts +1 -1
  92. package/dist/cli/commands/sync.js +509 -163
  93. package/dist/cli/commands/sync.js.map +1 -1
  94. package/dist/cli/commands/user.js +8 -24
  95. package/dist/cli/commands/user.js.map +1 -1
  96. package/dist/cli/index.js +8 -7
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/railway-provisioning.d.ts +53 -0
  99. package/dist/cli/railway-provisioning.js +85 -0
  100. package/dist/cli/railway-provisioning.js.map +1 -0
  101. package/dist/cli/scaffolding.d.ts +4 -2
  102. package/dist/cli/scaffolding.js +42 -47
  103. package/dist/cli/scaffolding.js.map +1 -1
  104. package/dist/cli/setup-wizard.d.ts +30 -49
  105. package/dist/cli/setup-wizard.js +35 -38
  106. package/dist/cli/setup-wizard.js.map +1 -1
  107. package/dist/core/accent-palette.d.ts +22 -0
  108. package/dist/core/accent-palette.js +47 -0
  109. package/dist/core/accent-palette.js.map +1 -0
  110. package/dist/core/entity-body-templates.d.ts +21 -0
  111. package/dist/core/entity-body-templates.js +48 -0
  112. package/dist/core/entity-body-templates.js.map +1 -0
  113. package/dist/core/entity-types-catalog.d.ts +65 -0
  114. package/dist/core/entity-types-catalog.js +136 -0
  115. package/dist/core/entity-types-catalog.js.map +1 -0
  116. package/dist/core/feature-flags.d.ts +22 -0
  117. package/dist/core/feature-flags.js +15 -0
  118. package/dist/core/feature-flags.js.map +1 -0
  119. package/dist/core/features.d.ts +16 -0
  120. package/dist/core/features.js +48 -0
  121. package/dist/core/features.js.map +1 -0
  122. package/dist/core/folder-paths.d.ts +41 -0
  123. package/dist/core/folder-paths.js +95 -0
  124. package/dist/core/folder-paths.js.map +1 -0
  125. package/dist/core/folder-sidecar.d.ts +16 -0
  126. package/dist/core/folder-sidecar.js +45 -0
  127. package/dist/core/folder-sidecar.js.map +1 -0
  128. package/dist/core/graph.d.ts +471 -19
  129. package/dist/core/graph.js +1411 -284
  130. package/dist/core/graph.js.map +1 -1
  131. package/dist/core/schema-registry.js +1 -19
  132. package/dist/core/schema-registry.js.map +1 -1
  133. package/dist/core/schemas/connector.d.ts +67 -0
  134. package/dist/core/schemas/connector.js +100 -0
  135. package/dist/core/schemas/connector.js.map +1 -0
  136. package/dist/core/schemas/workspace.d.ts +122 -0
  137. package/dist/core/schemas/workspace.js +211 -0
  138. package/dist/core/schemas/workspace.js.map +1 -0
  139. package/dist/core/secrets/SecretStore.d.ts +77 -0
  140. package/dist/core/secrets/SecretStore.js +13 -0
  141. package/dist/core/secrets/SecretStore.js.map +1 -0
  142. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  143. package/dist/core/secrets/SettingsResolver.js +80 -0
  144. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  145. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  146. package/dist/core/secrets/SettingsStore.js +9 -0
  147. package/dist/core/secrets/SettingsStore.js.map +1 -0
  148. package/dist/core/secrets/SqliteEncryptedStore.d.ts +78 -0
  149. package/dist/core/secrets/SqliteEncryptedStore.js +581 -0
  150. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  151. package/dist/core/secrets/audit.d.ts +36 -0
  152. package/dist/core/secrets/audit.js +60 -0
  153. package/dist/core/secrets/audit.js.map +1 -0
  154. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  155. package/dist/core/secrets/auth-db-migration.js +653 -0
  156. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  157. package/dist/core/secrets/bundle.d.ts +141 -0
  158. package/dist/core/secrets/bundle.js +435 -0
  159. package/dist/core/secrets/bundle.js.map +1 -0
  160. package/dist/core/secrets/dual-write.d.ts +76 -0
  161. package/dist/core/secrets/dual-write.js +236 -0
  162. package/dist/core/secrets/dual-write.js.map +1 -0
  163. package/dist/core/secrets/encryption.d.ts +44 -0
  164. package/dist/core/secrets/encryption.js +97 -0
  165. package/dist/core/secrets/encryption.js.map +1 -0
  166. package/dist/core/secrets/importer.d.ts +94 -0
  167. package/dist/core/secrets/importer.js +319 -0
  168. package/dist/core/secrets/importer.js.map +1 -0
  169. package/dist/core/secrets/index.d.ts +49 -0
  170. package/dist/core/secrets/index.js +74 -0
  171. package/dist/core/secrets/index.js.map +1 -0
  172. package/dist/core/secrets/master-key.d.ts +38 -0
  173. package/dist/core/secrets/master-key.js +122 -0
  174. package/dist/core/secrets/master-key.js.map +1 -0
  175. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  176. package/dist/core/secrets/probes/anthropic.js +300 -0
  177. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  178. package/dist/core/secrets/probes/brave.d.ts +9 -0
  179. package/dist/core/secrets/probes/brave.js +15 -0
  180. package/dist/core/secrets/probes/brave.js.map +1 -0
  181. package/dist/core/secrets/probes/r2.d.ts +15 -0
  182. package/dist/core/secrets/probes/r2.js +14 -0
  183. package/dist/core/secrets/probes/r2.js.map +1 -0
  184. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  185. package/dist/core/secrets/probes/voyage.js +52 -0
  186. package/dist/core/secrets/probes/voyage.js.map +1 -0
  187. package/dist/core/secrets/read-flip.d.ts +59 -0
  188. package/dist/core/secrets/read-flip.js +87 -0
  189. package/dist/core/secrets/read-flip.js.map +1 -0
  190. package/dist/core/secrets/registry.d.ts +188 -0
  191. package/dist/core/secrets/registry.js +531 -0
  192. package/dist/core/secrets/registry.js.map +1 -0
  193. package/dist/core/types.d.ts +70 -483
  194. package/dist/core/types.js +6 -3
  195. package/dist/core/types.js.map +1 -1
  196. package/dist/core/user-config.d.ts +52 -12
  197. package/dist/core/user-config.js +119 -14
  198. package/dist/core/user-config.js.map +1 -1
  199. package/dist/core/validation.d.ts +603 -1409
  200. package/dist/core/validation.js +248 -146
  201. package/dist/core/validation.js.map +1 -1
  202. package/dist/core/workspace-manager.d.ts +35 -14
  203. package/dist/core/workspace-manager.js +105 -56
  204. package/dist/core/workspace-manager.js.map +1 -1
  205. package/dist/core/workspace.d.ts +19 -5
  206. package/dist/core/workspace.js +66 -39
  207. package/dist/core/workspace.js.map +1 -1
  208. package/dist/mcp/connector-manager.d.ts +16 -1
  209. package/dist/mcp/connector-manager.js +44 -5
  210. package/dist/mcp/connector-manager.js.map +1 -1
  211. package/dist/mcp/server.d.ts +11 -3
  212. package/dist/mcp/server.js +30 -5
  213. package/dist/mcp/server.js.map +1 -1
  214. package/dist/mcp/tools.d.ts +27 -2
  215. package/dist/mcp/tools.js +544 -113
  216. package/dist/mcp/tools.js.map +1 -1
  217. package/dist/server/__tests__/helpers/graph-api.d.ts +18 -0
  218. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  219. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  220. package/dist/server/commit-audit.d.ts +26 -0
  221. package/dist/server/commit-audit.js +30 -0
  222. package/dist/server/commit-audit.js.map +1 -0
  223. package/dist/server/index.d.ts +14 -3
  224. package/dist/server/index.js +385 -177
  225. package/dist/server/index.js.map +1 -1
  226. package/dist/server/middleware/sanitize.d.ts +46 -0
  227. package/dist/server/middleware/sanitize.js +171 -0
  228. package/dist/server/middleware/sanitize.js.map +1 -0
  229. package/dist/server/routes/asset-api.js +217 -65
  230. package/dist/server/routes/asset-api.js.map +1 -1
  231. package/dist/server/routes/audit-api.d.ts +24 -0
  232. package/dist/server/routes/audit-api.js +117 -0
  233. package/dist/server/routes/audit-api.js.map +1 -0
  234. package/dist/server/routes/auth-api.js +220 -44
  235. package/dist/server/routes/auth-api.js.map +1 -1
  236. package/dist/server/routes/capture-api.d.ts +10 -3
  237. package/dist/server/routes/capture-api.js +180 -24
  238. package/dist/server/routes/capture-api.js.map +1 -1
  239. package/dist/server/routes/chat.d.ts +4 -1
  240. package/dist/server/routes/chat.js +178 -46
  241. package/dist/server/routes/chat.js.map +1 -1
  242. package/dist/server/routes/config-api.d.ts +21 -0
  243. package/dist/server/routes/config-api.js +256 -0
  244. package/dist/server/routes/config-api.js.map +1 -0
  245. package/dist/server/routes/connectors-api.js +24 -18
  246. package/dist/server/routes/connectors-api.js.map +1 -1
  247. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  248. package/dist/server/routes/event-ingest-api.js +125 -0
  249. package/dist/server/routes/event-ingest-api.js.map +1 -0
  250. package/dist/server/routes/features-api.d.ts +19 -0
  251. package/dist/server/routes/features-api.js +28 -0
  252. package/dist/server/routes/features-api.js.map +1 -0
  253. package/dist/server/routes/git-http.d.ts +2 -2
  254. package/dist/server/routes/git-http.js +69 -34
  255. package/dist/server/routes/git-http.js.map +1 -1
  256. package/dist/server/routes/graph-api-access.d.ts +35 -0
  257. package/dist/server/routes/graph-api-access.js +93 -0
  258. package/dist/server/routes/graph-api-access.js.map +1 -0
  259. package/dist/server/routes/graph-api.d.ts +3 -2
  260. package/dist/server/routes/graph-api.js +1014 -315
  261. package/dist/server/routes/graph-api.js.map +1 -1
  262. package/dist/server/routes/health.d.ts +18 -0
  263. package/dist/server/routes/health.js +74 -0
  264. package/dist/server/routes/health.js.map +1 -0
  265. package/dist/server/routes/insights-api.js +156 -33
  266. package/dist/server/routes/insights-api.js.map +1 -1
  267. package/dist/server/routes/mcp.d.ts +6 -3
  268. package/dist/server/routes/mcp.js +22 -6
  269. package/dist/server/routes/mcp.js.map +1 -1
  270. package/dist/server/routes/messages-api.d.ts +3 -3
  271. package/dist/server/routes/messages-api.js +308 -120
  272. package/dist/server/routes/messages-api.js.map +1 -1
  273. package/dist/server/routes/permissions-api.d.ts +9 -2
  274. package/dist/server/routes/permissions-api.js +87 -31
  275. package/dist/server/routes/permissions-api.js.map +1 -1
  276. package/dist/server/routes/secrets-api.d.ts +36 -0
  277. package/dist/server/routes/secrets-api.js +308 -0
  278. package/dist/server/routes/secrets-api.js.map +1 -0
  279. package/dist/server/routes/settings-api.d.ts +29 -0
  280. package/dist/server/routes/settings-api.js +180 -0
  281. package/dist/server/routes/settings-api.js.map +1 -0
  282. package/dist/server/routes/workspace-api.d.ts +2 -1
  283. package/dist/server/routes/workspace-api.js +131 -20
  284. package/dist/server/routes/workspace-api.js.map +1 -1
  285. package/dist/server/routes/ws.d.ts +3 -2
  286. package/dist/server/routes/ws.js +68 -18
  287. package/dist/server/routes/ws.js.map +1 -1
  288. package/dist/server/session-manager.d.ts +48 -5
  289. package/dist/server/session-manager.js +175 -11
  290. package/dist/server/session-manager.js.map +1 -1
  291. package/dist/server/ws-hub.d.ts +134 -22
  292. package/dist/server/ws-hub.js +0 -0
  293. package/dist/server/ws-hub.js.map +1 -1
  294. package/dist/server/yjs-manager.d.ts +107 -7
  295. package/dist/server/yjs-manager.js +444 -38
  296. package/dist/server/yjs-manager.js.map +1 -1
  297. package/dist/server/yjs-persistence.d.ts +143 -0
  298. package/dist/server/yjs-persistence.js +543 -0
  299. package/dist/server/yjs-persistence.js.map +1 -0
  300. package/dist/server/yjs-text-diff.d.ts +32 -0
  301. package/dist/server/yjs-text-diff.js +61 -0
  302. package/dist/server/yjs-text-diff.js.map +1 -0
  303. package/dist/services/access-control.d.ts +53 -0
  304. package/dist/services/access-control.js +132 -0
  305. package/dist/services/access-control.js.map +1 -0
  306. package/dist/services/asset-upload-service.d.ts +53 -0
  307. package/dist/services/asset-upload-service.js +200 -0
  308. package/dist/services/asset-upload-service.js.map +1 -0
  309. package/dist/services/assets/base.d.ts +38 -0
  310. package/dist/services/assets/base.js +55 -0
  311. package/dist/services/assets/base.js.map +1 -1
  312. package/dist/services/assets/index.d.ts +41 -1
  313. package/dist/services/assets/index.js +65 -0
  314. package/dist/services/assets/index.js.map +1 -1
  315. package/dist/services/assets/local.d.ts +7 -1
  316. package/dist/services/assets/local.js +83 -0
  317. package/dist/services/assets/local.js.map +1 -1
  318. package/dist/services/assets/r2.d.ts +28 -1
  319. package/dist/services/assets/r2.js +75 -1
  320. package/dist/services/assets/r2.js.map +1 -1
  321. package/dist/services/auth-service.d.ts +184 -36
  322. package/dist/services/auth-service.js +763 -138
  323. package/dist/services/auth-service.js.map +1 -1
  324. package/dist/services/briefing.d.ts +1 -1
  325. package/dist/services/briefing.js +12 -35
  326. package/dist/services/briefing.js.map +1 -1
  327. package/dist/services/event-processor.d.ts +104 -0
  328. package/dist/services/event-processor.js +443 -0
  329. package/dist/services/event-processor.js.map +1 -0
  330. package/dist/services/folder-creation.d.ts +33 -0
  331. package/dist/services/folder-creation.js +103 -0
  332. package/dist/services/folder-creation.js.map +1 -0
  333. package/dist/services/git.d.ts +44 -0
  334. package/dist/services/git.js +162 -55
  335. package/dist/services/git.js.map +1 -1
  336. package/dist/services/heartbeat.d.ts +19 -12
  337. package/dist/services/heartbeat.js +162 -107
  338. package/dist/services/heartbeat.js.map +1 -1
  339. package/dist/services/import-service.d.ts +37 -2
  340. package/dist/services/import-service.js +222 -123
  341. package/dist/services/import-service.js.map +1 -1
  342. package/dist/services/lint-service.js +7 -14
  343. package/dist/services/lint-service.js.map +1 -1
  344. package/dist/services/markdown.js +6 -2
  345. package/dist/services/markdown.js.map +1 -1
  346. package/dist/services/message-service.d.ts +62 -21
  347. package/dist/services/message-service.js +160 -43
  348. package/dist/services/message-service.js.map +1 -1
  349. package/dist/services/personal-folder.d.ts +40 -0
  350. package/dist/services/personal-folder.js +101 -0
  351. package/dist/services/personal-folder.js.map +1 -0
  352. package/dist/services/vector-service.d.ts +73 -3
  353. package/dist/services/vector-service.js +106 -7
  354. package/dist/services/vector-service.js.map +1 -1
  355. package/dist/services/workspace-access.d.ts +106 -0
  356. package/dist/services/workspace-access.js +149 -0
  357. package/dist/services/workspace-access.js.map +1 -0
  358. package/dist/utils/git.js +3 -3
  359. package/dist/utils/git.js.map +1 -1
  360. package/dist/utils/log.d.ts +42 -0
  361. package/dist/utils/log.js +137 -0
  362. package/dist/utils/log.js.map +1 -0
  363. package/dist/utils/preflight.js +2 -2
  364. package/dist/utils/preflight.js.map +1 -1
  365. package/dist/utils/version-checker.d.ts +4 -1
  366. package/dist/utils/version-checker.js +8 -8
  367. package/dist/utils/version-checker.js.map +1 -1
  368. package/dist/web/_app/immutable/assets/0.Bp6xXZUi.css +2 -0
  369. package/dist/web/_app/immutable/assets/11.DlIf1mKh.css +1 -0
  370. package/dist/web/_app/immutable/assets/12.Dmlt28l2.css +1 -0
  371. package/dist/web/_app/immutable/assets/13.CmLrbzZp.css +1 -0
  372. package/dist/web/_app/immutable/assets/2.oo1ac0x_.css +1 -0
  373. package/dist/web/_app/immutable/assets/3.DJJsQzDb.css +1 -0
  374. package/dist/web/_app/immutable/assets/4.CZ-fNJ91.css +1 -0
  375. package/dist/web/_app/immutable/assets/AgentOverlay.BfWESlQU.css +1 -0
  376. package/dist/web/_app/immutable/assets/AssetManagerModal.ZfasE2L3.css +1 -0
  377. package/dist/web/_app/immutable/assets/CalendarView.CeNagvyK.css +1 -0
  378. package/dist/web/_app/immutable/assets/ChatPanel.po0gYtVH.css +1 -0
  379. package/dist/web/_app/immutable/assets/FolderMembersPanel.Bepw-r0F.css +1 -0
  380. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  381. package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
  382. package/dist/web/_app/immutable/assets/GalleryView.Dy-qQjEc.css +1 -0
  383. package/dist/web/_app/immutable/assets/GraphView.BHnGIltS.css +1 -0
  384. package/dist/web/_app/immutable/assets/KanbanView.G3NZ0uHb.css +1 -0
  385. package/dist/web/_app/immutable/assets/SettingsDialog.tBn8y9DD.css +1 -0
  386. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  387. package/dist/web/_app/immutable/assets/TagFilter.DNipjifq.css +1 -0
  388. package/dist/web/_app/immutable/assets/TagPickerSheet.DJPuqnTg.css +1 -0
  389. package/dist/web/_app/immutable/assets/WorkspaceView.B9zA92UB.css +1 -0
  390. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  391. package/dist/web/_app/immutable/assets/dialog.BxVal_19.css +1 -0
  392. package/dist/web/_app/immutable/assets/dist.B5hGjnfj.css +1 -0
  393. package/dist/web/_app/immutable/assets/dist.DDCWxn3B.css +1 -0
  394. package/dist/web/_app/immutable/assets/dropdown-menu.BSsUUQ3o.css +1 -0
  395. package/dist/web/_app/immutable/assets/entity-row.Bl5FyNCt.css +1 -0
  396. package/dist/web/_app/immutable/assets/greeting.Bm7lTneV.css +1 -0
  397. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  398. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  399. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  400. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  401. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  402. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  403. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  404. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  405. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  406. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  407. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  408. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  409. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  410. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  411. package/dist/web/_app/immutable/assets/inline-list.DORLo4xF.css +1 -0
  412. package/dist/web/_app/immutable/assets/notifications.clodJdp5.css +1 -0
  413. package/dist/web/_app/immutable/assets/radio-group.GJJRVPUJ.css +1 -0
  414. package/dist/web/_app/immutable/assets/select.D_AV992j.css +1 -0
  415. package/dist/web/_app/immutable/chunks/-KAQXGuI2.js +1 -0
  416. package/dist/web/_app/immutable/chunks/-wzwcH00.js +1 -0
  417. package/dist/web/_app/immutable/chunks/07l_1Zpm2.js +1 -0
  418. package/dist/web/_app/immutable/chunks/38oWKNzM2.js +6 -0
  419. package/dist/web/_app/immutable/chunks/54VmiJfH.js +1 -0
  420. package/dist/web/_app/immutable/chunks/6LRpFvjo.js +185 -0
  421. package/dist/web/_app/immutable/chunks/7R0Rp3Mz.js +1 -0
  422. package/dist/web/_app/immutable/chunks/9bCTHkeS.js +1 -0
  423. package/dist/web/_app/immutable/chunks/B-822WnD2.js +22 -0
  424. package/dist/web/_app/immutable/chunks/B0HUvliX2.js +2 -0
  425. package/dist/web/_app/immutable/chunks/B12eXGpE.js +1 -0
  426. package/dist/web/_app/immutable/chunks/B5af0X0p2.js +1 -0
  427. package/dist/web/_app/immutable/chunks/B6iYNwo72.js +1 -0
  428. package/dist/web/_app/immutable/chunks/B7EMtoAB.js +1 -0
  429. package/dist/web/_app/immutable/chunks/B7L4gmPR.js +2 -0
  430. package/dist/web/_app/immutable/chunks/B9qBGxh62.js +3 -0
  431. package/dist/web/_app/immutable/chunks/BDJYj9yi.js +2 -0
  432. package/dist/web/_app/immutable/chunks/BEpMEjHO.js +1 -0
  433. package/dist/web/_app/immutable/chunks/BErNpj-S2.js +1 -0
  434. package/dist/web/_app/immutable/chunks/BHBk4zfV.js +1 -0
  435. package/dist/web/_app/immutable/chunks/BHH-JGNF.js +1 -0
  436. package/dist/web/_app/immutable/chunks/BKe5wPiN.js +1 -0
  437. package/dist/web/_app/immutable/chunks/BNTlsKDJ.js +1 -0
  438. package/dist/web/_app/immutable/chunks/BOgcXgis2.js +1 -0
  439. package/dist/web/_app/immutable/chunks/BOyyDrjn2.js +1 -0
  440. package/dist/web/_app/immutable/chunks/BPR_ufQ0.js +41 -0
  441. package/dist/web/_app/immutable/chunks/BRcFsc6v.js +5 -0
  442. package/dist/web/_app/immutable/chunks/BT3KAag_.js +3 -0
  443. package/dist/web/_app/immutable/chunks/BX2T6xiZ.js +224 -0
  444. package/dist/web/_app/immutable/chunks/BZnJ8tbJ.js +1 -0
  445. package/dist/web/_app/immutable/chunks/Ba1Yzb7u.js +1 -0
  446. package/dist/web/_app/immutable/chunks/BcsvgA3B2.js +1 -0
  447. package/dist/web/_app/immutable/chunks/BfbS7rGT.js +1 -0
  448. package/dist/web/_app/immutable/chunks/BgagL41Z.js +1 -0
  449. package/dist/web/_app/immutable/chunks/BiUh0Sik.js +1 -0
  450. package/dist/web/_app/immutable/chunks/Biajc_oU.js +1 -0
  451. package/dist/web/_app/immutable/chunks/Bl9Pzopy.js +1 -0
  452. package/dist/web/_app/immutable/chunks/BmcU05mO.js +1 -0
  453. package/dist/web/_app/immutable/chunks/Bmgp0jlT.js +1 -0
  454. package/dist/web/_app/immutable/chunks/BmgyOoEp.js +1 -0
  455. package/dist/web/_app/immutable/chunks/Bq0-jBGC2.js +1 -0
  456. package/dist/web/_app/immutable/chunks/BqGj0_GS.js +1 -0
  457. package/dist/web/_app/immutable/chunks/Bsc9K3Pz.js +1 -0
  458. package/dist/web/_app/immutable/chunks/Bssb691Q.js +1 -0
  459. package/dist/web/_app/immutable/chunks/BuzQceOn.js +1 -0
  460. package/dist/web/_app/immutable/chunks/BzeVNab0.js +1 -0
  461. package/dist/web/_app/immutable/chunks/C-OaypFN.js +1 -0
  462. package/dist/web/_app/immutable/chunks/C0fjDjvE2.js +1 -0
  463. package/dist/web/_app/immutable/chunks/C0pTXwEX.js +2 -0
  464. package/dist/web/_app/immutable/chunks/C3Enww9L2.js +1 -0
  465. package/dist/web/_app/immutable/chunks/C3oa0Cks.js +1 -0
  466. package/dist/web/_app/immutable/chunks/CC-YWp-f.js +1 -0
  467. package/dist/web/_app/immutable/chunks/CGdKvXV92.js +1 -0
  468. package/dist/web/_app/immutable/chunks/CH0siYFL.js +1 -0
  469. package/dist/web/_app/immutable/chunks/CIchr8Tk2.js +1 -0
  470. package/dist/web/_app/immutable/chunks/CK_yXDQI.js +1 -0
  471. package/dist/web/_app/immutable/chunks/CLPtMig0.js +1 -0
  472. package/dist/web/_app/immutable/chunks/CLSxJmTj.js +2 -0
  473. package/dist/web/_app/immutable/chunks/CPQNcHIB.js +3 -0
  474. package/dist/web/_app/immutable/chunks/CPt2D5aU.js +1 -0
  475. package/dist/web/_app/immutable/chunks/CQ-2yccd.js +7 -0
  476. package/dist/web/_app/immutable/chunks/CS6VEwn7.js +1 -0
  477. package/dist/web/_app/immutable/chunks/CSGIGrrK.js +1 -0
  478. package/dist/web/_app/immutable/chunks/CSsDOIrk.js +1 -0
  479. package/dist/web/_app/immutable/chunks/CVXvEWhv2.js +1 -0
  480. package/dist/web/_app/immutable/chunks/CaChtuYU2.js +1 -0
  481. package/dist/web/_app/immutable/chunks/CbiwvM3R2.js +1 -0
  482. package/dist/web/_app/immutable/chunks/CdCuBMLm.js +156 -0
  483. package/dist/web/_app/immutable/chunks/CfqjDDMu.js +1 -0
  484. package/dist/web/_app/immutable/chunks/CjGzUnEF2.js +1 -0
  485. package/dist/web/_app/immutable/chunks/Cjgbiel7.js +1 -0
  486. package/dist/web/_app/immutable/chunks/ClNEskRf.js +1 -0
  487. package/dist/web/_app/immutable/chunks/CnqSKqA62.js +1 -0
  488. package/dist/web/_app/immutable/chunks/CqyqKPuh2.js +1 -0
  489. package/dist/web/_app/immutable/chunks/CrnX-oFV.js +1 -0
  490. package/dist/web/_app/immutable/chunks/CsGahE3a.js +1 -0
  491. package/dist/web/_app/immutable/chunks/CsXIliss.js +1 -0
  492. package/dist/web/_app/immutable/chunks/Ct3quP0F.js +1 -0
  493. package/dist/web/_app/immutable/chunks/CvZaxjRC.js +1 -0
  494. package/dist/web/_app/immutable/chunks/CwD4G56R.js +5 -0
  495. package/dist/web/_app/immutable/chunks/CxalqrMB.js +1 -0
  496. package/dist/web/_app/immutable/chunks/D1Ap3evT2.js +1 -0
  497. package/dist/web/_app/immutable/chunks/D7qgUfnr.js +2487 -0
  498. package/dist/web/_app/immutable/chunks/D9-_Euza2.js +1 -0
  499. package/dist/web/_app/immutable/chunks/DCCaoKt42.js +1 -0
  500. package/dist/web/_app/immutable/chunks/DDKweOZr2.js +23 -0
  501. package/dist/web/_app/immutable/chunks/DHeU-hHI2.js +2 -0
  502. package/dist/web/_app/immutable/chunks/DHepUItL.js +1 -0
  503. package/dist/web/_app/immutable/chunks/DL_KbCKq.js +8 -0
  504. package/dist/web/_app/immutable/chunks/DNtqqgv32.js +1 -0
  505. package/dist/web/_app/immutable/chunks/DRl7vwNC2.js +184 -0
  506. package/dist/web/_app/immutable/chunks/DTc5W_V6.js +1 -0
  507. package/dist/web/_app/immutable/chunks/DZetJu9k2.js +1 -0
  508. package/dist/web/_app/immutable/chunks/DaiJs3St.js +1 -0
  509. package/dist/web/_app/immutable/chunks/DhuJRrEX2.js +1 -0
  510. package/dist/web/_app/immutable/chunks/DiP2EplP.js +3 -0
  511. package/dist/web/_app/immutable/chunks/Dm25ot5x2.js +1 -0
  512. package/dist/web/_app/immutable/chunks/DqOcb9RX2.js +83 -0
  513. package/dist/web/_app/immutable/chunks/DrbUJCAE.js +1 -0
  514. package/dist/web/_app/immutable/chunks/Dt4HY2cT2.js +2 -0
  515. package/dist/web/_app/immutable/chunks/DtGUCMv8.js +6 -0
  516. package/dist/web/_app/immutable/chunks/Du2-B3c8.js +1 -0
  517. package/dist/web/_app/immutable/chunks/DwdkE4UD2.js +1 -0
  518. package/dist/web/_app/immutable/chunks/DxWesPbn.js +1 -0
  519. package/dist/web/_app/immutable/chunks/DyYZqUV72.js +1 -0
  520. package/dist/web/_app/immutable/chunks/HfUnhvrv2.js +1 -0
  521. package/dist/web/_app/immutable/chunks/Je8-BtCk2.js +1 -0
  522. package/dist/web/_app/immutable/chunks/LAN53VbP2.js +5 -0
  523. package/dist/web/_app/immutable/chunks/MSB7eA4_.js +1 -0
  524. package/dist/web/_app/immutable/chunks/NPe9WyW1.js +1 -0
  525. package/dist/web/_app/immutable/chunks/O6IzcxXJ.js +2 -0
  526. package/dist/web/_app/immutable/chunks/SXhc9rJW.js +1 -0
  527. package/dist/web/_app/immutable/chunks/TuBvdkhV2.js +1 -0
  528. package/dist/web/_app/immutable/chunks/U40J2SnU.js +1 -0
  529. package/dist/web/_app/immutable/chunks/VS3l21Gu.js +1 -0
  530. package/dist/web/_app/immutable/chunks/YEPEvlbU2.js +1 -0
  531. package/dist/web/_app/immutable/chunks/Z7TNRcgK.js +11 -0
  532. package/dist/web/_app/immutable/chunks/ZCekGjo6.js +5 -0
  533. package/dist/web/_app/immutable/chunks/_rnxQ655.js +4 -0
  534. package/dist/web/_app/immutable/chunks/dTXrX5Bw.js +2 -0
  535. package/dist/web/_app/immutable/chunks/gNXLhsdy.js +1 -0
  536. package/dist/web/_app/immutable/chunks/hKSTEN36.js +1 -0
  537. package/dist/web/_app/immutable/chunks/jZZTbzL5.js +1 -0
  538. package/dist/web/_app/immutable/chunks/l4FIBKss.js +1 -0
  539. package/dist/web/_app/immutable/chunks/l_4snZnh2.js +1 -0
  540. package/dist/web/_app/immutable/chunks/q6R6T-lK.js +1 -0
  541. package/dist/web/_app/immutable/chunks/qgprkMcL.js +1 -0
  542. package/dist/web/_app/immutable/chunks/rOisBLC62.js +14 -0
  543. package/dist/web/_app/immutable/chunks/t08TznXc2.js +1 -0
  544. package/dist/web/_app/immutable/chunks/t62M88qj.js +1 -0
  545. package/dist/web/_app/immutable/chunks/uCohGWC42.js +1 -0
  546. package/dist/web/_app/immutable/chunks/uqxmB78b.js +1 -0
  547. package/dist/web/_app/immutable/chunks/vwTMEIJQ.js +1 -0
  548. package/dist/web/_app/immutable/chunks/w1FCELam.js +64 -0
  549. package/dist/web/_app/immutable/chunks/zmjgin7A.js +1 -0
  550. package/dist/web/_app/immutable/chunks/zumDjcgJ.js +1 -0
  551. package/dist/web/_app/immutable/entry/app.B3JEO5sy.js +2 -0
  552. package/dist/web/_app/immutable/entry/start.Dk84vnrL.js +1 -0
  553. package/dist/web/_app/immutable/nodes/0.BKLFgYTV.js +2 -0
  554. package/dist/web/_app/immutable/nodes/1.Djf_1kN1.js +1 -0
  555. package/dist/web/_app/immutable/nodes/10.De6eGWLx.js +1 -0
  556. package/dist/web/_app/immutable/nodes/11.CDsfSRTw.js +1 -0
  557. package/dist/web/_app/immutable/nodes/12.BeKkKpkY.js +1 -0
  558. package/dist/web/_app/immutable/nodes/13.BcI8xwSy.js +1 -0
  559. package/dist/web/_app/immutable/nodes/2.ZMZ-QAZ7.js +106 -0
  560. package/dist/web/_app/immutable/nodes/3.C1ZiAfle.js +2 -0
  561. package/dist/web/_app/immutable/nodes/4.Chmqy9KF.js +2 -0
  562. package/dist/web/_app/immutable/nodes/5.Bpvr_Vcq.js +1 -0
  563. package/dist/web/_app/immutable/nodes/6.BHa_gOs3.js +1 -0
  564. package/dist/web/_app/immutable/nodes/7.D0hg4Eap.js +1 -0
  565. package/dist/web/_app/immutable/nodes/8.3ZUUxJqR.js +1 -0
  566. package/dist/web/_app/immutable/nodes/9.Ducy-oqR.js +1 -0
  567. package/dist/web/_app/version.json +1 -1
  568. package/dist/web/favicon-16.png +0 -0
  569. package/dist/web/favicon-180.png +0 -0
  570. package/dist/web/favicon-32.png +0 -0
  571. package/dist/web/favicon-48.png +0 -0
  572. package/dist/web/favicon-512.png +0 -0
  573. package/dist/web/favicon.ico +0 -0
  574. package/dist/web/favicon.svg +8 -0
  575. package/dist/web/index.html +64 -21
  576. package/dist/web/studiograph-logomark.svg +29 -0
  577. package/package.json +28 -14
  578. package/dist/agent/role-loader.d.ts +0 -24
  579. package/dist/agent/role-loader.js +0 -67
  580. package/dist/agent/role-loader.js.map +0 -1
  581. package/dist/agent/skills/enrich-entities.md +0 -136
  582. package/dist/agent/skills/obsidian-source-setup.md +0 -246
  583. package/dist/agent/skills/skill-loader.d.ts +0 -48
  584. package/dist/agent/skills/skill-loader.js +0 -166
  585. package/dist/agent/skills/skill-loader.js.map +0 -1
  586. package/dist/agent/skills/sync-configuration.md +0 -119
  587. package/dist/agent/skills/sync-setup.md +0 -82
  588. package/dist/agent/tools/sync-tools.d.ts +0 -35
  589. package/dist/agent/tools/sync-tools.js +0 -992
  590. package/dist/agent/tools/sync-tools.js.map +0 -1
  591. package/dist/auth/github.d.ts +0 -56
  592. package/dist/auth/github.js +0 -169
  593. package/dist/auth/github.js.map +0 -1
  594. package/dist/cli/commands/access.d.ts +0 -11
  595. package/dist/cli/commands/access.js +0 -156
  596. package/dist/cli/commands/access.js.map +0 -1
  597. package/dist/cli/commands/app.d.ts +0 -7
  598. package/dist/cli/commands/app.js +0 -268
  599. package/dist/cli/commands/app.js.map +0 -1
  600. package/dist/cli/commands/auth.d.ts +0 -10
  601. package/dist/cli/commands/auth.js +0 -79
  602. package/dist/cli/commands/auth.js.map +0 -1
  603. package/dist/cli/commands/collection.d.ts +0 -10
  604. package/dist/cli/commands/collection.js +0 -185
  605. package/dist/cli/commands/collection.js.map +0 -1
  606. package/dist/cli/commands/enrich.d.ts +0 -11
  607. package/dist/cli/commands/enrich.js +0 -135
  608. package/dist/cli/commands/enrich.js.map +0 -1
  609. package/dist/cli/commands/graphrag.d.ts +0 -12
  610. package/dist/cli/commands/graphrag.js +0 -122
  611. package/dist/cli/commands/graphrag.js.map +0 -1
  612. package/dist/cli/commands/members.d.ts +0 -11
  613. package/dist/cli/commands/members.js +0 -230
  614. package/dist/cli/commands/members.js.map +0 -1
  615. package/dist/cli/commands/org.d.ts +0 -10
  616. package/dist/cli/commands/org.js +0 -132
  617. package/dist/cli/commands/org.js.map +0 -1
  618. package/dist/cli/commands/provision.d.ts +0 -8
  619. package/dist/cli/commands/provision.js +0 -116
  620. package/dist/cli/commands/provision.js.map +0 -1
  621. package/dist/cli/commands/resolve.d.ts +0 -8
  622. package/dist/cli/commands/resolve.js +0 -85
  623. package/dist/cli/commands/resolve.js.map +0 -1
  624. package/dist/cli/commands/review.d.ts +0 -19
  625. package/dist/cli/commands/review.js +0 -128
  626. package/dist/cli/commands/review.js.map +0 -1
  627. package/dist/cli/commands/source.d.ts +0 -16
  628. package/dist/cli/commands/source.js +0 -159
  629. package/dist/cli/commands/source.js.map +0 -1
  630. package/dist/cli/commands/sync-collection.d.ts +0 -14
  631. package/dist/cli/commands/sync-collection.js +0 -355
  632. package/dist/cli/commands/sync-collection.js.map +0 -1
  633. package/dist/cli/commands/sync-entities.d.ts +0 -13
  634. package/dist/cli/commands/sync-entities.js +0 -242
  635. package/dist/cli/commands/sync-entities.js.map +0 -1
  636. package/dist/cli/commands/team.d.ts +0 -12
  637. package/dist/cli/commands/team.js +0 -185
  638. package/dist/cli/commands/team.js.map +0 -1
  639. package/dist/cli/sync-review-interactive.d.ts +0 -31
  640. package/dist/cli/sync-review-interactive.js +0 -393
  641. package/dist/cli/sync-review-interactive.js.map +0 -1
  642. package/dist/core/migration-runner.d.ts +0 -42
  643. package/dist/core/migration-runner.js +0 -232
  644. package/dist/core/migration-runner.js.map +0 -1
  645. package/dist/core/migration-types.d.ts +0 -101
  646. package/dist/core/migration-types.js +0 -21
  647. package/dist/core/migration-types.js.map +0 -1
  648. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
  649. package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
  650. package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
  651. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
  652. package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
  653. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
  654. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
  655. package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
  656. package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
  657. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
  658. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
  659. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
  660. package/dist/core/migrations/index.d.ts +0 -11
  661. package/dist/core/migrations/index.js +0 -23
  662. package/dist/core/migrations/index.js.map +0 -1
  663. package/dist/integrations/asana.d.ts +0 -26
  664. package/dist/integrations/asana.js +0 -78
  665. package/dist/integrations/asana.js.map +0 -1
  666. package/dist/integrations/figma-local.d.ts +0 -16
  667. package/dist/integrations/figma-local.js +0 -10
  668. package/dist/integrations/figma-local.js.map +0 -1
  669. package/dist/integrations/figma.d.ts +0 -17
  670. package/dist/integrations/figma.js +0 -17
  671. package/dist/integrations/figma.js.map +0 -1
  672. package/dist/integrations/granola.d.ts +0 -24
  673. package/dist/integrations/granola.js +0 -60
  674. package/dist/integrations/granola.js.map +0 -1
  675. package/dist/integrations/linear.d.ts +0 -14
  676. package/dist/integrations/linear.js +0 -80
  677. package/dist/integrations/linear.js.map +0 -1
  678. package/dist/integrations/paper-local.d.ts +0 -14
  679. package/dist/integrations/paper-local.js +0 -10
  680. package/dist/integrations/paper-local.js.map +0 -1
  681. package/dist/integrations/paper.d.ts +0 -2
  682. package/dist/integrations/paper.js +0 -10
  683. package/dist/integrations/paper.js.map +0 -1
  684. package/dist/integrations/pipedrive.d.ts +0 -26
  685. package/dist/integrations/pipedrive.js +0 -97
  686. package/dist/integrations/pipedrive.js.map +0 -1
  687. package/dist/integrations/registry.d.ts +0 -8
  688. package/dist/integrations/registry.js +0 -7
  689. package/dist/integrations/registry.js.map +0 -1
  690. package/dist/integrations/types.d.ts +0 -43
  691. package/dist/integrations/types.js +0 -5
  692. package/dist/integrations/types.js.map +0 -1
  693. package/dist/lib/lib/utils.d.ts +0 -2
  694. package/dist/lib/lib/utils.js +0 -6
  695. package/dist/lib/lib/utils.js.map +0 -1
  696. package/dist/mcp/connectors/asana.d.ts +0 -2
  697. package/dist/mcp/connectors/asana.js +0 -20
  698. package/dist/mcp/connectors/asana.js.map +0 -1
  699. package/dist/mcp/connectors/definitions.d.ts +0 -45
  700. package/dist/mcp/connectors/definitions.js +0 -32
  701. package/dist/mcp/connectors/definitions.js.map +0 -1
  702. package/dist/mcp/connectors/figma.d.ts +0 -5
  703. package/dist/mcp/connectors/figma.js +0 -21
  704. package/dist/mcp/connectors/figma.js.map +0 -1
  705. package/dist/mcp/connectors/gdrive.d.ts +0 -2
  706. package/dist/mcp/connectors/gdrive.js +0 -20
  707. package/dist/mcp/connectors/gdrive.js.map +0 -1
  708. package/dist/mcp/connectors/granola.d.ts +0 -2
  709. package/dist/mcp/connectors/granola.js +0 -12
  710. package/dist/mcp/connectors/granola.js.map +0 -1
  711. package/dist/mcp/connectors/linear.d.ts +0 -2
  712. package/dist/mcp/connectors/linear.js +0 -19
  713. package/dist/mcp/connectors/linear.js.map +0 -1
  714. package/dist/mcp/connectors/obsidian.d.ts +0 -2
  715. package/dist/mcp/connectors/obsidian.js +0 -19
  716. package/dist/mcp/connectors/obsidian.js.map +0 -1
  717. package/dist/mcp/connectors/pipedrive.d.ts +0 -2
  718. package/dist/mcp/connectors/pipedrive.js +0 -20
  719. package/dist/mcp/connectors/pipedrive.js.map +0 -1
  720. package/dist/mcp/connectors/slack.d.ts +0 -2
  721. package/dist/mcp/connectors/slack.js +0 -21
  722. package/dist/mcp/connectors/slack.js.map +0 -1
  723. package/dist/mcp/server-oauth-provider.d.ts +0 -56
  724. package/dist/mcp/server-oauth-provider.js +0 -142
  725. package/dist/mcp/server-oauth-provider.js.map +0 -1
  726. package/dist/server/agents/agent-loader.d.ts +0 -16
  727. package/dist/server/agents/agent-loader.js +0 -175
  728. package/dist/server/agents/agent-loader.js.map +0 -1
  729. package/dist/server/agents/agent-runner.d.ts +0 -33
  730. package/dist/server/agents/agent-runner.js +0 -187
  731. package/dist/server/agents/agent-runner.js.map +0 -1
  732. package/dist/server/agents/agent-runtime.d.ts +0 -39
  733. package/dist/server/agents/agent-runtime.js +0 -214
  734. package/dist/server/agents/agent-runtime.js.map +0 -1
  735. package/dist/server/agents/base-agent.d.ts +0 -30
  736. package/dist/server/agents/base-agent.js +0 -88
  737. package/dist/server/agents/base-agent.js.map +0 -1
  738. package/dist/server/agents/executive-digest.d.ts +0 -16
  739. package/dist/server/agents/executive-digest.js +0 -115
  740. package/dist/server/agents/executive-digest.js.map +0 -1
  741. package/dist/server/agents/graph-steward.d.ts +0 -16
  742. package/dist/server/agents/graph-steward.js +0 -59
  743. package/dist/server/agents/graph-steward.js.map +0 -1
  744. package/dist/server/agents/meeting-followup.d.ts +0 -16
  745. package/dist/server/agents/meeting-followup.js +0 -88
  746. package/dist/server/agents/meeting-followup.js.map +0 -1
  747. package/dist/server/agents/pipeline-monitor.d.ts +0 -15
  748. package/dist/server/agents/pipeline-monitor.js +0 -86
  749. package/dist/server/agents/pipeline-monitor.js.map +0 -1
  750. package/dist/server/agents/types.d.ts +0 -81
  751. package/dist/server/agents/types.js +0 -41
  752. package/dist/server/agents/types.js.map +0 -1
  753. package/dist/server/chrome/chrome.css +0 -691
  754. package/dist/server/chrome/chrome.js +0 -374
  755. package/dist/server/collab-authority.d.ts +0 -70
  756. package/dist/server/collab-authority.js +0 -218
  757. package/dist/server/collab-authority.js.map +0 -1
  758. package/dist/server/collab.d.ts +0 -29
  759. package/dist/server/collab.js +0 -195
  760. package/dist/server/collab.js.map +0 -1
  761. package/dist/server/commit-scheduler.d.ts +0 -39
  762. package/dist/server/commit-scheduler.js +0 -113
  763. package/dist/server/commit-scheduler.js.map +0 -1
  764. package/dist/server/plugin-loader.d.ts +0 -53
  765. package/dist/server/plugin-loader.js +0 -155
  766. package/dist/server/plugin-loader.js.map +0 -1
  767. package/dist/server/routes/agents-api.d.ts +0 -10
  768. package/dist/server/routes/agents-api.js +0 -25
  769. package/dist/server/routes/agents-api.js.map +0 -1
  770. package/dist/server/routes/collab.d.ts +0 -6
  771. package/dist/server/routes/collab.js +0 -10
  772. package/dist/server/routes/collab.js.map +0 -1
  773. package/dist/server/routes/git-api.d.ts +0 -9
  774. package/dist/server/routes/git-api.js +0 -82
  775. package/dist/server/routes/git-api.js.map +0 -1
  776. package/dist/server/routes/meeting-ingest-api.d.ts +0 -14
  777. package/dist/server/routes/meeting-ingest-api.js +0 -98
  778. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  779. package/dist/server/routes/sync-api.d.ts +0 -26
  780. package/dist/server/routes/sync-api.js +0 -848
  781. package/dist/server/routes/sync-api.js.map +0 -1
  782. package/dist/server/routes/webhook.d.ts +0 -14
  783. package/dist/server/routes/webhook.js +0 -102
  784. package/dist/server/routes/webhook.js.map +0 -1
  785. package/dist/services/batch-processor.d.ts +0 -49
  786. package/dist/services/batch-processor.js +0 -166
  787. package/dist/services/batch-processor.js.map +0 -1
  788. package/dist/services/csv-service.d.ts +0 -36
  789. package/dist/services/csv-service.js +0 -143
  790. package/dist/services/csv-service.js.map +0 -1
  791. package/dist/services/github-provisioner.d.ts +0 -36
  792. package/dist/services/github-provisioner.js +0 -126
  793. package/dist/services/github-provisioner.js.map +0 -1
  794. package/dist/services/github-service.d.ts +0 -99
  795. package/dist/services/github-service.js +0 -310
  796. package/dist/services/github-service.js.map +0 -1
  797. package/dist/services/image-import-service.d.ts +0 -24
  798. package/dist/services/image-import-service.js +0 -108
  799. package/dist/services/image-import-service.js.map +0 -1
  800. package/dist/services/insights.d.ts +0 -38
  801. package/dist/services/insights.js +0 -269
  802. package/dist/services/insights.js.map +0 -1
  803. package/dist/services/meeting-processor.d.ts +0 -91
  804. package/dist/services/meeting-processor.js +0 -331
  805. package/dist/services/meeting-processor.js.map +0 -1
  806. package/dist/services/sync/collection-sync.d.ts +0 -60
  807. package/dist/services/sync/collection-sync.js +0 -509
  808. package/dist/services/sync/collection-sync.js.map +0 -1
  809. package/dist/services/sync/commit.d.ts +0 -60
  810. package/dist/services/sync/commit.js +0 -354
  811. package/dist/services/sync/commit.js.map +0 -1
  812. package/dist/services/sync/context-index.d.ts +0 -69
  813. package/dist/services/sync/context-index.js +0 -280
  814. package/dist/services/sync/context-index.js.map +0 -1
  815. package/dist/services/sync/data-fetcher.d.ts +0 -31
  816. package/dist/services/sync/data-fetcher.js +0 -12
  817. package/dist/services/sync/data-fetcher.js.map +0 -1
  818. package/dist/services/sync/derive.d.ts +0 -34
  819. package/dist/services/sync/derive.js +0 -164
  820. package/dist/services/sync/derive.js.map +0 -1
  821. package/dist/services/sync/enrichment-state.d.ts +0 -31
  822. package/dist/services/sync/enrichment-state.js +0 -63
  823. package/dist/services/sync/enrichment-state.js.map +0 -1
  824. package/dist/services/sync/enrichment.d.ts +0 -25
  825. package/dist/services/sync/enrichment.js +0 -121
  826. package/dist/services/sync/enrichment.js.map +0 -1
  827. package/dist/services/sync/entity-refresh.d.ts +0 -30
  828. package/dist/services/sync/entity-refresh.js +0 -275
  829. package/dist/services/sync/entity-refresh.js.map +0 -1
  830. package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
  831. package/dist/services/sync/frontmatter-extractor.js +0 -279
  832. package/dist/services/sync/frontmatter-extractor.js.map +0 -1
  833. package/dist/services/sync/graph-match-state.d.ts +0 -33
  834. package/dist/services/sync/graph-match-state.js +0 -61
  835. package/dist/services/sync/graph-match-state.js.map +0 -1
  836. package/dist/services/sync/graph-match.d.ts +0 -53
  837. package/dist/services/sync/graph-match.js +0 -316
  838. package/dist/services/sync/graph-match.js.map +0 -1
  839. package/dist/services/sync/graphrag-client.d.ts +0 -43
  840. package/dist/services/sync/graphrag-client.js +0 -94
  841. package/dist/services/sync/graphrag-client.js.map +0 -1
  842. package/dist/services/sync/graphrag-config.d.ts +0 -16
  843. package/dist/services/sync/graphrag-config.js +0 -39
  844. package/dist/services/sync/graphrag-config.js.map +0 -1
  845. package/dist/services/sync/graphrag-context.d.ts +0 -14
  846. package/dist/services/sync/graphrag-context.js +0 -109
  847. package/dist/services/sync/graphrag-context.js.map +0 -1
  848. package/dist/services/sync/graphrag-indexer.d.ts +0 -30
  849. package/dist/services/sync/graphrag-indexer.js +0 -358
  850. package/dist/services/sync/graphrag-indexer.js.map +0 -1
  851. package/dist/services/sync/llm.d.ts +0 -32
  852. package/dist/services/sync/llm.js +0 -115
  853. package/dist/services/sync/llm.js.map +0 -1
  854. package/dist/services/sync/mcp-client.d.ts +0 -71
  855. package/dist/services/sync/mcp-client.js +0 -299
  856. package/dist/services/sync/mcp-client.js.map +0 -1
  857. package/dist/services/sync/model-factory.d.ts +0 -13
  858. package/dist/services/sync/model-factory.js +0 -38
  859. package/dist/services/sync/model-factory.js.map +0 -1
  860. package/dist/services/sync/name-quality.d.ts +0 -31
  861. package/dist/services/sync/name-quality.js +0 -60
  862. package/dist/services/sync/name-quality.js.map +0 -1
  863. package/dist/services/sync/output-schemas.d.ts +0 -92
  864. package/dist/services/sync/output-schemas.js +0 -43
  865. package/dist/services/sync/output-schemas.js.map +0 -1
  866. package/dist/services/sync/prompts.d.ts +0 -19
  867. package/dist/services/sync/prompts.js +0 -128
  868. package/dist/services/sync/prompts.js.map +0 -1
  869. package/dist/services/sync/reconciler.d.ts +0 -48
  870. package/dist/services/sync/reconciler.js +0 -294
  871. package/dist/services/sync/reconciler.js.map +0 -1
  872. package/dist/services/sync/rest-client.d.ts +0 -40
  873. package/dist/services/sync/rest-client.js +0 -100
  874. package/dist/services/sync/rest-client.js.map +0 -1
  875. package/dist/services/sync/source-config.d.ts +0 -67
  876. package/dist/services/sync/source-config.js +0 -304
  877. package/dist/services/sync/source-config.js.map +0 -1
  878. package/dist/services/sync/source-definitions/asana.d.ts +0 -14
  879. package/dist/services/sync/source-definitions/asana.js +0 -42
  880. package/dist/services/sync/source-definitions/asana.js.map +0 -1
  881. package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
  882. package/dist/services/sync/source-definitions/definitions.js +0 -8
  883. package/dist/services/sync/source-definitions/definitions.js.map +0 -1
  884. package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
  885. package/dist/services/sync/source-definitions/gdrive.js +0 -68
  886. package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
  887. package/dist/services/sync/source-definitions/granola.d.ts +0 -2
  888. package/dist/services/sync/source-definitions/granola.js +0 -21
  889. package/dist/services/sync/source-definitions/granola.js.map +0 -1
  890. package/dist/services/sync/source-definitions/linear.d.ts +0 -2
  891. package/dist/services/sync/source-definitions/linear.js +0 -62
  892. package/dist/services/sync/source-definitions/linear.js.map +0 -1
  893. package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
  894. package/dist/services/sync/source-definitions/obsidian.js +0 -55
  895. package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
  896. package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
  897. package/dist/services/sync/source-definitions/pipedrive.js +0 -43
  898. package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
  899. package/dist/services/sync/staging.d.ts +0 -53
  900. package/dist/services/sync/staging.js +0 -130
  901. package/dist/services/sync/staging.js.map +0 -1
  902. package/dist/services/sync/structured-extractor.d.ts +0 -57
  903. package/dist/services/sync/structured-extractor.js +0 -584
  904. package/dist/services/sync/structured-extractor.js.map +0 -1
  905. package/dist/services/sync/sync-runner.d.ts +0 -32
  906. package/dist/services/sync/sync-runner.js +0 -195
  907. package/dist/services/sync/sync-runner.js.map +0 -1
  908. package/dist/services/sync/sync-state.d.ts +0 -43
  909. package/dist/services/sync/sync-state.js +0 -154
  910. package/dist/services/sync/sync-state.js.map +0 -1
  911. package/dist/services/sync/types.d.ts +0 -381
  912. package/dist/services/sync/types.js +0 -8
  913. package/dist/services/sync/types.js.map +0 -1
  914. package/dist/services/sync/unstructured-extractor.d.ts +0 -27
  915. package/dist/services/sync/unstructured-extractor.js +0 -185
  916. package/dist/services/sync/unstructured-extractor.js.map +0 -1
  917. package/dist/utils/merge-resolver.d.ts +0 -59
  918. package/dist/utils/merge-resolver.js +0 -303
  919. package/dist/utils/merge-resolver.js.map +0 -1
  920. package/dist/utils/workspace-config.d.ts +0 -8
  921. package/dist/utils/workspace-config.js +0 -22
  922. package/dist/utils/workspace-config.js.map +0 -1
  923. package/dist/web/_app/immutable/assets/0.QUqBcyuu.css +0 -1
  924. package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
  925. package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
  926. package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
  927. package/dist/web/_app/immutable/assets/2.5jNm7Pm1.css +0 -1
  928. package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
  929. package/dist/web/_app/immutable/assets/4.BjPwtpNd.css +0 -1
  930. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  931. package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
  932. package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
  933. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  934. package/dist/web/_app/immutable/assets/ViewToolbar.CZjsdjy4.css +0 -1
  935. package/dist/web/_app/immutable/assets/WorkspaceView.B-1DbivC.css +0 -1
  936. package/dist/web/_app/immutable/assets/wikilinks.CtSydmQl.css +0 -1
  937. package/dist/web/_app/immutable/chunks/3--t-YNA.js +0 -1
  938. package/dist/web/_app/immutable/chunks/5OU-4caN.js +0 -1
  939. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  940. package/dist/web/_app/immutable/chunks/B6FUcAv5.js +0 -1
  941. package/dist/web/_app/immutable/chunks/B9gDgSlp.js +0 -1
  942. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  943. package/dist/web/_app/immutable/chunks/BFtIWl5z.js +0 -1
  944. package/dist/web/_app/immutable/chunks/BHKpz6_7.js +0 -1
  945. package/dist/web/_app/immutable/chunks/BNfrhBeA.js +0 -1
  946. package/dist/web/_app/immutable/chunks/BgO5HlCg.js +0 -2
  947. package/dist/web/_app/immutable/chunks/BqnODQDb.js +0 -1
  948. package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
  949. package/dist/web/_app/immutable/chunks/BvIFhEn7.js +0 -2
  950. package/dist/web/_app/immutable/chunks/BvfdTHv8.js +0 -1
  951. package/dist/web/_app/immutable/chunks/BxGm65PH.js +0 -1
  952. package/dist/web/_app/immutable/chunks/BxyxnEKw.js +0 -1
  953. package/dist/web/_app/immutable/chunks/BygFIGq4.js +0 -1
  954. package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
  955. package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
  956. package/dist/web/_app/immutable/chunks/CIb_hHMy.js +0 -1
  957. package/dist/web/_app/immutable/chunks/CNKK6nZb.js +0 -1
  958. package/dist/web/_app/immutable/chunks/CQ5FjHZK.js +0 -1
  959. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  960. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  961. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  962. package/dist/web/_app/immutable/chunks/CaEaeeKb.js +0 -1
  963. package/dist/web/_app/immutable/chunks/Ch6e_wpP.js +0 -1
  964. package/dist/web/_app/immutable/chunks/Ci4zzCVB.js +0 -2
  965. package/dist/web/_app/immutable/chunks/CknqBVQE.js +0 -1
  966. package/dist/web/_app/immutable/chunks/Cmfiirqp.js +0 -4
  967. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  968. package/dist/web/_app/immutable/chunks/CrFpCC6p.js +0 -1
  969. package/dist/web/_app/immutable/chunks/CxX8hcT6.js +0 -1
  970. package/dist/web/_app/immutable/chunks/D0T1ps1G.js +0 -1
  971. package/dist/web/_app/immutable/chunks/D2ZEj9xD.js +0 -1
  972. package/dist/web/_app/immutable/chunks/D3sy0IkA.js +0 -2
  973. package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
  974. package/dist/web/_app/immutable/chunks/DHWoAC4y.js +0 -1
  975. package/dist/web/_app/immutable/chunks/DYYBfXU3.js +0 -1
  976. package/dist/web/_app/immutable/chunks/DiNPRA8T.js +0 -1
  977. package/dist/web/_app/immutable/chunks/DkjsqHkM.js +0 -1
  978. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  979. package/dist/web/_app/immutable/chunks/DpMCynC3.js +0 -1
  980. package/dist/web/_app/immutable/chunks/DqrybUuA.js +0 -1
  981. package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
  982. package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
  983. package/dist/web/_app/immutable/chunks/O9MAeAgV.js +0 -5
  984. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  985. package/dist/web/_app/immutable/chunks/SKSQ4m85.js +0 -2
  986. package/dist/web/_app/immutable/chunks/WEBTyD-H.js +0 -1
  987. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  988. package/dist/web/_app/immutable/chunks/bBXT5iJP.js +0 -1
  989. package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
  990. package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
  991. package/dist/web/_app/immutable/chunks/xkNhbnff.js +0 -1
  992. package/dist/web/_app/immutable/chunks/zoVX1Zab.js +0 -1
  993. package/dist/web/_app/immutable/entry/app.GfE4z2GO.js +0 -2
  994. package/dist/web/_app/immutable/entry/start.H-LFJK9u.js +0 -1
  995. package/dist/web/_app/immutable/nodes/0.Bwi7tTNC.js +0 -2
  996. package/dist/web/_app/immutable/nodes/1.DgNJPEWk.js +0 -1
  997. package/dist/web/_app/immutable/nodes/10.BW_XCD2O.js +0 -1
  998. package/dist/web/_app/immutable/nodes/11.DM7RX3Ms.js +0 -1
  999. package/dist/web/_app/immutable/nodes/12.DKgssZo8.js +0 -1
  1000. package/dist/web/_app/immutable/nodes/13.DCdmTre-.js +0 -1
  1001. package/dist/web/_app/immutable/nodes/2.DOA5QBVG.js +0 -266
  1002. package/dist/web/_app/immutable/nodes/3.bpoHQwAI.js +0 -5
  1003. package/dist/web/_app/immutable/nodes/4.ye0Vy7A1.js +0 -11
  1004. package/dist/web/_app/immutable/nodes/5.rxpnYrx_.js +0 -4
  1005. package/dist/web/_app/immutable/nodes/6.DP8HSxtc.js +0 -1
  1006. package/dist/web/_app/immutable/nodes/7.C1h4Bf-E.js +0 -1
  1007. package/dist/web/_app/immutable/nodes/8.BzmQ7S7Y.js +0 -1
  1008. package/dist/web/_app/immutable/nodes/9.CEakpXpF.js +0 -1
@@ -1,992 +0,0 @@
1
- /**
2
- * Sync & Workspace Tools for Studiograph Agent
3
- *
4
- * These tools allow the agent to:
5
- * - Sync external data into collections (collection-scoped sync)
6
- * - Refresh individual synced entities from their source
7
- * - Manage workspace git operations (commit, push, pull, status)
8
- * - Inspect MCP connectors for sync configuration
9
- */
10
- import { Type as T } from '@sinclair/typebox';
11
- import { spawnSync } from 'child_process';
12
- import { gitPush, gitPull } from '../../utils/git.js';
13
- import { existsSync } from 'fs';
14
- import { join } from 'path';
15
- import { homedir } from 'os';
16
- import { commitRepos } from '../../services/sync/commit.js';
17
- import { StagingManager } from '../../services/sync/staging.js';
18
- import { SourceConfigManager } from '../../services/sync/source-config.js';
19
- import { ConnectorManager } from '../../mcp/connector-manager.js';
20
- import { SOURCE_DEFINITIONS } from '../../services/sync/source-definitions/definitions.js';
21
- import { syncRepo, syncWorkspaceRule } from '../../services/sync/collection-sync.js';
22
- import { refreshEntity } from '../../services/sync/entity-refresh.js';
23
- import { wrapToolResult } from './graph-tools.js';
24
- import { VectorService } from '../../services/vector-service.js';
25
- import { BaseGraphManager } from '../../core/graph.js';
26
- import { loadUserConfig } from '../../core/user-config.js';
27
- export function createSyncTools(workspacePath, workspaceConfig, registryRef, getCurrentUser) {
28
- const getUser = getCurrentUser ?? (() => null);
29
- const getRegistry = () => registryRef?.registry ?? null;
30
- function adminOnly() {
31
- const user = getUser();
32
- if (!user)
33
- return null;
34
- if (user.role === 'admin')
35
- return null;
36
- return 'Sync operations require admin access.';
37
- }
38
- return [
39
- // ── Collection-scoped sync tools ─────────────────────────────────────────
40
- // Sync a collection — runs collection-level rules AND workspace-level rules targeting it
41
- {
42
- name: 'sync_collection',
43
- label: 'Sync Collection',
44
- description: 'Pull new entities from external sources into a collection (admin only). Runs both collection-level sync rules and any workspace-level sync rules that target this collection. Creates new entities only — existing entities (matched by source_ref) are never updated. Always confirm with the user before calling.',
45
- parameters: T.Object({
46
- collection: T.String({ description: 'Collection name to sync' }),
47
- }),
48
- execute: async (toolCallId, params) => {
49
- try {
50
- const denied = adminOnly();
51
- if (denied)
52
- return wrapToolResult({ success: false, error: denied });
53
- const progress = [];
54
- const { results } = await syncRepo({
55
- workspacePath,
56
- collectionName: params.collection,
57
- workspaceConfig,
58
- schemaExtensions: workspaceConfig.schema_extensions,
59
- onProgress: (msg) => progress.push(msg),
60
- });
61
- const totalCreated = results.reduce((s, r) => r.targets.reduce((ts, t) => ts + t.created + t.derived, 0) + s, 0);
62
- const totalSkipped = results.reduce((s, r) => r.targets.reduce((ts, t) => ts + t.skipped, 0) + s, 0);
63
- return wrapToolResult({
64
- success: true,
65
- results,
66
- summary: `Created ${totalCreated}, skipped ${totalSkipped}`,
67
- progress: progress.join('\n'),
68
- nextSteps: totalCreated > 0 ? 'Commit changes with workspace_commit' : undefined,
69
- });
70
- }
71
- catch (error) {
72
- return wrapToolResult({
73
- success: false,
74
- error: error instanceof Error ? error.message : 'Unknown error',
75
- });
76
- }
77
- },
78
- },
79
- // Run all workspace-level sync rules
80
- {
81
- name: 'sync_workspace',
82
- label: 'Sync Workspace',
83
- description: 'Run all workspace-level sync rules (admin only). Each rule fetches from its source once and distributes records to multiple target collections.',
84
- parameters: T.Object({}),
85
- execute: async (toolCallId, _params) => {
86
- try {
87
- const denied = adminOnly();
88
- if (denied)
89
- return wrapToolResult({ success: false, error: denied });
90
- const rules = workspaceConfig.sync ?? [];
91
- if (rules.length === 0) {
92
- return wrapToolResult({ success: true, results: [], summary: 'No workspace-level sync rules configured' });
93
- }
94
- const progress = [];
95
- const results = [];
96
- for (const rule of rules) {
97
- const result = await syncWorkspaceRule({
98
- workspacePath,
99
- rule,
100
- workspaceConfig,
101
- schemaExtensions: workspaceConfig.schema_extensions,
102
- onProgress: (msg) => progress.push(msg),
103
- });
104
- results.push(result);
105
- }
106
- const totalCreated = results.reduce((s, r) => r.targets.reduce((ts, t) => ts + t.created + t.derived, 0) + s, 0);
107
- return wrapToolResult({
108
- success: true,
109
- results,
110
- summary: `Ran ${rules.length} workspace rule(s), created ${totalCreated} entities`,
111
- progress: progress.join('\n'),
112
- nextSteps: totalCreated > 0 ? 'Commit changes with workspace_commit' : undefined,
113
- });
114
- }
115
- catch (error) {
116
- return wrapToolResult({
117
- success: false,
118
- error: error instanceof Error ? error.message : 'Unknown error',
119
- });
120
- }
121
- },
122
- },
123
- // Refresh a single synced entity
124
- {
125
- name: 'sync_refresh',
126
- label: 'Refresh Synced Entity',
127
- description: 'Refresh a single entity from its external source (admin only). Shows what fields have changed.',
128
- parameters: T.Object({
129
- entity_id: T.String({ description: 'Entity ID to refresh' }),
130
- collection: T.Optional(T.String({ description: 'Collection name (auto-detected if omitted)' })),
131
- entity_type: T.Optional(T.String({ description: 'Entity type (auto-detected if omitted)' })),
132
- apply: T.Optional(T.Boolean({ description: 'Apply changes immediately (default: false, just show diff)' })),
133
- }),
134
- execute: async (toolCallId, params) => {
135
- const denied = adminOnly();
136
- if (denied)
137
- return wrapToolResult({ success: false, error: denied });
138
- try {
139
- let { collection, entity_type, entity_id, apply } = params;
140
- // Auto-detect collection and entity_type if not provided
141
- if (!collection || !entity_type) {
142
- for (const repo of workspaceConfig.repos) {
143
- try {
144
- const repoPath = join(workspacePath, repo.path);
145
- if (!existsSync(repoPath))
146
- continue;
147
- const graph = new BaseGraphManager({
148
- repoPath,
149
- repoName: repo.name,
150
- gitUser: { id: 'agent', name: 'Agent', email: 'agent@studiograph.local' },
151
- });
152
- const entities = graph.list();
153
- const match = entities.find(e => e.data?.entity_id === entity_id);
154
- if (match) {
155
- collection = repo.name;
156
- entity_type = match.entityType;
157
- break;
158
- }
159
- }
160
- catch { /* skip */ }
161
- }
162
- }
163
- if (!collection || !entity_type) {
164
- return wrapToolResult({
165
- success: false,
166
- error: `Entity "${entity_id}" not found in any collection`,
167
- });
168
- }
169
- const result = await refreshEntity({
170
- workspacePath,
171
- collectionName: collection,
172
- entityType: entity_type,
173
- entityId: entity_id,
174
- workspaceConfig: workspaceConfig,
175
- schemaExtensions: workspaceConfig.schema_extensions,
176
- apply: apply ?? false,
177
- });
178
- if (result.diffs.length === 0 && !result.body_changed) {
179
- return wrapToolResult({
180
- success: true,
181
- message: 'Entity is already up to date with the source.',
182
- entity_id,
183
- source_ref: result.source_ref,
184
- });
185
- }
186
- return wrapToolResult({
187
- success: true,
188
- entity_id,
189
- source_ref: result.source_ref,
190
- applied: result.applied,
191
- changes: result.diffs.map(d => ({
192
- field: d.field,
193
- from: d.old_value,
194
- to: d.new_value,
195
- })),
196
- body_changed: result.body_changed,
197
- nextSteps: result.applied
198
- ? 'Changes applied. Commit with workspace_commit.'
199
- : 'Review the changes above and call sync_refresh with apply: true to apply them.',
200
- });
201
- }
202
- catch (error) {
203
- return wrapToolResult({
204
- success: false,
205
- error: error instanceof Error ? error.message : 'Unknown error',
206
- });
207
- }
208
- },
209
- },
210
- // Show sync status across collections
211
- {
212
- name: 'sync_status',
213
- label: 'Sync Status',
214
- description: 'Show which collections have sync rules configured, their sources, and last sync time. Use this when users ask about sync configuration or what has been synced.',
215
- parameters: T.Object({
216
- collection: T.Optional(T.String({ description: 'Filter to a specific collection' })),
217
- }),
218
- execute: async (toolCallId, params) => {
219
- try {
220
- const repos = params.collection
221
- ? workspaceConfig.repos.filter(r => r.name === params.collection)
222
- : workspaceConfig.repos;
223
- const collections = [];
224
- for (const repo of repos) {
225
- const syncRules = repo.sync;
226
- if (!syncRules || syncRules.length === 0)
227
- continue;
228
- let syncedCount = 0;
229
- let lastSync = null;
230
- try {
231
- const repoPath = join(workspacePath, repo.path);
232
- if (!existsSync(repoPath))
233
- continue;
234
- const graph = new BaseGraphManager({
235
- repoPath,
236
- repoName: repo.name,
237
- gitUser: { id: 'agent', name: 'Agent', email: 'agent@studiograph.local' },
238
- });
239
- for (const entity of graph.list()) {
240
- const syncedAt = entity.data?.synced_at;
241
- if (syncedAt) {
242
- syncedCount++;
243
- if (!lastSync || syncedAt > lastSync)
244
- lastSync = syncedAt;
245
- }
246
- }
247
- }
248
- catch { /* skip */ }
249
- collections.push({ name: repo.name, syncRules, syncedCount, lastSync });
250
- }
251
- // Also list available source definitions
252
- const configMgr = new SourceConfigManager(workspacePath);
253
- const sources = configMgr.getAll().map(s => s.name);
254
- // Check for new-format too
255
- const { readdirSync } = await import('fs');
256
- const sourcesDir = join(workspacePath, '.studiograph', 'sources');
257
- if (existsSync(sourcesDir)) {
258
- for (const file of readdirSync(sourcesDir)) {
259
- if (!file.endsWith('.json'))
260
- continue;
261
- const name = file.replace('.json', '');
262
- if (!sources.includes(name)) {
263
- const def = configMgr.getDefinition(name);
264
- if (def)
265
- sources.push(name);
266
- }
267
- }
268
- }
269
- return wrapToolResult({
270
- success: true,
271
- collections,
272
- availableSources: sources,
273
- message: collections.length > 0
274
- ? `${collections.length} collection(s) with sync rules`
275
- : 'No collections have sync rules configured.',
276
- });
277
- }
278
- catch (error) {
279
- return wrapToolResult({
280
- success: false,
281
- error: error instanceof Error ? error.message : 'Unknown error',
282
- });
283
- }
284
- },
285
- },
286
- // Git commit across workspace repos
287
- {
288
- name: 'workspace_commit',
289
- label: 'Commit Changes',
290
- description: 'Git commit entity changes across all workspace repos. Works after sync_apply, enrich_run, or manual edits. Always confirm with the user before calling this.',
291
- parameters: T.Object({
292
- messagePrefix: T.Optional(T.String({ description: 'Commit message prefix (default: "update")' })),
293
- }),
294
- execute: async (toolCallId, params) => {
295
- try {
296
- const progress = [];
297
- await commitRepos(workspacePath, (msg) => progress.push(msg), { messagePrefix: params.messagePrefix ?? 'update' });
298
- return wrapToolResult({
299
- success: true,
300
- progress: progress.join('\n'),
301
- });
302
- }
303
- catch (error) {
304
- return wrapToolResult({
305
- success: false,
306
- error: error instanceof Error ? error.message : 'Unknown error',
307
- });
308
- }
309
- },
310
- },
311
- // List sources and connectors
312
- {
313
- name: 'sync_list_sources',
314
- label: 'List Sync Sources',
315
- description: 'Read sync source configurations. Returns full source configs with entity_mappings, field maps, transforms, and all settings. Also lists available connectors and known source definitions. Use this whenever users ask about their source config.',
316
- parameters: T.Object({}),
317
- execute: async (toolCallId, params) => {
318
- try {
319
- const configMgr = new SourceConfigManager(workspacePath);
320
- const sources = configMgr.getAll();
321
- // Load connectors but strip sensitive fields
322
- const connectors = ConnectorManager.loadConfigs(workspacePath).map(c => ({
323
- name: c.name,
324
- url: c.url,
325
- description: c.description,
326
- }));
327
- const availableDefinitions = Object.keys(SOURCE_DEFINITIONS);
328
- return wrapToolResult({
329
- success: true,
330
- sources,
331
- connectors,
332
- availableDefinitions,
333
- });
334
- }
335
- catch (error) {
336
- return wrapToolResult({
337
- success: false,
338
- error: error instanceof Error ? error.message : 'Unknown error',
339
- });
340
- }
341
- },
342
- },
343
- // Set up a new source
344
- {
345
- name: 'sync_setup_source',
346
- label: 'Setup Sync Source',
347
- description: 'Add or reconfigure a sync source (admin only).',
348
- parameters: T.Object({
349
- name: T.String({ description: 'Source name — must match a built-in source definition (e.g. "linear", "pipedrive", "granola", "asana")' }),
350
- connector: T.Optional(T.String({ description: 'Connector name (defaults to source name)' })),
351
- force: T.Optional(T.Boolean({ description: 'Overwrite existing source config' })),
352
- }),
353
- execute: async (toolCallId, params) => {
354
- try {
355
- const denied = adminOnly();
356
- if (denied)
357
- return wrapToolResult({ success: false, error: denied });
358
- const configMgr = new SourceConfigManager(workspacePath);
359
- const connectorName = params.connector ?? params.name;
360
- // Check if source already exists
361
- const existing = configMgr.get(params.name);
362
- if (existing && !params.force) {
363
- return wrapToolResult({
364
- success: false,
365
- error: `Source "${params.name}" already exists. Use force: true to overwrite.`,
366
- });
367
- }
368
- // Verify connector exists
369
- const connectors = ConnectorManager.loadConfigs(workspacePath);
370
- const connector = connectors.find(c => c.name === connectorName);
371
- if (!connector) {
372
- return wrapToolResult({
373
- success: false,
374
- error: `Connector "${connectorName}" not found. Set up the connector first using the CLI: studiograph connector add ${connectorName}`,
375
- availableConnectors: connectors.map(c => c.name),
376
- });
377
- }
378
- // Built-in definition required — don't allow custom configs
379
- const definition = SOURCE_DEFINITIONS[params.name] ?? SOURCE_DEFINITIONS[connectorName];
380
- if (!definition || !definition.entities || Object.keys(definition.entities).length === 0) {
381
- return wrapToolResult({
382
- success: false,
383
- error: `No built-in source definition for "${params.name}". Available sources: ${Object.keys(SOURCE_DEFINITIONS).join(', ')}`,
384
- });
385
- }
386
- // Save as new-format source definition
387
- const savedDef = {
388
- ...definition,
389
- name: params.name,
390
- enabled: true,
391
- added_at: new Date().toISOString(),
392
- };
393
- configMgr.saveDefinition(params.name, savedDef);
394
- const entityTypes = Object.keys(definition.entities);
395
- return wrapToolResult({
396
- success: true,
397
- message: `Source "${params.name}" configured with ${entityTypes.length} entity type(s): ${entityTypes.join(', ')}. Assign it to a collection via sync rules in collection settings.`,
398
- definition: savedDef,
399
- });
400
- }
401
- catch (error) {
402
- return wrapToolResult({
403
- success: false,
404
- error: error instanceof Error ? error.message : 'Unknown error',
405
- });
406
- }
407
- },
408
- },
409
- // Remove a source
410
- {
411
- name: 'sync_remove_source',
412
- label: 'Remove Sync Source',
413
- description: 'Remove a sync source configuration (admin only).',
414
- parameters: T.Object({
415
- name: T.String({ description: 'Source name to remove' }),
416
- }),
417
- execute: async (toolCallId, params) => {
418
- try {
419
- const denied = adminOnly();
420
- if (denied)
421
- return wrapToolResult({ success: false, error: denied });
422
- const configMgr = new SourceConfigManager(workspacePath);
423
- const removed = configMgr.remove(params.name);
424
- return wrapToolResult({
425
- success: true,
426
- removed,
427
- message: removed
428
- ? `Source "${params.name}" removed.`
429
- : `Source "${params.name}" not found.`,
430
- });
431
- }
432
- catch (error) {
433
- return wrapToolResult({
434
- success: false,
435
- error: error instanceof Error ? error.message : 'Unknown error',
436
- });
437
- }
438
- },
439
- },
440
- // ── Connector introspection for sync config building ────────────────────
441
- // Inspect a connector's tools, categorized for sync
442
- {
443
- name: 'sync_inspect_connector',
444
- label: 'Inspect Connector for Sync',
445
- description: 'Inspect a connector\'s MCP tools to understand what data types are available for sync. Auto-categorizes tools by purpose (list, get, search, create) and detects syncable entity types with their list/get tool pairs. Use this when building a new source config to understand what the connector offers.',
446
- parameters: T.Object({
447
- connector: T.String({ description: 'Connector name (e.g. "pipedrive", "linear", "granola")' }),
448
- }),
449
- execute: async (toolCallId, params) => {
450
- try {
451
- const reg = getRegistry();
452
- const tools = reg?.connectors.get(params.connector);
453
- if (!tools) {
454
- const available = reg ? [...reg.connectors.keys()] : [];
455
- return wrapToolResult({
456
- success: false,
457
- error: available.length === 0
458
- ? 'No connectors loaded yet. Connectors may still be initializing, or none are configured.'
459
- : `Connector "${params.connector}" not found`,
460
- availableConnectors: available,
461
- });
462
- }
463
- // Categorize tools by purpose
464
- const categories = {
465
- list: [],
466
- get: [],
467
- search: [],
468
- create: [],
469
- update: [],
470
- delete: [],
471
- other: [],
472
- };
473
- for (const tool of tools) {
474
- const n = tool.localName;
475
- if (/(?:^list_|_list$|_list_)/.test(n))
476
- categories.list.push({ name: n, description: tool.description });
477
- else if (/(?:^get_|_get$|^read_|_read$)/.test(n))
478
- categories.get.push({ name: n, description: tool.description });
479
- else if (/(?:^search_|_search$)/.test(n))
480
- categories.search.push({ name: n, description: tool.description });
481
- else if (/(?:^create_|_create$)/.test(n))
482
- categories.create.push({ name: n, description: tool.description });
483
- else if (/(?:^update_|_update$)/.test(n))
484
- categories.update.push({ name: n, description: tool.description });
485
- else if (/(?:^delete_|_delete$|^remove_|_remove$)/.test(n))
486
- categories.delete.push({ name: n, description: tool.description });
487
- else
488
- categories.other.push({ name: n, description: tool.description });
489
- }
490
- // Detect syncable entity types (list + optional get pairs)
491
- const toolNames = new Set(tools.map(t => t.localName));
492
- const detected = [];
493
- for (const tool of categories.list) {
494
- // Extract entity type from tool name
495
- let sourceType = null;
496
- const listMatch = tool.name.match(/^list_(.+?)s?$/);
497
- if (listMatch)
498
- sourceType = listMatch[1];
499
- if (!sourceType) {
500
- const suffixMatch = tool.name.match(/^(.+?)s?_list(?:_|$)/);
501
- if (suffixMatch)
502
- sourceType = suffixMatch[1];
503
- }
504
- if (!sourceType)
505
- continue;
506
- if (detected.some(d => d.source_type === sourceType))
507
- continue;
508
- // Find corresponding get tool
509
- const getVariants = [`get_${sourceType}`, `${sourceType}_get`, `${sourceType}s_get`, `read_${sourceType}`];
510
- const getTool = getVariants.find(g => toolNames.has(g)) ?? null;
511
- detected.push({ source_type: sourceType, list_tool: tool.name, get_tool: getTool });
512
- }
513
- return wrapToolResult({
514
- success: true,
515
- connector: params.connector,
516
- totalTools: tools.length,
517
- categories: Object.fromEntries(Object.entries(categories).filter(([_, v]) => v.length > 0)),
518
- syncableTypes: detected,
519
- hint: detected.length > 0
520
- ? 'Use sync_sample_data to fetch a sample record from any list tool and see available fields for field_map building.'
521
- : 'No list tools detected. This connector may not support sync, or tools may use non-standard naming.',
522
- });
523
- }
524
- catch (error) {
525
- return wrapToolResult({
526
- success: false,
527
- error: error instanceof Error ? error.message : 'Unknown error',
528
- });
529
- }
530
- },
531
- },
532
- // Fetch sample data from a connector to inspect field shapes
533
- {
534
- name: 'sync_sample_data',
535
- label: 'Fetch Sample Data',
536
- description: 'Fetch a sample record from a connector to inspect its field structure. Calls a list tool with limit 1 and returns the field names, types, nesting, and sample values. Use this to auto-build field_map entries for sync source configs.',
537
- parameters: T.Object({
538
- connector: T.String({ description: 'Connector name (e.g. "pipedrive", "linear")' }),
539
- tool: T.String({ description: 'Tool name to call (e.g. "deals_list", "list_issues")' }),
540
- arguments: T.Optional(T.Object({}, { additionalProperties: true, description: 'Extra arguments to pass to the tool (limit is auto-set to 1 if the tool accepts it)' })),
541
- }),
542
- execute: async (toolCallId, params) => {
543
- try {
544
- const reg = getRegistry();
545
- const tools = reg?.connectors.get(params.connector);
546
- if (!tools) {
547
- const available = reg ? [...reg.connectors.keys()] : [];
548
- return wrapToolResult({
549
- success: false,
550
- error: available.length === 0
551
- ? 'No connectors loaded yet. Connectors may still be initializing, or none are configured.'
552
- : `Connector "${params.connector}" not found`,
553
- availableConnectors: available,
554
- });
555
- }
556
- const tool = tools.find(t => t.localName === params.tool);
557
- if (!tool) {
558
- return wrapToolResult({
559
- success: false,
560
- error: `Tool "${params.tool}" not found in ${params.connector}`,
561
- availableTools: tools.slice(0, 30).map(t => t.localName),
562
- });
563
- }
564
- // Build arguments — try to limit to 1 record
565
- const args = { ...params.arguments };
566
- const schema = tool.parameters;
567
- const props = schema?.properties || {};
568
- if ('limit' in props && !args.limit)
569
- args.limit = 1;
570
- if ('first' in props && !args.first)
571
- args.first = 1;
572
- if ('per_page' in props && !args.per_page)
573
- args.per_page = 1;
574
- if ('page_size' in props && !args.page_size)
575
- args.page_size = 1;
576
- // Call the tool
577
- const result = await tool.execute(toolCallId, args);
578
- const text = result?.content?.[0]?.text ?? '';
579
- // Parse the response
580
- let data;
581
- try {
582
- data = JSON.parse(text);
583
- }
584
- catch {
585
- // Some tools return double-wrapped content
586
- try {
587
- const outer = JSON.parse(text);
588
- if (outer.content?.[0]?.text) {
589
- data = JSON.parse(outer.content[0].text);
590
- }
591
- }
592
- catch {
593
- return wrapToolResult({
594
- success: true,
595
- rawResponse: text.slice(0, 3000),
596
- note: 'Response is not JSON. Showing raw text for manual inspection.',
597
- });
598
- }
599
- }
600
- // Extract the first record from common response shapes
601
- let record = null;
602
- if (Array.isArray(data)) {
603
- record = data[0];
604
- }
605
- else if (data?.data && Array.isArray(data.data)) {
606
- record = data.data[0];
607
- }
608
- else if (data?.items && Array.isArray(data.items)) {
609
- record = data.items[0];
610
- }
611
- else if (data?.results && Array.isArray(data.results)) {
612
- record = data.results[0];
613
- }
614
- else if (data?.nodes && Array.isArray(data.nodes)) {
615
- record = data.nodes[0];
616
- }
617
- else if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
618
- // Might be a single record response
619
- record = data;
620
- }
621
- if (!record) {
622
- return wrapToolResult({
623
- success: true,
624
- note: 'No records returned. The source may be empty or the tool may need different arguments.',
625
- responseShape: typeof data,
626
- responseKeys: data && typeof data === 'object' ? Object.keys(data) : [],
627
- });
628
- }
629
- // Analyze field structure
630
- const analyzeFields = (obj, prefix = '') => {
631
- const fields = [];
632
- if (!obj || typeof obj !== 'object')
633
- return fields;
634
- for (const [key, value] of Object.entries(obj)) {
635
- const path = prefix ? `${prefix}.${key}` : key;
636
- const type = value === null ? 'null'
637
- : Array.isArray(value) ? `array(${value.length})`
638
- : typeof value;
639
- // Truncate long strings for display
640
- let sample = value;
641
- if (typeof value === 'string' && value.length > 100) {
642
- sample = value.slice(0, 100) + '...';
643
- }
644
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
645
- fields.push({ path, type: 'object', sample: `{${Object.keys(value).join(', ')}}` });
646
- // Recurse one level into objects
647
- fields.push(...analyzeFields(value, path));
648
- }
649
- else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {
650
- fields.push({ path, type: `array(${value.length})`, sample: `[{${Object.keys(value[0]).join(', ')}}]` });
651
- }
652
- else {
653
- fields.push({ path, type, sample });
654
- }
655
- }
656
- return fields;
657
- };
658
- const fields = analyzeFields(record);
659
- // Suggest field_map entries for common entity fields
660
- const topLevelKeys = Object.keys(record);
661
- const suggestions = {};
662
- const nameFields = ['title', 'name', 'subject', 'summary'];
663
- const statusFields = ['status', 'state', 'stage'];
664
- const dateFields = ['created_at', 'createdAt', 'date', 'start_date', 'due_date', 'dueDate'];
665
- const descFields = ['description', 'content', 'body', 'notes', 'note'];
666
- for (const key of topLevelKeys) {
667
- if (nameFields.includes(key))
668
- suggestions[key] = 'name';
669
- else if (statusFields.includes(key))
670
- suggestions[key] = 'status';
671
- else if (dateFields.includes(key))
672
- suggestions[key] = 'date (use date-iso transform)';
673
- else if (descFields.includes(key))
674
- suggestions[key] = 'description (or use as content_from)';
675
- }
676
- return wrapToolResult({
677
- success: true,
678
- connector: params.connector,
679
- tool: params.tool,
680
- fieldCount: fields.length,
681
- fields,
682
- topLevelKeys,
683
- suggestedFieldMap: Object.keys(suggestions).length > 0 ? suggestions : undefined,
684
- hint: 'Use these field paths in field_map when configuring sync_setup_source. Nested fields use dot notation (e.g. "org_id.name": "organization").',
685
- });
686
- }
687
- catch (error) {
688
- return wrapToolResult({
689
- success: false,
690
- error: error instanceof Error ? error.message : 'Unknown error',
691
- });
692
- }
693
- },
694
- },
695
- // Reset workspace (discard uncommitted changes)
696
- {
697
- name: 'workspace_reset',
698
- label: 'Reset Workspace',
699
- description: 'Discard ALL uncommitted changes across workspace repos: reverts modified files (git checkout) and removes untracked files (git clean -fd). Also clears staging if present. This is destructive — always confirm with the user before calling.',
700
- parameters: T.Object({}),
701
- execute: async (toolCallId, _params) => {
702
- try {
703
- const repos = workspaceConfig.repos ?? [];
704
- const resetRepos = [];
705
- const details = [];
706
- for (const repo of repos) {
707
- const repoPath = join(workspacePath, repo.path);
708
- if (!existsSync(repoPath))
709
- continue;
710
- // Check if there are changes to reset
711
- const status = spawnSync('git', ['status', '--porcelain'], { cwd: repoPath, encoding: 'utf-8' });
712
- if (status.status !== 0 || !status.stdout.trim())
713
- continue;
714
- const fileCount = status.stdout.trim().split('\n').length;
715
- // Revert tracked file changes
716
- spawnSync('git', ['checkout', '--', '.'], { cwd: repoPath, encoding: 'utf-8' });
717
- // Remove untracked files and directories
718
- spawnSync('git', ['clean', '-fd'], { cwd: repoPath, encoding: 'utf-8' });
719
- resetRepos.push(repo.name);
720
- details.push(`${repo.name}: ${fileCount} file(s) reset`);
721
- }
722
- // Clear staging too
723
- let clearedStaging = false;
724
- try {
725
- const staging = new StagingManager(workspacePath);
726
- if (staging.hasStaging()) {
727
- staging.clear();
728
- clearedStaging = true;
729
- }
730
- }
731
- catch { /* staging dir may not exist */ }
732
- const parts = [];
733
- if (resetRepos.length > 0)
734
- parts.push(`Reset ${resetRepos.length} repo(s): ${resetRepos.join(', ')}`);
735
- if (clearedStaging)
736
- parts.push('Cleared staging');
737
- return wrapToolResult({
738
- success: true,
739
- resetRepos,
740
- details,
741
- clearedStaging,
742
- message: parts.length > 0 ? parts.join('. ') + '.' : 'No changes to reset.',
743
- });
744
- }
745
- catch (error) {
746
- return wrapToolResult({
747
- success: false,
748
- error: String(error instanceof Error ? error.message : error),
749
- });
750
- }
751
- },
752
- },
753
- // Reindex search
754
- {
755
- name: 'workspace_reindex',
756
- label: 'Reindex Search',
757
- description: 'Rebuild the search index (LanceDB) for all workspace collections. Run after sync, enrich, or manual entity edits to update search results.',
758
- parameters: T.Object({
759
- repo: T.Optional(T.String({ description: 'Reindex a single collection only' })),
760
- }),
761
- execute: async (toolCallId, params) => {
762
- try {
763
- const userConfig = loadUserConfig();
764
- const dbPath = userConfig.vector_db_path || join(homedir(), '.studiograph', 'vector');
765
- const vectorService = new VectorService(dbPath, userConfig.voyage_api_key);
766
- await vectorService.init();
767
- const allRepos = workspaceConfig.repos ?? [];
768
- const repos = params.repo
769
- ? allRepos.filter(r => r.name === params.repo)
770
- : allRepos;
771
- if (params.repo && repos.length === 0) {
772
- return wrapToolResult({
773
- success: false,
774
- error: `Repo "${params.repo}" not found in workspace`,
775
- availableRepos: allRepos.map(r => r.name),
776
- });
777
- }
778
- const repoResults = {};
779
- let totalIndexed = 0;
780
- for (const repo of repos) {
781
- const repoPath = join(workspacePath, repo.path);
782
- if (!existsSync(repoPath))
783
- continue;
784
- try {
785
- const graph = new BaseGraphManager({
786
- repoPath,
787
- repoName: repo.name,
788
- gitUser: { id: 'reindex', name: 'reindex', email: 'reindex@studiograph.local' },
789
- });
790
- const entities = graph.list();
791
- if (entities.length > 0) {
792
- await vectorService.upsertMany(repo.name, entities);
793
- }
794
- vectorService.setLastIndexedTime(repo.name);
795
- repoResults[repo.name] = entities.length;
796
- totalIndexed += entities.length;
797
- }
798
- catch (err) {
799
- repoResults[repo.name] = -1; // signal failure
800
- }
801
- }
802
- return wrapToolResult({
803
- success: true,
804
- indexed: totalIndexed,
805
- repos: repoResults,
806
- message: `Indexed ${totalIndexed} entities across ${repos.length} repo(s)`,
807
- });
808
- }
809
- catch (error) {
810
- return wrapToolResult({
811
- success: false,
812
- error: error instanceof Error ? error.message : 'Unknown error',
813
- });
814
- }
815
- },
816
- },
817
- // ── Graph status & review ─────────────────────────────────────────────────
818
- // Show changed files across repos
819
- {
820
- name: 'workspace_status',
821
- label: 'Workspace Status',
822
- description: 'Show uncommitted git changes across all workspace repos. Use this when users ask about pending changes, what files are modified, or whether there are changes ready to commit.',
823
- parameters: T.Object({}),
824
- execute: async (toolCallId, params) => {
825
- try {
826
- const repos = workspaceConfig.repos ?? [];
827
- const changes = {};
828
- let totalChanged = 0;
829
- for (const repo of repos) {
830
- const repoPath = join(workspacePath, repo.path);
831
- if (!existsSync(repoPath))
832
- continue;
833
- const result = spawnSync('git', ['status', '--porcelain'], { cwd: repoPath, encoding: 'utf-8' });
834
- if (result.status === 0 && result.stdout.trim()) {
835
- const files = result.stdout.trim().split('\n').filter(Boolean);
836
- changes[repo.name] = files;
837
- totalChanged += files.length;
838
- }
839
- }
840
- return wrapToolResult({
841
- success: true,
842
- totalChanged,
843
- changes,
844
- message: totalChanged > 0
845
- ? `${totalChanged} file${totalChanged === 1 ? '' : 's'} changed across ${Object.keys(changes).length} repo${Object.keys(changes).length === 1 ? '' : 's'}`
846
- : 'No uncommitted changes.',
847
- });
848
- }
849
- catch (error) {
850
- return wrapToolResult({
851
- success: false,
852
- error: error instanceof Error ? error.message : 'Unknown error',
853
- });
854
- }
855
- },
856
- },
857
- // Show diffs for review
858
- {
859
- name: 'workspace_review',
860
- label: 'Review Changes',
861
- description: 'Show git diffs for uncommitted entity changes across workspace repos. Use this to preview what will be committed. Optionally filter by entity type or specific file path.',
862
- parameters: T.Object({
863
- entityType: T.Optional(T.String({ description: 'Filter diff to a specific entity type (e.g. "person", "deal")' })),
864
- file: T.Optional(T.String({ description: 'Show diff for a specific file path' })),
865
- committed: T.Optional(T.Boolean({ description: 'Review last commit instead of uncommitted changes' })),
866
- }),
867
- execute: async (toolCallId, params) => {
868
- try {
869
- const repos = workspaceConfig.repos ?? [];
870
- const diffArgs = params.committed
871
- ? ['diff', 'HEAD~1..HEAD']
872
- : ['diff'];
873
- const diffs = {};
874
- for (const repo of repos) {
875
- const repoPath = join(workspacePath, repo.path);
876
- if (!existsSync(repoPath))
877
- continue;
878
- const args = [...diffArgs];
879
- if (params.file) {
880
- args.push('--', params.file);
881
- }
882
- else if (params.entityType) {
883
- args.push('--', `${params.entityType}/`);
884
- }
885
- const result = spawnSync('git', args, { cwd: repoPath, encoding: 'utf-8' });
886
- if (result.status === 0 && result.stdout.trim()) {
887
- // Truncate very large diffs to avoid overwhelming the context
888
- const diff = result.stdout;
889
- diffs[repo.name] = diff.length > 10000
890
- ? diff.slice(0, 10000) + '\n\n... (truncated, use --file for specific entities)'
891
- : diff;
892
- }
893
- }
894
- return wrapToolResult({
895
- success: true,
896
- hasDiffs: Object.keys(diffs).length > 0,
897
- diffs,
898
- message: Object.keys(diffs).length > 0
899
- ? `Diffs from ${Object.keys(diffs).length} repo(s)`
900
- : 'No changes found.',
901
- });
902
- }
903
- catch (error) {
904
- return wrapToolResult({
905
- success: false,
906
- error: error instanceof Error ? error.message : 'Unknown error',
907
- });
908
- }
909
- },
910
- },
911
- // Push all repos
912
- {
913
- name: 'workspace_push',
914
- label: 'Push Repos',
915
- description: 'Git push all workspace repos to their remotes. Always confirm with the user before calling this. IMPORTANT: Pushing does NOT automatically update a Railway deployment. If the workspace is deployed to Railway, call redeploy_railway after pushing to trigger a fresh deploy with the latest commits.',
916
- parameters: T.Object({}),
917
- execute: async (_toolCallId, _params) => {
918
- try {
919
- const repos = workspaceConfig.repos ?? [];
920
- const results = {};
921
- for (const repo of repos) {
922
- const repoPath = join(workspacePath, repo.path);
923
- if (!existsSync(repoPath))
924
- continue;
925
- try {
926
- results[repo.name] = gitPush(repoPath);
927
- }
928
- catch (err) {
929
- results[repo.name] = `error: ${err instanceof Error ? err.message : String(err)}`;
930
- }
931
- }
932
- const pushed = Object.values(results).filter(r => r === 'pushed').length;
933
- return wrapToolResult({
934
- success: true,
935
- results,
936
- message: pushed > 0
937
- ? `Pushed ${pushed} repo${pushed === 1 ? '' : 's'}`
938
- : 'All repos already up to date.',
939
- });
940
- }
941
- catch (error) {
942
- return wrapToolResult({
943
- success: false,
944
- error: error instanceof Error ? error.message : 'Unknown error',
945
- });
946
- }
947
- },
948
- },
949
- // Pull all repos
950
- {
951
- name: 'workspace_pull',
952
- label: 'Pull Repos',
953
- description: 'Git pull all workspace repos from their remotes. Reports conflicts if any.',
954
- parameters: T.Object({}),
955
- execute: async (_toolCallId, _params) => {
956
- try {
957
- const repos = workspaceConfig.repos ?? [];
958
- const results = {};
959
- for (const repo of repos) {
960
- const repoPath = join(workspacePath, repo.path);
961
- if (!existsSync(repoPath))
962
- continue;
963
- try {
964
- results[repo.name] = gitPull(repoPath);
965
- }
966
- catch (err) {
967
- results[repo.name] = `error: ${err instanceof Error ? err.message : String(err)}`;
968
- }
969
- }
970
- const updated = Object.values(results).filter(r => r === 'updated').length;
971
- const conflicts = Object.values(results).filter(r => r === 'conflict').length;
972
- return wrapToolResult({
973
- success: conflicts === 0,
974
- results,
975
- message: conflicts > 0
976
- ? `${conflicts} repo${conflicts === 1 ? '' : 's'} with merge conflicts — resolve manually`
977
- : updated > 0
978
- ? `Pulled updates in ${updated} repo${updated === 1 ? '' : 's'}`
979
- : 'All repos already up to date.',
980
- });
981
- }
982
- catch (error) {
983
- return wrapToolResult({
984
- success: false,
985
- error: error instanceof Error ? error.message : 'Unknown error',
986
- });
987
- }
988
- },
989
- },
990
- ];
991
- }
992
- //# sourceMappingURL=sync-tools.js.map