studiograph 1.1.3 → 1.2.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/README.md +2 -8
  2. package/dist/agent/orchestrator.d.ts +53 -0
  3. package/dist/agent/orchestrator.js +197 -12
  4. package/dist/agent/orchestrator.js.map +1 -1
  5. package/dist/agent/prompts/system.md +43 -11
  6. package/dist/agent/skill-loader.d.ts +48 -0
  7. package/dist/agent/skill-loader.js +166 -0
  8. package/dist/agent/skill-loader.js.map +1 -0
  9. package/dist/agent/skills/{bundled/enrich-entities.md → enrich-entities.md} +12 -0
  10. package/dist/agent/skills/entity-schema.md +502 -0
  11. package/dist/agent/skills/obsidian-source-setup.md +246 -0
  12. package/dist/agent/skills/sync-configuration.md +144 -0
  13. package/dist/agent/skills/sync-setup.md +84 -0
  14. package/dist/agent/tools/connector-tools.d.ts +37 -0
  15. package/dist/agent/tools/connector-tools.js +132 -0
  16. package/dist/agent/tools/connector-tools.js.map +1 -0
  17. package/dist/agent/tools/fs-tools.d.ts +39 -0
  18. package/dist/agent/tools/fs-tools.js +106 -0
  19. package/dist/agent/tools/fs-tools.js.map +1 -0
  20. package/dist/agent/tools/graph-tools.d.ts +33 -1
  21. package/dist/agent/tools/graph-tools.js +192 -44
  22. package/dist/agent/tools/graph-tools.js.map +1 -1
  23. package/dist/agent/tools/load-skill.d.ts +1 -1
  24. package/dist/agent/tools/load-skill.js +1 -1
  25. package/dist/agent/tools/load-skill.js.map +1 -1
  26. package/dist/agent/tools/ops-tools.d.ts +24 -0
  27. package/dist/agent/tools/ops-tools.js +542 -0
  28. package/dist/agent/tools/ops-tools.js.map +1 -0
  29. package/dist/agent/tools/sync-tools.d.ts +33 -0
  30. package/dist/agent/tools/sync-tools.js +947 -0
  31. package/dist/agent/tools/sync-tools.js.map +1 -0
  32. package/dist/auth/github.d.ts +11 -8
  33. package/dist/auth/github.js +56 -75
  34. package/dist/auth/github.js.map +1 -1
  35. package/dist/cli/colors.d.ts +54 -0
  36. package/dist/cli/colors.js +133 -0
  37. package/dist/cli/colors.js.map +1 -0
  38. package/dist/cli/commands/app.js +121 -18
  39. package/dist/cli/commands/app.js.map +1 -1
  40. package/dist/cli/commands/auth.d.ts +1 -1
  41. package/dist/cli/commands/auth.js +26 -10
  42. package/dist/cli/commands/auth.js.map +1 -1
  43. package/dist/cli/commands/clone.d.ts +9 -0
  44. package/dist/cli/commands/clone.js +167 -0
  45. package/dist/cli/commands/clone.js.map +1 -0
  46. package/dist/cli/commands/commit.d.ts +8 -0
  47. package/dist/cli/commands/commit.js +44 -0
  48. package/dist/cli/commands/commit.js.map +1 -0
  49. package/dist/cli/commands/connector.js +10 -2
  50. package/dist/cli/commands/connector.js.map +1 -1
  51. package/dist/cli/commands/deploy.d.ts +4 -6
  52. package/dist/cli/commands/deploy.js +292 -115
  53. package/dist/cli/commands/deploy.js.map +1 -1
  54. package/dist/cli/commands/enrich.d.ts +11 -0
  55. package/dist/cli/commands/enrich.js +135 -0
  56. package/dist/cli/commands/enrich.js.map +1 -0
  57. package/dist/cli/commands/graphrag.d.ts +12 -0
  58. package/dist/cli/commands/graphrag.js +122 -0
  59. package/dist/cli/commands/graphrag.js.map +1 -0
  60. package/dist/cli/commands/init.js +29 -196
  61. package/dist/cli/commands/init.js.map +1 -1
  62. package/dist/cli/commands/join.js +23 -3
  63. package/dist/cli/commands/join.js.map +1 -1
  64. package/dist/cli/commands/orphans.d.ts +8 -0
  65. package/dist/cli/commands/orphans.js +125 -0
  66. package/dist/cli/commands/orphans.js.map +1 -0
  67. package/dist/cli/commands/provision.js +11 -7
  68. package/dist/cli/commands/provision.js.map +1 -1
  69. package/dist/cli/commands/r2.js +8 -2
  70. package/dist/cli/commands/r2.js.map +1 -1
  71. package/dist/cli/commands/redeploy.d.ts +9 -0
  72. package/dist/cli/commands/redeploy.js +203 -0
  73. package/dist/cli/commands/redeploy.js.map +1 -0
  74. package/dist/cli/commands/reset.d.ts +12 -0
  75. package/dist/cli/commands/reset.js +137 -0
  76. package/dist/cli/commands/reset.js.map +1 -0
  77. package/dist/cli/commands/resolve.d.ts +8 -0
  78. package/dist/cli/commands/resolve.js +85 -0
  79. package/dist/cli/commands/resolve.js.map +1 -0
  80. package/dist/cli/commands/review.d.ts +19 -0
  81. package/dist/cli/commands/review.js +128 -0
  82. package/dist/cli/commands/review.js.map +1 -0
  83. package/dist/cli/commands/serve.js +55 -8
  84. package/dist/cli/commands/serve.js.map +1 -1
  85. package/dist/cli/commands/source.d.ts +16 -0
  86. package/dist/cli/commands/source.js +159 -0
  87. package/dist/cli/commands/source.js.map +1 -0
  88. package/dist/cli/commands/start.js +307 -55
  89. package/dist/cli/commands/start.js.map +1 -1
  90. package/dist/cli/commands/sync-entities.d.ts +13 -0
  91. package/dist/cli/commands/sync-entities.js +242 -0
  92. package/dist/cli/commands/sync-entities.js.map +1 -0
  93. package/dist/cli/commands/sync.js +81 -5
  94. package/dist/cli/commands/sync.js.map +1 -1
  95. package/dist/cli/index.js +45 -9
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/cli/scaffolding.d.ts +2 -1
  98. package/dist/cli/scaffolding.js +38 -23
  99. package/dist/cli/scaffolding.js.map +1 -1
  100. package/dist/cli/setup-wizard.d.ts +30 -0
  101. package/dist/cli/setup-wizard.js +244 -0
  102. package/dist/cli/setup-wizard.js.map +1 -0
  103. package/dist/cli/sync-review-interactive.d.ts +31 -0
  104. package/dist/cli/sync-review-interactive.js +393 -0
  105. package/dist/cli/sync-review-interactive.js.map +1 -0
  106. package/dist/cli/theme.d.ts +31 -0
  107. package/dist/cli/theme.js +116 -0
  108. package/dist/cli/theme.js.map +1 -0
  109. package/dist/core/graph.d.ts +40 -12
  110. package/dist/core/graph.js +344 -104
  111. package/dist/core/graph.js.map +1 -1
  112. package/dist/core/migration-runner.d.ts +4 -1
  113. package/dist/core/migration-runner.js +14 -3
  114. package/dist/core/migration-runner.js.map +1 -1
  115. package/dist/core/types.d.ts +2 -4
  116. package/dist/core/types.js +1 -2
  117. package/dist/core/types.js.map +1 -1
  118. package/dist/core/user-config.d.ts +12 -0
  119. package/dist/core/user-config.js.map +1 -1
  120. package/dist/core/workspace-manager.d.ts +6 -1
  121. package/dist/core/workspace-manager.js +29 -4
  122. package/dist/core/workspace-manager.js.map +1 -1
  123. package/dist/core/workspace.d.ts +13 -5
  124. package/dist/core/workspace.js +115 -33
  125. package/dist/core/workspace.js.map +1 -1
  126. package/dist/lib/lib/utils.d.ts +2 -0
  127. package/dist/lib/lib/utils.js +6 -0
  128. package/dist/lib/lib/utils.js.map +1 -0
  129. package/dist/mcp/connector-manager.d.ts +7 -3
  130. package/dist/mcp/connector-manager.js +61 -16
  131. package/dist/mcp/connector-manager.js.map +1 -1
  132. package/dist/mcp/connectors/asana.d.ts +2 -0
  133. package/dist/mcp/connectors/asana.js +20 -0
  134. package/dist/mcp/connectors/asana.js.map +1 -0
  135. package/dist/mcp/connectors/definitions.d.ts +3 -1
  136. package/dist/mcp/connectors/definitions.js +19 -127
  137. package/dist/mcp/connectors/definitions.js.map +1 -1
  138. package/dist/mcp/connectors/figma.d.ts +5 -0
  139. package/dist/mcp/connectors/figma.js +21 -0
  140. package/dist/mcp/connectors/figma.js.map +1 -0
  141. package/dist/mcp/connectors/gdrive.d.ts +2 -0
  142. package/dist/mcp/connectors/gdrive.js +20 -0
  143. package/dist/mcp/connectors/gdrive.js.map +1 -0
  144. package/dist/mcp/connectors/granola.d.ts +2 -0
  145. package/dist/mcp/connectors/granola.js +12 -0
  146. package/dist/mcp/connectors/granola.js.map +1 -0
  147. package/dist/mcp/connectors/linear.d.ts +2 -0
  148. package/dist/mcp/connectors/linear.js +19 -0
  149. package/dist/mcp/connectors/linear.js.map +1 -0
  150. package/dist/mcp/connectors/obsidian.d.ts +2 -0
  151. package/dist/mcp/connectors/obsidian.js +19 -0
  152. package/dist/mcp/connectors/obsidian.js.map +1 -0
  153. package/dist/mcp/connectors/pipedrive.d.ts +2 -0
  154. package/dist/mcp/connectors/pipedrive.js +20 -0
  155. package/dist/mcp/connectors/pipedrive.js.map +1 -0
  156. package/dist/mcp/connectors/slack.d.ts +2 -0
  157. package/dist/mcp/connectors/slack.js +21 -0
  158. package/dist/mcp/connectors/slack.js.map +1 -0
  159. package/dist/mcp/oauth-provider.d.ts +41 -0
  160. package/dist/mcp/oauth-provider.js +160 -0
  161. package/dist/mcp/oauth-provider.js.map +1 -0
  162. package/dist/server/index.js +97 -11
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/plugin-loader.d.ts +8 -0
  165. package/dist/server/plugin-loader.js +54 -2
  166. package/dist/server/plugin-loader.js.map +1 -1
  167. package/dist/server/routes/chat.d.ts +3 -2
  168. package/dist/server/routes/chat.js +67 -16
  169. package/dist/server/routes/chat.js.map +1 -1
  170. package/dist/server/routes/git-api.d.ts +9 -0
  171. package/dist/server/routes/git-api.js +82 -0
  172. package/dist/server/routes/git-api.js.map +1 -0
  173. package/dist/server/routes/graph-api.d.ts +2 -2
  174. package/dist/server/routes/graph-api.js +164 -3
  175. package/dist/server/routes/graph-api.js.map +1 -1
  176. package/dist/server/routes/workspace-api.d.ts +9 -0
  177. package/dist/server/routes/workspace-api.js +170 -0
  178. package/dist/server/routes/workspace-api.js.map +1 -0
  179. package/dist/services/assets/base.d.ts +2 -2
  180. package/dist/services/assets/base.js +4 -4
  181. package/dist/services/assets/base.js.map +1 -1
  182. package/dist/services/assets/index.d.ts +6 -6
  183. package/dist/services/assets/index.js +12 -12
  184. package/dist/services/assets/index.js.map +1 -1
  185. package/dist/services/git.d.ts +31 -0
  186. package/dist/services/git.js +92 -3
  187. package/dist/services/git.js.map +1 -1
  188. package/dist/services/github-provisioner.d.ts +8 -3
  189. package/dist/services/github-provisioner.js +35 -8
  190. package/dist/services/github-provisioner.js.map +1 -1
  191. package/dist/services/lint-service.js +8 -1
  192. package/dist/services/lint-service.js.map +1 -1
  193. package/dist/services/markdown.js +3 -3
  194. package/dist/services/markdown.js.map +1 -1
  195. package/dist/services/memory-service.d.ts +1 -1
  196. package/dist/services/memory-service.js +2 -3
  197. package/dist/services/memory-service.js.map +1 -1
  198. package/dist/services/orphan-service.d.ts +31 -0
  199. package/dist/services/orphan-service.js +100 -0
  200. package/dist/services/orphan-service.js.map +1 -0
  201. package/dist/services/sync/commit.d.ts +60 -0
  202. package/dist/services/sync/commit.js +370 -0
  203. package/dist/services/sync/commit.js.map +1 -0
  204. package/dist/services/sync/context-index.d.ts +69 -0
  205. package/dist/services/sync/context-index.js +280 -0
  206. package/dist/services/sync/context-index.js.map +1 -0
  207. package/dist/services/sync/derive.d.ts +34 -0
  208. package/dist/services/sync/derive.js +164 -0
  209. package/dist/services/sync/derive.js.map +1 -0
  210. package/dist/services/sync/enrichment-state.d.ts +31 -0
  211. package/dist/services/sync/enrichment-state.js +63 -0
  212. package/dist/services/sync/enrichment-state.js.map +1 -0
  213. package/dist/services/sync/enrichment.d.ts +25 -0
  214. package/dist/services/sync/enrichment.js +121 -0
  215. package/dist/services/sync/enrichment.js.map +1 -0
  216. package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
  217. package/dist/services/sync/frontmatter-extractor.js +273 -0
  218. package/dist/services/sync/frontmatter-extractor.js.map +1 -0
  219. package/dist/services/sync/graph-match-state.d.ts +33 -0
  220. package/dist/services/sync/graph-match-state.js +61 -0
  221. package/dist/services/sync/graph-match-state.js.map +1 -0
  222. package/dist/services/sync/graph-match.d.ts +53 -0
  223. package/dist/services/sync/graph-match.js +316 -0
  224. package/dist/services/sync/graph-match.js.map +1 -0
  225. package/dist/services/sync/graphrag-client.d.ts +43 -0
  226. package/dist/services/sync/graphrag-client.js +94 -0
  227. package/dist/services/sync/graphrag-client.js.map +1 -0
  228. package/dist/services/sync/graphrag-config.d.ts +16 -0
  229. package/dist/services/sync/graphrag-config.js +39 -0
  230. package/dist/services/sync/graphrag-config.js.map +1 -0
  231. package/dist/services/sync/graphrag-context.d.ts +14 -0
  232. package/dist/services/sync/graphrag-context.js +109 -0
  233. package/dist/services/sync/graphrag-context.js.map +1 -0
  234. package/dist/services/sync/graphrag-indexer.d.ts +30 -0
  235. package/dist/services/sync/graphrag-indexer.js +358 -0
  236. package/dist/services/sync/graphrag-indexer.js.map +1 -0
  237. package/dist/services/sync/llm.d.ts +32 -0
  238. package/dist/services/sync/llm.js +115 -0
  239. package/dist/services/sync/llm.js.map +1 -0
  240. package/dist/services/sync/mcp-client.d.ts +59 -0
  241. package/dist/services/sync/mcp-client.js +285 -0
  242. package/dist/services/sync/mcp-client.js.map +1 -0
  243. package/dist/services/sync/model-factory.d.ts +10 -0
  244. package/dist/services/sync/model-factory.js +24 -0
  245. package/dist/services/sync/model-factory.js.map +1 -0
  246. package/dist/services/sync/name-quality.d.ts +31 -0
  247. package/dist/services/sync/name-quality.js +60 -0
  248. package/dist/services/sync/name-quality.js.map +1 -0
  249. package/dist/services/sync/output-schemas.d.ts +92 -0
  250. package/dist/services/sync/output-schemas.js +43 -0
  251. package/dist/services/sync/output-schemas.js.map +1 -0
  252. package/dist/services/sync/prompts.d.ts +19 -0
  253. package/dist/services/sync/prompts.js +128 -0
  254. package/dist/services/sync/prompts.js.map +1 -0
  255. package/dist/services/sync/reconciler.d.ts +48 -0
  256. package/dist/services/sync/reconciler.js +295 -0
  257. package/dist/services/sync/reconciler.js.map +1 -0
  258. package/dist/services/sync/source-config.d.ts +45 -0
  259. package/dist/services/sync/source-config.js +208 -0
  260. package/dist/services/sync/source-config.js.map +1 -0
  261. package/dist/services/sync/source-definitions/asana.d.ts +15 -0
  262. package/dist/services/sync/source-definitions/asana.js +48 -0
  263. package/dist/services/sync/source-definitions/asana.js.map +1 -0
  264. package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
  265. package/dist/services/sync/source-definitions/definitions.js +26 -0
  266. package/dist/services/sync/source-definitions/definitions.js.map +1 -0
  267. package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
  268. package/dist/services/sync/source-definitions/gdrive.js +68 -0
  269. package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
  270. package/dist/services/sync/source-definitions/granola.d.ts +2 -0
  271. package/dist/services/sync/source-definitions/granola.js +28 -0
  272. package/dist/services/sync/source-definitions/granola.js.map +1 -0
  273. package/dist/services/sync/source-definitions/linear.d.ts +2 -0
  274. package/dist/services/sync/source-definitions/linear.js +60 -0
  275. package/dist/services/sync/source-definitions/linear.js.map +1 -0
  276. package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
  277. package/dist/services/sync/source-definitions/obsidian.js +55 -0
  278. package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
  279. package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
  280. package/dist/services/sync/source-definitions/pipedrive.js +52 -0
  281. package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
  282. package/dist/services/sync/staging.d.ts +53 -0
  283. package/dist/services/sync/staging.js +131 -0
  284. package/dist/services/sync/staging.js.map +1 -0
  285. package/dist/services/sync/structured-extractor.d.ts +49 -0
  286. package/dist/services/sync/structured-extractor.js +344 -0
  287. package/dist/services/sync/structured-extractor.js.map +1 -0
  288. package/dist/services/sync/sync-runner.d.ts +32 -0
  289. package/dist/services/sync/sync-runner.js +195 -0
  290. package/dist/services/sync/sync-runner.js.map +1 -0
  291. package/dist/services/sync/sync-state.d.ts +43 -0
  292. package/dist/services/sync/sync-state.js +154 -0
  293. package/dist/services/sync/sync-state.js.map +1 -0
  294. package/dist/services/sync/types.d.ts +203 -0
  295. package/dist/services/sync/types.js +8 -0
  296. package/dist/services/sync/types.js.map +1 -0
  297. package/dist/services/sync/unstructured-extractor.d.ts +29 -0
  298. package/dist/services/sync/unstructured-extractor.js +197 -0
  299. package/dist/services/sync/unstructured-extractor.js.map +1 -0
  300. package/dist/services/vector-service.d.ts +11 -0
  301. package/dist/services/vector-service.js +42 -0
  302. package/dist/services/vector-service.js.map +1 -1
  303. package/dist/utils/git.d.ts +31 -4
  304. package/dist/utils/git.js +65 -7
  305. package/dist/utils/git.js.map +1 -1
  306. package/dist/utils/merge-resolver.d.ts +60 -0
  307. package/dist/utils/merge-resolver.js +304 -0
  308. package/dist/utils/merge-resolver.js.map +1 -0
  309. package/dist/utils/preflight.d.ts +2 -1
  310. package/dist/utils/preflight.js +8 -1
  311. package/dist/utils/preflight.js.map +1 -1
  312. package/dist/utils/workspace-config.d.ts +8 -0
  313. package/dist/utils/workspace-config.js +22 -0
  314. package/dist/utils/workspace-config.js.map +1 -0
  315. package/dist/web/_app/env.js +1 -0
  316. package/dist/web/_app/immutable/assets/0.BwJV4fvl.css +1 -0
  317. package/dist/web/_app/immutable/assets/2.DRHi7ABa.css +1 -0
  318. package/dist/web/_app/immutable/assets/3.CnAQdPKU.css +1 -0
  319. package/dist/web/_app/immutable/assets/4.BG92MufE.css +1 -0
  320. package/dist/web/_app/immutable/assets/5.CfrQIPYs.css +1 -0
  321. package/dist/web/_app/immutable/assets/ChatPanel.BNzaCFTL.css +1 -0
  322. package/dist/web/_app/immutable/assets/editor.D6Rjo7RE.css +1 -0
  323. package/dist/web/_app/immutable/chunks/4QY4j-jX.js +1 -0
  324. package/dist/web/_app/immutable/chunks/B4G4uWkV.js +1 -0
  325. package/dist/web/_app/immutable/chunks/BB_5th5W.js +3383 -0
  326. package/dist/web/_app/immutable/chunks/CUzqHQY_.js +1 -0
  327. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +1 -0
  328. package/dist/web/_app/immutable/chunks/CksE5s8n.js +1 -0
  329. package/dist/web/_app/immutable/chunks/CqkleIqs.js +1 -0
  330. package/dist/web/_app/immutable/chunks/D0JBkEPE.js +86 -0
  331. package/dist/web/_app/immutable/chunks/D2K5GzLj.js +1 -0
  332. package/dist/web/_app/immutable/chunks/DEkoussQ.js +2 -0
  333. package/dist/web/_app/immutable/chunks/DW-KmHRi.js +1 -0
  334. package/dist/web/_app/immutable/chunks/DcCr4z9k.js +1 -0
  335. package/dist/web/_app/immutable/chunks/Dg2wWwJu.js +2 -0
  336. package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +18 -0
  337. package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +5 -0
  338. package/dist/web/_app/immutable/chunks/DtVH--hH.js +6 -0
  339. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +1 -0
  340. package/dist/web/_app/immutable/chunks/SBEriEQR.js +1 -0
  341. package/dist/web/_app/immutable/chunks/WSUKABI_.js +1 -0
  342. package/dist/web/_app/immutable/chunks/YTERt3Ul.js +6 -0
  343. package/dist/web/_app/immutable/chunks/m_R7HatS.js +1 -0
  344. package/dist/web/_app/immutable/chunks/vlmEnjfO.js +1 -0
  345. package/dist/web/_app/immutable/entry/app.B9pwpU_x.js +2 -0
  346. package/dist/web/_app/immutable/entry/start.CDuNCEco.js +1 -0
  347. package/dist/web/_app/immutable/nodes/0.YEQhw1us.js +1 -0
  348. package/dist/web/_app/immutable/nodes/1.CvmHhpRy.js +1 -0
  349. package/dist/web/_app/immutable/nodes/2.c5k1r7dq.js +1 -0
  350. package/dist/web/_app/immutable/nodes/3.B24tcdLK.js +1 -0
  351. package/dist/web/_app/immutable/nodes/4.kX2m5Pp9.js +16 -0
  352. package/dist/web/_app/immutable/nodes/5.DELt6wTD.js +2 -0
  353. package/dist/web/_app/version.json +1 -0
  354. package/dist/web/index.html +41 -0
  355. package/package.json +21 -7
  356. /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
@@ -5,15 +5,37 @@
5
5
  */
6
6
  import { Command } from 'commander';
7
7
  import { intro, outro, spinner, confirm, log } from '@clack/prompts';
8
- import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, readdirSync } from 'fs';
8
+ import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, readdirSync, rmSync } from 'fs';
9
9
  import { join, resolve } from 'path';
10
- import { execSync } from 'child_process';
10
+ import { tmpdir } from 'os';
11
+ import { execSync, spawnSync } from 'child_process';
11
12
  import { Workspace } from '../../core/workspace.js';
13
+ import { RepoType } from '../../core/types.js';
14
+ /** Check if a source string looks like a Git URL */
15
+ function isGitUrl(source) {
16
+ return (source.startsWith('https://') ||
17
+ source.startsWith('http://') ||
18
+ source.startsWith('git@') ||
19
+ source.startsWith('git://') ||
20
+ source.startsWith('ssh://'));
21
+ }
22
+ /** Clone a Git URL to a temp directory. Returns the cloned path, or null on failure. */
23
+ function cloneToTemp(url, s) {
24
+ const dir = join(tmpdir(), `studiograph-app-${Date.now()}`);
25
+ s.start(`Cloning ${url}...`);
26
+ const result = spawnSync('git', ['clone', '--depth', '1', url, dir], { encoding: 'utf-8', stdio: 'pipe' });
27
+ if (result.status !== 0) {
28
+ s.stop('Clone failed');
29
+ return null;
30
+ }
31
+ s.stop('Cloned');
32
+ return dir;
33
+ }
12
34
  export const appCommand = new Command('app')
13
35
  .description('Manage Studiograph app plugins');
14
36
  appCommand
15
37
  .command('install <source>')
16
- .description('Install an app plugin from a local directory')
38
+ .description('Install an app plugin from a local directory or Git URL')
17
39
  .option('--no-commit', 'Skip git commit after installing')
18
40
  .option('--push', 'Push to remote after committing')
19
41
  .action(async (source, options) => {
@@ -26,7 +48,23 @@ appCommand
26
48
  process.exit(1);
27
49
  return;
28
50
  }
29
- const sourceDir = resolve(source);
51
+ // If source is a URL, clone to temp dir
52
+ let sourceDir;
53
+ let clonedTempDir = null;
54
+ if (isGitUrl(source)) {
55
+ const s = spinner();
56
+ const tempDir = cloneToTemp(source, s);
57
+ if (!tempDir) {
58
+ outro(`❌ Failed to clone ${source}`);
59
+ process.exit(1);
60
+ return;
61
+ }
62
+ sourceDir = tempDir;
63
+ clonedTempDir = tempDir;
64
+ }
65
+ else {
66
+ sourceDir = resolve(source);
67
+ }
30
68
  const manifestPath = join(sourceDir, 'app.json');
31
69
  if (!existsSync(manifestPath)) {
32
70
  outro(`❌ No app.json found in ${sourceDir}`);
@@ -47,18 +85,31 @@ appCommand
47
85
  process.exit(1);
48
86
  return;
49
87
  }
50
- // Step 1: Build (if declared)
51
- if (manifest.build) {
88
+ // Step 1: Build (if declared, or auto-detect from package.json)
89
+ let buildCmd = manifest.build;
90
+ if (!buildCmd) {
91
+ const pkgPath = join(sourceDir, 'package.json');
92
+ if (existsSync(pkgPath)) {
93
+ try {
94
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
95
+ if (pkg.scripts?.build) {
96
+ buildCmd = 'npm install --ignore-scripts && npm run build';
97
+ }
98
+ }
99
+ catch { /* ignore */ }
100
+ }
101
+ }
102
+ if (buildCmd) {
52
103
  const buildSpinner = spinner();
53
104
  buildSpinner.start(`Building ${manifest.name}...`);
54
105
  try {
55
- execSync(manifest.build, { cwd: sourceDir, stdio: 'pipe' });
106
+ execSync(buildCmd, { cwd: sourceDir, stdio: 'pipe' });
56
107
  buildSpinner.stop(`Built ${manifest.name}`);
57
108
  }
58
109
  catch (err) {
59
110
  buildSpinner.stop('Build failed');
60
111
  const stderr = err?.stderr?.toString() ?? '';
61
- outro(`❌ Build command failed: ${manifest.build}\n${stderr}`);
112
+ outro(`❌ Build command failed: ${buildCmd}\n${stderr}`);
62
113
  process.exit(1);
63
114
  return;
64
115
  }
@@ -73,16 +124,19 @@ appCommand
73
124
  // app.json
74
125
  cpSync(manifestPath, join(destDir, 'app.json'));
75
126
  installed.push('app.json');
76
- // plugin file (normalise ./prefix)
127
+ // plugin file (normalise ./prefix, fall back to dist/ if not found at root)
77
128
  const pluginRelPath = manifest.plugin.replace(/^\.\//, '');
78
- const pluginSrc = join(sourceDir, pluginRelPath);
129
+ let pluginSrc = join(sourceDir, pluginRelPath);
130
+ if (!existsSync(pluginSrc)) {
131
+ pluginSrc = join(sourceDir, 'dist', pluginRelPath);
132
+ }
79
133
  if (existsSync(pluginSrc)) {
80
134
  cpSync(pluginSrc, join(destDir, 'plugin.js'));
81
135
  installed.push('plugin.js');
82
136
  }
83
137
  else {
84
138
  installSpinner.stop('');
85
- outro(`❌ Plugin file not found: ${pluginSrc}`);
139
+ outro(`❌ Plugin file not found: ${join(sourceDir, pluginRelPath)} (also checked dist/)`);
86
140
  process.exit(1);
87
141
  return;
88
142
  }
@@ -108,11 +162,38 @@ appCommand
108
162
  const count = readdirSync(toolsSrc).length;
109
163
  installed.push(`tools/ (${count} entries)`);
110
164
  }
111
- // theme/ — resolve source dir from themeDir field or ./theme/
112
- const themeSrcDir = manifest.themeDir
113
- ? join(sourceDir, manifest.themeDir.replace(/^\.\//, ''))
114
- : join(sourceDir, 'theme');
115
- if (existsSync(themeSrcDir)) {
165
+ // public/ — static assets (CSS, JS, fonts, images) served by the plugin
166
+ const publicSrc = join(sourceDir, 'public');
167
+ if (existsSync(publicSrc)) {
168
+ cpSync(publicSrc, join(destDir, 'public'), { recursive: true });
169
+ installed.push('public/');
170
+ }
171
+ // theme/ — resolve from themeDir field, or probe theme/ → themes/ → dist/themes/
172
+ let themeSrcDir = null;
173
+ if (manifest.themeDir) {
174
+ themeSrcDir = join(sourceDir, manifest.themeDir.replace(/^\.\//, ''));
175
+ }
176
+ else {
177
+ for (const candidate of ['theme', 'themes', join('dist', 'themes')]) {
178
+ const p = join(sourceDir, candidate);
179
+ if (existsSync(p)) {
180
+ themeSrcDir = p;
181
+ break;
182
+ }
183
+ }
184
+ }
185
+ if (themeSrcDir && existsSync(themeSrcDir)) {
186
+ // If theme dir contains a single subdirectory (e.g. themes/default/),
187
+ // copy its contents directly so files end up at theme/tokens.json
188
+ // rather than theme/default/tokens.json.
189
+ const themeEntries = readdirSync(themeSrcDir);
190
+ const hasTokensJson = themeEntries.includes('tokens.json');
191
+ if (!hasTokensJson && themeEntries.length === 1) {
192
+ const subdir = join(themeSrcDir, themeEntries[0]);
193
+ if (existsSync(join(subdir, 'tokens.json'))) {
194
+ themeSrcDir = subdir;
195
+ }
196
+ }
116
197
  const themeDest = join(destDir, 'theme');
117
198
  const tokensDestPath = join(themeDest, 'tokens.json');
118
199
  const existingTokens = existsSync(tokensDestPath)
@@ -131,7 +212,25 @@ appCommand
131
212
  for (const item of installed) {
132
213
  log.info(` ✓ ${item}`);
133
214
  }
134
- // Step 3: Git commit in .studiograph/
215
+ // Step 3: Create app-type repo if it doesn't exist yet
216
+ const existingRepos = (await workspace.loadConfig()).repos;
217
+ const repoExists = existingRepos.some(r => r.name === manifest.name);
218
+ if (!repoExists) {
219
+ const repoSpinner = spinner();
220
+ repoSpinner.start(`Creating ${manifest.name} repo...`);
221
+ try {
222
+ await workspace.registerRepo({
223
+ name: manifest.name,
224
+ type: RepoType.APP,
225
+ description: manifest.description ?? `${manifest.name} app entities`,
226
+ });
227
+ repoSpinner.stop(`Created ${manifest.name} repo`);
228
+ }
229
+ catch (err) {
230
+ repoSpinner.stop(`Repo creation skipped: ${err.message}`);
231
+ }
232
+ }
233
+ // Step 4: Git commit in .studiograph/
135
234
  if (options.commit !== false) {
136
235
  const commitSpinner = spinner();
137
236
  commitSpinner.start('Committing to config repo...');
@@ -145,7 +244,7 @@ appCommand
145
244
  commitSpinner.stop('Nothing to commit (already up to date)');
146
245
  }
147
246
  }
148
- // Step 4: Push
247
+ // Step 5: Push
149
248
  let shouldPush = options.push ?? false;
150
249
  if (!shouldPush && options.commit !== false) {
151
250
  const answer = await confirm({ message: 'Push to remote?' });
@@ -162,6 +261,10 @@ appCommand
162
261
  pushSpinner.stop('Push failed — run git push manually in .studiograph/');
163
262
  }
164
263
  }
264
+ // Clean up temp clone
265
+ if (clonedTempDir) {
266
+ rmSync(clonedTempDir, { recursive: true, force: true });
267
+ }
165
268
  outro(`✨ ${manifest.name} installed. Restart studiograph serve to apply.`);
166
269
  });
167
270
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/commands/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/commands/app.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * studiograph auth command
3
3
  *
4
4
  * Subcommands:
5
- * studiograph auth github — authenticate via GitHub Device Flow
5
+ * studiograph auth github — authenticate with a GitHub Personal Access Token
6
6
  * studiograph auth status — show current auth status
7
7
  * studiograph auth logout — clear stored token
8
8
  */
@@ -2,37 +2,46 @@
2
2
  * studiograph auth command
3
3
  *
4
4
  * Subcommands:
5
- * studiograph auth github — authenticate via GitHub Device Flow
5
+ * studiograph auth github — authenticate with a GitHub Personal Access Token
6
6
  * studiograph auth status — show current auth status
7
7
  * studiograph auth logout — clear stored token
8
8
  */
9
9
  import { Command } from 'commander';
10
10
  import { intro, outro, spinner, log } from '@clack/prompts';
11
- import { runDeviceFlow, storeToken, loadToken, clearToken, getGitHubUser, } from '../../auth/github.js';
11
+ import { promptForPAT, storeToken, loadToken, clearToken, getGitHubUser, } from '../../auth/github.js';
12
12
  const authGithubCommand = new Command('github')
13
- .description('Authenticate with GitHub using Device Flow')
13
+ .description('Authenticate with GitHub using a Personal Access Token')
14
14
  .action(async () => {
15
15
  intro('GitHub Authentication');
16
16
  try {
17
- log.info('Starting Device Flow...');
18
- // runDeviceFlow prints the user_code + URL itself
19
- const token = await runDeviceFlow();
17
+ const token = await promptForPAT();
20
18
  const s = spinner();
21
- s.start('Fetching your GitHub identity...');
19
+ s.start('Verifying token...');
22
20
  const user = await getGitHubUser(token);
23
- s.stop('Authenticated');
21
+ s.stop('Token verified');
24
22
  storeToken(token, user);
25
- outro(`✨ Authenticated as ${user.login} (${user.name})`);
23
+ outro(`Authenticated as ${user.login} (${user.name})`);
26
24
  }
27
25
  catch (error) {
28
26
  log.error(`Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
29
- outro('Could not authenticate with GitHub.');
27
+ outro('Could not authenticate with GitHub.');
30
28
  process.exit(1);
31
29
  }
32
30
  });
33
31
  const authStatusCommand = new Command('status')
34
32
  .description('Show current GitHub authentication status')
35
33
  .action(() => {
34
+ // Check env vars directly for source detection
35
+ const envSgToken = process.env.STUDIOGRAPH_GITHUB_TOKEN;
36
+ const envGhToken = process.env.GITHUB_TOKEN;
37
+ if (envSgToken) {
38
+ console.log('GitHub auth configured via STUDIOGRAPH_GITHUB_TOKEN environment variable');
39
+ return;
40
+ }
41
+ if (envGhToken) {
42
+ console.log('GitHub auth configured via GITHUB_TOKEN environment variable');
43
+ return;
44
+ }
36
45
  const stored = loadToken();
37
46
  if (stored) {
38
47
  console.log(`Authenticated as ${stored.user.login} (${stored.user.name})`);
@@ -47,6 +56,13 @@ const authStatusCommand = new Command('status')
47
56
  const authLogoutCommand = new Command('logout')
48
57
  .description('Clear stored GitHub token')
49
58
  .action(() => {
59
+ const envSgToken = process.env.STUDIOGRAPH_GITHUB_TOKEN;
60
+ const envGhToken = process.env.GITHUB_TOKEN;
61
+ if (envSgToken || envGhToken) {
62
+ const varName = envSgToken ? 'STUDIOGRAPH_GITHUB_TOKEN' : 'GITHUB_TOKEN';
63
+ console.log(`Token is set via ${varName} environment variable. Unset it to log out.`);
64
+ return;
65
+ }
50
66
  const stored = loadToken();
51
67
  if (!stored) {
52
68
  console.log('Not currently authenticated.');
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * studiograph clone command
3
+ *
4
+ * Clones an entire Studiograph workspace for admin setup on a new machine.
5
+ * Unlike `join` (which resolves identity and filters repos by role), `clone`
6
+ * pulls everything and walks through full setup: LLM provider + connectors.
7
+ */
8
+ import { Command } from 'commander';
9
+ export declare const cloneCommand: Command;
@@ -0,0 +1,167 @@
1
+ /**
2
+ * studiograph clone command
3
+ *
4
+ * Clones an entire Studiograph workspace for admin setup on a new machine.
5
+ * Unlike `join` (which resolves identity and filters repos by role), `clone`
6
+ * pulls everything and walks through full setup: LLM provider + connectors.
7
+ */
8
+ import { Command } from 'commander';
9
+ import { intro, confirm, outro, spinner, log } from '@clack/prompts';
10
+ import { existsSync, mkdirSync } from 'fs';
11
+ import { join, resolve } from 'path';
12
+ import { Workspace } from '../../core/workspace.js';
13
+ import { gitClone } from '../../utils/git.js';
14
+ import { runPreflight } from '../../utils/preflight.js';
15
+ import { reindexWorkspace } from '../../services/vector-service.js';
16
+ import { promptGitHubAuthIfNeeded, promptLLMSetupIfNeeded, promptConnectorSetup, } from '../setup-wizard.js';
17
+ export const cloneCommand = new Command('clone')
18
+ .description('Clone an entire workspace with full admin setup (LLM + connectors)')
19
+ .argument('<workspace-url>', 'GitHub URL to the .studiograph config repo')
20
+ .argument('[directory]', 'Directory to create workspace in (default: derived from workspace name)')
21
+ .action(async (workspaceUrl, directory) => {
22
+ intro('Clone Studiograph Workspace');
23
+ const ready = runPreflight();
24
+ if (!ready) {
25
+ process.exit(1);
26
+ return;
27
+ }
28
+ try {
29
+ // Step 1: Ensure GitHub auth
30
+ await promptGitHubAuthIfNeeded();
31
+ // Step 2: Clone config repo to temp location
32
+ const tempDir = join(process.cwd(), '.studiograph-temp-' + Date.now());
33
+ mkdirSync(tempDir, { recursive: true });
34
+ const cloneSpinner = spinner();
35
+ cloneSpinner.start('Fetching workspace configuration...');
36
+ try {
37
+ gitClone(workspaceUrl, join(tempDir, '.studiograph'));
38
+ cloneSpinner.stop('Configuration fetched');
39
+ }
40
+ catch {
41
+ cloneSpinner.stop('Failed');
42
+ const { rmSync } = await import('fs');
43
+ rmSync(tempDir, { recursive: true, force: true });
44
+ outro(`Could not clone ${workspaceUrl}. Check the URL and your access permissions.`);
45
+ process.exit(1);
46
+ return;
47
+ }
48
+ // Load config to get workspace name
49
+ const tempWorkspace = new Workspace(tempDir);
50
+ const tempConfig = await tempWorkspace.loadConfig();
51
+ // Determine target directory
52
+ let targetDir;
53
+ if (directory === '.') {
54
+ targetDir = process.cwd();
55
+ }
56
+ else if (directory) {
57
+ targetDir = resolve(directory);
58
+ }
59
+ else {
60
+ const slug = tempConfig.team_name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
61
+ targetDir = resolve(slug);
62
+ }
63
+ // Check for existing workspace
64
+ const studiographDir = join(targetDir, '.studiograph');
65
+ if (existsSync(studiographDir)) {
66
+ const { rmSync } = await import('fs');
67
+ rmSync(tempDir, { recursive: true, force: true });
68
+ outro(`A .studiograph directory already exists at ${targetDir}`);
69
+ process.exit(1);
70
+ return;
71
+ }
72
+ // Create target directory if needed
73
+ if (!existsSync(targetDir)) {
74
+ mkdirSync(targetDir, { recursive: true });
75
+ log.info(`Created directory: ${targetDir}`);
76
+ }
77
+ else if (directory !== '.') {
78
+ const { readdirSync, rmSync } = await import('fs');
79
+ const files = readdirSync(targetDir);
80
+ if (files.length > 0) {
81
+ const proceed = await confirm({
82
+ message: `Directory ${targetDir} is not empty. Continue anyway?`,
83
+ initialValue: false,
84
+ });
85
+ if (!proceed || typeof proceed === 'symbol') {
86
+ rmSync(tempDir, { recursive: true, force: true });
87
+ outro('Cancelled');
88
+ process.exit(0);
89
+ return;
90
+ }
91
+ }
92
+ }
93
+ // Move config to final location
94
+ const { renameSync, rmSync } = await import('fs');
95
+ renameSync(join(tempDir, '.studiograph'), studiographDir);
96
+ rmSync(tempDir, { recursive: true, force: true });
97
+ // Step 3: Load workspace config
98
+ const workspace = new Workspace(targetDir);
99
+ const config = await workspace.loadConfig();
100
+ log.info(`Workspace: ${config.team_name}`);
101
+ log.info(`${config.repos.length} repositor${config.repos.length === 1 ? 'y' : 'ies'} in workspace`);
102
+ // Step 4: Clone ALL repos (admin — no role filtering)
103
+ const reposWithUrl = config.repos.filter(r => r.github_url);
104
+ const reposWithoutUrl = config.repos.filter(r => !r.github_url);
105
+ if (reposWithoutUrl.length > 0) {
106
+ log.warn(`${reposWithoutUrl.length} repo(s) have no GitHub URL: ${reposWithoutUrl.map(r => r.name).join(', ')}`);
107
+ }
108
+ let cloned = 0;
109
+ let failed = 0;
110
+ for (const repo of reposWithUrl) {
111
+ const repoPath = join(targetDir, repo.path);
112
+ if (existsSync(repoPath)) {
113
+ log.warn(`Skipping ${repo.name}: directory already exists`);
114
+ continue;
115
+ }
116
+ const repoSpinner = spinner();
117
+ repoSpinner.start(`Cloning ${repo.name}...`);
118
+ try {
119
+ gitClone(repo.github_url, repoPath);
120
+ repoSpinner.stop(`Cloned ${repo.name}`);
121
+ cloned++;
122
+ }
123
+ catch {
124
+ repoSpinner.stop(`Failed to clone ${repo.name}`);
125
+ log.warn(`Could not clone ${repo.name}: check your GitHub access permissions`);
126
+ failed++;
127
+ }
128
+ }
129
+ // Step 5: Index entities for search
130
+ if (cloned > 0) {
131
+ const indexSpinner = spinner();
132
+ indexSpinner.start('Building search index...');
133
+ try {
134
+ const indexedRepos = reposWithUrl
135
+ .filter(r => r.github_url && existsSync(join(targetDir, r.path)));
136
+ const total = await reindexWorkspace(targetDir, indexedRepos);
137
+ indexSpinner.stop(`Search index ready (${total} entities)`);
138
+ }
139
+ catch {
140
+ indexSpinner.stop('Search index skipped (non-fatal)');
141
+ }
142
+ }
143
+ const parts = [];
144
+ if (cloned > 0)
145
+ parts.push(`${cloned} cloned`);
146
+ if (failed > 0)
147
+ parts.push(`${failed} failed`);
148
+ log.info(`Repos: ${parts.join(', ')}`);
149
+ // Step 6: LLM provider setup
150
+ await promptLLMSetupIfNeeded();
151
+ // Step 7: Connector setup for sync sources
152
+ await promptConnectorSetup(targetDir);
153
+ // Done
154
+ const nextStep = directory === '.' ? '' : `\n\nNext: cd ${targetDir} && studiograph start`;
155
+ if (failed > 0) {
156
+ outro(`Cloned ${config.team_name} with issues (${parts.join(', ')}). Check access permissions.${nextStep}`);
157
+ }
158
+ else {
159
+ outro(`Cloned ${config.team_name} workspace (${parts.join(', ')})${nextStep}`);
160
+ }
161
+ }
162
+ catch (error) {
163
+ outro(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
164
+ process.exit(1);
165
+ }
166
+ });
167
+ //# sourceMappingURL=clone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/cli/commands/clone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * studiograph commit
3
+ *
4
+ * Git commit entity changes across workspace repos.
5
+ * Works after sync apply, enrich run, manual edits, or any other modification.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const commitCommand: Command;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * studiograph commit
3
+ *
4
+ * Git commit entity changes across workspace repos.
5
+ * Works after sync apply, enrich run, manual edits, or any other modification.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { Workspace } from '../../core/workspace.js';
9
+ import { commitRepos } from '../../services/sync/commit.js';
10
+ import { header, dimText, error as errorColor } from '../colors.js';
11
+ export const commitCommand = new Command('commit')
12
+ .description('Git commit entity changes across workspace repos')
13
+ .option('--message <prefix>', 'Commit message prefix (default: "update")')
14
+ .option('--config', 'Also commit .studiograph/ config repo changes')
15
+ .action(async (opts) => {
16
+ const workspace = new Workspace(process.cwd());
17
+ if (!workspace.isWorkspace()) {
18
+ console.error('Not in a Studiograph workspace.');
19
+ process.exit(1);
20
+ }
21
+ try {
22
+ const progress = [];
23
+ await commitRepos(process.cwd(), (msg) => {
24
+ progress.push(msg);
25
+ if (msg.includes('Git commit:') || msg.includes('Git init:')) {
26
+ console.log(dimText(msg));
27
+ }
28
+ else {
29
+ console.log(msg);
30
+ }
31
+ }, { messagePrefix: opts.message ?? 'update', includeConfig: opts.config });
32
+ if (progress.some(m => m.includes('Git commit'))) {
33
+ console.log(`\n${header('Done.')} Changes committed.`);
34
+ }
35
+ else {
36
+ console.log('No uncommitted changes in any repo.');
37
+ }
38
+ }
39
+ catch (err) {
40
+ console.error(errorColor('Commit failed:'), err instanceof Error ? err.message : String(err));
41
+ process.exit(1);
42
+ }
43
+ });
44
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../src/cli/commands/commit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;KACzE,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAA4C,EAAE,EAAE;IAC7D,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,CACf,OAAO,CAAC,GAAG,EAAE,EACb,CAAC,GAAG,EAAE,EAAE;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EACD,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CACxE,CAAC;QAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -89,6 +89,12 @@ async function runInteractiveSetup(def) {
89
89
  ? { command: def.command, args: def.args }
90
90
  : { url: def.url }),
91
91
  };
92
+ if (def.type === 'oauth') {
93
+ // OAuth connectors need no manual credentials — auth happens on first connect
94
+ ConnectorManager.saveConfig(config);
95
+ outro(`${def.label} connector saved. You'll be prompted to authorize in your browser on next agent start.`);
96
+ return;
97
+ }
92
98
  // Prompt for each credential field
93
99
  for (const field of def.credentialFields) {
94
100
  const value = await promptCredentialField(field);
@@ -144,9 +150,11 @@ connectorCommand
144
150
  console.log(` ${''.padEnd(16)} ${cmd}`);
145
151
  }
146
152
  else {
147
- const tokenDisplay = c.token?.startsWith('$') ? c.token : (c.token?.slice(0, 8) + '…');
148
153
  console.log(` ${''.padEnd(16)} ${c.url}`);
149
- console.log(` ${''.padEnd(16)} token: ${tokenDisplay}`);
154
+ if (c.token) {
155
+ const tokenDisplay = c.token.startsWith('$') ? c.token : (c.token.slice(0, 8) + '…');
156
+ console.log(` ${''.padEnd(16)} token: ${tokenDisplay}`);
157
+ }
150
158
  }
151
159
  if (c.description)
152
160
  console.log(` ${''.padEnd(16)} ${c.description}`);