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
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Merge conflict resolution for markdown entity files.
3
+ *
4
+ * When git rebase hits a conflict, this module:
5
+ * 1. Classifies conflicted files by type (content, delete/modify, both-added, both-deleted)
6
+ * 2. Resolves delete conflicts automatically (no LLM needed)
7
+ * 3. For content conflicts, extracts ours/theirs versions from conflict markers
8
+ * 4. Asks an LLM to produce a merged version
9
+ * 5. Writes the merged content and stages the file
10
+ * 6. Continues the rebase
11
+ *
12
+ * Falls back gracefully if no API key is available (delete conflicts still resolve).
13
+ */
14
+ import { spawnSync } from 'child_process';
15
+ import { readFileSync, writeFileSync, readdirSync, rmSync, existsSync } from 'fs';
16
+ import { join, dirname } from 'path';
17
+ import { generateText } from 'ai';
18
+ import { createModel } from '../services/sync/model-factory.js';
19
+ import { loadUserConfig, getAnthropicCredential } from '../core/user-config.js';
20
+ // ─── Conflict Classification ─────────────────────────────────────────────────
21
+ /**
22
+ * Classify unmerged files by parsing `git status --porcelain`.
23
+ * Returns typed conflict entries instead of bare file paths.
24
+ *
25
+ * Porcelain status codes for unmerged:
26
+ * UU = both modified (content conflict)
27
+ * DU = deleted by us, modified by them (during rebase: remote deleted, local modified)
28
+ * UD = modified by us, deleted by them (during rebase: local deleted, remote modified)
29
+ * AA = both added
30
+ * DD = both deleted
31
+ */
32
+ export function classifyConflicts(repoPath) {
33
+ const result = spawnSync('git', ['status', '--porcelain'], { cwd: repoPath, encoding: 'utf-8' });
34
+ if (result.status !== 0)
35
+ return [];
36
+ const conflicts = [];
37
+ for (const line of result.stdout.split('\n')) {
38
+ if (line.length < 4)
39
+ continue;
40
+ const xy = line.substring(0, 2);
41
+ const file = line.substring(3);
42
+ let type = null;
43
+ switch (xy) {
44
+ case 'UU':
45
+ type = 'content';
46
+ break;
47
+ case 'DU':
48
+ type = 'delete-modify';
49
+ break;
50
+ case 'UD':
51
+ type = 'modify-delete';
52
+ break;
53
+ case 'AA':
54
+ type = 'both-added';
55
+ break;
56
+ case 'DD':
57
+ type = 'both-deleted';
58
+ break;
59
+ }
60
+ if (type) {
61
+ conflicts.push({ file, type });
62
+ }
63
+ }
64
+ return conflicts;
65
+ }
66
+ // ─── Delete Conflict Resolution ──────────────────────────────────────────────
67
+ /**
68
+ * Resolve a delete/modify or both-deleted conflict by accepting deletion.
69
+ * For entity folders (containing main.md), cleans up the parent if empty.
70
+ */
71
+ export function resolveDeleteConflict(repoPath, conflict) {
72
+ const { file, type } = conflict;
73
+ // Accept deletion via git rm
74
+ spawnSync('git', ['rm', '--force', file], { cwd: repoPath, encoding: 'utf-8' });
75
+ // If this is a main.md inside an entity folder, clean up the empty parent
76
+ if (file.endsWith('/main.md') || file.endsWith('\\main.md')) {
77
+ const parentDir = join(repoPath, dirname(file));
78
+ if (existsSync(parentDir)) {
79
+ try {
80
+ const remaining = readdirSync(parentDir);
81
+ if (remaining.length === 0) {
82
+ rmSync(parentDir, { recursive: true, force: true });
83
+ }
84
+ }
85
+ catch {
86
+ // Non-fatal — folder cleanup is best-effort
87
+ }
88
+ }
89
+ }
90
+ const reason = type === 'delete-modify'
91
+ ? 'deleted (remote deleted, local edits discarded)'
92
+ : type === 'modify-delete'
93
+ ? 'deleted (local delete confirmed)'
94
+ : 'deleted (both sides deleted)';
95
+ return { file, resolved: true, summary: reason };
96
+ }
97
+ // ─── Content Conflict Resolution (LLM) ──────────────────────────────────────
98
+ /**
99
+ * Resolve a content conflict (UU or AA) using LLM merge.
100
+ */
101
+ async function resolveContentConflict(repoPath, file, model, onProgress) {
102
+ const fullPath = join(repoPath, file);
103
+ const content = readFileSync(fullPath, 'utf-8');
104
+ const { ours, theirs } = extractConflictVersions(content);
105
+ if (!ours || !theirs) {
106
+ return { file, resolved: false, summary: 'could not parse conflict markers' };
107
+ }
108
+ onProgress(` Merging: ${file}`);
109
+ const merged = await llmMerge(model, ours, theirs, file);
110
+ if (!merged) {
111
+ return { file, resolved: false, summary: 'AI merge returned empty result' };
112
+ }
113
+ writeFileSync(fullPath, merged, 'utf-8');
114
+ spawnSync('git', ['add', file], { cwd: repoPath, encoding: 'utf-8' });
115
+ return { file, resolved: true, summary: 'merged by AI' };
116
+ }
117
+ // ─── Main Entry Point ────────────────────────────────────────────────────────
118
+ /**
119
+ * Attempt to resolve all conflicts in a repo mid-rebase.
120
+ * The repo should be in a conflicted rebase state (not yet aborted).
121
+ * Returns success=true if all conflicts were resolved and rebase continued.
122
+ *
123
+ * Delete conflicts are resolved without an API key.
124
+ * Content conflicts require an LLM (API key).
125
+ */
126
+ export async function resolveConflicts(repoPath, onProgress) {
127
+ const log = onProgress ?? (() => { });
128
+ // Classify all conflicts
129
+ const conflicts = classifyConflicts(repoPath);
130
+ if (conflicts.length === 0) {
131
+ return { success: false, resolutions: [] };
132
+ }
133
+ const deleteConflicts = conflicts.filter(c => c.type === 'delete-modify' || c.type === 'modify-delete' || c.type === 'both-deleted');
134
+ const contentConflicts = conflicts.filter(c => c.type === 'content' || c.type === 'both-added');
135
+ const resolutions = [];
136
+ // Phase 1: Resolve delete conflicts (no API key needed)
137
+ for (const conflict of deleteConflicts) {
138
+ try {
139
+ log(` Resolving: ${conflict.file} (${conflict.type})`);
140
+ const resolution = resolveDeleteConflict(repoPath, conflict);
141
+ resolutions.push(resolution);
142
+ }
143
+ catch (err) {
144
+ log(` Failed to resolve ${conflict.file}: ${err instanceof Error ? err.message : 'unknown error'}`);
145
+ resolutions.push({ file: conflict.file, resolved: false });
146
+ }
147
+ }
148
+ // Phase 2: Resolve content conflicts (needs LLM)
149
+ if (contentConflicts.length > 0) {
150
+ const config = loadUserConfig();
151
+ const apiKey = getAnthropicCredential(config) || process.env.ANTHROPIC_API_KEY;
152
+ if (!apiKey) {
153
+ // Can't resolve content conflicts without API key — mark as failed
154
+ for (const conflict of contentConflicts) {
155
+ resolutions.push({
156
+ file: conflict.file,
157
+ resolved: false,
158
+ summary: 'content conflict (no API key for AI merge)',
159
+ });
160
+ }
161
+ }
162
+ else {
163
+ log(` Resolving ${contentConflicts.length} content conflict${contentConflicts.length === 1 ? '' : 's'} via AI merge...`);
164
+ const provider = config.enrichment_model_provider ?? config.model_provider ?? 'anthropic';
165
+ const modelId = config.enrichment_model_id ?? config.model_id ?? 'claude-sonnet-4-5-20250929';
166
+ const model = createModel(provider, modelId, apiKey);
167
+ for (const conflict of contentConflicts) {
168
+ try {
169
+ const resolution = await resolveContentConflict(repoPath, conflict.file, model, log);
170
+ resolutions.push(resolution);
171
+ }
172
+ catch (err) {
173
+ log(` Failed to resolve ${conflict.file}: ${err instanceof Error ? err.message : 'unknown error'}`);
174
+ resolutions.push({ file: conflict.file, resolved: false });
175
+ }
176
+ }
177
+ }
178
+ }
179
+ // Check if all resolved
180
+ const allResolved = resolutions.every(r => r.resolved);
181
+ if (!allResolved) {
182
+ spawnSync('git', ['rebase', '--abort'], { cwd: repoPath, encoding: 'utf-8' });
183
+ return { success: false, resolutions };
184
+ }
185
+ // All resolved — continue the rebase
186
+ const cont = spawnSync('git', ['rebase', '--continue'], {
187
+ cwd: repoPath,
188
+ encoding: 'utf-8',
189
+ env: { ...process.env, GIT_EDITOR: 'true' }, // skip commit message editor
190
+ });
191
+ if (cont.status !== 0) {
192
+ // Rebase continue failed — might have more conflicts in later commits
193
+ // Try to resolve recursively
194
+ const combined = cont.stdout + cont.stderr;
195
+ if (combined.includes('CONFLICT') || combined.includes('could not apply')) {
196
+ const nestedResult = await resolveConflicts(repoPath, onProgress);
197
+ return {
198
+ success: nestedResult.success,
199
+ resolutions: [...resolutions, ...nestedResult.resolutions],
200
+ };
201
+ }
202
+ spawnSync('git', ['rebase', '--abort'], { cwd: repoPath, encoding: 'utf-8' });
203
+ return { success: false, resolutions };
204
+ }
205
+ return { success: true, resolutions };
206
+ }
207
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
208
+ /**
209
+ * Extract ours and theirs versions from git conflict markers.
210
+ */
211
+ export function extractConflictVersions(content) {
212
+ const lines = content.split('\n');
213
+ let ours = '';
214
+ let theirs = '';
215
+ let section = 'none';
216
+ let hasConflict = false;
217
+ let oursContext = '';
218
+ let theirsContext = '';
219
+ let commonBefore = '';
220
+ let commonAfter = '';
221
+ let afterConflict = false;
222
+ for (const line of lines) {
223
+ if (line.startsWith('<<<<<<<')) {
224
+ hasConflict = true;
225
+ section = 'ours';
226
+ oursContext += commonBefore;
227
+ theirsContext += commonBefore;
228
+ commonBefore = '';
229
+ continue;
230
+ }
231
+ if (line.startsWith('=======') && section === 'ours') {
232
+ section = 'theirs';
233
+ continue;
234
+ }
235
+ if (line.startsWith('>>>>>>>')) {
236
+ section = 'none';
237
+ afterConflict = true;
238
+ continue;
239
+ }
240
+ if (section === 'ours') {
241
+ oursContext += line + '\n';
242
+ }
243
+ else if (section === 'theirs') {
244
+ theirsContext += line + '\n';
245
+ }
246
+ else {
247
+ if (afterConflict) {
248
+ commonAfter += line + '\n';
249
+ }
250
+ else {
251
+ commonBefore += line + '\n';
252
+ }
253
+ }
254
+ }
255
+ if (!hasConflict)
256
+ return { ours: null, theirs: null };
257
+ ours = (oursContext + commonAfter).trim();
258
+ theirs = (theirsContext + commonAfter).trim();
259
+ // Return full file versions (common prefix + conflict section + common suffix)
260
+ const prefix = commonBefore.trimEnd();
261
+ return {
262
+ ours: prefix ? `${prefix}\n${ours}` : ours,
263
+ theirs: prefix ? `${prefix}\n${theirs}` : theirs,
264
+ };
265
+ }
266
+ /**
267
+ * Ask the LLM to merge two versions of a file.
268
+ */
269
+ async function llmMerge(model, ours, theirs, filename) {
270
+ const prompt = `You are merging two versions of a Studiograph entity file (${filename}).
271
+ This is a markdown file with YAML frontmatter. Your job is to produce a single merged version that preserves the intent of both changes.
272
+
273
+ Rules:
274
+ - For timestamps (created_at, updated_at): keep the most recent value
275
+ - For additive changes (new fields, new content): include both
276
+ - For conflicting scalar values: prefer the version with more information; if unclear, prefer "theirs" (the remote version)
277
+ - For content (markdown body): combine both additions if they are distinct; deduplicate if they overlap
278
+ - Output ONLY the merged file content, no explanation or code fences
279
+
280
+ ## Version A (local)
281
+
282
+ ${ours}
283
+
284
+ ## Version B (remote)
285
+
286
+ ${theirs}
287
+
288
+ ## Merged output`;
289
+ try {
290
+ const result = await generateText({
291
+ model,
292
+ prompt,
293
+ maxOutputTokens: 4096,
294
+ });
295
+ const text = result.text.trim();
296
+ if (!text)
297
+ return null;
298
+ return text;
299
+ }
300
+ catch {
301
+ return null;
302
+ }
303
+ }
304
+ //# sourceMappingURL=merge-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-resolver.js","sourceRoot":"","sources":["../../src/utils/merge-resolver.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,8 @@ export declare function checkGit(): CheckResult;
25
25
  */
26
26
  export declare function checkNode(): CheckResult;
27
27
  /**
28
- * Check whether a GitHub auth token is stored.
28
+ * Check whether a GitHub auth token is available.
29
+ * Checks env vars first, then stored file.
29
30
  * This is contextual — absence is a warning, not a failure.
30
31
  */
31
32
  export declare function checkGithubAuth(): AuthCheckResult;
@@ -43,10 +43,17 @@ export function checkNode() {
43
43
  };
44
44
  }
45
45
  /**
46
- * Check whether a GitHub auth token is stored.
46
+ * Check whether a GitHub auth token is available.
47
+ * Checks env vars first, then stored file.
47
48
  * This is contextual — absence is a warning, not a failure.
48
49
  */
49
50
  export function checkGithubAuth() {
51
+ if (process.env.STUDIOGRAPH_GITHUB_TOKEN) {
52
+ return { present: true, message: 'GitHub auth configured (via STUDIOGRAPH_GITHUB_TOKEN)' };
53
+ }
54
+ if (process.env.GITHUB_TOKEN) {
55
+ return { present: true, message: 'GitHub auth configured (via GITHUB_TOKEN)' };
56
+ }
50
57
  const stored = loadToken();
51
58
  if (stored) {
52
59
  return { present: true, message: `GitHub auth configured (${stored.user.login})` };
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Lightweight workspace config reader.
3
+ *
4
+ * Reads .studiograph/workspace.json synchronously without
5
+ * instantiating the full Workspace class. Used by sync pipeline
6
+ * modules that only need repo paths.
7
+ */
8
+ export declare function loadWorkspaceConfig(workspacePath: string): any;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Lightweight workspace config reader.
3
+ *
4
+ * Reads .studiograph/workspace.json synchronously without
5
+ * instantiating the full Workspace class. Used by sync pipeline
6
+ * modules that only need repo paths.
7
+ */
8
+ import { existsSync, readFileSync } from 'fs';
9
+ import { join } from 'path';
10
+ export function loadWorkspaceConfig(workspacePath) {
11
+ try {
12
+ const configPath = join(workspacePath, '.studiograph', 'workspace.json');
13
+ if (existsSync(configPath)) {
14
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
15
+ }
16
+ }
17
+ catch {
18
+ // non-fatal — callers handle null
19
+ }
20
+ return null;
21
+ }
22
+ //# sourceMappingURL=workspace-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-config.js","sourceRoot":"","sources":["../../src/utils/workspace-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACzE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export const env={}
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--spacing:.25rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent:#6e6ee8;--color-accent-hover:#5c5cd6;--color-success:#3ecf8e;--color-destructive:#e54d4d;--color-link:#8b8bf0}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.block{display:block}.contents{display:contents}.flex{display:flex}.list-item{display:list-item}.table{display:table}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.rounded-\[6px\]{border-radius:6px}.border{border-style:var(--tw-border-style);border-width:1px}.italic{font-style:italic}.underline{text-decoration-line:underline}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}}:root,[data-theme=dark]{--color-bg:#09090b;--color-bg-elevated:#0f0f12;--color-bg-surface:#141418;--color-bg-hover:#1a1a1f;--color-bg-selected:#1a1a1f;--color-border:#1e1e24;--color-border-strong:#2a2a32;--color-text-primary:#ededef;--color-text-secondary:#a0a0a6;--color-text-tertiary:#5c5c66;--color-accent-muted:#8b8bf014;--color-badge-bg:#1a1a22;--color-badge-text:#8b8b94}[data-theme=light]{--color-bg:#f8f8fa;--color-bg-elevated:#f0f0f3;--color-bg-surface:#e8e8ec;--color-bg-hover:#e2e2e8;--color-bg-selected:#e2e2e8;--color-border:#dadadf;--color-border-strong:#c9c9d0;--color-text-primary:#1a1a1f;--color-text-secondary:#63636b;--color-text-tertiary:#9898a0;--color-accent-muted:#6e6ee814;--color-badge-bg:#e0e0e5;--color-badge-text:#63636b}*{box-sizing:border-box;margin:0;padding:0}:focus{outline:none}body{font-family:var(--font-sans);color:var(--color-text-primary);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:13px;line-height:20px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
@@ -0,0 +1 @@
1
+ .content-row.svelte-1uha8ag{display:flex;flex:1;min-height:0;overflow:hidden}.entity-area.svelte-1uha8ag{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.welcome.svelte-1uha8ag{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--color-text-tertiary)}.welcome.svelte-1uha8ag h2:where(.svelte-1uha8ag){font-size:16px;font-weight:500;color:var(--color-text-secondary)}.welcome.svelte-1uha8ag p:where(.svelte-1uha8ag){font-size:13px}
@@ -0,0 +1 @@
1
+ .content-row.svelte-1dc9loe{display:flex;flex:1;min-height:0;overflow:hidden}.entity-area.svelte-1dc9loe{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.document-scroll.svelte-1dc9loe{flex:1;overflow-y:auto;min-height:0}.editor-bar.svelte-1dc9loe{height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 16px 0 40px;border-bottom:1px solid var(--color-border)}.breadcrumb-path.svelte-1dc9loe{font-size:13px;color:var(--color-text-secondary);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.bc-sep.svelte-1dc9loe{color:var(--color-text-tertiary);margin:0 6px}.bc-segment.svelte-1dc9loe{color:var(--color-text-secondary)}.bc-current.svelte-1dc9loe{color:var(--color-text-primary)}.editor-actions.svelte-1dc9loe{display:flex;align-items:center;gap:8px;flex-shrink:0;white-space:nowrap}.status-text.svelte-1dc9loe{font-size:12px}.status-text.saving.svelte-1dc9loe{color:var(--color-text-tertiary)}.status-text.error.svelte-1dc9loe{color:var(--color-destructive)}.status-text.dirty.svelte-1dc9loe{color:var(--color-text-tertiary)}.status-text.saved.svelte-1dc9loe{color:var(--color-success)}.action-btn.svelte-1dc9loe{height:26px;padding:0 12px;border-radius:4px;font-size:12px;font-family:inherit;font-weight:500;cursor:pointer;border:1px solid var(--color-border-strong);transition:background .15s,color .15s}.action-btn.discard.svelte-1dc9loe{background:transparent;color:var(--color-text-secondary)}.action-btn.discard.svelte-1dc9loe:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.action-btn.save.svelte-1dc9loe{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.action-btn.save.svelte-1dc9loe:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}.action-btn.open-app.svelte-1dc9loe{background:transparent;color:var(--color-text-secondary);text-decoration:none;display:inline-flex;align-items:center;text-transform:capitalize}.action-btn.open-app.svelte-1dc9loe:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}@media(max-width:960px){.breadcrumb-path.svelte-1dc9loe{display:none}}
@@ -0,0 +1 @@
1
+ .csv-editor.svelte-63hltt{padding:32px 40px 0}.table-scroll.svelte-63hltt{overflow-x:auto}table.svelte-63hltt{border-collapse:collapse;width:100%;font-size:13px;font-family:var(--font-sans)}th.svelte-63hltt,td.svelte-63hltt{border:1px solid var(--color-border);padding:0;height:32px}th.svelte-63hltt{background:transparent;font-weight:500;color:var(--color-text-secondary);position:sticky;top:0;z-index:1}th.svelte-63hltt:not(.row-num):not(.col-add){position:sticky;top:0;z-index:1}.row-num.svelte-63hltt{width:40px;text-align:center;color:var(--color-text-tertiary);font-size:11px;background:transparent}.cell-input.svelte-63hltt{width:100%;height:100%;border:none;background:transparent;color:var(--color-text-primary);font-family:var(--font-sans);font-size:13px;padding:4px 8px;outline:none}.cell-input.svelte-63hltt:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.header-input.svelte-63hltt{font-weight:500;color:var(--color-text-secondary)}th.svelte-63hltt:not(.row-num):not(.col-add){position:relative}.col-delete-btn.svelte-63hltt{position:absolute;top:2px;right:2px;width:18px;height:18px;display:none;align-items:center;justify-content:center;border:none;background:var(--color-bg-hover);border-radius:3px;cursor:pointer;color:var(--color-text-tertiary);padding:0}th.svelte-63hltt:hover .col-delete-btn:where(.svelte-63hltt){display:flex}.col-delete-btn.svelte-63hltt:hover{color:var(--color-destructive);background:var(--color-bg-selected)}.col-add.svelte-63hltt{width:32px;border:none;background:transparent}.col-add-btn.svelte-63hltt{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border:none;background:transparent;cursor:pointer;color:var(--color-text-tertiary);padding:0}.col-add-btn.svelte-63hltt:hover{color:var(--color-accent);background:var(--color-bg-hover)}.actions.svelte-63hltt{width:32px;text-align:center;border:none}.delete-btn.svelte-63hltt{display:none;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-text-tertiary);cursor:pointer;padding:0;width:20px;height:20px;border-radius:3px;margin:0 auto}tr.svelte-63hltt:hover .delete-btn:where(.svelte-63hltt){display:flex}.delete-btn.svelte-63hltt:hover{color:var(--color-destructive);background:var(--color-bg-hover)}.csv-footer.svelte-63hltt{display:flex;align-items:center;gap:16px;padding:8px 0}.add-row-btn.svelte-63hltt{display:flex;align-items:center;gap:6px;border:none;background:transparent;color:var(--color-text-tertiary);cursor:pointer;font-family:var(--font-sans);font-size:13px;padding:4px 8px;border-radius:4px;transition:color .15s,background .15s}.add-row-btn.svelte-63hltt:hover{color:var(--color-text-secondary);background:var(--color-bg-hover)}.content-row.svelte-xtfs5g{display:flex;flex:1;min-height:0;overflow:hidden}.entity-area.svelte-xtfs5g{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.document-scroll.svelte-xtfs5g{flex:1;overflow-y:auto;min-height:0}.editor-bar.svelte-xtfs5g{height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 40px;border-bottom:1px solid var(--color-border)}.breadcrumb-path.svelte-xtfs5g{font-size:13px;color:var(--color-text-secondary);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.bc-sep.svelte-xtfs5g{color:var(--color-text-tertiary);margin:0 6px}.bc-segment.svelte-xtfs5g{color:var(--color-text-secondary)}.bc-current.svelte-xtfs5g{color:var(--color-text-primary)}.editor-actions.svelte-xtfs5g{display:flex;align-items:center;gap:8px;flex-shrink:0}.status-text.svelte-xtfs5g{font-size:12px}.status-text.saving.svelte-xtfs5g{color:var(--color-text-tertiary)}.status-text.error.svelte-xtfs5g{color:var(--color-destructive)}.status-text.dirty.svelte-xtfs5g{color:var(--color-text-tertiary)}.status-text.saved.svelte-xtfs5g{color:var(--color-success)}.action-btn.svelte-xtfs5g{height:26px;padding:0 12px;border-radius:4px;font-size:12px;font-family:inherit;font-weight:500;cursor:pointer;border:1px solid var(--color-border-strong);transition:background .15s,color .15s}.action-btn.discard.svelte-xtfs5g{background:transparent;color:var(--color-text-secondary)}.action-btn.discard.svelte-xtfs5g:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.action-btn.save.svelte-xtfs5g{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.action-btn.save.svelte-xtfs5g:hover{background:var(--color-accent-hover);border-color:var(--color-accent-hover)}@media(max-width:960px){.breadcrumb-path.svelte-xtfs5g{display:none}}
@@ -0,0 +1 @@
1
+ .graph-view.svelte-1i33fky{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.canvas-wrap.svelte-1i33fky{flex:1;min-height:0;position:relative;overflow:hidden;touch-action:none}.focus-btn.svelte-1i33fky{position:absolute;top:16px;right:16px;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:6px;background:transparent;color:var(--color-text-tertiary);cursor:pointer;z-index:2;transition:background .15s,color .15s}.focus-btn.svelte-1i33fky:hover{background:var(--color-bg-hover);color:var(--color-text-secondary)}.focus-btn.active.svelte-1i33fky{background:var(--color-accent);color:#fff}.focus-btn.active.svelte-1i33fky:hover{background:var(--color-accent-hover)}.legend-panel.svelte-1i33fky{position:absolute;bottom:16px;right:16px;display:flex;flex-direction:column;background:var(--color-bg);border:1px solid var(--color-border);border-radius:8px;overflow:hidden;z-index:2}.legend-item.svelte-1i33fky{display:flex;align-items:center;gap:8px;white-space:nowrap;padding:5px 12px;cursor:pointer}.legend-item.svelte-1i33fky:hover{background:var(--color-bg-hover)}.legend-dot.svelte-1i33fky{width:8px;height:8px;border-radius:4px;flex-shrink:0}.legend-label.svelte-1i33fky{font-size:12px;color:var(--color-text-secondary);flex:1}.legend-count.svelte-1i33fky{font-size:11px;color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.content-row.svelte-315y67{display:flex;flex:1;min-height:0;overflow:hidden}.graph-area.svelte-315y67{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}
@@ -0,0 +1 @@
1
+ .sidebar.svelte-6dohdz{width:340px;min-width:340px;display:flex;flex-direction:column;overflow:hidden;background:var(--color-bg);border-right:1px solid var(--color-border)}.sidebar-header.svelte-6dohdz{height:40px;display:flex;align-items:center;gap:8px;padding:0 16px;border-bottom:1px solid var(--color-border);flex-shrink:0}.workspace-icon.svelte-6dohdz{width:28px;height:28px;border-radius:6px;background:var(--color-accent, #6e6ee8);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:12px;flex-shrink:0}.workspace-name.svelte-6dohdz{flex:1;font-size:13px;font-weight:600;color:var(--color-text-primary)}.filter-bar.svelte-6dohdz{position:relative;display:flex;align-items:center;height:40px;padding:0 12px 0 52px;border-bottom:1px solid var(--color-border);flex-shrink:0}.filter-icon.svelte-6dohdz{position:absolute;left:22px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:16px;color:var(--color-text-tertiary)}.filter-input.svelte-6dohdz{flex:1;background:transparent;border:none;outline:none;padding:0;margin:0;font-size:13px;line-height:1.4;font-family:inherit;color:var(--color-text-primary)}.filter-input.svelte-6dohdz::placeholder{color:var(--color-text-tertiary)}.filter-clear.svelte-6dohdz{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;background:var(--color-bg-hover);border-radius:4px;cursor:pointer;color:var(--color-text-tertiary);flex-shrink:0}.filter-clear.svelte-6dohdz:hover{background:var(--color-bg-selected);color:var(--color-text-secondary)}.repo-type-icon.svelte-6dohdz{display:inline-flex;align-items:center;color:var(--color-text-tertiary);margin-right:6px;flex-shrink:0;align-self:center}.tree.svelte-6dohdz{flex:1;overflow-y:auto;padding-top:0}.tree-group.svelte-6dohdz{display:flex;flex-direction:column}.tree-group.svelte-6dohdz+.tree-group:where(.svelte-6dohdz){margin-top:0}.repo-row.svelte-6dohdz{display:flex;align-items:baseline;height:32px;line-height:32px;width:100%;padding:0 12px 0 20px;border:none;background:transparent;cursor:pointer;font-family:inherit;text-align:left;border-left:2px solid transparent}.repo-row.svelte-6dohdz:hover,.repo-row.focused.svelte-6dohdz{background:var(--color-bg-hover)}.repo-row.repo-active.svelte-6dohdz{border-left-color:var(--active-color)}.repo-name.svelte-6dohdz{font-size:13px;color:var(--color-text-secondary)}.repo-row.repo-active.svelte-6dohdz .repo-name:where(.svelte-6dohdz),.repo-row.repo-active.svelte-6dohdz .repo-type-icon:where(.svelte-6dohdz){font-weight:600;color:var(--color-text-primary)}.tree-row.svelte-6dohdz{display:flex;align-items:baseline;height:32px;line-height:32px;padding-right:12px;color:var(--color-text-secondary);font-size:13px;cursor:pointer;border:none;background:transparent;font-family:inherit;text-align:left;width:100%;border-left:2px solid transparent}.tree-row.svelte-6dohdz:hover,.tree-row.focused.svelte-6dohdz{background:var(--color-bg-hover)}.tree-row.selected.svelte-6dohdz{background:var(--color-bg-selected);border-left-color:var(--active-color);color:var(--color-text-primary);font-weight:600}.row-chevron.svelte-6dohdz{display:inline-flex;align-items:center;justify-content:center;width:16px;height:32px;flex-shrink:0;margin-right:14px;color:var(--color-text-tertiary);align-self:center}.row-label.svelte-6dohdz{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-count.svelte-6dohdz{font-size:11px;color:var(--color-text-tertiary);margin-left:8px;flex-shrink:0}.dirty-dot.svelte-6dohdz{width:6px;height:6px;border-radius:3px;flex-shrink:0;margin-left:8px;display:none;align-self:center}.tree-row.dirty.svelte-6dohdz .dirty-dot:where(.svelte-6dohdz){display:block}.repo-dirty-dot.svelte-6dohdz{width:6px;height:6px;border-radius:3px;flex-shrink:0;margin-left:auto;background:var(--color-text-tertiary);align-self:center}.indent-group.svelte-6dohdz{position:relative}.indent-group.svelte-6dohdz:before{content:"";position:absolute;left:var(--guide-left);top:0;bottom:0;width:1px;background:var(--color-border);pointer-events:none}.loading-row.svelte-6dohdz{height:32px;display:flex;align-items:center;font-size:12px;color:var(--color-text-tertiary)}.new-entity-row.svelte-6dohdz{color:var(--color-text-tertiary)}.new-entity-row.svelte-6dohdz:hover{color:var(--color-text-secondary)}.new-entity-icon.svelte-6dohdz{display:flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;margin-right:14px}.filter-match.svelte-6dohdz{background:color-mix(in srgb,var(--color-accent, #6e6ee8) 25%,transparent);color:inherit;border-radius:2px;padding:0}.no-results.svelte-6dohdz{padding:24px 16px;font-size:13px;color:var(--color-text-tertiary);text-align:center}.status-bar.svelte-g9asya{height:36px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 16px;position:relative;background:var(--color-bg);border-top:1px solid var(--color-border);font-size:12px}.status-left.svelte-g9asya{display:flex;align-items:center;gap:8px}.theme-toggle.svelte-g9asya{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-tertiary);cursor:pointer;border-radius:4px;transition:color .15s,border-color .15s}.theme-toggle.svelte-g9asya:hover{color:var(--color-text-primary);border-color:var(--color-border-strong)}.stat.svelte-g9asya{color:var(--color-text-tertiary);font-size:12px}.stat-sep.svelte-g9asya{color:var(--color-text-tertiary);opacity:.5}.status-center.svelte-g9asya{position:absolute;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px}.revert-btn.svelte-g9asya{display:inline-flex;align-items:center;height:24px;padding:0 10px;border:none;background:transparent;color:var(--color-text-tertiary);font-family:inherit;font-size:12px;cursor:pointer;border-radius:4px;transition:color .15s,background .15s}.revert-btn.svelte-g9asya:hover:not(:disabled){color:var(--color-text-secondary);background:var(--color-bg-hover)}.revert-btn.svelte-g9asya:disabled{opacity:.5;cursor:default}.commit-btn.svelte-g9asya{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border:none;background:var(--color-accent);color:#fff;font-family:inherit;font-size:12px;font-weight:500;cursor:pointer;border-radius:4px;transition:background .15s}.commit-btn.svelte-g9asya:hover:not(:disabled){background:var(--color-accent-hover)}.commit-btn.svelte-g9asya:disabled{opacity:.7;cursor:default}.status-right.svelte-g9asya{display:flex;align-items:center;gap:8px}.sync-btn.svelte-g9asya{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border:none;background:transparent;color:var(--color-text-tertiary);font-family:inherit;font-size:12px;cursor:pointer;border-radius:4px;transition:color .15s,background .15s}.sync-btn.svelte-g9asya:hover:not(:disabled){color:var(--color-text-secondary);background:var(--color-bg-hover)}.sync-btn.svelte-g9asya:disabled{opacity:.5;cursor:default}.sync-btn-accent.svelte-g9asya{background:var(--color-accent);color:#fff}.sync-btn-accent.svelte-g9asya:hover:not(:disabled){background:var(--color-accent-hover);color:#fff}.sync-count.svelte-g9asya{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;font-size:10px;font-weight:600;background:#fff3}.sync-btn.svelte-g9asya:not(.sync-btn-accent) .sync-count:where(.svelte-g9asya){background:var(--color-bg-surface);color:var(--color-text-secondary)}.tooltip-anchor.svelte-g9asya{position:relative}.tooltip-popup.svelte-g9asya{display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--color-bg-surface);border:1px solid var(--color-border);border-radius:6px;padding:8px 12px;min-width:200px;max-width:320px;max-height:240px;overflow-y:auto;box-shadow:0 4px 12px #00000026;z-index:100;font-size:11px;line-height:1.5}.tooltip-anchor.svelte-g9asya:hover .tooltip-popup:where(.svelte-g9asya){display:block}.tooltip-popup-right.svelte-g9asya{left:auto;right:0;transform:none;min-width:auto;width:max-content}.tooltip-file.svelte-g9asya{color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:8px}.tooltip-dot.svelte-g9asya{width:6px;height:6px;border-radius:3px;flex-shrink:0}.tooltip-dot.status-modified.svelte-g9asya{background:var(--color-accent)}.tooltip-dot.status-added.svelte-g9asya{background:var(--color-success, #34a853)}.tooltip-dot.status-deleted.svelte-g9asya{background:var(--color-destructive, #ea4335)}.search-backdrop.svelte-1xems06{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding-top:80px}[data-theme=dark] .search-backdrop.svelte-1xems06{background:#0009}[data-theme=light] .search-backdrop.svelte-1xems06{background:#00000040}.search-modal.svelte-1xems06{width:680px;max-height:560px;display:flex;flex-direction:column;background:var(--color-bg-elevated);border:1px solid var(--color-border-strong);border-radius:12px;overflow:hidden;box-shadow:0 24px 48px #0006}.search-header.svelte-1xems06{display:flex;align-items:center;height:52px;padding:0 16px;gap:10px;border-bottom:1px solid var(--color-border)}.search-header.svelte-1xems06 svg{color:var(--color-text-tertiary);flex-shrink:0}.search-input.svelte-1xems06{flex:1;font-size:15px;color:var(--color-text-primary);line-height:20px;background:transparent;border:none;outline:none;font-family:inherit}.search-input.svelte-1xems06::placeholder{color:var(--color-text-tertiary)}.esc-badge.svelte-1xems06{font-family:var(--font-sans);font-size:11px;line-height:1;padding:3px 6px;border-radius:4px;background:var(--color-bg-surface);border:1px solid var(--color-border);color:var(--color-text-tertiary)}.results-list.svelte-1xems06{flex:1;overflow-y:auto;min-height:0}.empty-results.svelte-1xems06{padding:24px 16px;text-align:center;font-size:13px;color:var(--color-text-tertiary)}.result-row.svelte-1xems06{display:flex;align-items:flex-start;padding:10px 16px;cursor:pointer;border:none;background:transparent;width:100%;text-align:left;font-family:inherit}.result-row.svelte-1xems06:hover,.result-row.selected.svelte-1xems06{background:var(--color-bg-hover)}.result-body.svelte-1xems06{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.result-title-row.svelte-1xems06{display:flex;align-items:center;gap:8px}.result-title.svelte-1xems06{font-size:13px;font-weight:500;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-tag.svelte-1xems06{flex-shrink:0;font-size:10px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;padding:1px 6px;border-radius:3px;background:var(--color-badge-bg);color:var(--color-badge-text)}.result-meta.svelte-1xems06{font-size:12px;color:var(--color-text-tertiary)}.search-footer.svelte-1xems06{display:flex;align-items:center;height:39px;padding:0 16px;gap:16px;border-top:1px solid var(--color-border)}.shortcut-group.svelte-1xems06{display:flex;align-items:center;gap:4px}.shortcut-key.svelte-1xems06{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 4px;border-radius:4px;background:var(--color-bg-surface);border:1px solid var(--color-border);color:var(--color-text-tertiary)}.shortcut-label.svelte-1xems06{font-size:11px;color:var(--color-text-tertiary);margin-left:2px}.commit-backdrop.svelte-1y1hhbg{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding-top:140px}[data-theme=dark] .commit-backdrop.svelte-1y1hhbg{background:#0009}[data-theme=light] .commit-backdrop.svelte-1y1hhbg{background:#00000040}.commit-modal.svelte-1y1hhbg{width:560px;display:flex;flex-direction:column;background:var(--color-bg-elevated);border:1px solid var(--color-border-strong);border-radius:12px;overflow:hidden;box-shadow:0 24px 80px #00000080}.commit-header.svelte-1y1hhbg{padding:20px 24px 16px;border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:4px}.commit-title.svelte-1y1hhbg{font-size:16px;font-weight:500;color:var(--color-text-primary)}.commit-subtitle.svelte-1y1hhbg{font-size:12px;color:var(--color-text-tertiary)}.commit-body.svelte-1y1hhbg{padding:16px 24px 20px;display:flex;flex-direction:column}.section-label.svelte-1y1hhbg{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.44px;color:var(--color-text-tertiary);margin-bottom:8px}.staged-list.svelte-1y1hhbg{display:flex;flex-direction:column;gap:2px;margin-bottom:20px;max-height:200px;overflow-y:auto}.staged-row.svelte-1y1hhbg{display:flex;align-items:center;gap:10px;height:34px;padding:0 10px;border-radius:6px;background:#6e6ee81f}.checkbox.svelte-1y1hhbg{width:16px;height:16px;border-radius:4px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--color-accent);font-size:10px;color:#fff}.file-path.svelte-1y1hhbg{flex:1;font-size:12px;color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.repo-badge.svelte-1y1hhbg{font-size:10px;color:var(--color-badge-text);background:var(--color-badge-bg);padding:1px 6px;border-radius:3px;flex-shrink:0}.message-input.svelte-1y1hhbg{width:100%;padding:11px 13px;background:var(--color-bg-surface);border:1px solid var(--color-border);border-radius:6px;font-size:13px;color:var(--color-text-primary);font-family:inherit;outline:none}.message-input.svelte-1y1hhbg::placeholder{color:var(--color-text-tertiary)}.message-input.svelte-1y1hhbg:focus{border-color:var(--color-accent)}.commit-footer.svelte-1y1hhbg{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-top:1px solid var(--color-border)}.footer-actions.svelte-1y1hhbg{display:flex;gap:8px}.footer-btn.svelte-1y1hhbg{font-family:inherit;font-size:13px;font-weight:500;padding:6px 12px;border-radius:6px;border:none;cursor:pointer}.footer-btn.svelte-1y1hhbg:disabled{opacity:.5;cursor:not-allowed}.footer-btn.ghost.svelte-1y1hhbg{color:var(--color-text-secondary);background:none}.footer-btn.ghost.svelte-1y1hhbg:hover{color:var(--color-text-primary);background:var(--color-bg-hover)}.footer-btn.subtle.svelte-1y1hhbg{color:var(--color-text-primary);background:none}.footer-btn.subtle.svelte-1y1hhbg:hover:not(:disabled){background:var(--color-bg-hover)}.footer-btn.accent.svelte-1y1hhbg{color:#fff;background:var(--color-accent)}.footer-btn.accent.svelte-1y1hhbg:hover:not(:disabled){background:var(--color-accent-hover)}.pull-toast.svelte-t5zlc0{position:fixed;bottom:56px;left:50%;transform:translate(-50%);z-index:900;display:flex;align-items:center;gap:16px;width:427px;padding:16px 20px;background:var(--color-bg-elevated);border:1px solid var(--color-border-strong);border-radius:8px;box-shadow:0 8px 32px #0006}.toast-content.svelte-t5zlc0{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.toast-title.svelte-t5zlc0{font-size:13px;color:var(--color-text-primary);line-height:18px}.toast-detail.svelte-t5zlc0{font-size:11px;color:var(--color-text-tertiary);line-height:16px}.progress-track.svelte-t5zlc0{width:80px;height:3px;border-radius:2px;background:var(--color-border);flex-shrink:0;overflow:hidden}.progress-fill.svelte-t5zlc0{height:100%;background:var(--color-accent);transition:width .3s ease}.app-frame.svelte-vr1z90{width:100vw;height:100vh;display:flex;flex-direction:column;overflow:hidden;background:var(--color-bg)}.app-body.svelte-vr1z90{flex:1;display:flex;min-height:0;overflow:hidden}.main-content.svelte-vr1z90{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.view-toolbar.svelte-r6dy5f{height:40px;flex-shrink:0;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 16px;border-bottom:1px solid var(--color-border)}.view-toggles.svelte-r6dy5f{grid-column:2;display:inline-flex;align-items:center;border-radius:6px;background:var(--color-bg-surface);padding:2px}.toggle-btn.svelte-r6dy5f{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:22.5px;padding:0 12px;border-radius:4px;border:none;background:transparent;color:var(--color-text-tertiary);font-family:inherit;font-size:12px;cursor:pointer;text-decoration:none;transition:background .15s,color .15s}.toggle-btn.svelte-r6dy5f:hover{color:var(--color-text-secondary)}.toggle-btn.active.svelte-r6dy5f{background:var(--color-bg-hover);color:var(--color-text-primary);cursor:default}.toolbar-right.svelte-r6dy5f{display:flex;justify-content:flex-end;gap:8px}.chat-toggle.svelte-r6dy5f{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:var(--color-accent);color:#fff;cursor:pointer;border-radius:6px;transition:background .15s}.chat-toggle.svelte-r6dy5f:hover{background:var(--color-accent-hover)}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:4px;border:none;font-family:inherit;font-weight:400;cursor:pointer;flex-shrink:0;transition:color .15s,background .15s}.btn-default{background:var(--color-bg-surface);color:var(--color-text-primary);border:1px solid var(--color-border)}.btn-default:hover{background:var(--color-bg-hover)}.btn-ghost{background:transparent;color:var(--color-text-tertiary)}.btn-ghost:hover{color:var(--color-text-secondary);background:var(--color-bg-hover)}.btn-outline{background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border)}.btn-outline:hover{background:var(--color-bg-hover)}.btn-accent{background:var(--color-accent);color:#fff}.btn-accent:hover{background:var(--color-accent-hover)}.btn-default:not(.btn-sm):not(.btn-icon){height:28px;padding:0 12px;font-size:12px}.btn-sm{height:24px;padding:0 8px;font-size:11px}.btn-icon{width:28px;height:28px;padding:0}.chat-panel.svelte-1xwj6s7{width:340px;min-width:340px;flex-shrink:0;display:flex;flex-direction:column;background:var(--color-bg);border-left:1px solid var(--color-border)}.chat-header.svelte-1xwj6s7{height:40px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--color-border)}.chat-header-left.svelte-1xwj6s7{display:flex;align-items:center;gap:2px}.session-list.svelte-1xwj6s7{max-height:200px;overflow-y:auto;border-bottom:1px solid var(--color-border)}.session-item.svelte-1xwj6s7{display:flex;align-items:center;justify-content:space-between;width:100%;padding:6px 16px;font-size:12px;font-family:inherit;background:transparent;border:none;cursor:pointer;color:var(--color-text-secondary);text-align:left}.session-item.svelte-1xwj6s7:hover{background:var(--color-bg-hover)}.session-item.active.svelte-1xwj6s7{background:var(--color-bg-surface);color:var(--color-text-primary)}.session-title.svelte-1xwj6s7{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.session-date.svelte-1xwj6s7{flex-shrink:0;margin-left:8px;color:var(--color-text-tertiary);font-size:11px}.session-empty.svelte-1xwj6s7{padding:12px 16px;font-size:12px;color:var(--color-text-tertiary)}.chat-messages.svelte-1xwj6s7{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state.svelte-1xwj6s7{flex:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-text-tertiary);font-size:13px}.seed-prompts.svelte-1xwj6s7{display:flex;flex-direction:column;gap:8px;padding:0 8px;width:100%}.seed-prompt.svelte-1xwj6s7{font-size:12px;padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;background:transparent;color:var(--color-text-secondary);cursor:pointer;font-family:inherit;text-align:left}.seed-prompt.svelte-1xwj6s7:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.message-group.svelte-1xwj6s7{display:flex;flex-direction:column;gap:8px}.user-bubble.svelte-1xwj6s7{background:var(--color-bg-surface);border-radius:6px;padding:10px 12px;font-size:13px;line-height:20px;color:var(--color-text-primary)}.agent-content.svelte-1xwj6s7{display:flex;flex-direction:column;gap:4px}.tool-calls.svelte-1xwj6s7{display:flex;flex-wrap:wrap;gap:2px 6px}.tool-call.svelte-1xwj6s7{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--color-text-tertiary)}.agent-text.svelte-1xwj6s7{font-size:13px;line-height:20px;color:var(--color-text-primary)}.prose.svelte-1xwj6s7 h1{font-size:17px;font-weight:600;color:var(--color-text-primary);margin:16px 0 8px}.prose.svelte-1xwj6s7 h2{font-size:15px;font-weight:600;color:var(--color-text-primary);margin:14px 0 6px}.prose.svelte-1xwj6s7 h3{font-size:14px;font-weight:600;color:var(--color-text-primary);margin:12px 0 4px}.prose.svelte-1xwj6s7 p{margin:0 0 8px}.prose.svelte-1xwj6s7 p:last-child{margin-bottom:0}.prose.svelte-1xwj6s7 strong{font-weight:600}.prose.svelte-1xwj6s7 ul,.prose.svelte-1xwj6s7 ol{padding-left:20px;margin:0 0 8px;color:var(--color-text-primary)}.prose.svelte-1xwj6s7 ul{list-style-type:disc}.prose.svelte-1xwj6s7 ol{list-style-type:decimal}.prose.svelte-1xwj6s7 li{margin-bottom:2px}.prose.svelte-1xwj6s7 table{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0}.prose.svelte-1xwj6s7 th,.prose.svelte-1xwj6s7 td{border:1px solid var(--color-border);padding:4px 8px;text-align:left;vertical-align:top}.prose.svelte-1xwj6s7 th{font-weight:600}.prose.svelte-1xwj6s7 pre{background:var(--color-bg-surface);border-radius:4px;padding:8px 10px;overflow-x:auto;margin:8px 0;font-family:var(--font-mono);font-size:12px;line-height:18px}.prose.svelte-1xwj6s7 code{font-family:var(--font-mono);font-size:12px;background:var(--color-bg-surface);padding:1px 4px;border-radius:3px}.prose.svelte-1xwj6s7 pre code{background:none;padding:0}.prose.svelte-1xwj6s7 a{color:var(--color-link)}.prose.svelte-1xwj6s7 blockquote{border-left:3px solid var(--color-accent);padding-left:10px;margin:8px 0;color:var(--color-text-secondary)}.prose.svelte-1xwj6s7 hr{border:none;border-top:1px solid var(--color-border);margin:12px 0}.streaming-dot.svelte-1xwj6s7{display:inline-block;width:6px;height:6px;background:var(--color-accent);border-radius:3px;animation:svelte-1xwj6s7-pulse 1s ease-in-out infinite}@keyframes svelte-1xwj6s7-pulse{0%,to{opacity:.3}50%{opacity:1}}.context-chip.svelte-1xwj6s7{font-size:11px;color:var(--color-text-tertiary);padding:0 2px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-input-area.svelte-1xwj6s7{padding:12px 16px 16px}.text-input.svelte-1xwj6s7{display:flex;align-items:flex-end;min-height:40px;max-height:140px;padding:0 6px 0 13px;background:transparent;border:1px solid var(--color-border);border-radius:6px}.send-btn{margin-bottom:6px}.stop-btn{color:var(--color-text-tertiary)}.input-field.svelte-1xwj6s7{flex:1;background:transparent;border:none;outline:none;font-family:inherit;font-size:13px;line-height:20px;color:var(--color-text-primary);resize:none;overflow-y:auto;padding:9px 0;max-height:120px;field-sizing:content}.input-field.svelte-1xwj6s7::placeholder{color:var(--color-text-tertiary)}.input-field.svelte-1xwj6s7:disabled{opacity:.5}
@@ -0,0 +1 @@
1
+ .autocomplete.svelte-84vb17{position:relative;width:100%}.input-row.svelte-84vb17{display:flex;flex-wrap:wrap;align-items:center;gap:4px;min-height:26px;padding:2px 4px;background:transparent;border:none;border-radius:4px}.chip.svelte-84vb17{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px;border-radius:9999px;font-size:12px;background:var(--color-accent-muted);color:var(--color-link, #8b8bf0);flex-shrink:0}.chip-remove.svelte-84vb17{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;padding:0;font-size:12px;line-height:1}.chip-remove.svelte-84vb17:hover{color:var(--color-text-primary)}.ac-input.svelte-84vb17{flex:1;min-width:80px;height:20px;padding:0 2px;font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;outline:none}.dropdown.svelte-84vb17{position:absolute;top:100%;left:0;right:0;margin-top:4px;max-height:240px;overflow-y:auto;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50}.dropdown-item.svelte-84vb17{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;cursor:pointer;gap:8px}.dropdown-item.highlighted.svelte-84vb17{background:var(--color-bg-hover)}.entity-title.svelte-84vb17{font-size:13px;color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.entity-meta.svelte-84vb17{display:flex;align-items:center;gap:6px;flex-shrink:0}.entity-type-badge.svelte-84vb17{font-size:11px;padding:1px 6px;border-radius:9999px;background:var(--color-badge-bg);color:var(--color-badge-text)}.entity-repo.svelte-84vb17{font-size:11px;color:var(--color-text-tertiary)}.inline-properties.svelte-x7sio8{padding:16px 40px 8px;border-bottom:1px solid var(--color-border)}.ip-row.svelte-x7sio8{display:grid;grid-template-columns:20px 120px 1fr;align-items:start;gap:8px;padding:5px 8px;margin:0 -8px;border-radius:4px;min-height:30px;outline:2px solid transparent;transition:outline-color .1s}.ip-row.svelte-x7sio8:hover{outline-color:var(--color-border)}.ip-row.ip-focused.svelte-x7sio8{outline-color:var(--color-accent)}.ip-icon.svelte-x7sio8{display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);position:relative;height:22px}.ip-key.svelte-x7sio8{font-size:13px;color:var(--color-text-tertiary);line-height:22px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ip-value.svelte-x7sio8{display:flex;align-items:center;min-height:22px;line-height:22px;position:relative;cursor:text}.ip-edit-input.svelte-x7sio8{font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;padding:0 4px;height:22px;line-height:22px;width:100%;outline:none}.ip-status-wrap.svelte-x7sio8{position:relative;width:100%}.ip-status-dropdown.svelte-x7sio8{position:absolute;top:100%;left:-4px;margin-top:4px;min-width:180px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:4px;max-height:240px;overflow-y:auto}.ip-status-option.svelte-x7sio8{display:flex;align-items:center;gap:6px;width:100%;padding:5px 8px;border:none;background:none;font-size:13px;font-family:inherit;color:var(--color-text-primary);cursor:pointer;border-radius:4px;text-align:left}.ip-status-option.svelte-x7sio8:hover{background:var(--color-bg-hover)}.ip-status-option.selected.svelte-x7sio8{color:var(--color-accent)}.ip-cal-wrap.svelte-x7sio8{position:relative;width:100%}.ip-cal-dropdown.svelte-x7sio8{position:absolute;top:100%;left:-4px;margin-top:4px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:12px;width:264px}.ip-cal-header.svelte-x7sio8{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.ip-cal-title.svelte-x7sio8{font-size:13px;font-weight:500;color:var(--color-text-primary)}.ip-cal-nav.svelte-x7sio8{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:none;border-radius:4px;cursor:pointer;color:var(--color-text-secondary)}.ip-cal-nav.svelte-x7sio8:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.ip-cal-weekdays.svelte-x7sio8{display:grid;grid-template-columns:repeat(7,1fr);margin-bottom:4px}.ip-cal-wd.svelte-x7sio8{font-size:11px;color:var(--color-text-tertiary);text-align:center;padding:4px 0}.ip-cal-week.svelte-x7sio8{display:grid;grid-template-columns:repeat(7,1fr)}.ip-cal-day.svelte-x7sio8{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:1;border:none;background:none;border-radius:4px;font-size:13px;font-family:inherit;cursor:pointer;color:var(--color-text-primary)}.ip-cal-day.svelte-x7sio8:hover{background:var(--color-bg-hover)}.ip-cal-day.outside.svelte-x7sio8{color:var(--color-text-tertiary);opacity:.5}.ip-cal-day.today.svelte-x7sio8{font-weight:600;color:var(--color-accent)}.ip-cal-day.selected.svelte-x7sio8{background:var(--color-accent);color:#fff;font-weight:500}.ip-cal-day.selected.svelte-x7sio8:hover{background:var(--color-accent-hover)}.ip-badge.svelte-x7sio8{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:9999px;font-size:12px;text-transform:lowercase;background:var(--color-badge-bg);color:var(--color-badge-text)}.ip-wikilink-group.svelte-x7sio8{display:flex;flex-wrap:wrap;gap:6px}.ip-wikilink-chip.svelte-x7sio8{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:9999px;font-size:12px;border:none;font-family:inherit;background:var(--color-accent-muted);color:var(--color-link, #8b8bf0);cursor:pointer;transition:background .15s}.ip-wikilink-chip.svelte-x7sio8:hover{background:#8b8bf029}.ip-status-value.svelte-x7sio8{display:flex;align-items:center;gap:5px;height:22px}.ip-status-dot.svelte-x7sio8{width:6px;height:6px;border-radius:3px;flex-shrink:0}.ip-status-text.svelte-x7sio8,.ip-date-text.svelte-x7sio8,.ip-text-value.svelte-x7sio8{font-size:13px;line-height:22px;color:var(--color-text-primary)}.ip-url-link.svelte-x7sio8{font-size:13px;line-height:22px;color:var(--color-link, #8b8bf0);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ip-url-link.svelte-x7sio8:hover{text-decoration:underline}.ip-add-btn.svelte-x7sio8{display:flex;align-items:center;gap:6px;padding:4px 8px;margin:8px -8px;border:none;background:none;color:var(--color-text-tertiary);font-size:13px;font-family:inherit;cursor:pointer;border-radius:4px;transition:color .15s,background .15s}.ip-add-btn.svelte-x7sio8:hover{color:var(--color-text-secondary);background:var(--color-bg-hover)}.ip-add-key-input.svelte-x7sio8{font-size:13px;font-family:inherit;color:var(--color-text-primary);background:transparent;border:none;border-bottom:1px solid var(--color-accent);padding:2px 0;width:100%;outline:none}.ip-add-row.svelte-x7sio8{background:var(--color-bg-hover)}.ip-icon-trigger{all:unset;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;color:var(--color-text-tertiary)}.ip-icon-trigger:hover{color:var(--color-text-secondary)}.ip-menu-content{min-width:160px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px #00000040;z-index:50;padding:4px}.ip-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;font-size:13px;cursor:pointer;border-radius:4px;color:var(--color-text-primary)}.ip-menu-item:hover,.ip-menu-item[data-highlighted]{background:var(--color-bg-hover)}.ip-menu-destructive{color:var(--color-destructive)!important}.ip-menu-destructive:hover,.ip-menu-destructive[data-highlighted]{background:#e54d4d1a!important}.ip-menu-item-icon.svelte-x7sio8{display:flex;align-items:center;flex-shrink:0}.ip-menu-check.svelte-x7sio8{margin-left:auto;display:flex;align-items:center}.ip-menu-sep{height:1px;background:var(--color-border);margin:4px 0}.editor-wrap.svelte-ok7wy5{display:flex;min-height:0}.cm-container.svelte-ok7wy5{flex:1}.cm-container.svelte-ok7wy5 .cm-editor{min-height:400px;outline:none}.cm-container.svelte-ok7wy5 .cm-scroller{overflow:visible!important}
@@ -0,0 +1 @@
1
+ import{N as w,t as X,T as p,I as H,h as Y,a as T,P as Z,b as M,c as h,s as _}from"./CUzqHQY_.js";import{EditorState as D,Prec as ee,Facet as y,RangeSetBuilder as te,StateEffect as re,StateField as ie}from"./DnlgZ_Tk.js";import{E as x,S as j,V as J,D as P,l as se,a as R}from"./DtVH--hH.js";var I;const g=new w;function ne(i){return y.define({combine:i?e=>e.concat(i):void 0})}const oe=new w;class d{constructor(e,t,r=[],s=""){this.data=e,this.name=s,D.prototype.hasOwnProperty("tree")||Object.defineProperty(D.prototype,"tree",{get(){return b(this)}}),this.parser=t,this.extension=[k.of(this),D.languageData.of((n,a,l)=>{let o=V(n,a,l),c=o.type.prop(g);if(!c)return[];let u=n.facet(c),f=o.type.prop(oe);if(f){let A=o.resolve(a-o.from,l);for(let C of f)if(C.test(A,n)){let W=n.facet(C.facet);return C.type=="replace"?W:W.concat(u)}}return u})].concat(r)}isActiveAt(e,t,r=-1){return V(e,t,r).type.prop(g)==this.data}findRegions(e){let t=e.facet(k);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let r=[],s=(n,a)=>{if(n.prop(g)==this.data){r.push({from:a,to:a+n.length});return}let l=n.prop(w.mounted);if(l){if(l.tree.prop(g)==this.data){if(l.overlay)for(let o of l.overlay)r.push({from:o.from+a,to:o.to+a});else r.push({from:a,to:a+n.length});return}else if(l.overlay){let o=r.length;if(s(l.tree,l.overlay[0].from+a),r.length>o)return}}for(let o=0;o<n.children.length;o++){let c=n.children[o];c instanceof p&&s(c,n.positions[o]+a)}};return s(b(e),0),r}get allowsNesting(){return!0}}d.setState=re.define();function V(i,e,t){let r=i.facet(k),s=b(i).topNode;if(!r||r.allowsNesting)for(let n=s;n;n=n.enter(e,t,H.ExcludeBuffers|H.EnterBracketed))n.type.isTop&&(s=n);return s}class B extends d{constructor(e,t,r){super(e,t,[],r),this.parser=t}static define(e){let t=ne(e.languageData);return new B(t,e.parser.configure({props:[g.add(r=>r.isTop?t:void 0)]}),e.name)}configure(e,t){return new B(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function b(i){let e=i.field(d.state,!1);return e?e.tree:p.empty}class ae{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let r=this.cursorPos-this.string.length;return e<r||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-r,t-r)}}let v=null;class S{constructor(e,t,r=[],s,n,a,l,o){this.parser=e,this.state=t,this.fragments=r,this.tree=s,this.treeLen=n,this.viewport=a,this.skipped=l,this.scheduleOn=o,this.parse=null,this.tempSkipped=[]}static create(e,t,r){return new S(e,t,[],p.empty,0,r,[],null)}startParse(){return this.parser.startParse(new ae(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=p.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var r;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let s=this.parse.advance();if(s)if(this.fragments=this.withoutTempSkipped(T.addTree(s,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=(r=this.parse.stoppedAt)!==null&&r!==void 0?r:this.state.doc.length,this.tree=s,this.parse=null,this.treeLen<(t??this.state.doc.length))this.parse=this.startParse();else return!0;if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(T.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=v;v=this;try{return e()}finally{v=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=$(e,t.from,t.to);return e}changes(e,t){let{fragments:r,tree:s,treeLen:n,viewport:a,skipped:l}=this;if(this.takeTree(),!e.empty){let o=[];if(e.iterChangedRanges((c,u,f,A)=>o.push({fromA:c,toA:u,fromB:f,toB:A})),r=T.applyChanges(r,o),s=p.empty,n=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){l=[];for(let c of this.skipped){let u=e.mapPos(c.from,1),f=e.mapPos(c.to,-1);u<f&&l.push({from:u,to:f})}}}return new S(this.parser,t,r,s,n,a,l,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let r=0;r<this.skipped.length;r++){let{from:s,to:n}=this.skipped[r];s<e.to&&n>e.from&&(this.fragments=$(this.fragments,s,n),this.skipped.splice(r--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Z{createParse(t,r,s){let n=s[0].from,a=s[s.length-1].to;return{parsedPos:n,advance(){let o=v;if(o){for(let c of s)o.tempSkipped.push(c);e&&(o.scheduleOn=o.scheduleOn?Promise.all([o.scheduleOn,e]):e)}return this.parsedPos=a,new p(M.none,[],[],a-n)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return v}}function $(i,e,t){return T.applyChanges(i,[{fromA:e,toA:t,fromB:e,toB:t}])}class m{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),r=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,r)||t.takeTree(),new m(t)}static init(e){let t=Math.min(3e3,e.doc.length),r=S.create(e.facet(k).parser,e,{from:0,to:t});return r.work(20,t)||r.takeTree(),new m(r)}}d.state=ie.define({create:m.init,update(i,e){for(let t of e.effects)if(t.is(d.setState))return t.value;return e.startState.facet(k)!=e.state.facet(k)?m.init(e.state):i.apply(e)}});let G=i=>{let e=setTimeout(()=>i(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(G=i=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(i,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const O=typeof navigator<"u"&&(!((I=navigator.scheduling)===null||I===void 0)&&I.isInputPending)?()=>navigator.scheduling.isInputPending():null,le=J.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(d.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(d.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=G(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:r,viewport:{to:s}}=this.view,n=r.field(d.state);if(n.tree==n.context.tree&&n.context.isDone(s+1e5))return;let a=Date.now()+Math.min(this.chunkBudget,100,e&&!O?Math.max(25,e.timeRemaining()-5):1e9),l=n.context.treeLen<s&&r.doc.length>s+1e3,o=n.context.work(()=>O&&O()||Date.now()>a,s+(l?0:1e5));this.chunkBudget-=Date.now()-t,(o||this.chunkBudget<=0)&&(n.context.takeTree(),this.view.dispatch({effects:d.setState.of(new m(n.context))})),this.chunkBudget>0&&!(o&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(n.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>se(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),k=y.define({combine(i){return i.length?i[0]:null},enables:i=>[d.state,le,x.contentAttributes.compute([i],e=>{let t=e.facet(i);return t&&t.name?{"data-language":t.name}:{}})]});class ve{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}class K{constructor(e,t,r,s,n,a=void 0){this.name=e,this.alias=t,this.extensions=r,this.filename=s,this.loadFunc=n,this.support=a,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then(e=>this.support=e,e=>{throw this.loading=null,e}))}static of(e){let{load:t,support:r}=e;if(!t){if(!r)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");t=()=>Promise.resolve(r)}return new K(e.name,(e.alias||[]).concat(e.name).map(s=>s.toLowerCase()),e.extensions||[],e.filename,t,r)}static matchFilename(e,t){for(let s of e)if(s.filename&&s.filename.test(t))return s;let r=/\.([^.]+)$/.exec(t);if(r){for(let s of e)if(s.extensions.indexOf(r[1])>-1)return s}return null}static matchLanguageName(e,t,r=!0){t=t.toLowerCase();for(let s of e)if(s.alias.some(n=>n==t))return s;if(r)for(let s of e)for(let n of s.alias){let a=t.indexOf(n);if(a>-1&&(n.length>2||!/\w/.test(t[a-1])&&!/\w/.test(t[a+n.length])))return s}return null}}const be=y.define({combine:i=>{if(!i.length)return" ";let e=i[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(i[0]));return e}}),Te=new w;function he(i){let e=i.node,t=e.childAfter(e.from),r=e.lastChild;if(!t)return null;let s=i.options.simulateBreak,n=i.state.doc.lineAt(t.from),a=s==null||s<=n.from?n.to:Math.min(n.to,s);for(let l=t.to;;){let o=e.childAfter(l);if(!o||o==r)return null;if(!o.type.isSkipped){if(o.from>=a)return null;let c=/^ */.exec(n.text.slice(t.to-n.from))[0].length;return{from:t.from,to:t.to+c}}l=o.to}}function xe({closing:i,align:e=!0,units:t=1}){return r=>ce(r,e,t,i)}function ce(i,e,t,r,s){let n=i.textAfter,a=n.match(/^\s*/)[0].length,l=r&&n.slice(a,a+r.length)==r||s==i.pos+a,o=e?he(i):null;return o?l?i.column(o.from):i.column(o.to):i.baseIndent+(l?0:i.unit*t)}const Pe=i=>i.baseIndent;function Se({except:i,units:e=1}={}){return t=>{let r=i&&i.test(t.textAfter);return t.baseIndent+(r?0:e*t.unit)}}const Ne=y.define(),Ae=new w;function Ce(i){let e=i.firstChild,t=i.lastChild;return e&&e.to<t.from?{from:e.to,to:t.type.isError?i.to:t.from}:null}class N{constructor(e,t){this.specs=e;let r;function s(l){let o=j.newName();return(r||(r=Object.create(null)))["."+o]=l,o}const n=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,a=t.scope;this.scope=a instanceof d?l=>l.prop(g)==a.data:a?l=>l==a:void 0,this.style=X(e.map(l=>({tag:l.tag,class:l.class||s(Object.assign({},l,{tag:null}))})),{all:n}).style,this.module=r?new j(r):null,this.themeType=t.themeType}static define(e,t){return new N(e,t||{})}}const F=y.define(),Q=y.define({combine(i){return i.length?[i[0]]:null}});function L(i){let e=i.facet(F);return e.length?e:i.facet(Q)}function De(i,e){let t=[de],r;return i instanceof N&&(i.module&&t.push(x.styleModule.of(i.module)),r=i.themeType),e?.fallback?t.push(Q.of(i)):r?t.push(F.computeN([x.darkTheme],s=>s.facet(x.darkTheme)==(r=="dark")?[i]:[])):t.push(F.of(i)),t}class ue{constructor(e){this.markCache=Object.create(null),this.tree=b(e.state),this.decorations=this.buildDeco(e,L(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=b(e.state),r=L(e.state),s=r!=L(e.startState),{viewport:n}=e.view,a=e.changes.mapPos(this.decoratedTo,1);t.length<n.to&&!s&&t.type==this.tree.type&&a>=n.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,r),this.decoratedTo=n.to)}buildDeco(e,t){if(!t||!this.tree.length)return P.none;let r=new te;for(let{from:s,to:n}of e.visibleRanges)Y(this.tree,t,(a,l,o)=>{r.add(a,l,this.markCache[o]||(this.markCache[o]=P.mark({class:o})))},s,n);return r.finish()}}const de=ee.high(J.fromClass(ue,{decorations:i=>i.decorations}));h.meta,h.link,h.heading,h.emphasis,h.strong,h.strikethrough,h.keyword,h.atom,h.bool,h.url,h.contentSeparator,h.labelName,h.literal,h.inserted,h.string,h.deleted,h.regexp,h.escape,h.string,h.variableName,h.variableName,h.typeName,h.namespace,h.className,h.variableName,h.macroName,h.propertyName,h.comment,h.invalid;const Ie=new w,fe=Object.create(null),q=[M.none],U=[],z=Object.create(null),pe=Object.create(null);for(let[i,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])pe[i]=ge(fe,e);function E(i,e){U.indexOf(i)>-1||(U.push(i),console.warn(e))}function ge(i,e){let t=[];for(let l of e.split(" ")){let o=[];for(let c of l.split(".")){let u=i[c]||h[c];u?typeof u=="function"?o.length?o=o.map(u):E(c,`Modifier ${c} used at start of tag`):o.length?E(c,`Tag ${c} used as modifier`):o=Array.isArray(u)?u:[u]:E(c,`Unknown highlighting tag ${c}`)}for(let c of o)t.push(c)}if(!t.length)return 0;let r=e.replace(/ /g,"_"),s=r+" "+t.map(l=>l.id),n=z[s];if(n)return n.id;let a=z[s]=M.define({id:q.length,name:r,props:[_({[r]:t})]});return q.push(a),a.id}R.RTL,R.LTR;export{ae as DocInput,N as HighlightStyle,B as LRLanguage,d as Language,K as LanguageDescription,ve as LanguageSupport,S as ParseContext,Ie as bracketMatchingHandle,Se as continuedIndent,ne as defineLanguageFacet,xe as delimitedIndent,Pe as flatIndent,Ce as foldInside,Ae as foldNodeProp,Ne as foldService,Te as indentNodeProp,be as indentUnit,k as language,g as languageDataProp,oe as sublanguageProp,De as syntaxHighlighting,b as syntaxTree};