expandai 0.0.4 → 0.0.6
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.
- package/README.md +2 -2
- package/build/{esm/Install/Opencode → assets/opencode}/expandai-webfetch.js +22 -4
- package/build/dts/Mcp/RequestHeaders.d.ts +0 -1
- package/build/dts/Mcp/Server.d.ts +1 -2
- package/build/dts/index.d.ts +0 -1
- package/build/esm/index.js +193 -2
- package/build/esm/main.js +691 -200
- package/build/skills/expandai/SKILL.md +100 -8
- package/package.json +20 -12
- package/build/dts/ApiClient.d.ts +0 -165
- package/build/dts/ApiClient.d.ts.map +0 -1
- package/build/dts/Auth/Domain.d.ts +0 -95
- package/build/dts/Auth/Domain.d.ts.map +0 -1
- package/build/dts/Auth/ManualAuthorization.d.ts +0 -107
- package/build/dts/Auth/ManualAuthorization.d.ts.map +0 -1
- package/build/dts/Auth/PendingInit.d.ts +0 -35
- package/build/dts/Auth/PendingInit.d.ts.map +0 -1
- package/build/dts/Auth/Pkce.d.ts +0 -10
- package/build/dts/Auth/Pkce.d.ts.map +0 -1
- package/build/dts/Auth/SetupGrantAuthorization.d.ts +0 -34
- package/build/dts/Auth/SetupGrantAuthorization.d.ts.map +0 -1
- package/build/dts/Authentication.d.ts +0 -24
- package/build/dts/Authentication.d.ts.map +0 -1
- package/build/dts/BrowserOAuth.d.ts +0 -99
- package/build/dts/BrowserOAuth.d.ts.map +0 -1
- package/build/dts/CommandPath.d.ts +0 -2
- package/build/dts/CommandPath.d.ts.map +0 -1
- package/build/dts/Commands/Fetch.d.ts +0 -30
- package/build/dts/Commands/Fetch.d.ts.map +0 -1
- package/build/dts/Commands/Hook.d.ts +0 -17
- package/build/dts/Commands/Hook.d.ts.map +0 -1
- package/build/dts/Commands/Init.d.ts +0 -55
- package/build/dts/Commands/Init.d.ts.map +0 -1
- package/build/dts/Commands/Mcp.d.ts +0 -11
- package/build/dts/Commands/Mcp.d.ts.map +0 -1
- package/build/dts/Commands/McpRun.d.ts +0 -5
- package/build/dts/Commands/McpRun.d.ts.map +0 -1
- package/build/dts/Commands/Search.d.ts +0 -21
- package/build/dts/Commands/Search.d.ts.map +0 -1
- package/build/dts/Commands/Skill.d.ts +0 -12
- package/build/dts/Commands/Skill.d.ts.map +0 -1
- package/build/dts/Commands/Status.d.ts +0 -27
- package/build/dts/Commands/Status.d.ts.map +0 -1
- package/build/dts/Commands/Telemetry.d.ts +0 -7
- package/build/dts/Commands/Telemetry.d.ts.map +0 -1
- package/build/dts/Commands/Uninstall.d.ts +0 -9
- package/build/dts/Commands/Uninstall.d.ts.map +0 -1
- package/build/dts/Config.d.ts +0 -196
- package/build/dts/Config.d.ts.map +0 -1
- package/build/dts/Hook/Claude.d.ts +0 -13
- package/build/dts/Hook/Claude.d.ts.map +0 -1
- package/build/dts/Hook/Errors.d.ts +0 -20
- package/build/dts/Hook/Errors.d.ts.map +0 -1
- package/build/dts/Hook/Opencode.d.ts +0 -13
- package/build/dts/Hook/Opencode.d.ts.map +0 -1
- package/build/dts/Hook/SnapshotNote.d.ts +0 -12
- package/build/dts/Hook/SnapshotNote.d.ts.map +0 -1
- package/build/dts/Init/ClaudeAdapter.d.ts +0 -61
- package/build/dts/Init/ClaudeAdapter.d.ts.map +0 -1
- package/build/dts/Init/ClaudeProfile.d.ts +0 -77
- package/build/dts/Init/ClaudeProfile.d.ts.map +0 -1
- package/build/dts/Init/Domain.d.ts +0 -139
- package/build/dts/Init/Domain.d.ts.map +0 -1
- package/build/dts/Init/HarnessAdapter.d.ts +0 -33
- package/build/dts/Init/HarnessAdapter.d.ts.map +0 -1
- package/build/dts/Init/HarnessDetector.d.ts +0 -19
- package/build/dts/Init/HarnessDetector.d.ts.map +0 -1
- package/build/dts/Init/HarnessRegistry.d.ts +0 -50
- package/build/dts/Init/HarnessRegistry.d.ts.map +0 -1
- package/build/dts/Init/MutationTransaction.d.ts +0 -96
- package/build/dts/Init/MutationTransaction.d.ts.map +0 -1
- package/build/dts/Init/Service.d.ts +0 -72
- package/build/dts/Init/Service.d.ts.map +0 -1
- package/build/dts/Init/StandardAdapters.d.ts +0 -42
- package/build/dts/Init/StandardAdapters.d.ts.map +0 -1
- package/build/dts/Init/Status.d.ts +0 -149
- package/build/dts/Init/Status.d.ts.map +0 -1
- package/build/dts/Install/Claude/Hook.d.ts +0 -88
- package/build/dts/Install/Claude/Hook.d.ts.map +0 -1
- package/build/dts/Install/Claude/Mcp.d.ts +0 -48
- package/build/dts/Install/Claude/Mcp.d.ts.map +0 -1
- package/build/dts/Install/Claude/Skill.d.ts +0 -23
- package/build/dts/Install/Claude/Skill.d.ts.map +0 -1
- package/build/dts/Install/Codex/Mcp.d.ts +0 -45
- package/build/dts/Install/Codex/Mcp.d.ts.map +0 -1
- package/build/dts/Install/Codex/Skill.d.ts +0 -22
- package/build/dts/Install/Codex/Skill.d.ts.map +0 -1
- package/build/dts/Install/Cursor/Mcp.d.ts +0 -45
- package/build/dts/Install/Cursor/Mcp.d.ts.map +0 -1
- package/build/dts/Install/Cursor/Skill.d.ts +0 -29
- package/build/dts/Install/Cursor/Skill.d.ts.map +0 -1
- package/build/dts/Install/Domain.d.ts +0 -103
- package/build/dts/Install/Domain.d.ts.map +0 -1
- package/build/dts/Install/Hook.d.ts +0 -30
- package/build/dts/Install/Hook.d.ts.map +0 -1
- package/build/dts/Install/Mcp.d.ts +0 -28
- package/build/dts/Install/Mcp.d.ts.map +0 -1
- package/build/dts/Install/Opencode/Hook.d.ts +0 -24
- package/build/dts/Install/Opencode/Hook.d.ts.map +0 -1
- package/build/dts/Install/Opencode/Mcp.d.ts +0 -47
- package/build/dts/Install/Opencode/Mcp.d.ts.map +0 -1
- package/build/dts/Install/Opencode/Skill.d.ts +0 -26
- package/build/dts/Install/Opencode/Skill.d.ts.map +0 -1
- package/build/dts/Install/Skill.d.ts +0 -32
- package/build/dts/Install/Skill.d.ts.map +0 -1
- package/build/dts/Install/Uninstall.d.ts +0 -32
- package/build/dts/Install/Uninstall.d.ts.map +0 -1
- package/build/dts/MarkdownAnsi.d.ts +0 -29
- package/build/dts/MarkdownAnsi.d.ts.map +0 -1
- package/build/dts/Mcp/ExpandDocs.d.ts +0 -19
- package/build/dts/Mcp/ExpandDocs.d.ts.map +0 -1
- package/build/dts/Mcp/RequestHeaders.d.ts.map +0 -1
- package/build/dts/Mcp/Server.d.ts.map +0 -1
- package/build/dts/Mcp/Toolkit.d.ts +0 -3
- package/build/dts/Mcp/Toolkit.d.ts.map +0 -1
- package/build/dts/Mcp/tools/Citations.d.ts +0 -266
- package/build/dts/Mcp/tools/Citations.d.ts.map +0 -1
- package/build/dts/Mcp/tools/Fetch.d.ts +0 -168
- package/build/dts/Mcp/tools/Fetch.d.ts.map +0 -1
- package/build/dts/SecureFile.d.ts +0 -23
- package/build/dts/SecureFile.d.ts.map +0 -1
- package/build/dts/Snippets.d.ts +0 -18
- package/build/dts/Snippets.d.ts.map +0 -1
- package/build/dts/Telemetry.d.ts +0 -30
- package/build/dts/Telemetry.d.ts.map +0 -1
- package/build/dts/Version.d.ts +0 -2
- package/build/dts/Version.d.ts.map +0 -1
- package/build/dts/Xdg.d.ts +0 -11
- package/build/dts/Xdg.d.ts.map +0 -1
- package/build/dts/index.d.ts.map +0 -1
- package/build/dts/main.d.ts +0 -3
- package/build/dts/main.d.ts.map +0 -1
- package/build/esm/ApiClient.js +0 -305
- package/build/esm/ApiClient.js.map +0 -1
- package/build/esm/Auth/Domain.js +0 -56
- package/build/esm/Auth/Domain.js.map +0 -1
- package/build/esm/Auth/ManualAuthorization.js +0 -253
- package/build/esm/Auth/ManualAuthorization.js.map +0 -1
- package/build/esm/Auth/PendingInit.js +0 -267
- package/build/esm/Auth/PendingInit.js.map +0 -1
- package/build/esm/Auth/Pkce.js +0 -23
- package/build/esm/Auth/Pkce.js.map +0 -1
- package/build/esm/Auth/SetupGrantAuthorization.js +0 -91
- package/build/esm/Auth/SetupGrantAuthorization.js.map +0 -1
- package/build/esm/Authentication.js +0 -143
- package/build/esm/Authentication.js.map +0 -1
- package/build/esm/BrowserOAuth.js +0 -251
- package/build/esm/BrowserOAuth.js.map +0 -1
- package/build/esm/CommandPath.js +0 -31
- package/build/esm/CommandPath.js.map +0 -1
- package/build/esm/Commands/Fetch.js +0 -119
- package/build/esm/Commands/Fetch.js.map +0 -1
- package/build/esm/Commands/Hook.js +0 -20
- package/build/esm/Commands/Hook.js.map +0 -1
- package/build/esm/Commands/Init.js +0 -371
- package/build/esm/Commands/Init.js.map +0 -1
- package/build/esm/Commands/Mcp.js +0 -19
- package/build/esm/Commands/Mcp.js.map +0 -1
- package/build/esm/Commands/McpRun.js +0 -15
- package/build/esm/Commands/McpRun.js.map +0 -1
- package/build/esm/Commands/Search.js +0 -46
- package/build/esm/Commands/Search.js.map +0 -1
- package/build/esm/Commands/Skill.js +0 -17
- package/build/esm/Commands/Skill.js.map +0 -1
- package/build/esm/Commands/Status.js +0 -186
- package/build/esm/Commands/Status.js.map +0 -1
- package/build/esm/Commands/Telemetry.js +0 -23
- package/build/esm/Commands/Telemetry.js.map +0 -1
- package/build/esm/Commands/Uninstall.js +0 -28
- package/build/esm/Commands/Uninstall.js.map +0 -1
- package/build/esm/Config.js +0 -619
- package/build/esm/Config.js.map +0 -1
- package/build/esm/Hook/Claude.js +0 -74
- package/build/esm/Hook/Claude.js.map +0 -1
- package/build/esm/Hook/Errors.js +0 -18
- package/build/esm/Hook/Errors.js.map +0 -1
- package/build/esm/Hook/Opencode.js +0 -50
- package/build/esm/Hook/Opencode.js.map +0 -1
- package/build/esm/Hook/SnapshotNote.js +0 -65
- package/build/esm/Hook/SnapshotNote.js.map +0 -1
- package/build/esm/Init/ClaudeAdapter.js +0 -137
- package/build/esm/Init/ClaudeAdapter.js.map +0 -1
- package/build/esm/Init/ClaudeProfile.js +0 -344
- package/build/esm/Init/ClaudeProfile.js.map +0 -1
- package/build/esm/Init/Domain.js +0 -118
- package/build/esm/Init/Domain.js.map +0 -1
- package/build/esm/Init/HarnessAdapter.js +0 -21
- package/build/esm/Init/HarnessAdapter.js.map +0 -1
- package/build/esm/Init/HarnessDetector.js +0 -65
- package/build/esm/Init/HarnessDetector.js.map +0 -1
- package/build/esm/Init/HarnessRegistry.js +0 -58
- package/build/esm/Init/HarnessRegistry.js.map +0 -1
- package/build/esm/Init/MutationTransaction.js +0 -494
- package/build/esm/Init/MutationTransaction.js.map +0 -1
- package/build/esm/Init/Service.js +0 -319
- package/build/esm/Init/Service.js.map +0 -1
- package/build/esm/Init/StandardAdapters.js +0 -116
- package/build/esm/Init/StandardAdapters.js.map +0 -1
- package/build/esm/Init/Status.js +0 -215
- package/build/esm/Init/Status.js.map +0 -1
- package/build/esm/Install/Claude/Hook.js +0 -77
- package/build/esm/Install/Claude/Hook.js.map +0 -1
- package/build/esm/Install/Claude/Mcp.js +0 -101
- package/build/esm/Install/Claude/Mcp.js.map +0 -1
- package/build/esm/Install/Claude/Skill.js +0 -56
- package/build/esm/Install/Claude/Skill.js.map +0 -1
- package/build/esm/Install/Codex/Mcp.js +0 -97
- package/build/esm/Install/Codex/Mcp.js.map +0 -1
- package/build/esm/Install/Codex/Skill.js +0 -33
- package/build/esm/Install/Codex/Skill.js.map +0 -1
- package/build/esm/Install/Cursor/Mcp.js +0 -74
- package/build/esm/Install/Cursor/Mcp.js.map +0 -1
- package/build/esm/Install/Cursor/Skill.js +0 -40
- package/build/esm/Install/Cursor/Skill.js.map +0 -1
- package/build/esm/Install/Domain.js +0 -162
- package/build/esm/Install/Domain.js.map +0 -1
- package/build/esm/Install/Hook.js +0 -38
- package/build/esm/Install/Hook.js.map +0 -1
- package/build/esm/Install/Mcp.js +0 -40
- package/build/esm/Install/Mcp.js.map +0 -1
- package/build/esm/Install/Opencode/Hook.js +0 -44
- package/build/esm/Install/Opencode/Hook.js.map +0 -1
- package/build/esm/Install/Opencode/Mcp.js +0 -76
- package/build/esm/Install/Opencode/Mcp.js.map +0 -1
- package/build/esm/Install/Opencode/Skill.js +0 -37
- package/build/esm/Install/Opencode/Skill.js.map +0 -1
- package/build/esm/Install/Skill.js +0 -41
- package/build/esm/Install/Skill.js.map +0 -1
- package/build/esm/Install/Uninstall.js +0 -49
- package/build/esm/Install/Uninstall.js.map +0 -1
- package/build/esm/MarkdownAnsi.js +0 -142
- package/build/esm/MarkdownAnsi.js.map +0 -1
- package/build/esm/Mcp/ExpandDocs.js +0 -56
- package/build/esm/Mcp/ExpandDocs.js.map +0 -1
- package/build/esm/Mcp/RequestHeaders.js +0 -13
- package/build/esm/Mcp/RequestHeaders.js.map +0 -1
- package/build/esm/Mcp/Server.js +0 -12
- package/build/esm/Mcp/Server.js.map +0 -1
- package/build/esm/Mcp/Toolkit.js +0 -16
- package/build/esm/Mcp/Toolkit.js.map +0 -1
- package/build/esm/Mcp/tools/Citations.js +0 -193
- package/build/esm/Mcp/tools/Citations.js.map +0 -1
- package/build/esm/Mcp/tools/Fetch.js +0 -165
- package/build/esm/Mcp/tools/Fetch.js.map +0 -1
- package/build/esm/SecureFile.js +0 -36
- package/build/esm/SecureFile.js.map +0 -1
- package/build/esm/Snippets.js +0 -29
- package/build/esm/Snippets.js.map +0 -1
- package/build/esm/Telemetry.js +0 -157
- package/build/esm/Telemetry.js.map +0 -1
- package/build/esm/Version.js +0 -4
- package/build/esm/Version.js.map +0 -1
- package/build/esm/Xdg.js +0 -15
- package/build/esm/Xdg.js.map +0 -1
- package/build/esm/index.js.map +0 -1
- package/build/esm/main.js.map +0 -1
- package/src/ApiClient.ts +0 -450
- package/src/Auth/Domain.ts +0 -63
- package/src/Auth/ManualAuthorization.ts +0 -296
- package/src/Auth/PendingInit.ts +0 -338
- package/src/Auth/Pkce.ts +0 -26
- package/src/Auth/SetupGrantAuthorization.ts +0 -116
- package/src/Authentication.ts +0 -202
- package/src/BrowserOAuth.ts +0 -359
- package/src/CommandPath.ts +0 -30
- package/src/Commands/Fetch.ts +0 -188
- package/src/Commands/Hook.ts +0 -48
- package/src/Commands/Init.ts +0 -489
- package/src/Commands/Mcp.ts +0 -30
- package/src/Commands/McpRun.ts +0 -25
- package/src/Commands/Search.ts +0 -97
- package/src/Commands/Skill.ts +0 -30
- package/src/Commands/Status.ts +0 -228
- package/src/Commands/Telemetry.ts +0 -42
- package/src/Commands/Uninstall.ts +0 -38
- package/src/Config.ts +0 -840
- package/src/Hook/Claude.ts +0 -81
- package/src/Hook/Errors.ts +0 -19
- package/src/Hook/Opencode.ts +0 -58
- package/src/Hook/SnapshotNote.ts +0 -66
- package/src/Init/ClaudeAdapter.ts +0 -191
- package/src/Init/ClaudeProfile.ts +0 -453
- package/src/Init/Domain.ts +0 -153
- package/src/Init/HarnessAdapter.ts +0 -35
- package/src/Init/HarnessDetector.ts +0 -77
- package/src/Init/HarnessRegistry.ts +0 -87
- package/src/Init/MutationTransaction.ts +0 -747
- package/src/Init/Service.ts +0 -385
- package/src/Init/StandardAdapters.ts +0 -141
- package/src/Init/Status.ts +0 -253
- package/src/Install/Claude/Hook.ts +0 -123
- package/src/Install/Claude/Mcp.ts +0 -129
- package/src/Install/Claude/Skill.ts +0 -77
- package/src/Install/Codex/Mcp.ts +0 -114
- package/src/Install/Codex/Skill.ts +0 -44
- package/src/Install/Cursor/Mcp.ts +0 -85
- package/src/Install/Cursor/Skill.ts +0 -51
- package/src/Install/Domain.ts +0 -221
- package/src/Install/Hook.ts +0 -50
- package/src/Install/Mcp.ts +0 -71
- package/src/Install/Opencode/Hook.ts +0 -55
- package/src/Install/Opencode/Mcp.ts +0 -87
- package/src/Install/Opencode/Skill.ts +0 -48
- package/src/Install/Opencode/expandai-webfetch.d.ts +0 -23
- package/src/Install/Opencode/expandai-webfetch.js +0 -56
- package/src/Install/Skill.ts +0 -57
- package/src/Install/Uninstall.ts +0 -82
- package/src/MarkdownAnsi.ts +0 -162
- package/src/Mcp/ExpandDocs.ts +0 -62
- package/src/Mcp/RequestHeaders.ts +0 -16
- package/src/Mcp/Server.ts +0 -15
- package/src/Mcp/Toolkit.ts +0 -21
- package/src/Mcp/tools/Citations.ts +0 -219
- package/src/Mcp/tools/Fetch.ts +0 -203
- package/src/SecureFile.ts +0 -70
- package/src/Snippets.ts +0 -39
- package/src/Telemetry.ts +0 -186
- package/src/Version.ts +0 -3
- package/src/Xdg.ts +0 -18
- package/src/index.ts +0 -1
- package/src/main.ts +0 -305
|
@@ -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":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,4EAA4E;AAC5E,gFAAgF;AAChF,wEAAwE;AACxE,yEAAyE;AACzE,4EAA4E;AAC5E,8CAA8C;AAC9C,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,IAAI,GAAG,SAAS,CAAA;AACtB,MAAM,GAAG,GAAG,SAAS,CAAA;AACrB,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,MAAM,MAAM,GAAG,UAAU,CAAA;AACzB,MAAM,KAAK,GAAG,UAAU,CAAA;AACxB,MAAM,cAAc,GAAG,YAAY,CAAA;AACnC,MAAM,OAAO,GAAG,YAAY,CAAA;AAO5B;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACrC,WAAW,GAAwB,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAE7F,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAAW,CAAA;IAClC,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;IAC1C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,UAAU,KAAK,GAAG,CAAA;IAC5E,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACnE,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAA;IACrC,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,IAAY;IAC7C,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,CAAA;AACtD,CAAC;AAED,yEAAyE;AACzE,qEAAqE;AACrE,yCAAyC;AACzC,SAAS,WAAW,CAAC,IAAY,EAAE,OAAwC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;QAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAA;QACpC,OAAO,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,CAAA;IACrC,CAAC,CAAC,CAAA;IACF,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvB,iEAAiE;QACjE,mDAAmD;QACnD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;IAC7C,CAAC;IACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAChB,8BAA8B,EAC9B,CAAC,MAAM,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE,CACxC,GAAG,GAAG,IAAI,KAAK,GAAG,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE,CAC5E,CAAA;IACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAA;IAC/F,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,aAAa,GAAG,0BAA0B,CAAA;AAChD,MAAM,eAAe,GAAG,WAAW,CAAA;AACnC,MAAM,UAAU,GAAG,iCAAiC,CAAA;AACpD,MAAM,mBAAmB,GAAG,qCAAqC,CAAA;AACjE,MAAM,uBAAuB,GAAG,uBAAuB,CAAA;AAEvD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,UAA8B,CAAA;IAElC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7B,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,UAAU,GAAG,SAAS,CAAA;gBACtB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;YAClC,CAAC;YACD,OAAM;QACP,CAAC;QAED,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnC,aAAa,GAAG,IAAI,CAAA;YACpB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YAC9B,OAAM;QACP,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACpB,aAAa,GAAG,KAAK,CAAA;gBACrB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;gBAC9B,OAAM;YACP,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;YACpD,GAAG,CAAC,IAAI,CACP,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAC5G,CAAA;YACD,OAAM;QACP,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC5C,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAA;YACrC,UAAU,GAAG,IAAI,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,SAAS,CAAC,CAAA;YACxF,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YAC9B,OAAM;QACP,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YAClC,OAAM;QACP,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YAC9B,OAAM;QACP,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;YAChC,OAAM;QACP,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC/C,OAAM;QACP,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACjD,IAAI,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5G,OAAM;QACP,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,iDAAiD;IACjD,8GAA8G;IAC9G,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -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"}
|
package/build/esm/Mcp/Server.js
DELETED
|
@@ -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"}
|
package/build/esm/Mcp/Toolkit.js
DELETED
|
@@ -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"}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
// MCP-facing result wrappers that add a ready-made `citationUrl` to every search snippet, so the
|
|
2
|
-
// agent can hand the user an auditable playground link without assembling URLs itself. Wraps the
|
|
3
|
-
// SDK's `json`-recovering decode types (`@expandai/sdk/FetchJson`) and reuses generated leaf
|
|
4
|
-
// schemas; `Generated.ts` is left untouched.
|
|
5
|
-
import * as Generated from '@expandai/sdk/Generated';
|
|
6
|
-
import { citationUrl, playgroundBase, resolvePlaygroundHost } from '@expandai/sdk/Playground';
|
|
7
|
-
import { Schema as S } from 'effect';
|
|
8
|
-
export const FetchInvocationPath = S.Literal('cli-recovery', 'mcp-fetch-search');
|
|
9
|
-
export class CitedSnippet extends S.Class('CitedSnippet')({
|
|
10
|
-
type: S.optionalWith(S.Literal('text'), { nullable: true, default: () => 'text' }),
|
|
11
|
-
source: S.Literal('markdown', 'appendix', 'statejson'),
|
|
12
|
-
text: S.String,
|
|
13
|
-
json: S.optionalWith(S.Unknown, { nullable: true }),
|
|
14
|
-
score: S.Number.pipe(S.greaterThanOrEqualTo(0), S.lessThanOrEqualTo(1)),
|
|
15
|
-
location: S.optionalWith(Generated.FetchSearchSnippetLocation, { nullable: true }),
|
|
16
|
-
citationUrl: S.String.annotations({
|
|
17
|
-
description: 'Public playground link auditing this exact snippet. Return it to the user verbatim.',
|
|
18
|
-
}),
|
|
19
|
-
}) {
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Carried in the tool result itself, not only in `SKILL.md`. A harness may not load
|
|
23
|
-
* skills at all, and the hook's snapshot note never reaches this path — so without
|
|
24
|
-
* this the model receives perfect `citationUrl`s and no instruction to use them, and
|
|
25
|
-
* answers with no citation. Observed on OpenCode before this was added.
|
|
26
|
-
*/
|
|
27
|
-
export const CITATION_INSTRUCTIONS = 'Cite every claim you take from this result. Append the ready-made `citationBlock` from this ' +
|
|
28
|
-
'result to the end of your answer. Delete every entry whose marker you did not actually place ' +
|
|
29
|
-
'in your text, and renumber what remains from [1] — an entry with no matching marker is not a ' +
|
|
30
|
-
'citation, it is clutter. Do not ' +
|
|
31
|
-
'retype the URLs, do not substitute the page you fetched, and do not build a link yourself — ' +
|
|
32
|
-
"the citation points at expand.ai's stored capture, not at the original site. Never invent an " +
|
|
33
|
-
'evidence id and never reuse one from different text. A link without `?id=` is not a citation.';
|
|
34
|
-
const CitationInstructionsField = S.optionalWith(S.String, { default: () => CITATION_INSTRUCTIONS }).annotations({
|
|
35
|
-
description: 'How to cite this result back to the user. Follow it exactly.',
|
|
36
|
-
});
|
|
37
|
-
const CitationBlockField = S.optionalWith(S.String, { default: () => '' }).annotations({
|
|
38
|
-
description: 'Ready-to-append citation block, one entry per citable snippet. Copy it to the end of your ' +
|
|
39
|
-
'answer, keeping only the entries whose markers you placed in your text and renumbering ' +
|
|
40
|
-
'from [1]. You may also correct the page title.',
|
|
41
|
-
});
|
|
42
|
-
/**
|
|
43
|
-
* Prebuilds the citation markdown instead of asking the model to assemble it.
|
|
44
|
-
* Selecting `citationUrl` out of a JSON result and pasting it correctly is the step
|
|
45
|
-
* weaker models get wrong — observed repeatedly on OpenCode, which substituted the
|
|
46
|
-
* fetched page URL for the capture link. Copying one block has no such failure mode.
|
|
47
|
-
*/
|
|
48
|
-
const MAX_CITATION_MARKERS = 3;
|
|
49
|
-
const EVIDENCE_MARKER = /\{(\d{1,6})\}/gu;
|
|
50
|
-
/**
|
|
51
|
-
* Citation URLs for a plain fetch with no search. The markdown still stamps evidence
|
|
52
|
-
* ids, so a citation is always possible — without this a `fetch` called without a
|
|
53
|
-
* query produced an empty block and the model answered uncited.
|
|
54
|
-
*/
|
|
55
|
-
function markdownCitationUrls(markdown, snapshotId, host) {
|
|
56
|
-
const urls = [];
|
|
57
|
-
for (const match of markdown.matchAll(EVIDENCE_MARKER)) {
|
|
58
|
-
const id = Number(match[1]);
|
|
59
|
-
if (!Number.isFinite(id))
|
|
60
|
-
continue;
|
|
61
|
-
const url = citationUrl(snapshotId, { evidenceId: id }, host);
|
|
62
|
-
if (!urls.includes(url))
|
|
63
|
-
urls.push(url);
|
|
64
|
-
if (urls.length >= MAX_CITATION_MARKERS)
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
return urls;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* `statejson` snippets are extracted page state — arrays of routes, config blobs — not
|
|
71
|
-
* prose anyone can quote. Offering one as a citable source produced a `Sources` entry
|
|
72
|
-
* pointing at a list of URLs, so only quotable text earns a citation.
|
|
73
|
-
*/
|
|
74
|
-
function isQuotable(snippet) {
|
|
75
|
-
return snippet.source !== 'statejson';
|
|
76
|
-
}
|
|
77
|
-
function citationBlock(sourceLabel, snippets, fallback = []) {
|
|
78
|
-
const urls = [];
|
|
79
|
-
for (const snippet of snippets) {
|
|
80
|
-
if (!isQuotable(snippet))
|
|
81
|
-
continue;
|
|
82
|
-
if (snippet.citationUrl.length > 0 && !urls.includes(snippet.citationUrl))
|
|
83
|
-
urls.push(snippet.citationUrl);
|
|
84
|
-
}
|
|
85
|
-
if (urls.length === 0)
|
|
86
|
-
urls.push(...fallback);
|
|
87
|
-
if (urls.length === 0)
|
|
88
|
-
return '';
|
|
89
|
-
// One linked source line per marker.
|
|
90
|
-
// Grouping all the sources first and all the links after loses every link when a
|
|
91
|
-
// model copies only the opening lines — observed on OpenCode.
|
|
92
|
-
const lines = ['**Sources**'];
|
|
93
|
-
urls.slice(0, MAX_CITATION_MARKERS).forEach((url, index) => {
|
|
94
|
-
if (index > 0)
|
|
95
|
-
lines.push('');
|
|
96
|
-
lines.push(`[${index + 1}] [${sourceLabel}](${url})`);
|
|
97
|
-
});
|
|
98
|
-
return lines.join('\n');
|
|
99
|
-
}
|
|
100
|
-
export class CitedSearchResult extends S.Class('CitedSearchResult')({
|
|
101
|
-
query: S.String,
|
|
102
|
-
snippets: S.Array(CitedSnippet),
|
|
103
|
-
meta: S.optionalWith(Generated.FetchSearchMeta, { nullable: true }),
|
|
104
|
-
}) {
|
|
105
|
-
}
|
|
106
|
-
export class CitedObjectModeResult extends S.Class('CitedObjectModeResult')({
|
|
107
|
-
invocationPath: S.Literal('mcp-fetch-search'),
|
|
108
|
-
citationInstructions: CitationInstructionsField,
|
|
109
|
-
citationBlock: CitationBlockField,
|
|
110
|
-
meta: Generated.FetchObjectModeMeta,
|
|
111
|
-
markdown: S.String,
|
|
112
|
-
json: S.Array(Generated.FetchObjectModeEvidence),
|
|
113
|
-
data: S.optionalWith(S.Struct({
|
|
114
|
-
assets: S.optionalWith(S.Array(Generated.FetchAssetReference), { nullable: true }),
|
|
115
|
-
search: S.optionalWith(CitedSearchResult, { nullable: true }),
|
|
116
|
-
}), { nullable: true }),
|
|
117
|
-
}) {
|
|
118
|
-
}
|
|
119
|
-
export class CitedSnapshotSearchResult extends S.Class('CitedSnapshotSearchResult')({
|
|
120
|
-
invocationPath: FetchInvocationPath,
|
|
121
|
-
citationInstructions: CitationInstructionsField,
|
|
122
|
-
citationBlock: CitationBlockField,
|
|
123
|
-
snapshotId: S.String.pipe(S.minLength(1)),
|
|
124
|
-
response: Generated.ResponseInfo,
|
|
125
|
-
search: CitedSearchResult,
|
|
126
|
-
durationMs: S.Number.pipe(S.greaterThanOrEqualTo(0)),
|
|
127
|
-
playground: S.String.annotations({ description: 'Public playground link for the whole snapshot.' }),
|
|
128
|
-
}) {
|
|
129
|
-
}
|
|
130
|
-
function toCitedSnippet(snapshotId, host, snippet) {
|
|
131
|
-
return new CitedSnippet({
|
|
132
|
-
type: snippet.type,
|
|
133
|
-
source: snippet.source,
|
|
134
|
-
text: snippet.text,
|
|
135
|
-
json: snippet.json,
|
|
136
|
-
score: snippet.score,
|
|
137
|
-
location: snippet.location,
|
|
138
|
-
citationUrl: citationUrl(snapshotId, snippet.location, host),
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
function toCitedSearch(snapshotId, host, search) {
|
|
142
|
-
return new CitedSearchResult({
|
|
143
|
-
query: search.query,
|
|
144
|
-
snippets: search.snippets.map((snippet) => toCitedSnippet(snapshotId, host, snippet)),
|
|
145
|
-
meta: search.meta,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
/** Add `citationUrl` to each snippet of an object-mode fetch result. */
|
|
149
|
-
export function enrichObjectModeResult(result, fallbackHost) {
|
|
150
|
-
// `meta.playground` is server-resolved (staging-safe); fall back to the configured host only if
|
|
151
|
-
// it is somehow not a parseable URL.
|
|
152
|
-
const host = resolvePlaygroundHost(result.meta.playground, fallbackHost);
|
|
153
|
-
const data = result.data;
|
|
154
|
-
const citedSearch = data?.search == null ? undefined : toCitedSearch(result.meta.snapshotId, host, data.search);
|
|
155
|
-
const block = citationBlock(result.meta.url, citedSearch?.snippets ?? [], markdownCitationUrls(result.markdown, result.meta.snapshotId, host));
|
|
156
|
-
return new CitedObjectModeResult({
|
|
157
|
-
invocationPath: 'mcp-fetch-search',
|
|
158
|
-
citationInstructions: CITATION_INSTRUCTIONS,
|
|
159
|
-
citationBlock: block,
|
|
160
|
-
meta: result.meta,
|
|
161
|
-
// The block is appended to the content, not just offered as a sibling field.
|
|
162
|
-
// A model summarising `markdown` carries an inline footer through; a separate
|
|
163
|
-
// JSON field it has to notice and copy gets dropped — repeatedly, on OpenCode.
|
|
164
|
-
markdown: block.length === 0 ? result.markdown : `${result.markdown.trimEnd()}\n\n---\n\n${block}\n`,
|
|
165
|
-
json: result.json,
|
|
166
|
-
data: data == null
|
|
167
|
-
? data
|
|
168
|
-
: {
|
|
169
|
-
assets: data.assets,
|
|
170
|
-
search: citedSearch,
|
|
171
|
-
},
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/** Add `citationUrl` to each snippet of a snapshot-search result. */
|
|
175
|
-
export function enrichSnapshotSearchResult(result, fallbackHost, invocationPath = 'mcp-fetch-search') {
|
|
176
|
-
// `playground` is server-resolved (staging-safe), exactly like `meta.playground`
|
|
177
|
-
// above; fall back to the configured host only if it is somehow not a parseable
|
|
178
|
-
// URL. The playground is a separate deployment from the API, so the server is
|
|
179
|
-
// the only component that can say where its snapshots are publicly served.
|
|
180
|
-
const host = resolvePlaygroundHost(result.playground, fallbackHost);
|
|
181
|
-
const citedSearch = toCitedSearch(result.snapshotId, host, result.search);
|
|
182
|
-
return new CitedSnapshotSearchResult({
|
|
183
|
-
invocationPath,
|
|
184
|
-
citationInstructions: CITATION_INSTRUCTIONS,
|
|
185
|
-
citationBlock: citationBlock(result.response.url, citedSearch.snippets),
|
|
186
|
-
snapshotId: result.snapshotId,
|
|
187
|
-
response: result.response,
|
|
188
|
-
search: citedSearch,
|
|
189
|
-
durationMs: result.durationMs,
|
|
190
|
-
playground: playgroundBase(result.snapshotId, host),
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
//# sourceMappingURL=Citations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Citations.js","sourceRoot":"","sources":["../../../../src/Mcp/tools/Citations.ts"],"names":[],"mappings":"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"}
|