feat(coding-agent): added toggle for launch tool

- Added a configuration setting `launch.enabled` to control the availability of the project-scoped launch tool.
- Integrated the setting into the bash tool and tool registry to conditionally enable or disable the launch functionality.
- Updated documentation and settings schema to include the new toggle.
This commit is contained in:
can1357
2026-07-13 04:20:15 +02:00
parent 4cfec93458
commit f83e409218
6 changed files with 18 additions and 3 deletions
+2 -1
View File
@@ -451,7 +451,7 @@ tools:
| `tools.artifactTailBytes` | number | `20` | KB of tail kept inline on spill. |
| `tools.artifactTailLines` | number | `500` | Max tail lines kept inline on spill. |
Individual built-in tools are toggled by their own keys, e.g. `bash.enabled`, `eval.py`, `eval.js`, `glob.enabled`, `grep.enabled`, `fetch.enabled`, `browser.enabled`, `astEdit.enabled`, `astGrep.enabled`, `web_search.enabled`, `inspect_image.enabled`.
Individual built-in tools are toggled by their own keys, e.g. `bash.enabled`, `launch.enabled`, `eval.py`, `eval.js`, `glob.enabled`, `grep.enabled`, `fetch.enabled`, `browser.enabled`, `astEdit.enabled`, `astGrep.enabled`, `web_search.enabled`, `inspect_image.enabled`.
### Shell, eval, and LSP
@@ -481,6 +481,7 @@ lsp:
| Key | Type | Default | Notes |
|---|---|---|---|
| `bash.enabled` | boolean | `true` | Enable the bash tool. |
| `launch.enabled` | boolean | `true` | Enable the launch tool for shared long-running project processes. |
| `bash.autoBackground.enabled` | boolean | `false` | Auto-background long-running commands. |
| `bash.autoBackground.thresholdMs` | number | `60000` | Threshold before auto-backgrounding. |
| `eval.py` | boolean | `true` | Python eval backend. `PI_PY=0` disables for the process. |
+1 -1
View File
@@ -8,7 +8,7 @@
- Added a compact session-only model picker (Alt+P) for quick model switching without changing roles
- Added `@` search to the Alt+P / `/switch` picker: it lists configured Ctrl+P quick roles in matching segment colors and applies the selected role's model and thinking for the current session.
- Redesigned Agent Hub entries as two-line cards: identity (status glyph, name, agent type, parent when nested) on the left, active model + reasoning level and age right-aligned, with the task description on its own line; dropped the redundant `sub · of Main` noise
- Added a project-scoped `launch` tool for shared long-running services and debuggers, with readiness probes, bounded logs, PTY input, restart policies, and automatic teardown after the last omp instance exits.
- Added a project-scoped `launch` tool for shared long-running services and debuggers, with readiness probes, bounded logs, PTY input, restart policies, and automatic teardown after the last omp instance exits. Gated behind the `launch.enabled` setting (default on); when disabled the tool is withdrawn and the bash prompt drops its "use launch" guidance.
- Added `detached` `launch` starts for standalone services that survive every omp instance and broker shutdown, then reconnect to the next broker for logs and explicit stop.
### Changed
@@ -3549,6 +3549,17 @@ export const SETTINGS_SCHEMA = {
},
},
"launch.enabled": {
type: "boolean",
default: true,
ui: {
tab: "tools",
group: "Available Tools",
label: "Launch",
description: "Enable the launch tool for supervising shared long-running project processes",
},
},
"speechgen.enabled": {
type: "boolean",
default: false,
+1 -1
View File
@@ -397,7 +397,7 @@ export class BashTool implements AgentTool<typeof bashSchemaBase | typeof bashSc
hasGrep: isToolActive("grep", this.session.settings.get("grep.enabled")),
hasGlob: isToolActive("glob", this.session.settings.get("glob.enabled")),
hasRead: isToolActive("read", true),
hasLaunch: isToolActive("launch", true),
hasLaunch: isToolActive("launch", this.session.settings.get("launch.enabled")),
hasEval: isToolActive(
"eval",
evalBackends.python || evalBackends.js || evalBackends.ruby || evalBackends.julia,
+1
View File
@@ -609,6 +609,7 @@ export async function createTools(session: ToolSession, toolNames?: string[]): P
if (name === "goal") return goalEnabled && goalModeActive;
if (name === "lsp") return enableLsp && session.settings.get("lsp.enabled");
if (name === "bash") return session.settings.get("bash.enabled");
if (name === "launch") return session.settings.get("launch.enabled");
if (name === "eval") return allowEval;
if (name === "debug") return session.settings.get("debug.enabled");
if (name === "todo") return !includeYield && session.settings.get("todo.enabled");
@@ -237,6 +237,7 @@ describe("createTools", () => {
"astGrep.enabled": false,
"astEdit.enabled": false,
"bash.enabled": false,
"launch.enabled": false,
"web_search.enabled": false,
"browser.enabled": false,
"inspect_image.enabled": false,
@@ -246,6 +247,7 @@ describe("createTools", () => {
const names = tools.map(t => t.name);
expect(names).not.toContain("bash");
expect(names).not.toContain("launch");
expect(names).not.toContain("glob");
expect(names).not.toContain("grep");
expect(names).not.toContain("ast_grep");