@chances-ai/engine 24.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/dist/agents/discover.d.ts +30 -0
- package/dist/agents/discover.d.ts.map +1 -0
- package/dist/agents/discover.js +183 -0
- package/dist/agents/discover.js.map +1 -0
- package/dist/agents/index.d.ts +20 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +52 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/parse.d.ts +61 -0
- package/dist/agents/parse.d.ts.map +1 -0
- package/dist/agents/parse.js +527 -0
- package/dist/agents/parse.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +8 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.js +125 -0
- package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
- package/dist/ai/adapters/ai-sdk.d.ts +56 -0
- package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk.js +112 -0
- package/dist/ai/adapters/ai-sdk.js.map +1 -0
- package/dist/ai/adapters/mock.d.ts +13 -0
- package/dist/ai/adapters/mock.d.ts.map +1 -0
- package/dist/ai/adapters/mock.js +54 -0
- package/dist/ai/adapters/mock.js.map +1 -0
- package/dist/ai/adapters/openai-compatible.d.ts +23 -0
- package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
- package/dist/ai/adapters/openai-compatible.js +45 -0
- package/dist/ai/adapters/openai-compatible.js.map +1 -0
- package/dist/ai/cost.d.ts +3 -0
- package/dist/ai/cost.d.ts.map +1 -0
- package/dist/ai/cost.js +5 -0
- package/dist/ai/cost.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +11 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/known-models.d.ts +20 -0
- package/dist/ai/known-models.d.ts.map +1 -0
- package/dist/ai/known-models.js +129 -0
- package/dist/ai/known-models.js.map +1 -0
- package/dist/ai/registry.d.ts +12 -0
- package/dist/ai/registry.d.ts.map +1 -0
- package/dist/ai/registry.js +24 -0
- package/dist/ai/registry.js.map +1 -0
- package/dist/ai/retry.d.ts +11 -0
- package/dist/ai/retry.d.ts.map +1 -0
- package/dist/ai/retry.js +14 -0
- package/dist/ai/retry.js.map +1 -0
- package/dist/ai/router.d.ts +25 -0
- package/dist/ai/router.d.ts.map +1 -0
- package/dist/ai/router.js +36 -0
- package/dist/ai/router.js.map +1 -0
- package/dist/ai/setup.d.ts +23 -0
- package/dist/ai/setup.d.ts.map +1 -0
- package/dist/ai/setup.js +47 -0
- package/dist/ai/setup.js.map +1 -0
- package/dist/ai/summarizer.d.ts +24 -0
- package/dist/ai/summarizer.d.ts.map +1 -0
- package/dist/ai/summarizer.js +56 -0
- package/dist/ai/summarizer.js.map +1 -0
- package/dist/ai/types.d.ts +83 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/core/compaction/circuit-breaker.d.ts +32 -0
- package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
- package/dist/core/compaction/circuit-breaker.js +42 -0
- package/dist/core/compaction/circuit-breaker.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +75 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -0
- package/dist/core/compaction/compactor.js +261 -0
- package/dist/core/compaction/compactor.js.map +1 -0
- package/dist/core/compaction/estimate.d.ts +39 -0
- package/dist/core/compaction/estimate.d.ts.map +1 -0
- package/dist/core/compaction/estimate.js +74 -0
- package/dist/core/compaction/estimate.js.map +1 -0
- package/dist/core/compaction/index.d.ts +5 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +5 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/prune.d.ts +43 -0
- package/dist/core/compaction/prune.d.ts.map +1 -0
- package/dist/core/compaction/prune.js +51 -0
- package/dist/core/compaction/prune.js.map +1 -0
- package/dist/core/engine.d.ts +268 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +767 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/task-tool.d.ts +175 -0
- package/dist/core/task-tool.d.ts.map +1 -0
- package/dist/core/task-tool.js +901 -0
- package/dist/core/task-tool.js.map +1 -0
- package/dist/core/workspace-query.d.ts +83 -0
- package/dist/core/workspace-query.d.ts.map +1 -0
- package/dist/core/workspace-query.js +217 -0
- package/dist/core/workspace-query.js.map +1 -0
- package/dist/core/worktree/active-marker.d.ts +31 -0
- package/dist/core/worktree/active-marker.d.ts.map +1 -0
- package/dist/core/worktree/active-marker.js +109 -0
- package/dist/core/worktree/active-marker.js.map +1 -0
- package/dist/core/worktree/create.d.ts +40 -0
- package/dist/core/worktree/create.d.ts.map +1 -0
- package/dist/core/worktree/create.js +121 -0
- package/dist/core/worktree/create.js.map +1 -0
- package/dist/core/worktree/errors.d.ts +7 -0
- package/dist/core/worktree/errors.d.ts.map +1 -0
- package/dist/core/worktree/errors.js +11 -0
- package/dist/core/worktree/errors.js.map +1 -0
- package/dist/core/worktree/gc.d.ts +39 -0
- package/dist/core/worktree/gc.d.ts.map +1 -0
- package/dist/core/worktree/gc.js +146 -0
- package/dist/core/worktree/gc.js.map +1 -0
- package/dist/core/worktree/git.d.ts +53 -0
- package/dist/core/worktree/git.d.ts.map +1 -0
- package/dist/core/worktree/git.js +166 -0
- package/dist/core/worktree/git.js.map +1 -0
- package/dist/core/worktree/index.d.ts +8 -0
- package/dist/core/worktree/index.d.ts.map +1 -0
- package/dist/core/worktree/index.js +8 -0
- package/dist/core/worktree/index.js.map +1 -0
- package/dist/core/worktree/paths.d.ts +26 -0
- package/dist/core/worktree/paths.d.ts.map +1 -0
- package/dist/core/worktree/paths.js +57 -0
- package/dist/core/worktree/paths.js.map +1 -0
- package/dist/core/worktree/slug.d.ts +6 -0
- package/dist/core/worktree/slug.d.ts.map +1 -0
- package/dist/core/worktree/slug.js +21 -0
- package/dist/core/worktree/slug.js.map +1 -0
- package/dist/local-vault/file-store.d.ts +64 -0
- package/dist/local-vault/file-store.d.ts.map +1 -0
- package/dist/local-vault/file-store.js +225 -0
- package/dist/local-vault/file-store.js.map +1 -0
- package/dist/local-vault/index.d.ts +57 -0
- package/dist/local-vault/index.d.ts.map +1 -0
- package/dist/local-vault/index.js +68 -0
- package/dist/local-vault/index.js.map +1 -0
- package/dist/local-vault/keychain.d.ts +58 -0
- package/dist/local-vault/keychain.d.ts.map +1 -0
- package/dist/local-vault/keychain.js +200 -0
- package/dist/local-vault/keychain.js.map +1 -0
- package/dist/local-vault/mutex.d.ts +20 -0
- package/dist/local-vault/mutex.d.ts.map +1 -0
- package/dist/local-vault/mutex.js +44 -0
- package/dist/local-vault/mutex.js.map +1 -0
- package/dist/local-vault/passphrase.d.ts +30 -0
- package/dist/local-vault/passphrase.d.ts.map +1 -0
- package/dist/local-vault/passphrase.js +72 -0
- package/dist/local-vault/passphrase.js.map +1 -0
- package/dist/lsp/config.d.ts +34 -0
- package/dist/lsp/config.d.ts.map +1 -0
- package/dist/lsp/config.js +68 -0
- package/dist/lsp/config.js.map +1 -0
- package/dist/lsp/detect.d.ts +7 -0
- package/dist/lsp/detect.d.ts.map +1 -0
- package/dist/lsp/detect.js +78 -0
- package/dist/lsp/detect.js.map +1 -0
- package/dist/lsp/errors.d.ts +11 -0
- package/dist/lsp/errors.d.ts.map +1 -0
- package/dist/lsp/errors.js +11 -0
- package/dist/lsp/errors.js.map +1 -0
- package/dist/lsp/formatters.d.ts +147 -0
- package/dist/lsp/formatters.d.ts.map +1 -0
- package/dist/lsp/formatters.js +259 -0
- package/dist/lsp/formatters.js.map +1 -0
- package/dist/lsp/index.d.ts +31 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +31 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/instance.d.ts +72 -0
- package/dist/lsp/instance.d.ts.map +1 -0
- package/dist/lsp/instance.js +489 -0
- package/dist/lsp/instance.js.map +1 -0
- package/dist/lsp/lazy-load.d.ts +27 -0
- package/dist/lsp/lazy-load.d.ts.map +1 -0
- package/dist/lsp/lazy-load.js +57 -0
- package/dist/lsp/lazy-load.js.map +1 -0
- package/dist/lsp/manager.d.ts +59 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +242 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/ops.d.ts +13 -0
- package/dist/lsp/ops.d.ts.map +1 -0
- package/dist/lsp/ops.js +225 -0
- package/dist/lsp/ops.js.map +1 -0
- package/dist/lsp/rpc.d.ts +47 -0
- package/dist/lsp/rpc.d.ts.map +1 -0
- package/dist/lsp/rpc.js +134 -0
- package/dist/lsp/rpc.js.map +1 -0
- package/dist/lsp/safe-uri.d.ts +18 -0
- package/dist/lsp/safe-uri.d.ts.map +1 -0
- package/dist/lsp/safe-uri.js +96 -0
- package/dist/lsp/safe-uri.js.map +1 -0
- package/dist/lsp/types.d.ts +70 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +16 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/mcp/bridge.d.ts +57 -0
- package/dist/mcp/bridge.d.ts.map +1 -0
- package/dist/mcp/bridge.js +98 -0
- package/dist/mcp/bridge.js.map +1 -0
- package/dist/mcp/category.d.ts +22 -0
- package/dist/mcp/category.d.ts.map +1 -0
- package/dist/mcp/category.js +11 -0
- package/dist/mcp/category.js.map +1 -0
- package/dist/mcp/client.d.ts +228 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +352 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/content.d.ts +86 -0
- package/dist/mcp/content.d.ts.map +1 -0
- package/dist/mcp/content.js +147 -0
- package/dist/mcp/content.js.map +1 -0
- package/dist/mcp/env.d.ts +19 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +50 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/host.d.ts +199 -0
- package/dist/mcp/host.d.ts.map +1 -0
- package/dist/mcp/host.js +530 -0
- package/dist/mcp/host.js.map +1 -0
- package/dist/mcp/index.d.ts +18 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/load-mcp-host.d.ts +32 -0
- package/dist/mcp/load-mcp-host.d.ts.map +1 -0
- package/dist/mcp/load-mcp-host.js +49 -0
- package/dist/mcp/load-mcp-host.js.map +1 -0
- package/dist/mcp/oauth/callback-server.d.ts +73 -0
- package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
- package/dist/mcp/oauth/callback-server.js +280 -0
- package/dist/mcp/oauth/callback-server.js.map +1 -0
- package/dist/mcp/oauth/config-hash.d.ts +24 -0
- package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
- package/dist/mcp/oauth/config-hash.js +55 -0
- package/dist/mcp/oauth/config-hash.js.map +1 -0
- package/dist/mcp/oauth/error-normalize.d.ts +39 -0
- package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
- package/dist/mcp/oauth/error-normalize.js +91 -0
- package/dist/mcp/oauth/error-normalize.js.map +1 -0
- package/dist/mcp/oauth/provider.d.ts +190 -0
- package/dist/mcp/oauth/provider.d.ts.map +1 -0
- package/dist/mcp/oauth/provider.js +305 -0
- package/dist/mcp/oauth/provider.js.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.js +77 -0
- package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.js +21 -0
- package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
- package/dist/mcp/parse.d.ts +28 -0
- package/dist/mcp/parse.d.ts.map +1 -0
- package/dist/mcp/parse.js +209 -0
- package/dist/mcp/parse.js.map +1 -0
- package/dist/mcp/prompts.d.ts +31 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +71 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/redact.d.ts +62 -0
- package/dist/mcp/redact.d.ts.map +1 -0
- package/dist/mcp/redact.js +87 -0
- package/dist/mcp/redact.js.map +1 -0
- package/dist/mcp/resources.d.ts +70 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +170 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/types.d.ts +123 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/frontmatter.d.ts +18 -0
- package/dist/memory/frontmatter.d.ts.map +1 -0
- package/dist/memory/frontmatter.js +81 -0
- package/dist/memory/frontmatter.js.map +1 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/store.d.ts +44 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +237 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/tools.d.ts +11 -0
- package/dist/memory/tools.d.ts.map +1 -0
- package/dist/memory/tools.js +159 -0
- package/dist/memory/tools.js.map +1 -0
- package/dist/memory/types.d.ts +32 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +20 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/plugin-api/index.d.ts +167 -0
- package/dist/plugin-api/index.d.ts.map +1 -0
- package/dist/plugin-api/index.js +151 -0
- package/dist/plugin-api/index.js.map +1 -0
- package/dist/plugin-logger/index.d.ts +21 -0
- package/dist/plugin-logger/index.d.ts.map +1 -0
- package/dist/plugin-logger/index.js +59 -0
- package/dist/plugin-logger/index.js.map +1 -0
- package/dist/session/index.d.ts +125 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +202 -0
- package/dist/session/index.js.map +1 -0
- package/dist/tools/approval.d.ts +33 -0
- package/dist/tools/approval.d.ts.map +1 -0
- package/dist/tools/approval.js +53 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/builtins/_shared.d.ts +94 -0
- package/dist/tools/builtins/_shared.d.ts.map +1 -0
- package/dist/tools/builtins/_shared.js +246 -0
- package/dist/tools/builtins/_shared.js.map +1 -0
- package/dist/tools/builtins/ask-user-question.d.ts +27 -0
- package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
- package/dist/tools/builtins/ask-user-question.js +191 -0
- package/dist/tools/builtins/ask-user-question.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts +3 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -0
- package/dist/tools/builtins/bash.js +158 -0
- package/dist/tools/builtins/bash.js.map +1 -0
- package/dist/tools/builtins/diff.d.ts +3 -0
- package/dist/tools/builtins/diff.d.ts.map +1 -0
- package/dist/tools/builtins/diff.js +83 -0
- package/dist/tools/builtins/diff.js.map +1 -0
- package/dist/tools/builtins/edit.d.ts +3 -0
- package/dist/tools/builtins/edit.d.ts.map +1 -0
- package/dist/tools/builtins/edit.js +40 -0
- package/dist/tools/builtins/edit.js.map +1 -0
- package/dist/tools/builtins/glob.d.ts +3 -0
- package/dist/tools/builtins/glob.d.ts.map +1 -0
- package/dist/tools/builtins/glob.js +37 -0
- package/dist/tools/builtins/glob.js.map +1 -0
- package/dist/tools/builtins/grep.d.ts +3 -0
- package/dist/tools/builtins/grep.d.ts.map +1 -0
- package/dist/tools/builtins/grep.js +81 -0
- package/dist/tools/builtins/grep.js.map +1 -0
- package/dist/tools/builtins/lsp.d.ts +3 -0
- package/dist/tools/builtins/lsp.d.ts.map +1 -0
- package/dist/tools/builtins/lsp.js +102 -0
- package/dist/tools/builtins/lsp.js.map +1 -0
- package/dist/tools/builtins/pty.d.ts +64 -0
- package/dist/tools/builtins/pty.d.ts.map +1 -0
- package/dist/tools/builtins/pty.js +536 -0
- package/dist/tools/builtins/pty.js.map +1 -0
- package/dist/tools/builtins/read.d.ts +3 -0
- package/dist/tools/builtins/read.d.ts.map +1 -0
- package/dist/tools/builtins/read.js +18 -0
- package/dist/tools/builtins/read.js.map +1 -0
- package/dist/tools/builtins/web-fetch.d.ts +4 -0
- package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
- package/dist/tools/builtins/web-fetch.js +353 -0
- package/dist/tools/builtins/web-fetch.js.map +1 -0
- package/dist/tools/builtins/write.d.ts +3 -0
- package/dist/tools/builtins/write.d.ts.map +1 -0
- package/dist/tools/builtins/write.js +48 -0
- package/dist/tools/builtins/write.js.map +1 -0
- package/dist/tools/builtins.d.ts +9 -0
- package/dist/tools/builtins.d.ts.map +1 -0
- package/dist/tools/builtins.js +29 -0
- package/dist/tools/builtins.js.map +1 -0
- package/dist/tools/diff.d.ts +18 -0
- package/dist/tools/diff.d.ts.map +1 -0
- package/dist/tools/diff.js +57 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/permission.d.ts +120 -0
- package/dist/tools/permission.d.ts.map +1 -0
- package/dist/tools/permission.js +208 -0
- package/dist/tools/permission.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +19 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +244 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +15 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export declare const MAX_OUTPUT_BYTES = 100000;
|
|
2
|
+
export interface LspLocation {
|
|
3
|
+
uri: string;
|
|
4
|
+
range: {
|
|
5
|
+
start: {
|
|
6
|
+
line: number;
|
|
7
|
+
character: number;
|
|
8
|
+
};
|
|
9
|
+
end: {
|
|
10
|
+
line: number;
|
|
11
|
+
character: number;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** LSP 3.17+ `LocationLink` shape. Servers return this when the client
|
|
16
|
+
* advertised `definition.linkSupport: true` (we do). The fields are
|
|
17
|
+
* different from `Location` — codex Round-2 MUST-FIX #4 caught the
|
|
18
|
+
* missing normalisation. */
|
|
19
|
+
export interface LspLocationLink {
|
|
20
|
+
targetUri: string;
|
|
21
|
+
targetRange: {
|
|
22
|
+
start: {
|
|
23
|
+
line: number;
|
|
24
|
+
character: number;
|
|
25
|
+
};
|
|
26
|
+
end: {
|
|
27
|
+
line: number;
|
|
28
|
+
character: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
targetSelectionRange?: {
|
|
32
|
+
start: {
|
|
33
|
+
line: number;
|
|
34
|
+
character: number;
|
|
35
|
+
};
|
|
36
|
+
end: {
|
|
37
|
+
line: number;
|
|
38
|
+
character: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
originSelectionRange?: {
|
|
42
|
+
start: {
|
|
43
|
+
line: number;
|
|
44
|
+
character: number;
|
|
45
|
+
};
|
|
46
|
+
end: {
|
|
47
|
+
line: number;
|
|
48
|
+
character: number;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Coerce a `Location | LocationLink` (or array of either) into a
|
|
53
|
+
* uniform `LspLocation[]`. The selection range is preferred for
|
|
54
|
+
* navigation when present (claude-code does the same). */
|
|
55
|
+
export declare function normalizeLocations(result: LspLocation | LspLocationLink | readonly (LspLocation | LspLocationLink)[] | null | undefined): LspLocation[];
|
|
56
|
+
export interface LspSymbol {
|
|
57
|
+
name: string;
|
|
58
|
+
kind?: number;
|
|
59
|
+
location?: LspLocation;
|
|
60
|
+
range?: {
|
|
61
|
+
start: {
|
|
62
|
+
line: number;
|
|
63
|
+
character: number;
|
|
64
|
+
};
|
|
65
|
+
end: {
|
|
66
|
+
line: number;
|
|
67
|
+
character: number;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
children?: readonly LspSymbol[];
|
|
71
|
+
}
|
|
72
|
+
export interface LspCallHierarchyItem {
|
|
73
|
+
name: string;
|
|
74
|
+
uri: string;
|
|
75
|
+
range: {
|
|
76
|
+
start: {
|
|
77
|
+
line: number;
|
|
78
|
+
character: number;
|
|
79
|
+
};
|
|
80
|
+
end: {
|
|
81
|
+
line: number;
|
|
82
|
+
character: number;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
selectionRange?: {
|
|
86
|
+
start: {
|
|
87
|
+
line: number;
|
|
88
|
+
character: number;
|
|
89
|
+
};
|
|
90
|
+
end: {
|
|
91
|
+
line: number;
|
|
92
|
+
character: number;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export interface LspCallHierarchyIncoming {
|
|
97
|
+
from: LspCallHierarchyItem;
|
|
98
|
+
fromRanges: readonly {
|
|
99
|
+
start: {
|
|
100
|
+
line: number;
|
|
101
|
+
character: number;
|
|
102
|
+
};
|
|
103
|
+
end: {
|
|
104
|
+
line: number;
|
|
105
|
+
character: number;
|
|
106
|
+
};
|
|
107
|
+
}[];
|
|
108
|
+
}
|
|
109
|
+
export interface LspCallHierarchyOutgoing {
|
|
110
|
+
to: LspCallHierarchyItem;
|
|
111
|
+
fromRanges: readonly {
|
|
112
|
+
start: {
|
|
113
|
+
line: number;
|
|
114
|
+
character: number;
|
|
115
|
+
};
|
|
116
|
+
end: {
|
|
117
|
+
line: number;
|
|
118
|
+
character: number;
|
|
119
|
+
};
|
|
120
|
+
}[];
|
|
121
|
+
}
|
|
122
|
+
/** Group a flat location list by file path; drop entries outside
|
|
123
|
+
* the workspace; format `path:line:char` lines with truncation
|
|
124
|
+
* markers. */
|
|
125
|
+
export declare function formatLocations(locations: readonly LspLocation[], workspaceRoot: string, label: string): string;
|
|
126
|
+
/** Document/workspace symbol tree → indented list. Workspace symbols
|
|
127
|
+
* arrive flat (SymbolInformation); document symbols arrive
|
|
128
|
+
* hierarchical. Either way: count omitted nodes. */
|
|
129
|
+
export declare function formatSymbols(symbols: readonly LspSymbol[], workspaceRoot: string, label: string): string;
|
|
130
|
+
/** Hover content → trimmed plain text with byte-cap. */
|
|
131
|
+
export declare function formatHover(content: {
|
|
132
|
+
kind?: string;
|
|
133
|
+
value: string;
|
|
134
|
+
} | {
|
|
135
|
+
language?: string;
|
|
136
|
+
value: string;
|
|
137
|
+
} | readonly {
|
|
138
|
+
value: string;
|
|
139
|
+
}[] | null | undefined): string;
|
|
140
|
+
/** Single goToDefinition / goToImplementation pretty-print with
|
|
141
|
+
* context (matches claude-code shape). */
|
|
142
|
+
export declare function formatSingleLocation(loc: LspLocation | null | undefined, workspaceRoot: string, label: string, fileReader: (abs: string) => string | undefined): string;
|
|
143
|
+
/** Call-hierarchy incoming/outgoing pretty-print. */
|
|
144
|
+
export declare function formatIncomingCalls(items: readonly LspCallHierarchyIncoming[], workspaceRoot: string): string;
|
|
145
|
+
export declare function formatOutgoingCalls(items: readonly LspCallHierarchyOutgoing[], workspaceRoot: string): string;
|
|
146
|
+
export declare function formatCallHierarchyItems(items: readonly LspCallHierarchyItem[], workspaceRoot: string): string;
|
|
147
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lsp/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (4.2) Output formatters — one per result type. Per-op budgets
|
|
3
|
+
* (codex Round-1 SHOULD-FIX #6); 100 KB hard cap enforced by
|
|
4
|
+
* `truncate()` on the assembled text.
|
|
5
|
+
*
|
|
6
|
+
* Location-class results (Location[]) drop entries whose URI escapes
|
|
7
|
+
* the workspace (codex Round-1 MUST-FIX #3); symbol/call-hierarchy
|
|
8
|
+
* results render external entries with an `[external]` marker.
|
|
9
|
+
*/
|
|
10
|
+
import { containLocationUri, containUri } from "./safe-uri.js";
|
|
11
|
+
export const MAX_OUTPUT_BYTES = 100_000;
|
|
12
|
+
const PER_LOCATION_BUDGET = 200;
|
|
13
|
+
const PER_SYMBOL_BUDGET = 200;
|
|
14
|
+
const HOVER_TEXT_BUDGET = 8_000;
|
|
15
|
+
const CONTEXT_LINES = 1;
|
|
16
|
+
/** Final-pass byte truncation. Per-formatter inline budgets use
|
|
17
|
+
* `string.length` for cheap loop control (~UTF-16 code units), but
|
|
18
|
+
* the 100 KB cap is a wire-cost budget — bytes is the honest unit.
|
|
19
|
+
* CJK paths / symbol names are ~3× more bytes than chars, so a
|
|
20
|
+
* budget that mixed both would silently let through 3× the
|
|
21
|
+
* intended payload. (4.2 codex Round-2 SHOULD-FIX, mirrors 3.6 OTel's
|
|
22
|
+
* `Buffer.byteLength` choice.) */
|
|
23
|
+
function clampToBytes(text, marker) {
|
|
24
|
+
if (Buffer.byteLength(text, "utf8") <= MAX_OUTPUT_BYTES)
|
|
25
|
+
return text;
|
|
26
|
+
// Reserve room for the marker so the final string stays within budget.
|
|
27
|
+
const target = MAX_OUTPUT_BYTES - Buffer.byteLength(marker, "utf8");
|
|
28
|
+
let truncated = text;
|
|
29
|
+
while (Buffer.byteLength(truncated, "utf8") > target) {
|
|
30
|
+
truncated = truncated.slice(0, -1);
|
|
31
|
+
}
|
|
32
|
+
return truncated + marker;
|
|
33
|
+
}
|
|
34
|
+
/** Coerce a `Location | LocationLink` (or array of either) into a
|
|
35
|
+
* uniform `LspLocation[]`. The selection range is preferred for
|
|
36
|
+
* navigation when present (claude-code does the same). */
|
|
37
|
+
export function normalizeLocations(result) {
|
|
38
|
+
if (result === null || result === undefined)
|
|
39
|
+
return [];
|
|
40
|
+
const arr = Array.isArray(result) ? result : [result];
|
|
41
|
+
const out = [];
|
|
42
|
+
for (const x of arr) {
|
|
43
|
+
if (x && typeof x === "object") {
|
|
44
|
+
// LocationLink shape
|
|
45
|
+
if ("targetUri" in x && typeof x.targetUri === "string") {
|
|
46
|
+
const link = x;
|
|
47
|
+
out.push({ uri: link.targetUri, range: link.targetSelectionRange ?? link.targetRange });
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Location shape
|
|
51
|
+
if ("uri" in x && typeof x.uri === "string") {
|
|
52
|
+
out.push(x);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/** Group a flat location list by file path; drop entries outside
|
|
59
|
+
* the workspace; format `path:line:char` lines with truncation
|
|
60
|
+
* markers. */
|
|
61
|
+
export function formatLocations(locations, workspaceRoot, label) {
|
|
62
|
+
if (locations.length === 0)
|
|
63
|
+
return `No ${label.toLowerCase()} found`;
|
|
64
|
+
const grouped = new Map();
|
|
65
|
+
let omittedExternal = 0;
|
|
66
|
+
for (const loc of locations) {
|
|
67
|
+
const rel = containLocationUri(loc.uri, workspaceRoot);
|
|
68
|
+
if (rel === null) {
|
|
69
|
+
omittedExternal++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const entry = grouped.get(rel) ?? [];
|
|
73
|
+
entry.push({ line: loc.range.start.line + 1, character: loc.range.start.character + 1 });
|
|
74
|
+
grouped.set(rel, entry);
|
|
75
|
+
}
|
|
76
|
+
if (grouped.size === 0) {
|
|
77
|
+
return `${label}: 0 in workspace (${omittedExternal} outside workspace omitted)`;
|
|
78
|
+
}
|
|
79
|
+
const totalKept = Array.from(grouped.values()).reduce((s, e) => s + e.length, 0);
|
|
80
|
+
const totalFiles = grouped.size;
|
|
81
|
+
const lines = [];
|
|
82
|
+
lines.push(`${label}: ${totalKept} across ${totalFiles} file${totalFiles === 1 ? "" : "s"}${omittedExternal ? ` (${omittedExternal} outside workspace omitted)` : ""}:`);
|
|
83
|
+
lines.push("");
|
|
84
|
+
let used = Buffer.byteLength(lines.join("\n"), "utf8");
|
|
85
|
+
let omittedFiles = 0;
|
|
86
|
+
let omittedEntries = 0;
|
|
87
|
+
for (const [path, entries] of grouped) {
|
|
88
|
+
const header = `${path}:`;
|
|
89
|
+
const body = entries
|
|
90
|
+
.slice(0, PER_LOCATION_BUDGET)
|
|
91
|
+
.map((e) => ` Line ${e.line}:${e.character}`);
|
|
92
|
+
const extraInFile = entries.length - body.length;
|
|
93
|
+
const chunk = [header, ...body, ...(extraInFile > 0 ? [` …${extraInFile} more in this file`] : []), ""].join("\n");
|
|
94
|
+
const chunkBytes = Buffer.byteLength(chunk, "utf8");
|
|
95
|
+
if (chunkBytes + used > MAX_OUTPUT_BYTES) {
|
|
96
|
+
omittedFiles = totalFiles - lines.filter((l) => l.endsWith(":")).length;
|
|
97
|
+
omittedEntries = entries.length - body.length;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
lines.push(chunk);
|
|
101
|
+
used += chunkBytes + 1;
|
|
102
|
+
}
|
|
103
|
+
if (omittedFiles > 0 || omittedEntries > 0) {
|
|
104
|
+
lines.push(`…[truncated: ${omittedFiles} more file(s), ${omittedEntries} more entries]`);
|
|
105
|
+
}
|
|
106
|
+
return clampToBytes(lines.join("\n").trimEnd(), "\n…[truncated]");
|
|
107
|
+
}
|
|
108
|
+
/** Document/workspace symbol tree → indented list. Workspace symbols
|
|
109
|
+
* arrive flat (SymbolInformation); document symbols arrive
|
|
110
|
+
* hierarchical. Either way: count omitted nodes. */
|
|
111
|
+
export function formatSymbols(symbols, workspaceRoot, label) {
|
|
112
|
+
if (symbols.length === 0)
|
|
113
|
+
return `No ${label} found`;
|
|
114
|
+
const lines = [`${label}: ${symbols.length}`, ""];
|
|
115
|
+
let omitted = 0;
|
|
116
|
+
let used = Buffer.byteLength(lines.join("\n"), "utf8");
|
|
117
|
+
const render = (sym, depth) => {
|
|
118
|
+
const where = symbolLocation(sym);
|
|
119
|
+
const renderedPath = where ? renderPathWithMarker(where.uri, workspaceRoot) : "(no location)";
|
|
120
|
+
const line = where ? `:${where.range.start.line + 1}:${where.range.start.character + 1}` : "";
|
|
121
|
+
const text = `${" ".repeat(depth)}- ${sym.name}${where ? ` @ ${renderedPath}${line}` : ""}`;
|
|
122
|
+
const textBytes = Buffer.byteLength(text, "utf8");
|
|
123
|
+
if (used + textBytes > MAX_OUTPUT_BYTES)
|
|
124
|
+
return false;
|
|
125
|
+
lines.push(text);
|
|
126
|
+
used += textBytes + 1;
|
|
127
|
+
for (const child of sym.children ?? []) {
|
|
128
|
+
if (!render(child, depth + 1))
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
133
|
+
let i = 0;
|
|
134
|
+
for (; i < symbols.length && i < PER_SYMBOL_BUDGET; i++) {
|
|
135
|
+
if (!render(symbols[i], 0)) {
|
|
136
|
+
omitted = symbols.length - i;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (i >= PER_SYMBOL_BUDGET)
|
|
141
|
+
omitted = symbols.length - PER_SYMBOL_BUDGET;
|
|
142
|
+
if (omitted > 0)
|
|
143
|
+
lines.push(`…[truncated: ${omitted} more top-level symbols]`);
|
|
144
|
+
return clampToBytes(lines.join("\n").trimEnd(), "\n…[truncated]");
|
|
145
|
+
}
|
|
146
|
+
function symbolLocation(sym) {
|
|
147
|
+
if (sym.location)
|
|
148
|
+
return sym.location;
|
|
149
|
+
// DocumentSymbol carries range but no uri — caller would need to
|
|
150
|
+
// attach it. We don't support that here; return undefined and the
|
|
151
|
+
// formatter prints "(no location)".
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
function renderPathWithMarker(uri, workspaceRoot) {
|
|
155
|
+
const r = containUri(uri, workspaceRoot);
|
|
156
|
+
return r.external ? `[external] ${r.abs}` : r.rel ?? r.abs;
|
|
157
|
+
}
|
|
158
|
+
/** Hover content → trimmed plain text with byte-cap. */
|
|
159
|
+
export function formatHover(content) {
|
|
160
|
+
if (!content)
|
|
161
|
+
return "No hover information";
|
|
162
|
+
const text = extractHoverText(content);
|
|
163
|
+
if (!text)
|
|
164
|
+
return "No hover information";
|
|
165
|
+
if (Buffer.byteLength(text, "utf8") <= HOVER_TEXT_BUDGET)
|
|
166
|
+
return text;
|
|
167
|
+
// Truncate at the codepoint level so we don't split a UTF-8 character.
|
|
168
|
+
let truncated = text;
|
|
169
|
+
while (Buffer.byteLength(truncated, "utf8") > HOVER_TEXT_BUDGET) {
|
|
170
|
+
truncated = truncated.slice(0, -1);
|
|
171
|
+
}
|
|
172
|
+
return `${truncated}…[truncated]`;
|
|
173
|
+
}
|
|
174
|
+
function extractHoverText(content) {
|
|
175
|
+
if (typeof content === "string")
|
|
176
|
+
return content;
|
|
177
|
+
if (Array.isArray(content)) {
|
|
178
|
+
return content.map((c) => extractHoverText(c)).join("\n\n").trim();
|
|
179
|
+
}
|
|
180
|
+
if (typeof content === "object" && content !== null) {
|
|
181
|
+
const v = content.value;
|
|
182
|
+
if (typeof v === "string")
|
|
183
|
+
return v;
|
|
184
|
+
}
|
|
185
|
+
return "";
|
|
186
|
+
}
|
|
187
|
+
/** Single goToDefinition / goToImplementation pretty-print with
|
|
188
|
+
* context (matches claude-code shape). */
|
|
189
|
+
export function formatSingleLocation(loc, workspaceRoot, label, fileReader) {
|
|
190
|
+
if (!loc)
|
|
191
|
+
return `${label}: not found`;
|
|
192
|
+
const rel = containLocationUri(loc.uri, workspaceRoot);
|
|
193
|
+
if (rel === null)
|
|
194
|
+
return `${label}: outside workspace (omitted)`;
|
|
195
|
+
const c = containUri(loc.uri, workspaceRoot);
|
|
196
|
+
const line = loc.range.start.line + 1;
|
|
197
|
+
const character = loc.range.start.character + 1;
|
|
198
|
+
const header = `${label} in ${rel}:${line}:${character}`;
|
|
199
|
+
let context = "";
|
|
200
|
+
try {
|
|
201
|
+
const content = fileReader(c.abs);
|
|
202
|
+
if (content) {
|
|
203
|
+
const allLines = content.split(/\r?\n/);
|
|
204
|
+
const startIdx = Math.max(0, line - 1 - CONTEXT_LINES);
|
|
205
|
+
const endIdx = Math.min(allLines.length, line + CONTEXT_LINES);
|
|
206
|
+
const ctxLines = [];
|
|
207
|
+
for (let i = startIdx; i < endIdx; i++) {
|
|
208
|
+
const prefix = i === line - 1 ? "> " : " ";
|
|
209
|
+
ctxLines.push(`${prefix}${i + 1} | ${allLines[i]}`);
|
|
210
|
+
}
|
|
211
|
+
context = "\n\n" + ctxLines.join("\n");
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
/* swallow — header alone is still useful */
|
|
216
|
+
}
|
|
217
|
+
return header + context;
|
|
218
|
+
}
|
|
219
|
+
/** Call-hierarchy incoming/outgoing pretty-print. */
|
|
220
|
+
export function formatIncomingCalls(items, workspaceRoot) {
|
|
221
|
+
if (items.length === 0)
|
|
222
|
+
return "No incoming calls found";
|
|
223
|
+
const lines = [`Incoming calls: ${items.length}`, ""];
|
|
224
|
+
for (const item of items.slice(0, PER_SYMBOL_BUDGET)) {
|
|
225
|
+
const path = renderPathWithMarker(item.from.uri, workspaceRoot);
|
|
226
|
+
const line = item.from.range.start.line + 1;
|
|
227
|
+
lines.push(`- ${item.from.name} @ ${path}:${line} (${item.fromRanges.length} call site${item.fromRanges.length === 1 ? "" : "s"})`);
|
|
228
|
+
}
|
|
229
|
+
if (items.length > PER_SYMBOL_BUDGET) {
|
|
230
|
+
lines.push(`…[truncated: ${items.length - PER_SYMBOL_BUDGET} more callers]`);
|
|
231
|
+
}
|
|
232
|
+
return lines.join("\n");
|
|
233
|
+
}
|
|
234
|
+
export function formatOutgoingCalls(items, workspaceRoot) {
|
|
235
|
+
if (items.length === 0)
|
|
236
|
+
return "No outgoing calls found";
|
|
237
|
+
const lines = [`Outgoing calls: ${items.length}`, ""];
|
|
238
|
+
for (const item of items.slice(0, PER_SYMBOL_BUDGET)) {
|
|
239
|
+
const path = renderPathWithMarker(item.to.uri, workspaceRoot);
|
|
240
|
+
const line = item.to.range.start.line + 1;
|
|
241
|
+
lines.push(`- ${item.to.name} @ ${path}:${line} (${item.fromRanges.length} call site${item.fromRanges.length === 1 ? "" : "s"})`);
|
|
242
|
+
}
|
|
243
|
+
if (items.length > PER_SYMBOL_BUDGET) {
|
|
244
|
+
lines.push(`…[truncated: ${items.length - PER_SYMBOL_BUDGET} more callees]`);
|
|
245
|
+
}
|
|
246
|
+
return lines.join("\n");
|
|
247
|
+
}
|
|
248
|
+
export function formatCallHierarchyItems(items, workspaceRoot) {
|
|
249
|
+
if (items.length === 0)
|
|
250
|
+
return "No call hierarchy items at this position";
|
|
251
|
+
const lines = [`Call hierarchy items: ${items.length}`, ""];
|
|
252
|
+
for (const item of items) {
|
|
253
|
+
const path = renderPathWithMarker(item.uri, workspaceRoot);
|
|
254
|
+
const line = item.range.start.line + 1;
|
|
255
|
+
lines.push(`- ${item.name} @ ${path}:${line}`);
|
|
256
|
+
}
|
|
257
|
+
return lines.join("\n");
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lsp/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (4.2) Public surface of `@chances-ai/lsp`.
|
|
3
|
+
*
|
|
4
|
+
* Kept narrow — the tool wrapper imports `LspHost` + `loadLspHost`
|
|
5
|
+
* via type-only references, plus the error class for diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
export { LspHost, type LspHostOptions } from "./manager.js";
|
|
8
|
+
export { LspError, type LspErrorCode } from "./errors.js";
|
|
9
|
+
export { ALL_OPS, type LspOp, type LspOpRequest, type LspOpResult, type LspServerConfig, type ResolvedServer, type Logger, type LspPermissionResolver, } from "./types.js";
|
|
10
|
+
export { BUILTIN_DEFAULTS, resolveServers, pickServerForExtension } from "./config.js";
|
|
11
|
+
export { detectBinary, clearDetectCache } from "./detect.js";
|
|
12
|
+
export { loadVscodeJsonRpc, __setLoaderForTest, __resetLoaderForTest } from "./lazy-load.js";
|
|
13
|
+
export { executeOp } from "./ops.js";
|
|
14
|
+
export { containUri, containLocationUri } from "./safe-uri.js";
|
|
15
|
+
import { LspHost, type LspHostOptions } from "./manager.js";
|
|
16
|
+
import type { LspOpRequest, LspOpResult } from "./types.js";
|
|
17
|
+
/** Convenience wrapper around `LspHost` + `executeOp` so callers
|
|
18
|
+
* (the tool wrapper) get a single `host.execute(req)` method
|
|
19
|
+
* matching the design's contract.
|
|
20
|
+
*
|
|
21
|
+
* `loadLspHost` returns `undefined` when the optional peer dep
|
|
22
|
+
* (`vscode-jsonrpc`) is absent and the caller did not inject an
|
|
23
|
+
* `instanceFactory` (production path). Callers must handle the
|
|
24
|
+
* absent case by surfacing `LSP not available` to the model. */
|
|
25
|
+
export interface ExecutableLspHost extends LspHost {
|
|
26
|
+
execute(req: LspOpRequest): Promise<LspOpResult>;
|
|
27
|
+
}
|
|
28
|
+
export declare function loadLspHost(opts: LspHostOptions & {
|
|
29
|
+
workspaceRoot: string;
|
|
30
|
+
}): Promise<ExecutableLspHost | undefined>;
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lsp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,OAAO,EACP,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;iEAOiE;AACjE,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAClD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAY1H"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (4.2) Public surface of `@chances-ai/lsp`.
|
|
3
|
+
*
|
|
4
|
+
* Kept narrow — the tool wrapper imports `LspHost` + `loadLspHost`
|
|
5
|
+
* via type-only references, plus the error class for diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
export { LspHost } from "./manager.js";
|
|
8
|
+
export { LspError } from "./errors.js";
|
|
9
|
+
export { ALL_OPS, } from "./types.js";
|
|
10
|
+
export { BUILTIN_DEFAULTS, resolveServers, pickServerForExtension } from "./config.js";
|
|
11
|
+
export { detectBinary, clearDetectCache } from "./detect.js";
|
|
12
|
+
export { loadVscodeJsonRpc, __setLoaderForTest, __resetLoaderForTest } from "./lazy-load.js";
|
|
13
|
+
export { executeOp } from "./ops.js";
|
|
14
|
+
export { containUri, containLocationUri } from "./safe-uri.js";
|
|
15
|
+
import { LspHost } from "./manager.js";
|
|
16
|
+
import { executeOp } from "./ops.js";
|
|
17
|
+
export async function loadLspHost(opts) {
|
|
18
|
+
const { workspaceRoot, ...hostOpts } = opts;
|
|
19
|
+
// Probe the peer once at host construction so we surface a single
|
|
20
|
+
// clear failure instead of every per-call surfacing it.
|
|
21
|
+
if (!hostOpts.instanceFactory) {
|
|
22
|
+
const { loadVscodeJsonRpc } = await import("./lazy-load.js");
|
|
23
|
+
const peer = await loadVscodeJsonRpc();
|
|
24
|
+
if (!peer)
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const host = new LspHost(hostOpts);
|
|
28
|
+
host.execute = (req) => executeOp(host, req, workspaceRoot);
|
|
29
|
+
return host;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lsp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,OAAO,GAQR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAerC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgD;IAChF,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5C,kEAAkE;IAClE,wDAAwD;IACxD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC9B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAsB,CAAC;IACxD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (4.2) LspServerInstance — one process + connection + open-doc LRU
|
|
3
|
+
* per `(command, cwd)` cache slot.
|
|
4
|
+
*
|
|
5
|
+
* State machine: 'stopped' → 'starting' → 'running' → ('stopping' |
|
|
6
|
+
* 'error' → 'starting' (up to maxRestarts) → 'failed').
|
|
7
|
+
*
|
|
8
|
+
* Folded codex Round-1 findings:
|
|
9
|
+
* - MUST-FIX #5: PendingRegistry; crash settles all pending before
|
|
10
|
+
* any restart; cancellation throws AppError(Cancelled).
|
|
11
|
+
* - SHOULD-FIX #1: -32801 content-modified → 3 retries 500/1000/
|
|
12
|
+
* 2000 ms exp backoff; signal-aware between sleeps.
|
|
13
|
+
* - SHOULD-FIX #2: bounded open-doc LRU per instance; didClose on
|
|
14
|
+
* evict and on dispose.
|
|
15
|
+
* - NICE #2: capabilities.workspace.workspaceFolders = false; still
|
|
16
|
+
* pass workspaceFolders array in initialize params.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn, type ChildProcess } from "node:child_process";
|
|
19
|
+
import { type Connection } from "./rpc.js";
|
|
20
|
+
import type { Logger, LspServerConfig } from "./types.js";
|
|
21
|
+
export type InstanceState = "stopped" | "starting" | "running" | "stopping" | "error" | "failed";
|
|
22
|
+
export interface InstanceOptions {
|
|
23
|
+
name: string;
|
|
24
|
+
command: string;
|
|
25
|
+
args: readonly string[];
|
|
26
|
+
cwd: string;
|
|
27
|
+
config: LspServerConfig;
|
|
28
|
+
logger: Logger;
|
|
29
|
+
/** Test seam — override the connection factory. Must return an
|
|
30
|
+
* object satisfying `Connection`. When omitted, the real
|
|
31
|
+
* vscode-jsonrpc transport is built from the child process pipes. */
|
|
32
|
+
connectionFactory?: (child: ChildProcess) => Promise<Connection>;
|
|
33
|
+
/** Test seam — override spawn. */
|
|
34
|
+
spawnFn?: typeof spawn;
|
|
35
|
+
}
|
|
36
|
+
export declare class LspServerInstance {
|
|
37
|
+
readonly opts: InstanceOptions;
|
|
38
|
+
state: InstanceState;
|
|
39
|
+
restartCount: number;
|
|
40
|
+
lastActivityAt: number;
|
|
41
|
+
private child?;
|
|
42
|
+
private conn?;
|
|
43
|
+
private startPromise?;
|
|
44
|
+
private readonly pending;
|
|
45
|
+
private readonly openDocs;
|
|
46
|
+
private disposed;
|
|
47
|
+
constructor(opts: InstanceOptions);
|
|
48
|
+
get activeRequests(): number;
|
|
49
|
+
isIdle(): boolean;
|
|
50
|
+
/** Ensures the server is `running`. Idempotent — concurrent callers
|
|
51
|
+
* share the in-flight startup promise. */
|
|
52
|
+
ensureStarted(signal?: AbortSignal): Promise<void>;
|
|
53
|
+
private start;
|
|
54
|
+
private initialize;
|
|
55
|
+
private onChildClose;
|
|
56
|
+
/** Sends a request. Handles the `-32801 content modified` retry
|
|
57
|
+
* loop with exponential backoff (codex Round-1 SHOULD-FIX #1).
|
|
58
|
+
* The total wallclock is bounded by the request-timeout budget
|
|
59
|
+
* (codex Round-2 SHOULD-FIX #1 — without the bound, three retries
|
|
60
|
+
* with fresh 30 s each can spend ~93 s on one request). */
|
|
61
|
+
request<R>(method: string, params: unknown, signal: AbortSignal): Promise<R>;
|
|
62
|
+
/** Opens `path` on the server if not already open. Evicts the oldest
|
|
63
|
+
* open doc when the LRU is full (codex Round-1 SHOULD-FIX #2;
|
|
64
|
+
* Round-2 SHOULD-FIX #2 — Map#set on an existing key keeps the
|
|
65
|
+
* ORIGINAL insertion position, so we must `delete`-then-`set` to
|
|
66
|
+
* bring the hit to the end of the access order). */
|
|
67
|
+
ensureDocOpen(absPath: string, signal: AbortSignal): Promise<void>;
|
|
68
|
+
/** Graceful shutdown: `shutdown` request, `exit` notification, 2 s
|
|
69
|
+
* deadline, SIGTERM, 100 ms, SIGKILL. Idempotent. */
|
|
70
|
+
dispose(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/lsp/instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAM9D,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf;;0EAEsE;IACtE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAeD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAa;IACjC,YAAY,SAAK;IACjB,cAAc,SAAc;IAE5B,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,eAAe;IAIjC,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,MAAM,IAAI,OAAO;IAIjB;+CAC2C;IACrC,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAgB1C,KAAK;YAqHL,UAAU;IAwCxB,OAAO,CAAC,YAAY;IA4BpB;;;;gEAI4D;IACtD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAsClF;;;;yDAIqD;IAC/C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CxE;0DACsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkD/B"}
|