deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:liu3734/jira-tasks-dsh-plugin
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
中文 · English
在 DSH 会话输入框下方展示当前 JIRA 项目指派给当前用户的「开启 / 重新开启」任务列表。JIRA 地址与令牌从凭据读取;项目 Key 与 JQL 按工作区配置并持久化。
assignee = currentUser())的「开启 / 重新开启」任务包已发布到 npm:
dsh plugin --profile desktop add dsh-jira-tasks
重启 DSH 后生效。
profile-package/ 复制为 ~/.dsh/profiles/desktop/packages/dsh-jira-tasks/~/.dsh/profiles/desktop/package.json:dependencies 增加:"dsh-jira-tasks": "file:./packages/dsh-jira-tasks"dsh.profile.bundles 追加:"dsh-jira-tasks"pnpm install注:
pnpm install会把包复制到node_modules/(非符号链接),改动源码后需同步node_modules/dsh-jira-tasks或重跑 install。
在 DSH 会话中用 Cordis 工具执行:cordis_define(kind: new,idPrefix: "jira",源码见仓库 plugin/host.js / plugin/client.js)→ cordis_run 激活。动态插件只存在于进程内存,重启后消失,仅适合临时试用。
写入 $DSH_HOME/.credentials.yaml(推荐,热加载无需重启),或启动 DSH 前导出环境变量:
JIRA_BASE_URL: "http://jira.example.com/"
JIRA_API_TOKEN: "<PAT 或 user:token>"
JIRA_BASE_URL / JIRA_URLJIRA_API_TOKEN / JIRA_TOKEN: 用 Basic,否则用 Bearer(JIRA PAT)HCPFYH1,保存后立即查询,该工作区后续新会话自动加载{projectKey}(或 {key})会被替换为项目 Key默认查询:
project = "{projectKey}" AND status in ("开启", "重新开启") AND assignee = currentUser() ORDER BY updated DESC
状态名按中文工作流("开启"/"重新开启")配置;若 JIRA 用英文状态(Open/Reopened),在 ⚙ 中填写自定义 JQL 即可。
dsh plugin --profile desktop remove dsh-jira-tasks
| 提示 | 处理 |
|---|---|
| 未配置环境变量 JIRA_BASE_URL | 凭据未写入,见上文「配置 1」 |
| 401 … | 令牌无效或认证方式不对;先 curl -H "Authorization: Bearer <token>" <base>/rest/api/2/myself 验证 |
| 无法解析 JIRA 响应 | 网络 / 代理问题,curl 无输出 |
┌─────────── 浏览器(Client) ───────────┐ ┌──────────── Host ──────────────┐
│ conversation.composer.dock(活跃会话) │ │ webServer 路由 /jira/api/search │
│ conversation.input.dock(新会话, order:99)│ │ ↓ │
│ ↓ 挂载时/刷新时 fetch POST │ │ credentials.resolve(JIRA_*) │
│ 渲染:任务列表 / 错误 / 未配置 │ │ subprocess.spawn(curl …) │
│ localStorage 按工作区存取配置 │ │ ↓ stdout JSON │
└────────────────────────────────────────────┘ │ 解析 issues → 返回 {ok,issues} │
└────────────────────────────────┘
webServer 路由 POST /jira/api/search;凭据经 credentials 服务解析(环境变量 / $DSH_HOME/.credentials.yaml,热加载);查询用 subprocess 直接 spawn curl,认证头经 stdin(--config -)传入,令牌不进入命令行参数。window.__ModuleLoader__.load({ id, factory }) 标准 web bundle;注册 conversation.composer.dock(活跃会话)与 conversation.input.dock(新会话,flex order: 99 置于输入框下方、与输入框等宽)。shell 服务:shell 会套 sandbox-exec,部分 macOS 上不可用(sandbox_apply: Operation not permitted);subprocess 是原始进程缝,无此问题。composer.dock,故额外注册 input.dock,并用「会话是否已有消息」去重,避免双份面板。与动态插件版的差异
| 维度 | 动态插件 | 正式安装(本包) |
|---|---|---|
| 持久性 | 重启丢失 | 重启保留 |
| Client→Host 通信 | host.call / harness.handle |
webServer 路由 + fetch |
| 客户端 bundle | 会话内注入 | /plugins/dsh-jira-tasks/client.js |
| 配置 / 凭据 | 同一 localStorage 键、同一 .credentials.yaml |
完全相同 |
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。