oh-my-openagent 5.1.6 → 5.1.7
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 +40 -16
- package/dist/cli/run/runnable-agent-resolver.d.ts +3 -0
- package/dist/cli-node/index.js +40 -16
- package/dist/hooks/goal/validation.d.ts +1 -0
- package/dist/hooks/no-hephaestus-non-gpt/hook.d.ts +4 -0
- package/dist/index.js +76 -34
- package/dist/plugin/chat-message/loop-commands.d.ts +1 -0
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/tui.js +13 -13
- package/package.json +13 -13
- package/packages/lsp-core/src/post-edit/file-location.ts +7 -2
- package/packages/lsp-core/src/post-edit/not-installed.test.ts +25 -0
- package/packages/lsp-core/src/tool-surface.test.ts +11 -11
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7 -0
- 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 +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/rules/README.md +0 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +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/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/components/ulw-loop/test/spawn-role-matrix.test.ts +16 -0
- 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-config-autonomous-features.test.mjs +24 -4
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +9 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/features/team-mode/team-layout-tmux/close-team-member-pane.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/claim.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/dependencies.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/get.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/store.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/update.d.ts +0 -1
- package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +0 -29
- package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +0 -13
- package/dist/openclaw/config.d.ts +0 -1
- package/dist/openclaw/dispatcher.d.ts +0 -1
- package/dist/openclaw/gateway-url-validation.d.ts +0 -1
- package/dist/openclaw/reply-listener-injection.d.ts +0 -1
- package/dist/openclaw/reply-listener-start.d.ts +0 -1
- package/dist/openclaw/session-registry.d.ts +0 -1
- package/dist/openclaw/tmux.d.ts +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -64,7 +64,7 @@ var package_default;
|
|
|
64
64
|
var init_package = __esm(() => {
|
|
65
65
|
package_default = {
|
|
66
66
|
name: "oh-my-opencode",
|
|
67
|
-
version: "5.1.
|
|
67
|
+
version: "5.1.7",
|
|
68
68
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
69
69
|
main: "./dist/index.js",
|
|
70
70
|
types: "dist/index.d.ts",
|
|
@@ -299,18 +299,18 @@ var init_package = __esm(() => {
|
|
|
299
299
|
typescript: "^7.0.2"
|
|
300
300
|
},
|
|
301
301
|
optionalDependencies: {
|
|
302
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
303
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
304
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
305
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
306
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
307
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
308
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
309
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
310
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
311
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
312
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
313
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
302
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
303
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
304
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
305
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
306
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
307
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
308
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
309
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
311
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
312
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
313
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
314
314
|
},
|
|
315
315
|
overrides: {
|
|
316
316
|
hono: "^4.13.8",
|
|
@@ -89377,7 +89377,7 @@ var package_default2;
|
|
|
89377
89377
|
var init_package2 = __esm(() => {
|
|
89378
89378
|
package_default2 = {
|
|
89379
89379
|
name: "@oh-my-opencode/omo-codex",
|
|
89380
|
-
version: "5.1.
|
|
89380
|
+
version: "5.1.7",
|
|
89381
89381
|
type: "module",
|
|
89382
89382
|
private: true,
|
|
89383
89383
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95097,6 +95097,12 @@ ${featureName} = true
|
|
|
95097
95097
|
}
|
|
95098
95098
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
95099
95099
|
}
|
|
95100
|
+
function removeFeature(config, featureName) {
|
|
95101
|
+
const section = findTomlSection(config, "features");
|
|
95102
|
+
if (section !== null)
|
|
95103
|
+
return removeSetting(config, section, featureName);
|
|
95104
|
+
return removeRootSetting(config, `features.${featureName}`);
|
|
95105
|
+
}
|
|
95100
95106
|
|
|
95101
95107
|
// packages/omo-codex/src/install/codex-config-marketplaces.ts
|
|
95102
95108
|
var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
|
|
@@ -95689,6 +95695,7 @@ async function updateCodexConfig(input) {
|
|
|
95689
95695
|
config = ensureFeatureEnabled(config, "plugins");
|
|
95690
95696
|
config = ensureFeatureEnabled(config, "plugin_hooks");
|
|
95691
95697
|
config = ensureFeatureEnabled(config, "multi_agent");
|
|
95698
|
+
config = removeFeature(config, "child_agents_md");
|
|
95692
95699
|
config = removeUnsupportedCodexMultiAgentModeConfig(config);
|
|
95693
95700
|
config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
|
|
95694
95701
|
config = ensureCodexMultiAgentV2Config(config, {
|
|
@@ -105346,12 +105353,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105346
105353
|
})?.name;
|
|
105347
105354
|
if (configuredAgent)
|
|
105348
105355
|
return configuredAgent;
|
|
105349
|
-
|
|
105356
|
+
const matched = agents.find((agent) => {
|
|
105350
105357
|
if (!agent.name)
|
|
105351
105358
|
return false;
|
|
105352
105359
|
return getAgentConfigKey(agent.name) === resolvedConfigKey;
|
|
105353
|
-
})?.name
|
|
105360
|
+
})?.name;
|
|
105361
|
+
if (matched)
|
|
105362
|
+
return matched;
|
|
105363
|
+
const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
|
|
105364
|
+
const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
|
|
105365
|
+
if (parsedCategory.success) {
|
|
105366
|
+
throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
|
|
105367
|
+
}
|
|
105368
|
+
if (registered.length > 0) {
|
|
105369
|
+
throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
|
|
105370
|
+
}
|
|
105371
|
+
return resolvedAgent;
|
|
105354
105372
|
} catch (error) {
|
|
105373
|
+
if (error instanceof UnknownRunAgentError)
|
|
105374
|
+
throw error;
|
|
105355
105375
|
if (!(error instanceof Error)) {
|
|
105356
105376
|
throw error;
|
|
105357
105377
|
}
|
|
@@ -105359,6 +105379,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105359
105379
|
}
|
|
105360
105380
|
}
|
|
105361
105381
|
|
|
105382
|
+
class UnknownRunAgentError extends Error {
|
|
105383
|
+
name = "UnknownRunAgentError";
|
|
105384
|
+
}
|
|
105385
|
+
|
|
105362
105386
|
// packages/omo-opencode/src/cli/run/runner.ts
|
|
105363
105387
|
var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
|
|
105364
105388
|
async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
|
|
@@ -9,3 +9,6 @@ export interface RunAgentDisplayNameConfig {
|
|
|
9
9
|
} | undefined>>;
|
|
10
10
|
}
|
|
11
11
|
export declare function resolveRunnableRunAgent(client: RunAgentListClient, resolvedAgent: string, config?: RunAgentDisplayNameConfig): Promise<string>;
|
|
12
|
+
export declare class UnknownRunAgentError extends Error {
|
|
13
|
+
readonly name = "UnknownRunAgentError";
|
|
14
|
+
}
|
package/dist/cli-node/index.js
CHANGED
|
@@ -65,7 +65,7 @@ var package_default;
|
|
|
65
65
|
var init_package = __esm(() => {
|
|
66
66
|
package_default = {
|
|
67
67
|
name: "oh-my-opencode",
|
|
68
|
-
version: "5.1.
|
|
68
|
+
version: "5.1.7",
|
|
69
69
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
70
70
|
main: "./dist/index.js",
|
|
71
71
|
types: "dist/index.d.ts",
|
|
@@ -300,18 +300,18 @@ var init_package = __esm(() => {
|
|
|
300
300
|
typescript: "^7.0.2"
|
|
301
301
|
},
|
|
302
302
|
optionalDependencies: {
|
|
303
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
304
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
305
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
306
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
307
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
308
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
309
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
310
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
311
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
312
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
313
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
314
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
303
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
304
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
305
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
306
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
307
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
308
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
309
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
311
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
312
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
313
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
314
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
315
315
|
},
|
|
316
316
|
overrides: {
|
|
317
317
|
hono: "^4.13.8",
|
|
@@ -89456,7 +89456,7 @@ var package_default2;
|
|
|
89456
89456
|
var init_package2 = __esm(() => {
|
|
89457
89457
|
package_default2 = {
|
|
89458
89458
|
name: "@oh-my-opencode/omo-codex",
|
|
89459
|
-
version: "5.1.
|
|
89459
|
+
version: "5.1.7",
|
|
89460
89460
|
type: "module",
|
|
89461
89461
|
private: true,
|
|
89462
89462
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95176,6 +95176,12 @@ ${featureName} = true
|
|
|
95176
95176
|
}
|
|
95177
95177
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
95178
95178
|
}
|
|
95179
|
+
function removeFeature(config, featureName) {
|
|
95180
|
+
const section = findTomlSection(config, "features");
|
|
95181
|
+
if (section !== null)
|
|
95182
|
+
return removeSetting(config, section, featureName);
|
|
95183
|
+
return removeRootSetting(config, `features.${featureName}`);
|
|
95184
|
+
}
|
|
95179
95185
|
|
|
95180
95186
|
// packages/omo-codex/src/install/codex-config-marketplaces.ts
|
|
95181
95187
|
var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
|
|
@@ -95768,6 +95774,7 @@ async function updateCodexConfig(input) {
|
|
|
95768
95774
|
config = ensureFeatureEnabled(config, "plugins");
|
|
95769
95775
|
config = ensureFeatureEnabled(config, "plugin_hooks");
|
|
95770
95776
|
config = ensureFeatureEnabled(config, "multi_agent");
|
|
95777
|
+
config = removeFeature(config, "child_agents_md");
|
|
95771
95778
|
config = removeUnsupportedCodexMultiAgentModeConfig(config);
|
|
95772
95779
|
config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
|
|
95773
95780
|
config = ensureCodexMultiAgentV2Config(config, {
|
|
@@ -105425,12 +105432,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105425
105432
|
})?.name;
|
|
105426
105433
|
if (configuredAgent)
|
|
105427
105434
|
return configuredAgent;
|
|
105428
|
-
|
|
105435
|
+
const matched = agents.find((agent) => {
|
|
105429
105436
|
if (!agent.name)
|
|
105430
105437
|
return false;
|
|
105431
105438
|
return getAgentConfigKey(agent.name) === resolvedConfigKey;
|
|
105432
|
-
})?.name
|
|
105439
|
+
})?.name;
|
|
105440
|
+
if (matched)
|
|
105441
|
+
return matched;
|
|
105442
|
+
const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
|
|
105443
|
+
const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
|
|
105444
|
+
if (parsedCategory.success) {
|
|
105445
|
+
throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
|
|
105446
|
+
}
|
|
105447
|
+
if (registered.length > 0) {
|
|
105448
|
+
throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
|
|
105449
|
+
}
|
|
105450
|
+
return resolvedAgent;
|
|
105433
105451
|
} catch (error) {
|
|
105452
|
+
if (error instanceof UnknownRunAgentError)
|
|
105453
|
+
throw error;
|
|
105434
105454
|
if (!(error instanceof Error)) {
|
|
105435
105455
|
throw error;
|
|
105436
105456
|
}
|
|
@@ -105438,6 +105458,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105438
105458
|
}
|
|
105439
105459
|
}
|
|
105440
105460
|
|
|
105461
|
+
class UnknownRunAgentError extends Error {
|
|
105462
|
+
name = "UnknownRunAgentError";
|
|
105463
|
+
}
|
|
105464
|
+
|
|
105441
105465
|
// packages/omo-opencode/src/cli/run/runner.ts
|
|
105442
105466
|
var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
|
|
105443
105467
|
async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
|
|
@@ -2,6 +2,10 @@ import type { PluginInput } from "@opencode-ai/plugin";
|
|
|
2
2
|
type NoHephaestusNonGptHookOptions = {
|
|
3
3
|
allowNonGptModel?: boolean;
|
|
4
4
|
};
|
|
5
|
+
export declare class HephaestusRequiresGptError extends Error {
|
|
6
|
+
readonly name = "HephaestusRequiresGptError";
|
|
7
|
+
constructor(modelID: string);
|
|
8
|
+
}
|
|
5
9
|
export declare function createNoHephaestusNonGptHook(ctx: PluginInput, options?: NoHephaestusNonGptHookOptions): {
|
|
6
10
|
"chat.message": (input: {
|
|
7
11
|
sessionID: string;
|
package/dist/index.js
CHANGED
|
@@ -7901,7 +7901,7 @@ var init_powershell_zip_entry_listing = __esm(() => {
|
|
|
7901
7901
|
|
|
7902
7902
|
// packages/utils/src/zip-entry-listing/tar-zip-entry-listing.ts
|
|
7903
7903
|
function parseTarListedZipEntry(line) {
|
|
7904
|
-
const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\
|
|
7904
|
+
const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\S+\s+\d+\s+(?:\d{2}:\d{2}|\d{4})\s+(.*)$/);
|
|
7905
7905
|
if (!match) {
|
|
7906
7906
|
return null;
|
|
7907
7907
|
}
|
|
@@ -91935,11 +91935,6 @@ function resolveStartDir(startPath) {
|
|
|
91935
91935
|
function hasProjectMarker(directory) {
|
|
91936
91936
|
return PROJECT_MARKERS.some((marker) => existsSync41(join52(directory, marker)));
|
|
91937
91937
|
}
|
|
91938
|
-
// packages/agents-md-core/src/constants.ts
|
|
91939
|
-
var TRUNCATION_NOTICE_PREFIX = `
|
|
91940
|
-
|
|
91941
|
-
[Note: Content was truncated to save context window space. For full context, please read the file directly: `;
|
|
91942
|
-
var TRUNCATION_NOTICE_SUFFIX = "]";
|
|
91943
91938
|
// packages/agents-md-core/src/finder.ts
|
|
91944
91939
|
import { realpathSync as realpathSync10 } from "fs";
|
|
91945
91940
|
import { isAbsolute as isAbsolute9, relative as relative11, resolve as resolve13 } from "path";
|
|
@@ -91965,6 +91960,12 @@ function isSameOrChildPath3(childPath, parentPath) {
|
|
|
91965
91960
|
const relativePath = relative11(parentPath, childPath);
|
|
91966
91961
|
return relativePath === "" || !relativePath.startsWith("..") && !isAbsolute9(relativePath);
|
|
91967
91962
|
}
|
|
91963
|
+
// packages/agents-md-core/src/constants.ts
|
|
91964
|
+
var TRUNCATION_NOTICE_PREFIX = `
|
|
91965
|
+
|
|
91966
|
+
[Note: Content was truncated to save context window space. For full context, please read the file directly: `;
|
|
91967
|
+
var TRUNCATION_NOTICE_SUFFIX = "]";
|
|
91968
|
+
|
|
91968
91969
|
// packages/agents-md-core/src/formatter.ts
|
|
91969
91970
|
function formatAgentsMdContextBlock(input) {
|
|
91970
91971
|
const truncationNotice = input.truncated ? `${TRUNCATION_NOTICE_PREFIX}${input.agentsPath}${TRUNCATION_NOTICE_SUFFIX}` : "";
|
|
@@ -98589,7 +98590,7 @@ function getCachedVersion(options = {}) {
|
|
|
98589
98590
|
// package.json
|
|
98590
98591
|
var package_default = {
|
|
98591
98592
|
name: "oh-my-opencode",
|
|
98592
|
-
version: "5.1.
|
|
98593
|
+
version: "5.1.7",
|
|
98593
98594
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
98594
98595
|
main: "./dist/index.js",
|
|
98595
98596
|
types: "dist/index.d.ts",
|
|
@@ -98824,18 +98825,18 @@ var package_default = {
|
|
|
98824
98825
|
typescript: "^7.0.2"
|
|
98825
98826
|
},
|
|
98826
98827
|
optionalDependencies: {
|
|
98827
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
98828
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
98829
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
98830
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
98831
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
98832
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
98833
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
98834
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
98835
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
98836
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
98837
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
98838
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
98828
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
98829
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
98830
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
98831
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
98832
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
98833
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
98834
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
98835
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
98836
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
98837
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
98838
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
98839
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
98839
98840
|
},
|
|
98840
98841
|
overrides: {
|
|
98841
98842
|
hono: "^4.13.8",
|
|
@@ -108009,6 +108010,13 @@ var TOAST_MESSAGE2 = [
|
|
|
108009
108010
|
"For Claude/Kimi/GLM models, always use Sisyphus."
|
|
108010
108011
|
].join(`
|
|
108011
108012
|
`);
|
|
108013
|
+
|
|
108014
|
+
class HephaestusRequiresGptError extends Error {
|
|
108015
|
+
name = "HephaestusRequiresGptError";
|
|
108016
|
+
constructor(modelID) {
|
|
108017
|
+
super(`Hephaestus requires a GPT-family model (got ${modelID}). Use Sisyphus for non-GPT models.`);
|
|
108018
|
+
}
|
|
108019
|
+
}
|
|
108012
108020
|
function showToast2(ctx, sessionID, variant) {
|
|
108013
108021
|
ctx.client.tui.showToast({
|
|
108014
108022
|
body: {
|
|
@@ -108036,11 +108044,13 @@ function createNoHephaestusNonGptHook(ctx, options) {
|
|
|
108036
108044
|
if (allowNonGptModel) {
|
|
108037
108045
|
return;
|
|
108038
108046
|
}
|
|
108039
|
-
|
|
108040
|
-
|
|
108041
|
-
|
|
108042
|
-
|
|
108043
|
-
|
|
108047
|
+
const error = new HephaestusRequiresGptError(modelID);
|
|
108048
|
+
log2("[no-hephaestus-non-gpt] Refusing non-GPT Hephaestus primary", {
|
|
108049
|
+
sessionID: input.sessionID,
|
|
108050
|
+
modelID,
|
|
108051
|
+
error: error.message
|
|
108052
|
+
});
|
|
108053
|
+
throw error;
|
|
108044
108054
|
}
|
|
108045
108055
|
}
|
|
108046
108056
|
};
|
|
@@ -166432,6 +166442,33 @@ function createAgentConfigCacheKey(config) {
|
|
|
166432
166442
|
skills: config.skills
|
|
166433
166443
|
});
|
|
166434
166444
|
}
|
|
166445
|
+
function attachHiddenConfigKeyAliases(config, pluginConfig) {
|
|
166446
|
+
const agents = config.agent;
|
|
166447
|
+
if (typeof agents !== "object" || agents === null) {
|
|
166448
|
+
return;
|
|
166449
|
+
}
|
|
166450
|
+
const agentMap = agents;
|
|
166451
|
+
const overrides = pluginConfig.agents;
|
|
166452
|
+
const configKeys = new Set([
|
|
166453
|
+
...Object.keys(AGENT_DISPLAY_NAMES),
|
|
166454
|
+
...Object.keys(overrides ?? {})
|
|
166455
|
+
]);
|
|
166456
|
+
for (const configKey of configKeys) {
|
|
166457
|
+
const displayName = getAgentListDisplayName(configKey, overrides);
|
|
166458
|
+
if (!displayName || displayName === configKey) {
|
|
166459
|
+
continue;
|
|
166460
|
+
}
|
|
166461
|
+
const displayEntry = agentMap[displayName];
|
|
166462
|
+
if (typeof displayEntry !== "object" || displayEntry === null) {
|
|
166463
|
+
continue;
|
|
166464
|
+
}
|
|
166465
|
+
agentMap[configKey] = {
|
|
166466
|
+
...displayEntry,
|
|
166467
|
+
hidden: true
|
|
166468
|
+
};
|
|
166469
|
+
registerAgentName(configKey);
|
|
166470
|
+
}
|
|
166471
|
+
}
|
|
166435
166472
|
function replayAgentConfigSideEffects(params) {
|
|
166436
166473
|
if (params.configuredDefaultAgent && typeof params.defaultAgent === "string") {
|
|
166437
166474
|
setDefaultAgentForSort(params.defaultAgent);
|
|
@@ -166486,6 +166523,7 @@ function createConfigHandler(deps) {
|
|
|
166486
166523
|
};
|
|
166487
166524
|
}
|
|
166488
166525
|
applyToolConfig({ config, pluginConfig, agentResult });
|
|
166526
|
+
attachHiddenConfigKeyAliases(config, pluginConfig);
|
|
166489
166527
|
await applyMcpConfig({ config, pluginConfig, ctx, pluginComponents });
|
|
166490
166528
|
await applyCommandConfig({ config, pluginConfig, ctx, pluginComponents });
|
|
166491
166529
|
if (runtimeSkillSourceUrl) {
|
|
@@ -173965,11 +174003,20 @@ function handleGoalMessage(args) {
|
|
|
173965
174003
|
if (!hooks.goal || nativeGoalCommand) {
|
|
173966
174004
|
return;
|
|
173967
174005
|
}
|
|
173968
|
-
const promptText = extractPromptText5(output.parts);
|
|
174006
|
+
const promptText = args.originalPromptText ?? extractPromptText5(output.parts);
|
|
173969
174007
|
if (promptText.includes(AUTO_SLASH_COMMAND_TAG_OPEN)) {
|
|
173970
174008
|
return;
|
|
173971
174009
|
}
|
|
173972
|
-
const
|
|
174010
|
+
const goalCommand = promptText.trim().match(/^\/goal(?:\s+([\s\S]*))?$/i);
|
|
174011
|
+
if (!goalCommand) {
|
|
174012
|
+
const objective = promptText.trim();
|
|
174013
|
+
if (isFirstMessage && pluginConfig.default_mode?.goal && objective.length > 0 && objective.length <= MAX_OBJECTIVE_LENGTH) {
|
|
174014
|
+
hooks.goal.setGoal(input.sessionID, objective);
|
|
174015
|
+
log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
|
|
174016
|
+
}
|
|
174017
|
+
return;
|
|
174018
|
+
}
|
|
174019
|
+
const parsed = parseGoalCommand(goalCommand[1] ?? "");
|
|
173973
174020
|
switch (parsed.kind) {
|
|
173974
174021
|
case "setObjective":
|
|
173975
174022
|
hooks.goal.setGoal(input.sessionID, parsed.objective);
|
|
@@ -173993,13 +174040,6 @@ function handleGoalMessage(args) {
|
|
|
173993
174040
|
default:
|
|
173994
174041
|
break;
|
|
173995
174042
|
}
|
|
173996
|
-
if (parsed.kind === "show" && isFirstMessage && pluginConfig.default_mode?.goal) {
|
|
173997
|
-
const objective = promptText.trim();
|
|
173998
|
-
if (objective.length > 0) {
|
|
173999
|
-
hooks.goal.setGoal(input.sessionID, objective);
|
|
174000
|
-
log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
|
|
174001
|
-
}
|
|
174002
|
-
}
|
|
174003
174043
|
}
|
|
174004
174044
|
|
|
174005
174045
|
// packages/omo-opencode/src/plugin/chat-message/model-cache-warning.ts
|
|
@@ -174224,6 +174264,7 @@ function createChatMessageHandler3(args) {
|
|
|
174224
174264
|
if (input.agent) {
|
|
174225
174265
|
updateSessionAgent(input.sessionID, input.agent);
|
|
174226
174266
|
}
|
|
174267
|
+
const originalPromptText = extractPromptText5(output.parts);
|
|
174227
174268
|
const slashCommand = detectSlashCommand(extractPromptText3(output.parts));
|
|
174228
174269
|
if (slashCommand?.command === "stop-continuation") {
|
|
174229
174270
|
stopContinuation({
|
|
@@ -174254,7 +174295,8 @@ function createChatMessageHandler3(args) {
|
|
|
174254
174295
|
output,
|
|
174255
174296
|
isFirstMessage,
|
|
174256
174297
|
pluginConfig,
|
|
174257
|
-
nativeGoalCommand
|
|
174298
|
+
nativeGoalCommand,
|
|
174299
|
+
originalPromptText
|
|
174258
174300
|
});
|
|
174259
174301
|
await applyUltraworkModelOverrideOnMessage(pluginConfig, input.agent, output, pluginContext.client.tui, input.sessionID, pluginContext.client);
|
|
174260
174302
|
};
|
package/dist/tui.js
CHANGED
|
@@ -74617,7 +74617,7 @@ init_shared();
|
|
|
74617
74617
|
// package.json
|
|
74618
74618
|
var package_default = {
|
|
74619
74619
|
name: "oh-my-opencode",
|
|
74620
|
-
version: "5.1.
|
|
74620
|
+
version: "5.1.7",
|
|
74621
74621
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
74622
74622
|
main: "./dist/index.js",
|
|
74623
74623
|
types: "dist/index.d.ts",
|
|
@@ -74852,18 +74852,18 @@ var package_default = {
|
|
|
74852
74852
|
typescript: "^7.0.2"
|
|
74853
74853
|
},
|
|
74854
74854
|
optionalDependencies: {
|
|
74855
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
74856
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
74857
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
74858
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
74859
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
74860
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
74861
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
74862
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
74863
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
74864
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
74865
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
74866
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
74855
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
74856
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
74857
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
74858
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
74859
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
74860
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
74861
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
74862
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
74863
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
74864
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
74865
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
74866
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
74867
74867
|
},
|
|
74868
74868
|
overrides: {
|
|
74869
74869
|
hono: "^4.13.8",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-openagent",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.7",
|
|
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",
|
|
@@ -235,18 +235,18 @@
|
|
|
235
235
|
"typescript": "^7.0.2"
|
|
236
236
|
},
|
|
237
237
|
"optionalDependencies": {
|
|
238
|
-
"oh-my-openagent-darwin-arm64": "5.1.
|
|
239
|
-
"oh-my-openagent-darwin-x64": "5.1.
|
|
240
|
-
"oh-my-openagent-darwin-x64-baseline": "5.1.
|
|
241
|
-
"oh-my-openagent-linux-arm64": "5.1.
|
|
242
|
-
"oh-my-openagent-linux-arm64-musl": "5.1.
|
|
243
|
-
"oh-my-openagent-linux-x64": "5.1.
|
|
244
|
-
"oh-my-openagent-linux-x64-baseline": "5.1.
|
|
245
|
-
"oh-my-openagent-linux-x64-musl": "5.1.
|
|
246
|
-
"oh-my-openagent-linux-x64-musl-baseline": "5.1.
|
|
247
|
-
"oh-my-openagent-windows-arm64": "5.1.
|
|
248
|
-
"oh-my-openagent-windows-x64": "5.1.
|
|
249
|
-
"oh-my-openagent-windows-x64-baseline": "5.1.
|
|
238
|
+
"oh-my-openagent-darwin-arm64": "5.1.7",
|
|
239
|
+
"oh-my-openagent-darwin-x64": "5.1.7",
|
|
240
|
+
"oh-my-openagent-darwin-x64-baseline": "5.1.7",
|
|
241
|
+
"oh-my-openagent-linux-arm64": "5.1.7",
|
|
242
|
+
"oh-my-openagent-linux-arm64-musl": "5.1.7",
|
|
243
|
+
"oh-my-openagent-linux-x64": "5.1.7",
|
|
244
|
+
"oh-my-openagent-linux-x64-baseline": "5.1.7",
|
|
245
|
+
"oh-my-openagent-linux-x64-musl": "5.1.7",
|
|
246
|
+
"oh-my-openagent-linux-x64-musl-baseline": "5.1.7",
|
|
247
|
+
"oh-my-openagent-windows-arm64": "5.1.7",
|
|
248
|
+
"oh-my-openagent-windows-x64": "5.1.7",
|
|
249
|
+
"oh-my-openagent-windows-x64-baseline": "5.1.7"
|
|
250
250
|
},
|
|
251
251
|
"overrides": {
|
|
252
252
|
"hono": "^4.13.8",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tmpdir } from "node:os";
|
|
1
|
+
import { homedir, tmpdir } from "node:os";
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
3
|
|
|
4
4
|
import { nearestMarkedAncestor } from "../lsp/outside-context-workspace.js";
|
|
@@ -11,6 +11,8 @@ export interface PostEditFileLocationOptions {
|
|
|
11
11
|
readonly agentDirs: readonly string[];
|
|
12
12
|
/** Temp roots; defaults to the canonical OS temp dir (plus `/tmp` off Windows). */
|
|
13
13
|
readonly tempDirs?: readonly string[];
|
|
14
|
+
/** Home dirs that never count as a project root themselves; defaults to the OS home dir. */
|
|
15
|
+
readonly homeDirs?: readonly string[];
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -19,6 +21,8 @@ export interface PostEditFileLocationOptions {
|
|
|
19
21
|
* A project root is the nearest ancestor carrying one of lsp-core's `WORKSPACE_MARKERS` (the marker set the
|
|
20
22
|
* out-of-cwd workspace resolver uses). Inside a temp dir, only a marked root strictly below the temp root
|
|
21
23
|
* counts, so a stray `package.json` left in the temp root does not turn every scratch file into a project.
|
|
24
|
+
* The home dir is never a project root either: a dotfiles `.git` or stray `~/package.json` there does not make
|
|
25
|
+
* every home-level file a project, while a marked project below home still is one.
|
|
22
26
|
* Paths are canonicalized first because macOS `/tmp` and `/var` are symlinks.
|
|
23
27
|
*/
|
|
24
28
|
export function classifyPostEditFileLocation(
|
|
@@ -38,7 +42,8 @@ export function classifyPostEditFileLocation(
|
|
|
38
42
|
const ownProject = projectRoot !== undefined && projectRoot !== tempRoot && isPathInside(tempRoot, projectRoot);
|
|
39
43
|
return ownProject ? "project" : "temp";
|
|
40
44
|
}
|
|
41
|
-
|
|
45
|
+
if (projectRoot === undefined) return "outside_project";
|
|
46
|
+
return canonicalDirectories(options.homeDirs ?? [homedir()]).includes(projectRoot) ? "outside_project" : "project";
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
function defaultTempDirectories(): readonly string[] {
|
|
@@ -93,6 +93,31 @@ describe("classifyPostEditFileLocation", () => {
|
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
+
for (const marker of ["package.json", ".git"] as const) {
|
|
97
|
+
it(`#given a ${marker} directly in HOME #when a home-level file is classified #then HOME is not its project`, () => {
|
|
98
|
+
const home = tempRoot("lsp-postedit-home-");
|
|
99
|
+
if (marker === ".git") mkdirSync(join(home, ".git"));
|
|
100
|
+
else touch(join(home, marker), "{}\n");
|
|
101
|
+
const topLevel = touch(join(home, "notes.ts"));
|
|
102
|
+
const nested = touch(join(home, "scratch", "draft.ts"));
|
|
103
|
+
|
|
104
|
+
const options = { cwd: home, agentDirs: [], tempDirs: [], homeDirs: [home] };
|
|
105
|
+
expect(classifyPostEditFileLocation(topLevel, options)).toBe("outside_project");
|
|
106
|
+
expect(classifyPostEditFileLocation(nested, options)).toBe("outside_project");
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
it("#given a marked HOME and a project under it #when a project file is classified #then it is still a project", () => {
|
|
111
|
+
const home = tempRoot("lsp-postedit-homeproject-");
|
|
112
|
+
mkdirSync(join(home, ".git"));
|
|
113
|
+
touch(join(home, "work", "app", "package.json"), "{}\n");
|
|
114
|
+
const file = touch(join(home, "work", "app", "src", "a.ts"));
|
|
115
|
+
|
|
116
|
+
expect(classifyPostEditFileLocation(file, { cwd: home, agentDirs: [], tempDirs: [], homeDirs: [home] })).toBe(
|
|
117
|
+
"project",
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
96
121
|
it("#given a project with its own marker inside a temp dir #when classified #then it is a project", () => {
|
|
97
122
|
const temp = tempRoot("lsp-postedit-tempproject-");
|
|
98
123
|
const project = join(temp, "checkout");
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
2
|
|
|
3
|
+
import { handleLspMcpRequest } from "./mcp.js";
|
|
3
4
|
import { createStandaloneMcpRequestContext, runWithRequestContext } from "./request-context.js";
|
|
4
|
-
import { coerceToolArguments, executeLspTool
|
|
5
|
+
import { coerceToolArguments, executeLspTool } from "./tools.js";
|
|
5
6
|
|
|
6
7
|
const expectedToolSurface = [
|
|
7
8
|
{
|
|
@@ -140,17 +141,15 @@ const expectedToolSurface = [
|
|
|
140
141
|
];
|
|
141
142
|
|
|
142
143
|
describe("LSP core tool surface", () => {
|
|
143
|
-
test("#given
|
|
144
|
-
// given
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
inputSchema: tool.inputSchema,
|
|
150
|
-
}));
|
|
144
|
+
test("#given a JSON-RPC tools/list request #when descriptors are returned #then the public nine-tool schemas are pinned", async () => {
|
|
145
|
+
// given
|
|
146
|
+
const request = { jsonrpc: "2.0", id: 21, method: "tools/list" };
|
|
147
|
+
|
|
148
|
+
// when
|
|
149
|
+
const response = await handleLspMcpRequest(request);
|
|
151
150
|
|
|
152
151
|
// then
|
|
153
|
-
expect(
|
|
152
|
+
expect(response?.result?.tools).toEqual(expectedToolSurface);
|
|
154
153
|
});
|
|
155
154
|
|
|
156
155
|
test("#given legacy tool aliases #when executed #then aliases are callable but not listed", async () => {
|
|
@@ -161,7 +160,8 @@ describe("LSP core tool surface", () => {
|
|
|
161
160
|
|
|
162
161
|
// then
|
|
163
162
|
expect(result.content[0]?.text).toContain("No LSP server configured for extension: .wat");
|
|
164
|
-
|
|
163
|
+
const listResponse = await handleLspMcpRequest({ jsonrpc: "2.0", id: 23, method: "tools/list" });
|
|
164
|
+
expect(listResponse?.result?.tools?.map((tool: { name: string }) => tool.name)).not.toContain("lsp_diagnostics");
|
|
165
165
|
});
|
|
166
166
|
|
|
167
167
|
test("#given non-object tool arguments #when coerced #then they produce an empty argument record", () => {
|