Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bc9dca3
feat(windows): build and run the engine on Windows 11 (MSVC + CUDA)
pelebel Aug 19, 2026
1c41cf7
serve: accept stock llama.cpp WebUI dialect (API-compatible with tool…
natpate Aug 17, 2026
1a496d7
serve: add --webui / --webui-dir to serve the stock llama.cpp WebUI i…
natpate Aug 17, 2026
dba5fc3
fix(webui): strip scheme from host in split_url
natpate Aug 17, 2026
a836c86
fix(win32): compare artifact size against size_t without signed cast
pelebel Aug 21, 2026
9826982
fix(win32): mirror pread short-read semantics in the mapped direct read
pelebel Aug 21, 2026
5146f44
fix(serve): keep the reasoning-effort conflict in prompt resolution
pelebel Aug 21, 2026
07afb8c
test(win32): build and run the test suite under MSVC
pelebel Aug 21, 2026
50f3ea0
feat(serve): announce a reachable URL and the webui at startup
pelebel Aug 21, 2026
116de42
chore: ignore runtime-fetched artifacts and local tool settings
pelebel Aug 21, 2026
2e5aa86
ci: track the Qwen automation workflows
pelebel Aug 21, 2026
f0ea320
Merge remote-tracking branch 'origin/master'
pelebel Aug 21, 2026
c024bd8
feat(windows): build and run the engine on Windows 11 (MSVC + CUDA)
pelebel Aug 19, 2026
1fecf28
fix(win32): compare artifact size against size_t without signed cast
pelebel Aug 21, 2026
9b41398
fix(win32): mirror pread short-read semantics in the mapped direct read
pelebel Aug 21, 2026
85c606c
test(win32): build and run the test suite under MSVC
pelebel Aug 21, 2026
9b1a589
build: add hosted Windows build workflow (windows-2022, build-only)
pelebel Aug 19, 2026
9028b8f
build(win32): keep the MSVC guards from mis-flagging clang-cl
pelebel Aug 21, 2026
9eec195
build(win32): keep the MSVC guards from mis-flagging clang-cl
pelebel Aug 21, 2026
636ea00
feat(serve): answer the announced API base with an endpoint index
pelebel Aug 22, 2026
cd98b52
docs(readme): document the Windows build
pelebel Aug 22, 2026
ac5ab1f
Merge branch 'master' into tmp/pr59-merge-test
pelebel Aug 22, 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
204 changes: 204 additions & 0 deletions .github/workflows/qwen-dispatch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
name: '🔀 Qwen Code Dispatch'

on:
pull_request_review_comment:
types:
- 'created'
pull_request_review:
types:
- 'submitted'
pull_request:
types:
- 'opened'
issues:
types:
- 'opened'
- 'reopened'
issue_comment:
types:
- 'created'

defaults:
run:
shell: 'bash'

jobs:
debugger:
if: |-
${{ fromJSON(vars.DEBUG || vars.ACTIONS_STEP_DEBUG || false) }}
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
steps:
- name: 'Print context for debugging'
env:
DEBUG_event_name: '${{ github.event_name }}'
DEBUG_event__action: '${{ github.event.action }}'
DEBUG_event__comment__author_association: '${{ github.event.comment.author_association }}'
DEBUG_event__issue__author_association: '${{ github.event.issue.author_association }}'
DEBUG_event__pull_request__author_association: '${{ github.event.pull_request.author_association }}'
DEBUG_event__review__author_association: '${{ github.event.review.author_association }}'
DEBUG_event: '${{ toJSON(github.event) }}'
run: |-
env | grep '^DEBUG_'

dispatch:
# For PRs: only if not from a fork
# For issues: only on open/reopen
# For comments: only if user types @gemini-cli and is OWNER/MEMBER/COLLABORATOR
if: |-
(
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.fork == false
) || (
github.event_name == 'issues' &&
contains(fromJSON('["opened", "reopened"]'), github.event.action)
) || (
github.event.sender.type == 'User' &&
startsWith(github.event.comment.body || github.event.review.body || github.event.issue.body, '@qwen-code') &&
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association || github.event.review.author_association || github.event.issue.author_association)
)
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
issues: 'write'
pull-requests: 'write'
outputs:
command: '${{ steps.extract_command.outputs.command }}'
request: '${{ steps.extract_command.outputs.request }}'
additional_context: '${{ steps.extract_command.outputs.additional_context }}'
issue_number: '${{ github.event.pull_request.number || github.event.issue.number }}'
steps:
- name: 'Mint identity token'
id: 'mint_identity_token'
if: |-
${{ vars.APP_ID }}
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ vars.APP_ID }}'
private-key: '${{ secrets.APP_PRIVATE_KEY }}'
permission-contents: 'read'
permission-issues: 'write'
permission-pull-requests: 'write'

- name: 'Extract command'
id: 'extract_command'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7
env:
EVENT_TYPE: '${{ github.event_name }}.${{ github.event.action }}'
REQUEST: '${{ github.event.comment.body || github.event.review.body || github.event.issue.body }}'
with:
script: |
const eventType = process.env.EVENT_TYPE;
const request = process.env.REQUEST;
core.setOutput('request', request);

if (eventType === 'pull_request.opened') {
core.setOutput('command', 'review');
} else if (['issues.opened', 'issues.reopened'].includes(eventType)) {
core.setOutput('command', 'triage');
} else if (request.startsWith("@qwen-code /review")) {
core.setOutput('command', 'review');
const additionalContext = request.replace(/^@qwen-code \/review/, '').trim();
core.setOutput('additional_context', additionalContext);
} else if (request.startsWith("@qwen-code /triage")) {
core.setOutput('command', 'triage');
} else if (request.startsWith("@qwen-code")) {
const additionalContext = request.replace(/^@qwen-code/, '').trim();
core.setOutput('command', 'invoke');
core.setOutput('additional_context', additionalContext);
} else {
core.setOutput('command', 'fallthrough');
}

- name: 'Acknowledge request'
env:
GITHUB_TOKEN: '${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}'
ISSUE_NUMBER: '${{ github.event.pull_request.number || github.event.issue.number }}'
MESSAGE: |-
🤖 Hi @${{ github.actor }}, I've received your request, and I'm working on it now! You can track my progress [in the logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details.
REPOSITORY: '${{ github.repository }}'
run: |-
gh issue comment "${ISSUE_NUMBER}" \
--body "${MESSAGE}" \
--repo "${REPOSITORY}"

review:
needs: 'dispatch'
if: |-
${{ needs.dispatch.outputs.command == 'review' }}
uses: './.github/workflows/qwen-review.yml'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
with:
additional_context: '${{ needs.dispatch.outputs.additional_context }}'
secrets: 'inherit'

triage:
needs: 'dispatch'
if: |-
${{ needs.dispatch.outputs.command == 'triage' }}
uses: './.github/workflows/qwen-triage.yml'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
with:
additional_context: '${{ needs.dispatch.outputs.additional_context }}'
secrets: 'inherit'

invoke:
needs: 'dispatch'
if: |-
${{ needs.dispatch.outputs.command == 'invoke' }}
uses: './.github/workflows/qwen-invoke.yml'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
with:
additional_context: '${{ needs.dispatch.outputs.additional_context }}'
secrets: 'inherit'

fallthrough:
needs:
- 'dispatch'
- 'review'
- 'triage'
- 'invoke'
if: |-
${{ always() && !cancelled() && (failure() || needs.dispatch.outputs.command == 'fallthrough') }}
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
issues: 'write'
pull-requests: 'write'
steps:
- name: 'Mint identity token'
id: 'mint_identity_token'
if: |-
${{ vars.APP_ID }}
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ vars.APP_ID }}'
private-key: '${{ secrets.APP_PRIVATE_KEY }}'
permission-contents: 'read'
permission-issues: 'write'
permission-pull-requests: 'write'

- name: 'Send failure comment'
env:
GITHUB_TOKEN: '${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}'
ISSUE_NUMBER: '${{ github.event.pull_request.number || github.event.issue.number }}'
MESSAGE: |-
🤖 I'm sorry @${{ github.actor }}, but I was unable to process your request. Please [see the logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details.
REPOSITORY: '${{ github.repository }}'
run: |-
gh issue comment "${ISSUE_NUMBER}" \
--body "${MESSAGE}" \
--repo "${REPOSITORY}"
116 changes: 116 additions & 0 deletions .github/workflows/qwen-invoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: '▶️ Qwen Code Invoke'

on:
workflow_call:
inputs:
additional_context:
type: 'string'
description: 'Any additional context from the request'
required: false

concurrency:
group: '${{ github.workflow }}-invoke-${{ github.event_name }}-${{ github.event.pull_request.number || github.event.issue.number }}'
cancel-in-progress: false

defaults:
run:
shell: 'bash'

jobs:
invoke:
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
steps:
- name: 'Mint identity token'
id: 'mint_identity_token'
if: |-
${{ vars.APP_ID }}
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ vars.APP_ID }}'
private-key: '${{ secrets.APP_PRIVATE_KEY }}'
permission-contents: 'read'
permission-issues: 'write'
permission-pull-requests: 'write'

- name: 'Run Qwen Code CLI'
id: 'run_qwen'
uses: 'QwenLM/qwen-code-action@v1' # ratchet:exclude
env:
TITLE: '${{ github.event.pull_request.title || github.event.issue.title }}'
DESCRIPTION: '${{ github.event.pull_request.body || github.event.issue.body }}'
EVENT_NAME: '${{ github.event_name }}'
GITHUB_TOKEN: '${{ steps.mint_identity_token.outputs.token || secrets.GITHUB_TOKEN || github.token }}'
IS_PULL_REQUEST: '${{ !!github.event.pull_request }}'
ISSUE_NUMBER: '${{ github.event.pull_request.number || github.event.issue.number }}'
REPOSITORY: '${{ github.repository }}'
ADDITIONAL_CONTEXT: '${{ inputs.additional_context }}'
with:
openai_api_key: '${{ secrets.QWEN_API_KEY }}'
openai_base_url: '${{ vars.QWEN_BASE_URL }}'
openai_model: '${{ vars.QWEN_MODEL }}'
qwen_cli_version: '${{ vars.QWEN_CLI_VERSION }}'
qwen_debug: '${{ fromJSON(vars.DEBUG || vars.ACTIONS_STEP_DEBUG || false) }}'
upload_artifacts: '${{ vars.UPLOAD_ARTIFACTS }}'
workflow_name: 'qwen-invoke'
settings: |-
{
"model": {
"maxSessionTurns": 25
},
"telemetry": {
"enabled": true,
"target": "local",
"outfile": ".qwen/telemetry.log"
},
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server:v0.18.0"
],
"includeTools": [
"add_issue_comment",
"get_issue",
"get_issue_comments",
"list_issues",
"search_issues",
"create_pull_request",
"pull_request_read",
"list_pull_requests",
"search_pull_requests",
"create_branch",
"create_or_update_file",
"delete_file",
"fork_repository",
"get_commit",
"get_file_contents",
"list_commits",
"push_files",
"search_code"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
},
"tools": {
"core": [
"run_shell_command(cat)",
"run_shell_command(echo)",
"run_shell_command(grep)",
"run_shell_command(head)",
"run_shell_command(tail)"
]
}
}
prompt: '/qwen-invoke'
Loading