@cecwxf/wtt 0.1.6 → 0.1.8

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.
Files changed (112) hide show
  1. package/README.md +8 -1
  2. package/README_CN.md +8 -1
  3. package/bin/openclaw-wtt-bootstrap.mjs +5 -0
  4. package/package.json +1 -1
  5. package/dist/channel.d.ts +0 -275
  6. package/dist/channel.d.ts.map +0 -1
  7. package/dist/channel.js +0 -2089
  8. package/dist/channel.js.map +0 -1
  9. package/dist/commands/account.d.ts +0 -16
  10. package/dist/commands/account.d.ts.map +0 -1
  11. package/dist/commands/account.js +0 -37
  12. package/dist/commands/account.js.map +0 -1
  13. package/dist/commands/bind.d.ts +0 -3
  14. package/dist/commands/bind.d.ts.map +0 -1
  15. package/dist/commands/bind.js +0 -102
  16. package/dist/commands/bind.js.map +0 -1
  17. package/dist/commands/config.d.ts +0 -3
  18. package/dist/commands/config.d.ts.map +0 -1
  19. package/dist/commands/config.js +0 -38
  20. package/dist/commands/config.js.map +0 -1
  21. package/dist/commands/delegate.d.ts +0 -7
  22. package/dist/commands/delegate.d.ts.map +0 -1
  23. package/dist/commands/delegate.js +0 -99
  24. package/dist/commands/delegate.js.map +0 -1
  25. package/dist/commands/formatter.d.ts +0 -8
  26. package/dist/commands/formatter.d.ts.map +0 -1
  27. package/dist/commands/formatter.js +0 -200
  28. package/dist/commands/formatter.js.map +0 -1
  29. package/dist/commands/handlers.d.ts +0 -3
  30. package/dist/commands/handlers.d.ts.map +0 -1
  31. package/dist/commands/handlers.js +0 -87
  32. package/dist/commands/handlers.js.map +0 -1
  33. package/dist/commands/http.d.ts +0 -26
  34. package/dist/commands/http.d.ts.map +0 -1
  35. package/dist/commands/http.js +0 -190
  36. package/dist/commands/http.js.map +0 -1
  37. package/dist/commands/index.d.ts +0 -3
  38. package/dist/commands/index.d.ts.map +0 -1
  39. package/dist/commands/index.js +0 -2
  40. package/dist/commands/index.js.map +0 -1
  41. package/dist/commands/parser.d.ts +0 -5
  42. package/dist/commands/parser.d.ts.map +0 -1
  43. package/dist/commands/parser.js +0 -333
  44. package/dist/commands/parser.js.map +0 -1
  45. package/dist/commands/pipeline.d.ts +0 -7
  46. package/dist/commands/pipeline.d.ts.map +0 -1
  47. package/dist/commands/pipeline.js +0 -99
  48. package/dist/commands/pipeline.js.map +0 -1
  49. package/dist/commands/router.d.ts +0 -18
  50. package/dist/commands/router.d.ts.map +0 -1
  51. package/dist/commands/router.js +0 -75
  52. package/dist/commands/router.js.map +0 -1
  53. package/dist/commands/setup.d.ts +0 -7
  54. package/dist/commands/setup.d.ts.map +0 -1
  55. package/dist/commands/setup.js +0 -89
  56. package/dist/commands/setup.js.map +0 -1
  57. package/dist/commands/task.d.ts +0 -26
  58. package/dist/commands/task.d.ts.map +0 -1
  59. package/dist/commands/task.js +0 -438
  60. package/dist/commands/task.js.map +0 -1
  61. package/dist/commands/types.d.ts +0 -175
  62. package/dist/commands/types.d.ts.map +0 -1
  63. package/dist/commands/types.js +0 -2
  64. package/dist/commands/types.js.map +0 -1
  65. package/dist/e2e-crypto.d.ts +0 -36
  66. package/dist/e2e-crypto.d.ts.map +0 -1
  67. package/dist/e2e-crypto.js +0 -166
  68. package/dist/e2e-crypto.js.map +0 -1
  69. package/dist/index.d.ts +0 -20
  70. package/dist/index.d.ts.map +0 -1
  71. package/dist/index.js +0 -21
  72. package/dist/index.js.map +0 -1
  73. package/dist/plugin-config.d.ts +0 -32
  74. package/dist/plugin-config.d.ts.map +0 -1
  75. package/dist/plugin-config.js +0 -268
  76. package/dist/plugin-config.js.map +0 -1
  77. package/dist/runtime/index.d.ts +0 -13
  78. package/dist/runtime/index.d.ts.map +0 -1
  79. package/dist/runtime/index.js +0 -7
  80. package/dist/runtime/index.js.map +0 -1
  81. package/dist/runtime/progress-ticker.d.ts +0 -65
  82. package/dist/runtime/progress-ticker.d.ts.map +0 -1
  83. package/dist/runtime/progress-ticker.js +0 -116
  84. package/dist/runtime/progress-ticker.js.map +0 -1
  85. package/dist/runtime/session-binding.d.ts +0 -16
  86. package/dist/runtime/session-binding.d.ts.map +0 -1
  87. package/dist/runtime/session-binding.js +0 -20
  88. package/dist/runtime/session-binding.js.map +0 -1
  89. package/dist/runtime/status-transition.d.ts +0 -19
  90. package/dist/runtime/status-transition.d.ts.map +0 -1
  91. package/dist/runtime/status-transition.js +0 -95
  92. package/dist/runtime/status-transition.js.map +0 -1
  93. package/dist/runtime/task-executor-persistence.d.ts +0 -63
  94. package/dist/runtime/task-executor-persistence.d.ts.map +0 -1
  95. package/dist/runtime/task-executor-persistence.js +0 -201
  96. package/dist/runtime/task-executor-persistence.js.map +0 -1
  97. package/dist/runtime/task-executor.d.ts +0 -169
  98. package/dist/runtime/task-executor.d.ts.map +0 -1
  99. package/dist/runtime/task-executor.js +0 -1230
  100. package/dist/runtime/task-executor.js.map +0 -1
  101. package/dist/runtime/task-status-handler.d.ts +0 -28
  102. package/dist/runtime/task-status-handler.d.ts.map +0 -1
  103. package/dist/runtime/task-status-handler.js +0 -102
  104. package/dist/runtime/task-status-handler.js.map +0 -1
  105. package/dist/types.d.ts +0 -159
  106. package/dist/types.d.ts.map +0 -1
  107. package/dist/types.js +0 -6
  108. package/dist/types.js.map +0 -1
  109. package/dist/ws-client.d.ts +0 -90
  110. package/dist/ws-client.d.ts.map +0 -1
  111. package/dist/ws-client.js +0 -385
  112. package/dist/ws-client.js.map +0 -1
@@ -1,89 +0,0 @@
1
- import { promises as fs } from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- function asObject(value) {
5
- if (!value || typeof value !== "object" || Array.isArray(value))
6
- return {};
7
- return value;
8
- }
9
- function getConfigPath() {
10
- const fromEnv = process.env.OPENCLAW_CONFIG_PATH?.trim();
11
- if (fromEnv)
12
- return fromEnv;
13
- return path.join(os.homedir(), ".openclaw", "openclaw.json");
14
- }
15
- function mergeWttConfig(raw, params) {
16
- const next = { ...raw };
17
- const plugins = asObject(next.plugins);
18
- const entries = asObject(plugins.entries);
19
- entries.wtt = {
20
- ...asObject(entries.wtt),
21
- enabled: true,
22
- };
23
- plugins.entries = entries;
24
- next.plugins = plugins;
25
- const commands = asObject(next.commands);
26
- const allowFrom = asObject(commands.allowFrom);
27
- const existingAllow = Array.isArray(allowFrom.wtt)
28
- ? allowFrom.wtt.filter((v) => typeof v === "string")
29
- : [];
30
- const mergedAllow = existingAllow.includes("*") ? existingAllow : [...existingAllow, "*"];
31
- allowFrom.wtt = mergedAllow;
32
- commands.allowFrom = allowFrom;
33
- next.commands = commands;
34
- const channels = asObject(next.channels);
35
- const wtt = asObject(channels.wtt);
36
- const accounts = asObject(wtt.accounts);
37
- const currentDefault = asObject(accounts.default);
38
- accounts.default = {
39
- ...currentDefault,
40
- enabled: true,
41
- cloudUrl: params.cloudUrl,
42
- agentId: params.agentId,
43
- token: params.token,
44
- slashCompat: true,
45
- slashCompatWttPrefixOnly: true,
46
- slashBypassMentionGate: true,
47
- taskExecutorScope: "pipeline_only",
48
- p2pE2EEnabled: true,
49
- };
50
- wtt.accounts = accounts;
51
- channels.wtt = wtt;
52
- next.channels = channels;
53
- return next;
54
- }
55
- export async function handleSetupCommand(command, ctx) {
56
- const cloudUrl = (command.cloudUrl || ctx.account?.cloudUrl || "https://www.waxbyte.com").trim();
57
- if (!command.agentId || !command.token) {
58
- return "参数缺失:用法 @wtt setup <agent_id> <agent_token> [cloudUrl]";
59
- }
60
- const configPath = getConfigPath();
61
- let existing = {};
62
- try {
63
- const rawText = await fs.readFile(configPath, "utf8");
64
- existing = asObject(JSON.parse(rawText));
65
- }
66
- catch (error) {
67
- const code = error?.code;
68
- if (code !== "ENOENT") {
69
- return `写入失败:无法读取 ${configPath}(${String(error.message || error)})`;
70
- }
71
- await fs.mkdir(path.dirname(configPath), { recursive: true });
72
- }
73
- const merged = mergeWttConfig(existing, {
74
- agentId: command.agentId.trim(),
75
- token: command.token.trim(),
76
- cloudUrl,
77
- });
78
- const tempPath = `${configPath}.tmp-${Date.now()}`;
79
- await fs.writeFile(tempPath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
80
- await fs.rename(tempPath, configPath);
81
- return [
82
- "✅ WTT 配置已写入 openclaw.json",
83
- `config: ${configPath}`,
84
- `agentId: ${command.agentId.trim()}`,
85
- `cloudUrl: ${cloudUrl}`,
86
- "下一步:执行 /restart 使配置生效",
87
- ].join("\n");
88
- }
89
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { type NormalizedAccountContext } from "./account.js";
2
- import type { ParsedWTTCommand, WTTCommandExecutionContext } from "./types.js";
3
- import { type TaskRunEnqueueResult, type TaskRuntimeMetadata } from "../runtime/index.js";
4
- type TaskCommand = Extract<ParsedWTTCommand, {
5
- name: "task";
6
- }>;
7
- export interface TaskRuntimeMetadataWithErrors extends TaskRuntimeMetadata {
8
- detailError?: string;
9
- }
10
- export interface ExecuteTaskRunByIdOptions {
11
- taskId: string;
12
- ctx: WTTCommandExecutionContext;
13
- account?: NormalizedAccountContext;
14
- note?: string;
15
- heartbeatSeconds?: number;
16
- publishHeartbeatToStream?: boolean;
17
- }
18
- export interface ExecuteTaskRunByIdResult {
19
- metadata: TaskRuntimeMetadataWithErrors;
20
- enqueueResult: TaskRunEnqueueResult;
21
- account: NormalizedAccountContext;
22
- }
23
- export declare function executeTaskRunById(options: ExecuteTaskRunByIdOptions): Promise<ExecuteTaskRunByIdResult>;
24
- export declare function handleTaskCommand(command: TaskCommand, ctx: WTTCommandExecutionContext): Promise<string>;
25
- export {};
26
- //# sourceMappingURL=task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAEtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAG/D,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8QD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,0BAA0B,CAAC;IAChC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,6BAA6B,CAAC;IACxC,aAAa,EAAE,oBAAoB,CAAC;IACpC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4D9G;AA6GD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqD9G"}
@@ -1,438 +0,0 @@
1
- import { normalizeAccountContext } from "./account.js";
2
- import { WTTApiError, formatApiError, wttApiRequestJson } from "./http.js";
3
- import { getSharedTaskRunExecutor, validateTaskTransition, } from "../runtime/index.js";
4
- function asRecord(value) {
5
- if (typeof value !== "object" || value === null || Array.isArray(value))
6
- return null;
7
- return value;
8
- }
9
- function asString(value, fallback = "-") {
10
- return typeof value === "string" && value.trim() ? value.trim() : fallback;
11
- }
12
- function toTaskList(data) {
13
- if (Array.isArray(data)) {
14
- return data.map((item) => asRecord(item)).filter((item) => item !== null);
15
- }
16
- const payload = asRecord(data);
17
- if (!payload)
18
- return [];
19
- const raw = Array.isArray(payload.tasks)
20
- ? payload.tasks
21
- : Array.isArray(payload.items)
22
- ? payload.items
23
- : [];
24
- return raw.map((item) => asRecord(item)).filter((item) => item !== null);
25
- }
26
- function statusIcon(status) {
27
- switch (status) {
28
- case "todo":
29
- case "open":
30
- return "📝";
31
- case "ready":
32
- return "🟡";
33
- case "doing":
34
- return "🚧";
35
- case "review":
36
- return "🔎";
37
- case "done":
38
- case "approved":
39
- return "✅";
40
- case "blocked":
41
- return "⛔";
42
- case "rejected":
43
- return "❌";
44
- case "cancelled":
45
- return "🚫";
46
- default:
47
- return "📌";
48
- }
49
- }
50
- function formatTaskList(data) {
51
- const tasks = toTaskList(data);
52
- if (tasks.length === 0)
53
- return "任务列表为空";
54
- const lines = [`任务列表(${tasks.length})`];
55
- for (const [idx, task] of tasks.entries()) {
56
- const id = asString(task.id, "-");
57
- const title = asString(task.title, "(未命名任务)");
58
- const status = asString(task.status, "unknown");
59
- const priority = asString(task.priority, "-");
60
- const owner = asString(task.owner_agent_id, "-");
61
- lines.push(`${idx + 1}. ${statusIcon(status)} ${title}`);
62
- lines.push(` id: ${id} | 状态: ${status} | 优先级: ${priority} | owner: ${owner}`);
63
- }
64
- return lines.join("\n");
65
- }
66
- function formatTaskDetail(data, taskId) {
67
- const task = asRecord(data);
68
- if (!task)
69
- return `任务详情返回异常(task_id=${taskId})`;
70
- const title = asString(task.title, "(未命名任务)");
71
- const id = asString(task.id, taskId);
72
- const status = asString(task.status, "unknown");
73
- const priority = asString(task.priority, "-");
74
- const owner = asString(task.owner_agent_id, "-");
75
- const runner = asString(task.runner_agent_id, "-");
76
- const pipelineId = asString(task.pipeline_id, "-");
77
- const topicId = asString(task.topic_id, "-");
78
- const desc = asString(task.description, "");
79
- const lines = [
80
- `${statusIcon(status)} ${title}`,
81
- `id: ${id}`,
82
- `状态: ${status} | 优先级: ${priority}`,
83
- `owner: ${owner} | runner: ${runner}`,
84
- `pipeline: ${pipelineId} | topic: ${topicId}`,
85
- ];
86
- if (desc && desc !== "-")
87
- lines.push(`描述: ${desc}`);
88
- return lines.join("\n");
89
- }
90
- function formatTaskCreateAck(data, title) {
91
- const payload = asRecord(data) ?? {};
92
- const id = asString(payload.id, "");
93
- if (id)
94
- return `✅ 任务已创建:${title}\nID: ${id}`;
95
- return `✅ 任务已创建:${title}`;
96
- }
97
- function toTaskRuntimeMetadata(taskId, data) {
98
- const payload = asRecord(data) ?? {};
99
- return {
100
- id: asString(payload.id, taskId),
101
- title: asString(payload.title, "(未命名任务)"),
102
- status: asString(payload.status, "unknown"),
103
- priority: asString(payload.priority, "-"),
104
- ownerAgentId: asString(payload.owner_agent_id, "-"),
105
- runnerAgentId: asString(payload.runner_agent_id, "-"),
106
- pipelineId: asString(payload.pipeline_id, "-"),
107
- topicId: asString(payload.topic_id, "-"),
108
- description: asString(payload.description, ""),
109
- taskType: asString(payload.task_type, "generic"),
110
- execMode: asString(payload.exec_mode, "default"),
111
- };
112
- }
113
- function toErrorMessage(error) {
114
- if (error instanceof Error)
115
- return error.message;
116
- return String(error);
117
- }
118
- async function getTaskMetadataForRuntime(taskId, ctx) {
119
- try {
120
- const data = await wttApiRequestJson(ctx, {
121
- method: "GET",
122
- path: `/tasks/${encodeURIComponent(taskId)}`,
123
- });
124
- return toTaskRuntimeMetadata(taskId, data);
125
- }
126
- catch (error) {
127
- return {
128
- id: taskId,
129
- title: "(任务元数据待补充)",
130
- status: "unknown",
131
- priority: "-",
132
- ownerAgentId: "-",
133
- runnerAgentId: "-",
134
- pipelineId: "-",
135
- topicId: "-",
136
- description: "",
137
- taskType: "generic",
138
- execMode: "default",
139
- detailError: toErrorMessage(error),
140
- };
141
- }
142
- }
143
- function formatSummary(result) {
144
- const summary = result.summary;
145
- return [
146
- `summary.kind: ${summary.kind}`,
147
- `summary.status: ${summary.status}`,
148
- `summary.transitionApplied: ${summary.transitionApplied}`,
149
- `summary.action: ${summary.action}`,
150
- `summary.notes: ${summary.notes.length > 0 ? summary.notes.join(" | ") : "(无)"}`,
151
- ...(summary.outputPreview ? [`summary.output_preview: ${summary.outputPreview}`] : []),
152
- ];
153
- }
154
- function formatIdempotencyDecision(result) {
155
- const info = result.idempotency;
156
- const lines = [
157
- `幂等决策: ${info.decision} | key=${info.idempotencyKey}`,
158
- `trigger_context: ${info.triggerContextKey}`,
159
- `幂等说明: ${info.reason}`,
160
- ];
161
- if (info.decision === "deduplicated") {
162
- lines.push(`重复来源: ${info.duplicateState ?? "-"} | duplicate_task_id=${info.duplicateTaskId ?? "-"}`);
163
- if (info.duplicateEnqueuedAt) {
164
- lines.push(`重复入队时间: ${info.duplicateEnqueuedAt}`);
165
- }
166
- }
167
- return lines;
168
- }
169
- function formatTaskRunResult(metadata, result) {
170
- const transitionPassed = result.transition.allowed;
171
- const statusLine = `${result.transition.fromStatus} -> ${result.transition.toStatus}`;
172
- const transitionAppliedText = result.transitionApplied === "run_endpoint"
173
- ? "POST /tasks/{task_id}/run"
174
- : result.transitionApplied === "patch_status"
175
- ? "PATCH /tasks/{task_id} (fallback)"
176
- : "未落地";
177
- const heartbeatMode = result.heartbeatPublished > 0
178
- ? `已通过 WTT publish 外发 ${result.heartbeatPublished} 条`
179
- : `未外发,返回结构化 payload ${result.heartbeatPayloads.length} 条`;
180
- const heartbeatSample = result.heartbeatPayloads[0]?.text;
181
- const lines = [
182
- result.inference.succeeded
183
- ? "✅ task run 执行完成(已进入 review)"
184
- : "⚠️ task run 执行失败",
185
- `${statusIcon(metadata.status)} ${metadata.title}`,
186
- `task_id: ${metadata.id}`,
187
- ...formatIdempotencyDecision(result),
188
- `状态校验: ${transitionPassed ? "通过" : "未通过"}(${statusLine})`,
189
- `状态推进(doing): ${transitionAppliedText}`,
190
- `最终状态: ${result.finalStatus}`,
191
- `推理: ${result.inference.succeeded ? "成功" : "失败"} | provider=${result.inference.provider}`,
192
- ...(result.inference.prompt ? [`prompt.len: ${result.inference.prompt.length}`] : []),
193
- ...(result.inference.outputText ? [`output.len: ${result.inference.outputText.length}`] : []),
194
- ...(result.inference.error ? [`inference.error: ${result.inference.error}`] : []),
195
- `队列: enqueued=${result.queue.enqueuedAt} | dequeued=${result.queue.dequeuedAt} | finished=${result.queue.finishedAt} | pending_after_dequeue=${result.queue.pendingAfterDequeue}`,
196
- ...(result.persistence.enabled
197
- ? [
198
- `持久化队列: 已启用${result.persistence.filePath ? `(${result.persistence.filePath})` : ""}${result.persistence.recoveredFrom ? ` | recovery=${result.persistence.recoveredFrom}` : ""}`,
199
- ]
200
- : []),
201
- ...(result.recovery
202
- ? [`recovery.retry: ${result.recovery.retryCount}/${result.recovery.maxRetryCount}`]
203
- : []),
204
- `60s 心跳: ${heartbeatMode}`,
205
- ...(heartbeatSample ? [`heartbeat.sample: ${heartbeatSample}`] : []),
206
- ...formatSummary(result),
207
- `task_detail: topic=${result.task.topicId} | task_type=${result.task.taskType} | exec_mode=${result.task.execMode}`,
208
- ];
209
- if (result.fallbackMessage) {
210
- lines.push(`fallback: ${result.fallbackMessage}`);
211
- }
212
- if (result.heartbeatPublishErrors.length > 0) {
213
- lines.push(`心跳外发异常: ${result.heartbeatPublishErrors.join(" | ")}`);
214
- }
215
- if (metadata.detailError) {
216
- lines.push(`任务元数据补充失败:${metadata.detailError}`);
217
- lines.push("可先执行 @wtt task detail <task_id> 检查任务信息。");
218
- }
219
- return lines.join("\n");
220
- }
221
- function formatTaskRunDedupResult(metadata, result) {
222
- if (!result.deduplicated) {
223
- return formatTaskRunResult(metadata, result);
224
- }
225
- const lines = [
226
- "⏭️ task run 请求命中幂等去重(未入队)",
227
- `${statusIcon(metadata.status)} ${metadata.title}`,
228
- `task_id: ${metadata.id}`,
229
- ...formatIdempotencyDecision(result),
230
- `执行器快照: running=${result.runningTaskId ?? "-"} | queue_length=${result.queueLength}`,
231
- ...(result.persistence.enabled
232
- ? [
233
- `持久化队列: 已启用${result.persistence.filePath ? `(${result.persistence.filePath})` : ""}`,
234
- ]
235
- : []),
236
- "说明: 同一任务已有待处理 run 请求,当前请求已被幂等保护拦截。",
237
- ];
238
- if (metadata.detailError) {
239
- lines.push(`任务元数据补充失败:${metadata.detailError}`);
240
- lines.push("可先执行 @wtt task detail <task_id> 检查任务信息。");
241
- }
242
- return lines.join("\n");
243
- }
244
- export async function executeTaskRunById(options) {
245
- const account = options.account ?? normalizeAccountContext(options.ctx.accountId, options.ctx.account);
246
- const metadata = await getTaskMetadataForRuntime(options.taskId, options.ctx);
247
- const topicId = metadata.topicId;
248
- const canPublishHeartbeat = Boolean(options.publishHeartbeatToStream === true
249
- && topicId
250
- && topicId !== "-"
251
- && options.ctx.clientConnected
252
- && options.ctx.client);
253
- const executor = getSharedTaskRunExecutor();
254
- const enqueueResult = await executor.enqueueRun({
255
- taskId: metadata.id,
256
- metadata,
257
- accountId: account.accountId,
258
- triggerAgentId: account.agentId || undefined,
259
- runnerAgentId: metadata.runnerAgentId !== "-" ? metadata.runnerAgentId : account.agentId || undefined,
260
- note: options.note ?? `triggered by @wtt task run (${account.accountId})`,
261
- heartbeatSeconds: options.heartbeatSeconds ?? 60,
262
- apiContext: {
263
- cloudUrl: account.cloudUrl,
264
- token: account.token || undefined,
265
- },
266
- apiRequest: (request) => wttApiRequestJson(options.ctx, {
267
- method: request.method,
268
- path: request.path,
269
- body: request.body,
270
- }),
271
- fetchTaskDetail: async () => wttApiRequestJson(options.ctx, {
272
- method: "GET",
273
- path: `/tasks/${encodeURIComponent(metadata.id)}`,
274
- }),
275
- invokeTaskInference: options.ctx.runtimeHooks?.dispatchTaskInference
276
- ? async (request) => options.ctx.runtimeHooks.dispatchTaskInference(request)
277
- : undefined,
278
- getSessionRuntimeMetrics: options.ctx.runtimeHooks?.getSessionRuntimeMetrics
279
- ? async () => options.ctx.runtimeHooks.getSessionRuntimeMetrics({
280
- taskId: metadata.id,
281
- topicId: metadata.topicId !== "-" ? metadata.topicId : undefined,
282
- accountId: account.accountId,
283
- })
284
- : undefined,
285
- publishHeartbeat: canPublishHeartbeat
286
- ? async (payload) => {
287
- await options.ctx.client.publish(topicId, payload.text, {
288
- contentType: "text",
289
- semanticType: "TASK_PROGRESS",
290
- });
291
- }
292
- : undefined,
293
- });
294
- return {
295
- metadata,
296
- enqueueResult,
297
- account,
298
- };
299
- }
300
- async function handleTaskRunCommand(command, ctx, account) {
301
- const { metadata, enqueueResult } = await executeTaskRunById({
302
- taskId: command.taskId,
303
- ctx,
304
- account,
305
- note: `triggered by @wtt task run (${account.accountId})`,
306
- heartbeatSeconds: 60,
307
- publishHeartbeatToStream: true,
308
- });
309
- if (enqueueResult.deduplicated) {
310
- return formatTaskRunDedupResult(metadata, enqueueResult);
311
- }
312
- return formatTaskRunResult(metadata, enqueueResult);
313
- }
314
- async function handleTaskReviewCommand(command, ctx, account) {
315
- const metadata = await getTaskMetadataForRuntime(command.taskId, ctx);
316
- const transition = validateTaskTransition({
317
- currentStatus: metadata.status,
318
- intent: { kind: "review", action: command.reviewAction },
319
- });
320
- if (!transition.allowed) {
321
- const lines = [
322
- "⚠️ review 状态校验未通过",
323
- `${statusIcon(metadata.status)} ${metadata.title}`,
324
- `task_id: ${metadata.id}`,
325
- `当前状态: ${transition.fromStatus} | 目标状态: ${transition.toStatus}`,
326
- `原因: ${transition.reason}`,
327
- `下一步: ${transition.nextAction}`,
328
- ];
329
- if (metadata.detailError) {
330
- lines.push(`任务元数据补充失败:${metadata.detailError}`);
331
- }
332
- return lines.join("\n");
333
- }
334
- try {
335
- const data = await wttApiRequestJson(ctx, {
336
- method: "POST",
337
- path: `/tasks/${encodeURIComponent(metadata.id)}/review`,
338
- body: {
339
- action: command.reviewAction,
340
- comment: command.comment ?? "",
341
- reviewer: account.agentId || undefined,
342
- },
343
- });
344
- const after = toTaskRuntimeMetadata(metadata.id, data);
345
- return [
346
- "✅ task review 已提交",
347
- `${statusIcon(after.status)} ${after.title}`,
348
- `task_id: ${after.id}`,
349
- `状态迁移: ${transition.fromStatus} -> ${after.status}`,
350
- `action: ${command.reviewAction}`,
351
- `review_comment: ${command.comment?.trim() || "(空)"}`,
352
- ].join("\n");
353
- }
354
- catch (error) {
355
- if (error instanceof WTTApiError && error.code === "ENDPOINT_UNAVAILABLE") {
356
- try {
357
- const patchData = await wttApiRequestJson(ctx, {
358
- method: "PATCH",
359
- path: `/tasks/${encodeURIComponent(metadata.id)}`,
360
- body: {
361
- status: transition.toStatus,
362
- notes: [
363
- `review fallback action=${command.reviewAction}`,
364
- command.comment?.trim() || "(空)",
365
- ].join(" | "),
366
- reviewer: account.agentId || undefined,
367
- },
368
- });
369
- const after = toTaskRuntimeMetadata(metadata.id, patchData);
370
- return [
371
- "✅ task review 已通过 PATCH fallback 提交",
372
- `${statusIcon(after.status)} ${after.title}`,
373
- `task_id: ${after.id}`,
374
- `状态迁移: ${transition.fromStatus} -> ${after.status}`,
375
- `action: ${command.reviewAction}`,
376
- ].join("\n");
377
- }
378
- catch (fallbackError) {
379
- return [
380
- "task review 暂不可用:review API 与 PATCH fallback 均失败。",
381
- `task_id: ${metadata.id}`,
382
- `目标状态: ${transition.toStatus}`,
383
- `fallback_error: ${toErrorMessage(fallbackError)}`,
384
- ].join("\n");
385
- }
386
- }
387
- return formatApiError("task review", error);
388
- }
389
- }
390
- export async function handleTaskCommand(command, ctx) {
391
- const account = normalizeAccountContext(ctx.accountId, ctx.account);
392
- if (!account.hasToken) {
393
- return [
394
- `WTT 账户: ${account.accountId}`,
395
- "无法执行 task 命令:缺少 token。",
396
- "请先执行 @wtt config auto 检查并补齐配置。",
397
- ].join("\n");
398
- }
399
- try {
400
- if (command.action === "list") {
401
- const data = await wttApiRequestJson(ctx, {
402
- method: "GET",
403
- path: "/tasks",
404
- });
405
- return formatTaskList(data);
406
- }
407
- if (command.action === "detail") {
408
- const data = await wttApiRequestJson(ctx, {
409
- method: "GET",
410
- path: `/tasks/${encodeURIComponent(command.taskId)}`,
411
- });
412
- return formatTaskDetail(data, command.taskId);
413
- }
414
- if (command.action === "create") {
415
- const data = await wttApiRequestJson(ctx, {
416
- method: "POST",
417
- path: "/tasks",
418
- body: {
419
- title: command.title,
420
- description: command.description,
421
- created_by: account.agentId || undefined,
422
- },
423
- });
424
- return formatTaskCreateAck(data, command.title);
425
- }
426
- if (command.action === "run") {
427
- return handleTaskRunCommand(command, ctx, account);
428
- }
429
- if (command.action === "review") {
430
- return handleTaskReviewCommand(command, ctx, account);
431
- }
432
- return "不支持的 task 子命令";
433
- }
434
- catch (error) {
435
- return formatApiError("task 命令", error);
436
- }
437
- }
438
- //# sourceMappingURL=task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}