ym-hermes-desktop 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/package.json +1 -1
- package/src/hermes.js +14 -10
- package/src/mcp-server.js +1 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ npm run ask "帮我查一下今天杭州天气" # 单次提问
|
|
|
42
42
|
|
|
43
43
|
## 异步下发(下发即确认,完成后自动上报)
|
|
44
44
|
|
|
45
|
-
`hermes_chat` MCP 工具与库函数 `dispatch` 均为异步模式:**调用后立即返回「任务名 已下达」**,任务后台执行;完成后自动上报到 `REPORT_URL
|
|
45
|
+
`hermes_chat` MCP 工具与库函数 `dispatch` 均为异步模式:**调用后立即返回「任务名 已下达」**,任务后台执行;完成后自动上报到 `REPORT_URL`(接口约定:raw JSON,上报体 `{ title(标题), content(提纯汇报内容), datetime(完成后+5秒, YYYY-MM-DD HH:mm:ss) }`)。
|
|
46
46
|
|
|
47
47
|
```js
|
|
48
48
|
import { dispatch } from './src/hermes.js';
|
|
@@ -51,17 +51,18 @@ import { dispatch } from './src/hermes.js';
|
|
|
51
51
|
const ack = dispatch({
|
|
52
52
|
taskName: '周报生成',
|
|
53
53
|
content: '请总结今天的工作生成周报',
|
|
54
|
-
reportUrl: 'http://127.0.0.1:3780/yunxiangji
|
|
54
|
+
reportUrl: 'http://127.0.0.1:3780/api/mcp/yunxiangji', // 可选;不传则用 .env 的 REPORT_URL
|
|
55
55
|
});
|
|
56
|
-
// ack = { task_name: '周报生成', status: '已下达', received_at: '2026-09-
|
|
56
|
+
// ack = { task_name: '周报生成', status: '已下达', received_at: '2026-09-13 05:38:48' }
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
上报 JSON 示例:
|
|
60
60
|
|
|
61
61
|
```json
|
|
62
62
|
{
|
|
63
|
-
"
|
|
64
|
-
"
|
|
63
|
+
"title": "周报生成",
|
|
64
|
+
"content": "今天完成了……",
|
|
65
|
+
"datetime": "2026-09-13 05:38:54"
|
|
65
66
|
}
|
|
66
67
|
```
|
|
67
68
|
|
package/package.json
CHANGED
package/src/hermes.js
CHANGED
|
@@ -71,16 +71,20 @@ function durationSeconds(ms) {
|
|
|
71
71
|
return Math.round(ms / 10) / 100;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
/** 上报时间相对当前延后
|
|
75
|
-
const REPORT_DELAY_MS =
|
|
74
|
+
/** 上报时间相对当前延后 5 秒(接口约定:完成后增加 5 秒) */
|
|
75
|
+
const REPORT_DELAY_MS = 5000;
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
78
|
+
* 组装任务完成上报体(raw JSON):
|
|
79
|
+
* title 标题(任务名)
|
|
80
|
+
* content 提纯汇报内容(完成概要)
|
|
81
|
+
* datetime 完成后 +5 秒,格式 YYYY-MM-DD HH:mm:ss
|
|
79
82
|
*/
|
|
80
|
-
export function buildReportPayload(
|
|
83
|
+
export function buildReportPayload({ title, content } = {}, now = new Date()) {
|
|
81
84
|
return {
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
title: String(title ?? ''),
|
|
86
|
+
content: String(content ?? ''),
|
|
87
|
+
datetime: nowString(new Date(now.getTime() + REPORT_DELAY_MS)),
|
|
84
88
|
};
|
|
85
89
|
}
|
|
86
90
|
|
|
@@ -88,10 +92,10 @@ export function buildReportPayload(summary, now = new Date()) {
|
|
|
88
92
|
* 上报任务完成到 REPORT_URL(.env 配置或参数传入)。
|
|
89
93
|
* @returns {{ok:boolean, skipped?:boolean, status?:number, payload:object}}
|
|
90
94
|
*/
|
|
91
|
-
export async function reportTaskResult({
|
|
95
|
+
export async function reportTaskResult({ title, content, reportUrl } = {}) {
|
|
92
96
|
const url = reportUrl || loadEnv().reportUrl;
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
const payload = buildReportPayload({ title, content });
|
|
98
|
+
if (!url) return { ok: false, skipped: true, payload, reason: '未配置 REPORT_URL' };
|
|
95
99
|
const resp = await fetch(url, {
|
|
96
100
|
method: 'POST',
|
|
97
101
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -128,7 +132,7 @@ async function runTaskAsync({ taskName, content, reportUrl, onDone }) {
|
|
|
128
132
|
const result = await chat({ messages: [{ role: 'user', content }] });
|
|
129
133
|
const summary = result?.choices?.[0]?.message?.content || '(无文本结果)';
|
|
130
134
|
|
|
131
|
-
const r = await reportTaskResult({ summary, reportUrl
|
|
135
|
+
const r = await reportTaskResult({ title: taskName, content: summary, reportUrl });
|
|
132
136
|
if (r.skipped) {
|
|
133
137
|
console.log(`[dispatch:${taskName}] 完成(未配置 REPORT_URL,跳过上报)`);
|
|
134
138
|
} else {
|
package/src/mcp-server.js
CHANGED
|
@@ -77,7 +77,7 @@ function runTaskInBackground(taskName, messages) {
|
|
|
77
77
|
try {
|
|
78
78
|
const result = await chat({ messages });
|
|
79
79
|
const summary = result?.choices?.[0]?.message?.content || '(无文本结果)';
|
|
80
|
-
const r = await reportTaskResult({
|
|
80
|
+
const r = await reportTaskResult({ title: taskName, content: summary });
|
|
81
81
|
process.stderr.write(
|
|
82
82
|
r.skipped
|
|
83
83
|
? `[ym-hermes] 任务「${taskName}」完成(未配置 REPORT_URL,未上报)\n`
|