clawconnect-agent 0.1.7 → 0.1.9

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 (199) hide show
  1. package/README.md +70 -30
  2. package/README.zh-CN.md +70 -30
  3. package/dist/commands/pair.d.ts +4 -0
  4. package/dist/commands/pair.js +63 -6
  5. package/dist/commands/pair.js.map +1 -1
  6. package/dist/commands/run.js +1 -1
  7. package/dist/commands/run.js.map +1 -1
  8. package/dist/commands/send-file.d.ts +2 -25
  9. package/dist/commands/send-file.js +22 -455
  10. package/dist/commands/send-file.js.map +1 -1
  11. package/dist/core/command-types.d.ts +18 -0
  12. package/dist/core/command-types.js +2 -0
  13. package/dist/core/command-types.js.map +1 -0
  14. package/dist/core/relay/attachment-staging.js.map +1 -0
  15. package/dist/{relay → core/relay}/chat-payload.js +17 -3
  16. package/dist/core/relay/chat-payload.js.map +1 -0
  17. package/dist/{commands/send-file-utils.js → core/relay/file-upload-utils.js} +1 -1
  18. package/dist/core/relay/file-upload-utils.js.map +1 -0
  19. package/dist/core/relay/file-upload.d.ts +40 -0
  20. package/dist/core/relay/file-upload.js +401 -0
  21. package/dist/core/relay/file-upload.js.map +1 -0
  22. package/dist/core/relay/mobile-chat-run-bridge.d.ts +201 -0
  23. package/dist/core/relay/mobile-chat-run-bridge.js +192 -0
  24. package/dist/core/relay/mobile-chat-run-bridge.js.map +1 -0
  25. package/dist/core/relay/office-payload.js.map +1 -0
  26. package/dist/core/relay/reconnect.js.map +1 -0
  27. package/dist/core/relay/relay-server-connection.d.ts +6 -0
  28. package/dist/core/relay/relay-server-connection.js +32 -0
  29. package/dist/core/relay/relay-server-connection.js.map +1 -0
  30. package/dist/{relay/slash-command-catalog.d.ts → core/relay/slash-command-types.d.ts} +0 -1
  31. package/dist/core/relay/slash-command-types.js +2 -0
  32. package/dist/core/relay/slash-command-types.js.map +1 -0
  33. package/dist/core/relay/timeline-event-builder.d.ts +86 -0
  34. package/dist/core/relay/timeline-event-builder.js +199 -0
  35. package/dist/core/relay/timeline-event-builder.js.map +1 -0
  36. package/dist/core/relay/timeline-event-log.d.ts +81 -0
  37. package/dist/core/relay/timeline-event-log.js +254 -0
  38. package/dist/core/relay/timeline-event-log.js.map +1 -0
  39. package/dist/{relay → core/relay}/voice-input.js +5 -3
  40. package/dist/core/relay/voice-input.js.map +1 -0
  41. package/dist/hermes/hermes-relay-manager.d.ts +14 -4
  42. package/dist/hermes/hermes-relay-manager.js +159 -41
  43. package/dist/hermes/hermes-relay-manager.js.map +1 -1
  44. package/dist/hermes/hermes-runtime.d.ts +9 -8
  45. package/dist/hermes/hermes-runtime.js +8 -7
  46. package/dist/hermes/hermes-runtime.js.map +1 -1
  47. package/dist/hermes/hermes-session-store.js +52 -30
  48. package/dist/hermes/hermes-session-store.js.map +1 -1
  49. package/dist/hermes/hermes-voice-input.js +1 -1
  50. package/dist/hermes/hermes-voice-input.js.map +1 -1
  51. package/dist/hermes/runtime/hermes-runtime-artifacts.js.map +1 -0
  52. package/dist/hermes/{models → runtime}/hermes-runtime-backups.d.ts +1 -1
  53. package/dist/hermes/runtime/hermes-runtime-backups.js.map +1 -0
  54. package/dist/hermes/{models → runtime}/hermes-runtime-chat.d.ts +2 -1
  55. package/dist/hermes/{models → runtime}/hermes-runtime-chat.js +127 -27
  56. package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -0
  57. package/dist/hermes/{models → runtime}/hermes-runtime-command-router.d.ts +1 -1
  58. package/dist/hermes/{models → runtime}/hermes-runtime-command-router.js +3 -0
  59. package/dist/hermes/runtime/hermes-runtime-command-router.js.map +1 -0
  60. package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.d.ts +1 -1
  61. package/dist/hermes/runtime/hermes-runtime-command-utils.js.map +1 -0
  62. package/dist/hermes/{models → runtime}/hermes-runtime-cron.d.ts +1 -1
  63. package/dist/hermes/runtime/hermes-runtime-cron.js.map +1 -0
  64. package/dist/hermes/runtime/hermes-runtime-history.d.ts +2 -0
  65. package/dist/hermes/runtime/hermes-runtime-history.js +249 -0
  66. package/dist/hermes/runtime/hermes-runtime-history.js.map +1 -0
  67. package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.d.ts +1 -1
  68. package/dist/hermes/runtime/hermes-runtime-lifecycle.js.map +1 -0
  69. package/dist/hermes/{models → runtime}/hermes-runtime-models.d.ts +1 -1
  70. package/dist/hermes/runtime/hermes-runtime-models.js.map +1 -0
  71. package/dist/hermes/{models → runtime}/hermes-runtime-process.d.ts +2 -0
  72. package/dist/hermes/{models → runtime}/hermes-runtime-process.js +19 -2
  73. package/dist/hermes/runtime/hermes-runtime-process.js.map +1 -0
  74. package/dist/hermes/{models → runtime}/hermes-runtime-sessions.d.ts +1 -1
  75. package/dist/hermes/{models → runtime}/hermes-runtime-sessions.js +26 -9
  76. package/dist/hermes/runtime/hermes-runtime-sessions.js.map +1 -0
  77. package/dist/hermes/{models → runtime}/hermes-runtime-skills.d.ts +1 -1
  78. package/dist/hermes/runtime/hermes-runtime-skills.js.map +1 -0
  79. package/dist/hermes/runtime/hermes-runtime-types.js.map +1 -0
  80. package/dist/hermes/runtime/hermes-runtime-usage.js.map +1 -0
  81. package/dist/hermes/runtime/hermes-runtime-values.js.map +1 -0
  82. package/dist/index.js +28 -3
  83. package/dist/index.js.map +1 -1
  84. package/dist/openclaw/backups/backup-manager.js.map +1 -0
  85. package/dist/{commands → openclaw/config}/provider-config.js +1 -1
  86. package/dist/openclaw/config/provider-config.js.map +1 -0
  87. package/dist/openclaw/config/provider-registry.js.map +1 -0
  88. package/dist/openclaw/gateway-client.js.map +1 -0
  89. package/dist/{commands → openclaw/handlers}/local-handlers.d.ts +1 -1
  90. package/dist/{commands → openclaw/handlers}/local-handlers.js +2 -2
  91. package/dist/openclaw/handlers/local-handlers.js.map +1 -0
  92. package/dist/{commands → openclaw/handlers}/provider-handlers.d.ts +1 -1
  93. package/dist/{commands → openclaw/handlers}/provider-handlers.js +3 -3
  94. package/dist/openclaw/handlers/provider-handlers.js.map +1 -0
  95. package/dist/openclaw/relay/chat-history.d.ts +51 -0
  96. package/dist/openclaw/relay/chat-history.js +347 -0
  97. package/dist/openclaw/relay/chat-history.js.map +1 -0
  98. package/dist/{relay → openclaw/relay}/chat-send-attachments.js +12 -1
  99. package/dist/openclaw/relay/chat-send-attachments.js.map +1 -0
  100. package/dist/{relay → openclaw/relay}/openclaw-voice-input.js +1 -1
  101. package/dist/openclaw/relay/openclaw-voice-input.js.map +1 -0
  102. package/dist/openclaw/relay/outgoing-media-relay.d.ts +11 -0
  103. package/dist/openclaw/relay/outgoing-media-relay.js +120 -0
  104. package/dist/openclaw/relay/outgoing-media-relay.js.map +1 -0
  105. package/dist/{relay → openclaw/relay}/session-context.d.ts +6 -0
  106. package/dist/{relay → openclaw/relay}/session-context.js +42 -2
  107. package/dist/openclaw/relay/session-context.js.map +1 -0
  108. package/dist/openclaw/relay/slash-command-catalog.d.ts +2 -0
  109. package/dist/openclaw/relay/slash-command-catalog.generated.js.map +1 -0
  110. package/dist/openclaw/relay/slash-command-catalog.js.map +1 -0
  111. package/dist/openclaw/relay/transcript-dedupe.d.ts +21 -0
  112. package/dist/openclaw/relay/transcript-dedupe.js +211 -0
  113. package/dist/openclaw/relay/transcript-dedupe.js.map +1 -0
  114. package/dist/{relay → openclaw}/relay-manager.d.ts +1 -1
  115. package/dist/{relay → openclaw}/relay-manager.js +373 -99
  116. package/dist/openclaw/relay-manager.js.map +1 -0
  117. package/dist/{commands → openclaw/runtime}/local-runtime.d.ts +1 -17
  118. package/dist/openclaw/runtime/local-runtime.js.map +1 -0
  119. package/dist/openclaw/session-store.d.ts +1 -0
  120. package/dist/openclaw/session-store.js +70 -0
  121. package/dist/openclaw/session-store.js.map +1 -0
  122. package/dist/runtime-adapters.js +1 -1
  123. package/dist/runtime-adapters.js.map +1 -1
  124. package/package.json +2 -2
  125. package/dist/commands/backup-manager.js.map +0 -1
  126. package/dist/commands/local-handlers.js.map +0 -1
  127. package/dist/commands/local-runtime.js.map +0 -1
  128. package/dist/commands/provider-config.js.map +0 -1
  129. package/dist/commands/provider-handlers.js.map +0 -1
  130. package/dist/commands/provider-registry.js.map +0 -1
  131. package/dist/commands/send-file-utils.js.map +0 -1
  132. package/dist/hermes/models/hermes-runtime-artifacts.js.map +0 -1
  133. package/dist/hermes/models/hermes-runtime-backups.js.map +0 -1
  134. package/dist/hermes/models/hermes-runtime-chat.js.map +0 -1
  135. package/dist/hermes/models/hermes-runtime-command-router.js.map +0 -1
  136. package/dist/hermes/models/hermes-runtime-command-utils.js.map +0 -1
  137. package/dist/hermes/models/hermes-runtime-cron.js.map +0 -1
  138. package/dist/hermes/models/hermes-runtime-lifecycle.js.map +0 -1
  139. package/dist/hermes/models/hermes-runtime-models.js.map +0 -1
  140. package/dist/hermes/models/hermes-runtime-process.js.map +0 -1
  141. package/dist/hermes/models/hermes-runtime-sessions.js.map +0 -1
  142. package/dist/hermes/models/hermes-runtime-skills.js.map +0 -1
  143. package/dist/hermes/models/hermes-runtime-types.js.map +0 -1
  144. package/dist/hermes/models/hermes-runtime-usage.js.map +0 -1
  145. package/dist/hermes/models/hermes-runtime-values.js.map +0 -1
  146. package/dist/relay/attachment-staging.js.map +0 -1
  147. package/dist/relay/chat-history.d.ts +0 -29
  148. package/dist/relay/chat-history.js +0 -87
  149. package/dist/relay/chat-history.js.map +0 -1
  150. package/dist/relay/chat-payload.js.map +0 -1
  151. package/dist/relay/chat-send-attachments.js.map +0 -1
  152. package/dist/relay/gateway-client.js.map +0 -1
  153. package/dist/relay/mobile-chat-run-bridge.d.ts +0 -93
  154. package/dist/relay/mobile-chat-run-bridge.js +0 -68
  155. package/dist/relay/mobile-chat-run-bridge.js.map +0 -1
  156. package/dist/relay/office-payload.js.map +0 -1
  157. package/dist/relay/openclaw-voice-input.js.map +0 -1
  158. package/dist/relay/reconnect.js.map +0 -1
  159. package/dist/relay/relay-manager.js.map +0 -1
  160. package/dist/relay/session-context.js.map +0 -1
  161. package/dist/relay/slash-command-catalog.generated.js.map +0 -1
  162. package/dist/relay/slash-command-catalog.js.map +0 -1
  163. package/dist/relay/voice-input.js.map +0 -1
  164. /package/dist/{relay → core/relay}/attachment-staging.d.ts +0 -0
  165. /package/dist/{relay → core/relay}/attachment-staging.js +0 -0
  166. /package/dist/{relay → core/relay}/chat-payload.d.ts +0 -0
  167. /package/dist/{commands/send-file-utils.d.ts → core/relay/file-upload-utils.d.ts} +0 -0
  168. /package/dist/{relay → core/relay}/office-payload.d.ts +0 -0
  169. /package/dist/{relay → core/relay}/office-payload.js +0 -0
  170. /package/dist/{relay → core/relay}/reconnect.d.ts +0 -0
  171. /package/dist/{relay → core/relay}/reconnect.js +0 -0
  172. /package/dist/{relay → core/relay}/voice-input.d.ts +0 -0
  173. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.d.ts +0 -0
  174. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.js +0 -0
  175. /package/dist/hermes/{models → runtime}/hermes-runtime-backups.js +0 -0
  176. /package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.js +0 -0
  177. /package/dist/hermes/{models → runtime}/hermes-runtime-cron.js +0 -0
  178. /package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.js +0 -0
  179. /package/dist/hermes/{models → runtime}/hermes-runtime-models.js +0 -0
  180. /package/dist/hermes/{models → runtime}/hermes-runtime-skills.js +0 -0
  181. /package/dist/hermes/{models → runtime}/hermes-runtime-types.d.ts +0 -0
  182. /package/dist/hermes/{models → runtime}/hermes-runtime-types.js +0 -0
  183. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.d.ts +0 -0
  184. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.js +0 -0
  185. /package/dist/hermes/{models → runtime}/hermes-runtime-values.d.ts +0 -0
  186. /package/dist/hermes/{models → runtime}/hermes-runtime-values.js +0 -0
  187. /package/dist/{commands → openclaw/backups}/backup-manager.d.ts +0 -0
  188. /package/dist/{commands → openclaw/backups}/backup-manager.js +0 -0
  189. /package/dist/{commands → openclaw/config}/provider-config.d.ts +0 -0
  190. /package/dist/{commands → openclaw/config}/provider-registry.d.ts +0 -0
  191. /package/dist/{commands → openclaw/config}/provider-registry.js +0 -0
  192. /package/dist/{relay → openclaw}/gateway-client.d.ts +0 -0
  193. /package/dist/{relay → openclaw}/gateway-client.js +0 -0
  194. /package/dist/{relay → openclaw/relay}/chat-send-attachments.d.ts +0 -0
  195. /package/dist/{relay → openclaw/relay}/openclaw-voice-input.d.ts +0 -0
  196. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.d.ts +0 -0
  197. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.js +0 -0
  198. /package/dist/{relay → openclaw/relay}/slash-command-catalog.js +0 -0
  199. /package/dist/{commands → openclaw/runtime}/local-runtime.js +0 -0
@@ -0,0 +1,81 @@
1
+ export declare const CANONICAL_TIMELINE_PROTOCOL_VERSION: 2;
2
+ export type TimelineEventType = "turn.user.created" | "message.part.delta" | "message.completed" | "run.completed" | "run.failed" | "run.aborted" | "history.snapshot.page" | "attachment.state.changed" | "tool.invocation.updated";
3
+ export type TimelineRole = "user" | "assistant" | "tool" | "system";
4
+ export type TimelineMessageState = "pending" | "streaming" | "completed" | "failed" | "aborted";
5
+ export type TimelineRunState = "inactive" | "active" | "completed" | "failed" | "aborted";
6
+ export type TimelineSource = "local" | "live" | "history" | "relay-legacy";
7
+ export type AttachmentState = "local_pending" | "uploading" | "uploaded" | "linked" | "available" | "expired" | "failed";
8
+ export type ToolState = "pending_approval" | "approved" | "denied" | "running" | "streaming_output" | "success" | "failed" | "cancelled";
9
+ export type TimelineContentBlock = Record<string, unknown> & {
10
+ type: string;
11
+ };
12
+ export type TimelineAttachment = Record<string, unknown> & {
13
+ attachmentId: string;
14
+ state: AttachmentState;
15
+ };
16
+ export type TimelineError = Record<string, unknown> & {
17
+ userMessage?: string;
18
+ code?: string;
19
+ };
20
+ export type CanonicalTimelineEvent = {
21
+ protocolVersion: 2;
22
+ eventId: string;
23
+ eventType: TimelineEventType;
24
+ gatewayId: string;
25
+ sessionKey: string;
26
+ turnId: string;
27
+ runId: string;
28
+ messageId: string;
29
+ partId: string;
30
+ attachmentId: string | null;
31
+ seq: number;
32
+ turnSeq: number;
33
+ role: TimelineRole;
34
+ messageState: TimelineMessageState;
35
+ runState: TimelineRunState;
36
+ createdAt: string;
37
+ source: TimelineSource;
38
+ content: TimelineContentBlock[];
39
+ attachment: TimelineAttachment | null;
40
+ error: TimelineError | null;
41
+ toolInvocationId?: string;
42
+ toolState?: ToolState;
43
+ extensions?: Record<string, unknown>;
44
+ };
45
+ export type TimelineHistoryMessage = {
46
+ turnId: string;
47
+ messageId: string;
48
+ role: TimelineRole;
49
+ messageState: TimelineMessageState;
50
+ createdAt: string;
51
+ content: TimelineContentBlock[];
52
+ partId?: string;
53
+ runId?: string;
54
+ };
55
+ export type CanonicalTimelineHistorySnapshotPage = {
56
+ protocolVersion: 2;
57
+ eventType: "history.snapshot.page";
58
+ gatewayId: string;
59
+ sessionKey: string;
60
+ source: TimelineSource;
61
+ cursor: string | null;
62
+ hasMore: boolean;
63
+ nextCursor: string | null;
64
+ newestCursor: string | null;
65
+ messages: TimelineHistoryMessage[];
66
+ attachments: TimelineAttachment[];
67
+ extensions?: Record<string, unknown>;
68
+ };
69
+ export declare function parseCanonicalTimelineEvent(input: unknown): CanonicalTimelineEvent;
70
+ export declare function isCanonicalTimelineEvent(input: unknown): input is CanonicalTimelineEvent;
71
+ export declare function parseCanonicalTimelineHistorySnapshotPage(input: unknown): CanonicalTimelineHistorySnapshotPage;
72
+ export declare function createTimelineIdempotencyTracker(): {
73
+ acceptEvent(input: Pick<CanonicalTimelineEvent, "eventId">): {
74
+ accepted: boolean;
75
+ reason?: string;
76
+ };
77
+ acceptPartSeq(input: Pick<CanonicalTimelineEvent, "messageId" | "partId" | "seq">): {
78
+ accepted: boolean;
79
+ reason?: string;
80
+ };
81
+ };
@@ -0,0 +1,254 @@
1
+ export const CANONICAL_TIMELINE_PROTOCOL_VERSION = 2;
2
+ const eventTypes = new Set([
3
+ "turn.user.created",
4
+ "message.part.delta",
5
+ "message.completed",
6
+ "run.completed",
7
+ "run.failed",
8
+ "run.aborted",
9
+ "history.snapshot.page",
10
+ "attachment.state.changed",
11
+ "tool.invocation.updated",
12
+ ]);
13
+ const roles = new Set(["user", "assistant", "tool", "system"]);
14
+ const messageStates = new Set([
15
+ "pending",
16
+ "streaming",
17
+ "completed",
18
+ "failed",
19
+ "aborted",
20
+ ]);
21
+ const runStates = new Set([
22
+ "inactive",
23
+ "active",
24
+ "completed",
25
+ "failed",
26
+ "aborted",
27
+ ]);
28
+ const sources = new Set(["local", "live", "history", "relay-legacy"]);
29
+ const canonicalEventFields = new Set([
30
+ "protocolVersion",
31
+ "eventId",
32
+ "eventType",
33
+ "gatewayId",
34
+ "sessionKey",
35
+ "turnId",
36
+ "runId",
37
+ "messageId",
38
+ "partId",
39
+ "attachmentId",
40
+ "seq",
41
+ "turnSeq",
42
+ "role",
43
+ "messageState",
44
+ "runState",
45
+ "createdAt",
46
+ "source",
47
+ "content",
48
+ "attachment",
49
+ "error",
50
+ "toolInvocationId",
51
+ "toolState",
52
+ ]);
53
+ const historyPageFields = new Set([
54
+ "protocolVersion",
55
+ "eventType",
56
+ "gatewayId",
57
+ "sessionKey",
58
+ "source",
59
+ "cursor",
60
+ "hasMore",
61
+ "nextCursor",
62
+ "newestCursor",
63
+ "messages",
64
+ "attachments",
65
+ ]);
66
+ function isRecord(value) {
67
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
68
+ }
69
+ function requiredString(record, field) {
70
+ const value = record[field];
71
+ if (typeof value !== "string" || value.length === 0) {
72
+ throw new Error(`Invalid canonical timeline event: missing ${field}`);
73
+ }
74
+ return value;
75
+ }
76
+ function requiredNumber(record, field) {
77
+ const value = record[field];
78
+ if (typeof value !== "number" || !Number.isFinite(value)) {
79
+ throw new Error(`Invalid canonical timeline event: missing ${field}`);
80
+ }
81
+ return value;
82
+ }
83
+ function parseContentBlocks(value) {
84
+ if (!Array.isArray(value)) {
85
+ throw new Error("Invalid canonical timeline event: content must be an array");
86
+ }
87
+ return value.map((block) => {
88
+ if (!isRecord(block) || typeof block.type !== "string" || block.type.length === 0) {
89
+ throw new Error("Invalid canonical timeline event: content block requires type");
90
+ }
91
+ return { ...block, type: block.type };
92
+ });
93
+ }
94
+ function parseNullableRecord(value, field) {
95
+ if (value === undefined || value === null) {
96
+ return null;
97
+ }
98
+ if (!isRecord(value)) {
99
+ throw new Error(`Invalid canonical timeline event: ${field} must be an object or null`);
100
+ }
101
+ return value;
102
+ }
103
+ function collectExtensions(record, knownFields) {
104
+ const extensions = {};
105
+ for (const [key, value] of Object.entries(record)) {
106
+ if (!knownFields.has(key)) {
107
+ extensions[key] = value;
108
+ }
109
+ }
110
+ return Object.keys(extensions).length > 0 ? extensions : undefined;
111
+ }
112
+ export function parseCanonicalTimelineEvent(input) {
113
+ if (!isRecord(input)) {
114
+ throw new Error("Invalid canonical timeline event: expected object");
115
+ }
116
+ if (input.protocolVersion !== CANONICAL_TIMELINE_PROTOCOL_VERSION) {
117
+ throw new Error("Invalid canonical timeline event: protocolVersion must be 2");
118
+ }
119
+ const eventType = requiredString(input, "eventType");
120
+ if (!eventTypes.has(eventType)) {
121
+ throw new Error(`Invalid canonical timeline event: unsupported eventType ${eventType}`);
122
+ }
123
+ const role = requiredString(input, "role");
124
+ if (!roles.has(role)) {
125
+ throw new Error(`Invalid canonical timeline event: unsupported role ${role}`);
126
+ }
127
+ const messageState = requiredString(input, "messageState");
128
+ if (!messageStates.has(messageState)) {
129
+ throw new Error(`Invalid canonical timeline event: unsupported messageState ${messageState}`);
130
+ }
131
+ const runState = requiredString(input, "runState");
132
+ if (!runStates.has(runState)) {
133
+ throw new Error(`Invalid canonical timeline event: unsupported runState ${runState}`);
134
+ }
135
+ const source = requiredString(input, "source");
136
+ if (!sources.has(source)) {
137
+ throw new Error(`Invalid canonical timeline event: unsupported source ${source}`);
138
+ }
139
+ return {
140
+ protocolVersion: CANONICAL_TIMELINE_PROTOCOL_VERSION,
141
+ eventId: requiredString(input, "eventId"),
142
+ eventType,
143
+ gatewayId: requiredString(input, "gatewayId"),
144
+ sessionKey: requiredString(input, "sessionKey"),
145
+ turnId: requiredString(input, "turnId"),
146
+ runId: requiredString(input, "runId"),
147
+ messageId: requiredString(input, "messageId"),
148
+ partId: requiredString(input, "partId"),
149
+ attachmentId: input.attachmentId === undefined || input.attachmentId === null
150
+ ? null
151
+ : requiredString(input, "attachmentId"),
152
+ seq: requiredNumber(input, "seq"),
153
+ turnSeq: requiredNumber(input, "turnSeq"),
154
+ role,
155
+ messageState,
156
+ runState,
157
+ createdAt: requiredString(input, "createdAt"),
158
+ source,
159
+ content: parseContentBlocks(input.content),
160
+ attachment: parseNullableRecord(input.attachment, "attachment"),
161
+ error: parseNullableRecord(input.error, "error"),
162
+ ...(typeof input.toolInvocationId === "string" ? { toolInvocationId: input.toolInvocationId } : {}),
163
+ ...(typeof input.toolState === "string" ? { toolState: input.toolState } : {}),
164
+ ...(collectExtensions(input, canonicalEventFields)
165
+ ? { extensions: collectExtensions(input, canonicalEventFields) }
166
+ : {}),
167
+ };
168
+ }
169
+ export function isCanonicalTimelineEvent(input) {
170
+ try {
171
+ parseCanonicalTimelineEvent(input);
172
+ return true;
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ }
178
+ function parseHistoryMessage(input) {
179
+ if (!isRecord(input)) {
180
+ throw new Error("Invalid canonical history snapshot page: message must be an object");
181
+ }
182
+ const role = requiredString(input, "role");
183
+ const messageState = requiredString(input, "messageState");
184
+ if (!roles.has(role) || !messageStates.has(messageState)) {
185
+ throw new Error("Invalid canonical history snapshot page: invalid message role/state");
186
+ }
187
+ return {
188
+ turnId: requiredString(input, "turnId"),
189
+ messageId: requiredString(input, "messageId"),
190
+ role,
191
+ messageState,
192
+ createdAt: requiredString(input, "createdAt"),
193
+ content: parseContentBlocks(input.content),
194
+ ...(typeof input.partId === "string" ? { partId: input.partId } : {}),
195
+ ...(typeof input.runId === "string" ? { runId: input.runId } : {}),
196
+ };
197
+ }
198
+ export function parseCanonicalTimelineHistorySnapshotPage(input) {
199
+ if (!isRecord(input)) {
200
+ throw new Error("Invalid canonical history snapshot page: expected object");
201
+ }
202
+ if (input.protocolVersion !== CANONICAL_TIMELINE_PROTOCOL_VERSION) {
203
+ throw new Error("Invalid canonical history snapshot page: protocolVersion must be 2");
204
+ }
205
+ if (input.eventType !== "history.snapshot.page") {
206
+ throw new Error("Invalid canonical history snapshot page: eventType must be history.snapshot.page");
207
+ }
208
+ const source = requiredString(input, "source");
209
+ if (!sources.has(source)) {
210
+ throw new Error(`Invalid canonical history snapshot page: unsupported source ${source}`);
211
+ }
212
+ if (!Array.isArray(input.messages)) {
213
+ throw new Error("Invalid canonical history snapshot page: messages must be an array");
214
+ }
215
+ const attachments = Array.isArray(input.attachments) ? input.attachments : [];
216
+ return {
217
+ protocolVersion: CANONICAL_TIMELINE_PROTOCOL_VERSION,
218
+ eventType: "history.snapshot.page",
219
+ gatewayId: requiredString(input, "gatewayId"),
220
+ sessionKey: requiredString(input, "sessionKey"),
221
+ source,
222
+ cursor: typeof input.cursor === "string" ? input.cursor : null,
223
+ hasMore: Boolean(input.hasMore),
224
+ nextCursor: typeof input.nextCursor === "string" ? input.nextCursor : null,
225
+ newestCursor: typeof input.newestCursor === "string" ? input.newestCursor : null,
226
+ messages: input.messages.map(parseHistoryMessage),
227
+ attachments: attachments.filter(isRecord),
228
+ ...(collectExtensions(input, historyPageFields)
229
+ ? { extensions: collectExtensions(input, historyPageFields) }
230
+ : {}),
231
+ };
232
+ }
233
+ export function createTimelineIdempotencyTracker() {
234
+ const eventIds = new Set();
235
+ const partSeqKeys = new Set();
236
+ return {
237
+ acceptEvent(input) {
238
+ if (eventIds.has(input.eventId)) {
239
+ return { accepted: false, reason: "duplicate_event_id" };
240
+ }
241
+ eventIds.add(input.eventId);
242
+ return { accepted: true };
243
+ },
244
+ acceptPartSeq(input) {
245
+ const key = `${input.messageId}\u0000${input.partId}\u0000${input.seq}`;
246
+ if (partSeqKeys.has(key)) {
247
+ return { accepted: false, reason: "duplicate_part_seq" };
248
+ }
249
+ partSeqKeys.add(key);
250
+ return { accepted: true };
251
+ },
252
+ };
253
+ }
254
+ //# sourceMappingURL=timeline-event-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-event-log.js","sourceRoot":"","sources":["../../../src/core/relay/timeline-event-log.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export async function prepareVoiceSendParams(rawParams, options = {}) {
16
16
  if (!audio.mimeType.toLowerCase().startsWith("audio/")) {
17
17
  throw new Error("voice_audio_required");
18
18
  }
19
- const languageHint = stringValue(record.languageHint);
19
+ const languageHint = stringValue(record.languageHint) ?? stringValue(record.language);
20
20
  const stagingRoot = options.stagingDir ?? await mkdtemp(join(tmpdir(), "clawconnect-voice-input-"));
21
21
  await mkdir(stagingRoot, { recursive: true });
22
22
  const audioPath = join(stagingRoot, resolveVoiceAudioFileName(audio));
@@ -38,6 +38,7 @@ export async function prepareVoiceSendParams(rawParams, options = {}) {
38
38
  };
39
39
  delete next.audio;
40
40
  delete next.languageHint;
41
+ delete next.language;
41
42
  delete next.attachments;
42
43
  return next;
43
44
  }
@@ -49,11 +50,12 @@ export function voiceInputSetupMessage(error) {
49
50
  return [
50
51
  "未安装语音输入技能,暂时不能使用语音对话。",
51
52
  "安装路径:ClawLink → 技能扩展 → 语音转文字(SenseVoice int8)→ 安装。",
52
- "安装完成后会写入 OPENCLAW_ASR_COMMAND,然后重启 ClawConnect 再试。",
53
+ "安装完成后会写入 CLAWCONNECT_ASR_COMMAND;旧版 OPENCLAW_ASR_COMMAND 仍兼容。然后重启 ClawConnect 再试。",
53
54
  ].join("\n");
54
55
  }
55
56
  async function transcribeAudioWithConfiguredCommand(opts) {
56
- const command = process.env.OPENCLAW_ASR_COMMAND?.trim();
57
+ const command = process.env.CLAWCONNECT_ASR_COMMAND?.trim()
58
+ || process.env.OPENCLAW_ASR_COMMAND?.trim();
57
59
  if (!command) {
58
60
  throw new Error("voice_asr_not_configured");
59
61
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-input.js","sourceRoot":"","sources":["../../../src/core/relay/voice-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAmBvC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAkB,EAClB,UAAkC,EAAE;IAEpC,MAAM,MAAM,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACpF,CAAC,CAAC,EAAE,GAAI,SAAqC,EAAE;QAC/C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACpG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEjE,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,IAAI,oCAAoC,CAAC;IAC5F,MAAM,UAAU,GAAG,CAAC,MAAM,eAAe,CAAC;QACxC,SAAS;QACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY;KACb,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/E,MAAM,IAAI,GAA4B;QACpC,GAAG,MAAM;QACT,OAAO;KACR,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC;IAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IACzB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACrB,OAAO,IAAI,CAAC,WAAW,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,uBAAuB;QACvB,oDAAoD;QACpD,mFAAmF;KACpF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,oCAAoC,CAAC,IAA+B;IACjF,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE;WACxC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO;SACrB,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAChD,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;SAC7D,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;QACzD,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAA+B;IAC/D,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC;IAC3I,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EACxF,QAAQ,CACT,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAwB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IACnE,MAAM,QAAQ,GAAG,cAAc,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAC/C,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,IAAI,EAAE,CAAC;IACV,OAAO,IAAI,IAAI,QAAQ,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC"}
@@ -1,5 +1,10 @@
1
- import type { SendFileCommandOptions } from "../commands/send-file.js";
2
- import type { RelaySlashCommandDescriptor } from "../relay/slash-command-catalog.js";
1
+ import { type FileUploadRequest } from "../core/relay/file-upload.js";
2
+ import type { RelaySlashCommandDescriptor } from "../core/relay/slash-command-types.js";
3
+ import { type MobileChatRun } from "../core/relay/mobile-chat-run-bridge.js";
4
+ export type ActiveHermesChatRun = {
5
+ controller: AbortController;
6
+ run: MobileChatRun;
7
+ };
3
8
  export type HermesRelayHelloMessage = {
4
9
  type: "hello";
5
10
  platform: string;
@@ -38,12 +43,17 @@ export declare function buildHermesRelayHelloMessage(opts: {
38
43
  capabilities?: string[];
39
44
  slashCommands?: readonly RelaySlashCommandDescriptor[];
40
45
  }): HermesRelayHelloMessage;
46
+ export declare function rememberActiveHermesChatRun(activeChatRuns: Map<string, ActiveHermesChatRun>, run: MobileChatRun, params: unknown, requestId: string | undefined, controller: AbortController): void;
47
+ export declare function resolveHermesAbortRun(params: unknown, activeChatRuns: Map<string, ActiveHermesChatRun>): ActiveHermesChatRun | undefined;
48
+ export declare function resolveHermesChatPreferredRunId(params: unknown, voiceInputRun?: MobileChatRun): string | undefined;
41
49
  export declare function runHermesRelayManager(opts: HermesRelayManagerOptions): Promise<boolean>;
42
- export declare function buildHermesArtifactSendOptions(params: {
50
+ export declare function buildHermesArtifactUploadRequest(params: {
43
51
  artifactPath: string;
52
+ relayServerUrl: string;
53
+ relaySecret: string;
44
54
  gatewayId: string;
45
55
  sessionKey: string;
46
56
  runId: string;
47
- }): SendFileCommandOptions;
57
+ }): FileUploadRequest;
48
58
  export declare function shouldPublishHermesOfficeSnapshot(eventName: string | undefined, payload: unknown): boolean;
49
59
  export {};