From bcbcd083d802333d43a901b041c23538ef521243 Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 13:23:53 +0800 Subject: [PATCH 1/9] test(vscuse): generate weather agent local debug cases Add semantic target adapters for the three local debug launch profiles and cover them with generated weather agent cases. The local profiles run the local lifecycle in their own preLaunchTask chain, so they require neither provision nor deploy; the Agents Playground profile serves the agent from the local machine and requires no account at all. VCB-64, VCB-65, VCB-66 --- .../product/compile-vscuse-case-bundles.md | 11 +- .../vscuse/vscode-test-cases/cases/README.md | 16 +- .../cases/legacy-case-mapping.md | 3 + .../vscode-test-cases/cases/weather-agent.yml | 63 + .../engine/semantic-step-compiler.cjs | 36 + .../engine/semantic-step-compiler.test.cjs | 93 +- .../plans/.vscuse-generated-plans | 3 + ...weather-ts-azure-openai-local-copilot.json | 2345 +++++++++++++++++ ...--weather-ts-azure-openai-local-teams.json | 2251 ++++++++++++++++ ...t--weather-ts-azure-openai-playground.json | 1736 ++++++++++++ 10 files changed, 6543 insertions(+), 14 deletions(-) create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index ec46812ea9d..f64154829a1 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -309,7 +309,9 @@ required state it establishes. A `chat` assertion is rejected unless the precedi reached `chat-ready`. `target` is one authored F5 operation that selects and starts its declared launch profile. The -current adapters support `Launch Remote in Teams (Chrome)` and `Preview in Copilot (Chrome)`; any +current adapters support the remote profiles `Launch Remote in Teams (Chrome)` and +`Preview in Copilot (Chrome)`, and the local debug profiles `Debug in Teams (Chrome)`, +`(Preview) Debug in Copilot (Chrome)`, and `Debug in Microsoft 365 Agents Playground`; any other exact title fails until a deterministic adapter is added. The authored `profile` is the exact case-sensitive `name` shown in the F5 picker after template rendering; it is not a compiler-defined semantic ID. For example, the TypeScript Weather template authors @@ -982,8 +984,8 @@ coordinates, omit required prompt guards, or silently choose a nearby component. until those adapters exist, their entry states fail resolution. Each future adapter must own only the transition and confirmation steps reachable from its deterministic entry state. DOM, labels, and transient actions never enter case YAML. -- A future Agents Playground adapter may establish `chat-ready` directly after its profile-owned - prelaunch tasks complete, so chat checks would not require an artificial `open` step. +- The Agents Playground adapter establishes `chat-ready` from the readiness its target already + asserted, so its `open` emits no step and only declares the surface the case chats in. - A `file` assertion selects the workspace-file adapter. It normalizes the authored `path` relative to the generated project, rejects absolute paths and traversal, checks existence, then applies every `contains` and `notContains` assertion to the UTF-8 content. @@ -1101,6 +1103,9 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-59 | Given `provision` or `deploy`, the notification center is opened before the operation's own command runs and no emitted step reopens the Command Palette between that command and the success assertion, because VS Code closes the palette when the window loses focus and a running lifecycle operation opens browser windows of its own. | | VCB-60 | Given a lifecycle confirmation, the emitted component gates its Enter on the dialog assertion alone and on no image hash, because the dialog renders over whatever the scaffolded template left on screen and that background differs per template. | | VCB-61 | Given `provision` or `deploy`, the confirmation is the modal-dialog component and its assertion names the message the toolkit composes, `Costs may apply based on usage. Do you want to provision resources in dev environment using listed accounts?` and `Do you want to deploy resources in dev environment?`, because both consents are `showMessage(..., modal)` calls whose only on-screen text is that message and its buttons. | +| VCB-64 | Given a `target` whose profile is a local debug profile, the adapter requires no `provision` and no `deploy`, because the profile's own `preLaunchTask` chain runs the local lifecycle before the app starts, so authoring the remote lifecycle commands would create Azure resources the local run never reads. | +| VCB-65 | Given the `Debug in Microsoft 365 Agents Playground` target, the adapter requires no `login` and emits no browser sign-in, because the Playground serves the agent from the local machine and never authenticates the run against Microsoft 365. | +| VCB-66 | Given a `chat` check whose target is the Agents Playground, the compiler emits the Playground message adapter, because the Playground renders its own `Type a message...` composer rather than the Teams or Copilot one. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/cases/README.md b/packages/tests/vscuse/vscode-test-cases/cases/README.md index f59405e2e42..1900413870f 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/README.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/README.md @@ -9,13 +9,13 @@ migration inventory and coverage status. ## Initial coverage -| File | Template family | Cases | Contract pressure | -| ------------------------------------- | ------------------------------------- | ----: | -------------------------------------------------------------------- | -| `weather-agent.yml` | Custom Engine Agent | 2 | language subtrees, Azure lifecycle, Teams app/chat activation | -| `da-no-action.yml` | Declarative Agent | 1 | negative file assertions, Copilot agent discoverability | -| `da-mcp-server.yml` | Declarative Agent with MCP action | 3 | conditional auth inputs, pipeline mutations, Copilot discoverability | -| `da-api-plugin-from-scratch.yml` | Declarative Agent with new API action | 2 | language branches and no-auth API plugin output | -| `da-api-plugin-from-existing-api.yml` | Declarative Agent with existing API | 4 | no auth, API key, bearer, OAuth provision, and remote preview | +| File | Template family | Cases | Contract pressure | +| ------------------------------------- | ------------------------------------- | ----: | --------------------------------------------------------------------------------------------------- | +| `weather-agent.yml` | Custom Engine Agent | 5 | language subtrees, Azure lifecycle, Teams app/chat activation, local Teams/Copilot/Playground debug | +| `da-no-action.yml` | Declarative Agent | 1 | negative file assertions, Copilot agent discoverability | +| `da-mcp-server.yml` | Declarative Agent with MCP action | 3 | conditional auth inputs, pipeline mutations, Copilot discoverability | +| `da-api-plugin-from-scratch.yml` | Declarative Agent with new API action | 2 | language branches and no-auth API plugin output | +| `da-api-plugin-from-existing-api.yml` | Declarative Agent with existing API | 4 | no auth, API key, bearer, OAuth provision, and remote preview | ## Model findings @@ -43,7 +43,7 @@ Authoring these fixtures exposed six gaps in the first contract draft: proves capability outcomes. The default setup parses, validates, and expands these sources, then resolves their semantic steps -through the compiler-owned adapter and reusable components into twelve independent runnable VScUse +through the compiler-owned adapter and reusable components into fifteen independent runnable VScUse plans. The case YAML is the only authored template/scenario source. Setup prints the generated-plan diff before transactionally updating only manifest-owned files. A custom semantic-step adapter may still be injected by focused compiler and writer tests. diff --git a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md index 4546e604ad4..661386b0807 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md @@ -13,6 +13,9 @@ It is a migration inventory, not an instruction to delete legacy plans automatic | ------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | | `weather-agent.yml` | `weather-ts-azure-openai-remote-preview` | `weather-agent--weather-ts-azure-openai-remote-preview.json` | `Weather_Agent_ts_remote_debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Teams remote launch, and chat validation. | | `weather-agent.yml` | `weather-js-openai-remote-preview` | `weather-agent--weather-js-openai-remote-preview.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Full | Weather Agent, OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-teams` | `weather-agent--weather-ts-azure-openai-local-teams.json` | `Weather_Agent_ts_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | | `da-no-action.yml` | `da-no-action-remote-preview` | `da-no-action--da-no-action-remote-preview.json` | `DA_No_Action_Remote_Debug.json` | Full | No-action scaffold, generated files, provision, and Copilot remote preview. | | `da-mcp-server.yml` | `da-mcp-remote-none-preview` | `da-mcp-server--da-mcp-remote-none-preview.json` | `DA_MCP_None_Remote.json` | Full | Remote MCP with no authentication, dynamic tool discovery checks, provision, and Copilot preview. | | `da-mcp-server.yml` | `da-mcp-remote-oauth-preview` | `da-mcp-server--da-mcp-remote-oauth-preview.json` | `DA_MCP_Oauth_Remote.json` | Full | Remote MCP with OAuth credentials and pipeline/file assertions. | diff --git a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml index 63cb9487243..e8017b8e454 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml +++ b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml @@ -33,6 +33,48 @@ cases: open-app, ] + # Local debug: the launch profile's preLaunchTask chain registers the app, + # starts the tunnel, and runs the local lifecycle itself, so the case authors + # neither provision nor deploy. Only the Microsoft 365 account is signed in, + # because the local run reads no Azure resources. + - id: weather-ts-azure-openai-local-teams + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-ts-azure-openai, + check-weather-ts, + login-m365, + f5-teams-local, + open-app, + check-weather-chat, + ] + + - id: weather-ts-azure-openai-local-copilot + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-ts-azure-openai, + check-weather-ts, + login-m365, + f5-copilot-local, + open-agent, + check-weather-chat, + ] + + # The Agents Playground hosts the agent locally and never signs in to + # Microsoft 365, so this is the shortest case that still exercises a real + # completion from the scaffolded agent. + - id: weather-ts-azure-openai-playground + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-ts-azure-openai, + check-weather-ts, + f5-playground, + open-app, + check-weather-chat, + ] + steps: scaffold-weather-ts-azure-openai: type: scaffold @@ -179,12 +221,33 @@ steps: with: profile: "Launch Remote in Teams (Chrome)" + f5-teams-local: + type: target + with: + profile: "Debug in Teams (Chrome)" + + f5-copilot-local: + type: target + with: + profile: "(Preview) Debug in Copilot (Chrome)" + + f5-playground: + type: target + with: + profile: "Debug in Microsoft 365 Agents Playground" + open-app: type: open with: kind: app destination: chat + open-agent: + type: open + with: + kind: agent + destination: chat + check-weather-chat: type: checks with: diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index fecfd8fb180..0eb983bfa84 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -265,6 +265,41 @@ const targetAdapters = { "an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot", requires: ["login:m365", "provision"], }, + // The local debug profiles below carry a preLaunchTask chain that validates + // prerequisites, registers the app, starts the tunnel, and runs the local + // lifecycle before the application starts, so they require no authored + // provision or deploy. They reach the same surfaces the remote profiles reach, + // so they reuse those readiness subjects; the subjects name the app by the + // prefix the case authored, which holds for the `local` suffix as it does for + // `dev`. + "Debug in Teams (Chrome)": { + host: "teams", + open: { adapter: "teams-add", destination: "chat", kind: "app" }, + readySubject: + "the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible", + requires: ["login:m365"], + }, + "(Preview) Debug in Copilot (Chrome)": { + browserAuthentication: { + component: "authentication/browser/m365-sign-in.json.tpl", + credentials: "m365", + }, + host: "copilot", + open: { adapter: "ready", destination: "chat", kind: "agent" }, + readySubject: + "an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot", + requires: ["login:m365"], + }, + // The Agents Playground hosts the agent on the local machine and talks to it + // over the local bot endpoint, so nothing in this target authenticates against + // Microsoft 365 and no account has to be signed in first. + "Debug in Microsoft 365 Agents Playground": { + host: "playground", + open: { adapter: "ready", destination: "chat", kind: "app" }, + readySubject: + "the Microsoft 365 Agents Playground page is open in the browser", + requires: [], + }, }; function failure(code, message) { @@ -1000,6 +1035,7 @@ function createSemanticStepCompiler() { function compileChatCheck(state, assertion) { const sendComponents = { copilot: "browser/copilot/send-message.json.tpl", + playground: "browser/playground/send-message.json.tpl", teams: "browser/teams/send-message.json.tpl", }; const sendComponent = sendComponents[state.profile?.host]; diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index e1186a2d5fc..90b345fb0b4 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -108,7 +108,7 @@ test("VCB-34: semantic compiler does not read external template contracts", asyn } }); -test("VCB-34: default setup compiles the checked-in YAML sources into twelve plans", async (context) => { +test("VCB-34: default setup compiles the checked-in YAML sources into fifteen plans", async (context) => { const plansDirectory = await fs.mkdtemp( path.join(os.tmpdir(), "vscuse-generated-"), ); @@ -121,9 +121,9 @@ test("VCB-34: default setup compiles the checked-in YAML sources into twelve pla }); assert.equal(first.ok, true); - assert.equal(first.value.files.length, 12); + assert.equal(first.value.files.length, 15); const generatedFiles = first.value.files; - assert.equal(generatedFiles.length, 12); + assert.equal(generatedFiles.length, 15); assert.equal( generatedFiles.includes( "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth.json", @@ -1196,6 +1196,93 @@ test("semantic adapter rejects a target with missing prerequisites", async () => assert.equal(result.diagnostics[0].code, "VCB_TARGET_PREREQUISITE"); }); +test("VCB-64: local debug targets require no provision or deploy", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plansByCase = new Map( + result.value.map((generated) => [generated.caseId, generated.plan]), + ); + for (const caseId of [ + "weather-ts-azure-openai-local-teams", + "weather-ts-azure-openai-local-copilot", + "weather-ts-azure-openai-playground", + ]) { + const plan = plansByCase.get(caseId); + assert.notEqual(plan, undefined, caseId); + const typedValues = plan.steps + .filter((step) => step.tool === "type_text") + .map((step) => step.parameters.text); + assert.equal( + typedValues.includes("Microsoft 365 Agents: Provision"), + false, + caseId, + ); + assert.equal( + typedValues.includes("Microsoft 365 Agents: Deploy"), + false, + caseId, + ); + } +}); + +test("VCB-65: the Agents Playground target signs no account in", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "weather-ts-azure-openai-playground", + ).plan; + const typedValues = plan.steps + .filter((step) => step.tool === "type_text") + .map((step) => step.parameters.text); + assert.equal(typedValues.includes("${{env:M365_ACCOUNT_NAME}}"), false); + assert.equal( + typedValues.includes("${{secret:M365_ACCOUNT_PASSWORD}}"), + false, + ); + assert.equal( + plan.steps.some((step) => + ["step_signInAzure_", "step_signInM365_", "step_browserM365SignIn_"].some( + (prefix) => step.step_id.startsWith(prefix), + ), + ), + false, + ); +}); + +test("VCB-66: an Agents Playground chat check uses the Playground composer", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "weather-ts-azure-openai-playground", + ).plan; + assert.equal( + plan.steps.some((step) => + step.step_id.startsWith("step_sendPlaygroundMessage_"), + ), + true, + ); + assert.equal( + plan.steps.some( + (step) => + step.step_id.startsWith("step_sendTeamsMessage_") || + step.step_id.startsWith("step_sendCopilotMessage_"), + ), + false, + ); +}); + test("semantic adapter rejects an open kind incompatible with its target profile", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace(" kind: app", " kind: agent"), diff --git a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans index f185c4dedf4..bec1d37c05e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans +++ b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans @@ -12,6 +12,9 @@ "da-mcp-server--da-mcp-remote-oauth-preview.json", "da-no-action--da-no-action-remote-preview.json", "weather-agent--weather-js-openai-remote-preview.json", + "weather-agent--weather-ts-azure-openai-local-copilot.json", + "weather-agent--weather-ts-azure-openai-local-teams.json", + "weather-agent--weather-ts-azure-openai-playground.json", "weather-agent--weather-ts-azure-openai-remote-preview.json" ] } diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json new file mode 100644 index 00000000000..ddb80d11ce0 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json @@ -0,0 +1,2345 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_dcba0ab02566", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 99, + "name": "weather-ts-azure-openai-local-copilot", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_cf4f7ebda_1_1", + "step_closeWelcomeOverlay_close_cf4f7ebda_1_1", + "step_closeWelcomeOverlay_assertReady_cf4f7ebda_1_1", + "step_executeCommand_open_cf4f7ebda_1_2", + "step_executeCommand_assertPalette_cf4f7ebda_1_2", + "step_executeCommand_filter_cf4f7ebda_1_2", + "step_executeCommand_assertCommand_cf4f7ebda_1_2", + "step_executeCommand_execute_cf4f7ebda_1_2", + "step_assertToolkitViewSettled_assert_cf4f7ebda_1_3", + "step_closeGetStartedEditor_assertActive_cf4f7ebda_1_4", + "step_closeGetStartedEditor_close_cf4f7ebda_1_4", + "step_closeGetStartedEditor_assertClosed_cf4f7ebda_1_4", + "step_executeCommand_open_cf4f7ebda_1_5", + "step_executeCommand_assertPalette_cf4f7ebda_1_5", + "step_executeCommand_filter_cf4f7ebda_1_5", + "step_executeCommand_assertCommand_cf4f7ebda_1_5", + "step_executeCommand_execute_cf4f7ebda_1_5", + "step_singleSelect_assertQuestion_cf4f7ebda_1_6", + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_6", + "step_singleSelect_filter_cf4f7ebda_1_6", + "step_singleSelect_assertOption_cf4f7ebda_1_6", + "step_singleSelect_confirm_cf4f7ebda_1_6", + "step_singleSelect_assertQuestion_cf4f7ebda_1_7", + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_7", + "step_singleSelect_filter_cf4f7ebda_1_7", + "step_singleSelect_assertOption_cf4f7ebda_1_7", + "step_singleSelect_confirm_cf4f7ebda_1_7", + "step_singleSelect_assertQuestion_cf4f7ebda_1_8", + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_8", + "step_singleSelect_filter_cf4f7ebda_1_8", + "step_singleSelect_assertOption_cf4f7ebda_1_8", + "step_singleSelect_confirm_cf4f7ebda_1_8", + "step_textInput_assertQuestion_cf4f7ebda_1_9", + "step_textInput_input_cf4f7ebda_1_9", + "step_textInput_confirm_cf4f7ebda_1_9", + "step_textInput_assertQuestion_cf4f7ebda_1_10", + "step_textInput_input_cf4f7ebda_1_10", + "step_textInput_confirm_cf4f7ebda_1_10", + "step_textInput_assertQuestion_cf4f7ebda_1_11", + "step_textInput_input_cf4f7ebda_1_11", + "step_textInput_confirm_cf4f7ebda_1_11", + "step_singleSelect_assertQuestion_cf4f7ebda_1_12", + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_12", + "step_singleSelect_filter_cf4f7ebda_1_12", + "step_singleSelect_assertOption_cf4f7ebda_1_12", + "step_singleSelect_confirm_cf4f7ebda_1_12", + "step_confirmOption_assertPrompt_cf4f7ebda_1_13", + "step_confirmOption_confirm_cf4f7ebda_1_13", + "step_textInput_assertQuestion_cf4f7ebda_1_14", + "step_textInput_input_cf4f7ebda_1_14", + "step_textInput_confirm_cf4f7ebda_1_14", + "step_assertProjectWindowReady_assert_cf4f7ebda_1_15", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_1", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_2", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_3", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_4", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_5", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_6", + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_7", + "step_executeCommand_open_cf4f7ebda_3_1", + "step_executeCommand_assertPalette_cf4f7ebda_3_1", + "step_executeCommand_filter_cf4f7ebda_3_1", + "step_executeCommand_assertCommand_cf4f7ebda_3_1", + "step_executeCommand_execute_cf4f7ebda_3_1", + "step_signInM365_assertOption_cf4f7ebda_3_2", + "step_signInM365_selectOption_cf4f7ebda_3_2", + "step_signInM365_confirmSignIn_cf4f7ebda_3_2", + "step_signInM365_focusAccount_cf4f7ebda_3_2", + "step_signInM365_typeAccount_cf4f7ebda_3_2", + "step_signInM365_next_cf4f7ebda_3_2", + "step_signInM365_typePassword_cf4f7ebda_3_2", + "step_signInM365_submit_cf4f7ebda_3_2", + "step_signInM365_closeBrowser_cf4f7ebda_3_2", + "step_signInM365_assertReady_cf4f7ebda_3_2", + "step_executeCommand_open_cf4f7ebda_4_1", + "step_executeCommand_assertPalette_cf4f7ebda_4_1", + "step_executeCommand_filter_cf4f7ebda_4_1", + "step_executeCommand_assertCommand_cf4f7ebda_4_1", + "step_executeCommand_execute_cf4f7ebda_4_1", + "step_filterOption_filter_cf4f7ebda_4_2", + "step_filterOption_assertOption_cf4f7ebda_4_2", + "step_filterOption_confirm_cf4f7ebda_4_2", + "step_browserM365SignIn_assertAccount_cf4f7ebda_4_3", + "step_browserM365SignIn_focusAccount_cf4f7ebda_4_3", + "step_browserM365SignIn_enterAccount_cf4f7ebda_4_3", + "step_browserM365SignIn_submitAccount_cf4f7ebda_4_3", + "step_browserM365SignIn_assertPassword_cf4f7ebda_4_3", + "step_browserM365SignIn_enterPassword_cf4f7ebda_4_3", + "step_browserM365SignIn_submitPassword_cf4f7ebda_4_3", + "step_browserM365SignIn_assertStaySignedIn_cf4f7ebda_4_3", + "step_browserM365SignIn_confirmStaySignedIn_cf4f7ebda_4_3", + "step_browserM365SignIn_refresh_cf4f7ebda_4_3", + "step_assertReady_assertReady_cf4f7ebda_4_4", + "step_sendCopilotMessage_assertInput_cf4f7ebda_6_1", + "step_sendCopilotMessage_focusInput_cf4f7ebda_6_1", + "step_sendCopilotMessage_type_cf4f7ebda_6_1", + "step_sendCopilotMessage_send_cf4f7ebda_6_1", + "step_assertChatReplied_assert_cf4f7ebda_6_2", + "step_assertChatContains_assert_cf4f7ebda_6_3" + ], + "tags": [ + "case_id:weather-ts-azure-openai-local-copilot", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_cf4f7ebda_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_cf4f7ebda_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_cf4f7ebda_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_cf4f7ebda_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_cf4f7ebda_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cf4f7ebda_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_cf4f7ebda_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cf4f7ebda_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cf4f7ebda_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cf4f7ebda_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cf4f7ebda_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cf4f7ebda_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cf4f7ebda_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cf4f7ebda_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cf4f7ebda_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_cf4f7ebda_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cf4f7ebda_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_cf4f7ebda_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_cf4f7ebda_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_cf4f7ebda_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_cf4f7ebda_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_cf4f7ebda_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_cf4f7ebda_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cf4f7ebda_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_cf4f7ebda_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cf4f7ebda_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cf4f7ebda_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cf4f7ebda_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cf4f7ebda_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cf4f7ebda_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cf4f7ebda_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cf4f7ebda_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cf4f7ebda_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cf4f7ebda_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cf4f7ebda_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cf4f7ebda_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cf4f7ebda_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cf4f7ebda_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cf4f7ebda_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cf4f7ebda_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cf4f7ebda_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cf4f7ebda_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cf4f7ebda_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cf4f7ebda_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cf4f7ebda_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cf4f7ebda_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cf4f7ebda_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cf4f7ebda_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cf4f7ebda_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cf4f7ebda_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cf4f7ebda_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cf4f7ebda_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cf4f7ebda_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cf4f7ebda_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cf4f7ebda_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cf4f7ebda_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cf4f7ebda_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cf4f7ebda_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cf4f7ebda_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cf4f7ebda_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cf4f7ebda_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cf4f7ebda_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cf4f7ebda_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cf4f7ebda_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cf4f7ebda_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cf4f7ebda_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cf4f7ebda_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cf4f7ebda_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cf4f7ebda_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cf4f7ebda_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cf4f7ebda_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cf4f7ebda_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cf4f7ebda_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cf4f7ebda_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cf4f7ebda_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cf4f7ebda_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cf4f7ebda_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cf4f7ebda_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cf4f7ebda_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cf4f7ebda_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cf4f7ebda_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cf4f7ebda_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cf4f7ebda_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cf4f7ebda_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_cf4f7ebda_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cf4f7ebda_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_cf4f7ebda_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_cf4f7ebda_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cf4f7ebda_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_cf4f7ebda_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cf4f7ebda_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cf4f7ebda_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cf4f7ebda_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cf4f7ebda_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_cf4f7ebda_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cf4f7ebda_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_cf4f7ebda_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cf4f7ebda_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_cf4f7ebda_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cf4f7ebda_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cf4f7ebda_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cf4f7ebda_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cf4f7ebda_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cf4f7ebda_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cf4f7ebda_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cf4f7ebda_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cf4f7ebda_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cf4f7ebda_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_cf4f7ebda_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cf4f7ebda_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_cf4f7ebda_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_cf4f7ebda_3_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_cf4f7ebda_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_cf4f7ebda_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_cf4f7ebda_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_cf4f7ebda_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cf4f7ebda_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cf4f7ebda_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cf4f7ebda_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cf4f7ebda_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cf4f7ebda_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cf4f7ebda_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cf4f7ebda_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cf4f7ebda_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_cf4f7ebda_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "(Preview) Debug in Copilot (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cf4f7ebda_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_cf4f7ebda_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option (Preview) Debug in Copilot (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_cf4f7ebda_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_cf4f7ebda_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_cf4f7ebda_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_browserM365SignIn_assertAccount_cf4f7ebda_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft sign-in page is visible in Chrome with an email or username input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_cf4f7ebda_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_browserM365SignIn_focusAccount_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 429, + "y": 347 + }, + "description": "Click the email or username input on the Microsoft sign-in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertAccount_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_enterAccount_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the registered Microsoft 365 account in the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_focusAccount_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_submitAccount_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to continue to password entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_enterAccount_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_assertPassword_cf4f7ebda_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft sign-in password input is visible and focused in Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_submitAccount_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365SignIn_enterPassword_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertPassword_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_submitPassword_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_enterPassword_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_assertStaySignedIn_cf4f7ebda_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_submitPassword_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365SignIn_confirmStaySignedIn_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertStaySignedIn_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_browserM365SignIn_refresh_cf4f7ebda_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f5" + }, + "description": "Press F5 to refresh Microsoft 365 Copilot after browser authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_confirmStaySignedIn_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "force_run:true" + ] + }, + { + "step_id": "step_assertReady_assertReady_cf4f7ebda_4_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_refresh_cf4f7ebda_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendCopilotMessage_assertInput_cf4f7ebda_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Copilot message input is visible and its placeholder text starts with Message ${{var:app_name}}.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_cf4f7ebda_4_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendCopilotMessage_focusInput_cf4f7ebda_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 416, + "y": 369 + }, + "description": "Click the \"Message ${{var:app_name}}\" input box in the Microsoft 365 Copilot web application.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_assertInput_cf4f7ebda_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message", + "ocr:true" + ] + }, + { + "step_id": "step_sendCopilotMessage_type_cf4f7ebda_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Copilot message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_focusInput_cf4f7ebda_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendCopilotMessage_send_cf4f7ebda_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Copilot message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_type_cf4f7ebda_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_cf4f7ebda_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_send_cf4f7ebda_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_cf4f7ebda_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_cf4f7ebda_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json new file mode 100644 index 00000000000..41a8dbb343a --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json @@ -0,0 +1,2251 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_e445a125b963", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 94, + "name": "weather-ts-azure-openai-local-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c93c4b25a_1_1", + "step_closeWelcomeOverlay_close_c93c4b25a_1_1", + "step_closeWelcomeOverlay_assertReady_c93c4b25a_1_1", + "step_executeCommand_open_c93c4b25a_1_2", + "step_executeCommand_assertPalette_c93c4b25a_1_2", + "step_executeCommand_filter_c93c4b25a_1_2", + "step_executeCommand_assertCommand_c93c4b25a_1_2", + "step_executeCommand_execute_c93c4b25a_1_2", + "step_assertToolkitViewSettled_assert_c93c4b25a_1_3", + "step_closeGetStartedEditor_assertActive_c93c4b25a_1_4", + "step_closeGetStartedEditor_close_c93c4b25a_1_4", + "step_closeGetStartedEditor_assertClosed_c93c4b25a_1_4", + "step_executeCommand_open_c93c4b25a_1_5", + "step_executeCommand_assertPalette_c93c4b25a_1_5", + "step_executeCommand_filter_c93c4b25a_1_5", + "step_executeCommand_assertCommand_c93c4b25a_1_5", + "step_executeCommand_execute_c93c4b25a_1_5", + "step_singleSelect_assertQuestion_c93c4b25a_1_6", + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_6", + "step_singleSelect_filter_c93c4b25a_1_6", + "step_singleSelect_assertOption_c93c4b25a_1_6", + "step_singleSelect_confirm_c93c4b25a_1_6", + "step_singleSelect_assertQuestion_c93c4b25a_1_7", + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_7", + "step_singleSelect_filter_c93c4b25a_1_7", + "step_singleSelect_assertOption_c93c4b25a_1_7", + "step_singleSelect_confirm_c93c4b25a_1_7", + "step_singleSelect_assertQuestion_c93c4b25a_1_8", + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_8", + "step_singleSelect_filter_c93c4b25a_1_8", + "step_singleSelect_assertOption_c93c4b25a_1_8", + "step_singleSelect_confirm_c93c4b25a_1_8", + "step_textInput_assertQuestion_c93c4b25a_1_9", + "step_textInput_input_c93c4b25a_1_9", + "step_textInput_confirm_c93c4b25a_1_9", + "step_textInput_assertQuestion_c93c4b25a_1_10", + "step_textInput_input_c93c4b25a_1_10", + "step_textInput_confirm_c93c4b25a_1_10", + "step_textInput_assertQuestion_c93c4b25a_1_11", + "step_textInput_input_c93c4b25a_1_11", + "step_textInput_confirm_c93c4b25a_1_11", + "step_singleSelect_assertQuestion_c93c4b25a_1_12", + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_12", + "step_singleSelect_filter_c93c4b25a_1_12", + "step_singleSelect_assertOption_c93c4b25a_1_12", + "step_singleSelect_confirm_c93c4b25a_1_12", + "step_confirmOption_assertPrompt_c93c4b25a_1_13", + "step_confirmOption_confirm_c93c4b25a_1_13", + "step_textInput_assertQuestion_c93c4b25a_1_14", + "step_textInput_input_c93c4b25a_1_14", + "step_textInput_confirm_c93c4b25a_1_14", + "step_assertProjectWindowReady_assert_c93c4b25a_1_15", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_1", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_2", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_3", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_4", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_5", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_6", + "step_checkWorkspaceFiles_verify_c93c4b25a_2_7", + "step_executeCommand_open_c93c4b25a_3_1", + "step_executeCommand_assertPalette_c93c4b25a_3_1", + "step_executeCommand_filter_c93c4b25a_3_1", + "step_executeCommand_assertCommand_c93c4b25a_3_1", + "step_executeCommand_execute_c93c4b25a_3_1", + "step_signInM365_assertOption_c93c4b25a_3_2", + "step_signInM365_selectOption_c93c4b25a_3_2", + "step_signInM365_confirmSignIn_c93c4b25a_3_2", + "step_signInM365_focusAccount_c93c4b25a_3_2", + "step_signInM365_typeAccount_c93c4b25a_3_2", + "step_signInM365_next_c93c4b25a_3_2", + "step_signInM365_typePassword_c93c4b25a_3_2", + "step_signInM365_submit_c93c4b25a_3_2", + "step_signInM365_closeBrowser_c93c4b25a_3_2", + "step_signInM365_assertReady_c93c4b25a_3_2", + "step_executeCommand_open_c93c4b25a_4_1", + "step_executeCommand_assertPalette_c93c4b25a_4_1", + "step_executeCommand_filter_c93c4b25a_4_1", + "step_executeCommand_assertCommand_c93c4b25a_4_1", + "step_executeCommand_execute_c93c4b25a_4_1", + "step_filterOption_filter_c93c4b25a_4_2", + "step_filterOption_assertOption_c93c4b25a_4_2", + "step_filterOption_confirm_c93c4b25a_4_2", + "step_assertReady_assertReady_c93c4b25a_4_3", + "step_addAndOpenApp_assertAdd_c93c4b25a_5_1", + "step_addAndOpenApp_add_c93c4b25a_5_1", + "step_addAndOpenApp_assertAdded_c93c4b25a_5_1", + "step_addAndOpenApp_open_c93c4b25a_5_1", + "step_addAndOpenApp_assertReady_c93c4b25a_5_1", + "step_sendTeamsMessage_assertInput_c93c4b25a_6_1", + "step_sendTeamsMessage_focusInput_c93c4b25a_6_1", + "step_sendTeamsMessage_type_c93c4b25a_6_1", + "step_sendTeamsMessage_send_c93c4b25a_6_1", + "step_assertChatReplied_assert_c93c4b25a_6_2", + "step_assertChatContains_assert_c93c4b25a_6_3" + ], + "tags": [ + "case_id:weather-ts-azure-openai-local-teams", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c93c4b25a_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c93c4b25a_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c93c4b25a_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c93c4b25a_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c93c4b25a_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c93c4b25a_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c93c4b25a_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c93c4b25a_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c93c4b25a_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c93c4b25a_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c93c4b25a_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c93c4b25a_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c93c4b25a_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c93c4b25a_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c93c4b25a_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c93c4b25a_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c93c4b25a_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c93c4b25a_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c93c4b25a_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c93c4b25a_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c93c4b25a_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c93c4b25a_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c93c4b25a_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c93c4b25a_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c93c4b25a_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c93c4b25a_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c93c4b25a_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c93c4b25a_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c93c4b25a_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c93c4b25a_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c93c4b25a_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c93c4b25a_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c93c4b25a_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c93c4b25a_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c93c4b25a_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c93c4b25a_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c93c4b25a_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c93c4b25a_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c93c4b25a_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c93c4b25a_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c93c4b25a_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c93c4b25a_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c93c4b25a_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c93c4b25a_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c93c4b25a_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c93c4b25a_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c93c4b25a_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c93c4b25a_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c93c4b25a_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c93c4b25a_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c93c4b25a_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c93c4b25a_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c93c4b25a_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c93c4b25a_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c93c4b25a_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c93c4b25a_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c93c4b25a_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c93c4b25a_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c93c4b25a_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c93c4b25a_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c93c4b25a_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c93c4b25a_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c93c4b25a_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c93c4b25a_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c93c4b25a_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c93c4b25a_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c93c4b25a_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c93c4b25a_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c93c4b25a_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c93c4b25a_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c93c4b25a_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c93c4b25a_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c93c4b25a_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c93c4b25a_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c93c4b25a_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c93c4b25a_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c93c4b25a_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c93c4b25a_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c93c4b25a_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c93c4b25a_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c93c4b25a_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c93c4b25a_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c93c4b25a_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c93c4b25a_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c93c4b25a_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c93c4b25a_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c93c4b25a_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c93c4b25a_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c93c4b25a_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c93c4b25a_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c93c4b25a_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c93c4b25a_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c93c4b25a_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c93c4b25a_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c93c4b25a_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c93c4b25a_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c93c4b25a_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c93c4b25a_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c93c4b25a_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c93c4b25a_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c93c4b25a_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c93c4b25a_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c93c4b25a_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c93c4b25a_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c93c4b25a_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c93c4b25a_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c93c4b25a_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c93c4b25a_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_c93c4b25a_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c93c4b25a_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_c93c4b25a_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_c93c4b25a_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_c93c4b25a_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_c93c4b25a_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_c93c4b25a_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_c93c4b25a_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_c93c4b25a_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_c93c4b25a_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_c93c4b25a_3_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_c93c4b25a_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_c93c4b25a_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c93c4b25a_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_c93c4b25a_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c93c4b25a_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c93c4b25a_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c93c4b25a_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c93c4b25a_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c93c4b25a_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c93c4b25a_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c93c4b25a_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c93c4b25a_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c93c4b25a_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c93c4b25a_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c93c4b25a_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c93c4b25a_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c93c4b25a_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c93c4b25a_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c93c4b25a_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c93c4b25a_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c93c4b25a_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c93c4b25a_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c93c4b25a_5_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c93c4b25a_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c93c4b25a_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c93c4b25a_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c93c4b25a_5_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c93c4b25a_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c93c4b25a_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_c93c4b25a_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_c93c4b25a_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_c93c4b25a_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_c93c4b25a_6_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_c93c4b25a_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_c93c4b25a_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_c93c4b25a_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_c93c4b25a_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c93c4b25a_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_c93c4b25a_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_c93c4b25a_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_c93c4b25a_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json new file mode 100644 index 00000000000..ff1bfa9d96f --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json @@ -0,0 +1,1736 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_8fb214f92bd8", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 74, + "name": "weather-ts-azure-openai-playground", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c3b349e90_1_1", + "step_closeWelcomeOverlay_close_c3b349e90_1_1", + "step_closeWelcomeOverlay_assertReady_c3b349e90_1_1", + "step_executeCommand_open_c3b349e90_1_2", + "step_executeCommand_assertPalette_c3b349e90_1_2", + "step_executeCommand_filter_c3b349e90_1_2", + "step_executeCommand_assertCommand_c3b349e90_1_2", + "step_executeCommand_execute_c3b349e90_1_2", + "step_assertToolkitViewSettled_assert_c3b349e90_1_3", + "step_closeGetStartedEditor_assertActive_c3b349e90_1_4", + "step_closeGetStartedEditor_close_c3b349e90_1_4", + "step_closeGetStartedEditor_assertClosed_c3b349e90_1_4", + "step_executeCommand_open_c3b349e90_1_5", + "step_executeCommand_assertPalette_c3b349e90_1_5", + "step_executeCommand_filter_c3b349e90_1_5", + "step_executeCommand_assertCommand_c3b349e90_1_5", + "step_executeCommand_execute_c3b349e90_1_5", + "step_singleSelect_assertQuestion_c3b349e90_1_6", + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_6", + "step_singleSelect_filter_c3b349e90_1_6", + "step_singleSelect_assertOption_c3b349e90_1_6", + "step_singleSelect_confirm_c3b349e90_1_6", + "step_singleSelect_assertQuestion_c3b349e90_1_7", + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_7", + "step_singleSelect_filter_c3b349e90_1_7", + "step_singleSelect_assertOption_c3b349e90_1_7", + "step_singleSelect_confirm_c3b349e90_1_7", + "step_singleSelect_assertQuestion_c3b349e90_1_8", + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_8", + "step_singleSelect_filter_c3b349e90_1_8", + "step_singleSelect_assertOption_c3b349e90_1_8", + "step_singleSelect_confirm_c3b349e90_1_8", + "step_textInput_assertQuestion_c3b349e90_1_9", + "step_textInput_input_c3b349e90_1_9", + "step_textInput_confirm_c3b349e90_1_9", + "step_textInput_assertQuestion_c3b349e90_1_10", + "step_textInput_input_c3b349e90_1_10", + "step_textInput_confirm_c3b349e90_1_10", + "step_textInput_assertQuestion_c3b349e90_1_11", + "step_textInput_input_c3b349e90_1_11", + "step_textInput_confirm_c3b349e90_1_11", + "step_singleSelect_assertQuestion_c3b349e90_1_12", + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_12", + "step_singleSelect_filter_c3b349e90_1_12", + "step_singleSelect_assertOption_c3b349e90_1_12", + "step_singleSelect_confirm_c3b349e90_1_12", + "step_confirmOption_assertPrompt_c3b349e90_1_13", + "step_confirmOption_confirm_c3b349e90_1_13", + "step_textInput_assertQuestion_c3b349e90_1_14", + "step_textInput_input_c3b349e90_1_14", + "step_textInput_confirm_c3b349e90_1_14", + "step_assertProjectWindowReady_assert_c3b349e90_1_15", + "step_checkWorkspaceFiles_verify_c3b349e90_2_1", + "step_checkWorkspaceFiles_verify_c3b349e90_2_2", + "step_checkWorkspaceFiles_verify_c3b349e90_2_3", + "step_checkWorkspaceFiles_verify_c3b349e90_2_4", + "step_checkWorkspaceFiles_verify_c3b349e90_2_5", + "step_checkWorkspaceFiles_verify_c3b349e90_2_6", + "step_checkWorkspaceFiles_verify_c3b349e90_2_7", + "step_executeCommand_open_c3b349e90_3_1", + "step_executeCommand_assertPalette_c3b349e90_3_1", + "step_executeCommand_filter_c3b349e90_3_1", + "step_executeCommand_assertCommand_c3b349e90_3_1", + "step_executeCommand_execute_c3b349e90_3_1", + "step_filterOption_filter_c3b349e90_3_2", + "step_filterOption_assertOption_c3b349e90_3_2", + "step_filterOption_confirm_c3b349e90_3_2", + "step_assertReady_assertReady_c3b349e90_3_3", + "step_sendPlaygroundMessage_assertInput_c3b349e90_5_1", + "step_sendPlaygroundMessage_focusInput_c3b349e90_5_1", + "step_sendPlaygroundMessage_type_c3b349e90_5_1", + "step_sendPlaygroundMessage_send_c3b349e90_5_1", + "step_assertChatReplied_assert_c3b349e90_5_2", + "step_assertChatContains_assert_c3b349e90_5_3" + ], + "tags": [ + "case_id:weather-ts-azure-openai-playground", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c3b349e90_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c3b349e90_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c3b349e90_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c3b349e90_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c3b349e90_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3b349e90_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c3b349e90_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3b349e90_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3b349e90_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3b349e90_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3b349e90_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3b349e90_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3b349e90_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3b349e90_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3b349e90_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c3b349e90_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3b349e90_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c3b349e90_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c3b349e90_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c3b349e90_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c3b349e90_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c3b349e90_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c3b349e90_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3b349e90_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c3b349e90_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3b349e90_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3b349e90_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3b349e90_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3b349e90_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3b349e90_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3b349e90_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3b349e90_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3b349e90_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3b349e90_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3b349e90_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3b349e90_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3b349e90_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3b349e90_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3b349e90_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3b349e90_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3b349e90_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3b349e90_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3b349e90_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3b349e90_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3b349e90_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3b349e90_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3b349e90_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3b349e90_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3b349e90_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3b349e90_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3b349e90_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3b349e90_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3b349e90_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3b349e90_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3b349e90_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3b349e90_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3b349e90_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3b349e90_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3b349e90_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3b349e90_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3b349e90_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3b349e90_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3b349e90_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3b349e90_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3b349e90_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3b349e90_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3b349e90_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3b349e90_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3b349e90_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3b349e90_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3b349e90_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3b349e90_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3b349e90_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3b349e90_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3b349e90_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3b349e90_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3b349e90_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3b349e90_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3b349e90_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3b349e90_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3b349e90_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3b349e90_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3b349e90_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3b349e90_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3b349e90_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3b349e90_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3b349e90_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3b349e90_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c3b349e90_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3b349e90_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c3b349e90_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c3b349e90_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3b349e90_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c3b349e90_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3b349e90_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3b349e90_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3b349e90_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3b349e90_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c3b349e90_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3b349e90_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c3b349e90_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3b349e90_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c3b349e90_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3b349e90_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3b349e90_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3b349e90_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3b349e90_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3b349e90_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3b349e90_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3b349e90_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3b349e90_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3b349e90_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c3b349e90_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Microsoft 365 Agents Playground" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3b349e90_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c3b349e90_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Microsoft 365 Agents Playground is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c3b349e90_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c3b349e90_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c3b349e90_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c3b349e90_3_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Playground page is open in the browser.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c3b349e90_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_assertInput_c3b349e90_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Agents Playground \"Type a message...\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c3b349e90_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_focusInput_c3b349e90_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 176, + "y": 710 + }, + "description": "Click the Agents Playground \"Type a message...\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_assertInput_c3b349e90_5_1" + ], + "preconditions": [ + "dhash:176:710:16:5:00000000006858d8", + "dhash:176:710:96:5:00000000303a8000", + "dhash:176:710:0:10:5c4a03c080828240" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_type_c3b349e90_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Agents Playground message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_focusInput_c3b349e90_5_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_send_c3b349e90_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Agents Playground message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_type_c3b349e90_5_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c3b349e90_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_send_c3b349e90_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_c3b349e90_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_c3b349e90_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} From 4a09e63075d5af77866d9daaaeb27b23ad0c4852 Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 13:34:41 +0800 Subject: [PATCH 2/9] test(vscuse): generate python basic custom engine agent cases Adds a pythonEnvironment semantic operation that drives the Python extension virtual environment flow, registers Python and Basic Custom Engine Agent as scaffold answers, and registers the Python remote Teams launch profile title. Weather Agent is registered for TypeScript, JavaScript, and C# only, so Python scaffolding coverage lands on Basic Custom Engine Agent instead, mapped to the three recorded Python plans. --- .../product/compile-vscuse-case-bundles.md | 32 +- .../vscuse/vscode-test-cases/cases/README.md | 3 +- .../cases/basic-custom-engine-agent.yml | 189 + .../cases/legacy-case-mapping.md | 37 +- .../engine/semantic-step-compiler.cjs | 97 +- .../engine/semantic-step-compiler.test.cjs | 137 +- .../engine/validate-case-bundle.cjs | 1 + .../plans/.vscuse-generated-plans | 3 + ...basic-cea-py-azure-openai-local-teams.json | 2772 +++++++++++ ...-basic-cea-py-azure-openai-playground.json | 2257 +++++++++ ...asic-cea-py-azure-openai-remote-teams.json | 4065 +++++++++++++++++ 11 files changed, 9563 insertions(+), 30 deletions(-) create mode 100644 packages/tests/vscuse/vscode-test-cases/cases/basic-custom-engine-agent.yml create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index f64154829a1..50517384e25 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -259,14 +259,26 @@ cases: ] ``` -V1 step types are `scaffold`, `login`, `provision`, `deploy`, `target`, `open`, and `checks`. +V1 step types are `scaffold`, `login`, `provision`, `deploy`, `pythonEnvironment`, `target`, `open`, +and `checks`. `scaffold` accepts `template` and `answers`; `login`, `provision`, and `target` accept their same-named operation input. `deploy` has no semantic input, although current validation ignores an -authored `with` object. `open` requires `with.kind` and +authored `with` object. `pythonEnvironment` requires exactly one input, `with.interpreter`, the +label the Python extension's interpreter picker shows for the interpreter the case selects. +`open` requires `with.kind` and `with.destination`; the current template, target profile, and those two values select a compatible adapter. The profile already identifies the host surface, so `open` does not repeat Teams or Copilot as authored input. A future Playground target adapter can follow the same rule. +`pythonEnvironment` is the one operation a Python case authors that a TypeScript or JavaScript case +does not. A Python scaffold writes a `src/requirements.txt` it never installs, and every launch +profile the Python templates author starts the app from the workspace interpreter, so a case that +launches a Python project without first creating its virtual environment starts an app whose +dependencies are missing. The operation runs `Python: Create Environment...`, filters the +environment-type picker to `Venv`, filters the interpreter picker to the authored label, confirms +the `Select dependencies to install` prompt with every dependency checked, and then waits on the +notification the extension raises when the environment is selected. + A `checks` definition requires a `with` array. The check immediately following `scaffold` must contain at least one `file` assertion; current validation permits a later `checks` definition to be empty. Each assertion selects its adapter and required runtime state by `type`; there is no @@ -309,14 +321,15 @@ required state it establishes. A `chat` assertion is rejected unless the precedi reached `chat-ready`. `target` is one authored F5 operation that selects and starts its declared launch profile. The -current adapters support the remote profiles `Launch Remote in Teams (Chrome)` and -`Preview in Copilot (Chrome)`, and the local debug profiles `Debug in Teams (Chrome)`, -`(Preview) Debug in Copilot (Chrome)`, and `Debug in Microsoft 365 Agents Playground`; any +current adapters support the remote profiles `Launch Remote in Teams (Chrome)`, +`Launch Remote (Chrome)`, and `Preview in Copilot (Chrome)`, and the local debug profiles +`Debug in Teams (Chrome)`, `(Preview) Debug in Copilot (Chrome)`, and +`Debug in Microsoft 365 Agents Playground`; any other exact title fails until a deterministic adapter is added. The authored `profile` is the exact case-sensitive `name` shown in the F5 picker after template rendering; it is not a compiler-defined semantic ID. For example, the TypeScript Weather template authors -`Launch Remote in Teams (Chrome)`. A Python profile titled `Launch Remote (Chrome)` is currently -unsupported because no semantic target adapter is registered for that exact title. +`Launch Remote in Teams (Chrome)` while the Python templates author the same remote Teams launch +as `Launch Remote (Chrome)`. A selected profile's `preLaunchTask` may validate prerequisites, create local debug state, start the tunnel, provision and deploy locally, and start the application. Those profile-owned tasks are not duplicated as case step references. A profile without lifecycle prelaunch tasks instead requires the @@ -1106,6 +1119,11 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-64 | Given a `target` whose profile is a local debug profile, the adapter requires no `provision` and no `deploy`, because the profile's own `preLaunchTask` chain runs the local lifecycle before the app starts, so authoring the remote lifecycle commands would create Azure resources the local run never reads. | | VCB-65 | Given the `Debug in Microsoft 365 Agents Playground` target, the adapter requires no `login` and emits no browser sign-in, because the Playground serves the agent from the local machine and never authenticates the run against Microsoft 365. | | VCB-66 | Given a `chat` check whose target is the Agents Playground, the compiler emits the Playground message adapter, because the Playground renders its own `Type a message...` composer rather than the Teams or Copilot one. | +| VCB-67 | Given a `pythonEnvironment` operation, the compiler drives `Python: Create Environment...` through the `Venv` environment type, the authored interpreter, and the `Select dependencies to install` prompt, because a Python scaffold ships a `src/requirements.txt` the scaffold itself never installs and every launch profile starts the app from the workspace interpreter. | +| VCB-68 | Given a `pythonEnvironment` operation, the interpreter is authored per case rather than fixed by the compiler, because the label the picker shows is the patch version the runner image happens to carry and a compiler-owned literal would break on every image bump. | +| VCB-69 | Given a `pythonEnvironment` operation, the environment type and interpreter are chosen by filtering the picker on their labels instead of clicking a row, because both pickers list a machine-dependent number of entries and a row's position carries no meaning the recording can pin. | +| VCB-70 | Given a `pythonEnvironment` operation, the notification center is opened before the completion assertion, because creating the virtual environment and installing its requirements takes minutes and the notification the Python extension raises is the only visible signal that the environment is selected. | +| VCB-71 | Given the `Launch Remote (Chrome)` target, the adapter reaches the Teams app details page through the same add-and-open transition as `Launch Remote in Teams (Chrome)`, because the Python templates only rename that profile and leave the browser flow it launches unchanged. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/cases/README.md b/packages/tests/vscuse/vscode-test-cases/cases/README.md index 1900413870f..9728922ac0d 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/README.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/README.md @@ -12,6 +12,7 @@ migration inventory and coverage status. | File | Template family | Cases | Contract pressure | | ------------------------------------- | ------------------------------------- | ----: | --------------------------------------------------------------------------------------------------- | | `weather-agent.yml` | Custom Engine Agent | 5 | language subtrees, Azure lifecycle, Teams app/chat activation, local Teams/Copilot/Playground debug | +| `basic-custom-engine-agent.yml` | Custom Engine Agent | 3 | Python scaffolding, virtual environment creation, Python launch profile titles | | `da-no-action.yml` | Declarative Agent | 1 | negative file assertions, Copilot agent discoverability | | `da-mcp-server.yml` | Declarative Agent with MCP action | 3 | conditional auth inputs, pipeline mutations, Copilot discoverability | | `da-api-plugin-from-scratch.yml` | Declarative Agent with new API action | 2 | language branches and no-auth API plugin output | @@ -43,7 +44,7 @@ Authoring these fixtures exposed six gaps in the first contract draft: proves capability outcomes. The default setup parses, validates, and expands these sources, then resolves their semantic steps -through the compiler-owned adapter and reusable components into fifteen independent runnable VScUse +through the compiler-owned adapter and reusable components into eighteen independent runnable VScUse plans. The case YAML is the only authored template/scenario source. Setup prints the generated-plan diff before transactionally updating only manifest-owned files. A custom semantic-step adapter may still be injected by focused compiler and writer tests. diff --git a/packages/tests/vscuse/vscode-test-cases/cases/basic-custom-engine-agent.yml b/packages/tests/vscuse/vscode-test-cases/cases/basic-custom-engine-agent.yml new file mode 100644 index 00000000000..e1fd9120791 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/cases/basic-custom-engine-agent.yml @@ -0,0 +1,189 @@ +version: 1 + +# The Weather Agent template is registered for TypeScript, JavaScript, and C# +# only, so Python scaffolding is covered here instead: Basic Custom Engine Agent +# is the custom engine agent template the toolkit does offer in Python, and it +# reaches the same three launch surfaces. +cases: + # Every Python case creates its virtual environment right after the file + # check. The scaffold writes src/requirements.txt but installs nothing, and + # each launch profile starts the app from the workspace interpreter, so a + # launch before that operation starts an app with no dependencies. + - id: basic-cea-py-azure-openai-remote-teams + scenarioId: SCN-CREATE-BASIC-CEA-01 + steps: + [ + scaffold-basic-cea-py-azure-openai, + check-basic-cea-py, + create-python-environment, + login-azure, + login-m365, + provision-arm, + deploy, + f5-teams-remote, + open-app, + check-basic-cea-chat, + ] + + - id: basic-cea-py-azure-openai-local-teams + scenarioId: SCN-CREATE-BASIC-CEA-01 + steps: + [ + scaffold-basic-cea-py-azure-openai, + check-basic-cea-py, + create-python-environment, + login-m365, + f5-teams-local, + open-app, + check-basic-cea-chat, + ] + + - id: basic-cea-py-azure-openai-playground + scenarioId: SCN-CREATE-BASIC-CEA-01 + steps: + [ + scaffold-basic-cea-py-azure-openai, + check-basic-cea-py, + create-python-environment, + f5-playground, + open-app, + check-basic-cea-chat, + ] + +steps: + scaffold-basic-cea-py-azure-openai: + type: scaffold + with: + template: basic-custom-engine-agent + answers: + - question: projectType + value: custom-engine-agent-type + - question: customEngineAgent + value: basic-custom-engine-agent + - question: llmService + value: llm-service-azure-openai + - question: azureOpenAIKey + type: text + value: "${{secret:AZURE_OPENAI_API_KEY}}" + - question: azureOpenAIEndpoint + type: text + value: "${{env:AZURE_OPENAI_ENDPOINT}}" + - question: azureOpenAIDeploymentName + type: text + value: "${{env:AZURE_OPENAI_MODEL}}" + - question: language + value: python + - question: workspaceFolder + value: default + - question: appName + type: text + value: "${{var:app_name:vscuse_app_#####}}" + + check-basic-cea-py: + type: checks + with: + - type: file + path: m365agents.yml + expect: + exists: true + contains: ["provision:", "deploy:"] + - type: file + path: src/app.py + expect: + exists: true + - type: file + path: src/agent.py + expect: + exists: true + - type: file + path: src/config.py + expect: + exists: true + # The Python extension installs exactly this file when the environment is + # created, so the case asserts it exists before creating the environment. + - type: file + path: src/requirements.txt + expect: + exists: true + contains: [microsoft-agents-hosting-aiohttp, openai] + - type: file + path: infra/azure.bicep + expect: + exists: true + - type: file + path: appPackage/manifest.json + expect: + contains: ['"manifestVersion": "1.29"'] + # The Python scaffold writes no Node project. + - type: file + path: package.json + expect: + exists: false + + # The interpreter label is the patch version the runner image carries. It is + # authored here rather than fixed in the compiler so an image bump changes one + # case line instead of every Python plan. + create-python-environment: + type: pythonEnvironment + with: + interpreter: "Python 3.12" + + login-azure: + type: login + with: + type: azure + account: "${{env:AZURE_ACCOUNT_NAME}}" + password: "${{secret:AZURE_ACCOUNT_PASSWORD}}" + + login-m365: + type: login + with: + type: m365 + account: "${{env:M365_ACCOUNT_NAME}}" + password: "${{secret:M365_ACCOUNT_PASSWORD}}" + + provision-arm: + type: provision + with: + environment: none + arm: + targetResourceGroupName: "+ New resource group" + newResourceGroupName: "${{var:app_name}}-rg" + newResourceGroupLocation: "${{env:RESOURCE_GROUP_REGION}}" + + deploy: + type: deploy + with: + environment: none + + # The Python templates name the remote Teams launch without `in Teams`. + f5-teams-remote: + type: target + with: + profile: "Launch Remote (Chrome)" + + f5-teams-local: + type: target + with: + profile: "Debug in Teams (Chrome)" + + f5-playground: + type: target + with: + profile: "Debug in Microsoft 365 Agents Playground" + + open-app: + type: open + with: + kind: app + destination: chat + + # The basic agent answers general questions rather than calling a tool, so the + # check asserts a reply and no literal the model is not required to produce. + check-basic-cea-chat: + type: checks + with: + - type: chat + send: How to develop agent for Teams? + expect: + replied: true diff --git a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md index 661386b0807..3945fe5da7d 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md @@ -9,23 +9,26 @@ It is a migration inventory, not an instruction to delete legacy plans automatic ## Mapping -| YAML source | New case ID | Generated plan | Legacy plan | Status | Coverage note | -| ------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `weather-agent.yml` | `weather-ts-azure-openai-remote-preview` | `weather-agent--weather-ts-azure-openai-remote-preview.json` | `Weather_Agent_ts_remote_debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Teams remote launch, and chat validation. | -| `weather-agent.yml` | `weather-js-openai-remote-preview` | `weather-agent--weather-js-openai-remote-preview.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Full | Weather Agent, OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-local-teams` | `weather-agent--weather-ts-azure-openai-local-teams.json` | `Weather_Agent_ts_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | -| `da-no-action.yml` | `da-no-action-remote-preview` | `da-no-action--da-no-action-remote-preview.json` | `DA_No_Action_Remote_Debug.json` | Full | No-action scaffold, generated files, provision, and Copilot remote preview. | -| `da-mcp-server.yml` | `da-mcp-remote-none-preview` | `da-mcp-server--da-mcp-remote-none-preview.json` | `DA_MCP_None_Remote.json` | Full | Remote MCP with no authentication, dynamic tool discovery checks, provision, and Copilot preview. | -| `da-mcp-server.yml` | `da-mcp-remote-oauth-preview` | `da-mcp-server--da-mcp-remote-oauth-preview.json` | `DA_MCP_Oauth_Remote.json` | Full | Remote MCP with OAuth credentials and pipeline/file assertions. | -| `da-mcp-server.yml` | `da-mcp-remote-entra-preview` | `da-mcp-server--da-mcp-remote-entra-preview.json` | `DA_MCP_Entra_SSO_Remote.json` | Full | Remote MCP with Microsoft Entra SSO and pipeline/file assertions. | -| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-ts` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json` | `DA_None_ts_Remote_Debug.json` | Full | New API + None auth + TypeScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | -| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-js` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json` | `DA_None_js_Remote_Debug.json` | Full | New API + None auth + JavaScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-no-auth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_No_Auth.json` | Full | No-auth scaffold/file validation, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-api-key-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_API_Key.json` | Full | API Key scaffold, protected credential input, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-bearer-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Bearer_token.json` | Full | Bearer scaffold, protected token input, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-oauth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_OAuth.json` | Full | OAuth scaffold, protected client credentials, provision, Copilot remote preview, and sign-in action assertion. | +| YAML source | New case ID | Generated plan | Legacy plan | Status | Coverage note | +| ------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `weather-agent.yml` | `weather-ts-azure-openai-remote-preview` | `weather-agent--weather-ts-azure-openai-remote-preview.json` | `Weather_Agent_ts_remote_debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Teams remote launch, and chat validation. | +| `weather-agent.yml` | `weather-js-openai-remote-preview` | `weather-agent--weather-js-openai-remote-preview.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Full | Weather Agent, OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-teams` | `weather-agent--weather-ts-azure-openai-local-teams.json` | `Weather_Agent_ts_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-remote-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Remote_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, provision, deploy, Teams remote launch, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-local-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Local_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, local Teams debug launch, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-playground` | `basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json` | `Basic_Custom_Engine_Azure_OpenAI_py_playground.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, Agents Playground launch, and chat validation. | +| `da-no-action.yml` | `da-no-action-remote-preview` | `da-no-action--da-no-action-remote-preview.json` | `DA_No_Action_Remote_Debug.json` | Full | No-action scaffold, generated files, provision, and Copilot remote preview. | +| `da-mcp-server.yml` | `da-mcp-remote-none-preview` | `da-mcp-server--da-mcp-remote-none-preview.json` | `DA_MCP_None_Remote.json` | Full | Remote MCP with no authentication, dynamic tool discovery checks, provision, and Copilot preview. | +| `da-mcp-server.yml` | `da-mcp-remote-oauth-preview` | `da-mcp-server--da-mcp-remote-oauth-preview.json` | `DA_MCP_Oauth_Remote.json` | Full | Remote MCP with OAuth credentials and pipeline/file assertions. | +| `da-mcp-server.yml` | `da-mcp-remote-entra-preview` | `da-mcp-server--da-mcp-remote-entra-preview.json` | `DA_MCP_Entra_SSO_Remote.json` | Full | Remote MCP with Microsoft Entra SSO and pipeline/file assertions. | +| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-ts` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json` | `DA_None_ts_Remote_Debug.json` | Full | New API + None auth + TypeScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | +| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-js` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json` | `DA_None_js_Remote_Debug.json` | Full | New API + None auth + JavaScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-no-auth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_No_Auth.json` | Full | No-auth scaffold/file validation, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-api-key-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_API_Key.json` | Full | API Key scaffold, protected credential input, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-bearer-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Bearer_token.json` | Full | Bearer scaffold, protected token input, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-oauth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_OAuth.json` | Full | OAuth scaffold, protected client credentials, provision, Copilot remote preview, and sign-in action assertion. | ## Legacy Plan Not Mapped diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index 0eb983bfa84..14ba155d9ca 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -64,6 +64,15 @@ const defaultFolderOption = { ], }; +// Creating a Python virtual environment is a Python extension flow, not a +// toolkit flow, so its literals live next to the semantic step that drives it. +const pythonEnvironment = { + commandTitle: "Python: Create Environment...", + dependenciesTitle: "Select dependencies to install", + environmentTypeLabel: "Venv", + successText: "The following environment is selected:", +}; + const scaffoldQuestionAdapters = { actionSource: { options: { @@ -101,7 +110,10 @@ const scaffoldQuestionAdapters = { azureOpenAIEndpoint: { title: "Azure OpenAI Endpoint", type: "text" }, azureOpenAIKey: { secret: true, title: "Azure OpenAI Key", type: "text" }, customEngineAgent: { - options: { "weather-agent": "Weather Agent" }, + options: { + "basic-custom-engine-agent": "Basic Custom Engine Agent", + "weather-agent": "Weather Agent", + }, title: "App Features Using Microsoft 365 Agents SDK", type: "singleSelect", }, @@ -111,7 +123,11 @@ const scaffoldQuestionAdapters = { type: "singleSelect", }, language: { - options: { javascript: "JavaScript", typescript: "TypeScript" }, + options: { + javascript: "JavaScript", + python: "Python", + typescript: "TypeScript", + }, title: "Programming Language", type: "singleSelect", }, @@ -254,6 +270,17 @@ const targetAdapters = { "the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible", requires: ["login:azure", "login:m365", "provision", "deploy"], }, + // The Python templates name the same remote Teams launch `Launch Remote + // (Chrome)`, without the `in Teams` the TypeScript and JavaScript templates + // use. It reaches the same Teams app details page, so it reuses that adapter's + // open transition and readiness subject. + "Launch Remote (Chrome)": { + host: "teams", + open: { adapter: "teams-add", destination: "chat", kind: "app" }, + readySubject: + "the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible", + requires: ["login:azure", "login:m365", "provision", "deploy"], + }, "Preview in Copilot (Chrome)": { browserAuthentication: { component: "authentication/browser/m365-sign-in.json.tpl", @@ -799,6 +826,70 @@ function createSemanticStepCompiler() { return { ok: true }; } + function compilePythonEnvironment(state, definition) { + const inputs = definition.with ?? {}; + if ( + !isRecord(inputs) || + !hasOnlyFields(inputs, new Set(["interpreter"])) || + typeof inputs.interpreter !== "string" || + inputs.interpreter.length === 0 + ) { + return failure( + "VCB_PYTHON_ENVIRONMENT_INPUT_INVALID", + "The Python environment operation requires an interpreter label.", + ); + } + const output = []; + let error = append( + output, + render(state, "command-palette/execute-command.json.tpl", { + commandTitle: pythonEnvironment.commandTitle, + }), + ); + if (error) return error; + error = append( + output, + render(state, "quick-input/filter-option.json.tpl", { + optionLabel: pythonEnvironment.environmentTypeLabel, + }), + ); + if (error) return error; + error = append( + output, + render(state, "quick-input/filter-option.json.tpl", { + optionLabel: inputs.interpreter, + }), + ); + if (error) return error; + error = append( + output, + render(state, "quick-input/multi-select.json.tpl", { + questionTitle: pythonEnvironment.dependenciesTitle, + }), + ); + if (error) return error; + // Creating the virtual environment and installing the requirements it + // declares takes minutes, and the notification the Python extension raises + // when it finishes is the only visible completion signal, so the + // notification center is opened before the assertion waits on it. + error = append( + output, + render(state, "command-palette/execute-command.json.tpl", { + commandTitle: commandTitles.notifications, + }), + ); + if (error) return error; + error = append( + output, + render(state, "notifications/assert-contains.json.tpl", { + notificationText: pythonEnvironment.successText, + }), + ); + if (error) return error; + state.completed.add("pythonEnvironment"); + return { ok: true, value: output }; + } + function compileLifecycle(state, definition) { const recipe = lifecycleAdapters[definition.type]; let confirmation = recipe.confirmation; @@ -1266,6 +1357,8 @@ function createSemanticStepCompiler() { case "provision": case "deploy": return compileLifecycle(state, definition); + case "pythonEnvironment": + return compilePythonEnvironment(state, definition); case "target": return compileTarget(state, definition); case "open": diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 90b345fb0b4..4f0fe228485 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -108,7 +108,7 @@ test("VCB-34: semantic compiler does not read external template contracts", asyn } }); -test("VCB-34: default setup compiles the checked-in YAML sources into fifteen plans", async (context) => { +test("VCB-34: default setup compiles the checked-in YAML sources into eighteen plans", async (context) => { const plansDirectory = await fs.mkdtemp( path.join(os.tmpdir(), "vscuse-generated-"), ); @@ -121,9 +121,9 @@ test("VCB-34: default setup compiles the checked-in YAML sources into fifteen pl }); assert.equal(first.ok, true); - assert.equal(first.value.files.length, 15); + assert.equal(first.value.files.length, 18); const generatedFiles = first.value.files; - assert.equal(generatedFiles.length, 15); + assert.equal(generatedFiles.length, 18); assert.equal( generatedFiles.includes( "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth.json", @@ -1292,6 +1292,137 @@ test("semantic adapter rejects an open kind incompatible with its target profile assert.equal(result.diagnostics[0].code, "VCB_OPEN_ADAPTER_UNKNOWN"); }); +test("VCB-67: a Python environment operation drives the Venv creation flow", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "basic-cea-py-azure-openai-playground", + ).plan; + const typedValues = plan.steps + .filter((step) => step.tool === "type_text") + .map((step) => step.parameters.text); + const commandIndex = typedValues.indexOf("Python: Create Environment..."); + assert.notEqual(commandIndex, -1); + assert.equal(typedValues[commandIndex + 1], "Venv"); + assert.equal(typedValues[commandIndex + 2], "Python 3.12"); + assert.equal( + plan.steps.some( + (step) => + step.agent === "assertion" && + step.description.includes("Select dependencies to install"), + ), + true, + ); +}); + +test("VCB-68: a Python environment operation reads its interpreter from the case", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => + sourceText.replace( + 'interpreter: "Python 3.12"', + 'interpreter: "Python 3.13"', + ), + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "basic-cea-py-azure-openai-playground", + ).plan; + const typedValues = plan.steps + .filter((step) => step.tool === "type_text") + .map((step) => step.parameters.text); + assert.equal(typedValues.includes("Python 3.13"), true); + assert.equal(typedValues.includes("Python 3.12"), false); +}); + +test("VCB-68: a Python environment operation without an interpreter is rejected", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => + sourceText.replace(' interpreter: "Python 3.12"\n', ""), + ); + + assert.equal(result.ok, false); + assert.equal( + result.diagnostics[0].code, + "VCB_PYTHON_ENVIRONMENT_INPUT_INVALID", + ); +}); + +test("VCB-69: a Python environment operation clicks no picker row", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "basic-cea-py-azure-openai-playground", + ).plan; + const environmentSteps = plan.steps.filter((step) => + ["step_filterOption_", "step_multiSelect_"].some((prefix) => + step.step_id.startsWith(prefix), + ), + ); + assert.notEqual(environmentSteps.length, 0); + for (const step of environmentSteps) { + assert.equal(step.tool === "click", false, step.step_id); + assert.equal(step.parameters.x, undefined, step.step_id); + assert.equal(step.parameters.y, undefined, step.step_id); + } +}); + +test("VCB-70: a Python environment operation opens the notification center before asserting", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "basic-cea-py-azure-openai-playground", + ).plan; + const assertionIndex = plan.steps.findIndex( + (step) => + step.agent === "assertion" && + step.description.includes("The following environment is selected:"), + ); + assert.notEqual(assertionIndex, -1); + const notificationIndex = plan.steps.findIndex( + (step) => + step.tool === "type_text" && + step.parameters.text === "Notifications: Show Notifications", + ); + assert.notEqual(notificationIndex, -1); + assert.equal(notificationIndex < assertionIndex, true); +}); + +test("VCB-71: the Python remote Teams target opens the app through the Teams add transition", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => + generated.caseId === "basic-cea-py-azure-openai-remote-teams", + ).plan; + const typedValues = plan.steps + .filter((step) => step.tool === "type_text") + .map((step) => step.parameters.text); + assert.equal(typedValues.includes("Launch Remote (Chrome)"), true); + assert.equal( + plan.steps.some((step) => step.step_id.startsWith("step_addAndOpenApp_")), + true, + ); +}); + test("VCB-26: an already-ready Copilot target makes its open emit no step", async () => { const result = await compileFixture( "da-no-action.yml", diff --git a/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs b/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs index 1ff88c05647..8b14d900076 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs @@ -14,6 +14,7 @@ const allowedStepTypes = new Set([ "login", "provision", "deploy", + "pythonEnvironment", "target", "open", "checks", diff --git a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans index bec1d37c05e..8b26072bc00 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans +++ b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans @@ -1,6 +1,9 @@ { "version": 1, "files": [ + "basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json", + "basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json", + "basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json", "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json", "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json", "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json", diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json new file mode 100644 index 00000000000..887aec82709 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json @@ -0,0 +1,2772 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_db8ae9d39c15", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 117, + "name": "basic-cea-py-azure-openai-local-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-BASIC-CEA-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c834b2eb3_1_1", + "step_closeWelcomeOverlay_close_c834b2eb3_1_1", + "step_closeWelcomeOverlay_assertReady_c834b2eb3_1_1", + "step_executeCommand_open_c834b2eb3_1_2", + "step_executeCommand_assertPalette_c834b2eb3_1_2", + "step_executeCommand_filter_c834b2eb3_1_2", + "step_executeCommand_assertCommand_c834b2eb3_1_2", + "step_executeCommand_execute_c834b2eb3_1_2", + "step_assertToolkitViewSettled_assert_c834b2eb3_1_3", + "step_closeGetStartedEditor_assertActive_c834b2eb3_1_4", + "step_closeGetStartedEditor_close_c834b2eb3_1_4", + "step_closeGetStartedEditor_assertClosed_c834b2eb3_1_4", + "step_executeCommand_open_c834b2eb3_1_5", + "step_executeCommand_assertPalette_c834b2eb3_1_5", + "step_executeCommand_filter_c834b2eb3_1_5", + "step_executeCommand_assertCommand_c834b2eb3_1_5", + "step_executeCommand_execute_c834b2eb3_1_5", + "step_singleSelect_assertQuestion_c834b2eb3_1_6", + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_6", + "step_singleSelect_filter_c834b2eb3_1_6", + "step_singleSelect_assertOption_c834b2eb3_1_6", + "step_singleSelect_confirm_c834b2eb3_1_6", + "step_singleSelect_assertQuestion_c834b2eb3_1_7", + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_7", + "step_singleSelect_filter_c834b2eb3_1_7", + "step_singleSelect_assertOption_c834b2eb3_1_7", + "step_singleSelect_confirm_c834b2eb3_1_7", + "step_singleSelect_assertQuestion_c834b2eb3_1_8", + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_8", + "step_singleSelect_filter_c834b2eb3_1_8", + "step_singleSelect_assertOption_c834b2eb3_1_8", + "step_singleSelect_confirm_c834b2eb3_1_8", + "step_textInput_assertQuestion_c834b2eb3_1_9", + "step_textInput_input_c834b2eb3_1_9", + "step_textInput_confirm_c834b2eb3_1_9", + "step_textInput_assertQuestion_c834b2eb3_1_10", + "step_textInput_input_c834b2eb3_1_10", + "step_textInput_confirm_c834b2eb3_1_10", + "step_textInput_assertQuestion_c834b2eb3_1_11", + "step_textInput_input_c834b2eb3_1_11", + "step_textInput_confirm_c834b2eb3_1_11", + "step_singleSelect_assertQuestion_c834b2eb3_1_12", + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_12", + "step_singleSelect_filter_c834b2eb3_1_12", + "step_singleSelect_assertOption_c834b2eb3_1_12", + "step_singleSelect_confirm_c834b2eb3_1_12", + "step_confirmOption_assertPrompt_c834b2eb3_1_13", + "step_confirmOption_confirm_c834b2eb3_1_13", + "step_textInput_assertQuestion_c834b2eb3_1_14", + "step_textInput_input_c834b2eb3_1_14", + "step_textInput_confirm_c834b2eb3_1_14", + "step_assertProjectWindowReady_assert_c834b2eb3_1_15", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_1", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_2", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_3", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_4", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_5", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_6", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_7", + "step_checkWorkspaceFiles_verify_c834b2eb3_2_8", + "step_executeCommand_open_c834b2eb3_3_1", + "step_executeCommand_assertPalette_c834b2eb3_3_1", + "step_executeCommand_filter_c834b2eb3_3_1", + "step_executeCommand_assertCommand_c834b2eb3_3_1", + "step_executeCommand_execute_c834b2eb3_3_1", + "step_filterOption_filter_c834b2eb3_3_2", + "step_filterOption_assertOption_c834b2eb3_3_2", + "step_filterOption_confirm_c834b2eb3_3_2", + "step_filterOption_filter_c834b2eb3_3_3", + "step_filterOption_assertOption_c834b2eb3_3_3", + "step_filterOption_confirm_c834b2eb3_3_3", + "step_multiSelect_assertQuestion_c834b2eb3_3_4", + "step_multiSelect_assertOptionsLoaded_c834b2eb3_3_4", + "step_multiSelect_focusSelectAll_c834b2eb3_3_4", + "step_multiSelect_selectAll_c834b2eb3_3_4", + "step_multiSelect_restoreFocus_c834b2eb3_3_4", + "step_multiSelect_confirm_c834b2eb3_3_4", + "step_executeCommand_open_c834b2eb3_3_5", + "step_executeCommand_assertPalette_c834b2eb3_3_5", + "step_executeCommand_filter_c834b2eb3_3_5", + "step_executeCommand_assertCommand_c834b2eb3_3_5", + "step_executeCommand_execute_c834b2eb3_3_5", + "step_assertNotificationContains_assert_c834b2eb3_3_6", + "step_executeCommand_open_c834b2eb3_4_1", + "step_executeCommand_assertPalette_c834b2eb3_4_1", + "step_executeCommand_filter_c834b2eb3_4_1", + "step_executeCommand_assertCommand_c834b2eb3_4_1", + "step_executeCommand_execute_c834b2eb3_4_1", + "step_signInM365_assertOption_c834b2eb3_4_2", + "step_signInM365_selectOption_c834b2eb3_4_2", + "step_signInM365_confirmSignIn_c834b2eb3_4_2", + "step_signInM365_focusAccount_c834b2eb3_4_2", + "step_signInM365_typeAccount_c834b2eb3_4_2", + "step_signInM365_next_c834b2eb3_4_2", + "step_signInM365_typePassword_c834b2eb3_4_2", + "step_signInM365_submit_c834b2eb3_4_2", + "step_signInM365_closeBrowser_c834b2eb3_4_2", + "step_signInM365_assertReady_c834b2eb3_4_2", + "step_executeCommand_open_c834b2eb3_5_1", + "step_executeCommand_assertPalette_c834b2eb3_5_1", + "step_executeCommand_filter_c834b2eb3_5_1", + "step_executeCommand_assertCommand_c834b2eb3_5_1", + "step_executeCommand_execute_c834b2eb3_5_1", + "step_filterOption_filter_c834b2eb3_5_2", + "step_filterOption_assertOption_c834b2eb3_5_2", + "step_filterOption_confirm_c834b2eb3_5_2", + "step_assertReady_assertReady_c834b2eb3_5_3", + "step_addAndOpenApp_assertAdd_c834b2eb3_6_1", + "step_addAndOpenApp_add_c834b2eb3_6_1", + "step_addAndOpenApp_assertAdded_c834b2eb3_6_1", + "step_addAndOpenApp_open_c834b2eb3_6_1", + "step_addAndOpenApp_assertReady_c834b2eb3_6_1", + "step_sendTeamsMessage_assertInput_c834b2eb3_7_1", + "step_sendTeamsMessage_focusInput_c834b2eb3_7_1", + "step_sendTeamsMessage_type_c834b2eb3_7_1", + "step_sendTeamsMessage_send_c834b2eb3_7_1", + "step_assertChatReplied_assert_c834b2eb3_7_2" + ], + "tags": [ + "case_id:basic-cea-py-azure-openai-local-teams", + "scenario_id:SCN-CREATE-BASIC-CEA-01", + "template_id:basic-custom-engine-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c834b2eb3_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c834b2eb3_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c834b2eb3_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c834b2eb3_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c834b2eb3_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c834b2eb3_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c834b2eb3_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c834b2eb3_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c834b2eb3_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c834b2eb3_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c834b2eb3_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c834b2eb3_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c834b2eb3_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c834b2eb3_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c834b2eb3_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c834b2eb3_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c834b2eb3_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c834b2eb3_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c834b2eb3_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c834b2eb3_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c834b2eb3_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c834b2eb3_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c834b2eb3_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c834b2eb3_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c834b2eb3_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Basic Custom Engine Agent" + }, + "description": "Type the resolved option label Basic Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c834b2eb3_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Basic Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c834b2eb3_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c834b2eb3_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c834b2eb3_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c834b2eb3_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c834b2eb3_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c834b2eb3_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c834b2eb3_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c834b2eb3_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c834b2eb3_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c834b2eb3_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c834b2eb3_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c834b2eb3_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c834b2eb3_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c834b2eb3_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c834b2eb3_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c834b2eb3_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c834b2eb3_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c834b2eb3_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c834b2eb3_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c834b2eb3_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c834b2eb3_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c834b2eb3_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c834b2eb3_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c834b2eb3_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c834b2eb3_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c834b2eb3_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c834b2eb3_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c834b2eb3_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c834b2eb3_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c834b2eb3_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c834b2eb3_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c834b2eb3_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c834b2eb3_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python" + }, + "description": "Type the resolved option label Python into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c834b2eb3_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c834b2eb3_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c834b2eb3_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c834b2eb3_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c834b2eb3_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c834b2eb3_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c834b2eb3_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c834b2eb3_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c834b2eb3_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c834b2eb3_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c834b2eb3_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c834b2eb3_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c834b2eb3_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c834b2eb3_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c834b2eb3_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c834b2eb3_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c834b2eb3_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJwcm92aXNpb246IiwiZGVwbG95OiJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c834b2eb3_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hcHAucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5weSIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9jb25maWcucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9yZXF1aXJlbWVudHMudHh0IiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJtaWNyb3NvZnQtYWdlbnRzLWhvc3RpbmctYWlvaHR0cCIsIm9wZW5haSJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c834b2eb3_2_8", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c834b2eb3_2_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python: Create Environment..." + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Python: Create Environment... and the highlighted command listed under it is titled Python: Create Environment....", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c834b2eb3_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Venv" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c834b2eb3_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Venv is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c834b2eb3_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c834b2eb3_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c834b2eb3_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_filter_c834b2eb3_3_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python 3.12" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c834b2eb3_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c834b2eb3_3_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python 3.12 is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c834b2eb3_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c834b2eb3_3_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c834b2eb3_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_multiSelect_assertQuestion_c834b2eb3_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active multi-select prompt titled Select dependencies to install is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c834b2eb3_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_multiSelect_assertOptionsLoaded_c834b2eb3_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertQuestion_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_multiSelect_focusSelectAll_c834b2eb3_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "shift+tab" + }, + "description": "Move focus from the multi-select input box to the select-all checkbox of the prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertOptionsLoaded_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_selectAll_c834b2eb3_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "space" + }, + "description": "Press Space to check every option of the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_focusSelectAll_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_restoreFocus_c834b2eb3_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "tab" + }, + "description": "Move focus from the select-all checkbox back to the multi-select input box.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_selectAll_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_confirm_c834b2eb3_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_restoreFocus_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_confirm_c834b2eb3_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_3_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c834b2eb3_3_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains The following environment is selected:.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c834b2eb3_3_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_c834b2eb3_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_c834b2eb3_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_c834b2eb3_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_c834b2eb3_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_c834b2eb3_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_c834b2eb3_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_c834b2eb3_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_c834b2eb3_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_c834b2eb3_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_c834b2eb3_4_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_c834b2eb3_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_c834b2eb3_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c834b2eb3_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_c834b2eb3_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c834b2eb3_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c834b2eb3_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c834b2eb3_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c834b2eb3_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c834b2eb3_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c834b2eb3_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c834b2eb3_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c834b2eb3_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c834b2eb3_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c834b2eb3_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c834b2eb3_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c834b2eb3_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c834b2eb3_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c834b2eb3_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c834b2eb3_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c834b2eb3_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c834b2eb3_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c834b2eb3_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c834b2eb3_6_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c834b2eb3_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c834b2eb3_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c834b2eb3_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c834b2eb3_6_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c834b2eb3_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c834b2eb3_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_c834b2eb3_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_c834b2eb3_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_c834b2eb3_7_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_c834b2eb3_7_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_c834b2eb3_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "How to develop agent for Teams?" + }, + "description": "Type \"How to develop agent for Teams?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_c834b2eb3_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_c834b2eb3_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_c834b2eb3_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c834b2eb3_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_c834b2eb3_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json new file mode 100644 index 00000000000..95054219f0f --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json @@ -0,0 +1,2257 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_839c3c01a4d3", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 97, + "name": "basic-cea-py-azure-openai-playground", + "description": { + "owner": "", + "workitem": "SCN-CREATE-BASIC-CEA-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c3bb6e7ce_1_1", + "step_closeWelcomeOverlay_close_c3bb6e7ce_1_1", + "step_closeWelcomeOverlay_assertReady_c3bb6e7ce_1_1", + "step_executeCommand_open_c3bb6e7ce_1_2", + "step_executeCommand_assertPalette_c3bb6e7ce_1_2", + "step_executeCommand_filter_c3bb6e7ce_1_2", + "step_executeCommand_assertCommand_c3bb6e7ce_1_2", + "step_executeCommand_execute_c3bb6e7ce_1_2", + "step_assertToolkitViewSettled_assert_c3bb6e7ce_1_3", + "step_closeGetStartedEditor_assertActive_c3bb6e7ce_1_4", + "step_closeGetStartedEditor_close_c3bb6e7ce_1_4", + "step_closeGetStartedEditor_assertClosed_c3bb6e7ce_1_4", + "step_executeCommand_open_c3bb6e7ce_1_5", + "step_executeCommand_assertPalette_c3bb6e7ce_1_5", + "step_executeCommand_filter_c3bb6e7ce_1_5", + "step_executeCommand_assertCommand_c3bb6e7ce_1_5", + "step_executeCommand_execute_c3bb6e7ce_1_5", + "step_singleSelect_assertQuestion_c3bb6e7ce_1_6", + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_6", + "step_singleSelect_filter_c3bb6e7ce_1_6", + "step_singleSelect_assertOption_c3bb6e7ce_1_6", + "step_singleSelect_confirm_c3bb6e7ce_1_6", + "step_singleSelect_assertQuestion_c3bb6e7ce_1_7", + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_7", + "step_singleSelect_filter_c3bb6e7ce_1_7", + "step_singleSelect_assertOption_c3bb6e7ce_1_7", + "step_singleSelect_confirm_c3bb6e7ce_1_7", + "step_singleSelect_assertQuestion_c3bb6e7ce_1_8", + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_8", + "step_singleSelect_filter_c3bb6e7ce_1_8", + "step_singleSelect_assertOption_c3bb6e7ce_1_8", + "step_singleSelect_confirm_c3bb6e7ce_1_8", + "step_textInput_assertQuestion_c3bb6e7ce_1_9", + "step_textInput_input_c3bb6e7ce_1_9", + "step_textInput_confirm_c3bb6e7ce_1_9", + "step_textInput_assertQuestion_c3bb6e7ce_1_10", + "step_textInput_input_c3bb6e7ce_1_10", + "step_textInput_confirm_c3bb6e7ce_1_10", + "step_textInput_assertQuestion_c3bb6e7ce_1_11", + "step_textInput_input_c3bb6e7ce_1_11", + "step_textInput_confirm_c3bb6e7ce_1_11", + "step_singleSelect_assertQuestion_c3bb6e7ce_1_12", + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_12", + "step_singleSelect_filter_c3bb6e7ce_1_12", + "step_singleSelect_assertOption_c3bb6e7ce_1_12", + "step_singleSelect_confirm_c3bb6e7ce_1_12", + "step_confirmOption_assertPrompt_c3bb6e7ce_1_13", + "step_confirmOption_confirm_c3bb6e7ce_1_13", + "step_textInput_assertQuestion_c3bb6e7ce_1_14", + "step_textInput_input_c3bb6e7ce_1_14", + "step_textInput_confirm_c3bb6e7ce_1_14", + "step_assertProjectWindowReady_assert_c3bb6e7ce_1_15", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_1", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_2", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_3", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_4", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_5", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_6", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_7", + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_8", + "step_executeCommand_open_c3bb6e7ce_3_1", + "step_executeCommand_assertPalette_c3bb6e7ce_3_1", + "step_executeCommand_filter_c3bb6e7ce_3_1", + "step_executeCommand_assertCommand_c3bb6e7ce_3_1", + "step_executeCommand_execute_c3bb6e7ce_3_1", + "step_filterOption_filter_c3bb6e7ce_3_2", + "step_filterOption_assertOption_c3bb6e7ce_3_2", + "step_filterOption_confirm_c3bb6e7ce_3_2", + "step_filterOption_filter_c3bb6e7ce_3_3", + "step_filterOption_assertOption_c3bb6e7ce_3_3", + "step_filterOption_confirm_c3bb6e7ce_3_3", + "step_multiSelect_assertQuestion_c3bb6e7ce_3_4", + "step_multiSelect_assertOptionsLoaded_c3bb6e7ce_3_4", + "step_multiSelect_focusSelectAll_c3bb6e7ce_3_4", + "step_multiSelect_selectAll_c3bb6e7ce_3_4", + "step_multiSelect_restoreFocus_c3bb6e7ce_3_4", + "step_multiSelect_confirm_c3bb6e7ce_3_4", + "step_executeCommand_open_c3bb6e7ce_3_5", + "step_executeCommand_assertPalette_c3bb6e7ce_3_5", + "step_executeCommand_filter_c3bb6e7ce_3_5", + "step_executeCommand_assertCommand_c3bb6e7ce_3_5", + "step_executeCommand_execute_c3bb6e7ce_3_5", + "step_assertNotificationContains_assert_c3bb6e7ce_3_6", + "step_executeCommand_open_c3bb6e7ce_4_1", + "step_executeCommand_assertPalette_c3bb6e7ce_4_1", + "step_executeCommand_filter_c3bb6e7ce_4_1", + "step_executeCommand_assertCommand_c3bb6e7ce_4_1", + "step_executeCommand_execute_c3bb6e7ce_4_1", + "step_filterOption_filter_c3bb6e7ce_4_2", + "step_filterOption_assertOption_c3bb6e7ce_4_2", + "step_filterOption_confirm_c3bb6e7ce_4_2", + "step_assertReady_assertReady_c3bb6e7ce_4_3", + "step_sendPlaygroundMessage_assertInput_c3bb6e7ce_6_1", + "step_sendPlaygroundMessage_focusInput_c3bb6e7ce_6_1", + "step_sendPlaygroundMessage_type_c3bb6e7ce_6_1", + "step_sendPlaygroundMessage_send_c3bb6e7ce_6_1", + "step_assertChatReplied_assert_c3bb6e7ce_6_2" + ], + "tags": [ + "case_id:basic-cea-py-azure-openai-playground", + "scenario_id:SCN-CREATE-BASIC-CEA-01", + "template_id:basic-custom-engine-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c3bb6e7ce_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c3bb6e7ce_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c3bb6e7ce_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c3bb6e7ce_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c3bb6e7ce_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3bb6e7ce_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c3bb6e7ce_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3bb6e7ce_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3bb6e7ce_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3bb6e7ce_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3bb6e7ce_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3bb6e7ce_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3bb6e7ce_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3bb6e7ce_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3bb6e7ce_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c3bb6e7ce_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3bb6e7ce_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c3bb6e7ce_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c3bb6e7ce_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c3bb6e7ce_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c3bb6e7ce_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c3bb6e7ce_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c3bb6e7ce_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3bb6e7ce_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c3bb6e7ce_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3bb6e7ce_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3bb6e7ce_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3bb6e7ce_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3bb6e7ce_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3bb6e7ce_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3bb6e7ce_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3bb6e7ce_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3bb6e7ce_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3bb6e7ce_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3bb6e7ce_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3bb6e7ce_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3bb6e7ce_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3bb6e7ce_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3bb6e7ce_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3bb6e7ce_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3bb6e7ce_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3bb6e7ce_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3bb6e7ce_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3bb6e7ce_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3bb6e7ce_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Basic Custom Engine Agent" + }, + "description": "Type the resolved option label Basic Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3bb6e7ce_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Basic Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3bb6e7ce_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3bb6e7ce_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3bb6e7ce_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3bb6e7ce_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3bb6e7ce_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3bb6e7ce_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3bb6e7ce_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3bb6e7ce_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3bb6e7ce_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3bb6e7ce_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3bb6e7ce_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3bb6e7ce_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3bb6e7ce_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3bb6e7ce_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3bb6e7ce_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3bb6e7ce_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3bb6e7ce_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3bb6e7ce_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3bb6e7ce_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3bb6e7ce_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3bb6e7ce_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3bb6e7ce_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3bb6e7ce_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3bb6e7ce_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3bb6e7ce_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3bb6e7ce_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3bb6e7ce_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3bb6e7ce_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3bb6e7ce_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3bb6e7ce_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3bb6e7ce_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3bb6e7ce_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3bb6e7ce_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python" + }, + "description": "Type the resolved option label Python into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3bb6e7ce_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3bb6e7ce_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3bb6e7ce_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3bb6e7ce_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3bb6e7ce_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c3bb6e7ce_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3bb6e7ce_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c3bb6e7ce_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c3bb6e7ce_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3bb6e7ce_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c3bb6e7ce_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3bb6e7ce_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3bb6e7ce_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3bb6e7ce_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3bb6e7ce_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c3bb6e7ce_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3bb6e7ce_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJwcm92aXNpb246IiwiZGVwbG95OiJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c3bb6e7ce_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hcHAucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5weSIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9jb25maWcucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9yZXF1aXJlbWVudHMudHh0IiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJtaWNyb3NvZnQtYWdlbnRzLWhvc3RpbmctYWlvaHR0cCIsIm9wZW5haSJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_8", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c3bb6e7ce_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3bb6e7ce_2_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3bb6e7ce_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3bb6e7ce_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3bb6e7ce_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python: Create Environment..." + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3bb6e7ce_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3bb6e7ce_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Python: Create Environment... and the highlighted command listed under it is titled Python: Create Environment....", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3bb6e7ce_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3bb6e7ce_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3bb6e7ce_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c3bb6e7ce_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Venv" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3bb6e7ce_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c3bb6e7ce_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Venv is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c3bb6e7ce_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c3bb6e7ce_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c3bb6e7ce_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_filter_c3bb6e7ce_3_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python 3.12" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c3bb6e7ce_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c3bb6e7ce_3_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python 3.12 is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c3bb6e7ce_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c3bb6e7ce_3_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c3bb6e7ce_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_multiSelect_assertQuestion_c3bb6e7ce_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active multi-select prompt titled Select dependencies to install is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c3bb6e7ce_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_multiSelect_assertOptionsLoaded_c3bb6e7ce_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertQuestion_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_multiSelect_focusSelectAll_c3bb6e7ce_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "shift+tab" + }, + "description": "Move focus from the multi-select input box to the select-all checkbox of the prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertOptionsLoaded_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_selectAll_c3bb6e7ce_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "space" + }, + "description": "Press Space to check every option of the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_focusSelectAll_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_restoreFocus_c3bb6e7ce_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "tab" + }, + "description": "Move focus from the select-all checkbox back to the multi-select input box.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_selectAll_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_confirm_c3bb6e7ce_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_restoreFocus_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_executeCommand_open_c3bb6e7ce_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_confirm_c3bb6e7ce_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3bb6e7ce_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3bb6e7ce_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3bb6e7ce_3_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3bb6e7ce_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3bb6e7ce_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3bb6e7ce_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3bb6e7ce_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3bb6e7ce_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c3bb6e7ce_3_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains The following environment is selected:.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3bb6e7ce_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c3bb6e7ce_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c3bb6e7ce_3_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3bb6e7ce_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3bb6e7ce_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3bb6e7ce_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3bb6e7ce_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3bb6e7ce_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3bb6e7ce_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3bb6e7ce_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3bb6e7ce_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c3bb6e7ce_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Microsoft 365 Agents Playground" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3bb6e7ce_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c3bb6e7ce_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Microsoft 365 Agents Playground is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c3bb6e7ce_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c3bb6e7ce_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c3bb6e7ce_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c3bb6e7ce_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Playground page is open in the browser.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c3bb6e7ce_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_assertInput_c3bb6e7ce_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Agents Playground \"Type a message...\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c3bb6e7ce_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_focusInput_c3bb6e7ce_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 176, + "y": 710 + }, + "description": "Click the Agents Playground \"Type a message...\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_assertInput_c3bb6e7ce_6_1" + ], + "preconditions": [ + "dhash:176:710:16:5:00000000006858d8", + "dhash:176:710:96:5:00000000303a8000", + "dhash:176:710:0:10:5c4a03c080828240" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_type_c3bb6e7ce_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "How to develop agent for Teams?" + }, + "description": "Type \"How to develop agent for Teams?\" into the Agents Playground message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_focusInput_c3bb6e7ce_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_send_c3bb6e7ce_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Agents Playground message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_type_c3bb6e7ce_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c3bb6e7ce_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_send_c3bb6e7ce_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json new file mode 100644 index 00000000000..88247caf20c --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -0,0 +1,4065 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_ff06c4af5799", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 172, + "name": "basic-cea-py-azure-openai-remote-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-BASIC-CEA-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c9bd6c5f6_1_1", + "step_closeWelcomeOverlay_close_c9bd6c5f6_1_1", + "step_closeWelcomeOverlay_assertReady_c9bd6c5f6_1_1", + "step_executeCommand_open_c9bd6c5f6_1_2", + "step_executeCommand_assertPalette_c9bd6c5f6_1_2", + "step_executeCommand_filter_c9bd6c5f6_1_2", + "step_executeCommand_assertCommand_c9bd6c5f6_1_2", + "step_executeCommand_execute_c9bd6c5f6_1_2", + "step_assertToolkitViewSettled_assert_c9bd6c5f6_1_3", + "step_closeGetStartedEditor_assertActive_c9bd6c5f6_1_4", + "step_closeGetStartedEditor_close_c9bd6c5f6_1_4", + "step_closeGetStartedEditor_assertClosed_c9bd6c5f6_1_4", + "step_executeCommand_open_c9bd6c5f6_1_5", + "step_executeCommand_assertPalette_c9bd6c5f6_1_5", + "step_executeCommand_filter_c9bd6c5f6_1_5", + "step_executeCommand_assertCommand_c9bd6c5f6_1_5", + "step_executeCommand_execute_c9bd6c5f6_1_5", + "step_singleSelect_assertQuestion_c9bd6c5f6_1_6", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_6", + "step_singleSelect_filter_c9bd6c5f6_1_6", + "step_singleSelect_assertOption_c9bd6c5f6_1_6", + "step_singleSelect_confirm_c9bd6c5f6_1_6", + "step_singleSelect_assertQuestion_c9bd6c5f6_1_7", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_7", + "step_singleSelect_filter_c9bd6c5f6_1_7", + "step_singleSelect_assertOption_c9bd6c5f6_1_7", + "step_singleSelect_confirm_c9bd6c5f6_1_7", + "step_singleSelect_assertQuestion_c9bd6c5f6_1_8", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_8", + "step_singleSelect_filter_c9bd6c5f6_1_8", + "step_singleSelect_assertOption_c9bd6c5f6_1_8", + "step_singleSelect_confirm_c9bd6c5f6_1_8", + "step_textInput_assertQuestion_c9bd6c5f6_1_9", + "step_textInput_input_c9bd6c5f6_1_9", + "step_textInput_confirm_c9bd6c5f6_1_9", + "step_textInput_assertQuestion_c9bd6c5f6_1_10", + "step_textInput_input_c9bd6c5f6_1_10", + "step_textInput_confirm_c9bd6c5f6_1_10", + "step_textInput_assertQuestion_c9bd6c5f6_1_11", + "step_textInput_input_c9bd6c5f6_1_11", + "step_textInput_confirm_c9bd6c5f6_1_11", + "step_singleSelect_assertQuestion_c9bd6c5f6_1_12", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_12", + "step_singleSelect_filter_c9bd6c5f6_1_12", + "step_singleSelect_assertOption_c9bd6c5f6_1_12", + "step_singleSelect_confirm_c9bd6c5f6_1_12", + "step_confirmOption_assertPrompt_c9bd6c5f6_1_13", + "step_confirmOption_confirm_c9bd6c5f6_1_13", + "step_textInput_assertQuestion_c9bd6c5f6_1_14", + "step_textInput_input_c9bd6c5f6_1_14", + "step_textInput_confirm_c9bd6c5f6_1_14", + "step_assertProjectWindowReady_assert_c9bd6c5f6_1_15", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_1", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_2", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_3", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_4", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_5", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_6", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_7", + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_8", + "step_executeCommand_open_c9bd6c5f6_3_1", + "step_executeCommand_assertPalette_c9bd6c5f6_3_1", + "step_executeCommand_filter_c9bd6c5f6_3_1", + "step_executeCommand_assertCommand_c9bd6c5f6_3_1", + "step_executeCommand_execute_c9bd6c5f6_3_1", + "step_filterOption_filter_c9bd6c5f6_3_2", + "step_filterOption_assertOption_c9bd6c5f6_3_2", + "step_filterOption_confirm_c9bd6c5f6_3_2", + "step_filterOption_filter_c9bd6c5f6_3_3", + "step_filterOption_assertOption_c9bd6c5f6_3_3", + "step_filterOption_confirm_c9bd6c5f6_3_3", + "step_multiSelect_assertQuestion_c9bd6c5f6_3_4", + "step_multiSelect_assertOptionsLoaded_c9bd6c5f6_3_4", + "step_multiSelect_focusSelectAll_c9bd6c5f6_3_4", + "step_multiSelect_selectAll_c9bd6c5f6_3_4", + "step_multiSelect_restoreFocus_c9bd6c5f6_3_4", + "step_multiSelect_confirm_c9bd6c5f6_3_4", + "step_executeCommand_open_c9bd6c5f6_3_5", + "step_executeCommand_assertPalette_c9bd6c5f6_3_5", + "step_executeCommand_filter_c9bd6c5f6_3_5", + "step_executeCommand_assertCommand_c9bd6c5f6_3_5", + "step_executeCommand_execute_c9bd6c5f6_3_5", + "step_assertNotificationContains_assert_c9bd6c5f6_3_6", + "step_executeCommand_open_c9bd6c5f6_4_1", + "step_executeCommand_assertPalette_c9bd6c5f6_4_1", + "step_executeCommand_filter_c9bd6c5f6_4_1", + "step_executeCommand_assertCommand_c9bd6c5f6_4_1", + "step_executeCommand_execute_c9bd6c5f6_4_1", + "step_signInAzure_assertOption_c9bd6c5f6_4_2", + "step_signInAzure_selectOption_c9bd6c5f6_4_2", + "step_signInAzure_confirmSignIn_c9bd6c5f6_4_2", + "step_signInAzure_allow_c9bd6c5f6_4_2", + "step_signInAzure_focusAccount_c9bd6c5f6_4_2", + "step_signInAzure_typeAccount_c9bd6c5f6_4_2", + "step_signInAzure_next_c9bd6c5f6_4_2", + "step_signInAzure_typePassword_c9bd6c5f6_4_2", + "step_signInAzure_submit_c9bd6c5f6_4_2", + "step_signInAzure_closeBrowser_c9bd6c5f6_4_2", + "step_signInAzure_assertReady_c9bd6c5f6_4_2", + "step_executeCommand_open_c9bd6c5f6_5_1", + "step_executeCommand_assertPalette_c9bd6c5f6_5_1", + "step_executeCommand_filter_c9bd6c5f6_5_1", + "step_executeCommand_assertCommand_c9bd6c5f6_5_1", + "step_executeCommand_execute_c9bd6c5f6_5_1", + "step_signInM365FromPicker_assertOption_c9bd6c5f6_5_2", + "step_signInM365FromPicker_selectOption_c9bd6c5f6_5_2", + "step_signInM365FromPicker_confirmSignIn_c9bd6c5f6_5_2", + "step_signInM365FromPicker_useAnotherAccount_c9bd6c5f6_5_2", + "step_signInM365FromPicker_typeAccount_c9bd6c5f6_5_2", + "step_signInM365FromPicker_next_c9bd6c5f6_5_2", + "step_signInM365FromPicker_typePassword_c9bd6c5f6_5_2", + "step_signInM365FromPicker_submit_c9bd6c5f6_5_2", + "step_signInM365FromPicker_closeBrowser_c9bd6c5f6_5_2", + "step_signInM365FromPicker_assertReady_c9bd6c5f6_5_2", + "step_executeCommand_open_c9bd6c5f6_6_1", + "step_executeCommand_assertPalette_c9bd6c5f6_6_1", + "step_executeCommand_filter_c9bd6c5f6_6_1", + "step_executeCommand_assertCommand_c9bd6c5f6_6_1", + "step_executeCommand_execute_c9bd6c5f6_6_1", + "step_executeCommand_open_c9bd6c5f6_6_2", + "step_executeCommand_assertPalette_c9bd6c5f6_6_2", + "step_executeCommand_filter_c9bd6c5f6_6_2", + "step_executeCommand_assertCommand_c9bd6c5f6_6_2", + "step_executeCommand_execute_c9bd6c5f6_6_2", + "step_singleSelect_assertQuestion_c9bd6c5f6_6_3", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3", + "step_singleSelect_filter_c9bd6c5f6_6_3", + "step_singleSelect_assertOption_c9bd6c5f6_6_3", + "step_singleSelect_confirm_c9bd6c5f6_6_3", + "step_textInput_assertQuestion_c9bd6c5f6_6_4", + "step_textInput_input_c9bd6c5f6_6_4", + "step_textInput_confirm_c9bd6c5f6_6_4", + "step_singleSelect_assertQuestion_c9bd6c5f6_6_5", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5", + "step_singleSelect_filter_c9bd6c5f6_6_5", + "step_singleSelect_assertOption_c9bd6c5f6_6_5", + "step_singleSelect_confirm_c9bd6c5f6_6_5", + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6", + "step_clickPrimaryAction_click_c9bd6c5f6_6_6", + "step_assertNotificationContains_assert_c9bd6c5f6_6_7", + "step_executeCommand_open_c9bd6c5f6_7_1", + "step_executeCommand_assertPalette_c9bd6c5f6_7_1", + "step_executeCommand_filter_c9bd6c5f6_7_1", + "step_executeCommand_assertCommand_c9bd6c5f6_7_1", + "step_executeCommand_execute_c9bd6c5f6_7_1", + "step_executeCommand_open_c9bd6c5f6_7_2", + "step_executeCommand_assertPalette_c9bd6c5f6_7_2", + "step_executeCommand_filter_c9bd6c5f6_7_2", + "step_executeCommand_assertCommand_c9bd6c5f6_7_2", + "step_executeCommand_execute_c9bd6c5f6_7_2", + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3", + "step_clickPrimaryAction_click_c9bd6c5f6_7_3", + "step_assertNotificationContains_assert_c9bd6c5f6_7_4", + "step_executeCommand_open_c9bd6c5f6_8_1", + "step_executeCommand_assertPalette_c9bd6c5f6_8_1", + "step_executeCommand_filter_c9bd6c5f6_8_1", + "step_executeCommand_assertCommand_c9bd6c5f6_8_1", + "step_executeCommand_execute_c9bd6c5f6_8_1", + "step_filterOption_filter_c9bd6c5f6_8_2", + "step_filterOption_assertOption_c9bd6c5f6_8_2", + "step_filterOption_confirm_c9bd6c5f6_8_2", + "step_assertReady_assertReady_c9bd6c5f6_8_3", + "step_addAndOpenApp_assertAdd_c9bd6c5f6_9_1", + "step_addAndOpenApp_add_c9bd6c5f6_9_1", + "step_addAndOpenApp_assertAdded_c9bd6c5f6_9_1", + "step_addAndOpenApp_open_c9bd6c5f6_9_1", + "step_addAndOpenApp_assertReady_c9bd6c5f6_9_1", + "step_sendTeamsMessage_assertInput_c9bd6c5f6_10_1", + "step_sendTeamsMessage_focusInput_c9bd6c5f6_10_1", + "step_sendTeamsMessage_type_c9bd6c5f6_10_1", + "step_sendTeamsMessage_send_c9bd6c5f6_10_1", + "step_assertChatReplied_assert_c9bd6c5f6_10_2" + ], + "tags": [ + "case_id:basic-cea-py-azure-openai-remote-teams", + "scenario_id:SCN-CREATE-BASIC-CEA-01", + "template_id:basic-custom-engine-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c9bd6c5f6_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c9bd6c5f6_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c9bd6c5f6_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c9bd6c5f6_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c9bd6c5f6_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c9bd6c5f6_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c9bd6c5f6_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c9bd6c5f6_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c9bd6c5f6_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c9bd6c5f6_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c9bd6c5f6_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c9bd6c5f6_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c9bd6c5f6_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c9bd6c5f6_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Basic Custom Engine Agent" + }, + "description": "Type the resolved option label Basic Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Basic Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c9bd6c5f6_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c9bd6c5f6_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c9bd6c5f6_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c9bd6c5f6_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c9bd6c5f6_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c9bd6c5f6_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c9bd6c5f6_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c9bd6c5f6_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c9bd6c5f6_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c9bd6c5f6_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c9bd6c5f6_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c9bd6c5f6_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c9bd6c5f6_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c9bd6c5f6_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c9bd6c5f6_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python" + }, + "description": "Type the resolved option label Python into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c9bd6c5f6_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c9bd6c5f6_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c9bd6c5f6_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c9bd6c5f6_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c9bd6c5f6_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c9bd6c5f6_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c9bd6c5f6_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c9bd6c5f6_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c9bd6c5f6_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c9bd6c5f6_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJwcm92aXNpb246IiwiZGVwbG95OiJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c9bd6c5f6_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hcHAucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5weSIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9jb25maWcucHkiLCJleGlzdHMiOnRydWUsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9yZXF1aXJlbWVudHMudHh0IiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJtaWNyb3NvZnQtYWdlbnRzLWhvc3RpbmctYWlvaHR0cCIsIm9wZW5haSJdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_8", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c9bd6c5f6_2_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python: Create Environment..." + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Python: Create Environment... and the highlighted command listed under it is titled Python: Create Environment....", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c9bd6c5f6_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Venv" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c9bd6c5f6_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Venv is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c9bd6c5f6_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c9bd6c5f6_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c9bd6c5f6_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_filter_c9bd6c5f6_3_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Python 3.12" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c9bd6c5f6_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c9bd6c5f6_3_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Python 3.12 is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c9bd6c5f6_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c9bd6c5f6_3_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c9bd6c5f6_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_multiSelect_assertQuestion_c9bd6c5f6_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active multi-select prompt titled Select dependencies to install is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c9bd6c5f6_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_multiSelect_assertOptionsLoaded_c9bd6c5f6_3_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertQuestion_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_multiSelect_focusSelectAll_c9bd6c5f6_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "shift+tab" + }, + "description": "Move focus from the multi-select input box to the select-all checkbox of the prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_assertOptionsLoaded_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_selectAll_c9bd6c5f6_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "space" + }, + "description": "Press Space to check every option of the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_focusSelectAll_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_restoreFocus_c9bd6c5f6_3_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "tab" + }, + "description": "Move focus from the select-all checkbox back to the multi-select input box.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_selectAll_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_multiSelect_confirm_c9bd6c5f6_3_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the multi-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_restoreFocus_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:multiSelect" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_multiSelect_confirm_c9bd6c5f6_3_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_3_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_3_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_3_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_3_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains The following environment is selected:.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_3_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c9bd6c5f6_3_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInAzure_assertOption_c9bd6c5f6_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry labeled Sign in to Azure.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInAzure_selectOption_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 165, + "y": 127 + }, + "description": "Click the \"Sign in to Azure\" entry in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertOption_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:165:127:16:5:5819353567ef55aa", + "dhash:165:127:96:5:2cd1259b9b941a6a", + "dhash:165:127:0:10:a2942223a3222421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_confirmSignIn_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 534, + "y": 98 + }, + "description": "Click the \"Sign in\" button on the Microsoft authentication popup in Visual Studio Code to proceed with Azure authorization for the Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_selectOption_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:534:98:16:5:554a54555555468f", + "dhash:534:98:96:5:0002740b0a700800", + "dhash:534:98:0:10:12322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_allow_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 457, + "y": 96 + }, + "description": "Click the \"Allow\" button in the Microsoft 365 sign-in prompt to authorize the extension \"Microsoft 365 Agents Toolkit\" within Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_confirmSignIn_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:457:96:16:5:524d5552564cb3ca", + "dhash:457:96:96:5:0004609c0c600400", + "dhash:457:96:0:10:d2322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_focusAccount_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 432, + "y": 327 + }, + "description": "Click on the \"Email, phone, or Skype\" input field in the Microsoft sign-in dialog on the login.microsoftonline.com webpage to activate text entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_allow_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:432:327:16:5:114c134b4a13b2cc", + "dhash:432:327:96:5:686000a2a95500cb", + "dhash:432:327:0:10:1361717965617935" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_typeAccount_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Azure account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_focusAccount_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28d0d9e7e4dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_next_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 631, + "y": 462 + }, + "description": "Click the \"Next\" button on the Microsoft sign-in page to continue Azure authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typeAccount_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:631:462:16:5:0000000091000000", + "dhash:631:462:96:5:000000004e31314e", + "dhash:631:462:0:10:1392f0dac6e6d8e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "ocr:true" + ] + }, + { + "step_id": "step_signInAzure_typePassword_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Azure account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_next_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60", + "delay:5" + ] + }, + { + "step_id": "step_signInAzure_submit_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter in the password field on the Microsoft login page to submit the Azure credentials.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typePassword_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_closeBrowser_c9bd6c5f6_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 991, + "y": 18 + }, + "description": "Click the red close (X) button in the top-right corner of the Google Chrome window to close the Visual Studio Code sign-in confirmation page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_submit_c9bd6c5f6_4_2" + ], + "preconditions": [ + "dhash:991:18:16:5:b020624245454242", + "dhash:991:18:96:5:629393936a903232", + "dhash:991:18:0:10:0021410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_assertReady_c9bd6c5f6_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:AZURE_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_closeBrowser_c9bd6c5f6_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertReady_c9bd6c5f6_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertOption_c9bd6c5f6_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365FromPicker_selectOption_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertOption_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_confirmSignIn_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_selectOption_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_useAnotherAccount_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 447, + "y": 487 + }, + "description": "Click the \"Use another account\" option on the Microsoft \"Pick an account\" login screen in Google Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_confirmSignIn_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:447:487:16:5:ac534b4aaaaa6a15", + "dhash:447:487:96:5:0100228d15a20000", + "dhash:447:487:0:10:1312e8d89ed6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365FromPicker_typeAccount_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field the account picker opened.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_useAnotherAccount_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392f8d8c6e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_next_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 655, + "y": 505 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typeAccount_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:655:505:16:5:0000000080400020", + "dhash:655:505:96:5:0000408bcb4b0000", + "dhash:655:505:0:10:1392f8d8c7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365FromPicker_typePassword_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_next_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_submit_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typePassword_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_closeBrowser_c9bd6c5f6_5_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1008, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_submit_c9bd6c5f6_5_2" + ], + "preconditions": [ + "dhash:1008:19:16:5:a322c95a325ac922", + "dhash:1008:19:96:5:926363639200c6c4", + "dhash:1008:19:0:10:1312094769614541" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertReady_c9bd6c5f6_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_closeBrowser_c9bd6c5f6_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertReady_c9bd6c5f6_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_6_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Select a resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "+ New resource group" + }, + "description": "Type the resolved option label + New resource group into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option + New resource group is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_6_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New resource group name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c9bd6c5f6_6_4", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name}}-rg" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c9bd6c5f6_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c9bd6c5f6_6_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c9bd6c5f6_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Location for the new resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c9bd6c5f6_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c9bd6c5f6_6_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c9bd6c5f6_6_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:RESOURCE_GROUP_REGION}}" + }, + "description": "Type the resolved option label ${{env:RESOURCE_GROUP_REGION}} into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option ${{env:RESOURCE_GROUP_REGION}} is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c9bd6c5f6_6_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c9bd6c5f6_6_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Costs may apply based on usage. Do you want to provision resources in dev environment using listed accounts? is visible with the primary action Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c9bd6c5f6_6_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_6_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Provision in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_6_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains provision stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c9bd6c5f6_6_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c9bd6c5f6_6_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_7_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_7_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_7_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Do you want to deploy resources in dev environment? is visible with the primary action Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Deploy in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains actions in deploy stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c9bd6c5f6_8_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c9bd6c5f6_7_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_8_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_8_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c9bd6c5f6_8_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Launch Remote (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c9bd6c5f6_8_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Launch Remote (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c9bd6c5f6_8_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c9bd6c5f6_8_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c9bd6c5f6_8_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c9bd6c5f6_8_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c9bd6c5f6_8_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c9bd6c5f6_9_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c9bd6c5f6_9_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c9bd6c5f6_9_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c9bd6c5f6_9_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c9bd6c5f6_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c9bd6c5f6_9_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c9bd6c5f6_9_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c9bd6c5f6_9_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c9bd6c5f6_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_c9bd6c5f6_10_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_c9bd6c5f6_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_c9bd6c5f6_10_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_c9bd6c5f6_10_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_c9bd6c5f6_10_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "How to develop agent for Teams?" + }, + "description": "Type \"How to develop agent for Teams?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_c9bd6c5f6_10_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_c9bd6c5f6_10_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_c9bd6c5f6_10_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c9bd6c5f6_10_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_c9bd6c5f6_10_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} From 4f6f6f3fd033d4449019183f20846e0e947adac2 Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 13:59:32 +0800 Subject: [PATCH 3/9] test(vscuse): cover the full weather agent LLM, language, and launch matrix Authors the weather bundle as the complete Azure OpenAI / OpenAI x TypeScript / JavaScript x remote / local Teams launch matrix, and samples the remaining surfaces once: Copilot remote, Copilot local, and Playground on both languages. Adds the (Preview) Launch Remote in Copilot (Chrome) target adapter, which unlike the declarative-agent preview requires deploy because a custom engine agent answers from a deployed bot. OpenAI cases stop at the launched surface: the run configuration declares no openai.com key and the recordings they replace type a placeholder, so only the OpenAI scaffold branch and lifecycle are honestly covered. Adds AC rows VCB-72, VCB-73, and VCB-74. Generated plans go from eighteen to twenty-five. --- .../product/compile-vscuse-case-bundles.md | 10 +- .../vscuse/vscode-test-cases/cases/README.md | 18 +- .../cases/legacy-case-mapping.md | 64 +- .../vscode-test-cases/cases/weather-agent.yml | 180 +- .../engine/semantic-step-compiler.cjs | 14 + .../engine/semantic-step-compiler.test.cjs | 64 +- .../plans/.vscuse-generated-plans | 11 +- ...--weather-js-azure-openai-local-teams.json | 2203 ++++++++++ ...t--weather-js-azure-openai-playground.json | 1688 ++++++++ ...-weather-js-azure-openai-remote-teams.json | 3496 ++++++++++++++++ ...-agent--weather-js-openai-local-teams.json | 1912 +++++++++ ...gent--weather-js-openai-remote-teams.json} | 814 ++-- ...eather-ts-azure-openai-remote-copilot.json | 3638 +++++++++++++++++ ...weather-ts-azure-openai-remote-teams.json} | 898 ++-- ...-agent--weather-ts-openai-local-teams.json | 1960 +++++++++ ...agent--weather-ts-openai-remote-teams.json | 3253 +++++++++++++++ 16 files changed, 19317 insertions(+), 906 deletions(-) create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json rename packages/tests/vscuse/vscode-test-cases/plans/{weather-agent--weather-js-openai-remote-preview.json => weather-agent--weather-js-openai-remote-teams.json} (78%) create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json rename packages/tests/vscuse/vscode-test-cases/plans/{weather-agent--weather-ts-azure-openai-remote-preview.json => weather-agent--weather-ts-azure-openai-remote-teams.json} (78%) create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json create mode 100644 packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index 50517384e25..35d84028eb9 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -322,7 +322,8 @@ reached `chat-ready`. `target` is one authored F5 operation that selects and starts its declared launch profile. The current adapters support the remote profiles `Launch Remote in Teams (Chrome)`, -`Launch Remote (Chrome)`, and `Preview in Copilot (Chrome)`, and the local debug profiles +`Launch Remote (Chrome)`, `Preview in Copilot (Chrome)`, and +`(Preview) Launch Remote in Copilot (Chrome)`, and the local debug profiles `Debug in Teams (Chrome)`, `(Preview) Debug in Copilot (Chrome)`, and `Debug in Microsoft 365 Agents Playground`; any other exact title fails until a deterministic adapter is added. The @@ -1119,11 +1120,14 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-64 | Given a `target` whose profile is a local debug profile, the adapter requires no `provision` and no `deploy`, because the profile's own `preLaunchTask` chain runs the local lifecycle before the app starts, so authoring the remote lifecycle commands would create Azure resources the local run never reads. | | VCB-65 | Given the `Debug in Microsoft 365 Agents Playground` target, the adapter requires no `login` and emits no browser sign-in, because the Playground serves the agent from the local machine and never authenticates the run against Microsoft 365. | | VCB-66 | Given a `chat` check whose target is the Agents Playground, the compiler emits the Playground message adapter, because the Playground renders its own `Type a message...` composer rather than the Teams or Copilot one. | -| VCB-67 | Given a `pythonEnvironment` operation, the compiler drives `Python: Create Environment...` through the `Venv` environment type, the authored interpreter, and the `Select dependencies to install` prompt, because a Python scaffold ships a `src/requirements.txt` the scaffold itself never installs and every launch profile starts the app from the workspace interpreter. | +| VCB-67 | Given a `pythonEnvironment` operation, the compiler drives `Python: Create Environment...` through the `Venv` environment type, the authored interpreter, and the `Select dependencies to install` prompt, because a Python scaffold ships a `src/requirements.txt` the scaffold itself never installs and every launch profile starts the app from the workspace interpreter. | | VCB-68 | Given a `pythonEnvironment` operation, the interpreter is authored per case rather than fixed by the compiler, because the label the picker shows is the patch version the runner image happens to carry and a compiler-owned literal would break on every image bump. | | VCB-69 | Given a `pythonEnvironment` operation, the environment type and interpreter are chosen by filtering the picker on their labels instead of clicking a row, because both pickers list a machine-dependent number of entries and a row's position carries no meaning the recording can pin. | -| VCB-70 | Given a `pythonEnvironment` operation, the notification center is opened before the completion assertion, because creating the virtual environment and installing its requirements takes minutes and the notification the Python extension raises is the only visible signal that the environment is selected. | +| VCB-70 | Given a `pythonEnvironment` operation, the notification center is opened before the completion assertion, because creating the virtual environment and installing its requirements takes minutes and the notification the Python extension raises is the only visible signal that the environment is selected. | | VCB-71 | Given the `Launch Remote (Chrome)` target, the adapter reaches the Teams app details page through the same add-and-open transition as `Launch Remote in Teams (Chrome)`, because the Python templates only rename that profile and leave the browser flow it launches unchanged. | +| VCB-72 | Given the weather agent bundle, every combination of LLM service and language is authored against both the remote and the local Teams launch, because each language is a separate template package and each launch drives a separate lifecycle, so a combination that is never authored is never covered. | +| VCB-73 | Given a weather agent case whose LLM service is OpenAI, the case launches the target but asserts no chat completion, because the run configuration declares no openai.com key and the recordings these cases replace type a placeholder, so what the case can honestly cover is the OpenAI branch of the scaffold question tree and the lifecycle that follows it. | +| VCB-74 | Given the `(Preview) Launch Remote in Copilot (Chrome)` target, the adapter requires provision and deploy, unlike `Preview in Copilot (Chrome)`, because a custom engine agent answers from a bot the deploy stage publishes while a declarative agent answers from a definition the provision stage uploads. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/cases/README.md b/packages/tests/vscuse/vscode-test-cases/cases/README.md index 9728922ac0d..6256a851d68 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/README.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/README.md @@ -9,14 +9,14 @@ migration inventory and coverage status. ## Initial coverage -| File | Template family | Cases | Contract pressure | -| ------------------------------------- | ------------------------------------- | ----: | --------------------------------------------------------------------------------------------------- | -| `weather-agent.yml` | Custom Engine Agent | 5 | language subtrees, Azure lifecycle, Teams app/chat activation, local Teams/Copilot/Playground debug | -| `basic-custom-engine-agent.yml` | Custom Engine Agent | 3 | Python scaffolding, virtual environment creation, Python launch profile titles | -| `da-no-action.yml` | Declarative Agent | 1 | negative file assertions, Copilot agent discoverability | -| `da-mcp-server.yml` | Declarative Agent with MCP action | 3 | conditional auth inputs, pipeline mutations, Copilot discoverability | -| `da-api-plugin-from-scratch.yml` | Declarative Agent with new API action | 2 | language branches and no-auth API plugin output | -| `da-api-plugin-from-existing-api.yml` | Declarative Agent with existing API | 4 | no auth, API key, bearer, OAuth provision, and remote preview | +| File | Template family | Cases | Contract pressure | +| ------------------------------------- | ------------------------------------- | ----: | -------------------------------------------------------------------------------------------- | +| `weather-agent.yml` | Custom Engine Agent | 12 | full LLM x language x Teams launch matrix, Azure lifecycle, Copilot remote/local, Playground | +| `basic-custom-engine-agent.yml` | Custom Engine Agent | 3 | Python scaffolding, virtual environment creation, Python launch profile titles | +| `da-no-action.yml` | Declarative Agent | 1 | negative file assertions, Copilot agent discoverability | +| `da-mcp-server.yml` | Declarative Agent with MCP action | 3 | conditional auth inputs, pipeline mutations, Copilot discoverability | +| `da-api-plugin-from-scratch.yml` | Declarative Agent with new API action | 2 | language branches and no-auth API plugin output | +| `da-api-plugin-from-existing-api.yml` | Declarative Agent with existing API | 4 | no auth, API key, bearer, OAuth provision, and remote preview | ## Model findings @@ -44,7 +44,7 @@ Authoring these fixtures exposed six gaps in the first contract draft: proves capability outcomes. The default setup parses, validates, and expands these sources, then resolves their semantic steps -through the compiler-owned adapter and reusable components into eighteen independent runnable VScUse +through the compiler-owned adapter and reusable components into twenty-five independent runnable VScUse plans. The case YAML is the only authored template/scenario source. Setup prints the generated-plan diff before transactionally updating only manifest-owned files. A custom semantic-step adapter may still be injected by focused compiler and writer tests. diff --git a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md index 3945fe5da7d..d4bf46741e1 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md @@ -6,29 +6,53 @@ It is a migration inventory, not an instruction to delete legacy plans automatic ## Status - **Full**: the generated case covers the legacy scenario intent with semantic steps and file checks. +- **Partial**: the generated case covers the legacy scaffold and lifecycle but stops short of the + legacy chat validation. ## Mapping -| YAML source | New case ID | Generated plan | Legacy plan | Status | Coverage note | -| ------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `weather-agent.yml` | `weather-ts-azure-openai-remote-preview` | `weather-agent--weather-ts-azure-openai-remote-preview.json` | `Weather_Agent_ts_remote_debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Teams remote launch, and chat validation. | -| `weather-agent.yml` | `weather-js-openai-remote-preview` | `weather-agent--weather-js-openai-remote-preview.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Full | Weather Agent, OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-local-teams` | `weather-agent--weather-ts-azure-openai-local-teams.json` | `Weather_Agent_ts_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | -| `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | -| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-remote-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Remote_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, provision, deploy, Teams remote launch, and chat validation. | -| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-local-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Local_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, local Teams debug launch, and chat validation. | -| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-playground` | `basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json` | `Basic_Custom_Engine_Azure_OpenAI_py_playground.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, Agents Playground launch, and chat validation. | -| `da-no-action.yml` | `da-no-action-remote-preview` | `da-no-action--da-no-action-remote-preview.json` | `DA_No_Action_Remote_Debug.json` | Full | No-action scaffold, generated files, provision, and Copilot remote preview. | -| `da-mcp-server.yml` | `da-mcp-remote-none-preview` | `da-mcp-server--da-mcp-remote-none-preview.json` | `DA_MCP_None_Remote.json` | Full | Remote MCP with no authentication, dynamic tool discovery checks, provision, and Copilot preview. | -| `da-mcp-server.yml` | `da-mcp-remote-oauth-preview` | `da-mcp-server--da-mcp-remote-oauth-preview.json` | `DA_MCP_Oauth_Remote.json` | Full | Remote MCP with OAuth credentials and pipeline/file assertions. | -| `da-mcp-server.yml` | `da-mcp-remote-entra-preview` | `da-mcp-server--da-mcp-remote-entra-preview.json` | `DA_MCP_Entra_SSO_Remote.json` | Full | Remote MCP with Microsoft Entra SSO and pipeline/file assertions. | -| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-ts` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json` | `DA_None_ts_Remote_Debug.json` | Full | New API + None auth + TypeScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | -| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-js` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json` | `DA_None_js_Remote_Debug.json` | Full | New API + None auth + JavaScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-no-auth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_No_Auth.json` | Full | No-auth scaffold/file validation, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-api-key-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_API_Key.json` | Full | API Key scaffold, protected credential input, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-bearer-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Bearer_token.json` | Full | Bearer scaffold, protected token input, provision, and Copilot remote preview. | -| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-oauth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_OAuth.json` | Full | OAuth scaffold, protected client credentials, provision, Copilot remote preview, and sign-in action assertion. | +| YAML source | New case ID | Generated plan | Legacy plan | Status | Coverage note | +| ------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `weather-agent.yml` | `weather-ts-azure-openai-remote-teams` | `weather-agent--weather-ts-azure-openai-remote-teams.json` | `Weather_Agent_ts_remote_debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Teams remote launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-teams` | `weather-agent--weather-ts-azure-openai-local-teams.json` | `Weather_Agent_ts_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation. | +| `weather-agent.yml` | `weather-js-azure-openai-remote-teams` | `weather-agent--weather-js-azure-openai-remote-teams.json` | `Weather_Agent_js_remote_debug.json` | Full | Weather Agent, Azure OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | +| `weather-agent.yml` | `weather-js-azure-openai-local-teams` | `weather-agent--weather-js-azure-openai-local-teams.json` | `Weather_Agent_js_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, JavaScript, Microsoft 365 login, local Teams debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-openai-remote-teams` | `weather-agent--weather-ts-openai-remote-teams.json` | `Weather_Agent_OpenAI_ts_Remote_Debug.json` | Partial | OpenAI scaffold branch, TypeScript, provision, deploy, and Teams remote launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-ts-openai-local-teams` | `weather-agent--weather-ts-openai-local-teams.json` | `Weather_Agent_OpenAI_ts_Local_Debug.json` | Partial | OpenAI scaffold branch, TypeScript, Microsoft 365 login, and local Teams debug launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-js-openai-remote-teams` | `weather-agent--weather-js-openai-remote-teams.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Partial | OpenAI scaffold branch, JavaScript, provision, deploy, and Teams remote launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-js-openai-local-teams` | `weather-agent--weather-js-openai-local-teams.json` | `Weather_Agent_OpenAI_js_Local_Debug.json` | Partial | OpenAI scaffold branch, JavaScript, Microsoft 365 login, and local Teams debug launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-ts-azure-openai-remote-copilot` | `weather-agent--weather-ts-azure-openai-remote-copilot.json` | `Weather_Agent_ts_remote_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Copilot remote launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | +| `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | +| `weather-agent.yml` | `weather-js-azure-openai-playground` | `weather-agent--weather-js-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_js_playground.json` | Full | Weather Agent, Azure OpenAI, JavaScript, Agents Playground launch with no sign-in, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-remote-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Remote_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, provision, deploy, Teams remote launch, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-local-teams` | `basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json` | `Basic_Custom_Engine_Agent_Azure_OpenAI_py_Local_Debug.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, local Teams debug launch, and chat validation. | +| `basic-custom-engine-agent.yml` | `basic-cea-py-azure-openai-playground` | `basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json` | `Basic_Custom_Engine_Azure_OpenAI_py_playground.json` | Full | Basic Custom Engine Agent, Azure OpenAI, Python, virtual environment creation, Agents Playground launch, and chat validation. | +| `da-no-action.yml` | `da-no-action-remote-preview` | `da-no-action--da-no-action-remote-preview.json` | `DA_No_Action_Remote_Debug.json` | Full | No-action scaffold, generated files, provision, and Copilot remote preview. | +| `da-mcp-server.yml` | `da-mcp-remote-none-preview` | `da-mcp-server--da-mcp-remote-none-preview.json` | `DA_MCP_None_Remote.json` | Full | Remote MCP with no authentication, dynamic tool discovery checks, provision, and Copilot preview. | +| `da-mcp-server.yml` | `da-mcp-remote-oauth-preview` | `da-mcp-server--da-mcp-remote-oauth-preview.json` | `DA_MCP_Oauth_Remote.json` | Full | Remote MCP with OAuth credentials and pipeline/file assertions. | +| `da-mcp-server.yml` | `da-mcp-remote-entra-preview` | `da-mcp-server--da-mcp-remote-entra-preview.json` | `DA_MCP_Entra_SSO_Remote.json` | Full | Remote MCP with Microsoft Entra SSO and pipeline/file assertions. | +| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-ts` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json` | `DA_None_ts_Remote_Debug.json` | Full | New API + None auth + TypeScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | +| `da-api-plugin-from-scratch.yml` | `da-api-plugin-from-scratch-js` | `da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json` | `DA_None_js_Remote_Debug.json` | Full | New API + None auth + JavaScript scaffold/file validation, provision, Copilot remote preview, action consent, and repair response validation. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-no-auth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_No_Auth.json` | Full | No-auth scaffold/file validation, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-api-key-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_API_Key.json` | Full | API Key scaffold, protected credential input, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-bearer-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Bearer_token.json` | Full | Bearer scaffold, protected token input, provision, and Copilot remote preview. | +| `da-api-plugin-from-existing-api.yml` | `da-api-plugin-from-existing-api-oauth-remote-preview` | `da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json` | `DA_Add_Action_Import_Existing_API_Basic_OAuth.json` | Full | OAuth scaffold, protected client credentials, provision, Copilot remote preview, and sign-in action assertion. | + +## Legacy Weather Plans Not Mapped + +The legacy weather corpus is the full two LLM services by two languages by five surfaces matrix, so +it holds twenty plans. The twelve cases above cover the whole LLM-by-language-by-Teams-launch matrix +and sample each remaining surface once. The eight unmapped plans cross a language or an LLM service +with the Copilot and Playground surfaces: +`Weather_Agent_js_local_copilot.json`, `Weather_Agent_js_remote_copilot.json`, +`Weather_Agent_OpenAI_ts_Copilot_Local_Debug.json`, `Weather_Agent_OpenAI_ts_Copilot_Remote_Debug.json`, +`Weather_Agent_OpenAI_js_Copilot_Local_Debug.json`, `Weather_Agent_OpenAI_js_Copilot_Remote_Debug.json`, +`Weather_Agent_OpenAI_ts_playground.json`, and `Weather_Agent_OpenAI_js_playground.json`. +The runtime files those crossings would exercise are byte-identical between the TypeScript and +JavaScript packages — `m365agents.yml`, `m365agents.local.yml`, `m365agents.playground.yml`, and +`launch.json` all match — so the surface is already covered once and the language is already covered +against both Teams launches. ## Legacy Plan Not Mapped diff --git a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml index e8017b8e454..b8afc396fa1 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml +++ b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml @@ -1,7 +1,13 @@ version: 1 +# The first eight cases are the full LLM x language x launch matrix. Language is +# a genuinely different template package, so every language gets its own launch +# and, where a real key exists, its own completion. Launch and language are +# orthogonal — m365agents.yml and launch.json are byte-identical between the +# TypeScript and JavaScript packages — so the remaining surfaces are sampled once +# rather than crossed with every language. cases: - - id: weather-ts-azure-openai-remote-preview + - id: weather-ts-azure-openai-remote-teams scenarioId: SCN-CREATE-WEATHER-01 steps: [ @@ -16,10 +22,81 @@ cases: check-weather-chat, ] - # No chat check: CI has no funded openai.com key, so this case covers the - # JavaScript/OpenAI scaffold and lifecycle only. Real completions are verified - # by the Azure OpenAI case above. - - id: weather-js-openai-remote-preview + # Local debug: the launch profile's preLaunchTask chain registers the app, + # starts the tunnel, and runs the local lifecycle itself, so the case authors + # neither provision nor deploy. Only the Microsoft 365 account is signed in, + # because the local run reads no Azure resources. + - id: weather-ts-azure-openai-local-teams + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-ts-azure-openai, + check-weather-ts, + login-m365, + f5-teams-local, + open-app, + check-weather-chat, + ] + + - id: weather-js-azure-openai-remote-teams + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-js-azure-openai, + check-weather-js, + login-azure, + login-m365, + provision-arm, + deploy, + f5-teams-remote, + open-app, + check-weather-chat, + ] + + - id: weather-js-azure-openai-local-teams + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-js-azure-openai, + check-weather-js, + login-m365, + f5-teams-local, + open-app, + check-weather-chat, + ] + + # The OpenAI half of the matrix ends at the launched surface and asserts no + # completion. config.yaml declares no openai.com key, and the recordings these + # cases replace type a placeholder key for the same reason. What they do cover + # is the OpenAI branch of the scaffold question tree, which asks for a single + # key instead of an endpoint and a deployment name, and the different generated + # configuration that follows from it. + - id: weather-ts-openai-remote-teams + scenarioId: SCN-CREATE-WEATHER-03 + steps: + [ + scaffold-weather-ts-openai, + check-weather-ts, + login-azure, + login-m365, + provision-arm, + deploy, + f5-teams-remote, + open-app, + ] + + - id: weather-ts-openai-local-teams + scenarioId: SCN-CREATE-WEATHER-03 + steps: + [ + scaffold-weather-ts-openai, + check-weather-ts, + login-m365, + f5-teams-local, + open-app, + ] + + - id: weather-js-openai-remote-teams scenarioId: SCN-CREATE-WEATHER-03 steps: [ @@ -33,19 +110,32 @@ cases: open-app, ] - # Local debug: the launch profile's preLaunchTask chain registers the app, - # starts the tunnel, and runs the local lifecycle itself, so the case authors - # neither provision nor deploy. Only the Microsoft 365 account is signed in, - # because the local run reads no Azure resources. - - id: weather-ts-azure-openai-local-teams + - id: weather-js-openai-local-teams + scenarioId: SCN-CREATE-WEATHER-03 + steps: + [ + scaffold-weather-js-openai, + check-weather-js, + login-m365, + f5-teams-local, + open-app, + ] + + # Surfaces beyond Teams, sampled on the canonical TypeScript + Azure OpenAI + # combination. A custom engine agent previewed in Copilot needs its bot + # deployed first, unlike a declarative agent. + - id: weather-ts-azure-openai-remote-copilot scenarioId: SCN-CREATE-WEATHER-01 steps: [ scaffold-weather-ts-azure-openai, check-weather-ts, + login-azure, login-m365, - f5-teams-local, - open-app, + provision-arm, + deploy, + f5-copilot-remote, + open-agent, check-weather-chat, ] @@ -75,6 +165,17 @@ cases: check-weather-chat, ] + - id: weather-js-azure-openai-playground + scenarioId: SCN-CREATE-WEATHER-01 + steps: + [ + scaffold-weather-js-azure-openai, + check-weather-js, + f5-playground, + open-app, + check-weather-chat, + ] + steps: scaffold-weather-ts-azure-openai: type: scaffold @@ -138,6 +239,56 @@ steps: expect: contains: ['"manifestVersion": "1.29"'] + scaffold-weather-ts-openai: + type: scaffold + with: + template: weather-agent + answers: + - question: projectType + value: custom-engine-agent-type + - question: customEngineAgent + value: weather-agent + - question: llmService + value: llm-service-openai + - question: openAIKey + type: text + value: "${{secret:OPENAI_API_KEY}}" + - question: language + value: typescript + - question: workspaceFolder + value: default + - question: appName + type: text + value: "${{var:app_name:vscuse_app_#####}}" + + scaffold-weather-js-azure-openai: + type: scaffold + with: + template: weather-agent + answers: + - question: projectType + value: custom-engine-agent-type + - question: customEngineAgent + value: weather-agent + - question: llmService + value: llm-service-azure-openai + - question: azureOpenAIKey + type: text + value: "${{secret:AZURE_OPENAI_API_KEY}}" + - question: azureOpenAIEndpoint + type: text + value: "${{env:AZURE_OPENAI_ENDPOINT}}" + - question: azureOpenAIDeploymentName + type: text + value: "${{env:AZURE_OPENAI_MODEL}}" + - question: language + value: javascript + - question: workspaceFolder + value: default + - question: appName + type: text + value: "${{var:app_name:vscuse_app_#####}}" + scaffold-weather-js-openai: type: scaffold with: @@ -231,6 +382,11 @@ steps: with: profile: "(Preview) Debug in Copilot (Chrome)" + f5-copilot-remote: + type: target + with: + profile: "(Preview) Launch Remote in Copilot (Chrome)" + f5-playground: type: target with: diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index 14ba155d9ca..bfc00c5189a 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -292,6 +292,20 @@ const targetAdapters = { "an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot", requires: ["login:m365", "provision"], }, + // A custom engine agent is hosted on Azure, so its Copilot preview needs the + // deployed bot behind it. The declarative-agent preview above needs only + // provision, because the toolkit uploads the agent definition itself. + "(Preview) Launch Remote in Copilot (Chrome)": { + browserAuthentication: { + component: "authentication/browser/m365-sign-in.json.tpl", + credentials: "m365", + }, + host: "copilot", + open: { adapter: "ready", destination: "chat", kind: "agent" }, + readySubject: + "an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot", + requires: ["login:azure", "login:m365", "provision", "deploy"], + }, // The local debug profiles below carry a preLaunchTask chain that validates // prerequisites, registers the app, starts the tunnel, and runs the local // lifecycle before the application starts, so they require no authored diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 4f0fe228485..739be0a7c58 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -108,7 +108,7 @@ test("VCB-34: semantic compiler does not read external template contracts", asyn } }); -test("VCB-34: default setup compiles the checked-in YAML sources into eighteen plans", async (context) => { +test("VCB-34: default setup compiles the checked-in YAML sources into twenty-five plans", async (context) => { const plansDirectory = await fs.mkdtemp( path.join(os.tmpdir(), "vscuse-generated-"), ); @@ -121,9 +121,9 @@ test("VCB-34: default setup compiles the checked-in YAML sources into eighteen p }); assert.equal(first.ok, true); - assert.equal(first.value.files.length, 18); + assert.equal(first.value.files.length, 25); const generatedFiles = first.value.files; - assert.equal(generatedFiles.length, 18); + assert.equal(generatedFiles.length, 25); assert.equal( generatedFiles.includes( "da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth.json", @@ -828,7 +828,7 @@ test("provision confirmation follows the authored provision input", async (conte await fs.readFile( path.join( plansDirectory, - "weather-agent--weather-ts-azure-openai-remote-preview.json", + "weather-agent--weather-ts-azure-openai-remote-teams.json", ), "utf8", ), @@ -1423,6 +1423,62 @@ test("VCB-71: the Python remote Teams target opens the app through the Teams add ); }); +test("VCB-72: the weather bundle authors every LLM, language, and Teams launch combination", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const caseIds = new Set(result.value.map((generated) => generated.caseId)); + for (const llm of ["azure-openai", "openai"]) { + for (const language of ["ts", "js"]) { + for (const launch of ["remote-teams", "local-teams"]) { + assert.equal( + caseIds.has(`weather-${language}-${llm}-${launch}`), + true, + `weather-${language}-${llm}-${launch} is not authored`, + ); + } + } + } +}); + +test("VCB-73: an OpenAI weather case launches its target and asserts no chat completion", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + for (const generated of result.value) { + if (!generated.caseId.includes("-openai-")) { + continue; + } + const isAzure = generated.caseId.includes("-azure-openai-"); + const sendsAMessage = generated.plan.steps.some((step) => + /^step_send(Teams|Copilot|Playground)Message_/.test(step.step_id || ""), + ); + assert.equal( + sendsAMessage, + isAzure, + `${generated.caseId} sends ${sendsAMessage ? "a" : "no"} chat message`, + ); + } +}); + +test("VCB-74: the remote Copilot target requires provision and deploy", async () => { + const result = await compileFixture("weather-agent.yml", (sourceText) => + sourceText.replace( + " deploy,\n f5-copilot-remote,", + " f5-copilot-remote,", + ), + ); + + assert.equal(result.ok, false); + assert.equal(result.diagnostics[0].code, "VCB_TARGET_PREREQUISITE"); +}); + test("VCB-26: an already-ready Copilot target makes its open emit no step", async () => { const result = await compileFixture( "da-no-action.yml", diff --git a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans index 8b26072bc00..b7b4b5fb3ec 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans +++ b/packages/tests/vscuse/vscode-test-cases/plans/.vscuse-generated-plans @@ -14,10 +14,17 @@ "da-mcp-server--da-mcp-remote-none-preview.json", "da-mcp-server--da-mcp-remote-oauth-preview.json", "da-no-action--da-no-action-remote-preview.json", - "weather-agent--weather-js-openai-remote-preview.json", + "weather-agent--weather-js-azure-openai-local-teams.json", + "weather-agent--weather-js-azure-openai-playground.json", + "weather-agent--weather-js-azure-openai-remote-teams.json", + "weather-agent--weather-js-openai-local-teams.json", + "weather-agent--weather-js-openai-remote-teams.json", "weather-agent--weather-ts-azure-openai-local-copilot.json", "weather-agent--weather-ts-azure-openai-local-teams.json", "weather-agent--weather-ts-azure-openai-playground.json", - "weather-agent--weather-ts-azure-openai-remote-preview.json" + "weather-agent--weather-ts-azure-openai-remote-copilot.json", + "weather-agent--weather-ts-azure-openai-remote-teams.json", + "weather-agent--weather-ts-openai-local-teams.json", + "weather-agent--weather-ts-openai-remote-teams.json" ] } diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json new file mode 100644 index 00000000000..6bbe14f3014 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json @@ -0,0 +1,2203 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_966c17f1d243", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 92, + "name": "weather-js-azure-openai-local-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c65c229e7_1_1", + "step_closeWelcomeOverlay_close_c65c229e7_1_1", + "step_closeWelcomeOverlay_assertReady_c65c229e7_1_1", + "step_executeCommand_open_c65c229e7_1_2", + "step_executeCommand_assertPalette_c65c229e7_1_2", + "step_executeCommand_filter_c65c229e7_1_2", + "step_executeCommand_assertCommand_c65c229e7_1_2", + "step_executeCommand_execute_c65c229e7_1_2", + "step_assertToolkitViewSettled_assert_c65c229e7_1_3", + "step_closeGetStartedEditor_assertActive_c65c229e7_1_4", + "step_closeGetStartedEditor_close_c65c229e7_1_4", + "step_closeGetStartedEditor_assertClosed_c65c229e7_1_4", + "step_executeCommand_open_c65c229e7_1_5", + "step_executeCommand_assertPalette_c65c229e7_1_5", + "step_executeCommand_filter_c65c229e7_1_5", + "step_executeCommand_assertCommand_c65c229e7_1_5", + "step_executeCommand_execute_c65c229e7_1_5", + "step_singleSelect_assertQuestion_c65c229e7_1_6", + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_6", + "step_singleSelect_filter_c65c229e7_1_6", + "step_singleSelect_assertOption_c65c229e7_1_6", + "step_singleSelect_confirm_c65c229e7_1_6", + "step_singleSelect_assertQuestion_c65c229e7_1_7", + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_7", + "step_singleSelect_filter_c65c229e7_1_7", + "step_singleSelect_assertOption_c65c229e7_1_7", + "step_singleSelect_confirm_c65c229e7_1_7", + "step_singleSelect_assertQuestion_c65c229e7_1_8", + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_8", + "step_singleSelect_filter_c65c229e7_1_8", + "step_singleSelect_assertOption_c65c229e7_1_8", + "step_singleSelect_confirm_c65c229e7_1_8", + "step_textInput_assertQuestion_c65c229e7_1_9", + "step_textInput_input_c65c229e7_1_9", + "step_textInput_confirm_c65c229e7_1_9", + "step_textInput_assertQuestion_c65c229e7_1_10", + "step_textInput_input_c65c229e7_1_10", + "step_textInput_confirm_c65c229e7_1_10", + "step_textInput_assertQuestion_c65c229e7_1_11", + "step_textInput_input_c65c229e7_1_11", + "step_textInput_confirm_c65c229e7_1_11", + "step_singleSelect_assertQuestion_c65c229e7_1_12", + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_12", + "step_singleSelect_filter_c65c229e7_1_12", + "step_singleSelect_assertOption_c65c229e7_1_12", + "step_singleSelect_confirm_c65c229e7_1_12", + "step_confirmOption_assertPrompt_c65c229e7_1_13", + "step_confirmOption_confirm_c65c229e7_1_13", + "step_textInput_assertQuestion_c65c229e7_1_14", + "step_textInput_input_c65c229e7_1_14", + "step_textInput_confirm_c65c229e7_1_14", + "step_assertProjectWindowReady_assert_c65c229e7_1_15", + "step_checkWorkspaceFiles_verify_c65c229e7_2_1", + "step_checkWorkspaceFiles_verify_c65c229e7_2_2", + "step_checkWorkspaceFiles_verify_c65c229e7_2_3", + "step_checkWorkspaceFiles_verify_c65c229e7_2_4", + "step_checkWorkspaceFiles_verify_c65c229e7_2_5", + "step_executeCommand_open_c65c229e7_3_1", + "step_executeCommand_assertPalette_c65c229e7_3_1", + "step_executeCommand_filter_c65c229e7_3_1", + "step_executeCommand_assertCommand_c65c229e7_3_1", + "step_executeCommand_execute_c65c229e7_3_1", + "step_signInM365_assertOption_c65c229e7_3_2", + "step_signInM365_selectOption_c65c229e7_3_2", + "step_signInM365_confirmSignIn_c65c229e7_3_2", + "step_signInM365_focusAccount_c65c229e7_3_2", + "step_signInM365_typeAccount_c65c229e7_3_2", + "step_signInM365_next_c65c229e7_3_2", + "step_signInM365_typePassword_c65c229e7_3_2", + "step_signInM365_submit_c65c229e7_3_2", + "step_signInM365_closeBrowser_c65c229e7_3_2", + "step_signInM365_assertReady_c65c229e7_3_2", + "step_executeCommand_open_c65c229e7_4_1", + "step_executeCommand_assertPalette_c65c229e7_4_1", + "step_executeCommand_filter_c65c229e7_4_1", + "step_executeCommand_assertCommand_c65c229e7_4_1", + "step_executeCommand_execute_c65c229e7_4_1", + "step_filterOption_filter_c65c229e7_4_2", + "step_filterOption_assertOption_c65c229e7_4_2", + "step_filterOption_confirm_c65c229e7_4_2", + "step_assertReady_assertReady_c65c229e7_4_3", + "step_addAndOpenApp_assertAdd_c65c229e7_5_1", + "step_addAndOpenApp_add_c65c229e7_5_1", + "step_addAndOpenApp_assertAdded_c65c229e7_5_1", + "step_addAndOpenApp_open_c65c229e7_5_1", + "step_addAndOpenApp_assertReady_c65c229e7_5_1", + "step_sendTeamsMessage_assertInput_c65c229e7_6_1", + "step_sendTeamsMessage_focusInput_c65c229e7_6_1", + "step_sendTeamsMessage_type_c65c229e7_6_1", + "step_sendTeamsMessage_send_c65c229e7_6_1", + "step_assertChatReplied_assert_c65c229e7_6_2", + "step_assertChatContains_assert_c65c229e7_6_3" + ], + "tags": [ + "case_id:weather-js-azure-openai-local-teams", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c65c229e7_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c65c229e7_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c65c229e7_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c65c229e7_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c65c229e7_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c65c229e7_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c65c229e7_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c65c229e7_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c65c229e7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c65c229e7_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c65c229e7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c65c229e7_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c65c229e7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c65c229e7_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c65c229e7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c65c229e7_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c65c229e7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c65c229e7_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c65c229e7_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c65c229e7_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c65c229e7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c65c229e7_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c65c229e7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c65c229e7_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c65c229e7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c65c229e7_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c65c229e7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c65c229e7_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c65c229e7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c65c229e7_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c65c229e7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c65c229e7_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c65c229e7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c65c229e7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c65c229e7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c65c229e7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c65c229e7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c65c229e7_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c65c229e7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c65c229e7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c65c229e7_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c65c229e7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c65c229e7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c65c229e7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c65c229e7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c65c229e7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c65c229e7_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c65c229e7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c65c229e7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c65c229e7_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c65c229e7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c65c229e7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c65c229e7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c65c229e7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c65c229e7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c65c229e7_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c65c229e7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c65c229e7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c65c229e7_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c65c229e7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c65c229e7_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c65c229e7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c65c229e7_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c65c229e7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c65c229e7_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c65c229e7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c65c229e7_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c65c229e7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c65c229e7_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c65c229e7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c65c229e7_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c65c229e7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c65c229e7_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c65c229e7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c65c229e7_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c65c229e7_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c65c229e7_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c65c229e7_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c65c229e7_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c65c229e7_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c65c229e7_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c65c229e7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c65c229e7_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "JavaScript" + }, + "description": "Type the resolved option label JavaScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c65c229e7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c65c229e7_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option JavaScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c65c229e7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c65c229e7_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c65c229e7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c65c229e7_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c65c229e7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c65c229e7_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c65c229e7_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c65c229e7_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c65c229e7_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c65c229e7_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c65c229e7_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c65c229e7_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c65c229e7_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c65c229e7_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c65c229e7_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c65c229e7_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c65c229e7_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c65c229e7_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c65c229e7_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c65c229e7_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c65c229e7_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c65c229e7_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJzdGFydFwiIiwiXCJkZXY6dGVhbXNmeFwiIl0sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c65c229e7_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c65c229e7_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c65c229e7_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c65c229e7_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c65c229e7_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c65c229e7_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c65c229e7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c65c229e7_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c65c229e7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c65c229e7_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c65c229e7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c65c229e7_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c65c229e7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_c65c229e7_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c65c229e7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_c65c229e7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_c65c229e7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_c65c229e7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_c65c229e7_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_c65c229e7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_c65c229e7_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_c65c229e7_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_c65c229e7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_c65c229e7_3_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_c65c229e7_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_c65c229e7_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c65c229e7_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_c65c229e7_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c65c229e7_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c65c229e7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c65c229e7_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c65c229e7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c65c229e7_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c65c229e7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c65c229e7_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c65c229e7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c65c229e7_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c65c229e7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c65c229e7_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c65c229e7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c65c229e7_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c65c229e7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c65c229e7_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c65c229e7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c65c229e7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c65c229e7_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c65c229e7_5_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c65c229e7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c65c229e7_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c65c229e7_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c65c229e7_5_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c65c229e7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c65c229e7_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_c65c229e7_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_c65c229e7_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_c65c229e7_6_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_c65c229e7_6_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_c65c229e7_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_c65c229e7_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_c65c229e7_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_c65c229e7_6_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c65c229e7_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_c65c229e7_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_c65c229e7_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_c65c229e7_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json new file mode 100644 index 00000000000..e2af81a2aab --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json @@ -0,0 +1,1688 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_fe7df427419e", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 72, + "name": "weather-js-azure-openai-playground", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_cabaadc0f_1_1", + "step_closeWelcomeOverlay_close_cabaadc0f_1_1", + "step_closeWelcomeOverlay_assertReady_cabaadc0f_1_1", + "step_executeCommand_open_cabaadc0f_1_2", + "step_executeCommand_assertPalette_cabaadc0f_1_2", + "step_executeCommand_filter_cabaadc0f_1_2", + "step_executeCommand_assertCommand_cabaadc0f_1_2", + "step_executeCommand_execute_cabaadc0f_1_2", + "step_assertToolkitViewSettled_assert_cabaadc0f_1_3", + "step_closeGetStartedEditor_assertActive_cabaadc0f_1_4", + "step_closeGetStartedEditor_close_cabaadc0f_1_4", + "step_closeGetStartedEditor_assertClosed_cabaadc0f_1_4", + "step_executeCommand_open_cabaadc0f_1_5", + "step_executeCommand_assertPalette_cabaadc0f_1_5", + "step_executeCommand_filter_cabaadc0f_1_5", + "step_executeCommand_assertCommand_cabaadc0f_1_5", + "step_executeCommand_execute_cabaadc0f_1_5", + "step_singleSelect_assertQuestion_cabaadc0f_1_6", + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_6", + "step_singleSelect_filter_cabaadc0f_1_6", + "step_singleSelect_assertOption_cabaadc0f_1_6", + "step_singleSelect_confirm_cabaadc0f_1_6", + "step_singleSelect_assertQuestion_cabaadc0f_1_7", + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_7", + "step_singleSelect_filter_cabaadc0f_1_7", + "step_singleSelect_assertOption_cabaadc0f_1_7", + "step_singleSelect_confirm_cabaadc0f_1_7", + "step_singleSelect_assertQuestion_cabaadc0f_1_8", + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_8", + "step_singleSelect_filter_cabaadc0f_1_8", + "step_singleSelect_assertOption_cabaadc0f_1_8", + "step_singleSelect_confirm_cabaadc0f_1_8", + "step_textInput_assertQuestion_cabaadc0f_1_9", + "step_textInput_input_cabaadc0f_1_9", + "step_textInput_confirm_cabaadc0f_1_9", + "step_textInput_assertQuestion_cabaadc0f_1_10", + "step_textInput_input_cabaadc0f_1_10", + "step_textInput_confirm_cabaadc0f_1_10", + "step_textInput_assertQuestion_cabaadc0f_1_11", + "step_textInput_input_cabaadc0f_1_11", + "step_textInput_confirm_cabaadc0f_1_11", + "step_singleSelect_assertQuestion_cabaadc0f_1_12", + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_12", + "step_singleSelect_filter_cabaadc0f_1_12", + "step_singleSelect_assertOption_cabaadc0f_1_12", + "step_singleSelect_confirm_cabaadc0f_1_12", + "step_confirmOption_assertPrompt_cabaadc0f_1_13", + "step_confirmOption_confirm_cabaadc0f_1_13", + "step_textInput_assertQuestion_cabaadc0f_1_14", + "step_textInput_input_cabaadc0f_1_14", + "step_textInput_confirm_cabaadc0f_1_14", + "step_assertProjectWindowReady_assert_cabaadc0f_1_15", + "step_checkWorkspaceFiles_verify_cabaadc0f_2_1", + "step_checkWorkspaceFiles_verify_cabaadc0f_2_2", + "step_checkWorkspaceFiles_verify_cabaadc0f_2_3", + "step_checkWorkspaceFiles_verify_cabaadc0f_2_4", + "step_checkWorkspaceFiles_verify_cabaadc0f_2_5", + "step_executeCommand_open_cabaadc0f_3_1", + "step_executeCommand_assertPalette_cabaadc0f_3_1", + "step_executeCommand_filter_cabaadc0f_3_1", + "step_executeCommand_assertCommand_cabaadc0f_3_1", + "step_executeCommand_execute_cabaadc0f_3_1", + "step_filterOption_filter_cabaadc0f_3_2", + "step_filterOption_assertOption_cabaadc0f_3_2", + "step_filterOption_confirm_cabaadc0f_3_2", + "step_assertReady_assertReady_cabaadc0f_3_3", + "step_sendPlaygroundMessage_assertInput_cabaadc0f_5_1", + "step_sendPlaygroundMessage_focusInput_cabaadc0f_5_1", + "step_sendPlaygroundMessage_type_cabaadc0f_5_1", + "step_sendPlaygroundMessage_send_cabaadc0f_5_1", + "step_assertChatReplied_assert_cabaadc0f_5_2", + "step_assertChatContains_assert_cabaadc0f_5_3" + ], + "tags": [ + "case_id:weather-js-azure-openai-playground", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_cabaadc0f_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_cabaadc0f_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_cabaadc0f_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_cabaadc0f_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_cabaadc0f_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cabaadc0f_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_cabaadc0f_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cabaadc0f_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cabaadc0f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cabaadc0f_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cabaadc0f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cabaadc0f_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cabaadc0f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cabaadc0f_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cabaadc0f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_cabaadc0f_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cabaadc0f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_cabaadc0f_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_cabaadc0f_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_cabaadc0f_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_cabaadc0f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_cabaadc0f_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_cabaadc0f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cabaadc0f_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_cabaadc0f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cabaadc0f_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cabaadc0f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cabaadc0f_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cabaadc0f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cabaadc0f_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cabaadc0f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cabaadc0f_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cabaadc0f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cabaadc0f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cabaadc0f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cabaadc0f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cabaadc0f_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cabaadc0f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cabaadc0f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cabaadc0f_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cabaadc0f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cabaadc0f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cabaadc0f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cabaadc0f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cabaadc0f_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cabaadc0f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cabaadc0f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cabaadc0f_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cabaadc0f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cabaadc0f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cabaadc0f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cabaadc0f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cabaadc0f_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cabaadc0f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cabaadc0f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cabaadc0f_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cabaadc0f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cabaadc0f_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cabaadc0f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cabaadc0f_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cabaadc0f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cabaadc0f_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cabaadc0f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cabaadc0f_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cabaadc0f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cabaadc0f_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cabaadc0f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cabaadc0f_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cabaadc0f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cabaadc0f_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cabaadc0f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cabaadc0f_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cabaadc0f_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cabaadc0f_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cabaadc0f_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cabaadc0f_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cabaadc0f_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cabaadc0f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cabaadc0f_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "JavaScript" + }, + "description": "Type the resolved option label JavaScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cabaadc0f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cabaadc0f_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option JavaScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cabaadc0f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cabaadc0f_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cabaadc0f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_cabaadc0f_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cabaadc0f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_cabaadc0f_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_cabaadc0f_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cabaadc0f_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_cabaadc0f_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cabaadc0f_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cabaadc0f_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cabaadc0f_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cabaadc0f_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_cabaadc0f_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cabaadc0f_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cabaadc0f_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_cabaadc0f_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cabaadc0f_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cabaadc0f_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cabaadc0f_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cabaadc0f_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cabaadc0f_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJzdGFydFwiIiwiXCJkZXY6dGVhbXNmeFwiIl0sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cabaadc0f_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cabaadc0f_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cabaadc0f_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_cabaadc0f_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cabaadc0f_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cabaadc0f_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cabaadc0f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cabaadc0f_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cabaadc0f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cabaadc0f_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cabaadc0f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cabaadc0f_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cabaadc0f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_cabaadc0f_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Microsoft 365 Agents Playground" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cabaadc0f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_cabaadc0f_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Microsoft 365 Agents Playground is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_cabaadc0f_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_cabaadc0f_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_cabaadc0f_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_cabaadc0f_3_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Playground page is open in the browser.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_cabaadc0f_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_assertInput_cabaadc0f_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Agents Playground \"Type a message...\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_cabaadc0f_3_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_focusInput_cabaadc0f_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 176, + "y": 710 + }, + "description": "Click the Agents Playground \"Type a message...\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_assertInput_cabaadc0f_5_1" + ], + "preconditions": [ + "dhash:176:710:16:5:00000000006858d8", + "dhash:176:710:96:5:00000000303a8000", + "dhash:176:710:0:10:5c4a03c080828240" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_type_cabaadc0f_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Agents Playground message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_focusInput_cabaadc0f_5_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendPlaygroundMessage_send_cabaadc0f_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Agents Playground message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_type_cabaadc0f_5_1" + ], + "preconditions": [ + "dhash:512:384:0:20:5c4a03c080828260" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:playground", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_cabaadc0f_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendPlaygroundMessage_send_cabaadc0f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_cabaadc0f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_cabaadc0f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json new file mode 100644 index 00000000000..fb41ab969a6 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -0,0 +1,3496 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_916019b2a9fd", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 147, + "name": "weather-js-azure-openai-remote-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c1d26615d_1_1", + "step_closeWelcomeOverlay_close_c1d26615d_1_1", + "step_closeWelcomeOverlay_assertReady_c1d26615d_1_1", + "step_executeCommand_open_c1d26615d_1_2", + "step_executeCommand_assertPalette_c1d26615d_1_2", + "step_executeCommand_filter_c1d26615d_1_2", + "step_executeCommand_assertCommand_c1d26615d_1_2", + "step_executeCommand_execute_c1d26615d_1_2", + "step_assertToolkitViewSettled_assert_c1d26615d_1_3", + "step_closeGetStartedEditor_assertActive_c1d26615d_1_4", + "step_closeGetStartedEditor_close_c1d26615d_1_4", + "step_closeGetStartedEditor_assertClosed_c1d26615d_1_4", + "step_executeCommand_open_c1d26615d_1_5", + "step_executeCommand_assertPalette_c1d26615d_1_5", + "step_executeCommand_filter_c1d26615d_1_5", + "step_executeCommand_assertCommand_c1d26615d_1_5", + "step_executeCommand_execute_c1d26615d_1_5", + "step_singleSelect_assertQuestion_c1d26615d_1_6", + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_6", + "step_singleSelect_filter_c1d26615d_1_6", + "step_singleSelect_assertOption_c1d26615d_1_6", + "step_singleSelect_confirm_c1d26615d_1_6", + "step_singleSelect_assertQuestion_c1d26615d_1_7", + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_7", + "step_singleSelect_filter_c1d26615d_1_7", + "step_singleSelect_assertOption_c1d26615d_1_7", + "step_singleSelect_confirm_c1d26615d_1_7", + "step_singleSelect_assertQuestion_c1d26615d_1_8", + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_8", + "step_singleSelect_filter_c1d26615d_1_8", + "step_singleSelect_assertOption_c1d26615d_1_8", + "step_singleSelect_confirm_c1d26615d_1_8", + "step_textInput_assertQuestion_c1d26615d_1_9", + "step_textInput_input_c1d26615d_1_9", + "step_textInput_confirm_c1d26615d_1_9", + "step_textInput_assertQuestion_c1d26615d_1_10", + "step_textInput_input_c1d26615d_1_10", + "step_textInput_confirm_c1d26615d_1_10", + "step_textInput_assertQuestion_c1d26615d_1_11", + "step_textInput_input_c1d26615d_1_11", + "step_textInput_confirm_c1d26615d_1_11", + "step_singleSelect_assertQuestion_c1d26615d_1_12", + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_12", + "step_singleSelect_filter_c1d26615d_1_12", + "step_singleSelect_assertOption_c1d26615d_1_12", + "step_singleSelect_confirm_c1d26615d_1_12", + "step_confirmOption_assertPrompt_c1d26615d_1_13", + "step_confirmOption_confirm_c1d26615d_1_13", + "step_textInput_assertQuestion_c1d26615d_1_14", + "step_textInput_input_c1d26615d_1_14", + "step_textInput_confirm_c1d26615d_1_14", + "step_assertProjectWindowReady_assert_c1d26615d_1_15", + "step_checkWorkspaceFiles_verify_c1d26615d_2_1", + "step_checkWorkspaceFiles_verify_c1d26615d_2_2", + "step_checkWorkspaceFiles_verify_c1d26615d_2_3", + "step_checkWorkspaceFiles_verify_c1d26615d_2_4", + "step_checkWorkspaceFiles_verify_c1d26615d_2_5", + "step_executeCommand_open_c1d26615d_3_1", + "step_executeCommand_assertPalette_c1d26615d_3_1", + "step_executeCommand_filter_c1d26615d_3_1", + "step_executeCommand_assertCommand_c1d26615d_3_1", + "step_executeCommand_execute_c1d26615d_3_1", + "step_signInAzure_assertOption_c1d26615d_3_2", + "step_signInAzure_selectOption_c1d26615d_3_2", + "step_signInAzure_confirmSignIn_c1d26615d_3_2", + "step_signInAzure_allow_c1d26615d_3_2", + "step_signInAzure_focusAccount_c1d26615d_3_2", + "step_signInAzure_typeAccount_c1d26615d_3_2", + "step_signInAzure_next_c1d26615d_3_2", + "step_signInAzure_typePassword_c1d26615d_3_2", + "step_signInAzure_submit_c1d26615d_3_2", + "step_signInAzure_closeBrowser_c1d26615d_3_2", + "step_signInAzure_assertReady_c1d26615d_3_2", + "step_executeCommand_open_c1d26615d_4_1", + "step_executeCommand_assertPalette_c1d26615d_4_1", + "step_executeCommand_filter_c1d26615d_4_1", + "step_executeCommand_assertCommand_c1d26615d_4_1", + "step_executeCommand_execute_c1d26615d_4_1", + "step_signInM365FromPicker_assertOption_c1d26615d_4_2", + "step_signInM365FromPicker_selectOption_c1d26615d_4_2", + "step_signInM365FromPicker_confirmSignIn_c1d26615d_4_2", + "step_signInM365FromPicker_useAnotherAccount_c1d26615d_4_2", + "step_signInM365FromPicker_typeAccount_c1d26615d_4_2", + "step_signInM365FromPicker_next_c1d26615d_4_2", + "step_signInM365FromPicker_typePassword_c1d26615d_4_2", + "step_signInM365FromPicker_submit_c1d26615d_4_2", + "step_signInM365FromPicker_closeBrowser_c1d26615d_4_2", + "step_signInM365FromPicker_assertReady_c1d26615d_4_2", + "step_executeCommand_open_c1d26615d_5_1", + "step_executeCommand_assertPalette_c1d26615d_5_1", + "step_executeCommand_filter_c1d26615d_5_1", + "step_executeCommand_assertCommand_c1d26615d_5_1", + "step_executeCommand_execute_c1d26615d_5_1", + "step_executeCommand_open_c1d26615d_5_2", + "step_executeCommand_assertPalette_c1d26615d_5_2", + "step_executeCommand_filter_c1d26615d_5_2", + "step_executeCommand_assertCommand_c1d26615d_5_2", + "step_executeCommand_execute_c1d26615d_5_2", + "step_singleSelect_assertQuestion_c1d26615d_5_3", + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3", + "step_singleSelect_filter_c1d26615d_5_3", + "step_singleSelect_assertOption_c1d26615d_5_3", + "step_singleSelect_confirm_c1d26615d_5_3", + "step_textInput_assertQuestion_c1d26615d_5_4", + "step_textInput_input_c1d26615d_5_4", + "step_textInput_confirm_c1d26615d_5_4", + "step_singleSelect_assertQuestion_c1d26615d_5_5", + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5", + "step_singleSelect_filter_c1d26615d_5_5", + "step_singleSelect_assertOption_c1d26615d_5_5", + "step_singleSelect_confirm_c1d26615d_5_5", + "step_clickPrimaryAction_assertDialog_c1d26615d_5_6", + "step_clickPrimaryAction_click_c1d26615d_5_6", + "step_assertNotificationContains_assert_c1d26615d_5_7", + "step_executeCommand_open_c1d26615d_6_1", + "step_executeCommand_assertPalette_c1d26615d_6_1", + "step_executeCommand_filter_c1d26615d_6_1", + "step_executeCommand_assertCommand_c1d26615d_6_1", + "step_executeCommand_execute_c1d26615d_6_1", + "step_executeCommand_open_c1d26615d_6_2", + "step_executeCommand_assertPalette_c1d26615d_6_2", + "step_executeCommand_filter_c1d26615d_6_2", + "step_executeCommand_assertCommand_c1d26615d_6_2", + "step_executeCommand_execute_c1d26615d_6_2", + "step_clickPrimaryAction_assertDialog_c1d26615d_6_3", + "step_clickPrimaryAction_click_c1d26615d_6_3", + "step_assertNotificationContains_assert_c1d26615d_6_4", + "step_executeCommand_open_c1d26615d_7_1", + "step_executeCommand_assertPalette_c1d26615d_7_1", + "step_executeCommand_filter_c1d26615d_7_1", + "step_executeCommand_assertCommand_c1d26615d_7_1", + "step_executeCommand_execute_c1d26615d_7_1", + "step_filterOption_filter_c1d26615d_7_2", + "step_filterOption_assertOption_c1d26615d_7_2", + "step_filterOption_confirm_c1d26615d_7_2", + "step_assertReady_assertReady_c1d26615d_7_3", + "step_addAndOpenApp_assertAdd_c1d26615d_8_1", + "step_addAndOpenApp_add_c1d26615d_8_1", + "step_addAndOpenApp_assertAdded_c1d26615d_8_1", + "step_addAndOpenApp_open_c1d26615d_8_1", + "step_addAndOpenApp_assertReady_c1d26615d_8_1", + "step_sendTeamsMessage_assertInput_c1d26615d_9_1", + "step_sendTeamsMessage_focusInput_c1d26615d_9_1", + "step_sendTeamsMessage_type_c1d26615d_9_1", + "step_sendTeamsMessage_send_c1d26615d_9_1", + "step_assertChatReplied_assert_c1d26615d_9_2", + "step_assertChatContains_assert_c1d26615d_9_3" + ], + "tags": [ + "case_id:weather-js-azure-openai-remote-teams", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c1d26615d_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c1d26615d_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c1d26615d_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c1d26615d_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c1d26615d_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c1d26615d_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c1d26615d_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c1d26615d_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c1d26615d_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c1d26615d_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c1d26615d_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c1d26615d_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c1d26615d_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c1d26615d_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c1d26615d_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c1d26615d_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c1d26615d_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c1d26615d_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c1d26615d_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c1d26615d_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c1d26615d_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c1d26615d_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c1d26615d_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c1d26615d_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c1d26615d_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c1d26615d_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c1d26615d_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c1d26615d_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c1d26615d_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c1d26615d_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c1d26615d_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c1d26615d_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "JavaScript" + }, + "description": "Type the resolved option label JavaScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option JavaScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c1d26615d_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c1d26615d_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c1d26615d_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c1d26615d_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c1d26615d_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c1d26615d_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c1d26615d_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c1d26615d_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c1d26615d_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c1d26615d_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c1d26615d_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c1d26615d_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c1d26615d_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c1d26615d_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c1d26615d_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c1d26615d_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c1d26615d_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c1d26615d_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJzdGFydFwiIiwiXCJkZXY6dGVhbXNmeFwiIl0sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c1d26615d_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c1d26615d_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c1d26615d_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c1d26615d_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInAzure_assertOption_c1d26615d_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry labeled Sign in to Azure.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInAzure_selectOption_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 165, + "y": 127 + }, + "description": "Click the \"Sign in to Azure\" entry in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertOption_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:165:127:16:5:5819353567ef55aa", + "dhash:165:127:96:5:2cd1259b9b941a6a", + "dhash:165:127:0:10:a2942223a3222421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_confirmSignIn_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 534, + "y": 98 + }, + "description": "Click the \"Sign in\" button on the Microsoft authentication popup in Visual Studio Code to proceed with Azure authorization for the Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_selectOption_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:534:98:16:5:554a54555555468f", + "dhash:534:98:96:5:0002740b0a700800", + "dhash:534:98:0:10:12322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_allow_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 457, + "y": 96 + }, + "description": "Click the \"Allow\" button in the Microsoft 365 sign-in prompt to authorize the extension \"Microsoft 365 Agents Toolkit\" within Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_confirmSignIn_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:457:96:16:5:524d5552564cb3ca", + "dhash:457:96:96:5:0004609c0c600400", + "dhash:457:96:0:10:d2322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_focusAccount_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 432, + "y": 327 + }, + "description": "Click on the \"Email, phone, or Skype\" input field in the Microsoft sign-in dialog on the login.microsoftonline.com webpage to activate text entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_allow_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:432:327:16:5:114c134b4a13b2cc", + "dhash:432:327:96:5:686000a2a95500cb", + "dhash:432:327:0:10:1361717965617935" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_typeAccount_c1d26615d_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Azure account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_focusAccount_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28d0d9e7e4dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_next_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 631, + "y": 462 + }, + "description": "Click the \"Next\" button on the Microsoft sign-in page to continue Azure authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typeAccount_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:631:462:16:5:0000000091000000", + "dhash:631:462:96:5:000000004e31314e", + "dhash:631:462:0:10:1392f0dac6e6d8e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "ocr:true" + ] + }, + { + "step_id": "step_signInAzure_typePassword_c1d26615d_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Azure account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_next_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60", + "delay:5" + ] + }, + { + "step_id": "step_signInAzure_submit_c1d26615d_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter in the password field on the Microsoft login page to submit the Azure credentials.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typePassword_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_closeBrowser_c1d26615d_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 991, + "y": 18 + }, + "description": "Click the red close (X) button in the top-right corner of the Google Chrome window to close the Visual Studio Code sign-in confirmation page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_submit_c1d26615d_3_2" + ], + "preconditions": [ + "dhash:991:18:16:5:b020624245454242", + "dhash:991:18:96:5:629393936a903232", + "dhash:991:18:0:10:0021410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_assertReady_c1d26615d_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:AZURE_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_closeBrowser_c1d26615d_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertReady_c1d26615d_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertOption_c1d26615d_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365FromPicker_selectOption_c1d26615d_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertOption_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_confirmSignIn_c1d26615d_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_selectOption_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_useAnotherAccount_c1d26615d_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 447, + "y": 487 + }, + "description": "Click the \"Use another account\" option on the Microsoft \"Pick an account\" login screen in Google Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_confirmSignIn_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:447:487:16:5:ac534b4aaaaa6a15", + "dhash:447:487:96:5:0100228d15a20000", + "dhash:447:487:0:10:1312e8d89ed6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365FromPicker_typeAccount_c1d26615d_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field the account picker opened.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_useAnotherAccount_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392f8d8c6e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_next_c1d26615d_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 655, + "y": 505 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typeAccount_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:655:505:16:5:0000000080400020", + "dhash:655:505:96:5:0000408bcb4b0000", + "dhash:655:505:0:10:1392f8d8c7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365FromPicker_typePassword_c1d26615d_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_next_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_submit_c1d26615d_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typePassword_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_closeBrowser_c1d26615d_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1008, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_submit_c1d26615d_4_2" + ], + "preconditions": [ + "dhash:1008:19:16:5:a322c95a325ac922", + "dhash:1008:19:96:5:926363639200c6c4", + "dhash:1008:19:0:10:1312094769614541" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertReady_c1d26615d_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_closeBrowser_c1d26615d_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertReady_c1d26615d_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Select a resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "+ New resource group" + }, + "description": "Type the resolved option label + New resource group into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option + New resource group is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c1d26615d_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New resource group name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c1d26615d_5_4", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name}}-rg" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c1d26615d_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c1d26615d_5_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c1d26615d_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Location for the new resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c1d26615d_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c1d26615d_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c1d26615d_5_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:RESOURCE_GROUP_REGION}}" + }, + "description": "Type the resolved option label ${{env:RESOURCE_GROUP_REGION}} into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c1d26615d_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option ${{env:RESOURCE_GROUP_REGION}} is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c1d26615d_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c1d26615d_5_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c1d26615d_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_5_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Costs may apply based on usage. Do you want to provision resources in dev environment using listed accounts? is visible with the primary action Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c1d26615d_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c1d26615d_5_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Provision in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c1d26615d_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c1d26615d_5_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains provision stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c1d26615d_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c1d26615d_5_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_6_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Do you want to deploy resources in dev environment? is visible with the primary action Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c1d26615d_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Deploy in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c1d26615d_6_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains actions in deploy stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c1d26615d_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c1d26615d_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c1d26615d_7_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Launch Remote in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c1d26615d_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Launch Remote in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c1d26615d_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c1d26615d_7_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c1d26615d_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c1d26615d_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c1d26615d_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c1d26615d_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c1d26615d_8_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c1d26615d_8_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c1d26615d_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c1d26615d_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c1d26615d_8_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c1d26615d_8_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c1d26615d_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c1d26615d_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_c1d26615d_9_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_c1d26615d_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_c1d26615d_9_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_c1d26615d_9_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_c1d26615d_9_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_c1d26615d_9_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_c1d26615d_9_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_c1d26615d_9_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c1d26615d_9_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_c1d26615d_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_c1d26615d_9_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_c1d26615d_9_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json new file mode 100644 index 00000000000..187cedf4fa0 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json @@ -0,0 +1,1912 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_cbb1b917cee7", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 80, + "name": "weather-js-openai-local-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-03", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_ce0ec2ba7_1_1", + "step_closeWelcomeOverlay_close_ce0ec2ba7_1_1", + "step_closeWelcomeOverlay_assertReady_ce0ec2ba7_1_1", + "step_executeCommand_open_ce0ec2ba7_1_2", + "step_executeCommand_assertPalette_ce0ec2ba7_1_2", + "step_executeCommand_filter_ce0ec2ba7_1_2", + "step_executeCommand_assertCommand_ce0ec2ba7_1_2", + "step_executeCommand_execute_ce0ec2ba7_1_2", + "step_assertToolkitViewSettled_assert_ce0ec2ba7_1_3", + "step_closeGetStartedEditor_assertActive_ce0ec2ba7_1_4", + "step_closeGetStartedEditor_close_ce0ec2ba7_1_4", + "step_closeGetStartedEditor_assertClosed_ce0ec2ba7_1_4", + "step_executeCommand_open_ce0ec2ba7_1_5", + "step_executeCommand_assertPalette_ce0ec2ba7_1_5", + "step_executeCommand_filter_ce0ec2ba7_1_5", + "step_executeCommand_assertCommand_ce0ec2ba7_1_5", + "step_executeCommand_execute_ce0ec2ba7_1_5", + "step_singleSelect_assertQuestion_ce0ec2ba7_1_6", + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_6", + "step_singleSelect_filter_ce0ec2ba7_1_6", + "step_singleSelect_assertOption_ce0ec2ba7_1_6", + "step_singleSelect_confirm_ce0ec2ba7_1_6", + "step_singleSelect_assertQuestion_ce0ec2ba7_1_7", + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_7", + "step_singleSelect_filter_ce0ec2ba7_1_7", + "step_singleSelect_assertOption_ce0ec2ba7_1_7", + "step_singleSelect_confirm_ce0ec2ba7_1_7", + "step_singleSelect_assertQuestion_ce0ec2ba7_1_8", + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_8", + "step_singleSelect_filter_ce0ec2ba7_1_8", + "step_singleSelect_assertOption_ce0ec2ba7_1_8", + "step_singleSelect_confirm_ce0ec2ba7_1_8", + "step_textInput_assertQuestion_ce0ec2ba7_1_9", + "step_textInput_input_ce0ec2ba7_1_9", + "step_textInput_confirm_ce0ec2ba7_1_9", + "step_singleSelect_assertQuestion_ce0ec2ba7_1_10", + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_10", + "step_singleSelect_filter_ce0ec2ba7_1_10", + "step_singleSelect_assertOption_ce0ec2ba7_1_10", + "step_singleSelect_confirm_ce0ec2ba7_1_10", + "step_confirmOption_assertPrompt_ce0ec2ba7_1_11", + "step_confirmOption_confirm_ce0ec2ba7_1_11", + "step_textInput_assertQuestion_ce0ec2ba7_1_12", + "step_textInput_input_ce0ec2ba7_1_12", + "step_textInput_confirm_ce0ec2ba7_1_12", + "step_assertProjectWindowReady_assert_ce0ec2ba7_1_13", + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_1", + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_2", + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_3", + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_4", + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5", + "step_executeCommand_open_ce0ec2ba7_3_1", + "step_executeCommand_assertPalette_ce0ec2ba7_3_1", + "step_executeCommand_filter_ce0ec2ba7_3_1", + "step_executeCommand_assertCommand_ce0ec2ba7_3_1", + "step_executeCommand_execute_ce0ec2ba7_3_1", + "step_signInM365_assertOption_ce0ec2ba7_3_2", + "step_signInM365_selectOption_ce0ec2ba7_3_2", + "step_signInM365_confirmSignIn_ce0ec2ba7_3_2", + "step_signInM365_focusAccount_ce0ec2ba7_3_2", + "step_signInM365_typeAccount_ce0ec2ba7_3_2", + "step_signInM365_next_ce0ec2ba7_3_2", + "step_signInM365_typePassword_ce0ec2ba7_3_2", + "step_signInM365_submit_ce0ec2ba7_3_2", + "step_signInM365_closeBrowser_ce0ec2ba7_3_2", + "step_signInM365_assertReady_ce0ec2ba7_3_2", + "step_executeCommand_open_ce0ec2ba7_4_1", + "step_executeCommand_assertPalette_ce0ec2ba7_4_1", + "step_executeCommand_filter_ce0ec2ba7_4_1", + "step_executeCommand_assertCommand_ce0ec2ba7_4_1", + "step_executeCommand_execute_ce0ec2ba7_4_1", + "step_filterOption_filter_ce0ec2ba7_4_2", + "step_filterOption_assertOption_ce0ec2ba7_4_2", + "step_filterOption_confirm_ce0ec2ba7_4_2", + "step_assertReady_assertReady_ce0ec2ba7_4_3", + "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1", + "step_addAndOpenApp_add_ce0ec2ba7_5_1", + "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1", + "step_addAndOpenApp_open_ce0ec2ba7_5_1", + "step_addAndOpenApp_assertReady_ce0ec2ba7_5_1" + ], + "tags": [ + "case_id:weather-js-openai-local-teams", + "scenario_id:SCN-CREATE-WEATHER-03", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_ce0ec2ba7_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_ce0ec2ba7_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_ce0ec2ba7_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_ce0ec2ba7_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_ce0ec2ba7_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_ce0ec2ba7_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_ce0ec2ba7_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ce0ec2ba7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ce0ec2ba7_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ce0ec2ba7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ce0ec2ba7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ce0ec2ba7_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ce0ec2ba7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_ce0ec2ba7_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ce0ec2ba7_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_ce0ec2ba7_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_ce0ec2ba7_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_ce0ec2ba7_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_ce0ec2ba7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_ce0ec2ba7_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_ce0ec2ba7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_ce0ec2ba7_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_ce0ec2ba7_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ce0ec2ba7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ce0ec2ba7_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ce0ec2ba7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ce0ec2ba7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ce0ec2ba7_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ce0ec2ba7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_ce0ec2ba7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ce0ec2ba7_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_ce0ec2ba7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_ce0ec2ba7_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_ce0ec2ba7_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_ce0ec2ba7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_ce0ec2ba7_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_ce0ec2ba7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_ce0ec2ba7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_ce0ec2ba7_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_ce0ec2ba7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_ce0ec2ba7_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_ce0ec2ba7_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_ce0ec2ba7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_ce0ec2ba7_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_ce0ec2ba7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_ce0ec2ba7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_ce0ec2ba7_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_ce0ec2ba7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_ce0ec2ba7_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "OpenAI" + }, + "description": "Type the resolved option label OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_ce0ec2ba7_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_ce0ec2ba7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_ce0ec2ba7_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_ce0ec2ba7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_ce0ec2ba7_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_ce0ec2ba7_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_ce0ec2ba7_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_ce0ec2ba7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_ce0ec2ba7_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_ce0ec2ba7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_ce0ec2ba7_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_ce0ec2ba7_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_ce0ec2ba7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_ce0ec2ba7_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "JavaScript" + }, + "description": "Type the resolved option label JavaScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_ce0ec2ba7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_ce0ec2ba7_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option JavaScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_ce0ec2ba7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_ce0ec2ba7_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_ce0ec2ba7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_ce0ec2ba7_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_ce0ec2ba7_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_ce0ec2ba7_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_ce0ec2ba7_1_11" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_ce0ec2ba7_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_ce0ec2ba7_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_ce0ec2ba7_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_ce0ec2ba7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_ce0ec2ba7_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_ce0ec2ba7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_ce0ec2ba7_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_ce0ec2ba7_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_ce0ec2ba7_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC5qcyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJzdGFydFwiIiwiXCJkZXY6dGVhbXNmeFwiIl0sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6ZmFsc2UsImNvbnRhaW5zIjpbXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_ce0ec2ba7_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ce0ec2ba7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ce0ec2ba7_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ce0ec2ba7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ce0ec2ba7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ce0ec2ba7_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ce0ec2ba7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_ce0ec2ba7_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ce0ec2ba7_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_ce0ec2ba7_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_ce0ec2ba7_3_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_ce0ec2ba7_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_ce0ec2ba7_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_ce0ec2ba7_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_ce0ec2ba7_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ce0ec2ba7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ce0ec2ba7_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ce0ec2ba7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ce0ec2ba7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ce0ec2ba7_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ce0ec2ba7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_ce0ec2ba7_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ce0ec2ba7_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_ce0ec2ba7_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_ce0ec2ba7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_ce0ec2ba7_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_ce0ec2ba7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_ce0ec2ba7_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_ce0ec2ba7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_ce0ec2ba7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_ce0ec2ba7_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_ce0ec2ba7_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_ce0ec2ba7_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_ce0ec2ba7_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_ce0ec2ba7_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json similarity index 78% rename from packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-preview.json rename to packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index 0fe04c0c88d..cbdc74fdcfb 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -1,7 +1,7 @@ { "plan_metadata": { "version": "1.1", - "plan_id": "plan_ca281817a192", + "plan_id": "plan_6dff7c1ed859", "execution_context": { "delay_between_steps": 1, "stop_on_error": true, @@ -9,151 +9,151 @@ "precondition_retry_interval": 1 }, "total_steps": 135, - "name": "weather-js-openai-remote-preview", + "name": "weather-js-openai-remote-teams", "description": { "owner": "", "workitem": "SCN-CREATE-WEATHER-03", "other": "" }, "execution_order": [ - "step_closeWelcomeOverlay_assertVisible_c61edf2e8_1_1", - "step_closeWelcomeOverlay_close_c61edf2e8_1_1", - "step_closeWelcomeOverlay_assertReady_c61edf2e8_1_1", - "step_executeCommand_open_c61edf2e8_1_2", - "step_executeCommand_assertPalette_c61edf2e8_1_2", - "step_executeCommand_filter_c61edf2e8_1_2", - "step_executeCommand_assertCommand_c61edf2e8_1_2", - "step_executeCommand_execute_c61edf2e8_1_2", - "step_assertToolkitViewSettled_assert_c61edf2e8_1_3", - "step_closeGetStartedEditor_assertActive_c61edf2e8_1_4", - "step_closeGetStartedEditor_close_c61edf2e8_1_4", - "step_closeGetStartedEditor_assertClosed_c61edf2e8_1_4", - "step_executeCommand_open_c61edf2e8_1_5", - "step_executeCommand_assertPalette_c61edf2e8_1_5", - "step_executeCommand_filter_c61edf2e8_1_5", - "step_executeCommand_assertCommand_c61edf2e8_1_5", - "step_executeCommand_execute_c61edf2e8_1_5", - "step_singleSelect_assertQuestion_c61edf2e8_1_6", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_6", - "step_singleSelect_filter_c61edf2e8_1_6", - "step_singleSelect_assertOption_c61edf2e8_1_6", - "step_singleSelect_confirm_c61edf2e8_1_6", - "step_singleSelect_assertQuestion_c61edf2e8_1_7", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_7", - "step_singleSelect_filter_c61edf2e8_1_7", - "step_singleSelect_assertOption_c61edf2e8_1_7", - "step_singleSelect_confirm_c61edf2e8_1_7", - "step_singleSelect_assertQuestion_c61edf2e8_1_8", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_8", - "step_singleSelect_filter_c61edf2e8_1_8", - "step_singleSelect_assertOption_c61edf2e8_1_8", - "step_singleSelect_confirm_c61edf2e8_1_8", - "step_textInput_assertQuestion_c61edf2e8_1_9", - "step_textInput_input_c61edf2e8_1_9", - "step_textInput_confirm_c61edf2e8_1_9", - "step_singleSelect_assertQuestion_c61edf2e8_1_10", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_10", - "step_singleSelect_filter_c61edf2e8_1_10", - "step_singleSelect_assertOption_c61edf2e8_1_10", - "step_singleSelect_confirm_c61edf2e8_1_10", - "step_confirmOption_assertPrompt_c61edf2e8_1_11", - "step_confirmOption_confirm_c61edf2e8_1_11", - "step_textInput_assertQuestion_c61edf2e8_1_12", - "step_textInput_input_c61edf2e8_1_12", - "step_textInput_confirm_c61edf2e8_1_12", - "step_assertProjectWindowReady_assert_c61edf2e8_1_13", - "step_checkWorkspaceFiles_verify_c61edf2e8_2_1", - "step_checkWorkspaceFiles_verify_c61edf2e8_2_2", - "step_checkWorkspaceFiles_verify_c61edf2e8_2_3", - "step_checkWorkspaceFiles_verify_c61edf2e8_2_4", - "step_checkWorkspaceFiles_verify_c61edf2e8_2_5", - "step_executeCommand_open_c61edf2e8_3_1", - "step_executeCommand_assertPalette_c61edf2e8_3_1", - "step_executeCommand_filter_c61edf2e8_3_1", - "step_executeCommand_assertCommand_c61edf2e8_3_1", - "step_executeCommand_execute_c61edf2e8_3_1", - "step_signInAzure_assertOption_c61edf2e8_3_2", - "step_signInAzure_selectOption_c61edf2e8_3_2", - "step_signInAzure_confirmSignIn_c61edf2e8_3_2", - "step_signInAzure_allow_c61edf2e8_3_2", - "step_signInAzure_focusAccount_c61edf2e8_3_2", - "step_signInAzure_typeAccount_c61edf2e8_3_2", - "step_signInAzure_next_c61edf2e8_3_2", - "step_signInAzure_typePassword_c61edf2e8_3_2", - "step_signInAzure_submit_c61edf2e8_3_2", - "step_signInAzure_closeBrowser_c61edf2e8_3_2", - "step_signInAzure_assertReady_c61edf2e8_3_2", - "step_executeCommand_open_c61edf2e8_4_1", - "step_executeCommand_assertPalette_c61edf2e8_4_1", - "step_executeCommand_filter_c61edf2e8_4_1", - "step_executeCommand_assertCommand_c61edf2e8_4_1", - "step_executeCommand_execute_c61edf2e8_4_1", - "step_signInM365FromPicker_assertOption_c61edf2e8_4_2", - "step_signInM365FromPicker_selectOption_c61edf2e8_4_2", - "step_signInM365FromPicker_confirmSignIn_c61edf2e8_4_2", - "step_signInM365FromPicker_useAnotherAccount_c61edf2e8_4_2", - "step_signInM365FromPicker_typeAccount_c61edf2e8_4_2", - "step_signInM365FromPicker_next_c61edf2e8_4_2", - "step_signInM365FromPicker_typePassword_c61edf2e8_4_2", - "step_signInM365FromPicker_submit_c61edf2e8_4_2", - "step_signInM365FromPicker_closeBrowser_c61edf2e8_4_2", - "step_signInM365FromPicker_assertReady_c61edf2e8_4_2", - "step_executeCommand_open_c61edf2e8_5_1", - "step_executeCommand_assertPalette_c61edf2e8_5_1", - "step_executeCommand_filter_c61edf2e8_5_1", - "step_executeCommand_assertCommand_c61edf2e8_5_1", - "step_executeCommand_execute_c61edf2e8_5_1", - "step_executeCommand_open_c61edf2e8_5_2", - "step_executeCommand_assertPalette_c61edf2e8_5_2", - "step_executeCommand_filter_c61edf2e8_5_2", - "step_executeCommand_assertCommand_c61edf2e8_5_2", - "step_executeCommand_execute_c61edf2e8_5_2", - "step_singleSelect_assertQuestion_c61edf2e8_5_3", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_3", - "step_singleSelect_filter_c61edf2e8_5_3", - "step_singleSelect_assertOption_c61edf2e8_5_3", - "step_singleSelect_confirm_c61edf2e8_5_3", - "step_textInput_assertQuestion_c61edf2e8_5_4", - "step_textInput_input_c61edf2e8_5_4", - "step_textInput_confirm_c61edf2e8_5_4", - "step_singleSelect_assertQuestion_c61edf2e8_5_5", - "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_5", - "step_singleSelect_filter_c61edf2e8_5_5", - "step_singleSelect_assertOption_c61edf2e8_5_5", - "step_singleSelect_confirm_c61edf2e8_5_5", - "step_clickPrimaryAction_assertDialog_c61edf2e8_5_6", - "step_clickPrimaryAction_click_c61edf2e8_5_6", - "step_assertNotificationContains_assert_c61edf2e8_5_7", - "step_executeCommand_open_c61edf2e8_6_1", - "step_executeCommand_assertPalette_c61edf2e8_6_1", - "step_executeCommand_filter_c61edf2e8_6_1", - "step_executeCommand_assertCommand_c61edf2e8_6_1", - "step_executeCommand_execute_c61edf2e8_6_1", - "step_executeCommand_open_c61edf2e8_6_2", - "step_executeCommand_assertPalette_c61edf2e8_6_2", - "step_executeCommand_filter_c61edf2e8_6_2", - "step_executeCommand_assertCommand_c61edf2e8_6_2", - "step_executeCommand_execute_c61edf2e8_6_2", - "step_clickPrimaryAction_assertDialog_c61edf2e8_6_3", - "step_clickPrimaryAction_click_c61edf2e8_6_3", - "step_assertNotificationContains_assert_c61edf2e8_6_4", - "step_executeCommand_open_c61edf2e8_7_1", - "step_executeCommand_assertPalette_c61edf2e8_7_1", - "step_executeCommand_filter_c61edf2e8_7_1", - "step_executeCommand_assertCommand_c61edf2e8_7_1", - "step_executeCommand_execute_c61edf2e8_7_1", - "step_filterOption_filter_c61edf2e8_7_2", - "step_filterOption_assertOption_c61edf2e8_7_2", - "step_filterOption_confirm_c61edf2e8_7_2", - "step_assertReady_assertReady_c61edf2e8_7_3", - "step_addAndOpenApp_assertAdd_c61edf2e8_8_1", - "step_addAndOpenApp_add_c61edf2e8_8_1", - "step_addAndOpenApp_assertAdded_c61edf2e8_8_1", - "step_addAndOpenApp_open_c61edf2e8_8_1", - "step_addAndOpenApp_assertReady_c61edf2e8_8_1" + "step_closeWelcomeOverlay_assertVisible_c36a630d1_1_1", + "step_closeWelcomeOverlay_close_c36a630d1_1_1", + "step_closeWelcomeOverlay_assertReady_c36a630d1_1_1", + "step_executeCommand_open_c36a630d1_1_2", + "step_executeCommand_assertPalette_c36a630d1_1_2", + "step_executeCommand_filter_c36a630d1_1_2", + "step_executeCommand_assertCommand_c36a630d1_1_2", + "step_executeCommand_execute_c36a630d1_1_2", + "step_assertToolkitViewSettled_assert_c36a630d1_1_3", + "step_closeGetStartedEditor_assertActive_c36a630d1_1_4", + "step_closeGetStartedEditor_close_c36a630d1_1_4", + "step_closeGetStartedEditor_assertClosed_c36a630d1_1_4", + "step_executeCommand_open_c36a630d1_1_5", + "step_executeCommand_assertPalette_c36a630d1_1_5", + "step_executeCommand_filter_c36a630d1_1_5", + "step_executeCommand_assertCommand_c36a630d1_1_5", + "step_executeCommand_execute_c36a630d1_1_5", + "step_singleSelect_assertQuestion_c36a630d1_1_6", + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_6", + "step_singleSelect_filter_c36a630d1_1_6", + "step_singleSelect_assertOption_c36a630d1_1_6", + "step_singleSelect_confirm_c36a630d1_1_6", + "step_singleSelect_assertQuestion_c36a630d1_1_7", + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_7", + "step_singleSelect_filter_c36a630d1_1_7", + "step_singleSelect_assertOption_c36a630d1_1_7", + "step_singleSelect_confirm_c36a630d1_1_7", + "step_singleSelect_assertQuestion_c36a630d1_1_8", + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_8", + "step_singleSelect_filter_c36a630d1_1_8", + "step_singleSelect_assertOption_c36a630d1_1_8", + "step_singleSelect_confirm_c36a630d1_1_8", + "step_textInput_assertQuestion_c36a630d1_1_9", + "step_textInput_input_c36a630d1_1_9", + "step_textInput_confirm_c36a630d1_1_9", + "step_singleSelect_assertQuestion_c36a630d1_1_10", + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_10", + "step_singleSelect_filter_c36a630d1_1_10", + "step_singleSelect_assertOption_c36a630d1_1_10", + "step_singleSelect_confirm_c36a630d1_1_10", + "step_confirmOption_assertPrompt_c36a630d1_1_11", + "step_confirmOption_confirm_c36a630d1_1_11", + "step_textInput_assertQuestion_c36a630d1_1_12", + "step_textInput_input_c36a630d1_1_12", + "step_textInput_confirm_c36a630d1_1_12", + "step_assertProjectWindowReady_assert_c36a630d1_1_13", + "step_checkWorkspaceFiles_verify_c36a630d1_2_1", + "step_checkWorkspaceFiles_verify_c36a630d1_2_2", + "step_checkWorkspaceFiles_verify_c36a630d1_2_3", + "step_checkWorkspaceFiles_verify_c36a630d1_2_4", + "step_checkWorkspaceFiles_verify_c36a630d1_2_5", + "step_executeCommand_open_c36a630d1_3_1", + "step_executeCommand_assertPalette_c36a630d1_3_1", + "step_executeCommand_filter_c36a630d1_3_1", + "step_executeCommand_assertCommand_c36a630d1_3_1", + "step_executeCommand_execute_c36a630d1_3_1", + "step_signInAzure_assertOption_c36a630d1_3_2", + "step_signInAzure_selectOption_c36a630d1_3_2", + "step_signInAzure_confirmSignIn_c36a630d1_3_2", + "step_signInAzure_allow_c36a630d1_3_2", + "step_signInAzure_focusAccount_c36a630d1_3_2", + "step_signInAzure_typeAccount_c36a630d1_3_2", + "step_signInAzure_next_c36a630d1_3_2", + "step_signInAzure_typePassword_c36a630d1_3_2", + "step_signInAzure_submit_c36a630d1_3_2", + "step_signInAzure_closeBrowser_c36a630d1_3_2", + "step_signInAzure_assertReady_c36a630d1_3_2", + "step_executeCommand_open_c36a630d1_4_1", + "step_executeCommand_assertPalette_c36a630d1_4_1", + "step_executeCommand_filter_c36a630d1_4_1", + "step_executeCommand_assertCommand_c36a630d1_4_1", + "step_executeCommand_execute_c36a630d1_4_1", + "step_signInM365FromPicker_assertOption_c36a630d1_4_2", + "step_signInM365FromPicker_selectOption_c36a630d1_4_2", + "step_signInM365FromPicker_confirmSignIn_c36a630d1_4_2", + "step_signInM365FromPicker_useAnotherAccount_c36a630d1_4_2", + "step_signInM365FromPicker_typeAccount_c36a630d1_4_2", + "step_signInM365FromPicker_next_c36a630d1_4_2", + "step_signInM365FromPicker_typePassword_c36a630d1_4_2", + "step_signInM365FromPicker_submit_c36a630d1_4_2", + "step_signInM365FromPicker_closeBrowser_c36a630d1_4_2", + "step_signInM365FromPicker_assertReady_c36a630d1_4_2", + "step_executeCommand_open_c36a630d1_5_1", + "step_executeCommand_assertPalette_c36a630d1_5_1", + "step_executeCommand_filter_c36a630d1_5_1", + "step_executeCommand_assertCommand_c36a630d1_5_1", + "step_executeCommand_execute_c36a630d1_5_1", + "step_executeCommand_open_c36a630d1_5_2", + "step_executeCommand_assertPalette_c36a630d1_5_2", + "step_executeCommand_filter_c36a630d1_5_2", + "step_executeCommand_assertCommand_c36a630d1_5_2", + "step_executeCommand_execute_c36a630d1_5_2", + "step_singleSelect_assertQuestion_c36a630d1_5_3", + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3", + "step_singleSelect_filter_c36a630d1_5_3", + "step_singleSelect_assertOption_c36a630d1_5_3", + "step_singleSelect_confirm_c36a630d1_5_3", + "step_textInput_assertQuestion_c36a630d1_5_4", + "step_textInput_input_c36a630d1_5_4", + "step_textInput_confirm_c36a630d1_5_4", + "step_singleSelect_assertQuestion_c36a630d1_5_5", + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5", + "step_singleSelect_filter_c36a630d1_5_5", + "step_singleSelect_assertOption_c36a630d1_5_5", + "step_singleSelect_confirm_c36a630d1_5_5", + "step_clickPrimaryAction_assertDialog_c36a630d1_5_6", + "step_clickPrimaryAction_click_c36a630d1_5_6", + "step_assertNotificationContains_assert_c36a630d1_5_7", + "step_executeCommand_open_c36a630d1_6_1", + "step_executeCommand_assertPalette_c36a630d1_6_1", + "step_executeCommand_filter_c36a630d1_6_1", + "step_executeCommand_assertCommand_c36a630d1_6_1", + "step_executeCommand_execute_c36a630d1_6_1", + "step_executeCommand_open_c36a630d1_6_2", + "step_executeCommand_assertPalette_c36a630d1_6_2", + "step_executeCommand_filter_c36a630d1_6_2", + "step_executeCommand_assertCommand_c36a630d1_6_2", + "step_executeCommand_execute_c36a630d1_6_2", + "step_clickPrimaryAction_assertDialog_c36a630d1_6_3", + "step_clickPrimaryAction_click_c36a630d1_6_3", + "step_assertNotificationContains_assert_c36a630d1_6_4", + "step_executeCommand_open_c36a630d1_7_1", + "step_executeCommand_assertPalette_c36a630d1_7_1", + "step_executeCommand_filter_c36a630d1_7_1", + "step_executeCommand_assertCommand_c36a630d1_7_1", + "step_executeCommand_execute_c36a630d1_7_1", + "step_filterOption_filter_c36a630d1_7_2", + "step_filterOption_assertOption_c36a630d1_7_2", + "step_filterOption_confirm_c36a630d1_7_2", + "step_assertReady_assertReady_c36a630d1_7_3", + "step_addAndOpenApp_assertAdd_c36a630d1_8_1", + "step_addAndOpenApp_add_c36a630d1_8_1", + "step_addAndOpenApp_assertAdded_c36a630d1_8_1", + "step_addAndOpenApp_open_c36a630d1_8_1", + "step_addAndOpenApp_assertReady_c36a630d1_8_1" ], "tags": [ - "case_id:weather-js-openai-remote-preview", + "case_id:weather-js-openai-remote-teams", "scenario_id:SCN-CREATE-WEATHER-03", "template_id:weather-agent", "gate:pr" @@ -161,7 +161,7 @@ }, "steps": [ { - "step_id": "step_closeWelcomeOverlay_assertVisible_c61edf2e8_1_1", + "step_id": "step_closeWelcomeOverlay_assertVisible_c36a630d1_1_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -180,7 +180,7 @@ ] }, { - "step_id": "step_closeWelcomeOverlay_close_c61edf2e8_1_1", + "step_id": "step_closeWelcomeOverlay_close_c36a630d1_1_1", "agent": "interaction", "tool": "click", "parameters": { @@ -194,7 +194,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_assertVisible_c61edf2e8_1_1" + "step_closeWelcomeOverlay_assertVisible_c36a630d1_1_1" ], "preconditions": [ "dhash:952:128:16:5:255266345964665b", @@ -209,7 +209,7 @@ ] }, { - "step_id": "step_closeWelcomeOverlay_assertReady_c61edf2e8_1_1", + "step_id": "step_closeWelcomeOverlay_assertReady_c36a630d1_1_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -219,7 +219,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_close_c61edf2e8_1_1" + "step_closeWelcomeOverlay_close_c36a630d1_1_1" ], "preconditions": [], "postconditions": [], @@ -230,7 +230,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_1_2", + "step_id": "step_executeCommand_open_c36a630d1_1_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -242,7 +242,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_assertReady_c61edf2e8_1_1" + "step_closeWelcomeOverlay_assertReady_c36a630d1_1_1" ], "preconditions": [], "postconditions": [], @@ -252,7 +252,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_1_2", + "step_id": "step_executeCommand_assertPalette_c36a630d1_1_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -262,7 +262,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_1_2" + "step_executeCommand_open_c36a630d1_1_2" ], "preconditions": [], "postconditions": [], @@ -273,7 +273,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_1_2", + "step_id": "step_executeCommand_filter_c36a630d1_1_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -285,7 +285,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_1_2" + "step_executeCommand_assertPalette_c36a630d1_1_2" ], "preconditions": [], "postconditions": [], @@ -295,7 +295,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_1_2", + "step_id": "step_executeCommand_assertCommand_c36a630d1_1_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -305,7 +305,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_1_2" + "step_executeCommand_filter_c36a630d1_1_2" ], "preconditions": [], "postconditions": [], @@ -316,7 +316,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_1_2", + "step_id": "step_executeCommand_execute_c36a630d1_1_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -328,7 +328,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_1_2" + "step_executeCommand_assertCommand_c36a630d1_1_2" ], "preconditions": [], "postconditions": [], @@ -338,7 +338,7 @@ ] }, { - "step_id": "step_assertToolkitViewSettled_assert_c61edf2e8_1_3", + "step_id": "step_assertToolkitViewSettled_assert_c36a630d1_1_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -348,7 +348,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_1_2" + "step_executeCommand_execute_c36a630d1_1_2" ], "preconditions": [], "postconditions": [], @@ -359,7 +359,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_assertActive_c61edf2e8_1_4", + "step_id": "step_closeGetStartedEditor_assertActive_c36a630d1_1_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -369,7 +369,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertToolkitViewSettled_assert_c61edf2e8_1_3" + "step_assertToolkitViewSettled_assert_c36a630d1_1_3" ], "preconditions": [], "postconditions": [], @@ -380,7 +380,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_close_c61edf2e8_1_4", + "step_id": "step_closeGetStartedEditor_close_c36a630d1_1_4", "agent": "interaction", "tool": "keyboard_shortcut", "parameters": { @@ -392,7 +392,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_assertActive_c61edf2e8_1_4" + "step_closeGetStartedEditor_assertActive_c36a630d1_1_4" ], "preconditions": [], "postconditions": [], @@ -402,7 +402,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_assertClosed_c61edf2e8_1_4", + "step_id": "step_closeGetStartedEditor_assertClosed_c36a630d1_1_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -412,7 +412,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_close_c61edf2e8_1_4" + "step_closeGetStartedEditor_close_c36a630d1_1_4" ], "preconditions": [], "postconditions": [], @@ -423,7 +423,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_1_5", + "step_id": "step_executeCommand_open_c36a630d1_1_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -435,7 +435,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_assertClosed_c61edf2e8_1_4" + "step_closeGetStartedEditor_assertClosed_c36a630d1_1_4" ], "preconditions": [], "postconditions": [], @@ -445,7 +445,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_1_5", + "step_id": "step_executeCommand_assertPalette_c36a630d1_1_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -455,7 +455,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_1_5" + "step_executeCommand_open_c36a630d1_1_5" ], "preconditions": [], "postconditions": [], @@ -466,7 +466,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_1_5", + "step_id": "step_executeCommand_filter_c36a630d1_1_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -478,7 +478,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_1_5" + "step_executeCommand_assertPalette_c36a630d1_1_5" ], "preconditions": [], "postconditions": [], @@ -488,7 +488,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_1_5", + "step_id": "step_executeCommand_assertCommand_c36a630d1_1_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -498,7 +498,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_1_5" + "step_executeCommand_filter_c36a630d1_1_5" ], "preconditions": [], "postconditions": [], @@ -509,7 +509,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_1_5", + "step_id": "step_executeCommand_execute_c36a630d1_1_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -521,7 +521,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_1_5" + "step_executeCommand_assertCommand_c36a630d1_1_5" ], "preconditions": [], "postconditions": [], @@ -531,7 +531,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_1_6", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -541,7 +541,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_1_5" + "step_executeCommand_execute_c36a630d1_1_5" ], "preconditions": [], "postconditions": [], @@ -552,7 +552,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_6", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -562,7 +562,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_1_6" + "step_singleSelect_assertQuestion_c36a630d1_1_6" ], "preconditions": [], "postconditions": [], @@ -573,7 +573,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_1_6", + "step_id": "step_singleSelect_filter_c36a630d1_1_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -585,7 +585,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_6" + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_6" ], "preconditions": [], "postconditions": [], @@ -595,7 +595,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_1_6", + "step_id": "step_singleSelect_assertOption_c36a630d1_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -605,7 +605,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_1_6" + "step_singleSelect_filter_c36a630d1_1_6" ], "preconditions": [], "postconditions": [], @@ -616,7 +616,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_1_6", + "step_id": "step_singleSelect_confirm_c36a630d1_1_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -628,7 +628,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_1_6" + "step_singleSelect_assertOption_c36a630d1_1_6" ], "preconditions": [], "postconditions": [], @@ -638,7 +638,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_1_7", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -648,7 +648,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_1_6" + "step_singleSelect_confirm_c36a630d1_1_6" ], "preconditions": [], "postconditions": [], @@ -659,7 +659,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_7", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -669,7 +669,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_1_7" + "step_singleSelect_assertQuestion_c36a630d1_1_7" ], "preconditions": [], "postconditions": [], @@ -680,7 +680,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_1_7", + "step_id": "step_singleSelect_filter_c36a630d1_1_7", "agent": "interaction", "tool": "type_text", "parameters": { @@ -692,7 +692,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_7" + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_7" ], "preconditions": [], "postconditions": [], @@ -702,7 +702,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_1_7", + "step_id": "step_singleSelect_assertOption_c36a630d1_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -712,7 +712,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_1_7" + "step_singleSelect_filter_c36a630d1_1_7" ], "preconditions": [], "postconditions": [], @@ -723,7 +723,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_1_7", + "step_id": "step_singleSelect_confirm_c36a630d1_1_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -735,7 +735,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_1_7" + "step_singleSelect_assertOption_c36a630d1_1_7" ], "preconditions": [], "postconditions": [], @@ -745,7 +745,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_1_8", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -755,7 +755,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_1_7" + "step_singleSelect_confirm_c36a630d1_1_7" ], "preconditions": [], "postconditions": [], @@ -766,7 +766,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_8", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -776,7 +776,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_1_8" + "step_singleSelect_assertQuestion_c36a630d1_1_8" ], "preconditions": [], "postconditions": [], @@ -787,7 +787,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_1_8", + "step_id": "step_singleSelect_filter_c36a630d1_1_8", "agent": "interaction", "tool": "type_text", "parameters": { @@ -799,7 +799,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_8" + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_8" ], "preconditions": [], "postconditions": [], @@ -809,7 +809,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_1_8", + "step_id": "step_singleSelect_assertOption_c36a630d1_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -819,7 +819,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_1_8" + "step_singleSelect_filter_c36a630d1_1_8" ], "preconditions": [], "postconditions": [], @@ -830,7 +830,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_1_8", + "step_id": "step_singleSelect_confirm_c36a630d1_1_8", "agent": "interaction", "tool": "key_press", "parameters": { @@ -842,7 +842,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_1_8" + "step_singleSelect_assertOption_c36a630d1_1_8" ], "preconditions": [], "postconditions": [], @@ -852,7 +852,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c61edf2e8_1_9", + "step_id": "step_textInput_assertQuestion_c36a630d1_1_9", "agent": "assertion", "tool": "", "parameters": {}, @@ -862,7 +862,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_1_8" + "step_singleSelect_confirm_c36a630d1_1_8" ], "preconditions": [], "postconditions": [], @@ -873,7 +873,7 @@ ] }, { - "step_id": "step_textInput_input_c61edf2e8_1_9", + "step_id": "step_textInput_input_c36a630d1_1_9", "agent": "interaction", "tool": "type_text", "parameters": { @@ -885,7 +885,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c61edf2e8_1_9" + "step_textInput_assertQuestion_c36a630d1_1_9" ], "preconditions": [], "postconditions": [], @@ -895,7 +895,7 @@ ] }, { - "step_id": "step_textInput_confirm_c61edf2e8_1_9", + "step_id": "step_textInput_confirm_c36a630d1_1_9", "agent": "interaction", "tool": "key_press", "parameters": { @@ -907,7 +907,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c61edf2e8_1_9" + "step_textInput_input_c36a630d1_1_9" ], "preconditions": [], "postconditions": [], @@ -917,7 +917,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_1_10", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_1_10", "agent": "assertion", "tool": "", "parameters": {}, @@ -927,7 +927,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c61edf2e8_1_9" + "step_textInput_confirm_c36a630d1_1_9" ], "preconditions": [], "postconditions": [], @@ -938,7 +938,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_10", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_1_10", "agent": "assertion", "tool": "", "parameters": {}, @@ -948,7 +948,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_1_10" + "step_singleSelect_assertQuestion_c36a630d1_1_10" ], "preconditions": [], "postconditions": [], @@ -959,7 +959,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_1_10", + "step_id": "step_singleSelect_filter_c36a630d1_1_10", "agent": "interaction", "tool": "type_text", "parameters": { @@ -971,7 +971,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_1_10" + "step_singleSelect_assertOptionsLoaded_c36a630d1_1_10" ], "preconditions": [], "postconditions": [], @@ -981,7 +981,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_1_10", + "step_id": "step_singleSelect_assertOption_c36a630d1_1_10", "agent": "assertion", "tool": "", "parameters": {}, @@ -991,7 +991,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_1_10" + "step_singleSelect_filter_c36a630d1_1_10" ], "preconditions": [], "postconditions": [], @@ -1002,7 +1002,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_1_10", + "step_id": "step_singleSelect_confirm_c36a630d1_1_10", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1014,7 +1014,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_1_10" + "step_singleSelect_assertOption_c36a630d1_1_10" ], "preconditions": [], "postconditions": [], @@ -1024,7 +1024,7 @@ ] }, { - "step_id": "step_confirmOption_assertPrompt_c61edf2e8_1_11", + "step_id": "step_confirmOption_assertPrompt_c36a630d1_1_11", "agent": "assertion", "tool": "", "parameters": {}, @@ -1034,7 +1034,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_1_10" + "step_singleSelect_confirm_c36a630d1_1_10" ], "preconditions": [], "postconditions": [], @@ -1046,7 +1046,7 @@ ] }, { - "step_id": "step_confirmOption_confirm_c61edf2e8_1_11", + "step_id": "step_confirmOption_confirm_c36a630d1_1_11", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1058,7 +1058,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_confirmOption_assertPrompt_c61edf2e8_1_11" + "step_confirmOption_assertPrompt_c36a630d1_1_11" ], "preconditions": [ "dhash:364:74:16:5:08056a9a5d5516b6", @@ -1073,7 +1073,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c61edf2e8_1_12", + "step_id": "step_textInput_assertQuestion_c36a630d1_1_12", "agent": "assertion", "tool": "", "parameters": {}, @@ -1083,7 +1083,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_confirmOption_confirm_c61edf2e8_1_11" + "step_confirmOption_confirm_c36a630d1_1_11" ], "preconditions": [], "postconditions": [], @@ -1094,7 +1094,7 @@ ] }, { - "step_id": "step_textInput_input_c61edf2e8_1_12", + "step_id": "step_textInput_input_c36a630d1_1_12", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1106,7 +1106,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c61edf2e8_1_12" + "step_textInput_assertQuestion_c36a630d1_1_12" ], "preconditions": [], "postconditions": [], @@ -1116,7 +1116,7 @@ ] }, { - "step_id": "step_textInput_confirm_c61edf2e8_1_12", + "step_id": "step_textInput_confirm_c36a630d1_1_12", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1128,7 +1128,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c61edf2e8_1_12" + "step_textInput_input_c36a630d1_1_12" ], "preconditions": [], "postconditions": [], @@ -1138,7 +1138,7 @@ ] }, { - "step_id": "step_assertProjectWindowReady_assert_c61edf2e8_1_13", + "step_id": "step_assertProjectWindowReady_assert_c36a630d1_1_13", "agent": "assertion", "tool": "", "parameters": {}, @@ -1148,7 +1148,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c61edf2e8_1_12" + "step_textInput_confirm_c36a630d1_1_12" ], "preconditions": [], "postconditions": [], @@ -1159,7 +1159,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_c61edf2e8_2_1", + "step_id": "step_checkWorkspaceFiles_verify_c36a630d1_2_1", "agent": "code", "tool": "", "parameters": { @@ -1171,7 +1171,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertProjectWindowReady_assert_c61edf2e8_1_13" + "step_assertProjectWindowReady_assert_c36a630d1_1_13" ], "preconditions": [], "postconditions": [], @@ -1182,7 +1182,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_c61edf2e8_2_2", + "step_id": "step_checkWorkspaceFiles_verify_c36a630d1_2_2", "agent": "code", "tool": "", "parameters": { @@ -1194,7 +1194,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_c61edf2e8_2_1" + "step_checkWorkspaceFiles_verify_c36a630d1_2_1" ], "preconditions": [], "postconditions": [], @@ -1205,7 +1205,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_c61edf2e8_2_3", + "step_id": "step_checkWorkspaceFiles_verify_c36a630d1_2_3", "agent": "code", "tool": "", "parameters": { @@ -1217,7 +1217,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_c61edf2e8_2_2" + "step_checkWorkspaceFiles_verify_c36a630d1_2_2" ], "preconditions": [], "postconditions": [], @@ -1228,7 +1228,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_c61edf2e8_2_4", + "step_id": "step_checkWorkspaceFiles_verify_c36a630d1_2_4", "agent": "code", "tool": "", "parameters": { @@ -1240,7 +1240,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_c61edf2e8_2_3" + "step_checkWorkspaceFiles_verify_c36a630d1_2_3" ], "preconditions": [], "postconditions": [], @@ -1251,7 +1251,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_c61edf2e8_2_5", + "step_id": "step_checkWorkspaceFiles_verify_c36a630d1_2_5", "agent": "code", "tool": "", "parameters": { @@ -1263,7 +1263,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_c61edf2e8_2_4" + "step_checkWorkspaceFiles_verify_c36a630d1_2_4" ], "preconditions": [], "postconditions": [], @@ -1274,7 +1274,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_3_1", + "step_id": "step_executeCommand_open_c36a630d1_3_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1286,7 +1286,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_c61edf2e8_2_5" + "step_checkWorkspaceFiles_verify_c36a630d1_2_5" ], "preconditions": [], "postconditions": [], @@ -1296,7 +1296,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_3_1", + "step_id": "step_executeCommand_assertPalette_c36a630d1_3_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1306,7 +1306,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_3_1" + "step_executeCommand_open_c36a630d1_3_1" ], "preconditions": [], "postconditions": [], @@ -1317,7 +1317,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_3_1", + "step_id": "step_executeCommand_filter_c36a630d1_3_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1329,7 +1329,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_3_1" + "step_executeCommand_assertPalette_c36a630d1_3_1" ], "preconditions": [], "postconditions": [], @@ -1339,7 +1339,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_3_1", + "step_id": "step_executeCommand_assertCommand_c36a630d1_3_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1349,7 +1349,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_3_1" + "step_executeCommand_filter_c36a630d1_3_1" ], "preconditions": [], "postconditions": [], @@ -1360,7 +1360,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_3_1", + "step_id": "step_executeCommand_execute_c36a630d1_3_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1372,7 +1372,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_3_1" + "step_executeCommand_assertCommand_c36a630d1_3_1" ], "preconditions": [], "postconditions": [], @@ -1382,7 +1382,7 @@ ] }, { - "step_id": "step_signInAzure_assertOption_c61edf2e8_3_2", + "step_id": "step_signInAzure_assertOption_c36a630d1_3_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1392,7 +1392,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_3_1" + "step_executeCommand_execute_c36a630d1_3_1" ], "preconditions": [], "postconditions": [], @@ -1404,7 +1404,7 @@ ] }, { - "step_id": "step_signInAzure_selectOption_c61edf2e8_3_2", + "step_id": "step_signInAzure_selectOption_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1418,7 +1418,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_assertOption_c61edf2e8_3_2" + "step_signInAzure_assertOption_c36a630d1_3_2" ], "preconditions": [ "dhash:165:127:16:5:5819353567ef55aa", @@ -1432,7 +1432,7 @@ ] }, { - "step_id": "step_signInAzure_confirmSignIn_c61edf2e8_3_2", + "step_id": "step_signInAzure_confirmSignIn_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1446,7 +1446,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_selectOption_c61edf2e8_3_2" + "step_signInAzure_selectOption_c36a630d1_3_2" ], "preconditions": [ "dhash:534:98:16:5:554a54555555468f", @@ -1460,7 +1460,7 @@ ] }, { - "step_id": "step_signInAzure_allow_c61edf2e8_3_2", + "step_id": "step_signInAzure_allow_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1474,7 +1474,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_confirmSignIn_c61edf2e8_3_2" + "step_signInAzure_confirmSignIn_c36a630d1_3_2" ], "preconditions": [ "dhash:457:96:16:5:524d5552564cb3ca", @@ -1488,7 +1488,7 @@ ] }, { - "step_id": "step_signInAzure_focusAccount_c61edf2e8_3_2", + "step_id": "step_signInAzure_focusAccount_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1502,7 +1502,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_allow_c61edf2e8_3_2" + "step_signInAzure_allow_c36a630d1_3_2" ], "preconditions": [ "dhash:432:327:16:5:114c134b4a13b2cc", @@ -1517,7 +1517,7 @@ ] }, { - "step_id": "step_signInAzure_typeAccount_c61edf2e8_3_2", + "step_id": "step_signInAzure_typeAccount_c36a630d1_3_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1529,7 +1529,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_focusAccount_c61edf2e8_3_2" + "step_signInAzure_focusAccount_c36a630d1_3_2" ], "preconditions": [ "dhash:512:384:0:20:1b28d0d9e7e4dae4" @@ -1542,7 +1542,7 @@ ] }, { - "step_id": "step_signInAzure_next_c61edf2e8_3_2", + "step_id": "step_signInAzure_next_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1556,7 +1556,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_typeAccount_c61edf2e8_3_2" + "step_signInAzure_typeAccount_c36a630d1_3_2" ], "preconditions": [ "dhash:631:462:16:5:0000000091000000", @@ -1571,7 +1571,7 @@ ] }, { - "step_id": "step_signInAzure_typePassword_c61edf2e8_3_2", + "step_id": "step_signInAzure_typePassword_c36a630d1_3_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1583,7 +1583,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_next_c61edf2e8_3_2" + "step_signInAzure_next_c36a630d1_3_2" ], "preconditions": [ "dhash:512:384:0:20:1908f0d9d1e6e6e4" @@ -1597,7 +1597,7 @@ ] }, { - "step_id": "step_signInAzure_submit_c61edf2e8_3_2", + "step_id": "step_signInAzure_submit_c36a630d1_3_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1609,7 +1609,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_typePassword_c61edf2e8_3_2" + "step_signInAzure_typePassword_c36a630d1_3_2" ], "preconditions": [ "dhash:512:384:0:20:1908f0d9d1e6e6e4" @@ -1622,7 +1622,7 @@ ] }, { - "step_id": "step_signInAzure_closeBrowser_c61edf2e8_3_2", + "step_id": "step_signInAzure_closeBrowser_c36a630d1_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1636,7 +1636,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_submit_c61edf2e8_3_2" + "step_signInAzure_submit_c36a630d1_3_2" ], "preconditions": [ "dhash:991:18:16:5:b020624245454242", @@ -1651,7 +1651,7 @@ ] }, { - "step_id": "step_signInAzure_assertReady_c61edf2e8_3_2", + "step_id": "step_signInAzure_assertReady_c36a630d1_3_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1661,7 +1661,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_closeBrowser_c61edf2e8_3_2" + "step_signInAzure_closeBrowser_c36a630d1_3_2" ], "preconditions": [], "postconditions": [], @@ -1673,7 +1673,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_4_1", + "step_id": "step_executeCommand_open_c36a630d1_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1685,7 +1685,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_assertReady_c61edf2e8_3_2" + "step_signInAzure_assertReady_c36a630d1_3_2" ], "preconditions": [], "postconditions": [], @@ -1695,7 +1695,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_4_1", + "step_id": "step_executeCommand_assertPalette_c36a630d1_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1705,7 +1705,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_4_1" + "step_executeCommand_open_c36a630d1_4_1" ], "preconditions": [], "postconditions": [], @@ -1716,7 +1716,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_4_1", + "step_id": "step_executeCommand_filter_c36a630d1_4_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1728,7 +1728,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_4_1" + "step_executeCommand_assertPalette_c36a630d1_4_1" ], "preconditions": [], "postconditions": [], @@ -1738,7 +1738,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_4_1", + "step_id": "step_executeCommand_assertCommand_c36a630d1_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1748,7 +1748,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_4_1" + "step_executeCommand_filter_c36a630d1_4_1" ], "preconditions": [], "postconditions": [], @@ -1759,7 +1759,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_4_1", + "step_id": "step_executeCommand_execute_c36a630d1_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1771,7 +1771,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_4_1" + "step_executeCommand_assertCommand_c36a630d1_4_1" ], "preconditions": [], "postconditions": [], @@ -1781,7 +1781,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_assertOption_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_assertOption_c36a630d1_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1791,7 +1791,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_4_1" + "step_executeCommand_execute_c36a630d1_4_1" ], "preconditions": [], "postconditions": [], @@ -1803,7 +1803,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_selectOption_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_selectOption_c36a630d1_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1817,7 +1817,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_assertOption_c61edf2e8_4_2" + "step_signInM365FromPicker_assertOption_c36a630d1_4_2" ], "preconditions": [ "dhash:213:102:16:5:9c63d67674d4c718", @@ -1831,7 +1831,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_confirmSignIn_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_confirmSignIn_c36a630d1_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1845,7 +1845,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_selectOption_c61edf2e8_4_2" + "step_signInM365FromPicker_selectOption_c36a630d1_4_2" ], "preconditions": [ "dhash:762:97:16:5:24b1a72ba9aba343", @@ -1859,7 +1859,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_useAnotherAccount_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_useAnotherAccount_c36a630d1_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1873,7 +1873,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_confirmSignIn_c61edf2e8_4_2" + "step_signInM365FromPicker_confirmSignIn_c36a630d1_4_2" ], "preconditions": [ "dhash:447:487:16:5:ac534b4aaaaa6a15", @@ -1888,7 +1888,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_typeAccount_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_typeAccount_c36a630d1_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1900,7 +1900,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_useAnotherAccount_c61edf2e8_4_2" + "step_signInM365FromPicker_useAnotherAccount_c36a630d1_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392f8d8c6e6dae4" @@ -1913,7 +1913,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_next_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_next_c36a630d1_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1927,7 +1927,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_typeAccount_c61edf2e8_4_2" + "step_signInM365FromPicker_typeAccount_c36a630d1_4_2" ], "preconditions": [ "dhash:655:505:16:5:0000000080400020", @@ -1942,7 +1942,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_typePassword_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_typePassword_c36a630d1_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1954,7 +1954,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_next_c61edf2e8_4_2" + "step_signInM365FromPicker_next_c36a630d1_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392e8d8d9f6e6e4" @@ -1967,7 +1967,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_submit_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_submit_c36a630d1_4_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1979,7 +1979,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_typePassword_c61edf2e8_4_2" + "step_signInM365FromPicker_typePassword_c36a630d1_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392e8d8d9f6e6e4" @@ -1992,7 +1992,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_closeBrowser_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_closeBrowser_c36a630d1_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2006,7 +2006,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_submit_c61edf2e8_4_2" + "step_signInM365FromPicker_submit_c36a630d1_4_2" ], "preconditions": [ "dhash:1008:19:16:5:a322c95a325ac922", @@ -2021,7 +2021,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_assertReady_c61edf2e8_4_2", + "step_id": "step_signInM365FromPicker_assertReady_c36a630d1_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2031,7 +2031,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_closeBrowser_c61edf2e8_4_2" + "step_signInM365FromPicker_closeBrowser_c36a630d1_4_2" ], "preconditions": [], "postconditions": [], @@ -2043,7 +2043,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_5_1", + "step_id": "step_executeCommand_open_c36a630d1_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2055,7 +2055,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_assertReady_c61edf2e8_4_2" + "step_signInM365FromPicker_assertReady_c36a630d1_4_2" ], "preconditions": [], "postconditions": [], @@ -2065,7 +2065,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_5_1", + "step_id": "step_executeCommand_assertPalette_c36a630d1_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2075,7 +2075,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_5_1" + "step_executeCommand_open_c36a630d1_5_1" ], "preconditions": [], "postconditions": [], @@ -2086,7 +2086,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_5_1", + "step_id": "step_executeCommand_filter_c36a630d1_5_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2098,7 +2098,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_5_1" + "step_executeCommand_assertPalette_c36a630d1_5_1" ], "preconditions": [], "postconditions": [], @@ -2108,7 +2108,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_5_1", + "step_id": "step_executeCommand_assertCommand_c36a630d1_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2118,7 +2118,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_5_1" + "step_executeCommand_filter_c36a630d1_5_1" ], "preconditions": [], "postconditions": [], @@ -2129,7 +2129,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_5_1", + "step_id": "step_executeCommand_execute_c36a630d1_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2141,7 +2141,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_5_1" + "step_executeCommand_assertCommand_c36a630d1_5_1" ], "preconditions": [], "postconditions": [], @@ -2151,7 +2151,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_5_2", + "step_id": "step_executeCommand_open_c36a630d1_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2163,7 +2163,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_5_1" + "step_executeCommand_execute_c36a630d1_5_1" ], "preconditions": [], "postconditions": [], @@ -2173,7 +2173,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_5_2", + "step_id": "step_executeCommand_assertPalette_c36a630d1_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2183,7 +2183,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_5_2" + "step_executeCommand_open_c36a630d1_5_2" ], "preconditions": [], "postconditions": [], @@ -2194,7 +2194,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_5_2", + "step_id": "step_executeCommand_filter_c36a630d1_5_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2206,7 +2206,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_5_2" + "step_executeCommand_assertPalette_c36a630d1_5_2" ], "preconditions": [], "postconditions": [], @@ -2216,7 +2216,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_5_2", + "step_id": "step_executeCommand_assertCommand_c36a630d1_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2226,7 +2226,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_5_2" + "step_executeCommand_filter_c36a630d1_5_2" ], "preconditions": [], "postconditions": [], @@ -2237,7 +2237,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_5_2", + "step_id": "step_executeCommand_execute_c36a630d1_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2249,7 +2249,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_5_2" + "step_executeCommand_assertCommand_c36a630d1_5_2" ], "preconditions": [], "postconditions": [], @@ -2259,7 +2259,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_5_3", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2269,7 +2269,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_5_2" + "step_executeCommand_execute_c36a630d1_5_2" ], "preconditions": [], "postconditions": [], @@ -2280,7 +2280,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2290,7 +2290,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_5_3" + "step_singleSelect_assertQuestion_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2301,7 +2301,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_5_3", + "step_id": "step_singleSelect_filter_c36a630d1_5_3", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2313,7 +2313,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_3" + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2323,7 +2323,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_5_3", + "step_id": "step_singleSelect_assertOption_c36a630d1_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2333,7 +2333,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_5_3" + "step_singleSelect_filter_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2344,7 +2344,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_5_3", + "step_id": "step_singleSelect_confirm_c36a630d1_5_3", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2356,7 +2356,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_5_3" + "step_singleSelect_assertOption_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2366,7 +2366,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c61edf2e8_5_4", + "step_id": "step_textInput_assertQuestion_c36a630d1_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2376,7 +2376,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_5_3" + "step_singleSelect_confirm_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2387,7 +2387,7 @@ ] }, { - "step_id": "step_textInput_input_c61edf2e8_5_4", + "step_id": "step_textInput_input_c36a630d1_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2399,7 +2399,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c61edf2e8_5_4" + "step_textInput_assertQuestion_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2409,7 +2409,7 @@ ] }, { - "step_id": "step_textInput_confirm_c61edf2e8_5_4", + "step_id": "step_textInput_confirm_c36a630d1_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2421,7 +2421,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c61edf2e8_5_4" + "step_textInput_input_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2431,7 +2431,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c61edf2e8_5_5", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2441,7 +2441,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c61edf2e8_5_4" + "step_textInput_confirm_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2452,7 +2452,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2462,7 +2462,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c61edf2e8_5_5" + "step_singleSelect_assertQuestion_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2473,7 +2473,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c61edf2e8_5_5", + "step_id": "step_singleSelect_filter_c36a630d1_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2485,7 +2485,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c61edf2e8_5_5" + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2495,7 +2495,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c61edf2e8_5_5", + "step_id": "step_singleSelect_assertOption_c36a630d1_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2505,7 +2505,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c61edf2e8_5_5" + "step_singleSelect_filter_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2516,7 +2516,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c61edf2e8_5_5", + "step_id": "step_singleSelect_confirm_c36a630d1_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2528,7 +2528,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c61edf2e8_5_5" + "step_singleSelect_assertOption_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2538,7 +2538,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c61edf2e8_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2548,7 +2548,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c61edf2e8_5_5" + "step_singleSelect_confirm_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2559,7 +2559,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c61edf2e8_5_6", + "step_id": "step_clickPrimaryAction_click_c36a630d1_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2571,7 +2571,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c61edf2e8_5_6" + "step_clickPrimaryAction_assertDialog_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2581,7 +2581,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c61edf2e8_5_7", + "step_id": "step_assertNotificationContains_assert_c36a630d1_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2591,7 +2591,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c61edf2e8_5_6" + "step_clickPrimaryAction_click_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2602,7 +2602,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_6_1", + "step_id": "step_executeCommand_open_c36a630d1_6_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2614,7 +2614,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c61edf2e8_5_7" + "step_assertNotificationContains_assert_c36a630d1_5_7" ], "preconditions": [], "postconditions": [], @@ -2624,7 +2624,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_6_1", + "step_id": "step_executeCommand_assertPalette_c36a630d1_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2634,7 +2634,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_6_1" + "step_executeCommand_open_c36a630d1_6_1" ], "preconditions": [], "postconditions": [], @@ -2645,7 +2645,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_6_1", + "step_id": "step_executeCommand_filter_c36a630d1_6_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2657,7 +2657,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_6_1" + "step_executeCommand_assertPalette_c36a630d1_6_1" ], "preconditions": [], "postconditions": [], @@ -2667,7 +2667,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_6_1", + "step_id": "step_executeCommand_assertCommand_c36a630d1_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2677,7 +2677,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_6_1" + "step_executeCommand_filter_c36a630d1_6_1" ], "preconditions": [], "postconditions": [], @@ -2688,7 +2688,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_6_1", + "step_id": "step_executeCommand_execute_c36a630d1_6_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2700,7 +2700,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_6_1" + "step_executeCommand_assertCommand_c36a630d1_6_1" ], "preconditions": [], "postconditions": [], @@ -2710,7 +2710,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_6_2", + "step_id": "step_executeCommand_open_c36a630d1_6_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2722,7 +2722,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_6_1" + "step_executeCommand_execute_c36a630d1_6_1" ], "preconditions": [], "postconditions": [], @@ -2732,7 +2732,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_6_2", + "step_id": "step_executeCommand_assertPalette_c36a630d1_6_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2742,7 +2742,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_6_2" + "step_executeCommand_open_c36a630d1_6_2" ], "preconditions": [], "postconditions": [], @@ -2753,7 +2753,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_6_2", + "step_id": "step_executeCommand_filter_c36a630d1_6_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2765,7 +2765,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_6_2" + "step_executeCommand_assertPalette_c36a630d1_6_2" ], "preconditions": [], "postconditions": [], @@ -2775,7 +2775,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_6_2", + "step_id": "step_executeCommand_assertCommand_c36a630d1_6_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2785,7 +2785,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_6_2" + "step_executeCommand_filter_c36a630d1_6_2" ], "preconditions": [], "postconditions": [], @@ -2796,7 +2796,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_6_2", + "step_id": "step_executeCommand_execute_c36a630d1_6_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2808,7 +2808,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_6_2" + "step_executeCommand_assertCommand_c36a630d1_6_2" ], "preconditions": [], "postconditions": [], @@ -2818,7 +2818,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c61edf2e8_6_3", + "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_6_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2828,7 +2828,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_6_2" + "step_executeCommand_execute_c36a630d1_6_2" ], "preconditions": [], "postconditions": [], @@ -2839,7 +2839,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c61edf2e8_6_3", + "step_id": "step_clickPrimaryAction_click_c36a630d1_6_3", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2851,7 +2851,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c61edf2e8_6_3" + "step_clickPrimaryAction_assertDialog_c36a630d1_6_3" ], "preconditions": [], "postconditions": [], @@ -2861,7 +2861,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c61edf2e8_6_4", + "step_id": "step_assertNotificationContains_assert_c36a630d1_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2871,7 +2871,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c61edf2e8_6_3" + "step_clickPrimaryAction_click_c36a630d1_6_3" ], "preconditions": [], "postconditions": [], @@ -2882,7 +2882,7 @@ ] }, { - "step_id": "step_executeCommand_open_c61edf2e8_7_1", + "step_id": "step_executeCommand_open_c36a630d1_7_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2894,7 +2894,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c61edf2e8_6_4" + "step_assertNotificationContains_assert_c36a630d1_6_4" ], "preconditions": [], "postconditions": [], @@ -2904,7 +2904,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_c61edf2e8_7_1", + "step_id": "step_executeCommand_assertPalette_c36a630d1_7_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2914,7 +2914,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_c61edf2e8_7_1" + "step_executeCommand_open_c36a630d1_7_1" ], "preconditions": [], "postconditions": [], @@ -2925,7 +2925,7 @@ ] }, { - "step_id": "step_executeCommand_filter_c61edf2e8_7_1", + "step_id": "step_executeCommand_filter_c36a630d1_7_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2937,7 +2937,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_c61edf2e8_7_1" + "step_executeCommand_assertPalette_c36a630d1_7_1" ], "preconditions": [], "postconditions": [], @@ -2947,7 +2947,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_c61edf2e8_7_1", + "step_id": "step_executeCommand_assertCommand_c36a630d1_7_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2957,7 +2957,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_c61edf2e8_7_1" + "step_executeCommand_filter_c36a630d1_7_1" ], "preconditions": [], "postconditions": [], @@ -2968,7 +2968,7 @@ ] }, { - "step_id": "step_executeCommand_execute_c61edf2e8_7_1", + "step_id": "step_executeCommand_execute_c36a630d1_7_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2980,7 +2980,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_c61edf2e8_7_1" + "step_executeCommand_assertCommand_c36a630d1_7_1" ], "preconditions": [], "postconditions": [], @@ -2990,7 +2990,7 @@ ] }, { - "step_id": "step_filterOption_filter_c61edf2e8_7_2", + "step_id": "step_filterOption_filter_c36a630d1_7_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3002,7 +3002,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c61edf2e8_7_1" + "step_executeCommand_execute_c36a630d1_7_1" ], "preconditions": [], "postconditions": [], @@ -3012,7 +3012,7 @@ ] }, { - "step_id": "step_filterOption_assertOption_c61edf2e8_7_2", + "step_id": "step_filterOption_assertOption_c36a630d1_7_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -3022,7 +3022,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_filter_c61edf2e8_7_2" + "step_filterOption_filter_c36a630d1_7_2" ], "preconditions": [], "postconditions": [], @@ -3033,7 +3033,7 @@ ] }, { - "step_id": "step_filterOption_confirm_c61edf2e8_7_2", + "step_id": "step_filterOption_confirm_c36a630d1_7_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3045,7 +3045,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_assertOption_c61edf2e8_7_2" + "step_filterOption_assertOption_c36a630d1_7_2" ], "preconditions": [], "postconditions": [], @@ -3055,7 +3055,7 @@ ] }, { - "step_id": "step_assertReady_assertReady_c61edf2e8_7_3", + "step_id": "step_assertReady_assertReady_c36a630d1_7_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -3065,7 +3065,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_confirm_c61edf2e8_7_2" + "step_filterOption_confirm_c36a630d1_7_2" ], "preconditions": [], "postconditions": [], @@ -3076,7 +3076,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdd_c61edf2e8_8_1", + "step_id": "step_addAndOpenApp_assertAdd_c36a630d1_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3086,7 +3086,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c61edf2e8_7_3" + "step_assertReady_assertReady_c36a630d1_7_3" ], "preconditions": [], "postconditions": [], @@ -3098,7 +3098,7 @@ ] }, { - "step_id": "step_addAndOpenApp_add_c61edf2e8_8_1", + "step_id": "step_addAndOpenApp_add_c36a630d1_8_1", "agent": "interaction", "tool": "click", "parameters": { @@ -3112,7 +3112,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdd_c61edf2e8_8_1" + "step_addAndOpenApp_assertAdd_c36a630d1_8_1" ], "preconditions": [ "dhash:288:214:16:5:05100a0511030b12", @@ -3127,7 +3127,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdded_c61edf2e8_8_1", + "step_id": "step_addAndOpenApp_assertAdded_c36a630d1_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3137,7 +3137,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_add_c61edf2e8_8_1" + "step_addAndOpenApp_add_c36a630d1_8_1" ], "preconditions": [], "postconditions": [], @@ -3149,7 +3149,7 @@ ] }, { - "step_id": "step_addAndOpenApp_open_c61edf2e8_8_1", + "step_id": "step_addAndOpenApp_open_c36a630d1_8_1", "agent": "interaction", "tool": "click", "parameters": { @@ -3163,7 +3163,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdded_c61edf2e8_8_1" + "step_addAndOpenApp_assertAdded_c36a630d1_8_1" ], "preconditions": [ "dhash:533:508:16:5:00987494ca4acacc", @@ -3179,7 +3179,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertReady_c61edf2e8_8_1", + "step_id": "step_addAndOpenApp_assertReady_c36a630d1_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3189,7 +3189,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_open_c61edf2e8_8_1" + "step_addAndOpenApp_open_c36a630d1_8_1" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json new file mode 100644 index 00000000000..0c80911fa0b --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json @@ -0,0 +1,3638 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_8921ed503ddb", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 154, + "name": "weather-ts-azure-openai-remote-copilot", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-01", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c41d76889_1_1", + "step_closeWelcomeOverlay_close_c41d76889_1_1", + "step_closeWelcomeOverlay_assertReady_c41d76889_1_1", + "step_executeCommand_open_c41d76889_1_2", + "step_executeCommand_assertPalette_c41d76889_1_2", + "step_executeCommand_filter_c41d76889_1_2", + "step_executeCommand_assertCommand_c41d76889_1_2", + "step_executeCommand_execute_c41d76889_1_2", + "step_assertToolkitViewSettled_assert_c41d76889_1_3", + "step_closeGetStartedEditor_assertActive_c41d76889_1_4", + "step_closeGetStartedEditor_close_c41d76889_1_4", + "step_closeGetStartedEditor_assertClosed_c41d76889_1_4", + "step_executeCommand_open_c41d76889_1_5", + "step_executeCommand_assertPalette_c41d76889_1_5", + "step_executeCommand_filter_c41d76889_1_5", + "step_executeCommand_assertCommand_c41d76889_1_5", + "step_executeCommand_execute_c41d76889_1_5", + "step_singleSelect_assertQuestion_c41d76889_1_6", + "step_singleSelect_assertOptionsLoaded_c41d76889_1_6", + "step_singleSelect_filter_c41d76889_1_6", + "step_singleSelect_assertOption_c41d76889_1_6", + "step_singleSelect_confirm_c41d76889_1_6", + "step_singleSelect_assertQuestion_c41d76889_1_7", + "step_singleSelect_assertOptionsLoaded_c41d76889_1_7", + "step_singleSelect_filter_c41d76889_1_7", + "step_singleSelect_assertOption_c41d76889_1_7", + "step_singleSelect_confirm_c41d76889_1_7", + "step_singleSelect_assertQuestion_c41d76889_1_8", + "step_singleSelect_assertOptionsLoaded_c41d76889_1_8", + "step_singleSelect_filter_c41d76889_1_8", + "step_singleSelect_assertOption_c41d76889_1_8", + "step_singleSelect_confirm_c41d76889_1_8", + "step_textInput_assertQuestion_c41d76889_1_9", + "step_textInput_input_c41d76889_1_9", + "step_textInput_confirm_c41d76889_1_9", + "step_textInput_assertQuestion_c41d76889_1_10", + "step_textInput_input_c41d76889_1_10", + "step_textInput_confirm_c41d76889_1_10", + "step_textInput_assertQuestion_c41d76889_1_11", + "step_textInput_input_c41d76889_1_11", + "step_textInput_confirm_c41d76889_1_11", + "step_singleSelect_assertQuestion_c41d76889_1_12", + "step_singleSelect_assertOptionsLoaded_c41d76889_1_12", + "step_singleSelect_filter_c41d76889_1_12", + "step_singleSelect_assertOption_c41d76889_1_12", + "step_singleSelect_confirm_c41d76889_1_12", + "step_confirmOption_assertPrompt_c41d76889_1_13", + "step_confirmOption_confirm_c41d76889_1_13", + "step_textInput_assertQuestion_c41d76889_1_14", + "step_textInput_input_c41d76889_1_14", + "step_textInput_confirm_c41d76889_1_14", + "step_assertProjectWindowReady_assert_c41d76889_1_15", + "step_checkWorkspaceFiles_verify_c41d76889_2_1", + "step_checkWorkspaceFiles_verify_c41d76889_2_2", + "step_checkWorkspaceFiles_verify_c41d76889_2_3", + "step_checkWorkspaceFiles_verify_c41d76889_2_4", + "step_checkWorkspaceFiles_verify_c41d76889_2_5", + "step_checkWorkspaceFiles_verify_c41d76889_2_6", + "step_checkWorkspaceFiles_verify_c41d76889_2_7", + "step_executeCommand_open_c41d76889_3_1", + "step_executeCommand_assertPalette_c41d76889_3_1", + "step_executeCommand_filter_c41d76889_3_1", + "step_executeCommand_assertCommand_c41d76889_3_1", + "step_executeCommand_execute_c41d76889_3_1", + "step_signInAzure_assertOption_c41d76889_3_2", + "step_signInAzure_selectOption_c41d76889_3_2", + "step_signInAzure_confirmSignIn_c41d76889_3_2", + "step_signInAzure_allow_c41d76889_3_2", + "step_signInAzure_focusAccount_c41d76889_3_2", + "step_signInAzure_typeAccount_c41d76889_3_2", + "step_signInAzure_next_c41d76889_3_2", + "step_signInAzure_typePassword_c41d76889_3_2", + "step_signInAzure_submit_c41d76889_3_2", + "step_signInAzure_closeBrowser_c41d76889_3_2", + "step_signInAzure_assertReady_c41d76889_3_2", + "step_executeCommand_open_c41d76889_4_1", + "step_executeCommand_assertPalette_c41d76889_4_1", + "step_executeCommand_filter_c41d76889_4_1", + "step_executeCommand_assertCommand_c41d76889_4_1", + "step_executeCommand_execute_c41d76889_4_1", + "step_signInM365FromPicker_assertOption_c41d76889_4_2", + "step_signInM365FromPicker_selectOption_c41d76889_4_2", + "step_signInM365FromPicker_confirmSignIn_c41d76889_4_2", + "step_signInM365FromPicker_useAnotherAccount_c41d76889_4_2", + "step_signInM365FromPicker_typeAccount_c41d76889_4_2", + "step_signInM365FromPicker_next_c41d76889_4_2", + "step_signInM365FromPicker_typePassword_c41d76889_4_2", + "step_signInM365FromPicker_submit_c41d76889_4_2", + "step_signInM365FromPicker_closeBrowser_c41d76889_4_2", + "step_signInM365FromPicker_assertReady_c41d76889_4_2", + "step_executeCommand_open_c41d76889_5_1", + "step_executeCommand_assertPalette_c41d76889_5_1", + "step_executeCommand_filter_c41d76889_5_1", + "step_executeCommand_assertCommand_c41d76889_5_1", + "step_executeCommand_execute_c41d76889_5_1", + "step_executeCommand_open_c41d76889_5_2", + "step_executeCommand_assertPalette_c41d76889_5_2", + "step_executeCommand_filter_c41d76889_5_2", + "step_executeCommand_assertCommand_c41d76889_5_2", + "step_executeCommand_execute_c41d76889_5_2", + "step_singleSelect_assertQuestion_c41d76889_5_3", + "step_singleSelect_assertOptionsLoaded_c41d76889_5_3", + "step_singleSelect_filter_c41d76889_5_3", + "step_singleSelect_assertOption_c41d76889_5_3", + "step_singleSelect_confirm_c41d76889_5_3", + "step_textInput_assertQuestion_c41d76889_5_4", + "step_textInput_input_c41d76889_5_4", + "step_textInput_confirm_c41d76889_5_4", + "step_singleSelect_assertQuestion_c41d76889_5_5", + "step_singleSelect_assertOptionsLoaded_c41d76889_5_5", + "step_singleSelect_filter_c41d76889_5_5", + "step_singleSelect_assertOption_c41d76889_5_5", + "step_singleSelect_confirm_c41d76889_5_5", + "step_clickPrimaryAction_assertDialog_c41d76889_5_6", + "step_clickPrimaryAction_click_c41d76889_5_6", + "step_assertNotificationContains_assert_c41d76889_5_7", + "step_executeCommand_open_c41d76889_6_1", + "step_executeCommand_assertPalette_c41d76889_6_1", + "step_executeCommand_filter_c41d76889_6_1", + "step_executeCommand_assertCommand_c41d76889_6_1", + "step_executeCommand_execute_c41d76889_6_1", + "step_executeCommand_open_c41d76889_6_2", + "step_executeCommand_assertPalette_c41d76889_6_2", + "step_executeCommand_filter_c41d76889_6_2", + "step_executeCommand_assertCommand_c41d76889_6_2", + "step_executeCommand_execute_c41d76889_6_2", + "step_clickPrimaryAction_assertDialog_c41d76889_6_3", + "step_clickPrimaryAction_click_c41d76889_6_3", + "step_assertNotificationContains_assert_c41d76889_6_4", + "step_executeCommand_open_c41d76889_7_1", + "step_executeCommand_assertPalette_c41d76889_7_1", + "step_executeCommand_filter_c41d76889_7_1", + "step_executeCommand_assertCommand_c41d76889_7_1", + "step_executeCommand_execute_c41d76889_7_1", + "step_filterOption_filter_c41d76889_7_2", + "step_filterOption_assertOption_c41d76889_7_2", + "step_filterOption_confirm_c41d76889_7_2", + "step_browserM365SignIn_assertAccount_c41d76889_7_3", + "step_browserM365SignIn_focusAccount_c41d76889_7_3", + "step_browserM365SignIn_enterAccount_c41d76889_7_3", + "step_browserM365SignIn_submitAccount_c41d76889_7_3", + "step_browserM365SignIn_assertPassword_c41d76889_7_3", + "step_browserM365SignIn_enterPassword_c41d76889_7_3", + "step_browserM365SignIn_submitPassword_c41d76889_7_3", + "step_browserM365SignIn_assertStaySignedIn_c41d76889_7_3", + "step_browserM365SignIn_confirmStaySignedIn_c41d76889_7_3", + "step_browserM365SignIn_refresh_c41d76889_7_3", + "step_assertReady_assertReady_c41d76889_7_4", + "step_sendCopilotMessage_assertInput_c41d76889_9_1", + "step_sendCopilotMessage_focusInput_c41d76889_9_1", + "step_sendCopilotMessage_type_c41d76889_9_1", + "step_sendCopilotMessage_send_c41d76889_9_1", + "step_assertChatReplied_assert_c41d76889_9_2", + "step_assertChatContains_assert_c41d76889_9_3" + ], + "tags": [ + "case_id:weather-ts-azure-openai-remote-copilot", + "scenario_id:SCN-CREATE-WEATHER-01", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c41d76889_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c41d76889_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c41d76889_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c41d76889_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c41d76889_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c41d76889_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c41d76889_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c41d76889_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c41d76889_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c41d76889_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c41d76889_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c41d76889_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c41d76889_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c41d76889_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Azure OpenAI" + }, + "description": "Type the resolved option label Azure OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Azure OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c41d76889_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c41d76889_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c41d76889_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c41d76889_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c41d76889_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c41d76889_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Endpoint is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c41d76889_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c41d76889_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_ENDPOINT}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c41d76889_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c41d76889_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c41d76889_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c41d76889_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Azure OpenAI Deployment Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c41d76889_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c41d76889_1_11", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_OPENAI_MODEL}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c41d76889_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c41d76889_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c41d76889_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c41d76889_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c41d76889_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c41d76889_1_13", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c41d76889_1_13" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c41d76889_1_14", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c41d76889_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c41d76889_1_14", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c41d76889_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c41d76889_1_14", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c41d76889_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c41d76889_1_15", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c41d76889_1_14" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c41d76889_1_15" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c41d76889_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c41d76889_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInAzure_assertOption_c41d76889_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry labeled Sign in to Azure.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInAzure_selectOption_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 165, + "y": 127 + }, + "description": "Click the \"Sign in to Azure\" entry in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertOption_c41d76889_3_2" + ], + "preconditions": [ + "dhash:165:127:16:5:5819353567ef55aa", + "dhash:165:127:96:5:2cd1259b9b941a6a", + "dhash:165:127:0:10:a2942223a3222421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_confirmSignIn_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 534, + "y": 98 + }, + "description": "Click the \"Sign in\" button on the Microsoft authentication popup in Visual Studio Code to proceed with Azure authorization for the Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_selectOption_c41d76889_3_2" + ], + "preconditions": [ + "dhash:534:98:16:5:554a54555555468f", + "dhash:534:98:96:5:0002740b0a700800", + "dhash:534:98:0:10:12322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_allow_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 457, + "y": 96 + }, + "description": "Click the \"Allow\" button in the Microsoft 365 sign-in prompt to authorize the extension \"Microsoft 365 Agents Toolkit\" within Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_confirmSignIn_c41d76889_3_2" + ], + "preconditions": [ + "dhash:457:96:16:5:524d5552564cb3ca", + "dhash:457:96:96:5:0004609c0c600400", + "dhash:457:96:0:10:d2322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_focusAccount_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 432, + "y": 327 + }, + "description": "Click on the \"Email, phone, or Skype\" input field in the Microsoft sign-in dialog on the login.microsoftonline.com webpage to activate text entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_allow_c41d76889_3_2" + ], + "preconditions": [ + "dhash:432:327:16:5:114c134b4a13b2cc", + "dhash:432:327:96:5:686000a2a95500cb", + "dhash:432:327:0:10:1361717965617935" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_typeAccount_c41d76889_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Azure account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_focusAccount_c41d76889_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28d0d9e7e4dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_next_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 631, + "y": 462 + }, + "description": "Click the \"Next\" button on the Microsoft sign-in page to continue Azure authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typeAccount_c41d76889_3_2" + ], + "preconditions": [ + "dhash:631:462:16:5:0000000091000000", + "dhash:631:462:96:5:000000004e31314e", + "dhash:631:462:0:10:1392f0dac6e6d8e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "ocr:true" + ] + }, + { + "step_id": "step_signInAzure_typePassword_c41d76889_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Azure account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_next_c41d76889_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60", + "delay:5" + ] + }, + { + "step_id": "step_signInAzure_submit_c41d76889_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter in the password field on the Microsoft login page to submit the Azure credentials.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typePassword_c41d76889_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_closeBrowser_c41d76889_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 991, + "y": 18 + }, + "description": "Click the red close (X) button in the top-right corner of the Google Chrome window to close the Visual Studio Code sign-in confirmation page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_submit_c41d76889_3_2" + ], + "preconditions": [ + "dhash:991:18:16:5:b020624245454242", + "dhash:991:18:96:5:629393936a903232", + "dhash:991:18:0:10:0021410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_assertReady_c41d76889_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:AZURE_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_closeBrowser_c41d76889_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertReady_c41d76889_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertOption_c41d76889_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365FromPicker_selectOption_c41d76889_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertOption_c41d76889_4_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_confirmSignIn_c41d76889_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_selectOption_c41d76889_4_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_useAnotherAccount_c41d76889_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 447, + "y": 487 + }, + "description": "Click the \"Use another account\" option on the Microsoft \"Pick an account\" login screen in Google Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_confirmSignIn_c41d76889_4_2" + ], + "preconditions": [ + "dhash:447:487:16:5:ac534b4aaaaa6a15", + "dhash:447:487:96:5:0100228d15a20000", + "dhash:447:487:0:10:1312e8d89ed6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365FromPicker_typeAccount_c41d76889_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field the account picker opened.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_useAnotherAccount_c41d76889_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392f8d8c6e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_next_c41d76889_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 655, + "y": 505 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typeAccount_c41d76889_4_2" + ], + "preconditions": [ + "dhash:655:505:16:5:0000000080400020", + "dhash:655:505:96:5:0000408bcb4b0000", + "dhash:655:505:0:10:1392f8d8c7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365FromPicker_typePassword_c41d76889_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_next_c41d76889_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_submit_c41d76889_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typePassword_c41d76889_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_closeBrowser_c41d76889_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1008, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_submit_c41d76889_4_2" + ], + "preconditions": [ + "dhash:1008:19:16:5:a322c95a325ac922", + "dhash:1008:19:96:5:926363639200c6c4", + "dhash:1008:19:0:10:1312094769614541" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertReady_c41d76889_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_closeBrowser_c41d76889_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertReady_c41d76889_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Select a resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "+ New resource group" + }, + "description": "Type the resolved option label + New resource group into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option + New resource group is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c41d76889_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New resource group name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c41d76889_5_4", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name}}-rg" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c41d76889_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c41d76889_5_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c41d76889_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Location for the new resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c41d76889_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c41d76889_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c41d76889_5_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:RESOURCE_GROUP_REGION}}" + }, + "description": "Type the resolved option label ${{env:RESOURCE_GROUP_REGION}} into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c41d76889_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c41d76889_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option ${{env:RESOURCE_GROUP_REGION}} is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c41d76889_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c41d76889_5_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c41d76889_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_5_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Costs may apply based on usage. Do you want to provision resources in dev environment using listed accounts? is visible with the primary action Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c41d76889_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c41d76889_5_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Provision in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c41d76889_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c41d76889_5_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains provision stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c41d76889_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c41d76889_5_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_6_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Do you want to deploy resources in dev environment? is visible with the primary action Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c41d76889_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Deploy in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c41d76889_6_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains actions in deploy stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c41d76889_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c41d76889_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c41d76889_7_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "(Preview) Launch Remote in Copilot (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c41d76889_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option (Preview) Launch Remote in Copilot (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c41d76889_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c41d76889_7_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c41d76889_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_browserM365SignIn_assertAccount_c41d76889_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft sign-in page is visible in Chrome with an email or username input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c41d76889_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_browserM365SignIn_focusAccount_c41d76889_7_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 429, + "y": 347 + }, + "description": "Click the email or username input on the Microsoft sign-in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertAccount_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_enterAccount_c41d76889_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the registered Microsoft 365 account in the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_focusAccount_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_submitAccount_c41d76889_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to continue to password entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_enterAccount_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_assertPassword_c41d76889_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft sign-in password input is visible and focused in Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_submitAccount_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365SignIn_enterPassword_c41d76889_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertPassword_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_submitPassword_c41d76889_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_enterPassword_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365SignIn_assertStaySignedIn_c41d76889_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_submitPassword_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365SignIn_confirmStaySignedIn_c41d76889_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_assertStaySignedIn_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_browserM365SignIn_refresh_c41d76889_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f5" + }, + "description": "Press F5 to refresh Microsoft 365 Copilot after browser authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_confirmStaySignedIn_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "force_run:true" + ] + }, + { + "step_id": "step_assertReady_assertReady_c41d76889_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion an agent whose name starts with ${{var:app_name}} is displayed in the main section of Microsoft 365 Copilot.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365SignIn_refresh_c41d76889_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_sendCopilotMessage_assertInput_c41d76889_9_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Copilot message input is visible and its placeholder text starts with Message ${{var:app_name}}.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c41d76889_7_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendCopilotMessage_focusInput_c41d76889_9_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 416, + "y": 369 + }, + "description": "Click the \"Message ${{var:app_name}}\" input box in the Microsoft 365 Copilot web application.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_assertInput_c41d76889_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message", + "ocr:true" + ] + }, + { + "step_id": "step_sendCopilotMessage_type_c41d76889_9_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Copilot message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_focusInput_c41d76889_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendCopilotMessage_send_c41d76889_9_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Copilot message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_type_c41d76889_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:copilot", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_c41d76889_9_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendCopilotMessage_send_c41d76889_9_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_c41d76889_9_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_c41d76889_9_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json similarity index 78% rename from packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-preview.json rename to packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index 67dffefbae4..bee26030be1 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -1,7 +1,7 @@ { "plan_metadata": { "version": "1.1", - "plan_id": "plan_7374fcb31c11", + "plan_id": "plan_439b98d6bc82", "execution_context": { "delay_between_steps": 1, "stop_on_error": true, @@ -9,165 +9,165 @@ "precondition_retry_interval": 1 }, "total_steps": 149, - "name": "weather-ts-azure-openai-remote-preview", + "name": "weather-ts-azure-openai-remote-teams", "description": { "owner": "", "workitem": "SCN-CREATE-WEATHER-01", "other": "" }, "execution_order": [ - "step_closeWelcomeOverlay_assertVisible_cb4a8be87_1_1", - "step_closeWelcomeOverlay_close_cb4a8be87_1_1", - "step_closeWelcomeOverlay_assertReady_cb4a8be87_1_1", - "step_executeCommand_open_cb4a8be87_1_2", - "step_executeCommand_assertPalette_cb4a8be87_1_2", - "step_executeCommand_filter_cb4a8be87_1_2", - "step_executeCommand_assertCommand_cb4a8be87_1_2", - "step_executeCommand_execute_cb4a8be87_1_2", - "step_assertToolkitViewSettled_assert_cb4a8be87_1_3", - "step_closeGetStartedEditor_assertActive_cb4a8be87_1_4", - "step_closeGetStartedEditor_close_cb4a8be87_1_4", - "step_closeGetStartedEditor_assertClosed_cb4a8be87_1_4", - "step_executeCommand_open_cb4a8be87_1_5", - "step_executeCommand_assertPalette_cb4a8be87_1_5", - "step_executeCommand_filter_cb4a8be87_1_5", - "step_executeCommand_assertCommand_cb4a8be87_1_5", - "step_executeCommand_execute_cb4a8be87_1_5", - "step_singleSelect_assertQuestion_cb4a8be87_1_6", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_6", - "step_singleSelect_filter_cb4a8be87_1_6", - "step_singleSelect_assertOption_cb4a8be87_1_6", - "step_singleSelect_confirm_cb4a8be87_1_6", - "step_singleSelect_assertQuestion_cb4a8be87_1_7", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_7", - "step_singleSelect_filter_cb4a8be87_1_7", - "step_singleSelect_assertOption_cb4a8be87_1_7", - "step_singleSelect_confirm_cb4a8be87_1_7", - "step_singleSelect_assertQuestion_cb4a8be87_1_8", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_8", - "step_singleSelect_filter_cb4a8be87_1_8", - "step_singleSelect_assertOption_cb4a8be87_1_8", - "step_singleSelect_confirm_cb4a8be87_1_8", - "step_textInput_assertQuestion_cb4a8be87_1_9", - "step_textInput_input_cb4a8be87_1_9", - "step_textInput_confirm_cb4a8be87_1_9", - "step_textInput_assertQuestion_cb4a8be87_1_10", - "step_textInput_input_cb4a8be87_1_10", - "step_textInput_confirm_cb4a8be87_1_10", - "step_textInput_assertQuestion_cb4a8be87_1_11", - "step_textInput_input_cb4a8be87_1_11", - "step_textInput_confirm_cb4a8be87_1_11", - "step_singleSelect_assertQuestion_cb4a8be87_1_12", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_12", - "step_singleSelect_filter_cb4a8be87_1_12", - "step_singleSelect_assertOption_cb4a8be87_1_12", - "step_singleSelect_confirm_cb4a8be87_1_12", - "step_confirmOption_assertPrompt_cb4a8be87_1_13", - "step_confirmOption_confirm_cb4a8be87_1_13", - "step_textInput_assertQuestion_cb4a8be87_1_14", - "step_textInput_input_cb4a8be87_1_14", - "step_textInput_confirm_cb4a8be87_1_14", - "step_assertProjectWindowReady_assert_cb4a8be87_1_15", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_1", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_2", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_3", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_4", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_5", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_6", - "step_checkWorkspaceFiles_verify_cb4a8be87_2_7", - "step_executeCommand_open_cb4a8be87_3_1", - "step_executeCommand_assertPalette_cb4a8be87_3_1", - "step_executeCommand_filter_cb4a8be87_3_1", - "step_executeCommand_assertCommand_cb4a8be87_3_1", - "step_executeCommand_execute_cb4a8be87_3_1", - "step_signInAzure_assertOption_cb4a8be87_3_2", - "step_signInAzure_selectOption_cb4a8be87_3_2", - "step_signInAzure_confirmSignIn_cb4a8be87_3_2", - "step_signInAzure_allow_cb4a8be87_3_2", - "step_signInAzure_focusAccount_cb4a8be87_3_2", - "step_signInAzure_typeAccount_cb4a8be87_3_2", - "step_signInAzure_next_cb4a8be87_3_2", - "step_signInAzure_typePassword_cb4a8be87_3_2", - "step_signInAzure_submit_cb4a8be87_3_2", - "step_signInAzure_closeBrowser_cb4a8be87_3_2", - "step_signInAzure_assertReady_cb4a8be87_3_2", - "step_executeCommand_open_cb4a8be87_4_1", - "step_executeCommand_assertPalette_cb4a8be87_4_1", - "step_executeCommand_filter_cb4a8be87_4_1", - "step_executeCommand_assertCommand_cb4a8be87_4_1", - "step_executeCommand_execute_cb4a8be87_4_1", - "step_signInM365FromPicker_assertOption_cb4a8be87_4_2", - "step_signInM365FromPicker_selectOption_cb4a8be87_4_2", - "step_signInM365FromPicker_confirmSignIn_cb4a8be87_4_2", - "step_signInM365FromPicker_useAnotherAccount_cb4a8be87_4_2", - "step_signInM365FromPicker_typeAccount_cb4a8be87_4_2", - "step_signInM365FromPicker_next_cb4a8be87_4_2", - "step_signInM365FromPicker_typePassword_cb4a8be87_4_2", - "step_signInM365FromPicker_submit_cb4a8be87_4_2", - "step_signInM365FromPicker_closeBrowser_cb4a8be87_4_2", - "step_signInM365FromPicker_assertReady_cb4a8be87_4_2", - "step_executeCommand_open_cb4a8be87_5_1", - "step_executeCommand_assertPalette_cb4a8be87_5_1", - "step_executeCommand_filter_cb4a8be87_5_1", - "step_executeCommand_assertCommand_cb4a8be87_5_1", - "step_executeCommand_execute_cb4a8be87_5_1", - "step_executeCommand_open_cb4a8be87_5_2", - "step_executeCommand_assertPalette_cb4a8be87_5_2", - "step_executeCommand_filter_cb4a8be87_5_2", - "step_executeCommand_assertCommand_cb4a8be87_5_2", - "step_executeCommand_execute_cb4a8be87_5_2", - "step_singleSelect_assertQuestion_cb4a8be87_5_3", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_3", - "step_singleSelect_filter_cb4a8be87_5_3", - "step_singleSelect_assertOption_cb4a8be87_5_3", - "step_singleSelect_confirm_cb4a8be87_5_3", - "step_textInput_assertQuestion_cb4a8be87_5_4", - "step_textInput_input_cb4a8be87_5_4", - "step_textInput_confirm_cb4a8be87_5_4", - "step_singleSelect_assertQuestion_cb4a8be87_5_5", - "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_5", - "step_singleSelect_filter_cb4a8be87_5_5", - "step_singleSelect_assertOption_cb4a8be87_5_5", - "step_singleSelect_confirm_cb4a8be87_5_5", - "step_clickPrimaryAction_assertDialog_cb4a8be87_5_6", - "step_clickPrimaryAction_click_cb4a8be87_5_6", - "step_assertNotificationContains_assert_cb4a8be87_5_7", - "step_executeCommand_open_cb4a8be87_6_1", - "step_executeCommand_assertPalette_cb4a8be87_6_1", - "step_executeCommand_filter_cb4a8be87_6_1", - "step_executeCommand_assertCommand_cb4a8be87_6_1", - "step_executeCommand_execute_cb4a8be87_6_1", - "step_executeCommand_open_cb4a8be87_6_2", - "step_executeCommand_assertPalette_cb4a8be87_6_2", - "step_executeCommand_filter_cb4a8be87_6_2", - "step_executeCommand_assertCommand_cb4a8be87_6_2", - "step_executeCommand_execute_cb4a8be87_6_2", - "step_clickPrimaryAction_assertDialog_cb4a8be87_6_3", - "step_clickPrimaryAction_click_cb4a8be87_6_3", - "step_assertNotificationContains_assert_cb4a8be87_6_4", - "step_executeCommand_open_cb4a8be87_7_1", - "step_executeCommand_assertPalette_cb4a8be87_7_1", - "step_executeCommand_filter_cb4a8be87_7_1", - "step_executeCommand_assertCommand_cb4a8be87_7_1", - "step_executeCommand_execute_cb4a8be87_7_1", - "step_filterOption_filter_cb4a8be87_7_2", - "step_filterOption_assertOption_cb4a8be87_7_2", - "step_filterOption_confirm_cb4a8be87_7_2", - "step_assertReady_assertReady_cb4a8be87_7_3", - "step_addAndOpenApp_assertAdd_cb4a8be87_8_1", - "step_addAndOpenApp_add_cb4a8be87_8_1", - "step_addAndOpenApp_assertAdded_cb4a8be87_8_1", - "step_addAndOpenApp_open_cb4a8be87_8_1", - "step_addAndOpenApp_assertReady_cb4a8be87_8_1", - "step_sendTeamsMessage_assertInput_cb4a8be87_9_1", - "step_sendTeamsMessage_focusInput_cb4a8be87_9_1", - "step_sendTeamsMessage_type_cb4a8be87_9_1", - "step_sendTeamsMessage_send_cb4a8be87_9_1", - "step_assertChatReplied_assert_cb4a8be87_9_2", - "step_assertChatContains_assert_cb4a8be87_9_3" + "step_closeWelcomeOverlay_assertVisible_c16c2d022_1_1", + "step_closeWelcomeOverlay_close_c16c2d022_1_1", + "step_closeWelcomeOverlay_assertReady_c16c2d022_1_1", + "step_executeCommand_open_c16c2d022_1_2", + "step_executeCommand_assertPalette_c16c2d022_1_2", + "step_executeCommand_filter_c16c2d022_1_2", + "step_executeCommand_assertCommand_c16c2d022_1_2", + "step_executeCommand_execute_c16c2d022_1_2", + "step_assertToolkitViewSettled_assert_c16c2d022_1_3", + "step_closeGetStartedEditor_assertActive_c16c2d022_1_4", + "step_closeGetStartedEditor_close_c16c2d022_1_4", + "step_closeGetStartedEditor_assertClosed_c16c2d022_1_4", + "step_executeCommand_open_c16c2d022_1_5", + "step_executeCommand_assertPalette_c16c2d022_1_5", + "step_executeCommand_filter_c16c2d022_1_5", + "step_executeCommand_assertCommand_c16c2d022_1_5", + "step_executeCommand_execute_c16c2d022_1_5", + "step_singleSelect_assertQuestion_c16c2d022_1_6", + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_6", + "step_singleSelect_filter_c16c2d022_1_6", + "step_singleSelect_assertOption_c16c2d022_1_6", + "step_singleSelect_confirm_c16c2d022_1_6", + "step_singleSelect_assertQuestion_c16c2d022_1_7", + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_7", + "step_singleSelect_filter_c16c2d022_1_7", + "step_singleSelect_assertOption_c16c2d022_1_7", + "step_singleSelect_confirm_c16c2d022_1_7", + "step_singleSelect_assertQuestion_c16c2d022_1_8", + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_8", + "step_singleSelect_filter_c16c2d022_1_8", + "step_singleSelect_assertOption_c16c2d022_1_8", + "step_singleSelect_confirm_c16c2d022_1_8", + "step_textInput_assertQuestion_c16c2d022_1_9", + "step_textInput_input_c16c2d022_1_9", + "step_textInput_confirm_c16c2d022_1_9", + "step_textInput_assertQuestion_c16c2d022_1_10", + "step_textInput_input_c16c2d022_1_10", + "step_textInput_confirm_c16c2d022_1_10", + "step_textInput_assertQuestion_c16c2d022_1_11", + "step_textInput_input_c16c2d022_1_11", + "step_textInput_confirm_c16c2d022_1_11", + "step_singleSelect_assertQuestion_c16c2d022_1_12", + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_12", + "step_singleSelect_filter_c16c2d022_1_12", + "step_singleSelect_assertOption_c16c2d022_1_12", + "step_singleSelect_confirm_c16c2d022_1_12", + "step_confirmOption_assertPrompt_c16c2d022_1_13", + "step_confirmOption_confirm_c16c2d022_1_13", + "step_textInput_assertQuestion_c16c2d022_1_14", + "step_textInput_input_c16c2d022_1_14", + "step_textInput_confirm_c16c2d022_1_14", + "step_assertProjectWindowReady_assert_c16c2d022_1_15", + "step_checkWorkspaceFiles_verify_c16c2d022_2_1", + "step_checkWorkspaceFiles_verify_c16c2d022_2_2", + "step_checkWorkspaceFiles_verify_c16c2d022_2_3", + "step_checkWorkspaceFiles_verify_c16c2d022_2_4", + "step_checkWorkspaceFiles_verify_c16c2d022_2_5", + "step_checkWorkspaceFiles_verify_c16c2d022_2_6", + "step_checkWorkspaceFiles_verify_c16c2d022_2_7", + "step_executeCommand_open_c16c2d022_3_1", + "step_executeCommand_assertPalette_c16c2d022_3_1", + "step_executeCommand_filter_c16c2d022_3_1", + "step_executeCommand_assertCommand_c16c2d022_3_1", + "step_executeCommand_execute_c16c2d022_3_1", + "step_signInAzure_assertOption_c16c2d022_3_2", + "step_signInAzure_selectOption_c16c2d022_3_2", + "step_signInAzure_confirmSignIn_c16c2d022_3_2", + "step_signInAzure_allow_c16c2d022_3_2", + "step_signInAzure_focusAccount_c16c2d022_3_2", + "step_signInAzure_typeAccount_c16c2d022_3_2", + "step_signInAzure_next_c16c2d022_3_2", + "step_signInAzure_typePassword_c16c2d022_3_2", + "step_signInAzure_submit_c16c2d022_3_2", + "step_signInAzure_closeBrowser_c16c2d022_3_2", + "step_signInAzure_assertReady_c16c2d022_3_2", + "step_executeCommand_open_c16c2d022_4_1", + "step_executeCommand_assertPalette_c16c2d022_4_1", + "step_executeCommand_filter_c16c2d022_4_1", + "step_executeCommand_assertCommand_c16c2d022_4_1", + "step_executeCommand_execute_c16c2d022_4_1", + "step_signInM365FromPicker_assertOption_c16c2d022_4_2", + "step_signInM365FromPicker_selectOption_c16c2d022_4_2", + "step_signInM365FromPicker_confirmSignIn_c16c2d022_4_2", + "step_signInM365FromPicker_useAnotherAccount_c16c2d022_4_2", + "step_signInM365FromPicker_typeAccount_c16c2d022_4_2", + "step_signInM365FromPicker_next_c16c2d022_4_2", + "step_signInM365FromPicker_typePassword_c16c2d022_4_2", + "step_signInM365FromPicker_submit_c16c2d022_4_2", + "step_signInM365FromPicker_closeBrowser_c16c2d022_4_2", + "step_signInM365FromPicker_assertReady_c16c2d022_4_2", + "step_executeCommand_open_c16c2d022_5_1", + "step_executeCommand_assertPalette_c16c2d022_5_1", + "step_executeCommand_filter_c16c2d022_5_1", + "step_executeCommand_assertCommand_c16c2d022_5_1", + "step_executeCommand_execute_c16c2d022_5_1", + "step_executeCommand_open_c16c2d022_5_2", + "step_executeCommand_assertPalette_c16c2d022_5_2", + "step_executeCommand_filter_c16c2d022_5_2", + "step_executeCommand_assertCommand_c16c2d022_5_2", + "step_executeCommand_execute_c16c2d022_5_2", + "step_singleSelect_assertQuestion_c16c2d022_5_3", + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3", + "step_singleSelect_filter_c16c2d022_5_3", + "step_singleSelect_assertOption_c16c2d022_5_3", + "step_singleSelect_confirm_c16c2d022_5_3", + "step_textInput_assertQuestion_c16c2d022_5_4", + "step_textInput_input_c16c2d022_5_4", + "step_textInput_confirm_c16c2d022_5_4", + "step_singleSelect_assertQuestion_c16c2d022_5_5", + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5", + "step_singleSelect_filter_c16c2d022_5_5", + "step_singleSelect_assertOption_c16c2d022_5_5", + "step_singleSelect_confirm_c16c2d022_5_5", + "step_clickPrimaryAction_assertDialog_c16c2d022_5_6", + "step_clickPrimaryAction_click_c16c2d022_5_6", + "step_assertNotificationContains_assert_c16c2d022_5_7", + "step_executeCommand_open_c16c2d022_6_1", + "step_executeCommand_assertPalette_c16c2d022_6_1", + "step_executeCommand_filter_c16c2d022_6_1", + "step_executeCommand_assertCommand_c16c2d022_6_1", + "step_executeCommand_execute_c16c2d022_6_1", + "step_executeCommand_open_c16c2d022_6_2", + "step_executeCommand_assertPalette_c16c2d022_6_2", + "step_executeCommand_filter_c16c2d022_6_2", + "step_executeCommand_assertCommand_c16c2d022_6_2", + "step_executeCommand_execute_c16c2d022_6_2", + "step_clickPrimaryAction_assertDialog_c16c2d022_6_3", + "step_clickPrimaryAction_click_c16c2d022_6_3", + "step_assertNotificationContains_assert_c16c2d022_6_4", + "step_executeCommand_open_c16c2d022_7_1", + "step_executeCommand_assertPalette_c16c2d022_7_1", + "step_executeCommand_filter_c16c2d022_7_1", + "step_executeCommand_assertCommand_c16c2d022_7_1", + "step_executeCommand_execute_c16c2d022_7_1", + "step_filterOption_filter_c16c2d022_7_2", + "step_filterOption_assertOption_c16c2d022_7_2", + "step_filterOption_confirm_c16c2d022_7_2", + "step_assertReady_assertReady_c16c2d022_7_3", + "step_addAndOpenApp_assertAdd_c16c2d022_8_1", + "step_addAndOpenApp_add_c16c2d022_8_1", + "step_addAndOpenApp_assertAdded_c16c2d022_8_1", + "step_addAndOpenApp_open_c16c2d022_8_1", + "step_addAndOpenApp_assertReady_c16c2d022_8_1", + "step_sendTeamsMessage_assertInput_c16c2d022_9_1", + "step_sendTeamsMessage_focusInput_c16c2d022_9_1", + "step_sendTeamsMessage_type_c16c2d022_9_1", + "step_sendTeamsMessage_send_c16c2d022_9_1", + "step_assertChatReplied_assert_c16c2d022_9_2", + "step_assertChatContains_assert_c16c2d022_9_3" ], "tags": [ - "case_id:weather-ts-azure-openai-remote-preview", + "case_id:weather-ts-azure-openai-remote-teams", "scenario_id:SCN-CREATE-WEATHER-01", "template_id:weather-agent", "gate:pr" @@ -175,7 +175,7 @@ }, "steps": [ { - "step_id": "step_closeWelcomeOverlay_assertVisible_cb4a8be87_1_1", + "step_id": "step_closeWelcomeOverlay_assertVisible_c16c2d022_1_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -194,7 +194,7 @@ ] }, { - "step_id": "step_closeWelcomeOverlay_close_cb4a8be87_1_1", + "step_id": "step_closeWelcomeOverlay_close_c16c2d022_1_1", "agent": "interaction", "tool": "click", "parameters": { @@ -208,7 +208,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_assertVisible_cb4a8be87_1_1" + "step_closeWelcomeOverlay_assertVisible_c16c2d022_1_1" ], "preconditions": [ "dhash:952:128:16:5:255266345964665b", @@ -223,7 +223,7 @@ ] }, { - "step_id": "step_closeWelcomeOverlay_assertReady_cb4a8be87_1_1", + "step_id": "step_closeWelcomeOverlay_assertReady_c16c2d022_1_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -233,7 +233,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_close_cb4a8be87_1_1" + "step_closeWelcomeOverlay_close_c16c2d022_1_1" ], "preconditions": [], "postconditions": [], @@ -244,7 +244,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_1_2", + "step_id": "step_executeCommand_open_c16c2d022_1_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -256,7 +256,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeWelcomeOverlay_assertReady_cb4a8be87_1_1" + "step_closeWelcomeOverlay_assertReady_c16c2d022_1_1" ], "preconditions": [], "postconditions": [], @@ -266,7 +266,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_1_2", + "step_id": "step_executeCommand_assertPalette_c16c2d022_1_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -276,7 +276,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_1_2" + "step_executeCommand_open_c16c2d022_1_2" ], "preconditions": [], "postconditions": [], @@ -287,7 +287,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_1_2", + "step_id": "step_executeCommand_filter_c16c2d022_1_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -299,7 +299,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_1_2" + "step_executeCommand_assertPalette_c16c2d022_1_2" ], "preconditions": [], "postconditions": [], @@ -309,7 +309,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_1_2", + "step_id": "step_executeCommand_assertCommand_c16c2d022_1_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -319,7 +319,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_1_2" + "step_executeCommand_filter_c16c2d022_1_2" ], "preconditions": [], "postconditions": [], @@ -330,7 +330,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_1_2", + "step_id": "step_executeCommand_execute_c16c2d022_1_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -342,7 +342,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_1_2" + "step_executeCommand_assertCommand_c16c2d022_1_2" ], "preconditions": [], "postconditions": [], @@ -352,7 +352,7 @@ ] }, { - "step_id": "step_assertToolkitViewSettled_assert_cb4a8be87_1_3", + "step_id": "step_assertToolkitViewSettled_assert_c16c2d022_1_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -362,7 +362,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_1_2" + "step_executeCommand_execute_c16c2d022_1_2" ], "preconditions": [], "postconditions": [], @@ -373,7 +373,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_assertActive_cb4a8be87_1_4", + "step_id": "step_closeGetStartedEditor_assertActive_c16c2d022_1_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -383,7 +383,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertToolkitViewSettled_assert_cb4a8be87_1_3" + "step_assertToolkitViewSettled_assert_c16c2d022_1_3" ], "preconditions": [], "postconditions": [], @@ -394,7 +394,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_close_cb4a8be87_1_4", + "step_id": "step_closeGetStartedEditor_close_c16c2d022_1_4", "agent": "interaction", "tool": "keyboard_shortcut", "parameters": { @@ -406,7 +406,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_assertActive_cb4a8be87_1_4" + "step_closeGetStartedEditor_assertActive_c16c2d022_1_4" ], "preconditions": [], "postconditions": [], @@ -416,7 +416,7 @@ ] }, { - "step_id": "step_closeGetStartedEditor_assertClosed_cb4a8be87_1_4", + "step_id": "step_closeGetStartedEditor_assertClosed_c16c2d022_1_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -426,7 +426,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_close_cb4a8be87_1_4" + "step_closeGetStartedEditor_close_c16c2d022_1_4" ], "preconditions": [], "postconditions": [], @@ -437,7 +437,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_1_5", + "step_id": "step_executeCommand_open_c16c2d022_1_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -449,7 +449,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_closeGetStartedEditor_assertClosed_cb4a8be87_1_4" + "step_closeGetStartedEditor_assertClosed_c16c2d022_1_4" ], "preconditions": [], "postconditions": [], @@ -459,7 +459,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_1_5", + "step_id": "step_executeCommand_assertPalette_c16c2d022_1_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -469,7 +469,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_1_5" + "step_executeCommand_open_c16c2d022_1_5" ], "preconditions": [], "postconditions": [], @@ -480,7 +480,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_1_5", + "step_id": "step_executeCommand_filter_c16c2d022_1_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -492,7 +492,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_1_5" + "step_executeCommand_assertPalette_c16c2d022_1_5" ], "preconditions": [], "postconditions": [], @@ -502,7 +502,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_1_5", + "step_id": "step_executeCommand_assertCommand_c16c2d022_1_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -512,7 +512,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_1_5" + "step_executeCommand_filter_c16c2d022_1_5" ], "preconditions": [], "postconditions": [], @@ -523,7 +523,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_1_5", + "step_id": "step_executeCommand_execute_c16c2d022_1_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -535,7 +535,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_1_5" + "step_executeCommand_assertCommand_c16c2d022_1_5" ], "preconditions": [], "postconditions": [], @@ -545,7 +545,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_1_6", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -555,7 +555,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_1_5" + "step_executeCommand_execute_c16c2d022_1_5" ], "preconditions": [], "postconditions": [], @@ -566,7 +566,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_6", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -576,7 +576,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_1_6" + "step_singleSelect_assertQuestion_c16c2d022_1_6" ], "preconditions": [], "postconditions": [], @@ -587,7 +587,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_1_6", + "step_id": "step_singleSelect_filter_c16c2d022_1_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -599,7 +599,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_6" + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_6" ], "preconditions": [], "postconditions": [], @@ -609,7 +609,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_1_6", + "step_id": "step_singleSelect_assertOption_c16c2d022_1_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -619,7 +619,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_1_6" + "step_singleSelect_filter_c16c2d022_1_6" ], "preconditions": [], "postconditions": [], @@ -630,7 +630,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_1_6", + "step_id": "step_singleSelect_confirm_c16c2d022_1_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -642,7 +642,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_1_6" + "step_singleSelect_assertOption_c16c2d022_1_6" ], "preconditions": [], "postconditions": [], @@ -652,7 +652,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_1_7", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -662,7 +662,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_1_6" + "step_singleSelect_confirm_c16c2d022_1_6" ], "preconditions": [], "postconditions": [], @@ -673,7 +673,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_7", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -683,7 +683,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_1_7" + "step_singleSelect_assertQuestion_c16c2d022_1_7" ], "preconditions": [], "postconditions": [], @@ -694,7 +694,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_1_7", + "step_id": "step_singleSelect_filter_c16c2d022_1_7", "agent": "interaction", "tool": "type_text", "parameters": { @@ -706,7 +706,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_7" + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_7" ], "preconditions": [], "postconditions": [], @@ -716,7 +716,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_1_7", + "step_id": "step_singleSelect_assertOption_c16c2d022_1_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -726,7 +726,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_1_7" + "step_singleSelect_filter_c16c2d022_1_7" ], "preconditions": [], "postconditions": [], @@ -737,7 +737,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_1_7", + "step_id": "step_singleSelect_confirm_c16c2d022_1_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -749,7 +749,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_1_7" + "step_singleSelect_assertOption_c16c2d022_1_7" ], "preconditions": [], "postconditions": [], @@ -759,7 +759,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_1_8", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -769,7 +769,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_1_7" + "step_singleSelect_confirm_c16c2d022_1_7" ], "preconditions": [], "postconditions": [], @@ -780,7 +780,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_8", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -790,7 +790,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_1_8" + "step_singleSelect_assertQuestion_c16c2d022_1_8" ], "preconditions": [], "postconditions": [], @@ -801,7 +801,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_1_8", + "step_id": "step_singleSelect_filter_c16c2d022_1_8", "agent": "interaction", "tool": "type_text", "parameters": { @@ -813,7 +813,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_8" + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_8" ], "preconditions": [], "postconditions": [], @@ -823,7 +823,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_1_8", + "step_id": "step_singleSelect_assertOption_c16c2d022_1_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -833,7 +833,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_1_8" + "step_singleSelect_filter_c16c2d022_1_8" ], "preconditions": [], "postconditions": [], @@ -844,7 +844,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_1_8", + "step_id": "step_singleSelect_confirm_c16c2d022_1_8", "agent": "interaction", "tool": "key_press", "parameters": { @@ -856,7 +856,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_1_8" + "step_singleSelect_assertOption_c16c2d022_1_8" ], "preconditions": [], "postconditions": [], @@ -866,7 +866,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cb4a8be87_1_9", + "step_id": "step_textInput_assertQuestion_c16c2d022_1_9", "agent": "assertion", "tool": "", "parameters": {}, @@ -876,7 +876,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_1_8" + "step_singleSelect_confirm_c16c2d022_1_8" ], "preconditions": [], "postconditions": [], @@ -887,7 +887,7 @@ ] }, { - "step_id": "step_textInput_input_cb4a8be87_1_9", + "step_id": "step_textInput_input_c16c2d022_1_9", "agent": "interaction", "tool": "type_text", "parameters": { @@ -899,7 +899,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cb4a8be87_1_9" + "step_textInput_assertQuestion_c16c2d022_1_9" ], "preconditions": [], "postconditions": [], @@ -909,7 +909,7 @@ ] }, { - "step_id": "step_textInput_confirm_cb4a8be87_1_9", + "step_id": "step_textInput_confirm_c16c2d022_1_9", "agent": "interaction", "tool": "key_press", "parameters": { @@ -921,7 +921,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cb4a8be87_1_9" + "step_textInput_input_c16c2d022_1_9" ], "preconditions": [], "postconditions": [], @@ -931,7 +931,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cb4a8be87_1_10", + "step_id": "step_textInput_assertQuestion_c16c2d022_1_10", "agent": "assertion", "tool": "", "parameters": {}, @@ -941,7 +941,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cb4a8be87_1_9" + "step_textInput_confirm_c16c2d022_1_9" ], "preconditions": [], "postconditions": [], @@ -952,7 +952,7 @@ ] }, { - "step_id": "step_textInput_input_cb4a8be87_1_10", + "step_id": "step_textInput_input_c16c2d022_1_10", "agent": "interaction", "tool": "type_text", "parameters": { @@ -964,7 +964,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cb4a8be87_1_10" + "step_textInput_assertQuestion_c16c2d022_1_10" ], "preconditions": [], "postconditions": [], @@ -974,7 +974,7 @@ ] }, { - "step_id": "step_textInput_confirm_cb4a8be87_1_10", + "step_id": "step_textInput_confirm_c16c2d022_1_10", "agent": "interaction", "tool": "key_press", "parameters": { @@ -986,7 +986,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cb4a8be87_1_10" + "step_textInput_input_c16c2d022_1_10" ], "preconditions": [], "postconditions": [], @@ -996,7 +996,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cb4a8be87_1_11", + "step_id": "step_textInput_assertQuestion_c16c2d022_1_11", "agent": "assertion", "tool": "", "parameters": {}, @@ -1006,7 +1006,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cb4a8be87_1_10" + "step_textInput_confirm_c16c2d022_1_10" ], "preconditions": [], "postconditions": [], @@ -1017,7 +1017,7 @@ ] }, { - "step_id": "step_textInput_input_cb4a8be87_1_11", + "step_id": "step_textInput_input_c16c2d022_1_11", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1029,7 +1029,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cb4a8be87_1_11" + "step_textInput_assertQuestion_c16c2d022_1_11" ], "preconditions": [], "postconditions": [], @@ -1039,7 +1039,7 @@ ] }, { - "step_id": "step_textInput_confirm_cb4a8be87_1_11", + "step_id": "step_textInput_confirm_c16c2d022_1_11", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1051,7 +1051,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cb4a8be87_1_11" + "step_textInput_input_c16c2d022_1_11" ], "preconditions": [], "postconditions": [], @@ -1061,7 +1061,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_1_12", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_1_12", "agent": "assertion", "tool": "", "parameters": {}, @@ -1071,7 +1071,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cb4a8be87_1_11" + "step_textInput_confirm_c16c2d022_1_11" ], "preconditions": [], "postconditions": [], @@ -1082,7 +1082,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_12", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_1_12", "agent": "assertion", "tool": "", "parameters": {}, @@ -1092,7 +1092,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_1_12" + "step_singleSelect_assertQuestion_c16c2d022_1_12" ], "preconditions": [], "postconditions": [], @@ -1103,7 +1103,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_1_12", + "step_id": "step_singleSelect_filter_c16c2d022_1_12", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1115,7 +1115,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_1_12" + "step_singleSelect_assertOptionsLoaded_c16c2d022_1_12" ], "preconditions": [], "postconditions": [], @@ -1125,7 +1125,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_1_12", + "step_id": "step_singleSelect_assertOption_c16c2d022_1_12", "agent": "assertion", "tool": "", "parameters": {}, @@ -1135,7 +1135,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_1_12" + "step_singleSelect_filter_c16c2d022_1_12" ], "preconditions": [], "postconditions": [], @@ -1146,7 +1146,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_1_12", + "step_id": "step_singleSelect_confirm_c16c2d022_1_12", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1158,7 +1158,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_1_12" + "step_singleSelect_assertOption_c16c2d022_1_12" ], "preconditions": [], "postconditions": [], @@ -1168,7 +1168,7 @@ ] }, { - "step_id": "step_confirmOption_assertPrompt_cb4a8be87_1_13", + "step_id": "step_confirmOption_assertPrompt_c16c2d022_1_13", "agent": "assertion", "tool": "", "parameters": {}, @@ -1178,7 +1178,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_1_12" + "step_singleSelect_confirm_c16c2d022_1_12" ], "preconditions": [], "postconditions": [], @@ -1190,7 +1190,7 @@ ] }, { - "step_id": "step_confirmOption_confirm_cb4a8be87_1_13", + "step_id": "step_confirmOption_confirm_c16c2d022_1_13", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1202,7 +1202,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_confirmOption_assertPrompt_cb4a8be87_1_13" + "step_confirmOption_assertPrompt_c16c2d022_1_13" ], "preconditions": [ "dhash:364:74:16:5:08056a9a5d5516b6", @@ -1217,7 +1217,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cb4a8be87_1_14", + "step_id": "step_textInput_assertQuestion_c16c2d022_1_14", "agent": "assertion", "tool": "", "parameters": {}, @@ -1227,7 +1227,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_confirmOption_confirm_cb4a8be87_1_13" + "step_confirmOption_confirm_c16c2d022_1_13" ], "preconditions": [], "postconditions": [], @@ -1238,7 +1238,7 @@ ] }, { - "step_id": "step_textInput_input_cb4a8be87_1_14", + "step_id": "step_textInput_input_c16c2d022_1_14", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1250,7 +1250,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cb4a8be87_1_14" + "step_textInput_assertQuestion_c16c2d022_1_14" ], "preconditions": [], "postconditions": [], @@ -1260,7 +1260,7 @@ ] }, { - "step_id": "step_textInput_confirm_cb4a8be87_1_14", + "step_id": "step_textInput_confirm_c16c2d022_1_14", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1272,7 +1272,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cb4a8be87_1_14" + "step_textInput_input_c16c2d022_1_14" ], "preconditions": [], "postconditions": [], @@ -1282,7 +1282,7 @@ ] }, { - "step_id": "step_assertProjectWindowReady_assert_cb4a8be87_1_15", + "step_id": "step_assertProjectWindowReady_assert_c16c2d022_1_15", "agent": "assertion", "tool": "", "parameters": {}, @@ -1292,7 +1292,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cb4a8be87_1_14" + "step_textInput_confirm_c16c2d022_1_14" ], "preconditions": [], "postconditions": [], @@ -1303,7 +1303,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_1", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_1", "agent": "code", "tool": "", "parameters": { @@ -1315,7 +1315,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertProjectWindowReady_assert_cb4a8be87_1_15" + "step_assertProjectWindowReady_assert_c16c2d022_1_15" ], "preconditions": [], "postconditions": [], @@ -1326,7 +1326,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_2", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_2", "agent": "code", "tool": "", "parameters": { @@ -1338,7 +1338,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_1" + "step_checkWorkspaceFiles_verify_c16c2d022_2_1" ], "preconditions": [], "postconditions": [], @@ -1349,7 +1349,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_3", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_3", "agent": "code", "tool": "", "parameters": { @@ -1361,7 +1361,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_2" + "step_checkWorkspaceFiles_verify_c16c2d022_2_2" ], "preconditions": [], "postconditions": [], @@ -1372,7 +1372,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_4", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_4", "agent": "code", "tool": "", "parameters": { @@ -1384,7 +1384,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_3" + "step_checkWorkspaceFiles_verify_c16c2d022_2_3" ], "preconditions": [], "postconditions": [], @@ -1395,7 +1395,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_5", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_5", "agent": "code", "tool": "", "parameters": { @@ -1407,7 +1407,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_4" + "step_checkWorkspaceFiles_verify_c16c2d022_2_4" ], "preconditions": [], "postconditions": [], @@ -1418,7 +1418,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_6", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_6", "agent": "code", "tool": "", "parameters": { @@ -1430,7 +1430,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_5" + "step_checkWorkspaceFiles_verify_c16c2d022_2_5" ], "preconditions": [], "postconditions": [], @@ -1441,7 +1441,7 @@ ] }, { - "step_id": "step_checkWorkspaceFiles_verify_cb4a8be87_2_7", + "step_id": "step_checkWorkspaceFiles_verify_c16c2d022_2_7", "agent": "code", "tool": "", "parameters": { @@ -1453,7 +1453,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_6" + "step_checkWorkspaceFiles_verify_c16c2d022_2_6" ], "preconditions": [], "postconditions": [], @@ -1464,7 +1464,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_3_1", + "step_id": "step_executeCommand_open_c16c2d022_3_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1476,7 +1476,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cb4a8be87_2_7" + "step_checkWorkspaceFiles_verify_c16c2d022_2_7" ], "preconditions": [], "postconditions": [], @@ -1486,7 +1486,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_3_1", + "step_id": "step_executeCommand_assertPalette_c16c2d022_3_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1496,7 +1496,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_3_1" + "step_executeCommand_open_c16c2d022_3_1" ], "preconditions": [], "postconditions": [], @@ -1507,7 +1507,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_3_1", + "step_id": "step_executeCommand_filter_c16c2d022_3_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1519,7 +1519,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_3_1" + "step_executeCommand_assertPalette_c16c2d022_3_1" ], "preconditions": [], "postconditions": [], @@ -1529,7 +1529,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_3_1", + "step_id": "step_executeCommand_assertCommand_c16c2d022_3_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1539,7 +1539,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_3_1" + "step_executeCommand_filter_c16c2d022_3_1" ], "preconditions": [], "postconditions": [], @@ -1550,7 +1550,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_3_1", + "step_id": "step_executeCommand_execute_c16c2d022_3_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1562,7 +1562,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_3_1" + "step_executeCommand_assertCommand_c16c2d022_3_1" ], "preconditions": [], "postconditions": [], @@ -1572,7 +1572,7 @@ ] }, { - "step_id": "step_signInAzure_assertOption_cb4a8be87_3_2", + "step_id": "step_signInAzure_assertOption_c16c2d022_3_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1582,7 +1582,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_3_1" + "step_executeCommand_execute_c16c2d022_3_1" ], "preconditions": [], "postconditions": [], @@ -1594,7 +1594,7 @@ ] }, { - "step_id": "step_signInAzure_selectOption_cb4a8be87_3_2", + "step_id": "step_signInAzure_selectOption_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1608,7 +1608,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_assertOption_cb4a8be87_3_2" + "step_signInAzure_assertOption_c16c2d022_3_2" ], "preconditions": [ "dhash:165:127:16:5:5819353567ef55aa", @@ -1622,7 +1622,7 @@ ] }, { - "step_id": "step_signInAzure_confirmSignIn_cb4a8be87_3_2", + "step_id": "step_signInAzure_confirmSignIn_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1636,7 +1636,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_selectOption_cb4a8be87_3_2" + "step_signInAzure_selectOption_c16c2d022_3_2" ], "preconditions": [ "dhash:534:98:16:5:554a54555555468f", @@ -1650,7 +1650,7 @@ ] }, { - "step_id": "step_signInAzure_allow_cb4a8be87_3_2", + "step_id": "step_signInAzure_allow_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1664,7 +1664,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_confirmSignIn_cb4a8be87_3_2" + "step_signInAzure_confirmSignIn_c16c2d022_3_2" ], "preconditions": [ "dhash:457:96:16:5:524d5552564cb3ca", @@ -1678,7 +1678,7 @@ ] }, { - "step_id": "step_signInAzure_focusAccount_cb4a8be87_3_2", + "step_id": "step_signInAzure_focusAccount_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1692,7 +1692,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_allow_cb4a8be87_3_2" + "step_signInAzure_allow_c16c2d022_3_2" ], "preconditions": [ "dhash:432:327:16:5:114c134b4a13b2cc", @@ -1707,7 +1707,7 @@ ] }, { - "step_id": "step_signInAzure_typeAccount_cb4a8be87_3_2", + "step_id": "step_signInAzure_typeAccount_c16c2d022_3_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1719,7 +1719,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_focusAccount_cb4a8be87_3_2" + "step_signInAzure_focusAccount_c16c2d022_3_2" ], "preconditions": [ "dhash:512:384:0:20:1b28d0d9e7e4dae4" @@ -1732,7 +1732,7 @@ ] }, { - "step_id": "step_signInAzure_next_cb4a8be87_3_2", + "step_id": "step_signInAzure_next_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1746,7 +1746,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_typeAccount_cb4a8be87_3_2" + "step_signInAzure_typeAccount_c16c2d022_3_2" ], "preconditions": [ "dhash:631:462:16:5:0000000091000000", @@ -1761,7 +1761,7 @@ ] }, { - "step_id": "step_signInAzure_typePassword_cb4a8be87_3_2", + "step_id": "step_signInAzure_typePassword_c16c2d022_3_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1773,7 +1773,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_next_cb4a8be87_3_2" + "step_signInAzure_next_c16c2d022_3_2" ], "preconditions": [ "dhash:512:384:0:20:1908f0d9d1e6e6e4" @@ -1787,7 +1787,7 @@ ] }, { - "step_id": "step_signInAzure_submit_cb4a8be87_3_2", + "step_id": "step_signInAzure_submit_c16c2d022_3_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1799,7 +1799,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_typePassword_cb4a8be87_3_2" + "step_signInAzure_typePassword_c16c2d022_3_2" ], "preconditions": [ "dhash:512:384:0:20:1908f0d9d1e6e6e4" @@ -1812,7 +1812,7 @@ ] }, { - "step_id": "step_signInAzure_closeBrowser_cb4a8be87_3_2", + "step_id": "step_signInAzure_closeBrowser_c16c2d022_3_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1826,7 +1826,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_submit_cb4a8be87_3_2" + "step_signInAzure_submit_c16c2d022_3_2" ], "preconditions": [ "dhash:991:18:16:5:b020624245454242", @@ -1841,7 +1841,7 @@ ] }, { - "step_id": "step_signInAzure_assertReady_cb4a8be87_3_2", + "step_id": "step_signInAzure_assertReady_c16c2d022_3_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1851,7 +1851,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_closeBrowser_cb4a8be87_3_2" + "step_signInAzure_closeBrowser_c16c2d022_3_2" ], "preconditions": [], "postconditions": [], @@ -1863,7 +1863,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_4_1", + "step_id": "step_executeCommand_open_c16c2d022_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1875,7 +1875,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInAzure_assertReady_cb4a8be87_3_2" + "step_signInAzure_assertReady_c16c2d022_3_2" ], "preconditions": [], "postconditions": [], @@ -1885,7 +1885,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_4_1", + "step_id": "step_executeCommand_assertPalette_c16c2d022_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1895,7 +1895,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_4_1" + "step_executeCommand_open_c16c2d022_4_1" ], "preconditions": [], "postconditions": [], @@ -1906,7 +1906,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_4_1", + "step_id": "step_executeCommand_filter_c16c2d022_4_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1918,7 +1918,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_4_1" + "step_executeCommand_assertPalette_c16c2d022_4_1" ], "preconditions": [], "postconditions": [], @@ -1928,7 +1928,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_4_1", + "step_id": "step_executeCommand_assertCommand_c16c2d022_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1938,7 +1938,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_4_1" + "step_executeCommand_filter_c16c2d022_4_1" ], "preconditions": [], "postconditions": [], @@ -1949,7 +1949,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_4_1", + "step_id": "step_executeCommand_execute_c16c2d022_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1961,7 +1961,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_4_1" + "step_executeCommand_assertCommand_c16c2d022_4_1" ], "preconditions": [], "postconditions": [], @@ -1971,7 +1971,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_assertOption_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_assertOption_c16c2d022_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1981,7 +1981,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_4_1" + "step_executeCommand_execute_c16c2d022_4_1" ], "preconditions": [], "postconditions": [], @@ -1993,7 +1993,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_selectOption_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_selectOption_c16c2d022_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2007,7 +2007,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_assertOption_cb4a8be87_4_2" + "step_signInM365FromPicker_assertOption_c16c2d022_4_2" ], "preconditions": [ "dhash:213:102:16:5:9c63d67674d4c718", @@ -2021,7 +2021,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_confirmSignIn_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_confirmSignIn_c16c2d022_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2035,7 +2035,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_selectOption_cb4a8be87_4_2" + "step_signInM365FromPicker_selectOption_c16c2d022_4_2" ], "preconditions": [ "dhash:762:97:16:5:24b1a72ba9aba343", @@ -2049,7 +2049,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_useAnotherAccount_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_useAnotherAccount_c16c2d022_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2063,7 +2063,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_confirmSignIn_cb4a8be87_4_2" + "step_signInM365FromPicker_confirmSignIn_c16c2d022_4_2" ], "preconditions": [ "dhash:447:487:16:5:ac534b4aaaaa6a15", @@ -2078,7 +2078,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_typeAccount_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_typeAccount_c16c2d022_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2090,7 +2090,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_useAnotherAccount_cb4a8be87_4_2" + "step_signInM365FromPicker_useAnotherAccount_c16c2d022_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392f8d8c6e6dae4" @@ -2103,7 +2103,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_next_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_next_c16c2d022_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2117,7 +2117,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_typeAccount_cb4a8be87_4_2" + "step_signInM365FromPicker_typeAccount_c16c2d022_4_2" ], "preconditions": [ "dhash:655:505:16:5:0000000080400020", @@ -2132,7 +2132,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_typePassword_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_typePassword_c16c2d022_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2144,7 +2144,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_next_cb4a8be87_4_2" + "step_signInM365FromPicker_next_c16c2d022_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392e8d8d9f6e6e4" @@ -2157,7 +2157,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_submit_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_submit_c16c2d022_4_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2169,7 +2169,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_typePassword_cb4a8be87_4_2" + "step_signInM365FromPicker_typePassword_c16c2d022_4_2" ], "preconditions": [ "dhash:512:384:0:20:1392e8d8d9f6e6e4" @@ -2182,7 +2182,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_closeBrowser_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_closeBrowser_c16c2d022_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -2196,7 +2196,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_submit_cb4a8be87_4_2" + "step_signInM365FromPicker_submit_c16c2d022_4_2" ], "preconditions": [ "dhash:1008:19:16:5:a322c95a325ac922", @@ -2211,7 +2211,7 @@ ] }, { - "step_id": "step_signInM365FromPicker_assertReady_cb4a8be87_4_2", + "step_id": "step_signInM365FromPicker_assertReady_c16c2d022_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2221,7 +2221,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_closeBrowser_cb4a8be87_4_2" + "step_signInM365FromPicker_closeBrowser_c16c2d022_4_2" ], "preconditions": [], "postconditions": [], @@ -2233,7 +2233,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_5_1", + "step_id": "step_executeCommand_open_c16c2d022_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2245,7 +2245,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365FromPicker_assertReady_cb4a8be87_4_2" + "step_signInM365FromPicker_assertReady_c16c2d022_4_2" ], "preconditions": [], "postconditions": [], @@ -2255,7 +2255,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_5_1", + "step_id": "step_executeCommand_assertPalette_c16c2d022_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2265,7 +2265,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_5_1" + "step_executeCommand_open_c16c2d022_5_1" ], "preconditions": [], "postconditions": [], @@ -2276,7 +2276,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_5_1", + "step_id": "step_executeCommand_filter_c16c2d022_5_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2288,7 +2288,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_5_1" + "step_executeCommand_assertPalette_c16c2d022_5_1" ], "preconditions": [], "postconditions": [], @@ -2298,7 +2298,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_5_1", + "step_id": "step_executeCommand_assertCommand_c16c2d022_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2308,7 +2308,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_5_1" + "step_executeCommand_filter_c16c2d022_5_1" ], "preconditions": [], "postconditions": [], @@ -2319,7 +2319,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_5_1", + "step_id": "step_executeCommand_execute_c16c2d022_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2331,7 +2331,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_5_1" + "step_executeCommand_assertCommand_c16c2d022_5_1" ], "preconditions": [], "postconditions": [], @@ -2341,7 +2341,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_5_2", + "step_id": "step_executeCommand_open_c16c2d022_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2353,7 +2353,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_5_1" + "step_executeCommand_execute_c16c2d022_5_1" ], "preconditions": [], "postconditions": [], @@ -2363,7 +2363,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_5_2", + "step_id": "step_executeCommand_assertPalette_c16c2d022_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2373,7 +2373,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_5_2" + "step_executeCommand_open_c16c2d022_5_2" ], "preconditions": [], "postconditions": [], @@ -2384,7 +2384,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_5_2", + "step_id": "step_executeCommand_filter_c16c2d022_5_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2396,7 +2396,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_5_2" + "step_executeCommand_assertPalette_c16c2d022_5_2" ], "preconditions": [], "postconditions": [], @@ -2406,7 +2406,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_5_2", + "step_id": "step_executeCommand_assertCommand_c16c2d022_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2416,7 +2416,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_5_2" + "step_executeCommand_filter_c16c2d022_5_2" ], "preconditions": [], "postconditions": [], @@ -2427,7 +2427,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_5_2", + "step_id": "step_executeCommand_execute_c16c2d022_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2439,7 +2439,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_5_2" + "step_executeCommand_assertCommand_c16c2d022_5_2" ], "preconditions": [], "postconditions": [], @@ -2449,7 +2449,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_5_3", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2459,7 +2459,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_5_2" + "step_executeCommand_execute_c16c2d022_5_2" ], "preconditions": [], "postconditions": [], @@ -2470,7 +2470,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2480,7 +2480,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_5_3" + "step_singleSelect_assertQuestion_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2491,7 +2491,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_5_3", + "step_id": "step_singleSelect_filter_c16c2d022_5_3", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2503,7 +2503,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_3" + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2513,7 +2513,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_5_3", + "step_id": "step_singleSelect_assertOption_c16c2d022_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -2523,7 +2523,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_5_3" + "step_singleSelect_filter_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2534,7 +2534,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_5_3", + "step_id": "step_singleSelect_confirm_c16c2d022_5_3", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2546,7 +2546,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_5_3" + "step_singleSelect_assertOption_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2556,7 +2556,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cb4a8be87_5_4", + "step_id": "step_textInput_assertQuestion_c16c2d022_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2566,7 +2566,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_5_3" + "step_singleSelect_confirm_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2577,7 +2577,7 @@ ] }, { - "step_id": "step_textInput_input_cb4a8be87_5_4", + "step_id": "step_textInput_input_c16c2d022_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2589,7 +2589,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cb4a8be87_5_4" + "step_textInput_assertQuestion_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2599,7 +2599,7 @@ ] }, { - "step_id": "step_textInput_confirm_cb4a8be87_5_4", + "step_id": "step_textInput_confirm_c16c2d022_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2611,7 +2611,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cb4a8be87_5_4" + "step_textInput_input_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2621,7 +2621,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_cb4a8be87_5_5", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2631,7 +2631,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cb4a8be87_5_4" + "step_textInput_confirm_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2642,7 +2642,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2652,7 +2652,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_cb4a8be87_5_5" + "step_singleSelect_assertQuestion_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2663,7 +2663,7 @@ ] }, { - "step_id": "step_singleSelect_filter_cb4a8be87_5_5", + "step_id": "step_singleSelect_filter_c16c2d022_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2675,7 +2675,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_cb4a8be87_5_5" + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2685,7 +2685,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_cb4a8be87_5_5", + "step_id": "step_singleSelect_assertOption_c16c2d022_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2695,7 +2695,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_cb4a8be87_5_5" + "step_singleSelect_filter_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2706,7 +2706,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_cb4a8be87_5_5", + "step_id": "step_singleSelect_confirm_c16c2d022_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2718,7 +2718,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_cb4a8be87_5_5" + "step_singleSelect_assertOption_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2728,7 +2728,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_cb4a8be87_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2738,7 +2738,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_cb4a8be87_5_5" + "step_singleSelect_confirm_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2749,7 +2749,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_cb4a8be87_5_6", + "step_id": "step_clickPrimaryAction_click_c16c2d022_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2761,7 +2761,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_cb4a8be87_5_6" + "step_clickPrimaryAction_assertDialog_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2771,7 +2771,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cb4a8be87_5_7", + "step_id": "step_assertNotificationContains_assert_c16c2d022_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2781,7 +2781,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_cb4a8be87_5_6" + "step_clickPrimaryAction_click_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2792,7 +2792,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_6_1", + "step_id": "step_executeCommand_open_c16c2d022_6_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2804,7 +2804,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cb4a8be87_5_7" + "step_assertNotificationContains_assert_c16c2d022_5_7" ], "preconditions": [], "postconditions": [], @@ -2814,7 +2814,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_6_1", + "step_id": "step_executeCommand_assertPalette_c16c2d022_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2824,7 +2824,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_6_1" + "step_executeCommand_open_c16c2d022_6_1" ], "preconditions": [], "postconditions": [], @@ -2835,7 +2835,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_6_1", + "step_id": "step_executeCommand_filter_c16c2d022_6_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2847,7 +2847,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_6_1" + "step_executeCommand_assertPalette_c16c2d022_6_1" ], "preconditions": [], "postconditions": [], @@ -2857,7 +2857,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_6_1", + "step_id": "step_executeCommand_assertCommand_c16c2d022_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -2867,7 +2867,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_6_1" + "step_executeCommand_filter_c16c2d022_6_1" ], "preconditions": [], "postconditions": [], @@ -2878,7 +2878,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_6_1", + "step_id": "step_executeCommand_execute_c16c2d022_6_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2890,7 +2890,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_6_1" + "step_executeCommand_assertCommand_c16c2d022_6_1" ], "preconditions": [], "postconditions": [], @@ -2900,7 +2900,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_6_2", + "step_id": "step_executeCommand_open_c16c2d022_6_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2912,7 +2912,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_6_1" + "step_executeCommand_execute_c16c2d022_6_1" ], "preconditions": [], "postconditions": [], @@ -2922,7 +2922,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_6_2", + "step_id": "step_executeCommand_assertPalette_c16c2d022_6_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2932,7 +2932,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_6_2" + "step_executeCommand_open_c16c2d022_6_2" ], "preconditions": [], "postconditions": [], @@ -2943,7 +2943,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_6_2", + "step_id": "step_executeCommand_filter_c16c2d022_6_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2955,7 +2955,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_6_2" + "step_executeCommand_assertPalette_c16c2d022_6_2" ], "preconditions": [], "postconditions": [], @@ -2965,7 +2965,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_6_2", + "step_id": "step_executeCommand_assertCommand_c16c2d022_6_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -2975,7 +2975,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_6_2" + "step_executeCommand_filter_c16c2d022_6_2" ], "preconditions": [], "postconditions": [], @@ -2986,7 +2986,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_6_2", + "step_id": "step_executeCommand_execute_c16c2d022_6_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2998,7 +2998,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_6_2" + "step_executeCommand_assertCommand_c16c2d022_6_2" ], "preconditions": [], "postconditions": [], @@ -3008,7 +3008,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_cb4a8be87_6_3", + "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_6_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -3018,7 +3018,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_6_2" + "step_executeCommand_execute_c16c2d022_6_2" ], "preconditions": [], "postconditions": [], @@ -3029,7 +3029,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_cb4a8be87_6_3", + "step_id": "step_clickPrimaryAction_click_c16c2d022_6_3", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3041,7 +3041,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_cb4a8be87_6_3" + "step_clickPrimaryAction_assertDialog_c16c2d022_6_3" ], "preconditions": [], "postconditions": [], @@ -3051,7 +3051,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cb4a8be87_6_4", + "step_id": "step_assertNotificationContains_assert_c16c2d022_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3061,7 +3061,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_cb4a8be87_6_3" + "step_clickPrimaryAction_click_c16c2d022_6_3" ], "preconditions": [], "postconditions": [], @@ -3072,7 +3072,7 @@ ] }, { - "step_id": "step_executeCommand_open_cb4a8be87_7_1", + "step_id": "step_executeCommand_open_c16c2d022_7_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3084,7 +3084,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cb4a8be87_6_4" + "step_assertNotificationContains_assert_c16c2d022_6_4" ], "preconditions": [], "postconditions": [], @@ -3094,7 +3094,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cb4a8be87_7_1", + "step_id": "step_executeCommand_assertPalette_c16c2d022_7_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3104,7 +3104,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cb4a8be87_7_1" + "step_executeCommand_open_c16c2d022_7_1" ], "preconditions": [], "postconditions": [], @@ -3115,7 +3115,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cb4a8be87_7_1", + "step_id": "step_executeCommand_filter_c16c2d022_7_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3127,7 +3127,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cb4a8be87_7_1" + "step_executeCommand_assertPalette_c16c2d022_7_1" ], "preconditions": [], "postconditions": [], @@ -3137,7 +3137,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cb4a8be87_7_1", + "step_id": "step_executeCommand_assertCommand_c16c2d022_7_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3147,7 +3147,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cb4a8be87_7_1" + "step_executeCommand_filter_c16c2d022_7_1" ], "preconditions": [], "postconditions": [], @@ -3158,7 +3158,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cb4a8be87_7_1", + "step_id": "step_executeCommand_execute_c16c2d022_7_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3170,7 +3170,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cb4a8be87_7_1" + "step_executeCommand_assertCommand_c16c2d022_7_1" ], "preconditions": [], "postconditions": [], @@ -3180,7 +3180,7 @@ ] }, { - "step_id": "step_filterOption_filter_cb4a8be87_7_2", + "step_id": "step_filterOption_filter_c16c2d022_7_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3192,7 +3192,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cb4a8be87_7_1" + "step_executeCommand_execute_c16c2d022_7_1" ], "preconditions": [], "postconditions": [], @@ -3202,7 +3202,7 @@ ] }, { - "step_id": "step_filterOption_assertOption_cb4a8be87_7_2", + "step_id": "step_filterOption_assertOption_c16c2d022_7_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -3212,7 +3212,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_filter_cb4a8be87_7_2" + "step_filterOption_filter_c16c2d022_7_2" ], "preconditions": [], "postconditions": [], @@ -3223,7 +3223,7 @@ ] }, { - "step_id": "step_filterOption_confirm_cb4a8be87_7_2", + "step_id": "step_filterOption_confirm_c16c2d022_7_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3235,7 +3235,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_assertOption_cb4a8be87_7_2" + "step_filterOption_assertOption_c16c2d022_7_2" ], "preconditions": [], "postconditions": [], @@ -3245,7 +3245,7 @@ ] }, { - "step_id": "step_assertReady_assertReady_cb4a8be87_7_3", + "step_id": "step_assertReady_assertReady_c16c2d022_7_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -3255,7 +3255,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_confirm_cb4a8be87_7_2" + "step_filterOption_confirm_c16c2d022_7_2" ], "preconditions": [], "postconditions": [], @@ -3266,7 +3266,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdd_cb4a8be87_8_1", + "step_id": "step_addAndOpenApp_assertAdd_c16c2d022_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3276,7 +3276,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_cb4a8be87_7_3" + "step_assertReady_assertReady_c16c2d022_7_3" ], "preconditions": [], "postconditions": [], @@ -3288,7 +3288,7 @@ ] }, { - "step_id": "step_addAndOpenApp_add_cb4a8be87_8_1", + "step_id": "step_addAndOpenApp_add_c16c2d022_8_1", "agent": "interaction", "tool": "click", "parameters": { @@ -3302,7 +3302,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdd_cb4a8be87_8_1" + "step_addAndOpenApp_assertAdd_c16c2d022_8_1" ], "preconditions": [ "dhash:288:214:16:5:05100a0511030b12", @@ -3317,7 +3317,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdded_cb4a8be87_8_1", + "step_id": "step_addAndOpenApp_assertAdded_c16c2d022_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3327,7 +3327,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_add_cb4a8be87_8_1" + "step_addAndOpenApp_add_c16c2d022_8_1" ], "preconditions": [], "postconditions": [], @@ -3339,7 +3339,7 @@ ] }, { - "step_id": "step_addAndOpenApp_open_cb4a8be87_8_1", + "step_id": "step_addAndOpenApp_open_c16c2d022_8_1", "agent": "interaction", "tool": "click", "parameters": { @@ -3353,7 +3353,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdded_cb4a8be87_8_1" + "step_addAndOpenApp_assertAdded_c16c2d022_8_1" ], "preconditions": [ "dhash:533:508:16:5:00987494ca4acacc", @@ -3369,7 +3369,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertReady_cb4a8be87_8_1", + "step_id": "step_addAndOpenApp_assertReady_c16c2d022_8_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3379,7 +3379,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_open_cb4a8be87_8_1" + "step_addAndOpenApp_open_c16c2d022_8_1" ], "preconditions": [], "postconditions": [], @@ -3391,7 +3391,7 @@ ] }, { - "step_id": "step_sendTeamsMessage_assertInput_cb4a8be87_9_1", + "step_id": "step_sendTeamsMessage_assertInput_c16c2d022_9_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -3401,7 +3401,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertReady_cb4a8be87_8_1" + "step_addAndOpenApp_assertReady_c16c2d022_8_1" ], "preconditions": [], "postconditions": [], @@ -3414,7 +3414,7 @@ ] }, { - "step_id": "step_sendTeamsMessage_focusInput_cb4a8be87_9_1", + "step_id": "step_sendTeamsMessage_focusInput_c16c2d022_9_1", "agent": "interaction", "tool": "click", "parameters": { @@ -3428,7 +3428,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_sendTeamsMessage_assertInput_cb4a8be87_9_1" + "step_sendTeamsMessage_assertInput_c16c2d022_9_1" ], "preconditions": [ "dhash:200:712:16:5:258c421e0d2c2d1c", @@ -3444,7 +3444,7 @@ ] }, { - "step_id": "step_sendTeamsMessage_type_cb4a8be87_9_1", + "step_id": "step_sendTeamsMessage_type_c16c2d022_9_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3456,7 +3456,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_sendTeamsMessage_focusInput_cb4a8be87_9_1" + "step_sendTeamsMessage_focusInput_c16c2d022_9_1" ], "preconditions": [ "dhash:512:384:0:20:24b4b08e8e8c80a9" @@ -3470,7 +3470,7 @@ ] }, { - "step_id": "step_sendTeamsMessage_send_cb4a8be87_9_1", + "step_id": "step_sendTeamsMessage_send_c16c2d022_9_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3482,7 +3482,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_sendTeamsMessage_type_cb4a8be87_9_1" + "step_sendTeamsMessage_type_c16c2d022_9_1" ], "preconditions": [ "dhash:512:384:0:20:24b4b08e8e8c80b9" @@ -3496,7 +3496,7 @@ ] }, { - "step_id": "step_assertChatReplied_assert_cb4a8be87_9_2", + "step_id": "step_assertChatReplied_assert_c16c2d022_9_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -3506,7 +3506,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_sendTeamsMessage_send_cb4a8be87_9_1" + "step_sendTeamsMessage_send_c16c2d022_9_1" ], "preconditions": [], "postconditions": [], @@ -3518,7 +3518,7 @@ ] }, { - "step_id": "step_assertChatContains_assert_cb4a8be87_9_3", + "step_id": "step_assertChatContains_assert_c16c2d022_9_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -3528,7 +3528,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertChatReplied_assert_cb4a8be87_9_2" + "step_assertChatReplied_assert_c16c2d022_9_2" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json new file mode 100644 index 00000000000..efb9144fc41 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json @@ -0,0 +1,1960 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_a86b093a22d5", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 82, + "name": "weather-ts-openai-local-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-03", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_cc58c0052_1_1", + "step_closeWelcomeOverlay_close_cc58c0052_1_1", + "step_closeWelcomeOverlay_assertReady_cc58c0052_1_1", + "step_executeCommand_open_cc58c0052_1_2", + "step_executeCommand_assertPalette_cc58c0052_1_2", + "step_executeCommand_filter_cc58c0052_1_2", + "step_executeCommand_assertCommand_cc58c0052_1_2", + "step_executeCommand_execute_cc58c0052_1_2", + "step_assertToolkitViewSettled_assert_cc58c0052_1_3", + "step_closeGetStartedEditor_assertActive_cc58c0052_1_4", + "step_closeGetStartedEditor_close_cc58c0052_1_4", + "step_closeGetStartedEditor_assertClosed_cc58c0052_1_4", + "step_executeCommand_open_cc58c0052_1_5", + "step_executeCommand_assertPalette_cc58c0052_1_5", + "step_executeCommand_filter_cc58c0052_1_5", + "step_executeCommand_assertCommand_cc58c0052_1_5", + "step_executeCommand_execute_cc58c0052_1_5", + "step_singleSelect_assertQuestion_cc58c0052_1_6", + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_6", + "step_singleSelect_filter_cc58c0052_1_6", + "step_singleSelect_assertOption_cc58c0052_1_6", + "step_singleSelect_confirm_cc58c0052_1_6", + "step_singleSelect_assertQuestion_cc58c0052_1_7", + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_7", + "step_singleSelect_filter_cc58c0052_1_7", + "step_singleSelect_assertOption_cc58c0052_1_7", + "step_singleSelect_confirm_cc58c0052_1_7", + "step_singleSelect_assertQuestion_cc58c0052_1_8", + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_8", + "step_singleSelect_filter_cc58c0052_1_8", + "step_singleSelect_assertOption_cc58c0052_1_8", + "step_singleSelect_confirm_cc58c0052_1_8", + "step_textInput_assertQuestion_cc58c0052_1_9", + "step_textInput_input_cc58c0052_1_9", + "step_textInput_confirm_cc58c0052_1_9", + "step_singleSelect_assertQuestion_cc58c0052_1_10", + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_10", + "step_singleSelect_filter_cc58c0052_1_10", + "step_singleSelect_assertOption_cc58c0052_1_10", + "step_singleSelect_confirm_cc58c0052_1_10", + "step_confirmOption_assertPrompt_cc58c0052_1_11", + "step_confirmOption_confirm_cc58c0052_1_11", + "step_textInput_assertQuestion_cc58c0052_1_12", + "step_textInput_input_cc58c0052_1_12", + "step_textInput_confirm_cc58c0052_1_12", + "step_assertProjectWindowReady_assert_cc58c0052_1_13", + "step_checkWorkspaceFiles_verify_cc58c0052_2_1", + "step_checkWorkspaceFiles_verify_cc58c0052_2_2", + "step_checkWorkspaceFiles_verify_cc58c0052_2_3", + "step_checkWorkspaceFiles_verify_cc58c0052_2_4", + "step_checkWorkspaceFiles_verify_cc58c0052_2_5", + "step_checkWorkspaceFiles_verify_cc58c0052_2_6", + "step_checkWorkspaceFiles_verify_cc58c0052_2_7", + "step_executeCommand_open_cc58c0052_3_1", + "step_executeCommand_assertPalette_cc58c0052_3_1", + "step_executeCommand_filter_cc58c0052_3_1", + "step_executeCommand_assertCommand_cc58c0052_3_1", + "step_executeCommand_execute_cc58c0052_3_1", + "step_signInM365_assertOption_cc58c0052_3_2", + "step_signInM365_selectOption_cc58c0052_3_2", + "step_signInM365_confirmSignIn_cc58c0052_3_2", + "step_signInM365_focusAccount_cc58c0052_3_2", + "step_signInM365_typeAccount_cc58c0052_3_2", + "step_signInM365_next_cc58c0052_3_2", + "step_signInM365_typePassword_cc58c0052_3_2", + "step_signInM365_submit_cc58c0052_3_2", + "step_signInM365_closeBrowser_cc58c0052_3_2", + "step_signInM365_assertReady_cc58c0052_3_2", + "step_executeCommand_open_cc58c0052_4_1", + "step_executeCommand_assertPalette_cc58c0052_4_1", + "step_executeCommand_filter_cc58c0052_4_1", + "step_executeCommand_assertCommand_cc58c0052_4_1", + "step_executeCommand_execute_cc58c0052_4_1", + "step_filterOption_filter_cc58c0052_4_2", + "step_filterOption_assertOption_cc58c0052_4_2", + "step_filterOption_confirm_cc58c0052_4_2", + "step_assertReady_assertReady_cc58c0052_4_3", + "step_addAndOpenApp_assertAdd_cc58c0052_5_1", + "step_addAndOpenApp_add_cc58c0052_5_1", + "step_addAndOpenApp_assertAdded_cc58c0052_5_1", + "step_addAndOpenApp_open_cc58c0052_5_1", + "step_addAndOpenApp_assertReady_cc58c0052_5_1" + ], + "tags": [ + "case_id:weather-ts-openai-local-teams", + "scenario_id:SCN-CREATE-WEATHER-03", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_cc58c0052_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_cc58c0052_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_cc58c0052_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_cc58c0052_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_cc58c0052_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cc58c0052_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_cc58c0052_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cc58c0052_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cc58c0052_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cc58c0052_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cc58c0052_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cc58c0052_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cc58c0052_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cc58c0052_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cc58c0052_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_cc58c0052_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cc58c0052_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_cc58c0052_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_cc58c0052_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_cc58c0052_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_cc58c0052_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_cc58c0052_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_cc58c0052_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_cc58c0052_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_cc58c0052_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cc58c0052_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cc58c0052_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cc58c0052_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cc58c0052_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cc58c0052_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cc58c0052_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cc58c0052_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cc58c0052_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cc58c0052_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cc58c0052_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cc58c0052_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cc58c0052_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cc58c0052_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cc58c0052_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cc58c0052_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cc58c0052_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cc58c0052_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cc58c0052_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cc58c0052_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cc58c0052_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cc58c0052_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cc58c0052_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cc58c0052_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cc58c0052_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cc58c0052_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cc58c0052_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cc58c0052_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cc58c0052_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cc58c0052_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cc58c0052_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cc58c0052_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "OpenAI" + }, + "description": "Type the resolved option label OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cc58c0052_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cc58c0052_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cc58c0052_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cc58c0052_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cc58c0052_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cc58c0052_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cc58c0052_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cc58c0052_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cc58c0052_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cc58c0052_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_cc58c0052_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cc58c0052_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_cc58c0052_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_cc58c0052_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_cc58c0052_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_cc58c0052_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_cc58c0052_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_cc58c0052_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_cc58c0052_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_cc58c0052_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_cc58c0052_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_cc58c0052_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_cc58c0052_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_cc58c0052_1_11" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_cc58c0052_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_cc58c0052_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_cc58c0052_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_cc58c0052_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_cc58c0052_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_cc58c0052_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_cc58c0052_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_cc58c0052_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_cc58c0052_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_cc58c0052_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_cc58c0052_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cc58c0052_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cc58c0052_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cc58c0052_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cc58c0052_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cc58c0052_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cc58c0052_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cc58c0052_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cc58c0052_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365_assertOption_cc58c0052_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cc58c0052_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365_selectOption_cc58c0052_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertOption_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_confirmSignIn_cc58c0052_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_selectOption_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365_focusAccount_cc58c0052_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 369, + "y": 350 + }, + "description": "Click on the \"Email or phone\" input field in the Microsoft Sign-in form on the login.microsoftonline.com webpage to focus the cursor for credential entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_confirmSignIn_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:369:350:16:5:2113d25252525221", + "dhash:369:350:96:5:0919006d19220812", + "dhash:369:350:0:10:1b88d0d1e5e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365_typeAccount_cc58c0052_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_focusAccount_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_next_cc58c0052_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 629, + "y": 484 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typeAccount_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:629:484:16:5:23248c4b6c24d32c", + "dhash:629:484:96:5:00004eb131860000", + "dhash:629:484:0:10:1b28f0d9e7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365_typePassword_cc58c0052_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_next_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_submit_cc58c0052_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_typePassword_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b08f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_closeBrowser_cc58c0052_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1004, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_submit_cc58c0052_3_2" + ], + "preconditions": [ + "dhash:1004:19:16:5:aac833964c9633cc", + "dhash:1004:19:96:5:d2232323c200e6e6", + "dhash:1004:19:0:10:0b01410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365_assertReady_cc58c0052_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_closeBrowser_cc58c0052_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_cc58c0052_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365_assertReady_cc58c0052_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cc58c0052_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cc58c0052_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cc58c0052_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cc58c0052_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cc58c0052_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cc58c0052_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cc58c0052_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cc58c0052_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_cc58c0052_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cc58c0052_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_cc58c0052_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Debug in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_cc58c0052_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_cc58c0052_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_cc58c0052_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_cc58c0052_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_cc58c0052_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_cc58c0052_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_cc58c0052_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_cc58c0052_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_cc58c0052_5_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_cc58c0052_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_cc58c0052_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_cc58c0052_5_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_cc58c0052_5_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_cc58c0052_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_cc58c0052_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + } + ], + "screenshots": {} +} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json new file mode 100644 index 00000000000..5d047d92d36 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -0,0 +1,3253 @@ +{ + "plan_metadata": { + "version": "1.1", + "plan_id": "plan_c7e9339d5b4c", + "execution_context": { + "delay_between_steps": 1, + "stop_on_error": true, + "precondition_wait_timeout": 30, + "precondition_retry_interval": 1 + }, + "total_steps": 137, + "name": "weather-ts-openai-remote-teams", + "description": { + "owner": "", + "workitem": "SCN-CREATE-WEATHER-03", + "other": "" + }, + "execution_order": [ + "step_closeWelcomeOverlay_assertVisible_c3f41809f_1_1", + "step_closeWelcomeOverlay_close_c3f41809f_1_1", + "step_closeWelcomeOverlay_assertReady_c3f41809f_1_1", + "step_executeCommand_open_c3f41809f_1_2", + "step_executeCommand_assertPalette_c3f41809f_1_2", + "step_executeCommand_filter_c3f41809f_1_2", + "step_executeCommand_assertCommand_c3f41809f_1_2", + "step_executeCommand_execute_c3f41809f_1_2", + "step_assertToolkitViewSettled_assert_c3f41809f_1_3", + "step_closeGetStartedEditor_assertActive_c3f41809f_1_4", + "step_closeGetStartedEditor_close_c3f41809f_1_4", + "step_closeGetStartedEditor_assertClosed_c3f41809f_1_4", + "step_executeCommand_open_c3f41809f_1_5", + "step_executeCommand_assertPalette_c3f41809f_1_5", + "step_executeCommand_filter_c3f41809f_1_5", + "step_executeCommand_assertCommand_c3f41809f_1_5", + "step_executeCommand_execute_c3f41809f_1_5", + "step_singleSelect_assertQuestion_c3f41809f_1_6", + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_6", + "step_singleSelect_filter_c3f41809f_1_6", + "step_singleSelect_assertOption_c3f41809f_1_6", + "step_singleSelect_confirm_c3f41809f_1_6", + "step_singleSelect_assertQuestion_c3f41809f_1_7", + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_7", + "step_singleSelect_filter_c3f41809f_1_7", + "step_singleSelect_assertOption_c3f41809f_1_7", + "step_singleSelect_confirm_c3f41809f_1_7", + "step_singleSelect_assertQuestion_c3f41809f_1_8", + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_8", + "step_singleSelect_filter_c3f41809f_1_8", + "step_singleSelect_assertOption_c3f41809f_1_8", + "step_singleSelect_confirm_c3f41809f_1_8", + "step_textInput_assertQuestion_c3f41809f_1_9", + "step_textInput_input_c3f41809f_1_9", + "step_textInput_confirm_c3f41809f_1_9", + "step_singleSelect_assertQuestion_c3f41809f_1_10", + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_10", + "step_singleSelect_filter_c3f41809f_1_10", + "step_singleSelect_assertOption_c3f41809f_1_10", + "step_singleSelect_confirm_c3f41809f_1_10", + "step_confirmOption_assertPrompt_c3f41809f_1_11", + "step_confirmOption_confirm_c3f41809f_1_11", + "step_textInput_assertQuestion_c3f41809f_1_12", + "step_textInput_input_c3f41809f_1_12", + "step_textInput_confirm_c3f41809f_1_12", + "step_assertProjectWindowReady_assert_c3f41809f_1_13", + "step_checkWorkspaceFiles_verify_c3f41809f_2_1", + "step_checkWorkspaceFiles_verify_c3f41809f_2_2", + "step_checkWorkspaceFiles_verify_c3f41809f_2_3", + "step_checkWorkspaceFiles_verify_c3f41809f_2_4", + "step_checkWorkspaceFiles_verify_c3f41809f_2_5", + "step_checkWorkspaceFiles_verify_c3f41809f_2_6", + "step_checkWorkspaceFiles_verify_c3f41809f_2_7", + "step_executeCommand_open_c3f41809f_3_1", + "step_executeCommand_assertPalette_c3f41809f_3_1", + "step_executeCommand_filter_c3f41809f_3_1", + "step_executeCommand_assertCommand_c3f41809f_3_1", + "step_executeCommand_execute_c3f41809f_3_1", + "step_signInAzure_assertOption_c3f41809f_3_2", + "step_signInAzure_selectOption_c3f41809f_3_2", + "step_signInAzure_confirmSignIn_c3f41809f_3_2", + "step_signInAzure_allow_c3f41809f_3_2", + "step_signInAzure_focusAccount_c3f41809f_3_2", + "step_signInAzure_typeAccount_c3f41809f_3_2", + "step_signInAzure_next_c3f41809f_3_2", + "step_signInAzure_typePassword_c3f41809f_3_2", + "step_signInAzure_submit_c3f41809f_3_2", + "step_signInAzure_closeBrowser_c3f41809f_3_2", + "step_signInAzure_assertReady_c3f41809f_3_2", + "step_executeCommand_open_c3f41809f_4_1", + "step_executeCommand_assertPalette_c3f41809f_4_1", + "step_executeCommand_filter_c3f41809f_4_1", + "step_executeCommand_assertCommand_c3f41809f_4_1", + "step_executeCommand_execute_c3f41809f_4_1", + "step_signInM365FromPicker_assertOption_c3f41809f_4_2", + "step_signInM365FromPicker_selectOption_c3f41809f_4_2", + "step_signInM365FromPicker_confirmSignIn_c3f41809f_4_2", + "step_signInM365FromPicker_useAnotherAccount_c3f41809f_4_2", + "step_signInM365FromPicker_typeAccount_c3f41809f_4_2", + "step_signInM365FromPicker_next_c3f41809f_4_2", + "step_signInM365FromPicker_typePassword_c3f41809f_4_2", + "step_signInM365FromPicker_submit_c3f41809f_4_2", + "step_signInM365FromPicker_closeBrowser_c3f41809f_4_2", + "step_signInM365FromPicker_assertReady_c3f41809f_4_2", + "step_executeCommand_open_c3f41809f_5_1", + "step_executeCommand_assertPalette_c3f41809f_5_1", + "step_executeCommand_filter_c3f41809f_5_1", + "step_executeCommand_assertCommand_c3f41809f_5_1", + "step_executeCommand_execute_c3f41809f_5_1", + "step_executeCommand_open_c3f41809f_5_2", + "step_executeCommand_assertPalette_c3f41809f_5_2", + "step_executeCommand_filter_c3f41809f_5_2", + "step_executeCommand_assertCommand_c3f41809f_5_2", + "step_executeCommand_execute_c3f41809f_5_2", + "step_singleSelect_assertQuestion_c3f41809f_5_3", + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3", + "step_singleSelect_filter_c3f41809f_5_3", + "step_singleSelect_assertOption_c3f41809f_5_3", + "step_singleSelect_confirm_c3f41809f_5_3", + "step_textInput_assertQuestion_c3f41809f_5_4", + "step_textInput_input_c3f41809f_5_4", + "step_textInput_confirm_c3f41809f_5_4", + "step_singleSelect_assertQuestion_c3f41809f_5_5", + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5", + "step_singleSelect_filter_c3f41809f_5_5", + "step_singleSelect_assertOption_c3f41809f_5_5", + "step_singleSelect_confirm_c3f41809f_5_5", + "step_clickPrimaryAction_assertDialog_c3f41809f_5_6", + "step_clickPrimaryAction_click_c3f41809f_5_6", + "step_assertNotificationContains_assert_c3f41809f_5_7", + "step_executeCommand_open_c3f41809f_6_1", + "step_executeCommand_assertPalette_c3f41809f_6_1", + "step_executeCommand_filter_c3f41809f_6_1", + "step_executeCommand_assertCommand_c3f41809f_6_1", + "step_executeCommand_execute_c3f41809f_6_1", + "step_executeCommand_open_c3f41809f_6_2", + "step_executeCommand_assertPalette_c3f41809f_6_2", + "step_executeCommand_filter_c3f41809f_6_2", + "step_executeCommand_assertCommand_c3f41809f_6_2", + "step_executeCommand_execute_c3f41809f_6_2", + "step_clickPrimaryAction_assertDialog_c3f41809f_6_3", + "step_clickPrimaryAction_click_c3f41809f_6_3", + "step_assertNotificationContains_assert_c3f41809f_6_4", + "step_executeCommand_open_c3f41809f_7_1", + "step_executeCommand_assertPalette_c3f41809f_7_1", + "step_executeCommand_filter_c3f41809f_7_1", + "step_executeCommand_assertCommand_c3f41809f_7_1", + "step_executeCommand_execute_c3f41809f_7_1", + "step_filterOption_filter_c3f41809f_7_2", + "step_filterOption_assertOption_c3f41809f_7_2", + "step_filterOption_confirm_c3f41809f_7_2", + "step_assertReady_assertReady_c3f41809f_7_3", + "step_addAndOpenApp_assertAdd_c3f41809f_8_1", + "step_addAndOpenApp_add_c3f41809f_8_1", + "step_addAndOpenApp_assertAdded_c3f41809f_8_1", + "step_addAndOpenApp_open_c3f41809f_8_1", + "step_addAndOpenApp_assertReady_c3f41809f_8_1" + ], + "tags": [ + "case_id:weather-ts-openai-remote-teams", + "scenario_id:SCN-CREATE-WEATHER-03", + "template_id:weather-agent", + "gate:pr" + ] + }, + "steps": [ + { + "step_id": "step_closeWelcomeOverlay_assertVisible_c3f41809f_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup \"Welcome to VS Code\" sign-in overlay is visible and its Close button is available.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_close_c3f41809f_1_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 952, + "y": 128 + }, + "description": "Click the Close button on the startup Welcome sign-in overlay.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertVisible_c3f41809f_1_1" + ], + "preconditions": [ + "dhash:952:128:16:5:255266345964665b", + "dhash:952:128:96:5:16100c10100c1404", + "dhash:952:128:0:10:2592eae0f08e8621" + ], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "force_run:true" + ] + }, + { + "step_id": "step_closeWelcomeOverlay_assertReady_c3f41809f_1_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the startup sign-in overlay is no longer visible and the VS Code workbench is ready.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_close_c3f41809f_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeWelcomeOverlay", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeWelcomeOverlay_assertReady_c3f41809f_1_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_1_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_1_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View and the highlighted command listed under it is titled Microsoft 365 Agents Toolkit: Focus on Microsoft 365 Agents Toolkit View.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_1_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertToolkitViewSettled_assert_c3f41809f_1_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft 365 Agents Toolkit view is open in the side bar and an editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is open in the editor area.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_1_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertToolkitViewSettled", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertActive_c3f41809f_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the editor tab labeled Welcome showing the Build a Declarative Agent walkthrough is the active editor tab in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertToolkitViewSettled_assert_c3f41809f_1_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_closeGetStartedEditor_close_c3f41809f_1_4", + "agent": "interaction", + "tool": "keyboard_shortcut", + "parameters": { + "keys": "ctrl+w" + }, + "description": "Press Ctrl+W to close the Welcome editor tab.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertActive_c3f41809f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor" + ] + }, + { + "step_id": "step_closeGetStartedEditor_assertClosed_c3f41809f_1_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion no editor tab is open in the Visual Studio Code editor area.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_close_c3f41809f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:closeGetStartedEditor", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_closeGetStartedEditor_assertClosed_c3f41809f_1_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_1_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Create New Agent/App" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_1_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Create New Agent/App and the highlighted command listed under it is titled Microsoft 365 Agents: Create New Agent/App.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_1_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New Project is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_1_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_1_6", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Custom Engine Agent" + }, + "description": "Type the resolved option label Custom Engine Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_1_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Custom Engine Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_1_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled App Features Using Microsoft 365 Agents SDK is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_1_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_1_7", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Weather Agent" + }, + "description": "Type the resolved option label Weather Agent into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_1_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Weather Agent is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_1_7", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Service for Large Language Model (LLM) is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_1_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_1_8", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "OpenAI" + }, + "description": "Type the resolved option label OpenAI into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_1_8", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option OpenAI is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_1_8", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3f41809f_1_9", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled OpenAI Key is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_1_8" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3f41809f_1_9", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:OPENAI_API_KEY}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3f41809f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3f41809f_1_9", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3f41809f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Programming Language is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3f41809f_1_9" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_1_10", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "TypeScript" + }, + "description": "Type the resolved option label TypeScript into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_1_10", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option TypeScript is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_1_10", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_confirmOption_assertPrompt_c3f41809f_1_11", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Workspace Folder is visible and the option Default folder is focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_1_10" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_confirmOption_confirm_c3f41809f_1_11", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the Default folder option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_assertPrompt_c3f41809f_1_11" + ], + "preconditions": [ + "dhash:364:74:16:5:08056a9a5d5516b6", + "dhash:364:74:96:5:44232286e2168e01", + "dhash:364:74:0:10:f0b09494b2717075" + ], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "interaction:key-press" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3f41809f_1_12", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Application Name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_confirmOption_confirm_c3f41809f_1_11" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3f41809f_1_12", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name:vscuse_app_#####}}" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3f41809f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3f41809f_1_12", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3f41809f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_assertProjectWindowReady_assert_c3f41809f_1_13", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Preview README.md editor tab is open in Visual Studio Code.", + "content_refs": [], + "timeout": 60, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3f41809f_1_12" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:initialization", + "initialization:assertProjectWindowReady", + "step_retry_timeout: 60" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6Im0zNjVhZ2VudHMueW1sIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6WyJ2ZXJzaW9uOiB2MS4xMSIsInByb3Zpc2lvbjoiLCJkZXBsb3k6Il0sIm5vdENvbnRhaW5zIjpbIm9hdXRoL3JlZ2lzdGVyIiwiZGNyL3JlZ2lzdGVyIl19XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertProjectWindowReady_assert_c3f41809f_1_13" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_2", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9pbmRleC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_3", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy9hZ2VudC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_4", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InNyYy90b29scy9nZXRXZWF0aGVyVG9vbC50cyIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_5", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6InBhY2thZ2UuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOltdLCJub3RDb250YWlucyI6W119XQ==\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_6", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImluZnJhL2F6dXJlLmJpY2VwIiwiZXhpc3RzIjp0cnVlLCJjb250YWlucyI6W10sIm5vdENvbnRhaW5zIjpbXX1d\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_checkWorkspaceFiles_verify_c3f41809f_2_7", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" ASSERTIONS_B64=\"W3sicGF0aCI6ImFwcFBhY2thZ2UvbWFuaWZlc3QuanNvbiIsImV4aXN0cyI6dHJ1ZSwiY29udGFpbnMiOlsiXCJtYW5pZmVzdFZlcnNpb25cIjogXCIxLjI5XCIiXSwibm90Q29udGFpbnMiOltdfV0=\" python3 - <<'PY'\nimport base64\nimport json\nimport os\nfrom pathlib import Path\n\nproject = Path(os.environ[\"PROJECT_DIR\"]).resolve()\nassertions = json.loads(base64.b64decode(os.environ[\"ASSERTIONS_B64\"]).decode(\"utf-8\"))\nfor assertion in assertions:\n target = (project / assertion[\"path\"]).resolve()\n try:\n target.relative_to(project)\n except ValueError as error:\n raise AssertionError(\"File assertion escaped the project directory\") from error\n exists = target.is_file()\n if exists != assertion[\"exists\"]:\n raise AssertionError(f\"Unexpected file existence for {assertion['path']}\")\n if not exists:\n continue\n content = target.read_text(encoding=\"utf-8\")\n for expected in assertion.get(\"contains\", []):\n expected = expected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if expected not in content:\n raise AssertionError(f\"Expected content is absent from {assertion['path']}\")\n for unexpected in assertion.get(\"notContains\", []):\n unexpected = unexpected.replace(\"__VSCUSE_APP_NAME__\", project.name)\n if unexpected in content:\n raise AssertionError(f\"Unexpected content is present in {assertion['path']}\")\nPY\n```" + }, + "description": "@code verify the authored workspace file existence and content assertions without logging file contents.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:checks", + "assertion:file", + "step_retry_timeout:120" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_c3f41809f_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_3_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_3_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_3_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInAzure_assertOption_c3f41809f_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry labeled Sign in to Azure.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_3_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInAzure_selectOption_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 165, + "y": 127 + }, + "description": "Click the \"Sign in to Azure\" entry in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertOption_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:165:127:16:5:5819353567ef55aa", + "dhash:165:127:96:5:2cd1259b9b941a6a", + "dhash:165:127:0:10:a2942223a3222421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_confirmSignIn_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 534, + "y": 98 + }, + "description": "Click the \"Sign in\" button on the Microsoft authentication popup in Visual Studio Code to proceed with Azure authorization for the Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_selectOption_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:534:98:16:5:554a54555555468f", + "dhash:534:98:96:5:0002740b0a700800", + "dhash:534:98:0:10:12322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_allow_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 457, + "y": 96 + }, + "description": "Click the \"Allow\" button in the Microsoft 365 sign-in prompt to authorize the extension \"Microsoft 365 Agents Toolkit\" within Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_confirmSignIn_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:457:96:16:5:524d5552564cb3ca", + "dhash:457:96:96:5:0004609c0c600400", + "dhash:457:96:0:10:d2322e2323232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure" + ] + }, + { + "step_id": "step_signInAzure_focusAccount_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 432, + "y": 327 + }, + "description": "Click on the \"Email, phone, or Skype\" input field in the Microsoft sign-in dialog on the login.microsoftonline.com webpage to activate text entry.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_allow_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:432:327:16:5:114c134b4a13b2cc", + "dhash:432:327:96:5:686000a2a95500cb", + "dhash:432:327:0:10:1361717965617935" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_typeAccount_c3f41809f_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:AZURE_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Azure account name into the email or username input field on the Microsoft Sign in page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_focusAccount_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1b28d0d9e7e4dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInAzure_next_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 631, + "y": 462 + }, + "description": "Click the \"Next\" button on the Microsoft sign-in page to continue Azure authentication.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typeAccount_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:631:462:16:5:0000000091000000", + "dhash:631:462:96:5:000000004e31314e", + "dhash:631:462:0:10:1392f0dac6e6d8e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "ocr:true" + ] + }, + { + "step_id": "step_signInAzure_typePassword_c3f41809f_3_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:AZURE_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Azure account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_next_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "precondition_wait_timeout: 60", + "delay:5" + ] + }, + { + "step_id": "step_signInAzure_submit_c3f41809f_3_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter in the password field on the Microsoft login page to submit the Azure credentials.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_typePassword_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1908f0d9d1e6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_closeBrowser_c3f41809f_3_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 991, + "y": 18 + }, + "description": "Click the red close (X) button in the top-right corner of the Google Chrome window to close the Visual Studio Code sign-in confirmation page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_submit_c3f41809f_3_2" + ], + "preconditions": [ + "dhash:991:18:16:5:b020624245454242", + "dhash:991:18:96:5:629393936a903232", + "dhash:991:18:0:10:0021410169414141" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "delay: 3" + ] + }, + { + "step_id": "step_signInAzure_assertReady_c3f41809f_3_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:AZURE_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_closeBrowser_c3f41809f_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:azure", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInAzure_assertReady_c3f41809f_3_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_4_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "View: Show Microsoft 365 Agents Toolkit" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_4_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >View: Show Microsoft 365 Agents Toolkit and the highlighted command listed under it is titled View: Show Microsoft 365 Agents Toolkit.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_4_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertOption_c3f41809f_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the ACCOUNTS section of the side bar lists an entry whose label begins with Sign in to Microsoft.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_4_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "entry_state:toolkit-side-bar-visible", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_signInM365FromPicker_selectOption_c3f41809f_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 213, + "y": 102 + }, + "description": "Click the entry whose label begins with \"Sign in to Microsoft\" in the ACCOUNTS section of the side bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertOption_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:213:102:16:5:9c63d67674d4c718", + "dhash:213:102:96:5:8c512758d92c2cce", + "dhash:213:102:0:10:92c86223a3622421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_confirmSignIn_c3f41809f_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 762, + "y": 97 + }, + "description": "Click the \"Sign in\" button within the Microsoft 365 developer sandbox modal.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_selectOption_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:762:97:16:5:24b1a72ba9aba343", + "dhash:762:97:96:5:0008304b0f344900", + "dhash:762:97:0:10:9c68332223232421" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365" + ] + }, + { + "step_id": "step_signInM365FromPicker_useAnotherAccount_c3f41809f_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 447, + "y": 487 + }, + "description": "Click the \"Use another account\" option on the Microsoft \"Pick an account\" login screen in Google Chrome.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_confirmSignIn_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:447:487:16:5:ac534b4aaaaa6a15", + "dhash:447:487:96:5:0100228d15a20000", + "dhash:447:487:0:10:1312e8d89ed6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "precondition_wait_timeout: 60" + ] + }, + { + "step_id": "step_signInM365FromPicker_typeAccount_c3f41809f_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:M365_ACCOUNT_NAME}}" + }, + "description": "Enter the resolved Microsoft 365 account name into the email or username input field the account picker opened.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_useAnotherAccount_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392f8d8c6e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_next_c3f41809f_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 655, + "y": 505 + }, + "description": "Click the blue \"Next\" button on the Microsoft sign-in page, confirming the entered email address for login.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typeAccount_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:655:505:16:5:0000000080400020", + "dhash:655:505:96:5:0000408bcb4b0000", + "dhash:655:505:0:10:1392f8d8c7e6dae4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay:3" + ] + }, + { + "step_id": "step_signInM365FromPicker_typePassword_c3f41809f_4_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Type the resolved Microsoft 365 account password into the Password field on the Microsoft login page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_next_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_submit_c3f41809f_4_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 login form from the password entry screen.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_typePassword_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:512:384:0:20:1392e8d8d9f6e6e4" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_closeBrowser_c3f41809f_4_2", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 1008, + "y": 19 + }, + "description": "Click the \"Close\" button (red cross icon) in the browser tab bar to close the \"M365 Account - Sign In\" page.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_submit_c3f41809f_4_2" + ], + "preconditions": [ + "dhash:1008:19:16:5:a322c95a325ac922", + "dhash:1008:19:96:5:926363639200c6c4", + "dhash:1008:19:0:10:1312094769614541" + ], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "delay: 3" + ] + }, + { + "step_id": "step_signInM365FromPicker_assertReady_c3f41809f_4_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion there's ${{env:M365_ACCOUNT_NAME}} in the \"ACCOUNTS\" section", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_closeBrowser_c3f41809f_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "account:m365", + "readiness:account-visible", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_signInM365FromPicker_assertReady_c3f41809f_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_5_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_5_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_5_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_5_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_5_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_5_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_5_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Select a resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "+ New resource group" + }, + "description": "Type the resolved option label + New resource group into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option + New resource group is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_textInput_assertQuestion_c3f41809f_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled New resource group name is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_textInput_input_c3f41809f_5_4", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{var:app_name}}-rg" + }, + "description": "Type the authored value into the active text prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_assertQuestion_c3f41809f_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_textInput_confirm_c3f41809f_5_4", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the accepted text input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_input_c3f41809f_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:text" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the active prompt titled Location for the new resource group is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_textInput_confirm_c3f41809f_5_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "content_refs": [], + "timeout": 120, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertQuestion_c3f41809f_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_singleSelect_filter_c3f41809f_5_5", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{env:RESOURCE_GROUP_REGION}}" + }, + "description": "Type the resolved option label ${{env:RESOURCE_GROUP_REGION}} into the active single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_singleSelect_assertOption_c3f41809f_5_5", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option ${{env:RESOURCE_GROUP_REGION}} is visible and selectable in the filtered single-select prompt.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_filter_c3f41809f_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_singleSelect_confirm_c3f41809f_5_5", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered single-select option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_assertOption_c3f41809f_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_5_6", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Costs may apply based on usage. Do you want to provision resources in dev environment using listed accounts? is visible with the primary action Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_singleSelect_confirm_c3f41809f_5_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c3f41809f_5_6", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Provision in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c3f41809f_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c3f41809f_5_7", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains provision stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c3f41809f_5_6" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c3f41809f_5_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_6_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Notifications: Show Notifications" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_6_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_6_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_6_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_6_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_6_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the dialog Do you want to deploy resources in dev environment? is visible with the primary action Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_clickPrimaryAction_click_c3f41809f_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to activate the primary action Deploy in the confirmed dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_assertDialog_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:dialog", + "action:click-primary" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c3f41809f_6_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion a visible Visual Studio Code notification contains actions in deploy stage executed successfully.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_clickPrimaryAction_click_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:notifications", + "action:assert-contains", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_executeCommand_open_c3f41809f_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertNotificationContains_assert_c3f41809f_6_4" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Debug: Select and Start Debugging" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Debug: Select and Start Debugging and the highlighted command listed under it is titled Debug: Select and Start Debugging.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_filterOption_filter_c3f41809f_7_2", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Launch Remote in Teams (Chrome)" + }, + "description": "Type the resolved option label into the active option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_filterOption_assertOption_c3f41809f_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the option Launch Remote in Teams (Chrome) is visible and selectable in the filtered option picker.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_filter_c3f41809f_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_filterOption_confirm_c3f41809f_7_2", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm the filtered option.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_assertOption_c3f41809f_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:quick-input", + "answer_type:singleSelect" + ] + }, + { + "step_id": "step_assertReady_assertReady_c3f41809f_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_filterOption_confirm_c3f41809f_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-ready", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdd_c3f41809f_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the blue \"Add\" button exists.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertReady_assertReady_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_add_c3f41809f_8_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 288, + "y": 214 + }, + "description": "Click Add on the app details popup within the Microsoft Teams interface.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdd_c3f41809f_8_1" + ], + "preconditions": [ + "dhash:288:214:16:5:05100a0511030b12", + "dhash:288:214:96:5:2616011c1c01005b", + "dhash:288:214:0:10:00b4b0d8f8fcf0d8" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:add" + ] + }, + { + "step_id": "step_addAndOpenApp_assertAdded_c3f41809f_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the \"Added successfully!\" dialog and its Open button are visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_add_c3f41809f_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "step_retry_timeout: 180" + ] + }, + { + "step_id": "step_addAndOpenApp_open_c3f41809f_8_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 533, + "y": 508 + }, + "description": "Click Open in the Microsoft Teams Added successfully dialog.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertAdded_c3f41809f_8_1" + ], + "preconditions": [ + "dhash:533:508:16:5:00987494ca4acacc", + "dhash:533:508:96:5:000058a48598e36b", + "dhash:533:508:0:10:1669696969696979" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:added", + "precondition_wait_timeout: 120" + ] + }, + { + "step_id": "step_addAndOpenApp_assertReady_c3f41809f_8_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_open_c3f41809f_8_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "readiness:chat-ready", + "step_retry_timeout: 180" + ] + } + ], + "screenshots": {} +} From 38e9939a9041443c9e698d443dcb042ad8cae8e1 Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 14:58:18 +0800 Subject: [PATCH 4/9] test(vscuse): assert a real completion from the OpenAI weather cases The weather agent template pinned gpt-3.5-turbo while its own README prescribes gpt-4o-mini and its agent parses structured JSON out of the reply, so the code now matches the README. An Azure OpenAI resource serves the OpenAI v1 protocol and accepts its resource key as a bearer token, so a new localEnvironment step writes OPENAI_BASE_URL into the envs mapping the project local lifecycle generates, and the OpenAI local cases now assert a completion instead of stopping at the launched surface. --- .../product/compile-vscuse-case-bundles.md | 10 +- .../cases/legacy-case-mapping.md | 4 +- .../vscode-test-cases/cases/weather-agent.yml | 34 +- .../local-environment-variable.json.tpl | 30 ++ .../engine/semantic-step-compiler.cjs | 42 +++ .../engine/semantic-step-compiler.test.cjs | 51 ++- .../engine/validate-case-bundle.cjs | 1 + ...-agent--weather-js-openai-local-teams.json | 347 +++++++++++++----- ...agent--weather-js-openai-remote-teams.json | 2 +- ...-agent--weather-ts-openai-local-teams.json | 347 +++++++++++++----- ...agent--weather-ts-openai-remote-teams.json | 2 +- .../content/javascript/src/agent.js.tpl | 2 +- .../content/typescript/src/agent.ts.tpl | 2 +- .../vsc/js/weather-agent/src/agent.js.tpl | 2 +- .../vsc/ts/weather-agent/src/agent.ts.tpl | 2 +- 15 files changed, 687 insertions(+), 191 deletions(-) create mode 100644 packages/tests/vscuse/vscode-test-cases/components/workspace/local-environment-variable.json.tpl diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index 35d84028eb9..7fee4c9c826 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -259,12 +259,14 @@ cases: ] ``` -V1 step types are `scaffold`, `login`, `provision`, `deploy`, `pythonEnvironment`, `target`, `open`, -and `checks`. +V1 step types are `scaffold`, `login`, `provision`, `deploy`, `pythonEnvironment`, +`localEnvironment`, `target`, `open`, and `checks`. `scaffold` accepts `template` and `answers`; `login`, `provision`, and `target` accept their same-named operation input. `deploy` has no semantic input, although current validation ignores an authored `with` object. `pythonEnvironment` requires exactly one input, `with.interpreter`, the label the Python extension's interpreter picker shows for the interpreter the case selects. +`localEnvironment` accepts a `with` mapping of environment variable names to values, each added to +the `envs` mapping that the project's local lifecycle writes into `.localConfigs`. `open` requires `with.kind` and `with.destination`; the current template, target profile, and those two values select a compatible adapter. The profile already identifies the host surface, so `open` does not repeat Teams or @@ -1126,8 +1128,10 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-70 | Given a `pythonEnvironment` operation, the notification center is opened before the completion assertion, because creating the virtual environment and installing its requirements takes minutes and the notification the Python extension raises is the only visible signal that the environment is selected. | | VCB-71 | Given the `Launch Remote (Chrome)` target, the adapter reaches the Teams app details page through the same add-and-open transition as `Launch Remote in Teams (Chrome)`, because the Python templates only rename that profile and leave the browser flow it launches unchanged. | | VCB-72 | Given the weather agent bundle, every combination of LLM service and language is authored against both the remote and the local Teams launch, because each language is a separate template package and each launch drives a separate lifecycle, so a combination that is never authored is never covered. | -| VCB-73 | Given a weather agent case whose LLM service is OpenAI, the case launches the target but asserts no chat completion, because the run configuration declares no openai.com key and the recordings these cases replace type a placeholder, so what the case can honestly cover is the OpenAI branch of the scaffold question tree and the lifecycle that follows it. | +| VCB-73 | Given a weather agent case whose LLM service is OpenAI, a local launch asserts a chat completion and a remote launch does not, because an Azure OpenAI resource serves the OpenAI v1 protocol and the local run can be redirected at it, while a remote run reads its app settings from the generated `infra/azure.bicep`, which carries the key alone. | | VCB-74 | Given the `(Preview) Launch Remote in Copilot (Chrome)` target, the adapter requires provision and deploy, unlike `Preview in Copilot (Chrome)`, because a custom engine agent answers from a bot the deploy stage publishes while a declarative agent answers from a definition the provision stage uploads. | +| VCB-75 | Given a `localEnvironment` operation, each named variable is added to the `envs` mapping that the project's local lifecycle writes into `.localConfigs`, because the scaffolded app reads its configuration from that generated file, and writing the variable there scopes it to the authoring case instead of every case sharing the container environment. | +| VCB-76 | Given a `localEnvironment` operation whose variable name or value would not survive a shell assignment unquoted, the compilation fails, because the value is interpolated into a generated shell command and the runner resolves its own placeholders before the shell sees it. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md index d4bf46741e1..de631b07d10 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md +++ b/packages/tests/vscuse/vscode-test-cases/cases/legacy-case-mapping.md @@ -18,9 +18,9 @@ It is a migration inventory, not an instruction to delete legacy plans automatic | `weather-agent.yml` | `weather-js-azure-openai-remote-teams` | `weather-agent--weather-js-azure-openai-remote-teams.json` | `Weather_Agent_js_remote_debug.json` | Full | Weather Agent, Azure OpenAI, JavaScript, provision, deploy, Teams remote launch, and chat validation. | | `weather-agent.yml` | `weather-js-azure-openai-local-teams` | `weather-agent--weather-js-azure-openai-local-teams.json` | `Weather_Agent_js_Local_Debug.json` | Full | Weather Agent, Azure OpenAI, JavaScript, Microsoft 365 login, local Teams debug launch, and chat validation. | | `weather-agent.yml` | `weather-ts-openai-remote-teams` | `weather-agent--weather-ts-openai-remote-teams.json` | `Weather_Agent_OpenAI_ts_Remote_Debug.json` | Partial | OpenAI scaffold branch, TypeScript, provision, deploy, and Teams remote launch; no chat check, see VCB-73. | -| `weather-agent.yml` | `weather-ts-openai-local-teams` | `weather-agent--weather-ts-openai-local-teams.json` | `Weather_Agent_OpenAI_ts_Local_Debug.json` | Partial | OpenAI scaffold branch, TypeScript, Microsoft 365 login, and local Teams debug launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-ts-openai-local-teams` | `weather-agent--weather-ts-openai-local-teams.json` | `Weather_Agent_OpenAI_ts_Local_Debug.json` | Full | OpenAI scaffold branch, TypeScript, Microsoft 365 login, local Teams debug launch, and chat validation against the redirected base URL. | | `weather-agent.yml` | `weather-js-openai-remote-teams` | `weather-agent--weather-js-openai-remote-teams.json` | `Weather_Agent_OpenAI_js_Remote_Debug.json` | Partial | OpenAI scaffold branch, JavaScript, provision, deploy, and Teams remote launch; no chat check, see VCB-73. | -| `weather-agent.yml` | `weather-js-openai-local-teams` | `weather-agent--weather-js-openai-local-teams.json` | `Weather_Agent_OpenAI_js_Local_Debug.json` | Partial | OpenAI scaffold branch, JavaScript, Microsoft 365 login, and local Teams debug launch; no chat check, see VCB-73. | +| `weather-agent.yml` | `weather-js-openai-local-teams` | `weather-agent--weather-js-openai-local-teams.json` | `Weather_Agent_OpenAI_js_Local_Debug.json` | Full | OpenAI scaffold branch, JavaScript, Microsoft 365 login, local Teams debug launch, and chat validation against the redirected base URL. | | `weather-agent.yml` | `weather-ts-azure-openai-remote-copilot` | `weather-agent--weather-ts-azure-openai-remote-copilot.json` | `Weather_Agent_ts_remote_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, provision, deploy, Copilot remote launch, and chat validation. | | `weather-agent.yml` | `weather-ts-azure-openai-local-copilot` | `weather-agent--weather-ts-azure-openai-local-copilot.json` | `Weather_Agent_ts_local_copilot.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Microsoft 365 login, local Copilot debug launch, and chat validation. | | `weather-agent.yml` | `weather-ts-azure-openai-playground` | `weather-agent--weather-ts-azure-openai-playground.json` | `Weather_Agent_Azure_OpenAI_ts_playground.json` | Full | Weather Agent, Azure OpenAI, TypeScript, Agents Playground launch with no sign-in, and chat validation. | diff --git a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml index b8afc396fa1..7e6ae8a5ed0 100644 --- a/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml +++ b/packages/tests/vscuse/vscode-test-cases/cases/weather-agent.yml @@ -65,12 +65,13 @@ cases: check-weather-chat, ] - # The OpenAI half of the matrix ends at the launched surface and asserts no - # completion. config.yaml declares no openai.com key, and the recordings these - # cases replace type a placeholder key for the same reason. What they do cover - # is the OpenAI branch of the scaffold question tree, which asks for a single - # key instead of an endpoint and a deployment name, and the different generated - # configuration that follows from it. + # The OpenAI remote cases end at the launched surface and assert no + # completion. An Azure OpenAI resource speaks the OpenAI v1 protocol, so the + # local cases below redirect the OpenAI client at it and do assert one, but a + # remote run reads its app settings from infra/azure.bicep, which declares only + # the key. What both halves cover is the OpenAI branch of the scaffold question + # tree, which asks for a single key instead of an endpoint and a deployment + # name, and the different generated configuration that follows from it. - id: weather-ts-openai-remote-teams scenarioId: SCN-CREATE-WEATHER-03 steps: @@ -91,9 +92,11 @@ cases: [ scaffold-weather-ts-openai, check-weather-ts, + redirect-openai-base-url, login-m365, f5-teams-local, open-app, + check-weather-chat, ] - id: weather-js-openai-remote-teams @@ -116,9 +119,11 @@ cases: [ scaffold-weather-js-openai, check-weather-js, + redirect-openai-base-url, login-m365, f5-teams-local, open-app, + check-weather-chat, ] # Surfaces beyond Teams, sampled on the canonical TypeScript + Azure OpenAI @@ -250,9 +255,12 @@ steps: value: weather-agent - question: llmService value: llm-service-openai + # An Azure OpenAI resource authenticates its OpenAI v1 endpoint with the + # resource key presented as a bearer token, so the OpenAI branch can be + # driven by the same secret the Azure branch uses. - question: openAIKey type: text - value: "${{secret:OPENAI_API_KEY}}" + value: "${{secret:AZURE_OPENAI_API_KEY}}" - question: language value: typescript - question: workspaceFolder @@ -302,7 +310,7 @@ steps: value: llm-service-openai - question: openAIKey type: text - value: "${{secret:OPENAI_API_KEY}}" + value: "${{secret:AZURE_OPENAI_API_KEY}}" - question: language value: javascript - question: workspaceFolder @@ -311,6 +319,16 @@ steps: type: text value: "${{var:app_name:vscuse_app_#####}}" + # The scaffolded agent constructs its OpenAI client without a base URL, so the + # client falls back to OPENAI_BASE_URL. Writing it into the lifecycle rather + # than the container environment keeps the redirect inside the two cases that + # ask for it, and routes it through the same generated .localConfigs the key + # travels through. + redirect-openai-base-url: + type: localEnvironment + with: + OPENAI_BASE_URL: "${{env:AZURE_OPENAI_ENDPOINT}}/openai/v1" + check-weather-js: type: checks with: diff --git a/packages/tests/vscuse/vscode-test-cases/components/workspace/local-environment-variable.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/workspace/local-environment-variable.json.tpl new file mode 100644 index 00000000000..ef048ddce2a --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/components/workspace/local-environment-variable.json.tpl @@ -0,0 +1,30 @@ +{ + "component": { + "version": 1, + "id": "setLocalEnvironmentVariable", + "parameters": ["instanceSuffix", "variableName", "variableValue"] + }, + "steps": [ + { + "step_id": "step_setLocalEnvironmentVariable_{{text:instanceSuffix}}", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" VARIABLE_NAME=\"{{text:variableName}}\" VARIABLE_VALUE=\"{{text:variableValue}}\" python3 - <<'PY'\nimport os\nfrom pathlib import Path\n\nlifecycle = Path(os.environ[\"PROJECT_DIR\"]).resolve() / \"m365agents.local.yml\"\nname = os.environ[\"VARIABLE_NAME\"]\nvalue = os.environ[\"VARIABLE_VALUE\"]\nlines = lifecycle.read_text(encoding=\"utf-8\").splitlines()\ntarget = next((index for index, line in enumerate(lines) if line.strip() == \"target: ./.localConfigs\"), None)\nif target is None:\n raise AssertionError(\"The local lifecycle writes no .localConfigs environment file\")\nheader = next((index for index in range(target + 1, len(lines)) if lines[index].strip() == \"envs:\"), None)\nif header is None:\n raise AssertionError(\"The .localConfigs environment file declares no envs mapping\")\nindent = \" \" * (len(lines[header]) - len(lines[header].lstrip()) + 2)\nend = header + 1\nwhile end < len(lines) and lines[end].startswith(indent) and lines[end].strip():\n end += 1\nkept = [line for line in lines[header + 1 : end] if not line.strip().startswith(name + \":\")]\nlines[header + 1 : end] = kept + [indent + name + \": \" + value]\nlifecycle.write_text(\"\\n\".join(lines) + \"\\n\", encoding=\"utf-8\")\nPY\n```" + }, + "description": "@code add the named variable to the envs mapping the local lifecycle writes into .localConfigs, without logging its value.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:workspace", + "operation:local-environment", + "step_retry_timeout: 120" + ] + } + ] +} diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index bfc00c5189a..47c5e5df3bf 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -10,6 +10,9 @@ const environmentExpressionPattern = /^\$\{\{env:([A-Z_a-z][A-Z_a-z0-9]*)\}\}$/; const secretExpressionPattern = /^\$\{\{secret:[A-Z_a-z][A-Z_a-z0-9]*\}\}$/; const relativePathPattern = /^(?!\/)(?![A-Za-z]:)(?!.*(?:^|\/)\.\.(?:\/|$))[^\\]+$/; +const localEnvironmentNamePattern = /^[A-Z][A-Z0-9_]*$/; +const localEnvironmentValuePattern = /^[A-Za-z0-9:/._-]*$/; +const runnerPlaceholderPattern = /\$\{\{[a-z]+:[A-Za-z0-9_:#-]+\}\}/g; const provisionInputGroups = new Set(["apiKey", "arm", "oauth"]); const provisionEnvironmentInput = "environment"; const provisionEnvironmentSkipValue = "none"; @@ -904,6 +907,43 @@ function createSemanticStepCompiler() { return { ok: true, value: output }; } + function compileLocalEnvironment(state, definition) { + const inputs = definition.with ?? {}; + const names = isRecord(inputs) ? Object.keys(inputs).sort() : []; + if ( + !isRecord(inputs) || + names.length === 0 || + names.some( + (name) => + !localEnvironmentNamePattern.test(name) || + typeof inputs[name] !== "string" || + inputs[name].length === 0 || + // The runner resolves its own placeholders before the shell sees the + // value, so they are stripped before the shell-safety check. + !localEnvironmentValuePattern.test( + inputs[name].replaceAll(runnerPlaceholderPattern, ""), + ), + ) + ) { + return failure( + "VCB_LOCAL_ENVIRONMENT_INPUT_INVALID", + "The local environment operation requires shell-safe variable names and values.", + ); + } + const output = []; + for (const name of names) { + const error = append( + output, + render(state, "workspace/local-environment-variable.json.tpl", { + variableName: name, + variableValue: inputs[name], + }), + ); + if (error) return error; + } + return { ok: true, value: output }; + } + function compileLifecycle(state, definition) { const recipe = lifecycleAdapters[definition.type]; let confirmation = recipe.confirmation; @@ -1373,6 +1413,8 @@ function createSemanticStepCompiler() { return compileLifecycle(state, definition); case "pythonEnvironment": return compilePythonEnvironment(state, definition); + case "localEnvironment": + return compileLocalEnvironment(state, definition); case "target": return compileTarget(state, definition); case "open": diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 739be0a7c58..cdba167614f 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -1444,7 +1444,7 @@ test("VCB-72: the weather bundle authors every LLM, language, and Teams launch c } }); -test("VCB-73: an OpenAI weather case launches its target and asserts no chat completion", async () => { +test("VCB-73: an OpenAI weather case asserts a completion locally but not remotely", async () => { const result = await compileFixture( "weather-agent.yml", (sourceText) => sourceText, @@ -1452,21 +1452,64 @@ test("VCB-73: an OpenAI weather case launches its target and asserts no chat com assert.equal(result.ok, true); for (const generated of result.value) { - if (!generated.caseId.includes("-openai-")) { + if ( + !generated.caseId.includes("-openai-") || + generated.caseId.includes("-azure-openai-") + ) { continue; } - const isAzure = generated.caseId.includes("-azure-openai-"); + const isLocal = generated.caseId.includes("-local-"); const sendsAMessage = generated.plan.steps.some((step) => /^step_send(Teams|Copilot|Playground)Message_/.test(step.step_id || ""), ); assert.equal( sendsAMessage, - isAzure, + isLocal, `${generated.caseId} sends ${sendsAMessage ? "a" : "no"} chat message`, ); } }); +test("VCB-75: a local environment operation writes the variable into the local lifecycle", async () => { + const result = await compileFixture( + "weather-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const generated = result.value.find( + (candidate) => candidate.caseId === "weather-ts-openai-local-teams", + ); + const step = generated.plan.steps.find((candidate) => + candidate.step_id.startsWith("step_setLocalEnvironmentVariable_"), + ); + + assert.equal(step.agent, "code"); + assert.equal( + step.parameters.sample.includes( + 'VARIABLE_NAME="OPENAI_BASE_URL" VARIABLE_VALUE="${{env:AZURE_OPENAI_ENDPOINT}}/openai/v1"', + ), + true, + ); + assert.equal(step.parameters.sample.includes("m365agents.local.yml"), true); + assert.equal(step.parameters.sample.includes('"envs:"'), true); +}); + +test("VCB-76: a shell-unsafe local environment value fails the compilation", async () => { + const result = await compileFixture("weather-agent.yml", (sourceText) => + sourceText.replace( + 'OPENAI_BASE_URL: "${{env:AZURE_OPENAI_ENDPOINT}}/openai/v1"', + 'OPENAI_BASE_URL: "$(id)"', + ), + ); + + assert.equal(result.ok, false); + assert.equal( + result.diagnostics[0].code, + "VCB_LOCAL_ENVIRONMENT_INPUT_INVALID", + ); +}); + test("VCB-74: the remote Copilot target requires provision and deploy", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace( diff --git a/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs b/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs index 8b14d900076..d078d2bf89c 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/validate-case-bundle.cjs @@ -15,6 +15,7 @@ const allowedStepTypes = new Set([ "provision", "deploy", "pythonEnvironment", + "localEnvironment", "target", "open", "checks", diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json index 187cedf4fa0..ec65f48cd0a 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 80, + "total_steps": 87, "name": "weather-js-openai-local-teams", "description": { "owner": "", @@ -67,35 +67,42 @@ "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_3", "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_4", "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5", - "step_executeCommand_open_ce0ec2ba7_3_1", - "step_executeCommand_assertPalette_ce0ec2ba7_3_1", - "step_executeCommand_filter_ce0ec2ba7_3_1", - "step_executeCommand_assertCommand_ce0ec2ba7_3_1", - "step_executeCommand_execute_ce0ec2ba7_3_1", - "step_signInM365_assertOption_ce0ec2ba7_3_2", - "step_signInM365_selectOption_ce0ec2ba7_3_2", - "step_signInM365_confirmSignIn_ce0ec2ba7_3_2", - "step_signInM365_focusAccount_ce0ec2ba7_3_2", - "step_signInM365_typeAccount_ce0ec2ba7_3_2", - "step_signInM365_next_ce0ec2ba7_3_2", - "step_signInM365_typePassword_ce0ec2ba7_3_2", - "step_signInM365_submit_ce0ec2ba7_3_2", - "step_signInM365_closeBrowser_ce0ec2ba7_3_2", - "step_signInM365_assertReady_ce0ec2ba7_3_2", + "step_setLocalEnvironmentVariable_ce0ec2ba7_3_1", "step_executeCommand_open_ce0ec2ba7_4_1", "step_executeCommand_assertPalette_ce0ec2ba7_4_1", "step_executeCommand_filter_ce0ec2ba7_4_1", "step_executeCommand_assertCommand_ce0ec2ba7_4_1", "step_executeCommand_execute_ce0ec2ba7_4_1", - "step_filterOption_filter_ce0ec2ba7_4_2", - "step_filterOption_assertOption_ce0ec2ba7_4_2", - "step_filterOption_confirm_ce0ec2ba7_4_2", - "step_assertReady_assertReady_ce0ec2ba7_4_3", - "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1", - "step_addAndOpenApp_add_ce0ec2ba7_5_1", - "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1", - "step_addAndOpenApp_open_ce0ec2ba7_5_1", - "step_addAndOpenApp_assertReady_ce0ec2ba7_5_1" + "step_signInM365_assertOption_ce0ec2ba7_4_2", + "step_signInM365_selectOption_ce0ec2ba7_4_2", + "step_signInM365_confirmSignIn_ce0ec2ba7_4_2", + "step_signInM365_focusAccount_ce0ec2ba7_4_2", + "step_signInM365_typeAccount_ce0ec2ba7_4_2", + "step_signInM365_next_ce0ec2ba7_4_2", + "step_signInM365_typePassword_ce0ec2ba7_4_2", + "step_signInM365_submit_ce0ec2ba7_4_2", + "step_signInM365_closeBrowser_ce0ec2ba7_4_2", + "step_signInM365_assertReady_ce0ec2ba7_4_2", + "step_executeCommand_open_ce0ec2ba7_5_1", + "step_executeCommand_assertPalette_ce0ec2ba7_5_1", + "step_executeCommand_filter_ce0ec2ba7_5_1", + "step_executeCommand_assertCommand_ce0ec2ba7_5_1", + "step_executeCommand_execute_ce0ec2ba7_5_1", + "step_filterOption_filter_ce0ec2ba7_5_2", + "step_filterOption_assertOption_ce0ec2ba7_5_2", + "step_filterOption_confirm_ce0ec2ba7_5_2", + "step_assertReady_assertReady_ce0ec2ba7_5_3", + "step_addAndOpenApp_assertAdd_ce0ec2ba7_6_1", + "step_addAndOpenApp_add_ce0ec2ba7_6_1", + "step_addAndOpenApp_assertAdded_ce0ec2ba7_6_1", + "step_addAndOpenApp_open_ce0ec2ba7_6_1", + "step_addAndOpenApp_assertReady_ce0ec2ba7_6_1", + "step_sendTeamsMessage_assertInput_ce0ec2ba7_7_1", + "step_sendTeamsMessage_focusInput_ce0ec2ba7_7_1", + "step_sendTeamsMessage_type_ce0ec2ba7_7_1", + "step_sendTeamsMessage_send_ce0ec2ba7_7_1", + "step_assertChatReplied_assert_ce0ec2ba7_7_2", + "step_assertChatContains_assert_ce0ec2ba7_7_3" ], "tags": [ "case_id:weather-js-openai-local-teams", @@ -822,7 +829,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "${{secret:OPENAI_API_KEY}}" + "text": "${{secret:AZURE_OPENAI_API_KEY}}" }, "description": "Type the authored value into the active text prompt.", "content_refs": [], @@ -1219,7 +1226,30 @@ ] }, { - "step_id": "step_executeCommand_open_ce0ec2ba7_3_1", + "step_id": "step_setLocalEnvironmentVariable_ce0ec2ba7_3_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" VARIABLE_NAME=\"OPENAI_BASE_URL\" VARIABLE_VALUE=\"${{env:AZURE_OPENAI_ENDPOINT}}/openai/v1\" python3 - <<'PY'\nimport os\nfrom pathlib import Path\n\nlifecycle = Path(os.environ[\"PROJECT_DIR\"]).resolve() / \"m365agents.local.yml\"\nname = os.environ[\"VARIABLE_NAME\"]\nvalue = os.environ[\"VARIABLE_VALUE\"]\nlines = lifecycle.read_text(encoding=\"utf-8\").splitlines()\ntarget = next((index for index, line in enumerate(lines) if line.strip() == \"target: ./.localConfigs\"), None)\nif target is None:\n raise AssertionError(\"The local lifecycle writes no .localConfigs environment file\")\nheader = next((index for index in range(target + 1, len(lines)) if lines[index].strip() == \"envs:\"), None)\nif header is None:\n raise AssertionError(\"The .localConfigs environment file declares no envs mapping\")\nindent = \" \" * (len(lines[header]) - len(lines[header].lstrip()) + 2)\nend = header + 1\nwhile end < len(lines) and lines[end].startswith(indent) and lines[end].strip():\n end += 1\nkept = [line for line in lines[header + 1 : end] if not line.strip().startswith(name + \":\")]\nlines[header + 1 : end] = kept + [indent + name + \": \" + value]\nlifecycle.write_text(\"\\n\".join(lines) + \"\\n\", encoding=\"utf-8\")\nPY\n```" + }, + "description": "@code add the named variable to the envs mapping the local lifecycle writes into .localConfigs, without logging its value.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:workspace", + "operation:local-environment", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_executeCommand_open_ce0ec2ba7_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1231,7 +1261,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_ce0ec2ba7_2_5" + "step_setLocalEnvironmentVariable_ce0ec2ba7_3_1" ], "preconditions": [], "postconditions": [], @@ -1241,7 +1271,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_3_1", + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1251,7 +1281,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_ce0ec2ba7_3_1" + "step_executeCommand_open_ce0ec2ba7_4_1" ], "preconditions": [], "postconditions": [], @@ -1262,7 +1292,7 @@ ] }, { - "step_id": "step_executeCommand_filter_ce0ec2ba7_3_1", + "step_id": "step_executeCommand_filter_ce0ec2ba7_4_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1274,7 +1304,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_ce0ec2ba7_3_1" + "step_executeCommand_assertPalette_ce0ec2ba7_4_1" ], "preconditions": [], "postconditions": [], @@ -1284,7 +1314,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_3_1", + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1294,7 +1324,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_ce0ec2ba7_3_1" + "step_executeCommand_filter_ce0ec2ba7_4_1" ], "preconditions": [], "postconditions": [], @@ -1305,7 +1335,7 @@ ] }, { - "step_id": "step_executeCommand_execute_ce0ec2ba7_3_1", + "step_id": "step_executeCommand_execute_ce0ec2ba7_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1317,7 +1347,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_ce0ec2ba7_3_1" + "step_executeCommand_assertCommand_ce0ec2ba7_4_1" ], "preconditions": [], "postconditions": [], @@ -1327,7 +1357,7 @@ ] }, { - "step_id": "step_signInM365_assertOption_ce0ec2ba7_3_2", + "step_id": "step_signInM365_assertOption_ce0ec2ba7_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1337,7 +1367,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_ce0ec2ba7_3_1" + "step_executeCommand_execute_ce0ec2ba7_4_1" ], "preconditions": [], "postconditions": [], @@ -1349,7 +1379,7 @@ ] }, { - "step_id": "step_signInM365_selectOption_ce0ec2ba7_3_2", + "step_id": "step_signInM365_selectOption_ce0ec2ba7_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1363,7 +1393,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_assertOption_ce0ec2ba7_3_2" + "step_signInM365_assertOption_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:213:102:16:5:9c63d67674d4c718", @@ -1377,7 +1407,7 @@ ] }, { - "step_id": "step_signInM365_confirmSignIn_ce0ec2ba7_3_2", + "step_id": "step_signInM365_confirmSignIn_ce0ec2ba7_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1391,7 +1421,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_selectOption_ce0ec2ba7_3_2" + "step_signInM365_selectOption_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:762:97:16:5:24b1a72ba9aba343", @@ -1405,7 +1435,7 @@ ] }, { - "step_id": "step_signInM365_focusAccount_ce0ec2ba7_3_2", + "step_id": "step_signInM365_focusAccount_ce0ec2ba7_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1419,7 +1449,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_confirmSignIn_ce0ec2ba7_3_2" + "step_signInM365_confirmSignIn_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:369:350:16:5:2113d25252525221", @@ -1434,7 +1464,7 @@ ] }, { - "step_id": "step_signInM365_typeAccount_ce0ec2ba7_3_2", + "step_id": "step_signInM365_typeAccount_ce0ec2ba7_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1446,7 +1476,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_focusAccount_ce0ec2ba7_3_2" + "step_signInM365_focusAccount_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b28f0d9e7e6dae4" @@ -1459,7 +1489,7 @@ ] }, { - "step_id": "step_signInM365_next_ce0ec2ba7_3_2", + "step_id": "step_signInM365_next_ce0ec2ba7_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1473,7 +1503,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_typeAccount_ce0ec2ba7_3_2" + "step_signInM365_typeAccount_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:629:484:16:5:23248c4b6c24d32c", @@ -1488,7 +1518,7 @@ ] }, { - "step_id": "step_signInM365_typePassword_ce0ec2ba7_3_2", + "step_id": "step_signInM365_typePassword_ce0ec2ba7_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1500,7 +1530,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_next_ce0ec2ba7_3_2" + "step_signInM365_next_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b08f0d9d1e6e6e4" @@ -1513,7 +1543,7 @@ ] }, { - "step_id": "step_signInM365_submit_ce0ec2ba7_3_2", + "step_id": "step_signInM365_submit_ce0ec2ba7_4_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1525,7 +1555,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_typePassword_ce0ec2ba7_3_2" + "step_signInM365_typePassword_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b08f0d9d1e6e6e4" @@ -1538,7 +1568,7 @@ ] }, { - "step_id": "step_signInM365_closeBrowser_ce0ec2ba7_3_2", + "step_id": "step_signInM365_closeBrowser_ce0ec2ba7_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1552,7 +1582,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_submit_ce0ec2ba7_3_2" + "step_signInM365_submit_ce0ec2ba7_4_2" ], "preconditions": [ "dhash:1004:19:16:5:aac833964c9633cc", @@ -1567,7 +1597,7 @@ ] }, { - "step_id": "step_signInM365_assertReady_ce0ec2ba7_3_2", + "step_id": "step_signInM365_assertReady_ce0ec2ba7_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1577,7 +1607,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_closeBrowser_ce0ec2ba7_3_2" + "step_signInM365_closeBrowser_ce0ec2ba7_4_2" ], "preconditions": [], "postconditions": [], @@ -1589,7 +1619,7 @@ ] }, { - "step_id": "step_executeCommand_open_ce0ec2ba7_4_1", + "step_id": "step_executeCommand_open_ce0ec2ba7_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1601,7 +1631,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_assertReady_ce0ec2ba7_3_2" + "step_signInM365_assertReady_ce0ec2ba7_4_2" ], "preconditions": [], "postconditions": [], @@ -1611,7 +1641,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_4_1", + "step_id": "step_executeCommand_assertPalette_ce0ec2ba7_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1621,7 +1651,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_ce0ec2ba7_4_1" + "step_executeCommand_open_ce0ec2ba7_5_1" ], "preconditions": [], "postconditions": [], @@ -1632,7 +1662,7 @@ ] }, { - "step_id": "step_executeCommand_filter_ce0ec2ba7_4_1", + "step_id": "step_executeCommand_filter_ce0ec2ba7_5_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1644,7 +1674,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_ce0ec2ba7_4_1" + "step_executeCommand_assertPalette_ce0ec2ba7_5_1" ], "preconditions": [], "postconditions": [], @@ -1654,7 +1684,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_4_1", + "step_id": "step_executeCommand_assertCommand_ce0ec2ba7_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1664,7 +1694,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_ce0ec2ba7_4_1" + "step_executeCommand_filter_ce0ec2ba7_5_1" ], "preconditions": [], "postconditions": [], @@ -1675,7 +1705,7 @@ ] }, { - "step_id": "step_executeCommand_execute_ce0ec2ba7_4_1", + "step_id": "step_executeCommand_execute_ce0ec2ba7_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1687,7 +1717,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_ce0ec2ba7_4_1" + "step_executeCommand_assertCommand_ce0ec2ba7_5_1" ], "preconditions": [], "postconditions": [], @@ -1697,7 +1727,7 @@ ] }, { - "step_id": "step_filterOption_filter_ce0ec2ba7_4_2", + "step_id": "step_filterOption_filter_ce0ec2ba7_5_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1709,7 +1739,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_ce0ec2ba7_4_1" + "step_executeCommand_execute_ce0ec2ba7_5_1" ], "preconditions": [], "postconditions": [], @@ -1719,7 +1749,7 @@ ] }, { - "step_id": "step_filterOption_assertOption_ce0ec2ba7_4_2", + "step_id": "step_filterOption_assertOption_ce0ec2ba7_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1729,7 +1759,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_filter_ce0ec2ba7_4_2" + "step_filterOption_filter_ce0ec2ba7_5_2" ], "preconditions": [], "postconditions": [], @@ -1740,7 +1770,7 @@ ] }, { - "step_id": "step_filterOption_confirm_ce0ec2ba7_4_2", + "step_id": "step_filterOption_confirm_ce0ec2ba7_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1752,7 +1782,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_assertOption_ce0ec2ba7_4_2" + "step_filterOption_assertOption_ce0ec2ba7_5_2" ], "preconditions": [], "postconditions": [], @@ -1762,7 +1792,7 @@ ] }, { - "step_id": "step_assertReady_assertReady_ce0ec2ba7_4_3", + "step_id": "step_assertReady_assertReady_ce0ec2ba7_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -1772,7 +1802,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_confirm_ce0ec2ba7_4_2" + "step_filterOption_confirm_ce0ec2ba7_5_2" ], "preconditions": [], "postconditions": [], @@ -1783,7 +1813,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1", + "step_id": "step_addAndOpenApp_assertAdd_ce0ec2ba7_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1793,7 +1823,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_ce0ec2ba7_4_3" + "step_assertReady_assertReady_ce0ec2ba7_5_3" ], "preconditions": [], "postconditions": [], @@ -1805,7 +1835,7 @@ ] }, { - "step_id": "step_addAndOpenApp_add_ce0ec2ba7_5_1", + "step_id": "step_addAndOpenApp_add_ce0ec2ba7_6_1", "agent": "interaction", "tool": "click", "parameters": { @@ -1819,7 +1849,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdd_ce0ec2ba7_5_1" + "step_addAndOpenApp_assertAdd_ce0ec2ba7_6_1" ], "preconditions": [ "dhash:288:214:16:5:05100a0511030b12", @@ -1834,7 +1864,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1", + "step_id": "step_addAndOpenApp_assertAdded_ce0ec2ba7_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1844,7 +1874,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_add_ce0ec2ba7_5_1" + "step_addAndOpenApp_add_ce0ec2ba7_6_1" ], "preconditions": [], "postconditions": [], @@ -1856,7 +1886,7 @@ ] }, { - "step_id": "step_addAndOpenApp_open_ce0ec2ba7_5_1", + "step_id": "step_addAndOpenApp_open_ce0ec2ba7_6_1", "agent": "interaction", "tool": "click", "parameters": { @@ -1870,7 +1900,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdded_ce0ec2ba7_5_1" + "step_addAndOpenApp_assertAdded_ce0ec2ba7_6_1" ], "preconditions": [ "dhash:533:508:16:5:00987494ca4acacc", @@ -1886,7 +1916,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertReady_ce0ec2ba7_5_1", + "step_id": "step_addAndOpenApp_assertReady_ce0ec2ba7_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1896,7 +1926,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_open_ce0ec2ba7_5_1" + "step_addAndOpenApp_open_ce0ec2ba7_6_1" ], "preconditions": [], "postconditions": [], @@ -1906,6 +1936,155 @@ "readiness:chat-ready", "step_retry_timeout: 180" ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_ce0ec2ba7_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_ce0ec2ba7_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_ce0ec2ba7_7_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_ce0ec2ba7_7_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_ce0ec2ba7_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_ce0ec2ba7_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_ce0ec2ba7_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_ce0ec2ba7_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_ce0ec2ba7_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_ce0ec2ba7_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_ce0ec2ba7_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_ce0ec2ba7_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] } ], "screenshots": {} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index cbdc74fdcfb..e7bc4ecd041 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -877,7 +877,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "${{secret:OPENAI_API_KEY}}" + "text": "${{secret:AZURE_OPENAI_API_KEY}}" }, "description": "Type the authored value into the active text prompt.", "content_refs": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json index efb9144fc41..0e39d2ec70b 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 82, + "total_steps": 89, "name": "weather-ts-openai-local-teams", "description": { "owner": "", @@ -69,35 +69,42 @@ "step_checkWorkspaceFiles_verify_cc58c0052_2_5", "step_checkWorkspaceFiles_verify_cc58c0052_2_6", "step_checkWorkspaceFiles_verify_cc58c0052_2_7", - "step_executeCommand_open_cc58c0052_3_1", - "step_executeCommand_assertPalette_cc58c0052_3_1", - "step_executeCommand_filter_cc58c0052_3_1", - "step_executeCommand_assertCommand_cc58c0052_3_1", - "step_executeCommand_execute_cc58c0052_3_1", - "step_signInM365_assertOption_cc58c0052_3_2", - "step_signInM365_selectOption_cc58c0052_3_2", - "step_signInM365_confirmSignIn_cc58c0052_3_2", - "step_signInM365_focusAccount_cc58c0052_3_2", - "step_signInM365_typeAccount_cc58c0052_3_2", - "step_signInM365_next_cc58c0052_3_2", - "step_signInM365_typePassword_cc58c0052_3_2", - "step_signInM365_submit_cc58c0052_3_2", - "step_signInM365_closeBrowser_cc58c0052_3_2", - "step_signInM365_assertReady_cc58c0052_3_2", + "step_setLocalEnvironmentVariable_cc58c0052_3_1", "step_executeCommand_open_cc58c0052_4_1", "step_executeCommand_assertPalette_cc58c0052_4_1", "step_executeCommand_filter_cc58c0052_4_1", "step_executeCommand_assertCommand_cc58c0052_4_1", "step_executeCommand_execute_cc58c0052_4_1", - "step_filterOption_filter_cc58c0052_4_2", - "step_filterOption_assertOption_cc58c0052_4_2", - "step_filterOption_confirm_cc58c0052_4_2", - "step_assertReady_assertReady_cc58c0052_4_3", - "step_addAndOpenApp_assertAdd_cc58c0052_5_1", - "step_addAndOpenApp_add_cc58c0052_5_1", - "step_addAndOpenApp_assertAdded_cc58c0052_5_1", - "step_addAndOpenApp_open_cc58c0052_5_1", - "step_addAndOpenApp_assertReady_cc58c0052_5_1" + "step_signInM365_assertOption_cc58c0052_4_2", + "step_signInM365_selectOption_cc58c0052_4_2", + "step_signInM365_confirmSignIn_cc58c0052_4_2", + "step_signInM365_focusAccount_cc58c0052_4_2", + "step_signInM365_typeAccount_cc58c0052_4_2", + "step_signInM365_next_cc58c0052_4_2", + "step_signInM365_typePassword_cc58c0052_4_2", + "step_signInM365_submit_cc58c0052_4_2", + "step_signInM365_closeBrowser_cc58c0052_4_2", + "step_signInM365_assertReady_cc58c0052_4_2", + "step_executeCommand_open_cc58c0052_5_1", + "step_executeCommand_assertPalette_cc58c0052_5_1", + "step_executeCommand_filter_cc58c0052_5_1", + "step_executeCommand_assertCommand_cc58c0052_5_1", + "step_executeCommand_execute_cc58c0052_5_1", + "step_filterOption_filter_cc58c0052_5_2", + "step_filterOption_assertOption_cc58c0052_5_2", + "step_filterOption_confirm_cc58c0052_5_2", + "step_assertReady_assertReady_cc58c0052_5_3", + "step_addAndOpenApp_assertAdd_cc58c0052_6_1", + "step_addAndOpenApp_add_cc58c0052_6_1", + "step_addAndOpenApp_assertAdded_cc58c0052_6_1", + "step_addAndOpenApp_open_cc58c0052_6_1", + "step_addAndOpenApp_assertReady_cc58c0052_6_1", + "step_sendTeamsMessage_assertInput_cc58c0052_7_1", + "step_sendTeamsMessage_focusInput_cc58c0052_7_1", + "step_sendTeamsMessage_type_cc58c0052_7_1", + "step_sendTeamsMessage_send_cc58c0052_7_1", + "step_assertChatReplied_assert_cc58c0052_7_2", + "step_assertChatContains_assert_cc58c0052_7_3" ], "tags": [ "case_id:weather-ts-openai-local-teams", @@ -824,7 +831,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "${{secret:OPENAI_API_KEY}}" + "text": "${{secret:AZURE_OPENAI_API_KEY}}" }, "description": "Type the authored value into the active text prompt.", "content_refs": [], @@ -1267,7 +1274,30 @@ ] }, { - "step_id": "step_executeCommand_open_cc58c0052_3_1", + "step_id": "step_setLocalEnvironmentVariable_cc58c0052_3_1", + "agent": "code", + "tool": "", + "parameters": { + "sample": "=== Generated Script ===\nLanguage: bash\n\n```bash\nset -euo pipefail\nPROJECT_DIR=\"/home/vscode/AgentsToolkitProjects/${{var:app_name}}\" VARIABLE_NAME=\"OPENAI_BASE_URL\" VARIABLE_VALUE=\"${{env:AZURE_OPENAI_ENDPOINT}}/openai/v1\" python3 - <<'PY'\nimport os\nfrom pathlib import Path\n\nlifecycle = Path(os.environ[\"PROJECT_DIR\"]).resolve() / \"m365agents.local.yml\"\nname = os.environ[\"VARIABLE_NAME\"]\nvalue = os.environ[\"VARIABLE_VALUE\"]\nlines = lifecycle.read_text(encoding=\"utf-8\").splitlines()\ntarget = next((index for index, line in enumerate(lines) if line.strip() == \"target: ./.localConfigs\"), None)\nif target is None:\n raise AssertionError(\"The local lifecycle writes no .localConfigs environment file\")\nheader = next((index for index in range(target + 1, len(lines)) if lines[index].strip() == \"envs:\"), None)\nif header is None:\n raise AssertionError(\"The .localConfigs environment file declares no envs mapping\")\nindent = \" \" * (len(lines[header]) - len(lines[header].lstrip()) + 2)\nend = header + 1\nwhile end < len(lines) and lines[end].startswith(indent) and lines[end].strip():\n end += 1\nkept = [line for line in lines[header + 1 : end] if not line.strip().startswith(name + \":\")]\nlines[header + 1 : end] = kept + [indent + name + \": \" + value]\nlifecycle.write_text(\"\\n\".join(lines) + \"\\n\", encoding=\"utf-8\")\nPY\n```" + }, + "description": "@code add the named variable to the envs mapping the local lifecycle writes into .localConfigs, without logging its value.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_checkWorkspaceFiles_verify_cc58c0052_2_7" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:workspace", + "operation:local-environment", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_executeCommand_open_cc58c0052_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1279,7 +1309,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_checkWorkspaceFiles_verify_cc58c0052_2_7" + "step_setLocalEnvironmentVariable_cc58c0052_3_1" ], "preconditions": [], "postconditions": [], @@ -1289,7 +1319,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cc58c0052_3_1", + "step_id": "step_executeCommand_assertPalette_cc58c0052_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1299,7 +1329,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cc58c0052_3_1" + "step_executeCommand_open_cc58c0052_4_1" ], "preconditions": [], "postconditions": [], @@ -1310,7 +1340,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cc58c0052_3_1", + "step_id": "step_executeCommand_filter_cc58c0052_4_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1322,7 +1352,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cc58c0052_3_1" + "step_executeCommand_assertPalette_cc58c0052_4_1" ], "preconditions": [], "postconditions": [], @@ -1332,7 +1362,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cc58c0052_3_1", + "step_id": "step_executeCommand_assertCommand_cc58c0052_4_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1342,7 +1372,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cc58c0052_3_1" + "step_executeCommand_filter_cc58c0052_4_1" ], "preconditions": [], "postconditions": [], @@ -1353,7 +1383,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cc58c0052_3_1", + "step_id": "step_executeCommand_execute_cc58c0052_4_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1365,7 +1395,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cc58c0052_3_1" + "step_executeCommand_assertCommand_cc58c0052_4_1" ], "preconditions": [], "postconditions": [], @@ -1375,7 +1405,7 @@ ] }, { - "step_id": "step_signInM365_assertOption_cc58c0052_3_2", + "step_id": "step_signInM365_assertOption_cc58c0052_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1385,7 +1415,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cc58c0052_3_1" + "step_executeCommand_execute_cc58c0052_4_1" ], "preconditions": [], "postconditions": [], @@ -1397,7 +1427,7 @@ ] }, { - "step_id": "step_signInM365_selectOption_cc58c0052_3_2", + "step_id": "step_signInM365_selectOption_cc58c0052_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1411,7 +1441,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_assertOption_cc58c0052_3_2" + "step_signInM365_assertOption_cc58c0052_4_2" ], "preconditions": [ "dhash:213:102:16:5:9c63d67674d4c718", @@ -1425,7 +1455,7 @@ ] }, { - "step_id": "step_signInM365_confirmSignIn_cc58c0052_3_2", + "step_id": "step_signInM365_confirmSignIn_cc58c0052_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1439,7 +1469,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_selectOption_cc58c0052_3_2" + "step_signInM365_selectOption_cc58c0052_4_2" ], "preconditions": [ "dhash:762:97:16:5:24b1a72ba9aba343", @@ -1453,7 +1483,7 @@ ] }, { - "step_id": "step_signInM365_focusAccount_cc58c0052_3_2", + "step_id": "step_signInM365_focusAccount_cc58c0052_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1467,7 +1497,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_confirmSignIn_cc58c0052_3_2" + "step_signInM365_confirmSignIn_cc58c0052_4_2" ], "preconditions": [ "dhash:369:350:16:5:2113d25252525221", @@ -1482,7 +1512,7 @@ ] }, { - "step_id": "step_signInM365_typeAccount_cc58c0052_3_2", + "step_id": "step_signInM365_typeAccount_cc58c0052_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1494,7 +1524,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_focusAccount_cc58c0052_3_2" + "step_signInM365_focusAccount_cc58c0052_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b28f0d9e7e6dae4" @@ -1507,7 +1537,7 @@ ] }, { - "step_id": "step_signInM365_next_cc58c0052_3_2", + "step_id": "step_signInM365_next_cc58c0052_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1521,7 +1551,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_typeAccount_cc58c0052_3_2" + "step_signInM365_typeAccount_cc58c0052_4_2" ], "preconditions": [ "dhash:629:484:16:5:23248c4b6c24d32c", @@ -1536,7 +1566,7 @@ ] }, { - "step_id": "step_signInM365_typePassword_cc58c0052_3_2", + "step_id": "step_signInM365_typePassword_cc58c0052_4_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1548,7 +1578,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_next_cc58c0052_3_2" + "step_signInM365_next_cc58c0052_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b08f0d9d1e6e6e4" @@ -1561,7 +1591,7 @@ ] }, { - "step_id": "step_signInM365_submit_cc58c0052_3_2", + "step_id": "step_signInM365_submit_cc58c0052_4_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1573,7 +1603,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_typePassword_cc58c0052_3_2" + "step_signInM365_typePassword_cc58c0052_4_2" ], "preconditions": [ "dhash:512:384:0:20:1b08f0d9d1e6e6e4" @@ -1586,7 +1616,7 @@ ] }, { - "step_id": "step_signInM365_closeBrowser_cc58c0052_3_2", + "step_id": "step_signInM365_closeBrowser_cc58c0052_4_2", "agent": "interaction", "tool": "click", "parameters": { @@ -1600,7 +1630,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_submit_cc58c0052_3_2" + "step_signInM365_submit_cc58c0052_4_2" ], "preconditions": [ "dhash:1004:19:16:5:aac833964c9633cc", @@ -1615,7 +1645,7 @@ ] }, { - "step_id": "step_signInM365_assertReady_cc58c0052_3_2", + "step_id": "step_signInM365_assertReady_cc58c0052_4_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1625,7 +1655,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_closeBrowser_cc58c0052_3_2" + "step_signInM365_closeBrowser_cc58c0052_4_2" ], "preconditions": [], "postconditions": [], @@ -1637,7 +1667,7 @@ ] }, { - "step_id": "step_executeCommand_open_cc58c0052_4_1", + "step_id": "step_executeCommand_open_cc58c0052_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1649,7 +1679,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_signInM365_assertReady_cc58c0052_3_2" + "step_signInM365_assertReady_cc58c0052_4_2" ], "preconditions": [], "postconditions": [], @@ -1659,7 +1689,7 @@ ] }, { - "step_id": "step_executeCommand_assertPalette_cc58c0052_4_1", + "step_id": "step_executeCommand_assertPalette_cc58c0052_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1669,7 +1699,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_open_cc58c0052_4_1" + "step_executeCommand_open_cc58c0052_5_1" ], "preconditions": [], "postconditions": [], @@ -1680,7 +1710,7 @@ ] }, { - "step_id": "step_executeCommand_filter_cc58c0052_4_1", + "step_id": "step_executeCommand_filter_cc58c0052_5_1", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1692,7 +1722,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertPalette_cc58c0052_4_1" + "step_executeCommand_assertPalette_cc58c0052_5_1" ], "preconditions": [], "postconditions": [], @@ -1702,7 +1732,7 @@ ] }, { - "step_id": "step_executeCommand_assertCommand_cc58c0052_4_1", + "step_id": "step_executeCommand_assertCommand_cc58c0052_5_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1712,7 +1742,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_filter_cc58c0052_4_1" + "step_executeCommand_filter_cc58c0052_5_1" ], "preconditions": [], "postconditions": [], @@ -1723,7 +1753,7 @@ ] }, { - "step_id": "step_executeCommand_execute_cc58c0052_4_1", + "step_id": "step_executeCommand_execute_cc58c0052_5_1", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1735,7 +1765,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_assertCommand_cc58c0052_4_1" + "step_executeCommand_assertCommand_cc58c0052_5_1" ], "preconditions": [], "postconditions": [], @@ -1745,7 +1775,7 @@ ] }, { - "step_id": "step_filterOption_filter_cc58c0052_4_2", + "step_id": "step_filterOption_filter_cc58c0052_5_2", "agent": "interaction", "tool": "type_text", "parameters": { @@ -1757,7 +1787,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cc58c0052_4_1" + "step_executeCommand_execute_cc58c0052_5_1" ], "preconditions": [], "postconditions": [], @@ -1767,7 +1797,7 @@ ] }, { - "step_id": "step_filterOption_assertOption_cc58c0052_4_2", + "step_id": "step_filterOption_assertOption_cc58c0052_5_2", "agent": "assertion", "tool": "", "parameters": {}, @@ -1777,7 +1807,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_filter_cc58c0052_4_2" + "step_filterOption_filter_cc58c0052_5_2" ], "preconditions": [], "postconditions": [], @@ -1788,7 +1818,7 @@ ] }, { - "step_id": "step_filterOption_confirm_cc58c0052_4_2", + "step_id": "step_filterOption_confirm_cc58c0052_5_2", "agent": "interaction", "tool": "key_press", "parameters": { @@ -1800,7 +1830,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_assertOption_cc58c0052_4_2" + "step_filterOption_assertOption_cc58c0052_5_2" ], "preconditions": [], "postconditions": [], @@ -1810,7 +1840,7 @@ ] }, { - "step_id": "step_assertReady_assertReady_cc58c0052_4_3", + "step_id": "step_assertReady_assertReady_cc58c0052_5_3", "agent": "assertion", "tool": "", "parameters": {}, @@ -1820,7 +1850,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_filterOption_confirm_cc58c0052_4_2" + "step_filterOption_confirm_cc58c0052_5_2" ], "preconditions": [], "postconditions": [], @@ -1831,7 +1861,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdd_cc58c0052_5_1", + "step_id": "step_addAndOpenApp_assertAdd_cc58c0052_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1841,7 +1871,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_cc58c0052_4_3" + "step_assertReady_assertReady_cc58c0052_5_3" ], "preconditions": [], "postconditions": [], @@ -1853,7 +1883,7 @@ ] }, { - "step_id": "step_addAndOpenApp_add_cc58c0052_5_1", + "step_id": "step_addAndOpenApp_add_cc58c0052_6_1", "agent": "interaction", "tool": "click", "parameters": { @@ -1867,7 +1897,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdd_cc58c0052_5_1" + "step_addAndOpenApp_assertAdd_cc58c0052_6_1" ], "preconditions": [ "dhash:288:214:16:5:05100a0511030b12", @@ -1882,7 +1912,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertAdded_cc58c0052_5_1", + "step_id": "step_addAndOpenApp_assertAdded_cc58c0052_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1892,7 +1922,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_add_cc58c0052_5_1" + "step_addAndOpenApp_add_cc58c0052_6_1" ], "preconditions": [], "postconditions": [], @@ -1904,7 +1934,7 @@ ] }, { - "step_id": "step_addAndOpenApp_open_cc58c0052_5_1", + "step_id": "step_addAndOpenApp_open_cc58c0052_6_1", "agent": "interaction", "tool": "click", "parameters": { @@ -1918,7 +1948,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_assertAdded_cc58c0052_5_1" + "step_addAndOpenApp_assertAdded_cc58c0052_6_1" ], "preconditions": [ "dhash:533:508:16:5:00987494ca4acacc", @@ -1934,7 +1964,7 @@ ] }, { - "step_id": "step_addAndOpenApp_assertReady_cc58c0052_5_1", + "step_id": "step_addAndOpenApp_assertReady_cc58c0052_6_1", "agent": "assertion", "tool": "", "parameters": {}, @@ -1944,7 +1974,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_addAndOpenApp_open_cc58c0052_5_1" + "step_addAndOpenApp_open_cc58c0052_6_1" ], "preconditions": [], "postconditions": [], @@ -1954,6 +1984,155 @@ "readiness:chat-ready", "step_retry_timeout: 180" ] + }, + { + "step_id": "step_sendTeamsMessage_assertInput_cc58c0052_7_1", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Teams \"Type a message\" input is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_addAndOpenApp_assertReady_cc58c0052_6_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_sendTeamsMessage_focusInput_cc58c0052_7_1", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 200, + "y": 712 + }, + "description": "Click the Teams \"Type a message\" input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_assertInput_cc58c0052_7_1" + ], + "preconditions": [ + "dhash:200:712:16:5:258c421e0d2c2d1c", + "dhash:200:712:96:5:0020887362000200", + "dhash:200:712:0:10:24b4b08e8e8c81a1" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_type_cc58c0052_7_1", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "What is the weather in Seattle?" + }, + "description": "Type \"What is the weather in Seattle?\" into the Teams message input.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_focusInput_cc58c0052_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80a9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_sendTeamsMessage_send_cc58c0052_7_1", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to send the Teams message.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_type_cc58c0052_7_1" + ], + "preconditions": [ + "dhash:512:384:0:20:24b4b08e8e8c80b9" + ], + "postconditions": [], + "tags": [ + "component:browser", + "host_surface:teams", + "entry_state:chat-ready", + "action:send-message" + ] + }, + { + "step_id": "step_assertChatReplied_assert_cc58c0052_7_2", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant turn is complete and contains a non-empty response.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_sendTeamsMessage_send_cc58c0052_7_1" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:replied", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_assertChatContains_assert_cc58c0052_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the current assistant response contains \"Seattle\".", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_assertChatReplied_assert_cc58c0052_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:browser", + "action:assert-chat-response", + "expectation:contains", + "step_retry_timeout: 120" + ] } ], "screenshots": {} diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index 5d047d92d36..5d735985b88 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -879,7 +879,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "${{secret:OPENAI_API_KEY}}" + "text": "${{secret:AZURE_OPENAI_API_KEY}}" }, "description": "Type the authored value into the active text prompt.", "content_refs": [], diff --git a/templates/v4/create/weather-agent/content/javascript/src/agent.js.tpl b/templates/v4/create/weather-agent/content/javascript/src/agent.js.tpl index 852e95b9568..72cae7b987b 100644 --- a/templates/v4/create/weather-agent/content/javascript/src/agent.js.tpl +++ b/templates/v4/create/weather-agent/content/javascript/src/agent.js.tpl @@ -57,7 +57,7 @@ weatherAgent.onConversationUpdate( {{#useOpenAI}} const agentModel = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", + model: "gpt-4o-mini", temperature: 0, }); {{/useOpenAI}} diff --git a/templates/v4/create/weather-agent/content/typescript/src/agent.ts.tpl b/templates/v4/create/weather-agent/content/typescript/src/agent.ts.tpl index b70246217bf..c3b4079e2f4 100644 --- a/templates/v4/create/weather-agent/content/typescript/src/agent.ts.tpl +++ b/templates/v4/create/weather-agent/content/typescript/src/agent.ts.tpl @@ -66,7 +66,7 @@ interface WeatherForecastAgentResponse { {{#useOpenAI}} const agentModel = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", + model: "gpt-4o-mini", temperature: 0, }); {{/useOpenAI}} diff --git a/templates/vsc/js/weather-agent/src/agent.js.tpl b/templates/vsc/js/weather-agent/src/agent.js.tpl index 852e95b9568..72cae7b987b 100644 --- a/templates/vsc/js/weather-agent/src/agent.js.tpl +++ b/templates/vsc/js/weather-agent/src/agent.js.tpl @@ -57,7 +57,7 @@ weatherAgent.onConversationUpdate( {{#useOpenAI}} const agentModel = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", + model: "gpt-4o-mini", temperature: 0, }); {{/useOpenAI}} diff --git a/templates/vsc/ts/weather-agent/src/agent.ts.tpl b/templates/vsc/ts/weather-agent/src/agent.ts.tpl index b70246217bf..c3b4079e2f4 100644 --- a/templates/vsc/ts/weather-agent/src/agent.ts.tpl +++ b/templates/vsc/ts/weather-agent/src/agent.ts.tpl @@ -66,7 +66,7 @@ interface WeatherForecastAgentResponse { {{#useOpenAI}} const agentModel = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", + model: "gpt-4o-mini", temperature: 0, }); {{/useOpenAI}} From a4184a7b1485235634b029163e156c469fe4846f Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 15:09:49 +0800 Subject: [PATCH 5/9] test(vscuse): wait longer for the Azure lifecycle notifications The provision stage watches an ARM deployment create the hosting plan, the web app, and the bot registration, and the deploy stage builds the project and uploads the package to that web app, so both can outlast the five minutes the notification assertion allowed. The wait window becomes a component parameter: provision and deploy take fifteen minutes, the Python environment keeps five, and the full window is only ever paid when the stage never reports success. --- .../product/compile-vscuse-case-bundles.md | 1 + .../components/lifecycle-components.test.cjs | 3 +- .../notifications/assert-contains.json.tpl | 4 +-- .../engine/semantic-step-compiler.cjs | 15 +++++++- .../engine/semantic-step-compiler.test.cjs | 34 +++++++++++++++++++ ...asic-cea-py-azure-openai-remote-teams.json | 4 +-- ...m-existing-api-api-key-remote-preview.json | 2 +- ...om-existing-api-bearer-remote-preview.json | 2 +- ...m-existing-api-no-auth-remote-preview.json | 2 +- ...rom-existing-api-oauth-remote-preview.json | 2 +- ...cratch--da-api-plugin-from-scratch-js.json | 4 +-- ...cratch--da-api-plugin-from-scratch-ts.json | 4 +-- ...p-server--da-mcp-remote-entra-preview.json | 2 +- ...cp-server--da-mcp-remote-none-preview.json | 2 +- ...p-server--da-mcp-remote-oauth-preview.json | 2 +- ...o-action--da-no-action-remote-preview.json | 2 +- ...-weather-js-azure-openai-remote-teams.json | 4 +-- ...agent--weather-js-openai-remote-teams.json | 4 +-- ...eather-ts-azure-openai-remote-copilot.json | 4 +-- ...-weather-ts-azure-openai-remote-teams.json | 4 +-- ...agent--weather-ts-openai-remote-teams.json | 4 +-- 21 files changed, 77 insertions(+), 28 deletions(-) diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index 7fee4c9c826..edc776aa805 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -1132,6 +1132,7 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-74 | Given the `(Preview) Launch Remote in Copilot (Chrome)` target, the adapter requires provision and deploy, unlike `Preview in Copilot (Chrome)`, because a custom engine agent answers from a bot the deploy stage publishes while a declarative agent answers from a definition the provision stage uploads. | | VCB-75 | Given a `localEnvironment` operation, each named variable is added to the `envs` mapping that the project's local lifecycle writes into `.localConfigs`, because the scaffolded app reads its configuration from that generated file, and writing the variable there scopes it to the authoring case instead of every case sharing the container environment. | | VCB-76 | Given a `localEnvironment` operation whose variable name or value would not survive a shell assignment unquoted, the compilation fails, because the value is interpolated into a generated shell command and the runner resolves its own placeholders before the shell sees it. | +| VCB-77 | Given a `provision` or `deploy` operation, its success notification is awaited for longer than a local operation's, because both stages wait on an Azure control plane rather than on the toolkit, and the wait is only ever paid in full when the stage never reports success. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs b/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs index 9ca9ac98907..ffbc5c86448 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs @@ -16,6 +16,7 @@ const substitutions = { optionLabel: "Deploy", questionTitle: "Deploy resources in dev?", readySubject: "the selected target is visible", + retryTimeout: "900", }; function render(relativePath, overrides = {}) { @@ -293,7 +294,7 @@ test("lifecycle recipes have reusable confirmation and notification primitives", assert.equal(notification.component.id, "assertContains"); assert.equal(notification.steps.length, 1); assert.match(notification.steps[0].description, /stage completed/); - assert.ok(notification.steps[0].tags.includes("step_retry_timeout: 300")); + assert.ok(notification.steps[0].tags.includes("step_retry_timeout: 900")); }); test("target primitives expose F1, profile selection, and browser readiness behavior", () => { diff --git a/packages/tests/vscuse/vscode-test-cases/components/notifications/assert-contains.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/notifications/assert-contains.json.tpl index ac87a240ac9..764fb75febc 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/notifications/assert-contains.json.tpl +++ b/packages/tests/vscuse/vscode-test-cases/components/notifications/assert-contains.json.tpl @@ -3,7 +3,7 @@ "version": 1, "uiSurface": "notifications", "id": "assertContains", - "parameters": ["instanceSuffix", "notificationText"] + "parameters": ["instanceSuffix", "notificationText", "retryTimeout"] }, "steps": [ { @@ -22,7 +22,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: {{text:retryTimeout}}" ] } ] diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index 47c5e5df3bf..225aa169740 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -74,6 +74,7 @@ const pythonEnvironment = { dependenciesTitle: "Select dependencies to install", environmentTypeLabel: "Venv", successText: "The following environment is selected:", + successTimeout: "300", }; const scaffoldQuestionAdapters = { @@ -245,6 +246,12 @@ const provisionOauthConfirmation = { "Microsoft 365 Agents Toolkit uploads the client ID/Secret for OAuth Registration to Developer Portal. It is used by Teams client to securely access your API at runtime. Microsoft 365 Agents Toolkit doesn't store your client ID/Secret.", }; +// Both stages wait on an Azure control plane rather than on the toolkit: the +// provision stage watches an ARM deployment create the hosting plan, the web +// app, and the bot registration, and the deploy stage builds the project and +// uploads the package to that web app. Either can outlast the five minutes the +// hand-recorded plans allowed, and the wait is only ever paid in full when the +// stage never reports success. const lifecycleAdapters = { deploy: { confirmation: { @@ -253,8 +260,12 @@ const lifecycleAdapters = { dialogTitle: "Do you want to deploy resources in dev environment?", }, successText: "actions in deploy stage executed successfully", + successTimeout: "900", + }, + provision: { + successText: "provision stage executed successfully", + successTimeout: "900", }, - provision: { successText: "provision stage executed successfully" }, }; // A readiness subject only has to show that the app on screen is the one this @@ -900,6 +911,7 @@ function createSemanticStepCompiler() { output, render(state, "notifications/assert-contains.json.tpl", { notificationText: pythonEnvironment.successText, + retryTimeout: pythonEnvironment.successTimeout, }), ); if (error) return error; @@ -1016,6 +1028,7 @@ function createSemanticStepCompiler() { output, render(state, "notifications/assert-contains.json.tpl", { notificationText: recipe.successText, + retryTimeout: recipe.successTimeout, }), ); if (error) return error; diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index cdba167614f..7f65965ab0e 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -1510,6 +1510,40 @@ test("VCB-76: a shell-unsafe local environment value fails the compilation", asy ); }); +test("VCB-77: an Azure lifecycle waits longer for its notification than a local operation", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => + generated.caseId === "basic-cea-py-azure-openai-remote-teams", + ).plan; + const timeoutOf = (text) => { + const step = plan.steps.find( + (candidate) => + candidate.step_id.startsWith("step_assertNotificationContains_") && + candidate.description.includes(text), + ); + assert.notEqual(step, undefined); + return step.tags.find((tag) => tag.startsWith("step_retry_timeout: ")); + }; + assert.equal( + timeoutOf("provision stage executed successfully"), + "step_retry_timeout: 900", + ); + assert.equal( + timeoutOf("actions in deploy stage executed successfully"), + "step_retry_timeout: 900", + ); + assert.equal( + timeoutOf("The following environment is selected:"), + "step_retry_timeout: 300", + ); +}); + test("VCB-74: the remote Copilot target requires provision and deploy", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace( diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json index 88247caf20c..6f4a93b6bf6 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -3331,7 +3331,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3611,7 +3611,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json index b9359580ce0..c94bc0f031c 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json @@ -2121,7 +2121,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json index 26d9c493613..066b3e59230 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json @@ -2121,7 +2121,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json index f4406f39a24..bc5879aeca7 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json @@ -2099,7 +2099,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json index e767400ba39..cc7d6bedd85 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json @@ -2200,7 +2200,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json index a57b2f58b7d..9944afa2c09 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json @@ -2831,7 +2831,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3162,7 +3162,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json index 65e9925bc37..30233e90946 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json @@ -2831,7 +2831,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3162,7 +3162,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json index cf92ae959f4..c9b766889d0 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json @@ -1908,7 +1908,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json index 520b0b4b7a9..eecc63a9db6 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json @@ -1846,7 +1846,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json index eff26c89948..1cd75077faa 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json @@ -2050,7 +2050,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json index d72439fc64f..8a0cec976d1 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json @@ -1581,7 +1581,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json index fb41ab969a6..b6121f5cf73 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -2740,7 +2740,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3020,7 +3020,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index e7bc4ecd041..449dec0c983 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -2598,7 +2598,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -2878,7 +2878,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json index 0c80911fa0b..231fd6ace3d 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json @@ -2793,7 +2793,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3073,7 +3073,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index bee26030be1..8857973544e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -2788,7 +2788,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -3068,7 +3068,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index 5d735985b88..63a3429bab9 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -2646,7 +2646,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { @@ -2926,7 +2926,7 @@ "tags": [ "component:notifications", "action:assert-contains", - "step_retry_timeout: 300" + "step_retry_timeout: 900" ] }, { From 6ab4018be228bc5dc7b0faa4a87680673ff61528 Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 15:23:59 +0800 Subject: [PATCH 6/9] test(vscuse): sign the launched Chrome in before asserting the Teams surface Every Chrome launch configuration the templates ship omits userDataDir, so js-debug hands the debug session a profile of its own that carries no Microsoft 365 session, and every one of those URLs carries the toolkit account hint, so the browser opens on the password prompt for the account already signed in to Visual Studio Code rather than on the Teams app details page the readiness assertion waits for. The three Chrome Teams profiles now render a password-only browser sign-in between the launch and that assertion. The existing browser sign-in component starts from the account input, which the account hint skips, so this is a separate entry state rather than a reuse. --- .../product/compile-vscuse-case-bundles.md | 1 + .../browser/m365-password-sign-in.json.tpl | 85 ++++++++++++ .../engine/semantic-step-compiler.cjs | 18 +++ .../engine/semantic-step-compiler.test.cjs | 31 +++++ ...basic-cea-py-azure-openai-local-teams.json | 124 +++++++++++++++++- ...asic-cea-py-azure-openai-remote-teams.json | 124 +++++++++++++++++- ...--weather-js-azure-openai-local-teams.json | 124 +++++++++++++++++- ...-weather-js-azure-openai-remote-teams.json | 124 +++++++++++++++++- ...-agent--weather-js-openai-local-teams.json | 124 +++++++++++++++++- ...agent--weather-js-openai-remote-teams.json | 124 +++++++++++++++++- ...--weather-ts-azure-openai-local-teams.json | 124 +++++++++++++++++- ...-weather-ts-azure-openai-remote-teams.json | 124 +++++++++++++++++- ...-agent--weather-ts-openai-local-teams.json | 124 +++++++++++++++++- ...agent--weather-ts-openai-remote-teams.json | 124 +++++++++++++++++- 14 files changed, 1325 insertions(+), 50 deletions(-) create mode 100644 packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index edc776aa805..fff3eaa458f 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -1133,6 +1133,7 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-75 | Given a `localEnvironment` operation, each named variable is added to the `envs` mapping that the project's local lifecycle writes into `.localConfigs`, because the scaffolded app reads its configuration from that generated file, and writing the variable there scopes it to the authoring case instead of every case sharing the container environment. | | VCB-76 | Given a `localEnvironment` operation whose variable name or value would not survive a shell assignment unquoted, the compilation fails, because the value is interpolated into a generated shell command and the runner resolves its own placeholders before the shell sees it. | | VCB-77 | Given a `provision` or `deploy` operation, its success notification is awaited for longer than a local operation's, because both stages wait on an Azure control plane rather than on the toolkit, and the wait is only ever paid in full when the stage never reports success. | +| VCB-78 | Given a Chrome target, the launched browser is signed in before its readiness is asserted, because every Chrome launch configuration the templates ship omits `userDataDir` and therefore gets a profile carrying no Microsoft 365 session, and its URL carries the toolkit's account hint, so the browser opens on the password prompt for the account already signed in to Visual Studio Code. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl new file mode 100644 index 00000000000..d860d5e9351 --- /dev/null +++ b/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl @@ -0,0 +1,85 @@ +{ + "component": { + "version": 1, + "id": "browserM365PasswordSignIn", + "answerType": "authentication", + "parameters": ["instanceSuffix", "accountName", "accountPassword"] + }, + "steps": [ + { + "step_id": "step_browserM365PasswordSignIn_assertPassword_{{text:instanceSuffix}}", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft sign-in page in Chrome names {{text:accountName}} and asks for that account's password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser", "step_retry_timeout: 300"] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_{{text:instanceSuffix}}", + "agent": "interaction", + "tool": "type_text", + "parameters": { "text": {{json:accountPassword}} }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": ["step_browserM365PasswordSignIn_assertPassword_{{text:instanceSuffix}}"], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser"] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_{{text:instanceSuffix}}", + "agent": "interaction", + "tool": "key_press", + "parameters": { "key": "enter" }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": ["step_browserM365PasswordSignIn_enterPassword_{{text:instanceSuffix}}"], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser"] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_{{text:instanceSuffix}}", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": ["step_browserM365PasswordSignIn_submitPassword_{{text:instanceSuffix}}"], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser", "step_retry_timeout: 120"] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_{{text:instanceSuffix}}", + "agent": "interaction", + "tool": "key_press", + "parameters": { "key": "enter" }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": ["step_browserM365PasswordSignIn_assertStaySignedIn_{{text:instanceSuffix}}"], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser", "delay: 30"] + } + ] +} diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index 225aa169740..6142ca21df5 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -277,7 +277,17 @@ const lifecycleAdapters = { // file checks already assert exactly, and against the real manifest rather than // against a screenshot. const targetAdapters = { + // Every Chrome launch configuration the templates ship omits `userDataDir`, so + // js-debug hands the session a profile of its own that carries no Microsoft 365 + // session and the browser always has to sign in. Which page it opens on is + // decided by the launch URL: the Teams targets carry the toolkit's + // `${account-hint}`, which resolves to a `login_hint` and asks straight for the + // password of the account already signed in to Visual Studio Code. "Launch Remote in Teams (Chrome)": { + browserAuthentication: { + component: "authentication/browser/m365-password-sign-in.json.tpl", + credentials: "m365", + }, host: "teams", open: { adapter: "teams-add", destination: "chat", kind: "app" }, readySubject: @@ -289,6 +299,10 @@ const targetAdapters = { // use. It reaches the same Teams app details page, so it reuses that adapter's // open transition and readiness subject. "Launch Remote (Chrome)": { + browserAuthentication: { + component: "authentication/browser/m365-password-sign-in.json.tpl", + credentials: "m365", + }, host: "teams", open: { adapter: "teams-add", destination: "chat", kind: "app" }, readySubject: @@ -328,6 +342,10 @@ const targetAdapters = { // prefix the case authored, which holds for the `local` suffix as it does for // `dev`. "Debug in Teams (Chrome)": { + browserAuthentication: { + component: "authentication/browser/m365-password-sign-in.json.tpl", + credentials: "m365", + }, host: "teams", open: { adapter: "teams-add", destination: "chat", kind: "app" }, readySubject: diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 7f65965ab0e..7568d642398 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -1544,6 +1544,37 @@ test("VCB-77: an Azure lifecycle waits longer for its notification than a local ); }); +test("VCB-78: a Chrome target signs the launched browser in before asserting readiness", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + for (const caseId of [ + "basic-cea-py-azure-openai-local-teams", + "basic-cea-py-azure-openai-remote-teams", + ]) { + const plan = result.value.find( + (generated) => generated.caseId === caseId, + ).plan; + const launchIndex = plan.steps.findIndex( + (step) => + step.tool === "key_press" && + step.step_id.startsWith("step_filterOption_confirm_"), + ); + const passwordIndex = plan.steps.findIndex((step) => + step.step_id.startsWith("step_browserM365PasswordSignIn_enterPassword_"), + ); + const readyIndex = plan.steps.findIndex((step) => + step.step_id.startsWith("step_assertReady_assertReady_"), + ); + assert.notEqual(passwordIndex, -1, caseId); + assert.equal(launchIndex < passwordIndex, true, caseId); + assert.equal(passwordIndex < readyIndex, true, caseId); + } +}); + test("VCB-74: the remote Copilot target requires provision and deploy", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace( diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json index 887aec82709..de820242a73 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 117, + "total_steps": 122, "name": "basic-cea-py-azure-openai-local-teams", "description": { "owner": "", @@ -122,7 +122,12 @@ "step_filterOption_filter_c834b2eb3_5_2", "step_filterOption_assertOption_c834b2eb3_5_2", "step_filterOption_confirm_c834b2eb3_5_2", - "step_assertReady_assertReady_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_enterPassword_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_submitPassword_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c834b2eb3_5_3", + "step_assertReady_assertReady_c834b2eb3_5_4", "step_addAndOpenApp_assertAdd_c834b2eb3_6_1", "step_addAndOpenApp_add_c834b2eb3_6_1", "step_addAndOpenApp_assertAdded_c834b2eb3_6_1", @@ -2495,11 +2500,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c834b2eb3_5_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2509,6 +2514,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c834b2eb3_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c834b2eb3_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c834b2eb3_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c834b2eb3_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c834b2eb3_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -2526,7 +2640,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c834b2eb3_5_3" + "step_assertReady_assertReady_c834b2eb3_5_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json index 6f4a93b6bf6..77c8d5a362e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 172, + "total_steps": 177, "name": "basic-cea-py-azure-openai-remote-teams", "description": { "owner": "", @@ -177,7 +177,12 @@ "step_filterOption_filter_c9bd6c5f6_8_2", "step_filterOption_assertOption_c9bd6c5f6_8_2", "step_filterOption_confirm_c9bd6c5f6_8_2", - "step_assertReady_assertReady_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_enterPassword_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_submitPassword_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c9bd6c5f6_8_3", + "step_assertReady_assertReady_c9bd6c5f6_8_4", "step_addAndOpenApp_assertAdd_c9bd6c5f6_9_1", "step_addAndOpenApp_add_c9bd6c5f6_9_1", "step_addAndOpenApp_assertAdded_c9bd6c5f6_9_1", @@ -3788,11 +3793,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c9bd6c5f6_8_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3802,6 +3807,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c9bd6c5f6_8_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c9bd6c5f6_8_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c9bd6c5f6_8_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c9bd6c5f6_8_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c9bd6c5f6_8_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -3819,7 +3933,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c9bd6c5f6_8_3" + "step_assertReady_assertReady_c9bd6c5f6_8_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json index 6bbe14f3014..0aa5b971430 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 92, + "total_steps": 97, "name": "weather-js-azure-openai-local-teams", "description": { "owner": "", @@ -96,7 +96,12 @@ "step_filterOption_filter_c65c229e7_4_2", "step_filterOption_assertOption_c65c229e7_4_2", "step_filterOption_confirm_c65c229e7_4_2", - "step_assertReady_assertReady_c65c229e7_4_3", + "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3", + "step_browserM365PasswordSignIn_enterPassword_c65c229e7_4_3", + "step_browserM365PasswordSignIn_submitPassword_c65c229e7_4_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c65c229e7_4_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c65c229e7_4_3", + "step_assertReady_assertReady_c65c229e7_4_4", "step_addAndOpenApp_assertAdd_c65c229e7_5_1", "step_addAndOpenApp_add_c65c229e7_5_1", "step_addAndOpenApp_assertAdded_c65c229e7_5_1", @@ -1904,11 +1909,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c65c229e7_4_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1918,6 +1923,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c65c229e7_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c65c229e7_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c65c229e7_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c65c229e7_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c65c229e7_4_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -1935,7 +2049,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c65c229e7_4_3" + "step_assertReady_assertReady_c65c229e7_4_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json index b6121f5cf73..0bf6f12d97f 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 147, + "total_steps": 152, "name": "weather-js-azure-openai-remote-teams", "description": { "owner": "", @@ -151,7 +151,12 @@ "step_filterOption_filter_c1d26615d_7_2", "step_filterOption_assertOption_c1d26615d_7_2", "step_filterOption_confirm_c1d26615d_7_2", - "step_assertReady_assertReady_c1d26615d_7_3", + "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3", + "step_browserM365PasswordSignIn_enterPassword_c1d26615d_7_3", + "step_browserM365PasswordSignIn_submitPassword_c1d26615d_7_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c1d26615d_7_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c1d26615d_7_3", + "step_assertReady_assertReady_c1d26615d_7_4", "step_addAndOpenApp_assertAdd_c1d26615d_8_1", "step_addAndOpenApp_add_c1d26615d_8_1", "step_addAndOpenApp_assertAdded_c1d26615d_8_1", @@ -3197,11 +3202,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c1d26615d_7_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3211,6 +3216,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c1d26615d_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c1d26615d_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c1d26615d_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c1d26615d_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c1d26615d_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -3228,7 +3342,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c1d26615d_7_3" + "step_assertReady_assertReady_c1d26615d_7_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json index ec65f48cd0a..e9cb96cf677 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 87, + "total_steps": 92, "name": "weather-js-openai-local-teams", "description": { "owner": "", @@ -91,7 +91,12 @@ "step_filterOption_filter_ce0ec2ba7_5_2", "step_filterOption_assertOption_ce0ec2ba7_5_2", "step_filterOption_confirm_ce0ec2ba7_5_2", - "step_assertReady_assertReady_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_enterPassword_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_submitPassword_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_ce0ec2ba7_5_3", + "step_assertReady_assertReady_ce0ec2ba7_5_4", "step_addAndOpenApp_assertAdd_ce0ec2ba7_6_1", "step_addAndOpenApp_add_ce0ec2ba7_6_1", "step_addAndOpenApp_assertAdded_ce0ec2ba7_6_1", @@ -1792,11 +1797,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_ce0ec2ba7_5_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1806,6 +1811,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_ce0ec2ba7_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_ce0ec2ba7_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_ce0ec2ba7_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_ce0ec2ba7_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_ce0ec2ba7_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -1823,7 +1937,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_ce0ec2ba7_5_3" + "step_assertReady_assertReady_ce0ec2ba7_5_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index 449dec0c983..9682192033b 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 135, + "total_steps": 140, "name": "weather-js-openai-remote-teams", "description": { "owner": "", @@ -145,7 +145,12 @@ "step_filterOption_filter_c36a630d1_7_2", "step_filterOption_assertOption_c36a630d1_7_2", "step_filterOption_confirm_c36a630d1_7_2", - "step_assertReady_assertReady_c36a630d1_7_3", + "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3", + "step_browserM365PasswordSignIn_enterPassword_c36a630d1_7_3", + "step_browserM365PasswordSignIn_submitPassword_c36a630d1_7_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c36a630d1_7_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c36a630d1_7_3", + "step_assertReady_assertReady_c36a630d1_7_4", "step_addAndOpenApp_assertAdd_c36a630d1_8_1", "step_addAndOpenApp_add_c36a630d1_8_1", "step_addAndOpenApp_assertAdded_c36a630d1_8_1", @@ -3055,11 +3060,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c36a630d1_7_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3069,6 +3074,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c36a630d1_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c36a630d1_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c36a630d1_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c36a630d1_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c36a630d1_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -3086,7 +3200,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c36a630d1_7_3" + "step_assertReady_assertReady_c36a630d1_7_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json index 41a8dbb343a..80b5269e13a 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 94, + "total_steps": 99, "name": "weather-ts-azure-openai-local-teams", "description": { "owner": "", @@ -98,7 +98,12 @@ "step_filterOption_filter_c93c4b25a_4_2", "step_filterOption_assertOption_c93c4b25a_4_2", "step_filterOption_confirm_c93c4b25a_4_2", - "step_assertReady_assertReady_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_enterPassword_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_submitPassword_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c93c4b25a_4_3", + "step_assertReady_assertReady_c93c4b25a_4_4", "step_addAndOpenApp_assertAdd_c93c4b25a_5_1", "step_addAndOpenApp_add_c93c4b25a_5_1", "step_addAndOpenApp_assertAdded_c93c4b25a_5_1", @@ -1952,11 +1957,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c93c4b25a_4_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1966,6 +1971,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c93c4b25a_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c93c4b25a_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c93c4b25a_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c93c4b25a_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c93c4b25a_4_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -1983,7 +2097,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c93c4b25a_4_3" + "step_assertReady_assertReady_c93c4b25a_4_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index 8857973544e..7b85c43424c 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 149, + "total_steps": 154, "name": "weather-ts-azure-openai-remote-teams", "description": { "owner": "", @@ -153,7 +153,12 @@ "step_filterOption_filter_c16c2d022_7_2", "step_filterOption_assertOption_c16c2d022_7_2", "step_filterOption_confirm_c16c2d022_7_2", - "step_assertReady_assertReady_c16c2d022_7_3", + "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3", + "step_browserM365PasswordSignIn_enterPassword_c16c2d022_7_3", + "step_browserM365PasswordSignIn_submitPassword_c16c2d022_7_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c16c2d022_7_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c16c2d022_7_3", + "step_assertReady_assertReady_c16c2d022_7_4", "step_addAndOpenApp_assertAdd_c16c2d022_8_1", "step_addAndOpenApp_add_c16c2d022_8_1", "step_addAndOpenApp_assertAdded_c16c2d022_8_1", @@ -3245,11 +3250,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c16c2d022_7_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3259,6 +3264,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c16c2d022_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c16c2d022_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c16c2d022_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c16c2d022_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c16c2d022_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -3276,7 +3390,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c16c2d022_7_3" + "step_assertReady_assertReady_c16c2d022_7_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json index 0e39d2ec70b..2ebe5b3ebf5 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 89, + "total_steps": 94, "name": "weather-ts-openai-local-teams", "description": { "owner": "", @@ -93,7 +93,12 @@ "step_filterOption_filter_cc58c0052_5_2", "step_filterOption_assertOption_cc58c0052_5_2", "step_filterOption_confirm_cc58c0052_5_2", - "step_assertReady_assertReady_cc58c0052_5_3", + "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3", + "step_browserM365PasswordSignIn_enterPassword_cc58c0052_5_3", + "step_browserM365PasswordSignIn_submitPassword_cc58c0052_5_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_cc58c0052_5_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_cc58c0052_5_3", + "step_assertReady_assertReady_cc58c0052_5_4", "step_addAndOpenApp_assertAdd_cc58c0052_6_1", "step_addAndOpenApp_add_cc58c0052_6_1", "step_addAndOpenApp_assertAdded_cc58c0052_6_1", @@ -1840,11 +1845,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_cc58c0052_5_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1854,6 +1859,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_cc58c0052_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_cc58c0052_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_cc58c0052_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_cc58c0052_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_cc58c0052_5_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -1871,7 +1985,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_cc58c0052_5_3" + "step_assertReady_assertReady_cc58c0052_5_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index 63a3429bab9..4a96d0b2236 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 137, + "total_steps": 142, "name": "weather-ts-openai-remote-teams", "description": { "owner": "", @@ -147,7 +147,12 @@ "step_filterOption_filter_c3f41809f_7_2", "step_filterOption_assertOption_c3f41809f_7_2", "step_filterOption_confirm_c3f41809f_7_2", - "step_assertReady_assertReady_c3f41809f_7_3", + "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3", + "step_browserM365PasswordSignIn_enterPassword_c3f41809f_7_3", + "step_browserM365PasswordSignIn_submitPassword_c3f41809f_7_3", + "step_browserM365PasswordSignIn_assertStaySignedIn_c3f41809f_7_3", + "step_browserM365PasswordSignIn_confirmStaySignedIn_c3f41809f_7_3", + "step_assertReady_assertReady_c3f41809f_7_4", "step_addAndOpenApp_assertAdd_c3f41809f_8_1", "step_addAndOpenApp_add_c3f41809f_8_1", "step_addAndOpenApp_assertAdded_c3f41809f_8_1", @@ -3103,11 +3108,11 @@ ] }, { - "step_id": "step_assertReady_assertReady_c3f41809f_7_3", + "step_id": "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3", "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "description": "@assertion the Microsoft sign-in page in Chrome names ${{env:M365_ACCOUNT_NAME}} and asks for that account's password.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3117,6 +3122,115 @@ ], "preconditions": [], "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 300" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_enterPassword_c3f41809f_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "${{secret:M365_ACCOUNT_PASSWORD}}" + }, + "description": "Enter the registered Microsoft 365 password in the focused password input of the browser sign-in form.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_submitPassword_c3f41809f_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to submit the Microsoft 365 password.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_enterPassword_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_assertStaySignedIn_c3f41809f_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Stay signed in question is visible with Yes focused.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_submitPassword_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "step_retry_timeout: 120" + ] + }, + { + "step_id": "step_browserM365PasswordSignIn_confirmStaySignedIn_c3f41809f_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to confirm staying signed in.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertStaySignedIn_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser", + "delay: 30" + ] + }, + { + "step_id": "step_assertReady_assertReady_c3f41809f_7_4", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Microsoft Teams app details page for an app whose name starts with ${{var:app_name}} is visible.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_confirmStaySignedIn_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], "tags": [ "component:browser", "action:assert-ready", @@ -3134,7 +3248,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertReady_assertReady_c3f41809f_7_3" + "step_assertReady_assertReady_c3f41809f_7_4" ], "preconditions": [], "postconditions": [], From d78ba9aec239238c6c55e0e3e61372ab325451eb Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 16:48:15 +0800 Subject: [PATCH 7/9] test(vscuse): focus the browser password input before typing the password The browser the debug session launches keeps focus in its address bar, so the password was typed outside the sign-in form. The two recorded plans that reach this page the same way click the field first for the same reason. --- .../product/compile-vscuse-case-bundles.md | 1 + .../browser/m365-password-sign-in.json.tpl | 17 ++++++++++- .../engine/semantic-step-compiler.test.cjs | 22 ++++++++++++++ ...basic-cea-py-azure-openai-local-teams.json | 29 +++++++++++++++++-- ...asic-cea-py-azure-openai-remote-teams.json | 29 +++++++++++++++++-- ...--weather-js-azure-openai-local-teams.json | 29 +++++++++++++++++-- ...-weather-js-azure-openai-remote-teams.json | 29 +++++++++++++++++-- ...-agent--weather-js-openai-local-teams.json | 29 +++++++++++++++++-- ...agent--weather-js-openai-remote-teams.json | 29 +++++++++++++++++-- ...--weather-ts-azure-openai-local-teams.json | 29 +++++++++++++++++-- ...-weather-ts-azure-openai-remote-teams.json | 29 +++++++++++++++++-- ...-agent--weather-ts-openai-local-teams.json | 29 +++++++++++++++++-- ...agent--weather-ts-openai-remote-teams.json | 29 +++++++++++++++++-- 13 files changed, 309 insertions(+), 21 deletions(-) diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index fff3eaa458f..686d400f1d4 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -1134,6 +1134,7 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-76 | Given a `localEnvironment` operation whose variable name or value would not survive a shell assignment unquoted, the compilation fails, because the value is interpolated into a generated shell command and the runner resolves its own placeholders before the shell sees it. | | VCB-77 | Given a `provision` or `deploy` operation, its success notification is awaited for longer than a local operation's, because both stages wait on an Azure control plane rather than on the toolkit, and the wait is only ever paid in full when the stage never reports success. | | VCB-78 | Given a Chrome target, the launched browser is signed in before its readiness is asserted, because every Chrome launch configuration the templates ship omits `userDataDir` and therefore gets a profile carrying no Microsoft 365 session, and its URL carries the toolkit's account hint, so the browser opens on the password prompt for the account already signed in to Visual Studio Code. | +| VCB-79 | Given a Chrome target that signs in from the password prompt, the password input is clicked before the password is typed, because the browser the debug session launches keeps focus in its address bar, so a password typed without that click is entered outside the sign-in form. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl index d860d5e9351..41910466adb 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl +++ b/packages/tests/vscuse/vscode-test-cases/components/authentication/browser/m365-password-sign-in.json.tpl @@ -21,6 +21,21 @@ "postconditions": [], "tags": ["component:authentication", "surface:browser", "step_retry_timeout: 300"] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_{{text:instanceSuffix}}", + "agent": "interaction", + "tool": "click", + "parameters": { "button": "left", "x": 400, "y": 405 }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": ["step_browserM365PasswordSignIn_assertPassword_{{text:instanceSuffix}}"], + "preconditions": [], + "postconditions": [], + "tags": ["component:authentication", "surface:browser"] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_{{text:instanceSuffix}}", "agent": "interaction", @@ -31,7 +46,7 @@ "timeout": 30, "retry_count": 0, "continue_on_error": "false", - "depends_on": ["step_browserM365PasswordSignIn_assertPassword_{{text:instanceSuffix}}"], + "depends_on": ["step_browserM365PasswordSignIn_focusPassword_{{text:instanceSuffix}}"], "preconditions": [], "postconditions": [], "tags": ["component:authentication", "surface:browser"] diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 7568d642398..505fcb44e56 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -1575,6 +1575,28 @@ test("VCB-78: a Chrome target signs the launched browser in before asserting rea } }); +test("VCB-79: the password prompt is focused before the password is typed", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => generated.caseId === "basic-cea-py-azure-openai-local-teams", + ).plan; + const focusIndex = plan.steps.findIndex((step) => + step.step_id.startsWith("step_browserM365PasswordSignIn_focusPassword_"), + ); + const passwordIndex = plan.steps.findIndex((step) => + step.step_id.startsWith("step_browserM365PasswordSignIn_enterPassword_"), + ); + + assert.notEqual(focusIndex, -1); + assert.equal(plan.steps[focusIndex].tool, "click"); + assert.equal(focusIndex < passwordIndex, true); +}); + test("VCB-74: the remote Copilot target requires provision and deploy", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace( diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json index de820242a73..61d4929cd6b 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 122, + "total_steps": 123, "name": "basic-cea-py-azure-openai-local-teams", "description": { "owner": "", @@ -123,6 +123,7 @@ "step_filterOption_assertOption_c834b2eb3_5_2", "step_filterOption_confirm_c834b2eb3_5_2", "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3", + "step_browserM365PasswordSignIn_focusPassword_c834b2eb3_5_3", "step_browserM365PasswordSignIn_enterPassword_c834b2eb3_5_3", "step_browserM365PasswordSignIn_submitPassword_c834b2eb3_5_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c834b2eb3_5_3", @@ -2520,6 +2521,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c834b2eb3_5_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c834b2eb3_5_3", "agent": "interaction", @@ -2533,7 +2558,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c834b2eb3_5_3" + "step_browserM365PasswordSignIn_focusPassword_c834b2eb3_5_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json index 77c8d5a362e..ecb31db7fb9 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 177, + "total_steps": 178, "name": "basic-cea-py-azure-openai-remote-teams", "description": { "owner": "", @@ -178,6 +178,7 @@ "step_filterOption_assertOption_c9bd6c5f6_8_2", "step_filterOption_confirm_c9bd6c5f6_8_2", "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3", + "step_browserM365PasswordSignIn_focusPassword_c9bd6c5f6_8_3", "step_browserM365PasswordSignIn_enterPassword_c9bd6c5f6_8_3", "step_browserM365PasswordSignIn_submitPassword_c9bd6c5f6_8_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c9bd6c5f6_8_3", @@ -3813,6 +3814,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c9bd6c5f6_8_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c9bd6c5f6_8_3", "agent": "interaction", @@ -3826,7 +3851,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c9bd6c5f6_8_3" + "step_browserM365PasswordSignIn_focusPassword_c9bd6c5f6_8_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json index 0aa5b971430..790f3f40fe7 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 97, + "total_steps": 98, "name": "weather-js-azure-openai-local-teams", "description": { "owner": "", @@ -97,6 +97,7 @@ "step_filterOption_assertOption_c65c229e7_4_2", "step_filterOption_confirm_c65c229e7_4_2", "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3", + "step_browserM365PasswordSignIn_focusPassword_c65c229e7_4_3", "step_browserM365PasswordSignIn_enterPassword_c65c229e7_4_3", "step_browserM365PasswordSignIn_submitPassword_c65c229e7_4_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c65c229e7_4_3", @@ -1929,6 +1930,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c65c229e7_4_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c65c229e7_4_3", "agent": "interaction", @@ -1942,7 +1967,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c65c229e7_4_3" + "step_browserM365PasswordSignIn_focusPassword_c65c229e7_4_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json index 0bf6f12d97f..4089fb0d315 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 152, + "total_steps": 153, "name": "weather-js-azure-openai-remote-teams", "description": { "owner": "", @@ -152,6 +152,7 @@ "step_filterOption_assertOption_c1d26615d_7_2", "step_filterOption_confirm_c1d26615d_7_2", "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3", + "step_browserM365PasswordSignIn_focusPassword_c1d26615d_7_3", "step_browserM365PasswordSignIn_enterPassword_c1d26615d_7_3", "step_browserM365PasswordSignIn_submitPassword_c1d26615d_7_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c1d26615d_7_3", @@ -3222,6 +3223,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c1d26615d_7_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c1d26615d_7_3", "agent": "interaction", @@ -3235,7 +3260,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c1d26615d_7_3" + "step_browserM365PasswordSignIn_focusPassword_c1d26615d_7_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json index e9cb96cf677..ef66c817263 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 92, + "total_steps": 93, "name": "weather-js-openai-local-teams", "description": { "owner": "", @@ -92,6 +92,7 @@ "step_filterOption_assertOption_ce0ec2ba7_5_2", "step_filterOption_confirm_ce0ec2ba7_5_2", "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3", + "step_browserM365PasswordSignIn_focusPassword_ce0ec2ba7_5_3", "step_browserM365PasswordSignIn_enterPassword_ce0ec2ba7_5_3", "step_browserM365PasswordSignIn_submitPassword_ce0ec2ba7_5_3", "step_browserM365PasswordSignIn_assertStaySignedIn_ce0ec2ba7_5_3", @@ -1817,6 +1818,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_ce0ec2ba7_5_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_ce0ec2ba7_5_3", "agent": "interaction", @@ -1830,7 +1855,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_ce0ec2ba7_5_3" + "step_browserM365PasswordSignIn_focusPassword_ce0ec2ba7_5_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index 9682192033b..41cb6cef87f 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 140, + "total_steps": 141, "name": "weather-js-openai-remote-teams", "description": { "owner": "", @@ -146,6 +146,7 @@ "step_filterOption_assertOption_c36a630d1_7_2", "step_filterOption_confirm_c36a630d1_7_2", "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3", + "step_browserM365PasswordSignIn_focusPassword_c36a630d1_7_3", "step_browserM365PasswordSignIn_enterPassword_c36a630d1_7_3", "step_browserM365PasswordSignIn_submitPassword_c36a630d1_7_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c36a630d1_7_3", @@ -3080,6 +3081,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c36a630d1_7_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c36a630d1_7_3", "agent": "interaction", @@ -3093,7 +3118,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c36a630d1_7_3" + "step_browserM365PasswordSignIn_focusPassword_c36a630d1_7_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json index 80b5269e13a..1730f523e77 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 99, + "total_steps": 100, "name": "weather-ts-azure-openai-local-teams", "description": { "owner": "", @@ -99,6 +99,7 @@ "step_filterOption_assertOption_c93c4b25a_4_2", "step_filterOption_confirm_c93c4b25a_4_2", "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3", + "step_browserM365PasswordSignIn_focusPassword_c93c4b25a_4_3", "step_browserM365PasswordSignIn_enterPassword_c93c4b25a_4_3", "step_browserM365PasswordSignIn_submitPassword_c93c4b25a_4_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c93c4b25a_4_3", @@ -1977,6 +1978,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c93c4b25a_4_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c93c4b25a_4_3", "agent": "interaction", @@ -1990,7 +2015,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c93c4b25a_4_3" + "step_browserM365PasswordSignIn_focusPassword_c93c4b25a_4_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index 7b85c43424c..9b39a7bb87e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 154, + "total_steps": 155, "name": "weather-ts-azure-openai-remote-teams", "description": { "owner": "", @@ -154,6 +154,7 @@ "step_filterOption_assertOption_c16c2d022_7_2", "step_filterOption_confirm_c16c2d022_7_2", "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3", + "step_browserM365PasswordSignIn_focusPassword_c16c2d022_7_3", "step_browserM365PasswordSignIn_enterPassword_c16c2d022_7_3", "step_browserM365PasswordSignIn_submitPassword_c16c2d022_7_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c16c2d022_7_3", @@ -3270,6 +3271,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c16c2d022_7_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c16c2d022_7_3", "agent": "interaction", @@ -3283,7 +3308,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c16c2d022_7_3" + "step_browserM365PasswordSignIn_focusPassword_c16c2d022_7_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json index 2ebe5b3ebf5..8c3780e100a 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 94, + "total_steps": 95, "name": "weather-ts-openai-local-teams", "description": { "owner": "", @@ -94,6 +94,7 @@ "step_filterOption_assertOption_cc58c0052_5_2", "step_filterOption_confirm_cc58c0052_5_2", "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3", + "step_browserM365PasswordSignIn_focusPassword_cc58c0052_5_3", "step_browserM365PasswordSignIn_enterPassword_cc58c0052_5_3", "step_browserM365PasswordSignIn_submitPassword_cc58c0052_5_3", "step_browserM365PasswordSignIn_assertStaySignedIn_cc58c0052_5_3", @@ -1865,6 +1866,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_cc58c0052_5_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_cc58c0052_5_3", "agent": "interaction", @@ -1878,7 +1903,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_cc58c0052_5_3" + "step_browserM365PasswordSignIn_focusPassword_cc58c0052_5_3" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index 4a96d0b2236..c85ca717bcc 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 142, + "total_steps": 143, "name": "weather-ts-openai-remote-teams", "description": { "owner": "", @@ -148,6 +148,7 @@ "step_filterOption_assertOption_c3f41809f_7_2", "step_filterOption_confirm_c3f41809f_7_2", "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3", + "step_browserM365PasswordSignIn_focusPassword_c3f41809f_7_3", "step_browserM365PasswordSignIn_enterPassword_c3f41809f_7_3", "step_browserM365PasswordSignIn_submitPassword_c3f41809f_7_3", "step_browserM365PasswordSignIn_assertStaySignedIn_c3f41809f_7_3", @@ -3128,6 +3129,30 @@ "step_retry_timeout: 300" ] }, + { + "step_id": "step_browserM365PasswordSignIn_focusPassword_c3f41809f_7_3", + "agent": "interaction", + "tool": "click", + "parameters": { + "button": "left", + "x": 400, + "y": 405 + }, + "description": "Click the password input on the Microsoft sign-in page to move focus out of the browser address bar.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:authentication", + "surface:browser" + ] + }, { "step_id": "step_browserM365PasswordSignIn_enterPassword_c3f41809f_7_3", "agent": "interaction", @@ -3141,7 +3166,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_browserM365PasswordSignIn_assertPassword_c3f41809f_7_3" + "step_browserM365PasswordSignIn_focusPassword_c3f41809f_7_3" ], "preconditions": [], "postconditions": [], From 4906fe99b404c3eb08ebdf749d95ddee04e9968b Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 16:52:44 +0800 Subject: [PATCH 8/9] test(vscuse): clear the notification center before a lifecycle operation The notification center keeps every notification the run has raised, so the assertion that waits for the provision or deploy success read it out of a list that also held the scaffolding, sign-in, and earlier lifecycle entries. --- .../product/compile-vscuse-case-bundles.md | 1 + .../engine/semantic-step-compiler.cjs | 14 +- .../engine/semantic-step-compiler.test.cjs | 28 ++ ...asic-cea-py-azure-openai-remote-teams.json | 362 +++++++++++++--- ...m-existing-api-api-key-remote-preview.json | 173 ++++++-- ...om-existing-api-bearer-remote-preview.json | 173 ++++++-- ...m-existing-api-no-auth-remote-preview.json | 143 ++++++- ...rom-existing-api-oauth-remote-preview.json | 185 +++++++-- ...cratch--da-api-plugin-from-scratch-js.json | 386 ++++++++++++++---- ...cratch--da-api-plugin-from-scratch-ts.json | 386 ++++++++++++++---- ...p-server--da-mcp-remote-entra-preview.json | 131 +++++- ...cp-server--da-mcp-remote-none-preview.json | 131 +++++- ...p-server--da-mcp-remote-oauth-preview.json | 131 +++++- ...o-action--da-no-action-remote-preview.json | 143 ++++++- ...-weather-js-azure-openai-remote-teams.json | 362 +++++++++++++--- ...agent--weather-js-openai-remote-teams.json | 362 +++++++++++++--- ...eather-ts-azure-openai-remote-copilot.json | 362 +++++++++++++--- ...-weather-ts-azure-openai-remote-teams.json | 362 +++++++++++++--- ...agent--weather-ts-openai-remote-teams.json | 362 +++++++++++++--- 19 files changed, 3475 insertions(+), 722 deletions(-) diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index 686d400f1d4..2bf3027ee3c 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -1135,6 +1135,7 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-77 | Given a `provision` or `deploy` operation, its success notification is awaited for longer than a local operation's, because both stages wait on an Azure control plane rather than on the toolkit, and the wait is only ever paid in full when the stage never reports success. | | VCB-78 | Given a Chrome target, the launched browser is signed in before its readiness is asserted, because every Chrome launch configuration the templates ship omits `userDataDir` and therefore gets a profile carrying no Microsoft 365 session, and its URL carries the toolkit's account hint, so the browser opens on the password prompt for the account already signed in to Visual Studio Code. | | VCB-79 | Given a Chrome target that signs in from the password prompt, the password input is clicked before the password is typed, because the browser the debug session launches keeps focus in its address bar, so a password typed without that click is entered outside the sign-in form. | +| VCB-80 | Given a lifecycle operation, the notification center is cleared before the operation starts, because it keeps every notification the run has raised, so the assertion that waits for this operation's success would otherwise read it out of a list that also holds the scaffolding, sign-in, and earlier lifecycle entries. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs index 6142ca21df5..5f3b68c7b14 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.cjs @@ -18,6 +18,7 @@ const provisionEnvironmentInput = "environment"; const provisionEnvironmentSkipValue = "none"; const commandTitles = { + clearNotifications: "Notifications: Clear All Notifications", create: "Microsoft 365 Agents: Create New Agent/App", deploy: "Microsoft 365 Agents: Deploy", // The toolkit contributes one side bar view per section and VS Code generates @@ -978,10 +979,21 @@ function createSemanticStepCompiler() { const recipe = lifecycleAdapters[definition.type]; let confirmation = recipe.confirmation; const output = []; + // The notification center keeps every notification the run has raised, so + // the assertion that waits for this operation's success would read it out of + // a list that also holds the scaffolding, sign-in, and earlier lifecycle + // entries. + let error = append( + output, + render(state, "command-palette/execute-command.json.tpl", { + commandTitle: commandTitles.clearNotifications, + }), + ); + if (error) return error; // VS Code closes the Command Palette as soon as the window loses focus, and // a running lifecycle operation opens browser windows of its own, so the // notification center is opened before the operation starts. - let error = append( + error = append( output, render(state, "command-palette/execute-command.json.tpl", { commandTitle: commandTitles.notifications, diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 505fcb44e56..4b928b165a3 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -1597,6 +1597,34 @@ test("VCB-79: the password prompt is focused before the password is typed", asyn assert.equal(focusIndex < passwordIndex, true); }); +test("VCB-80: a lifecycle operation clears the notification center before it starts", async () => { + const result = await compileFixture( + "basic-custom-engine-agent.yml", + (sourceText) => sourceText, + ); + + assert.equal(result.ok, true); + const plan = result.value.find( + (generated) => + generated.caseId === "basic-cea-py-azure-openai-remote-teams", + ).plan; + const commands = plan.steps + .filter((step) => step.step_id.startsWith("step_executeCommand_filter_")) + .map((step) => step.parameters.text); + + for (const title of [ + "Microsoft 365 Agents: Provision", + "Microsoft 365 Agents: Deploy", + ]) { + const index = commands.indexOf(title); + assert.notEqual(index, -1, title); + assert.deepEqual(commands.slice(index - 2, index), [ + "Notifications: Clear All Notifications", + "Notifications: Show Notifications", + ]); + } +}); + test("VCB-74: the remote Copilot target requires provision and deploy", async () => { const result = await compileFixture("weather-agent.yml", (sourceText) => sourceText.replace( diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json index ecb31db7fb9..421bd73f900 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 178, + "total_steps": 188, "name": "basic-cea-py-azure-openai-remote-teams", "description": { "owner": "", @@ -140,22 +140,27 @@ "step_executeCommand_filter_c9bd6c5f6_6_2", "step_executeCommand_assertCommand_c9bd6c5f6_6_2", "step_executeCommand_execute_c9bd6c5f6_6_2", - "step_singleSelect_assertQuestion_c9bd6c5f6_6_3", - "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3", - "step_singleSelect_filter_c9bd6c5f6_6_3", - "step_singleSelect_assertOption_c9bd6c5f6_6_3", - "step_singleSelect_confirm_c9bd6c5f6_6_3", - "step_textInput_assertQuestion_c9bd6c5f6_6_4", - "step_textInput_input_c9bd6c5f6_6_4", - "step_textInput_confirm_c9bd6c5f6_6_4", - "step_singleSelect_assertQuestion_c9bd6c5f6_6_5", - "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5", - "step_singleSelect_filter_c9bd6c5f6_6_5", - "step_singleSelect_assertOption_c9bd6c5f6_6_5", - "step_singleSelect_confirm_c9bd6c5f6_6_5", - "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6", - "step_clickPrimaryAction_click_c9bd6c5f6_6_6", - "step_assertNotificationContains_assert_c9bd6c5f6_6_7", + "step_executeCommand_open_c9bd6c5f6_6_3", + "step_executeCommand_assertPalette_c9bd6c5f6_6_3", + "step_executeCommand_filter_c9bd6c5f6_6_3", + "step_executeCommand_assertCommand_c9bd6c5f6_6_3", + "step_executeCommand_execute_c9bd6c5f6_6_3", + "step_singleSelect_assertQuestion_c9bd6c5f6_6_4", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_4", + "step_singleSelect_filter_c9bd6c5f6_6_4", + "step_singleSelect_assertOption_c9bd6c5f6_6_4", + "step_singleSelect_confirm_c9bd6c5f6_6_4", + "step_textInput_assertQuestion_c9bd6c5f6_6_5", + "step_textInput_input_c9bd6c5f6_6_5", + "step_textInput_confirm_c9bd6c5f6_6_5", + "step_singleSelect_assertQuestion_c9bd6c5f6_6_6", + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_6", + "step_singleSelect_filter_c9bd6c5f6_6_6", + "step_singleSelect_assertOption_c9bd6c5f6_6_6", + "step_singleSelect_confirm_c9bd6c5f6_6_6", + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_7", + "step_clickPrimaryAction_click_c9bd6c5f6_6_7", + "step_assertNotificationContains_assert_c9bd6c5f6_6_8", "step_executeCommand_open_c9bd6c5f6_7_1", "step_executeCommand_assertPalette_c9bd6c5f6_7_1", "step_executeCommand_filter_c9bd6c5f6_7_1", @@ -166,9 +171,14 @@ "step_executeCommand_filter_c9bd6c5f6_7_2", "step_executeCommand_assertCommand_c9bd6c5f6_7_2", "step_executeCommand_execute_c9bd6c5f6_7_2", - "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3", - "step_clickPrimaryAction_click_c9bd6c5f6_7_3", - "step_assertNotificationContains_assert_c9bd6c5f6_7_4", + "step_executeCommand_open_c9bd6c5f6_7_3", + "step_executeCommand_assertPalette_c9bd6c5f6_7_3", + "step_executeCommand_filter_c9bd6c5f6_7_3", + "step_executeCommand_assertCommand_c9bd6c5f6_7_3", + "step_executeCommand_execute_c9bd6c5f6_7_3", + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_4", + "step_clickPrimaryAction_click_c9bd6c5f6_7_4", + "step_assertNotificationContains_assert_c9bd6c5f6_7_5", "step_executeCommand_open_c9bd6c5f6_8_1", "step_executeCommand_assertPalette_c9bd6c5f6_8_1", "step_executeCommand_filter_c9bd6c5f6_8_1", @@ -2829,7 +2839,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2851,7 +2861,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2937,7 +2947,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2959,7 +2969,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2998,7 +3008,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_3", + "step_id": "step_executeCommand_open_c9bd6c5f6_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3008,7 +3126,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c9bd6c5f6_6_2" + "step_executeCommand_execute_c9bd6c5f6_6_3" ], "preconditions": [], "postconditions": [], @@ -3019,7 +3137,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3029,7 +3147,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c9bd6c5f6_6_3" + "step_singleSelect_assertQuestion_c9bd6c5f6_6_4" ], "preconditions": [], "postconditions": [], @@ -3040,7 +3158,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c9bd6c5f6_6_3", + "step_id": "step_singleSelect_filter_c9bd6c5f6_6_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3052,7 +3170,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_3" + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_4" ], "preconditions": [], "postconditions": [], @@ -3062,7 +3180,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_3", + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3072,7 +3190,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c9bd6c5f6_6_3" + "step_singleSelect_filter_c9bd6c5f6_6_4" ], "preconditions": [], "postconditions": [], @@ -3083,7 +3201,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_3", + "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3095,7 +3213,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c9bd6c5f6_6_3" + "step_singleSelect_assertOption_c9bd6c5f6_6_4" ], "preconditions": [], "postconditions": [], @@ -3105,7 +3223,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c9bd6c5f6_6_4", + "step_id": "step_textInput_assertQuestion_c9bd6c5f6_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3115,7 +3233,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c9bd6c5f6_6_3" + "step_singleSelect_confirm_c9bd6c5f6_6_4" ], "preconditions": [], "postconditions": [], @@ -3126,7 +3244,7 @@ ] }, { - "step_id": "step_textInput_input_c9bd6c5f6_6_4", + "step_id": "step_textInput_input_c9bd6c5f6_6_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3138,7 +3256,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c9bd6c5f6_6_4" + "step_textInput_assertQuestion_c9bd6c5f6_6_5" ], "preconditions": [], "postconditions": [], @@ -3148,7 +3266,7 @@ ] }, { - "step_id": "step_textInput_confirm_c9bd6c5f6_6_4", + "step_id": "step_textInput_confirm_c9bd6c5f6_6_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3160,7 +3278,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c9bd6c5f6_6_4" + "step_textInput_input_c9bd6c5f6_6_5" ], "preconditions": [], "postconditions": [], @@ -3170,7 +3288,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_5", + "step_id": "step_singleSelect_assertQuestion_c9bd6c5f6_6_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -3180,7 +3298,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c9bd6c5f6_6_4" + "step_textInput_confirm_c9bd6c5f6_6_5" ], "preconditions": [], "postconditions": [], @@ -3191,7 +3309,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -3201,7 +3319,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c9bd6c5f6_6_5" + "step_singleSelect_assertQuestion_c9bd6c5f6_6_6" ], "preconditions": [], "postconditions": [], @@ -3212,7 +3330,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c9bd6c5f6_6_5", + "step_id": "step_singleSelect_filter_c9bd6c5f6_6_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -3224,7 +3342,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_5" + "step_singleSelect_assertOptionsLoaded_c9bd6c5f6_6_6" ], "preconditions": [], "postconditions": [], @@ -3234,7 +3352,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_5", + "step_id": "step_singleSelect_assertOption_c9bd6c5f6_6_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -3244,7 +3362,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c9bd6c5f6_6_5" + "step_singleSelect_filter_c9bd6c5f6_6_6" ], "preconditions": [], "postconditions": [], @@ -3255,7 +3373,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_5", + "step_id": "step_singleSelect_confirm_c9bd6c5f6_6_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3267,7 +3385,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c9bd6c5f6_6_5" + "step_singleSelect_assertOption_c9bd6c5f6_6_6" ], "preconditions": [], "postconditions": [], @@ -3277,7 +3395,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6", + "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -3287,7 +3405,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c9bd6c5f6_6_5" + "step_singleSelect_confirm_c9bd6c5f6_6_6" ], "preconditions": [], "postconditions": [], @@ -3298,7 +3416,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_6_6", + "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_6_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3310,7 +3428,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_6" + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_6_7" ], "preconditions": [], "postconditions": [], @@ -3320,7 +3438,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_6_7", + "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_6_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -3330,7 +3448,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c9bd6c5f6_6_6" + "step_clickPrimaryAction_click_c9bd6c5f6_6_7" ], "preconditions": [], "postconditions": [], @@ -3353,7 +3471,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c9bd6c5f6_6_7" + "step_assertNotificationContains_assert_c9bd6c5f6_6_8" ], "preconditions": [], "postconditions": [], @@ -3388,7 +3506,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -3410,7 +3528,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3496,7 +3614,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -3518,7 +3636,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3557,7 +3675,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3", + "step_id": "step_executeCommand_open_c9bd6c5f6_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c9bd6c5f6_7_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c9bd6c5f6_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c9bd6c5f6_7_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c9bd6c5f6_7_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c9bd6c5f6_7_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c9bd6c5f6_7_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3567,7 +3793,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c9bd6c5f6_7_2" + "step_executeCommand_execute_c9bd6c5f6_7_3" ], "preconditions": [], "postconditions": [], @@ -3578,7 +3804,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_7_3", + "step_id": "step_clickPrimaryAction_click_c9bd6c5f6_7_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3590,7 +3816,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_3" + "step_clickPrimaryAction_assertDialog_c9bd6c5f6_7_4" ], "preconditions": [], "postconditions": [], @@ -3600,7 +3826,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_7_4", + "step_id": "step_assertNotificationContains_assert_c9bd6c5f6_7_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3610,7 +3836,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c9bd6c5f6_7_3" + "step_clickPrimaryAction_click_c9bd6c5f6_7_4" ], "preconditions": [], "postconditions": [], @@ -3633,7 +3859,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c9bd6c5f6_7_4" + "step_assertNotificationContains_assert_c9bd6c5f6_7_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json index c94bc0f031c..234b8d80bac 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 113, + "total_steps": 118, "name": "da-api-plugin-from-existing-api-api-key-remote-preview", "description": { "owner": "", @@ -97,14 +97,19 @@ "step_executeCommand_filter_c8af7aec5_4_2", "step_executeCommand_assertCommand_c8af7aec5_4_2", "step_executeCommand_execute_c8af7aec5_4_2", - "step_clickOption_assertPrompt_c8af7aec5_4_3", - "step_clickOption_click_c8af7aec5_4_3", - "step_textInput_assertQuestion_c8af7aec5_4_4", - "step_textInput_input_c8af7aec5_4_4", - "step_textInput_confirm_c8af7aec5_4_4", - "step_clickPrimaryAction_assertDialog_c8af7aec5_4_5", - "step_clickPrimaryAction_click_c8af7aec5_4_5", - "step_assertNotificationContains_assert_c8af7aec5_4_6", + "step_executeCommand_open_c8af7aec5_4_3", + "step_executeCommand_assertPalette_c8af7aec5_4_3", + "step_executeCommand_filter_c8af7aec5_4_3", + "step_executeCommand_assertCommand_c8af7aec5_4_3", + "step_executeCommand_execute_c8af7aec5_4_3", + "step_clickOption_assertPrompt_c8af7aec5_4_4", + "step_clickOption_click_c8af7aec5_4_4", + "step_textInput_assertQuestion_c8af7aec5_4_5", + "step_textInput_input_c8af7aec5_4_5", + "step_textInput_confirm_c8af7aec5_4_5", + "step_clickPrimaryAction_assertDialog_c8af7aec5_4_6", + "step_clickPrimaryAction_click_c8af7aec5_4_6", + "step_assertNotificationContains_assert_c8af7aec5_4_7", "step_executeCommand_open_c8af7aec5_5_1", "step_executeCommand_assertPalette_c8af7aec5_5_1", "step_executeCommand_filter_c8af7aec5_5_1", @@ -1776,7 +1781,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1798,7 +1803,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1884,7 +1889,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1906,7 +1911,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1945,7 +1950,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_c8af7aec5_4_3", + "step_id": "step_executeCommand_open_c8af7aec5_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c8af7aec5_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c8af7aec5_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c8af7aec5_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c8af7aec5_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c8af7aec5_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c8af7aec5_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c8af7aec5_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c8af7aec5_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c8af7aec5_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_c8af7aec5_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1955,7 +2068,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c8af7aec5_4_2" + "step_executeCommand_execute_c8af7aec5_4_3" ], "preconditions": [], "postconditions": [], @@ -1967,7 +2080,7 @@ ] }, { - "step_id": "step_clickOption_click_c8af7aec5_4_3", + "step_id": "step_clickOption_click_c8af7aec5_4_4", "agent": "interaction", "tool": "click", "parameters": { @@ -1981,7 +2094,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_c8af7aec5_4_3" + "step_clickOption_assertPrompt_c8af7aec5_4_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -1996,7 +2109,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c8af7aec5_4_4", + "step_id": "step_textInput_assertQuestion_c8af7aec5_4_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2006,7 +2119,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_c8af7aec5_4_3" + "step_clickOption_click_c8af7aec5_4_4" ], "preconditions": [], "postconditions": [], @@ -2017,7 +2130,7 @@ ] }, { - "step_id": "step_textInput_input_c8af7aec5_4_4", + "step_id": "step_textInput_input_c8af7aec5_4_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2029,7 +2142,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c8af7aec5_4_4" + "step_textInput_assertQuestion_c8af7aec5_4_5" ], "preconditions": [], "postconditions": [], @@ -2039,7 +2152,7 @@ ] }, { - "step_id": "step_textInput_confirm_c8af7aec5_4_4", + "step_id": "step_textInput_confirm_c8af7aec5_4_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2051,7 +2164,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c8af7aec5_4_4" + "step_textInput_input_c8af7aec5_4_5" ], "preconditions": [], "postconditions": [], @@ -2061,7 +2174,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c8af7aec5_4_5", + "step_id": "step_clickPrimaryAction_assertDialog_c8af7aec5_4_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2071,7 +2184,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c8af7aec5_4_4" + "step_textInput_confirm_c8af7aec5_4_5" ], "preconditions": [], "postconditions": [], @@ -2082,7 +2195,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c8af7aec5_4_5", + "step_id": "step_clickPrimaryAction_click_c8af7aec5_4_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2094,7 +2207,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c8af7aec5_4_5" + "step_clickPrimaryAction_assertDialog_c8af7aec5_4_6" ], "preconditions": [], "postconditions": [], @@ -2104,7 +2217,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c8af7aec5_4_6", + "step_id": "step_assertNotificationContains_assert_c8af7aec5_4_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2114,7 +2227,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c8af7aec5_4_5" + "step_clickPrimaryAction_click_c8af7aec5_4_6" ], "preconditions": [], "postconditions": [], @@ -2137,7 +2250,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c8af7aec5_4_6" + "step_assertNotificationContains_assert_c8af7aec5_4_7" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json index 066b3e59230..abd80996325 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 113, + "total_steps": 118, "name": "da-api-plugin-from-existing-api-bearer-remote-preview", "description": { "owner": "", @@ -97,14 +97,19 @@ "step_executeCommand_filter_cccb76852_4_2", "step_executeCommand_assertCommand_cccb76852_4_2", "step_executeCommand_execute_cccb76852_4_2", - "step_clickOption_assertPrompt_cccb76852_4_3", - "step_clickOption_click_cccb76852_4_3", - "step_textInput_assertQuestion_cccb76852_4_4", - "step_textInput_input_cccb76852_4_4", - "step_textInput_confirm_cccb76852_4_4", - "step_clickPrimaryAction_assertDialog_cccb76852_4_5", - "step_clickPrimaryAction_click_cccb76852_4_5", - "step_assertNotificationContains_assert_cccb76852_4_6", + "step_executeCommand_open_cccb76852_4_3", + "step_executeCommand_assertPalette_cccb76852_4_3", + "step_executeCommand_filter_cccb76852_4_3", + "step_executeCommand_assertCommand_cccb76852_4_3", + "step_executeCommand_execute_cccb76852_4_3", + "step_clickOption_assertPrompt_cccb76852_4_4", + "step_clickOption_click_cccb76852_4_4", + "step_textInput_assertQuestion_cccb76852_4_5", + "step_textInput_input_cccb76852_4_5", + "step_textInput_confirm_cccb76852_4_5", + "step_clickPrimaryAction_assertDialog_cccb76852_4_6", + "step_clickPrimaryAction_click_cccb76852_4_6", + "step_assertNotificationContains_assert_cccb76852_4_7", "step_executeCommand_open_cccb76852_5_1", "step_executeCommand_assertPalette_cccb76852_5_1", "step_executeCommand_filter_cccb76852_5_1", @@ -1776,7 +1781,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1798,7 +1803,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1884,7 +1889,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1906,7 +1911,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1945,7 +1950,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_cccb76852_4_3", + "step_id": "step_executeCommand_open_cccb76852_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cccb76852_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cccb76852_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cccb76852_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cccb76852_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cccb76852_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cccb76852_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cccb76852_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cccb76852_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cccb76852_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_cccb76852_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1955,7 +2068,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cccb76852_4_2" + "step_executeCommand_execute_cccb76852_4_3" ], "preconditions": [], "postconditions": [], @@ -1967,7 +2080,7 @@ ] }, { - "step_id": "step_clickOption_click_cccb76852_4_3", + "step_id": "step_clickOption_click_cccb76852_4_4", "agent": "interaction", "tool": "click", "parameters": { @@ -1981,7 +2094,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_cccb76852_4_3" + "step_clickOption_assertPrompt_cccb76852_4_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -1996,7 +2109,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cccb76852_4_4", + "step_id": "step_textInput_assertQuestion_cccb76852_4_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2006,7 +2119,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_cccb76852_4_3" + "step_clickOption_click_cccb76852_4_4" ], "preconditions": [], "postconditions": [], @@ -2017,7 +2130,7 @@ ] }, { - "step_id": "step_textInput_input_cccb76852_4_4", + "step_id": "step_textInput_input_cccb76852_4_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2029,7 +2142,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cccb76852_4_4" + "step_textInput_assertQuestion_cccb76852_4_5" ], "preconditions": [], "postconditions": [], @@ -2039,7 +2152,7 @@ ] }, { - "step_id": "step_textInput_confirm_cccb76852_4_4", + "step_id": "step_textInput_confirm_cccb76852_4_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2051,7 +2164,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cccb76852_4_4" + "step_textInput_input_cccb76852_4_5" ], "preconditions": [], "postconditions": [], @@ -2061,7 +2174,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_cccb76852_4_5", + "step_id": "step_clickPrimaryAction_assertDialog_cccb76852_4_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2071,7 +2184,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cccb76852_4_4" + "step_textInput_confirm_cccb76852_4_5" ], "preconditions": [], "postconditions": [], @@ -2082,7 +2195,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_cccb76852_4_5", + "step_id": "step_clickPrimaryAction_click_cccb76852_4_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2094,7 +2207,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_cccb76852_4_5" + "step_clickPrimaryAction_assertDialog_cccb76852_4_6" ], "preconditions": [], "postconditions": [], @@ -2104,7 +2217,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cccb76852_4_6", + "step_id": "step_assertNotificationContains_assert_cccb76852_4_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2114,7 +2227,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_cccb76852_4_5" + "step_clickPrimaryAction_click_cccb76852_4_6" ], "preconditions": [], "postconditions": [], @@ -2137,7 +2250,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cccb76852_4_6" + "step_assertNotificationContains_assert_cccb76852_4_7" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json index bc5879aeca7..def9e18943a 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 107, + "total_steps": 112, "name": "da-api-plugin-from-existing-api-no-auth-remote-preview", "description": { "owner": "", @@ -101,9 +101,14 @@ "step_executeCommand_filter_c2579f408_4_2", "step_executeCommand_assertCommand_c2579f408_4_2", "step_executeCommand_execute_c2579f408_4_2", - "step_clickOption_assertPrompt_c2579f408_4_3", - "step_clickOption_click_c2579f408_4_3", - "step_assertNotificationContains_assert_c2579f408_4_4", + "step_executeCommand_open_c2579f408_4_3", + "step_executeCommand_assertPalette_c2579f408_4_3", + "step_executeCommand_filter_c2579f408_4_3", + "step_executeCommand_assertCommand_c2579f408_4_3", + "step_executeCommand_execute_c2579f408_4_3", + "step_clickOption_assertPrompt_c2579f408_4_4", + "step_clickOption_click_c2579f408_4_4", + "step_assertNotificationContains_assert_c2579f408_4_5", "step_executeCommand_open_c2579f408_5_1", "step_executeCommand_assertPalette_c2579f408_5_1", "step_executeCommand_filter_c2579f408_5_1", @@ -1862,7 +1867,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1884,7 +1889,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1970,7 +1975,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1992,7 +1997,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2031,7 +2036,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_c2579f408_4_3", + "step_id": "step_executeCommand_open_c2579f408_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c2579f408_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c2579f408_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c2579f408_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c2579f408_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c2579f408_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c2579f408_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c2579f408_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c2579f408_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c2579f408_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_c2579f408_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2041,7 +2154,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c2579f408_4_2" + "step_executeCommand_execute_c2579f408_4_3" ], "preconditions": [], "postconditions": [], @@ -2053,7 +2166,7 @@ ] }, { - "step_id": "step_clickOption_click_c2579f408_4_3", + "step_id": "step_clickOption_click_c2579f408_4_4", "agent": "interaction", "tool": "click", "parameters": { @@ -2067,7 +2180,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_c2579f408_4_3" + "step_clickOption_assertPrompt_c2579f408_4_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -2082,7 +2195,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c2579f408_4_4", + "step_id": "step_assertNotificationContains_assert_c2579f408_4_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2092,7 +2205,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_c2579f408_4_3" + "step_clickOption_click_c2579f408_4_4" ], "preconditions": [], "postconditions": [], @@ -2115,7 +2228,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c2579f408_4_4" + "step_assertNotificationContains_assert_c2579f408_4_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json index cc7d6bedd85..59489795677 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 127, + "total_steps": 132, "name": "da-api-plugin-from-existing-api-oauth-remote-preview", "description": { "owner": "", @@ -97,17 +97,22 @@ "step_executeCommand_filter_cd7e35bb7_4_2", "step_executeCommand_assertCommand_cd7e35bb7_4_2", "step_executeCommand_execute_cd7e35bb7_4_2", - "step_clickOption_assertPrompt_cd7e35bb7_4_3", - "step_clickOption_click_cd7e35bb7_4_3", - "step_textInput_assertQuestion_cd7e35bb7_4_4", - "step_textInput_input_cd7e35bb7_4_4", - "step_textInput_confirm_cd7e35bb7_4_4", + "step_executeCommand_open_cd7e35bb7_4_3", + "step_executeCommand_assertPalette_cd7e35bb7_4_3", + "step_executeCommand_filter_cd7e35bb7_4_3", + "step_executeCommand_assertCommand_cd7e35bb7_4_3", + "step_executeCommand_execute_cd7e35bb7_4_3", + "step_clickOption_assertPrompt_cd7e35bb7_4_4", + "step_clickOption_click_cd7e35bb7_4_4", "step_textInput_assertQuestion_cd7e35bb7_4_5", "step_textInput_input_cd7e35bb7_4_5", "step_textInput_confirm_cd7e35bb7_4_5", - "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_6", - "step_clickPrimaryAction_click_cd7e35bb7_4_6", - "step_assertNotificationContains_assert_cd7e35bb7_4_7", + "step_textInput_assertQuestion_cd7e35bb7_4_6", + "step_textInput_input_cd7e35bb7_4_6", + "step_textInput_confirm_cd7e35bb7_4_6", + "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_7", + "step_clickPrimaryAction_click_cd7e35bb7_4_7", + "step_assertNotificationContains_assert_cd7e35bb7_4_8", "step_executeCommand_open_cd7e35bb7_5_1", "step_executeCommand_assertPalette_cd7e35bb7_5_1", "step_executeCommand_filter_cd7e35bb7_5_1", @@ -1790,7 +1795,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1812,7 +1817,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1898,7 +1903,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1920,7 +1925,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1959,7 +1964,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_cd7e35bb7_4_3", + "step_id": "step_executeCommand_open_cd7e35bb7_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cd7e35bb7_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cd7e35bb7_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cd7e35bb7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cd7e35bb7_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cd7e35bb7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cd7e35bb7_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cd7e35bb7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cd7e35bb7_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cd7e35bb7_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_cd7e35bb7_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1969,7 +2082,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cd7e35bb7_4_2" + "step_executeCommand_execute_cd7e35bb7_4_3" ], "preconditions": [], "postconditions": [], @@ -1981,7 +2094,7 @@ ] }, { - "step_id": "step_clickOption_click_cd7e35bb7_4_3", + "step_id": "step_clickOption_click_cd7e35bb7_4_4", "agent": "interaction", "tool": "click", "parameters": { @@ -1995,7 +2108,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_cd7e35bb7_4_3" + "step_clickOption_assertPrompt_cd7e35bb7_4_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -2010,7 +2123,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cd7e35bb7_4_4", + "step_id": "step_textInput_assertQuestion_cd7e35bb7_4_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2020,7 +2133,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_cd7e35bb7_4_3" + "step_clickOption_click_cd7e35bb7_4_4" ], "preconditions": [], "postconditions": [], @@ -2031,7 +2144,7 @@ ] }, { - "step_id": "step_textInput_input_cd7e35bb7_4_4", + "step_id": "step_textInput_input_cd7e35bb7_4_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2043,7 +2156,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cd7e35bb7_4_4" + "step_textInput_assertQuestion_cd7e35bb7_4_5" ], "preconditions": [], "postconditions": [], @@ -2053,7 +2166,7 @@ ] }, { - "step_id": "step_textInput_confirm_cd7e35bb7_4_4", + "step_id": "step_textInput_confirm_cd7e35bb7_4_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2065,7 +2178,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cd7e35bb7_4_4" + "step_textInput_input_cd7e35bb7_4_5" ], "preconditions": [], "postconditions": [], @@ -2075,7 +2188,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_cd7e35bb7_4_5", + "step_id": "step_textInput_assertQuestion_cd7e35bb7_4_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2085,7 +2198,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cd7e35bb7_4_4" + "step_textInput_confirm_cd7e35bb7_4_5" ], "preconditions": [], "postconditions": [], @@ -2096,7 +2209,7 @@ ] }, { - "step_id": "step_textInput_input_cd7e35bb7_4_5", + "step_id": "step_textInput_input_cd7e35bb7_4_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2108,7 +2221,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_cd7e35bb7_4_5" + "step_textInput_assertQuestion_cd7e35bb7_4_6" ], "preconditions": [], "postconditions": [], @@ -2118,7 +2231,7 @@ ] }, { - "step_id": "step_textInput_confirm_cd7e35bb7_4_5", + "step_id": "step_textInput_confirm_cd7e35bb7_4_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2130,7 +2243,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_cd7e35bb7_4_5" + "step_textInput_input_cd7e35bb7_4_6" ], "preconditions": [], "postconditions": [], @@ -2140,7 +2253,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_6", + "step_id": "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2150,7 +2263,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_cd7e35bb7_4_5" + "step_textInput_confirm_cd7e35bb7_4_6" ], "preconditions": [], "postconditions": [], @@ -2161,7 +2274,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_cd7e35bb7_4_6", + "step_id": "step_clickPrimaryAction_click_cd7e35bb7_4_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2173,7 +2286,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_6" + "step_clickPrimaryAction_assertDialog_cd7e35bb7_4_7" ], "preconditions": [], "postconditions": [], @@ -2183,7 +2296,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cd7e35bb7_4_7", + "step_id": "step_assertNotificationContains_assert_cd7e35bb7_4_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2193,7 +2306,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_cd7e35bb7_4_6" + "step_clickPrimaryAction_click_cd7e35bb7_4_7" ], "preconditions": [], "postconditions": [], @@ -2216,7 +2329,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cd7e35bb7_4_7" + "step_assertNotificationContains_assert_cd7e35bb7_4_8" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json index 9944afa2c09..47fbb2922f0 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 160, + "total_steps": 170, "name": "da-api-plugin-from-scratch-js", "description": { "owner": "", @@ -115,24 +115,29 @@ "step_executeCommand_filter_c919bef1e_5_2", "step_executeCommand_assertCommand_c919bef1e_5_2", "step_executeCommand_execute_c919bef1e_5_2", - "step_clickOption_assertPrompt_c919bef1e_5_3", - "step_clickOption_click_c919bef1e_5_3", - "step_singleSelect_assertQuestion_c919bef1e_5_4", - "step_singleSelect_assertOptionsLoaded_c919bef1e_5_4", - "step_singleSelect_filter_c919bef1e_5_4", - "step_singleSelect_assertOption_c919bef1e_5_4", - "step_singleSelect_confirm_c919bef1e_5_4", - "step_textInput_assertQuestion_c919bef1e_5_5", - "step_textInput_input_c919bef1e_5_5", - "step_textInput_confirm_c919bef1e_5_5", - "step_singleSelect_assertQuestion_c919bef1e_5_6", - "step_singleSelect_assertOptionsLoaded_c919bef1e_5_6", - "step_singleSelect_filter_c919bef1e_5_6", - "step_singleSelect_assertOption_c919bef1e_5_6", - "step_singleSelect_confirm_c919bef1e_5_6", - "step_clickPrimaryAction_assertDialog_c919bef1e_5_7", - "step_clickPrimaryAction_click_c919bef1e_5_7", - "step_assertNotificationContains_assert_c919bef1e_5_8", + "step_executeCommand_open_c919bef1e_5_3", + "step_executeCommand_assertPalette_c919bef1e_5_3", + "step_executeCommand_filter_c919bef1e_5_3", + "step_executeCommand_assertCommand_c919bef1e_5_3", + "step_executeCommand_execute_c919bef1e_5_3", + "step_clickOption_assertPrompt_c919bef1e_5_4", + "step_clickOption_click_c919bef1e_5_4", + "step_singleSelect_assertQuestion_c919bef1e_5_5", + "step_singleSelect_assertOptionsLoaded_c919bef1e_5_5", + "step_singleSelect_filter_c919bef1e_5_5", + "step_singleSelect_assertOption_c919bef1e_5_5", + "step_singleSelect_confirm_c919bef1e_5_5", + "step_textInput_assertQuestion_c919bef1e_5_6", + "step_textInput_input_c919bef1e_5_6", + "step_textInput_confirm_c919bef1e_5_6", + "step_singleSelect_assertQuestion_c919bef1e_5_7", + "step_singleSelect_assertOptionsLoaded_c919bef1e_5_7", + "step_singleSelect_filter_c919bef1e_5_7", + "step_singleSelect_assertOption_c919bef1e_5_7", + "step_singleSelect_confirm_c919bef1e_5_7", + "step_clickPrimaryAction_assertDialog_c919bef1e_5_8", + "step_clickPrimaryAction_click_c919bef1e_5_8", + "step_assertNotificationContains_assert_c919bef1e_5_9", "step_executeCommand_open_c919bef1e_6_1", "step_executeCommand_assertPalette_c919bef1e_6_1", "step_executeCommand_filter_c919bef1e_6_1", @@ -143,11 +148,16 @@ "step_executeCommand_filter_c919bef1e_6_2", "step_executeCommand_assertCommand_c919bef1e_6_2", "step_executeCommand_execute_c919bef1e_6_2", - "step_clickOption_assertPrompt_c919bef1e_6_3", - "step_clickOption_click_c919bef1e_6_3", - "step_clickPrimaryAction_assertDialog_c919bef1e_6_4", - "step_clickPrimaryAction_click_c919bef1e_6_4", - "step_assertNotificationContains_assert_c919bef1e_6_5", + "step_executeCommand_open_c919bef1e_6_3", + "step_executeCommand_assertPalette_c919bef1e_6_3", + "step_executeCommand_filter_c919bef1e_6_3", + "step_executeCommand_assertCommand_c919bef1e_6_3", + "step_executeCommand_execute_c919bef1e_6_3", + "step_clickOption_assertPrompt_c919bef1e_6_4", + "step_clickOption_click_c919bef1e_6_4", + "step_clickPrimaryAction_assertDialog_c919bef1e_6_5", + "step_clickPrimaryAction_click_c919bef1e_6_5", + "step_assertNotificationContains_assert_c919bef1e_6_6", "step_executeCommand_open_c919bef1e_7_1", "step_executeCommand_assertPalette_c919bef1e_7_1", "step_executeCommand_filter_c919bef1e_7_1", @@ -2272,7 +2282,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2294,7 +2304,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2380,7 +2390,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2402,7 +2412,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2441,7 +2451,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_c919bef1e_5_3", + "step_id": "step_executeCommand_open_c919bef1e_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c919bef1e_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c919bef1e_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c919bef1e_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c919bef1e_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c919bef1e_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c919bef1e_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c919bef1e_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c919bef1e_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c919bef1e_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_c919bef1e_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2451,7 +2569,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c919bef1e_5_2" + "step_executeCommand_execute_c919bef1e_5_3" ], "preconditions": [], "postconditions": [], @@ -2463,7 +2581,7 @@ ] }, { - "step_id": "step_clickOption_click_c919bef1e_5_3", + "step_id": "step_clickOption_click_c919bef1e_5_4", "agent": "interaction", "tool": "click", "parameters": { @@ -2477,7 +2595,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_c919bef1e_5_3" + "step_clickOption_assertPrompt_c919bef1e_5_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -2492,7 +2610,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c919bef1e_5_4", + "step_id": "step_singleSelect_assertQuestion_c919bef1e_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2502,7 +2620,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_c919bef1e_5_3" + "step_clickOption_click_c919bef1e_5_4" ], "preconditions": [], "postconditions": [], @@ -2513,7 +2631,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c919bef1e_5_4", + "step_id": "step_singleSelect_assertOptionsLoaded_c919bef1e_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2523,7 +2641,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c919bef1e_5_4" + "step_singleSelect_assertQuestion_c919bef1e_5_5" ], "preconditions": [], "postconditions": [], @@ -2534,7 +2652,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c919bef1e_5_4", + "step_id": "step_singleSelect_filter_c919bef1e_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2546,7 +2664,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c919bef1e_5_4" + "step_singleSelect_assertOptionsLoaded_c919bef1e_5_5" ], "preconditions": [], "postconditions": [], @@ -2556,7 +2674,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c919bef1e_5_4", + "step_id": "step_singleSelect_assertOption_c919bef1e_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2566,7 +2684,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c919bef1e_5_4" + "step_singleSelect_filter_c919bef1e_5_5" ], "preconditions": [], "postconditions": [], @@ -2577,7 +2695,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c919bef1e_5_4", + "step_id": "step_singleSelect_confirm_c919bef1e_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2589,7 +2707,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c919bef1e_5_4" + "step_singleSelect_assertOption_c919bef1e_5_5" ], "preconditions": [], "postconditions": [], @@ -2599,7 +2717,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c919bef1e_5_5", + "step_id": "step_textInput_assertQuestion_c919bef1e_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2609,7 +2727,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c919bef1e_5_4" + "step_singleSelect_confirm_c919bef1e_5_5" ], "preconditions": [], "postconditions": [], @@ -2620,7 +2738,7 @@ ] }, { - "step_id": "step_textInput_input_c919bef1e_5_5", + "step_id": "step_textInput_input_c919bef1e_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2632,7 +2750,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c919bef1e_5_5" + "step_textInput_assertQuestion_c919bef1e_5_6" ], "preconditions": [], "postconditions": [], @@ -2642,7 +2760,7 @@ ] }, { - "step_id": "step_textInput_confirm_c919bef1e_5_5", + "step_id": "step_textInput_confirm_c919bef1e_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2654,7 +2772,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c919bef1e_5_5" + "step_textInput_input_c919bef1e_5_6" ], "preconditions": [], "postconditions": [], @@ -2664,7 +2782,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c919bef1e_5_6", + "step_id": "step_singleSelect_assertQuestion_c919bef1e_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2674,7 +2792,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c919bef1e_5_5" + "step_textInput_confirm_c919bef1e_5_6" ], "preconditions": [], "postconditions": [], @@ -2685,7 +2803,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c919bef1e_5_6", + "step_id": "step_singleSelect_assertOptionsLoaded_c919bef1e_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2695,7 +2813,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c919bef1e_5_6" + "step_singleSelect_assertQuestion_c919bef1e_5_7" ], "preconditions": [], "postconditions": [], @@ -2706,7 +2824,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c919bef1e_5_6", + "step_id": "step_singleSelect_filter_c919bef1e_5_7", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2718,7 +2836,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c919bef1e_5_6" + "step_singleSelect_assertOptionsLoaded_c919bef1e_5_7" ], "preconditions": [], "postconditions": [], @@ -2728,7 +2846,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c919bef1e_5_6", + "step_id": "step_singleSelect_assertOption_c919bef1e_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2738,7 +2856,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c919bef1e_5_6" + "step_singleSelect_filter_c919bef1e_5_7" ], "preconditions": [], "postconditions": [], @@ -2749,7 +2867,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c919bef1e_5_6", + "step_id": "step_singleSelect_confirm_c919bef1e_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2761,7 +2879,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c919bef1e_5_6" + "step_singleSelect_assertOption_c919bef1e_5_7" ], "preconditions": [], "postconditions": [], @@ -2771,7 +2889,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c919bef1e_5_7", + "step_id": "step_clickPrimaryAction_assertDialog_c919bef1e_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2781,7 +2899,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c919bef1e_5_6" + "step_singleSelect_confirm_c919bef1e_5_7" ], "preconditions": [], "postconditions": [], @@ -2792,7 +2910,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c919bef1e_5_7", + "step_id": "step_clickPrimaryAction_click_c919bef1e_5_8", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2804,7 +2922,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c919bef1e_5_7" + "step_clickPrimaryAction_assertDialog_c919bef1e_5_8" ], "preconditions": [], "postconditions": [], @@ -2814,7 +2932,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c919bef1e_5_8", + "step_id": "step_assertNotificationContains_assert_c919bef1e_5_9", "agent": "assertion", "tool": "", "parameters": {}, @@ -2824,7 +2942,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c919bef1e_5_7" + "step_clickPrimaryAction_click_c919bef1e_5_8" ], "preconditions": [], "postconditions": [], @@ -2847,7 +2965,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c919bef1e_5_8" + "step_assertNotificationContains_assert_c919bef1e_5_9" ], "preconditions": [], "postconditions": [], @@ -2882,7 +3000,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2904,7 +3022,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2990,7 +3108,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -3012,7 +3130,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3051,7 +3169,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_c919bef1e_6_3", + "step_id": "step_executeCommand_open_c919bef1e_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c919bef1e_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c919bef1e_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c919bef1e_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c919bef1e_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c919bef1e_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c919bef1e_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c919bef1e_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c919bef1e_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c919bef1e_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_c919bef1e_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3061,7 +3287,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c919bef1e_6_2" + "step_executeCommand_execute_c919bef1e_6_3" ], "preconditions": [], "postconditions": [], @@ -3073,7 +3299,7 @@ ] }, { - "step_id": "step_clickOption_click_c919bef1e_6_3", + "step_id": "step_clickOption_click_c919bef1e_6_4", "agent": "interaction", "tool": "click", "parameters": { @@ -3087,7 +3313,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_c919bef1e_6_3" + "step_clickOption_assertPrompt_c919bef1e_6_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -3102,7 +3328,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c919bef1e_6_4", + "step_id": "step_clickPrimaryAction_assertDialog_c919bef1e_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3112,7 +3338,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_c919bef1e_6_3" + "step_clickOption_click_c919bef1e_6_4" ], "preconditions": [], "postconditions": [], @@ -3123,7 +3349,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c919bef1e_6_4", + "step_id": "step_clickPrimaryAction_click_c919bef1e_6_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3135,7 +3361,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c919bef1e_6_4" + "step_clickPrimaryAction_assertDialog_c919bef1e_6_5" ], "preconditions": [], "postconditions": [], @@ -3145,7 +3371,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c919bef1e_6_5", + "step_id": "step_assertNotificationContains_assert_c919bef1e_6_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -3155,7 +3381,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c919bef1e_6_4" + "step_clickPrimaryAction_click_c919bef1e_6_5" ], "preconditions": [], "postconditions": [], @@ -3178,7 +3404,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c919bef1e_6_5" + "step_assertNotificationContains_assert_c919bef1e_6_6" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json index 30233e90946..4aa3d2d9b77 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 160, + "total_steps": 170, "name": "da-api-plugin-from-scratch-ts", "description": { "owner": "", @@ -115,24 +115,29 @@ "step_executeCommand_filter_ccf08c250_5_2", "step_executeCommand_assertCommand_ccf08c250_5_2", "step_executeCommand_execute_ccf08c250_5_2", - "step_clickOption_assertPrompt_ccf08c250_5_3", - "step_clickOption_click_ccf08c250_5_3", - "step_singleSelect_assertQuestion_ccf08c250_5_4", - "step_singleSelect_assertOptionsLoaded_ccf08c250_5_4", - "step_singleSelect_filter_ccf08c250_5_4", - "step_singleSelect_assertOption_ccf08c250_5_4", - "step_singleSelect_confirm_ccf08c250_5_4", - "step_textInput_assertQuestion_ccf08c250_5_5", - "step_textInput_input_ccf08c250_5_5", - "step_textInput_confirm_ccf08c250_5_5", - "step_singleSelect_assertQuestion_ccf08c250_5_6", - "step_singleSelect_assertOptionsLoaded_ccf08c250_5_6", - "step_singleSelect_filter_ccf08c250_5_6", - "step_singleSelect_assertOption_ccf08c250_5_6", - "step_singleSelect_confirm_ccf08c250_5_6", - "step_clickPrimaryAction_assertDialog_ccf08c250_5_7", - "step_clickPrimaryAction_click_ccf08c250_5_7", - "step_assertNotificationContains_assert_ccf08c250_5_8", + "step_executeCommand_open_ccf08c250_5_3", + "step_executeCommand_assertPalette_ccf08c250_5_3", + "step_executeCommand_filter_ccf08c250_5_3", + "step_executeCommand_assertCommand_ccf08c250_5_3", + "step_executeCommand_execute_ccf08c250_5_3", + "step_clickOption_assertPrompt_ccf08c250_5_4", + "step_clickOption_click_ccf08c250_5_4", + "step_singleSelect_assertQuestion_ccf08c250_5_5", + "step_singleSelect_assertOptionsLoaded_ccf08c250_5_5", + "step_singleSelect_filter_ccf08c250_5_5", + "step_singleSelect_assertOption_ccf08c250_5_5", + "step_singleSelect_confirm_ccf08c250_5_5", + "step_textInput_assertQuestion_ccf08c250_5_6", + "step_textInput_input_ccf08c250_5_6", + "step_textInput_confirm_ccf08c250_5_6", + "step_singleSelect_assertQuestion_ccf08c250_5_7", + "step_singleSelect_assertOptionsLoaded_ccf08c250_5_7", + "step_singleSelect_filter_ccf08c250_5_7", + "step_singleSelect_assertOption_ccf08c250_5_7", + "step_singleSelect_confirm_ccf08c250_5_7", + "step_clickPrimaryAction_assertDialog_ccf08c250_5_8", + "step_clickPrimaryAction_click_ccf08c250_5_8", + "step_assertNotificationContains_assert_ccf08c250_5_9", "step_executeCommand_open_ccf08c250_6_1", "step_executeCommand_assertPalette_ccf08c250_6_1", "step_executeCommand_filter_ccf08c250_6_1", @@ -143,11 +148,16 @@ "step_executeCommand_filter_ccf08c250_6_2", "step_executeCommand_assertCommand_ccf08c250_6_2", "step_executeCommand_execute_ccf08c250_6_2", - "step_clickOption_assertPrompt_ccf08c250_6_3", - "step_clickOption_click_ccf08c250_6_3", - "step_clickPrimaryAction_assertDialog_ccf08c250_6_4", - "step_clickPrimaryAction_click_ccf08c250_6_4", - "step_assertNotificationContains_assert_ccf08c250_6_5", + "step_executeCommand_open_ccf08c250_6_3", + "step_executeCommand_assertPalette_ccf08c250_6_3", + "step_executeCommand_filter_ccf08c250_6_3", + "step_executeCommand_assertCommand_ccf08c250_6_3", + "step_executeCommand_execute_ccf08c250_6_3", + "step_clickOption_assertPrompt_ccf08c250_6_4", + "step_clickOption_click_ccf08c250_6_4", + "step_clickPrimaryAction_assertDialog_ccf08c250_6_5", + "step_clickPrimaryAction_click_ccf08c250_6_5", + "step_assertNotificationContains_assert_ccf08c250_6_6", "step_executeCommand_open_ccf08c250_7_1", "step_executeCommand_assertPalette_ccf08c250_7_1", "step_executeCommand_filter_ccf08c250_7_1", @@ -2272,7 +2282,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2294,7 +2304,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2380,7 +2390,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2402,7 +2412,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2441,7 +2451,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_ccf08c250_5_3", + "step_id": "step_executeCommand_open_ccf08c250_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ccf08c250_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ccf08c250_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ccf08c250_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ccf08c250_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ccf08c250_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ccf08c250_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ccf08c250_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ccf08c250_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ccf08c250_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_ccf08c250_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2451,7 +2569,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_ccf08c250_5_2" + "step_executeCommand_execute_ccf08c250_5_3" ], "preconditions": [], "postconditions": [], @@ -2463,7 +2581,7 @@ ] }, { - "step_id": "step_clickOption_click_ccf08c250_5_3", + "step_id": "step_clickOption_click_ccf08c250_5_4", "agent": "interaction", "tool": "click", "parameters": { @@ -2477,7 +2595,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_ccf08c250_5_3" + "step_clickOption_assertPrompt_ccf08c250_5_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -2492,7 +2610,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_ccf08c250_5_4", + "step_id": "step_singleSelect_assertQuestion_ccf08c250_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2502,7 +2620,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_ccf08c250_5_3" + "step_clickOption_click_ccf08c250_5_4" ], "preconditions": [], "postconditions": [], @@ -2513,7 +2631,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_ccf08c250_5_4", + "step_id": "step_singleSelect_assertOptionsLoaded_ccf08c250_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2523,7 +2641,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_ccf08c250_5_4" + "step_singleSelect_assertQuestion_ccf08c250_5_5" ], "preconditions": [], "postconditions": [], @@ -2534,7 +2652,7 @@ ] }, { - "step_id": "step_singleSelect_filter_ccf08c250_5_4", + "step_id": "step_singleSelect_filter_ccf08c250_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2546,7 +2664,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_ccf08c250_5_4" + "step_singleSelect_assertOptionsLoaded_ccf08c250_5_5" ], "preconditions": [], "postconditions": [], @@ -2556,7 +2674,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_ccf08c250_5_4", + "step_id": "step_singleSelect_assertOption_ccf08c250_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2566,7 +2684,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_ccf08c250_5_4" + "step_singleSelect_filter_ccf08c250_5_5" ], "preconditions": [], "postconditions": [], @@ -2577,7 +2695,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_ccf08c250_5_4", + "step_id": "step_singleSelect_confirm_ccf08c250_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2589,7 +2707,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_ccf08c250_5_4" + "step_singleSelect_assertOption_ccf08c250_5_5" ], "preconditions": [], "postconditions": [], @@ -2599,7 +2717,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_ccf08c250_5_5", + "step_id": "step_textInput_assertQuestion_ccf08c250_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2609,7 +2727,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_ccf08c250_5_4" + "step_singleSelect_confirm_ccf08c250_5_5" ], "preconditions": [], "postconditions": [], @@ -2620,7 +2738,7 @@ ] }, { - "step_id": "step_textInput_input_ccf08c250_5_5", + "step_id": "step_textInput_input_ccf08c250_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2632,7 +2750,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_ccf08c250_5_5" + "step_textInput_assertQuestion_ccf08c250_5_6" ], "preconditions": [], "postconditions": [], @@ -2642,7 +2760,7 @@ ] }, { - "step_id": "step_textInput_confirm_ccf08c250_5_5", + "step_id": "step_textInput_confirm_ccf08c250_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2654,7 +2772,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_ccf08c250_5_5" + "step_textInput_input_ccf08c250_5_6" ], "preconditions": [], "postconditions": [], @@ -2664,7 +2782,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_ccf08c250_5_6", + "step_id": "step_singleSelect_assertQuestion_ccf08c250_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2674,7 +2792,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_ccf08c250_5_5" + "step_textInput_confirm_ccf08c250_5_6" ], "preconditions": [], "postconditions": [], @@ -2685,7 +2803,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_ccf08c250_5_6", + "step_id": "step_singleSelect_assertOptionsLoaded_ccf08c250_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2695,7 +2813,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_ccf08c250_5_6" + "step_singleSelect_assertQuestion_ccf08c250_5_7" ], "preconditions": [], "postconditions": [], @@ -2706,7 +2824,7 @@ ] }, { - "step_id": "step_singleSelect_filter_ccf08c250_5_6", + "step_id": "step_singleSelect_filter_ccf08c250_5_7", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2718,7 +2836,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_ccf08c250_5_6" + "step_singleSelect_assertOptionsLoaded_ccf08c250_5_7" ], "preconditions": [], "postconditions": [], @@ -2728,7 +2846,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_ccf08c250_5_6", + "step_id": "step_singleSelect_assertOption_ccf08c250_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2738,7 +2856,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_ccf08c250_5_6" + "step_singleSelect_filter_ccf08c250_5_7" ], "preconditions": [], "postconditions": [], @@ -2749,7 +2867,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_ccf08c250_5_6", + "step_id": "step_singleSelect_confirm_ccf08c250_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2761,7 +2879,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_ccf08c250_5_6" + "step_singleSelect_assertOption_ccf08c250_5_7" ], "preconditions": [], "postconditions": [], @@ -2771,7 +2889,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_ccf08c250_5_7", + "step_id": "step_clickPrimaryAction_assertDialog_ccf08c250_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2781,7 +2899,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_ccf08c250_5_6" + "step_singleSelect_confirm_ccf08c250_5_7" ], "preconditions": [], "postconditions": [], @@ -2792,7 +2910,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_ccf08c250_5_7", + "step_id": "step_clickPrimaryAction_click_ccf08c250_5_8", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2804,7 +2922,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_ccf08c250_5_7" + "step_clickPrimaryAction_assertDialog_ccf08c250_5_8" ], "preconditions": [], "postconditions": [], @@ -2814,7 +2932,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_ccf08c250_5_8", + "step_id": "step_assertNotificationContains_assert_ccf08c250_5_9", "agent": "assertion", "tool": "", "parameters": {}, @@ -2824,7 +2942,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_ccf08c250_5_7" + "step_clickPrimaryAction_click_ccf08c250_5_8" ], "preconditions": [], "postconditions": [], @@ -2847,7 +2965,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_ccf08c250_5_8" + "step_assertNotificationContains_assert_ccf08c250_5_9" ], "preconditions": [], "postconditions": [], @@ -2882,7 +3000,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2904,7 +3022,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2990,7 +3108,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -3012,7 +3130,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3051,7 +3169,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_ccf08c250_6_3", + "step_id": "step_executeCommand_open_ccf08c250_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_ccf08c250_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_ccf08c250_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_ccf08c250_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_ccf08c250_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_ccf08c250_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_ccf08c250_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_ccf08c250_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_ccf08c250_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_ccf08c250_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_ccf08c250_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3061,7 +3287,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_ccf08c250_6_2" + "step_executeCommand_execute_ccf08c250_6_3" ], "preconditions": [], "postconditions": [], @@ -3073,7 +3299,7 @@ ] }, { - "step_id": "step_clickOption_click_ccf08c250_6_3", + "step_id": "step_clickOption_click_ccf08c250_6_4", "agent": "interaction", "tool": "click", "parameters": { @@ -3087,7 +3313,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_ccf08c250_6_3" + "step_clickOption_assertPrompt_ccf08c250_6_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -3102,7 +3328,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_ccf08c250_6_4", + "step_id": "step_clickPrimaryAction_assertDialog_ccf08c250_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3112,7 +3338,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_ccf08c250_6_3" + "step_clickOption_click_ccf08c250_6_4" ], "preconditions": [], "postconditions": [], @@ -3123,7 +3349,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_ccf08c250_6_4", + "step_id": "step_clickPrimaryAction_click_ccf08c250_6_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3135,7 +3361,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_ccf08c250_6_4" + "step_clickPrimaryAction_assertDialog_ccf08c250_6_5" ], "preconditions": [], "postconditions": [], @@ -3145,7 +3371,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_ccf08c250_6_5", + "step_id": "step_assertNotificationContains_assert_ccf08c250_6_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -3155,7 +3381,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_ccf08c250_6_4" + "step_clickPrimaryAction_click_ccf08c250_6_5" ], "preconditions": [], "postconditions": [], @@ -3178,7 +3404,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_ccf08c250_6_5" + "step_assertNotificationContains_assert_ccf08c250_6_6" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json index c9b766889d0..559f43001c5 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 99, + "total_steps": 104, "name": "da-mcp-remote-entra-preview", "description": { "owner": "", @@ -95,7 +95,12 @@ "step_executeCommand_filter_c0af3d3fa_4_2", "step_executeCommand_assertCommand_c0af3d3fa_4_2", "step_executeCommand_execute_c0af3d3fa_4_2", - "step_assertNotificationContains_assert_c0af3d3fa_4_3", + "step_executeCommand_open_c0af3d3fa_4_3", + "step_executeCommand_assertPalette_c0af3d3fa_4_3", + "step_executeCommand_filter_c0af3d3fa_4_3", + "step_executeCommand_assertCommand_c0af3d3fa_4_3", + "step_executeCommand_execute_c0af3d3fa_4_3", + "step_assertNotificationContains_assert_c0af3d3fa_4_4", "step_executeCommand_open_c0af3d3fa_5_1", "step_executeCommand_assertPalette_c0af3d3fa_5_1", "step_executeCommand_filter_c0af3d3fa_5_1", @@ -1722,7 +1727,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1744,7 +1749,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1830,7 +1835,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1852,7 +1857,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1891,7 +1896,115 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c0af3d3fa_4_3", + "step_id": "step_executeCommand_open_c0af3d3fa_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c0af3d3fa_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c0af3d3fa_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c0af3d3fa_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c0af3d3fa_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c0af3d3fa_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c0af3d3fa_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c0af3d3fa_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c0af3d3fa_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c0af3d3fa_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_c0af3d3fa_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1901,7 +2014,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c0af3d3fa_4_2" + "step_executeCommand_execute_c0af3d3fa_4_3" ], "preconditions": [], "postconditions": [], @@ -1924,7 +2037,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c0af3d3fa_4_3" + "step_assertNotificationContains_assert_c0af3d3fa_4_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json index eecc63a9db6..9a98fcc22df 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 102, + "total_steps": 107, "name": "da-mcp-remote-none-preview", "description": { "owner": "", @@ -92,7 +92,12 @@ "step_executeCommand_filter_cbe46eee0_4_2", "step_executeCommand_assertCommand_cbe46eee0_4_2", "step_executeCommand_execute_cbe46eee0_4_2", - "step_assertNotificationContains_assert_cbe46eee0_4_3", + "step_executeCommand_open_cbe46eee0_4_3", + "step_executeCommand_assertPalette_cbe46eee0_4_3", + "step_executeCommand_filter_cbe46eee0_4_3", + "step_executeCommand_assertCommand_cbe46eee0_4_3", + "step_executeCommand_execute_cbe46eee0_4_3", + "step_assertNotificationContains_assert_cbe46eee0_4_4", "step_executeCommand_open_cbe46eee0_5_1", "step_executeCommand_assertPalette_cbe46eee0_5_1", "step_executeCommand_filter_cbe46eee0_5_1", @@ -1660,7 +1665,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1682,7 +1687,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1768,7 +1773,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1790,7 +1795,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1829,7 +1834,115 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cbe46eee0_4_3", + "step_id": "step_executeCommand_open_cbe46eee0_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cbe46eee0_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cbe46eee0_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cbe46eee0_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cbe46eee0_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cbe46eee0_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cbe46eee0_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cbe46eee0_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cbe46eee0_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cbe46eee0_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_cbe46eee0_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1839,7 +1952,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cbe46eee0_4_2" + "step_executeCommand_execute_cbe46eee0_4_3" ], "preconditions": [], "postconditions": [], @@ -1862,7 +1975,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cbe46eee0_4_3" + "step_assertNotificationContains_assert_cbe46eee0_4_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json index 1cd75077faa..81637a4a979 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 111, + "total_steps": 116, "name": "da-mcp-remote-oauth-preview", "description": { "owner": "", @@ -101,7 +101,12 @@ "step_executeCommand_filter_cc3292876_4_2", "step_executeCommand_assertCommand_cc3292876_4_2", "step_executeCommand_execute_cc3292876_4_2", - "step_assertNotificationContains_assert_cc3292876_4_3", + "step_executeCommand_open_cc3292876_4_3", + "step_executeCommand_assertPalette_cc3292876_4_3", + "step_executeCommand_filter_cc3292876_4_3", + "step_executeCommand_assertCommand_cc3292876_4_3", + "step_executeCommand_execute_cc3292876_4_3", + "step_assertNotificationContains_assert_cc3292876_4_4", "step_executeCommand_open_cc3292876_5_1", "step_executeCommand_assertPalette_cc3292876_5_1", "step_executeCommand_filter_cc3292876_5_1", @@ -1864,7 +1869,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1886,7 +1891,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1972,7 +1977,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1994,7 +1999,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2033,7 +2038,115 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_cc3292876_4_3", + "step_id": "step_executeCommand_open_cc3292876_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_cc3292876_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_cc3292876_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_cc3292876_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_cc3292876_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_cc3292876_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_cc3292876_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_cc3292876_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_cc3292876_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_cc3292876_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_assertNotificationContains_assert_cc3292876_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2043,7 +2156,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_cc3292876_4_2" + "step_executeCommand_execute_cc3292876_4_3" ], "preconditions": [], "postconditions": [], @@ -2066,7 +2179,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_cc3292876_4_3" + "step_assertNotificationContains_assert_cc3292876_4_4" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json index 8a0cec976d1..53663d813b3 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 90, + "total_steps": 95, "name": "da-no-action-remote-preview", "description": { "owner": "", @@ -78,9 +78,14 @@ "step_executeCommand_filter_c60abcc38_4_2", "step_executeCommand_assertCommand_c60abcc38_4_2", "step_executeCommand_execute_c60abcc38_4_2", - "step_clickOption_assertPrompt_c60abcc38_4_3", - "step_clickOption_click_c60abcc38_4_3", - "step_assertNotificationContains_assert_c60abcc38_4_4", + "step_executeCommand_open_c60abcc38_4_3", + "step_executeCommand_assertPalette_c60abcc38_4_3", + "step_executeCommand_filter_c60abcc38_4_3", + "step_executeCommand_assertCommand_c60abcc38_4_3", + "step_executeCommand_execute_c60abcc38_4_3", + "step_clickOption_assertPrompt_c60abcc38_4_4", + "step_clickOption_click_c60abcc38_4_4", + "step_assertNotificationContains_assert_c60abcc38_4_5", "step_executeCommand_open_c60abcc38_5_1", "step_executeCommand_assertPalette_c60abcc38_5_1", "step_executeCommand_filter_c60abcc38_5_1", @@ -1344,7 +1349,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1366,7 +1371,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1452,7 +1457,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -1474,7 +1479,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -1513,7 +1518,115 @@ ] }, { - "step_id": "step_clickOption_assertPrompt_c60abcc38_4_3", + "step_id": "step_executeCommand_open_c60abcc38_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c60abcc38_4_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c60abcc38_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c60abcc38_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c60abcc38_4_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c60abcc38_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c60abcc38_4_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c60abcc38_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c60abcc38_4_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c60abcc38_4_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickOption_assertPrompt_c60abcc38_4_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -1523,7 +1636,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c60abcc38_4_2" + "step_executeCommand_execute_c60abcc38_4_3" ], "preconditions": [], "postconditions": [], @@ -1535,7 +1648,7 @@ ] }, { - "step_id": "step_clickOption_click_c60abcc38_4_3", + "step_id": "step_clickOption_click_c60abcc38_4_4", "agent": "interaction", "tool": "click", "parameters": { @@ -1549,7 +1662,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_assertPrompt_c60abcc38_4_3" + "step_clickOption_assertPrompt_c60abcc38_4_4" ], "preconditions": [ "dhash:292:77:16:5:0000000000000000", @@ -1564,7 +1677,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c60abcc38_4_4", + "step_id": "step_assertNotificationContains_assert_c60abcc38_4_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -1574,7 +1687,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickOption_click_c60abcc38_4_3" + "step_clickOption_click_c60abcc38_4_4" ], "preconditions": [], "postconditions": [], @@ -1597,7 +1710,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c60abcc38_4_4" + "step_assertNotificationContains_assert_c60abcc38_4_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json index 4089fb0d315..210c23faaaa 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 153, + "total_steps": 163, "name": "weather-js-azure-openai-remote-teams", "description": { "owner": "", @@ -114,22 +114,27 @@ "step_executeCommand_filter_c1d26615d_5_2", "step_executeCommand_assertCommand_c1d26615d_5_2", "step_executeCommand_execute_c1d26615d_5_2", - "step_singleSelect_assertQuestion_c1d26615d_5_3", - "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3", - "step_singleSelect_filter_c1d26615d_5_3", - "step_singleSelect_assertOption_c1d26615d_5_3", - "step_singleSelect_confirm_c1d26615d_5_3", - "step_textInput_assertQuestion_c1d26615d_5_4", - "step_textInput_input_c1d26615d_5_4", - "step_textInput_confirm_c1d26615d_5_4", - "step_singleSelect_assertQuestion_c1d26615d_5_5", - "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5", - "step_singleSelect_filter_c1d26615d_5_5", - "step_singleSelect_assertOption_c1d26615d_5_5", - "step_singleSelect_confirm_c1d26615d_5_5", - "step_clickPrimaryAction_assertDialog_c1d26615d_5_6", - "step_clickPrimaryAction_click_c1d26615d_5_6", - "step_assertNotificationContains_assert_c1d26615d_5_7", + "step_executeCommand_open_c1d26615d_5_3", + "step_executeCommand_assertPalette_c1d26615d_5_3", + "step_executeCommand_filter_c1d26615d_5_3", + "step_executeCommand_assertCommand_c1d26615d_5_3", + "step_executeCommand_execute_c1d26615d_5_3", + "step_singleSelect_assertQuestion_c1d26615d_5_4", + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_4", + "step_singleSelect_filter_c1d26615d_5_4", + "step_singleSelect_assertOption_c1d26615d_5_4", + "step_singleSelect_confirm_c1d26615d_5_4", + "step_textInput_assertQuestion_c1d26615d_5_5", + "step_textInput_input_c1d26615d_5_5", + "step_textInput_confirm_c1d26615d_5_5", + "step_singleSelect_assertQuestion_c1d26615d_5_6", + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_6", + "step_singleSelect_filter_c1d26615d_5_6", + "step_singleSelect_assertOption_c1d26615d_5_6", + "step_singleSelect_confirm_c1d26615d_5_6", + "step_clickPrimaryAction_assertDialog_c1d26615d_5_7", + "step_clickPrimaryAction_click_c1d26615d_5_7", + "step_assertNotificationContains_assert_c1d26615d_5_8", "step_executeCommand_open_c1d26615d_6_1", "step_executeCommand_assertPalette_c1d26615d_6_1", "step_executeCommand_filter_c1d26615d_6_1", @@ -140,9 +145,14 @@ "step_executeCommand_filter_c1d26615d_6_2", "step_executeCommand_assertCommand_c1d26615d_6_2", "step_executeCommand_execute_c1d26615d_6_2", - "step_clickPrimaryAction_assertDialog_c1d26615d_6_3", - "step_clickPrimaryAction_click_c1d26615d_6_3", - "step_assertNotificationContains_assert_c1d26615d_6_4", + "step_executeCommand_open_c1d26615d_6_3", + "step_executeCommand_assertPalette_c1d26615d_6_3", + "step_executeCommand_filter_c1d26615d_6_3", + "step_executeCommand_assertCommand_c1d26615d_6_3", + "step_executeCommand_execute_c1d26615d_6_3", + "step_clickPrimaryAction_assertDialog_c1d26615d_6_4", + "step_clickPrimaryAction_click_c1d26615d_6_4", + "step_assertNotificationContains_assert_c1d26615d_6_5", "step_executeCommand_open_c1d26615d_7_1", "step_executeCommand_assertPalette_c1d26615d_7_1", "step_executeCommand_filter_c1d26615d_7_1", @@ -2238,7 +2248,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2260,7 +2270,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2346,7 +2356,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2368,7 +2378,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2407,7 +2417,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_3", + "step_id": "step_executeCommand_open_c1d26615d_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2417,7 +2535,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c1d26615d_5_2" + "step_executeCommand_execute_c1d26615d_5_3" ], "preconditions": [], "postconditions": [], @@ -2428,7 +2546,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2438,7 +2556,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c1d26615d_5_3" + "step_singleSelect_assertQuestion_c1d26615d_5_4" ], "preconditions": [], "postconditions": [], @@ -2449,7 +2567,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c1d26615d_5_3", + "step_id": "step_singleSelect_filter_c1d26615d_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2461,7 +2579,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c1d26615d_5_3" + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_4" ], "preconditions": [], "postconditions": [], @@ -2471,7 +2589,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c1d26615d_5_3", + "step_id": "step_singleSelect_assertOption_c1d26615d_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2481,7 +2599,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c1d26615d_5_3" + "step_singleSelect_filter_c1d26615d_5_4" ], "preconditions": [], "postconditions": [], @@ -2492,7 +2610,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c1d26615d_5_3", + "step_id": "step_singleSelect_confirm_c1d26615d_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2504,7 +2622,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c1d26615d_5_3" + "step_singleSelect_assertOption_c1d26615d_5_4" ], "preconditions": [], "postconditions": [], @@ -2514,7 +2632,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c1d26615d_5_4", + "step_id": "step_textInput_assertQuestion_c1d26615d_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2524,7 +2642,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c1d26615d_5_3" + "step_singleSelect_confirm_c1d26615d_5_4" ], "preconditions": [], "postconditions": [], @@ -2535,7 +2653,7 @@ ] }, { - "step_id": "step_textInput_input_c1d26615d_5_4", + "step_id": "step_textInput_input_c1d26615d_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2547,7 +2665,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c1d26615d_5_4" + "step_textInput_assertQuestion_c1d26615d_5_5" ], "preconditions": [], "postconditions": [], @@ -2557,7 +2675,7 @@ ] }, { - "step_id": "step_textInput_confirm_c1d26615d_5_4", + "step_id": "step_textInput_confirm_c1d26615d_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2569,7 +2687,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c1d26615d_5_4" + "step_textInput_input_c1d26615d_5_5" ], "preconditions": [], "postconditions": [], @@ -2579,7 +2697,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_5", + "step_id": "step_singleSelect_assertQuestion_c1d26615d_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2589,7 +2707,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c1d26615d_5_4" + "step_textInput_confirm_c1d26615d_5_5" ], "preconditions": [], "postconditions": [], @@ -2600,7 +2718,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c1d26615d_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2610,7 +2728,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c1d26615d_5_5" + "step_singleSelect_assertQuestion_c1d26615d_5_6" ], "preconditions": [], "postconditions": [], @@ -2621,7 +2739,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c1d26615d_5_5", + "step_id": "step_singleSelect_filter_c1d26615d_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2633,7 +2751,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c1d26615d_5_5" + "step_singleSelect_assertOptionsLoaded_c1d26615d_5_6" ], "preconditions": [], "postconditions": [], @@ -2643,7 +2761,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c1d26615d_5_5", + "step_id": "step_singleSelect_assertOption_c1d26615d_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2653,7 +2771,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c1d26615d_5_5" + "step_singleSelect_filter_c1d26615d_5_6" ], "preconditions": [], "postconditions": [], @@ -2664,7 +2782,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c1d26615d_5_5", + "step_id": "step_singleSelect_confirm_c1d26615d_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2676,7 +2794,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c1d26615d_5_5" + "step_singleSelect_assertOption_c1d26615d_5_6" ], "preconditions": [], "postconditions": [], @@ -2686,7 +2804,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2696,7 +2814,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c1d26615d_5_5" + "step_singleSelect_confirm_c1d26615d_5_6" ], "preconditions": [], "postconditions": [], @@ -2707,7 +2825,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c1d26615d_5_6", + "step_id": "step_clickPrimaryAction_click_c1d26615d_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2719,7 +2837,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c1d26615d_5_6" + "step_clickPrimaryAction_assertDialog_c1d26615d_5_7" ], "preconditions": [], "postconditions": [], @@ -2729,7 +2847,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c1d26615d_5_7", + "step_id": "step_assertNotificationContains_assert_c1d26615d_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2739,7 +2857,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c1d26615d_5_6" + "step_clickPrimaryAction_click_c1d26615d_5_7" ], "preconditions": [], "postconditions": [], @@ -2762,7 +2880,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c1d26615d_5_7" + "step_assertNotificationContains_assert_c1d26615d_5_8" ], "preconditions": [], "postconditions": [], @@ -2797,7 +2915,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2819,7 +2937,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2905,7 +3023,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2927,7 +3045,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2966,7 +3084,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_6_3", + "step_id": "step_executeCommand_open_c1d26615d_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c1d26615d_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c1d26615d_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c1d26615d_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c1d26615d_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c1d26615d_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c1d26615d_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c1d26615d_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2976,7 +3202,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c1d26615d_6_2" + "step_executeCommand_execute_c1d26615d_6_3" ], "preconditions": [], "postconditions": [], @@ -2987,7 +3213,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c1d26615d_6_3", + "step_id": "step_clickPrimaryAction_click_c1d26615d_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2999,7 +3225,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c1d26615d_6_3" + "step_clickPrimaryAction_assertDialog_c1d26615d_6_4" ], "preconditions": [], "postconditions": [], @@ -3009,7 +3235,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c1d26615d_6_4", + "step_id": "step_assertNotificationContains_assert_c1d26615d_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3019,7 +3245,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c1d26615d_6_3" + "step_clickPrimaryAction_click_c1d26615d_6_4" ], "preconditions": [], "postconditions": [], @@ -3042,7 +3268,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c1d26615d_6_4" + "step_assertNotificationContains_assert_c1d26615d_6_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index 41cb6cef87f..de60cf27fbc 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 141, + "total_steps": 151, "name": "weather-js-openai-remote-teams", "description": { "owner": "", @@ -108,22 +108,27 @@ "step_executeCommand_filter_c36a630d1_5_2", "step_executeCommand_assertCommand_c36a630d1_5_2", "step_executeCommand_execute_c36a630d1_5_2", - "step_singleSelect_assertQuestion_c36a630d1_5_3", - "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3", - "step_singleSelect_filter_c36a630d1_5_3", - "step_singleSelect_assertOption_c36a630d1_5_3", - "step_singleSelect_confirm_c36a630d1_5_3", - "step_textInput_assertQuestion_c36a630d1_5_4", - "step_textInput_input_c36a630d1_5_4", - "step_textInput_confirm_c36a630d1_5_4", - "step_singleSelect_assertQuestion_c36a630d1_5_5", - "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5", - "step_singleSelect_filter_c36a630d1_5_5", - "step_singleSelect_assertOption_c36a630d1_5_5", - "step_singleSelect_confirm_c36a630d1_5_5", - "step_clickPrimaryAction_assertDialog_c36a630d1_5_6", - "step_clickPrimaryAction_click_c36a630d1_5_6", - "step_assertNotificationContains_assert_c36a630d1_5_7", + "step_executeCommand_open_c36a630d1_5_3", + "step_executeCommand_assertPalette_c36a630d1_5_3", + "step_executeCommand_filter_c36a630d1_5_3", + "step_executeCommand_assertCommand_c36a630d1_5_3", + "step_executeCommand_execute_c36a630d1_5_3", + "step_singleSelect_assertQuestion_c36a630d1_5_4", + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_4", + "step_singleSelect_filter_c36a630d1_5_4", + "step_singleSelect_assertOption_c36a630d1_5_4", + "step_singleSelect_confirm_c36a630d1_5_4", + "step_textInput_assertQuestion_c36a630d1_5_5", + "step_textInput_input_c36a630d1_5_5", + "step_textInput_confirm_c36a630d1_5_5", + "step_singleSelect_assertQuestion_c36a630d1_5_6", + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_6", + "step_singleSelect_filter_c36a630d1_5_6", + "step_singleSelect_assertOption_c36a630d1_5_6", + "step_singleSelect_confirm_c36a630d1_5_6", + "step_clickPrimaryAction_assertDialog_c36a630d1_5_7", + "step_clickPrimaryAction_click_c36a630d1_5_7", + "step_assertNotificationContains_assert_c36a630d1_5_8", "step_executeCommand_open_c36a630d1_6_1", "step_executeCommand_assertPalette_c36a630d1_6_1", "step_executeCommand_filter_c36a630d1_6_1", @@ -134,9 +139,14 @@ "step_executeCommand_filter_c36a630d1_6_2", "step_executeCommand_assertCommand_c36a630d1_6_2", "step_executeCommand_execute_c36a630d1_6_2", - "step_clickPrimaryAction_assertDialog_c36a630d1_6_3", - "step_clickPrimaryAction_click_c36a630d1_6_3", - "step_assertNotificationContains_assert_c36a630d1_6_4", + "step_executeCommand_open_c36a630d1_6_3", + "step_executeCommand_assertPalette_c36a630d1_6_3", + "step_executeCommand_filter_c36a630d1_6_3", + "step_executeCommand_assertCommand_c36a630d1_6_3", + "step_executeCommand_execute_c36a630d1_6_3", + "step_clickPrimaryAction_assertDialog_c36a630d1_6_4", + "step_clickPrimaryAction_click_c36a630d1_6_4", + "step_assertNotificationContains_assert_c36a630d1_6_5", "step_executeCommand_open_c36a630d1_7_1", "step_executeCommand_assertPalette_c36a630d1_7_1", "step_executeCommand_filter_c36a630d1_7_1", @@ -2096,7 +2106,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2118,7 +2128,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2204,7 +2214,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2226,7 +2236,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2265,7 +2275,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_3", + "step_id": "step_executeCommand_open_c36a630d1_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c36a630d1_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c36a630d1_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c36a630d1_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c36a630d1_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c36a630d1_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c36a630d1_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c36a630d1_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c36a630d1_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c36a630d1_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2275,7 +2393,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c36a630d1_5_2" + "step_executeCommand_execute_c36a630d1_5_3" ], "preconditions": [], "postconditions": [], @@ -2286,7 +2404,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2296,7 +2414,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c36a630d1_5_3" + "step_singleSelect_assertQuestion_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2307,7 +2425,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c36a630d1_5_3", + "step_id": "step_singleSelect_filter_c36a630d1_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2319,7 +2437,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c36a630d1_5_3" + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2329,7 +2447,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c36a630d1_5_3", + "step_id": "step_singleSelect_assertOption_c36a630d1_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2339,7 +2457,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c36a630d1_5_3" + "step_singleSelect_filter_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2350,7 +2468,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c36a630d1_5_3", + "step_id": "step_singleSelect_confirm_c36a630d1_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2362,7 +2480,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c36a630d1_5_3" + "step_singleSelect_assertOption_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2372,7 +2490,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c36a630d1_5_4", + "step_id": "step_textInput_assertQuestion_c36a630d1_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2382,7 +2500,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c36a630d1_5_3" + "step_singleSelect_confirm_c36a630d1_5_4" ], "preconditions": [], "postconditions": [], @@ -2393,7 +2511,7 @@ ] }, { - "step_id": "step_textInput_input_c36a630d1_5_4", + "step_id": "step_textInput_input_c36a630d1_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2405,7 +2523,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c36a630d1_5_4" + "step_textInput_assertQuestion_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2415,7 +2533,7 @@ ] }, { - "step_id": "step_textInput_confirm_c36a630d1_5_4", + "step_id": "step_textInput_confirm_c36a630d1_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2427,7 +2545,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c36a630d1_5_4" + "step_textInput_input_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2437,7 +2555,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_5", + "step_id": "step_singleSelect_assertQuestion_c36a630d1_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2447,7 +2565,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c36a630d1_5_4" + "step_textInput_confirm_c36a630d1_5_5" ], "preconditions": [], "postconditions": [], @@ -2458,7 +2576,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c36a630d1_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2468,7 +2586,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c36a630d1_5_5" + "step_singleSelect_assertQuestion_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2479,7 +2597,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c36a630d1_5_5", + "step_id": "step_singleSelect_filter_c36a630d1_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2491,7 +2609,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c36a630d1_5_5" + "step_singleSelect_assertOptionsLoaded_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2501,7 +2619,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c36a630d1_5_5", + "step_id": "step_singleSelect_assertOption_c36a630d1_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2511,7 +2629,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c36a630d1_5_5" + "step_singleSelect_filter_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2522,7 +2640,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c36a630d1_5_5", + "step_id": "step_singleSelect_confirm_c36a630d1_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2534,7 +2652,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c36a630d1_5_5" + "step_singleSelect_assertOption_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2544,7 +2662,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2554,7 +2672,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c36a630d1_5_5" + "step_singleSelect_confirm_c36a630d1_5_6" ], "preconditions": [], "postconditions": [], @@ -2565,7 +2683,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c36a630d1_5_6", + "step_id": "step_clickPrimaryAction_click_c36a630d1_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2577,7 +2695,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c36a630d1_5_6" + "step_clickPrimaryAction_assertDialog_c36a630d1_5_7" ], "preconditions": [], "postconditions": [], @@ -2587,7 +2705,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c36a630d1_5_7", + "step_id": "step_assertNotificationContains_assert_c36a630d1_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2597,7 +2715,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c36a630d1_5_6" + "step_clickPrimaryAction_click_c36a630d1_5_7" ], "preconditions": [], "postconditions": [], @@ -2620,7 +2738,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c36a630d1_5_7" + "step_assertNotificationContains_assert_c36a630d1_5_8" ], "preconditions": [], "postconditions": [], @@ -2655,7 +2773,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2677,7 +2795,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2763,7 +2881,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2785,7 +2903,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2824,7 +2942,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_6_3", + "step_id": "step_executeCommand_open_c36a630d1_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c36a630d1_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c36a630d1_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c36a630d1_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c36a630d1_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c36a630d1_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c36a630d1_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c36a630d1_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c36a630d1_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c36a630d1_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c36a630d1_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2834,7 +3060,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c36a630d1_6_2" + "step_executeCommand_execute_c36a630d1_6_3" ], "preconditions": [], "postconditions": [], @@ -2845,7 +3071,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c36a630d1_6_3", + "step_id": "step_clickPrimaryAction_click_c36a630d1_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2857,7 +3083,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c36a630d1_6_3" + "step_clickPrimaryAction_assertDialog_c36a630d1_6_4" ], "preconditions": [], "postconditions": [], @@ -2867,7 +3093,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c36a630d1_6_4", + "step_id": "step_assertNotificationContains_assert_c36a630d1_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2877,7 +3103,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c36a630d1_6_3" + "step_clickPrimaryAction_click_c36a630d1_6_4" ], "preconditions": [], "postconditions": [], @@ -2900,7 +3126,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c36a630d1_6_4" + "step_assertNotificationContains_assert_c36a630d1_6_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json index 231fd6ace3d..15851605cf6 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 154, + "total_steps": 164, "name": "weather-ts-azure-openai-remote-copilot", "description": { "owner": "", @@ -116,22 +116,27 @@ "step_executeCommand_filter_c41d76889_5_2", "step_executeCommand_assertCommand_c41d76889_5_2", "step_executeCommand_execute_c41d76889_5_2", - "step_singleSelect_assertQuestion_c41d76889_5_3", - "step_singleSelect_assertOptionsLoaded_c41d76889_5_3", - "step_singleSelect_filter_c41d76889_5_3", - "step_singleSelect_assertOption_c41d76889_5_3", - "step_singleSelect_confirm_c41d76889_5_3", - "step_textInput_assertQuestion_c41d76889_5_4", - "step_textInput_input_c41d76889_5_4", - "step_textInput_confirm_c41d76889_5_4", - "step_singleSelect_assertQuestion_c41d76889_5_5", - "step_singleSelect_assertOptionsLoaded_c41d76889_5_5", - "step_singleSelect_filter_c41d76889_5_5", - "step_singleSelect_assertOption_c41d76889_5_5", - "step_singleSelect_confirm_c41d76889_5_5", - "step_clickPrimaryAction_assertDialog_c41d76889_5_6", - "step_clickPrimaryAction_click_c41d76889_5_6", - "step_assertNotificationContains_assert_c41d76889_5_7", + "step_executeCommand_open_c41d76889_5_3", + "step_executeCommand_assertPalette_c41d76889_5_3", + "step_executeCommand_filter_c41d76889_5_3", + "step_executeCommand_assertCommand_c41d76889_5_3", + "step_executeCommand_execute_c41d76889_5_3", + "step_singleSelect_assertQuestion_c41d76889_5_4", + "step_singleSelect_assertOptionsLoaded_c41d76889_5_4", + "step_singleSelect_filter_c41d76889_5_4", + "step_singleSelect_assertOption_c41d76889_5_4", + "step_singleSelect_confirm_c41d76889_5_4", + "step_textInput_assertQuestion_c41d76889_5_5", + "step_textInput_input_c41d76889_5_5", + "step_textInput_confirm_c41d76889_5_5", + "step_singleSelect_assertQuestion_c41d76889_5_6", + "step_singleSelect_assertOptionsLoaded_c41d76889_5_6", + "step_singleSelect_filter_c41d76889_5_6", + "step_singleSelect_assertOption_c41d76889_5_6", + "step_singleSelect_confirm_c41d76889_5_6", + "step_clickPrimaryAction_assertDialog_c41d76889_5_7", + "step_clickPrimaryAction_click_c41d76889_5_7", + "step_assertNotificationContains_assert_c41d76889_5_8", "step_executeCommand_open_c41d76889_6_1", "step_executeCommand_assertPalette_c41d76889_6_1", "step_executeCommand_filter_c41d76889_6_1", @@ -142,9 +147,14 @@ "step_executeCommand_filter_c41d76889_6_2", "step_executeCommand_assertCommand_c41d76889_6_2", "step_executeCommand_execute_c41d76889_6_2", - "step_clickPrimaryAction_assertDialog_c41d76889_6_3", - "step_clickPrimaryAction_click_c41d76889_6_3", - "step_assertNotificationContains_assert_c41d76889_6_4", + "step_executeCommand_open_c41d76889_6_3", + "step_executeCommand_assertPalette_c41d76889_6_3", + "step_executeCommand_filter_c41d76889_6_3", + "step_executeCommand_assertCommand_c41d76889_6_3", + "step_executeCommand_execute_c41d76889_6_3", + "step_clickPrimaryAction_assertDialog_c41d76889_6_4", + "step_clickPrimaryAction_click_c41d76889_6_4", + "step_assertNotificationContains_assert_c41d76889_6_5", "step_executeCommand_open_c41d76889_7_1", "step_executeCommand_assertPalette_c41d76889_7_1", "step_executeCommand_filter_c41d76889_7_1", @@ -2285,7 +2295,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2307,7 +2317,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2393,7 +2403,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2415,7 +2425,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2454,7 +2464,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c41d76889_5_3", + "step_id": "step_executeCommand_open_c41d76889_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c41d76889_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2464,7 +2582,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c41d76889_5_2" + "step_executeCommand_execute_c41d76889_5_3" ], "preconditions": [], "postconditions": [], @@ -2475,7 +2593,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2485,7 +2603,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c41d76889_5_3" + "step_singleSelect_assertQuestion_c41d76889_5_4" ], "preconditions": [], "postconditions": [], @@ -2496,7 +2614,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c41d76889_5_3", + "step_id": "step_singleSelect_filter_c41d76889_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2508,7 +2626,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c41d76889_5_3" + "step_singleSelect_assertOptionsLoaded_c41d76889_5_4" ], "preconditions": [], "postconditions": [], @@ -2518,7 +2636,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c41d76889_5_3", + "step_id": "step_singleSelect_assertOption_c41d76889_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2528,7 +2646,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c41d76889_5_3" + "step_singleSelect_filter_c41d76889_5_4" ], "preconditions": [], "postconditions": [], @@ -2539,7 +2657,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c41d76889_5_3", + "step_id": "step_singleSelect_confirm_c41d76889_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2551,7 +2669,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c41d76889_5_3" + "step_singleSelect_assertOption_c41d76889_5_4" ], "preconditions": [], "postconditions": [], @@ -2561,7 +2679,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c41d76889_5_4", + "step_id": "step_textInput_assertQuestion_c41d76889_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2571,7 +2689,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c41d76889_5_3" + "step_singleSelect_confirm_c41d76889_5_4" ], "preconditions": [], "postconditions": [], @@ -2582,7 +2700,7 @@ ] }, { - "step_id": "step_textInput_input_c41d76889_5_4", + "step_id": "step_textInput_input_c41d76889_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2594,7 +2712,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c41d76889_5_4" + "step_textInput_assertQuestion_c41d76889_5_5" ], "preconditions": [], "postconditions": [], @@ -2604,7 +2722,7 @@ ] }, { - "step_id": "step_textInput_confirm_c41d76889_5_4", + "step_id": "step_textInput_confirm_c41d76889_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2616,7 +2734,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c41d76889_5_4" + "step_textInput_input_c41d76889_5_5" ], "preconditions": [], "postconditions": [], @@ -2626,7 +2744,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c41d76889_5_5", + "step_id": "step_singleSelect_assertQuestion_c41d76889_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2636,7 +2754,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c41d76889_5_4" + "step_textInput_confirm_c41d76889_5_5" ], "preconditions": [], "postconditions": [], @@ -2647,7 +2765,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c41d76889_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2657,7 +2775,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c41d76889_5_5" + "step_singleSelect_assertQuestion_c41d76889_5_6" ], "preconditions": [], "postconditions": [], @@ -2668,7 +2786,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c41d76889_5_5", + "step_id": "step_singleSelect_filter_c41d76889_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2680,7 +2798,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c41d76889_5_5" + "step_singleSelect_assertOptionsLoaded_c41d76889_5_6" ], "preconditions": [], "postconditions": [], @@ -2690,7 +2808,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c41d76889_5_5", + "step_id": "step_singleSelect_assertOption_c41d76889_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2700,7 +2818,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c41d76889_5_5" + "step_singleSelect_filter_c41d76889_5_6" ], "preconditions": [], "postconditions": [], @@ -2711,7 +2829,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c41d76889_5_5", + "step_id": "step_singleSelect_confirm_c41d76889_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2723,7 +2841,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c41d76889_5_5" + "step_singleSelect_assertOption_c41d76889_5_6" ], "preconditions": [], "postconditions": [], @@ -2733,7 +2851,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2743,7 +2861,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c41d76889_5_5" + "step_singleSelect_confirm_c41d76889_5_6" ], "preconditions": [], "postconditions": [], @@ -2754,7 +2872,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c41d76889_5_6", + "step_id": "step_clickPrimaryAction_click_c41d76889_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2766,7 +2884,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c41d76889_5_6" + "step_clickPrimaryAction_assertDialog_c41d76889_5_7" ], "preconditions": [], "postconditions": [], @@ -2776,7 +2894,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c41d76889_5_7", + "step_id": "step_assertNotificationContains_assert_c41d76889_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2786,7 +2904,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c41d76889_5_6" + "step_clickPrimaryAction_click_c41d76889_5_7" ], "preconditions": [], "postconditions": [], @@ -2809,7 +2927,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c41d76889_5_7" + "step_assertNotificationContains_assert_c41d76889_5_8" ], "preconditions": [], "postconditions": [], @@ -2844,7 +2962,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2866,7 +2984,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2952,7 +3070,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2974,7 +3092,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3013,7 +3131,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_6_3", + "step_id": "step_executeCommand_open_c41d76889_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c41d76889_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c41d76889_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c41d76889_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c41d76889_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c41d76889_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c41d76889_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c41d76889_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3023,7 +3249,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c41d76889_6_2" + "step_executeCommand_execute_c41d76889_6_3" ], "preconditions": [], "postconditions": [], @@ -3034,7 +3260,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c41d76889_6_3", + "step_id": "step_clickPrimaryAction_click_c41d76889_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3046,7 +3272,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c41d76889_6_3" + "step_clickPrimaryAction_assertDialog_c41d76889_6_4" ], "preconditions": [], "postconditions": [], @@ -3056,7 +3282,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c41d76889_6_4", + "step_id": "step_assertNotificationContains_assert_c41d76889_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3066,7 +3292,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c41d76889_6_3" + "step_clickPrimaryAction_click_c41d76889_6_4" ], "preconditions": [], "postconditions": [], @@ -3089,7 +3315,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c41d76889_6_4" + "step_assertNotificationContains_assert_c41d76889_6_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index 9b39a7bb87e..4133f07b71f 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 155, + "total_steps": 165, "name": "weather-ts-azure-openai-remote-teams", "description": { "owner": "", @@ -116,22 +116,27 @@ "step_executeCommand_filter_c16c2d022_5_2", "step_executeCommand_assertCommand_c16c2d022_5_2", "step_executeCommand_execute_c16c2d022_5_2", - "step_singleSelect_assertQuestion_c16c2d022_5_3", - "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3", - "step_singleSelect_filter_c16c2d022_5_3", - "step_singleSelect_assertOption_c16c2d022_5_3", - "step_singleSelect_confirm_c16c2d022_5_3", - "step_textInput_assertQuestion_c16c2d022_5_4", - "step_textInput_input_c16c2d022_5_4", - "step_textInput_confirm_c16c2d022_5_4", - "step_singleSelect_assertQuestion_c16c2d022_5_5", - "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5", - "step_singleSelect_filter_c16c2d022_5_5", - "step_singleSelect_assertOption_c16c2d022_5_5", - "step_singleSelect_confirm_c16c2d022_5_5", - "step_clickPrimaryAction_assertDialog_c16c2d022_5_6", - "step_clickPrimaryAction_click_c16c2d022_5_6", - "step_assertNotificationContains_assert_c16c2d022_5_7", + "step_executeCommand_open_c16c2d022_5_3", + "step_executeCommand_assertPalette_c16c2d022_5_3", + "step_executeCommand_filter_c16c2d022_5_3", + "step_executeCommand_assertCommand_c16c2d022_5_3", + "step_executeCommand_execute_c16c2d022_5_3", + "step_singleSelect_assertQuestion_c16c2d022_5_4", + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_4", + "step_singleSelect_filter_c16c2d022_5_4", + "step_singleSelect_assertOption_c16c2d022_5_4", + "step_singleSelect_confirm_c16c2d022_5_4", + "step_textInput_assertQuestion_c16c2d022_5_5", + "step_textInput_input_c16c2d022_5_5", + "step_textInput_confirm_c16c2d022_5_5", + "step_singleSelect_assertQuestion_c16c2d022_5_6", + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_6", + "step_singleSelect_filter_c16c2d022_5_6", + "step_singleSelect_assertOption_c16c2d022_5_6", + "step_singleSelect_confirm_c16c2d022_5_6", + "step_clickPrimaryAction_assertDialog_c16c2d022_5_7", + "step_clickPrimaryAction_click_c16c2d022_5_7", + "step_assertNotificationContains_assert_c16c2d022_5_8", "step_executeCommand_open_c16c2d022_6_1", "step_executeCommand_assertPalette_c16c2d022_6_1", "step_executeCommand_filter_c16c2d022_6_1", @@ -142,9 +147,14 @@ "step_executeCommand_filter_c16c2d022_6_2", "step_executeCommand_assertCommand_c16c2d022_6_2", "step_executeCommand_execute_c16c2d022_6_2", - "step_clickPrimaryAction_assertDialog_c16c2d022_6_3", - "step_clickPrimaryAction_click_c16c2d022_6_3", - "step_assertNotificationContains_assert_c16c2d022_6_4", + "step_executeCommand_open_c16c2d022_6_3", + "step_executeCommand_assertPalette_c16c2d022_6_3", + "step_executeCommand_filter_c16c2d022_6_3", + "step_executeCommand_assertCommand_c16c2d022_6_3", + "step_executeCommand_execute_c16c2d022_6_3", + "step_clickPrimaryAction_assertDialog_c16c2d022_6_4", + "step_clickPrimaryAction_click_c16c2d022_6_4", + "step_assertNotificationContains_assert_c16c2d022_6_5", "step_executeCommand_open_c16c2d022_7_1", "step_executeCommand_assertPalette_c16c2d022_7_1", "step_executeCommand_filter_c16c2d022_7_1", @@ -2286,7 +2296,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2308,7 +2318,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2394,7 +2404,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2416,7 +2426,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2455,7 +2465,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_3", + "step_id": "step_executeCommand_open_c16c2d022_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c16c2d022_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c16c2d022_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c16c2d022_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c16c2d022_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c16c2d022_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c16c2d022_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c16c2d022_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c16c2d022_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c16c2d022_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2465,7 +2583,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c16c2d022_5_2" + "step_executeCommand_execute_c16c2d022_5_3" ], "preconditions": [], "postconditions": [], @@ -2476,7 +2594,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2486,7 +2604,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c16c2d022_5_3" + "step_singleSelect_assertQuestion_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2497,7 +2615,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c16c2d022_5_3", + "step_id": "step_singleSelect_filter_c16c2d022_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2509,7 +2627,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c16c2d022_5_3" + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2519,7 +2637,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c16c2d022_5_3", + "step_id": "step_singleSelect_assertOption_c16c2d022_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2529,7 +2647,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c16c2d022_5_3" + "step_singleSelect_filter_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2540,7 +2658,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c16c2d022_5_3", + "step_id": "step_singleSelect_confirm_c16c2d022_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2552,7 +2670,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c16c2d022_5_3" + "step_singleSelect_assertOption_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2562,7 +2680,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c16c2d022_5_4", + "step_id": "step_textInput_assertQuestion_c16c2d022_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2572,7 +2690,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c16c2d022_5_3" + "step_singleSelect_confirm_c16c2d022_5_4" ], "preconditions": [], "postconditions": [], @@ -2583,7 +2701,7 @@ ] }, { - "step_id": "step_textInput_input_c16c2d022_5_4", + "step_id": "step_textInput_input_c16c2d022_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2595,7 +2713,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c16c2d022_5_4" + "step_textInput_assertQuestion_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2605,7 +2723,7 @@ ] }, { - "step_id": "step_textInput_confirm_c16c2d022_5_4", + "step_id": "step_textInput_confirm_c16c2d022_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2617,7 +2735,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c16c2d022_5_4" + "step_textInput_input_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2627,7 +2745,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_5", + "step_id": "step_singleSelect_assertQuestion_c16c2d022_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2637,7 +2755,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c16c2d022_5_4" + "step_textInput_confirm_c16c2d022_5_5" ], "preconditions": [], "postconditions": [], @@ -2648,7 +2766,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c16c2d022_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2658,7 +2776,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c16c2d022_5_5" + "step_singleSelect_assertQuestion_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2669,7 +2787,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c16c2d022_5_5", + "step_id": "step_singleSelect_filter_c16c2d022_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2681,7 +2799,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c16c2d022_5_5" + "step_singleSelect_assertOptionsLoaded_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2691,7 +2809,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c16c2d022_5_5", + "step_id": "step_singleSelect_assertOption_c16c2d022_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2701,7 +2819,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c16c2d022_5_5" + "step_singleSelect_filter_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2712,7 +2830,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c16c2d022_5_5", + "step_id": "step_singleSelect_confirm_c16c2d022_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2724,7 +2842,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c16c2d022_5_5" + "step_singleSelect_assertOption_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2734,7 +2852,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2744,7 +2862,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c16c2d022_5_5" + "step_singleSelect_confirm_c16c2d022_5_6" ], "preconditions": [], "postconditions": [], @@ -2755,7 +2873,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c16c2d022_5_6", + "step_id": "step_clickPrimaryAction_click_c16c2d022_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2767,7 +2885,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c16c2d022_5_6" + "step_clickPrimaryAction_assertDialog_c16c2d022_5_7" ], "preconditions": [], "postconditions": [], @@ -2777,7 +2895,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c16c2d022_5_7", + "step_id": "step_assertNotificationContains_assert_c16c2d022_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2787,7 +2905,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c16c2d022_5_6" + "step_clickPrimaryAction_click_c16c2d022_5_7" ], "preconditions": [], "postconditions": [], @@ -2810,7 +2928,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c16c2d022_5_7" + "step_assertNotificationContains_assert_c16c2d022_5_8" ], "preconditions": [], "postconditions": [], @@ -2845,7 +2963,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2867,7 +2985,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2953,7 +3071,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2975,7 +3093,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -3014,7 +3132,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_6_3", + "step_id": "step_executeCommand_open_c16c2d022_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c16c2d022_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c16c2d022_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c16c2d022_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c16c2d022_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c16c2d022_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c16c2d022_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c16c2d022_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c16c2d022_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c16c2d022_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c16c2d022_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -3024,7 +3250,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c16c2d022_6_2" + "step_executeCommand_execute_c16c2d022_6_3" ], "preconditions": [], "postconditions": [], @@ -3035,7 +3261,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c16c2d022_6_3", + "step_id": "step_clickPrimaryAction_click_c16c2d022_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -3047,7 +3273,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c16c2d022_6_3" + "step_clickPrimaryAction_assertDialog_c16c2d022_6_4" ], "preconditions": [], "postconditions": [], @@ -3057,7 +3283,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c16c2d022_6_4", + "step_id": "step_assertNotificationContains_assert_c16c2d022_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -3067,7 +3293,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c16c2d022_6_3" + "step_clickPrimaryAction_click_c16c2d022_6_4" ], "preconditions": [], "postconditions": [], @@ -3090,7 +3316,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c16c2d022_6_4" + "step_assertNotificationContains_assert_c16c2d022_6_5" ], "preconditions": [], "postconditions": [], diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index c85ca717bcc..40e2ab54cb0 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -8,7 +8,7 @@ "precondition_wait_timeout": 30, "precondition_retry_interval": 1 }, - "total_steps": 143, + "total_steps": 153, "name": "weather-ts-openai-remote-teams", "description": { "owner": "", @@ -110,22 +110,27 @@ "step_executeCommand_filter_c3f41809f_5_2", "step_executeCommand_assertCommand_c3f41809f_5_2", "step_executeCommand_execute_c3f41809f_5_2", - "step_singleSelect_assertQuestion_c3f41809f_5_3", - "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3", - "step_singleSelect_filter_c3f41809f_5_3", - "step_singleSelect_assertOption_c3f41809f_5_3", - "step_singleSelect_confirm_c3f41809f_5_3", - "step_textInput_assertQuestion_c3f41809f_5_4", - "step_textInput_input_c3f41809f_5_4", - "step_textInput_confirm_c3f41809f_5_4", - "step_singleSelect_assertQuestion_c3f41809f_5_5", - "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5", - "step_singleSelect_filter_c3f41809f_5_5", - "step_singleSelect_assertOption_c3f41809f_5_5", - "step_singleSelect_confirm_c3f41809f_5_5", - "step_clickPrimaryAction_assertDialog_c3f41809f_5_6", - "step_clickPrimaryAction_click_c3f41809f_5_6", - "step_assertNotificationContains_assert_c3f41809f_5_7", + "step_executeCommand_open_c3f41809f_5_3", + "step_executeCommand_assertPalette_c3f41809f_5_3", + "step_executeCommand_filter_c3f41809f_5_3", + "step_executeCommand_assertCommand_c3f41809f_5_3", + "step_executeCommand_execute_c3f41809f_5_3", + "step_singleSelect_assertQuestion_c3f41809f_5_4", + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_4", + "step_singleSelect_filter_c3f41809f_5_4", + "step_singleSelect_assertOption_c3f41809f_5_4", + "step_singleSelect_confirm_c3f41809f_5_4", + "step_textInput_assertQuestion_c3f41809f_5_5", + "step_textInput_input_c3f41809f_5_5", + "step_textInput_confirm_c3f41809f_5_5", + "step_singleSelect_assertQuestion_c3f41809f_5_6", + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_6", + "step_singleSelect_filter_c3f41809f_5_6", + "step_singleSelect_assertOption_c3f41809f_5_6", + "step_singleSelect_confirm_c3f41809f_5_6", + "step_clickPrimaryAction_assertDialog_c3f41809f_5_7", + "step_clickPrimaryAction_click_c3f41809f_5_7", + "step_assertNotificationContains_assert_c3f41809f_5_8", "step_executeCommand_open_c3f41809f_6_1", "step_executeCommand_assertPalette_c3f41809f_6_1", "step_executeCommand_filter_c3f41809f_6_1", @@ -136,9 +141,14 @@ "step_executeCommand_filter_c3f41809f_6_2", "step_executeCommand_assertCommand_c3f41809f_6_2", "step_executeCommand_execute_c3f41809f_6_2", - "step_clickPrimaryAction_assertDialog_c3f41809f_6_3", - "step_clickPrimaryAction_click_c3f41809f_6_3", - "step_assertNotificationContains_assert_c3f41809f_6_4", + "step_executeCommand_open_c3f41809f_6_3", + "step_executeCommand_assertPalette_c3f41809f_6_3", + "step_executeCommand_filter_c3f41809f_6_3", + "step_executeCommand_assertCommand_c3f41809f_6_3", + "step_executeCommand_execute_c3f41809f_6_3", + "step_clickPrimaryAction_assertDialog_c3f41809f_6_4", + "step_clickPrimaryAction_click_c3f41809f_6_4", + "step_assertNotificationContains_assert_c3f41809f_6_5", "step_executeCommand_open_c3f41809f_7_1", "step_executeCommand_assertPalette_c3f41809f_7_1", "step_executeCommand_filter_c3f41809f_7_1", @@ -2144,7 +2154,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2166,7 +2176,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2252,7 +2262,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Provision" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2274,7 +2284,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2313,7 +2323,115 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_3", + "step_id": "step_executeCommand_open_c3f41809f_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_5_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_5_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Provision" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_5_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Provision and the highlighted command listed under it is titled Microsoft 365 Agents: Provision.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_5_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_5_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2323,7 +2441,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c3f41809f_5_2" + "step_executeCommand_execute_c3f41809f_5_3" ], "preconditions": [], "postconditions": [], @@ -2334,7 +2452,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3", + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2344,7 +2462,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c3f41809f_5_3" + "step_singleSelect_assertQuestion_c3f41809f_5_4" ], "preconditions": [], "postconditions": [], @@ -2355,7 +2473,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c3f41809f_5_3", + "step_id": "step_singleSelect_filter_c3f41809f_5_4", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2367,7 +2485,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c3f41809f_5_3" + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_4" ], "preconditions": [], "postconditions": [], @@ -2377,7 +2495,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c3f41809f_5_3", + "step_id": "step_singleSelect_assertOption_c3f41809f_5_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2387,7 +2505,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c3f41809f_5_3" + "step_singleSelect_filter_c3f41809f_5_4" ], "preconditions": [], "postconditions": [], @@ -2398,7 +2516,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c3f41809f_5_3", + "step_id": "step_singleSelect_confirm_c3f41809f_5_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2410,7 +2528,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c3f41809f_5_3" + "step_singleSelect_assertOption_c3f41809f_5_4" ], "preconditions": [], "postconditions": [], @@ -2420,7 +2538,7 @@ ] }, { - "step_id": "step_textInput_assertQuestion_c3f41809f_5_4", + "step_id": "step_textInput_assertQuestion_c3f41809f_5_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2430,7 +2548,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c3f41809f_5_3" + "step_singleSelect_confirm_c3f41809f_5_4" ], "preconditions": [], "postconditions": [], @@ -2441,7 +2559,7 @@ ] }, { - "step_id": "step_textInput_input_c3f41809f_5_4", + "step_id": "step_textInput_input_c3f41809f_5_5", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2453,7 +2571,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_assertQuestion_c3f41809f_5_4" + "step_textInput_assertQuestion_c3f41809f_5_5" ], "preconditions": [], "postconditions": [], @@ -2463,7 +2581,7 @@ ] }, { - "step_id": "step_textInput_confirm_c3f41809f_5_4", + "step_id": "step_textInput_confirm_c3f41809f_5_5", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2475,7 +2593,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_input_c3f41809f_5_4" + "step_textInput_input_c3f41809f_5_5" ], "preconditions": [], "postconditions": [], @@ -2485,7 +2603,7 @@ ] }, { - "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_5", + "step_id": "step_singleSelect_assertQuestion_c3f41809f_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2495,7 +2613,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_textInput_confirm_c3f41809f_5_4" + "step_textInput_confirm_c3f41809f_5_5" ], "preconditions": [], "postconditions": [], @@ -2506,7 +2624,7 @@ ] }, { - "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5", + "step_id": "step_singleSelect_assertOptionsLoaded_c3f41809f_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2516,7 +2634,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertQuestion_c3f41809f_5_5" + "step_singleSelect_assertQuestion_c3f41809f_5_6" ], "preconditions": [], "postconditions": [], @@ -2527,7 +2645,7 @@ ] }, { - "step_id": "step_singleSelect_filter_c3f41809f_5_5", + "step_id": "step_singleSelect_filter_c3f41809f_5_6", "agent": "interaction", "tool": "type_text", "parameters": { @@ -2539,7 +2657,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOptionsLoaded_c3f41809f_5_5" + "step_singleSelect_assertOptionsLoaded_c3f41809f_5_6" ], "preconditions": [], "postconditions": [], @@ -2549,7 +2667,7 @@ ] }, { - "step_id": "step_singleSelect_assertOption_c3f41809f_5_5", + "step_id": "step_singleSelect_assertOption_c3f41809f_5_6", "agent": "assertion", "tool": "", "parameters": {}, @@ -2559,7 +2677,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_filter_c3f41809f_5_5" + "step_singleSelect_filter_c3f41809f_5_6" ], "preconditions": [], "postconditions": [], @@ -2570,7 +2688,7 @@ ] }, { - "step_id": "step_singleSelect_confirm_c3f41809f_5_5", + "step_id": "step_singleSelect_confirm_c3f41809f_5_6", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2582,7 +2700,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_assertOption_c3f41809f_5_5" + "step_singleSelect_assertOption_c3f41809f_5_6" ], "preconditions": [], "postconditions": [], @@ -2592,7 +2710,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_5_6", + "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_5_7", "agent": "assertion", "tool": "", "parameters": {}, @@ -2602,7 +2720,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_singleSelect_confirm_c3f41809f_5_5" + "step_singleSelect_confirm_c3f41809f_5_6" ], "preconditions": [], "postconditions": [], @@ -2613,7 +2731,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c3f41809f_5_6", + "step_id": "step_clickPrimaryAction_click_c3f41809f_5_7", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2625,7 +2743,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c3f41809f_5_6" + "step_clickPrimaryAction_assertDialog_c3f41809f_5_7" ], "preconditions": [], "postconditions": [], @@ -2635,7 +2753,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c3f41809f_5_7", + "step_id": "step_assertNotificationContains_assert_c3f41809f_5_8", "agent": "assertion", "tool": "", "parameters": {}, @@ -2645,7 +2763,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c3f41809f_5_6" + "step_clickPrimaryAction_click_c3f41809f_5_7" ], "preconditions": [], "postconditions": [], @@ -2668,7 +2786,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c3f41809f_5_7" + "step_assertNotificationContains_assert_c3f41809f_5_8" ], "preconditions": [], "postconditions": [], @@ -2703,7 +2821,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Notifications: Show Notifications" + "text": "Notifications: Clear All Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2725,7 +2843,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", + "description": "@assertion the Command Palette input box reads >Notifications: Clear All Notifications and the highlighted command listed under it is titled Notifications: Clear All Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2811,7 +2929,7 @@ "agent": "interaction", "tool": "type_text", "parameters": { - "text": "Microsoft 365 Agents: Deploy" + "text": "Notifications: Show Notifications" }, "description": "Type the resolved command title into the active Command Palette.", "content_refs": [], @@ -2833,7 +2951,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "description": "@assertion the Command Palette input box reads >Notifications: Show Notifications and the highlighted command listed under it is titled Notifications: Show Notifications.", "content_refs": [], "timeout": 30, "retry_count": 0, @@ -2872,7 +2990,115 @@ ] }, { - "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_6_3", + "step_id": "step_executeCommand_open_c3f41809f_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "f1" + }, + "description": "Press the F1 key to open the Command Palette in Visual Studio Code.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_execute_c3f41809f_6_2" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertPalette_c3f41809f_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Visual Studio Code Command Palette is visible with a > character in its input box and is ready to accept a command search.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_open_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_filter_c3f41809f_6_3", + "agent": "interaction", + "tool": "type_text", + "parameters": { + "text": "Microsoft 365 Agents: Deploy" + }, + "description": "Type the resolved command title into the active Command Palette.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertPalette_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_executeCommand_assertCommand_c3f41809f_6_3", + "agent": "assertion", + "tool": "", + "parameters": {}, + "description": "@assertion the Command Palette input box reads >Microsoft 365 Agents: Deploy and the highlighted command listed under it is titled Microsoft 365 Agents: Deploy.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_filter_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command", + "step_retry_timeout: 30" + ] + }, + { + "step_id": "step_executeCommand_execute_c3f41809f_6_3", + "agent": "interaction", + "tool": "key_press", + "parameters": { + "key": "enter" + }, + "description": "Press Enter to execute the selected Command Palette command.", + "content_refs": [], + "timeout": 30, + "retry_count": 0, + "continue_on_error": "false", + "depends_on": [ + "step_executeCommand_assertCommand_c3f41809f_6_3" + ], + "preconditions": [], + "postconditions": [], + "tags": [ + "component:command-palette", + "action:execute-command" + ] + }, + { + "step_id": "step_clickPrimaryAction_assertDialog_c3f41809f_6_4", "agent": "assertion", "tool": "", "parameters": {}, @@ -2882,7 +3108,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_executeCommand_execute_c3f41809f_6_2" + "step_executeCommand_execute_c3f41809f_6_3" ], "preconditions": [], "postconditions": [], @@ -2893,7 +3119,7 @@ ] }, { - "step_id": "step_clickPrimaryAction_click_c3f41809f_6_3", + "step_id": "step_clickPrimaryAction_click_c3f41809f_6_4", "agent": "interaction", "tool": "key_press", "parameters": { @@ -2905,7 +3131,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_assertDialog_c3f41809f_6_3" + "step_clickPrimaryAction_assertDialog_c3f41809f_6_4" ], "preconditions": [], "postconditions": [], @@ -2915,7 +3141,7 @@ ] }, { - "step_id": "step_assertNotificationContains_assert_c3f41809f_6_4", + "step_id": "step_assertNotificationContains_assert_c3f41809f_6_5", "agent": "assertion", "tool": "", "parameters": {}, @@ -2925,7 +3151,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_clickPrimaryAction_click_c3f41809f_6_3" + "step_clickPrimaryAction_click_c3f41809f_6_4" ], "preconditions": [], "postconditions": [], @@ -2948,7 +3174,7 @@ "retry_count": 0, "continue_on_error": "false", "depends_on": [ - "step_assertNotificationContains_assert_c3f41809f_6_4" + "step_assertNotificationContains_assert_c3f41809f_6_5" ], "preconditions": [], "postconditions": [], From cbdc300583cf5edb8162fa6d32b72e3dbae1756e Mon Sep 17 00:00:00 2001 From: Zhiyu You Date: Wed, 29 Jul 2026 17:05:52 +0800 Subject: [PATCH 9/9] test(vscuse): stop placing the loaded option relative to the prompt input box A multi-select whose one option had loaded was reported as listing none: the reader placed that option above the input box and read the 0 Selected and OK controls under the box as the whole of what the prompt lists. Where a prompt draws its rows is not a toolkit-owned invariant, so the wait now claims only that loading finished and a selectable option exists. --- .../product/compile-vscuse-case-bundles.md | 24 ++++++++++++------- .../components/lifecycle-components.test.cjs | 6 ++++- .../quick-input/multi-select.json.tpl | 2 +- .../quick-input/single-select.json.tpl | 2 +- .../engine/semantic-step-compiler.test.cjs | 2 +- ...basic-cea-py-azure-openai-local-teams.json | 10 ++++---- ...-basic-cea-py-azure-openai-playground.json | 10 ++++---- ...asic-cea-py-azure-openai-remote-teams.json | 14 +++++------ ...m-existing-api-api-key-remote-preview.json | 10 ++++---- ...om-existing-api-bearer-remote-preview.json | 10 ++++---- ...m-existing-api-no-auth-remote-preview.json | 10 ++++---- ...rom-existing-api-oauth-remote-preview.json | 10 ++++---- ...cratch--da-api-plugin-from-scratch-js.json | 14 +++++------ ...cratch--da-api-plugin-from-scratch-ts.json | 14 +++++------ ...p-server--da-mcp-remote-entra-preview.json | 8 +++---- ...cp-server--da-mcp-remote-none-preview.json | 8 +++---- ...p-server--da-mcp-remote-oauth-preview.json | 8 +++---- ...o-action--da-no-action-remote-preview.json | 4 ++-- ...--weather-js-azure-openai-local-teams.json | 8 +++---- ...t--weather-js-azure-openai-playground.json | 8 +++---- ...-weather-js-azure-openai-remote-teams.json | 12 +++++----- ...-agent--weather-js-openai-local-teams.json | 8 +++---- ...agent--weather-js-openai-remote-teams.json | 12 +++++----- ...weather-ts-azure-openai-local-copilot.json | 8 +++---- ...--weather-ts-azure-openai-local-teams.json | 8 +++---- ...t--weather-ts-azure-openai-playground.json | 8 +++---- ...eather-ts-azure-openai-remote-copilot.json | 12 +++++----- ...-weather-ts-azure-openai-remote-teams.json | 12 +++++----- ...-agent--weather-ts-openai-local-teams.json | 8 +++---- ...agent--weather-ts-openai-remote-teams.json | 12 +++++----- 30 files changed, 147 insertions(+), 135 deletions(-) diff --git a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md index 2bf3027ee3c..a6ed1a07340 100644 --- a/docs/03-specs/operations/product/compile-vscuse-case-bundles.md +++ b/docs/03-specs/operations/product/compile-vscuse-case-bundles.md @@ -809,16 +809,23 @@ instantiation. Every prompted answer component begins with an `assertion` step whose description requires the canonical `en-US` question title to be visible in the active prompt. A component that picks from a -list then asserts, in a second step of its own, that the prompt lists at least one option below its -input box. The toolkit renders a prompt's frame before its options: while the option set is being -loaded the prompt already carries its final title and the input box reads `Loading options...`, so -the title assertion alone passes over a list that no keystroke can act on yet. Keeping the wait in -its own step is what makes it a wait: a retried assertion step reports the difference between a -prompt that is still loading and a prompt that loaded the wrong thing, which a single compound -sentence cannot. Its retry window is longer than the default, because the option set behind an -Azure subscription, resource group, region, or fetched OpenAPI description arrives over the +list then asserts, in a second step of its own, that the prompt has finished loading and lists at +least one selectable option. The toolkit renders a prompt's frame before its options: while the +option set is being loaded the prompt already carries its final title and the input box reads +`Loading options...`, so the title assertion alone passes over a list that no keystroke can act on +yet. Keeping the wait in its own step is what makes it a wait: a retried assertion step reports the +difference between a prompt that is still loading and a prompt that loaded the wrong thing, which a +single compound sentence cannot. Its retry window is longer than the default, because the option set +behind an Azure subscription, resource group, region, or fetched OpenAPI description arrives over the network. +The assertion places no option relative to the input box. The earlier wording required an option +`below its input box`, and a multi-select whose one option had loaded was reported as having none: +the reader placed that option above the input box and read the `0 Selected` and `OK` controls that +sit directly under the box as the whole of what the prompt lists. Where a prompt draws its rows is +not a toolkit-owned invariant, and the wait needs only the option set, so the claim is about loading +and about a selectable option existing. + A single-select then filters by canonical option label, asserts that the filtered option is visible and selectable, and only then confirms it. The option assertion intentionally runs after filtering: a valid option in a long or virtualized list may not be visible before input. @@ -1136,6 +1143,7 @@ coordinates, omit required prompt guards, or silently choose a nearby component. | VCB-78 | Given a Chrome target, the launched browser is signed in before its readiness is asserted, because every Chrome launch configuration the templates ship omits `userDataDir` and therefore gets a profile carrying no Microsoft 365 session, and its URL carries the toolkit's account hint, so the browser opens on the password prompt for the account already signed in to Visual Studio Code. | | VCB-79 | Given a Chrome target that signs in from the password prompt, the password input is clicked before the password is typed, because the browser the debug session launches keeps focus in its address bar, so a password typed without that click is entered outside the sign-in form. | | VCB-80 | Given a lifecycle operation, the notification center is cleared before the operation starts, because it keeps every notification the run has raised, so the assertion that waits for this operation's success would otherwise read it out of a list that also holds the scaffolding, sign-in, and earlier lifecycle entries. | +| VCB-81 | Given a `singleSelect` or `multiSelect` answer, the assertion that waits for the option set places no option relative to the prompt's input box, because a multi-select whose one option had loaded was reported as having none once the reader placed that option above the box and read the `0 Selected` and `OK` controls under it as the whole of what the prompt lists. | ## Boundary diff --git a/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs b/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs index ffbc5c86448..c639476f163 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/components/lifecycle-components.test.cjs @@ -243,13 +243,17 @@ test("VCB-55: option components wait for the prompt to load its options", () => assert.equal(assertOptionsLoaded.agent, "assertion"); assert.match( assertOptionsLoaded.description, - /lists at least one option below its input box/, + /has finished loading and lists at least one selectable option/, ); assert.equal( assertOptionsLoaded.tags.includes("step_retry_timeout: 120"), true, ); + // VCB-81: a reader that placed the loaded option above the input box read + // the earlier `below its input box` claim as false. + assert.equal(/input box/.test(assertOptionsLoaded.description), false); + // The title assertion alone passes while the prompt still reads // "Loading options...", so the first keystroke must depend on this step. assert.deepEqual(quickInput.steps[2].depends_on, [ diff --git a/packages/tests/vscuse/vscode-test-cases/components/quick-input/multi-select.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/quick-input/multi-select.json.tpl index 5d70b48d3f4..d76e597ae2f 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/quick-input/multi-select.json.tpl +++ b/packages/tests/vscuse/vscode-test-cases/components/quick-input/multi-select.json.tpl @@ -30,7 +30,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled {{text:questionTitle}} lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled {{text:questionTitle}} has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/components/quick-input/single-select.json.tpl b/packages/tests/vscuse/vscode-test-cases/components/quick-input/single-select.json.tpl index 3a6c55fc34b..b8c9c5df04a 100644 --- a/packages/tests/vscuse/vscode-test-cases/components/quick-input/single-select.json.tpl +++ b/packages/tests/vscuse/vscode-test-cases/components/quick-input/single-select.json.tpl @@ -30,7 +30,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled {{text:questionTitle}} lists at least one option below its input box.", + "description": "@assertion the prompt titled {{text:questionTitle}} has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs index 4b928b165a3..8e8d8cfab0b 100644 --- a/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs +++ b/packages/tests/vscuse/vscode-test-cases/engine/semantic-step-compiler.test.cjs @@ -556,7 +556,7 @@ test("VCB-35: multi-select answers check every option and confirm once", async ( const descriptions = generated.plan.steps.map((step) => step.description); const tools = generated.plan.steps.map((step) => step.tool); const multiSelectFlow = [ - "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with lists at least one option below its input box.", + "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with has finished loading and lists at least one selectable option.", "Move focus from the multi-select input box to the select-all checkbox of the prompt.", "Press Space to check every option of the multi-select prompt.", "Move focus from the select-all checkbox back to the multi-select input box.", diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json index 61d4929cd6b..4e2ab285790 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-local-teams.json @@ -544,7 +544,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -651,7 +651,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -758,7 +758,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1060,7 +1060,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1724,7 +1724,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select dependencies to install has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json index 95054219f0f..50d9bbb2020 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-playground.json @@ -518,7 +518,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -625,7 +625,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -732,7 +732,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1034,7 +1034,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1698,7 +1698,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select dependencies to install has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json index 421bd73f900..1b89898a5f0 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/basic-custom-engine-agent--basic-cea-py-azure-openai-remote-teams.json @@ -609,7 +609,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -716,7 +716,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -823,7 +823,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1125,7 +1125,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1789,7 +1789,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select dependencies to install lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select dependencies to install has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -3141,7 +3141,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -3313,7 +3313,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json index 234b8d80bac..d1603fdf959 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-api-key-remote-preview.json @@ -539,7 +539,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -646,7 +646,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -753,7 +753,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -860,7 +860,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled OpenAPI Spec Document lists at least one option below its input box.", + "description": "@assertion the prompt titled OpenAPI Spec Document has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1032,7 +1032,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json index abd80996325..7d81838199e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-bearer-remote-preview.json @@ -539,7 +539,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -646,7 +646,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -753,7 +753,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -860,7 +860,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled OpenAPI Spec Document lists at least one option below its input box.", + "description": "@assertion the prompt titled OpenAPI Spec Document has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1032,7 +1032,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json index def9e18943a..b744fbba9a2 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-no-auth-remote-preview.json @@ -533,7 +533,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -640,7 +640,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -747,7 +747,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -854,7 +854,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled OpenAPI Spec Document lists at least one option below its input box.", + "description": "@assertion the prompt titled OpenAPI Spec Document has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1026,7 +1026,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json index 59489795677..6940b53153b 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-existing-api--da-api-plugin-from-existing-api-oauth-remote-preview.json @@ -553,7 +553,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -660,7 +660,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -767,7 +767,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -874,7 +874,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled OpenAPI Spec Document lists at least one option below its input box.", + "description": "@assertion the prompt titled OpenAPI Spec Document has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1046,7 +1046,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with lists at least one option below its input box.", + "description": "@assertion the multi-select prompt titled Select Operation(s) Copilot Can Interact with has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json index 47fbb2922f0..e2a4353caf0 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-js.json @@ -591,7 +591,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -698,7 +698,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -805,7 +805,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -912,7 +912,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Authentication Type lists at least one option below its input box.", + "description": "@assertion the prompt titled Authentication Type has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1019,7 +1019,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2635,7 +2635,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2807,7 +2807,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json index 4aa3d2d9b77..0d922e594c3 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-api-plugin-from-scratch--da-api-plugin-from-scratch-ts.json @@ -591,7 +591,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -698,7 +698,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -805,7 +805,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -912,7 +912,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Authentication Type lists at least one option below its input box.", + "description": "@assertion the prompt titled Authentication Type has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1019,7 +1019,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2635,7 +2635,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2807,7 +2807,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json index 559f43001c5..1945f8aa74e 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-entra-preview.json @@ -527,7 +527,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -634,7 +634,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -741,7 +741,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -913,7 +913,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select Authentication Type lists at least one option below its input box.", + "description": "@assertion the prompt titled Select Authentication Type has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json index 9a98fcc22df..234c4d716a2 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-none-preview.json @@ -530,7 +530,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -637,7 +637,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -744,7 +744,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -916,7 +916,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select Authentication Type lists at least one option below its input box.", + "description": "@assertion the prompt titled Select Authentication Type has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json index 81637a4a979..1e9e49fde9b 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-mcp-server--da-mcp-remote-oauth-preview.json @@ -539,7 +539,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -646,7 +646,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -753,7 +753,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create an Action lists at least one option below its input box.", + "description": "@assertion the prompt titled Create an Action has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -925,7 +925,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select Authentication Type lists at least one option below its input box.", + "description": "@assertion the prompt titled Select Authentication Type has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json index 53663d813b3..6b321566144 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/da-no-action--da-no-action-remote-preview.json @@ -516,7 +516,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -623,7 +623,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Create Declarative Agent lists at least one option below its input box.", + "description": "@assertion the prompt titled Create Declarative Agent has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json index 790f3f40fe7..880fc9b0e68 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-local-teams.json @@ -519,7 +519,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -626,7 +626,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -733,7 +733,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1035,7 +1035,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json index e2af81a2aab..770099923d8 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-playground.json @@ -493,7 +493,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -600,7 +600,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -707,7 +707,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1009,7 +1009,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json index 210c23faaaa..c4818f7ed78 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-azure-openai-remote-teams.json @@ -584,7 +584,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -691,7 +691,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -798,7 +798,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1100,7 +1100,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2550,7 +2550,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2722,7 +2722,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json index ef66c817263..fd4a79f2fb9 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-local-teams.json @@ -514,7 +514,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -621,7 +621,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -728,7 +728,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -900,7 +900,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json index de60cf27fbc..3f3e9357394 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-js-openai-remote-teams.json @@ -572,7 +572,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -679,7 +679,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -786,7 +786,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -958,7 +958,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2408,7 +2408,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2580,7 +2580,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json index ddb80d11ce0..4aed48f1327 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-copilot.json @@ -520,7 +520,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -627,7 +627,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -734,7 +734,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1036,7 +1036,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json index 1730f523e77..7850494c9b1 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-local-teams.json @@ -521,7 +521,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -628,7 +628,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -735,7 +735,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1037,7 +1037,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json index ff1bfa9d96f..745d78ba2ae 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-playground.json @@ -495,7 +495,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -602,7 +602,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -709,7 +709,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1011,7 +1011,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json index 15851605cf6..ab70f45ffcc 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-copilot.json @@ -585,7 +585,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -692,7 +692,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -799,7 +799,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1101,7 +1101,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2597,7 +2597,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2769,7 +2769,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json index 4133f07b71f..2dd850baae5 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-azure-openai-remote-teams.json @@ -586,7 +586,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -693,7 +693,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -800,7 +800,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -1102,7 +1102,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2598,7 +2598,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2770,7 +2770,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json index 8c3780e100a..6ca7ceb93f8 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-local-teams.json @@ -516,7 +516,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -623,7 +623,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -730,7 +730,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -902,7 +902,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, diff --git a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json index 40e2ab54cb0..0b5b4f1b9f4 100644 --- a/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json +++ b/packages/tests/vscuse/vscode-test-cases/plans/weather-agent--weather-ts-openai-remote-teams.json @@ -574,7 +574,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled New Project lists at least one option below its input box.", + "description": "@assertion the prompt titled New Project has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -681,7 +681,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK lists at least one option below its input box.", + "description": "@assertion the prompt titled App Features Using Microsoft 365 Agents SDK has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -788,7 +788,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Service for Large Language Model (LLM) lists at least one option below its input box.", + "description": "@assertion the prompt titled Service for Large Language Model (LLM) has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -960,7 +960,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Programming Language lists at least one option below its input box.", + "description": "@assertion the prompt titled Programming Language has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2456,7 +2456,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Select a resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Select a resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0, @@ -2628,7 +2628,7 @@ "agent": "assertion", "tool": "", "parameters": {}, - "description": "@assertion the prompt titled Location for the new resource group lists at least one option below its input box.", + "description": "@assertion the prompt titled Location for the new resource group has finished loading and lists at least one selectable option.", "content_refs": [], "timeout": 120, "retry_count": 0,