@mxalbert/context-mode 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +31 -0
- package/.codex-plugin/hooks.json +65 -0
- package/.codex-plugin/mcp.json +13 -0
- package/.codex-plugin/plugin.json +31 -0
- package/.openclaw-plugin/index.ts +12 -0
- package/.openclaw-plugin/openclaw.plugin.json +38 -0
- package/.openclaw-plugin/package.json +28 -0
- package/LICENSE +94 -0
- package/README.md +1619 -0
- package/bin/statusline.mjs +378 -0
- package/build/adapters/antigravity/index.d.ts +51 -0
- package/build/adapters/antigravity/index.js +169 -0
- package/build/adapters/antigravity-cli/index.d.ts +51 -0
- package/build/adapters/antigravity-cli/index.js +342 -0
- package/build/adapters/base.d.ts +92 -0
- package/build/adapters/base.js +135 -0
- package/build/adapters/claude-code/config.d.ts +8 -0
- package/build/adapters/claude-code/config.js +8 -0
- package/build/adapters/claude-code/hooks.d.ts +106 -0
- package/build/adapters/claude-code/hooks.js +183 -0
- package/build/adapters/claude-code/index.d.ts +80 -0
- package/build/adapters/claude-code/index.js +569 -0
- package/build/adapters/claude-code-base.d.ts +49 -0
- package/build/adapters/claude-code-base.js +113 -0
- package/build/adapters/client-map.d.ts +10 -0
- package/build/adapters/client-map.js +42 -0
- package/build/adapters/codex/config.d.ts +8 -0
- package/build/adapters/codex/config.js +8 -0
- package/build/adapters/codex/hooks.d.ts +55 -0
- package/build/adapters/codex/hooks.js +64 -0
- package/build/adapters/codex/index.d.ts +87 -0
- package/build/adapters/codex/index.js +995 -0
- package/build/adapters/codex/paths.d.ts +1 -0
- package/build/adapters/codex/paths.js +12 -0
- package/build/adapters/codex/usage.d.ts +107 -0
- package/build/adapters/codex/usage.js +227 -0
- package/build/adapters/copilot-base.d.ts +94 -0
- package/build/adapters/copilot-base.js +297 -0
- package/build/adapters/copilot-cli/hooks.d.ts +33 -0
- package/build/adapters/copilot-cli/hooks.js +64 -0
- package/build/adapters/copilot-cli/index.d.ts +48 -0
- package/build/adapters/copilot-cli/index.js +341 -0
- package/build/adapters/cursor/config.d.ts +4 -0
- package/build/adapters/cursor/config.js +4 -0
- package/build/adapters/cursor/hooks.d.ts +55 -0
- package/build/adapters/cursor/hooks.js +82 -0
- package/build/adapters/cursor/index.d.ts +64 -0
- package/build/adapters/cursor/index.js +517 -0
- package/build/adapters/detect.d.ts +136 -0
- package/build/adapters/detect.js +623 -0
- package/build/adapters/gemini-cli/config.d.ts +8 -0
- package/build/adapters/gemini-cli/config.js +8 -0
- package/build/adapters/gemini-cli/hooks.d.ts +83 -0
- package/build/adapters/gemini-cli/hooks.js +115 -0
- package/build/adapters/gemini-cli/index.d.ts +80 -0
- package/build/adapters/gemini-cli/index.js +483 -0
- package/build/adapters/jetbrains-copilot/config.d.ts +8 -0
- package/build/adapters/jetbrains-copilot/config.js +8 -0
- package/build/adapters/jetbrains-copilot/hooks.d.ts +59 -0
- package/build/adapters/jetbrains-copilot/hooks.js +87 -0
- package/build/adapters/jetbrains-copilot/index.d.ts +31 -0
- package/build/adapters/jetbrains-copilot/index.js +131 -0
- package/build/adapters/kimi/config.d.ts +8 -0
- package/build/adapters/kimi/config.js +8 -0
- package/build/adapters/kimi/hooks.d.ts +28 -0
- package/build/adapters/kimi/hooks.js +34 -0
- package/build/adapters/kimi/index.d.ts +66 -0
- package/build/adapters/kimi/index.js +537 -0
- package/build/adapters/kimi/paths.d.ts +21 -0
- package/build/adapters/kimi/paths.js +52 -0
- package/build/adapters/kimi/usage.d.ts +82 -0
- package/build/adapters/kimi/usage.js +217 -0
- package/build/adapters/kiro/hooks.d.ts +61 -0
- package/build/adapters/kiro/hooks.js +94 -0
- package/build/adapters/kiro/index.d.ts +61 -0
- package/build/adapters/kiro/index.js +301 -0
- package/build/adapters/omp/index.d.ts +65 -0
- package/build/adapters/omp/index.js +182 -0
- package/build/adapters/omp/plugin.d.ts +81 -0
- package/build/adapters/omp/plugin.js +331 -0
- package/build/adapters/omp/usage.d.ts +49 -0
- package/build/adapters/omp/usage.js +110 -0
- package/build/adapters/openclaw/config.d.ts +8 -0
- package/build/adapters/openclaw/config.js +8 -0
- package/build/adapters/openclaw/hooks.d.ts +50 -0
- package/build/adapters/openclaw/hooks.js +61 -0
- package/build/adapters/openclaw/index.d.ts +74 -0
- package/build/adapters/openclaw/index.js +439 -0
- package/build/adapters/openclaw/mcp-tools.d.ts +54 -0
- package/build/adapters/openclaw/mcp-tools.js +207 -0
- package/build/adapters/openclaw/plugin.d.ts +141 -0
- package/build/adapters/openclaw/plugin.js +818 -0
- package/build/adapters/openclaw/session-db.d.ts +55 -0
- package/build/adapters/openclaw/session-db.js +88 -0
- package/build/adapters/openclaw/usage.d.ts +34 -0
- package/build/adapters/openclaw/usage.js +52 -0
- package/build/adapters/openclaw/workspace-router.d.ts +29 -0
- package/build/adapters/openclaw/workspace-router.js +64 -0
- package/build/adapters/opencode/config.d.ts +8 -0
- package/build/adapters/opencode/config.js +8 -0
- package/build/adapters/opencode/hooks.d.ts +38 -0
- package/build/adapters/opencode/hooks.js +50 -0
- package/build/adapters/opencode/index.d.ts +144 -0
- package/build/adapters/opencode/index.js +638 -0
- package/build/adapters/opencode/plugin.d.ts +249 -0
- package/build/adapters/opencode/plugin.js +1536 -0
- package/build/adapters/opencode/v2.d.ts +117 -0
- package/build/adapters/opencode/v2.js +224 -0
- package/build/adapters/opencode/zod3tov4.d.ts +1 -0
- package/build/adapters/opencode/zod3tov4.js +132 -0
- package/build/adapters/pi/extension.d.ts +81 -0
- package/build/adapters/pi/extension.js +861 -0
- package/build/adapters/pi/index.d.ts +57 -0
- package/build/adapters/pi/index.js +173 -0
- package/build/adapters/pi/mcp-bridge.d.ts +268 -0
- package/build/adapters/pi/mcp-bridge.js +894 -0
- package/build/adapters/qwen-code/hooks.d.ts +26 -0
- package/build/adapters/qwen-code/hooks.js +29 -0
- package/build/adapters/qwen-code/index.d.ts +40 -0
- package/build/adapters/qwen-code/index.js +361 -0
- package/build/adapters/qwen-code/usage.d.ts +90 -0
- package/build/adapters/qwen-code/usage.js +222 -0
- package/build/adapters/types.d.ts +360 -0
- package/build/adapters/types.js +118 -0
- package/build/adapters/vscode-copilot/config.d.ts +8 -0
- package/build/adapters/vscode-copilot/config.js +8 -0
- package/build/adapters/vscode-copilot/hooks.d.ts +71 -0
- package/build/adapters/vscode-copilot/hooks.js +98 -0
- package/build/adapters/vscode-copilot/index.d.ts +32 -0
- package/build/adapters/vscode-copilot/index.js +222 -0
- package/build/adapters/zed/index.d.ts +40 -0
- package/build/adapters/zed/index.js +163 -0
- package/build/cli.d.ts +34 -0
- package/build/cli.js +1828 -0
- package/build/db-base.d.ts +250 -0
- package/build/db-base.js +756 -0
- package/build/executor.d.ts +72 -0
- package/build/executor.js +678 -0
- package/build/exit-classify.d.ts +19 -0
- package/build/exit-classify.js +12 -0
- package/build/fetch/blocks.d.ts +145 -0
- package/build/fetch/blocks.js +244 -0
- package/build/fetch/extract.d.ts +68 -0
- package/build/fetch/extract.js +123 -0
- package/build/fetch/page-store.d.ts +66 -0
- package/build/fetch/page-store.js +174 -0
- package/build/fetch-cache.d.ts +13 -0
- package/build/fetch-cache.js +15 -0
- package/build/lifecycle.d.ts +124 -0
- package/build/lifecycle.js +278 -0
- package/build/package-identity.d.ts +26 -0
- package/build/package-identity.js +28 -0
- package/build/runPool.d.ts +36 -0
- package/build/runPool.js +51 -0
- package/build/runtime.d.ts +71 -0
- package/build/runtime.js +659 -0
- package/build/search/auto-memory.d.ts +47 -0
- package/build/search/auto-memory.js +170 -0
- package/build/search/ctx-search-schema.d.ts +90 -0
- package/build/search/ctx-search-schema.js +135 -0
- package/build/search/flood-guard.d.ts +57 -0
- package/build/search/flood-guard.js +80 -0
- package/build/search/unified.d.ts +56 -0
- package/build/search/unified.js +104 -0
- package/build/security.d.ts +206 -0
- package/build/security.js +780 -0
- package/build/server.d.ts +240 -0
- package/build/server.js +5034 -0
- package/build/session/analytics.d.ts +773 -0
- package/build/session/analytics.js +2420 -0
- package/build/session/db.d.ts +468 -0
- package/build/session/db.js +1330 -0
- package/build/session/error-classifier.d.ts +87 -0
- package/build/session/error-classifier.js +303 -0
- package/build/session/event-emit.d.ts +48 -0
- package/build/session/event-emit.js +101 -0
- package/build/session/extract.d.ts +333 -0
- package/build/session/extract.js +2688 -0
- package/build/session/model-prices.json +429 -0
- package/build/session/persist-tool-calls.d.ts +54 -0
- package/build/session/persist-tool-calls.js +105 -0
- package/build/session/pricing.d.ts +64 -0
- package/build/session/pricing.js +151 -0
- package/build/session/project-attribution.d.ts +73 -0
- package/build/session/project-attribution.js +245 -0
- package/build/session/purge.d.ts +138 -0
- package/build/session/purge.js +240 -0
- package/build/session/retrieval-marker.d.ts +39 -0
- package/build/session/retrieval-marker.js +65 -0
- package/build/session/snapshot.d.ts +46 -0
- package/build/session/snapshot.js +532 -0
- package/build/store-directory.d.ts +56 -0
- package/build/store-directory.js +254 -0
- package/build/store.d.ts +147 -0
- package/build/store.js +1714 -0
- package/build/truncate.d.ts +57 -0
- package/build/truncate.js +142 -0
- package/build/types.d.ts +117 -0
- package/build/types.js +20 -0
- package/build/util/claude-config.d.ts +32 -0
- package/build/util/claude-config.js +84 -0
- package/build/util/hook-config.d.ts +27 -0
- package/build/util/hook-config.js +76 -0
- package/build/util/jsonc.d.ts +14 -0
- package/build/util/jsonc.js +104 -0
- package/build/util/plugin-cache-integrity.d.ts +51 -0
- package/build/util/plugin-cache-integrity.js +146 -0
- package/build/util/project-dir.d.ts +149 -0
- package/build/util/project-dir.js +340 -0
- package/build/util/sibling-mcp.d.ts +79 -0
- package/build/util/sibling-mcp.js +181 -0
- package/cli.bundle.mjs +1495 -0
- package/configs/antigravity/GEMINI.md +68 -0
- package/configs/antigravity/mcp_config.json +7 -0
- package/configs/antigravity-cli/hooks/hooks.json +37 -0
- package/configs/antigravity-cli/hooks.json +37 -0
- package/configs/antigravity-cli/mcp_config.json +10 -0
- package/configs/antigravity-cli/plugin.json +14 -0
- package/configs/antigravity-cli/rules/context-mode.md +77 -0
- package/configs/antigravity-cli/skills/context-mode/SKILL.md +77 -0
- package/configs/claude-code/CLAUDE.md +91 -0
- package/configs/codex/AGENTS.md +99 -0
- package/configs/codex/config.toml +8 -0
- package/configs/codex/hooks.json +47 -0
- package/configs/copilot-cli/.github/plugin/plugin.json +23 -0
- package/configs/copilot-cli/.mcp.json +12 -0
- package/configs/copilot-cli/README.md +47 -0
- package/configs/copilot-cli/hooks.json +41 -0
- package/configs/copilot-cli/skills/context-mode/SKILL.md +38 -0
- package/configs/cursor/context-mode.mdc +76 -0
- package/configs/cursor/hooks.json +21 -0
- package/configs/cursor/mcp.json +7 -0
- package/configs/gemini-cli/GEMINI.md +88 -0
- package/configs/gemini-cli/mcp.json +7 -0
- package/configs/gemini-cli/settings.json +60 -0
- package/configs/jetbrains-copilot/copilot-instructions.md +80 -0
- package/configs/jetbrains-copilot/hooks.json +16 -0
- package/configs/jetbrains-copilot/mcp.json +7 -0
- package/configs/kilo/AGENTS.md +84 -0
- package/configs/kilo/kilo.json +6 -0
- package/configs/kimi/hooks.json +54 -0
- package/configs/kiro/KIRO.md +84 -0
- package/configs/kiro/agent.json +18 -0
- package/configs/kiro/mcp.json +7 -0
- package/configs/omp/SYSTEM.md +85 -0
- package/configs/omp/mcp.json +7 -0
- package/configs/openclaw/AGENTS.md +87 -0
- package/configs/openclaw/openclaw.json +13 -0
- package/configs/opencode/AGENTS.md +84 -0
- package/configs/opencode/opencode.json +6 -0
- package/configs/pi/AGENTS.md +3 -0
- package/configs/qwen-code/QWEN.md +91 -0
- package/configs/vscode-copilot/copilot-instructions.md +80 -0
- package/configs/vscode-copilot/hooks.json +16 -0
- package/configs/vscode-copilot/mcp.json +7 -0
- package/configs/zed/AGENTS.md +68 -0
- package/hooks/antigravity-cli/payload.mjs +98 -0
- package/hooks/antigravity-cli/posttooluse.mjs +138 -0
- package/hooks/antigravity-cli/pretooluse.mjs +78 -0
- package/hooks/antigravity-cli/stop.mjs +58 -0
- package/hooks/auto-injection.mjs +102 -0
- package/hooks/cache-heal-utils.mjs +379 -0
- package/hooks/codex/platform.mjs +1 -0
- package/hooks/codex/posttooluse.mjs +66 -0
- package/hooks/codex/precompact.mjs +70 -0
- package/hooks/codex/pretooluse.mjs +42 -0
- package/hooks/codex/sessionstart.mjs +121 -0
- package/hooks/codex/stop.mjs +138 -0
- package/hooks/codex/userpromptsubmit.mjs +75 -0
- package/hooks/copilot-cli/posttooluse.mjs +79 -0
- package/hooks/copilot-cli/precompact.mjs +66 -0
- package/hooks/copilot-cli/pretooluse.mjs +41 -0
- package/hooks/copilot-cli/sessionstart.mjs +121 -0
- package/hooks/copilot-cli/stop.mjs +59 -0
- package/hooks/copilot-cli/userpromptsubmit.mjs +77 -0
- package/hooks/core/codex-caps.mjs +112 -0
- package/hooks/core/formatters.mjs +356 -0
- package/hooks/core/mcp-ready.mjs +109 -0
- package/hooks/core/platform-detect.mjs +49 -0
- package/hooks/core/routing.mjs +1050 -0
- package/hooks/core/stdin.mjs +90 -0
- package/hooks/core/tool-naming.mjs +57 -0
- package/hooks/cursor/afteragentresponse.mjs +74 -0
- package/hooks/cursor/hooks.json +31 -0
- package/hooks/cursor/posttooluse.mjs +72 -0
- package/hooks/cursor/pretooluse.mjs +26 -0
- package/hooks/cursor/sessionstart.mjs +97 -0
- package/hooks/cursor/stop.mjs +48 -0
- package/hooks/ensure-deps.mjs +254 -0
- package/hooks/formatters/claude-code.mjs +113 -0
- package/hooks/formatters/cursor.mjs +37 -0
- package/hooks/formatters/gemini-cli.mjs +55 -0
- package/hooks/formatters/vscode-copilot.mjs +55 -0
- package/hooks/gemini-cli/aftermodel.mjs +70 -0
- package/hooks/gemini-cli/aftertool.mjs +61 -0
- package/hooks/gemini-cli/beforeagent.mjs +99 -0
- package/hooks/gemini-cli/beforetool.mjs +27 -0
- package/hooks/gemini-cli/precompress.mjs +55 -0
- package/hooks/gemini-cli/sessionstart.mjs +137 -0
- package/hooks/heal-partial-install.mjs +712 -0
- package/hooks/hooks.json +143 -0
- package/hooks/jetbrains-copilot/posttooluse.mjs +61 -0
- package/hooks/jetbrains-copilot/precompact.mjs +55 -0
- package/hooks/jetbrains-copilot/pretooluse.mjs +27 -0
- package/hooks/jetbrains-copilot/sessionstart.mjs +124 -0
- package/hooks/kimi/platform.mjs +1 -0
- package/hooks/kimi/posttooluse.mjs +72 -0
- package/hooks/kimi/precompact.mjs +80 -0
- package/hooks/kimi/pretooluse.mjs +42 -0
- package/hooks/kimi/sessionend.mjs +61 -0
- package/hooks/kimi/sessionstart.mjs +113 -0
- package/hooks/kimi/stop.mjs +132 -0
- package/hooks/kimi/userpromptsubmit.mjs +90 -0
- package/hooks/kiro/agentspawn.mjs +97 -0
- package/hooks/kiro/posttooluse.mjs +51 -0
- package/hooks/kiro/pretooluse.mjs +64 -0
- package/hooks/kiro/userpromptsubmit.mjs +88 -0
- package/hooks/normalize-hooks.mjs +323 -0
- package/hooks/platform-bridge.mjs +340 -0
- package/hooks/posttooluse.mjs +225 -0
- package/hooks/precompact.mjs +100 -0
- package/hooks/pretooluse.mjs +227 -0
- package/hooks/qwen-code/platform.mjs +1 -0
- package/hooks/qwen-code/stop.mjs +168 -0
- package/hooks/routing-block.mjs +105 -0
- package/hooks/run-hook.mjs +95 -0
- package/hooks/security.bundle.mjs +2 -0
- package/hooks/session-attribution.bundle.mjs +1 -0
- package/hooks/session-db.bundle.mjs +145 -0
- package/hooks/session-directive.mjs +520 -0
- package/hooks/session-extract.bundle.mjs +3 -0
- package/hooks/session-helpers.mjs +428 -0
- package/hooks/session-loaders.mjs +448 -0
- package/hooks/session-snapshot.bundle.mjs +32 -0
- package/hooks/sessionstart.mjs +464 -0
- package/hooks/stop.mjs +82 -0
- package/hooks/suppress-stderr.mjs +25 -0
- package/hooks/userpromptsubmit.mjs +108 -0
- package/hooks/vscode-copilot/posttooluse.mjs +61 -0
- package/hooks/vscode-copilot/precompact.mjs +55 -0
- package/hooks/vscode-copilot/pretooluse.mjs +27 -0
- package/hooks/vscode-copilot/sessionstart.mjs +129 -0
- package/openclaw.plugin.json +38 -0
- package/package.json +132 -0
- package/scripts/heal-better-sqlite3.mjs +430 -0
- package/scripts/heal-installed-plugins.mjs +635 -0
- package/scripts/plugin-cache-integrity.mjs +248 -0
- package/scripts/postinstall.mjs +397 -0
- package/server.bundle.mjs +1421 -0
- package/server.js +5 -0
- package/skills/.ignore +7 -0
- package/skills/context-mode/SKILL.md +300 -0
- package/skills/context-mode/references/anti-patterns.md +283 -0
- package/skills/context-mode/references/patterns-javascript.md +298 -0
- package/skills/context-mode/references/patterns-python.md +304 -0
- package/skills/context-mode/references/patterns-shell.md +277 -0
- package/skills/ctx-doctor/SKILL.md +22 -0
- package/skills/ctx-index/SKILL.md +46 -0
- package/skills/ctx-insight/SKILL.md +24 -0
- package/skills/ctx-purge/SKILL.md +49 -0
- package/skills/ctx-search/SKILL.md +35 -0
- package/skills/ctx-stats/SKILL.md +26 -0
- package/skills/ctx-upgrade/SKILL.md +31 -0
- package/start.mjs +616 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { type SpawnSyncOptions, type SpawnSyncReturns } from "node:child_process";
|
|
4
|
+
import { ContentStore } from "./store.js";
|
|
5
|
+
import { type PlatformId } from "./adapters/types.js";
|
|
6
|
+
export declare const server: McpServer;
|
|
7
|
+
export interface RegisteredCtxTool {
|
|
8
|
+
name: string;
|
|
9
|
+
config: Record<string, unknown>;
|
|
10
|
+
handler: (args: Record<string, unknown>) => Promise<unknown> | unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare const REGISTERED_CTX_TOOLS: RegisteredCtxTool[];
|
|
13
|
+
export declare function shouldSuppressMcpToolsForNativePluginHost(opts?: {
|
|
14
|
+
embedded?: string;
|
|
15
|
+
platform?: PlatformId;
|
|
16
|
+
settings?: Record<string, unknown> | null;
|
|
17
|
+
}): boolean;
|
|
18
|
+
export declare function emitSuppressionDiagnostic(opts?: {
|
|
19
|
+
platform?: string;
|
|
20
|
+
write?: (chunk: string) => void;
|
|
21
|
+
}): void;
|
|
22
|
+
/** Test-only: reset the one-shot emission flag so suites can re-exercise. */
|
|
23
|
+
export declare function __resetSuppressionDiagnosticForTests(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Issue #637 — register an explicit empty `tools/list` handler on the McpServer.
|
|
26
|
+
*
|
|
27
|
+
* Background: when `suppressMcpToolsForNativePluginHost` is true, every
|
|
28
|
+
* `server.registerTool()` call is short-circuited (returns `undefined` above).
|
|
29
|
+
* The MCP SDK only installs the SDK-default `tools/list` handler when at least
|
|
30
|
+
* one `registerTool()` reaches `setToolRequestHandlers()` internally
|
|
31
|
+
* (mcp.js:56-67). Suppressing every registration leaves `tools/list`
|
|
32
|
+
* unregistered, and the framework's RPC layer answers it with
|
|
33
|
+
* `-32601 "Method not found"`.
|
|
34
|
+
*
|
|
35
|
+
* The reporter of #637 (SquirrelRat) inspected the suppressed child via
|
|
36
|
+
* `tools/list` and read the JSON-RPC error as "the plugin never registers any
|
|
37
|
+
* ctx_* tools" — when in fact the plugin DOES register all 11 tools natively
|
|
38
|
+
* (verified at `src/adapters/opencode/plugin.ts:469` and
|
|
39
|
+
* `tests/opencode-plugin.test.ts:88`). The misleading -32601 is the seed of
|
|
40
|
+
* the #637 perception.
|
|
41
|
+
*
|
|
42
|
+
* This helper installs an explicit handler that returns `{tools: []}` — a
|
|
43
|
+
* spec-compliant empty list. Paired with the existing #623 stderr diagnostic,
|
|
44
|
+
* an operator now sees:
|
|
45
|
+
* - wire response: `{tools: []}` (matches expectation, no JSON-RPC error)
|
|
46
|
+
* - stderr: `[context-mode] ctx_* tools/list intentionally empty… (#623)`
|
|
47
|
+
*
|
|
48
|
+
* Idempotent: throws inside SDK if called twice on the same server because
|
|
49
|
+
* `assertCanSetRequestHandler` (mcp.js:60) rejects duplicate registrations;
|
|
50
|
+
* we therefore install the SDK's default tool handlers FIRST (via a no-op
|
|
51
|
+
* registerTool of a fake tool, immediately removed) only if needed. To keep
|
|
52
|
+
* the public surface minimal, we just call `server.server.setRequestHandler`
|
|
53
|
+
* directly — that is the same low-level call used for prompts/resources at
|
|
54
|
+
* server.ts:259-261 and avoids the SDK guard entirely.
|
|
55
|
+
*
|
|
56
|
+
* Exported for test (#637 in-memory regression guard).
|
|
57
|
+
*/
|
|
58
|
+
export declare function registerEmptyToolsListHandler(target?: McpServer): void;
|
|
59
|
+
type ToolContextOverride = {
|
|
60
|
+
projectDir: string;
|
|
61
|
+
sessionId?: string;
|
|
62
|
+
};
|
|
63
|
+
export declare function withProjectDirOverride<T>(projectDir: string | ToolContextOverride, fn: () => Promise<T>): Promise<T>;
|
|
64
|
+
export declare function sanitizeSchemaForStrictClients(node: unknown): unknown;
|
|
65
|
+
export declare function installStrictClientSchemaCompat(target?: McpServer): void;
|
|
66
|
+
/**
|
|
67
|
+
* Build the FK-attribution object passed to every ContentStore.index*() call
|
|
68
|
+
* in this process. CLAUDE_SESSION_ID is the only MCP-side handle we have on
|
|
69
|
+
* the current session — eventId stays undefined because MCP tool invocations
|
|
70
|
+
* are not paired with PostToolUse event rows at index time (the hook fires
|
|
71
|
+
* AFTER the tool returns). Empty-string fallback inside #insertChunks keeps
|
|
72
|
+
* legacy unattributed rows readable.
|
|
73
|
+
*/
|
|
74
|
+
export declare function currentAttribution(): {
|
|
75
|
+
sessionId?: string;
|
|
76
|
+
} | undefined;
|
|
77
|
+
/** v1.0.134 SLICE A: opts injection for testability. Production callers pass nothing. */
|
|
78
|
+
export declare function resolveSessionIdFromSessionDB(opts?: {
|
|
79
|
+
projectDir?: string;
|
|
80
|
+
sessionsDir?: string;
|
|
81
|
+
bypassCache?: boolean;
|
|
82
|
+
}): string | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Project directory detection across supported platforms.
|
|
85
|
+
*
|
|
86
|
+
* Priority:
|
|
87
|
+
* 1. Platform-specific env var (set by host IDE before MCP server spawn)
|
|
88
|
+
* 2. CONTEXT_MODE_PROJECT_DIR (set by start.mjs for ALL platforms — universal)
|
|
89
|
+
* 3. process.cwd() (last resort)
|
|
90
|
+
*
|
|
91
|
+
* CONTEXT_MODE_PROJECT_DIR guarantees correct projectDir even for platforms
|
|
92
|
+
* that don't set their own env var (Cursor, OpenClaw, Codex, Kiro, Zed).
|
|
93
|
+
*/
|
|
94
|
+
export declare function getProjectDir(): string;
|
|
95
|
+
/**
|
|
96
|
+
* Parse FTS5 highlight markers to find match positions in the
|
|
97
|
+
* original (marker-free) text. Returns character offsets into the
|
|
98
|
+
* stripped content where each matched token begins.
|
|
99
|
+
*/
|
|
100
|
+
export declare function positionsFromHighlight(highlighted: string): number[];
|
|
101
|
+
export declare function extractSnippet(content: string, query: string, maxLen?: number, highlighted?: string): string;
|
|
102
|
+
export type BatchQueryScope = "batch" | "global";
|
|
103
|
+
export declare function formatBatchQueryResults(store: ContentStore, queries: string[], source: string, maxOutput?: number, scope?: BatchQueryScope): string[];
|
|
104
|
+
export interface BatchCommand {
|
|
105
|
+
label: string;
|
|
106
|
+
command: string;
|
|
107
|
+
}
|
|
108
|
+
export interface BatchRunResult {
|
|
109
|
+
outputs: string[];
|
|
110
|
+
timedOut: boolean;
|
|
111
|
+
}
|
|
112
|
+
export interface BatchRunOptions {
|
|
113
|
+
/**
|
|
114
|
+
* Total budget (concurrency=1, shared) or per-command (concurrency>1).
|
|
115
|
+
* When `undefined`, no server-side timer fires — the MCP host's RPC
|
|
116
|
+
* timeout governs (Issue #406).
|
|
117
|
+
*/
|
|
118
|
+
timeout: number | undefined;
|
|
119
|
+
concurrency: number;
|
|
120
|
+
nodeOptsPrefix: string;
|
|
121
|
+
cwd?: string;
|
|
122
|
+
onFsBytes?: (bytes: number) => void;
|
|
123
|
+
}
|
|
124
|
+
interface BatchExecutor {
|
|
125
|
+
execute(input: {
|
|
126
|
+
language: "shell";
|
|
127
|
+
code: string;
|
|
128
|
+
timeout: number | undefined;
|
|
129
|
+
cwd?: string;
|
|
130
|
+
}): Promise<{
|
|
131
|
+
stdout: string;
|
|
132
|
+
timedOut?: boolean;
|
|
133
|
+
}>;
|
|
134
|
+
}
|
|
135
|
+
export declare function buildBatchNodeOptionsPrefix(shellPath: string, preloadPath: string): string;
|
|
136
|
+
/**
|
|
137
|
+
* Default execution timeout (ms) applied ONLY under Antigravity CLI (`agy`).
|
|
138
|
+
* agy does not enforce an MCP RPC timeout, so a ctx_execute with a runaway or
|
|
139
|
+
* blocking script hangs forever — the host never kills it and the user must
|
|
140
|
+
* interrupt. Every other host enforces its own RPC timeout, so we keep the
|
|
141
|
+
* no-server-timer behavior there (Issue #406 — long builds need an unbounded
|
|
142
|
+
* run). A caller can still pass an explicit `timeout` to override on any host.
|
|
143
|
+
*/
|
|
144
|
+
export declare const AGY_DEFAULT_EXEC_TIMEOUT_MS = 120000;
|
|
145
|
+
export declare function resolveExecTimeout(timeout: number | undefined): number | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* Execute batch commands. concurrency=1 preserves the legacy serial path
|
|
148
|
+
* (shared timeout budget + cascading skip-on-timeout). concurrency>1 runs
|
|
149
|
+
* commands concurrently with at most N in flight; each command receives the
|
|
150
|
+
* full timeout, output is collated by input index, and per-command timeouts
|
|
151
|
+
* record `(timed out)` blocks without skipping siblings.
|
|
152
|
+
*/
|
|
153
|
+
export declare function runBatchCommands(commands: BatchCommand[], opts: BatchRunOptions, executor: BatchExecutor): Promise<BatchRunResult>;
|
|
154
|
+
export declare function buildFetchCode(url: string, outputPath: string): string;
|
|
155
|
+
export type ExtractionVerdict = {
|
|
156
|
+
kind: "ok";
|
|
157
|
+
} | {
|
|
158
|
+
kind: "shell";
|
|
159
|
+
textBytes: number;
|
|
160
|
+
sourceBytes: number;
|
|
161
|
+
yieldPct: string;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Decide whether a non-empty extraction is actually a document or a
|
|
165
|
+
* JavaScript-rendered shell.
|
|
166
|
+
*
|
|
167
|
+
* WHY THIS EXISTS. The old guard was `markdown.length === 0`. A canvas app or
|
|
168
|
+
* SPA serves a few KB of bootstrap HTML whose entire text content is its
|
|
169
|
+
* <title>; Turndown faithfully renders that to ~20 bytes. Twenty bytes is not
|
|
170
|
+
* zero, so the fetch was reported as a success and the shell was indexed as if
|
|
171
|
+
* it were the page. The caller had no way to tell that apart from a genuinely
|
|
172
|
+
* short document.
|
|
173
|
+
*
|
|
174
|
+
* Measured on this exact code path (2026-08, bytes in -> markdown bytes out):
|
|
175
|
+
* excalidraw.com 6,862 -> 21 (0.31% yield) <- shell
|
|
176
|
+
* app.diagrams.net 2,759 -> 476 (17.3% yield) real prose
|
|
177
|
+
* nextjs.org 316,151 -> 13,587 (4.30% yield) real prose
|
|
178
|
+
* developers.cloudflare.com 178,627 -> 8,389 (4.70% yield) real prose
|
|
179
|
+
*
|
|
180
|
+
* Neither signal works alone. A ratio alone condemns a small valid page
|
|
181
|
+
* (`<p>Hello</p>` is 5 bytes of text from 40 of markup and is perfectly fine).
|
|
182
|
+
* A floor alone condemns a genuinely short document. Requiring BOTH — almost
|
|
183
|
+
* no text came out AND almost none of what came in survived — isolates the
|
|
184
|
+
* shell case and leaves every measured real page above untouched.
|
|
185
|
+
*
|
|
186
|
+
* Arithmetic only: no pattern matching, no markup sniffing, no word lists.
|
|
187
|
+
*
|
|
188
|
+
* The two thresholds live INSIDE the body on purpose. This function is
|
|
189
|
+
* injected verbatim into the fetch subprocess (see buildFetchCode) so the
|
|
190
|
+
* subprocess decides "is this a shell?" with the same arithmetic the parent
|
|
191
|
+
* uses — one definition, two callers. A `const` at module scope would not
|
|
192
|
+
* survive `.toString()` and the subprocess would throw a ReferenceError.
|
|
193
|
+
*
|
|
194
|
+
* @param textBytes length of the converted text, already trimmed
|
|
195
|
+
* @param sourceBytes bytes received off the wire pre-conversion; a
|
|
196
|
+
* non-positive value means the subprocess did not report it
|
|
197
|
+
* (older bundle), and with no evidence we never accuse.
|
|
198
|
+
*/
|
|
199
|
+
export declare function classifyExtraction(textBytes: number, sourceBytes: number): ExtractionVerdict;
|
|
200
|
+
/**
|
|
201
|
+
* Classify an IP address.
|
|
202
|
+
* - "block": always blocked (link-local/IMDS/multicast/reserved/malformed)
|
|
203
|
+
* - "private": loopback or RFC1918 — allowed by default, blocked in strict mode
|
|
204
|
+
* - "public": safe to fetch
|
|
205
|
+
*
|
|
206
|
+
* Exported (via the function name) so SSRF tests can exercise the matcher directly.
|
|
207
|
+
*/
|
|
208
|
+
export declare function classifyIp(rawIp: string): "block" | "private" | "public";
|
|
209
|
+
/**
|
|
210
|
+
* The rung-2 urls the subprocess requested. An unparseable or absent line
|
|
211
|
+
* yields an empty list, which the refusal reads as "not reported" — it never
|
|
212
|
+
* claims urls were tried when there is no evidence that they were.
|
|
213
|
+
*/
|
|
214
|
+
export declare function parseLadderTried(raw: string): string[];
|
|
215
|
+
/**
|
|
216
|
+
* How the ladder's rung ids read in a report. The point of a ladder is that a
|
|
217
|
+
* reader can see WHICH step paid for this page, so every fetch says so.
|
|
218
|
+
*/
|
|
219
|
+
export declare function describeRung(rung: string): string;
|
|
220
|
+
export type SpawnSyncFn = (cmd: string, args: readonly string[], opts?: SpawnSyncOptions) => SpawnSyncReturns<string | Buffer>;
|
|
221
|
+
export type BrowserOpenResult = {
|
|
222
|
+
ok: true;
|
|
223
|
+
method: string;
|
|
224
|
+
} | {
|
|
225
|
+
ok: false;
|
|
226
|
+
method: "none";
|
|
227
|
+
reason: string;
|
|
228
|
+
};
|
|
229
|
+
export type KillResult = {
|
|
230
|
+
killedPids: string[];
|
|
231
|
+
attemptedPids: string[];
|
|
232
|
+
errors: string[];
|
|
233
|
+
};
|
|
234
|
+
export declare function browserOpenArgv(url: string, platform: NodeJS.Platform): readonly {
|
|
235
|
+
cmd: string;
|
|
236
|
+
args: readonly string[];
|
|
237
|
+
}[];
|
|
238
|
+
export declare function openBrowserSync(url: string, platform?: NodeJS.Platform, runner?: SpawnSyncFn): BrowserOpenResult;
|
|
239
|
+
export declare function killProcessOnPort(port: number, platform?: NodeJS.Platform, runner?: SpawnSyncFn): KillResult;
|
|
240
|
+
export {};
|