Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
9a3e0bb
feat: support for pasting image
LaZzyMan Jan 26, 2026
aba4abf
feat: add attachment ui
LaZzyMan Jan 26, 2026
eef789c
fix ci test
LaZzyMan Jan 27, 2026
f51ace3
Merge branch 'mochi/fix-issue' into feat/image-attachment
LaZzyMan Jan 28, 2026
d9a3f7a
fix clipboard cleanup
LaZzyMan Jan 28, 2026
3d1fc7a
fix test of windows
LaZzyMan Jan 28, 2026
6dc06cc
fix ci test
LaZzyMan Jan 28, 2026
b28e5c4
fix ctrl+v on win
LaZzyMan Feb 2, 2026
1050163
fix paste image on windows
Feb 2, 2026
30b4b47
fix ci test
LaZzyMan Feb 2, 2026
c92e2b8
Merge branch 'main' into feat/image-attachment
LaZzyMan Feb 2, 2026
0f4b5fd
fix test on windows
LaZzyMan Feb 3, 2026
c829730
Merge branch 'main' into feat/image-attachment
LaZzyMan Feb 5, 2026
32e17f8
fix: normalize Windows paths to lowercase for case-insensitive sessio…
LaZzyMan Feb 9, 2026
37c3a38
fix: use centralized getProjectHash in Storage class
LaZzyMan Feb 9, 2026
9ff4be1
feat(insight): add insight command and server for personalized progra…
DragonnZhang Jan 16, 2026
22aa665
feat: add new insight page with Vite setup
DragonnZhang Jan 16, 2026
18a2154
refactor(insight): update insight page assets and styles
DragonnZhang Jan 16, 2026
0e55800
feat(insight): Implement static insight generation and visualization
DragonnZhang Jan 23, 2026
c243f1d
chore: update ESLint configuration and lint-staged command
DragonnZhang Jan 23, 2026
733522c
refactor(insight): remove deprecated insight server implementation
DragonnZhang Jan 23, 2026
2931e75
refactor(insight): remove debug logging and unused test generator
DragonnZhang Jan 23, 2026
6cb0bb0
feat(insight): update insight template and app to React, enhance expo…
DragonnZhang Jan 23, 2026
7b845ea
refactor(insight): improve error handling and format output path message
DragonnZhang Jan 23, 2026
338387f
feat(insight): integrate JSONL file reading utility and enhance base …
DragonnZhang Jan 23, 2026
7e21ba4
feat(insight): enhance template loading logic and add insight templat…
DragonnZhang Feb 2, 2026
98735fe
feat(insight): add JSONL utility exports to index
DragonnZhang Feb 5, 2026
39d2067
feat(insight): update static insight generator and command handling
DragonnZhang Feb 5, 2026
f1214c9
feat(insight): remove JSON data file generation from static insight p…
DragonnZhang Feb 5, 2026
5a7dcce
feat(insight): refactor data processing and add qualitative insights …
DragonnZhang Feb 5, 2026
9ea6c45
feat(insight): add qualitative insights components and styles to enha…
DragonnZhang Feb 5, 2026
aeedec3
feat(insight): enhance qualitative insights display and improve styling
DragonnZhang Feb 6, 2026
754125e
feat(insight): add tracking for lines and files in analysis and enhan…
DragonnZhang Feb 6, 2026
f57e261
feat(insight): remove Token Usage and Achievements from report
DragonnZhang Feb 6, 2026
afe911d
feat(insight): add new components for insights display and enhance st…
DragonnZhang Feb 6, 2026
20de2a0
feat(insight): add satisfaction and friction data aggregation and dis…
DragonnZhang Feb 9, 2026
0dc3594
feat(insight): add progress tracking for insight generation and displ…
DragonnZhang Feb 9, 2026
fa8d596
feat(insight): enhance metrics generation with progress tracking and …
DragonnZhang Feb 9, 2026
4c32f4b
feat(insight): remove Team Feedback link from navigation
DragonnZhang Feb 9, 2026
af21e7f
feat: enhance InsightPrompts and components with additional data hand…
DragonnZhang Feb 9, 2026
2edce46
feat(insight): refactor InteractionStyle to include insights and upda…
DragonnZhang Feb 9, 2026
d3dfc26
fix ci test
LaZzyMan Feb 9, 2026
e66c203
feat(insight): Refactor code structure for improved readability and m…
DragonnZhang Feb 9, 2026
4b95854
refactor(insightCommand): replace console.error with logger for bette…
DragonnZhang Feb 9, 2026
662192a
fix windows ci
LaZzyMan Feb 10, 2026
dd56345
fix: handle special case for merging function calls with args and names
DragonnZhang Feb 10, 2026
e29aab4
feat(DataProcessor): use constant for concurrency limit in pLimit calls
DragonnZhang Feb 10, 2026
56030f9
Merge branch 'main' into feat/image-attachment
LaZzyMan Feb 10, 2026
2a432b1
revert: remove unused script modifications
DragonnZhang Feb 10, 2026
b488126
feat add multi-platform support
LaZzyMan Feb 10, 2026
fcb22a3
feat(insightCommand): simplify file opening by using 'open' package
DragonnZhang Feb 10, 2026
60fec71
fix sanitizeCwd
LaZzyMan Feb 10, 2026
89cc55f
feat(DataProcessor): add comprehensive test suite for DataProcessor f…
DragonnZhang Feb 10, 2026
d61ec77
Refactor code structure for improved readability and maintainability
DragonnZhang Feb 10, 2026
5376ca5
fix: unblock input after ESC cancel, suppress abort errors, add hint
DragonnZhang Feb 11, 2026
53a3727
feat: enhance slash command processor tests with additional mocks and…
DragonnZhang Feb 11, 2026
83dc4ca
feat(insight): add shareable card and dev environment support
DragonnZhang Feb 11, 2026
2421bb1
feat(insight): refactor prompts and integrate dynamic prompt retrieval
DragonnZhang Feb 11, 2026
785d0ef
fix: enforce plan mode restrictions in ACP sessions (issue #1806)
LaZzyMan Feb 12, 2026
1789b16
feat: support MCP readOnlyHint annotation in plan mode (#1826)
echoVic Feb 14, 2026
997fcbf
feat: add terminal-capture for CLI screenshot automation
pomelo-nwu Feb 14, 2026
ee5e47b
fix: sandbox user permission in integration tests
Mingholy Feb 15, 2026
020c78b
fix: update mail
Mingholy Feb 15, 2026
07b9728
chore: bump version to 0.10.2
Mingholy Feb 15, 2026
f467c24
Merge pull request #1844 from QwenLM/chore/v0.10.2
Mingholy Feb 15, 2026
ad23df4
chore: exclude .qwen/commands/ and .qwen/skills/ from gitignore
DragonnZhang Feb 15, 2026
ed81e89
docs: improve settings.json configuration guide with quick setup exam…
pomelo-nwu Feb 16, 2026
0f842f4
feat(models): add Qwen 3.5 Plus model support with updated descriptio…
pomelo-nwu Feb 16, 2026
d235a71
docs(readme): add Qwen3.5-Plus launch announcement banner
pomelo-nwu Feb 16, 2026
a414f5c
Merge pull request #1850 from QwenLM/docs-0216
pomelo-nwu Feb 16, 2026
60c2175
feat: update readme
pomelo-nwu Feb 16, 2026
a33fd5b
Merge pull request #1853 from QwenLM/feature/update-readme-cada176
pomelo-nwu Feb 16, 2026
e7e2989
docs: add news banner about Qwen3.5-Plus launch
pomelo-nwu Feb 16, 2026
a0a0a70
Merge pull request #1854 from QwenLM/0216-news
pomelo-nwu Feb 16, 2026
caa9983
fix(fs): Improve BOM detection with length check and codePointAt
hobostay Feb 17, 2026
39360dc
feat(cli): add Coding Plan Global/Intl region support
Mingholy Feb 17, 2026
c1789a0
fix(cli): update Coding Plan Global/Intl labels and fix description l…
Mingholy Feb 18, 2026
78a4ab1
fix(cli): update regionName format from 'Bailian Coding Plan (Global/…
Mingholy Feb 18, 2026
8fe60da
Merge pull request #1843 from QwenLM/mingholy/fix/sandbox-sdk-e2e
Mingholy Feb 18, 2026
6bc37c6
Merge pull request #1860 from QwenLM/fix-intl-coding-plan
Mingholy Feb 18, 2026
fca4d73
chore: bump version to 0.10.3 (#1863)
qwen-code-ci-bot Feb 18, 2026
4cd4218
chore: bump version to 0.10.4 (#1864)
qwen-code-ci-bot Feb 18, 2026
89c78c7
feat: add qwen3.5-plus model support for Coding Plan
pomelo-nwu Feb 18, 2026
c6a723e
Merge pull request #1867 from QwenLM/feature/add-qwen3.5-plus-coding-…
pomelo-nwu Feb 18, 2026
b2b30c4
feat(runner): support auth_type for model configuration
pomelo-nwu Feb 19, 2026
db56ba2
fix chmod error for arch system and add curl and sudo check for shell…
DennisYu07 Feb 19, 2026
9ac8d9c
fix issues for debian
DennisYu07 Feb 19, 2026
bae1ba2
fix warning for shell script
DennisYu07 Feb 19, 2026
d0acea2
fix warning
DennisYu07 Feb 19, 2026
8fe304c
fix(workflows): standardize release notes generation and add prerelea…
Mingholy Feb 20, 2026
fc04ba1
chore: bump version to 0.10.5 (#1886)
qwen-code-ci-bot Feb 20, 2026
bef3755
fix(workflows): improve release notes handling in release-sdk.yml
Mingholy Feb 22, 2026
a13d88a
Merge pull request #1885 from QwenLM/mingholy/fix/release-workflow-tag
Mingholy Feb 22, 2026
b0e8c66
feat: add qwen3-coder-next, glm-4.7, and kimi-k2.5 to Coding Plan (Ch…
pomelo-nwu Feb 23, 2026
7ebae58
feat: add glm-4.7 and kimi-k2.5 to Coding Plan (Global/Intl region)
pomelo-nwu Feb 23, 2026
24ea2b6
feat: add qwen3-coder-next to Coding Plan (Global/Intl region)
pomelo-nwu Feb 23, 2026
c6e1b2e
Merge pull request #1847 from QwenLM/dragon/gitignore-qwen-commands-s…
tanzhenxin Feb 24, 2026
e053beb
Merge pull request #1857 from hobostay/fix/logging-improve-acp-connec…
tanzhenxin Feb 24, 2026
934dc1b
Merge pull request #1907 from QwenLM/feature/bailian-coding-plan-models
pomelo-nwu Feb 24, 2026
253a9ea
Merge pull request #1874 from QwenLM/feat/support-auth-type
pomelo-nwu Feb 24, 2026
ce3fc8f
refactor installation script
DennisYu07 Feb 24, 2026
45530e2
add bash for debain
DennisYu07 Feb 24, 2026
ee2d68b
fix: update security vulnerability reporting channel
pomelo-nwu Feb 24, 2026
f4eabe8
Merge pull request #1921 from QwenLM/fix/security-reporting-channel
pomelo-nwu Feb 24, 2026
1c9ff66
docs: enhance modelProviders configuration documentation
Mingholy Feb 24, 2026
6843a6f
fix: change workspaceFolders capability to boolean for LSP servers
Feb 24, 2026
672067e
feat: add bailian coding plan models
pomelo-nwu Feb 24, 2026
229c443
Merge pull request #1931 from QwenLM/feature/bailian-coding-plan-glm5
pomelo-nwu Feb 24, 2026
9cb624f
docs: extract modelProviders section to standalone model-providers.md…
Mingholy Feb 25, 2026
c4f5c82
docs: update link to model-providers.md in auth.md
Mingholy Feb 25, 2026
d12a593
fix(openrouter): correct header name for OpenRouter provider
Mingholy Feb 25, 2026
b749ef3
test(openrouter): update test expectations for X-OpenRouter-Title header
Mingholy Feb 25, 2026
4013c7c
docs: update roadmap.md
pomelo-nwu Feb 25, 2026
95e8ddc
Merge pull request #1927 from QwenLM/mingholy/docs/model-providers
pomelo-nwu Feb 25, 2026
1b158e9
Merge pull request #1877 from QwenLM/fix/installation-script-permission
pomelo-nwu Feb 25, 2026
33a5116
Merge pull request #1612 from QwenLM/feat/image-attachment
pomelo-nwu Feb 25, 2026
ade3711
Merge pull request #1768 from QwenLM/fix/issue-1760-windows-path-case…
pomelo-nwu Feb 25, 2026
51fc0bf
Merge pull request #1812 from QwenLM/fix/issue-1806-plan-mode-enforce…
pomelo-nwu Feb 25, 2026
bec8cbc
Merge branch 'main' into feat/terminal-capture
pomelo-nwu Feb 25, 2026
311f002
Merge pull request #1840 from QwenLM/feat/terminal-capture
pomelo-nwu Feb 25, 2026
44b8ff7
Merge pull request #1837 from echoVic/fix/mcp-readonly-hint-plan-mode
pomelo-nwu Feb 25, 2026
c948e0c
fix(insight): only analyze conversational sessions for facets
tanzhenxin Feb 26, 2026
f47bef1
fix(insight): count only user interactions in metrics
tanzhenxin Feb 26, 2026
eea5daa
feat(insight): polish insight page UI
tanzhenxin Feb 26, 2026
509260d
feat(cli): add timestamped filenames for insight reports
tanzhenxin Feb 26, 2026
f90ed9e
feat: update model configs and tests for qwen3.5-plus
qwen-code-ci-bot Feb 16, 2026
a55e96a
refactor: use qwen3.5-plus to replace vision-model
qwen-code-ci-bot Feb 16, 2026
ae6716c
refactor: merge coder-model and qwen3.5-plus, remove vision model swi…
qwen-code-ci-bot Feb 16, 2026
740f4e0
fix: remove test code and switch-mode
Mingholy Feb 24, 2026
42a5b4d
fix: add model resolution warnings to start warnings
Mingholy Feb 25, 2026
5926b37
feat(cli): Refine insight progress indicator UI
tanzhenxin Feb 26, 2026
54a8610
feat: remove redundant cancel message translations and improve messag…
DragonnZhang Feb 26, 2026
51214d9
fix: 修复模型常量更新导致的单测失败
Mingholy Feb 26, 2026
0c53b19
feat(auth): backup settings file before auth modification
Mingholy Feb 26, 2026
9e4c5ee
refactor: Extract web-templates package and unify build/pack workflow
tanzhenxin Feb 26, 2026
a172696
Merge branch 'main' into feat/support-insight-command
tanzhenxin Feb 26, 2026
a0d80ee
chore: bump version to 0.11.0
tanzhenxin Feb 26, 2026
6258ee5
chore: Fix lint errors in web-templates package
tanzhenxin Feb 26, 2026
a16b4d8
Merge pull request #1953 from QwenLM/chore/version-bump-0.11.0
tanzhenxin Feb 26, 2026
7cbebe9
Merge branch 'main' into feat/support-insight-command
tanzhenxin Feb 26, 2026
f50a032
Merge pull request #1593 from QwenLM/feat/support-insight-command
tanzhenxin Feb 26, 2026
179ce68
fix(test): keep plan mode active during ACP integration test
tanzhenxin Feb 26, 2026
f6a90dd
Merge pull request #1956 from QwenLM/fix/acp-plan-mode-test
tanzhenxin Feb 26, 2026
8cead5a
docs: fix alert block formatting and command path
joeytoday Feb 27, 2026
0b9164b
fix: rename GEMINI_CLI_INTEGRATION_TEST to QWEN_CODE_INTEGRATION_TEST
Mingholy Feb 27, 2026
ec178b7
docs: fix custom command path in mapping table
joeytoday Feb 27, 2026
d7ebd81
Merge pull request #1962 from QwenLM/fix-docs-by-yijing
joeytoday Feb 27, 2026
be2b74c
fix: update `contextWindowSize`
Mingholy Feb 27, 2026
9dc758c
Merge pull request #1852 from QwenLM/feat/qwen3.5-plus
tanzhenxin Feb 27, 2026
54d05d8
Merge pull request #1966 from QwenLM/mingholy/fix-sandbox-issue
tanzhenxin Feb 27, 2026
1979e21
Merge pull request #1952 from QwenLM/coding-plan-ui-fix
tanzhenxin Feb 27, 2026
ac5a0c6
Merge pull request #1929 from TheForgivenOne/fix/gopls-workspaceFolde…
tanzhenxin Feb 27, 2026
e93b287
Merge pull request #1796 from QwenLM/feat/support-cancel-execute-pr
tanzhenxin Feb 27, 2026
1b7d153
feat(cli): Increase /insight feature exposure via weighted tips
tanzhenxin Feb 28, 2026
14df5a5
Merge pull request #2019 from QwenLM/feat/increase-insight-exposure
tanzhenxin Feb 28, 2026
8d3ab48
chore: bump version to 0.11.1
tanzhenxin Mar 1, 2026
1f46ed2
Merge pull request #2026 from QwenLM/bump-version-0.11.1
tanzhenxin Mar 1, 2026
bf63fdf
fix(core): remove spaces between Chinese characters and numbers in to…
Mar 2, 2026
2283e10
fix(filesearch): limit max files to prevent OOM crashes
Mar 2, 2026
c290afd
fix(edit): normalize CRLF line endings in edit strings for Windows co…
Mar 4, 2026
75cc26a
fix(cli): support CRLF line endings and UTF-8 BOM in markdown frontma…
Mar 4, 2026
ab5375b
fix(core): exclude empty tools array from DashScope API requests
Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Dependencies (npm ci installs fresh inside the container)
node_modules
**/node_modules

# Build artifacts (rebuilt from scratch inside the container)
dist
**/dist

# Version control
.git
29 changes: 23 additions & 6 deletions .github/workflows/release-sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -348,15 +348,32 @@ jobs:
CLI_SOURCE_DESC="CLI built from source (same branch/ref as SDK)"
fi

# Create release notes with CLI version info
NOTES="## Bundled CLI Version\n\nThis SDK release bundles CLI version: \`${CLI_VERSION}\`\n\nSource: ${CLI_SOURCE_DESC}\n\n---\n\n"

# Create release notes file
NOTES_FILE=$(mktemp)
{
echo "## Bundled CLI Version"
echo ""
echo "This SDK release bundles CLI version: ${CLI_VERSION}"
echo ""
echo "Source: ${CLI_SOURCE_DESC}"
echo ""
echo "---"
echo ""
} > "${NOTES_FILE}"

# Get previous release notes if available
PREVIOUS_NOTES=$(gh release view "sdk-typescript-${PREVIOUS_RELEASE_TAG}" --json body -q '.body' 2>/dev/null || echo 'See commit history for changes.')
printf '%s\n' "${PREVIOUS_NOTES}" >> "${NOTES_FILE}"

# Create GitHub release
gh release create "sdk-typescript-${RELEASE_TAG}" \
--target "${TARGET}" \
--title "SDK TypeScript Release ${RELEASE_TAG}" \
--notes-start-tag "sdk-typescript-${PREVIOUS_RELEASE_TAG}" \
--notes "${NOTES}$(gh release view "sdk-typescript-${PREVIOUS_RELEASE_TAG}" --json body -q '.body' 2>/dev/null || echo 'See commit history for changes.')" \
"${PRERELEASE_FLAG}"
--notes-file "${NOTES_FILE}" \
${PRERELEASE_FLAG}

# Cleanup
rm -f "${NOTES_FILE}"

- name: 'Create PR to merge release branch into main'
if: |-
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -206,13 +206,22 @@ jobs:
RELEASE_BRANCH: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
RELEASE_TAG: '${{ steps.version.outputs.RELEASE_TAG }}'
PREVIOUS_RELEASE_TAG: '${{ steps.version.outputs.PREVIOUS_RELEASE_TAG }}'
IS_NIGHTLY: '${{ steps.vars.outputs.is_nightly }}'
IS_PREVIEW: '${{ steps.vars.outputs.is_preview }}'
run: |-
# Set prerelease flag for nightly and preview releases
PRERELEASE_FLAG=""
if [[ "${IS_NIGHTLY}" == "true" || "${IS_PREVIEW}" == "true" ]]; then
PRERELEASE_FLAG="--prerelease"
fi

gh release create "${RELEASE_TAG}" \
dist/cli.js \
--target "$RELEASE_BRANCH" \
--title "Release ${RELEASE_TAG}" \
--notes-start-tag "$PREVIOUS_RELEASE_TAG" \
--generate-notes
--generate-notes \
${PRERELEASE_FLAG}

- name: 'Create Issue on Failure'
if: |-
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,15 @@ packages/*/coverage/
# Generated files
packages/cli/src/generated/
packages/core/src/generated/
packages/web-templates/src/generated/
.integration-tests/
packages/vscode-ide-companion/*.vsix

# Qwen Code Configs

.qwen/
!.qwen/commands/
!.qwen/skills/
logs/
# GHA credentials
gha-creds-*.json
Expand All @@ -70,6 +74,8 @@ __pycache__/
integration-tests/concurrent-runner/output/
integration-tests/concurrent-runner/task-*

integration-tests/terminal-capture/scenarios/screenshots/

# storybook
*storybook.log
storybook-static
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ eslint.config.js
gha-creds-*.json
junit.xml
Thumbs.db
packages/cli/src/services/insight/templates/insightTemplate.ts
104 changes: 104 additions & 0 deletions .qwen/skills/pr-review/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
name: pr-review
description: Reviews pull requests with code analysis and terminal smoke testing. Applies when examining code changes, running CLI tests, or when 'PR review', 'code review', 'terminal screenshot', 'visual test' is mentioned.
---

# PR Review — Code Review + Terminal Smoke Testing

## Workflow

### 1. Fetch PR Information

```bash
# List open PRs
gh pr list

# View PR details
gh pr view <number>

# Get diff
gh pr diff <number>
```

### 2. Code Review

Analyze changes across the following dimensions:

- **Correctness** — Is the logic correct? Are edge cases handled?
- **Code Style** — Does it follow existing code style and conventions?
- **Performance** — Are there any performance concerns?
- **Test Coverage** — Are there corresponding tests for the changes?
- **Security** — Does it introduce any security risks?

Output format:

- 🔴 **Critical** — Must fix
- 🟡 **Suggestion** — Suggested improvement
- 🟢 **Nice to have** — Optional optimization

### 3. Terminal Smoke Testing (Run for Every PR)

**Run terminal-capture for every PR review**, not just UI changes. Reasons:

- **Smoke Test** — Verify the CLI starts correctly and responds to user input, ensuring the PR didn't break anything
- **Visual Verification** — If there are UI changes, screenshots provide the most intuitive review evidence
- **Documentation** — Attach screenshots to the PR comments so reviewers can see the results without building locally

```bash
# Checkout branch & build
gh pr checkout <number>
npm run build
```

#### Scenario Selection Strategy

Choose appropriate scenarios based on the PR's scope of changes:

| PR Type | Recommended Scenarios | Description |
| ------------------------------------- | ------------------------------------------------------------ | --------------------------------- |
| **Any PR** (default) | smoke test: send `hi`, verify startup & response | Minimal-cost smoke validation |
| Slash command changes | Corresponding command scenarios (`/about`, `/context`, etc.) | Verify command output correctness |
| Ink component / layout changes | Multiple scenarios + full-flow long screenshot | Verify visual effects |
| Large refactors / dependency upgrades | Run `scenarios/all.ts` fully | Full regression |

#### Running Screenshots

```bash
# Write scenario config to integration-tests/terminal-capture/scenarios/
# See terminal-capture skill for FlowStep API reference

# Single scenario
npx tsx integration-tests/terminal-capture/run.ts integration-tests/terminal-capture/scenarios/<scenario>.ts


# Check output in screenshots/ directory
```

#### Minimal Smoke Test Example

No need to write a new scenario file — just use the existing `about.ts`. It sends "hi" then runs `/about`, covering startup + input + command response:

```bash
npx tsx integration-tests/terminal-capture/run.ts integration-tests/terminal-capture/scenarios/about.ts
```

### 4. Upload Screenshots to PR

Use Playwright MCP browser to upload screenshots to the PR comments (images hosted at `github.com/user-attachments/assets/`, zero side effects):

1. Open the PR page with Playwright: `https://github.com/<repo>/pull/<number>`
2. Click the comment text box and enter a comment title (e.g., `## 📷 Terminal Smoke Test Screenshots`)
3. Click the "Paste, drop, or click to add files" button to trigger the file picker
4. Upload screenshot PNG files via `browser_file_upload` (can upload multiple one by one)
5. Wait for GitHub to process (about 2-3 seconds) — image links auto-insert into the comment box
6. Click the "Comment" button to submit

> **Prerequisite**: Playwright MCP needs `--user-data-dir` configured to persist GitHub login session. First time use requires manually logging into GitHub in the Playwright browser.

### 5. Submit Review

Submit code review comments via `gh pr review`:

```bash
gh pr review <number> --comment --body "review content"
```
Loading
Loading