voyager
Nagi-ovo
Enhancement suite for Gemini, AI Studio, Claude & ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件;其中的提示词管理器可用于任意网站,如 DeepSeek Harness。
picsky/dsh-pocket-console
Don't hand over the whole machine, just the decision blocking it: an unattended DeepSeek Harness (DSH) run's tool-call approvals and ask_user_question prompts reach your phone as Feishu cards — desktop first, outbound only.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:picsky/dsh-pocket-console
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
Step out — the task won't stall.
You drop a task on DeepSeek Harness before heading out, expecting to review the result when you get back — and it is stuck on the plan-confirmation question.
dsh-pocket-console exists for that: it keeps a stalled session moving while nobody is at the desk.
It turns the two moments that need a human — tool-call approvals and ask_user_question prompts — into Feishu cards on your phone once the desktop has had its chance to answer; one tap and the agent continues. The phone gets that one decision and nothing else: approve, reject, or answer. The desk, the session, the settings and the credentials stay where they are, and one outbound long connection is all it takes — no public IP, no domain, no tunnel.
English · 简体中文
The published tarball carries its Feishu transport inside it, so the install resolves nothing that needs a build permission and runs no install-time script:
dsh plugin --profile web add dsh-pocket-console
Then restart dsh web and open Settings → Plugins → Plugin configuration → Pocket console:
Credentials and the recipient live in the credentials store, so every later dsh start reconnects the long connection by itself — no settings visit, no second scan. Use another app switches apps; Unbind stops the phone side. Installing straight from GitHub needs one build script allowed through, which troubleshooting covers.
To remove it:
dsh plugin --profile web remove dsh-pocket-console
It works out of the box: the Settings card exposes three settings and nothing else.
| Setting | Default | Meaning |
|---|---|---|
| Desktop head start (seconds) | 120 |
The request goes to the phone only if the desktop has not answered by then. 0 sends it immediately |
| Title prefix | DSH |
Prefix on every phone message title |
| Result notices | When idle |
After a session stops, the turn result goes to the phone with a box you can reply in. Its send delay reuses the desktop head start above |
Every row can be Reset, and an edit has to be saved (the card marks it Unsaved first).
Anything the card does not show belongs to the deployment. The channel, the interface language, the mirror lifetime and the like stay out of the card and are overridden in the profile layer — a patch replaces the row's entire config, so restate every key you want to keep:
$DSH_HOME/profiles/web/cordis.patch.yml
- id: pocket-console
config:
channel: dsh-pocket-console/providers/feishu.js
channelConfig: {}
delaySeconds: 120
titlePrefix: DSH
resultNotify: idle
resultNotifyCooldownSeconds: 0
mirrorTtlSeconds: 60
locale: zh
That is every key at the value the code already ships, so copying it changes nothing. Every setting documents the rest.
An approval card is a remote code-execution authorization channel, so it is built like one:
allowed-once applies to that call only; the random id that carries it dies the moment the request settles.$DSH_HOME/.credentials.yaml.Full invariants, threat model and reporting: SECURITY.md.
dsh.bundle profile layer and registers on two documented waterfalls. Nothing in the harness is patched or forked, and a DSH upgrade cannot break it.These are honest gaps, not choices.
| Transports | Phone gets | You must operate | Fits | |
|---|---|---|---|---|
| Desktop GUI mirroring — dsh-pocket, ds-harness-remote, dsh-zen-remote | the whole Web GUI over LAN, tunnel, P2P or hosted relay | the full interface: workspaces, sessions, settings, credentials | a tunnel, a relay, a domain, or trust in someone's relay | working away from the computer |
| IM console — dsh-im, dsh-lark-bot | chat platform long connections | sessions, workspaces, models, permissions; several channels | a bot app, often a developer-console walkthrough | driving the agent from chat |
| Notification only — dsh-turn-notify, @dsh-suite/plugin-notify | toast, browser, webhook, Bark, ServerChan | a message it cannot answer | per-channel webhook or key | knowing when something happened |
| dsh-pocket-console | one outbound WebSocket | one decision, single-use — approve, reject, or answer | nothing | an agent that must not stall while you are away from the desk |
If you want the computer in your hand, install one of the first three. This plugin is for the other case: the computer stays where it is, and only the decision travels.
dsh.bundle profile layer, plain ESM, no build step; the published package is about 4 MB because the Feishu transport and its dependencies are bundled inside the tarball.npm test. No install, no network and no credentials — the production dependencies are replaced by in-repo stubs.npm run check:parity (one setting has to agree in six places) and npm run e2e (installs the packed artifact into a real dsh web to prove it activates). That is what CI runs: verify on two Node versions, real composition, publish payload.| Doc | What is in it |
|---|---|
| Configuration | Every option, its default, and which ones the Settings card changes at runtime |
| Troubleshooting | Install, binding, and cards that never arrive |
| docs/decisions/ | Why the plugin is shaped this way — one record per decision |
| SECURITY.md | The security invariants this plugin claims |
| CONTRIBUTING.md | How a change lands: issue, branch, pull request, the four checks |
| CHANGELOG.md | What changed in each version |
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: feishu、lark、approval、chatops、permissions、qr-code、remote-approval。