oh-my-opencode 5.1.2 → 5.1.4
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 +233 -81
- package/dist/cli-node/index.js +233 -81
- package/dist/index.js +187 -24
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/tui.js +148 -18
- package/package.json +14 -14
- package/packages/lsp-core/src/lsp/outside-context-workspace.ts +1 -1
- package/packages/lsp-core/src/missing-dependency-result.test.ts +32 -2
- package/packages/lsp-core/src/missing-dependency-result.ts +3 -0
- package/packages/lsp-core/src/post-edit/file-location.ts +50 -0
- package/packages/lsp-core/src/post-edit/index.ts +2 -0
- package/packages/lsp-core/src/post-edit/not-installed-guidance.ts +36 -0
- package/packages/lsp-core/src/post-edit/not-installed.test.ts +199 -0
- package/packages/lsp-core/src/post-edit/orchestration.ts +26 -5
- package/packages/lsp-daemon/dist/cli.js +2 -1
- package/packages/lsp-daemon/dist/client.js +2 -1
- package/packages/lsp-daemon/dist/index.js +2 -1
- package/packages/lsp-tools-mcp/dist/cli.js +2 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +2 -1
- package/packages/lsp-tools-mcp/dist/tools.js +2 -1
- 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/dist/cli.js +33 -7
- 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/comment-checker/src/runner.ts +4 -4
- 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 +4 -4
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +141 -107
- package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.js +2 -2
- 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/lsp/src/lsp-session-state.ts +2 -2
- 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/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 +12 -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 +2 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
package/dist/index.js
CHANGED
|
@@ -20292,6 +20292,8 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
20292
20292
|
},
|
|
20293
20293
|
"deep-low": {
|
|
20294
20294
|
fallbackChain: [
|
|
20295
|
+
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-6.1-sol", variant: "medium" },
|
|
20296
|
+
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-6.1-sol-fast", variant: "medium" },
|
|
20295
20297
|
{
|
|
20296
20298
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
20297
20299
|
model: "gpt-5.6-sol",
|
|
@@ -20344,7 +20346,9 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
20344
20346
|
providers: ["anthropic", "anthropic-api", "github-copilot"],
|
|
20345
20347
|
model: "claude-haiku-4-5",
|
|
20346
20348
|
variant: "off"
|
|
20347
|
-
}
|
|
20349
|
+
},
|
|
20350
|
+
{ providers: ["zai-coding-plan"], model: "glm-5.3-flash", variant: "low" },
|
|
20351
|
+
{ providers: ["xiaomi"], model: "mimo-v2.6-flash", variant: "low" }
|
|
20348
20352
|
]
|
|
20349
20353
|
},
|
|
20350
20354
|
"unspecified-low": {
|
|
@@ -20543,7 +20547,7 @@ var PATTERN_ALIAS_RULES = [
|
|
|
20543
20547
|
description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
|
|
20544
20548
|
providerIDs: ["openai"],
|
|
20545
20549
|
allowedSubproviderHosts: ["vercel"],
|
|
20546
|
-
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-(?:astra|sol|luna))-fast$/.test(normalizedModelID),
|
|
20550
|
+
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-(?:astra|sol|luna)|gpt-6\.1-sol)-fast$/.test(normalizedModelID),
|
|
20547
20551
|
canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
|
|
20548
20552
|
},
|
|
20549
20553
|
{
|
|
@@ -20757,6 +20761,14 @@ var HEURISTIC_MODEL_FAMILY_REGISTRY = [
|
|
|
20757
20761
|
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
20758
20762
|
supportsTemperature: false
|
|
20759
20763
|
},
|
|
20764
|
+
{
|
|
20765
|
+
family: "gpt-6.1-sol",
|
|
20766
|
+
pattern: /gpt-6-1-sol/,
|
|
20767
|
+
variants: ["low", "medium", "high", "xhigh", "max"],
|
|
20768
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
20769
|
+
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
20770
|
+
supportsTemperature: false
|
|
20771
|
+
},
|
|
20760
20772
|
{
|
|
20761
20773
|
family: "gpt-6",
|
|
20762
20774
|
includes: ["gpt-6"],
|
|
@@ -21978,6 +21990,36 @@ var SUPPLEMENTAL_MODEL_CAPABILITIES = {
|
|
|
21978
21990
|
output: 128000
|
|
21979
21991
|
}
|
|
21980
21992
|
},
|
|
21993
|
+
"gpt-6.1-sol": {
|
|
21994
|
+
id: "gpt-6.1-sol",
|
|
21995
|
+
family: "gpt",
|
|
21996
|
+
reasoning: true,
|
|
21997
|
+
temperature: false,
|
|
21998
|
+
toolCall: true,
|
|
21999
|
+
modalities: {
|
|
22000
|
+
input: ["text", "image"],
|
|
22001
|
+
output: ["text"]
|
|
22002
|
+
},
|
|
22003
|
+
limit: {
|
|
22004
|
+
context: 400000,
|
|
22005
|
+
output: 128000
|
|
22006
|
+
}
|
|
22007
|
+
},
|
|
22008
|
+
"gpt-6.1-sol-fast": {
|
|
22009
|
+
id: "gpt-6.1-sol-fast",
|
|
22010
|
+
family: "gpt",
|
|
22011
|
+
reasoning: true,
|
|
22012
|
+
temperature: false,
|
|
22013
|
+
toolCall: true,
|
|
22014
|
+
modalities: {
|
|
22015
|
+
input: ["text", "image"],
|
|
22016
|
+
output: ["text"]
|
|
22017
|
+
},
|
|
22018
|
+
limit: {
|
|
22019
|
+
context: 400000,
|
|
22020
|
+
output: 128000
|
|
22021
|
+
}
|
|
22022
|
+
},
|
|
21981
22023
|
"gpt-6-luna": {
|
|
21982
22024
|
id: "gpt-6-luna",
|
|
21983
22025
|
family: "gpt-nano",
|
|
@@ -27477,7 +27519,7 @@ You are working on tasks that don't fit specific categories but require substant
|
|
|
27477
27519
|
var UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`;
|
|
27478
27520
|
var DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here when one subsystem plus its callers holds the mechanism and the evidence, once read, leaves one right answer. Wide but mechanical work belongs here or in a quick batch. When unsure, choose deep-low: a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt; re-spawn the same brief as deep-high with its findings.</Selection_Gate>`;
|
|
27479
27521
|
var DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`;
|
|
27480
|
-
var DEEP_LOW_GATE_MODELS = ["gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
27522
|
+
var DEEP_LOW_GATE_MODELS = ["gpt-6.1-sol", "gpt-6.1-sol-fast", "gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
27481
27523
|
var DEEP_HIGH_GATE_MODEL = "gpt-6-astra";
|
|
27482
27524
|
var OPENAI_CATEGORIES = [
|
|
27483
27525
|
{
|
|
@@ -27489,7 +27531,7 @@ var OPENAI_CATEGORIES = [
|
|
|
27489
27531
|
},
|
|
27490
27532
|
{
|
|
27491
27533
|
name: "deep-low",
|
|
27492
|
-
config: { model: "openai/gpt-
|
|
27534
|
+
config: { model: "openai/gpt-6.1-sol", variant: "medium" },
|
|
27493
27535
|
description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads. **3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work is routed here.** Multiple goals fan out as parallel calls.",
|
|
27494
27536
|
callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
27495
27537
|
promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
|
|
@@ -83222,6 +83264,94 @@ var model_capabilities_generated_default = {
|
|
|
83222
83264
|
context: 1e6,
|
|
83223
83265
|
output: 128000
|
|
83224
83266
|
}
|
|
83267
|
+
},
|
|
83268
|
+
"glm-5.3-flash": {
|
|
83269
|
+
id: "glm-5.3-flash",
|
|
83270
|
+
family: "glm-flash",
|
|
83271
|
+
reasoning: true,
|
|
83272
|
+
temperature: true,
|
|
83273
|
+
toolCall: true,
|
|
83274
|
+
modalities: {
|
|
83275
|
+
input: [
|
|
83276
|
+
"text",
|
|
83277
|
+
"image",
|
|
83278
|
+
"video"
|
|
83279
|
+
],
|
|
83280
|
+
output: [
|
|
83281
|
+
"text"
|
|
83282
|
+
]
|
|
83283
|
+
},
|
|
83284
|
+
limit: {
|
|
83285
|
+
context: 1048576,
|
|
83286
|
+
output: 1048576
|
|
83287
|
+
}
|
|
83288
|
+
},
|
|
83289
|
+
"zai/glm-5.3-flash": {
|
|
83290
|
+
id: "zai/glm-5.3-flash",
|
|
83291
|
+
family: "glm-flash",
|
|
83292
|
+
reasoning: true,
|
|
83293
|
+
temperature: true,
|
|
83294
|
+
toolCall: true,
|
|
83295
|
+
modalities: {
|
|
83296
|
+
input: [
|
|
83297
|
+
"text",
|
|
83298
|
+
"image",
|
|
83299
|
+
"video",
|
|
83300
|
+
"pdf"
|
|
83301
|
+
],
|
|
83302
|
+
output: [
|
|
83303
|
+
"text"
|
|
83304
|
+
]
|
|
83305
|
+
},
|
|
83306
|
+
limit: {
|
|
83307
|
+
context: 1e6,
|
|
83308
|
+
output: 131072
|
|
83309
|
+
}
|
|
83310
|
+
},
|
|
83311
|
+
"mimo-v2.6-flash": {
|
|
83312
|
+
id: "mimo-v2.6-flash",
|
|
83313
|
+
family: "mimo",
|
|
83314
|
+
reasoning: true,
|
|
83315
|
+
temperature: true,
|
|
83316
|
+
toolCall: true,
|
|
83317
|
+
modalities: {
|
|
83318
|
+
input: [
|
|
83319
|
+
"text",
|
|
83320
|
+
"image",
|
|
83321
|
+
"audio",
|
|
83322
|
+
"video"
|
|
83323
|
+
],
|
|
83324
|
+
output: [
|
|
83325
|
+
"text"
|
|
83326
|
+
]
|
|
83327
|
+
},
|
|
83328
|
+
limit: {
|
|
83329
|
+
context: 1048576,
|
|
83330
|
+
output: 131072
|
|
83331
|
+
}
|
|
83332
|
+
},
|
|
83333
|
+
"xiaomi/mimo-v2.6-flash": {
|
|
83334
|
+
id: "xiaomi/mimo-v2.6-flash",
|
|
83335
|
+
family: "mimo",
|
|
83336
|
+
reasoning: true,
|
|
83337
|
+
temperature: true,
|
|
83338
|
+
toolCall: true,
|
|
83339
|
+
modalities: {
|
|
83340
|
+
input: [
|
|
83341
|
+
"text",
|
|
83342
|
+
"image",
|
|
83343
|
+
"audio",
|
|
83344
|
+
"video"
|
|
83345
|
+
],
|
|
83346
|
+
output: [
|
|
83347
|
+
"text"
|
|
83348
|
+
]
|
|
83349
|
+
},
|
|
83350
|
+
limit: {
|
|
83351
|
+
context: 1048576,
|
|
83352
|
+
input: 1048576,
|
|
83353
|
+
output: 131072
|
|
83354
|
+
}
|
|
83225
83355
|
}
|
|
83226
83356
|
}
|
|
83227
83357
|
};
|
|
@@ -90381,8 +90511,38 @@ function recordCachedCommentCheckerRelease(cacheDir) {
|
|
|
90381
90511
|
`);
|
|
90382
90512
|
}
|
|
90383
90513
|
// packages/comment-checker-core/src/runner.ts
|
|
90514
|
+
import { createRequire as createRequire2 } from "module";
|
|
90515
|
+
|
|
90516
|
+
// packages/comment-checker-core/src/package-binary.ts
|
|
90384
90517
|
import { createRequire } from "module";
|
|
90385
90518
|
import { dirname as dirname14, join as join45 } from "path";
|
|
90519
|
+
var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
|
|
90520
|
+
function isModuleResolutionMiss(error) {
|
|
90521
|
+
return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
|
|
90522
|
+
}
|
|
90523
|
+
function findCommentCheckerPackageBinary(input) {
|
|
90524
|
+
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
90525
|
+
const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
|
|
90526
|
+
const packageDir = dirname14(input.packageJsonPath);
|
|
90527
|
+
const candidates = [
|
|
90528
|
+
resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
|
|
90529
|
+
join45(packageDir, "vendor", platformKey, input.binaryName),
|
|
90530
|
+
join45(packageDir, "bin", input.binaryName)
|
|
90531
|
+
];
|
|
90532
|
+
return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
|
|
90533
|
+
}
|
|
90534
|
+
function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
|
|
90535
|
+
try {
|
|
90536
|
+
const manifestPath = createRequire(packageJsonPath).resolve(`${platformPackageName}/package.json`);
|
|
90537
|
+
return join45(dirname14(manifestPath), "bin", binaryName);
|
|
90538
|
+
} catch (error) {
|
|
90539
|
+
if (isModuleResolutionMiss(error))
|
|
90540
|
+
return null;
|
|
90541
|
+
throw error;
|
|
90542
|
+
}
|
|
90543
|
+
}
|
|
90544
|
+
|
|
90545
|
+
// packages/comment-checker-core/src/runner.ts
|
|
90386
90546
|
var EMPTY_RESULT = { hasComments: false, message: "" };
|
|
90387
90547
|
var MAX_FAILURE_STDERR = 500;
|
|
90388
90548
|
function normalizeMessage(message) {
|
|
@@ -90407,7 +90567,7 @@ function killProcessSafely(process2, signal) {
|
|
|
90407
90567
|
}
|
|
90408
90568
|
}
|
|
90409
90569
|
function resolveCommentCheckerBinary(input) {
|
|
90410
|
-
const packageName = input.packageName ??
|
|
90570
|
+
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
90411
90571
|
if (input.cachedBinaryPath !== null && input.existsSync(input.cachedBinaryPath)) {
|
|
90412
90572
|
return input.cachedBinaryPath;
|
|
90413
90573
|
}
|
|
@@ -90415,14 +90575,17 @@ function resolveCommentCheckerBinary(input) {
|
|
|
90415
90575
|
return null;
|
|
90416
90576
|
}
|
|
90417
90577
|
try {
|
|
90418
|
-
const require2 =
|
|
90578
|
+
const require2 = createRequire2(input.importMetaUrl);
|
|
90419
90579
|
const packageJsonPath = require2.resolve(`${packageName}/package.json`);
|
|
90420
|
-
|
|
90421
|
-
|
|
90580
|
+
return findCommentCheckerPackageBinary({
|
|
90581
|
+
packageJsonPath,
|
|
90582
|
+
packageName,
|
|
90583
|
+
binaryName: input.binaryName,
|
|
90584
|
+
existsSync: input.existsSync
|
|
90585
|
+
});
|
|
90422
90586
|
} catch (error) {
|
|
90423
|
-
if (error
|
|
90587
|
+
if (isModuleResolutionMiss(error))
|
|
90424
90588
|
return null;
|
|
90425
|
-
}
|
|
90426
90589
|
throw error;
|
|
90427
90590
|
}
|
|
90428
90591
|
}
|
|
@@ -98169,7 +98332,7 @@ function getCachedVersion(options = {}) {
|
|
|
98169
98332
|
// package.json
|
|
98170
98333
|
var package_default = {
|
|
98171
98334
|
name: "oh-my-opencode",
|
|
98172
|
-
version: "5.1.
|
|
98335
|
+
version: "5.1.4",
|
|
98173
98336
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
98174
98337
|
main: "./dist/index.js",
|
|
98175
98338
|
types: "dist/index.d.ts",
|
|
@@ -98346,7 +98509,7 @@ var package_default = {
|
|
|
98346
98509
|
},
|
|
98347
98510
|
devDependencies: {
|
|
98348
98511
|
"@clack/prompts": "^1.8.1",
|
|
98349
|
-
"@code-yeongyu/senpi": "2026.9.29-
|
|
98512
|
+
"@code-yeongyu/senpi": "2026.9.29-5",
|
|
98350
98513
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
98351
98514
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
98352
98515
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -98404,18 +98567,18 @@ var package_default = {
|
|
|
98404
98567
|
typescript: "^7.0.2"
|
|
98405
98568
|
},
|
|
98406
98569
|
optionalDependencies: {
|
|
98407
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
98408
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
98409
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
98410
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
98411
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
98412
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
98413
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
98414
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
98415
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
98416
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
98417
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
98418
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
98570
|
+
"oh-my-opencode-darwin-arm64": "5.1.4",
|
|
98571
|
+
"oh-my-opencode-darwin-x64": "5.1.4",
|
|
98572
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.4",
|
|
98573
|
+
"oh-my-opencode-linux-arm64": "5.1.4",
|
|
98574
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.4",
|
|
98575
|
+
"oh-my-opencode-linux-x64": "5.1.4",
|
|
98576
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.4",
|
|
98577
|
+
"oh-my-opencode-linux-x64-musl": "5.1.4",
|
|
98578
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.4",
|
|
98579
|
+
"oh-my-opencode-windows-arm64": "5.1.4",
|
|
98580
|
+
"oh-my-opencode-windows-x64": "5.1.4",
|
|
98581
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.4"
|
|
98419
98582
|
},
|
|
98420
98583
|
overrides: {
|
|
98421
98584
|
hono: "^4.13.8",
|
package/dist/tui.js
CHANGED
|
@@ -3502,6 +3502,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
3502
3502
|
},
|
|
3503
3503
|
"deep-low": {
|
|
3504
3504
|
fallbackChain: [
|
|
3505
|
+
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-6.1-sol", variant: "medium" },
|
|
3506
|
+
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-6.1-sol-fast", variant: "medium" },
|
|
3505
3507
|
{
|
|
3506
3508
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
3507
3509
|
model: "gpt-5.6-sol",
|
|
@@ -3554,7 +3556,9 @@ var init_category_model_requirements = __esm(() => {
|
|
|
3554
3556
|
providers: ["anthropic", "anthropic-api", "github-copilot"],
|
|
3555
3557
|
model: "claude-haiku-4-5",
|
|
3556
3558
|
variant: "off"
|
|
3557
|
-
}
|
|
3559
|
+
},
|
|
3560
|
+
{ providers: ["zai-coding-plan"], model: "glm-5.3-flash", variant: "low" },
|
|
3561
|
+
{ providers: ["xiaomi"], model: "mimo-v2.6-flash", variant: "low" }
|
|
3558
3562
|
]
|
|
3559
3563
|
},
|
|
3560
3564
|
"unspecified-low": {
|
|
@@ -3700,7 +3704,7 @@ var init_model_capability_aliases = __esm(() => {
|
|
|
3700
3704
|
description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
|
|
3701
3705
|
providerIDs: ["openai"],
|
|
3702
3706
|
allowedSubproviderHosts: ["vercel"],
|
|
3703
|
-
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-(?:astra|sol|luna))-fast$/.test(normalizedModelID),
|
|
3707
|
+
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-(?:astra|sol|luna)|gpt-6\.1-sol)-fast$/.test(normalizedModelID),
|
|
3704
3708
|
canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
|
|
3705
3709
|
},
|
|
3706
3710
|
{
|
|
@@ -3836,6 +3840,14 @@ var init_model_capability_heuristics = __esm(() => {
|
|
|
3836
3840
|
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
3837
3841
|
supportsTemperature: false
|
|
3838
3842
|
},
|
|
3843
|
+
{
|
|
3844
|
+
family: "gpt-6.1-sol",
|
|
3845
|
+
pattern: /gpt-6-1-sol/,
|
|
3846
|
+
variants: ["low", "medium", "high", "xhigh", "max"],
|
|
3847
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
3848
|
+
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
3849
|
+
supportsTemperature: false
|
|
3850
|
+
},
|
|
3839
3851
|
{
|
|
3840
3852
|
family: "gpt-6",
|
|
3841
3853
|
includes: ["gpt-6"],
|
|
@@ -4076,6 +4088,36 @@ var init_supplemental_entries = __esm(() => {
|
|
|
4076
4088
|
output: 128000
|
|
4077
4089
|
}
|
|
4078
4090
|
},
|
|
4091
|
+
"gpt-6.1-sol": {
|
|
4092
|
+
id: "gpt-6.1-sol",
|
|
4093
|
+
family: "gpt",
|
|
4094
|
+
reasoning: true,
|
|
4095
|
+
temperature: false,
|
|
4096
|
+
toolCall: true,
|
|
4097
|
+
modalities: {
|
|
4098
|
+
input: ["text", "image"],
|
|
4099
|
+
output: ["text"]
|
|
4100
|
+
},
|
|
4101
|
+
limit: {
|
|
4102
|
+
context: 400000,
|
|
4103
|
+
output: 128000
|
|
4104
|
+
}
|
|
4105
|
+
},
|
|
4106
|
+
"gpt-6.1-sol-fast": {
|
|
4107
|
+
id: "gpt-6.1-sol-fast",
|
|
4108
|
+
family: "gpt",
|
|
4109
|
+
reasoning: true,
|
|
4110
|
+
temperature: false,
|
|
4111
|
+
toolCall: true,
|
|
4112
|
+
modalities: {
|
|
4113
|
+
input: ["text", "image"],
|
|
4114
|
+
output: ["text"]
|
|
4115
|
+
},
|
|
4116
|
+
limit: {
|
|
4117
|
+
context: 400000,
|
|
4118
|
+
output: 128000
|
|
4119
|
+
}
|
|
4120
|
+
},
|
|
4079
4121
|
"gpt-6-luna": {
|
|
4080
4122
|
id: "gpt-6-luna",
|
|
4081
4123
|
family: "gpt-nano",
|
|
@@ -5257,7 +5299,7 @@ You are working on tasks that don't fit specific categories but require substant
|
|
|
5257
5299
|
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here when one subsystem plus its callers holds the mechanism and the evidence, once read, leaves one right answer. Wide but mechanical work belongs here or in a quick batch. When unsure, choose deep-low: a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt; re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
|
|
5258
5300
|
var init_openai_categories = __esm(() => {
|
|
5259
5301
|
init_types();
|
|
5260
|
-
DEEP_LOW_GATE_MODELS = ["gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
5302
|
+
DEEP_LOW_GATE_MODELS = ["gpt-6.1-sol", "gpt-6.1-sol-fast", "gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
5261
5303
|
OPENAI_CATEGORIES = [
|
|
5262
5304
|
{
|
|
5263
5305
|
name: "ultrabrain",
|
|
@@ -5268,7 +5310,7 @@ var init_openai_categories = __esm(() => {
|
|
|
5268
5310
|
},
|
|
5269
5311
|
{
|
|
5270
5312
|
name: "deep-low",
|
|
5271
|
-
config: { model: "openai/gpt-
|
|
5313
|
+
config: { model: "openai/gpt-6.1-sol", variant: "medium" },
|
|
5272
5314
|
description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads. **3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work is routed here.** Multiple goals fan out as parallel calls.",
|
|
5273
5315
|
callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
5274
5316
|
promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
|
|
@@ -60328,6 +60370,94 @@ var init_model_capabilities_generated = __esm(() => {
|
|
|
60328
60370
|
context: 1e6,
|
|
60329
60371
|
output: 128000
|
|
60330
60372
|
}
|
|
60373
|
+
},
|
|
60374
|
+
"glm-5.3-flash": {
|
|
60375
|
+
id: "glm-5.3-flash",
|
|
60376
|
+
family: "glm-flash",
|
|
60377
|
+
reasoning: true,
|
|
60378
|
+
temperature: true,
|
|
60379
|
+
toolCall: true,
|
|
60380
|
+
modalities: {
|
|
60381
|
+
input: [
|
|
60382
|
+
"text",
|
|
60383
|
+
"image",
|
|
60384
|
+
"video"
|
|
60385
|
+
],
|
|
60386
|
+
output: [
|
|
60387
|
+
"text"
|
|
60388
|
+
]
|
|
60389
|
+
},
|
|
60390
|
+
limit: {
|
|
60391
|
+
context: 1048576,
|
|
60392
|
+
output: 1048576
|
|
60393
|
+
}
|
|
60394
|
+
},
|
|
60395
|
+
"zai/glm-5.3-flash": {
|
|
60396
|
+
id: "zai/glm-5.3-flash",
|
|
60397
|
+
family: "glm-flash",
|
|
60398
|
+
reasoning: true,
|
|
60399
|
+
temperature: true,
|
|
60400
|
+
toolCall: true,
|
|
60401
|
+
modalities: {
|
|
60402
|
+
input: [
|
|
60403
|
+
"text",
|
|
60404
|
+
"image",
|
|
60405
|
+
"video",
|
|
60406
|
+
"pdf"
|
|
60407
|
+
],
|
|
60408
|
+
output: [
|
|
60409
|
+
"text"
|
|
60410
|
+
]
|
|
60411
|
+
},
|
|
60412
|
+
limit: {
|
|
60413
|
+
context: 1e6,
|
|
60414
|
+
output: 131072
|
|
60415
|
+
}
|
|
60416
|
+
},
|
|
60417
|
+
"mimo-v2.6-flash": {
|
|
60418
|
+
id: "mimo-v2.6-flash",
|
|
60419
|
+
family: "mimo",
|
|
60420
|
+
reasoning: true,
|
|
60421
|
+
temperature: true,
|
|
60422
|
+
toolCall: true,
|
|
60423
|
+
modalities: {
|
|
60424
|
+
input: [
|
|
60425
|
+
"text",
|
|
60426
|
+
"image",
|
|
60427
|
+
"audio",
|
|
60428
|
+
"video"
|
|
60429
|
+
],
|
|
60430
|
+
output: [
|
|
60431
|
+
"text"
|
|
60432
|
+
]
|
|
60433
|
+
},
|
|
60434
|
+
limit: {
|
|
60435
|
+
context: 1048576,
|
|
60436
|
+
output: 131072
|
|
60437
|
+
}
|
|
60438
|
+
},
|
|
60439
|
+
"xiaomi/mimo-v2.6-flash": {
|
|
60440
|
+
id: "xiaomi/mimo-v2.6-flash",
|
|
60441
|
+
family: "mimo",
|
|
60442
|
+
reasoning: true,
|
|
60443
|
+
temperature: true,
|
|
60444
|
+
toolCall: true,
|
|
60445
|
+
modalities: {
|
|
60446
|
+
input: [
|
|
60447
|
+
"text",
|
|
60448
|
+
"image",
|
|
60449
|
+
"audio",
|
|
60450
|
+
"video"
|
|
60451
|
+
],
|
|
60452
|
+
output: [
|
|
60453
|
+
"text"
|
|
60454
|
+
]
|
|
60455
|
+
},
|
|
60456
|
+
limit: {
|
|
60457
|
+
context: 1048576,
|
|
60458
|
+
input: 1048576,
|
|
60459
|
+
output: 131072
|
|
60460
|
+
}
|
|
60331
60461
|
}
|
|
60332
60462
|
}
|
|
60333
60463
|
};
|
|
@@ -74214,7 +74344,7 @@ init_shared();
|
|
|
74214
74344
|
// package.json
|
|
74215
74345
|
var package_default = {
|
|
74216
74346
|
name: "oh-my-opencode",
|
|
74217
|
-
version: "5.1.
|
|
74347
|
+
version: "5.1.4",
|
|
74218
74348
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
74219
74349
|
main: "./dist/index.js",
|
|
74220
74350
|
types: "dist/index.d.ts",
|
|
@@ -74391,7 +74521,7 @@ var package_default = {
|
|
|
74391
74521
|
},
|
|
74392
74522
|
devDependencies: {
|
|
74393
74523
|
"@clack/prompts": "^1.8.1",
|
|
74394
|
-
"@code-yeongyu/senpi": "2026.9.29-
|
|
74524
|
+
"@code-yeongyu/senpi": "2026.9.29-5",
|
|
74395
74525
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
74396
74526
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
74397
74527
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -74449,18 +74579,18 @@ var package_default = {
|
|
|
74449
74579
|
typescript: "^7.0.2"
|
|
74450
74580
|
},
|
|
74451
74581
|
optionalDependencies: {
|
|
74452
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
74453
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
74454
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
74455
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
74456
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
74457
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
74458
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
74459
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
74460
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
74461
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
74462
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
74463
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
74582
|
+
"oh-my-opencode-darwin-arm64": "5.1.4",
|
|
74583
|
+
"oh-my-opencode-darwin-x64": "5.1.4",
|
|
74584
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.4",
|
|
74585
|
+
"oh-my-opencode-linux-arm64": "5.1.4",
|
|
74586
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.4",
|
|
74587
|
+
"oh-my-opencode-linux-x64": "5.1.4",
|
|
74588
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.4",
|
|
74589
|
+
"oh-my-opencode-linux-x64-musl": "5.1.4",
|
|
74590
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.4",
|
|
74591
|
+
"oh-my-opencode-windows-arm64": "5.1.4",
|
|
74592
|
+
"oh-my-opencode-windows-x64": "5.1.4",
|
|
74593
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.4"
|
|
74464
74594
|
},
|
|
74465
74595
|
overrides: {
|
|
74466
74596
|
hono: "^4.13.8",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.4",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
},
|
|
178
178
|
"devDependencies": {
|
|
179
179
|
"@clack/prompts": "^1.8.1",
|
|
180
|
-
"@code-yeongyu/senpi": "2026.9.29-
|
|
180
|
+
"@code-yeongyu/senpi": "2026.9.29-5",
|
|
181
181
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
182
182
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
183
183
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -235,18 +235,18 @@
|
|
|
235
235
|
"typescript": "^7.0.2"
|
|
236
236
|
},
|
|
237
237
|
"optionalDependencies": {
|
|
238
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
239
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
240
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
241
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
242
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
243
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
244
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
245
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
246
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
247
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
248
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
249
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
238
|
+
"oh-my-opencode-darwin-arm64": "5.1.4",
|
|
239
|
+
"oh-my-opencode-darwin-x64": "5.1.4",
|
|
240
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.4",
|
|
241
|
+
"oh-my-opencode-linux-arm64": "5.1.4",
|
|
242
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.4",
|
|
243
|
+
"oh-my-opencode-linux-x64": "5.1.4",
|
|
244
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.4",
|
|
245
|
+
"oh-my-opencode-linux-x64-musl": "5.1.4",
|
|
246
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.4",
|
|
247
|
+
"oh-my-opencode-windows-arm64": "5.1.4",
|
|
248
|
+
"oh-my-opencode-windows-x64": "5.1.4",
|
|
249
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.4"
|
|
250
250
|
},
|
|
251
251
|
"overrides": {
|
|
252
252
|
"hono": "^4.13.8",
|
|
@@ -10,7 +10,7 @@ export function findWorkspaceRootOutsideContext(directory: string): string {
|
|
|
10
10
|
return realpathSync(nearestExistingAncestor(directory));
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
function nearestMarkedAncestor(directory: string): string | undefined {
|
|
13
|
+
export function nearestMarkedAncestor(directory: string): string | undefined {
|
|
14
14
|
let current = directory;
|
|
15
15
|
for (;;) {
|
|
16
16
|
if (existsSync(current) && WORKSPACE_MARKERS.some((marker) => existsSync(join(current, marker)))) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { afterEach, describe, expect, it } from "bun:test";
|
|
@@ -63,7 +63,7 @@ describe("missingDependencyResult", () => {
|
|
|
63
63
|
|
|
64
64
|
it("#given not installed lookup #when converted #then includes install decision availability", () => {
|
|
65
65
|
const root = tempRoot();
|
|
66
|
-
const installDecisionsPath = join(
|
|
66
|
+
const installDecisionsPath = join(root, "lsp-install-decisions.json");
|
|
67
67
|
const context = parseLspRequestContext({
|
|
68
68
|
cwd: root,
|
|
69
69
|
projectConfigPaths: [join(root, ".codex", "lsp-client.json")],
|
|
@@ -99,7 +99,37 @@ describe("missingDependencyResult", () => {
|
|
|
99
99
|
installHint: "npm install -g typescript-language-server typescript",
|
|
100
100
|
installDecisionTool: true,
|
|
101
101
|
installDecisionsPath,
|
|
102
|
+
decision: null,
|
|
102
103
|
},
|
|
103
104
|
});
|
|
104
105
|
});
|
|
106
|
+
|
|
107
|
+
it("#given a recorded decision #when a not installed lookup is converted #then availability carries it", () => {
|
|
108
|
+
const root = tempRoot();
|
|
109
|
+
const installDecisionsPath = join(root, "lsp-install-decisions.json");
|
|
110
|
+
writeFileSync(
|
|
111
|
+
installDecisionsPath,
|
|
112
|
+
JSON.stringify({ biome: { decision: "declined", decidedAt: "2026-09-29T00:00:00.000Z" } }),
|
|
113
|
+
);
|
|
114
|
+
const context = parseLspRequestContext({
|
|
115
|
+
cwd: root,
|
|
116
|
+
projectConfigPaths: [join(root, ".codex", "lsp-client.json")],
|
|
117
|
+
userConfigPath: join(root, "lsp-client.json"),
|
|
118
|
+
installDecisionsPath,
|
|
119
|
+
capabilities: { installDecisionTool: false },
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const result = runWithRequestContext(context, () =>
|
|
123
|
+
missingDependencyResult(
|
|
124
|
+
new LspServerLookupError("LSP server 'biome' is NOT INSTALLED.", {
|
|
125
|
+
status: "not_installed",
|
|
126
|
+
server: { id: "biome", command: ["biome", "lsp-proxy"], extensions: [".json"] },
|
|
127
|
+
installHint: "npm install -g @biomejs/biome",
|
|
128
|
+
}),
|
|
129
|
+
{ filePath: "a.json" },
|
|
130
|
+
),
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
expect(result?.details).toMatchObject({ availability: { kind: "not_installed", decision: "declined" } });
|
|
134
|
+
});
|
|
105
135
|
});
|