studiograph 1.3.47 → 1.3.48-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1067) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +117 -0
  3. package/dist/agent/agent-pool.js +287 -0
  4. package/dist/agent/agent-pool.js.map +1 -0
  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 +113 -22
  9. package/dist/agent/orchestrator.js +573 -181
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +36 -0
  12. package/dist/agent/prompts/entity-types-section.js +90 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +148 -69
  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 +77 -433
  19. package/dist/agent/skills/interview/entity-templates.md +193 -0
  20. package/dist/agent/skills/interview/question-domains.md +391 -0
  21. package/dist/agent/skills/interview/skill.md +204 -0
  22. package/dist/agent/skills/schema-rules.md +54 -0
  23. package/dist/agent/tools/capture-tools.d.ts +31 -0
  24. package/dist/agent/tools/capture-tools.js +40 -0
  25. package/dist/agent/tools/capture-tools.js.map +1 -0
  26. package/dist/agent/tools/folder-tools.d.ts +47 -0
  27. package/dist/agent/tools/folder-tools.js +249 -0
  28. package/dist/agent/tools/folder-tools.js.map +1 -0
  29. package/dist/agent/tools/fs-tools.d.ts +7 -6
  30. package/dist/agent/tools/fs-tools.js +5 -4
  31. package/dist/agent/tools/fs-tools.js.map +1 -1
  32. package/dist/agent/tools/graph-tools.d.ts +21 -58
  33. package/dist/agent/tools/graph-tools.js +635 -332
  34. package/dist/agent/tools/graph-tools.js.map +1 -1
  35. package/dist/agent/tools/history-tools.d.ts +95 -0
  36. package/dist/agent/tools/history-tools.js +461 -0
  37. package/dist/agent/tools/history-tools.js.map +1 -0
  38. package/dist/agent/tools/load-skill.d.ts +6 -5
  39. package/dist/agent/tools/load-skill.js +3 -3
  40. package/dist/agent/tools/load-skill.js.map +1 -1
  41. package/dist/agent/tools/ops-tools.d.ts +5 -4
  42. package/dist/agent/tools/ops-tools.js +130 -236
  43. package/dist/agent/tools/ops-tools.js.map +1 -1
  44. package/dist/agent/tools/permission-tools.d.ts +87 -17
  45. package/dist/agent/tools/permission-tools.js +233 -38
  46. package/dist/agent/tools/permission-tools.js.map +1 -1
  47. package/dist/agent/tools/tool-loader.js +5 -4
  48. package/dist/agent/tools/tool-loader.js.map +1 -1
  49. package/dist/agent/tools/web-tools.d.ts +18 -0
  50. package/dist/agent/tools/web-tools.js +283 -0
  51. package/dist/agent/tools/web-tools.js.map +1 -0
  52. package/dist/cli/commands/about.d.ts +1 -0
  53. package/dist/cli/commands/about.js +55 -3
  54. package/dist/cli/commands/about.js.map +1 -1
  55. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  56. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  57. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  58. package/dist/cli/commands/admin/audit.d.ts +21 -0
  59. package/dist/cli/commands/admin/audit.js +174 -0
  60. package/dist/cli/commands/admin/audit.js.map +1 -0
  61. package/dist/cli/commands/admin/backup.d.ts +54 -0
  62. package/dist/cli/commands/admin/backup.js +207 -0
  63. package/dist/cli/commands/admin/backup.js.map +1 -0
  64. package/dist/cli/commands/admin/folder.d.ts +11 -0
  65. package/dist/cli/commands/admin/folder.js +186 -0
  66. package/dist/cli/commands/admin/folder.js.map +1 -0
  67. package/dist/cli/commands/admin/index.d.ts +16 -0
  68. package/dist/cli/commands/admin/index.js +46 -0
  69. package/dist/cli/commands/admin/index.js.map +1 -0
  70. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  71. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  72. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  73. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  74. package/dist/cli/commands/admin/migrate.js +263 -0
  75. package/dist/cli/commands/admin/migrate.js.map +1 -0
  76. package/dist/cli/commands/admin/restore.d.ts +24 -0
  77. package/dist/cli/commands/admin/restore.js +228 -0
  78. package/dist/cli/commands/admin/restore.js.map +1 -0
  79. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  80. package/dist/cli/commands/admin/secrets.js +256 -0
  81. package/dist/cli/commands/admin/secrets.js.map +1 -0
  82. package/dist/cli/commands/admin/settings.d.ts +28 -0
  83. package/dist/cli/commands/admin/settings.js +284 -0
  84. package/dist/cli/commands/admin/settings.js.map +1 -0
  85. package/dist/cli/commands/admin/token.d.ts +42 -0
  86. package/dist/cli/commands/admin/token.js +126 -0
  87. package/dist/cli/commands/admin/token.js.map +1 -0
  88. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  89. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  90. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  91. package/dist/cli/commands/admin/user.d.ts +11 -0
  92. package/dist/cli/commands/admin/user.js +187 -0
  93. package/dist/cli/commands/admin/user.js.map +1 -0
  94. package/dist/cli/commands/clone.d.ts +25 -3
  95. package/dist/cli/commands/clone.js +142 -36
  96. package/dist/cli/commands/clone.js.map +1 -1
  97. package/dist/cli/commands/commit.d.ts +1 -1
  98. package/dist/cli/commands/commit.js +24 -11
  99. package/dist/cli/commands/commit.js.map +1 -1
  100. package/dist/cli/commands/config.d.ts +23 -107
  101. package/dist/cli/commands/config.js +52 -260
  102. package/dist/cli/commands/config.js.map +1 -1
  103. package/dist/cli/commands/connector.d.ts +10 -13
  104. package/dist/cli/commands/connector.js +16 -58
  105. package/dist/cli/commands/connector.js.map +1 -1
  106. package/dist/cli/commands/deploy.js +215 -68
  107. package/dist/cli/commands/deploy.js.map +1 -1
  108. package/dist/cli/commands/index.js +2 -2
  109. package/dist/cli/commands/index.js.map +1 -1
  110. package/dist/cli/commands/init.js +10 -30
  111. package/dist/cli/commands/init.js.map +1 -1
  112. package/dist/cli/commands/mcp.js +12 -4
  113. package/dist/cli/commands/mcp.js.map +1 -1
  114. package/dist/cli/commands/orphans.js +14 -30
  115. package/dist/cli/commands/orphans.js.map +1 -1
  116. package/dist/cli/commands/r2.d.ts +3 -0
  117. package/dist/cli/commands/r2.js +223 -204
  118. package/dist/cli/commands/r2.js.map +1 -1
  119. package/dist/cli/commands/redeploy.js +65 -12
  120. package/dist/cli/commands/redeploy.js.map +1 -1
  121. package/dist/cli/commands/reset.d.ts +22 -6
  122. package/dist/cli/commands/reset.js +142 -63
  123. package/dist/cli/commands/reset.js.map +1 -1
  124. package/dist/cli/commands/serve.js +209 -24
  125. package/dist/cli/commands/serve.js.map +1 -1
  126. package/dist/cli/commands/sync.d.ts +1 -1
  127. package/dist/cli/commands/sync.js +372 -202
  128. package/dist/cli/commands/sync.js.map +1 -1
  129. package/dist/cli/crypto-bundle.d.ts +39 -0
  130. package/dist/cli/crypto-bundle.js +94 -0
  131. package/dist/cli/crypto-bundle.js.map +1 -0
  132. package/dist/cli/index.js +24 -35
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/cli/railway-pin.d.ts +68 -0
  135. package/dist/cli/railway-pin.js +96 -0
  136. package/dist/cli/railway-pin.js.map +1 -0
  137. package/dist/cli/railway-provisioning.d.ts +53 -0
  138. package/dist/cli/railway-provisioning.js +85 -0
  139. package/dist/cli/railway-provisioning.js.map +1 -0
  140. package/dist/cli/setup-wizard.d.ts +33 -52
  141. package/dist/cli/setup-wizard.js +43 -68
  142. package/dist/cli/setup-wizard.js.map +1 -1
  143. package/dist/core/accent-palette.d.ts +22 -0
  144. package/dist/core/accent-palette.js +47 -0
  145. package/dist/core/accent-palette.js.map +1 -0
  146. package/dist/core/cell-anchor.d.ts +29 -0
  147. package/dist/core/cell-anchor.js +53 -0
  148. package/dist/core/cell-anchor.js.map +1 -0
  149. package/dist/core/comment-anchor.d.ts +41 -0
  150. package/dist/core/comment-anchor.js +147 -0
  151. package/dist/core/comment-anchor.js.map +1 -0
  152. package/dist/core/commit-messages.d.ts +57 -0
  153. package/dist/core/commit-messages.js +85 -0
  154. package/dist/core/commit-messages.js.map +1 -0
  155. package/dist/core/embeds.d.ts +56 -0
  156. package/dist/core/embeds.js +103 -0
  157. package/dist/core/embeds.js.map +1 -0
  158. package/dist/core/entity-body-templates.d.ts +21 -0
  159. package/dist/core/entity-body-templates.js +53 -0
  160. package/dist/core/entity-body-templates.js.map +1 -0
  161. package/dist/core/entity-types-catalog.d.ts +65 -0
  162. package/dist/core/entity-types-catalog.js +140 -0
  163. package/dist/core/entity-types-catalog.js.map +1 -0
  164. package/dist/core/folder-paths.d.ts +41 -0
  165. package/dist/core/folder-paths.js +95 -0
  166. package/dist/core/folder-paths.js.map +1 -0
  167. package/dist/core/folder-sidecar.d.ts +36 -0
  168. package/dist/core/folder-sidecar.js +91 -0
  169. package/dist/core/folder-sidecar.js.map +1 -0
  170. package/dist/core/graph.d.ts +675 -14
  171. package/dist/core/graph.js +2118 -314
  172. package/dist/core/graph.js.map +1 -1
  173. package/dist/core/history-diff.d.ts +35 -0
  174. package/dist/core/history-diff.js +114 -0
  175. package/dist/core/history-diff.js.map +1 -0
  176. package/dist/core/schema-registry.d.ts +59 -0
  177. package/dist/core/schema-registry.js +198 -0
  178. package/dist/core/schema-registry.js.map +1 -1
  179. package/dist/core/schemas/connector.d.ts +67 -0
  180. package/dist/core/schemas/connector.js +100 -0
  181. package/dist/core/schemas/connector.js.map +1 -0
  182. package/dist/core/schemas/workspace.d.ts +122 -0
  183. package/dist/core/schemas/workspace.js +211 -0
  184. package/dist/core/schemas/workspace.js.map +1 -0
  185. package/dist/core/secrets/SecretStore.d.ts +77 -0
  186. package/dist/core/secrets/SecretStore.js +13 -0
  187. package/dist/core/secrets/SecretStore.js.map +1 -0
  188. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  189. package/dist/core/secrets/SettingsResolver.js +80 -0
  190. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  191. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  192. package/dist/core/secrets/SettingsStore.js +9 -0
  193. package/dist/core/secrets/SettingsStore.js.map +1 -0
  194. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  195. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  196. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  197. package/dist/core/secrets/audit.d.ts +36 -0
  198. package/dist/core/secrets/audit.js +60 -0
  199. package/dist/core/secrets/audit.js.map +1 -0
  200. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  201. package/dist/core/secrets/auth-db-migration.js +653 -0
  202. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  203. package/dist/core/secrets/bundle.d.ts +141 -0
  204. package/dist/core/secrets/bundle.js +435 -0
  205. package/dist/core/secrets/bundle.js.map +1 -0
  206. package/dist/core/secrets/dual-write.d.ts +81 -0
  207. package/dist/core/secrets/dual-write.js +247 -0
  208. package/dist/core/secrets/dual-write.js.map +1 -0
  209. package/dist/core/secrets/encryption.d.ts +44 -0
  210. package/dist/core/secrets/encryption.js +97 -0
  211. package/dist/core/secrets/encryption.js.map +1 -0
  212. package/dist/core/secrets/index.d.ts +49 -0
  213. package/dist/core/secrets/index.js +74 -0
  214. package/dist/core/secrets/index.js.map +1 -0
  215. package/dist/core/secrets/master-key.d.ts +38 -0
  216. package/dist/core/secrets/master-key.js +122 -0
  217. package/dist/core/secrets/master-key.js.map +1 -0
  218. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  219. package/dist/core/secrets/probes/anthropic.js +300 -0
  220. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  221. package/dist/core/secrets/probes/brave.d.ts +9 -0
  222. package/dist/core/secrets/probes/brave.js +15 -0
  223. package/dist/core/secrets/probes/brave.js.map +1 -0
  224. package/dist/core/secrets/probes/r2.d.ts +15 -0
  225. package/dist/core/secrets/probes/r2.js +14 -0
  226. package/dist/core/secrets/probes/r2.js.map +1 -0
  227. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  228. package/dist/core/secrets/probes/voyage.js +52 -0
  229. package/dist/core/secrets/probes/voyage.js.map +1 -0
  230. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  231. package/dist/core/secrets/r2-structural-migration.js +109 -0
  232. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  233. package/dist/core/secrets/read-flip.d.ts +59 -0
  234. package/dist/core/secrets/read-flip.js +87 -0
  235. package/dist/core/secrets/read-flip.js.map +1 -0
  236. package/dist/core/secrets/registry.d.ts +188 -0
  237. package/dist/core/secrets/registry.js +598 -0
  238. package/dist/core/secrets/registry.js.map +1 -0
  239. package/dist/core/types.d.ts +77 -455
  240. package/dist/core/types.js +17 -3
  241. package/dist/core/types.js.map +1 -1
  242. package/dist/core/user-config.d.ts +75 -7
  243. package/dist/core/user-config.js +155 -7
  244. package/dist/core/user-config.js.map +1 -1
  245. package/dist/core/validation.d.ts +717 -1791
  246. package/dist/core/validation.js +357 -228
  247. package/dist/core/validation.js.map +1 -1
  248. package/dist/core/workspace-manager.d.ts +79 -12
  249. package/dist/core/workspace-manager.js +213 -73
  250. package/dist/core/workspace-manager.js.map +1 -1
  251. package/dist/core/workspace.d.ts +19 -5
  252. package/dist/core/workspace.js +69 -35
  253. package/dist/core/workspace.js.map +1 -1
  254. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  255. package/dist/mcp/comment-virtual-entity.js +71 -0
  256. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  257. package/dist/mcp/connector-manager.d.ts +94 -13
  258. package/dist/mcp/connector-manager.js +283 -62
  259. package/dist/mcp/connector-manager.js.map +1 -1
  260. package/dist/mcp/oauth-provider.d.ts +27 -33
  261. package/dist/mcp/oauth-provider.js +65 -134
  262. package/dist/mcp/oauth-provider.js.map +1 -1
  263. package/dist/mcp/oauth-registry.d.ts +62 -0
  264. package/dist/mcp/oauth-registry.js +85 -0
  265. package/dist/mcp/oauth-registry.js.map +1 -0
  266. package/dist/mcp/server.d.ts +11 -3
  267. package/dist/mcp/server.js +30 -5
  268. package/dist/mcp/server.js.map +1 -1
  269. package/dist/mcp/state-signer.d.ts +41 -0
  270. package/dist/mcp/state-signer.js +120 -0
  271. package/dist/mcp/state-signer.js.map +1 -0
  272. package/dist/mcp/tools.d.ts +35 -2
  273. package/dist/mcp/tools.js +1051 -117
  274. package/dist/mcp/tools.js.map +1 -1
  275. package/dist/server/__tests__/helpers/graph-api.d.ts +18 -0
  276. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  277. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  278. package/dist/server/body-write-coordinator.d.ts +151 -0
  279. package/dist/server/body-write-coordinator.js +161 -0
  280. package/dist/server/body-write-coordinator.js.map +1 -0
  281. package/dist/server/cloud-billing-flow.d.ts +32 -0
  282. package/dist/server/cloud-billing-flow.js +75 -0
  283. package/dist/server/cloud-billing-flow.js.map +1 -0
  284. package/dist/server/commit-audit.d.ts +26 -0
  285. package/dist/server/commit-audit.js +30 -0
  286. package/dist/server/commit-audit.js.map +1 -0
  287. package/dist/server/index.d.ts +14 -3
  288. package/dist/server/index.js +451 -193
  289. package/dist/server/index.js.map +1 -1
  290. package/dist/server/middleware/sanitize.d.ts +46 -0
  291. package/dist/server/middleware/sanitize.js +171 -0
  292. package/dist/server/middleware/sanitize.js.map +1 -0
  293. package/dist/server/routes/asset-api.d.ts +10 -0
  294. package/dist/server/routes/asset-api.js +294 -0
  295. package/dist/server/routes/asset-api.js.map +1 -0
  296. package/dist/server/routes/audit-api.d.ts +24 -0
  297. package/dist/server/routes/audit-api.js +117 -0
  298. package/dist/server/routes/audit-api.js.map +1 -0
  299. package/dist/server/routes/auth-api.d.ts +3 -2
  300. package/dist/server/routes/auth-api.js +519 -38
  301. package/dist/server/routes/auth-api.js.map +1 -1
  302. package/dist/server/routes/capture-api.d.ts +18 -0
  303. package/dist/server/routes/capture-api.js +257 -0
  304. package/dist/server/routes/capture-api.js.map +1 -0
  305. package/dist/server/routes/chat.d.ts +4 -1
  306. package/dist/server/routes/chat.js +298 -88
  307. package/dist/server/routes/chat.js.map +1 -1
  308. package/dist/server/routes/comments-api.d.ts +15 -0
  309. package/dist/server/routes/comments-api.js +444 -0
  310. package/dist/server/routes/comments-api.js.map +1 -0
  311. package/dist/server/routes/config-api.d.ts +21 -0
  312. package/dist/server/routes/config-api.js +256 -0
  313. package/dist/server/routes/config-api.js.map +1 -0
  314. package/dist/server/routes/connectors-api.d.ts +17 -0
  315. package/dist/server/routes/connectors-api.js +410 -0
  316. package/dist/server/routes/connectors-api.js.map +1 -0
  317. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  318. package/dist/server/routes/event-ingest-api.js +125 -0
  319. package/dist/server/routes/event-ingest-api.js.map +1 -0
  320. package/dist/server/routes/git-http.d.ts +3 -3
  321. package/dist/server/routes/git-http.js +86 -38
  322. package/dist/server/routes/git-http.js.map +1 -1
  323. package/dist/server/routes/graph-api-access.d.ts +35 -0
  324. package/dist/server/routes/graph-api-access.js +105 -0
  325. package/dist/server/routes/graph-api-access.js.map +1 -0
  326. package/dist/server/routes/graph-api.d.ts +3 -2
  327. package/dist/server/routes/graph-api.js +1321 -263
  328. package/dist/server/routes/graph-api.js.map +1 -1
  329. package/dist/server/routes/health.d.ts +18 -0
  330. package/dist/server/routes/health.js +74 -0
  331. package/dist/server/routes/health.js.map +1 -0
  332. package/dist/server/routes/insights-api.d.ts +1 -2
  333. package/dist/server/routes/insights-api.js +149 -41
  334. package/dist/server/routes/insights-api.js.map +1 -1
  335. package/dist/server/routes/mcp.d.ts +7 -3
  336. package/dist/server/routes/mcp.js +22 -6
  337. package/dist/server/routes/mcp.js.map +1 -1
  338. package/dist/server/routes/permissions-api.d.ts +9 -2
  339. package/dist/server/routes/permissions-api.js +87 -30
  340. package/dist/server/routes/permissions-api.js.map +1 -1
  341. package/dist/server/routes/r2-api.d.ts +25 -0
  342. package/dist/server/routes/r2-api.js +276 -0
  343. package/dist/server/routes/r2-api.js.map +1 -0
  344. package/dist/server/routes/secrets-api.d.ts +36 -0
  345. package/dist/server/routes/secrets-api.js +308 -0
  346. package/dist/server/routes/secrets-api.js.map +1 -0
  347. package/dist/server/routes/settings-api.d.ts +29 -0
  348. package/dist/server/routes/settings-api.js +180 -0
  349. package/dist/server/routes/settings-api.js.map +1 -0
  350. package/dist/server/routes/url-api.d.ts +7 -0
  351. package/dist/server/routes/url-api.js +74 -0
  352. package/dist/server/routes/url-api.js.map +1 -0
  353. package/dist/server/routes/views-api.js +81 -7
  354. package/dist/server/routes/views-api.js.map +1 -1
  355. package/dist/server/routes/workspace-api.d.ts +2 -1
  356. package/dist/server/routes/workspace-api.js +124 -35
  357. package/dist/server/routes/workspace-api.js.map +1 -1
  358. package/dist/server/routes/ws.d.ts +2 -1
  359. package/dist/server/routes/ws.js +64 -16
  360. package/dist/server/routes/ws.js.map +1 -1
  361. package/dist/server/session-manager.d.ts +48 -5
  362. package/dist/server/session-manager.js +182 -15
  363. package/dist/server/session-manager.js.map +1 -1
  364. package/dist/server/ws-hub.d.ts +138 -14
  365. package/dist/server/ws-hub.js +0 -0
  366. package/dist/server/ws-hub.js.map +1 -1
  367. package/dist/server/yjs-manager.d.ts +285 -7
  368. package/dist/server/yjs-manager.js +907 -36
  369. package/dist/server/yjs-manager.js.map +1 -1
  370. package/dist/server/yjs-persistence.d.ts +165 -0
  371. package/dist/server/yjs-persistence.js +557 -0
  372. package/dist/server/yjs-persistence.js.map +1 -0
  373. package/dist/server/yjs-text-diff.d.ts +32 -0
  374. package/dist/server/yjs-text-diff.js +61 -0
  375. package/dist/server/yjs-text-diff.js.map +1 -0
  376. package/dist/services/access-control.d.ts +73 -0
  377. package/dist/services/access-control.js +146 -0
  378. package/dist/services/access-control.js.map +1 -0
  379. package/dist/services/asset-listing.d.ts +39 -0
  380. package/dist/services/asset-listing.js +125 -0
  381. package/dist/services/asset-listing.js.map +1 -0
  382. package/dist/services/asset-upload-service.d.ts +53 -0
  383. package/dist/services/asset-upload-service.js +201 -0
  384. package/dist/services/asset-upload-service.js.map +1 -0
  385. package/dist/services/assets/asset-index-service.d.ts +82 -0
  386. package/dist/services/assets/asset-index-service.js +167 -0
  387. package/dist/services/assets/asset-index-service.js.map +1 -0
  388. package/dist/services/assets/base.d.ts +44 -0
  389. package/dist/services/assets/base.js +55 -0
  390. package/dist/services/assets/base.js.map +1 -1
  391. package/dist/services/assets/index.d.ts +69 -1
  392. package/dist/services/assets/index.js +125 -0
  393. package/dist/services/assets/index.js.map +1 -1
  394. package/dist/services/assets/local.d.ts +12 -1
  395. package/dist/services/assets/local.js +100 -1
  396. package/dist/services/assets/local.js.map +1 -1
  397. package/dist/services/assets/r2-sync.d.ts +88 -0
  398. package/dist/services/assets/r2-sync.js +412 -0
  399. package/dist/services/assets/r2-sync.js.map +1 -0
  400. package/dist/services/assets/r2.d.ts +34 -1
  401. package/dist/services/assets/r2.js +93 -1
  402. package/dist/services/assets/r2.js.map +1 -1
  403. package/dist/services/auth-service.d.ts +314 -36
  404. package/dist/services/auth-service.js +1126 -139
  405. package/dist/services/auth-service.js.map +1 -1
  406. package/dist/services/bookmark-import-service.d.ts +49 -0
  407. package/dist/services/bookmark-import-service.js +250 -0
  408. package/dist/services/bookmark-import-service.js.map +1 -0
  409. package/dist/services/cloud-inference-billing.d.ts +64 -0
  410. package/dist/services/cloud-inference-billing.js +313 -0
  411. package/dist/services/cloud-inference-billing.js.map +1 -0
  412. package/dist/services/comment-service.d.ts +97 -0
  413. package/dist/services/comment-service.js +341 -0
  414. package/dist/services/comment-service.js.map +1 -0
  415. package/dist/services/csv-service.d.ts +22 -17
  416. package/dist/services/csv-service.js +55 -92
  417. package/dist/services/csv-service.js.map +1 -1
  418. package/dist/services/entity-mutations.d.ts +161 -0
  419. package/dist/services/entity-mutations.js +296 -0
  420. package/dist/services/entity-mutations.js.map +1 -0
  421. package/dist/services/event-processor.d.ts +104 -0
  422. package/dist/services/event-processor.js +441 -0
  423. package/dist/services/event-processor.js.map +1 -0
  424. package/dist/services/folder-creation.d.ts +33 -0
  425. package/dist/services/folder-creation.js +103 -0
  426. package/dist/services/folder-creation.js.map +1 -0
  427. package/dist/services/git.d.ts +54 -0
  428. package/dist/services/git.js +188 -54
  429. package/dist/services/git.js.map +1 -1
  430. package/dist/services/graph-maintenance.d.ts +42 -0
  431. package/dist/services/graph-maintenance.js +143 -0
  432. package/dist/services/graph-maintenance.js.map +1 -0
  433. package/dist/services/import-service.d.ts +45 -2
  434. package/dist/services/import-service.js +304 -100
  435. package/dist/services/import-service.js.map +1 -1
  436. package/dist/services/lint-service.js +9 -16
  437. package/dist/services/lint-service.js.map +1 -1
  438. package/dist/services/markdown.d.ts +12 -1
  439. package/dist/services/markdown.js +71 -6
  440. package/dist/services/markdown.js.map +1 -1
  441. package/dist/services/memory-service.d.ts +22 -14
  442. package/dist/services/memory-service.js +53 -35
  443. package/dist/services/memory-service.js.map +1 -1
  444. package/dist/services/mention-detector.d.ts +23 -0
  445. package/dist/services/mention-detector.js +47 -0
  446. package/dist/services/mention-detector.js.map +1 -0
  447. package/dist/services/notification-broadcast.d.ts +32 -0
  448. package/dist/services/notification-broadcast.js +38 -0
  449. package/dist/services/notification-broadcast.js.map +1 -0
  450. package/dist/services/notification-service.d.ts +41 -0
  451. package/dist/services/notification-service.js +100 -0
  452. package/dist/services/notification-service.js.map +1 -0
  453. package/dist/services/personal-folder.d.ts +40 -0
  454. package/dist/services/personal-folder.js +101 -0
  455. package/dist/services/personal-folder.js.map +1 -0
  456. package/dist/services/user-person-bridge.d.ts +118 -0
  457. package/dist/services/user-person-bridge.js +306 -0
  458. package/dist/services/user-person-bridge.js.map +1 -0
  459. package/dist/services/vector-service.d.ts +146 -6
  460. package/dist/services/vector-service.js +276 -13
  461. package/dist/services/vector-service.js.map +1 -1
  462. package/dist/services/workspace-access.d.ts +106 -0
  463. package/dist/services/workspace-access.js +149 -0
  464. package/dist/services/workspace-access.js.map +1 -0
  465. package/dist/utils/git.d.ts +17 -2
  466. package/dist/utils/git.js +23 -7
  467. package/dist/utils/git.js.map +1 -1
  468. package/dist/utils/log.d.ts +42 -0
  469. package/dist/utils/log.js +137 -0
  470. package/dist/utils/log.js.map +1 -0
  471. package/dist/utils/preflight.js +2 -2
  472. package/dist/utils/preflight.js.map +1 -1
  473. package/dist/utils/version-checker.d.ts +12 -19
  474. package/dist/utils/version-checker.js +14 -104
  475. package/dist/utils/version-checker.js.map +1 -1
  476. package/dist/web/_app/immutable/assets/0.DOumm94J.css +2 -0
  477. package/dist/web/_app/immutable/assets/13.DlIf1mKh.css +1 -0
  478. package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
  479. package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
  480. package/dist/web/_app/immutable/assets/2.BftNiAA4.css +1 -0
  481. package/dist/web/_app/immutable/assets/3.CV0abekd.css +1 -0
  482. package/dist/web/_app/immutable/assets/4.BgXzUTTk.css +1 -0
  483. package/dist/web/_app/immutable/assets/9.gsF-Ne6_.css +1 -0
  484. package/dist/web/_app/immutable/assets/AgentOverlay.CpvH9rhf.css +1 -0
  485. package/dist/web/_app/immutable/assets/AssetManagerModal.BKJfPAPk.css +1 -0
  486. package/dist/web/_app/immutable/assets/CalendarView.bNewSxkH.css +1 -0
  487. package/dist/web/_app/immutable/assets/ChevronDown.Bz0FjM7b.css +1 -0
  488. package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
  489. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  490. package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
  491. package/dist/web/_app/immutable/assets/GalleryView.DgvSjS0I.css +1 -0
  492. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  493. package/dist/web/_app/immutable/assets/KanbanView.D0QbZFd6.css +1 -0
  494. package/dist/web/_app/immutable/assets/SettingsDialog.DYWYMFSO.css +1 -0
  495. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  496. package/dist/web/_app/immutable/assets/StopFilledAlt.CkPrHdPD.css +1 -0
  497. package/dist/web/_app/immutable/assets/TimelineView.DA-H6dvv.css +1 -0
  498. package/dist/web/_app/immutable/assets/WorkspaceView.BS1ildu7.css +1 -0
  499. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  500. package/dist/web/_app/immutable/assets/formatting.vV0ne105.css +1 -0
  501. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  502. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  503. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  504. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  505. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  506. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  507. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  508. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  509. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  510. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  511. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  512. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  513. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  514. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  515. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  516. package/dist/web/_app/immutable/assets/list-columns.BrRrAiZ7.css +1 -0
  517. package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
  518. package/dist/web/_app/immutable/assets/sheet.DJPuqnTg.css +1 -0
  519. package/dist/web/_app/immutable/assets/speech-dictation.C5CYFhS1.css +1 -0
  520. package/dist/web/_app/immutable/chunks/0edH8sO82.js +1 -0
  521. package/dist/web/_app/immutable/chunks/0iDDDyaZ.js +1 -0
  522. package/dist/web/_app/immutable/chunks/7-y0CE1z.js +1 -0
  523. package/dist/web/_app/immutable/chunks/7Bu427my2.js +184 -0
  524. package/dist/web/_app/immutable/chunks/B-V5eMSw2.js +1 -0
  525. package/dist/web/_app/immutable/chunks/B-i9_YVM.js +1 -0
  526. package/dist/web/_app/immutable/chunks/B15-kvCe.js +1 -0
  527. package/dist/web/_app/immutable/chunks/B4cFqqUS.js +3 -0
  528. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  529. package/dist/web/_app/immutable/chunks/B7hznOQp.js +1 -0
  530. package/dist/web/_app/immutable/chunks/B7tbGyiU2.js +1 -0
  531. package/dist/web/_app/immutable/chunks/B8-Lm86o2.js +1 -0
  532. package/dist/web/_app/immutable/chunks/BBxt8lpa.js +1 -0
  533. package/dist/web/_app/immutable/chunks/BCaRi2AF.js +1 -0
  534. package/dist/web/_app/immutable/chunks/BJReLGMs.js +1 -0
  535. package/dist/web/_app/immutable/chunks/BKzV82vD2.js +83 -0
  536. package/dist/web/_app/immutable/chunks/BLHrJvbG.js +1 -0
  537. package/dist/web/_app/immutable/chunks/BQULA6er.js +4 -0
  538. package/dist/web/_app/immutable/chunks/BQW-EDgP2.js +224 -0
  539. package/dist/web/_app/immutable/chunks/BR6jMpLB.js +1 -0
  540. package/dist/web/_app/immutable/chunks/BUBMGU8t2.js +2 -0
  541. package/dist/web/_app/immutable/chunks/BVnuLlVg.js +1 -0
  542. package/dist/web/_app/immutable/chunks/BYokDzwE.js +1 -0
  543. package/dist/web/_app/immutable/chunks/B_Avv9jQ2.js +1 -0
  544. package/dist/web/_app/immutable/chunks/Bbp76jaT2.js +1 -0
  545. package/dist/web/_app/immutable/chunks/BddNmQ8j.js +1 -0
  546. package/dist/web/_app/immutable/chunks/BiJjH5mJ.js +2 -0
  547. package/dist/web/_app/immutable/chunks/BlyFGPFV.js +22 -0
  548. package/dist/web/_app/immutable/chunks/Bt88HrRx.js +1 -0
  549. package/dist/web/_app/immutable/chunks/Bu2iU6hh.js +67 -0
  550. package/dist/web/_app/immutable/chunks/Buih1pxI.js +1 -0
  551. package/dist/web/_app/immutable/chunks/BwwLJVvR.js +1 -0
  552. package/dist/web/_app/immutable/chunks/C0RpyyYZ.js +7 -0
  553. package/dist/web/_app/immutable/chunks/C2l-EXsT2.js +1 -0
  554. package/dist/web/_app/immutable/chunks/C35TIzaB.js +1 -0
  555. package/dist/web/_app/immutable/chunks/C3OdK8z_2.js +1 -0
  556. package/dist/web/_app/immutable/chunks/C6Nx0jpM.js +1 -0
  557. package/dist/web/_app/immutable/chunks/CA7O0J_u2.js +1 -0
  558. package/dist/web/_app/immutable/chunks/CAwjrHdk.js +23 -0
  559. package/dist/web/_app/immutable/chunks/CCLR-AJL2.js +185 -0
  560. package/dist/web/_app/immutable/chunks/CD0X7XPW.js +6 -0
  561. package/dist/web/_app/immutable/chunks/CDTjuBSm2.js +1 -0
  562. package/dist/web/_app/immutable/chunks/CSUrYOis.js +1 -0
  563. package/dist/web/_app/immutable/chunks/CUPSJObs.js +1 -0
  564. package/dist/web/_app/immutable/chunks/CUoGvuxK2.js +2 -0
  565. package/dist/web/_app/immutable/chunks/CWh8aehb.js +1 -0
  566. package/dist/web/_app/immutable/chunks/CY4XVBP0.js +1 -0
  567. package/dist/web/_app/immutable/chunks/CYTTTma0.js +3 -0
  568. package/dist/web/_app/immutable/chunks/CaoriuNq.js +1 -0
  569. package/dist/web/_app/immutable/chunks/CcsSt9AW2.js +1 -0
  570. package/dist/web/_app/immutable/chunks/Cd4VfAZC.js +2 -0
  571. package/dist/web/_app/immutable/chunks/CePZ1985.js +1 -0
  572. package/dist/web/_app/immutable/chunks/Cei8CKT4.js +1 -0
  573. package/dist/web/_app/immutable/chunks/CheXrbDk.js +1 -0
  574. package/dist/web/_app/immutable/chunks/CkLfUXwy.js +1 -0
  575. package/dist/web/_app/immutable/chunks/Cl-W0JYt.js +2 -0
  576. package/dist/web/_app/immutable/chunks/Cna7tYp-.js +1 -0
  577. package/dist/web/_app/immutable/chunks/Czwe4sGU2.js +3 -0
  578. package/dist/web/_app/immutable/chunks/D41CbXmM.js +1 -0
  579. package/dist/web/_app/immutable/chunks/D83_Ss42.js +1 -0
  580. package/dist/web/_app/immutable/chunks/D9NgbGbO2.js +9 -0
  581. package/dist/web/_app/immutable/chunks/DA-BuZei.js +2 -0
  582. package/dist/web/_app/immutable/chunks/DAXW5iLp.js +1 -0
  583. package/dist/web/_app/immutable/chunks/DCNJWlho2.js +1 -0
  584. package/dist/web/_app/immutable/chunks/DCtgLRl52.js +1 -0
  585. package/dist/web/_app/immutable/chunks/DH0epITQ2.js +1 -0
  586. package/dist/web/_app/immutable/chunks/DIb5rAPU2.js +1 -0
  587. package/dist/web/_app/immutable/chunks/DOmH4G9o2.js +14 -0
  588. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  589. package/dist/web/_app/immutable/chunks/DQ_Xokap2.js +1 -0
  590. package/dist/web/_app/immutable/chunks/DR1K6PIm.js +1 -0
  591. package/dist/web/_app/immutable/chunks/DTCHhxD5.js +1 -0
  592. package/dist/web/_app/immutable/chunks/DU7XA-cL2.js +1 -0
  593. package/dist/web/_app/immutable/chunks/DVcy5Pp82.js +1 -0
  594. package/dist/web/_app/immutable/chunks/DWygwzcO2.js +1 -0
  595. package/dist/web/_app/immutable/chunks/DYXDRmoo2.js +1 -0
  596. package/dist/web/_app/immutable/chunks/DZEmjBTb.js +5 -0
  597. package/dist/web/_app/immutable/chunks/DaoOQFPb.js +1 -0
  598. package/dist/web/_app/immutable/chunks/DdfvtDOY.js +1 -0
  599. package/dist/web/_app/immutable/chunks/DevZTY1l.js +1 -0
  600. package/dist/web/_app/immutable/chunks/DiMQob8p.js +1 -0
  601. package/dist/web/_app/immutable/chunks/DiQJ9DLy.js +1 -0
  602. package/dist/web/_app/immutable/chunks/Dj5oP_ik.js +2 -0
  603. package/dist/web/_app/immutable/chunks/DjTJ4D_0.js +3 -0
  604. package/dist/web/_app/immutable/chunks/Dk4TeNwu.js +1 -0
  605. package/dist/web/_app/immutable/chunks/Dng3OcRd2.js +1 -0
  606. package/dist/web/_app/immutable/chunks/Do1OCNEG.js +1 -0
  607. package/dist/web/_app/immutable/chunks/Do6qOOng.js +1 -0
  608. package/dist/web/_app/immutable/chunks/DoQwt-f9.js +1 -0
  609. package/dist/web/_app/immutable/chunks/Dqg3k9HI2.js +1 -0
  610. package/dist/web/_app/immutable/chunks/DsnqOT222.js +1 -0
  611. package/dist/web/_app/immutable/chunks/DvJSCDuZ2.js +1 -0
  612. package/dist/web/_app/immutable/chunks/DvPuaTCl.js +5 -0
  613. package/dist/web/_app/immutable/chunks/DvYQu1SV.js +1 -0
  614. package/dist/web/_app/immutable/chunks/HdjeJPly2.js +1 -0
  615. package/dist/web/_app/immutable/chunks/JDw4tOUY.js +1 -0
  616. package/dist/web/_app/immutable/chunks/KBbDg4lS2.js +1 -0
  617. package/dist/web/_app/immutable/chunks/KQXQLJf32.js +1 -0
  618. package/dist/web/_app/immutable/chunks/LGnNalpn2.js +2 -0
  619. package/dist/web/_app/immutable/chunks/SH5Fg0Xu.js +1 -0
  620. package/dist/web/_app/immutable/chunks/Shyla9c12.js +2 -0
  621. package/dist/web/_app/immutable/chunks/VQbAelHN.js +1 -0
  622. package/dist/web/_app/immutable/chunks/apNT0aug2.js +1 -0
  623. package/dist/web/_app/immutable/chunks/e0ySQvQ6.js +1 -0
  624. package/dist/web/_app/immutable/chunks/eNB_sIHC2.js +1 -0
  625. package/dist/web/_app/immutable/chunks/g09ZrevW2.js +1 -0
  626. package/dist/web/_app/immutable/chunks/h4WWBpcD2.js +2692 -0
  627. package/dist/web/_app/immutable/chunks/kLub81jO.js +1 -0
  628. package/dist/web/_app/immutable/chunks/kW0z_eo62.js +1 -0
  629. package/dist/web/_app/immutable/chunks/oBQOivfH.js +1 -0
  630. package/dist/web/_app/immutable/chunks/ss8hcwTT.js +1 -0
  631. package/dist/web/_app/immutable/chunks/sub7ikQV.js +2 -0
  632. package/dist/web/_app/immutable/chunks/uuFM-ygL.js +1 -0
  633. package/dist/web/_app/immutable/chunks/v7me-ydg.js +2 -0
  634. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  635. package/dist/web/_app/immutable/chunks/yWi6xIp8.js +1 -0
  636. package/dist/web/_app/immutable/chunks/zl16E4yc2.js +1 -0
  637. package/dist/web/_app/immutable/entry/app.Bgniax9U.js +2 -0
  638. package/dist/web/_app/immutable/entry/start.DeD3x0AC.js +1 -0
  639. package/dist/web/_app/immutable/nodes/0.D7f7eDDY.js +2 -0
  640. package/dist/web/_app/immutable/nodes/1.nDAGsQWA.js +1 -0
  641. package/dist/web/_app/immutable/nodes/10.DFbhcPKT.js +1 -0
  642. package/dist/web/_app/immutable/nodes/11.CDErrkBt.js +1 -0
  643. package/dist/web/_app/immutable/nodes/12.QmphOXE2.js +1 -0
  644. package/dist/web/_app/immutable/nodes/13.Bq5rDhPs.js +1 -0
  645. package/dist/web/_app/immutable/nodes/14.BlcHqgr6.js +1 -0
  646. package/dist/web/_app/immutable/nodes/15.COK_-D-x.js +1 -0
  647. package/dist/web/_app/immutable/nodes/2.DOsCYNHa.js +109 -0
  648. package/dist/web/_app/immutable/nodes/3.BgE1sIyr.js +2 -0
  649. package/dist/web/_app/immutable/nodes/4.DvgaHeI4.js +11 -0
  650. package/dist/web/_app/immutable/nodes/5.CrjeBZES.js +1 -0
  651. package/dist/web/_app/immutable/nodes/6.DoHxsiEE.js +1 -0
  652. package/dist/web/_app/immutable/nodes/7.04fnxKIo.js +1 -0
  653. package/dist/web/_app/immutable/nodes/8.D35_cY6C.js +1 -0
  654. package/dist/web/_app/immutable/nodes/9.BRionwW6.js +1 -0
  655. package/dist/web/_app/version.json +1 -1
  656. package/dist/web/favicon-16.png +0 -0
  657. package/dist/web/favicon-180.png +0 -0
  658. package/dist/web/favicon-32.png +0 -0
  659. package/dist/web/favicon-48.png +0 -0
  660. package/dist/web/favicon-512.png +0 -0
  661. package/dist/web/favicon.ico +0 -0
  662. package/dist/web/favicon.svg +8 -0
  663. package/dist/web/index.html +56 -19
  664. package/dist/web/studiograph-logomark.svg +29 -0
  665. package/package.json +34 -14
  666. package/dist/agent/skills/enrich-entities.md +0 -136
  667. package/dist/agent/skills/obsidian-source-setup.md +0 -246
  668. package/dist/agent/skills/skill-loader.d.ts +0 -48
  669. package/dist/agent/skills/skill-loader.js +0 -166
  670. package/dist/agent/skills/skill-loader.js.map +0 -1
  671. package/dist/agent/skills/sync-configuration.md +0 -119
  672. package/dist/agent/skills/sync-setup.md +0 -82
  673. package/dist/agent/tools/sync-tools.d.ts +0 -35
  674. package/dist/agent/tools/sync-tools.js +0 -992
  675. package/dist/agent/tools/sync-tools.js.map +0 -1
  676. package/dist/auth/github.d.ts +0 -56
  677. package/dist/auth/github.js +0 -169
  678. package/dist/auth/github.js.map +0 -1
  679. package/dist/cli/commands/access.d.ts +0 -11
  680. package/dist/cli/commands/access.js +0 -156
  681. package/dist/cli/commands/access.js.map +0 -1
  682. package/dist/cli/commands/app.d.ts +0 -7
  683. package/dist/cli/commands/app.js +0 -268
  684. package/dist/cli/commands/app.js.map +0 -1
  685. package/dist/cli/commands/auth.d.ts +0 -10
  686. package/dist/cli/commands/auth.js +0 -79
  687. package/dist/cli/commands/auth.js.map +0 -1
  688. package/dist/cli/commands/clear.d.ts +0 -5
  689. package/dist/cli/commands/clear.js +0 -36
  690. package/dist/cli/commands/clear.js.map +0 -1
  691. package/dist/cli/commands/collection.d.ts +0 -10
  692. package/dist/cli/commands/collection.js +0 -187
  693. package/dist/cli/commands/collection.js.map +0 -1
  694. package/dist/cli/commands/enrich.d.ts +0 -11
  695. package/dist/cli/commands/enrich.js +0 -135
  696. package/dist/cli/commands/enrich.js.map +0 -1
  697. package/dist/cli/commands/graphrag.d.ts +0 -12
  698. package/dist/cli/commands/graphrag.js +0 -122
  699. package/dist/cli/commands/graphrag.js.map +0 -1
  700. package/dist/cli/commands/join.d.ts +0 -9
  701. package/dist/cli/commands/join.js +0 -255
  702. package/dist/cli/commands/join.js.map +0 -1
  703. package/dist/cli/commands/members.d.ts +0 -11
  704. package/dist/cli/commands/members.js +0 -230
  705. package/dist/cli/commands/members.js.map +0 -1
  706. package/dist/cli/commands/org.d.ts +0 -10
  707. package/dist/cli/commands/org.js +0 -132
  708. package/dist/cli/commands/org.js.map +0 -1
  709. package/dist/cli/commands/provision.d.ts +0 -8
  710. package/dist/cli/commands/provision.js +0 -116
  711. package/dist/cli/commands/provision.js.map +0 -1
  712. package/dist/cli/commands/resolve.d.ts +0 -8
  713. package/dist/cli/commands/resolve.js +0 -85
  714. package/dist/cli/commands/resolve.js.map +0 -1
  715. package/dist/cli/commands/review.d.ts +0 -19
  716. package/dist/cli/commands/review.js +0 -128
  717. package/dist/cli/commands/review.js.map +0 -1
  718. package/dist/cli/commands/source.d.ts +0 -16
  719. package/dist/cli/commands/source.js +0 -159
  720. package/dist/cli/commands/source.js.map +0 -1
  721. package/dist/cli/commands/start.d.ts +0 -7
  722. package/dist/cli/commands/start.js +0 -589
  723. package/dist/cli/commands/start.js.map +0 -1
  724. package/dist/cli/commands/sync-collection.d.ts +0 -14
  725. package/dist/cli/commands/sync-collection.js +0 -355
  726. package/dist/cli/commands/sync-collection.js.map +0 -1
  727. package/dist/cli/commands/sync-entities.d.ts +0 -13
  728. package/dist/cli/commands/sync-entities.js +0 -242
  729. package/dist/cli/commands/sync-entities.js.map +0 -1
  730. package/dist/cli/commands/team.d.ts +0 -12
  731. package/dist/cli/commands/team.js +0 -185
  732. package/dist/cli/commands/team.js.map +0 -1
  733. package/dist/cli/commands/update.d.ts +0 -8
  734. package/dist/cli/commands/update.js +0 -155
  735. package/dist/cli/commands/update.js.map +0 -1
  736. package/dist/cli/commands/user.d.ts +0 -7
  737. package/dist/cli/commands/user.js +0 -153
  738. package/dist/cli/commands/user.js.map +0 -1
  739. package/dist/cli/scaffolding.d.ts +0 -12
  740. package/dist/cli/scaffolding.js +0 -397
  741. package/dist/cli/scaffolding.js.map +0 -1
  742. package/dist/cli/sync-review-interactive.d.ts +0 -31
  743. package/dist/cli/sync-review-interactive.js +0 -393
  744. package/dist/cli/sync-review-interactive.js.map +0 -1
  745. package/dist/core/migration-runner.d.ts +0 -42
  746. package/dist/core/migration-runner.js +0 -232
  747. package/dist/core/migration-runner.js.map +0 -1
  748. package/dist/core/migration-types.d.ts +0 -101
  749. package/dist/core/migration-types.js +0 -21
  750. package/dist/core/migration-types.js.map +0 -1
  751. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
  752. package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
  753. package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
  754. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
  755. package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
  756. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
  757. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
  758. package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
  759. package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
  760. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
  761. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
  762. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
  763. package/dist/core/migrations/index.d.ts +0 -11
  764. package/dist/core/migrations/index.js +0 -23
  765. package/dist/core/migrations/index.js.map +0 -1
  766. package/dist/integrations/asana.d.ts +0 -26
  767. package/dist/integrations/asana.js +0 -78
  768. package/dist/integrations/asana.js.map +0 -1
  769. package/dist/integrations/figma-local.d.ts +0 -16
  770. package/dist/integrations/figma-local.js +0 -10
  771. package/dist/integrations/figma-local.js.map +0 -1
  772. package/dist/integrations/figma.d.ts +0 -17
  773. package/dist/integrations/figma.js +0 -17
  774. package/dist/integrations/figma.js.map +0 -1
  775. package/dist/integrations/granola.d.ts +0 -24
  776. package/dist/integrations/granola.js +0 -60
  777. package/dist/integrations/granola.js.map +0 -1
  778. package/dist/integrations/linear.d.ts +0 -14
  779. package/dist/integrations/linear.js +0 -80
  780. package/dist/integrations/linear.js.map +0 -1
  781. package/dist/integrations/paper-local.d.ts +0 -14
  782. package/dist/integrations/paper-local.js +0 -10
  783. package/dist/integrations/paper-local.js.map +0 -1
  784. package/dist/integrations/paper.d.ts +0 -2
  785. package/dist/integrations/paper.js +0 -10
  786. package/dist/integrations/paper.js.map +0 -1
  787. package/dist/integrations/pipedrive.d.ts +0 -26
  788. package/dist/integrations/pipedrive.js +0 -97
  789. package/dist/integrations/pipedrive.js.map +0 -1
  790. package/dist/integrations/registry.d.ts +0 -15
  791. package/dist/integrations/registry.js +0 -27
  792. package/dist/integrations/registry.js.map +0 -1
  793. package/dist/integrations/types.d.ts +0 -38
  794. package/dist/integrations/types.js +0 -9
  795. package/dist/integrations/types.js.map +0 -1
  796. package/dist/lib/lib/utils.d.ts +0 -2
  797. package/dist/lib/lib/utils.js +0 -6
  798. package/dist/lib/lib/utils.js.map +0 -1
  799. package/dist/mcp/connectors/asana.d.ts +0 -2
  800. package/dist/mcp/connectors/asana.js +0 -20
  801. package/dist/mcp/connectors/asana.js.map +0 -1
  802. package/dist/mcp/connectors/definitions.d.ts +0 -45
  803. package/dist/mcp/connectors/definitions.js +0 -32
  804. package/dist/mcp/connectors/definitions.js.map +0 -1
  805. package/dist/mcp/connectors/figma.d.ts +0 -5
  806. package/dist/mcp/connectors/figma.js +0 -21
  807. package/dist/mcp/connectors/figma.js.map +0 -1
  808. package/dist/mcp/connectors/gdrive.d.ts +0 -2
  809. package/dist/mcp/connectors/gdrive.js +0 -20
  810. package/dist/mcp/connectors/gdrive.js.map +0 -1
  811. package/dist/mcp/connectors/granola.d.ts +0 -2
  812. package/dist/mcp/connectors/granola.js +0 -12
  813. package/dist/mcp/connectors/granola.js.map +0 -1
  814. package/dist/mcp/connectors/linear.d.ts +0 -2
  815. package/dist/mcp/connectors/linear.js +0 -19
  816. package/dist/mcp/connectors/linear.js.map +0 -1
  817. package/dist/mcp/connectors/obsidian.d.ts +0 -2
  818. package/dist/mcp/connectors/obsidian.js +0 -19
  819. package/dist/mcp/connectors/obsidian.js.map +0 -1
  820. package/dist/mcp/connectors/pipedrive.d.ts +0 -2
  821. package/dist/mcp/connectors/pipedrive.js +0 -20
  822. package/dist/mcp/connectors/pipedrive.js.map +0 -1
  823. package/dist/mcp/connectors/slack.d.ts +0 -2
  824. package/dist/mcp/connectors/slack.js +0 -21
  825. package/dist/mcp/connectors/slack.js.map +0 -1
  826. package/dist/mcp/server-oauth-provider.d.ts +0 -56
  827. package/dist/mcp/server-oauth-provider.js +0 -142
  828. package/dist/mcp/server-oauth-provider.js.map +0 -1
  829. package/dist/server/chrome/chrome.css +0 -691
  830. package/dist/server/chrome/chrome.js +0 -374
  831. package/dist/server/collab-authority.d.ts +0 -70
  832. package/dist/server/collab-authority.js +0 -218
  833. package/dist/server/collab-authority.js.map +0 -1
  834. package/dist/server/collab.d.ts +0 -29
  835. package/dist/server/collab.js +0 -195
  836. package/dist/server/collab.js.map +0 -1
  837. package/dist/server/commit-scheduler.d.ts +0 -39
  838. package/dist/server/commit-scheduler.js +0 -113
  839. package/dist/server/commit-scheduler.js.map +0 -1
  840. package/dist/server/plugin-loader.d.ts +0 -53
  841. package/dist/server/plugin-loader.js +0 -155
  842. package/dist/server/plugin-loader.js.map +0 -1
  843. package/dist/server/routes/collab.d.ts +0 -6
  844. package/dist/server/routes/collab.js +0 -10
  845. package/dist/server/routes/collab.js.map +0 -1
  846. package/dist/server/routes/git-api.d.ts +0 -9
  847. package/dist/server/routes/git-api.js +0 -82
  848. package/dist/server/routes/git-api.js.map +0 -1
  849. package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
  850. package/dist/server/routes/meeting-ingest-api.js +0 -323
  851. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  852. package/dist/server/routes/sync-api.d.ts +0 -26
  853. package/dist/server/routes/sync-api.js +0 -814
  854. package/dist/server/routes/sync-api.js.map +0 -1
  855. package/dist/server/routes/webhook.d.ts +0 -14
  856. package/dist/server/routes/webhook.js +0 -102
  857. package/dist/server/routes/webhook.js.map +0 -1
  858. package/dist/services/github-provisioner.d.ts +0 -36
  859. package/dist/services/github-provisioner.js +0 -126
  860. package/dist/services/github-provisioner.js.map +0 -1
  861. package/dist/services/github-service.d.ts +0 -99
  862. package/dist/services/github-service.js +0 -310
  863. package/dist/services/github-service.js.map +0 -1
  864. package/dist/services/insights.d.ts +0 -38
  865. package/dist/services/insights.js +0 -246
  866. package/dist/services/insights.js.map +0 -1
  867. package/dist/services/sync/collection-sync.d.ts +0 -60
  868. package/dist/services/sync/collection-sync.js +0 -509
  869. package/dist/services/sync/collection-sync.js.map +0 -1
  870. package/dist/services/sync/commit.d.ts +0 -60
  871. package/dist/services/sync/commit.js +0 -354
  872. package/dist/services/sync/commit.js.map +0 -1
  873. package/dist/services/sync/context-index.d.ts +0 -69
  874. package/dist/services/sync/context-index.js +0 -280
  875. package/dist/services/sync/context-index.js.map +0 -1
  876. package/dist/services/sync/data-fetcher.d.ts +0 -31
  877. package/dist/services/sync/data-fetcher.js +0 -12
  878. package/dist/services/sync/data-fetcher.js.map +0 -1
  879. package/dist/services/sync/derive.d.ts +0 -34
  880. package/dist/services/sync/derive.js +0 -164
  881. package/dist/services/sync/derive.js.map +0 -1
  882. package/dist/services/sync/enrichment-state.d.ts +0 -31
  883. package/dist/services/sync/enrichment-state.js +0 -63
  884. package/dist/services/sync/enrichment-state.js.map +0 -1
  885. package/dist/services/sync/enrichment.d.ts +0 -25
  886. package/dist/services/sync/enrichment.js +0 -121
  887. package/dist/services/sync/enrichment.js.map +0 -1
  888. package/dist/services/sync/entity-refresh.d.ts +0 -30
  889. package/dist/services/sync/entity-refresh.js +0 -275
  890. package/dist/services/sync/entity-refresh.js.map +0 -1
  891. package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
  892. package/dist/services/sync/frontmatter-extractor.js +0 -279
  893. package/dist/services/sync/frontmatter-extractor.js.map +0 -1
  894. package/dist/services/sync/graph-match-state.d.ts +0 -33
  895. package/dist/services/sync/graph-match-state.js +0 -61
  896. package/dist/services/sync/graph-match-state.js.map +0 -1
  897. package/dist/services/sync/graph-match.d.ts +0 -53
  898. package/dist/services/sync/graph-match.js +0 -316
  899. package/dist/services/sync/graph-match.js.map +0 -1
  900. package/dist/services/sync/graphrag-client.d.ts +0 -43
  901. package/dist/services/sync/graphrag-client.js +0 -94
  902. package/dist/services/sync/graphrag-client.js.map +0 -1
  903. package/dist/services/sync/graphrag-config.d.ts +0 -16
  904. package/dist/services/sync/graphrag-config.js +0 -39
  905. package/dist/services/sync/graphrag-config.js.map +0 -1
  906. package/dist/services/sync/graphrag-context.d.ts +0 -14
  907. package/dist/services/sync/graphrag-context.js +0 -109
  908. package/dist/services/sync/graphrag-context.js.map +0 -1
  909. package/dist/services/sync/graphrag-indexer.d.ts +0 -30
  910. package/dist/services/sync/graphrag-indexer.js +0 -358
  911. package/dist/services/sync/graphrag-indexer.js.map +0 -1
  912. package/dist/services/sync/llm.d.ts +0 -32
  913. package/dist/services/sync/llm.js +0 -115
  914. package/dist/services/sync/llm.js.map +0 -1
  915. package/dist/services/sync/mcp-client.d.ts +0 -71
  916. package/dist/services/sync/mcp-client.js +0 -299
  917. package/dist/services/sync/mcp-client.js.map +0 -1
  918. package/dist/services/sync/model-factory.d.ts +0 -13
  919. package/dist/services/sync/model-factory.js +0 -38
  920. package/dist/services/sync/model-factory.js.map +0 -1
  921. package/dist/services/sync/name-quality.d.ts +0 -31
  922. package/dist/services/sync/name-quality.js +0 -60
  923. package/dist/services/sync/name-quality.js.map +0 -1
  924. package/dist/services/sync/output-schemas.d.ts +0 -92
  925. package/dist/services/sync/output-schemas.js +0 -43
  926. package/dist/services/sync/output-schemas.js.map +0 -1
  927. package/dist/services/sync/prompts.d.ts +0 -19
  928. package/dist/services/sync/prompts.js +0 -128
  929. package/dist/services/sync/prompts.js.map +0 -1
  930. package/dist/services/sync/reconciler.d.ts +0 -48
  931. package/dist/services/sync/reconciler.js +0 -294
  932. package/dist/services/sync/reconciler.js.map +0 -1
  933. package/dist/services/sync/rest-client.d.ts +0 -40
  934. package/dist/services/sync/rest-client.js +0 -100
  935. package/dist/services/sync/rest-client.js.map +0 -1
  936. package/dist/services/sync/source-config.d.ts +0 -67
  937. package/dist/services/sync/source-config.js +0 -304
  938. package/dist/services/sync/source-config.js.map +0 -1
  939. package/dist/services/sync/source-definitions/asana.d.ts +0 -14
  940. package/dist/services/sync/source-definitions/asana.js +0 -42
  941. package/dist/services/sync/source-definitions/asana.js.map +0 -1
  942. package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
  943. package/dist/services/sync/source-definitions/definitions.js +0 -8
  944. package/dist/services/sync/source-definitions/definitions.js.map +0 -1
  945. package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
  946. package/dist/services/sync/source-definitions/gdrive.js +0 -68
  947. package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
  948. package/dist/services/sync/source-definitions/granola.d.ts +0 -2
  949. package/dist/services/sync/source-definitions/granola.js +0 -21
  950. package/dist/services/sync/source-definitions/granola.js.map +0 -1
  951. package/dist/services/sync/source-definitions/linear.d.ts +0 -2
  952. package/dist/services/sync/source-definitions/linear.js +0 -62
  953. package/dist/services/sync/source-definitions/linear.js.map +0 -1
  954. package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
  955. package/dist/services/sync/source-definitions/obsidian.js +0 -55
  956. package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
  957. package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
  958. package/dist/services/sync/source-definitions/pipedrive.js +0 -43
  959. package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
  960. package/dist/services/sync/staging.d.ts +0 -53
  961. package/dist/services/sync/staging.js +0 -130
  962. package/dist/services/sync/staging.js.map +0 -1
  963. package/dist/services/sync/structured-extractor.d.ts +0 -57
  964. package/dist/services/sync/structured-extractor.js +0 -584
  965. package/dist/services/sync/structured-extractor.js.map +0 -1
  966. package/dist/services/sync/sync-runner.d.ts +0 -32
  967. package/dist/services/sync/sync-runner.js +0 -195
  968. package/dist/services/sync/sync-runner.js.map +0 -1
  969. package/dist/services/sync/sync-state.d.ts +0 -43
  970. package/dist/services/sync/sync-state.js +0 -154
  971. package/dist/services/sync/sync-state.js.map +0 -1
  972. package/dist/services/sync/types.d.ts +0 -381
  973. package/dist/services/sync/types.js +0 -8
  974. package/dist/services/sync/types.js.map +0 -1
  975. package/dist/services/sync/unstructured-extractor.d.ts +0 -27
  976. package/dist/services/sync/unstructured-extractor.js +0 -185
  977. package/dist/services/sync/unstructured-extractor.js.map +0 -1
  978. package/dist/utils/merge-resolver.d.ts +0 -59
  979. package/dist/utils/merge-resolver.js +0 -303
  980. package/dist/utils/merge-resolver.js.map +0 -1
  981. package/dist/utils/workspace-config.d.ts +0 -8
  982. package/dist/utils/workspace-config.js +0 -22
  983. package/dist/utils/workspace-config.js.map +0 -1
  984. package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
  985. package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
  986. package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
  987. package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
  988. package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
  989. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  990. package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
  991. package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
  992. package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
  993. package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
  994. package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
  995. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  996. package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
  997. package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
  998. package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
  999. package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
  1000. package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
  1001. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  1002. package/dist/web/_app/immutable/chunks/B-7hHz7B.js +0 -1
  1003. package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
  1004. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  1005. package/dist/web/_app/immutable/chunks/BDoWDZaG.js +0 -1
  1006. package/dist/web/_app/immutable/chunks/BFyl1ZHO.js +0 -1
  1007. package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
  1008. package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
  1009. package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
  1010. package/dist/web/_app/immutable/chunks/BWNY8zw6.js +0 -2
  1011. package/dist/web/_app/immutable/chunks/BdPUVvAi.js +0 -1
  1012. package/dist/web/_app/immutable/chunks/BmsJVLyy.js +0 -1
  1013. package/dist/web/_app/immutable/chunks/BoAosqzE.js +0 -1
  1014. package/dist/web/_app/immutable/chunks/Bs-tL5OR.js +0 -1
  1015. package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
  1016. package/dist/web/_app/immutable/chunks/BuewkNdS.js +0 -4
  1017. package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
  1018. package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
  1019. package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
  1020. package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
  1021. package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
  1022. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  1023. package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
  1024. package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
  1025. package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
  1026. package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
  1027. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  1028. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  1029. package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
  1030. package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
  1031. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  1032. package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
  1033. package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
  1034. package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
  1035. package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
  1036. package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
  1037. package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
  1038. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  1039. package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
  1040. package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
  1041. package/dist/web/_app/immutable/chunks/FFlLQIiS.js +0 -1
  1042. package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
  1043. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  1044. package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
  1045. package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
  1046. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  1047. package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
  1048. package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
  1049. package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
  1050. package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
  1051. package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
  1052. package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
  1053. package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
  1054. package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
  1055. package/dist/web/_app/immutable/entry/app.DAR-mtfg.js +0 -2
  1056. package/dist/web/_app/immutable/entry/start.xDnyRaR1.js +0 -1
  1057. package/dist/web/_app/immutable/nodes/0.D0aV-Zro.js +0 -2
  1058. package/dist/web/_app/immutable/nodes/1.C7QoM8qD.js +0 -1
  1059. package/dist/web/_app/immutable/nodes/10.DrDOAjOD.js +0 -1
  1060. package/dist/web/_app/immutable/nodes/2.B0OgNuKW.js +0 -168
  1061. package/dist/web/_app/immutable/nodes/3.BZ4qHGZi.js +0 -1
  1062. package/dist/web/_app/immutable/nodes/4.hm-mxuuj.js +0 -12
  1063. package/dist/web/_app/immutable/nodes/5.Bdbt4fjx.js +0 -4
  1064. package/dist/web/_app/immutable/nodes/6.BXrCI40c.js +0 -2
  1065. package/dist/web/_app/immutable/nodes/7.Chd4i9bm.js +0 -2
  1066. package/dist/web/_app/immutable/nodes/8.B8SF-aNs.js +0 -1
  1067. package/dist/web/_app/immutable/nodes/9.YDeu-RnO.js +0 -1
@@ -3,18 +3,43 @@
3
3
  *
4
4
  * Pull and push changes across the workspace:
5
5
  * - the .studiograph config repo (if it has a git remote)
6
- * - each entity collection that is a git repo with a remote
6
+ * - each entity folder that is a git repo with a remote
7
7
  *
8
8
  * Works with both GitHub remotes and the embedded git server.
9
9
  */
10
10
  import { Command } from 'commander';
11
- import { log, outro, text, password as passwordPrompt } from '@clack/prompts';
12
- import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'fs';
11
+ import { log, outro } from '@clack/prompts';
12
+ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
13
13
  import { join } from 'path';
14
14
  import { Workspace } from '../../core/workspace.js';
15
15
  import { AuthService } from '../../services/auth-service.js';
16
16
  import { ConnectorManager } from '../../mcp/connector-manager.js';
17
- import { gitPull, gitPush, gitPushWithCredentials, gitSetRemote, gitHasRemote } from '../../utils/git.js';
17
+ import { buildConfigBundle } from '../../core/secrets/bundle.js';
18
+ import { gitClone, gitPull, gitPush, gitPushWithCredentials, gitSetRemote, gitHasRemote } from '../../utils/git.js';
19
+ import { getStudiographToken } from '../../core/user-config.js';
20
+ // Owner-only admin escalation header for embedded-git operations. The server
21
+ // lifts the personal-folder restriction only when the caller is the workspace
22
+ // owner (access-control.ts: `includePrivate` is gated to owners and is a no-op
23
+ // for everyone else). `pull`/`push` are owner-CLI commands, so we send it
24
+ // unconditionally — non-owners get no extra access, and the owner can sync
25
+ // other users' private folders during migrations / offboarding. Without it the
26
+ // server returns 404 for any folder the caller doesn't personally own, even
27
+ // the workspace owner. `studiograph clone` sends the same header for the
28
+ // same reason, so clone/pull/push stay consistent.
29
+ const OWNER_INCLUDE_PRIVATE_HEADERS = ['X-Studiograph-Include-Private: 1'];
30
+ function resolveRemoteAuth(base, opts) {
31
+ const token = opts.token?.trim() || process.env.STUDIOGRAPH_TOKEN?.trim() || getStudiographToken(base);
32
+ if (!token) {
33
+ throw new Error(`No API token for ${base}. Run \`studiograph admin token issue ${base}\` to mint one, or pass --token / STUDIOGRAPH_TOKEN.`);
34
+ }
35
+ return {
36
+ // Both the main API middleware (server/index.ts) and the git-http handler
37
+ // (routes/git-http.ts authenticateBasic) accept Bearer + Basic with an
38
+ // sg_ token, so one token → one set of headers, no dual-format gymnastics.
39
+ httpHeader: { Authorization: `Bearer ${token}` },
40
+ gitCredentials: { username: '_token_', password: token },
41
+ };
42
+ }
18
43
  async function getRepoEntries(workspace, workspaceRoot) {
19
44
  const entries = [];
20
45
  // The .studiograph config directory is itself a git repo (when GitHub-provisioned)
@@ -24,8 +49,15 @@ async function getRepoEntries(workspace, workspaceRoot) {
24
49
  }
25
50
  const config = await workspace.loadConfig();
26
51
  for (const repo of config.repos) {
27
- if (repo.private)
28
- continue; // private repos are local-only
52
+ // Personal folders are excluded ONLY on this fallback path, which pushes
53
+ // to whatever git remote was manually wired up — typically a third-party
54
+ // host (GitHub, etc.) with no Studiograph permission layer to gate
55
+ // access. Pushing a personal folder there would leak private content to
56
+ // an ungated remote. The Studiograph-server paths (pull/pushRemoteData,
57
+ // the server-aware push) DO sync personal folders, because git-http
58
+ // gates them by owner.
59
+ if (repo.personal)
60
+ continue;
29
61
  const repoPath = join(workspaceRoot, repo.path);
30
62
  if (!isGitRepo(repoPath) || !gitHasRemote(repoPath))
31
63
  continue;
@@ -42,7 +74,7 @@ function isGitRepo(path) {
42
74
  function logManualGuidance(entryPath) {
43
75
  log.info(` cd ${entryPath} && git pull --rebase`);
44
76
  }
45
- async function pullRemoteConfig(remoteUrl) {
77
+ async function pullRemoteConfig(remoteUrl, includeData = false, authOpts = {}) {
46
78
  const workspace = new Workspace();
47
79
  if (!workspace.isWorkspace()) {
48
80
  console.error('❌ Not a Studiograph workspace. Run `studiograph init` first.');
@@ -50,72 +82,49 @@ async function pullRemoteConfig(remoteUrl) {
50
82
  return;
51
83
  }
52
84
  const base = remoteUrl.replace(/\/+$/, '');
53
- // Prompt for admin credentials
54
- const email = await text({ message: 'Admin email:', validate: (v) => v.includes('@') ? undefined : 'Enter a valid email' });
55
- if (typeof email === 'symbol') {
56
- outro('Cancelled');
57
- process.exit(0);
58
- return;
59
- }
60
- const password = await passwordPrompt({ message: 'Password:' });
61
- if (typeof password === 'symbol') {
62
- outro('Cancelled');
63
- process.exit(0);
64
- return;
65
- }
66
- // Login to get session token
67
- log.info('Authenticating...');
68
- let token;
85
+ const workspaceRoot = workspace.getWorkspacePath();
86
+ const sgDir = join(workspaceRoot, '.studiograph');
87
+ // Resolve authentication sg_ token only (Phase C5).
88
+ let auth;
69
89
  try {
70
- const loginRes = await fetch(`${base}/api/auth/login`, {
71
- method: 'POST',
72
- headers: { 'Content-Type': 'application/json' },
73
- body: JSON.stringify({ email, password }),
74
- });
75
- if (!loginRes.ok) {
76
- const body = await loginRes.json().catch(() => ({}));
77
- outro(`Login failed: ${body.error || loginRes.statusText}`);
78
- process.exit(1);
79
- return;
80
- }
81
- const cookies = loginRes.headers.getSetCookie?.() ?? [];
82
- const tokenCookie = cookies.find(c => c.startsWith('__sg_token='));
83
- if (!tokenCookie) {
84
- outro('Login succeeded but no session cookie was returned');
85
- process.exit(1);
86
- return;
87
- }
88
- token = tokenCookie.split(';')[0];
90
+ auth = resolveRemoteAuth(base, authOpts);
89
91
  }
90
92
  catch (err) {
91
- outro(`Could not connect to ${base}: ${err.message}`);
93
+ outro(err.message);
92
94
  process.exit(1);
93
95
  return;
94
96
  }
95
97
  // Fetch config bundle (fall back to auth seed for older servers)
96
98
  log.info('Fetching workspace config...');
97
- const workspaceRoot = workspace.getWorkspacePath();
98
- const sgDir = join(workspaceRoot, '.studiograph');
99
99
  try {
100
100
  const bundleRes = await fetch(`${base}/api/config/bundle`, {
101
- headers: { 'Cookie': token },
101
+ headers: auth.httpHeader,
102
102
  });
103
103
  if (bundleRes.ok) {
104
104
  const bundle = await bundleRes.json();
105
- // 1. Auth seed
105
+ // 1. Auth seed — remote is authoritative for pull, so overwrite any
106
+ // local-shadow rows (e.g. post-clone setup-wizard credentials that
107
+ // would otherwise shadow the real production password_hash).
106
108
  writeFileSync(join(sgDir, 'auth-seed.json'), JSON.stringify(bundle.authSeed, null, 2), 'utf-8');
107
- const authService = new AuthService(sgDir);
108
- authService.applySeed();
109
+ // AuthService appends `.studiograph` to the path it's given —
110
+ // pass workspace root, not `sgDir`, or we end up with
111
+ // `.studiograph/.studiograph/auth.db` (disjoint from the running server).
112
+ const authService = new AuthService(workspaceRoot);
113
+ authService.applySeed({ mode: 'overwrite' });
109
114
  authService.close();
110
115
  log.success(`Team: ${bundle.authSeed.users.length} user${bundle.authSeed.users.length === 1 ? '' : 's'}`);
111
- // 2. Workspace config — merge: keep local-only fields (server_url), update shared fields
116
+ // 2. Workspace config — merge: keep local-only fields (server_url), update shared fields.
117
+ //
118
+ // Phase 9b: route through `workspace.writeConfig()` so this CLI
119
+ // pull path shares the same schema validator + dual-write seam as
120
+ // every other writer.
112
121
  if (bundle.workspace) {
113
122
  const local = await workspace.loadConfig().catch(() => ({}));
114
123
  const merged = { ...local, ...bundle.workspace };
115
124
  if (local.server_url)
116
125
  merged.server_url = local.server_url;
117
- writeFileSync(join(sgDir, 'workspace.json'), JSON.stringify(merged, null, 2), 'utf-8');
118
- log.success(`Workspace config: ${bundle.workspace.repos?.length ?? 0} collection${(bundle.workspace.repos?.length ?? 0) === 1 ? '' : 's'}`);
126
+ workspace.writeConfig(merged);
127
+ log.success(`Workspace config: ${bundle.workspace.repos?.length ?? 0} folder${(bundle.workspace.repos?.length ?? 0) === 1 ? '' : 's'}`);
119
128
  }
120
129
  // 3. ABOUT.md
121
130
  if (bundle.about !== null && bundle.about !== undefined) {
@@ -132,21 +141,33 @@ async function pullRemoteConfig(remoteUrl) {
132
141
  }
133
142
  log.success(`Sources: ${sourceNames.join(', ')}`);
134
143
  }
135
- // 5. Connectors (sanitized — no secrets)
144
+ // 5. Connectors (sanitized — no secrets).
145
+ //
146
+ // Phase 9b: route through `ConnectorManager.saveWorkspaceConfig` so
147
+ // every connector save runs the same schema validator + stripSecrets
148
+ // pass. The bundle is already sanitized server-side; the re-strip
149
+ // is idempotent and preserves the single-seam invariant.
136
150
  if (bundle.connectors && bundle.connectors.length > 0) {
137
- const connectorsDir = join(sgDir, 'connectors');
138
- mkdirSync(connectorsDir, { recursive: true });
139
151
  for (const conn of bundle.connectors) {
140
- writeFileSync(join(connectorsDir, `${conn.name}.json`), JSON.stringify(conn, null, 2), 'utf-8');
152
+ ConnectorManager.saveWorkspaceConfig(conn, workspaceRoot);
141
153
  }
142
154
  log.success(`Connectors: ${bundle.connectors.map(c => c.name).join(', ')}`);
143
155
  }
144
- outro(`Pulled config from ${base}`);
156
+ // Pull workspace data (markdown files) if requested
157
+ if (includeData) {
158
+ try {
159
+ await pullRemoteData(base, auth, workspaceRoot);
160
+ }
161
+ catch (err) {
162
+ log.error(`Data pull failed: ${err.message}`);
163
+ }
164
+ }
165
+ outro(`Pulled from ${base}${includeData ? ' (config + data)' : ' (config)'}`);
145
166
  }
146
167
  else if (bundleRes.status === 404) {
147
168
  // Older server — fall back to auth seed only
148
169
  log.info('Server does not support config bundle, falling back to auth seed...');
149
- const seedRes = await fetch(`${base}/api/auth/seed`, { headers: { 'Cookie': token } });
170
+ const seedRes = await fetch(`${base}/api/auth/seed`, { headers: auth.httpHeader });
150
171
  if (!seedRes.ok) {
151
172
  const body = await seedRes.json().catch(() => ({}));
152
173
  outro(`Failed to fetch seed: ${body.error || seedRes.statusText}`);
@@ -155,8 +176,9 @@ async function pullRemoteConfig(remoteUrl) {
155
176
  }
156
177
  const seed = await seedRes.json();
157
178
  writeFileSync(join(sgDir, 'auth-seed.json'), JSON.stringify(seed, null, 2), 'utf-8');
158
- const authService = new AuthService(sgDir);
159
- authService.applySeed();
179
+ // AuthService appends `.studiograph` — pass workspace root, not `sgDir`.
180
+ const authService = new AuthService(workspaceRoot);
181
+ authService.applySeed({ mode: 'overwrite' });
160
182
  authService.close();
161
183
  outro(`Pulled ${seed.users.length} user${seed.users.length === 1 ? '' : 's'} from ${base}`);
162
184
  }
@@ -167,17 +189,160 @@ async function pullRemoteConfig(remoteUrl) {
167
189
  }
168
190
  }
169
191
  catch (err) {
192
+ // Phase 9c: surface SchemaViolationError with its redaction-safe
193
+ // message (field path + classification, no values). The error class
194
+ // is detected by name to avoid pulling the schemas module into the
195
+ // CLI bundle import graph just for an instanceof check.
196
+ if (err?.name === 'SchemaViolationError' || err?.code === 'schema_violation') {
197
+ outro(`Schema violation:\n${err.message}`);
198
+ process.exit(1);
199
+ }
170
200
  outro(`Failed: ${err.message}`);
171
201
  process.exit(1);
172
202
  }
173
203
  }
204
+ // ─── Remote data pull (git-based) ───────────────────────────────────────────
205
+ // Clones or pulls each folder from the remote's embedded git HTTP server
206
+ // (/git/:repo). Uses git's native conflict detection — diverged folders
207
+ // are reported, not silently overwritten.
208
+ async function pullRemoteData(base, auth, workspaceRoot) {
209
+ // Reload config — it was just updated by pullRemoteConfig
210
+ const workspace = new Workspace(workspaceRoot);
211
+ const config = await workspace.loadConfig();
212
+ let cloned = 0, updated = 0, upToDate = 0, diverged = 0, errors = 0;
213
+ for (const repo of config.repos) {
214
+ const repoPath = join(workspaceRoot, repo.path);
215
+ const remoteUrl = `${base}/git/${repo.name}`;
216
+ // Clone if missing
217
+ if (!existsSync(join(repoPath, '.git'))) {
218
+ try {
219
+ if (existsSync(repoPath))
220
+ rmSync(repoPath, { recursive: true, force: true });
221
+ mkdirSync(repoPath, { recursive: true });
222
+ gitClone(remoteUrl, repoPath, { silent: true, credentials: auth.gitCredentials, extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS });
223
+ log.success(`${repo.name}: cloned`);
224
+ cloned++;
225
+ }
226
+ catch (err) {
227
+ log.error(`${repo.name}: clone failed — ${err.message}`);
228
+ errors++;
229
+ }
230
+ continue;
231
+ }
232
+ // Ensure remote points at the requested server (may have been cloned elsewhere)
233
+ try {
234
+ gitSetRemote(repoPath, remoteUrl);
235
+ }
236
+ catch { /* non-fatal */ }
237
+ try {
238
+ const result = gitPull(repoPath, { credentials: auth.gitCredentials, extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS });
239
+ if (result === 'updated') {
240
+ log.success(`${repo.name}: updated`);
241
+ updated++;
242
+ }
243
+ else if (result === 'up-to-date') {
244
+ upToDate++;
245
+ }
246
+ else {
247
+ log.warn(`${repo.name}: diverged — has local commits not on the server`);
248
+ log.info(` cd ${repoPath} && git pull --rebase`);
249
+ diverged++;
250
+ }
251
+ }
252
+ catch (err) {
253
+ log.error(`${repo.name}: ${err.message}`);
254
+ errors++;
255
+ }
256
+ }
257
+ log.info(`Data: ${cloned} cloned, ${updated} updated, ${upToDate} up to date${diverged ? `, ${diverged} diverged` : ''}${errors ? `, ${errors} failed` : ''}`);
258
+ if (diverged) {
259
+ throw new Error('One or more folders diverged — resolve conflicts and retry');
260
+ }
261
+ if (errors) {
262
+ throw new Error('One or more folders failed to pull');
263
+ }
264
+ }
265
+ // ─── Remote data push (git-based) ───────────────────────────────────────────
266
+ // Pushes each local folder to the remote's embedded git HTTP server.
267
+ // Uses git's native conflict detection — rejected pushes require a pull first.
268
+ async function pushRemoteData(base, auth, workspace, workspaceRoot) {
269
+ const config = await workspace.loadConfig();
270
+ let pushed = 0, nothingToPush = 0, created = 0, rejected = 0, errors = 0;
271
+ for (const repo of config.repos) {
272
+ const repoPath = join(workspaceRoot, repo.path);
273
+ if (!existsSync(join(repoPath, '.git'))) {
274
+ log.warn(`${repo.name}: not a git repo — skipping`);
275
+ continue;
276
+ }
277
+ try {
278
+ // Ensure folder exists on remote (idempotent; 409 means it already exists).
279
+ // Skip for personal folders: they're auto-provisioned server-side on login
280
+ // (auth-api.ts#ensurePrivateFolder), and the POST /api/repos shared-folder
281
+ // path rejects reserved `entries-<id>` names. Detect by flag OR name
282
+ // pattern: clone now preserves `personal` (see clone.ts), so the flag is
283
+ // authoritative for freshly-cloned workspaces — the name-pattern check is
284
+ // a fallback for workspaces cloned before that fix landed. Mirrors the
285
+ // server-aware push below.
286
+ const skipServerFolderEnsure = !!repo.personal || /^entries-\d+$/.test(repo.name);
287
+ if (!skipServerFolderEnsure) {
288
+ const status = await ensureServerFolder(base, repo.name, !!repo.personal, auth.httpHeader);
289
+ if (status === 'created') {
290
+ log.info(`${repo.name}: created on server`);
291
+ created++;
292
+ }
293
+ }
294
+ // Point origin at the remote's git server
295
+ gitSetRemote(repoPath, `${base}/git/${repo.name}`);
296
+ // Push with credentials + owner escalation (so the owner can push to
297
+ // any folder, including other users' private ones, during a migration).
298
+ const result = gitPushWithCredentials(repoPath, auth.gitCredentials, { extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS });
299
+ if (result === 'rejected') {
300
+ log.warn(`${repo.name}: push rejected — run \`studiograph pull --server ${base} --data\` first`);
301
+ rejected++;
302
+ continue;
303
+ }
304
+ if (result === 'not-found') {
305
+ log.warn(`${repo.name}: skipped — folder does not exist on the server (stale local clone; safe to remove locally)`);
306
+ continue;
307
+ }
308
+ if (result === 'pushed') {
309
+ log.success(`${repo.name}: pushed`);
310
+ pushed++;
311
+ }
312
+ else {
313
+ nothingToPush++;
314
+ }
315
+ }
316
+ catch (err) {
317
+ log.error(`${repo.name}: ${err.message}`);
318
+ errors++;
319
+ }
320
+ }
321
+ log.info(`Data: ${pushed} pushed${created ? `, ${created} created` : ''}, ${nothingToPush} unchanged${rejected ? `, ${rejected} rejected` : ''}${errors ? `, ${errors} failed` : ''}`);
322
+ if (rejected) {
323
+ throw new Error('One or more folders were rejected — pull and retry');
324
+ }
325
+ if (errors) {
326
+ throw new Error('One or more folders failed to push');
327
+ }
328
+ }
174
329
  // ─── pull ─────────────────────────────────────────────────────────────────────
175
330
  export const pullCommand = new Command('pull')
176
331
  .description('Pull latest changes from remote across the workspace')
177
- .option('--remote <url>', 'Pull config from a remote Studiograph server')
332
+ .option('--server <url>', 'Pull config from a remote Studiograph server')
333
+ // `--remote` is a hidden alias kept for one release; remove in the next.
334
+ // See cli-owner-audit §C5. Owner CLI is now the only caller, but scripts
335
+ // and muscle memory may still reach for the old name.
336
+ .option('--remote <url>', 'Deprecated alias for --server (removed in the next release)', undefined)
337
+ .option('--data', 'Also pull workspace folder data (markdown files) from the remote server')
338
+ .option('--token <token>', 'sg_ API token (also reads STUDIOGRAPH_TOKEN; mint via `studiograph admin token issue <url>`)')
178
339
  .action(async (opts) => {
179
- if (opts.remote) {
180
- return pullRemoteConfig(opts.remote);
340
+ const flagServer = opts.server ?? opts.remote;
341
+ if (opts.remote && !opts.server) {
342
+ log.warn('`--remote` is deprecated, use `--server` instead.');
343
+ }
344
+ if (flagServer) {
345
+ return pullRemoteConfig(flagServer, opts.data, { token: opts.token });
181
346
  }
182
347
  const workspace = new Workspace();
183
348
  if (!workspace.isWorkspace()) {
@@ -203,13 +368,21 @@ export const pullCommand = new Command('pull')
203
368
  else if (result === 'up-to-date') {
204
369
  log.info('.studiograph: already up to date');
205
370
  }
371
+ else {
372
+ // Diverged / any other non-clean state — surface it the same way
373
+ // the folder loop does so the user actually sees the problem
374
+ // instead of walking into a silent no-op.
375
+ log.warn('.studiograph: diverged — has local commits not on the server');
376
+ logManualGuidance(configPath);
377
+ hasConflict = true;
378
+ }
206
379
  }
207
380
  catch (error) {
208
381
  log.error(`.studiograph: ${error instanceof Error ? error.message : 'Unknown error'}`);
209
382
  hasError = true;
210
383
  }
211
384
  }
212
- // ── Step 2: reload config — picks up any new collections added server-side ─
385
+ // ── Step 2: reload config — picks up any new folders added server-side ─
213
386
  // Must use a fresh Workspace instance — loadConfig() caches this.config on
214
387
  // first call, so the original instance would return stale data after the pull.
215
388
  const freshWorkspace = new Workspace(workspaceRoot);
@@ -220,13 +393,12 @@ export const pullCommand = new Command('pull')
220
393
  freshWorkspace.writeConfig(config);
221
394
  }
222
395
  const serverUrl = (config.server_url ?? savedServerUrl)?.replace(/\/+$/, '');
223
- // ── Step 3: pull or clone each collection ────────────────────────────────
396
+ // ── Step 3: pull or clone each folder ────────────────────────────────
224
397
  // Resolve git credentials for the embedded server:
225
398
  // 1. Stored JWT from `studiograph join` — per-user access control (preferred)
226
- // 2. API key from auth-seed.json — admin access (fallback for workspace owners)
399
+ // 2. Stored personal API token from ~/.studiograph/user.json
227
400
  let serverGitCredentials;
228
401
  if (serverUrl) {
229
- // Try stored JWT first (saved by studiograph join)
230
402
  const serverAuthPath = join(workspaceRoot, '.studiograph', 'server-auth.json');
231
403
  if (existsSync(serverAuthPath)) {
232
404
  try {
@@ -237,29 +409,20 @@ export const pullCommand = new Command('pull')
237
409
  }
238
410
  catch { /* non-fatal */ }
239
411
  }
240
- // Fall back to API key (used by workspace owners who set up with `studiograph serve`)
241
412
  if (!serverGitCredentials) {
242
- try {
243
- const seedPath = join(workspaceRoot, '.studiograph', 'auth-seed.json');
244
- if (existsSync(seedPath)) {
245
- const seed = JSON.parse(readFileSync(seedPath, 'utf-8'));
246
- const apiKey = seed.apiKey;
247
- if (apiKey)
248
- serverGitCredentials = { username: '_apikey_', password: apiKey };
249
- }
413
+ const storedToken = getStudiographToken(serverUrl);
414
+ if (storedToken) {
415
+ serverGitCredentials = { username: '_token_', password: storedToken };
250
416
  }
251
- catch { /* non-fatal */ }
252
417
  }
253
418
  }
254
419
  for (const repo of config.repos) {
255
- if (repo.private)
256
- continue;
257
420
  const repoPath = join(workspaceRoot, repo.path);
258
- // New collection — directory missing or exists but isn't a git repo (e.g. failed clone)
421
+ // New folder — directory missing or exists but isn't a git repo (e.g. failed clone)
259
422
  if (!isGitRepo(repoPath)) {
260
423
  const cloneUrl = serverUrl ? `${serverUrl}/git/${repo.name}` : null;
261
424
  if (!cloneUrl) {
262
- log.warn(`${repo.name}: new collection has no remote — skipping`);
425
+ log.warn(`${repo.name}: new folder has no remote — skipping`);
263
426
  continue;
264
427
  }
265
428
  try {
@@ -269,7 +432,11 @@ export const pullCommand = new Command('pull')
269
432
  if (existsSync(repoPath))
270
433
  rmSync(repoPath, { recursive: true, force: true });
271
434
  mkdirSync(repoPath, { recursive: true });
272
- gitClone(cloneUrl, repoPath, { silent: true, credentials: serverGitCredentials });
435
+ gitClone(cloneUrl, repoPath, {
436
+ silent: true,
437
+ credentials: serverGitCredentials,
438
+ extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS,
439
+ });
273
440
  log.success(`${repo.name}: cloned`);
274
441
  }
275
442
  catch (error) {
@@ -278,11 +445,14 @@ export const pullCommand = new Command('pull')
278
445
  }
279
446
  continue;
280
447
  }
281
- // Existing collection — pull if it has a remote
448
+ // Existing folder — pull if it has a remote
282
449
  if (!isGitRepo(repoPath) || !gitHasRemote(repoPath))
283
450
  continue;
284
451
  try {
285
- const result = gitPull(repoPath, { credentials: serverGitCredentials });
452
+ const result = gitPull(repoPath, {
453
+ credentials: serverGitCredentials,
454
+ extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS,
455
+ });
286
456
  if (result === 'updated') {
287
457
  log.success(`${repo.name}: updated`);
288
458
  }
@@ -300,12 +470,15 @@ export const pullCommand = new Command('pull')
300
470
  hasError = true;
301
471
  }
302
472
  }
303
- // Apply auth seed if it was updated by pulling .studiograph
473
+ // Apply auth seed if it was updated by pulling .studiograph.
474
+ // Overwrite mode: the seed file just came from the remote config repo
475
+ // and is authoritative over any local-shadow rows.
304
476
  const seedPath = join(workspaceRoot, '.studiograph', 'auth-seed.json');
305
477
  if (existsSync(seedPath)) {
306
478
  try {
307
- const authService = new AuthService(join(workspaceRoot, '.studiograph'));
308
- authService.applySeed();
479
+ // AuthService appends `.studiograph` pass workspace root.
480
+ const authService = new AuthService(workspaceRoot);
481
+ authService.applySeed({ mode: 'overwrite' });
309
482
  authService.close();
310
483
  }
311
484
  catch {
@@ -317,12 +490,12 @@ export const pullCommand = new Command('pull')
317
490
  process.exit(1);
318
491
  }
319
492
  else if (hasError) {
320
- outro('❌ Pull failed for one or more collections.');
493
+ outro('❌ Pull failed for one or more folders.');
321
494
  process.exit(1);
322
495
  }
323
496
  });
324
497
  // ─── Remote config push ─────────────────────────────────────────────────────
325
- async function pushRemoteConfig(remoteUrl) {
498
+ async function pushRemoteConfig(remoteUrl, includeData = false, authOpts = {}) {
326
499
  const workspace = new Workspace();
327
500
  if (!workspace.isWorkspace()) {
328
501
  console.error('❌ Not a Studiograph workspace. Run `studiograph init` first.');
@@ -332,45 +505,13 @@ async function pushRemoteConfig(remoteUrl) {
332
505
  const base = remoteUrl.replace(/\/+$/, '');
333
506
  const workspaceRoot = workspace.getWorkspacePath();
334
507
  const sgDir = join(workspaceRoot, '.studiograph');
335
- // Prompt for admin credentials
336
- const email = await text({ message: 'Admin email:', validate: (v) => v.includes('@') ? undefined : 'Enter a valid email' });
337
- if (typeof email === 'symbol') {
338
- outro('Cancelled');
339
- process.exit(0);
340
- return;
341
- }
342
- const password = await passwordPrompt({ message: 'Password:' });
343
- if (typeof password === 'symbol') {
344
- outro('Cancelled');
345
- process.exit(0);
346
- return;
347
- }
348
- // Login
349
- log.info('Authenticating...');
350
- let token;
508
+ // Resolve authentication sg_ token only (Phase C5).
509
+ let auth;
351
510
  try {
352
- const loginRes = await fetch(`${base}/api/auth/login`, {
353
- method: 'POST',
354
- headers: { 'Content-Type': 'application/json' },
355
- body: JSON.stringify({ email, password }),
356
- });
357
- if (!loginRes.ok) {
358
- const body = await loginRes.json().catch(() => ({}));
359
- outro(`Login failed: ${body.error || loginRes.statusText}`);
360
- process.exit(1);
361
- return;
362
- }
363
- const cookies = loginRes.headers.getSetCookie?.() ?? [];
364
- const tokenCookie = cookies.find(c => c.startsWith('__sg_token='));
365
- if (!tokenCookie) {
366
- outro('Login succeeded but no session cookie was returned');
367
- process.exit(1);
368
- return;
369
- }
370
- token = tokenCookie.split(';')[0];
511
+ auth = resolveRemoteAuth(base, authOpts);
371
512
  }
372
513
  catch (err) {
373
- outro(`Could not connect to ${base}: ${err.message}`);
514
+ outro(err.message);
374
515
  process.exit(1);
375
516
  return;
376
517
  }
@@ -402,13 +543,24 @@ async function pushRemoteConfig(remoteUrl) {
402
543
  }
403
544
  // Connectors (workspace-level, already sanitized)
404
545
  const connectors = ConnectorManager.loadWorkspaceConfigs(workspaceRoot);
405
- const bundle = { workspace: config, about, authSeed, sources, connectors };
546
+ // Phase 3: route the bundle through the same sanitizer the server's
547
+ // GET /api/config/bundle endpoint uses. CLI push and server export now
548
+ // produce byte-identical output for the same workspace state — bootstrap
549
+ // class fields (jwtSecret, deprecated apiKey) drop here so the POST
550
+ // endpoint's strict-reject doesn't bounce older client builds.
551
+ const bundle = buildConfigBundle({
552
+ workspace: config,
553
+ about,
554
+ authSeed: (authSeed ?? { users: [] }),
555
+ sources,
556
+ connectors: connectors,
557
+ });
406
558
  // Push to remote
407
559
  log.info('Pushing config...');
408
560
  try {
409
561
  const res = await fetch(`${base}/api/config/bundle`, {
410
562
  method: 'POST',
411
- headers: { 'Content-Type': 'application/json', 'Cookie': token },
563
+ headers: { ...auth.httpHeader, 'Content-Type': 'application/json' },
412
564
  body: JSON.stringify(bundle),
413
565
  });
414
566
  if (!res.ok) {
@@ -423,7 +575,16 @@ async function pushRemoteConfig(remoteUrl) {
423
575
  log.success(item);
424
576
  }
425
577
  }
426
- outro(`Pushed config to ${base}`);
578
+ // Push workspace data (markdown files) if requested
579
+ if (includeData) {
580
+ try {
581
+ await pushRemoteData(base, auth, workspace, workspaceRoot);
582
+ }
583
+ catch (err) {
584
+ log.error(`Data push failed: ${err.message}`);
585
+ }
586
+ }
587
+ outro(`Pushed to ${base}${includeData ? ' (config + data)' : ' (config)'}`);
427
588
  }
428
589
  catch (err) {
429
590
  outro(`Failed: ${err.message}`);
@@ -449,27 +610,41 @@ async function serverFetch(serverUrl, path, authHeader) {
449
610
  }
450
611
  return res.json();
451
612
  }
452
- async function ensureServerCollection(serverUrl, repoName, isPrivate, authHeader) {
613
+ async function ensureServerFolder(serverUrl, repoName, isPersonal, authHeader) {
614
+ const headers = { 'Content-Type': 'application/json' };
615
+ if (typeof authHeader === 'string') {
616
+ headers['Authorization'] = authHeader;
617
+ }
618
+ else {
619
+ Object.assign(headers, authHeader);
620
+ }
453
621
  const res = await fetch(`${serverUrl}/api/repos`, {
454
622
  method: 'POST',
455
- headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' },
456
- body: JSON.stringify({ name: repoName, ...(isPrivate ? { private: true } : {}) }),
623
+ headers,
624
+ body: JSON.stringify({ name: repoName, ...(isPersonal ? { personal: true } : {}) }),
457
625
  });
458
626
  if (res.ok)
459
627
  return 'created';
460
628
  if (res.status === 409)
461
629
  return 'exists'; // already exists
462
630
  const body = await res.json().catch(() => ({}));
463
- throw new Error(body.error || `Failed to create collection "${repoName}": ${res.statusText}`);
631
+ throw new Error(body.error || `Failed to create folder "${repoName}": ${res.statusText}`);
464
632
  }
465
633
  // ─── push ─────────────────────────────────────────────────────────────────────
466
634
  export const pushCommand = new Command('push')
467
635
  .description('Push local commits to remote across the workspace')
468
- .argument('[collection]', 'Push a specific collection (default: all)')
469
- .option('--remote <url>', 'Push config to a remote Studiograph server')
470
- .action(async (collection, opts) => {
471
- if (opts.remote) {
472
- return pushRemoteConfig(opts.remote);
636
+ .argument('[folder]', 'Push a specific folder (default: all)')
637
+ .option('--server <url>', 'Push config to a remote Studiograph server')
638
+ .option('--remote <url>', 'Deprecated alias for --server (removed in the next release)', undefined)
639
+ .option('--data', 'Also push workspace folder data (markdown files) to the remote server')
640
+ .option('--token <token>', 'sg_ API token (also reads STUDIOGRAPH_TOKEN; mint via `studiograph admin token issue <url>`)')
641
+ .action(async (folder, opts) => {
642
+ const flagServer = opts.server ?? opts.remote;
643
+ if (opts.remote && !opts.server) {
644
+ log.warn('`--remote` is deprecated, use `--server` instead.');
645
+ }
646
+ if (flagServer) {
647
+ return pushRemoteConfig(flagServer, opts.data, { token: opts.token });
473
648
  }
474
649
  const workspace = new Workspace();
475
650
  if (!workspace.isWorkspace()) {
@@ -480,78 +655,47 @@ export const pushCommand = new Command('push')
480
655
  const workspaceRoot = workspace.getWorkspacePath();
481
656
  const config = await workspace.loadConfig();
482
657
  const serverUrl = config.server_url?.replace(/\/+$/, '');
483
- // Build list of repos to push
484
- let repos = config.repos.filter(r => !r.private || serverUrl); // include private only when pushing to server
485
- if (collection) {
486
- const match = repos.find(r => r.name === collection);
658
+ // Push every folder shared and personal alike. Personal folders are
659
+ // per-user, but git-http (canAccessFolder hasRepoAccess) gates by
660
+ // owner so only the owner ever succeeds; the owner CLI sends the
661
+ // include-private escalation, so the owner can push any of them.
662
+ // Server-side, personal folders are auto-provisioned on login by
663
+ // auth-api.ts#ensurePrivateFolder, so the per-folder ensureServerFolder()
664
+ // call is skipped for them below (the createSharedFolder path would
665
+ // reject `entries-<number>` as a reserved name even though the folder
666
+ // already exists).
667
+ let repos = config.repos;
668
+ if (folder) {
669
+ const match = repos.find(r => r.name === folder);
487
670
  if (!match) {
488
- log.error(`Collection "${collection}" not found in workspace.`);
671
+ log.error(`Folder "${folder}" not found in workspace.`);
489
672
  process.exit(1);
490
673
  return;
491
674
  }
492
675
  repos = [match];
493
676
  }
494
- // Server-aware push: workspace has a server_url (set by `studiograph join`)
677
+ // Server-aware push: workspace has a `server_url` (set by `studiograph clone`).
495
678
  if (serverUrl) {
496
- // Resolve credentials: JWT (per-user) API key (admin) → prompt
497
- let authHeader;
498
- let gitCredentials;
499
- // 1. Stored JWT from `studiograph join` (per-user access control)
500
- const pushServerAuthPath = join(workspaceRoot, '.studiograph', 'server-auth.json');
679
+ // sg_ token only. resolveRemoteAuth handles the "no token" error.
680
+ let auth;
501
681
  try {
502
- if (existsSync(pushServerAuthPath)) {
503
- const sa = JSON.parse(readFileSync(pushServerAuthPath, 'utf-8'));
504
- if (sa.email && sa.jwtToken) {
505
- authHeader = makeBasicAuth(sa.email, sa.jwtToken);
506
- gitCredentials = { username: sa.email, password: sa.jwtToken };
507
- }
508
- }
509
- }
510
- catch { /* non-fatal */ }
511
- // 2. API key fallback (workspace owners who set up with `studiograph serve`)
512
- if (!authHeader) {
513
- try {
514
- const seedPathPush = join(workspaceRoot, '.studiograph', 'auth-seed.json');
515
- if (existsSync(seedPathPush)) {
516
- const seed = JSON.parse(readFileSync(seedPathPush, 'utf-8'));
517
- const pushApiKey = seed.apiKey;
518
- if (pushApiKey) {
519
- authHeader = makeBasicAuth('_apikey_', pushApiKey);
520
- gitCredentials = { username: '_apikey_', password: pushApiKey };
521
- }
522
- }
523
- }
524
- catch { /* non-fatal */ }
525
- }
526
- // 3. Interactive credential prompt as last resort
527
- if (!authHeader) {
528
- const email = await text({ message: 'Email:', validate: (v) => v.includes('@') ? undefined : 'Enter a valid email' });
529
- if (typeof email === 'symbol') {
530
- outro('Cancelled');
531
- process.exit(0);
532
- return;
533
- }
534
- const pass = await passwordPrompt({ message: 'Password:' });
535
- if (typeof pass === 'symbol') {
536
- outro('Cancelled');
537
- process.exit(0);
538
- return;
539
- }
540
- authHeader = makeBasicAuth(String(email), String(pass));
541
- gitCredentials = { username: String(email), password: String(pass) };
682
+ auth = resolveRemoteAuth(serverUrl, { token: undefined });
542
683
  }
543
- // All three branches above either set credentials or exit — this is a safety guard
544
- if (!authHeader || !gitCredentials) {
545
- outro('Could not resolve credentials');
684
+ catch (err) {
685
+ outro(err.message);
546
686
  process.exit(1);
547
687
  return;
548
688
  }
549
- // Validate credentials
689
+ const authHeader = auth.httpHeader.Authorization;
690
+ const gitCredentials = auth.gitCredentials;
691
+ // Cheap probe — surfaces a 401/expired token before we touch git
692
+ // (which would otherwise fail with a less useful "askpass auth
693
+ // failed" message). One round-trip, idempotent.
550
694
  try {
551
695
  await serverFetch(serverUrl, '/api/workspace', authHeader);
552
696
  }
553
697
  catch (err) {
554
- outro(`Authentication failed: ${err.message}`);
698
+ outro(`Authentication failed (${err.message}). Run \`studiograph admin token issue ${serverUrl}\` to mint a fresh token.`);
555
699
  process.exit(1);
556
700
  return;
557
701
  }
@@ -562,21 +706,43 @@ export const pushCommand = new Command('push')
562
706
  log.warn(`${repo.name}: not a git repo, skipping`);
563
707
  continue;
564
708
  }
709
+ // Personal folders skip the /api/repos POST. Detection has TWO
710
+ // sources: the `personal` flag (clone now preserves it — see
711
+ // clone.ts) and the reserved name pattern as a fallback for
712
+ // workspaces cloned before that fix, whose workspace.json carries a
713
+ // thin repo record without the flag. Anything matching
714
+ // `entries-<digit>` is owned by the user with that id and was
715
+ // auto-provisioned server-side via auth-api.ts#ensurePrivateFolder
716
+ // on login. The /api/repos path goes through createSharedFolder
717
+ // which rejects this exact pattern; the git push that follows
718
+ // hits git-http directly where canAccessFolder gates by owner.
719
+ const isPersonalByPattern = /^entries-\d+$/.test(repo.name);
720
+ const skipServerFolderEnsure = !!repo.personal || isPersonalByPattern;
565
721
  try {
566
- // Ensure collection exists on server
567
- const status = await ensureServerCollection(serverUrl, repo.name, !!repo.private, authHeader);
568
- if (status === 'created') {
569
- log.info(`${repo.name}: created on server`);
722
+ if (!skipServerFolderEnsure) {
723
+ const status = await ensureServerFolder(serverUrl, repo.name, false, authHeader);
724
+ if (status === 'created') {
725
+ log.info(`${repo.name}: created on server`);
726
+ }
570
727
  }
571
728
  // Set origin to server git URL
572
729
  gitSetRemote(repoPath, `${serverUrl}/git/${repo.name}`);
573
- // Push with credentials
574
- let result = gitPushWithCredentials(repoPath, gitCredentials);
730
+ // Push with the resolved sg_ token plus the owner escalation header.
731
+ // The server gates personal/solo folders to their owner-of-record —
732
+ // even the workspace owner gets a 404 without this header (the
733
+ // `includePrivate` flag is owner-only server-side, a no-op for
734
+ // everyone else). Required so the owner can push other users' private
735
+ // folders during migrations. Consistent with `studiograph clone`.
736
+ let result = gitPushWithCredentials(repoPath, gitCredentials, { extraHeaders: OWNER_INCLUDE_PRIVATE_HEADERS });
575
737
  if (result === 'rejected') {
576
738
  log.warn(`${repo.name}: push rejected — run \`studiograph pull\` first`);
577
739
  hasError = true;
578
740
  continue;
579
741
  }
742
+ if (result === 'not-found') {
743
+ log.warn(`${repo.name}: skipped — folder does not exist on the server (stale local clone; safe to remove locally)`);
744
+ continue;
745
+ }
580
746
  if (result === 'pushed') {
581
747
  log.success(`${repo.name}: pushed`);
582
748
  }
@@ -598,12 +764,12 @@ export const pushCommand = new Command('push')
598
764
  // Fallback: plain git push for repos that already have remotes
599
765
  const entries = await getRepoEntries(workspace, workspaceRoot);
600
766
  if (entries.length === 0) {
601
- log.info('No collections with remotes to push to. Use `studiograph join` to connect to a server.');
767
+ log.info('No folders with remotes to push to. Use `studiograph clone <url>` to connect to a server.');
602
768
  return;
603
769
  }
604
770
  let hasError = false;
605
771
  for (const entry of entries) {
606
- if (collection && entry.name !== collection)
772
+ if (folder && entry.name !== folder)
607
773
  continue;
608
774
  try {
609
775
  let result = gitPush(entry.path);
@@ -612,6 +778,10 @@ export const pushCommand = new Command('push')
612
778
  hasError = true;
613
779
  continue;
614
780
  }
781
+ if (result === 'not-found') {
782
+ log.warn(`${entry.name}: skipped — folder does not exist on the remote (stale local clone; safe to remove locally)`);
783
+ continue;
784
+ }
615
785
  if (result === 'pushed') {
616
786
  log.success(`${entry.name}: pushed`);
617
787
  }
@@ -625,7 +795,7 @@ export const pushCommand = new Command('push')
625
795
  }
626
796
  }
627
797
  if (hasError) {
628
- outro('Push failed for one or more collections.');
798
+ outro('Push failed for one or more folders.');
629
799
  process.exit(1);
630
800
  }
631
801
  });