expandai 0.0.3 → 0.0.5

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 (320) hide show
  1. package/build/{esm/Install/Opencode → assets/opencode}/expandai-webfetch.js +22 -4
  2. package/build/dts/Mcp/RequestHeaders.d.ts +0 -1
  3. package/build/dts/Mcp/Server.d.ts +1 -2
  4. package/build/dts/index.d.ts +0 -1
  5. package/build/esm/index.js +180 -2
  6. package/build/esm/main.js +677 -200
  7. package/build/skills/expandai/SKILL.md +12 -6
  8. package/package.json +19 -11
  9. package/build/dts/ApiClient.d.ts +0 -165
  10. package/build/dts/ApiClient.d.ts.map +0 -1
  11. package/build/dts/Auth/Domain.d.ts +0 -95
  12. package/build/dts/Auth/Domain.d.ts.map +0 -1
  13. package/build/dts/Auth/ManualAuthorization.d.ts +0 -107
  14. package/build/dts/Auth/ManualAuthorization.d.ts.map +0 -1
  15. package/build/dts/Auth/PendingInit.d.ts +0 -35
  16. package/build/dts/Auth/PendingInit.d.ts.map +0 -1
  17. package/build/dts/Auth/Pkce.d.ts +0 -10
  18. package/build/dts/Auth/Pkce.d.ts.map +0 -1
  19. package/build/dts/Auth/SetupGrantAuthorization.d.ts +0 -34
  20. package/build/dts/Auth/SetupGrantAuthorization.d.ts.map +0 -1
  21. package/build/dts/Authentication.d.ts +0 -24
  22. package/build/dts/Authentication.d.ts.map +0 -1
  23. package/build/dts/BrowserOAuth.d.ts +0 -99
  24. package/build/dts/BrowserOAuth.d.ts.map +0 -1
  25. package/build/dts/CommandPath.d.ts +0 -2
  26. package/build/dts/CommandPath.d.ts.map +0 -1
  27. package/build/dts/Commands/Fetch.d.ts +0 -30
  28. package/build/dts/Commands/Fetch.d.ts.map +0 -1
  29. package/build/dts/Commands/Hook.d.ts +0 -17
  30. package/build/dts/Commands/Hook.d.ts.map +0 -1
  31. package/build/dts/Commands/Init.d.ts +0 -55
  32. package/build/dts/Commands/Init.d.ts.map +0 -1
  33. package/build/dts/Commands/Mcp.d.ts +0 -11
  34. package/build/dts/Commands/Mcp.d.ts.map +0 -1
  35. package/build/dts/Commands/McpRun.d.ts +0 -5
  36. package/build/dts/Commands/McpRun.d.ts.map +0 -1
  37. package/build/dts/Commands/Search.d.ts +0 -21
  38. package/build/dts/Commands/Search.d.ts.map +0 -1
  39. package/build/dts/Commands/Skill.d.ts +0 -12
  40. package/build/dts/Commands/Skill.d.ts.map +0 -1
  41. package/build/dts/Commands/Status.d.ts +0 -27
  42. package/build/dts/Commands/Status.d.ts.map +0 -1
  43. package/build/dts/Commands/Telemetry.d.ts +0 -7
  44. package/build/dts/Commands/Telemetry.d.ts.map +0 -1
  45. package/build/dts/Commands/Uninstall.d.ts +0 -9
  46. package/build/dts/Commands/Uninstall.d.ts.map +0 -1
  47. package/build/dts/Config.d.ts +0 -196
  48. package/build/dts/Config.d.ts.map +0 -1
  49. package/build/dts/Hook/Claude.d.ts +0 -13
  50. package/build/dts/Hook/Claude.d.ts.map +0 -1
  51. package/build/dts/Hook/Errors.d.ts +0 -20
  52. package/build/dts/Hook/Errors.d.ts.map +0 -1
  53. package/build/dts/Hook/Opencode.d.ts +0 -13
  54. package/build/dts/Hook/Opencode.d.ts.map +0 -1
  55. package/build/dts/Hook/SnapshotNote.d.ts +0 -12
  56. package/build/dts/Hook/SnapshotNote.d.ts.map +0 -1
  57. package/build/dts/Init/ClaudeAdapter.d.ts +0 -61
  58. package/build/dts/Init/ClaudeAdapter.d.ts.map +0 -1
  59. package/build/dts/Init/ClaudeProfile.d.ts +0 -78
  60. package/build/dts/Init/ClaudeProfile.d.ts.map +0 -1
  61. package/build/dts/Init/Domain.d.ts +0 -139
  62. package/build/dts/Init/Domain.d.ts.map +0 -1
  63. package/build/dts/Init/HarnessAdapter.d.ts +0 -33
  64. package/build/dts/Init/HarnessAdapter.d.ts.map +0 -1
  65. package/build/dts/Init/HarnessDetector.d.ts +0 -19
  66. package/build/dts/Init/HarnessDetector.d.ts.map +0 -1
  67. package/build/dts/Init/HarnessRegistry.d.ts +0 -50
  68. package/build/dts/Init/HarnessRegistry.d.ts.map +0 -1
  69. package/build/dts/Init/MutationTransaction.d.ts +0 -96
  70. package/build/dts/Init/MutationTransaction.d.ts.map +0 -1
  71. package/build/dts/Init/Service.d.ts +0 -72
  72. package/build/dts/Init/Service.d.ts.map +0 -1
  73. package/build/dts/Init/StandardAdapters.d.ts +0 -42
  74. package/build/dts/Init/StandardAdapters.d.ts.map +0 -1
  75. package/build/dts/Init/Status.d.ts +0 -149
  76. package/build/dts/Init/Status.d.ts.map +0 -1
  77. package/build/dts/Install/Claude/Hook.d.ts +0 -120
  78. package/build/dts/Install/Claude/Hook.d.ts.map +0 -1
  79. package/build/dts/Install/Claude/Mcp.d.ts +0 -48
  80. package/build/dts/Install/Claude/Mcp.d.ts.map +0 -1
  81. package/build/dts/Install/Claude/Skill.d.ts +0 -23
  82. package/build/dts/Install/Claude/Skill.d.ts.map +0 -1
  83. package/build/dts/Install/Codex/Mcp.d.ts +0 -45
  84. package/build/dts/Install/Codex/Mcp.d.ts.map +0 -1
  85. package/build/dts/Install/Codex/Skill.d.ts +0 -22
  86. package/build/dts/Install/Codex/Skill.d.ts.map +0 -1
  87. package/build/dts/Install/Cursor/Mcp.d.ts +0 -45
  88. package/build/dts/Install/Cursor/Mcp.d.ts.map +0 -1
  89. package/build/dts/Install/Cursor/Skill.d.ts +0 -29
  90. package/build/dts/Install/Cursor/Skill.d.ts.map +0 -1
  91. package/build/dts/Install/Domain.d.ts +0 -103
  92. package/build/dts/Install/Domain.d.ts.map +0 -1
  93. package/build/dts/Install/Hook.d.ts +0 -30
  94. package/build/dts/Install/Hook.d.ts.map +0 -1
  95. package/build/dts/Install/Mcp.d.ts +0 -28
  96. package/build/dts/Install/Mcp.d.ts.map +0 -1
  97. package/build/dts/Install/Opencode/Hook.d.ts +0 -24
  98. package/build/dts/Install/Opencode/Hook.d.ts.map +0 -1
  99. package/build/dts/Install/Opencode/Mcp.d.ts +0 -47
  100. package/build/dts/Install/Opencode/Mcp.d.ts.map +0 -1
  101. package/build/dts/Install/Opencode/Skill.d.ts +0 -26
  102. package/build/dts/Install/Opencode/Skill.d.ts.map +0 -1
  103. package/build/dts/Install/Skill.d.ts +0 -32
  104. package/build/dts/Install/Skill.d.ts.map +0 -1
  105. package/build/dts/Install/Uninstall.d.ts +0 -32
  106. package/build/dts/Install/Uninstall.d.ts.map +0 -1
  107. package/build/dts/MarkdownAnsi.d.ts +0 -29
  108. package/build/dts/MarkdownAnsi.d.ts.map +0 -1
  109. package/build/dts/Mcp/ExpandDocs.d.ts +0 -19
  110. package/build/dts/Mcp/ExpandDocs.d.ts.map +0 -1
  111. package/build/dts/Mcp/RequestHeaders.d.ts.map +0 -1
  112. package/build/dts/Mcp/Server.d.ts.map +0 -1
  113. package/build/dts/Mcp/Toolkit.d.ts +0 -3
  114. package/build/dts/Mcp/Toolkit.d.ts.map +0 -1
  115. package/build/dts/Mcp/tools/Citations.d.ts +0 -266
  116. package/build/dts/Mcp/tools/Citations.d.ts.map +0 -1
  117. package/build/dts/Mcp/tools/Fetch.d.ts +0 -168
  118. package/build/dts/Mcp/tools/Fetch.d.ts.map +0 -1
  119. package/build/dts/SecureFile.d.ts +0 -23
  120. package/build/dts/SecureFile.d.ts.map +0 -1
  121. package/build/dts/Snippets.d.ts +0 -18
  122. package/build/dts/Snippets.d.ts.map +0 -1
  123. package/build/dts/Telemetry.d.ts +0 -30
  124. package/build/dts/Telemetry.d.ts.map +0 -1
  125. package/build/dts/Version.d.ts +0 -2
  126. package/build/dts/Version.d.ts.map +0 -1
  127. package/build/dts/Xdg.d.ts +0 -11
  128. package/build/dts/Xdg.d.ts.map +0 -1
  129. package/build/dts/index.d.ts.map +0 -1
  130. package/build/dts/main.d.ts +0 -3
  131. package/build/dts/main.d.ts.map +0 -1
  132. package/build/esm/ApiClient.js +0 -305
  133. package/build/esm/ApiClient.js.map +0 -1
  134. package/build/esm/Auth/Domain.js +0 -56
  135. package/build/esm/Auth/Domain.js.map +0 -1
  136. package/build/esm/Auth/ManualAuthorization.js +0 -253
  137. package/build/esm/Auth/ManualAuthorization.js.map +0 -1
  138. package/build/esm/Auth/PendingInit.js +0 -267
  139. package/build/esm/Auth/PendingInit.js.map +0 -1
  140. package/build/esm/Auth/Pkce.js +0 -23
  141. package/build/esm/Auth/Pkce.js.map +0 -1
  142. package/build/esm/Auth/SetupGrantAuthorization.js +0 -91
  143. package/build/esm/Auth/SetupGrantAuthorization.js.map +0 -1
  144. package/build/esm/Authentication.js +0 -143
  145. package/build/esm/Authentication.js.map +0 -1
  146. package/build/esm/BrowserOAuth.js +0 -251
  147. package/build/esm/BrowserOAuth.js.map +0 -1
  148. package/build/esm/CommandPath.js +0 -31
  149. package/build/esm/CommandPath.js.map +0 -1
  150. package/build/esm/Commands/Fetch.js +0 -119
  151. package/build/esm/Commands/Fetch.js.map +0 -1
  152. package/build/esm/Commands/Hook.js +0 -20
  153. package/build/esm/Commands/Hook.js.map +0 -1
  154. package/build/esm/Commands/Init.js +0 -371
  155. package/build/esm/Commands/Init.js.map +0 -1
  156. package/build/esm/Commands/Mcp.js +0 -19
  157. package/build/esm/Commands/Mcp.js.map +0 -1
  158. package/build/esm/Commands/McpRun.js +0 -15
  159. package/build/esm/Commands/McpRun.js.map +0 -1
  160. package/build/esm/Commands/Search.js +0 -46
  161. package/build/esm/Commands/Search.js.map +0 -1
  162. package/build/esm/Commands/Skill.js +0 -17
  163. package/build/esm/Commands/Skill.js.map +0 -1
  164. package/build/esm/Commands/Status.js +0 -186
  165. package/build/esm/Commands/Status.js.map +0 -1
  166. package/build/esm/Commands/Telemetry.js +0 -23
  167. package/build/esm/Commands/Telemetry.js.map +0 -1
  168. package/build/esm/Commands/Uninstall.js +0 -28
  169. package/build/esm/Commands/Uninstall.js.map +0 -1
  170. package/build/esm/Config.js +0 -619
  171. package/build/esm/Config.js.map +0 -1
  172. package/build/esm/Hook/Claude.js +0 -74
  173. package/build/esm/Hook/Claude.js.map +0 -1
  174. package/build/esm/Hook/Errors.js +0 -18
  175. package/build/esm/Hook/Errors.js.map +0 -1
  176. package/build/esm/Hook/Opencode.js +0 -50
  177. package/build/esm/Hook/Opencode.js.map +0 -1
  178. package/build/esm/Hook/SnapshotNote.js +0 -65
  179. package/build/esm/Hook/SnapshotNote.js.map +0 -1
  180. package/build/esm/Init/ClaudeAdapter.js +0 -137
  181. package/build/esm/Init/ClaudeAdapter.js.map +0 -1
  182. package/build/esm/Init/ClaudeProfile.js +0 -380
  183. package/build/esm/Init/ClaudeProfile.js.map +0 -1
  184. package/build/esm/Init/Domain.js +0 -118
  185. package/build/esm/Init/Domain.js.map +0 -1
  186. package/build/esm/Init/HarnessAdapter.js +0 -21
  187. package/build/esm/Init/HarnessAdapter.js.map +0 -1
  188. package/build/esm/Init/HarnessDetector.js +0 -65
  189. package/build/esm/Init/HarnessDetector.js.map +0 -1
  190. package/build/esm/Init/HarnessRegistry.js +0 -58
  191. package/build/esm/Init/HarnessRegistry.js.map +0 -1
  192. package/build/esm/Init/MutationTransaction.js +0 -494
  193. package/build/esm/Init/MutationTransaction.js.map +0 -1
  194. package/build/esm/Init/Service.js +0 -319
  195. package/build/esm/Init/Service.js.map +0 -1
  196. package/build/esm/Init/StandardAdapters.js +0 -116
  197. package/build/esm/Init/StandardAdapters.js.map +0 -1
  198. package/build/esm/Init/Status.js +0 -215
  199. package/build/esm/Init/Status.js.map +0 -1
  200. package/build/esm/Install/Claude/Hook.js +0 -221
  201. package/build/esm/Install/Claude/Hook.js.map +0 -1
  202. package/build/esm/Install/Claude/Mcp.js +0 -101
  203. package/build/esm/Install/Claude/Mcp.js.map +0 -1
  204. package/build/esm/Install/Claude/Skill.js +0 -56
  205. package/build/esm/Install/Claude/Skill.js.map +0 -1
  206. package/build/esm/Install/Codex/Mcp.js +0 -97
  207. package/build/esm/Install/Codex/Mcp.js.map +0 -1
  208. package/build/esm/Install/Codex/Skill.js +0 -33
  209. package/build/esm/Install/Codex/Skill.js.map +0 -1
  210. package/build/esm/Install/Cursor/Mcp.js +0 -74
  211. package/build/esm/Install/Cursor/Mcp.js.map +0 -1
  212. package/build/esm/Install/Cursor/Skill.js +0 -40
  213. package/build/esm/Install/Cursor/Skill.js.map +0 -1
  214. package/build/esm/Install/Domain.js +0 -162
  215. package/build/esm/Install/Domain.js.map +0 -1
  216. package/build/esm/Install/Hook.js +0 -38
  217. package/build/esm/Install/Hook.js.map +0 -1
  218. package/build/esm/Install/Mcp.js +0 -40
  219. package/build/esm/Install/Mcp.js.map +0 -1
  220. package/build/esm/Install/Opencode/Hook.js +0 -44
  221. package/build/esm/Install/Opencode/Hook.js.map +0 -1
  222. package/build/esm/Install/Opencode/Mcp.js +0 -76
  223. package/build/esm/Install/Opencode/Mcp.js.map +0 -1
  224. package/build/esm/Install/Opencode/Skill.js +0 -37
  225. package/build/esm/Install/Opencode/Skill.js.map +0 -1
  226. package/build/esm/Install/Skill.js +0 -41
  227. package/build/esm/Install/Skill.js.map +0 -1
  228. package/build/esm/Install/Uninstall.js +0 -49
  229. package/build/esm/Install/Uninstall.js.map +0 -1
  230. package/build/esm/MarkdownAnsi.js +0 -142
  231. package/build/esm/MarkdownAnsi.js.map +0 -1
  232. package/build/esm/Mcp/ExpandDocs.js +0 -56
  233. package/build/esm/Mcp/ExpandDocs.js.map +0 -1
  234. package/build/esm/Mcp/RequestHeaders.js +0 -13
  235. package/build/esm/Mcp/RequestHeaders.js.map +0 -1
  236. package/build/esm/Mcp/Server.js +0 -12
  237. package/build/esm/Mcp/Server.js.map +0 -1
  238. package/build/esm/Mcp/Toolkit.js +0 -16
  239. package/build/esm/Mcp/Toolkit.js.map +0 -1
  240. package/build/esm/Mcp/tools/Citations.js +0 -193
  241. package/build/esm/Mcp/tools/Citations.js.map +0 -1
  242. package/build/esm/Mcp/tools/Fetch.js +0 -165
  243. package/build/esm/Mcp/tools/Fetch.js.map +0 -1
  244. package/build/esm/SecureFile.js +0 -36
  245. package/build/esm/SecureFile.js.map +0 -1
  246. package/build/esm/Snippets.js +0 -29
  247. package/build/esm/Snippets.js.map +0 -1
  248. package/build/esm/Telemetry.js +0 -157
  249. package/build/esm/Telemetry.js.map +0 -1
  250. package/build/esm/Version.js +0 -4
  251. package/build/esm/Version.js.map +0 -1
  252. package/build/esm/Xdg.js +0 -15
  253. package/build/esm/Xdg.js.map +0 -1
  254. package/build/esm/index.js.map +0 -1
  255. package/build/esm/main.js.map +0 -1
  256. package/src/ApiClient.ts +0 -450
  257. package/src/Auth/Domain.ts +0 -63
  258. package/src/Auth/ManualAuthorization.ts +0 -296
  259. package/src/Auth/PendingInit.ts +0 -338
  260. package/src/Auth/Pkce.ts +0 -26
  261. package/src/Auth/SetupGrantAuthorization.ts +0 -116
  262. package/src/Authentication.ts +0 -202
  263. package/src/BrowserOAuth.ts +0 -359
  264. package/src/CommandPath.ts +0 -30
  265. package/src/Commands/Fetch.ts +0 -188
  266. package/src/Commands/Hook.ts +0 -48
  267. package/src/Commands/Init.ts +0 -489
  268. package/src/Commands/Mcp.ts +0 -30
  269. package/src/Commands/McpRun.ts +0 -25
  270. package/src/Commands/Search.ts +0 -97
  271. package/src/Commands/Skill.ts +0 -30
  272. package/src/Commands/Status.ts +0 -228
  273. package/src/Commands/Telemetry.ts +0 -42
  274. package/src/Commands/Uninstall.ts +0 -38
  275. package/src/Config.ts +0 -840
  276. package/src/Hook/Claude.ts +0 -81
  277. package/src/Hook/Errors.ts +0 -19
  278. package/src/Hook/Opencode.ts +0 -58
  279. package/src/Hook/SnapshotNote.ts +0 -66
  280. package/src/Init/ClaudeAdapter.ts +0 -191
  281. package/src/Init/ClaudeProfile.ts +0 -496
  282. package/src/Init/Domain.ts +0 -153
  283. package/src/Init/HarnessAdapter.ts +0 -35
  284. package/src/Init/HarnessDetector.ts +0 -77
  285. package/src/Init/HarnessRegistry.ts +0 -87
  286. package/src/Init/MutationTransaction.ts +0 -747
  287. package/src/Init/Service.ts +0 -385
  288. package/src/Init/StandardAdapters.ts +0 -141
  289. package/src/Init/Status.ts +0 -253
  290. package/src/Install/Claude/Hook.ts +0 -286
  291. package/src/Install/Claude/Mcp.ts +0 -129
  292. package/src/Install/Claude/Skill.ts +0 -77
  293. package/src/Install/Codex/Mcp.ts +0 -114
  294. package/src/Install/Codex/Skill.ts +0 -44
  295. package/src/Install/Cursor/Mcp.ts +0 -85
  296. package/src/Install/Cursor/Skill.ts +0 -51
  297. package/src/Install/Domain.ts +0 -221
  298. package/src/Install/Hook.ts +0 -50
  299. package/src/Install/Mcp.ts +0 -71
  300. package/src/Install/Opencode/Hook.ts +0 -55
  301. package/src/Install/Opencode/Mcp.ts +0 -87
  302. package/src/Install/Opencode/Skill.ts +0 -48
  303. package/src/Install/Opencode/expandai-webfetch.d.ts +0 -23
  304. package/src/Install/Opencode/expandai-webfetch.js +0 -56
  305. package/src/Install/Skill.ts +0 -57
  306. package/src/Install/Uninstall.ts +0 -82
  307. package/src/MarkdownAnsi.ts +0 -162
  308. package/src/Mcp/ExpandDocs.ts +0 -62
  309. package/src/Mcp/RequestHeaders.ts +0 -16
  310. package/src/Mcp/Server.ts +0 -15
  311. package/src/Mcp/Toolkit.ts +0 -21
  312. package/src/Mcp/tools/Citations.ts +0 -219
  313. package/src/Mcp/tools/Fetch.ts +0 -203
  314. package/src/SecureFile.ts +0 -70
  315. package/src/Snippets.ts +0 -39
  316. package/src/Telemetry.ts +0 -186
  317. package/src/Version.ts +0 -3
  318. package/src/Xdg.ts +0 -18
  319. package/src/index.ts +0 -1
  320. package/src/main.ts +0 -305
@@ -1,76 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import { Config, Console, Effect, Match, Record, Schema } from 'effect';
3
- import { CliInvocation, ConfigIo, McpParseError, McpWriteError, OpencodeConfigSchema, SERVER_KEY } from '../Domain.js';
4
- /**
5
- * OpenCode MCP descriptor — its own shape (per opencode.ai/docs/mcp-servers):
6
- * top-level key is `mcp` (not `mcpServers`), `command` is an array (no
7
- * separate args), env is called `environment`, and `type` uses
8
- * `local` / `remote` rather than `stdio` / `http`.
9
- *
10
- * - global → `~/.config/opencode/opencode.json`
11
- * - project → `<cwd>/opencode.json`
12
- */
13
- export class Entry extends Schema.Class('OpencodeMcpEntry')({
14
- type: Schema.Literal('local'),
15
- command: Schema.Array(Schema.String),
16
- environment: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.String })),
17
- enabled: Schema.optional(Schema.Boolean),
18
- }) {
19
- }
20
- export class OpencodeMcp extends Effect.Service()('@expandai/cli/Install/Opencode/Mcp', {
21
- dependencies: [ConfigIo.Default, CliInvocation.Default],
22
- effect: Effect.gen(function* () {
23
- const io = yield* ConfigIo;
24
- const cli = yield* CliInvocation;
25
- const home = yield* Config.string('HOME').pipe(Config.withDefault(homedir()));
26
- const cwd = yield* Config.string('PWD').pipe(Config.withDefault(process.cwd()));
27
- const pathFor = Effect.fn(function* (scope) {
28
- return yield* Match.value(scope).pipe(Match.when('global', () => Effect.succeed(`${home}/.config/opencode/opencode.json`)), Match.when('project', () => Effect.succeed(`${cwd}/opencode.json`)), Match.exhaustive);
29
- });
30
- const readConfig = Effect.fn(function* (file) {
31
- return yield* io
32
- .read(file, OpencodeConfigSchema)
33
- .pipe(Effect.mapError((error) => new McpParseError({ path: file, error })));
34
- });
35
- const writeConfig = Effect.fn(function* (file, value) {
36
- yield* io
37
- .write(file, value, OpencodeConfigSchema)
38
- .pipe(Effect.mapError((error) => new McpWriteError({ path: file, error })));
39
- });
40
- const install = Effect.fn(function* (scope) {
41
- const file = yield* pathFor(scope);
42
- const config = yield* readConfig(file);
43
- const invocation = yield* cli.resolve();
44
- yield* writeConfig(file, {
45
- ...config,
46
- mcp: {
47
- ...config.mcp,
48
- [SERVER_KEY]: new Entry({
49
- type: 'local',
50
- command: [invocation.command, ...invocation.args, 'mcp', 'run'],
51
- environment: { EXPANDAI_HARNESS: 'opencode' },
52
- enabled: true,
53
- }),
54
- },
55
- });
56
- yield* Console.log(`Installed expandai MCP server into ${file}`);
57
- });
58
- const uninstall = Effect.fn(function* (scope) {
59
- const file = yield* pathFor(scope);
60
- const config = yield* readConfig(file);
61
- if (!(SERVER_KEY in config.mcp)) {
62
- return;
63
- }
64
- yield* writeConfig(file, { ...config, mcp: Record.remove(config.mcp, SERVER_KEY) });
65
- yield* Console.log(`Removed expandai MCP server from ${file}`);
66
- });
67
- const isInstalled = Effect.fn(function* (scope) {
68
- const file = yield* pathFor(scope);
69
- const config = yield* readConfig(file);
70
- return SERVER_KEY in config.mcp;
71
- });
72
- return { install, uninstall, isInstalled, pathFor };
73
- }),
74
- }) {
75
- }
76
- //# sourceMappingURL=Mcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../../../../src/Install/Opencode/Mcp.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import { Config, Effect, Match } from 'effect';
3
- import { SkillIo } from '../Domain.js';
4
- /**
5
- * OpenCode skills are Claude-Code-compatible Markdown files. Per
6
- * opencode.ai/docs/skills, OpenCode auto-discovers them under either
7
- * `.opencode/skills/<name>/`, `.claude/skills/<name>/`, or
8
- * `.agents/skills/<name>/` (and the `~/.config/opencode/...` equivalents
9
- * for global). We ship to OpenCode-native paths.
10
- *
11
- * - global → `~/.config/opencode/skills/expandai/SKILL.md`
12
- * - project → `<cwd>/.opencode/skills/expandai/SKILL.md`
13
- */
14
- export const SKILL_NAME = 'expandai';
15
- export class OpencodeSkill extends Effect.Service()('@expandai/cli/Install/Opencode/Skill', {
16
- dependencies: [SkillIo.Default],
17
- effect: Effect.gen(function* () {
18
- const io = yield* SkillIo;
19
- const home = yield* Config.string('HOME').pipe(Config.withDefault(homedir()));
20
- const cwd = yield* Config.string('PWD').pipe(Config.withDefault(process.cwd()));
21
- const pathFor = Effect.fn(function* (scope) {
22
- return yield* Match.value(scope).pipe(Match.when('global', () => Effect.succeed(`${home}/.config/opencode/skills/${SKILL_NAME}`)), Match.when('project', () => Effect.succeed(`${cwd}/.opencode/skills/${SKILL_NAME}`)), Match.exhaustive);
23
- });
24
- const install = Effect.fn(function* (scope) {
25
- return yield* io.install(yield* pathFor(scope));
26
- });
27
- const uninstall = Effect.fn(function* (scope) {
28
- return yield* io.uninstall(yield* pathFor(scope));
29
- });
30
- const isCurrent = Effect.fn(function* (scope) {
31
- return yield* io.isCurrent(yield* pathFor(scope));
32
- });
33
- return { install, uninstall, isCurrent, pathFor };
34
- }),
35
- }) {
36
- }
37
- //# sourceMappingURL=Skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Skill.js","sourceRoot":"","sources":["../../../../src/Install/Opencode/Skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAA;AAEpC,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,OAAO,EAAiB,CAAC,sCAAsC,EAAE;IAC1G,YAAY,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAA;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAE/E,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAmB;YACvD,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,4BAA4B,UAAU,EAAE,CAAC,CAAC,EAC3F,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,qBAAqB,UAAU,EAAE,CAAC,CAAC,EACpF,KAAK,CAAC,UAAU,CAChB,CAAA;QACF,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAmB;YACvD,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAmB;YACzD,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAmB;YACzD,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAW,CAAA;IAC3D,CAAC,CAAC;CACF,CAAC;CAAG"}
@@ -1,41 +0,0 @@
1
- import { Console, Effect, Match } from 'effect';
2
- import { ClaudeSkill } from './Claude/Skill.js';
3
- import { CodexSkill } from './Codex/Skill.js';
4
- import { CursorSkill } from './Cursor/Skill.js';
5
- import { OpencodeSkill } from './Opencode/Skill.js';
6
- /**
7
- * Skill install dispatcher. Copies the bundled `SKILL.md` from the CLI's
8
- * own `skills/expandai/` source into the host-specific destination.
9
- *
10
- * - claude-code: `~/.claude/skills/expandai/` (global) or
11
- * `<cwd>/.claude/skills/expandai/` (project)
12
- * - cursor: `~/.cursor/skills/expandai/` (global) or
13
- * `<cwd>/.cursor/skills/expandai/` (project)
14
- * - opencode: `~/.config/opencode/skills/expandai/` (global) or
15
- * `<cwd>/.opencode/skills/expandai/` (project)
16
- * - codex: `~/.agents/skills/expandai/` (global) or
17
- * `<cwd>/.agents/skills/expandai/` (project)
18
- *
19
- * All hosts use the same `SKILL.md` + YAML frontmatter open standard,
20
- * so the bundled skill directory copies in unchanged.
21
- */
22
- export class Skill extends Effect.Service()('@expandai/cli/Install/Skill', {
23
- dependencies: [ClaudeSkill.Default, CursorSkill.Default, OpencodeSkill.Default, CodexSkill.Default],
24
- effect: Effect.gen(function* () {
25
- const claude = yield* ClaudeSkill;
26
- const cursor = yield* CursorSkill;
27
- const opencode = yield* OpencodeSkill;
28
- const codex = yield* CodexSkill;
29
- const install = Effect.fn('Skill.install')(function* (host, scope) {
30
- const target = yield* Match.value(host).pipe(Match.when('claude-code', () => claude.install(scope)), Match.when('cursor', () => cursor.install(scope)), Match.when('opencode', () => opencode.install(scope)), Match.when('codex', () => codex.install(scope)), Match.exhaustive);
31
- yield* Console.log(`Installed expandai skill into ${target}`);
32
- });
33
- const uninstall = Effect.fn('Skill.uninstall')(function* (host, scope) {
34
- const target = yield* Match.value(host).pipe(Match.when('claude-code', () => claude.uninstall(scope)), Match.when('cursor', () => cursor.uninstall(scope)), Match.when('opencode', () => opencode.uninstall(scope)), Match.when('codex', () => codex.uninstall(scope)), Match.exhaustive);
35
- yield* Console.log(`Removed expandai skill from ${target}`);
36
- });
37
- return { install, uninstall };
38
- }),
39
- }) {
40
- }
41
- //# sourceMappingURL=Skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Skill.js","sourceRoot":"","sources":["../../../src/Install/Skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,OAAO,KAAM,SAAQ,MAAM,CAAC,OAAO,EAAS,CAAC,6BAA6B,EAAE;IACjF,YAAY,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;IACnG,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAA;QAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAU,EAAE,KAAmB;YACpF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACtD,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACjD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACrD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/C,KAAK,CAAC,UAAU,CAChB,CAAA;YACD,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAU,EAAE,KAAmB;YACxF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACxD,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACnD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACvD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACjD,KAAK,CAAC,UAAU,CAChB,CAAA;YACD,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAW,CAAA;IACvC,CAAC,CAAC;CACF,CAAC;CAAG"}
@@ -1,49 +0,0 @@
1
- import { Array, Effect, Match, Schema } from 'effect';
2
- import { HookInstaller } from './Hook.js';
3
- import { Host, InstallScope, Mcp } from './Mcp.js';
4
- import { Skill } from './Skill.js';
5
- export const UninstallTarget = Schema.Literal('all', 'hook', 'skill', 'mcp');
6
- export class UninstallOptions extends Schema.Class('UninstallOptions')({
7
- target: Schema.optional(UninstallTarget),
8
- host: Schema.optional(Host),
9
- scope: Schema.optional(InstallScope),
10
- }) {
11
- }
12
- const SCOPES = ['global', 'project'];
13
- const HOSTS = ['claude-code', 'cursor', 'opencode', 'codex'];
14
- const isHookHost = (host) => host === 'claude-code' || host === 'opencode';
15
- export class Uninstall extends Effect.Service()('@expandai/cli/Install/Uninstall', {
16
- dependencies: [HookInstaller.Default, Mcp.Default, Skill.Default],
17
- effect: Effect.gen(function* () {
18
- const hook = yield* HookInstaller;
19
- const mcp = yield* Mcp;
20
- const skill = yield* Skill;
21
- const uninstall = Effect.fn(function* (options = new UninstallOptions({})) {
22
- const target = options.target ?? 'all';
23
- const hosts = options.host ? [options.host] : HOSTS;
24
- const scopes = options.scope ? [options.scope] : SCOPES;
25
- // Sequential by default: a future change that merges any two `(host,
26
- // scope)` config paths into the same file shouldn't silently race.
27
- // Logout/uninstall happens once per session; throughput isn't the
28
- // bottleneck.
29
- const uninstallHooks = Effect.fnUntraced(function* () {
30
- const hookHosts = Array.filter(hosts, isHookHost);
31
- yield* Effect.forEach(hookHosts, (host) => Effect.forEach(scopes, (scope) => hook.uninstall(host, scope), { discard: true }), { discard: true });
32
- });
33
- const uninstallSkills = Effect.fnUntraced(function* () {
34
- yield* Effect.forEach(hosts, (host) => Effect.forEach(scopes, (scope) => skill.uninstall(host, scope), { discard: true }), { discard: true });
35
- });
36
- const uninstallMcp = Effect.fnUntraced(function* () {
37
- yield* Effect.forEach(hosts, (host) => Effect.forEach(scopes, (scope) => mcp.uninstall(host, scope), { discard: true }), { discard: true });
38
- });
39
- const uninstallMcpWithoutHooks = Effect.fnUntraced(function* () {
40
- const mcpOnlyHosts = Array.filter(hosts, (host) => !isHookHost(host));
41
- yield* Effect.forEach(mcpOnlyHosts, (host) => Effect.forEach(scopes, (scope) => mcp.uninstall(host, scope), { discard: true }), { discard: true });
42
- });
43
- yield* Match.value(target).pipe(Match.when('all', () => uninstallHooks().pipe(Effect.zipRight(uninstallMcpWithoutHooks()), Effect.zipRight(uninstallSkills()))), Match.when('hook', () => uninstallHooks()), Match.when('skill', () => uninstallSkills()), Match.when('mcp', () => uninstallMcp()), Match.exhaustive);
44
- });
45
- return { uninstall };
46
- }),
47
- }) {
48
- }
49
- //# sourceMappingURL=Uninstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Uninstall.js","sourceRoot":"","sources":["../../../src/Install/Uninstall.ts"],"names":[],"mappings":"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"}
@@ -1,142 +0,0 @@
1
- /**
2
- * Zero-dependency ANSI syntax highlighting for markdown printed to an
3
- * interactive terminal.
4
- *
5
- * This is a highlighter, not a renderer: the input text is preserved
6
- * byte-for-byte and only wrapped in ANSI escape sequences, so copying
7
- * from the terminal or stripping the escapes yields the exact document
8
- * the API returned. Piped output (non-TTY) must stay unstyled — gate
9
- * calls with `shouldColorizeMarkdown`.
10
- */
11
- // Styling is intentionally limited to 4-bit SGR (bold/dim/underline + the 8
12
- // base colors): it renders on every color-capable terminal and inherits the
13
- // user's palette. Do NOT introduce 256-color (38;5;n) or truecolor (38;2;r;g;b)
14
- // sequences without adding capability detection first — truecolor needs
15
- // COLORTERM=truecolor|24bit (TERM alone is not enough: e.g. ghostty sets
16
- // TERM=xterm-ghostty), and 256-color needs TERM=*-256color; emitting either
17
- // tier on a lesser terminal produces garbage.
18
- const RESET = '\x1b[0m';
19
- const BOLD = '\x1b[1m';
20
- const DIM = '\x1b[2m';
21
- const CYAN = '\x1b[36m';
22
- const YELLOW = '\x1b[33m';
23
- const GREEN = '\x1b[32m';
24
- const BLUE_UNDERLINE = '\x1b[34;4m';
25
- const HEADING = '\x1b[1;36m';
26
- /**
27
- * Standard CLI color negotiation: color only on an interactive terminal,
28
- * `NO_COLOR` (https://no-color.org) and `TERM=dumb` opt out, a non-zero
29
- * `FORCE_COLOR` opts in regardless of the terminal.
30
- */
31
- export function shouldColorizeMarkdown(environment = { isTty: process.stdout.isTTY === true, env: process.env }) {
32
- const { env, isTty } = environment;
33
- const forceColor = env.FORCE_COLOR?.trim();
34
- if (forceColor !== undefined && forceColor !== '')
35
- return forceColor !== '0';
36
- if (env.NO_COLOR !== undefined && env.NO_COLOR !== '')
37
- return false;
38
- if (env.TERM === 'dumb')
39
- return false;
40
- return isTty;
41
- }
42
- function styleLine(style, line) {
43
- return line === '' ? line : `${style}${line}${RESET}`;
44
- }
45
- // Inline code spans are styled first and must be shielded from the link,
46
- // bold, and table-pipe passes; ANSI escapes never contain \x00, so a
47
- // NUL-delimited stash is collision-free.
48
- function styleInline(line, options) {
49
- const stash = [];
50
- let out = line.replace(/`[^`\n]+`/g, (code) => {
51
- stash.push(`${CYAN}${code}${RESET}`);
52
- return `\x00${stash.length - 1}\x00`;
53
- });
54
- if (options?.dimPipes) {
55
- // While code spans are stashed, so pipes inside `...` keep their
56
- // code styling instead of being re-wrapped in DIM.
57
- out = out.replaceAll('|', `${DIM}|${RESET}`);
58
- }
59
- out = out.replace(/\[([^\]\n]*)\]\(([^)\n]*)\)/g, (_match, text, target) => `${DIM}[${RESET}${BLUE_UNDERLINE}${text}${RESET}${DIM}](${target})${RESET}`);
60
- out = out.replace(/\*\*([^*\n]+)\*\*/g, (_match, text) => `${BOLD}**${text}**${RESET}`);
61
- return out.replace(/\x00(\d+)\x00/g, (_match, index) => stash[Number(index)] ?? '');
62
- }
63
- const FENCE_PATTERN = /^(\s*)(`{3,}|~{3,})(.*)$/;
64
- const HEADING_PATTERN = /^#{1,6}\s/;
65
- const HR_PATTERN = /^ {0,3}(-{3,}|\*{3,}|_{3,})\s*$/;
66
- const LIST_MARKER_PATTERN = /^(\s*)([-*+]|\d{1,9}[.)])(\s+)(.*)$/;
67
- const FRONTMATTER_KEY_PATTERN = /^(\s*)([\w.-]+):(.*)$/;
68
- /**
69
- * Wrap a markdown document in ANSI styles for terminal display. Line-based:
70
- * headings, fences, front matter, blockquotes, list markers, and table pipes
71
- * get block styling; plain text lines get inline code / link / bold styling.
72
- */
73
- export function highlightMarkdownAnsi(markdown) {
74
- const lines = markdown.split('\n');
75
- const out = [];
76
- let inFrontmatter = false;
77
- let fenceClose;
78
- lines.forEach((line, index) => {
79
- if (fenceClose) {
80
- if (FENCE_PATTERN.test(line) && fenceClose.test(line)) {
81
- fenceClose = undefined;
82
- out.push(styleLine(DIM, line));
83
- }
84
- else {
85
- out.push(styleLine(YELLOW, line));
86
- }
87
- return;
88
- }
89
- if (index === 0 && line === '---') {
90
- inFrontmatter = true;
91
- out.push(styleLine(DIM, line));
92
- return;
93
- }
94
- if (inFrontmatter) {
95
- if (line === '---') {
96
- inFrontmatter = false;
97
- out.push(styleLine(DIM, line));
98
- return;
99
- }
100
- const keyMatch = line.match(FRONTMATTER_KEY_PATTERN);
101
- out.push(keyMatch ? `${keyMatch[1]}${CYAN}${keyMatch[2]}${RESET}${DIM}:${keyMatch[3]}${RESET}` : styleLine(DIM, line));
102
- return;
103
- }
104
- const fenceMatch = line.match(FENCE_PATTERN);
105
- if (fenceMatch) {
106
- const marker = fenceMatch[2] ?? '```';
107
- fenceClose = new RegExp(`^\\s*${marker[0] === '`' ? '`' : '~'}{${marker.length},}\\s*$`);
108
- out.push(styleLine(DIM, line));
109
- return;
110
- }
111
- if (HEADING_PATTERN.test(line)) {
112
- out.push(styleLine(HEADING, line));
113
- return;
114
- }
115
- if (HR_PATTERN.test(line)) {
116
- out.push(styleLine(DIM, line));
117
- return;
118
- }
119
- if (line.trimStart().startsWith('>')) {
120
- out.push(styleLine(GREEN, line));
121
- return;
122
- }
123
- if (line.trimStart().startsWith('|')) {
124
- out.push(styleInline(line, { dimPipes: true }));
125
- return;
126
- }
127
- const listMatch = line.match(LIST_MARKER_PATTERN);
128
- if (listMatch) {
129
- out.push(`${listMatch[1]}${YELLOW}${listMatch[2]}${RESET}${listMatch[3]}${styleInline(listMatch[4] ?? '')}`);
130
- return;
131
- }
132
- out.push(styleInline(line));
133
- });
134
- return out.join('\n');
135
- }
136
- /** Strip the escape sequences this module emits; used to verify lossless styling. */
137
- export function stripAnsi(text) {
138
- // Only SGR sequences are emitted by this module.
139
- // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escapes are control characters by definition.
140
- return text.replace(/\x1b\[[0-9;]*m/g, '');
141
- }
142
- //# sourceMappingURL=MarkdownAnsi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkdownAnsi.js","sourceRoot":"","sources":["../../src/MarkdownAnsi.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { McpServer } from '@effect/ai';
2
- import { Effect, Layer, String } from 'effect';
3
- import { ConfigManager } from '../Config.js';
4
- /**
5
- * These resources are read by an agent that will follow their links, so every
6
- * URL must resolve to the stack this CLI is configured against — production by
7
- * default, or whatever `EXPAND_APP_URL` names for local and self-hosted setups.
8
- */
9
- export function makeAgentSetupPrompt(appUrl) {
10
- return `Read ${new URL('/start.md', appUrl).toString()} and set up Expand. Fetch it as raw text with curl — a summarizing web-fetch tool drops the exact commands.`;
11
- }
12
- /**
13
- * Points at the hosted guide instead of restating it. A local copy of the setup
14
- * procedure drifts silently the moment the commands change, and this resource
15
- * is read by an agent that can fetch the current one itself.
16
- */
17
- export function makeStartGuideMarkdown(appUrl) {
18
- return String.stripMargin(`
19
- |# Expand Start Guide
20
- |
21
- |The setup procedure is served as a single document. Fetch it and follow it:
22
- |
23
- |${new URL('/start.md', appUrl).toString()}
24
- |
25
- |## Agent Setup Prompt
26
- |
27
- |${makeAgentSetupPrompt(appUrl)}
28
- |`);
29
- }
30
- export function makeAboutMarkdown(appUrl) {
31
- return String.stripMargin(`
32
- |# expand.ai
33
- |
34
- |- Website: ${appUrl}
35
- |- Quickstart: ${new URL('/docs', appUrl).toString()}
36
- |- Dashboard: ${new URL('/dashboard', appUrl).toString()}
37
- |`);
38
- }
39
- const appUrl = Effect.gen(function* () {
40
- const configManager = yield* ConfigManager;
41
- return yield* configManager.getAppUrl();
42
- });
43
- export const ExpandDocs = McpServer.resource({
44
- uri: 'expand://about',
45
- name: 'About expand.ai',
46
- description: 'Key links for the expand.ai platform',
47
- content: Effect.map(appUrl, makeAboutMarkdown),
48
- });
49
- export const ExpandStartDocs = McpServer.resource({
50
- uri: 'expand://start',
51
- name: 'Expand Start Guide',
52
- description: 'Where to find the Expand agent setup guide, and the prompt that runs it',
53
- content: Effect.map(appUrl, makeStartGuideMarkdown),
54
- });
55
- export const ExpandDocsLayer = Layer.mergeAll(ExpandDocs, ExpandStartDocs).pipe(Layer.provide(ConfigManager.Default));
56
- //# sourceMappingURL=ExpandDocs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpandDocs.js","sourceRoot":"","sources":["../../../src/Mcp/ExpandDocs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,OAAO,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,6GAA6G,CAAA;AACpK,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACpD,OAAO,MAAM,CAAC,WAAW,CAAC;;;;;KAKtB,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE;;;;KAIvC,oBAAoB,CAAC,MAAM,CAAC;IAC7B,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC/C,OAAO,MAAM,CAAC,WAAW,CAAC;;;gBAGX,MAAM;mBACH,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE;kBACpC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE;IACtD,CAAC,CAAA;AACL,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IAC1C,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC5C,GAAG,EAAE,gBAAgB;IACrB,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,sCAAsC;IACnD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAC9C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC;IACjD,GAAG,EAAE,gBAAgB;IACrB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,yEAAyE;IACtF,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC;CACnD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA"}
@@ -1,13 +0,0 @@
1
- import { Context, Layer } from 'effect';
2
- /**
3
- * Per-request HTTP headers (lowercase keys per WHATWG Headers).
4
- *
5
- * Consumers should read this via `Effect.serviceOption(CurrentRequestHeaders)`
6
- * so the requirement does not leak into their `R`. The API's MCP route
7
- * overlays a fresh `Context.make` per request; the stdio CLI path leaves
8
- * the option as `none`.
9
- */
10
- export class CurrentRequestHeaders extends Context.Tag('@expandai/cli/Mcp/RequestHeaders/CurrentRequestHeaders')() {
11
- static Default = Layer.succeed(this, {});
12
- }
13
- //# sourceMappingURL=RequestHeaders.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RequestHeaders.js","sourceRoot":"","sources":["../../../src/Mcp/RequestHeaders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvC;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,EAG7G;IACF,MAAM,CAAU,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;CACjD"}
@@ -1,12 +0,0 @@
1
- import { Layer } from 'effect';
2
- import { SERVER_KEY } from '../Install/Domain.js';
3
- import { CLI_VERSION } from '../Version.js';
4
- import { ExpandDocsLayer } from './ExpandDocs.js';
5
- import { ExpandToolKit } from './Toolkit.js';
6
- export { CurrentRequestHeaders } from './RequestHeaders.js';
7
- export const ServerInfo = {
8
- name: SERVER_KEY,
9
- version: CLI_VERSION,
10
- };
11
- export const makeServerLayer = (options = {}) => options.includeDocs ? Layer.mergeAll(ExpandToolKit, ExpandDocsLayer) : ExpandToolKit;
12
- //# sourceMappingURL=Server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../../src/Mcp/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,WAAW;CACX,CAAA;AAEV,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,GAAuC,EAAE,EAAE,EAAE,CACnF,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA"}
@@ -1,16 +0,0 @@
1
- import { McpServer, Toolkit } from '@effect/ai';
2
- import { Effect, Layer } from 'effect';
3
- import { ApiClient } from '../ApiClient.js';
4
- import { Fetch, FetchSearchTool, FetchTool } from './tools/Fetch.js';
5
- const toolkit = Toolkit.make(FetchTool, FetchSearchTool);
6
- const ToolkitLayer = toolkit
7
- .toLayer(Effect.gen(function* () {
8
- const fetchService = yield* Fetch;
9
- return toolkit.of({
10
- fetch: fetchService.fetch,
11
- fetch_search: fetchService.fetchSearch,
12
- });
13
- }))
14
- .pipe(Layer.provide(Fetch.Default), Layer.provide(ApiClient.Default));
15
- export const ExpandToolKit = McpServer.toolkit(toolkit).pipe(Layer.provide(ToolkitLayer));
16
- //# sourceMappingURL=Toolkit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toolkit.js","sourceRoot":"","sources":["../../../src/Mcp/Toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;AAExD,MAAM,YAAY,GAAG,OAAO;KAC1B,OAAO,CACP,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,KAAK,CAAA;IAEjC,OAAO,OAAO,CAAC,EAAE,CAAC;QACjB,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,YAAY,EAAE,YAAY,CAAC,WAAW;KACtC,CAAC,CAAA;AACH,CAAC,CAAC,CACF;KACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;AAEtE,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA"}