@cdoing/core 0.1.0

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 (378) hide show
  1. package/dist/agents/coordinator.d.ts +114 -0
  2. package/dist/agents/coordinator.d.ts.map +1 -0
  3. package/dist/agents/coordinator.js +158 -0
  4. package/dist/agents/coordinator.js.map +1 -0
  5. package/dist/context-providers/clipboard.d.ts +13 -0
  6. package/dist/context-providers/clipboard.d.ts.map +1 -0
  7. package/dist/context-providers/clipboard.js +53 -0
  8. package/dist/context-providers/clipboard.js.map +1 -0
  9. package/dist/context-providers/codebase.d.ts +46 -0
  10. package/dist/context-providers/codebase.d.ts.map +1 -0
  11. package/dist/context-providers/codebase.js +273 -0
  12. package/dist/context-providers/codebase.js.map +1 -0
  13. package/dist/context-providers/diff.d.ts +18 -0
  14. package/dist/context-providers/diff.d.ts.map +1 -0
  15. package/dist/context-providers/diff.js +63 -0
  16. package/dist/context-providers/diff.js.map +1 -0
  17. package/dist/context-providers/docs.d.ts +21 -0
  18. package/dist/context-providers/docs.d.ts.map +1 -0
  19. package/dist/context-providers/docs.js +180 -0
  20. package/dist/context-providers/docs.js.map +1 -0
  21. package/dist/context-providers/file-include.d.ts +13 -0
  22. package/dist/context-providers/file-include.d.ts.map +1 -0
  23. package/dist/context-providers/file-include.js +82 -0
  24. package/dist/context-providers/file-include.js.map +1 -0
  25. package/dist/context-providers/folder.d.ts +19 -0
  26. package/dist/context-providers/folder.d.ts.map +1 -0
  27. package/dist/context-providers/folder.js +130 -0
  28. package/dist/context-providers/folder.js.map +1 -0
  29. package/dist/context-providers/git.d.ts +19 -0
  30. package/dist/context-providers/git.d.ts.map +1 -0
  31. package/dist/context-providers/git.js +74 -0
  32. package/dist/context-providers/git.js.map +1 -0
  33. package/dist/context-providers/index.d.ts +26 -0
  34. package/dist/context-providers/index.d.ts.map +1 -0
  35. package/dist/context-providers/index.js +37 -0
  36. package/dist/context-providers/index.js.map +1 -0
  37. package/dist/context-providers/open-files.d.ts +25 -0
  38. package/dist/context-providers/open-files.d.ts.map +1 -0
  39. package/dist/context-providers/open-files.js +134 -0
  40. package/dist/context-providers/open-files.js.map +1 -0
  41. package/dist/context-providers/problems.d.ts +24 -0
  42. package/dist/context-providers/problems.d.ts.map +1 -0
  43. package/dist/context-providers/problems.js +97 -0
  44. package/dist/context-providers/problems.js.map +1 -0
  45. package/dist/context-providers/registry.d.ts +61 -0
  46. package/dist/context-providers/registry.d.ts.map +1 -0
  47. package/dist/context-providers/registry.js +92 -0
  48. package/dist/context-providers/registry.js.map +1 -0
  49. package/dist/context-providers/terminal.d.ts +25 -0
  50. package/dist/context-providers/terminal.d.ts.map +1 -0
  51. package/dist/context-providers/terminal.js +55 -0
  52. package/dist/context-providers/terminal.js.map +1 -0
  53. package/dist/context-providers/tree.d.ts +29 -0
  54. package/dist/context-providers/tree.d.ts.map +1 -0
  55. package/dist/context-providers/tree.js +172 -0
  56. package/dist/context-providers/tree.js.map +1 -0
  57. package/dist/context-providers/types.d.ts +72 -0
  58. package/dist/context-providers/types.d.ts.map +1 -0
  59. package/dist/context-providers/types.js +10 -0
  60. package/dist/context-providers/types.js.map +1 -0
  61. package/dist/context-providers/url.d.ts +27 -0
  62. package/dist/context-providers/url.d.ts.map +1 -0
  63. package/dist/context-providers/url.js +131 -0
  64. package/dist/context-providers/url.js.map +1 -0
  65. package/dist/effort/index.d.ts +78 -0
  66. package/dist/effort/index.d.ts.map +1 -0
  67. package/dist/effort/index.js +146 -0
  68. package/dist/effort/index.js.map +1 -0
  69. package/dist/hooks/index.d.ts +47 -0
  70. package/dist/hooks/index.d.ts.map +1 -0
  71. package/dist/hooks/index.js +151 -0
  72. package/dist/hooks/index.js.map +1 -0
  73. package/dist/index.d.ts +75 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +152 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/indexing/chunker.d.ts +25 -0
  78. package/dist/indexing/chunker.d.ts.map +1 -0
  79. package/dist/indexing/chunker.js +217 -0
  80. package/dist/indexing/chunker.js.map +1 -0
  81. package/dist/indexing/database.d.ts +49 -0
  82. package/dist/indexing/database.d.ts.map +1 -0
  83. package/dist/indexing/database.js +287 -0
  84. package/dist/indexing/database.js.map +1 -0
  85. package/dist/indexing/index.d.ts +9 -0
  86. package/dist/indexing/index.d.ts.map +1 -0
  87. package/dist/indexing/index.js +13 -0
  88. package/dist/indexing/index.js.map +1 -0
  89. package/dist/indexing/indexer.d.ts +63 -0
  90. package/dist/indexing/indexer.d.ts.map +1 -0
  91. package/dist/indexing/indexer.js +352 -0
  92. package/dist/indexing/indexer.js.map +1 -0
  93. package/dist/indexing/recent-edits-cache.d.ts +77 -0
  94. package/dist/indexing/recent-edits-cache.d.ts.map +1 -0
  95. package/dist/indexing/recent-edits-cache.js +123 -0
  96. package/dist/indexing/recent-edits-cache.js.map +1 -0
  97. package/dist/indexing/types.d.ts +39 -0
  98. package/dist/indexing/types.d.ts.map +1 -0
  99. package/dist/indexing/types.js +6 -0
  100. package/dist/indexing/types.js.map +1 -0
  101. package/dist/mcp/index.d.ts +33 -0
  102. package/dist/mcp/index.d.ts.map +1 -0
  103. package/dist/mcp/index.js +37 -0
  104. package/dist/mcp/index.js.map +1 -0
  105. package/dist/mcp/manager.d.ts +123 -0
  106. package/dist/mcp/manager.d.ts.map +1 -0
  107. package/dist/mcp/manager.js +331 -0
  108. package/dist/mcp/manager.js.map +1 -0
  109. package/dist/oauth.d.ts +33 -0
  110. package/dist/oauth.d.ts.map +1 -0
  111. package/dist/oauth.js +312 -0
  112. package/dist/oauth.js.map +1 -0
  113. package/dist/permissions/index.d.ts +216 -0
  114. package/dist/permissions/index.d.ts.map +1 -0
  115. package/dist/permissions/index.js +938 -0
  116. package/dist/permissions/index.js.map +1 -0
  117. package/dist/plan/index.d.ts +20 -0
  118. package/dist/plan/index.d.ts.map +1 -0
  119. package/dist/plan/index.js +24 -0
  120. package/dist/plan/index.js.map +1 -0
  121. package/dist/plan/manager.d.ts +101 -0
  122. package/dist/plan/manager.d.ts.map +1 -0
  123. package/dist/plan/manager.js +170 -0
  124. package/dist/plan/manager.js.map +1 -0
  125. package/dist/rules/index.d.ts +28 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +31 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/manager.d.ts +77 -0
  130. package/dist/rules/manager.d.ts.map +1 -0
  131. package/dist/rules/manager.js +279 -0
  132. package/dist/rules/manager.js.map +1 -0
  133. package/dist/rules/types.d.ts +34 -0
  134. package/dist/rules/types.d.ts.map +1 -0
  135. package/dist/rules/types.js +9 -0
  136. package/dist/rules/types.js.map +1 -0
  137. package/dist/sandbox/filesystem.d.ts +20 -0
  138. package/dist/sandbox/filesystem.d.ts.map +1 -0
  139. package/dist/sandbox/filesystem.js +141 -0
  140. package/dist/sandbox/filesystem.js.map +1 -0
  141. package/dist/sandbox/index.d.ts +4 -0
  142. package/dist/sandbox/index.d.ts.map +1 -0
  143. package/dist/sandbox/index.js +8 -0
  144. package/dist/sandbox/index.js.map +1 -0
  145. package/dist/sandbox/manager.d.ts +47 -0
  146. package/dist/sandbox/manager.d.ts.map +1 -0
  147. package/dist/sandbox/manager.js +220 -0
  148. package/dist/sandbox/manager.js.map +1 -0
  149. package/dist/sandbox/network.d.ts +14 -0
  150. package/dist/sandbox/network.d.ts.map +1 -0
  151. package/dist/sandbox/network.js +87 -0
  152. package/dist/sandbox/network.js.map +1 -0
  153. package/dist/sandbox/types.d.ts +42 -0
  154. package/dist/sandbox/types.d.ts.map +1 -0
  155. package/dist/sandbox/types.js +25 -0
  156. package/dist/sandbox/types.js.map +1 -0
  157. package/dist/tools/ast-edit.d.ts +57 -0
  158. package/dist/tools/ast-edit.d.ts.map +1 -0
  159. package/dist/tools/ast-edit.js +443 -0
  160. package/dist/tools/ast-edit.js.map +1 -0
  161. package/dist/tools/code-verify.d.ts +8 -0
  162. package/dist/tools/code-verify.d.ts.map +1 -0
  163. package/dist/tools/code-verify.js +159 -0
  164. package/dist/tools/code-verify.js.map +1 -0
  165. package/dist/tools/codebase-search.d.ts +17 -0
  166. package/dist/tools/codebase-search.d.ts.map +1 -0
  167. package/dist/tools/codebase-search.js +104 -0
  168. package/dist/tools/codebase-search.js.map +1 -0
  169. package/dist/tools/file-delete.d.ts +26 -0
  170. package/dist/tools/file-delete.d.ts.map +1 -0
  171. package/dist/tools/file-delete.js +179 -0
  172. package/dist/tools/file-delete.js.map +1 -0
  173. package/dist/tools/file-edit.d.ts +10 -0
  174. package/dist/tools/file-edit.d.ts.map +1 -0
  175. package/dist/tools/file-edit.js +138 -0
  176. package/dist/tools/file-edit.js.map +1 -0
  177. package/dist/tools/file-read.d.ts +12 -0
  178. package/dist/tools/file-read.d.ts.map +1 -0
  179. package/dist/tools/file-read.js +211 -0
  180. package/dist/tools/file-read.js.map +1 -0
  181. package/dist/tools/file-run.d.ts +10 -0
  182. package/dist/tools/file-run.d.ts.map +1 -0
  183. package/dist/tools/file-run.js +179 -0
  184. package/dist/tools/file-run.js.map +1 -0
  185. package/dist/tools/file-write.d.ts +10 -0
  186. package/dist/tools/file-write.d.ts.map +1 -0
  187. package/dist/tools/file-write.js +134 -0
  188. package/dist/tools/file-write.js.map +1 -0
  189. package/dist/tools/glob-search.d.ts +8 -0
  190. package/dist/tools/glob-search.d.ts.map +1 -0
  191. package/dist/tools/glob-search.js +108 -0
  192. package/dist/tools/glob-search.js.map +1 -0
  193. package/dist/tools/grep-search.d.ts +8 -0
  194. package/dist/tools/grep-search.d.ts.map +1 -0
  195. package/dist/tools/grep-search.js +139 -0
  196. package/dist/tools/grep-search.js.map +1 -0
  197. package/dist/tools/list-dir.d.ts +16 -0
  198. package/dist/tools/list-dir.d.ts.map +1 -0
  199. package/dist/tools/list-dir.js +183 -0
  200. package/dist/tools/list-dir.js.map +1 -0
  201. package/dist/tools/multi-edit.d.ts +16 -0
  202. package/dist/tools/multi-edit.d.ts.map +1 -0
  203. package/dist/tools/multi-edit.js +163 -0
  204. package/dist/tools/multi-edit.js.map +1 -0
  205. package/dist/tools/notebook-edit.d.ts +31 -0
  206. package/dist/tools/notebook-edit.d.ts.map +1 -0
  207. package/dist/tools/notebook-edit.js +321 -0
  208. package/dist/tools/notebook-edit.js.map +1 -0
  209. package/dist/tools/registry.d.ts +16 -0
  210. package/dist/tools/registry.d.ts.map +1 -0
  211. package/dist/tools/registry.js +41 -0
  212. package/dist/tools/registry.js.map +1 -0
  213. package/dist/tools/shell-exec.d.ts +12 -0
  214. package/dist/tools/shell-exec.d.ts.map +1 -0
  215. package/dist/tools/shell-exec.js +261 -0
  216. package/dist/tools/shell-exec.js.map +1 -0
  217. package/dist/tools/sub-agent-manager.d.ts +57 -0
  218. package/dist/tools/sub-agent-manager.d.ts.map +1 -0
  219. package/dist/tools/sub-agent-manager.js +153 -0
  220. package/dist/tools/sub-agent-manager.js.map +1 -0
  221. package/dist/tools/sub-agent-status.d.ts +12 -0
  222. package/dist/tools/sub-agent-status.d.ts.map +1 -0
  223. package/dist/tools/sub-agent-status.js +59 -0
  224. package/dist/tools/sub-agent-status.js.map +1 -0
  225. package/dist/tools/sub-agent-terminate.d.ts +12 -0
  226. package/dist/tools/sub-agent-terminate.d.ts.map +1 -0
  227. package/dist/tools/sub-agent-terminate.js +55 -0
  228. package/dist/tools/sub-agent-terminate.js.map +1 -0
  229. package/dist/tools/sub-agent.d.ts +34 -0
  230. package/dist/tools/sub-agent.d.ts.map +1 -0
  231. package/dist/tools/sub-agent.js +140 -0
  232. package/dist/tools/sub-agent.js.map +1 -0
  233. package/dist/tools/system-info.d.ts +24 -0
  234. package/dist/tools/system-info.d.ts.map +1 -0
  235. package/dist/tools/system-info.js +220 -0
  236. package/dist/tools/system-info.js.map +1 -0
  237. package/dist/tools/todo.d.ts +16 -0
  238. package/dist/tools/todo.d.ts.map +1 -0
  239. package/dist/tools/todo.js +144 -0
  240. package/dist/tools/todo.js.map +1 -0
  241. package/dist/tools/types.d.ts +20 -0
  242. package/dist/tools/types.d.ts.map +1 -0
  243. package/dist/tools/types.js +3 -0
  244. package/dist/tools/types.js.map +1 -0
  245. package/dist/tools/view-diff.d.ts +11 -0
  246. package/dist/tools/view-diff.d.ts.map +1 -0
  247. package/dist/tools/view-diff.js +88 -0
  248. package/dist/tools/view-diff.js.map +1 -0
  249. package/dist/tools/view-repo-map.d.ts +18 -0
  250. package/dist/tools/view-repo-map.d.ts.map +1 -0
  251. package/dist/tools/view-repo-map.js +245 -0
  252. package/dist/tools/view-repo-map.js.map +1 -0
  253. package/dist/tools/web-fetch.d.ts +13 -0
  254. package/dist/tools/web-fetch.d.ts.map +1 -0
  255. package/dist/tools/web-fetch.js +106 -0
  256. package/dist/tools/web-fetch.js.map +1 -0
  257. package/dist/tools/web-search.d.ts +10 -0
  258. package/dist/tools/web-search.d.ts.map +1 -0
  259. package/dist/tools/web-search.js +106 -0
  260. package/dist/tools/web-search.js.map +1 -0
  261. package/dist/utils/gitignore.d.ts +10 -0
  262. package/dist/utils/gitignore.d.ts.map +1 -0
  263. package/dist/utils/gitignore.js +104 -0
  264. package/dist/utils/gitignore.js.map +1 -0
  265. package/dist/utils/lazy-apply.d.ts +45 -0
  266. package/dist/utils/lazy-apply.d.ts.map +1 -0
  267. package/dist/utils/lazy-apply.js +164 -0
  268. package/dist/utils/lazy-apply.js.map +1 -0
  269. package/dist/utils/memory.d.ts +36 -0
  270. package/dist/utils/memory.d.ts.map +1 -0
  271. package/dist/utils/memory.js +136 -0
  272. package/dist/utils/memory.js.map +1 -0
  273. package/dist/utils/path-matching.d.ts +24 -0
  274. package/dist/utils/path-matching.d.ts.map +1 -0
  275. package/dist/utils/path-matching.js +116 -0
  276. package/dist/utils/path-matching.js.map +1 -0
  277. package/dist/utils/path-safety.d.ts +13 -0
  278. package/dist/utils/path-safety.d.ts.map +1 -0
  279. package/dist/utils/path-safety.js +54 -0
  280. package/dist/utils/path-safety.js.map +1 -0
  281. package/dist/utils/project-config.d.ts +18 -0
  282. package/dist/utils/project-config.d.ts.map +1 -0
  283. package/dist/utils/project-config.js +76 -0
  284. package/dist/utils/project-config.js.map +1 -0
  285. package/dist/utils/search-match.d.ts +63 -0
  286. package/dist/utils/search-match.d.ts.map +1 -0
  287. package/dist/utils/search-match.js +426 -0
  288. package/dist/utils/search-match.js.map +1 -0
  289. package/dist/utils/shell-paths.d.ts +17 -0
  290. package/dist/utils/shell-paths.d.ts.map +1 -0
  291. package/dist/utils/shell-paths.js +107 -0
  292. package/dist/utils/shell-paths.js.map +1 -0
  293. package/dist/utils/streaming-diff.d.ts +45 -0
  294. package/dist/utils/streaming-diff.d.ts.map +1 -0
  295. package/dist/utils/streaming-diff.js +230 -0
  296. package/dist/utils/streaming-diff.js.map +1 -0
  297. package/dist/utils/todo.d.ts +47 -0
  298. package/dist/utils/todo.d.ts.map +1 -0
  299. package/dist/utils/todo.js +102 -0
  300. package/dist/utils/todo.js.map +1 -0
  301. package/package.json +23 -0
  302. package/src/agents/coordinator.ts +240 -0
  303. package/src/context-providers/clipboard.ts +48 -0
  304. package/src/context-providers/codebase.ts +274 -0
  305. package/src/context-providers/diff.ts +66 -0
  306. package/src/context-providers/docs.ts +160 -0
  307. package/src/context-providers/file-include.ts +54 -0
  308. package/src/context-providers/folder.ts +106 -0
  309. package/src/context-providers/git.ts +72 -0
  310. package/src/context-providers/index.ts +26 -0
  311. package/src/context-providers/open-files.ts +113 -0
  312. package/src/context-providers/problems.ts +100 -0
  313. package/src/context-providers/registry.ts +99 -0
  314. package/src/context-providers/terminal.ts +58 -0
  315. package/src/context-providers/tree.ts +161 -0
  316. package/src/context-providers/types.ts +84 -0
  317. package/src/context-providers/url.ts +138 -0
  318. package/src/effort/index.ts +177 -0
  319. package/src/hooks/index.ts +148 -0
  320. package/src/index.ts +114 -0
  321. package/src/indexing/README.md +267 -0
  322. package/src/indexing/chunker.ts +206 -0
  323. package/src/indexing/database.ts +299 -0
  324. package/src/indexing/index.ts +15 -0
  325. package/src/indexing/indexer.ts +383 -0
  326. package/src/indexing/recent-edits-cache.ts +150 -0
  327. package/src/indexing/types.ts +44 -0
  328. package/src/mcp/index.ts +33 -0
  329. package/src/mcp/manager.ts +385 -0
  330. package/src/oauth.ts +330 -0
  331. package/src/permissions/index.ts +1011 -0
  332. package/src/plan/index.ts +20 -0
  333. package/src/plan/manager.ts +233 -0
  334. package/src/rules/index.ts +28 -0
  335. package/src/rules/manager.ts +276 -0
  336. package/src/rules/types.ts +40 -0
  337. package/src/sandbox/filesystem.ts +135 -0
  338. package/src/sandbox/index.ts +9 -0
  339. package/src/sandbox/manager.ts +213 -0
  340. package/src/sandbox/network.ts +101 -0
  341. package/src/sandbox/types.ts +63 -0
  342. package/src/tools/ast-edit.ts +493 -0
  343. package/src/tools/code-verify.ts +143 -0
  344. package/src/tools/codebase-search.ts +117 -0
  345. package/src/tools/file-delete.ts +155 -0
  346. package/src/tools/file-edit.ts +115 -0
  347. package/src/tools/file-read.ts +195 -0
  348. package/src/tools/file-run.ts +158 -0
  349. package/src/tools/file-write.ts +104 -0
  350. package/src/tools/glob-search.ts +80 -0
  351. package/src/tools/grep-search.ts +120 -0
  352. package/src/tools/list-dir.ts +172 -0
  353. package/src/tools/multi-edit.ts +138 -0
  354. package/src/tools/notebook-edit.ts +342 -0
  355. package/src/tools/registry.ts +43 -0
  356. package/src/tools/shell-exec.ts +251 -0
  357. package/src/tools/sub-agent-manager.ts +183 -0
  358. package/src/tools/sub-agent-status.ts +67 -0
  359. package/src/tools/sub-agent-terminate.ts +62 -0
  360. package/src/tools/sub-agent.ts +162 -0
  361. package/src/tools/system-info.ts +248 -0
  362. package/src/tools/todo.ts +149 -0
  363. package/src/tools/types.ts +21 -0
  364. package/src/tools/view-diff.ts +99 -0
  365. package/src/tools/view-repo-map.ts +249 -0
  366. package/src/tools/web-fetch.ts +118 -0
  367. package/src/tools/web-search.ts +129 -0
  368. package/src/utils/gitignore.ts +73 -0
  369. package/src/utils/lazy-apply.ts +189 -0
  370. package/src/utils/memory.ts +124 -0
  371. package/src/utils/path-matching.ts +84 -0
  372. package/src/utils/path-safety.ts +19 -0
  373. package/src/utils/project-config.ts +41 -0
  374. package/src/utils/search-match.ts +495 -0
  375. package/src/utils/shell-paths.ts +79 -0
  376. package/src/utils/streaming-diff.ts +260 -0
  377. package/src/utils/todo.ts +115 -0
  378. package/tsconfig.json +18 -0
package/dist/oauth.js ADDED
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth 2.0 (PKCE) for Claude — Shared Core Module
4
+ *
5
+ * All credential storage, token management, and OAuth flow logic lives here.
6
+ * Both CLI and VS Code extension import from this module.
7
+ *
8
+ * Credential storage:
9
+ * - macOS: encrypted Keychain via `security` CLI
10
+ * - Linux: libsecret via `secret-tool` if available, else file fallback
11
+ * - Windows: Windows Credential Manager via `cmdkey`, else file fallback
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.saveOAuthTokens = saveOAuthTokens;
48
+ exports.loadOAuthTokens = loadOAuthTokens;
49
+ exports.clearOAuthTokens = clearOAuthTokens;
50
+ exports.isOAuthExpired = isOAuthExpired;
51
+ exports.refreshAccessToken = refreshAccessToken;
52
+ exports.resolveOAuthToken = resolveOAuthToken;
53
+ exports.generateOAuthUrl = generateOAuthUrl;
54
+ exports.exchangeOAuthCode = exchangeOAuthCode;
55
+ exports.getOAuthStatus = getOAuthStatus;
56
+ const crypto = __importStar(require("crypto"));
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ const os = __importStar(require("os"));
60
+ const child_process_1 = require("child_process");
61
+ const CONFIG_DIR = path.join(os.homedir(), ".cdoing");
62
+ const KEYCHAIN_SERVICE = "cdoing-agent";
63
+ const KEYCHAIN_ACCOUNT = "oauth-tokens";
64
+ // Claude OAuth endpoints (matching Claude Code CLI)
65
+ const CLAUDE_AUTH_URL = "https://claude.ai/oauth/authorize";
66
+ const CLAUDE_TOKEN_URL = "https://console.anthropic.com/v1/oauth/token";
67
+ const CLAUDE_REDIRECT_URI = "https://console.anthropic.com/oauth/code/callback";
68
+ const CLAUDE_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
69
+ const SCOPES = "org:create_api_key user:profile user:inference";
70
+ // ── PKCE helpers ─────────────────────────────────────────
71
+ function generateCodeVerifier() {
72
+ return crypto.randomBytes(32).toString("base64url");
73
+ }
74
+ function generateCodeChallenge(verifier) {
75
+ return crypto.createHash("sha256").update(verifier).digest("base64url");
76
+ }
77
+ // ── Secure credential storage ────────────────────────────
78
+ function storeSecret(value) {
79
+ const platform = process.platform;
80
+ try {
81
+ if (platform === "darwin") {
82
+ try {
83
+ (0, child_process_1.execSync)(`security delete-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
84
+ }
85
+ catch { }
86
+ (0, child_process_1.execSync)(`security add-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" -w "${value.replace(/"/g, '\\"')}" -U`, { stdio: "ignore" });
87
+ return;
88
+ }
89
+ if (platform === "linux") {
90
+ try {
91
+ (0, child_process_1.execSync)(`echo -n "${value.replace(/"/g, '\\"')}" | secret-tool store --label="Cdoing Agent OAuth" service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}"`, { stdio: "ignore" });
92
+ return;
93
+ }
94
+ catch { }
95
+ }
96
+ if (platform === "win32") {
97
+ try {
98
+ (0, child_process_1.execSync)(`cmdkey /generic:"${KEYCHAIN_SERVICE}" /user:"${KEYCHAIN_ACCOUNT}" /pass:"${value.replace(/"/g, '""')}"`, { stdio: "ignore" });
99
+ return;
100
+ }
101
+ catch { }
102
+ }
103
+ }
104
+ catch { }
105
+ storeSecretToFile(value);
106
+ }
107
+ function loadSecret() {
108
+ const platform = process.platform;
109
+ try {
110
+ if (platform === "darwin") {
111
+ const result = (0, child_process_1.execSync)(`security find-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" -w 2>/dev/null`, { encoding: "utf-8" });
112
+ return result.trim();
113
+ }
114
+ if (platform === "linux") {
115
+ try {
116
+ const result = (0, child_process_1.execSync)(`secret-tool lookup service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { encoding: "utf-8" });
117
+ return result.trim() || null;
118
+ }
119
+ catch { }
120
+ }
121
+ if (platform === "win32") {
122
+ try {
123
+ const result = (0, child_process_1.execSync)(`cmdkey /list:"${KEYCHAIN_SERVICE}"`, { encoding: "utf-8" });
124
+ if (result.includes(KEYCHAIN_SERVICE)) {
125
+ return loadSecretFromFile();
126
+ }
127
+ }
128
+ catch { }
129
+ }
130
+ }
131
+ catch { }
132
+ return loadSecretFromFile();
133
+ }
134
+ function deleteSecret() {
135
+ const platform = process.platform;
136
+ try {
137
+ if (platform === "darwin") {
138
+ (0, child_process_1.execSync)(`security delete-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
139
+ }
140
+ else if (platform === "linux") {
141
+ (0, child_process_1.execSync)(`secret-tool clear service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
142
+ }
143
+ else if (platform === "win32") {
144
+ (0, child_process_1.execSync)(`cmdkey /delete:"${KEYCHAIN_SERVICE}" 2>nul`, { stdio: "ignore" });
145
+ }
146
+ }
147
+ catch { }
148
+ deleteSecretFile();
149
+ }
150
+ // ── File-based fallback (AES-256-CBC) ────────────────────
151
+ function deriveFileKey() {
152
+ const machineId = os.hostname() + os.userInfo().username;
153
+ return crypto.createHash("sha256").update(machineId).digest();
154
+ }
155
+ function getSecretFilePath() {
156
+ return path.join(CONFIG_DIR, ".oauth-tokens.enc");
157
+ }
158
+ function storeSecretToFile(value) {
159
+ if (!fs.existsSync(CONFIG_DIR))
160
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
161
+ const key = deriveFileKey();
162
+ const iv = crypto.randomBytes(16);
163
+ const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
164
+ let encrypted = cipher.update(value, "utf-8", "hex");
165
+ encrypted += cipher.final("hex");
166
+ fs.writeFileSync(getSecretFilePath(), iv.toString("hex") + ":" + encrypted, { mode: 0o600 });
167
+ }
168
+ function loadSecretFromFile() {
169
+ try {
170
+ const filePath = getSecretFilePath();
171
+ if (!fs.existsSync(filePath))
172
+ return null;
173
+ const raw = fs.readFileSync(filePath, "utf-8");
174
+ const [ivHex, encrypted] = raw.split(":");
175
+ if (!ivHex || !encrypted)
176
+ return null;
177
+ const key = deriveFileKey();
178
+ const decipher = crypto.createDecipheriv("aes-256-cbc", key, Buffer.from(ivHex, "hex"));
179
+ let decrypted = decipher.update(encrypted, "hex", "utf-8");
180
+ decrypted += decipher.final("utf-8");
181
+ return decrypted;
182
+ }
183
+ catch {
184
+ return null;
185
+ }
186
+ }
187
+ function deleteSecretFile() {
188
+ try {
189
+ const filePath = getSecretFilePath();
190
+ if (fs.existsSync(filePath))
191
+ fs.unlinkSync(filePath);
192
+ }
193
+ catch { }
194
+ }
195
+ // ── Token storage ────────────────────────────────────────
196
+ function saveOAuthTokens(tokens) {
197
+ storeSecret(JSON.stringify({ ...tokens, saved_at: Date.now() }));
198
+ }
199
+ function loadOAuthTokens() {
200
+ const raw = loadSecret();
201
+ if (!raw)
202
+ return null;
203
+ try {
204
+ const parsed = JSON.parse(raw);
205
+ return parsed.access_token ? parsed : null;
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }
211
+ function clearOAuthTokens() {
212
+ deleteSecret();
213
+ }
214
+ function isOAuthExpired(tokens) {
215
+ if (!tokens.expires_at)
216
+ return false;
217
+ return Date.now() >= tokens.expires_at;
218
+ }
219
+ // ── Token refresh ────────────────────────────────────────
220
+ async function refreshAccessToken(refreshToken) {
221
+ try {
222
+ const response = await fetch(CLAUDE_TOKEN_URL, {
223
+ method: "POST",
224
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
225
+ body: new URLSearchParams({
226
+ grant_type: "refresh_token",
227
+ refresh_token: refreshToken,
228
+ client_id: CLAUDE_CLIENT_ID,
229
+ }).toString(),
230
+ });
231
+ if (!response.ok)
232
+ return null;
233
+ const data = (await response.json());
234
+ const tokens = {
235
+ access_token: data.access_token,
236
+ refresh_token: data.refresh_token || refreshToken,
237
+ expires_at: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
238
+ token_type: data.token_type || "Bearer",
239
+ };
240
+ saveOAuthTokens(tokens);
241
+ return tokens;
242
+ }
243
+ catch {
244
+ return null;
245
+ }
246
+ }
247
+ // ── Resolve token (with auto-refresh) ────────────────────
248
+ async function resolveOAuthToken() {
249
+ const tokens = loadOAuthTokens();
250
+ if (!tokens)
251
+ return null;
252
+ if (isOAuthExpired(tokens) && tokens.refresh_token) {
253
+ const refreshed = await refreshAccessToken(tokens.refresh_token);
254
+ return refreshed ? refreshed.access_token : null;
255
+ }
256
+ return tokens.access_token;
257
+ }
258
+ // ── OAuth URL generation ─────────────────────────────────
259
+ function generateOAuthUrl() {
260
+ const codeVerifier = generateCodeVerifier();
261
+ const codeChallenge = generateCodeChallenge(codeVerifier);
262
+ const params = new URLSearchParams({
263
+ code: "true",
264
+ client_id: CLAUDE_CLIENT_ID,
265
+ response_type: "code",
266
+ redirect_uri: CLAUDE_REDIRECT_URI,
267
+ scope: SCOPES,
268
+ code_challenge: codeChallenge,
269
+ code_challenge_method: "S256",
270
+ state: codeVerifier,
271
+ });
272
+ return { url: `${CLAUDE_AUTH_URL}?${params.toString()}`, codeVerifier };
273
+ }
274
+ // ── Code exchange ────────────────────────────────────────
275
+ async function exchangeOAuthCode(code, codeVerifier) {
276
+ const splits = code.split("#");
277
+ const response = await fetch(CLAUDE_TOKEN_URL, {
278
+ method: "POST",
279
+ headers: { "Content-Type": "application/json" },
280
+ body: JSON.stringify({
281
+ code: splits[0],
282
+ state: splits[1] || codeVerifier,
283
+ grant_type: "authorization_code",
284
+ client_id: CLAUDE_CLIENT_ID,
285
+ redirect_uri: CLAUDE_REDIRECT_URI,
286
+ code_verifier: codeVerifier,
287
+ }),
288
+ });
289
+ if (!response.ok) {
290
+ const errText = await response.text();
291
+ throw new Error(`Token exchange failed (${response.status}): ${errText.substring(0, 200)}`);
292
+ }
293
+ const data = (await response.json());
294
+ const tokens = {
295
+ access_token: data.access_token,
296
+ refresh_token: data.refresh_token,
297
+ expires_at: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
298
+ token_type: data.token_type || "Bearer",
299
+ };
300
+ saveOAuthTokens(tokens);
301
+ return tokens;
302
+ }
303
+ // ── Status helper ────────────────────────────────────────
304
+ function getOAuthStatus() {
305
+ const tokens = loadOAuthTokens();
306
+ if (!tokens)
307
+ return { status: "none" };
308
+ if (isOAuthExpired(tokens))
309
+ return { status: "expired", expiresAt: tokens.expires_at };
310
+ return { status: "active", expiresAt: tokens.expires_at };
311
+ }
312
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Permission Manager
3
+ *
4
+ * Implements the Claude Code permission system:
5
+ * - Settings-based allow/ask/deny rules loaded from .claude/settings.json files
6
+ * - Permission modes: default, acceptEdits, plan, dontAsk, bypassPermissions
7
+ * - Rule evaluation order: deny → ask → allow (deny always wins)
8
+ * - Rule syntax: Tool, Tool(*), Bash(cmd *), Read(path), WebFetch(domain:x), Agent(name)
9
+ * - Settings precedence: local project → shared project → user (~/.claude/settings.json)
10
+ *
11
+ * Also supports legacy runtime stored rules (allow once / always / project).
12
+ *
13
+ * Backward compatible: legacy ASK / AUTO_EDIT / AUTO modes still accepted.
14
+ */
15
+ import type { ToolDefinition } from "../tools/types";
16
+ import type { SandboxManager } from "../sandbox";
17
+ /** A stored runtime permission rule (session / legacy format) */
18
+ export interface PermissionRule {
19
+ tool: string;
20
+ /** Optional: match only when this input value matches */
21
+ inputMatch?: string;
22
+ createdAt: string;
23
+ }
24
+ export type PermissionScope = "global" | "project";
25
+ /**
26
+ * Permission modes as defined in Claude Code docs.
27
+ * Legacy aliases (ask / auto-edit / auto) are kept for backward compatibility.
28
+ */
29
+ export declare enum PermissionMode {
30
+ DEFAULT = "default",// prompt on first use of each tool
31
+ ACCEPT_EDITS = "acceptEdits",// auto-approve file edits, ask for shell
32
+ PLAN = "plan",// read-only: block write + exec tools
33
+ DONT_ASK = "dontAsk",// deny all unless explicitly allowed
34
+ BYPASS = "bypassPermissions",// skip all permission checks
35
+ ASK = "ask",// → DEFAULT
36
+ AUTO_EDIT = "auto-edit",// → ACCEPT_EDITS
37
+ AUTO = "auto"
38
+ }
39
+ export type PermissionPromptFn = (toolName: string, message: string, hasProject: boolean) => Promise<"allow" | "always" | "project" | "deny" | "deny_always" | "deny_project">;
40
+ /** Managed-only settings that cannot be overridden */
41
+ interface ManagedOnlySettings {
42
+ disableBypassPermissionsMode?: "disable" | string;
43
+ allowManagedPermissionRulesOnly?: boolean;
44
+ allowManagedHooksOnly?: boolean;
45
+ allowManagedMcpServersOnly?: boolean;
46
+ }
47
+ export declare class PermissionManager {
48
+ private mode;
49
+ private projectDir;
50
+ private cwd;
51
+ private customPromptFn;
52
+ private sandboxManager;
53
+ private globalRules;
54
+ private projectRules;
55
+ /**
56
+ * Session-only approvals for file-modification tools (file_write, file_edit).
57
+ * Per the tiered permission table: "Until session end" — not written to disk.
58
+ * Key = toolName (no specifier needed; file edit approvals cover all paths).
59
+ */
60
+ private sessionApprovals;
61
+ private settingsAllow;
62
+ private settingsAsk;
63
+ private settingsDeny;
64
+ private managedSettings;
65
+ private managedAllow;
66
+ private managedAsk;
67
+ private managedDeny;
68
+ constructor(mode?: PermissionMode, projectDir?: string);
69
+ /**
70
+ * Load managed settings from system-level config.
71
+ * Managed settings have the highest priority and cannot be overridden.
72
+ *
73
+ * Paths:
74
+ * macOS: /Library/Application Support/cdoing/managed-settings.json
75
+ * Linux: /etc/cdoing/managed-settings.json
76
+ */
77
+ private loadManagedSettings;
78
+ /** Collapse legacy aliases into canonical mode values. */
79
+ private normalizeMode;
80
+ /**
81
+ * Read `defaultMode` from settings files (local → shared → user).
82
+ * Higher-precedence files win. Returns null if no file sets it.
83
+ */
84
+ private readDefaultModeFromSettings;
85
+ setPromptFn(fn: PermissionPromptFn): void;
86
+ setSandboxManager(sm: SandboxManager): void;
87
+ setMode(mode: PermissionMode): void;
88
+ getMode(): PermissionMode;
89
+ /**
90
+ * Check whether a specific file path is denied by settings rules for a given category.
91
+ * Used by shell_exec to check extracted paths against Read/Edit/Delete rules.
92
+ *
93
+ * Returns "deny" if a deny rule matches the path for the given category.
94
+ * Returns null otherwise (no deny found — the command can proceed through normal permission flow).
95
+ */
96
+ checkPathPermission(filePath: string, category: "Read" | "Edit" | "Delete"): "deny" | null;
97
+ /** Check whether a file path matches any ask rule for the given category. */
98
+ private pathMatchesAsk;
99
+ setProjectDir(dir: string): void;
100
+ /**
101
+ * Load and merge permission rules from settings files.
102
+ *
103
+ * Precedence (highest to lowest, docs order):
104
+ * 1. Local project — <project>/.claude/settings.local.json (highest)
105
+ * 2. Shared project — <project>/.claude/settings.json
106
+ * 3. User — ~/.claude/settings.json (lowest)
107
+ *
108
+ * Rule evaluation uses "first match wins", so higher-precedence rules are
109
+ * stored at the front of the allow/ask arrays.
110
+ *
111
+ * Deny rules from ALL sources are merged — a deny at any level cannot be
112
+ * overridden by an allow at any other level.
113
+ */
114
+ loadSettingsRules(): void;
115
+ /** Return the currently loaded settings rules (for display / debugging). */
116
+ getSettingsRules(): {
117
+ allow: string[];
118
+ ask: string[];
119
+ deny: string[];
120
+ };
121
+ /**
122
+ * Test whether a settings rule string covers a specific tool invocation.
123
+ */
124
+ private matchesRule;
125
+ /**
126
+ * Evaluate all settings rules for a tool call.
127
+ *
128
+ * Evaluation order per docs: deny → ask → allow.
129
+ * - deny wins over everything.
130
+ * - ask overrides allow (lets you "ask for rm *" even when "allow Bash").
131
+ * - allow auto-approves when no deny/ask rule matched.
132
+ * Returns null when no rule matches (fall back to mode behaviour).
133
+ */
134
+ private evaluateRules;
135
+ /**
136
+ * Determine whether a tool call is allowed.
137
+ *
138
+ * Decision flow:
139
+ * 1. bypassPermissions mode → allow all.
140
+ * 2. Tools that never require permission → allow.
141
+ * 3. Settings deny rule matches → deny.
142
+ * 4. Settings ask rule matches → prompt user (overrides stored/allow).
143
+ * 5. Settings allow rule matches → allow.
144
+ * 6. Session-only approval exists (file-edit tools) → allow.
145
+ * 7. Runtime stored rule matches (Bash tools, persisted) → allow.
146
+ * 8. Fall back to mode:
147
+ * - plan → deny write/exec tools.
148
+ * - dontAsk → deny anything not explicitly allowed.
149
+ * - acceptEdits → allow file edits; prompt for others.
150
+ * - default → prompt user.
151
+ */
152
+ requestPermission(toolDef: ToolDefinition, input: Record<string, unknown>): Promise<boolean>;
153
+ private getProjectPermissionsFile;
154
+ private loadRuntimeRules;
155
+ private loadGlobalRules;
156
+ private loadProjectRules;
157
+ private saveGlobalRules;
158
+ private saveProjectRules;
159
+ private hasStoredPermission;
160
+ private addRule;
161
+ /**
162
+ * Save a deny rule to settings.json so it persists across sessions.
163
+ * Creates the .cdoing/ folder and settings.json file if they don't exist.
164
+ */
165
+ private addDenyRule;
166
+ /**
167
+ * Persist a permission rule to settings.json.
168
+ *
169
+ * Writes to:
170
+ * - Project scope → <project>/.cdoing/settings.json
171
+ * - Global scope → ~/.cdoing/settings.json
172
+ */
173
+ private addToSettingsAllow;
174
+ /**
175
+ * Persist a deny rule to settings.json.
176
+ *
177
+ * Writes to:
178
+ * - Project scope → <project>/.cdoing/settings.json
179
+ * - Global scope → ~/.cdoing/settings.json
180
+ */
181
+ private addToSettingsDeny;
182
+ /**
183
+ * Persist a permission rule to a specific field (allow/deny/ask) in settings.json.
184
+ * Creates the directory and file if they don't exist.
185
+ */
186
+ private addToSettingsField;
187
+ /** Check whether bypass mode is disabled by managed settings. */
188
+ isBypassDisabled(): boolean;
189
+ /** Return managed-only settings for external inspection. */
190
+ getManagedSettings(): Readonly<ManagedOnlySettings>;
191
+ /**
192
+ * Remove a permission rule from settings.json.
193
+ * Removes from the specified field (allow/deny/ask) in the given scope.
194
+ */
195
+ removeSettingsRule(rule: string, field: "allow" | "deny" | "ask", scope: PermissionScope): void;
196
+ removeRule(toolName?: string, scope?: PermissionScope): void;
197
+ getStoredRules(): {
198
+ global: ReadonlyArray<PermissionRule>;
199
+ project: ReadonlyArray<PermissionRule>;
200
+ };
201
+ private describeAction;
202
+ /**
203
+ * Ask the user whether to allow a tool call.
204
+ *
205
+ * Options:
206
+ * y / Enter → Allow once
207
+ * a → Always allow globally (~/.cdoing/permissions.json)
208
+ * p → Allow for this project (.cdoing/permissions.json)
209
+ * n → Deny
210
+ *
211
+ * Uses customPromptFn if set (e.g. VS Code UI), otherwise falls back to CLI readline.
212
+ */
213
+ private askUser;
214
+ }
215
+ export {};
216
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwBjD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnD;;;GAGG;AACH,oBAAY,cAAc;IAExB,OAAO,YAAiB,CAAa,mCAAmC;IACxE,YAAY,gBAAgB,CAAS,yCAAyC;IAC9E,IAAI,SAAiB,CAAgB,sCAAsC;IAC3E,QAAQ,YAAgB,CAAa,qCAAqC;IAC1E,MAAM,sBAA4B,CAAG,6BAA6B;IAGlE,GAAG,QAAc,CAAS,YAAY;IACtC,SAAS,cAAc,CAAG,iBAAiB;IAC3C,IAAI,SAAc;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,KAChB,OAAO,CAAC,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC;AAUvF,sDAAsD;AACtD,UAAU,mBAAmB;IAC3B,4BAA4B,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClD,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AA8KD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,cAAc,CAA+B;IAGrD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,YAAY,CAAwB;IAE5C;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAA0B;IAGlD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAiB;IAGrC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,WAAW,CAAiB;gBAExB,IAAI,GAAE,cAAuC,EAAE,UAAU,CAAC,EAAE,MAAM;IAmB9E;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA4B3B,0DAA0D;IAC1D,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAyBnC,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAIzC,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAI3C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAUnC,OAAO,IAAI,cAAc;IAIzB;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI;IAe1F,6EAA6E;IAC7E,OAAO,CAAC,cAAc;IAatB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYhC;;;;;;;;;;;;;OAaG;IACH,iBAAiB,IAAI,IAAI;IAuCzB,4EAA4E;IAC5E,gBAAgB,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAUtE;;OAEG;IACH,OAAO,CAAC,WAAW;IAoDnB;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;;;;;OAgBG;IACG,iBAAiB,CACrB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC;IAiEnB,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,OAAO;IAsBf;;;OAGG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+B1B,iEAAiE;IACjE,gBAAgB,IAAI,OAAO;IAI3B,4DAA4D;IAC5D,kBAAkB,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IAInD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAqB/F,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI;IAe5D,cAAc,IAAI;QAChB,MAAM,EAAG,aAAa,CAAC,cAAc,CAAC,CAAC;QACvC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;KACxC;IAMD,OAAO,CAAC,cAAc;IAUtB;;;;;;;;;;OAUG;YACW,OAAO;CA8EtB"}