@opencodehub/cli 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 (191) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +85 -0
  3. package/dist/agent-context.d.ts +54 -0
  4. package/dist/agent-context.d.ts.map +1 -0
  5. package/dist/agent-context.js +122 -0
  6. package/dist/agent-context.js.map +1 -0
  7. package/dist/cobol-proleap-setup.d.ts +77 -0
  8. package/dist/cobol-proleap-setup.d.ts.map +1 -0
  9. package/dist/cobol-proleap-setup.js +289 -0
  10. package/dist/cobol-proleap-setup.js.map +1 -0
  11. package/dist/commands/analyze.d.ts +234 -0
  12. package/dist/commands/analyze.d.ts.map +1 -0
  13. package/dist/commands/analyze.js +1096 -0
  14. package/dist/commands/analyze.js.map +1 -0
  15. package/dist/commands/augment.d.ts +48 -0
  16. package/dist/commands/augment.d.ts.map +1 -0
  17. package/dist/commands/augment.js +249 -0
  18. package/dist/commands/augment.js.map +1 -0
  19. package/dist/commands/baseline.d.ts +68 -0
  20. package/dist/commands/baseline.d.ts.map +1 -0
  21. package/dist/commands/baseline.js +110 -0
  22. package/dist/commands/baseline.js.map +1 -0
  23. package/dist/commands/bench.d.ts +54 -0
  24. package/dist/commands/bench.d.ts.map +1 -0
  25. package/dist/commands/bench.js +283 -0
  26. package/dist/commands/bench.js.map +1 -0
  27. package/dist/commands/ci-init.d.ts +37 -0
  28. package/dist/commands/ci-init.d.ts.map +1 -0
  29. package/dist/commands/ci-init.js +115 -0
  30. package/dist/commands/ci-init.js.map +1 -0
  31. package/dist/commands/clean.d.ts +13 -0
  32. package/dist/commands/clean.d.ts.map +1 -0
  33. package/dist/commands/clean.js +38 -0
  34. package/dist/commands/clean.js.map +1 -0
  35. package/dist/commands/code-pack.d.ts +105 -0
  36. package/dist/commands/code-pack.d.ts.map +1 -0
  37. package/dist/commands/code-pack.js +187 -0
  38. package/dist/commands/code-pack.js.map +1 -0
  39. package/dist/commands/context.d.ts +30 -0
  40. package/dist/commands/context.d.ts.map +1 -0
  41. package/dist/commands/context.js +237 -0
  42. package/dist/commands/context.js.map +1 -0
  43. package/dist/commands/detect-changes.d.ts +26 -0
  44. package/dist/commands/detect-changes.d.ts.map +1 -0
  45. package/dist/commands/detect-changes.js +73 -0
  46. package/dist/commands/detect-changes.js.map +1 -0
  47. package/dist/commands/doctor.d.ts +52 -0
  48. package/dist/commands/doctor.d.ts.map +1 -0
  49. package/dist/commands/doctor.js +472 -0
  50. package/dist/commands/doctor.js.map +1 -0
  51. package/dist/commands/find-enclosing-symbol.d.ts +67 -0
  52. package/dist/commands/find-enclosing-symbol.d.ts.map +1 -0
  53. package/dist/commands/find-enclosing-symbol.js +106 -0
  54. package/dist/commands/find-enclosing-symbol.js.map +1 -0
  55. package/dist/commands/group.d.ts +123 -0
  56. package/dist/commands/group.d.ts.map +1 -0
  57. package/dist/commands/group.js +448 -0
  58. package/dist/commands/group.js.map +1 -0
  59. package/dist/commands/impact.d.ts +23 -0
  60. package/dist/commands/impact.d.ts.map +1 -0
  61. package/dist/commands/impact.js +91 -0
  62. package/dist/commands/impact.js.map +1 -0
  63. package/dist/commands/index-repo.d.ts +39 -0
  64. package/dist/commands/index-repo.d.ts.map +1 -0
  65. package/dist/commands/index-repo.js +148 -0
  66. package/dist/commands/index-repo.js.map +1 -0
  67. package/dist/commands/ingest-sarif.d.ts +64 -0
  68. package/dist/commands/ingest-sarif.d.ts.map +1 -0
  69. package/dist/commands/ingest-sarif.js +381 -0
  70. package/dist/commands/ingest-sarif.js.map +1 -0
  71. package/dist/commands/init.d.ts +75 -0
  72. package/dist/commands/init.d.ts.map +1 -0
  73. package/dist/commands/init.js +315 -0
  74. package/dist/commands/init.js.map +1 -0
  75. package/dist/commands/list.d.ts +17 -0
  76. package/dist/commands/list.d.ts.map +1 -0
  77. package/dist/commands/list.js +79 -0
  78. package/dist/commands/list.js.map +1 -0
  79. package/dist/commands/mcp.d.ts +8 -0
  80. package/dist/commands/mcp.d.ts.map +1 -0
  81. package/dist/commands/mcp.js +28 -0
  82. package/dist/commands/mcp.js.map +1 -0
  83. package/dist/commands/open-store.d.ts +25 -0
  84. package/dist/commands/open-store.d.ts.map +1 -0
  85. package/dist/commands/open-store.js +47 -0
  86. package/dist/commands/open-store.js.map +1 -0
  87. package/dist/commands/pack.d.ts +35 -0
  88. package/dist/commands/pack.d.ts.map +1 -0
  89. package/dist/commands/pack.js +83 -0
  90. package/dist/commands/pack.js.map +1 -0
  91. package/dist/commands/query.d.ts +85 -0
  92. package/dist/commands/query.d.ts.map +1 -0
  93. package/dist/commands/query.js +309 -0
  94. package/dist/commands/query.js.map +1 -0
  95. package/dist/commands/scan.d.ts +81 -0
  96. package/dist/commands/scan.d.ts.map +1 -0
  97. package/dist/commands/scan.js +407 -0
  98. package/dist/commands/scan.js.map +1 -0
  99. package/dist/commands/setup.d.ts +178 -0
  100. package/dist/commands/setup.d.ts.map +1 -0
  101. package/dist/commands/setup.js +370 -0
  102. package/dist/commands/setup.js.map +1 -0
  103. package/dist/commands/sql.d.ts +19 -0
  104. package/dist/commands/sql.d.ts.map +1 -0
  105. package/dist/commands/sql.js +51 -0
  106. package/dist/commands/sql.js.map +1 -0
  107. package/dist/commands/status.d.ts +13 -0
  108. package/dist/commands/status.d.ts.map +1 -0
  109. package/dist/commands/status.js +66 -0
  110. package/dist/commands/status.js.map +1 -0
  111. package/dist/commands/verdict-render.d.ts +33 -0
  112. package/dist/commands/verdict-render.d.ts.map +1 -0
  113. package/dist/commands/verdict-render.js +123 -0
  114. package/dist/commands/verdict-render.js.map +1 -0
  115. package/dist/commands/verdict.d.ts +61 -0
  116. package/dist/commands/verdict.d.ts.map +1 -0
  117. package/dist/commands/verdict.js +146 -0
  118. package/dist/commands/verdict.js.map +1 -0
  119. package/dist/commands/wiki.d.ts +26 -0
  120. package/dist/commands/wiki.d.ts.map +1 -0
  121. package/dist/commands/wiki.js +74 -0
  122. package/dist/commands/wiki.js.map +1 -0
  123. package/dist/editors/claude-code.d.ts +23 -0
  124. package/dist/editors/claude-code.d.ts.map +1 -0
  125. package/dist/editors/claude-code.js +58 -0
  126. package/dist/editors/claude-code.js.map +1 -0
  127. package/dist/editors/codex.d.ts +22 -0
  128. package/dist/editors/codex.d.ts.map +1 -0
  129. package/dist/editors/codex.js +59 -0
  130. package/dist/editors/codex.js.map +1 -0
  131. package/dist/editors/cursor.d.ts +13 -0
  132. package/dist/editors/cursor.d.ts.map +1 -0
  133. package/dist/editors/cursor.js +21 -0
  134. package/dist/editors/cursor.js.map +1 -0
  135. package/dist/editors/index.d.ts +12 -0
  136. package/dist/editors/index.d.ts.map +1 -0
  137. package/dist/editors/index.js +11 -0
  138. package/dist/editors/index.js.map +1 -0
  139. package/dist/editors/opencode.d.ts +23 -0
  140. package/dist/editors/opencode.d.ts.map +1 -0
  141. package/dist/editors/opencode.js +61 -0
  142. package/dist/editors/opencode.js.map +1 -0
  143. package/dist/editors/types.d.ts +33 -0
  144. package/dist/editors/types.d.ts.map +1 -0
  145. package/dist/editors/types.js +19 -0
  146. package/dist/editors/types.js.map +1 -0
  147. package/dist/editors/windows-wrap.d.ts +19 -0
  148. package/dist/editors/windows-wrap.d.ts.map +1 -0
  149. package/dist/editors/windows-wrap.js +28 -0
  150. package/dist/editors/windows-wrap.js.map +1 -0
  151. package/dist/editors/windsurf.d.ts +12 -0
  152. package/dist/editors/windsurf.d.ts.map +1 -0
  153. package/dist/editors/windsurf.js +21 -0
  154. package/dist/editors/windsurf.js.map +1 -0
  155. package/dist/embedder-downloader.d.ts +87 -0
  156. package/dist/embedder-downloader.d.ts.map +1 -0
  157. package/dist/embedder-downloader.js +261 -0
  158. package/dist/embedder-downloader.js.map +1 -0
  159. package/dist/fs-atomic.d.ts +22 -0
  160. package/dist/fs-atomic.d.ts.map +1 -0
  161. package/dist/fs-atomic.js +28 -0
  162. package/dist/fs-atomic.js.map +1 -0
  163. package/dist/groups.d.ts +64 -0
  164. package/dist/groups.d.ts.map +1 -0
  165. package/dist/groups.js +172 -0
  166. package/dist/groups.js.map +1 -0
  167. package/dist/index.d.ts +11 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +703 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/lib/is-indexed.d.ts +20 -0
  172. package/dist/lib/is-indexed.d.ts.map +1 -0
  173. package/dist/lib/is-indexed.js +35 -0
  174. package/dist/lib/is-indexed.js.map +1 -0
  175. package/dist/registry.d.ts +64 -0
  176. package/dist/registry.d.ts.map +1 -0
  177. package/dist/registry.js +145 -0
  178. package/dist/registry.js.map +1 -0
  179. package/dist/scip-downloader.d.ts +138 -0
  180. package/dist/scip-downloader.d.ts.map +1 -0
  181. package/dist/scip-downloader.js +372 -0
  182. package/dist/scip-downloader.js.map +1 -0
  183. package/dist/scip-pins.d.ts +99 -0
  184. package/dist/scip-pins.d.ts.map +1 -0
  185. package/dist/scip-pins.js +195 -0
  186. package/dist/scip-pins.js.map +1 -0
  187. package/dist/skills-gen.d.ts +47 -0
  188. package/dist/skills-gen.d.ts.map +1 -0
  189. package/dist/skills-gen.js +292 -0
  190. package/dist/skills-gen.js.map +1 -0
  191. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/editors/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAOpC,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1D,OAAO;QACL,EAAE,EAAE,OAAO;QACX,UAAU;QACV,KAAK,CAAC,QAAQ,EAAE,UAAU;YACxB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA4B,EAAE,UAAyB;IACtF,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,OAAO,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,GAAG,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAmB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,UAAyB;IAChD,MAAM,KAAK,GAA4B;QACrC,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;KAC3B,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Cursor MCP config writer.
3
+ *
4
+ * Targets `~/.cursor/mcp.json` (global scope). Same `mcpServers` shape as
5
+ * Claude Code, so we reuse the shared merger.
6
+ */
7
+ import type { EditorWriter } from "./types.js";
8
+ export interface CursorWriterOptions {
9
+ /** Override the home directory used to resolve the config path. */
10
+ readonly home?: string;
11
+ }
12
+ export declare function createCursorWriter(opts?: CursorWriterOptions): EditorWriter;
13
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/editors/cursor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,mBAAwB,GAAG,YAAY,CAU/E"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Cursor MCP config writer.
3
+ *
4
+ * Targets `~/.cursor/mcp.json` (global scope). Same `mcpServers` shape as
5
+ * Claude Code, so we reuse the shared merger.
6
+ */
7
+ import { homedir } from "node:os";
8
+ import { resolve } from "node:path";
9
+ import { mergeMcpServers } from "./claude-code.js";
10
+ export function createCursorWriter(opts = {}) {
11
+ const home = opts.home ?? homedir();
12
+ const configPath = resolve(home, ".cursor", "mcp.json");
13
+ return {
14
+ id: "cursor",
15
+ configPath,
16
+ merge(existing, invocation) {
17
+ return mergeMcpServers(existing, invocation);
18
+ },
19
+ };
20
+ }
21
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/editors/cursor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQnD,MAAM,UAAU,kBAAkB,CAAC,OAA4B,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,UAAU;QACV,KAAK,CAAC,QAAQ,EAAE,UAAU;YACxB,OAAO,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Barrel for editor writers + shared helpers.
3
+ */
4
+ export { createClaudeCodeWriter } from "./claude-code.js";
5
+ export { createCodexWriter, mergeCodexConfig } from "./codex.js";
6
+ export { createCursorWriter } from "./cursor.js";
7
+ export { createOpenCodeWriter, mergeOpenCodeConfig } from "./opencode.js";
8
+ export type { EditorId, EditorWriter, McpInvocation } from "./types.js";
9
+ export { ALL_EDITOR_IDS } from "./types.js";
10
+ export { maybeWrapForWindows } from "./windows-wrap.js";
11
+ export { createWindsurfWriter } from "./windsurf.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Barrel for editor writers + shared helpers.
3
+ */
4
+ export { createClaudeCodeWriter } from "./claude-code.js";
5
+ export { createCodexWriter, mergeCodexConfig } from "./codex.js";
6
+ export { createCursorWriter } from "./cursor.js";
7
+ export { createOpenCodeWriter, mergeOpenCodeConfig } from "./opencode.js";
8
+ export { ALL_EDITOR_IDS } from "./types.js";
9
+ export { maybeWrapForWindows } from "./windows-wrap.js";
10
+ export { createWindsurfWriter } from "./windsurf.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * OpenCode MCP config writer.
3
+ *
4
+ * Targets `<project>/opencode.json`. The OpenCode schema deviates from the
5
+ * others:
6
+ * - top-level key is `mcp`, NOT `mcpServers`
7
+ * - each entry uses `type: "local"` (not `stdio`)
8
+ * - `command` is a single ARRAY `[exec, ...args]`, not `command` + `args`
9
+ * - env lives under `environment`, not `env`
10
+ * - `enabled` and `timeout` are conventional extras
11
+ *
12
+ * Other top-level keys and other entries under `mcp` are preserved.
13
+ */
14
+ import type { EditorWriter, McpInvocation } from "./types.js";
15
+ export interface OpenCodeWriterOptions {
16
+ /** Absolute project root. The writer targets `<root>/opencode.json`. */
17
+ readonly projectRoot: string;
18
+ /** Optional timeout in ms for the MCP server startup. Default 10_000. */
19
+ readonly timeoutMs?: number;
20
+ }
21
+ export declare function createOpenCodeWriter(opts: OpenCodeWriterOptions): EditorWriter;
22
+ export declare function mergeOpenCodeConfig(existing: string | undefined, invocation: McpInvocation, timeoutMs?: number): string;
23
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/editors/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,YAAY,CAU9E;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,aAAa,EACzB,SAAS,GAAE,MAA2B,GACrC,MAAM,CAMR"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * OpenCode MCP config writer.
3
+ *
4
+ * Targets `<project>/opencode.json`. The OpenCode schema deviates from the
5
+ * others:
6
+ * - top-level key is `mcp`, NOT `mcpServers`
7
+ * - each entry uses `type: "local"` (not `stdio`)
8
+ * - `command` is a single ARRAY `[exec, ...args]`, not `command` + `args`
9
+ * - env lives under `environment`, not `env`
10
+ * - `enabled` and `timeout` are conventional extras
11
+ *
12
+ * Other top-level keys and other entries under `mcp` are preserved.
13
+ */
14
+ import { resolve } from "node:path";
15
+ const DEFAULT_TIMEOUT_MS = 10_000;
16
+ export function createOpenCodeWriter(opts) {
17
+ const configPath = resolve(opts.projectRoot, "opencode.json");
18
+ const timeout = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
19
+ return {
20
+ id: "opencode",
21
+ configPath,
22
+ merge(existing, invocation) {
23
+ return mergeOpenCodeConfig(existing, invocation, timeout);
24
+ },
25
+ };
26
+ }
27
+ export function mergeOpenCodeConfig(existing, invocation, timeoutMs = DEFAULT_TIMEOUT_MS) {
28
+ const doc = parseJsonObject(existing);
29
+ const mcp = isObject(doc["mcp"]) ? { ...doc["mcp"] } : {};
30
+ mcp["codehub"] = buildOpenCodeEntry(invocation, timeoutMs);
31
+ doc["mcp"] = mcp;
32
+ return `${JSON.stringify(doc, null, 2)}\n`;
33
+ }
34
+ function buildOpenCodeEntry(invocation, timeoutMs) {
35
+ const entry = {
36
+ type: "local",
37
+ command: [invocation.command, ...invocation.args],
38
+ enabled: true,
39
+ timeout: timeoutMs,
40
+ };
41
+ if (Object.keys(invocation.env).length > 0) {
42
+ entry["environment"] = { ...invocation.env };
43
+ }
44
+ return entry;
45
+ }
46
+ function parseJsonObject(input) {
47
+ if (input === undefined || input.trim().length === 0)
48
+ return {};
49
+ const parsed = JSON.parse(stripBom(input));
50
+ if (!isObject(parsed)) {
51
+ throw new Error("Expected opencode.json to contain a top-level object");
52
+ }
53
+ return { ...parsed };
54
+ }
55
+ function stripBom(s) {
56
+ return s.charCodeAt(0) === 0xfeff ? s.slice(1) : s;
57
+ }
58
+ function isObject(v) {
59
+ return typeof v === "object" && v !== null && !Array.isArray(v);
60
+ }
61
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/editors/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,UAAU,oBAAoB,CAAC,IAA2B;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACrD,OAAO;QACL,EAAE,EAAE,UAAU;QACd,UAAU;QACV,KAAK,CAAC,QAAQ,EAAE,UAAU;YACxB,OAAO,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAA4B,EAC5B,UAAyB,EACzB,YAAoB,kBAAkB;IAEtC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3D,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IACjB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAyB,EAAE,SAAiB;IACtE,MAAM,KAAK,GAA4B;QACrC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;QACjD,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,SAAS;KACnB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAY,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared types used by every editor writer.
3
+ *
4
+ * Every writer implements the `EditorWriter` interface: given a resolved MCP
5
+ * invocation (executable + args + env), it produces a merged file payload that
6
+ * preserves every pre-existing entry under the editor's MCP key and only
7
+ * upserts/replaces the single `codehub` entry.
8
+ *
9
+ * Writers are pure on their inputs — they never touch the filesystem. The
10
+ * orchestrator in `commands/setup.ts` handles read, backup, and atomic write.
11
+ */
12
+ export type EditorId = "claude-code" | "cursor" | "codex" | "windsurf" | "opencode";
13
+ export declare const ALL_EDITOR_IDS: readonly EditorId[];
14
+ /**
15
+ * Resolved MCP server invocation. The `command` + `args` fields have already
16
+ * been through any platform-specific wrapping (e.g. `cmd /c` on Windows).
17
+ */
18
+ export interface McpInvocation {
19
+ readonly command: string;
20
+ readonly args: readonly string[];
21
+ readonly env: Readonly<Record<string, string>>;
22
+ }
23
+ export interface EditorWriter {
24
+ readonly id: EditorId;
25
+ /** Absolute path of the file this writer targets. */
26
+ readonly configPath: string;
27
+ /**
28
+ * Produce the new file contents. If `existing` is undefined the writer must
29
+ * emit a fresh document. Otherwise it must preserve every unrelated key.
30
+ */
31
+ merge(existing: string | undefined, invocation: McpInvocation): string;
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/editors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpF,eAAO,MAAM,cAAc,EAAE,SAAS,QAAQ,EAM7C,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,aAAa,GAAG,MAAM,CAAC;CACxE"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared types used by every editor writer.
3
+ *
4
+ * Every writer implements the `EditorWriter` interface: given a resolved MCP
5
+ * invocation (executable + args + env), it produces a merged file payload that
6
+ * preserves every pre-existing entry under the editor's MCP key and only
7
+ * upserts/replaces the single `codehub` entry.
8
+ *
9
+ * Writers are pure on their inputs — they never touch the filesystem. The
10
+ * orchestrator in `commands/setup.ts` handles read, backup, and atomic write.
11
+ */
12
+ export const ALL_EDITOR_IDS = [
13
+ "claude-code",
14
+ "cursor",
15
+ "codex",
16
+ "windsurf",
17
+ "opencode",
18
+ ];
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/editors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,aAAa;IACb,QAAQ;IACR,OAAO;IACP,UAAU;IACV,UAAU;CACX,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * On native Windows, stdio servers launched via `npx` or an unwrapped
3
+ * `node`/binary shim fail with ENOENT because Node does not route through
4
+ * `cmd.exe` by default. The standard workaround in MCP client docs is to wrap
5
+ * the command in `cmd /c <original>`.
6
+ *
7
+ * We apply the wrap when:
8
+ * - we are running on `win32`, AND
9
+ * - the command is `npx`, `npm`, `yarn`, `pnpm`, or a `.cmd`/`.bat` file.
10
+ *
11
+ * Pure function; no IO.
12
+ */
13
+ import type { McpInvocation } from "./types.js";
14
+ export interface WrapOptions {
15
+ /** Override the detected platform. Defaults to `process.platform`. */
16
+ readonly platform?: NodeJS.Platform;
17
+ }
18
+ export declare function maybeWrapForWindows(invocation: McpInvocation, opts?: WrapOptions): McpInvocation;
19
+ //# sourceMappingURL=windows-wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-wrap.d.ts","sourceRoot":"","sources":["../../src/editors/windows-wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CACrC;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,aAAa,EACzB,IAAI,GAAE,WAAgB,GACrB,aAAa,CAaf"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * On native Windows, stdio servers launched via `npx` or an unwrapped
3
+ * `node`/binary shim fail with ENOENT because Node does not route through
4
+ * `cmd.exe` by default. The standard workaround in MCP client docs is to wrap
5
+ * the command in `cmd /c <original>`.
6
+ *
7
+ * We apply the wrap when:
8
+ * - we are running on `win32`, AND
9
+ * - the command is `npx`, `npm`, `yarn`, `pnpm`, or a `.cmd`/`.bat` file.
10
+ *
11
+ * Pure function; no IO.
12
+ */
13
+ const WRAPPABLE_COMMANDS = new Set(["npx", "npm", "yarn", "pnpm"]);
14
+ export function maybeWrapForWindows(invocation, opts = {}) {
15
+ const platform = opts.platform ?? process.platform;
16
+ if (platform !== "win32")
17
+ return invocation;
18
+ const base = invocation.command.toLowerCase();
19
+ const needsWrap = WRAPPABLE_COMMANDS.has(base) || base.endsWith(".cmd") || base.endsWith(".bat");
20
+ if (!needsWrap)
21
+ return invocation;
22
+ return {
23
+ command: "cmd",
24
+ args: ["/c", invocation.command, ...invocation.args],
25
+ env: invocation.env,
26
+ };
27
+ }
28
+ //# sourceMappingURL=windows-wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-wrap.js","sourceRoot":"","sources":["../../src/editors/windows-wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAOnE,MAAM,UAAU,mBAAmB,CACjC,UAAyB,EACzB,OAAoB,EAAE;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IAE5C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjG,IAAI,CAAC,SAAS;QAAE,OAAO,UAAU,CAAC;IAElC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;QACpD,GAAG,EAAE,UAAU,CAAC,GAAG;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Windsurf MCP config writer.
3
+ *
4
+ * Targets `~/.codeium/windsurf/mcp_config.json`. Same `mcpServers` shape as
5
+ * Claude Code / Cursor.
6
+ */
7
+ import type { EditorWriter } from "./types.js";
8
+ export interface WindsurfWriterOptions {
9
+ readonly home?: string;
10
+ }
11
+ export declare function createWindsurfWriter(opts?: WindsurfWriterOptions): EditorWriter;
12
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/editors/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,qBAA0B,GAAG,YAAY,CAUnF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Windsurf MCP config writer.
3
+ *
4
+ * Targets `~/.codeium/windsurf/mcp_config.json`. Same `mcpServers` shape as
5
+ * Claude Code / Cursor.
6
+ */
7
+ import { homedir } from "node:os";
8
+ import { resolve } from "node:path";
9
+ import { mergeMcpServers } from "./claude-code.js";
10
+ export function createWindsurfWriter(opts = {}) {
11
+ const home = opts.home ?? homedir();
12
+ const configPath = resolve(home, ".codeium", "windsurf", "mcp_config.json");
13
+ return {
14
+ id: "windsurf",
15
+ configPath,
16
+ merge(existing, invocation) {
17
+ return mergeMcpServers(existing, invocation);
18
+ },
19
+ };
20
+ }
21
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/editors/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD,MAAM,UAAU,oBAAoB,CAAC,OAA8B,EAAE;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC5E,OAAO;QACL,EAAE,EAAE,UAAU;QACd,UAAU;QACV,KAAK,CAAC,QAAQ,EAAE,UAAU;YACxB,OAAO,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * SHA256-pinned downloader for gte-modernbert-base weights.
3
+ *
4
+ * Resolves the target directory via {@link resolveModelDir}, then for each
5
+ * pinned file in {@link GTE_MODERNBERT_BASE_PINS}:
6
+ * 1. Skip when the file already exists and its SHA256 matches the pin.
7
+ * 2. Otherwise stream-download to `<target>.tmp`, hash during write, verify
8
+ * hash, and atomically rename to the final path.
9
+ *
10
+ * Retries transient network errors (ECONNRESET / timeout / 5xx) up to 3 times
11
+ * with exponential backoff (100ms, 500ms, 2s). A SHA256 mismatch is a hard
12
+ * error — the `.tmp` file is deleted and the error thrown. We never ship
13
+ * weights that don't match the pin.
14
+ *
15
+ * All disk access is streaming; we never buffer a 596 MB file in memory.
16
+ */
17
+ /** Fetch function signature for dependency injection (tests mock this). */
18
+ export type FetchFn = typeof fetch;
19
+ /** Options accepted by {@link downloadEmbedderWeights}. */
20
+ export interface DownloadEmbedderOptions {
21
+ /** Which variant to install. Defaults to `fp32`. */
22
+ readonly variant: "fp32" | "int8";
23
+ /** Override target directory. Defaults to the standard model path. */
24
+ readonly modelDir?: string;
25
+ /**
26
+ * Re-download every file even if the existing copy's SHA256 matches. Used
27
+ * by `--force`. When false, files that already match the pin are skipped.
28
+ */
29
+ readonly force?: boolean;
30
+ /**
31
+ * Called before each file starts downloading. `pct` is a whole-suite
32
+ * percentage (0-100) and `file` is the base name of the current file.
33
+ */
34
+ readonly onProgress?: (pct: number, file: string) => void;
35
+ /**
36
+ * Fetch implementation. Tests inject a stub; production uses global `fetch`.
37
+ */
38
+ readonly fetchImpl?: FetchFn;
39
+ /**
40
+ * Max retry attempts for a single file. Default 3. Must be >= 1.
41
+ */
42
+ readonly maxRetries?: number;
43
+ /**
44
+ * Retry backoff ladder in ms. Used positionally by retry index. Default
45
+ * `[100, 500, 2000]` per the v1.0 spec.
46
+ */
47
+ readonly backoffMs?: readonly number[];
48
+ }
49
+ /** Summary returned by {@link downloadEmbedderWeights}. */
50
+ export interface DownloadEmbedderResult {
51
+ readonly downloaded: number;
52
+ readonly skipped: number;
53
+ readonly totalBytes: number;
54
+ readonly modelDir: string;
55
+ }
56
+ /**
57
+ * Thrown when a downloaded file's SHA256 doesn't match the pinned value.
58
+ *
59
+ * The temp file is deleted before this throws so partial corrupt payloads
60
+ * never linger on disk.
61
+ */
62
+ export declare class Sha256MismatchError extends Error {
63
+ readonly code: "EMBEDDER_SHA256_MISMATCH";
64
+ readonly fileName: string;
65
+ readonly expected: string;
66
+ readonly actual: string;
67
+ constructor(fileName: string, expected: string, actual: string);
68
+ }
69
+ /**
70
+ * Thrown for all non-hash download failures (404, network, etc.). Carries the
71
+ * URL in the message so operators can reproduce with curl.
72
+ */
73
+ export declare class DownloadError extends Error {
74
+ readonly code: "EMBEDDER_DOWNLOAD_FAILED";
75
+ readonly url: string;
76
+ constructor(url: string, message: string, options?: ErrorOptions);
77
+ }
78
+ /**
79
+ * Download every pinned file for the requested variant, skipping files whose
80
+ * on-disk SHA256 already matches the pin (unless `force` is set).
81
+ *
82
+ * Returns `{downloaded, skipped, totalBytes}` where `totalBytes` counts the
83
+ * newly-downloaded bytes only (skipped files are not re-hashed into the
84
+ * total).
85
+ */
86
+ export declare function downloadEmbedderWeights(opts: DownloadEmbedderOptions): Promise<DownloadEmbedderResult>;
87
+ //# sourceMappingURL=embedder-downloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder-downloader.d.ts","sourceRoot":"","sources":["../src/embedder-downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,2EAA2E;AAC3E,MAAM,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC;AAEnC,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAKD;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAG,0BAA0B,CAAU;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAO/D;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAG,0BAA0B,CAAU;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKjE;AAwLD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CA0CjC"}