From 19afeaf6f05598f39d9f1cf24908fb8bcf9d5288 Mon Sep 17 00:00:00 2001 From: "harmoniqs-amico-agent[bot]" Date: Thu, 29 Oct 2026 08:48:50 +0000 Subject: [PATCH 1/3] feat(app): tour targets for file tree, preview, files changed, posture Adds the four F2 stops to TOUR_TARGETS and extends the tour-target contract test to all thirteen stops. Refs harmoniqs/amicode#1162 --- .../session/composer/session-tour.test.ts | 25 +++++++++++++------ .../pages/session/composer/session-tour.tsx | 6 +++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.test.ts b/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.test.ts index 7bc4985bd..0696ba10c 100644 --- a/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.test.ts +++ b/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.test.ts @@ -26,18 +26,25 @@ describe("tourTargetKeys", () => { expect(tourTargetKeys(request("Tour · Settings"))).toEqual(['[data-tour-target="settings"]']) }) - // The Pulse Inspector, Preview and the file list all live behind the one - // panel button, so the score sends a single stop for them. + // The Pulse Inspector lives behind the one panel button, so the score sends a + // single stop for the panel. Preview is its own stop (see the new stops below). test("the panel is one stop, and its old sub-stops are gone", () => { expect(tourTargetKeys(request("Tour · Side panel"))).toEqual(['[data-tour-target="side-panel"]']) expect(tourTargetKeys(request("Tour · Pulse Inspector"))).toBeUndefined() - expect(tourTargetKeys(request("Tour · Preview"))).toBeUndefined() }) - // Mirrors the 9 stops the score sends in its single tour card, in order. - // That order is the READING ORDER of the window — the top bar left to right, - // then the row beneath it, then the composer — so the highlight walks the - // screen instead of hopping across it. + test("the side-panel stops each resolve to their own anchor", () => { + expect(tourTargetKeys(request("Tour · File tree"))).toEqual(['[data-tour-target="file-tree"]']) + expect(tourTargetKeys(request("Tour · Preview"))).toEqual(['[data-tour-target="preview-tab"]']) + expect(tourTargetKeys(request("Tour · Files changed"))).toEqual(['[data-tour-target="files-changed"]']) + expect(tourTargetKeys(request("Tour · Posture"))).toEqual(['[data-tour-target="posture"]']) + }) + + // Mirrors the 13 stops of the tour card, in order. The first nine are the + // READING ORDER of the window — the top bar left to right, then the row + // beneath it, then the composer — so the highlight walks the screen instead + // of hopping across it. The last four are the side-panel stops and the + // posture (mode) indicator, appended after the original nine. const SCORED_STOPS = [ "Tabs", "New chat", @@ -48,6 +55,10 @@ describe("tourTargetKeys", () => { "Settings", "Context", "Composer", + "File tree", + "Preview", + "Files changed", + "Posture", ] test("every stop the score sends resolves to at least one candidate", () => { diff --git a/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.tsx b/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.tsx index e51e6b57c..d82c09d45 100644 --- a/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.tsx +++ b/packages/app-bundle/overlay/packages/app/src/pages/session/composer/session-tour.tsx @@ -38,6 +38,12 @@ const TOUR_TARGETS: Record = { Status: [anchor("status")], Profile: [anchor("profile")], Settings: [anchor("settings")], + // The side panel's own surfaces, each named for the element it lights. + "File tree": [anchor("file-tree")], + Preview: [anchor("preview-tab")], + "Files changed": [anchor("files-changed")], + // The posture (mode) indicator: the composer's agent select. + Posture: [anchor("posture")], } /** The data-tour-target candidates for a question request, or undefined when From 6e39da89fc7829ab0573fc67f9c3e512ef136a44 Mon Sep 17 00:00:00 2001 From: "harmoniqs-amico-agent[bot]" Date: Thu, 29 Oct 2026 08:48:50 +0000 Subject: [PATCH 2/3] feat(app): data-tour-target anchors for side panel and posture select Annotates the file-tree container, Preview and Files Changed triggers (V1 and V2) and the composer agent select (posture). Refs harmoniqs/amicode#1162 --- .../app/src/pages/session/session-side-panel.tsx | 5 +++++ .../src/v2/components/prompt-input/index.tsx | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/app-bundle/overlay/packages/app/src/pages/session/session-side-panel.tsx b/packages/app-bundle/overlay/packages/app/src/pages/session/session-side-panel.tsx index 9baf73a87..30b629f90 100644 --- a/packages/app-bundle/overlay/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app-bundle/overlay/packages/app/src/pages/session/session-side-panel.tsx @@ -754,6 +754,7 @@ export function SessionSidePanel(props: { @@ -878,6 +879,7 @@ export function SessionSidePanel(props: { >
{(control) => ( - + )} props.control.current() const providerID = () => props.control.options().find((option) => option.id === current())?.providerID return ( void onSelect: (id: string) => void }) { @@ -609,6 +618,7 @@ export function PromptInputV2Select(props: { size="normal" class={`max-w-[220px] justify-start ![font-weight:440] ${props.class ?? ""}`} aria-label={props.title} + data-tour-target={props.tourTarget} > {props.currentIcon} From 7cfa6ca279e4aa4dfb58e1e6c639bdfed8eb4c02 Mon Sep 17 00:00:00 2001 From: "harmoniqs-amico-agent[bot]" Date: Thu, 29 Oct 2026 08:48:50 +0000 Subject: [PATCH 3/3] chore(app-bundle): refresh manifest for tour-target overlay edits Refs harmoniqs/amicode#1162 --- packages/app-bundle/manifest.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/app-bundle/manifest.json b/packages/app-bundle/manifest.json index c6dfc3db8..1f961b1fd 100644 --- a/packages/app-bundle/manifest.json +++ b/packages/app-bundle/manifest.json @@ -851,7 +851,7 @@ "packages/app/src/pages/session/session-panel-width.test.ts": "9482afba7fbce254cbbd21ef885e9e9620b981616681635376f466478f611155", "packages/app/src/pages/session/session-panel-width.ts": "02ee3a02ed78db2eac47c2528055cf78aef95f389641e929ddc56c17471dcbe2", "packages/app/src/pages/session/session-side-panel-structure.test.ts": "b2d1d007d9200d0ac4a0889e45c2dbe57a324a10cb26ae9ab8f420d3c890402b", - "packages/app/src/pages/session/session-side-panel.tsx": "a27806be45c93c2cd8ae24639829cca936c2e444fdab1ff224270847effdc47c", + "packages/app/src/pages/session/session-side-panel.tsx": "fdf3b2eb6fe7484adb03f6b7fb52dfab2c74a7a41628b8562340d657174abd13", "packages/app/src/pages/session/terminal-panel-v2.tsx": "68dad9307f1d2abf3ff9248e451bd08005acf01ddc46b30a6d01b58f4a90dce0", "packages/app/src/pages/session/use-amicode-commands.test.ts": "65671d054c404edd2b799b0f6591a9c055e6ecb454a674fa0bd9a7fa6f68e111", "packages/app/src/pages/session/use-amicode-commands.tsx": "88bfdad9ae6dfd920b8e6a14ffebd2cf9e52b8f67bb9284cb358ad940643ca67", @@ -977,8 +977,8 @@ "packages/app/src/pages/session/composer/session-question-dock.tsx": "44c0814284ef4a5273c8034b8d1f5cd45306406d04e2f4f6646000facae47d7e", "packages/app/src/pages/session/composer/session-revert-dock.stories.tsx": "0310ce448c1f8feaf4732e66429654fe3602d470f3121835cf6435084c455c36", "packages/app/src/pages/session/composer/session-revert-dock.tsx": "3f2d030126a4c673731bac65406fd48797464ddc515444b891e39b0eb538e002", - "packages/app/src/pages/session/composer/session-tour.test.ts": "147473505d54466417b6b34fa672d280b71e1b9577e8bd41fbf9870035d1083e", - "packages/app/src/pages/session/composer/session-tour.tsx": "da5d807c7efe7aed1140d65d7eddd7982a8c17348d928f5d0a887d1b2a8d3a50", + "packages/app/src/pages/session/composer/session-tour.test.ts": "82bb857109fcc727670bd9f748aaa8e2408aea0446d2f48b4990098e30fcea5e", + "packages/app/src/pages/session/composer/session-tour.tsx": "ddc3b58d52e9bbbe73eea80a7d02ead93eef51613feee40f1b525f489b8b5c91", "packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx": "70a8267c725af320d78d266b85fd0ff005d067c4d09a21bef824126602e831e7", "packages/app/src/pages/session/timeline/last-prompt-bubble.test.ts": "83753b3ec7227570523c2e0b9e82401fae7a20f3a23980bb40deaeb13304327b", "packages/app/src/pages/session/timeline/message-timeline-archive.test.ts": "5699d233b5b1a8ba165354113ff40cc9d55b37a80787d163c15165655d591555", @@ -1017,7 +1017,7 @@ "packages/sdk/js/src/v2/gen/sdk.gen.ts": "6610638b4fb71bac498da98d232ef9adcd4b011b63e5e81a63fc6dc20d311b17", "packages/sdk/js/src/v2/gen/types.gen.ts": "20dfc17423861bd51c197fe6a2fcb6efbd7ad11853b28e0bb79844115256e729", "packages/session-ui/src/v2/components/prompt-input/attachments.ts": "ff66078f2edc9a67a4df0d7dfd76a49be5eab27ac332b303f3412721ef7268ea", - "packages/session-ui/src/v2/components/prompt-input/index.tsx": "098bf84bf22573fcab2826a827e6789d41ad660545a0364ffb4a77cda5e01b30", + "packages/session-ui/src/v2/components/prompt-input/index.tsx": "5c5c852ad55ae759f5869fd2e48ade6da99a98b6ab3c6dc102f3e062898e3f60", "packages/opencode/src/server/routes/instance/httpapi/server.ts": "8f142f16accad5a5a7ca84507f5c95863416af9f85b11131e5cd97cb6b128d90", "packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts": "9da41a900811e8526f3d6796341b787f7e3c64bdc9cc3a547977f05780c1f79f", "packages/opencode/src/server/routes/instance/httpapi/groups/experimental.ts": "944a0aee215a917e867fd9482f3c2bd40f49082bd3174c8a7d967ca40e34ec15", @@ -1049,7 +1049,7 @@ "packages/ui/src/v2/components/text-shimmer-v2.tsx" ], "exceptions": [], - "extracted_at": "2026-10-28T20:53:06.380Z", + "extracted_at": "2026-10-29T08:48:42.118Z", "per_package": { "packages/app": { "A": 272,