codesift-mcp 0.17.0 → 0.19.2
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/cli/commands-daemon.d.ts.map +1 -1
- package/dist/cli/commands-daemon.js +32 -0
- package/dist/cli/commands-daemon.js.map +1 -1
- package/dist/cli/commands-maintenance.d.ts.map +1 -1
- package/dist/cli/commands-maintenance.js +173 -3
- package/dist/cli/commands-maintenance.js.map +1 -1
- package/dist/cli/hooks/pre-compact.d.ts.map +1 -1
- package/dist/cli/hooks/pre-compact.js +4 -0
- package/dist/cli/hooks/pre-compact.js.map +1 -1
- package/dist/cli/hooks/session.d.ts.map +1 -1
- package/dist/cli/hooks/session.js +5 -0
- package/dist/cli/hooks/session.js.map +1 -1
- package/dist/cli/hooks/wiki.d.ts +13 -0
- package/dist/cli/hooks/wiki.d.ts.map +1 -1
- package/dist/cli/hooks/wiki.js +19 -2
- package/dist/cli/hooks/wiki.js.map +1 -1
- package/dist/cli/owner-only-file.d.ts +9 -0
- package/dist/cli/owner-only-file.d.ts.map +1 -1
- package/dist/cli/owner-only-file.js +40 -8
- package/dist/cli/owner-only-file.js.map +1 -1
- package/dist/cli/service.d.ts.map +1 -1
- package/dist/cli/service.js +7 -1
- package/dist/cli/service.js.map +1 -1
- package/dist/cli/setup/claude.js +3 -3
- package/dist/cli/setup/claude.js.map +1 -1
- package/dist/cli/setup/codex.js +4 -4
- package/dist/cli/setup/codex.js.map +1 -1
- package/dist/cli/setup/fs.d.ts +2 -0
- package/dist/cli/setup/fs.d.ts.map +1 -1
- package/dist/cli/setup/fs.js +4 -1
- package/dist/cli/setup/fs.js.map +1 -1
- package/dist/cli/setup/gemini.js +4 -4
- package/dist/cli/setup/gemini.js.map +1 -1
- package/dist/cli/setup/hooks.d.ts +10 -0
- package/dist/cli/setup/hooks.d.ts.map +1 -1
- package/dist/cli/setup/hooks.js +25 -3
- package/dist/cli/setup/hooks.js.map +1 -1
- package/dist/instructions.d.ts +22 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +61 -1
- package/dist/instructions.js.map +1 -1
- package/dist/lsp/lsp-client.d.ts +1 -1
- package/dist/lsp/lsp-client.d.ts.map +1 -1
- package/dist/lsp/lsp-client.js +2 -1
- package/dist/lsp/lsp-client.js.map +1 -1
- package/dist/lsp/lsp-manager.d.ts.map +1 -1
- package/dist/lsp/lsp-manager.js +10 -2
- package/dist/lsp/lsp-manager.js.map +1 -1
- package/dist/lsp/lsp-servers.d.ts +7 -0
- package/dist/lsp/lsp-servers.d.ts.map +1 -1
- package/dist/lsp/lsp-servers.js +78 -0
- package/dist/lsp/lsp-servers.js.map +1 -1
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +8 -2
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/register-tool-groups/core/symbols.d.ts.map +1 -1
- package/dist/register-tool-groups/core/symbols.js +71 -6
- package/dist/register-tool-groups/core/symbols.js.map +1 -1
- package/dist/register-tools/discovery.d.ts +7 -0
- package/dist/register-tools/discovery.d.ts.map +1 -1
- package/dist/register-tools/discovery.js +8 -1
- package/dist/register-tools/discovery.js.map +1 -1
- package/dist/search/bm25-store.d.ts +10 -0
- package/dist/search/bm25-store.d.ts.map +1 -1
- package/dist/search/bm25-store.js +140 -10
- package/dist/search/bm25-store.js.map +1 -1
- package/dist/search/bm25.d.ts +22 -0
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +43 -0
- package/dist/search/bm25.js.map +1 -1
- package/dist/server-helpers/cache-report.d.ts +36 -0
- package/dist/server-helpers/cache-report.d.ts.map +1 -0
- package/dist/server-helpers/cache-report.js +26 -0
- package/dist/server-helpers/cache-report.js.map +1 -0
- package/dist/server-helpers/health-vitals.d.ts.map +1 -1
- package/dist/server-helpers/health-vitals.js +19 -11
- package/dist/server-helpers/health-vitals.js.map +1 -1
- package/dist/server-helpers/response-budget.d.ts +24 -0
- package/dist/server-helpers/response-budget.d.ts.map +1 -0
- package/dist/server-helpers/response-budget.js +29 -0
- package/dist/server-helpers/response-budget.js.map +1 -0
- package/dist/server-helpers/response-hints.d.ts.map +1 -1
- package/dist/server-helpers/response-hints.js +43 -0
- package/dist/server-helpers/response-hints.js.map +1 -1
- package/dist/server-helpers/shown-source.d.ts +59 -0
- package/dist/server-helpers/shown-source.d.ts.map +1 -0
- package/dist/server-helpers/shown-source.js +175 -0
- package/dist/server-helpers/shown-source.js.map +1 -0
- package/dist/server-helpers/stdio-envelope.d.ts +31 -0
- package/dist/server-helpers/stdio-envelope.d.ts.map +1 -0
- package/dist/server-helpers/stdio-envelope.js +67 -0
- package/dist/server-helpers/stdio-envelope.js.map +1 -0
- package/dist/server-helpers.d.ts +7 -0
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +51 -10
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +107 -45
- package/dist/server.js.map +1 -1
- package/dist/storage/_shared.d.ts +25 -0
- package/dist/storage/_shared.d.ts.map +1 -1
- package/dist/storage/_shared.js +39 -6
- package/dist/storage/_shared.js.map +1 -1
- package/dist/storage/session-state.d.ts +7 -0
- package/dist/storage/session-state.d.ts.map +1 -1
- package/dist/storage/session-state.js +3 -0
- package/dist/storage/session-state.js.map +1 -1
- package/dist/storage/shared-embedding-cache.d.ts.map +1 -1
- package/dist/storage/shared-embedding-cache.js +153 -2
- package/dist/storage/shared-embedding-cache.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts +11 -0
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +18 -0
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/conversation-cache.d.ts +23 -3
- package/dist/tools/conversation-cache.d.ts.map +1 -1
- package/dist/tools/conversation-cache.js +141 -4
- package/dist/tools/conversation-cache.js.map +1 -1
- package/dist/tools/conversation-index-tools.d.ts +12 -0
- package/dist/tools/conversation-index-tools.d.ts.map +1 -1
- package/dist/tools/conversation-index-tools.js +315 -4
- package/dist/tools/conversation-index-tools.js.map +1 -1
- package/dist/tools/conversation-search-tools.d.ts +0 -5
- package/dist/tools/conversation-search-tools.d.ts.map +1 -1
- package/dist/tools/conversation-search-tools.js +77 -6
- package/dist/tools/conversation-search-tools.js.map +1 -1
- package/dist/tools/explore-tools.d.ts +9 -0
- package/dist/tools/explore-tools.d.ts.map +1 -0
- package/dist/tools/explore-tools.js +177 -0
- package/dist/tools/explore-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +7 -0
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +36 -0
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/index-tools/state.d.ts +15 -1
- package/dist/tools/index-tools/state.d.ts.map +1 -1
- package/dist/tools/index-tools/state.js +25 -39
- package/dist/tools/index-tools/state.js.map +1 -1
- package/dist/tools/insights-tools.d.ts.map +1 -1
- package/dist/tools/insights-tools.js +6 -3
- package/dist/tools/insights-tools.js.map +1 -1
- package/dist/utils/import-graph/edge-cache.d.ts.map +1 -1
- package/dist/utils/import-graph/edge-cache.js +9 -1
- package/dist/utils/import-graph/edge-cache.js.map +1 -1
- package/package.json +3 -3
- package/rules/codesift.md +19 -0
- package/rules/codesift.mdc +19 -0
- package/rules/codex.md +19 -0
- package/rules/gemini.md +19 -0
package/dist/instructions.js
CHANGED
|
@@ -34,6 +34,14 @@ ALWAYS: repo auto-resolves, skip list_repos. file_pattern when scoped. get_symbo
|
|
|
34
34
|
for 2+. Batch 3+ into codebase_retrieval. token_budget to cap. index_file after edits.
|
|
35
35
|
trace_route for endpoints. codebase_retrieval(type:semantic) for conceptual queries.
|
|
36
36
|
|
|
37
|
+
LANGUAGES: full symbols incl. KOTLIN (.kt/.kts/.gradle.kts) + TS/TSX/JS/Python/Go/Rust/PHP;
|
|
38
|
+
generic for Java/Ruby/CSS. text_stub = NO symbols, but search_text/get_file_tree/scan_secrets
|
|
39
|
+
still work: swift, dart, scala, clojure, elixir, lua, zig, nim, .gradle, sbt, html, config.
|
|
40
|
+
Verify with index_status, never assume. analyze_complexity is regex in EVERY language.
|
|
41
|
+
|
|
42
|
+
STALE INDEX → index_folder(path=<root>) ONCE. commit.matches=false or files_changed=N is an
|
|
43
|
+
instruction to reindex, NEVER a reason to skip CodeSift and fall back to grep/find.
|
|
44
|
+
|
|
37
45
|
NEVER: index_folder if already indexed — EXCEPT in a linked git worktree, where the
|
|
38
46
|
repo reported as indexed is the PARENT checkout, not your tree: index_folder(path=<cwd>)
|
|
39
47
|
once, and treat H19 or a file count that does not match your tree as the signal.
|
|
@@ -109,7 +117,59 @@ bytes returned, for the same information.
|
|
|
109
117
|
|
|
110
118
|
plan_turn(query="<your task>") ranks tools, symbols and files for a task and reveals whatever else
|
|
111
119
|
is needed; it is the entry point for anything not listed above.`;
|
|
120
|
+
/**
|
|
121
|
+
* The DEFAULT `instructions` field — must fit the host's cap.
|
|
122
|
+
*
|
|
123
|
+
* Claude Code 2.1.280 truncates MCP server instructions at 2,048 characters
|
|
124
|
+
* (`CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH`). CODESIFT_INSTRUCTIONS is ~6.5K, so every session got
|
|
125
|
+
* its first third — the catalog preamble — and lost ALWAYS/NEVER, the stale-index rule and the hint
|
|
126
|
+
* legend: exactly the lines that stop an agent from abandoning the server for grep. Shipping a field
|
|
127
|
+
* the host cuts is worse than shipping a short one, because nobody chose what survives the cut.
|
|
128
|
+
*
|
|
129
|
+
* This one keeps the rules that change a decision and points at `initial_instructions` for the full
|
|
130
|
+
* manual, which is a tool result and therefore not subject to the cap.
|
|
131
|
+
* CODESIFT_FULL_INSTRUCTIONS=1 restores the long field for a host known not to truncate it.
|
|
132
|
+
*/
|
|
133
|
+
export const CODESIFT_INSTRUCTIONS_SERVER = `CodeSift — code intelligence over an indexed repo (symbols, call graph, BM25+semantic search, framework analyzers).
|
|
134
|
+
|
|
135
|
+
PREFER these over Grep/Glob/Bash(grep|find|rg) and over reading whole files:
|
|
136
|
+
search_text(query, file_pattern=) · search_symbols(query, kind=, include_source=true)
|
|
137
|
+
get_file_outline(path) · get_file_tree(name_pattern=) · find_references · trace_call_chain
|
|
138
|
+
impact_analysis(since=) for blast radius · codebase_retrieval(queries=[…], token_budget=) to batch 3+
|
|
139
|
+
|
|
140
|
+
ONE call beats a sequence: find_and_show(query="<name>", include_refs=true) returns definition + usages.
|
|
141
|
+
plan_turn(query="<task>") ranks tools/symbols/files and reveals hidden tools — the entry point for anything not listed.
|
|
142
|
+
initial_instructions() returns the full manual (tool mapping, hint codes H1–H19, framework tools).
|
|
143
|
+
|
|
144
|
+
ALWAYS: repo resolves from CWD — never call list_repos. Pass file_pattern when scope is known. index_file after edits.
|
|
145
|
+
STALE INDEX (commit.matches=false, files_changed=N) → index_folder(path=<root>) once. Never a reason to fall back to grep.
|
|
146
|
+
WORKTREE: in a linked git worktree the "indexed" repo is the PARENT checkout — index_folder(path=<cwd>) once. H19 in a response means the same.
|
|
147
|
+
Hint codes (H1…) in responses are instructions: act on them.`;
|
|
148
|
+
/** Hard cap the default field must stay under (Claude Code's default MCP instructions cap). */
|
|
149
|
+
export const HOST_INSTRUCTIONS_CHAR_CAP = 2048;
|
|
150
|
+
/**
|
|
151
|
+
* Instructions for CODESIFT_TOOL_SURFACE=single. The default field names a dozen tools that this
|
|
152
|
+
* surface does not register, so an agent on it would be told to call tools it cannot reach.
|
|
153
|
+
*/
|
|
154
|
+
export const CODESIFT_INSTRUCTIONS_SINGLE = `CodeSift — code intelligence over an indexed repo.
|
|
155
|
+
|
|
156
|
+
explore(query) is the one call for "where is X and how does it connect": it returns the best-matching
|
|
157
|
+
symbols with full source, their direct callers and callees, and the other matches as locations.
|
|
158
|
+
Prefer it over Grep/Glob/Read for finding and understanding code. A repeat of unchanged source comes
|
|
159
|
+
back as a one-line pointer; repeat the call with full_source=true only if you no longer have it.
|
|
160
|
+
|
|
161
|
+
search_text(query, file_pattern=) is for literal strings, error messages and config values.
|
|
162
|
+
index_file(path) after editing a file keeps answers current. The repo resolves from the working
|
|
163
|
+
directory. A stale index is a reason to reindex, never to fall back to grep.`;
|
|
112
164
|
export function resolveInstructions() {
|
|
113
|
-
|
|
165
|
+
// The surface decides first: brief and full both name tools the single surface does not register.
|
|
166
|
+
if (process.env["CODESIFT_TOOL_SURFACE"] === "single" && !process.env["CODESIFT_VISIBLE_TOOLS"]) {
|
|
167
|
+
return CODESIFT_INSTRUCTIONS_SINGLE;
|
|
168
|
+
}
|
|
169
|
+
if (process.env["CODESIFT_BRIEF_INSTRUCTIONS"] === "1")
|
|
170
|
+
return CODESIFT_INSTRUCTIONS_BRIEF;
|
|
171
|
+
if (process.env["CODESIFT_FULL_INSTRUCTIONS"] === "1")
|
|
172
|
+
return CODESIFT_INSTRUCTIONS;
|
|
173
|
+
return CODESIFT_INSTRUCTIONS_SERVER;
|
|
114
174
|
}
|
|
115
175
|
//# sourceMappingURL=instructions.js.map
|
package/dist/instructions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFpC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;gEAgBqB,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;6DAciB,CAAC;AAE9D,+FAA+F;AAC/F,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;6EASiC,CAAC;AAE9E,MAAM,UAAU,mBAAmB;IACjC,kGAAkG;IAClG,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChG,OAAO,4BAA4B,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,GAAG;QAAE,OAAO,2BAA2B,CAAC;IAC3F,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG;QAAE,OAAO,qBAAqB,CAAC;IACpF,OAAO,4BAA4B,CAAC;AACtC,CAAC"}
|
package/dist/lsp/lsp-client.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare class LspClient {
|
|
|
11
11
|
private buffer;
|
|
12
12
|
private openFiles;
|
|
13
13
|
constructor(process: ChildProcess);
|
|
14
|
-
initialize(rootUri: string): Promise<unknown>;
|
|
14
|
+
initialize(rootUri: string, initializationOptions?: Record<string, unknown>): Promise<unknown>;
|
|
15
15
|
request<T = unknown>(method: string, params: object): Promise<T>;
|
|
16
16
|
notify(method: string, params: object): void;
|
|
17
17
|
openFile(uri: string, content: string, languageId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-client.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG;IAC3D,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;CAChC,CA4BA;AAQD,qBAAa,SAAS;IAMR,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAqB;IAEtC,YAAoB,OAAO,EAAE,YAAY,EAYxC;IAEK,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"lsp-client.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG;IAC3D,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;CAChC,CA4BA;AAQD,qBAAa,SAAS;IAMR,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAqB;IAEtC,YAAoB,OAAO,EAAE,YAAY,EAYxC;IAEK,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnG;IAEK,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAarE;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3C;IAEK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9E;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9B;IAED,OAAO,CAAC,MAAM;CAmBf"}
|
package/dist/lsp/lsp-client.js
CHANGED
|
@@ -49,10 +49,11 @@ export class LspClient {
|
|
|
49
49
|
this.pending.clear();
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
-
async initialize(rootUri) {
|
|
52
|
+
async initialize(rootUri, initializationOptions) {
|
|
53
53
|
const result = await this.request("initialize", {
|
|
54
54
|
processId: process.pid,
|
|
55
55
|
rootUri,
|
|
56
|
+
...(initializationOptions ? { initializationOptions } : {}),
|
|
56
57
|
capabilities: {
|
|
57
58
|
textDocument: {
|
|
58
59
|
references: { dynamicRegistration: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,mBAAmB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA2B;IAIxD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,MAAM;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK;YAAE,MAAM;QAElB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;QAE1C,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM;QAEnC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QACD,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAQD,MAAM,OAAO,SAAS;IAMA,OAAO;IALnB,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,YAAoB,OAAqB;uBAArB,OAAO;QACzB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,qCAAqC;QACvC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;
|
|
1
|
+
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-manager.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,SAAS,CAA+C;IAEhE,cAGC;IAEK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"lsp-manager.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,SAAS,CAA+C;IAEhE,cAGC;IAEK,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgD7E;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7C;IAED,OAAO,CAAC,QAAQ;IAUV,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAU9B;CACF;AAID,wBAAgB,aAAa,IAAI,UAAU,CAG1C"}
|
package/dist/lsp/lsp-manager.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
import { LspClient } from "./lsp-client.js";
|
|
4
|
-
import { getLspConfigForLanguage, isLspAvailable } from "./lsp-servers.js";
|
|
4
|
+
import { getLspConfigForLanguage, isLspAvailable, resolveTsserverPath } from "./lsp-servers.js";
|
|
5
5
|
const IDLE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
6
6
|
const REAP_INTERVAL_MS = 60 * 1000;
|
|
7
7
|
export class LspManager {
|
|
@@ -31,7 +31,15 @@ export class LspManager {
|
|
|
31
31
|
});
|
|
32
32
|
const client = new LspClient(proc);
|
|
33
33
|
const rootUri = pathToFileURL(rootPath).href;
|
|
34
|
-
|
|
34
|
+
// A workspace without node_modules (a worktree tested on the remote farm) has no TypeScript
|
|
35
|
+
// for the server to find; point it at one explicitly. See resolveTsserverPath.
|
|
36
|
+
let initOptions = lspInfo.config.initOptions;
|
|
37
|
+
if (lspInfo.name === "typescript") {
|
|
38
|
+
const tsserver = resolveTsserverPath(rootPath);
|
|
39
|
+
if (tsserver)
|
|
40
|
+
initOptions = { ...initOptions, tsserver: { path: tsserver } };
|
|
41
|
+
}
|
|
42
|
+
await client.initialize(rootUri, initOptions);
|
|
35
43
|
const session = {
|
|
36
44
|
client,
|
|
37
45
|
language,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-manager.js","sourceRoot":"","sources":["../../src/lsp/lsp-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"lsp-manager.js","sourceRoot":"","sources":["../../src/lsp/lsp-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,12 @@ export declare function getLspConfigForLanguage(language: string): {
|
|
|
9
9
|
name: string;
|
|
10
10
|
config: LspServerConfig;
|
|
11
11
|
} | null;
|
|
12
|
+
export declare function resolveTsserverPath(rootPath: string, deps?: {
|
|
13
|
+
exists?: (p: string) => boolean;
|
|
14
|
+
gitCommonDir?: (cwd: string) => string | null;
|
|
15
|
+
env?: NodeJS.ProcessEnv;
|
|
16
|
+
ownResolve?: () => string | null;
|
|
17
|
+
globalRoot?: () => string | null;
|
|
18
|
+
}): string | null;
|
|
12
19
|
export declare function isLspAvailable(config: LspServerConfig): boolean;
|
|
13
20
|
//# sourceMappingURL=lsp-servers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-servers.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-servers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lsp-servers.d.ts","sourceRoot":"","sources":["../../src/lsp/lsp-servers.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAoCvD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAO1G;AAiBD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IACJ,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC7B,GACL,MAAM,GAAG,IAAI,CAiCf;AA+BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAe/D"}
|
package/dist/lsp/lsp-servers.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { dirname, join, resolve } from "node:path";
|
|
2
5
|
export const LSP_SERVERS = {
|
|
3
6
|
typescript: {
|
|
4
7
|
command: "typescript-language-server",
|
|
@@ -44,6 +47,81 @@ export function getLspConfigForLanguage(language) {
|
|
|
44
47
|
}
|
|
45
48
|
return null;
|
|
46
49
|
}
|
|
50
|
+
// WHERE typescript-language-server FINDS TYPESCRIPT, when the workspace has none.
|
|
51
|
+
//
|
|
52
|
+
// It resolves `typescript` from the workspace root and gives up otherwise ("Could not find a valid
|
|
53
|
+
// TypeScript installation … Exiting"). Measured 2026-09-30: 121 such failures in the daemon log, all
|
|
54
|
+
// in tgm-survey-platform worktrees — agents run tests on the remote farm (`rt`), so worktrees never
|
|
55
|
+
// get a local node_modules, and neither did the main checkout. Every LSP-backed tool (references,
|
|
56
|
+
// definition, rename, call hierarchy) silently fell back or failed there.
|
|
57
|
+
//
|
|
58
|
+
// Order: the workspace or any ancestor (monorepo root) · the main checkout of a linked worktree (same
|
|
59
|
+
// repo, so the same TypeScript major) · CODESIFT_TSSERVER_PATH · CodeSift's own dependency tree ·
|
|
60
|
+
// the global npm root. The first hit is passed as `initializationOptions.tsserver.path`; null means
|
|
61
|
+
// "let the server look for itself", which is exactly the old behaviour.
|
|
62
|
+
const TSSERVER_REL = join("node_modules", "typescript", "lib", "tsserver.js");
|
|
63
|
+
let globalTsserver;
|
|
64
|
+
export function resolveTsserverPath(rootPath, deps = {}) {
|
|
65
|
+
const exists = deps.exists ?? existsSync;
|
|
66
|
+
const env = deps.env ?? process.env;
|
|
67
|
+
for (let dir = resolve(rootPath);; dir = dirname(dir)) {
|
|
68
|
+
const p = join(dir, TSSERVER_REL);
|
|
69
|
+
if (exists(p))
|
|
70
|
+
return p;
|
|
71
|
+
if (dirname(dir) === dir)
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
const common = (deps.gitCommonDir ?? defaultGitCommonDir)(rootPath);
|
|
75
|
+
if (common) {
|
|
76
|
+
const p = join(dirname(common), TSSERVER_REL);
|
|
77
|
+
if (exists(p))
|
|
78
|
+
return p;
|
|
79
|
+
}
|
|
80
|
+
const override = env["CODESIFT_TSSERVER_PATH"];
|
|
81
|
+
if (override && exists(override))
|
|
82
|
+
return override;
|
|
83
|
+
const own = (deps.ownResolve ?? defaultOwnResolve)();
|
|
84
|
+
if (own && exists(own))
|
|
85
|
+
return own;
|
|
86
|
+
if (deps.globalRoot) {
|
|
87
|
+
const root = deps.globalRoot();
|
|
88
|
+
const p = root ? join(root, "typescript", "lib", "tsserver.js") : null;
|
|
89
|
+
return p && exists(p) ? p : null;
|
|
90
|
+
}
|
|
91
|
+
if (globalTsserver === undefined) {
|
|
92
|
+
const root = defaultGlobalRoot();
|
|
93
|
+
const p = root ? join(root, "typescript", "lib", "tsserver.js") : null;
|
|
94
|
+
globalTsserver = p && existsSync(p) ? p : null;
|
|
95
|
+
}
|
|
96
|
+
return globalTsserver;
|
|
97
|
+
}
|
|
98
|
+
function defaultGitCommonDir(cwd) {
|
|
99
|
+
try {
|
|
100
|
+
const out = execFileSync("git", ["rev-parse", "--path-format=absolute", "--git-common-dir"], {
|
|
101
|
+
cwd, stdio: ["ignore", "pipe", "ignore"], timeout: 2_000, encoding: "utf8",
|
|
102
|
+
}).trim();
|
|
103
|
+
return out || null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function defaultOwnResolve() {
|
|
110
|
+
try {
|
|
111
|
+
return createRequire(import.meta.url).resolve("typescript/lib/tsserver.js");
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function defaultGlobalRoot() {
|
|
118
|
+
try {
|
|
119
|
+
return execFileSync("npm", ["root", "-g"], { stdio: ["ignore", "pipe", "ignore"], timeout: 5_000, encoding: "utf8" }).trim() || null;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
47
125
|
const availabilityCache = new Map();
|
|
48
126
|
export function isLspAvailable(config) {
|
|
49
127
|
const cached = availabilityCache.get(config.command);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-servers.js","sourceRoot":"","sources":["../../src/lsp/lsp-servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lsp-servers.js","sourceRoot":"","sources":["../../src/lsp/lsp-servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-manager.d.ts","sourceRoot":"","sources":["../../src/parser/parser-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-manager.d.ts","sourceRoot":"","sources":["../../src/parser/parser-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAqEtD,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAIhD;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAElE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQlE;AAED;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAW/C,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2DxB"}
|
|
@@ -33,13 +33,19 @@ const EXTENSION_MAP = {
|
|
|
33
33
|
".toml": "config",
|
|
34
34
|
".ini": "config",
|
|
35
35
|
".properties": "config",
|
|
36
|
+
// Kotlin is FULLY parsed: tree-sitter-kotlin.wasm ships in src/parser/languages/
|
|
37
|
+
// and extractors/kotlin.ts is a real extractor (classes incl. data/sealed/enum,
|
|
38
|
+
// objects + companions, properties, extension + suspend functions, Kotest DSL,
|
|
39
|
+
// KMP expect/actual, annotations). It sat under the "unparsed" heading below for
|
|
40
|
+
// long enough that agents read the heading and skipped CodeSift on Kotlin repos.
|
|
41
|
+
// `.gradle.kts` is routed to the gradle-kts extractor by detectLanguage, not here.
|
|
42
|
+
".kt": "kotlin", // Kotlin
|
|
43
|
+
".kts": "kotlin", // Kotlin script
|
|
36
44
|
// --- Unparsed source languages ---
|
|
37
45
|
// These extensions are indexed (file appears in get_file_tree, search_text,
|
|
38
46
|
// scan_secrets) but no symbol extraction happens — tree-sitter grammars
|
|
39
47
|
// are not shipped yet. Add a real extractor in src/parser/extractors/
|
|
40
48
|
// and a .wasm grammar in src/parser/languages/ to enable symbol support.
|
|
41
|
-
".kt": "kotlin", // Kotlin
|
|
42
|
-
".kts": "kotlin", // Kotlin script
|
|
43
49
|
".swift": "text_stub", // Swift
|
|
44
50
|
".dart": "text_stub", // Dart/Flutter
|
|
45
51
|
".scala": "text_stub", // Scala
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-manager.js","sourceRoot":"","sources":["../../src/parser/parser-manager.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,uDAAuD;AACvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,MAAM,aAAa,GAA2B;IAC5C,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,UAAU;IACvB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,QAAQ;IACvB,
|
|
1
|
+
{"version":3,"file":"parser-manager.js","sourceRoot":"","sources":["../../src/parser/parser-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../src/register-tool-groups/core/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../src/register-tool-groups/core/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAkEtH,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,EAudzD,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { z, zBool, zNum, lazySchema, OutputSchemas, checkTextStubHint } from "../shared.js";
|
|
2
|
-
import { getSymbol, getSymbols, findAndShow, getContextBundle, formatRefsCompact, formatSymbolCompact,
|
|
2
|
+
import { getSymbol, getSymbols, findAndShow, getContextBundle, formatRefsCompact, formatSymbolCompact, formatBundleCompact, findReferences, findReferencesBatch, traceCallChain, impactAnalysis, traceRoute, goToDefinition, getTypeInfo, renameSymbol, getCallHierarchy, dispatchFormatter } from "../deps.js";
|
|
3
3
|
import { zJsonArray } from "./schema.js";
|
|
4
4
|
// Direct import, not a lazyExport: a pure predicate with no heavy dependencies of its own.
|
|
5
5
|
import { isCommentOnlyReference } from "../../tools/symbol-reference-tools.js";
|
|
6
|
+
import { commitDelivered, elideShownSource } from "../../server-helpers/shown-source.js";
|
|
6
7
|
// Token diet (2026-07-10 tool-runtime-opt plan, Task 4): find_references' default
|
|
7
8
|
// result cap. Telemetry showed find_references as the #2 token sink (605 calls /
|
|
8
9
|
// 909K tok), most of it unbounded result sets on common symbol names. An explicit
|
|
@@ -35,6 +36,17 @@ function formatIdAmbiguity(ambiguity) {
|
|
|
35
36
|
* silently DROPS the last reference (and reports a nonsense `+${len+1} more`),
|
|
36
37
|
* and a fractional cap prints `+7.5 more`. Clamp to a whole number ≥ 0.
|
|
37
38
|
*/
|
|
39
|
+
/**
|
|
40
|
+
* Render a symbol, replacing a body already shown in this conversation with a one-line pointer.
|
|
41
|
+
* See server-helpers/shown-source.ts for when that is (and is not) done.
|
|
42
|
+
*/
|
|
43
|
+
async function renderSymbol(sym, force) {
|
|
44
|
+
const view = elideShownSource(sym, force ? { force } : undefined);
|
|
45
|
+
const text = await formatSymbolCompact(view.symbol);
|
|
46
|
+
return { text: view.note ? `${text}\n${view.note}` : text, view };
|
|
47
|
+
}
|
|
48
|
+
const FULL_SOURCE_DESCRIPTION = "Resend source even if this exact body was already returned earlier in the conversation " +
|
|
49
|
+
"(default false: a repeat comes back as a one-line 'unchanged' pointer)";
|
|
38
50
|
function normalizeMaxRefs(raw) {
|
|
39
51
|
if (typeof raw !== "number" || !Number.isFinite(raw))
|
|
40
52
|
return DEFAULT_MAX_REFS;
|
|
@@ -54,6 +66,7 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
54
66
|
"search_symbols/get_file_outline results, it cannot be constructed by hand (it embeds the " +
|
|
55
67
|
"declaration line). A bare symbol name is also accepted when it is unique in the repo."),
|
|
56
68
|
include_related: zBool().describe("Include children/related symbols (default: true)"),
|
|
69
|
+
full_source: zBool().describe(FULL_SOURCE_DESCRIPTION),
|
|
57
70
|
})),
|
|
58
71
|
handler: async (args) => {
|
|
59
72
|
const opts = {};
|
|
@@ -85,10 +98,13 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
85
98
|
const hint = await checkTextStubHint(args.repo, "get_symbol", true);
|
|
86
99
|
return hint ?? `Symbol "${symbolId}" not found. Use search_symbols(query=...) to discover available IDs.`;
|
|
87
100
|
}
|
|
88
|
-
|
|
101
|
+
const rendered = await renderSymbol(result.symbol, args.full_source);
|
|
102
|
+
let text = resolvedNote + rendered.text;
|
|
89
103
|
if (result.related && result.related.length > 0) {
|
|
90
104
|
text += "\n\n--- children ---\n" + result.related.map((s) => `${s.kind} ${s.name}${s.signature ? s.signature : ""} [${s.file}:${s.start_line}]`).join("\n");
|
|
91
105
|
}
|
|
106
|
+
// Recorded only now that the whole reply exists, and only if the cap will not cut it.
|
|
107
|
+
commitDelivered([{ view: rendered.view, chars: resolvedNote.length + rendered.text.length }]);
|
|
92
108
|
return text;
|
|
93
109
|
},
|
|
94
110
|
} },
|
|
@@ -105,6 +121,7 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
105
121
|
]).describe("Array of symbol IDs, format 'repo:file:name:line' — copy from search_symbols/get_file_outline " +
|
|
106
122
|
"results rather than constructing them. Bare symbol names are accepted when unique. " +
|
|
107
123
|
"Can be passed as a JSON string."),
|
|
124
|
+
full_source: zBool().describe(FULL_SOURCE_DESCRIPTION),
|
|
108
125
|
})),
|
|
109
126
|
handler: async (args) => {
|
|
110
127
|
const ids = args.symbol_ids;
|
|
@@ -132,7 +149,11 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
132
149
|
syms = [...syms, ...await getSymbols(args.repo, retry)];
|
|
133
150
|
}
|
|
134
151
|
}
|
|
135
|
-
const
|
|
152
|
+
const force = args.full_source;
|
|
153
|
+
// All checks happen before any commit, so a symbol listed twice in one call is sent in full
|
|
154
|
+
// both times instead of pointing at a copy "already shown" three lines up.
|
|
155
|
+
const rendered = await Promise.all(syms.map((sym) => renderSymbol(sym, force)));
|
|
156
|
+
const output = rendered.map((r) => r.text).join("\n\n");
|
|
136
157
|
// Surface fuzzy suggestions for missing IDs (telemetry: 26% zero rate).
|
|
137
158
|
let suggestions = "";
|
|
138
159
|
if (syms.length < ids.length) {
|
|
@@ -154,6 +175,12 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
154
175
|
}
|
|
155
176
|
}
|
|
156
177
|
const hint = await checkTextStubHint(args.repo, "get_symbols", syms.length === 0);
|
|
178
|
+
// In response order, with each block's separator, so the budget walk matches what the cap
|
|
179
|
+
// will keep; blocks past it are not recorded as shown.
|
|
180
|
+
commitDelivered(rendered.map((r, i) => ({
|
|
181
|
+
view: r.view,
|
|
182
|
+
chars: r.text.length + (i === 0 ? (hint?.length ?? 0) : 2),
|
|
183
|
+
})));
|
|
157
184
|
return (hint ? hint + output : output) + suggestions;
|
|
158
185
|
},
|
|
159
186
|
} },
|
|
@@ -166,15 +193,20 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
166
193
|
repo: z.string().optional().describe("Repository identifier (default: auto-detected from CWD)"),
|
|
167
194
|
query: z.string().describe("Symbol name or query to search for"),
|
|
168
195
|
include_refs: zBool().describe("Include locations that reference this symbol"),
|
|
196
|
+
full_source: zBool().describe(FULL_SOURCE_DESCRIPTION),
|
|
169
197
|
})),
|
|
170
198
|
handler: async (args) => {
|
|
171
199
|
const result = await findAndShow(args.repo, args.query, args.include_refs);
|
|
172
200
|
if (!result)
|
|
173
201
|
return null;
|
|
174
|
-
|
|
202
|
+
const rendered = await renderSymbol(result.symbol, args.full_source);
|
|
203
|
+
const prefix = formatIdAmbiguity(result.id_ambiguity);
|
|
204
|
+
let text = prefix + rendered.text;
|
|
175
205
|
if (result.references) {
|
|
176
206
|
text += `\n\n--- references ---\n${await formatRefsCompact(result.references)}`;
|
|
177
207
|
}
|
|
208
|
+
// The references follow the body, so only the prefix and the body decide whether it survives.
|
|
209
|
+
commitDelivered([{ view: rendered.view, chars: prefix.length + rendered.text.length }]);
|
|
178
210
|
return text;
|
|
179
211
|
},
|
|
180
212
|
} },
|
|
@@ -186,12 +218,45 @@ export const CORE_SYMBOL_TOOL_ENTRIES = [
|
|
|
186
218
|
schema: lazySchema(() => ({
|
|
187
219
|
repo: z.string().optional().describe("Repository identifier (default: auto-detected from CWD)"),
|
|
188
220
|
symbol_name: z.string().describe("Symbol name to find"),
|
|
221
|
+
full_source: zBool().describe(FULL_SOURCE_DESCRIPTION),
|
|
189
222
|
})),
|
|
190
223
|
handler: async (args) => {
|
|
191
224
|
const bundle = await getContextBundle(args.repo, args.symbol_name);
|
|
192
|
-
if (!bundle)
|
|
225
|
+
if (!bundle?.symbol)
|
|
193
226
|
return null;
|
|
194
|
-
|
|
227
|
+
const view = elideShownSource(bundle.symbol, args.full_source === true ? { force: true } : undefined);
|
|
228
|
+
let text = await formatBundleCompact({ ...bundle, symbol: view.symbol });
|
|
229
|
+
// The symbol header is the bundle's first line; the pointer belongs directly under it.
|
|
230
|
+
if (view.note)
|
|
231
|
+
text = text.replace(/^[^\n]*/, (header) => `${header}\n${view.note}`);
|
|
232
|
+
const prefix = formatIdAmbiguity(bundle.id_ambiguity);
|
|
233
|
+
commitDelivered([{ view, chars: prefix.length + text.length }]);
|
|
234
|
+
return prefix + text;
|
|
235
|
+
},
|
|
236
|
+
} },
|
|
237
|
+
{ order: 1557, definition: {
|
|
238
|
+
name: "explore",
|
|
239
|
+
category: "search",
|
|
240
|
+
searchHint: "explore understand how works where defined callers callees one call overview symbol source",
|
|
241
|
+
description: "One call for 'where is X and how does it connect': ranks symbols for the query, returns the top " +
|
|
242
|
+
"few with full source plus their direct callers/callees, and lists the other matches. Replaces " +
|
|
243
|
+
"search_symbols → get_symbol → find_references chains. Output is capped by token_budget (default 6000).",
|
|
244
|
+
schema: lazySchema(() => ({
|
|
245
|
+
repo: z.string().optional().describe("Repository identifier (default: auto-detected from CWD)"),
|
|
246
|
+
query: z.string().describe("Symbol name, identifier fragment or short description of what you are looking for"),
|
|
247
|
+
top: zNum().describe("How many top matches get full source + call graph (default 3, max 8)"),
|
|
248
|
+
token_budget: zNum().describe("Approximate output ceiling in tokens (default 6000)"),
|
|
249
|
+
file_pattern: z.string().optional().describe("Glob to restrict matches, e.g. 'src/**/*.ts'"),
|
|
250
|
+
full_source: zBool().describe(FULL_SOURCE_DESCRIPTION),
|
|
251
|
+
})),
|
|
252
|
+
handler: async (args) => {
|
|
253
|
+
const { explore } = await import("../../tools/explore-tools.js");
|
|
254
|
+
return explore(args.repo, args.query, {
|
|
255
|
+
top: args.top,
|
|
256
|
+
token_budget: args.token_budget,
|
|
257
|
+
file_pattern: args.file_pattern,
|
|
258
|
+
full_source: args.full_source,
|
|
259
|
+
});
|
|
195
260
|
},
|
|
196
261
|
} },
|
|
197
262
|
// --- References & call graph ---
|