Implements the LSP capability seam RFC as three packages: dsh-lsp (the ctx.lsp interface — provider registry by branded id + exclusive extension mapping, per-query order-independent selection, closed request/result vocabulary, LspError taxonomy), dsh-lsp-local (a generic stdio language-server provider — Content-Length JSON-RPC framing, per-(provider, workspace) process single-flight, transient didOpen/query/didClose, an abortable per-instance queue, UTF-16 negotiation, host-namespace source reads outside ctx.fs, and bounded shutdown/kill teardown), and dsh-tool-lsp (the model-facing lsp tool — four operations, one-based UTF-16 cursor conversion, workspace-grouped location rendering, hover capping, a required session workspace, and a timeout budget). Why: an agent had text search and file reads but no way to identify a program symbol — follow an alias, connect an interface to implementations, or read an inferred type — before changing code. Splitting model contract, seam, and local subprocess behavior keeps the four semantic queries stable across future remote or sandbox-native providers without leaking a JSON-RPC escape hatch.
129 lines
4.7 KiB
JSON
129 lines
4.7 KiB
JSON
{
|
|
"$schema": "https://unpkg.com/knip@5/schema.json",
|
|
"exclude": ["duplicates"],
|
|
"ignoreBinaries": ["bwrap", "sandbox-exec"],
|
|
"ignoreWorkspaces": ["vendor/*", "python/sdk-runtime"],
|
|
"workspaces": {
|
|
".": {
|
|
"entry": [
|
|
"examples/echo-agent/src/*.ts",
|
|
"examples/echo-agent/tests/**/*.e2e.ts",
|
|
"examples/coding-agent/tests/**/*.e2e.ts",
|
|
"examples/cordis-agent/tests/**/*.e2e.ts",
|
|
"examples/acp-agent/tests/**/*.e2e.ts",
|
|
"examples/*/tests/**/*.snapshot.ts"
|
|
],
|
|
"project": ["scripts/**/*.ts", "examples/**/*.ts"]
|
|
},
|
|
"packages/*/*": {
|
|
"entry": ["tests/**/*.spec.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/bash/bash-sandbox": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/context/time-context": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/sandbox/sandbox-local": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/util/brand": {
|
|
"project": ["src/**/*.ts"],
|
|
"ignoreDependencies": ["cordis"]
|
|
},
|
|
"packages/util/timeout": {
|
|
"entry": ["tests/**/*.spec.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["cordis"]
|
|
},
|
|
"packages/support/acp-snapshot": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/fixtures/fake-acp-agent.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["cordis"]
|
|
},
|
|
"packages/support/loader-smoke": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/fixtures/*.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["cordis"]
|
|
},
|
|
"packages/core/agent-loop": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/code-runtime/code-runtime-worker": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/llm/llm-deepseek": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/llm/llm-pi-ai": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/web/web-search-exa": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/web/web-search-perplexity": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/workflow/workflow-workerthread": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/web/web-search-deepseek": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/ui/acp-agent": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/ui/stdio-agent": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/ui/stdio": {
|
|
"entry": ["tests/**/*.spec.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/ui/jsonrpc-agent": {
|
|
"project": ["src/**/*.ts"]
|
|
},
|
|
"packages/subagent/subagent-spawn": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/subagent/subagent-acp": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts", "tests/mock-acp-server.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/subagent/subagent-subprocess": {
|
|
"entry": ["tests/**/*.spec.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["cordis"]
|
|
},
|
|
"packages/fs/tool-fs": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"]
|
|
},
|
|
"packages/mcp/mcp-client": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts", "tests/fixture-server.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["@modelcontextprotocol/server-everything", "@modelcontextprotocol/server-filesystem"]
|
|
},
|
|
"packages/lsp/lsp-local": {
|
|
"entry": ["tests/**/*.spec.ts", "tests/**/*.e2e.ts", "tests/fixture-server.ts"],
|
|
"project": ["src/**/*.ts", "tests/**/*.ts"],
|
|
"ignoreDependencies": ["typescript-language-server"]
|
|
}
|
|
}
|
|
}
|