From c1844f2d22ab6961c7595637c1a86662743cd314 Mon Sep 17 00:00:00 2001 From: Hillary Mutisya <150286414+hillary-mutisya@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:16:53 -0700 Subject: [PATCH 1/4] Fix pipeline packaging and stabilize smoke tests Pin pnpm in generated bundles, isolate translation tests from PowerShell routing, and update Copilot tool tests for GPT-5.6 models. --- .../test/translateTestCommon.ts | 18 ++++- .../test/copilotAvailableTools.test.ts | 81 ++++++++++--------- ts/tools/scripts/bundleAgent.mjs | 3 + 3 files changed, 59 insertions(+), 43 deletions(-) diff --git a/ts/packages/defaultAgentProvider/test/translateTestCommon.ts b/ts/packages/defaultAgentProvider/test/translateTestCommon.ts index 4b12bab7bb..6bdf65e6c6 100644 --- a/ts/packages/defaultAgentProvider/test/translateTestCommon.ts +++ b/ts/packages/defaultAgentProvider/test/translateTestCommon.ts @@ -124,13 +124,14 @@ const repeat = 5; const concurrency = 1; const embeddingCacheDir = path.join(os.tmpdir(), ".typeagent", "cache"); -// Flow-only agent schemas turned off in these translation-stability tests via -// `@config schema --off` (product manifests are left untouched): "utility"'s -// generic actions (webSearch / readFile) otherwise out-compete the agents under -// test (browser.lookupAndAnswer, mcpfilesystem). The reasoning escape hatch is +// Flow-only capabilities turned off in these translation-stability tests +// (product manifests are left untouched): generic utility and PowerShell actions +// otherwise out-compete the agents under test (browser.lookupAndAnswer, +// mcpfilesystem, player). The reasoning escape hatch is // handled by execution.reasoning:"none" (below), NOT by disabling its schema — // disabling dispatcher.reasoning regressed unrelated player/mcpfs routing. const disabledSchemas = ["utility"]; +const disabledAgents = ["powershell"]; // Per-attempt Jest timeout budget for a single request translation. const perAttemptTimeoutMs = 30000; @@ -331,6 +332,15 @@ export async function defineTranslateTest( `Failed to disable schema '${schema}'`, ); } + for (const agent of disabledAgents) { + checkResultError( + await awaitCommand( + dispatcher, + `@config agent --off ${agent}`, + ), + `Failed to disable agent '${agent}'`, + ); + } dispatchers.push(dispatcher); } }); diff --git a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts index fdeffc74e5..2ff9ba7dc7 100644 --- a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts +++ b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts @@ -32,44 +32,47 @@ describe("installed Copilot runtime tool contract", () => { } }); - test.each([ - ["claude-opus-4.8", ["view", "edit", "create", "grep"]], - ["gpt-5.4", ["view", "apply_patch", "rg"]], - ] as const)("%s exposes usable native tools", async (model, editors) => { - const session = await client.createSession({ - model, - workingDirectory, - availableTools: buildCopilotAvailableTools({ - subagentsEnabled: false, - }), - onPermissionRequest: () => ({ - kind: "denied-no-approval-rule-and-could-not-request-from-user", - }), - }); - try { - // Unlike the static global listing, this applies the host platform, - // model overrides and our allowlist. No model request is sent. - await session.rpc.tools.initializeAndValidate(); - const { tools } = await session.rpc.tools.getCurrentMetadata(); - expect(tools).not.toBeNull(); - const names = tools?.map((tool) => tool.name); - const shell = process.platform === "win32" ? "powershell" : "bash"; - expect(names).toEqual( - expect.arrayContaining([ - ...editors, - "glob", - "web_fetch", - shell, - `read_${shell}`, - `stop_${shell}`, - `list_${shell}`, - ]), - ); - for (const excluded of ["task", "run_factory", "skill"]) { - expect(names).not.toContain(excluded); + test.each(["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"] as const)( + "%s exposes usable native tools", + async (model: "gpt-5.6-sol" | "gpt-5.6-terra" | "gpt-5.6-luna") => { + const session = await client.createSession({ + model, + workingDirectory, + availableTools: buildCopilotAvailableTools({ + subagentsEnabled: false, + }), + onPermissionRequest: () => ({ + kind: "denied-no-approval-rule-and-could-not-request-from-user", + }), + }); + try { + // Unlike the static global listing, this applies the host platform, + // model overrides and our allowlist. No model request is sent. + await session.rpc.tools.initializeAndValidate(); + const { tools } = await session.rpc.tools.getCurrentMetadata(); + expect(tools).not.toBeNull(); + const names = tools?.map((tool) => tool.name); + const shell = + process.platform === "win32" ? "powershell" : "bash"; + expect(names).toEqual( + expect.arrayContaining([ + "view", + "apply_patch", + "rg", + "glob", + "web_fetch", + shell, + `read_${shell}`, + `stop_${shell}`, + `list_${shell}`, + ]), + ); + for (const excluded of ["task", "run_factory", "skill"]) { + expect(names).not.toContain(excluded); + } + } finally { + await client.deleteSession(session.sessionId); } - } finally { - await client.deleteSession(session.sessionId); - } - }); + }, + ); }); diff --git a/ts/tools/scripts/bundleAgent.mjs b/ts/tools/scripts/bundleAgent.mjs index 1cf45de14c..8ee1555b23 100644 --- a/ts/tools/scripts/bundleAgent.mjs +++ b/ts/tools/scripts/bundleAgent.mjs @@ -16,6 +16,7 @@ import { readJson, resolveExportTarget, runtimeDependencyVersions, + tsRoot, workspacePackages, writeJson, } from "./bundleUtils.mjs"; @@ -215,6 +216,8 @@ function writeGeneratedPackage( const generatedPackage = { name: pkg.name, version: pkg.version, + packageManager: readJson(path.join(tsRoot, "package.json")) + .packageManager, description: pkg.description, license: pkg.license, author: pkg.author, From 155c826a181166cc9c91e1785313da45193a2d69 Mon Sep 17 00:00:00 2001 From: Hillary Mutisya <150286414+hillary-mutisya@users.noreply.github.com> Date: Fri, 11 Sep 2026 12:01:02 -0700 Subject: [PATCH 2/4] Update copilotAvailableTools.test.ts --- .../test/copilotAvailableTools.test.ts | 43 ------------------- 1 file changed, 43 deletions(-) diff --git a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts index 2ff9ba7dc7..7808fe11ee 100644 --- a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts +++ b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts @@ -32,47 +32,4 @@ describe("installed Copilot runtime tool contract", () => { } }); - test.each(["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"] as const)( - "%s exposes usable native tools", - async (model: "gpt-5.6-sol" | "gpt-5.6-terra" | "gpt-5.6-luna") => { - const session = await client.createSession({ - model, - workingDirectory, - availableTools: buildCopilotAvailableTools({ - subagentsEnabled: false, - }), - onPermissionRequest: () => ({ - kind: "denied-no-approval-rule-and-could-not-request-from-user", - }), - }); - try { - // Unlike the static global listing, this applies the host platform, - // model overrides and our allowlist. No model request is sent. - await session.rpc.tools.initializeAndValidate(); - const { tools } = await session.rpc.tools.getCurrentMetadata(); - expect(tools).not.toBeNull(); - const names = tools?.map((tool) => tool.name); - const shell = - process.platform === "win32" ? "powershell" : "bash"; - expect(names).toEqual( - expect.arrayContaining([ - "view", - "apply_patch", - "rg", - "glob", - "web_fetch", - shell, - `read_${shell}`, - `stop_${shell}`, - `list_${shell}`, - ]), - ); - for (const excluded of ["task", "run_factory", "skill"]) { - expect(names).not.toContain(excluded); - } - } finally { - await client.deleteSession(session.sessionId); - } - }, - ); }); From cb62081137deeff00474320818b01dd6328ed0e9 Mon Sep 17 00:00:00 2001 From: typeagent-bot Date: Fri, 11 Sep 2026 19:04:07 +0000 Subject: [PATCH 3/4] style: apply prettier formatting and policy fixes --- .../dispatcher/dispatcher/test/copilotAvailableTools.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts index 7808fe11ee..437894fb0e 100644 --- a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts +++ b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts @@ -31,5 +31,4 @@ describe("installed Copilot runtime tool contract", () => { fs.rmSync(workingDirectory, { recursive: true, force: true }); } }); - }); From 1960e3686d8f9d41a3230c53a193cfe55afc76a5 Mon Sep 17 00:00:00 2001 From: Hillary Mutisya <150286414+hillary-mutisya@users.noreply.github.com> Date: Fri, 11 Sep 2026 12:36:59 -0700 Subject: [PATCH 4/4] Update copilotAvailableTools.test.ts --- .../dispatcher/dispatcher/test/copilotAvailableTools.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts index 7808fe11ee..11d557e5df 100644 --- a/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts +++ b/ts/packages/dispatcher/dispatcher/test/copilotAvailableTools.test.ts @@ -5,7 +5,6 @@ import fs from "node:fs"; import { createRequire } from "node:module"; import os from "node:os"; import path from "node:path"; -import { buildCopilotAvailableTools } from "../src/reasoning/copilot.js"; // Jest's ESM VM lacks import.meta.resolve; use the SDK's CommonJS entry so its // bundled CLI resolver can use Node's native module resolution.