Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
c1a0647
Share viewer source and bundle independent host runtimes
HarveySang Sep 17, 2026
d816ca0
Unify phone execution with host-specific visual policies and typed ou…
HarveySang Sep 17, 2026
2401254
Share scoped session cleanup and video transport across host instances
HarveySang Sep 17, 2026
933a682
Prepare independent runtime candidates and document acceptance gates
HarveySang Sep 17, 2026
c2ba813
Resolve isolated build directories in workflow step context
HarveySang Sep 17, 2026
75eb5c8
feat: add host-driven phone tasks and shared workbench
HarveySang Sep 22, 2026
e62322b
feat: share one local task service across hosts
HarveySang Sep 26, 2026
6ed17c8
feat: accept Android emulators on the shared adb path
HarveySang Sep 26, 2026
939a2bb
test: run four task entries against an Android emulator
HarveySang Sep 26, 2026
b51e272
test(DMY-59): capture emulator user story and host entries
HarveySang Sep 27, 2026
1208c31
fix(DMY-59): bundle shared task service for every host
HarveySang Sep 27, 2026
e4a7c7b
feat(DMY-59): add foreground task service dev loop
HarveySang Sep 27, 2026
dde393c
feat(DMY-59): open local workbench directly and auto-show devices
HarveySang Sep 27, 2026
e8fd0c9
refactor(DMY-59): route video by viewer ID
HarveySang Sep 27, 2026
355b9a7
MY-DMY-59 Trim workbench guidance copy
HarveySang Sep 27, 2026
77fdf9e
MY-DMY-59 Verify Web model flow on real emulator
HarveySang Sep 27, 2026
90082d0
MY-DMY-59 Align story screenshots with compact UI
HarveySang Sep 27, 2026
2d661f2
DMY-59: align workbench home with Artemis workspace structure
HarveySang Sep 27, 2026
e88f34c
DMY-59: keep device video alive through replay and reconnect
HarveySang Sep 27, 2026
4a835ae
DMY-59: guard workbench against obsolete device controls
HarveySang Sep 27, 2026
0ee3278
DMY-59: open model setup without submitting task form
HarveySang Sep 27, 2026
036f03a
DMY-59: unify workbench navigation in one header
HarveySang Sep 27, 2026
fe5bbab
DMY-59: sweep workbench navigation and copy
HarveySang Sep 27, 2026
b10ce54
DMY-59: bind local workbench preview to branch watcher
HarveySang Sep 27, 2026
b3bfcb8
DMY-59: verify visual model with 64px probe
HarveySang Sep 28, 2026
0601203
DMY-59: opt in remote HTTP per model profile
HarveySang Sep 28, 2026
91c56cb
DMY-59: accept HTTP model endpoints without opt-in
HarveySang Sep 28, 2026
9f56e78
DMY-59: recover idle preview after video faults
HarveySang Sep 28, 2026
8130d1b
fix(DMY-59): keep isolated task-service exports complete
HarveySang Sep 30, 2026
62d179c
fix(DMY-59): restore compatible DSH HMR and isolated task bundles
HarveySang Sep 30, 2026
ed6be66
fix(DMY-59): isolate platform policy from adapter test fixtures
HarveySang Sep 30, 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
18 changes: 16 additions & 2 deletions .github/workflows/deepseek-harness-plugin-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@ name: DeepSeek Harness Plugin CI
on:
push:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/task-service/**'
- 'packages/workbench/**'
- 'deepseek-harness-plugin/**'
- '.agents/plugins/marketplace.json'
- '.github/workflows/deepseek-harness-plugin-ci.yml'
pull_request:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/task-service/**'
- 'packages/workbench/**'
- 'deepseek-harness-plugin/**'
- '.agents/plugins/marketplace.json'
- '.github/workflows/deepseek-harness-plugin-ci.yml'
Expand All @@ -23,9 +31,12 @@ jobs:
runs-on: ubuntu-latest
defaults:
run:
working-directory: deepseek-harness-plugin
working-directory: ${{ runner.temp }}/opengui-build/deepseek-harness-plugin
steps:
- uses: actions/checkout@v4
- name: Export isolated adapter and shared core
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage dsh "$RUNNER_TEMP/opengui-build"
- uses: pnpm/action-setup@v4
with:
version: 11.19.0
Expand Down Expand Up @@ -94,9 +105,12 @@ jobs:
runs-on: ubuntu-latest
defaults:
run:
working-directory: deepseek-harness-plugin
working-directory: ${{ runner.temp }}/opengui-build/deepseek-harness-plugin
steps:
- uses: actions/checkout@v4
- name: Export isolated adapter and shared core
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage dsh "$RUNNER_TEMP/opengui-build"
- uses: pnpm/action-setup@v4
with:
version: 11.19.0
Expand Down
18 changes: 13 additions & 5 deletions .github/workflows/opengui-codex-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@ name: Standalone OpenGUI Codex CI
on:
pull_request:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/workbench/**'
- 'packages/task-service/**'
- 'plugins/opengui/**'
Comment on lines 5 to 10

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 为所有共享源码目录触发宿主 CI

宿主现在直接编译并打包 packages/phone-agent、packages/workbench 和 packages/task-service,但路径过滤器只新增了 packages/device-runtime/**;WorkBuddy 工作流同样如此,DSH 工作流则没有任何共享目录过滤项。因此只修改其余三个共享包的 PR 不会触发对应宿主的构建、测试或隔离边界校验,破坏性改动可以在所有发布检查之外合入。请将所有被宿主导入或 staged 的共享目录加入各宿主 CI 的 push 和 pull_request 路径。

Useful? React with 👍 / 👎.

- '.github/workflows/opengui-codex-*.yml'
push:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/workbench/**'
- 'packages/task-service/**'
- 'plugins/opengui/**'
- '.github/workflows/opengui-codex-*.yml'

Expand All @@ -33,24 +41,24 @@ jobs:
- name: Copy only the standalone source into an isolated build root
shell: bash
run: |
cp -R plugins/opengui "$RUNNER_TEMP/opengui"
node packages/device-runtime/build.mjs stage codex "$RUNNER_TEMP/opengui-build"
test ! -e "$RUNNER_TEMP/deepseek-harness-plugin"
- name: Install without lifecycle hooks
working-directory: ${{ runner.temp }}/opengui
working-directory: ${{ runner.temp }}/opengui-build/plugins/opengui
run: pnpm install --frozen-lockfile --ignore-scripts
- name: Test and validate the isolated package
working-directory: ${{ runner.temp }}/opengui
working-directory: ${{ runner.temp }}/opengui-build/plugins/opengui
run: pnpm check
- name: Produce the allowlisted upload and archive
working-directory: ${{ runner.temp }}/opengui
working-directory: ${{ runner.temp }}/opengui-build/plugins/opengui
run: |
pnpm package
bash -n scripts/install-macos.command
node scripts/test-installer.mjs
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: opengui-codex-${{ matrix.os }}
path: ${{ runner.temp }}/opengui/.artifacts/
path: ${{ runner.temp }}/opengui-build/plugins/opengui/.artifacts/
include-hidden-files: true
if-no-files-found: error
retention-days: 7
6 changes: 3 additions & 3 deletions .github/workflows/opengui-codex-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,17 @@ jobs:
with:
node-version: 22.23.2
- name: Copy the independent package
run: cp -R plugins/opengui "$RUNNER_TEMP/opengui"
run: node packages/device-runtime/build.mjs stage codex "$RUNNER_TEMP/opengui-build"
- name: Build and validate without DSH
working-directory: ${{ runner.temp }}/opengui
working-directory: ${{ runner.temp }}/opengui-build/plugins/opengui
run: |
pnpm install --frozen-lockfile --ignore-scripts
pnpm check
pnpm package
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: opengui-codex-release
path: ${{ runner.temp }}/opengui/.artifacts/
path: ${{ runner.temp }}/opengui-build/plugins/opengui/.artifacts/
include-hidden-files: true
if-no-files-found: error
release-draft:
Expand Down
44 changes: 33 additions & 11 deletions .github/workflows/workbuddy-plugin-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@ name: WorkBuddy Plugin CI
on:
push:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/workbench/**'
- 'packages/task-service/**'
- 'workbuddy-plugin/**'
- '.github/workflows/workbuddy-plugin-*.yml'
pull_request:
paths:
- 'packages/device-runtime/**'
- 'packages/phone-agent/**'
- 'packages/workbench/**'
- 'packages/task-service/**'
- 'workbuddy-plugin/**'
- '.github/workflows/workbuddy-plugin-*.yml'

Expand All @@ -20,41 +28,51 @@ jobs:
strategy:
matrix:
node: ['22.19.0', '24']
defaults:
run:
working-directory: workbuddy-plugin
steps:
- uses: actions/checkout@v4
- name: Export isolated adapter and shared core
shell: bash
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage workbuddy "$RUNNER_TEMP/opengui-build"
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm
cache-dependency-path: workbuddy-plugin/package-lock.json
- run: npm ci
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run pack:release
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm audit --omit=dev --audit-level=moderate
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
macos-package:
runs-on: macos-latest
timeout-minutes: 15
defaults:
run:
working-directory: workbuddy-plugin
steps:
- uses: actions/checkout@v4
- name: Export isolated adapter and shared core
shell: bash
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage workbuddy "$RUNNER_TEMP/opengui-build"
- uses: actions/setup-node@v4
with:
node-version: '22.19.0'
cache: npm
cache-dependency-path: workbuddy-plugin/package-lock.json
- run: npm ci
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run pack:release
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: node scripts/test-publish.mjs
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: node scripts/test-release-installer.mjs
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run test:native
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- uses: actions/upload-artifact@v4
with:
name: workbuddy-candidate
path: workbuddy-plugin/dist/*
path: ${{ runner.temp }}/opengui-build/workbuddy-plugin/dist/*
if-no-files-found: error
packaged-startup:
needs: [check, macos-package]
Expand All @@ -64,20 +82,24 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: workbuddy-plugin
steps:
- uses: actions/checkout@v4
- name: Export isolated adapter and shared core
shell: bash
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage workbuddy "$RUNNER_TEMP/opengui-build"
- uses: actions/setup-node@v4
with:
node-version: '22.19.0'
cache: npm
cache-dependency-path: workbuddy-plugin/package-lock.json
- run: npm ci
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run check
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- uses: actions/download-artifact@v4
with:
name: workbuddy-candidate
path: workbuddy-plugin/dist
path: ${{ runner.temp }}/opengui-build/workbuddy-plugin/dist
- run: npm run smoke:packed
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
14 changes: 11 additions & 3 deletions .github/workflows/workbuddy-plugin-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,35 @@ jobs:
timeout-minutes: 20
env:
OPENGUI_PRERELEASE: ${{ github.event_name == 'push' || inputs.prerelease }}
defaults:
run:
working-directory: workbuddy-plugin
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Export isolated adapter and shared core
shell: bash
working-directory: ${{ github.workspace }}
run: node packages/device-runtime/build.mjs stage workbuddy "$RUNNER_TEMP/opengui-build"
- uses: actions/setup-node@v4
with:
node-version: '22.19.0'
cache: npm
cache-dependency-path: workbuddy-plugin/package-lock.json
- name: Require main ancestry
working-directory: ${{ github.workspace }}
run: git merge-base --is-ancestor HEAD origin/main
- run: npm ci
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run pack:release
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- run: npm run smoke:packed
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- name: Require real WorkBuddy acceptance for stable publication
if: env.OPENGUI_PRERELEASE != 'true'
run: node scripts/validate.mjs --release
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
- name: Publish immutable WorkBuddy assets
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: node scripts/publish.mjs
working-directory: ${{ runner.temp }}/opengui-build/workbuddy-plugin
4 changes: 3 additions & 1 deletion deepseek-harness-plugin/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# OpenGUI

> Current candidate phone execution is host-driven: the current DSH conversation model plans and inspects screenshots through `opengui_manage_task next/decide`. The workbench has no separate model configuration. `/opengui` opens the workbench; `/opengui <goal>` submits once and hands the accepted task back to the host. Embedded homepage handoff uses `/opengui continue <taskId>`. Closing the page does not stop execution, but execution cannot continue without host decisions. New phone tasks currently support macOS only. Dedicated-model and router/subagent instructions below describe legacy/browser paths, not the new phone workbench. See the [current Chinese flow](README.zh.md). Real DSH host/model acceptance remains pending.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 按自主执行契约更新使用说明

当用户按照此处的新手说明操作时,流程会稳定失败:最终实现由 plugins/opengui/src/task-service-main.ts 向共享服务注入 phoneExecutor,需要先在工作台配置视觉模型,而 packages/phone-agent/src/host.ts 会拒绝该模式下的 next/decide;这里却声明无需独立模型并要求持续调用这两个操作。Codex 和 WorkBuddy README 中新增的 Host-driven 章节也描述了同一旧契约,请统一改为当前的配置模型及 status/steer/resume/stop 流程,以免安装者无法启动任务。 CLAUDE.mdL15-L18

Useful? React with 👍 / 👎.


English | [中文](README.zh.md)

`dsh-coremate-mobile` is the OpenGUI plugin for DeepSeek Harness. It uses restricted child tasks to control authorized Android phones and a plugin-managed local browser. It provides `/opengui` and the `phone_agent` and `browser_agent` delegation tools. OpenGUI prefers the model already selected in the receiving DSH conversation; a separate visual model is only a compatibility fallback. The legacy `/coremate` command remains available for compatibility.
`dsh-coremate-mobile` is the OpenGUI plugin for DeepSeek Harness. Current phone tasks use host decisions and a shared device runtime; the plugin-managed local browser retains its existing execution path. It provides `/opengui` and the `phone_agent` and `browser_agent` delegation tools. New phone tasks use the model selected in the receiving DSH conversation, without a separate model fallback. The legacy `/coremate` command remains available for compatibility.

The plugin does not modify DeepSeek Harness and does not depend on CoreMateDesktop2, system Chrome, Python, or Hermes CLI. Chromium is installed on demand only after the first browser task receives user approval.

Expand Down
Loading
Loading