oh-my-opencode 5.1.42 → 5.1.44
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/index.js +110 -27
- package/dist/cli/service-auth/cli-keystore.fixture.d.ts +1 -7
- package/dist/cli/service-auth/index.d.ts +1 -1
- package/dist/cli/service-auth/keystore.d.ts +8 -2
- package/dist/cli/service-auth/secret-service-lock.d.ts +4 -0
- package/dist/cli/service-auth/session.d.ts +7 -1
- package/dist/cli-node/index.js +110 -27
- package/dist/index.js +14 -14
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/tui.js +14 -14
- package/package.json +14 -14
- package/packages/lsp-core/src/lsp/bun-command-output.ts +82 -0
- package/packages/lsp-core/src/lsp/bun-project-checks.test.ts +170 -0
- package/packages/lsp-core/src/lsp/bun-project-checks.ts +223 -0
- package/packages/lsp-core/src/lsp/fake-bun-test-support.ts +102 -0
- package/packages/lsp-core/src/lsp/process.ts +1 -1
- package/packages/lsp-core/src/tool-surface.test.ts +2 -1
- package/packages/lsp-core/src/tools/bun-directory-diagnostics.test.ts +113 -0
- package/packages/lsp-core/src/tools/bun-directory-diagnostics.ts +75 -0
- package/packages/lsp-core/src/tools/definitions.ts +2 -1
- package/packages/lsp-core/src/tools/diagnostics.ts +23 -6
- package/packages/lsp-core/src/tools/types.ts +1 -0
- package/packages/lsp-daemon/dist/cli.js +363 -35
- package/packages/lsp-daemon/dist/client.js +341 -13
- package/packages/lsp-daemon/dist/index.js +344 -16
- package/packages/lsp-tools-mcp/dist/cli.js +333 -5
- package/packages/lsp-tools-mcp/dist/mcp.js +333 -5
- package/packages/lsp-tools-mcp/dist/tools.js +333 -5
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +358 -36
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2 -0
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2 -0
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +17 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from "bun:test";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { __resetBunCommandProbeCacheForTests } from "../lsp/bun-project-checks.js";
|
|
5
|
+
import { createFakeBun, createProject, type FakeBun, removeFakeBunFixtures } from "../lsp/fake-bun-test-support.js";
|
|
6
|
+
import { createStandaloneMcpRequestContext, runWithRequestContext } from "../request-context.js";
|
|
7
|
+
import { runBunDirectoryDiagnostics } from "./bun-directory-diagnostics.js";
|
|
8
|
+
import { executeLspDiagnostics } from "./diagnostics.js";
|
|
9
|
+
import type { LspDiagnosticsDetails } from "./types.js";
|
|
10
|
+
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
__resetBunCommandProbeCacheForTests();
|
|
13
|
+
removeFakeBunFixtures();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const CHECK_ERROR = "src/x.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.\n";
|
|
17
|
+
const LINT_REPORT = (root: string) =>
|
|
18
|
+
JSON.stringify([{ filePath: join(root, "src", "x.ts"), messages: [{ ruleId: "prefer-const", severity: 2, message: "Use const", line: 1, column: 1 }] }]);
|
|
19
|
+
|
|
20
|
+
function diagnose(root: string, bun: FakeBun) {
|
|
21
|
+
return runWithRequestContext(createStandaloneMcpRequestContext({ cwd: root }), () =>
|
|
22
|
+
executeLspDiagnostics({ filePath: root, severity: "all" }, undefined, { resolveBun: () => bun.path }),
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function commandsRun(bun: FakeBun): string[] {
|
|
27
|
+
return bun.calls().map((call) => call.args.join(" "));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("lsp_diagnostics on a directory of a Bun project", () => {
|
|
31
|
+
it("#given a Bun project and a bun with check #when diagnosed #then bun check is the typecheck", async () => {
|
|
32
|
+
const root = createProject({ "bun.lock": "", "src/x.ts": 'const n: number = "s";\n' });
|
|
33
|
+
const bun = createFakeBun({ commands: ["check"], checkStdout: CHECK_ERROR, checkExitCode: 1 });
|
|
34
|
+
|
|
35
|
+
const result = await diagnose(root, bun);
|
|
36
|
+
const details = result.details as LspDiagnosticsDetails;
|
|
37
|
+
|
|
38
|
+
expect(result.content[0]?.text).toContain("Typecheck: bun check");
|
|
39
|
+
expect(result.content[0]?.text).toContain(`${join(root, "src", "x.ts")}: error[bun check] (TS2322) at 1:6:`);
|
|
40
|
+
expect(details.totalDiagnostics).toBe(1);
|
|
41
|
+
expect(details.projectCommands).toEqual(["bun check"]);
|
|
42
|
+
expect(commandsRun(bun)).toEqual(["check --help", "check --no-pretty .", "lint --help"]);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("#given a bun without lint #when diagnosed #then lint is neither run nor reported", async () => {
|
|
46
|
+
const root = createProject({ "bun.lock": "", "src/x.ts": "" });
|
|
47
|
+
const bun = createFakeBun({ commands: ["check"] });
|
|
48
|
+
|
|
49
|
+
const result = await diagnose(root, bun);
|
|
50
|
+
|
|
51
|
+
expect(result.content[0]?.text).not.toContain("Lint:");
|
|
52
|
+
expect(commandsRun(bun)).not.toContain("lint -f json .");
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("#given a bun with lint #when diagnosed #then bun lint diagnostics join the typecheck", async () => {
|
|
56
|
+
const root = createProject({ "bun.lock": "", "src/x.ts": "let a = 1\n" });
|
|
57
|
+
const bun = createFakeBun({ commands: ["check", "lint"], lintStdout: LINT_REPORT(root), lintExitCode: 1 });
|
|
58
|
+
|
|
59
|
+
const result = await diagnose(root, bun);
|
|
60
|
+
const details = result.details as LspDiagnosticsDetails;
|
|
61
|
+
|
|
62
|
+
expect(result.content[0]?.text).toContain("Lint: bun lint");
|
|
63
|
+
expect(result.content[0]?.text).toContain("error[bun lint] (prefer-const) at 1:0: Use const");
|
|
64
|
+
expect(details.projectCommands).toEqual(["bun check", "bun lint"]);
|
|
65
|
+
expect(commandsRun(bun)).toContain("lint -f json .");
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("#given a bun lint that cannot lint #when diagnosed #then the typecheck stands and the lint failure is named", async () => {
|
|
69
|
+
const root = createProject({ "bun.lock": "", "src/x.ts": "" });
|
|
70
|
+
const bun = createFakeBun({ commands: ["check", "lint"], lintStdout: "", lintExitCode: 2 });
|
|
71
|
+
|
|
72
|
+
const result = await diagnose(root, bun);
|
|
73
|
+
|
|
74
|
+
expect(result.content[0]?.text).toContain("Typecheck: bun check");
|
|
75
|
+
expect(result.content[0]?.text).toContain("Lint: bun lint could not lint (exit 2)");
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
describe("fallback to the language server path", () => {
|
|
80
|
+
it("#given a non-Bun project #when the Bun path is consulted #then it declines without running bun", async () => {
|
|
81
|
+
const root = createProject({ "package.json": "{}", "src/x.ts": "" });
|
|
82
|
+
const bun = createFakeBun({ commands: ["check", "lint"] });
|
|
83
|
+
|
|
84
|
+
expect(await runBunDirectoryDiagnostics(root, ".ts", "all", undefined, { resolveBun: () => bun.path })).toBeUndefined();
|
|
85
|
+
expect(bun.calls()).toEqual([]);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("#given a project script named check #when the Bun path is consulted #then it declines without running bun check", async () => {
|
|
89
|
+
const root = createProject({ "bun.lock": "", "package.json": '{"scripts":{"check":"tsc --noEmit"}}', "src/x.ts": "" });
|
|
90
|
+
const bun = createFakeBun({ commands: ["check"] });
|
|
91
|
+
|
|
92
|
+
expect(await runBunDirectoryDiagnostics(root, ".ts", "all", undefined, { resolveBun: () => bun.path })).toBeUndefined();
|
|
93
|
+
expect(bun.calls()).toEqual([]);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("#given a bun without check, or a bun check that fails to run #when consulted #then it declines", async () => {
|
|
97
|
+
const root = createProject({ "bun.lock": "", "src/x.ts": "" });
|
|
98
|
+
const old = createFakeBun({ commands: [] });
|
|
99
|
+
const broken = createFakeBun({ commands: ["check"], checkStdout: "error: tsconfig.json not found\n", checkExitCode: 1 });
|
|
100
|
+
|
|
101
|
+
expect(await runBunDirectoryDiagnostics(root, ".ts", "all", undefined, { resolveBun: () => old.path })).toBeUndefined();
|
|
102
|
+
expect(await runBunDirectoryDiagnostics(root, ".ts", "all", undefined, { resolveBun: () => broken.path })).toBeUndefined();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("#given a JavaScript directory #when consulted #then the Bun typecheck path is not used", async () => {
|
|
106
|
+
const root = createProject({ "bun.lock": "", "src/x.js": "" });
|
|
107
|
+
const bun = createFakeBun({ commands: ["check"] });
|
|
108
|
+
|
|
109
|
+
expect(await runBunDirectoryDiagnostics(root, ".js", "all", undefined, { resolveBun: () => bun.path })).toBeUndefined();
|
|
110
|
+
expect(bun.calls()).toEqual([]);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { parseBunCheckOutput, parseBunLintJson, type FileDiagnostic } from "../lsp/bun-command-output.js";
|
|
2
|
+
import { type BunProjectChecksOptions, resolveBunProjectCommand, runBunCommand } from "../lsp/bun-project-checks.js";
|
|
3
|
+
import { DEFAULT_MAX_DIAGNOSTICS } from "../lsp/constants.js";
|
|
4
|
+
import { filterDiagnosticsBySeverity, formatDiagnostic } from "../lsp/formatters.js";
|
|
5
|
+
import type { SeverityFilter } from "../lsp/types.js";
|
|
6
|
+
|
|
7
|
+
const TYPESCRIPT_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts"]);
|
|
8
|
+
|
|
9
|
+
export interface BunDirectoryDiagnostics {
|
|
10
|
+
readonly output: string;
|
|
11
|
+
readonly diagnostics: readonly FileDiagnostic[];
|
|
12
|
+
readonly projectCommands: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function runBunDirectoryDiagnostics(
|
|
16
|
+
absDir: string,
|
|
17
|
+
extension: string,
|
|
18
|
+
severity: SeverityFilter | undefined,
|
|
19
|
+
signal: AbortSignal | undefined,
|
|
20
|
+
options: BunProjectChecksOptions = {},
|
|
21
|
+
): Promise<BunDirectoryDiagnostics | undefined> {
|
|
22
|
+
if (!TYPESCRIPT_EXTENSIONS.has(extension)) return undefined;
|
|
23
|
+
const checkBun = await resolveBunProjectCommand("check", absDir, options);
|
|
24
|
+
if (checkBun === undefined) return undefined;
|
|
25
|
+
|
|
26
|
+
let typecheck: FileDiagnostic[];
|
|
27
|
+
try {
|
|
28
|
+
const run = await runBunCommand(checkBun, ["check", "--no-pretty", "."], absDir, signal);
|
|
29
|
+
typecheck = parseBunCheckOutput(run.stdout, absDir);
|
|
30
|
+
const failedWithoutDiagnostics = run.exitCode === 1 && typecheck.length === 0;
|
|
31
|
+
if ((run.exitCode !== 0 && run.exitCode !== 1) || failedWithoutDiagnostics) return undefined;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
if (signal?.aborted) throw error;
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const header = [`Directory: ${absDir}`, "Typecheck: bun check (files in this directory and everything they import)"];
|
|
38
|
+
const projectCommands = ["bun check"];
|
|
39
|
+
const collected = [...typecheck];
|
|
40
|
+
const lintBun = await resolveBunProjectCommand("lint", absDir, options);
|
|
41
|
+
if (lintBun !== undefined) {
|
|
42
|
+
const lint = await runBunLint(lintBun, absDir, signal);
|
|
43
|
+
header.push(lint.status);
|
|
44
|
+
projectCommands.push("bun lint");
|
|
45
|
+
collected.push(...lint.diagnostics);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const diagnostics = collected.filter(({ diagnostic }) => filterDiagnosticsBySeverity([diagnostic], severity).length > 0);
|
|
49
|
+
const lines = [...header, `Total diagnostics: ${diagnostics.length}`];
|
|
50
|
+
const shown = diagnostics.slice(0, DEFAULT_MAX_DIAGNOSTICS);
|
|
51
|
+
if (shown.length > 0) {
|
|
52
|
+
lines.push("", ...shown.map(({ file, diagnostic }) => `${file}: ${formatDiagnostic(diagnostic)}`));
|
|
53
|
+
if (diagnostics.length > shown.length) {
|
|
54
|
+
lines.push("", `... (${diagnostics.length - shown.length} more diagnostics not shown)`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { output: lines.join("\n"), diagnostics, projectCommands };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async function runBunLint(
|
|
61
|
+
bunPath: string,
|
|
62
|
+
absDir: string,
|
|
63
|
+
signal: AbortSignal | undefined,
|
|
64
|
+
): Promise<{ status: string; diagnostics: FileDiagnostic[] }> {
|
|
65
|
+
try {
|
|
66
|
+
const run = await runBunCommand(bunPath, ["lint", "-f", "json", "."], absDir, signal);
|
|
67
|
+
const diagnostics = run.exitCode === 0 || run.exitCode === 1 ? parseBunLintJson(run.stdout) : undefined;
|
|
68
|
+
if (diagnostics !== undefined) return { status: "Lint: bun lint", diagnostics };
|
|
69
|
+
const reason = run.stderr.trim().split(/\r?\n/)[0] ?? "";
|
|
70
|
+
return { status: `Lint: bun lint could not lint (exit ${run.exitCode ?? "signal"})${reason ? `: ${reason}` : ""}`, diagnostics: [] };
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (signal?.aborted) throw error;
|
|
73
|
+
return { status: `Lint: bun lint could not run: ${error instanceof Error ? error.message : String(error)}`, diagnostics: [] };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -21,7 +21,8 @@ export const LSP_MCP_TOOLS: LspMcpTool[] = [
|
|
|
21
21
|
name: "diagnostics",
|
|
22
22
|
aliases: ["lsp_diagnostics"],
|
|
23
23
|
title: "LSP Diagnostics",
|
|
24
|
-
description:
|
|
24
|
+
description:
|
|
25
|
+
"Get errors, warnings, and hints for a source file or directory. In a Bun project, a TypeScript directory is typechecked with `bun check`, plus `bun lint` when the installed Bun has it.",
|
|
25
26
|
inputSchema: objectSchema(
|
|
26
27
|
{
|
|
27
28
|
filePath: { type: "string", description: "File or directory path to check." },
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { isDirectoryPath, resolveReadablePathInsideContext, withLspClient } from "../lsp/client-wrapper.js";
|
|
2
2
|
import { DEFAULT_MAX_DIAGNOSTICS } from "../lsp/constants.js";
|
|
3
|
+
import type { BunProjectChecksOptions } from "../lsp/bun-project-checks.js";
|
|
3
4
|
import { aggregateDiagnosticsForDirectory } from "../lsp/directory-diagnostics.js";
|
|
4
5
|
import { filterDiagnosticsBySeverity, formatDiagnostic } from "../lsp/formatters.js";
|
|
5
6
|
import { inferExtensionFromDirectory } from "../lsp/infer-extension.js";
|
|
6
7
|
import type { Diagnostic } from "../lsp/types.js";
|
|
7
8
|
import { missingDependencyResult } from "../missing-dependency-result.js";
|
|
9
|
+
import { runBunDirectoryDiagnostics } from "./bun-directory-diagnostics.js";
|
|
8
10
|
import { clientOptions, requireString, severityFilter } from "./parameters.js";
|
|
9
11
|
import { text } from "./result.js";
|
|
10
12
|
import type { LspDiagnosticsDetails, ToolExecutionResult } from "./types.js";
|
|
@@ -18,6 +20,7 @@ function asDiagnosticArray(result: { items?: Diagnostic[] } | Diagnostic[] | nul
|
|
|
18
20
|
export async function executeLspDiagnostics(
|
|
19
21
|
params: Record<string, unknown>,
|
|
20
22
|
signal?: AbortSignal,
|
|
23
|
+
bunOptions: BunProjectChecksOptions = {},
|
|
21
24
|
): Promise<ToolExecutionResult> {
|
|
22
25
|
const filePath = requireString(params, "filePath");
|
|
23
26
|
const severity = severityFilter(params);
|
|
@@ -41,13 +44,27 @@ export async function executeLspDiagnostics(
|
|
|
41
44
|
return text(message, details);
|
|
42
45
|
}
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
const bun = await runBunDirectoryDiagnostics(absPath, extension, severity, signal, bunOptions);
|
|
48
|
+
if (bun !== undefined) {
|
|
49
|
+
const details: LspDiagnosticsDetails = {
|
|
50
|
+
filePath,
|
|
47
51
|
severity,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
mode: "directory",
|
|
53
|
+
diagnostics: [...bun.diagnostics],
|
|
54
|
+
totalDiagnostics: bun.diagnostics.length,
|
|
55
|
+
truncated: bun.diagnostics.length > DEFAULT_MAX_DIAGNOSTICS,
|
|
56
|
+
projectCommands: [...bun.projectCommands],
|
|
57
|
+
};
|
|
58
|
+
return text(bun.output, details);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const output = await aggregateDiagnosticsForDirectory(
|
|
62
|
+
absPath,
|
|
63
|
+
extension,
|
|
64
|
+
severity,
|
|
65
|
+
undefined,
|
|
66
|
+
signal === undefined ? {} : { signal },
|
|
67
|
+
);
|
|
51
68
|
const details: LspDiagnosticsDetails = {
|
|
52
69
|
filePath,
|
|
53
70
|
severity,
|
|
@@ -51,6 +51,7 @@ export interface LspDiagnosticsDetails {
|
|
|
51
51
|
error?: string;
|
|
52
52
|
errorKind?: "freshness_timeout" | "missing_dependency" | "no_files" | "invalid_path";
|
|
53
53
|
fileFailures?: Array<{ file: string; error: string }>;
|
|
54
|
+
projectCommands?: string[];
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
export interface LspGotoDefinitionDetails {
|