diff --git a/ts/packages/benchmarks/.gitignore b/ts/packages/benchmarks/.gitignore new file mode 100644 index 000000000..d288baa78 --- /dev/null +++ b/ts/packages/benchmarks/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +data/ +results/ +*.tsbuildinfo diff --git a/ts/packages/benchmarks/LICENSE b/ts/packages/benchmarks/LICENSE new file mode 100644 index 000000000..9e841e7a2 --- /dev/null +++ b/ts/packages/benchmarks/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/ts/packages/benchmarks/README.AUTOGEN.md b/ts/packages/benchmarks/README.AUTOGEN.md new file mode 100644 index 000000000..858fe035d --- /dev/null +++ b/ts/packages/benchmarks/README.AUTOGEN.md @@ -0,0 +1,43 @@ + + + + + + + + +# @typeagent/benchmarks β€” AI-generated documentation + +> πŸ“ **Placeholder documentation β€” not yet AI-authored.** Re-run `pnpm docs:generate:llm --package benchmarks` to populate this file, or read [`./README.md`](./README.md) for the hand-written documentation in the meantime. The deterministic Reference section below is already populated. + +## Overview + +TypeAgent translation benchmark (scaffold) + +## Reference + +> βš™οΈ **Auto-generated, no AI involvement.** Built deterministically from `package.json`, `src/`, and the workspace dependency graph at the commit recorded in the staleness footer at the end of this file. Hand edits to this file will be overwritten on the next run. + +### Entry points + +_No public exports declared in `package.json`._ + +### Dependencies + +Workspace: + +- [@typeagent/agent-sdk](../../packages/agentSdk/README.md) +- [agent-dispatcher](../../packages/dispatcher/dispatcher/README.md) +- [default-agent-provider](../../packages/defaultAgentProvider/README.md) + +External: _None at runtime._ + +### Files of interest + +`./src/core/model-prices.generated.json`, `./src/core/paths.ts`, `./src/core/prices.ts`, …and 5 more under `./src/`. + +--- + +_Auto-generated against commit `3bc153f3a186261d47ef517dc8cd0af4c161092b` on `2026-07-31T17:39:11.834Z` by `docs-generate.yml`. Links validated at that commit; the working tree may have drifted by up to 24h. Re-run `pnpm --filter @typeagent/benchmarks docs:verify-links` to spot-check._ + + diff --git a/ts/packages/benchmarks/README.md b/ts/packages/benchmarks/README.md new file mode 100644 index 000000000..dc36ef769 --- /dev/null +++ b/ts/packages/benchmarks/README.md @@ -0,0 +1,11 @@ +# @typeagent/benchmarks + +Action-translation eval for TypeAgent: pinned catalogs, model prices, and scoring harness. + +## Trademarks + +This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft +trademarks or logos is subject to and must follow +[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). +Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. +Any use of third-party trademarks or logos are subject to those third-party's policies. diff --git a/ts/packages/benchmarks/package.json b/ts/packages/benchmarks/package.json new file mode 100644 index 000000000..23aaeecfc --- /dev/null +++ b/ts/packages/benchmarks/package.json @@ -0,0 +1,35 @@ +{ + "name": "@typeagent/benchmarks", + "version": "0.0.1", + "description": "TypeAgent translation benchmark (scaffold)", + "homepage": "https://github.com/microsoft/TypeAgent#readme", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/TypeAgent.git", + "directory": "ts/packages/benchmarks" + }, + "license": "MIT", + "author": "Microsoft", + "type": "module", + "scripts": { + "build": "tsc -b && node ./scripts/copyAssets.mjs", + "clean": "node ./scripts/clean.mjs", + "gen-catalog": "pnpm run build && node dist/translationBench/scripts/genCatalog.js", + "prettier": "prettier --check package.json tsconfig.json src scripts --ignore-path ../../.prettierignore", + "prettier:fix": "prettier --write package.json tsconfig.json src scripts --ignore-path ../../.prettierignore", + "snapshot-prices": "pnpm run build && node dist/translationBench/scripts/snapshotPrices.js", + "test": "pnpm run build", + "test:local": "pnpm run test", + "tsc": "tsc -b" + }, + "dependencies": { + "@typeagent/agent-sdk": "workspace:*", + "agent-dispatcher": "workspace:*", + "default-agent-provider": "workspace:*" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "prettier": "^3.5.3", + "typescript": "~5.4.5" + } +} diff --git a/ts/packages/benchmarks/scripts/clean.mjs b/ts/packages/benchmarks/scripts/clean.mjs new file mode 100644 index 000000000..ed1d671b2 --- /dev/null +++ b/ts/packages/benchmarks/scripts/clean.mjs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { rmSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +// Drop emit + incremental state so the next `tsc -b` fully rebuilds. +rmSync(path.join(root, "dist"), { recursive: true, force: true }); +rmSync(path.join(root, "tsconfig.tsbuildinfo"), { force: true }); diff --git a/ts/packages/benchmarks/scripts/copyAssets.mjs b/ts/packages/benchmarks/scripts/copyAssets.mjs new file mode 100644 index 000000000..3e61acf01 --- /dev/null +++ b/ts/packages/benchmarks/scripts/copyAssets.mjs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** Copy non-TS assets next to compiled output (tsc does not emit .json). */ +import { copyFileSync, mkdirSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); + +const assets = [ + [ + "src/translationBench/catalog.generated.json", + "dist/translationBench/catalog.generated.json", + ], + [ + "src/core/model-prices.generated.json", + "dist/core/model-prices.generated.json", + ], +]; + +for (const [fromRel, toRel] of assets) { + const from = path.join(root, fromRel); + const to = path.join(root, toRel); + mkdirSync(path.dirname(to), { recursive: true }); + copyFileSync(from, to); +} diff --git a/ts/packages/benchmarks/src/core/model-prices.generated.json b/ts/packages/benchmarks/src/core/model-prices.generated.json new file mode 100644 index 000000000..75a325f24 --- /dev/null +++ b/ts/packages/benchmarks/src/core/model-prices.generated.json @@ -0,0 +1,58 @@ +{ + "source": "https://models.dev/api.json", + "version": "2026-07-31T02:08:45.776Z", + "unit": "USD per 1M tokens", + "provider": "openai", + "rates": { + "gpt-4.1": { + "inUsdPer1M": 2, + "cachedUsdPer1M": 0.5, + "outUsdPer1M": 8 + }, + "gpt-4.1-mini": { + "inUsdPer1M": 0.4, + "cachedUsdPer1M": 0.1, + "outUsdPer1M": 1.6 + }, + "gpt-5": { + "inUsdPer1M": 1.25, + "cachedUsdPer1M": 0.125, + "outUsdPer1M": 10 + }, + "gpt-5-mini": { + "inUsdPer1M": 0.25, + "cachedUsdPer1M": 0.025, + "outUsdPer1M": 2 + }, + "gpt-5.4": { + "inUsdPer1M": 2.5, + "cachedUsdPer1M": 0.25, + "outUsdPer1M": 15 + }, + "gpt-5.4-mini": { + "inUsdPer1M": 0.75, + "cachedUsdPer1M": 0.075, + "outUsdPer1M": 4.5 + }, + "gpt-5.4-nano": { + "inUsdPer1M": 0.2, + "cachedUsdPer1M": 0.02, + "outUsdPer1M": 1.25 + }, + "gpt-5.6-luna": { + "inUsdPer1M": 1, + "cachedUsdPer1M": 0.1, + "outUsdPer1M": 6 + }, + "gpt-5.6-sol": { + "inUsdPer1M": 5, + "cachedUsdPer1M": 0.5, + "outUsdPer1M": 30 + }, + "gpt-5.6-terra": { + "inUsdPer1M": 2.5, + "cachedUsdPer1M": 0.25, + "outUsdPer1M": 15 + } + } +} diff --git a/ts/packages/benchmarks/src/core/paths.ts b/ts/packages/benchmarks/src/core/paths.ts new file mode 100644 index 000000000..21b05c548 --- /dev/null +++ b/ts/packages/benchmarks/src/core/paths.ts @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +// Same pattern as cache/defaultAgentProvider: this file emits to dist/core/, +// so ../.. is the package root. +const packageRoot = path.join("..", ".."); + +/** Resolve a path relative to the package root (works from compiled dist/). */ +export function getPackageFilePath(packageRootRelativePath: string): string { + if (path.isAbsolute(packageRootRelativePath)) { + return packageRootRelativePath; + } + return fileURLToPath( + new URL( + path.join(packageRoot, packageRootRelativePath), + import.meta.url, + ), + ); +} + +export const packageRootAbs = getPackageFilePath("."); + +/** datasets: /data/translationBench/ */ +export function dataDir(): string { + return getPackageFilePath(path.join("data", "translationBench")); +} + +/** run output: /results/translationBench/ */ +export function resultsDir(): string { + return getPackageFilePath(path.join("results", "translationBench")); +} diff --git a/ts/packages/benchmarks/src/core/prices.ts b/ts/packages/benchmarks/src/core/prices.ts new file mode 100644 index 000000000..48f8c4a8b --- /dev/null +++ b/ts/packages/benchmarks/src/core/prices.ts @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { createRequire } from "node:module"; +import type { Prices } from "./types.js"; + +const require = createRequire(import.meta.url); + +export interface PriceTable { + source: string; + version: string; + unit?: string; + rates: Record; +} + +export const PRICES: PriceTable = + require("./model-prices.generated.json") as PriceTable; + +export function pricesFor(model: string): { + prices: Prices | undefined; + table: PriceTable; +} { + const table: PriceTable = { ...PRICES, rates: { ...PRICES.rates } }; + const prices = table.rates[model] ?? table.rates[model.replace(/\*$/, "")]; + return { prices, table }; +} diff --git a/ts/packages/benchmarks/src/core/types.ts b/ts/packages/benchmarks/src/core/types.ts new file mode 100644 index 000000000..41339154e --- /dev/null +++ b/ts/packages/benchmarks/src/core/types.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** Single translated / expected action. */ +export interface Action { + schemaName: string; + actionName: string; + parameters: unknown; +} + +/** How multi-action expectations are ordered. */ +export type Order = "strict" | "any"; + +/** One eval row (dataset case). */ +export interface EvalCase { + id: string; + utterance: string; + expectedActions: Action[]; + order: Order; + /** Optional prior turns; shape filled in when the runner lands. */ + history?: unknown; +} + +/** Token cost rates (USD per 1M tokens). */ +export interface Prices { + inUsdPer1M: number; + cachedUsdPer1M: number; + outUsdPer1M: number; +} + +/** Accumulated usage for one request or run. */ +export interface CostRecord { + prompt: number; + completion: number; + cached: number | undefined; + reasoning: number | undefined; + model: string; + usageCalls: number; + estimatedCostUsd: number | undefined; +} + +/** One action in the pinned catalog. */ +export interface CatalogEntry { + schemaName: string; + actionName: string; + parameters: string; + paramSpec?: unknown; + description?: string; +} diff --git a/ts/packages/benchmarks/src/translationBench/catalog.generated.json b/ts/packages/benchmarks/src/translationBench/catalog.generated.json new file mode 100644 index 000000000..0f1f06474 --- /dev/null +++ b/ts/packages/benchmarks/src/translationBench/catalog.generated.json @@ -0,0 +1,11803 @@ +{ + "catalogVersion": "2026-07-29", + "activeSchemas": [ + "browser", + "browser.actionDiscovery", + "browser.external", + "browser.lookupAndAnswer", + "browser.webFlows", + "calendar", + "chat", + "code", + "code.code-debug", + "code.code-display", + "code.code-editor", + "code.code-extension", + "code.code-general", + "code.code-vscode-shell", + "code.code-workbench", + "desktop", + "desktop.desktop-display", + "desktop.desktop-input", + "desktop.desktop-personalization", + "desktop.desktop-power", + "desktop.desktop-privacy", + "desktop.desktop-system", + "desktop.desktop-taskbar", + "discord", + "dispatcher", + "dispatcher.activity", + "dispatcher.clarify", + "dispatcher.lookup", + "dispatcher.reasoning", + "email", + "github-cli", + "image", + "ipconfig", + "list", + "localPlayer", + "markdown", + "montage", + "onboarding", + "onboarding.onboarding-discovery", + "onboarding.onboarding-grammargen", + "onboarding.onboarding-packaging", + "onboarding.onboarding-phrasegen", + "onboarding.onboarding-scaffolder", + "onboarding.onboarding-schemagen", + "onboarding.onboarding-testing", + "osNotifications", + "photo", + "player", + "powershell", + "screencapture", + "settings", + "studio", + "system.config", + "system.conversation", + "system.grammar", + "system.history", + "system.notify", + "system.settings", + "taskflow", + "timer", + "utility", + "video", + "visualStudio", + "weather", + "windowsClock", + "workflow" + ], + "unloadableSchemas": ["mcpfilesystem"], + "allRegistrySchemas": [ + "browser", + "browser.actionDiscovery", + "browser.external", + "browser.lookupAndAnswer", + "browser.webFlows", + "calendar", + "chat", + "code", + "code.code-debug", + "code.code-display", + "code.code-editor", + "code.code-extension", + "code.code-general", + "code.code-vscode-shell", + "code.code-workbench", + "desktop", + "desktop.desktop-display", + "desktop.desktop-input", + "desktop.desktop-personalization", + "desktop.desktop-power", + "desktop.desktop-privacy", + "desktop.desktop-system", + "desktop.desktop-taskbar", + "discord", + "dispatcher", + "dispatcher.activity", + "dispatcher.clarify", + "dispatcher.lookup", + "dispatcher.reasoning", + "email", + "github-cli", + "image", + "ipconfig", + "list", + "localPlayer", + "markdown", + "mcpfilesystem", + "montage", + "onboarding", + "onboarding.onboarding-discovery", + "onboarding.onboarding-grammargen", + "onboarding.onboarding-packaging", + "onboarding.onboarding-phrasegen", + "onboarding.onboarding-scaffolder", + "onboarding.onboarding-schemagen", + "onboarding.onboarding-testing", + "osNotifications", + "photo", + "player", + "powershell", + "screencapture", + "settings", + "studio", + "system.config", + "system.conversation", + "system.grammar", + "system.history", + "system.notify", + "system.settings", + "taskflow", + "timer", + "utility", + "video", + "visualStudio", + "weather", + "windowsClock", + "workflow" + ], + "activeSchemaSource": "systemContext.agents.getSchemaNames() (same source as translationProbeRunner)", + "actions": [ + { + "schemaName": "browser", + "actionName": "openWebPage", + "parameters": "site: type-union, tab?: \"new\"|\"current\"|\"existing\"", + "paramSpec": { + "k": "object", + "fields": { + "site": { + "optional": false, + "spec": { + "k": "any" + } + }, + "tab": { + "optional": true, + "spec": { + "k": "string", + "enum": ["new", "current", "existing"] + } + } + } + }, + "description": "show/open/display web page in the current view." + }, + { + "schemaName": "browser", + "actionName": "closeWebPage", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Close the current web site view" + }, + { + "schemaName": "browser", + "actionName": "closeAllWebPages", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Close all web page views" + }, + { + "schemaName": "browser", + "actionName": "changeTab", + "parameters": "tabDescription: string, tabIndex?: number", + "paramSpec": { + "k": "object", + "fields": { + "tabDescription": { + "optional": false, + "spec": { + "k": "string" + } + }, + "tabIndex": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Make another tab the active tab" + }, + { + "schemaName": "browser", + "actionName": "goBack", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "goForward", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "scrollDown", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "scrollUp", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "followLinkByText", + "parameters": "keywords: string, openInNewTab?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "keywords": { + "optional": false, + "spec": { + "k": "string" + } + }, + "openInNewTab": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "follow a link on the page to open a related page or article Example: user: Open the Haiti link agent: { \"actionName\": \"followLinkByText\", \"parameters\": { \"keywords\": \"Haiti\" } }" + }, + { + "schemaName": "browser", + "actionName": "followLinkByPosition", + "parameters": "position: number, openInNewTab?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "position": { + "optional": false, + "spec": { + "k": "number" + } + }, + "openInNewTab": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "browser", + "actionName": "readPageContent", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Read the web page contents aloud" + }, + { + "schemaName": "browser", + "actionName": "stopReadPageContent", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "zoomIn", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "zoomOut", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "zoomReset", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "captureScreenshot", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "reloadPage", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser", + "actionName": "getWebsiteStats", + "parameters": "groupBy?: \"domain\"|\"pageType\"|\"source\", limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "groupBy": { + "optional": true, + "spec": { + "k": "string", + "enum": ["domain", "pageType", "source"] + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Get statistics about imported website data" + }, + { + "schemaName": "browser", + "actionName": "openSearchResult", + "parameters": "position?: number, title?: string, url?: string, openInNewTab?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "position": { + "optional": true, + "spec": { + "k": "number" + } + }, + "title": { + "optional": true, + "spec": { + "k": "string" + } + }, + "url": { + "optional": true, + "spec": { + "k": "string" + } + }, + "openInNewTab": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Open a specific search result from previous search" + }, + { + "schemaName": "browser", + "actionName": "changeSearchProvider", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "change the default search provider" + }, + { + "schemaName": "browser", + "actionName": "searchImageAction", + "parameters": "originalRequest: string, searchTerm: string, numImages: number", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "searchTerm": { + "optional": false, + "spec": { + "k": "string" + } + }, + "numImages": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Searches (finds) for images on the internet to show the user if the user asks doesn't specify a quantity, randomly select anywhere between 3 and 10 images" + }, + { + "schemaName": "browser", + "actionName": "executeAdHocScript", + "parameters": "script: string, params?: string, timeout?: number", + "paramSpec": { + "k": "object", + "fields": { + "script": { + "optional": false, + "spec": { + "k": "string" + } + }, + "params": { + "optional": true, + "spec": { + "k": "string" + } + }, + "timeout": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Execute an ad-hoc WebFlow script. The script must be a valid async function using the WebFlow browser API (browser.click, browser.enterText, etc.). Used by reasoning agents to perform browser interactions without a saved WebFlow." + }, + { + "schemaName": "browser", + "actionName": "createInferredFlow", + "parameters": "selection: string", + "paramSpec": { + "k": "object", + "fields": { + "selection": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create WebFlows from previously inferred actions. Used after @browser actions infer to select which actions to create." + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "detectPageActions", + "parameters": "registerAgent?: boolean, agentName?: string", + "paramSpec": { + "k": "object", + "fields": { + "registerAgent": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "agentName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "registerPageDynamicAgent", + "parameters": "agentName?: string", + "paramSpec": { + "k": "object", + "fields": { + "agentName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "summarizePage", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "createWebFlowFromRecording", + "parameters": "actionName: string, actionDescription: string, recordedSteps: string, existingActionNames?: string[], startUrl: string, screenshots?: string[], fragments?: { frameId: string, content: string, text?: string, cssSelector?: string }[]", + "paramSpec": { + "k": "object", + "fields": { + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionDescription": { + "optional": false, + "spec": { + "k": "string" + } + }, + "recordedSteps": { + "optional": false, + "spec": { + "k": "string" + } + }, + "existingActionNames": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "startUrl": { + "optional": false, + "spec": { + "k": "string" + } + }, + "screenshots": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "fragments": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "frameId": { + "optional": false, + "spec": { + "k": "string" + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + }, + "text": { + "optional": true, + "spec": { + "k": "string" + } + }, + "cssSelector": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + } + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "getWebFlowsForDomain", + "parameters": "domain: string", + "paramSpec": { + "k": "object", + "fields": { + "domain": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "getAllWebFlows", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "deleteWebFlow", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "inferActions", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "browser.actionDiscovery", + "actionName": "createInferredFlows", + "parameters": "selectedIndices: number[], inferredActions: { name: string, description: string, parameters: any[], expectedOutcome: string }[]", + "paramSpec": { + "k": "object", + "fields": { + "selectedIndices": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "number" + } + } + }, + "inferredActions": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "parameters": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "any" + } + } + }, + "expectedOutcome": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + } + } + } + } + }, + { + "schemaName": "browser.external", + "actionName": "openTab", + "parameters": "url?: string, query?: string", + "paramSpec": { + "k": "object", + "fields": { + "url": { + "optional": true, + "spec": { + "k": "string" + } + }, + "query": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "This opens a new tab in an existing browser window. IMPORTANT: This does NOT launch new browser windows." + }, + { + "schemaName": "browser.external", + "actionName": "closeTab", + "parameters": "title?: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "This closes a tab in an existing browser window. IMPORTANT: This does NOT close browser programs." + }, + { + "schemaName": "browser.external", + "actionName": "closeWindow", + "parameters": "title?: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.external", + "actionName": "switchToTabByText", + "parameters": "keywords: string", + "paramSpec": { + "k": "object", + "fields": { + "keywords": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Switch to an open tab, based on the tab's title Example: user: Switch to the Haiti tab agent: { \"actionName\": \"switchToTabByText\", \"parameters\": { \"keywords\": \"Haiti\" } }" + }, + { + "schemaName": "browser.external", + "actionName": "switchToTabByPosition", + "parameters": "position: number", + "paramSpec": { + "k": "object", + "fields": { + "position": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "browser.external", + "actionName": "addToBookmarks", + "parameters": "url: string", + "paramSpec": { + "k": "object", + "fields": { + "url": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.external", + "actionName": "openFromHistory", + "parameters": "keywords: string, startDate?: { displayText: string, timestamp?: string }, endDate?: { displayText: string, timestamp?: string }", + "paramSpec": { + "k": "object", + "fields": { + "keywords": { + "optional": false, + "spec": { + "k": "string" + } + }, + "startDate": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "displayText": { + "optional": false, + "spec": { + "k": "string" + } + }, + "timestamp": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + "endDate": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "displayText": { + "optional": false, + "spec": { + "k": "string" + } + }, + "timestamp": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + } + }, + { + "schemaName": "browser.external", + "actionName": "openFromBookmarks", + "parameters": "keywords: string", + "paramSpec": { + "k": "object", + "fields": { + "keywords": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.lookupAndAnswer", + "actionName": "lookupAndAnswerInternet", + "parameters": "originalRequest: string, internetLookups: string[], sites?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "internetLookups": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "sites": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "The user request is a question about general knowledge that can be found from the internet. (e.g. \"what is the current price of Microsoft stock?\") look up for contemporary internet information including sports scores, news events, or current commerce offerings, use the lookups parameter to request" + }, + { + "schemaName": "browser.webFlows", + "actionName": "listWebFlows", + "parameters": "scope?: \"site\"|\"global\"|\"all\"", + "paramSpec": { + "k": "object", + "fields": { + "scope": { + "optional": true, + "spec": { + "k": "string", + "enum": ["site", "global", "all"] + } + } + } + } + }, + { + "schemaName": "browser.webFlows", + "actionName": "deleteWebFlow", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.webFlows", + "actionName": "editWebFlowScope", + "parameters": "name: string, scopeType: \"site\"|\"global\", domains?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "scopeType": { + "optional": false, + "spec": { + "k": "string", + "enum": ["site", "global"] + } + }, + "domains": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + }, + { + "schemaName": "browser.webFlows", + "actionName": "editWebFlow", + "parameters": "name: string, script: string, description?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "script": { + "optional": false, + "spec": { + "k": "string" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "browser.webFlows", + "actionName": "startGoalDrivenTask", + "parameters": "goal: string, startUrl?: string, maxSteps?: number", + "paramSpec": { + "k": "object", + "fields": { + "goal": { + "optional": false, + "spec": { + "k": "string" + } + }, + "startUrl": { + "optional": true, + "spec": { + "k": "string" + } + }, + "maxSteps": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Goal-driven mode: describe what you want and a reasoning model completes it" + }, + { + "schemaName": "browser.webFlows", + "actionName": "generateWebFlow", + "parameters": "traceId: string, name?: string, description?: string", + "paramSpec": { + "k": "object", + "fields": { + "traceId": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Generate a reusable WebFlow script from a saved trace" + }, + { + "schemaName": "browser.webFlows", + "actionName": "generateWebFlowFromRecording", + "parameters": "description: string, name?: string", + "paramSpec": { + "k": "object", + "fields": { + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Generate a WebFlow from recorded user interactions" + }, + { + "schemaName": "calendar", + "actionName": "scheduleEvent", + "parameters": "description: string, date: string, time?: string, location?: string, participant?: string", + "paramSpec": { + "k": "object", + "fields": { + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "date": { + "optional": false, + "spec": { + "k": "string" + } + }, + "time": { + "optional": true, + "spec": { + "k": "string" + } + }, + "location": { + "optional": true, + "spec": { + "k": "string" + } + }, + "participant": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Schedule a new event on the calendar Examples: \"schedule a meeting tomorrow at 2pm\", \"add dentist appointment on Friday at 3pm\"" + }, + { + "schemaName": "calendar", + "actionName": "findEvents", + "parameters": "date?: string, description?: string, participant?: string", + "paramSpec": { + "k": "object", + "fields": { + "date": { + "optional": true, + "spec": { + "k": "string" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + }, + "participant": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Find events on the calendar Examples: \"find my meetings today\", \"show meetings with Bob\"" + }, + { + "schemaName": "calendar", + "actionName": "addParticipant", + "parameters": "description: string, participant: string", + "paramSpec": { + "k": "object", + "fields": { + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "participant": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Add a participant to an event Examples: \"add John to the meeting\", \"invite Sarah to lunch\"" + }, + { + "schemaName": "calendar", + "actionName": "findTodaysEvents", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Find all events happening today Examples: \"what do I have today\", \"show me today's schedule\"" + }, + { + "schemaName": "calendar", + "actionName": "findThisWeeksEvents", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Find all events happening this week Examples: \"what do I have this week\", \"show my week\"" + }, + { + "schemaName": "calendar", + "actionName": "removeEvent", + "parameters": "description: string, date?: string", + "paramSpec": { + "k": "object", + "fields": { + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "date": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Remove an event from the calendar Examples: \"delete my meeting\", \"remove the dentist appointment\", \"cancel lunch with Bob\" Behavior based on number of matches: - 1 match: prompts for confirmation - 2-5 matches: prompts with list to select which event to delete - More than 5 matches: returns err" + }, + { + "schemaName": "chat", + "actionName": "generateResponse", + "parameters": "originalRequest: string, generatedText: string, userRequestEntities: { name: string, type: any[] }[], generatedTextEntities: { name: string, type: any[] }[], relatedFiles?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "generatedText": { + "optional": false, + "spec": { + "k": "string" + } + }, + "userRequestEntities": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "type": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + } + }, + "generatedTextEntities": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "type": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + } + }, + "relatedFiles": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "this is the way to handle requests for known information that is not stored in application memory or conversation memory, such as facts, definitions, explanations, captioning, or other information that can be generated without a lookup if the user request is a known phrase that is unrelated to the " + }, + { + "schemaName": "chat", + "actionName": "showImageFile", + "parameters": "files: string[]", + "paramSpec": { + "k": "object", + "fields": { + "files": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + }, + { + "schemaName": "code", + "actionName": "changeColorScheme", + "parameters": "theme: \"Default Light+\"|\"Default Dark+\"|\"Monokai\"|\"Monokai Dimmed\"|\"Solarized Dark\"|\"Solarized Light\"|\"Quiet Light\"|\"Red\"|\"Kimbie Dark\"|\"Abyss\"|\"Default High Contrast Light\"", + "paramSpec": { + "k": "object", + "fields": { + "theme": { + "optional": false, + "spec": { + "k": "string", + "enum": [ + "Default Light+", + "Default Dark+", + "Monokai", + "Monokai Dimmed", + "Solarized Dark", + "Solarized Light", + "Quiet Light", + "Red", + "Kimbie Dark", + "Abyss", + "Default High Contrast Light" + ] + } + } + } + }, + "description": "Change the VS Code editor's color theme. Example: User: change my vscode color theme to Monokai Agent: { actionName: \"changeColorScheme\", parameters: { theme: \"Monokai\" } }" + }, + { + "schemaName": "code", + "actionName": "splitEditor", + "parameters": "direction?: \"right\"|\"left\"|\"up\"|\"down\", editorPosition?: type-union, fileName?: string", + "paramSpec": { + "k": "object", + "fields": { + "direction": { + "optional": true, + "spec": { + "k": "string", + "enum": ["right", "left", "up", "down"] + } + }, + "editorPosition": { + "optional": true, + "spec": { + "k": "any" + } + }, + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Split an editor window into multiple panes showing the same file or different files side-by-side. Example: User: split editor to the right Agent: { actionName: \"splitEditor\", parameters: { direction: \"right\" } } Example: User: split the editor with utils.ts Agent: { actionName: \"splitEditor\"" + }, + { + "schemaName": "code", + "actionName": "changeEditorLayout", + "parameters": "columnCount?: \"single\"|\"double\"|\"three\"", + "paramSpec": { + "k": "object", + "fields": { + "columnCount": { + "optional": true, + "spec": { + "k": "string", + "enum": ["single", "double", "three"] + } + } + } + }, + "description": "Change the editor layout to single, double or three column layout" + }, + { + "schemaName": "code", + "actionName": "newCodeFile", + "parameters": "fileName: type-union, language: \"html\"|\"css\"|\"json\"|\"python\"|\"javaScript\"|\"typeScript\", content: string", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "any" + } + }, + "language": { + "optional": false, + "spec": { + "k": "string", + "enum": [ + "html", + "css", + "json", + "python", + "javaScript", + "typeScript" + ] + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new code file (Python, JavaScript, TypeScript, HTML, CSS, JSON, etc.) in the editor. Example: User: create a new typescript file called scratch.ts with a hello world function Agent: { actionName: \"newCodeFile\", parameters: { fileName: \"scratch.ts\", language: \"typeScript\", cont" + }, + { + "schemaName": "code", + "actionName": "newMarkdownFile", + "parameters": "fileName: type-union, content: string", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "any" + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new Markdown (.md) file in the editor. Example: User: create a markdown file with a list of top ten AI papers Agent: { actionName: \"newMarkdownFile\", parameters: { fileName: \"papers.md\", content: \"# Top 10 AI Papers\\n...\" } }" + }, + { + "schemaName": "code", + "actionName": "newTextFile", + "parameters": "fileName: type-union, content: string", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "any" + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new plain text (.txt) file in the editor. Example: User: make a new text file called notes Agent: { actionName: \"newTextFile\", parameters: { fileName: \"notes.txt\", content: \"\" } }" + }, + { + "schemaName": "code", + "actionName": "launchVSCode", + "parameters": "mode: \"last\"|\"folder\"|\"workspace\", path?: string", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["last", "folder", "workspace"] + } + }, + "path": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Launch or Start VSCode" + }, + { + "schemaName": "code.code-debug", + "actionName": "showDebugPanel", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show debug panel or window in the editor or code window, if not already visible" + }, + { + "schemaName": "code.code-debug", + "actionName": "startDebugging", + "parameters": "configurationName?: string, noDebug?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "configurationName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "noDebug": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Start/Continue debugging" + }, + { + "schemaName": "code.code-debug", + "actionName": "step", + "parameters": "stepType: \"into\"|\"out\"|\"over\"", + "paramSpec": { + "k": "object", + "fields": { + "stepType": { + "optional": false, + "spec": { + "k": "string", + "enum": ["into", "out", "over"] + } + } + } + }, + "description": "Step into/out/over" + }, + { + "schemaName": "code.code-debug", + "actionName": "stopDebugging", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Stop debugging" + }, + { + "schemaName": "code.code-debug", + "actionName": "showHover", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show hover" + }, + { + "schemaName": "code.code-debug", + "actionName": "toggleBreakpoint", + "parameters": "line: number, fileName?: string, folderName?: string", + "paramSpec": { + "k": "object", + "fields": { + "line": { + "optional": false, + "spec": { + "k": "number" + } + }, + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "code.code-debug", + "actionName": "setBreakpoint", + "parameters": "line: number, fileName?: string, folderName?: string", + "paramSpec": { + "k": "object", + "fields": { + "line": { + "optional": false, + "spec": { + "k": "number" + } + }, + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "code.code-debug", + "actionName": "removeBreakpoint", + "parameters": "line: number, fileName?: string, folderName?: string", + "paramSpec": { + "k": "object", + "fields": { + "line": { + "optional": false, + "spec": { + "k": "number" + } + }, + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "code.code-debug", + "actionName": "removeAllBreakpoints", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "code.code-display", + "actionName": "zoomIn", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Zoom in the editor" + }, + { + "schemaName": "code.code-display", + "actionName": "zoomOut", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Zoom out the editor" + }, + { + "schemaName": "code.code-display", + "actionName": "fontZoomReset", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Zoom reset" + }, + { + "schemaName": "code.code-display", + "actionName": "showExplorer", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show explorer/show the file explorer" + }, + { + "schemaName": "code.code-display", + "actionName": "showSearch", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show search or replace pane/window in the sidebar to search for text in the files Note that this is not for searching or finding files" + }, + { + "schemaName": "code.code-display", + "actionName": "showSourceControl", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show source control" + }, + { + "schemaName": "code.code-display", + "actionName": "showOutputPanel", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show output panel" + }, + { + "schemaName": "code.code-display", + "actionName": "toggleSearchDetails", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Toggle search details" + }, + { + "schemaName": "code.code-display", + "actionName": "replaceInFiles", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Replace in files" + }, + { + "schemaName": "code.code-display", + "actionName": "openMarkdownPreview", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Open markdown preview" + }, + { + "schemaName": "code.code-display", + "actionName": "openMarkdownPreviewToSide", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Open markdown preview to the side" + }, + { + "schemaName": "code.code-display", + "actionName": "zenMode", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Code in Zen Mode" + }, + { + "schemaName": "code.code-display", + "actionName": "closeEditor", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Close the current editor" + }, + { + "schemaName": "code.code-display", + "actionName": "openSettings", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Open settings" + }, + { + "schemaName": "code.code-editor", + "actionName": "createFunction", + "parameters": "language: type-union, functionDeclaration: string, body?: string, docstring?: string, name?: string, args?: { name: string, type?: string, defaultValue?: string }[], returnType?: string, isAsync?: boolean, file?: { fileName?: string, folderName?: string, folderRelativeTo?: string, createIfNotExists?: boolean, fallbackToActiveFile?: boolean }, position?: type-union", + "paramSpec": { + "k": "object", + "fields": { + "language": { + "optional": false, + "spec": { + "k": "any" + } + }, + "functionDeclaration": { + "optional": false, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "docstring": { + "optional": true, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "args": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "type": { + "optional": true, + "spec": { + "k": "string" + } + }, + "defaultValue": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + }, + "returnType": { + "optional": true, + "spec": { + "k": "string" + } + }, + "isAsync": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "file": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "createIfNotExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "fallbackToActiveFile": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + "position": { + "optional": true, + "spec": { + "k": "any" + } + } + } + }, + "description": "Schema to generate a function" + }, + { + "schemaName": "code.code-editor", + "actionName": "createCodeBlock", + "parameters": "language: string, docstring?: string, declaration?: string, body?: string, codeSnippet?: string, isPartial?: boolean, file?: { fileName?: string, folderName?: string, folderRelativeTo?: string, createIfNotExists?: boolean, fallbackToActiveFile?: boolean }, position?: type-union", + "paramSpec": { + "k": "object", + "fields": { + "language": { + "optional": false, + "spec": { + "k": "string" + } + }, + "docstring": { + "optional": true, + "spec": { + "k": "string" + } + }, + "declaration": { + "optional": true, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "codeSnippet": { + "optional": true, + "spec": { + "k": "string" + } + }, + "isPartial": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "file": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "createIfNotExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "fallbackToActiveFile": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + "position": { + "optional": true, + "spec": { + "k": "any" + } + } + } + } + }, + { + "schemaName": "code.code-editor", + "actionName": "fixCodeProblem", + "parameters": "target: type-union, hint?: string, file?: { fileName?: string, folderName?: string, folderRelativeTo?: string, createIfNotExists?: boolean, fallbackToActiveFile?: boolean }", + "paramSpec": { + "k": "object", + "fields": { + "target": { + "optional": false, + "spec": { + "k": "any" + } + }, + "hint": { + "optional": true, + "spec": { + "k": "string" + } + }, + "file": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "createIfNotExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "fallbackToActiveFile": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + } + } + }, + "description": "schema to fix a problem (diagnostic) in the code. The target can be the first problem, the next one, all, or a specific location/index in the file. Optional hints from the user (e.g. \"fix the second error\") or file scoping may guide the choice. Used when the user requests: \"fix this problem\", \"fi" + }, + { + "schemaName": "code.code-editor", + "actionName": "moveCursorInFile", + "parameters": "target: type-union, file?: { fileName?: string, folderName?: string, folderRelativeTo?: string, createIfNotExists?: boolean, fallbackToActiveFile?: boolean }, hint?: string", + "paramSpec": { + "k": "object", + "fields": { + "target": { + "optional": false, + "spec": { + "k": "any" + } + }, + "file": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "createIfNotExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "fallbackToActiveFile": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + "hint": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "ACTION: Move the cursor to a specific position within a file (for navigation or editing preparation). This moves the cursor position, NOT split/duplicate the editor view. USE THIS for: \"go to file X\", \"jump to line 50\", \"go to function foo\", \"move cursor to X\" DO NOT USE for: \"split editor\", \"spl" + }, + { + "schemaName": "code.code-editor", + "actionName": "insertOrDeleteLines", + "parameters": "operation: \"insert\"|\"delete\", count?: number, position?: type-union, file?: { fileName?: string, folderName?: string, folderRelativeTo?: string, createIfNotExists?: boolean, fallbackToActiveFile?: boolean }, force?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "operation": { + "optional": false, + "spec": { + "k": "string", + "enum": ["insert", "delete"] + } + }, + "count": { + "optional": true, + "spec": { + "k": "number" + } + }, + "position": { + "optional": true, + "spec": { + "k": "any" + } + }, + "file": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "createIfNotExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "fallbackToActiveFile": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + "force": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Action for inserting or deleting lines in a file." + }, + { + "schemaName": "code.code-editor", + "actionName": "insertComment", + "parameters": "text: string, language?: string, commentStyle?: \"line\"|\"block\", position: type-union, newlineBefore?: boolean, newlineAfter?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "text": { + "optional": false, + "spec": { + "k": "string" + } + }, + "language": { + "optional": true, + "spec": { + "k": "string" + } + }, + "commentStyle": { + "optional": true, + "spec": { + "k": "string", + "enum": ["line", "block"] + } + }, + "position": { + "optional": false, + "spec": { + "k": "any" + } + }, + "newlineBefore": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "newlineAfter": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-editor", + "actionName": "generateWithCopilot", + "parameters": "strategy: \"inlineCompletion\"|\"commentToCode\"|\"generateFix\"|\"generateInsideFunction\"|\"suggestAlternatives\", position: type-union, language?: string, prompt?: string, context?: { role: \"prefix\"|\"suffix\"|\"file\"|\"doc\"|\"comment\", content: string, language?: string }[], attemptLimit?: number, autoAccept?: boolean, explanationMode?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "strategy": { + "optional": false, + "spec": { + "k": "string", + "enum": [ + "inlineCompletion", + "commentToCode", + "generateFix", + "generateInsideFunction", + "suggestAlternatives" + ] + } + }, + "position": { + "optional": false, + "spec": { + "k": "any" + } + }, + "language": { + "optional": true, + "spec": { + "k": "string" + } + }, + "prompt": { + "optional": true, + "spec": { + "k": "string" + } + }, + "context": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "role": { + "optional": false, + "spec": { + "k": "string", + "enum": ["prefix", "suffix", "file", "doc", "comment"] + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + }, + "language": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + }, + "attemptLimit": { + "optional": true, + "spec": { + "k": "number" + } + }, + "autoAccept": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "explanationMode": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-editor", + "actionName": "createFile", + "parameters": "fileName?: string, folderName?: string, folderRelativeTo?: string, language?: string, untitled?: boolean, openInEditor?: boolean, content?: string, overwriteIfExists?: boolean, focusExistingIfOpen?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "language": { + "optional": true, + "spec": { + "k": "string" + } + }, + "untitled": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "openInEditor": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "content": { + "optional": true, + "spec": { + "k": "string" + } + }, + "overwriteIfExists": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "focusExistingIfOpen": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "@deprecated Use `NewCodeFileAction`, `NewMarkdownFileAction`, or `NewTextFileAction` instead." + }, + { + "schemaName": "code.code-editor", + "actionName": "saveCurrentFile", + "parameters": "showErrorIfNoActiveEditor?: boolean, onlyDirty?: boolean, excludeUntitled?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "showErrorIfNoActiveEditor": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "onlyDirty": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "excludeUntitled": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-editor", + "actionName": "saveAllFiles", + "parameters": "onlyDirty?: boolean, excludeUntitled?: boolean, logResult?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "onlyDirty": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "excludeUntitled": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "logResult": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-extension", + "actionName": "checkExtensionAvailable", + "parameters": "filterByUserQuery?: string, filterByKnownQuery?: \"@updates\"|\"@recentlyPublished\"|\"@workspaceUnsupported\"|\"@builtin\"|\"@installed\"|\"@popular\"|\"@recommended\"|\"@enabled\"|\"@disabled\"|\"@mcp\", filterByCategory?: \"ai\"|\"azure\"|\"data science\"|\"formatters\"|\"programming languages\"|\"extension packs\"|\"machine learning\"|\"education\"|\"snippets\"|\"chat\"|\"visualizations\"|\"scm providers\"|\"linters\"|\"themes\"|\"notebooks\"|\"debuggers\"|\"language packs\"|\"testing\"|\"education\"|\"other\"", + "paramSpec": { + "k": "object", + "fields": { + "filterByUserQuery": { + "optional": true, + "spec": { + "k": "string" + } + }, + "filterByKnownQuery": { + "optional": true, + "spec": { + "k": "string", + "enum": [ + "@updates", + "@recentlyPublished", + "@workspaceUnsupported", + "@builtin", + "@installed", + "@popular", + "@recommended", + "@enabled", + "@disabled", + "@mcp" + ] + } + }, + "filterByCategory": { + "optional": true, + "spec": { + "k": "string", + "enum": [ + "ai", + "azure", + "data science", + "formatters", + "programming languages", + "extension packs", + "machine learning", + "education", + "snippets", + "chat", + "visualizations", + "scm providers", + "linters", + "themes", + "notebooks", + "debuggers", + "language packs", + "testing", + "education", + "other" + ] + } + } + } + }, + "description": "The action checks/searches if an extension is available based on user requests like is the copilot extension available? or Show me all extensions related to AI" + }, + { + "schemaName": "code.code-extension", + "actionName": "installExtension", + "parameters": "extensionQuery: string, promptUser?: boolean, autoReload?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "extensionQuery": { + "optional": false, + "spec": { + "k": "string" + } + }, + "promptUser": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "autoReload": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-extension", + "actionName": "reloadWindow", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "code.code-extension", + "actionName": "showExtensions", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show the extensions panel" + }, + { + "schemaName": "code.code-extension", + "actionName": "enableExtension", + "parameters": "extensionQuery: string, promptUser?: boolean, autoReload?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "extensionQuery": { + "optional": false, + "spec": { + "k": "string" + } + }, + "promptUser": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "autoReload": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-extension", + "actionName": "disableExtension", + "parameters": "extensionQuery: string, promptUser?: boolean, autoReload?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "extensionQuery": { + "optional": false, + "spec": { + "k": "string" + } + }, + "promptUser": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "autoReload": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-general", + "actionName": "showCommandPalette", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show or open the command palette that allows to search and execute commands Trigger this action only when asked to show/open the command palette explicitly" + }, + { + "schemaName": "code.code-general", + "actionName": "gotoFileOrLineOrSymbol", + "parameters": "goto?: \"file\"|\"line\"|\"symbol\", ref?: string", + "paramSpec": { + "k": "object", + "fields": { + "goto": { + "optional": true, + "spec": { + "k": "string", + "enum": ["file", "line", "symbol"] + } + }, + "ref": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Quick option to access a file, alternate way to search a file by name using keyboard shortcuts search by file name, or append : go to line, or @ to go to symbol If the user request is open/show the search pane this action should not be triggered" + }, + { + "schemaName": "code.code-general", + "actionName": "showUserSettings", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show user settings" + }, + { + "schemaName": "code.code-general", + "actionName": "showKeyboardShortcuts", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show keyboard shortcuts" + }, + { + "schemaName": "code.code-vscode-shell", + "actionName": "newConversation", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a brand-new TypeAgent Shell conversation (a new chat tab in the TypeAgent Shell VS Code extension) and switch the current tab to it. Example: User: start a new conversation Agent: { actionName: \"newConversation\", parameters: {} } Example: User: new conversation called \"design review\" " + }, + { + "schemaName": "code.code-vscode-shell", + "actionName": "renameConversation", + "parameters": "newName: string", + "paramSpec": { + "k": "object", + "fields": { + "newName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Rename the TypeAgent Shell conversation that is currently active in this chat tab. Example: User: rename this conversation to \"vscode shell PR\" Agent: { actionName: \"renameConversation\", parameters: { newName: \"vscode shell PR\" } }" + }, + { + "schemaName": "code.code-vscode-shell", + "actionName": "switchConversation", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Switch the current TypeAgent Shell chat tab to a different existing conversation, identified by its display name. If no conversation with that name exists, a new one will be created with that name and the current tab will switch to it. Example: User: switch to the \"design review\" conversation " + }, + { + "schemaName": "code.code-vscode-shell", + "actionName": "deleteConversation", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a TypeAgent Shell conversation by display name. The current active conversation cannot be deleted. The extension will prompt the user for confirmation before deleting. Example: User: delete the \"design review\" conversation Agent: { actionName: \"deleteConversation\", parameters: { name: \"" + }, + { + "schemaName": "code.code-workbench", + "actionName": "workbenchOpenFile", + "parameters": "fileName: string, matchStrategy?: \"exact\"|\"fuzzy\", extensions?: string[], includeGenerated?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "matchStrategy": { + "optional": true, + "spec": { + "k": "string", + "enum": ["exact", "fuzzy"] + } + }, + "extensions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "includeGenerated": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-workbench", + "actionName": "workbenchOpenFolder", + "parameters": "folderName: string, folderRelativeTo?: string, includeGenerated?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "folderName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "folderRelativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "includeGenerated": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "code.code-workbench", + "actionName": "workbenchCreateFolderFromExplorer", + "parameters": "folderName: string, relativeTo?: string, resolutionHint?: \"inferFromName\"|\"workspaceRoot\"|\"activeSelection\"", + "paramSpec": { + "k": "object", + "fields": { + "folderName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "relativeTo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "resolutionHint": { + "optional": true, + "spec": { + "k": "string", + "enum": ["inferFromName", "workspaceRoot", "activeSelection"] + } + } + } + } + }, + { + "schemaName": "code.code-workbench", + "actionName": "workbenchBuildRelatedTask", + "parameters": "task: \"build\"|\"rebuild\"|\"clean\", folderName?: string, taskSelection?: type-union", + "paramSpec": { + "k": "object", + "fields": { + "task": { + "optional": false, + "spec": { + "k": "string", + "enum": ["build", "rebuild", "clean"] + } + }, + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "taskSelection": { + "optional": true, + "spec": { + "k": "any" + } + } + } + } + }, + { + "schemaName": "code.code-workbench", + "actionName": "openInIntegratedTerminal", + "parameters": "folderName?: string, commandToExecute?: string, commandRiskLevel?: \"low\"|\"medium\"|\"high\", reuseExistingTerminal?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "folderName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "commandToExecute": { + "optional": true, + "spec": { + "k": "string" + } + }, + "commandRiskLevel": { + "optional": true, + "spec": { + "k": "string", + "enum": ["low", "medium", "high"] + } + }, + "reuseExistingTerminal": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "LaunchProgram", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Launches a new program window on a Windows Desktop Example: user: Launch edge agent: { \"actionName\": \"LaunchProgram\", \"parameters\": { \"name\": \"edge\" } }" + }, + { + "schemaName": "desktop", + "actionName": "CloseProgram", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Closes a program window on a Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "Tile", + "parameters": "leftWindow: type-union, rightWindow: type-union", + "paramSpec": { + "k": "object", + "fields": { + "leftWindow": { + "optional": false, + "spec": { + "k": "any" + } + }, + "rightWindow": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Positions program windows on a program window on a Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "Maximize", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Maximizes a program window on a Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "Minimize", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Minimizes a program window on a Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "SwitchTo", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "Sets focus to a program window on a Windows Desktop. Example: User: switch to Chrome Agent: { actionName: \"SwitchTo\", parameters: { name: \"Chrome\" } }" + }, + { + "schemaName": "desktop", + "actionName": "Volume", + "parameters": "targetVolume: number", + "paramSpec": { + "k": "object", + "fields": { + "targetVolume": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "AdjustVolume", + "parameters": "direction: \"up\"|\"down\", amount?: number", + "paramSpec": { + "k": "object", + "fields": { + "direction": { + "optional": false, + "spec": { + "k": "string", + "enum": ["up", "down"] + } + }, + "amount": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Adjusts system volume up or down by a relative amount" + }, + { + "schemaName": "desktop", + "actionName": "RestoreVolume", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "desktop", + "actionName": "Mute", + "parameters": "on: boolean", + "paramSpec": { + "k": "object", + "fields": { + "on": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "SetWallpaper", + "parameters": "filePath?: string, url?: string", + "paramSpec": { + "k": "object", + "fields": { + "filePath": { + "optional": true, + "spec": { + "k": "string" + } + }, + "url": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "SetThemeMode", + "parameters": "mode: \"light\"|\"dark\"|\"toggle\"", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["light", "dark", "toggle"] + } + } + } + }, + "description": "Sets the theme mode of the current [windows] desktop" + }, + { + "schemaName": "desktop", + "actionName": "ApplyTheme", + "parameters": "filePath: string, themeName?: string", + "paramSpec": { + "k": "object", + "fields": { + "filePath": { + "optional": false, + "spec": { + "k": "string" + } + }, + "themeName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Apply a Windows desktop theme by name (e.g. \"Captured Motion\", \"Glow\", \"Sunrise\") or .theme file path. Affects the Windows wallpaper / sounds / cursors / window chrome. Example: User: change my windows theme to Glow Agent: { actionName: \"ApplyTheme\", parameters: { filePath: \"Glow\", themeName: \"" + }, + { + "schemaName": "desktop", + "actionName": "ListThemes", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists all installed Windows themes" + }, + { + "schemaName": "desktop", + "actionName": "ConnectWifi", + "parameters": "ssid: string, password?: string", + "paramSpec": { + "k": "object", + "fields": { + "ssid": { + "optional": false, + "spec": { + "k": "string" + } + }, + "password": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "DisconnectWifi", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Disconnects from the current wifi network" + }, + { + "schemaName": "desktop", + "actionName": "ListWifiNetworks", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists available WiFi networks" + }, + { + "schemaName": "desktop", + "actionName": "ToggleAirplaneMode", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "CreateDesktop", + "parameters": "names: string[]", + "paramSpec": { + "k": "object", + "fields": { + "names": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "creates a new Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "MoveWindowToDesktop", + "parameters": "name: type-union, desktopId: number", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + }, + "desktopId": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "PinWindow", + "parameters": "name: type-union", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "any" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "SwitchDesktop", + "parameters": "desktopId: number", + "paramSpec": { + "k": "object", + "fields": { + "desktopId": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "desktop", + "actionName": "NextDesktop", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "switches to the next Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "PreviousDesktop", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "switches to the previous Windows Desktop" + }, + { + "schemaName": "desktop", + "actionName": "ToggleNotifications", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows/hides windows notification center" + }, + { + "schemaName": "desktop", + "actionName": "Debug", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Attaches the debugger to the AutoShell process" + }, + { + "schemaName": "desktop", + "actionName": "SetTextSize", + "parameters": "size: number", + "paramSpec": { + "k": "object", + "fields": { + "size": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Changes the text size that appears throughout Windows and your apps" + }, + { + "schemaName": "desktop", + "actionName": "SetScreenResolution", + "parameters": "width: number, height: number, refreshRate?: number", + "paramSpec": { + "k": "object", + "fields": { + "width": { + "optional": false, + "spec": { + "k": "number" + } + }, + "height": { + "optional": false, + "spec": { + "k": "number" + } + }, + "refreshRate": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Change screen resolution" + }, + { + "schemaName": "desktop", + "actionName": "BluetoothToggle", + "parameters": "enableBluetooth?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enableBluetooth": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "===== Common Settings Actions ===== Toggles Bluetooth radio on or off" + }, + { + "schemaName": "desktop", + "actionName": "EnableWifi", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables WiFi adapter" + }, + { + "schemaName": "desktop", + "actionName": "AdjustScreenBrightness", + "parameters": "brightnessLevel: \"increase\"|\"decrease\"", + "paramSpec": { + "k": "object", + "fields": { + "brightnessLevel": { + "optional": false, + "spec": { + "k": "string", + "enum": ["increase", "decrease"] + } + } + } + }, + "description": "Adjusts screen brightness (increase or decrease)" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "EnableBlueLightFilterSchedule", + "parameters": "schedule: string, nightLightScheduleDisabled: boolean", + "paramSpec": { + "k": "object", + "fields": { + "schedule": { + "optional": false, + "spec": { + "k": "string" + } + }, + "nightLightScheduleDisabled": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables blue light filter schedule (Night Light)" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "AdjustColorTemperature", + "parameters": "filterEffect?: \"reduce\"|\"increase\"", + "paramSpec": { + "k": "object", + "fields": { + "filterEffect": { + "optional": true, + "spec": { + "k": "string", + "enum": ["reduce", "increase"] + } + } + } + }, + "description": "Adjusts the color temperature for Night Light" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "DisplayScaling", + "parameters": "sizeOverride: string", + "paramSpec": { + "k": "object", + "fields": { + "sizeOverride": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Sets display scaling percentage (100, 125, 150, 175, 200)" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "AdjustScreenOrientation", + "parameters": "orientation: \"portrait\"|\"landscape\"", + "paramSpec": { + "k": "object", + "fields": { + "orientation": { + "optional": false, + "spec": { + "k": "string", + "enum": ["portrait", "landscape"] + } + } + } + }, + "description": "Adjusts screen orientation between portrait and landscape" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "RotationLock", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Locks or unlocks screen rotation" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "ListResolutions", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists available display resolutions for the current monitor" + }, + { + "schemaName": "desktop.desktop-display", + "actionName": "DisplayResolutionAndAspectRatio", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Opens display settings to adjust resolution and aspect ratio" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "MouseCursorSpeed", + "parameters": "speedLevel: number, reduceSpeed?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "speedLevel": { + "optional": false, + "spec": { + "k": "number" + } + }, + "reduceSpeed": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Adjusts mouse cursor speed" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "MouseWheelScrollLines", + "parameters": "scrollLines: number", + "paramSpec": { + "k": "object", + "fields": { + "scrollLines": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Sets the number of lines to scroll per mouse wheel notch" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "SetPrimaryMouseButton", + "parameters": "primaryButton: \"left\"|\"right\"", + "paramSpec": { + "k": "object", + "fields": { + "primaryButton": { + "optional": false, + "spec": { + "k": "string", + "enum": ["left", "right"] + } + } + } + }, + "description": "Sets the primary mouse button" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "EnhancePointerPrecision", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables enhanced pointer precision (mouse acceleration)" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "AdjustMousePointerSize", + "parameters": "sizeAdjustment: \"increase\"|\"decrease\"", + "paramSpec": { + "k": "object", + "fields": { + "sizeAdjustment": { + "optional": false, + "spec": { + "k": "string", + "enum": ["increase", "decrease"] + } + } + } + }, + "description": "Adjusts mouse pointer size" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "MousePointerCustomization", + "parameters": "color: string, style?: string", + "paramSpec": { + "k": "object", + "fields": { + "color": { + "optional": false, + "spec": { + "k": "string" + } + }, + "style": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Customizes mouse pointer color" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "CursorTrail", + "parameters": "enable: boolean, length?: number", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + }, + "length": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Enables or disables the mouse cursor trail and sets its length" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "EnableTouchPad", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables the touchpad" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "TouchpadCursorSpeed", + "parameters": "speed?: number", + "paramSpec": { + "k": "object", + "fields": { + "speed": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Adjusts touchpad cursor speed" + }, + { + "schemaName": "desktop.desktop-input", + "actionName": "ToggleMouseSonar", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables the \"Find my pointer\" sonar ring when pressing Ctrl" + }, + { + "schemaName": "desktop.desktop-personalization", + "actionName": "EnableTransparency", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables transparency effects" + }, + { + "schemaName": "desktop.desktop-personalization", + "actionName": "ApplyColorToTitleBar", + "parameters": "enableColor: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enableColor": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Applies accent color to title bars" + }, + { + "schemaName": "desktop.desktop-personalization", + "actionName": "HighContrastTheme", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Opens the high contrast accessibility settings page. Only use when the user explicitly asks for high contrast settings." + }, + { + "schemaName": "desktop.desktop-personalization", + "actionName": "SystemThemeMode", + "parameters": "mode: \"light\"|\"dark\"", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["light", "dark"] + } + } + } + }, + "description": "Sets the system-wide theme mode to light or dark (affects apps, taskbar, and Start menu). Only for light/dark mode, not for named themes." + }, + { + "schemaName": "desktop.desktop-power", + "actionName": "BatterySaverActivationLevel", + "parameters": "thresholdValue: number", + "paramSpec": { + "k": "object", + "fields": { + "thresholdValue": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Sets the battery saver activation threshold" + }, + { + "schemaName": "desktop.desktop-power", + "actionName": "SetPowerModePluggedIn", + "parameters": "powerMode: \"bestPerformance\"|\"balanced\"|\"bestPowerEfficiency\"", + "paramSpec": { + "k": "object", + "fields": { + "powerMode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["bestPerformance", "balanced", "bestPowerEfficiency"] + } + } + } + }, + "description": "Sets power mode when plugged in" + }, + { + "schemaName": "desktop.desktop-power", + "actionName": "SetPowerModeOnBattery", + "parameters": "mode?: string", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Sets power mode when on battery" + }, + { + "schemaName": "desktop.desktop-privacy", + "actionName": "ManageMicrophoneAccess", + "parameters": "accessSetting: \"allow\"|\"deny\"", + "paramSpec": { + "k": "object", + "fields": { + "accessSetting": { + "optional": false, + "spec": { + "k": "string", + "enum": ["allow", "deny"] + } + } + } + }, + "description": "Manages microphone access for apps" + }, + { + "schemaName": "desktop.desktop-privacy", + "actionName": "ManageCameraAccess", + "parameters": "accessSetting?: \"allow\"|\"deny\"", + "paramSpec": { + "k": "object", + "fields": { + "accessSetting": { + "optional": true, + "spec": { + "k": "string", + "enum": ["allow", "deny"] + } + } + } + }, + "description": "Manages camera access for apps" + }, + { + "schemaName": "desktop.desktop-privacy", + "actionName": "ManageLocationAccess", + "parameters": "accessSetting?: \"allow\"|\"deny\"", + "paramSpec": { + "k": "object", + "fields": { + "accessSetting": { + "optional": true, + "spec": { + "k": "string", + "enum": ["allow", "deny"] + } + } + } + }, + "description": "Manages location access for apps" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableMeteredConnections", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables metered connection settings" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableGameMode", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Enables or disables Game Mode" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableNarratorAction", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables Narrator" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableMagnifier", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables Magnifier" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableStickyKeys", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables Sticky Keys" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableFilterKeysAction", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables Filter Keys" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "MonoAudioToggle", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables mono audio" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "ShowFileExtensions", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows or hides file extensions in File Explorer" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "ShowHiddenAndSystemFiles", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows or hides hidden and system files in File Explorer" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "AutomaticTimeSettingAction", + "parameters": "enableAutoTimeSync: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enableAutoTimeSync": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables automatic time synchronization" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "AutomaticDSTAdjustment", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enables or disables automatic DST adjustment" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "EnableQuietHours", + "parameters": "startHour?: number, endHour?: number", + "paramSpec": { + "k": "object", + "fields": { + "startHour": { + "optional": true, + "spec": { + "k": "number" + } + }, + "endHour": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Enables or disables Focus Assist (Quiet Hours)" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "RememberWindowLocations", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Remembers window locations based on monitor configuration" + }, + { + "schemaName": "desktop.desktop-system", + "actionName": "MinimizeWindowsOnMonitorDisconnectAction", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Minimizes windows when a monitor is disconnected" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "AutoHideTaskbar", + "parameters": "hideWhenNotUsing: boolean, alwaysShow: boolean", + "paramSpec": { + "k": "object", + "fields": { + "hideWhenNotUsing": { + "optional": false, + "spec": { + "k": "boolean" + } + }, + "alwaysShow": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Auto-hides the taskbar" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "TaskbarAlignment", + "parameters": "alignment: \"left\"|\"center\"", + "paramSpec": { + "k": "object", + "fields": { + "alignment": { + "optional": false, + "spec": { + "k": "string", + "enum": ["left", "center"] + } + } + } + }, + "description": "Sets taskbar alignment (left or center)" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "TaskViewVisibility", + "parameters": "visibility: boolean", + "paramSpec": { + "k": "object", + "fields": { + "visibility": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows or hides the Task View button" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "ToggleWidgetsButtonVisibility", + "parameters": "visibility: \"show\"|\"hide\"", + "paramSpec": { + "k": "object", + "fields": { + "visibility": { + "optional": false, + "spec": { + "k": "string", + "enum": ["show", "hide"] + } + } + } + }, + "description": "Shows or hides the Widgets button" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "ShowBadgesOnTaskbar", + "parameters": "enableBadging?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enableBadging": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows or hides badges on taskbar icons" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "DisplayTaskbarOnAllMonitors", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows taskbar on all monitors" + }, + { + "schemaName": "desktop.desktop-taskbar", + "actionName": "DisplaySecondsInSystrayClock", + "parameters": "enable?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Shows seconds in the system tray clock" + }, + { + "schemaName": "discord", + "actionName": "createMessage", + "parameters": "channel_id: string, content: string, nonce?: string, tts?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + }, + "nonce": { + "optional": true, + "spec": { + "k": "string" + } + }, + "tts": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Creates a new message in a specified channel. Sample phrases: - \"Send a message to the general channel saying 'Hello everyone!'\" - \"Post 'Meeting starts at 3 PM' in the announcements channel, please.\" - \"Can you create a new message in the #updates channel with the text 'New features are l" + }, + { + "schemaName": "discord", + "actionName": "craftMessage", + "parameters": "channel_id: string, intent: string, tts?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "intent": { + "optional": false, + "spec": { + "k": "string" + } + }, + "tts": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Drafts a message via LLM from a high-level intent, then posts it. Use when the user describes what the message should convey (\"that ...\", \"to ...\", \"about ...\", \"reminding ...\", \"asking ...\") instead of supplying literal content. Sample phrases: - \"Send a message to #general that welcomes eve" + }, + { + "schemaName": "discord", + "actionName": "getChannelMessages", + "parameters": "channel_id: string, limit?: number, before?: string, after?: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + }, + "before": { + "optional": true, + "spec": { + "k": "string" + } + }, + "after": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Fetches messages from a specified channel. Sample phrases: - \"Can you show me the latest messages from the channel with ID 12345?\" - \"Fetch the last 50 messages from the channel 67890, please.\" - \"Get messages from the channel 54321, but only those sent after yesterday.\"" + }, + { + "schemaName": "discord", + "actionName": "createGuild", + "parameters": "name: string, region?: string, icon?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "region": { + "optional": true, + "spec": { + "k": "string" + } + }, + "icon": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Creates a new guild. Sample phrases: - \"Can you create a new guild for me called 'Knights of Valor' in the US region with this icon?\" - \"I need a new guild named 'Dragon Slayers' in the EU region. Use this icon for it.\" - \"Please set up a guild called 'Mystic Warriors' in the Asia region a" + }, + { + "schemaName": "discord", + "actionName": "getGuild", + "parameters": "guild_id: string", + "paramSpec": { + "k": "object", + "fields": { + "guild_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Fetches a guild object for a given guild ID. Sample phrases: - \"Can you get the details for the guild with ID 12345?\" - \"Fetch the guild information for guild ID 67890, please.\" - \"I need the guild object for the guild with ID abcdef.\"" + }, + { + "schemaName": "discord", + "actionName": "createWebhook", + "parameters": "channel_id: string, name: string, avatar?: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "avatar": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Creates a new webhook in a specified channel. Sample phrases: - \"Can you set up a new webhook in the channel with ID 12345? Name it 'Updates' and use the avatar image from this link.\" - \"Please create a webhook named 'Alerts' in the channel 67890 and use this avatar for it.\" - \"I need a ne" + }, + { + "schemaName": "discord", + "actionName": "getWebhook", + "parameters": "webhook_id: string", + "paramSpec": { + "k": "object", + "fields": { + "webhook_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Fetches a webhook object for a given webhook ID. Sample phrases: - \"Can you fetch the webhook details for ID 12345?\" - \"I need the webhook information for webhook ID 12345.\" - \"Please get the webhook object for the ID 12345.\"" + }, + { + "schemaName": "discord", + "actionName": "executeWebhook", + "parameters": "webhook_id: string, webhook_token: string, content?: string, username?: string, avatar_url?: string, tts?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "webhook_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "webhook_token": { + "optional": false, + "spec": { + "k": "string" + } + }, + "content": { + "optional": true, + "spec": { + "k": "string" + } + }, + "username": { + "optional": true, + "spec": { + "k": "string" + } + }, + "avatar_url": { + "optional": true, + "spec": { + "k": "string" + } + }, + "tts": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Executes a webhook, sending a message to the channel. Sample phrases: - \"Send a message using the webhook with ID 12345 and token abcde. The content should be 'Hello everyone!', and use the username 'Bot' with the avatar URL 'http://example.com/avatar.png'. Make it a TTS message.\" - \"Can you " + }, + { + "schemaName": "discord", + "actionName": "getCurrentUser", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Returns the user object of the requester's account. Sample phrases: - \"Can you show me my account details?\" - \"What's my user info?\" - \"Get my profile information, please.\"" + }, + { + "schemaName": "discord", + "actionName": "getUser", + "parameters": "user_id: string", + "paramSpec": { + "k": "object", + "fields": { + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Returns a user object for a given user ID. Sample phrases: - \"Can you fetch the user details for ID 123456?\" - \"I need information on the user with ID 123456.\" - \"Please get me the user object for ID 123456.\"" + }, + { + "schemaName": "discord", + "actionName": "modifyCurrentUser", + "parameters": "username?: string, avatar?: string, banner?: string", + "paramSpec": { + "k": "object", + "fields": { + "username": { + "optional": true, + "spec": { + "k": "string" + } + }, + "avatar": { + "optional": true, + "spec": { + "k": "string" + } + }, + "banner": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Modify the requester's user account settings. Returns a user object on success. Sample phrases: - \"Can you update my username and profile picture?\" - \"I'd like to change my username and avatar, please.\" - \"Please modify my account settings with a new username and banner image.\"" + }, + { + "schemaName": "discord", + "actionName": "getCurrentUserGuilds", + "parameters": "before?: string, after?: string, limit?: number, with_counts?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "before": { + "optional": true, + "spec": { + "k": "string" + } + }, + "after": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + }, + "with_counts": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Returns a list of partial guild objects the current user is a member of. Sample phrases: - \"Can you show me the servers I'm part of?\" - \"List all the guilds I'm currently in, please.\" - \"What are the Discord servers I belong to?\"" + }, + { + "schemaName": "discord", + "actionName": "getCurrentUserGuildMember", + "parameters": "guild_id: string", + "paramSpec": { + "k": "object", + "fields": { + "guild_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Returns a guild member object for the current user. Sample phrases: - \"Can you show me my member details for the server with ID 123456?\" - \"Get my guild member info for the server 123456, please.\" - \"I need my member object for the guild with ID 123456.\"" + }, + { + "schemaName": "discord", + "actionName": "leaveGuild", + "parameters": "guild_id: string", + "paramSpec": { + "k": "object", + "fields": { + "guild_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Leave a guild. Returns a 204 empty response on success. Sample phrases: - \"I want to leave the server with ID 123456789.\" - \"Please remove me from the guild with ID 123456789.\" - \"Can you help me exit the guild? The ID is 123456789.\"" + }, + { + "schemaName": "discord", + "actionName": "createDM", + "parameters": "recipient_id: string", + "paramSpec": { + "k": "object", + "fields": { + "recipient_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new DM channel with a user. Returns a DM channel object. Sample phrases: - \"Can you start a direct message with user ID 123456?\" - \"I'd like to create a DM channel with the user whose ID is 123456.\" - \"Please open a new DM with the user having the ID 123456.\"" + }, + { + "schemaName": "discord", + "actionName": "createGroupDM", + "parameters": "access_tokens?: string[], nicks?: string", + "paramSpec": { + "k": "object", + "fields": { + "access_tokens": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "nicks": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new group DM channel with multiple users. Returns a DM channel object. Sample phrases: - \"Can you start a new group DM with these friends?\" - \"Create a group chat with these people, please.\" - \"I'd like to set up a group DM with my buddies.\"" + }, + { + "schemaName": "discord", + "actionName": "getCurrentUserConnections", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Returns a list of connection objects. Sample phrases: - \"Can you show me my current connections?\" - \"What are my linked accounts right now?\" - \"I'd like to see my active connections, please.\"" + }, + { + "schemaName": "discord", + "actionName": "getCurrentUserApplicationRoleConnection", + "parameters": "application_id: string", + "paramSpec": { + "k": "object", + "fields": { + "application_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Returns the application role connection for the user. Sample phrases: - \"Can you show me my role connection for the app with ID 123456?\" - \"What's my application role connection for the app with ID 123456?\" - \"Please get my role connection for the application with ID 123456.\"" + }, + { + "schemaName": "discord", + "actionName": "updateCurrentUserApplicationRoleConnection", + "parameters": "application_id?: string, platform_name?: string, platform_username?: string, metadata?: string", + "paramSpec": { + "k": "object", + "fields": { + "application_id": { + "optional": true, + "spec": { + "k": "string" + } + }, + "platform_name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "platform_username": { + "optional": true, + "spec": { + "k": "string" + } + }, + "metadata": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Updates and returns the application role connection for the user. Sample phrases: - \"Can you update my role connection for the app with my new username?\" - \"Please change my application role connection details to reflect my updated platform name and username.\" - \"I need to update my role c" + }, + { + "schemaName": "discord", + "actionName": "getInvite", + "parameters": "invite_code: string, with_counts?: boolean, guild_scheduled_event_id?: string", + "paramSpec": { + "k": "object", + "fields": { + "invite_code": { + "optional": false, + "spec": { + "k": "string" + } + }, + "with_counts": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "guild_scheduled_event_id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Returns an invite object for the given code. Sample phrases: - \"Can you fetch the invite details for the code ABC123?\" - \"I need the invite info for code XYZ789, please.\" - \"Get me the invite object for the code DEF456, and include the counts.\"" + }, + { + "schemaName": "discord", + "actionName": "deleteInvite", + "parameters": "invite_code: string", + "paramSpec": { + "k": "object", + "fields": { + "invite_code": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete an invite. Requires the MANAGE_CHANNELS permission on the channel this invite belongs to, or MANAGE_GUILD to remove any invite across the guild. Sample phrases: - \"Can you delete the invite with code ABC123?\" - \"Please remove the invite link with the code XYZ789.\" - \"I need you to d" + }, + { + "schemaName": "discord", + "actionName": "getTargetUsers", + "parameters": "invite_code: string", + "paramSpec": { + "k": "object", + "fields": { + "invite_code": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Gets the users allowed to see and accept this invite. Response is a CSV file with the header user_id and each user ID from the original file passed to invite create on its own line. Requires the caller to be the inviter, or have MANAGE_GUILD permission, or have VIEW_AUDIT_LOG permission. Sample phr" + }, + { + "schemaName": "discord", + "actionName": "updateTargetUsers", + "parameters": "invite_code: string, target_users_file?: string", + "paramSpec": { + "k": "object", + "fields": { + "invite_code": { + "optional": false, + "spec": { + "k": "string" + } + }, + "target_users_file": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Updates the users allowed to see and accept this invite. Uploading a file with invalid user IDs will result in a 400 with the invalid IDs described. Requires the caller to be the inviter or have the MANAGE_GUILD permission. Sample phrases: - \"Can you update the invite with these new target users" + }, + { + "schemaName": "discord", + "actionName": "getTargetUsersJobStatus", + "parameters": "invite_code: string", + "paramSpec": { + "k": "object", + "fields": { + "invite_code": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Processing target users from a CSV when creating or updating an invite is done asynchronously. This endpoint allows you to check the status of that job. Requires the caller to be the inviter, or have MANAGE_GUILD permission, or have VIEW_AUDIT_LOG permission. Sample phrases: - \"Can you check the" + }, + { + "schemaName": "discord", + "actionName": "getChannel", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Get a channel by ID. Returns a channel object." + }, + { + "schemaName": "discord", + "actionName": "modifyChannel", + "parameters": "channel_id: string, name?: string, topic?: string, nsfw?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "topic": { + "optional": true, + "spec": { + "k": "string" + } + }, + "nsfw": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Update a channel's settings." + }, + { + "schemaName": "discord", + "actionName": "setVoiceChannelStatus", + "parameters": "channel_id: string, status: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "status": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Set the status of a voice channel." + }, + { + "schemaName": "discord", + "actionName": "deleteChannel", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a channel or close a private message." + }, + { + "schemaName": "discord", + "actionName": "editChannelPermissions", + "parameters": "channel_id: string, overwrite_id?: string, allow?: string, deny?: string, type?: number", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "overwrite_id": { + "optional": true, + "spec": { + "k": "string" + } + }, + "allow": { + "optional": true, + "spec": { + "k": "string" + } + }, + "deny": { + "optional": true, + "spec": { + "k": "string" + } + }, + "type": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Edit the permissions of a channel." + }, + { + "schemaName": "discord", + "actionName": "getChannelInvites", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Get all invites for a channel." + }, + { + "schemaName": "discord", + "actionName": "createChannelInvite", + "parameters": "channel_id: string, max_age?: number, never_expires?: boolean, max_uses?: number, temporary?: boolean, unique?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "max_age": { + "optional": true, + "spec": { + "k": "number" + } + }, + "never_expires": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "max_uses": { + "optional": true, + "spec": { + "k": "number" + } + }, + "temporary": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "unique": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Create a new invite for a channel." + }, + { + "schemaName": "discord", + "actionName": "deleteChannelPermission", + "parameters": "channel_id: string, overwrite_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "overwrite_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a permission overwrite from a channel." + }, + { + "schemaName": "discord", + "actionName": "followAnnouncementChannel", + "parameters": "channel_id: string, webhook_channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "webhook_channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Follow an announcement channel to receive crossposted messages." + }, + { + "schemaName": "discord", + "actionName": "triggerTypingIndicator", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Trigger the typing indicator in a channel." + }, + { + "schemaName": "discord", + "actionName": "groupDmAddRecipient", + "parameters": "channel_id: string, user_id: string, access_token?: string, nick?: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "access_token": { + "optional": true, + "spec": { + "k": "string" + } + }, + "nick": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Add a recipient to a Group DM." + }, + { + "schemaName": "discord", + "actionName": "groupDmRemoveRecipient", + "parameters": "channel_id: string, user_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Remove a recipient from a Group DM." + }, + { + "schemaName": "discord", + "actionName": "startThreadFromMessage", + "parameters": "channel_id: string, message_id: string, name?: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "message_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Start a thread from an existing message." + }, + { + "schemaName": "discord", + "actionName": "startThreadWithoutMessage", + "parameters": "channel_id: string, name: string, auto_archive_duration?: number, type?: number", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "auto_archive_duration": { + "optional": true, + "spec": { + "k": "number" + } + }, + "type": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Start a thread without an existing message." + }, + { + "schemaName": "discord", + "actionName": "startThreadInForumOrMediaChannel", + "parameters": "channel_id: string, name: string, message?: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "message": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Start a thread in a forum or media channel." + }, + { + "schemaName": "discord", + "actionName": "joinThread", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Join a thread." + }, + { + "schemaName": "discord", + "actionName": "addThreadMember", + "parameters": "channel_id: string, user_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Add another member to a thread." + }, + { + "schemaName": "discord", + "actionName": "leaveThread", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Leave a thread." + }, + { + "schemaName": "discord", + "actionName": "removeThreadMember", + "parameters": "channel_id: string, user_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Remove another member from a thread." + }, + { + "schemaName": "discord", + "actionName": "getThreadMember", + "parameters": "channel_id: string, user_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "user_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Get a thread member." + }, + { + "schemaName": "discord", + "actionName": "listThreadMembers", + "parameters": "channel_id: string", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "List members of a thread." + }, + { + "schemaName": "discord", + "actionName": "listPublicArchivedThreads", + "parameters": "channel_id: string, before?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "before": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "List public archived threads in a channel." + }, + { + "schemaName": "discord", + "actionName": "listPrivateArchivedThreads", + "parameters": "channel_id: string, before?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "before": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "List private archived threads in a channel." + }, + { + "schemaName": "discord", + "actionName": "listJoinedPrivateArchivedThreads", + "parameters": "channel_id: string, before?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "channel_id": { + "optional": false, + "spec": { + "k": "string" + } + }, + "before": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "List private archived threads joined by the current user." + }, + { + "schemaName": "discord", + "actionName": "setGuild", + "parameters": "guild_id: string", + "paramSpec": { + "k": "object", + "fields": { + "guild_id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Set the default Discord server (guild) for all operations." + }, + { + "schemaName": "discord", + "actionName": "listChannels", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "List all channels in the current Discord server." + }, + { + "schemaName": "discord", + "actionName": "refreshChannels", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Refresh the channel cache from the Discord server." + }, + { + "schemaName": "dispatcher.activity", + "actionName": "exitActivity", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Exit the current activity." + }, + { + "schemaName": "dispatcher.clarify", + "actionName": "clarifyMultiplePossibleActionName", + "parameters": "request: string, possibleActionNames: string[], clarifyingQuestion: string", + "paramSpec": { + "k": "object", + "fields": { + "request": { + "optional": false, + "spec": { + "k": "string" + } + }, + "possibleActionNames": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "clarifyingQuestion": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Ask the user for clarification for ambiguous request that have multiple possible known action as interpretation. Don't clarify \"unknown\" action." + }, + { + "schemaName": "dispatcher.clarify", + "actionName": "clarifyMissingParameter", + "parameters": "request: string, actionName: string, parameterName: string, clarifyingQuestion: string", + "paramSpec": { + "k": "object", + "fields": { + "request": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "parameterName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "clarifyingQuestion": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "The user request is for an action, but some of the parameter is not specified or cannot be infer from the context. Ask the user for clarification for the missing parameter of an known action. Don't clarify unknown action." + }, + { + "schemaName": "dispatcher.clarify", + "actionName": "clarifyUnresolvedReference", + "parameters": "request: string, actionName: string, parameterName: string, reference: string, clarifyingQuestion: string", + "paramSpec": { + "k": "object", + "fields": { + "request": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "parameterName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "reference": { + "optional": false, + "spec": { + "k": "string" + } + }, + "clarifyingQuestion": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "The user request is for an action, but parameters are referring to unresolved pronouns or references that is not found in the request or recent chat context." + }, + { + "schemaName": "dispatcher.clarify", + "actionName": "clarifyMultipleAgentMatches", + "parameters": "request: string, candidates: { schemaName: string, actionName: string, score?: number }[], clarifyingQuestion: string", + "paramSpec": { + "k": "object", + "fields": { + "request": { + "optional": false, + "spec": { + "k": "string" + } + }, + "candidates": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "schemaName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "score": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + } + }, + "clarifyingQuestion": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "The user request was matched by more than one agent's schema/grammar simultaneously (a cross-agent action collision). List the candidate (schemaName, actionName) pairs so the user can disambiguate. This differs from ClarifyMultiplePossibleActionName, which only lists action names within a single " + }, + { + "schemaName": "dispatcher.lookup", + "actionName": "lookupAndAnswerConversation", + "parameters": "originalRequest: string, question: string, conversationLookupFilters: { verbs?: any[], terms: any[], timeRange?: type-union }[]", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "question": { + "optional": false, + "spec": { + "k": "string" + } + }, + "conversationLookupFilters": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "verbs": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "terms": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "timeRange": { + "optional": true, + "spec": { + "k": "any" + } + } + } + } + } + } + } + }, + "description": "The user request is a question about previous conversations. (e.g. \"what did we say about the project last week?\") The user expects only the answer, and not an action to be taken." + }, + { + "schemaName": "dispatcher.lookup", + "actionName": "startLookup", + "parameters": "lookup: type-union", + "paramSpec": { + "k": "object", + "fields": { + "lookup": { + "optional": false, + "spec": { + "k": "any" + } + } + } + }, + "description": "The user want to start looking information for a specific source without specifying what to look for. Don't use this action if the request includes what to look for." + }, + { + "schemaName": "dispatcher.reasoning", + "actionName": "reasoningAction", + "parameters": "originalRequest: string, attemptedAction?: string, contextEntities?: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "attemptedAction": { + "optional": true, + "spec": { + "k": "string" + } + }, + "contextEntities": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "If the user requests requires multiple action or steps, use the reasoning action." + }, + { + "schemaName": "email", + "actionName": "sendEmail", + "parameters": "subject: string, body?: string, to: string[], cc?: string[], bcc?: string[], attachments?: string[], genContent: { generateBody?: boolean, bodySearchQuery?: string }", + "paramSpec": { + "k": "object", + "fields": { + "subject": { + "optional": false, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "to": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "cc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "bcc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "attachments": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "genContent": { + "optional": false, + "spec": { + "k": "object", + "fields": { + "generateBody": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "bodySearchQuery": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + }, + "description": "Type for sending a simple email" + }, + { + "schemaName": "email", + "actionName": "replyEmail", + "parameters": "body?: string, cc?: string[], bcc?: string[], attachments?: string[], messageRef: { senders?: string[], subject?: string, content?: string, receivedDateTime?: { startTime?: any, endTime?: any, day?: any, dayRange?: any }, srcFolder?: string, destfolder?: string }", + "paramSpec": { + "k": "object", + "fields": { + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "cc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "bcc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "attachments": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "messageRef": { + "optional": false, + "spec": { + "k": "object", + "fields": { + "senders": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "subject": { + "optional": true, + "spec": { + "k": "string" + } + }, + "content": { + "optional": true, + "spec": { + "k": "string" + } + }, + "receivedDateTime": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "startTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "endTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "day": { + "optional": true, + "spec": { + "k": "string" + } + }, + "dayRange": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + "srcFolder": { + "optional": true, + "spec": { + "k": "string" + } + }, + "destfolder": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + }, + "description": "Type for replying to an email" + }, + { + "schemaName": "email", + "actionName": "forwardEmail", + "parameters": "to: string[], cc?: string[], bcc?: string[], additionalMessage?: string, messageRef: { senders?: string[], subject?: string, content?: string, receivedDateTime?: { startTime?: any, endTime?: any, day?: any, dayRange?: any }, srcFolder?: string, destfolder?: string }", + "paramSpec": { + "k": "object", + "fields": { + "to": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "cc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "bcc": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "additionalMessage": { + "optional": true, + "spec": { + "k": "string" + } + }, + "messageRef": { + "optional": false, + "spec": { + "k": "object", + "fields": { + "senders": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "subject": { + "optional": true, + "spec": { + "k": "string" + } + }, + "content": { + "optional": true, + "spec": { + "k": "string" + } + }, + "receivedDateTime": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "startTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "endTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "day": { + "optional": true, + "spec": { + "k": "string" + } + }, + "dayRange": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + "srcFolder": { + "optional": true, + "spec": { + "k": "string" + } + }, + "destfolder": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + }, + "description": "Type for forwarding an email" + }, + { + "schemaName": "email", + "actionName": "findEmail", + "parameters": "messageRef: { senders?: string[], subject?: string, content?: string, receivedDateTime?: { startTime?: any, endTime?: any, day?: any, dayRange?: any }, srcFolder?: string, destfolder?: string }", + "paramSpec": { + "k": "object", + "fields": { + "messageRef": { + "optional": false, + "spec": { + "k": "object", + "fields": { + "senders": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "subject": { + "optional": true, + "spec": { + "k": "string" + } + }, + "content": { + "optional": true, + "spec": { + "k": "string" + } + }, + "receivedDateTime": { + "optional": true, + "spec": { + "k": "object", + "fields": { + "startTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "endTime": { + "optional": true, + "spec": { + "k": "string" + } + }, + "day": { + "optional": true, + "spec": { + "k": "string" + } + }, + "dayRange": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + "srcFolder": { + "optional": true, + "spec": { + "k": "string" + } + }, + "destfolder": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + }, + "description": "Type for finding an email message (search for emails)" + }, + { + "schemaName": "github-cli", + "actionName": "authLogin", + "parameters": "hostname?: string, web?: boolean, token?: string", + "paramSpec": { + "k": "object", + "fields": { + "hostname": { + "optional": true, + "spec": { + "k": "string" + } + }, + "web": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "token": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "authLogout", + "parameters": "hostname?: string", + "paramSpec": { + "k": "object", + "fields": { + "hostname": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "authStatus", + "parameters": "hostname?: string, showToken?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "hostname": { + "optional": true, + "spec": { + "k": "string" + } + }, + "showToken": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "browseRepo", + "parameters": "branch?: string, commit?: string, tag?: string", + "paramSpec": { + "k": "object", + "fields": { + "branch": { + "optional": true, + "spec": { + "k": "string" + } + }, + "commit": { + "optional": true, + "spec": { + "k": "string" + } + }, + "tag": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "browseIssue", + "parameters": "number?: number", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "browsePr", + "parameters": "number?: number", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "codespaceCreate", + "parameters": "repo?: string, branch?: string, location?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "branch": { + "optional": true, + "spec": { + "k": "string" + } + }, + "location": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "codespaceDelete", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "codespaceList", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "gistCreate", + "parameters": "public?: boolean, description?: string", + "paramSpec": { + "k": "object", + "fields": { + "public": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "gistDelete", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "gistList", + "parameters": "public?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "public": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "issueCreate", + "parameters": "repo?: string, title?: string, body?: string, assignee?: string, label?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "title": { + "optional": true, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "assignee": { + "optional": true, + "spec": { + "k": "string" + } + }, + "label": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "issueClose", + "parameters": "number?: number", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "issueDelete", + "parameters": "number: number, repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": false, + "spec": { + "k": "number" + } + }, + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Permanently delete a GitHub issue (uses `gh issue delete --yes`)." + }, + { + "schemaName": "github-cli", + "actionName": "issueReopen", + "parameters": "number?: number", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "issueList", + "parameters": "repo?: string, state?: string, label?: string, assignee?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "state": { + "optional": true, + "spec": { + "k": "string" + } + }, + "label": { + "optional": true, + "spec": { + "k": "string" + } + }, + "assignee": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "issueView", + "parameters": "number?: number, repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + }, + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "View / open a specific GitHub issue by number. Example: User: show issue 2222 Agent: { actionName: \"issueView\", parameters: { number: 2222 } } Example: User: view issue #42 in microsoft/TypeAgent Agent: { actionName: \"issueView\", parameters: { number: 42, repo: \"microsoft/TypeAgent\" } }" + }, + { + "schemaName": "github-cli", + "actionName": "orgList", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "orgView", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prCreate", + "parameters": "title?: string, body?: string, base?: string, head?: string, draft?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": true, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + }, + "base": { + "optional": true, + "spec": { + "k": "string" + } + }, + "head": { + "optional": true, + "spec": { + "k": "string" + } + }, + "draft": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prClose", + "parameters": "number?: number", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prMerge", + "parameters": "number?: number, mergeMethod?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + }, + "mergeMethod": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prList", + "parameters": "repo?: string, state?: string, label?: string, assignee?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "state": { + "optional": true, + "spec": { + "k": "string" + } + }, + "label": { + "optional": true, + "spec": { + "k": "string" + } + }, + "assignee": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prView", + "parameters": "number?: number, repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + }, + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "View / open a specific GitHub pull request by number. Example: User: show PR 2196 Agent: { actionName: \"prView\", parameters: { number: 2196 } } Example: User: view pull request #42 in microsoft/TypeAgent Agent: { actionName: \"prView\", parameters: { number: 42, repo: \"microsoft/TypeAgent\" } }" + }, + { + "schemaName": "github-cli", + "actionName": "prCheckout", + "parameters": "number?: number, branch?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": true, + "spec": { + "k": "number" + } + }, + "branch": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "prChecks", + "parameters": "number: number, repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": false, + "spec": { + "k": "number" + } + }, + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "projectCreate", + "parameters": "name?: string, body?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "body": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "projectDelete", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "projectList", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "releaseCreate", + "parameters": "tag?: string, title?: string, notes?: string", + "paramSpec": { + "k": "object", + "fields": { + "tag": { + "optional": true, + "spec": { + "k": "string" + } + }, + "title": { + "optional": true, + "spec": { + "k": "string" + } + }, + "notes": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "releaseDelete", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "releaseList", + "parameters": "repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "repoCreate", + "parameters": "name?: string, description?: string, public?: boolean, private?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + }, + "public": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "private": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "repoClone", + "parameters": "repo?: string, branch?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "branch": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "repoDelete", + "parameters": "repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "repoView", + "parameters": "repo?: string, field?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "field": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "repoFork", + "parameters": "repo?: string, name?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "starRepo", + "parameters": "repo?: string, unstar?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "unstar": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "cacheList", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "cacheDelete", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "runView", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "workflowView", + "parameters": "id?: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "agentTaskRun", + "parameters": "task?: string", + "paramSpec": { + "k": "object", + "fields": { + "task": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "aliasSet", + "parameters": "name?: string, command?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "command": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "apiRequest", + "parameters": "method?: string, endpoint?: string, limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "method": { + "optional": true, + "spec": { + "k": "string" + } + }, + "endpoint": { + "optional": true, + "spec": { + "k": "string" + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "attestationCreate", + "parameters": "artifact?: string, type?: string", + "paramSpec": { + "k": "object", + "fields": { + "artifact": { + "optional": true, + "spec": { + "k": "string" + } + }, + "type": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "completionGenerate", + "parameters": "shell?: string", + "paramSpec": { + "k": "object", + "fields": { + "shell": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "configSet", + "parameters": "name?: string, value?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "value": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "copilotRun", + "parameters": "task?: string", + "paramSpec": { + "k": "object", + "fields": { + "task": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "extensionInstall", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "gpgKeyAdd", + "parameters": "key?: string", + "paramSpec": { + "k": "object", + "fields": { + "key": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "labelCreate", + "parameters": "name?: string, color?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "color": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "licensesView", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "previewExecute", + "parameters": "feature?: string", + "paramSpec": { + "k": "object", + "fields": { + "feature": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "rulesetView", + "parameters": "repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "searchRepos", + "parameters": "query?: string", + "paramSpec": { + "k": "object", + "fields": { + "query": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "secretCreate", + "parameters": "name?: string, value?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "value": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "sshKeyAdd", + "parameters": "key?: string", + "paramSpec": { + "k": "object", + "fields": { + "key": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "statusPrint", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "github-cli", + "actionName": "myAssignedIssues", + "parameters": "limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "List issues assigned to the current authenticated user across all repositories. Maps to `gh search issues --assignee @me --state open`." + }, + { + "schemaName": "github-cli", + "actionName": "issueAddLabel", + "parameters": "number: number, label: string, repo?: string", + "paramSpec": { + "k": "object", + "fields": { + "number": { + "optional": false, + "spec": { + "k": "number" + } + }, + "label": { + "optional": false, + "spec": { + "k": "string" + } + }, + "repo": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "variableCreate", + "parameters": "name?: string, value?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "value": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "github-cli", + "actionName": "dependabotAlerts", + "parameters": "repo?: string, severity?: string, state?: string", + "paramSpec": { + "k": "object", + "fields": { + "repo": { + "optional": true, + "spec": { + "k": "string" + } + }, + "severity": { + "optional": true, + "spec": { + "k": "string" + } + }, + "state": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "image", + "actionName": "createImageAction", + "parameters": "originalRequest: string, caption: string, numImages: number", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "caption": { + "optional": false, + "spec": { + "k": "string" + } + }, + "numImages": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "creates an image based on the supplied description" + }, + { + "schemaName": "image", + "actionName": "editImageAction", + "parameters": "originalRequest: string, editPrompt: string, sourceImage: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "editPrompt": { + "optional": false, + "spec": { + "k": "string" + } + }, + "sourceImage": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Edits / transforms an image the user has already supplied (typically the most recent attachment). Use this for requests like \"cartoonize that image\", \"make a watercolor version of this photo\", \"stylize this as a pencil sketch\", etc." + }, + { + "schemaName": "ipconfig", + "actionName": "displayHelpMessage", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Can you show me the help message for ipconfig?\" Agent: \"Displaying the help message for ipconfig.\" User: \"I need some help with ipconfig, please display the help message.\" Agent: \"Displaying the help message for ipconfig.\" User: \"What's the help message for ipconfig?\" Agent: \"Displaying " + }, + { + "schemaName": "ipconfig", + "actionName": "displayFullConfigurationInformation", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Show me the full network configuration details.\" Agent: \"Displaying full network configuration details.\" User: \"Can you display all the configuration information for my network?\" Agent: \"Displaying full network configuration details.\" User: \"I need to see the complete IP configuration.\" " + }, + { + "schemaName": "ipconfig", + "actionName": "releaseIPv4Address", + "parameters": "adapter?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Please release the IPv4 address for the Ethernet adapter.\" Agent: \"Releasing the IPv4 address for the Ethernet adapter.\" User: \"Can you release the IPv4 address on my Wi-Fi adapter?\" Agent: \"Releasing the IPv4 address for the Wi-Fi adapter.\" User: \"Release the IPv4 address for the network" + }, + { + "schemaName": "ipconfig", + "actionName": "releaseIPv6Address", + "parameters": "adapter?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Please release the IPv6 address for the adapter named 'Ethernet'.\" Agent: \"Releasing the IPv6 address for the 'Ethernet' adapter.\" User: \"Can you release the IPv6 address on my Wi-Fi adapter?\" Agent: \"Releasing the IPv6 address for the Wi-Fi adapter.\" User: \"I need to release the IPv6 add" + }, + { + "schemaName": "ipconfig", + "actionName": "renewIPv4Address", + "parameters": "adapter?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Can you renew the IPv4 address for the Ethernet adapter?\" Agent: \"Renewing the IPv4 address for the Ethernet adapter.\" User: \"Please refresh the IPv4 address for my Wi-Fi adapter.\" Agent: \"Renewing the IPv4 address for the Wi-Fi adapter.\" User: \"Renew the IPv4 address for the network adap" + }, + { + "schemaName": "ipconfig", + "actionName": "renewIPv6Address", + "parameters": "adapter?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Can you renew the IPv6 address for the adapter named 'Ethernet'?\" Agent: \"Renewing the IPv6 address for the 'Ethernet' adapter.\" User: \"Please refresh the IPv6 address for my Wi-Fi adapter.\" Agent: \"Renewing the IPv6 address for the Wi-Fi adapter.\" User: \"Renew the IPv6 address for the 'L" + }, + { + "schemaName": "ipconfig", + "actionName": "purgeDNSResolverCache", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Clear the DNS cache, please.\" Agent: \"Purging the DNS resolver cache.\" User: \"Can you purge the DNS resolver cache?\" Agent: \"Purging the DNS resolver cache.\" User: \"I need to flush the DNS cache.\" Agent: \"Purging the DNS resolver cache.\" Purges the DNS Resolver cache." + }, + { + "schemaName": "ipconfig", + "actionName": "refreshDHCPLeasesAndReRegisterDNSNames", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Can you refresh the DHCP leases and re-register the DNS names for me?\" Agent: \"Refreshing all DHCP leases and re-registering DNS names.\" User: \"Please update the DHCP leases and DNS registrations.\" Agent: \"Refreshing all DHCP leases and re-registering DNS names.\" User: \"I need to refresh " + }, + { + "schemaName": "ipconfig", + "actionName": "displayDNSResolverCacheContents", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Show me the DNS cache contents.\" Agent: \"Displaying the contents of the DNS resolver cache.\" User: \"Can you display the DNS resolver cache?\" Agent: \"Displaying the contents of the DNS resolver cache.\" User: \"I'd like to see the DNS resolver cache details.\" Agent: \"Displaying the contents" + }, + { + "schemaName": "ipconfig", + "actionName": "displayDHCPClassIDs", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Can you show me the DHCP class IDs for the adapter?\" Agent: \"Displaying the DHCP class IDs for the adapter.\" User: \"Please display the DHCP class IDs for the network adapter.\" Agent: \"Displaying the DHCP class IDs for the network adapter.\" User: \"I need to see the DHCP class IDs for my ad" + }, + { + "schemaName": "ipconfig", + "actionName": "modifyDHCPClassID", + "parameters": "adapter: string, classID?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": false, + "spec": { + "k": "string" + } + }, + "classID": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Can you change the DHCP class ID for the Ethernet adapter to 'newClassID'?\" Agent: \"Modifying the DHCP class ID for the Ethernet adapter to 'newClassID'.\" User: \"Please update the DHCP class ID on the Wi-Fi adapter to 'newClassID'.\" Agent: \"Modifying the DHCP class ID for the Wi-Fi adapter" + }, + { + "schemaName": "ipconfig", + "actionName": "displayIPv6DHCPClassIDs", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "User: \"Can you show me the IPv6 DHCP class IDs for the adapter?\" Agent: \"Displaying the IPv6 DHCP class IDs for the adapter.\" User: \"Please display the IPv6 DHCP class IDs for the network adapter.\" Agent: \"Displaying the IPv6 DHCP class IDs for the network adapter.\" User: \"What are the IPv6 DHCP" + }, + { + "schemaName": "ipconfig", + "actionName": "modifyIPv6DHCPClassID", + "parameters": "adapter: string, classID?: string", + "paramSpec": { + "k": "object", + "fields": { + "adapter": { + "optional": false, + "spec": { + "k": "string" + } + }, + "classID": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "User: \"Can you change the IPv6 DHCP class ID for the adapter named 'Ethernet' to 'newClassID'?\" Agent: \"Modifying the IPv6 DHCP class ID for the 'Ethernet' adapter to 'newClassID'.\" User: \"Please update the IPv6 DHCP class ID for my Wi-Fi adapter to 'classID123'.\" Agent: \"Modifying the IPv6 DHCP " + }, + { + "schemaName": "list", + "actionName": "addItems", + "parameters": "items: string[], listName: string", + "paramSpec": { + "k": "object", + "fields": { + "items": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "add one or more items to a list; if the list does not exist, create it" + }, + { + "schemaName": "list", + "actionName": "removeItems", + "parameters": "items: string[], listName: string", + "paramSpec": { + "k": "object", + "fields": { + "items": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "remove one or more items from a list" + }, + { + "schemaName": "list", + "actionName": "createList", + "parameters": "listName: string", + "paramSpec": { + "k": "object", + "fields": { + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "list", + "actionName": "getList", + "parameters": "listName: string", + "paramSpec": { + "k": "object", + "fields": { + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "use this action to show the user what's on the list, for example, \"What's on my grocery list?\" or \"what are the contents of my to do list?\"" + }, + { + "schemaName": "list", + "actionName": "clearList", + "parameters": "listName: string", + "paramSpec": { + "k": "object", + "fields": { + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "list", + "actionName": "startEditList", + "parameters": "listName: string", + "paramSpec": { + "k": "object", + "fields": { + "listName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "localPlayer", + "actionName": "playFile", + "parameters": "fileName: string", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Play a specific audio file by path or name" + }, + { + "schemaName": "localPlayer", + "actionName": "playFolder", + "parameters": "folderPath?: string, shuffle?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "folderPath": { + "optional": true, + "spec": { + "k": "string" + } + }, + "shuffle": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Play all audio files in a folder" + }, + { + "schemaName": "localPlayer", + "actionName": "playFromQueue", + "parameters": "trackNumber: number", + "paramSpec": { + "k": "object", + "fields": { + "trackNumber": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Play a specific track from the current queue by index" + }, + { + "schemaName": "localPlayer", + "actionName": "status", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show now playing status including track information and playback state" + }, + { + "schemaName": "localPlayer", + "actionName": "pause", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Pause playback" + }, + { + "schemaName": "localPlayer", + "actionName": "resume", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Resume playback" + }, + { + "schemaName": "localPlayer", + "actionName": "stop", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Stop playback completely" + }, + { + "schemaName": "localPlayer", + "actionName": "next", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Skip to next track" + }, + { + "schemaName": "localPlayer", + "actionName": "previous", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Go to previous track" + }, + { + "schemaName": "localPlayer", + "actionName": "shuffle", + "parameters": "on: boolean", + "paramSpec": { + "k": "object", + "fields": { + "on": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Turn shuffle on or off" + }, + { + "schemaName": "localPlayer", + "actionName": "repeat", + "parameters": "mode: \"off\"|\"one\"|\"all\"", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["off", "one", "all"] + } + } + } + }, + "description": "Set repeat mode" + }, + { + "schemaName": "localPlayer", + "actionName": "setVolume", + "parameters": "level: number", + "paramSpec": { + "k": "object", + "fields": { + "level": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Set volume to a specific level (0-100)" + }, + { + "schemaName": "localPlayer", + "actionName": "changeVolume", + "parameters": "amount: number", + "paramSpec": { + "k": "object", + "fields": { + "amount": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Change volume by a relative amount" + }, + { + "schemaName": "localPlayer", + "actionName": "mute", + "parameters": "isMuted: boolean", + "paramSpec": { + "k": "object", + "fields": { + "isMuted": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Mute or unmute audio" + }, + { + "schemaName": "localPlayer", + "actionName": "listFiles", + "parameters": "folderPath?: string", + "paramSpec": { + "k": "object", + "fields": { + "folderPath": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "List audio files in the music folder or a specified folder" + }, + { + "schemaName": "localPlayer", + "actionName": "searchFiles", + "parameters": "query: string", + "paramSpec": { + "k": "object", + "fields": { + "query": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Search for audio files by name" + }, + { + "schemaName": "localPlayer", + "actionName": "addToQueue", + "parameters": "fileName: string", + "paramSpec": { + "k": "object", + "fields": { + "fileName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Add a file or files to the playback queue" + }, + { + "schemaName": "localPlayer", + "actionName": "clearQueue", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Clear the playback queue" + }, + { + "schemaName": "localPlayer", + "actionName": "showQueue", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show the current playback queue" + }, + { + "schemaName": "localPlayer", + "actionName": "setMusicFolder", + "parameters": "folderPath: string", + "paramSpec": { + "k": "object", + "fields": { + "folderPath": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Set the default music folder path" + }, + { + "schemaName": "localPlayer", + "actionName": "showMusicFolder", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show the current music folder path" + }, + { + "schemaName": "markdown", + "actionName": "createDocument", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "creates a new markdown document" + }, + { + "schemaName": "markdown", + "actionName": "openDocument", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "opens an existing markdown document" + }, + { + "schemaName": "markdown", + "actionName": "updateDocument", + "parameters": "originalRequest: string, cursorPosition?: number, context?: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "cursorPosition": { + "optional": true, + "spec": { + "k": "number" + } + }, + "context": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Updates the document by adding, removing or editing parts of the document." + }, + { + "schemaName": "markdown", + "actionName": "streamingUpdateDocument", + "parameters": "originalRequest: string, cursorPosition?: number, context?: string, generatedContent?: string, progressStatus?: string, validationResults?: string, aiCommand?: \"continue\"|\"diagram\"|\"augment\"|\"research\"", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "cursorPosition": { + "optional": true, + "spec": { + "k": "number" + } + }, + "context": { + "optional": true, + "spec": { + "k": "string" + } + }, + "generatedContent": { + "optional": true, + "spec": { + "k": "string" + } + }, + "progressStatus": { + "optional": true, + "spec": { + "k": "string" + } + }, + "validationResults": { + "optional": true, + "spec": { + "k": "string" + } + }, + "aiCommand": { + "optional": true, + "spec": { + "k": "string", + "enum": ["continue", "diagram", "augment", "research"] + } + } + } + }, + "description": "Updates the document with streaming support for real-time AI operations" + }, + { + "schemaName": "montage", + "actionName": "selectPhotos", + "parameters": "title: string, search_filters?: string[], indices?: number[], files?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + }, + "search_filters": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "indices": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "number" + } + } + }, + "files": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Select images in an existing montage" + }, + { + "schemaName": "montage", + "actionName": "addPhotos", + "parameters": "title: string, files?: string[], search_filters?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + }, + "files": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "search_filters": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "add photos to the montage" + }, + { + "schemaName": "montage", + "actionName": "changeTitle", + "parameters": "title: string, newTitle: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + }, + "newTitle": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Changes the montage title" + }, + { + "schemaName": "montage", + "actionName": "removePhotos", + "parameters": "title: string, search_filters?: string[], indices?: number[], selected?: \"selected\"|\"inverse\"|\"all\", files?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + }, + "search_filters": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "indices": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "number" + } + } + }, + "selected": { + "optional": true, + "spec": { + "k": "string", + "enum": ["selected", "inverse", "all"] + } + }, + "files": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Removes the images that match the supplied criteria" + }, + { + "schemaName": "montage", + "actionName": "clearSelectedPhotos", + "parameters": "title: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Clears the currently selected images" + }, + { + "schemaName": "montage", + "actionName": "showSearchParameters", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Shows search parameters" + }, + { + "schemaName": "montage", + "actionName": "setSearchParameters", + "parameters": "minSearchScore?: number, exactMatch?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "minSearchScore": { + "optional": true, + "spec": { + "k": "number" + } + }, + "exactMatch": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Update search parameters" + }, + { + "schemaName": "montage", + "actionName": "startSlideShow", + "parameters": "title: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Starts a slide show with the images in the active montage" + }, + { + "schemaName": "montage", + "actionName": "deleteMontage", + "parameters": "title: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Deletes the identified montage" + }, + { + "schemaName": "montage", + "actionName": "deleteAllMontages", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "montage", + "actionName": "listMontages", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists all montages by name" + }, + { + "schemaName": "montage", + "actionName": "mergeMontages", + "parameters": "mergedMontageTitle: string, titles?: string[], ids?: number[]", + "paramSpec": { + "k": "object", + "fields": { + "mergedMontageTitle": { + "optional": false, + "spec": { + "k": "string" + } + }, + "titles": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "ids": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "number" + } + } + } + } + }, + "description": "Merges two or more montages together" + }, + { + "schemaName": "montage", + "actionName": "setMontageViewMode", + "parameters": "viewMode: \"grid\"|\"filmstrip\"", + "paramSpec": { + "k": "object", + "fields": { + "viewMode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["grid", "filmstrip"] + } + } + } + } + }, + { + "schemaName": "montage", + "actionName": "openMontage", + "parameters": "title: string", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Open a montage for viewing and editing" + }, + { + "schemaName": "montage", + "actionName": "createNewMontage", + "parameters": "title: string, search_filters?: string[], focus: boolean, files?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "title": { + "optional": false, + "spec": { + "k": "string" + } + }, + "search_filters": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "focus": { + "optional": false, + "spec": { + "k": "boolean" + } + }, + "files": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Creates a new montage" + }, + { + "schemaName": "onboarding", + "actionName": "startOnboarding", + "parameters": "integrationName: string, description?: string, apiType?: \"rest\"|\"graphql\"|\"websocket\"|\"ipc\"|\"sdk\"", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "description": { + "optional": true, + "spec": { + "k": "string" + } + }, + "apiType": { + "optional": true, + "spec": { + "k": "string", + "enum": ["rest", "graphql", "websocket", "ipc", "sdk"] + } + } + } + } + }, + { + "schemaName": "onboarding", + "actionName": "resumeOnboarding", + "parameters": "integrationName: string, fromPhase?: \"discovery\"|\"phraseGen\"|\"schemaGen\"|\"grammarGen\"|\"scaffolder\"|\"testing\"|\"packaging\"", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "fromPhase": { + "optional": true, + "spec": { + "k": "string", + "enum": [ + "discovery", + "phraseGen", + "schemaGen", + "grammarGen", + "scaffolder", + "testing", + "packaging" + ] + } + } + } + } + }, + { + "schemaName": "onboarding", + "actionName": "getOnboardingStatus", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding", + "actionName": "listIntegrations", + "parameters": "status?: \"in-progress\"|\"complete\"", + "paramSpec": { + "k": "object", + "fields": { + "status": { + "optional": true, + "spec": { + "k": "string", + "enum": ["in-progress", "complete"] + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-discovery", + "actionName": "crawlDocUrl", + "parameters": "integrationName: string, url: string, maxDepth?: number", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "url": { + "optional": false, + "spec": { + "k": "string" + } + }, + "maxDepth": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-discovery", + "actionName": "crawlCliHelp", + "parameters": "integrationName: string, command: string, maxDepth?: number", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "command": { + "optional": false, + "spec": { + "k": "string" + } + }, + "maxDepth": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-discovery", + "actionName": "parseOpenApiSpec", + "parameters": "integrationName: string, specSource: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "specSource": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-discovery", + "actionName": "listDiscoveredActions", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-discovery", + "actionName": "approveApiSurface", + "parameters": "integrationName: string, includeActions?: string[], excludeActions?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "includeActions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "excludeActions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-grammargen", + "actionName": "generateGrammar", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-grammargen", + "actionName": "compileGrammar", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-grammargen", + "actionName": "approveGrammar", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-packaging", + "actionName": "packageAgent", + "parameters": "integrationName: string, register?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "register": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-packaging", + "actionName": "validatePackage", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-packaging", + "actionName": "generateDemo", + "parameters": "integrationName: string, durationMinutes?: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "durationMinutes": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Generates a demo script and narration for the onboarded agent" + }, + { + "schemaName": "onboarding.onboarding-packaging", + "actionName": "generateReadme", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Generates a README.md for the onboarded agent" + }, + { + "schemaName": "onboarding.onboarding-phrasegen", + "actionName": "generatePhrases", + "parameters": "integrationName: string, phrasesPerAction?: number, forActions?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "phrasesPerAction": { + "optional": true, + "spec": { + "k": "number" + } + }, + "forActions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-phrasegen", + "actionName": "addPhrase", + "parameters": "integrationName: string, actionName: string, phrase: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "phrase": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-phrasegen", + "actionName": "removePhrase", + "parameters": "integrationName: string, actionName: string, phrase: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "phrase": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-phrasegen", + "actionName": "approvePhrases", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-scaffolder", + "actionName": "scaffoldAgent", + "parameters": "integrationName: string, pattern?: \"schema-grammar\"|\"external-api\"|\"llm-streaming\"|\"sub-agent-orchestrator\"|\"websocket-bridge\"|\"state-machine\"|\"native-platform\"|\"view-ui\"|\"command-handler\", outputDir?: string, emojiChar?: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "pattern": { + "optional": true, + "spec": { + "k": "string", + "enum": [ + "schema-grammar", + "external-api", + "llm-streaming", + "sub-agent-orchestrator", + "websocket-bridge", + "state-machine", + "native-platform", + "view-ui", + "command-handler" + ] + } + }, + "outputDir": { + "optional": true, + "spec": { + "k": "string" + } + }, + "emojiChar": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-scaffolder", + "actionName": "scaffoldPlugin", + "parameters": "integrationName: string, template: \"office-addin\"|\"vscode-extension\"|\"electron-app\"|\"browser-extension\"|\"rest-client\", outputDir?: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "template": { + "optional": false, + "spec": { + "k": "string", + "enum": [ + "office-addin", + "vscode-extension", + "electron-app", + "browser-extension", + "rest-client" + ] + } + }, + "outputDir": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-scaffolder", + "actionName": "listTemplates", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "onboarding.onboarding-scaffolder", + "actionName": "listPatterns", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + } + }, + { + "schemaName": "onboarding.onboarding-schemagen", + "actionName": "generateSchema", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-schemagen", + "actionName": "refineSchema", + "parameters": "integrationName: string, instructions: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "instructions": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-schemagen", + "actionName": "approveSchema", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-testing", + "actionName": "generateTests", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-testing", + "actionName": "runTests", + "parameters": "integrationName: string, forActions?: string[], limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "forActions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-testing", + "actionName": "getTestResults", + "parameters": "integrationName: string, filter?: \"passing\"|\"failing\"", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "filter": { + "optional": true, + "spec": { + "k": "string", + "enum": ["passing", "failing"] + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-testing", + "actionName": "proposeRepair", + "parameters": "integrationName: string, forActions?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "forActions": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + } + }, + { + "schemaName": "onboarding.onboarding-testing", + "actionName": "approveRepair", + "parameters": "integrationName: string", + "paramSpec": { + "k": "object", + "fields": { + "integrationName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "osNotifications", + "actionName": "syncOsNotifications", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Re-emit currently-present OS notifications through the agent pipeline. Triggers the build prompt (yes/no card) when the helper exe is missing. Windows only; surfaces a warning on Linux/macOS." + }, + { + "schemaName": "osNotifications", + "actionName": "testOsNotification", + "parameters": "message: string, app?: string, title?: string", + "paramSpec": { + "k": "object", + "fields": { + "message": { + "optional": false, + "spec": { + "k": "string" + } + }, + "app": { + "optional": true, + "spec": { + "k": "string" + } + }, + "title": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Inject a synthetic notification through the agent pipeline (filters, rate limit, dismiss tracking) β€” useful for verifying the agent end-to-end without an OS notification source." + }, + { + "schemaName": "photo", + "actionName": "takePhoto", + "parameters": "originalRequest: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "uses a camera attached to the system to take a photo" + }, + { + "schemaName": "player", + "actionName": "playRandom", + "parameters": "quantity?: number", + "paramSpec": { + "k": "object", + "fields": { + "quantity": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Use playRandom when the user asks for some music to play" + }, + { + "schemaName": "player", + "actionName": "playTrack", + "parameters": "trackName: string, albumName?: string, artists?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "trackName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "albumName": { + "optional": true, + "spec": { + "k": "string" + } + }, + "artists": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Play a specific track" + }, + { + "schemaName": "player", + "actionName": "playFromCurrentTrackList", + "parameters": "trackNumber: number", + "paramSpec": { + "k": "object", + "fields": { + "trackNumber": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "play the track single track at index 'trackNumber' in the current track list report if there is no current track list" + }, + { + "schemaName": "player", + "actionName": "playAlbum", + "parameters": "albumName: string, artists?: string[], trackNumber?: number[]", + "paramSpec": { + "k": "object", + "fields": { + "albumName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "artists": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "trackNumber": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "number" + } + } + } + } + }, + "description": "Play a specific album" + }, + { + "schemaName": "player", + "actionName": "playArtist", + "parameters": "artist: string, genre?: string, quantity?: number", + "paramSpec": { + "k": "object", + "fields": { + "artist": { + "optional": false, + "spec": { + "k": "string" + } + }, + "genre": { + "optional": true, + "spec": { + "k": "string" + } + }, + "quantity": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "player", + "actionName": "playGenre", + "parameters": "genre: string, quantity?: number", + "paramSpec": { + "k": "object", + "fields": { + "genre": { + "optional": false, + "spec": { + "k": "string" + } + }, + "quantity": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "player", + "actionName": "status", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "show now playing including track information, and playback status including playback device" + }, + { + "schemaName": "player", + "actionName": "pause", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "pause playback" + }, + { + "schemaName": "player", + "actionName": "resume", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "resume playback" + }, + { + "schemaName": "player", + "actionName": "next", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "next track" + }, + { + "schemaName": "player", + "actionName": "previous", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "previous track" + }, + { + "schemaName": "player", + "actionName": "shuffle", + "parameters": "on: boolean", + "paramSpec": { + "k": "object", + "fields": { + "on": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "turn shuffle on or off" + }, + { + "schemaName": "player", + "actionName": "listDevices", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "list available playback devices" + }, + { + "schemaName": "player", + "actionName": "setDefaultDevice", + "parameters": "deviceName?: string", + "paramSpec": { + "k": "object", + "fields": { + "deviceName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "player", + "actionName": "selectDevice", + "parameters": "deviceName: string", + "paramSpec": { + "k": "object", + "fields": { + "deviceName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "select playback device by keyword" + }, + { + "schemaName": "player", + "actionName": "showSelectedDevice", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "show the selected playback device" + }, + { + "schemaName": "player", + "actionName": "setVolume", + "parameters": "newVolumeLevel: number", + "paramSpec": { + "k": "object", + "fields": { + "newVolumeLevel": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "set volume" + }, + { + "schemaName": "player", + "actionName": "setMaxVolume", + "parameters": "newMaxVolumeLevel: number", + "paramSpec": { + "k": "object", + "fields": { + "newMaxVolumeLevel": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "set max volume for the current device" + }, + { + "schemaName": "player", + "actionName": "changeVolume", + "parameters": "volumeChangePercentage: number", + "paramSpec": { + "k": "object", + "fields": { + "volumeChangePercentage": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "change volume plus or minus a specified percentage" + }, + { + "schemaName": "player", + "actionName": "searchTracks", + "parameters": "query: string", + "paramSpec": { + "k": "object", + "fields": { + "query": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "this action is only used when the user asks for a search as in 'search', 'find', 'look for' query is a Spotify search expression such as 'Rock Lobster' or 'te kanawa queen of night' set the current track list to the result of the search" + }, + { + "schemaName": "player", + "actionName": "searchForPlaylists", + "parameters": "query: string", + "paramSpec": { + "k": "object", + "fields": { + "query": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "this action is used when the user asks to search for public playlists that match a query string like 'search playlist bach hilary hahn'; it is not used to get a specific playlist by name (use GetPlaylistAction for that); it is not used to search for tracks (use SearchTracksAction for that) result o" + }, + { + "schemaName": "player", + "actionName": "listPlaylists", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "list all playlists" + }, + { + "schemaName": "player", + "actionName": "getPlaylist", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "get playlist by name" + }, + { + "schemaName": "player", + "actionName": "getFromCurrentPlaylistList", + "parameters": "playlistNumber: number", + "paramSpec": { + "k": "object", + "fields": { + "playlistNumber": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "player", + "actionName": "getAlbum", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "get currently playing album set the current track list the tracks in the album" + }, + { + "schemaName": "player", + "actionName": "getFavorites", + "parameters": "count?: number", + "paramSpec": { + "k": "object", + "fields": { + "count": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "result of this action is an entity of type 'track-list' with the user's favorites" + }, + { + "schemaName": "player", + "actionName": "createPlaylist", + "parameters": "name: string, songs?: { trackName: string, artist?: string, albumName?: string }[]", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "songs": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "trackName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "artist": { + "optional": true, + "spec": { + "k": "string" + } + }, + "albumName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + } + }, + "description": "create a new playlist, optionally with a list of songs specified by title and artist" + }, + { + "schemaName": "player", + "actionName": "deletePlaylist", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "delete a playlist" + }, + { + "schemaName": "player", + "actionName": "addCurrentTrackToPlaylist", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "add the currently playing track to a playlist" + }, + { + "schemaName": "player", + "actionName": "addToPlaylistFromCurrentTrackList", + "parameters": "name: string, trackNumber: number, trackCount?: number", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "trackNumber": { + "optional": false, + "spec": { + "k": "number" + } + }, + "trackCount": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "add to the named playlist one or more tracks starting at index 'trackNumber' in the current track list" + }, + { + "schemaName": "player", + "actionName": "addSongsToPlaylist", + "parameters": "name: string, songs: { trackName: string, artist?: string, albumName?: string }[]", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "songs": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "trackName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "artist": { + "optional": true, + "spec": { + "k": "string" + } + }, + "albumName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + } + } + }, + "description": "add songs to a playlist by specifying track names and optional artists this action searches for each song and adds it to the playlist" + }, + { + "schemaName": "player", + "actionName": "getQueue", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "set the current track list to the queue of upcoming tracks" + }, + { + "schemaName": "player", + "actionName": "playPlaylist", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "play the named play list" + }, + { + "schemaName": "powershell", + "actionName": "listPowerShellFlows", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists all registered PowerShell flows" + }, + { + "schemaName": "powershell", + "actionName": "deletePowerShellFlow", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a PowerShell flow by name" + }, + { + "schemaName": "powershell", + "actionName": "executePowerShellFlow", + "parameters": "flowName: string, flowArgs?: string, flowParametersJson?: string", + "paramSpec": { + "k": "object", + "fields": { + "flowName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "flowArgs": { + "optional": true, + "spec": { + "k": "string" + } + }, + "flowParametersJson": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Execute a registered PowerShell flow by name with parameters" + }, + { + "schemaName": "powershell", + "actionName": "createPowerShellFlow", + "parameters": "actionName: string, description: string, displayName: string, script: string, scriptParameters: { name: string, type: \"string\"|\"number\"|\"boolean\"|\"path\", required: boolean, description: string, default?: string }[], grammarPatterns: { pattern: string, isAlias: boolean }[], allowedCmdlets: string[], allowedModules?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "actionName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "displayName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "script": { + "optional": false, + "spec": { + "k": "string" + } + }, + "scriptParameters": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + }, + "type": { + "optional": false, + "spec": { + "k": "string", + "enum": ["string", "number", "boolean", "path"] + } + }, + "required": { + "optional": false, + "spec": { + "k": "boolean" + } + }, + "description": { + "optional": false, + "spec": { + "k": "string" + } + }, + "default": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + } + }, + "grammarPatterns": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "object", + "fields": { + "pattern": { + "optional": false, + "spec": { + "k": "string" + } + }, + "isAlias": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + } + } + }, + "allowedCmdlets": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "allowedModules": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Create a new PowerShell flow with grammar rules for future reuse" + }, + { + "schemaName": "powershell", + "actionName": "editPowerShellFlow", + "parameters": "flowName: string, script: string, allowedCmdlets: string[], allowedModules?: string[]", + "paramSpec": { + "k": "object", + "fields": { + "flowName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "script": { + "optional": false, + "spec": { + "k": "string" + } + }, + "allowedCmdlets": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "allowedModules": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Edit an existing PowerShell flow's script body (preserves grammar patterns and parameters)" + }, + { + "schemaName": "powershell", + "actionName": "importPowerShellFlow", + "parameters": "filePath: string, actionName?: string", + "paramSpec": { + "k": "object", + "fields": { + "filePath": { + "optional": false, + "spec": { + "k": "string" + } + }, + "actionName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Import an existing PowerShell script file as a new PowerShell flow" + }, + { + "schemaName": "screencapture", + "actionName": "takeScreenshot", + "parameters": "target?: string", + "paramSpec": { + "k": "object", + "fields": { + "target": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Take a screenshot. If `target` is omitted the whole primary screen is captured; otherwise `target` is a program or window name to fuzzy-match against the currently visible windows (e.g. \"Chrome\", \"Visual Studio\")." + }, + { + "schemaName": "screencapture", + "actionName": "startRecording", + "parameters": "target?: string", + "paramSpec": { + "k": "object", + "fields": { + "target": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Start a screen recording. Same `target` semantics as takeScreenshot. Only one recording can be active at a time." + }, + { + "schemaName": "screencapture", + "actionName": "stopRecording", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Stop the currently active screen recording." + }, + { + "schemaName": "screencapture", + "actionName": "listWindows", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "List all currently visible windows so the user can target them by name." + }, + { + "schemaName": "screencapture", + "actionName": "recording", + "parameters": "target?: string, outputPath: string, startedAtMs: number", + "paramSpec": { + "k": "object", + "fields": { + "target": { + "optional": true, + "spec": { + "k": "string" + } + }, + "outputPath": { + "optional": false, + "spec": { + "k": "string" + } + }, + "startedAtMs": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Activity type tracked while a recording is in progress." + }, + { + "schemaName": "settings", + "actionName": "dimBrightNessAction", + "parameters": "originalRequest: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "An action to dim or brighten the screen" + }, + { + "schemaName": "settings", + "actionName": "adjustMultiMonitorLayoutAction", + "parameters": "originalRequest: string", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "An action to adjust multi-monitor layout" + }, + { + "schemaName": "studio", + "actionName": "getStudioInfo", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Report Studio's environment: the repository root it is inspecting and the directories (\"agent locations\") it scans for agents, with how many agent packages each contains. Use this to confirm Studio is pointed at the right place. Read-only." + }, + { + "schemaName": "studio", + "actionName": "listCollisions", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "List the cross-schema grammar collisions Studio currently knows about (newest first). These are populated by collision scans; the list is empty until a scan has run. Read-only." + }, + { + "schemaName": "studio", + "actionName": "queryEvents", + "parameters": "limit?: number", + "paramSpec": { + "k": "object", + "fields": { + "limit": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Show the most recent entries from Studio's structured event stream (sandbox/collision/replay/feedback events), oldest-to-newest. Read-only." + }, + { + "schemaName": "system.config", + "actionName": "listAgents", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Shows the list of available agents" + }, + { + "schemaName": "system.config", + "actionName": "toggleAgent", + "parameters": "enable: boolean, agentNames: string[]", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + }, + "agentNames": { + "optional": false, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + } + } + }, + "description": "Toggle use of LLM, agent or AI." + }, + { + "schemaName": "system.config", + "actionName": "toggleExplanation", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Toggle explanation." + }, + { + "schemaName": "system.config", + "actionName": "toggleDeveloperMode", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Toggle developer mode." + }, + { + "schemaName": "system.config", + "actionName": "enterAgentPriorityMode", + "parameters": "agentName: string", + "paramSpec": { + "k": "object", + "fields": { + "agentName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Puts a specific agent into priority mode" + }, + { + "schemaName": "system.config", + "actionName": "exitAgentPriorityMode", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Leaves agent priority mode" + }, + { + "schemaName": "system.conversation", + "actionName": "newConversation", + "parameters": "name?: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Create a new conversation and optionally give it a name. Use this when the user wants to create, start, make, or open a brand-new conversation. Examples: \"create a new conversation\", \"start a new conversation called test\", \"make a new conversation\", \"new conversation named work\", \"open a new conv" + }, + { + "schemaName": "system.conversation", + "actionName": "listConversation", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "List all conversations in this TypeAgent shell session. Use this when the user wants to see, show, or list their TypeAgent conversations (NOT files, songs, or any other kind of list). Examples: \"list our conversations\", \"list my conversations\", \"show all conversations\", \"what conversations do I " + }, + { + "schemaName": "system.conversation", + "actionName": "showConversationInfo", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Show information about the current conversation. Use this when the user asks about the current conversation info. Examples: \"show conversation info\", \"what conversation am I in\", \"current conversation info\"." + }, + { + "schemaName": "system.conversation", + "actionName": "switchConversation", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Switch to an existing conversation by name. Use this when the user wants to switch to, go to, open, or change to an EXISTING conversation identified by name. For \"next\"/\"previous\" without a specific name, use NextConversationAction or PrevConversationAction instead. Examples: \"switch to convers" + }, + { + "schemaName": "system.conversation", + "actionName": "nextConversation", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the NEXT TypeAgent conversation in the list (cycles around). Use this when the user wants to advance to the next TypeAgent shell conversation (NOT the next song, next track, next page, or any other kind of \"next\"). Examples: \"switch to next conversation\", \"next conversation\", \"go to the" + }, + { + "schemaName": "system.conversation", + "actionName": "prevConversation", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the PREVIOUS TypeAgent conversation in the list (cycles around). Use this when the user wants to go to the previous TypeAgent shell conversation (NOT the previous song, previous track, or any other kind of \"previous\"). Examples: \"switch to previous conversation\", \"previous conversation\"" + }, + { + "schemaName": "system.conversation", + "actionName": "renameConversation", + "parameters": "name?: string, newName: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": true, + "spec": { + "k": "string" + } + }, + "newName": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Rename a conversation. Use this when the user wants to rename, relabel, or give a new name to a conversation. If the user specifies which conversation to rename, capture it as 'name'. If the user only says \"rename this conversation\" or \"rename current conversation\", omit 'name'. Examples: \"renam" + }, + { + "schemaName": "system.conversation", + "actionName": "deleteConversation", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a conversation by name. Use this when the user wants to remove, delete, or destroy a conversation. Examples: \"delete conversation test\", \"remove the work conversation\", \"delete test2\"." + }, + { + "schemaName": "system.grammar", + "actionName": "listRules", + "parameters": "agentName?: string", + "paramSpec": { + "k": "object", + "fields": { + "agentName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "system.grammar", + "actionName": "showRule", + "parameters": "id: number", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "system.grammar", + "actionName": "deleteRule", + "parameters": "id: number", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": false, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "system.grammar", + "actionName": "clearRules", + "parameters": "agentName?: string", + "paramSpec": { + "k": "object", + "fields": { + "agentName": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "system.history", + "actionName": "listHistory", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Shows the chat history" + }, + { + "schemaName": "system.history", + "actionName": "clearHistory", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Clears the chat history" + }, + { + "schemaName": "system.history", + "actionName": "deleteHistory", + "parameters": "messageNumber: number", + "paramSpec": { + "k": "object", + "fields": { + "messageNumber": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Deletes a specific message from the chat history" + }, + { + "schemaName": "system.notify", + "actionName": "showNotifications", + "parameters": "filter: \"all\"|\"unread\"", + "paramSpec": { + "k": "object", + "fields": { + "filter": { + "optional": false, + "spec": { + "k": "string", + "enum": ["all", "unread"] + } + } + } + }, + "description": "Shows notifications based on the supplied filter" + }, + { + "schemaName": "system.notify", + "actionName": "showNotificationSummary", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Shows notification summary" + }, + { + "schemaName": "system.notify", + "actionName": "clearNotifications", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Clears the notifications" + }, + { + "schemaName": "system.settings", + "actionName": "setServerHidden", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Set whether the agent server starts as a hidden background process. Use when the user says things like \"start the server hidden\", \"run the server in the background\", \"don't show a server window\", \"show the server window on startup\"." + }, + { + "schemaName": "system.settings", + "actionName": "setIdleTimeout", + "parameters": "seconds: number", + "paramSpec": { + "k": "object", + "fields": { + "seconds": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Set the idle timeout for the agent server in seconds (0 = disabled). Use when the user says things like \"shut down the server after 5 minutes of inactivity\", \"set idle timeout to 300 seconds\", \"disable idle timeout\", \"never shut down automatically\"." + }, + { + "schemaName": "system.settings", + "actionName": "setConversationResume", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Set whether to resume the last conversation on startup. Use when the user says things like \"always resume my last conversation\", \"pick up where I left off\", \"don't resume my last conversation\", \"start fresh each time\"." + }, + { + "schemaName": "system.settings", + "actionName": "setAutoComplete", + "parameters": "enable: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enable": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Enable or disable inline autocomplete suggestions in the CLI input. Use when the user says things like \"turn off autocomplete\", \"disable tab completion\", \"stop showing completions\", \"enable autocomplete\", \"turn on inline suggestions\"." + }, + { + "schemaName": "taskflow", + "actionName": "listTaskFlows", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Lists all registered task flows" + }, + { + "schemaName": "taskflow", + "actionName": "deleteTaskFlow", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Delete a task flow by name" + }, + { + "schemaName": "timer", + "actionName": "setReminder", + "parameters": "message: string, when: string, kind?: \"bubble\"|\"toast\"|\"inline\"", + "paramSpec": { + "k": "object", + "fields": { + "message": { + "optional": false, + "spec": { + "k": "string" + } + }, + "when": { + "optional": false, + "spec": { + "k": "string" + } + }, + "kind": { + "optional": true, + "spec": { + "k": "string", + "enum": ["bubble", "toast", "inline"] + } + } + } + }, + "description": "Set a reminder. When it fires, the timer agent pushes a message to the user via SessionContext.beginAgentThread (an agent-initiated thread, not a response to a user request)." + }, + { + "schemaName": "timer", + "actionName": "repeatReminder", + "parameters": "message: string, every: string, kind?: \"bubble\"|\"toast\"|\"inline\", count?: number", + "paramSpec": { + "k": "object", + "fields": { + "message": { + "optional": false, + "spec": { + "k": "string" + } + }, + "every": { + "optional": false, + "spec": { + "k": "string" + } + }, + "kind": { + "optional": true, + "spec": { + "k": "string", + "enum": ["bubble", "toast", "inline"] + } + }, + "count": { + "optional": true, + "spec": { + "k": "number" + } + } + } + }, + "description": "Set a repeating reminder. Fires every `every` interval until cancelled (or until `count` fires have elapsed if specified). Useful for stress testing rapid-fire / back-to-back agent-initiated messages." + }, + { + "schemaName": "timer", + "actionName": "listReminders", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "List all pending reminders." + }, + { + "schemaName": "timer", + "actionName": "cancelReminder", + "parameters": "id: string", + "paramSpec": { + "k": "object", + "fields": { + "id": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Cancel a pending reminder by id, or all reminders." + }, + { + "schemaName": "utility", + "actionName": "webSearch", + "parameters": "query: string, numResults?: number", + "paramSpec": { + "k": "object", + "fields": { + "query": { + "optional": false, + "spec": { + "k": "string" + } + }, + "numResults": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "utility", + "actionName": "webFetch", + "parameters": "url: string", + "paramSpec": { + "k": "object", + "fields": { + "url": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "utility", + "actionName": "readFile", + "parameters": "path: string", + "paramSpec": { + "k": "object", + "fields": { + "path": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "utility", + "actionName": "writeFile", + "parameters": "path: string, content: string", + "paramSpec": { + "k": "object", + "fields": { + "path": { + "optional": false, + "spec": { + "k": "string" + } + }, + "content": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "utility", + "actionName": "llmTransform", + "parameters": "input: string, prompt: string, parseJson?: boolean, htmlOutput?: boolean, model?: string", + "paramSpec": { + "k": "object", + "fields": { + "input": { + "optional": false, + "spec": { + "k": "string" + } + }, + "prompt": { + "optional": false, + "spec": { + "k": "string" + } + }, + "parseJson": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "htmlOutput": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "model": { + "optional": true, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "utility", + "actionName": "claudeTask", + "parameters": "goal: string, parseJson?: boolean, model?: string, maxTurns?: number", + "paramSpec": { + "k": "object", + "fields": { + "goal": { + "optional": false, + "spec": { + "k": "string" + } + }, + "parseJson": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "model": { + "optional": true, + "spec": { + "k": "string" + } + }, + "maxTurns": { + "optional": true, + "spec": { + "k": "number" + } + } + } + } + }, + { + "schemaName": "video", + "actionName": "createVideoAction", + "parameters": "originalRequest: string, caption: string, relatedFiles?: string[], duration?: \"4\"|\"8\"|\"12\"", + "paramSpec": { + "k": "object", + "fields": { + "originalRequest": { + "optional": false, + "spec": { + "k": "string" + } + }, + "caption": { + "optional": false, + "spec": { + "k": "string" + } + }, + "relatedFiles": { + "optional": true, + "spec": { + "k": "array", + "item": { + "k": "string" + } + } + }, + "duration": { + "optional": true, + "spec": { + "k": "string", + "enum": ["4", "8", "12"] + } + } + } + }, + "description": "creates a video based on the supplied description" + }, + { + "schemaName": "visualStudio", + "actionName": "addBreakpoint", + "parameters": "file: string, line: string, condition?: string", + "paramSpec": { + "k": "object", + "fields": { + "file": { + "optional": false, + "spec": { + "k": "string" + } + }, + "line": { + "optional": false, + "spec": { + "k": "string" + } + }, + "condition": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Adds a new breakpoint to the debugger. IMPORTANT: Ensure the file path and line number are correct. User: \"Can you add a breakpoint at line 42 in main.cpp?\" Agent: \"Adding a breakpoint at line 42 in main.cpp.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "removeBreakpoint", + "parameters": "breakpointId?: string, file?: string, line?: string", + "paramSpec": { + "k": "object", + "fields": { + "breakpointId": { + "optional": true, + "spec": { + "k": "string" + } + }, + "file": { + "optional": true, + "spec": { + "k": "string" + } + }, + "line": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Removes an existing breakpoint from the debugger. User: \"Please remove the breakpoint with ID 12345.\" Agent: \"Removing the breakpoint with ID 12345.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "findInFiles", + "parameters": "searchTerm: string, fileTypes?: string", + "paramSpec": { + "k": "object", + "fields": { + "searchTerm": { + "optional": false, + "spec": { + "k": "string" + } + }, + "fileTypes": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Performs a search operation across files in the solution. User: \"Can you search for 'searchTerm' in all the files with 'fileTypes' extensions?\" Agent: \"Searching for 'searchTerm' in files with 'fileTypes' extensions.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "executeCommand", + "parameters": "commandName: string, commandArgs?: string", + "paramSpec": { + "k": "object", + "fields": { + "commandName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "commandArgs": { + "optional": true, + "spec": { + "k": "string" + } + } + } + }, + "description": "Executes a command in the Visual Studio environment. User: \"Can you run the command in Visual Studio for me?\" Agent: \"Executing the command in Visual Studio.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "openFile", + "parameters": "filePath: string, viewKind?: \"text\"|\"code\"|\"designer\"|\"debug\"", + "paramSpec": { + "k": "object", + "fields": { + "filePath": { + "optional": false, + "spec": { + "k": "string" + } + }, + "viewKind": { + "optional": true, + "spec": { + "k": "string", + "enum": ["text", "code", "designer", "debug"] + } + } + } + }, + "description": "Opens a file in the Visual Studio environment. User: \"Can you open the file located at [filePath] in Visual Studio?\" Agent: \"Opening the file at [filePath] in Visual Studio.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "break", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Causes the given process to pause its execution so that its current state can be analyzed. User: \"Pause the process right now.\" Agent: \"Pausing the process immediately.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "go", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Starts executing the program from the current statement. User: \"Run the program from here.\" Agent: \"Starting execution from the current statement.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "stepInto", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Steps into the next function call, if possible. User: \"Can you step into the next function call, please?\" Agent: \"Stepping into the next function call.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "stepOut", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Steps out of the current function. User: \"Can you step out of the current function, please?\" Agent: \"Stepping out of the current function.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "stepOver", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Steps over the next function call. User: \"Can you step over the next function call, please?\" Agent: \"Stepping over the next function call.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "stop", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Stops debugging, terminating, or detaching from all attached processes. User: \"Please stop the debugging process.\" Agent: \"Stopping the debugging process.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "build", + "parameters": "waitForCompletion?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "waitForCompletion": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Causes the active solution configuration to begin building. User: \"Can you start building the solution, please?\" Agent: \"Starting to build the solution.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "clean", + "parameters": "waitForCompletion?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "waitForCompletion": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Deletes all compiler-generated support files for marked projects. User: \"Can you clean the solution, please?\" Agent: \"Cleaning the solution.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "debug", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Starts debugging the solution. User: \"Can you start debugging the solution?\" Agent: \"Starting to debug the solution.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "run", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Causes the active solution configuration to execute. User: \"Can you run the current solution for me?\" Agent: \"Running the current solution.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "closeAll", + "parameters": "saveChanges?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "saveChanges": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Closes all open documents in the environment and optionally saves them. User: \"Close all open files, please.\" Agent: \"Closing all open files.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "saveAll", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Saves all documents currently open in the environment. User: \"Can you save all my open files, please?\" Agent: \"Saving all open files.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "redo", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Re-executes the last action that was undone by the Undo() method or the user. User: \"Can you redo the last change I undid?\" Agent: \"Redoing the last undone change.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "undo", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Reverses the action last performed by the user in the document. User: \"Can you undo my last change?\" Agent: \"Undoing the last change.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "findText", + "parameters": "text: string, caseSensitive?: boolean, wholeWord?: boolean, useRegex?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "text": { + "optional": false, + "spec": { + "k": "string" + } + }, + "caseSensitive": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "wholeWord": { + "optional": true, + "spec": { + "k": "boolean" + } + }, + "useRegex": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Searches for the given text from the active point to the end of the document. User: \"Can you search for the text 'example' from here to the end of the document?\" Agent: \"Searching for 'example' from the current position to the end of the document.\"" + }, + { + "schemaName": "visualStudio", + "actionName": "gotoLine", + "parameters": "line: string, select?: boolean", + "paramSpec": { + "k": "object", + "fields": { + "line": { + "optional": false, + "spec": { + "k": "string" + } + }, + "select": { + "optional": true, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Moves to the beginning of the indicated line and selects the line if requested. User: \"Can you go to line 42 and select it?\" Agent: \"Going to line 42 and selecting it.\"" + }, + { + "schemaName": "weather", + "actionName": "getCurrentConditions", + "parameters": "location: string, units?: \"celsius\"|\"fahrenheit\"", + "paramSpec": { + "k": "object", + "fields": { + "location": { + "optional": false, + "spec": { + "k": "string" + } + }, + "units": { + "optional": true, + "spec": { + "k": "string", + "enum": ["celsius", "fahrenheit"] + } + } + } + } + }, + { + "schemaName": "weather", + "actionName": "getForecast", + "parameters": "location: string, days?: number, units?: \"celsius\"|\"fahrenheit\"", + "paramSpec": { + "k": "object", + "fields": { + "location": { + "optional": false, + "spec": { + "k": "string" + } + }, + "days": { + "optional": true, + "spec": { + "k": "number" + } + }, + "units": { + "optional": true, + "spec": { + "k": "string", + "enum": ["celsius", "fahrenheit"] + } + } + } + } + }, + { + "schemaName": "weather", + "actionName": "getAlerts", + "parameters": "location: string", + "paramSpec": { + "k": "object", + "fields": { + "location": { + "optional": false, + "spec": { + "k": "string" + } + } + } + } + }, + { + "schemaName": "windowsClock", + "actionName": "addWorldClock", + "parameters": "cityQuery: string, suggestionItem: string", + "paramSpec": { + "k": "object", + "fields": { + "cityQuery": { + "optional": false, + "spec": { + "k": "string" + } + }, + "suggestionItem": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Add a new world clock by searching for a city and selecting it from suggestions." + }, + { + "schemaName": "windowsClock", + "actionName": "createAlarm", + "parameters": "alarmName: string, hour: number, minute: number", + "paramSpec": { + "k": "object", + "fields": { + "alarmName": { + "optional": false, + "spec": { + "k": "string" + } + }, + "hour": { + "optional": false, + "spec": { + "k": "number" + } + }, + "minute": { + "optional": false, + "spec": { + "k": "number" + } + } + } + }, + "description": "Create a new alarm with a specified name and time." + }, + { + "schemaName": "windowsClock", + "actionName": "navigateToAlarmTab", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the Alarms tab in the app." + }, + { + "schemaName": "windowsClock", + "actionName": "navigateToFocusTab", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the Focus tab from the app's navigation." + }, + { + "schemaName": "windowsClock", + "actionName": "navigateToStopwatchTab", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the Stopwatch tab." + }, + { + "schemaName": "windowsClock", + "actionName": "navigateToTimerTab", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the Timer tab from another section." + }, + { + "schemaName": "windowsClock", + "actionName": "navigateToWorldClockTab", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Switch to the World Clock tab from another tab." + }, + { + "schemaName": "windowsClock", + "actionName": "recordLap", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Record a lap while the stopwatch continues running." + }, + { + "schemaName": "windowsClock", + "actionName": "renameTimer", + "parameters": "name: string", + "paramSpec": { + "k": "object", + "fields": { + "name": { + "optional": false, + "spec": { + "k": "string" + } + } + } + }, + "description": "Rename an existing timer and save the changes." + }, + { + "schemaName": "windowsClock", + "actionName": "setAlarmEnabled", + "parameters": "enabled: boolean", + "paramSpec": { + "k": "object", + "fields": { + "enabled": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Turn on an existing alarm. [merged from: enableAlarm, disableAlarm]" + }, + { + "schemaName": "windowsClock", + "actionName": "setFocusSessionRunning", + "parameters": "running: boolean", + "paramSpec": { + "k": "object", + "fields": { + "running": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Start the focus session when it is paused. [merged from: startFocusSession, pauseFocusSession]" + }, + { + "schemaName": "windowsClock", + "actionName": "setStopwatchRunning", + "parameters": "running: boolean", + "paramSpec": { + "k": "object", + "fields": { + "running": { + "optional": false, + "spec": { + "k": "boolean" + } + } + } + }, + "description": "Pause the running stopwatch. [merged from: pauseStopwatch, resumeStopwatch]" + }, + { + "schemaName": "windowsClock", + "actionName": "setTimerViewMode", + "parameters": "mode: \"compact\"|\"full\"", + "paramSpec": { + "k": "object", + "fields": { + "mode": { + "optional": false, + "spec": { + "k": "string", + "enum": ["compact", "full"] + } + } + } + }, + "description": "Expand the timer into its alternate/compact view. [merged from: expandTimerView, restoreTimerView]" + }, + { + "schemaName": "windowsClock", + "actionName": "startTimer", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Start or resume the timer from list or paused states." + }, + { + "schemaName": "workflow", + "actionName": "noWorkflowsLoaded", + "parameters": "(none)", + "paramSpec": { + "k": "object", + "fields": {} + }, + "description": "Placeholder: replaced at runtime by getDynamicSchema() with per-workflow action types derived from discovered workflow files." + } + ] +} diff --git a/ts/packages/benchmarks/src/translationBench/catalog.ts b/ts/packages/benchmarks/src/translationBench/catalog.ts new file mode 100644 index 000000000..fc6f0c4ce --- /dev/null +++ b/ts/packages/benchmarks/src/translationBench/catalog.ts @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { createHash } from "node:crypto"; +import { readFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import type { CatalogEntry } from "../core/types.js"; + +const require = createRequire(import.meta.url); +const catalogPath = require.resolve("./catalog.generated.json"); +const catalogBytes = readFileSync(catalogPath); + +interface GeneratedCatalog { + catalogVersion: string; + activeSchemas: string[]; + allRegistrySchemas?: string[]; + actions: CatalogEntry[]; +} + +const generated = JSON.parse(catalogBytes.toString("utf8")) as GeneratedCatalog; + +/** Date/label stamped into catalog.generated.json when regenerated. */ +export const CATALOG_VERSION: string = generated.catalogVersion; + +/** sha256 of catalog.generated.json bytes (exact file on disk). */ +export const CATALOG_SHA256: string = createHash("sha256") + .update(catalogBytes) + .digest("hex"); + +export const ACTIVE_SCHEMAS: string[] = generated.activeSchemas; +export const CATALOG: CatalogEntry[] = generated.actions; + +export const CATALOG_KEYS: ReadonlySet = new Set( + CATALOG.map((c) => `${c.schemaName}.${c.actionName}`), +); diff --git a/ts/packages/benchmarks/src/translationBench/scripts/genCatalog.ts b/ts/packages/benchmarks/src/translationBench/scripts/genCatalog.ts new file mode 100644 index 000000000..119f98733 --- /dev/null +++ b/ts/packages/benchmarks/src/translationBench/scripts/genCatalog.ts @@ -0,0 +1,237 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + getAllActionConfigProvider, + type ActionConfigProvider, +} from "agent-dispatcher/internal"; +import { getDefaultAppAgentProviders } from "default-agent-provider"; +import { initializeCommandHandlerContext } from "agent-dispatcher/internal"; +import { writeFileSync } from "node:fs"; + +const LABEL_EXCLUDED_SCHEMAS = new Set(["dispatcher"]); + +interface GeneratedAction { + schemaName: string; + actionName: string; + parameters: string; + paramSpec: ParamSpec; + description?: string; +} + +type ParamSpec = + | { k: "string"; enum?: string[] } + | { k: "number" } + | { k: "boolean" } + | { k: "array"; item: ParamSpec } + | { + k: "object"; + fields: Record; + } + | { k: "any" }; + +/** Loose shape of action-schema type nodes (runtime schema objects). */ +interface SchemaTypeNode { + type?: string; + typeEnum?: string[]; + elementType?: SchemaTypeNode; + fields?: Record; + definition?: { type?: SchemaTypeNode }; +} + +interface SchemaFieldNode { + optional?: boolean; + type?: SchemaTypeNode; +} + +interface ActionTypeNode { + type?: { + fields?: Record; + }; + comments?: string[]; +} + +interface ParsedActionSchema { + actionSchemas: Iterable<[string, ActionTypeNode]>; +} + +interface ActionSchemaFileLike { + parsedActionSchema?: ParsedActionSchema; +} + +function toSpec(t: SchemaTypeNode | undefined, depth = 0): ParamSpec { + if (!t || depth > 5) return { k: "any" }; + switch (t.type) { + case "string": + return { k: "string" }; + case "number": + return { k: "number" }; + case "boolean": + return { k: "boolean" }; + case "string-union": + return t.typeEnum !== undefined + ? { k: "string", enum: t.typeEnum } + : { k: "string" }; + case "array": + return { k: "array", item: toSpec(t.elementType, depth + 1) }; + case "object": { + const fields: Record< + string, + { optional: boolean; spec: ParamSpec } + > = {}; + for (const [n, f] of Object.entries(t.fields ?? {})) { + fields[n] = { + optional: !!f.optional, + spec: toSpec(f.type, depth + 1), + }; + } + return { k: "object", fields }; + } + case "type-reference": + return toSpec(t.definition?.type, depth + 1); + default: + return { k: "any" }; + } +} + +function parameterSpec(actionType: ActionTypeNode): ParamSpec { + const params = actionType.type?.fields?.parameters?.type; + if (!params) return { k: "object", fields: {} }; + return toSpec(params); +} + +function renderType(t: SchemaTypeNode | undefined, depth = 0): string { + if (!t || depth > 3) return "any"; + switch (t.type) { + case "string": + return "string"; + case "number": + return "number"; + case "boolean": + return "boolean"; + case "array": + return `${renderType(t.elementType, depth + 1)}[]`; + case "string-union": + return t.typeEnum + ? t.typeEnum.map((v) => JSON.stringify(v)).join("|") + : "string"; + case "object": { + if (!t.fields) return "object"; + const inner = Object.entries(t.fields) + .map( + ([n, f]) => + `${n}${f.optional ? "?" : ""}: ${renderType( + f.type, + depth + 1, + )}`, + ) + .join(", "); + return `{ ${inner} }`; + } + case "type-reference": + return renderType(t.definition?.type, depth + 1); + default: + return t.type ?? "any"; + } +} + +function summarizeParameters(actionType: ActionTypeNode): string { + const fields = actionType.type?.fields; + if (!fields) return "(none)"; + const params = fields.parameters?.type; + if (!params || params.type !== "object" || !params.fields) return "(none)"; + const names = Object.entries(params.fields).map( + ([name, f]) => `${name}${f.optional ? "?" : ""}: ${renderType(f.type)}`, + ); + return names.length === 0 ? "(none)" : names.join(", "); +} + +async function main(): Promise { + const systemContext = await initializeCommandHandlerContext( + "translation-bench-catalog", + { + appAgentProviders: getDefaultAppAgentProviders(undefined), + persistSession: false, + dblogging: false, + }, + ); + const active = [ + ...( + systemContext.agents as unknown as { + getSchemaNames: () => string[]; + } + ).getSchemaNames(), + ].sort(); + + if (!active.includes("dispatcher")) { + throw new Error( + "The `dispatcher` schema must stay active - it carries the abstain action.", + ); + } + + const { provider, schemaNames } = await getAllActionConfigProvider( + getDefaultAppAgentProviders(undefined), + ); + const p = provider as ActionConfigProvider; + + const actions: GeneratedAction[] = []; + const unloadable: string[] = []; + for (const schemaName of active) { + if (LABEL_EXCLUDED_SCHEMAS.has(schemaName)) continue; + let file: ActionSchemaFileLike; + try { + const config = p.getActionConfig(schemaName); + file = p.getActionSchemaFileForConfig( + config, + ) as ActionSchemaFileLike; + } catch { + unloadable.push(schemaName); + continue; + } + const parsed = file.parsedActionSchema; + if (!parsed?.actionSchemas) continue; + for (const [actionName, actionType] of parsed.actionSchemas) { + const description = actionType.comments + ?.join(" ") + .trim() + .slice(0, 300); + actions.push({ + schemaName, + actionName, + parameters: summarizeParameters(actionType), + paramSpec: parameterSpec(actionType), + ...(description ? { description } : {}), + }); + } + } + + const out = + process.argv[2] ?? "src/translationBench/catalog.generated.json"; + writeFileSync( + out, + `${JSON.stringify( + { + catalogVersion: new Date().toISOString().slice(0, 10), + activeSchemas: active.filter((s) => !unloadable.includes(s)), + unloadableSchemas: unloadable, + allRegistrySchemas: [...schemaNames].sort(), + activeSchemaSource: + "systemContext.agents.getSchemaNames() (same source as translationProbeRunner)", + actions, + }, + null, + 2, + )}\n`, + ); + process.stderr.write( + `[genCatalog] wrote ${out}: ${active.length} active schemas, ${actions.length} actions\n`, + ); +} + +main().then( + () => setTimeout(() => process.exit(0), 250).unref(), + (e) => { + console.error("genCatalog failed:", e); + process.exit(1); + }, +); diff --git a/ts/packages/benchmarks/src/translationBench/scripts/snapshotPrices.ts b/ts/packages/benchmarks/src/translationBench/scripts/snapshotPrices.ts new file mode 100644 index 000000000..bd17f45a2 --- /dev/null +++ b/ts/packages/benchmarks/src/translationBench/scripts/snapshotPrices.ts @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { writeFileSync } from "node:fs"; + +const API_URL = "https://models.dev/api.json"; + +/** OpenAI model ids to pin (models.dev `openai` provider). */ +const MODELS = [ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.6-luna", + "gpt-5.6-sol", + "gpt-5.6-terra", +] as const; + +interface Cost { + input?: number; + output?: number; + cache_read?: number; +} + +async function main(): Promise { + const res = await fetch(API_URL, { + headers: { "User-Agent": "typeagent-benchmarks/1.0" }, + }); + if (!res.ok) { + throw new Error(`${API_URL} -> ${res.status} ${res.statusText}`); + } + const catalog = (await res.json()) as Record< + string, + { models?: Record } + >; + const openai = catalog.openai?.models; + if (!openai) { + throw new Error("models.dev response missing openai.models"); + } + + const rates: Record< + string, + { inUsdPer1M: number; cachedUsdPer1M: number; outUsdPer1M: number } + > = {}; + const missing: string[] = []; + + for (const id of MODELS) { + const cost = openai[id]?.cost; + if ( + typeof cost?.input !== "number" || + typeof cost?.output !== "number" + ) { + missing.push(id); + continue; + } + rates[id] = { + inUsdPer1M: cost.input, + cachedUsdPer1M: + typeof cost.cache_read === "number" + ? cost.cache_read + : cost.input, + outUsdPer1M: cost.output, + }; + } + + if (missing.length > 0) { + throw new Error(`models.dev missing cost for: ${missing.join(", ")}`); + } + + const outPath = process.argv[2] ?? "src/core/model-prices.generated.json"; + writeFileSync( + outPath, + `${JSON.stringify( + { + source: API_URL, + version: new Date().toISOString(), + unit: "USD per 1M tokens", + provider: "openai", + rates, + }, + null, + 2, + )}\n`, + ); + process.stderr.write( + `[snapshotPrices] wrote ${outPath}: ${MODELS.length} models (${MODELS.join(", ")})\n`, + ); +} + +main().then( + () => process.exit(0), + (e) => { + process.stderr.write(`snapshotPrices failed: ${e}\n`); + process.exit(1); + }, +); diff --git a/ts/packages/benchmarks/tsconfig.json b/ts/packages/benchmarks/tsconfig.json new file mode 100644 index 000000000..7a465436e --- /dev/null +++ b/ts/packages/benchmarks/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src/**/*.ts"] +} diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 1404dce90..ca9feb7b3 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -3962,6 +3962,29 @@ importers: specifier: ~5.4.5 version: 5.4.5 + + packages/benchmarks: + dependencies: + '@typeagent/agent-sdk': + specifier: workspace:* + version: link:../agentSdk + agent-dispatcher: + specifier: workspace:* + version: link:../dispatcher/dispatcher + default-agent-provider: + specifier: workspace:* + version: link:../defaultAgentProvider + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.20.1 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + typescript: + specifier: ~5.4.5 + version: 5.4.5 + packages/cache: dependencies: '@typeagent/action-grammar':