@cecwxf/wtt 0.1.0

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/bin/openclaw-wtt-bootstrap.mjs +181 -0
  4. package/dist/channel.d.ts +275 -0
  5. package/dist/channel.d.ts.map +1 -0
  6. package/dist/channel.js +2088 -0
  7. package/dist/channel.js.map +1 -0
  8. package/dist/commands/account.d.ts +16 -0
  9. package/dist/commands/account.d.ts.map +1 -0
  10. package/dist/commands/account.js +37 -0
  11. package/dist/commands/account.js.map +1 -0
  12. package/dist/commands/bind.d.ts +3 -0
  13. package/dist/commands/bind.d.ts.map +1 -0
  14. package/dist/commands/bind.js +102 -0
  15. package/dist/commands/bind.js.map +1 -0
  16. package/dist/commands/config.d.ts +3 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js +38 -0
  19. package/dist/commands/config.js.map +1 -0
  20. package/dist/commands/delegate.d.ts +7 -0
  21. package/dist/commands/delegate.d.ts.map +1 -0
  22. package/dist/commands/delegate.js +99 -0
  23. package/dist/commands/delegate.js.map +1 -0
  24. package/dist/commands/formatter.d.ts +8 -0
  25. package/dist/commands/formatter.d.ts.map +1 -0
  26. package/dist/commands/formatter.js +198 -0
  27. package/dist/commands/formatter.js.map +1 -0
  28. package/dist/commands/handlers.d.ts +3 -0
  29. package/dist/commands/handlers.d.ts.map +1 -0
  30. package/dist/commands/handlers.js +79 -0
  31. package/dist/commands/handlers.js.map +1 -0
  32. package/dist/commands/http.d.ts +26 -0
  33. package/dist/commands/http.d.ts.map +1 -0
  34. package/dist/commands/http.js +190 -0
  35. package/dist/commands/http.js.map +1 -0
  36. package/dist/commands/index.d.ts +3 -0
  37. package/dist/commands/index.d.ts.map +1 -0
  38. package/dist/commands/index.js +2 -0
  39. package/dist/commands/index.js.map +1 -0
  40. package/dist/commands/parser.d.ts +5 -0
  41. package/dist/commands/parser.d.ts.map +1 -0
  42. package/dist/commands/parser.js +325 -0
  43. package/dist/commands/parser.js.map +1 -0
  44. package/dist/commands/pipeline.d.ts +7 -0
  45. package/dist/commands/pipeline.d.ts.map +1 -0
  46. package/dist/commands/pipeline.js +99 -0
  47. package/dist/commands/pipeline.js.map +1 -0
  48. package/dist/commands/router.d.ts +18 -0
  49. package/dist/commands/router.d.ts.map +1 -0
  50. package/dist/commands/router.js +74 -0
  51. package/dist/commands/router.js.map +1 -0
  52. package/dist/commands/setup.d.ts +7 -0
  53. package/dist/commands/setup.d.ts.map +1 -0
  54. package/dist/commands/setup.js +89 -0
  55. package/dist/commands/setup.js.map +1 -0
  56. package/dist/commands/task.d.ts +26 -0
  57. package/dist/commands/task.d.ts.map +1 -0
  58. package/dist/commands/task.js +438 -0
  59. package/dist/commands/task.js.map +1 -0
  60. package/dist/commands/types.d.ts +173 -0
  61. package/dist/commands/types.d.ts.map +1 -0
  62. package/dist/commands/types.js +2 -0
  63. package/dist/commands/types.js.map +1 -0
  64. package/dist/e2e-crypto.d.ts +36 -0
  65. package/dist/e2e-crypto.d.ts.map +1 -0
  66. package/dist/e2e-crypto.js +166 -0
  67. package/dist/e2e-crypto.js.map +1 -0
  68. package/dist/index.d.ts +20 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +21 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/plugin-config.d.ts +32 -0
  73. package/dist/plugin-config.d.ts.map +1 -0
  74. package/dist/plugin-config.js +268 -0
  75. package/dist/plugin-config.js.map +1 -0
  76. package/dist/runtime/index.d.ts +13 -0
  77. package/dist/runtime/index.d.ts.map +1 -0
  78. package/dist/runtime/index.js +7 -0
  79. package/dist/runtime/index.js.map +1 -0
  80. package/dist/runtime/progress-ticker.d.ts +65 -0
  81. package/dist/runtime/progress-ticker.d.ts.map +1 -0
  82. package/dist/runtime/progress-ticker.js +116 -0
  83. package/dist/runtime/progress-ticker.js.map +1 -0
  84. package/dist/runtime/session-binding.d.ts +16 -0
  85. package/dist/runtime/session-binding.d.ts.map +1 -0
  86. package/dist/runtime/session-binding.js +20 -0
  87. package/dist/runtime/session-binding.js.map +1 -0
  88. package/dist/runtime/status-transition.d.ts +19 -0
  89. package/dist/runtime/status-transition.d.ts.map +1 -0
  90. package/dist/runtime/status-transition.js +95 -0
  91. package/dist/runtime/status-transition.js.map +1 -0
  92. package/dist/runtime/task-executor-persistence.d.ts +63 -0
  93. package/dist/runtime/task-executor-persistence.d.ts.map +1 -0
  94. package/dist/runtime/task-executor-persistence.js +201 -0
  95. package/dist/runtime/task-executor-persistence.js.map +1 -0
  96. package/dist/runtime/task-executor.d.ts +169 -0
  97. package/dist/runtime/task-executor.d.ts.map +1 -0
  98. package/dist/runtime/task-executor.js +1230 -0
  99. package/dist/runtime/task-executor.js.map +1 -0
  100. package/dist/runtime/task-status-handler.d.ts +28 -0
  101. package/dist/runtime/task-status-handler.d.ts.map +1 -0
  102. package/dist/runtime/task-status-handler.js +102 -0
  103. package/dist/runtime/task-status-handler.js.map +1 -0
  104. package/dist/types.d.ts +159 -0
  105. package/dist/types.d.ts.map +1 -0
  106. package/dist/types.js +6 -0
  107. package/dist/types.js.map +1 -0
  108. package/dist/ws-client.d.ts +90 -0
  109. package/dist/ws-client.d.ts.map +1 -0
  110. package/dist/ws-client.js +385 -0
  111. package/dist/ws-client.js.map +1 -0
  112. package/index.ts +19 -0
  113. package/openclaw.plugin.json +49 -0
  114. package/package.json +62 -0
  115. package/scripts/install-bootstrap-cli.sh +54 -0
@@ -0,0 +1,89 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,438 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAiC,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC;AAS7B,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrF,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAQ,GAAG,GAAG;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,OAAO,CAAC,KAAK;QACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,GAAG,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;QACb,KAAK,UAAU;YACb,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAa;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAExC,MAAM,KAAK,GAAa,CAAC,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAEjD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,MAAM,WAAW,QAAQ,aAAa,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,MAAc;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,oBAAoB,MAAM,GAAG,CAAC;IAEhD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG;QACZ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE;QAChC,OAAO,EAAE,EAAE;QACX,OAAO,MAAM,WAAW,QAAQ,EAAE;QAClC,UAAU,KAAK,cAAc,MAAM,EAAE;QACrC,aAAa,UAAU,aAAa,OAAO,EAAE;KAC9C,CAAC;IAEF,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa,EAAE,KAAa;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,WAAW,KAAK,SAAS,EAAE,EAAE,CAAC;IAC7C,OAAO,WAAW,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,IAAa;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;QAChC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;QACzC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;QAC3C,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QACzC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;QACnD,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;QACrD,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QACxC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9C,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAChD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,MAAc,EAAE,GAA+B;IACtF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;YACxC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE;SAC7C,CAAC,CAAC;QACH,OAAO,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,GAAG;YACjB,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC;SACnC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAA8B;IACnD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,OAAO;QACL,iBAAiB,OAAO,CAAC,IAAI,EAAE;QAC/B,mBAAmB,OAAO,CAAC,MAAM,EAAE;QACnC,8BAA8B,OAAO,CAAC,iBAAiB,EAAE;QACzD,mBAAmB,OAAO,CAAC,MAAM,EAAE;QACnC,kBAAkB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAChF,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,2BAA2B,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA4B;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;IAChC,MAAM,KAAK,GAAG;QACZ,SAAS,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,cAAc,EAAE;QACrD,oBAAoB,IAAI,CAAC,iBAAiB,EAAE;QAC5C,SAAS,IAAI,CAAC,MAAM,EAAE;KACvB,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,IAAI,GAAG,wBAAwB,IAAI,CAAC,eAAe,IAAI,GAAG,EAAE,CAAC,CAAC;QACrG,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAuC,EAAE,MAA8B;IAClG,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;IACnD,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAEtF,MAAM,qBAAqB,GAAG,MAAM,CAAC,iBAAiB,KAAK,cAAc;QACvE,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,MAAM,CAAC,iBAAiB,KAAK,cAAc;YAC3C,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,KAAK,CAAC;IAEZ,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,GAAG,CAAC;QACjD,CAAC,CAAC,sBAAsB,MAAM,CAAC,kBAAkB,IAAI;QACrD,CAAC,CAAC,qBAAqB,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC;IAE7D,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAE1D,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,SAAS,CAAC,SAAS;YACxB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,kBAAkB;QACtB,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE;QAClD,YAAY,QAAQ,CAAC,EAAE,EAAE;QACzB,GAAG,yBAAyB,CAAC,MAAM,CAAC;QACpC,SAAS,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,GAAG;QACzD,gBAAgB,qBAAqB,EAAE;QACvC,SAAS,MAAM,CAAC,WAAW,EAAE;QAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;QACzF,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,gBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,eAAe,MAAM,CAAC,KAAK,CAAC,UAAU,eAAe,MAAM,CAAC,KAAK,CAAC,UAAU,4BAA4B,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;QACjL,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;YAC5B,CAAC,CAAC;gBACA,aAAa,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;aACjL;YACD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,QAAQ;YACjB,CAAC,CAAC,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,aAAa,EAAE;QAC1B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,qBAAqB,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,aAAa,CAAC,MAAM,CAAC;QACxB,sBAAsB,MAAM,CAAC,IAAI,CAAC,OAAO,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;KACpH,CAAC;IAEF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAuC,EAAE,MAA4B;IACrG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,2BAA2B;QAC3B,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE;QAClD,YAAY,QAAQ,CAAC,EAAE,EAAE;QACzB,GAAG,yBAAyB,CAAC,MAAM,CAAC;QACpC,kBAAkB,MAAM,CAAC,aAAa,IAAI,GAAG,mBAAmB,MAAM,CAAC,WAAW,EAAE;QACpF,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;YAC5B,CAAC,CAAC;gBACA,aAAa,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;aACrF;YACD,CAAC,CAAC,EAAE,CAAC;QACP,oCAAoC;KACrC,CAAC;IAEF,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvG,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,MAAM,mBAAmB,GAAG,OAAO,CACjC,OAAO,CAAC,wBAAwB,KAAK,IAAI;WACpC,OAAO;WACP,OAAO,KAAK,GAAG;WACf,OAAO,CAAC,GAAG,CAAC,eAAe;WAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CACxB,CAAC;IAEF,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC;QAC9C,MAAM,EAAE,QAAQ,CAAC,EAAE;QACnB,QAAQ;QACR,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;QAC5C,aAAa,EAAE,QAAQ,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS;QACrG,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,+BAA+B,OAAO,CAAC,SAAS,GAAG;QACzE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;QAChD,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;SAClC;QACD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE;YACtD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;QACF,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;SAClD,CAAC;QACF,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,qBAAqB;YAClE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,qBAAsB,CAAC,OAAO,CAAC;YAC9E,CAAC,CAAC,SAAS;QACb,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,wBAAwB;YAC1E,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,wBAAyB,CAAC;gBAChE,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAChE,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;YACF,CAAC,CAAC,SAAS;QACb,gBAAgB,EAAE,mBAAmB;YACnC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAClB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;oBACvD,WAAW,EAAE,MAAM;oBACnB,YAAY,EAAE,eAAe;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,aAAa;QACb,OAAO;KACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAAgD,EAChD,GAA+B,EAC/B,OAAiC;IAEjC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAkB,CAAC;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;QACH,OAAO;QACP,IAAI,EAAE,+BAA+B,OAAO,CAAC,SAAS,GAAG;QACzD,gBAAgB,EAAE,EAAE;QACpB,wBAAwB,EAAE,IAAI;KAC/B,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAmD,EACnD,GAA+B,EAC/B,OAAmD;IAEnD,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,sBAAsB,CAAC;QACxC,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;KACzD,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG;YACZ,mBAAmB;YACnB,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE;YAClD,YAAY,QAAQ,CAAC,EAAE,EAAE;YACzB,SAAS,UAAU,CAAC,UAAU,YAAY,UAAU,CAAC,QAAQ,EAAE;YAC/D,OAAO,UAAU,CAAC,MAAM,EAAE;YAC1B,QAAQ,UAAU,CAAC,UAAU,EAAE;SAChC,CAAC;QAEF,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,UAAU,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;YACxD,IAAI,EAAE;gBACJ,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;gBAC9B,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO;YACL,mBAAmB;YACnB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5C,YAAY,KAAK,CAAC,EAAE,EAAE;YACtB,SAAS,UAAU,CAAC,UAAU,OAAO,KAAK,CAAC,MAAM,EAAE;YACnD,WAAW,OAAO,CAAC,YAAY,EAAE;YACjC,mBAAmB,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE;SACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;oBAC7C,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,UAAU,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;oBACjD,IAAI,EAAE;wBACJ,MAAM,EAAE,UAAU,CAAC,QAAQ;wBAC3B,KAAK,EAAE;4BACL,0BAA0B,OAAO,CAAC,YAAY,EAAE;4BAChD,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK;yBACjC,CAAC,IAAI,CAAC,KAAK,CAAC;wBACb,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;qBACvC;iBACF,CAAC,CAAC;gBAEH,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC5D,OAAO;oBACL,qCAAqC;oBACrC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;oBAC5C,YAAY,KAAK,CAAC,EAAE,EAAE;oBACtB,SAAS,UAAU,CAAC,UAAU,OAAO,KAAK,CAAC,MAAM,EAAE;oBACnD,WAAW,OAAO,CAAC,YAAY,EAAE;iBAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,OAAO;oBACL,mDAAmD;oBACnD,YAAY,QAAQ,CAAC,EAAE,EAAE;oBACzB,SAAS,UAAU,CAAC,QAAQ,EAAE;oBAC9B,mBAAmB,cAAc,CAAC,aAAa,CAAC,EAAE;iBACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAoB,EAAE,GAA+B;IAC3F,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAEpE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,WAAW,OAAO,CAAC,SAAS,EAAE;YAC9B,wBAAwB;YACxB,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;gBACxC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;gBACxC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;aACrD,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE;gBACxC,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,UAAU,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;iBACzC;aACF,CAAC,CAAC;YACH,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}