@myagentroam/node 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/claude-agent-sdk.d.ts +1 -15
  2. package/dist/claude-agent-sdk.js +9 -77
  3. package/dist/claude-agent-sdk.js.map +1 -1
  4. package/dist/codex-app-server.d.ts +4 -0
  5. package/dist/codex-app-server.js +18 -4
  6. package/dist/codex-app-server.js.map +1 -1
  7. package/dist/connector/node-connector-options.d.ts +23 -0
  8. package/dist/connector/node-connector-options.js +2 -0
  9. package/dist/connector/node-connector-options.js.map +1 -0
  10. package/dist/connector/node-operation-router.d.ts +9 -0
  11. package/dist/connector/node-operation-router.js +23 -0
  12. package/dist/connector/node-operation-router.js.map +1 -0
  13. package/dist/connector.d.ts +59 -356
  14. package/dist/connector.js +611 -6175
  15. package/dist/connector.js.map +1 -1
  16. package/dist/control-outbound-scheduler.d.ts +26 -0
  17. package/dist/control-outbound-scheduler.js +122 -0
  18. package/dist/control-outbound-scheduler.js.map +1 -0
  19. package/dist/database.js +1 -1
  20. package/dist/database.js.map +1 -1
  21. package/dist/native-jsonl-reader.d.ts +14 -0
  22. package/dist/native-jsonl-reader.js +98 -0
  23. package/dist/native-jsonl-reader.js.map +1 -0
  24. package/dist/native-session-history.d.ts +22 -3
  25. package/dist/native-session-history.js +275 -156
  26. package/dist/native-session-history.js.map +1 -1
  27. package/dist/runner/abstract-runner.d.ts +148 -0
  28. package/dist/runner/abstract-runner.js +139 -0
  29. package/dist/runner/abstract-runner.js.map +1 -0
  30. package/dist/runner/claude/managed-run-controller.d.ts +52 -0
  31. package/dist/runner/claude/managed-run-controller.js +307 -0
  32. package/dist/runner/claude/managed-run-controller.js.map +1 -0
  33. package/dist/runner/claude-code-runner.d.ts +68 -0
  34. package/dist/runner/claude-code-runner.js +268 -0
  35. package/dist/runner/claude-code-runner.js.map +1 -0
  36. package/dist/runner/codex/conversation-parser.d.ts +61 -0
  37. package/dist/runner/codex/conversation-parser.js +676 -0
  38. package/dist/runner/codex/conversation-parser.js.map +1 -0
  39. package/dist/runner/codex/managed-run-controller.d.ts +79 -0
  40. package/dist/runner/codex/managed-run-controller.js +379 -0
  41. package/dist/runner/codex/managed-run-controller.js.map +1 -0
  42. package/dist/runner/codex-runner.d.ts +81 -0
  43. package/dist/runner/codex-runner.js +342 -0
  44. package/dist/runner/codex-runner.js.map +1 -0
  45. package/dist/runner/fake-test-runner.d.ts +26 -0
  46. package/dist/runner/fake-test-runner.js +48 -0
  47. package/dist/runner/fake-test-runner.js.map +1 -0
  48. package/dist/runner/runner-registry.d.ts +17 -0
  49. package/dist/runner/runner-registry.js +66 -0
  50. package/dist/runner/runner-registry.js.map +1 -0
  51. package/dist/runner-usage.d.ts +2 -2
  52. package/dist/runner-usage.js +3 -5
  53. package/dist/runner-usage.js.map +1 -1
  54. package/dist/runtime-state.js +6 -5
  55. package/dist/runtime-state.js.map +1 -1
  56. package/dist/service/attachment-domain-state.d.ts +5 -0
  57. package/dist/service/attachment-domain-state.js +6 -0
  58. package/dist/service/attachment-domain-state.js.map +1 -0
  59. package/dist/service/conversation-history-service.d.ts +34 -0
  60. package/dist/service/conversation-history-service.js +159 -0
  61. package/dist/service/conversation-history-service.js.map +1 -0
  62. package/dist/service/external-session-resume-service.d.ts +32 -0
  63. package/dist/service/external-session-resume-service.js +99 -0
  64. package/dist/service/external-session-resume-service.js.map +1 -0
  65. package/dist/service/fake-managed-run-service.d.ts +29 -0
  66. package/dist/service/fake-managed-run-service.js +63 -0
  67. package/dist/service/fake-managed-run-service.js.map +1 -0
  68. package/dist/service/managed-runner-session-service.d.ts +10 -0
  69. package/dist/service/managed-runner-session-service.js +31 -0
  70. package/dist/service/managed-runner-session-service.js.map +1 -0
  71. package/dist/service/native-session-projection-service.d.ts +50 -0
  72. package/dist/service/native-session-projection-service.js +268 -0
  73. package/dist/service/native-session-projection-service.js.map +1 -0
  74. package/dist/service/native-session-watch-service.d.ts +37 -0
  75. package/dist/service/native-session-watch-service.js +151 -0
  76. package/dist/service/native-session-watch-service.js.map +1 -0
  77. package/dist/service/node-connection-lifecycle-service.d.ts +37 -0
  78. package/dist/service/node-connection-lifecycle-service.js +84 -0
  79. package/dist/service/node-connection-lifecycle-service.js.map +1 -0
  80. package/dist/service/node-control-channel.d.ts +32 -0
  81. package/dist/service/node-control-channel.js +84 -0
  82. package/dist/service/node-control-channel.js.map +1 -0
  83. package/dist/service/node-control-message-service.d.ts +28 -0
  84. package/dist/service/node-control-message-service.js +105 -0
  85. package/dist/service/node-control-message-service.js.map +1 -0
  86. package/dist/service/node-request-service.d.ts +14 -0
  87. package/dist/service/node-request-service.js +51 -0
  88. package/dist/service/node-request-service.js.map +1 -0
  89. package/dist/service/node-run-event-bridge.d.ts +38 -0
  90. package/dist/service/node-run-event-bridge.js +80 -0
  91. package/dist/service/node-run-event-bridge.js.map +1 -0
  92. package/dist/service/node-terminal-channel.d.ts +29 -0
  93. package/dist/service/node-terminal-channel.js +176 -0
  94. package/dist/service/node-terminal-channel.js.map +1 -0
  95. package/dist/service/node-workspace-coordinator.d.ts +32 -0
  96. package/dist/service/node-workspace-coordinator.js +81 -0
  97. package/dist/service/node-workspace-coordinator.js.map +1 -0
  98. package/dist/service/run-attachment-service.d.ts +37 -0
  99. package/dist/service/run-attachment-service.js +161 -0
  100. package/dist/service/run-attachment-service.js.map +1 -0
  101. package/dist/service/run-domain-state.d.ts +4 -0
  102. package/dist/service/run-domain-state.js +5 -0
  103. package/dist/service/run-domain-state.js.map +1 -0
  104. package/dist/service/run-event-service.d.ts +31 -0
  105. package/dist/service/run-event-service.js +103 -0
  106. package/dist/service/run-event-service.js.map +1 -0
  107. package/dist/service/run-workbench-service.d.ts +27 -0
  108. package/dist/service/run-workbench-service.js +114 -0
  109. package/dist/service/run-workbench-service.js.map +1 -0
  110. package/dist/service/runner-channel-message-service.d.ts +13 -0
  111. package/dist/service/runner-channel-message-service.js +21 -0
  112. package/dist/service/runner-channel-message-service.js.map +1 -0
  113. package/dist/service/runner-interaction-service.d.ts +40 -0
  114. package/dist/service/runner-interaction-service.js +245 -0
  115. package/dist/service/runner-interaction-service.js.map +1 -0
  116. package/dist/service/runner-service.d.ts +43 -0
  117. package/dist/service/runner-service.js +55 -0
  118. package/dist/service/runner-service.js.map +1 -0
  119. package/dist/service/session-catalog-service.d.ts +30 -0
  120. package/dist/service/session-catalog-service.js +145 -0
  121. package/dist/service/session-catalog-service.js.map +1 -0
  122. package/dist/service/session-command-service.d.ts +23 -0
  123. package/dist/service/session-command-service.js +70 -0
  124. package/dist/service/session-command-service.js.map +1 -0
  125. package/dist/service/session-context-service.d.ts +34 -0
  126. package/dist/service/session-context-service.js +88 -0
  127. package/dist/service/session-context-service.js.map +1 -0
  128. package/dist/service/session-domain-state.d.ts +8 -0
  129. package/dist/service/session-domain-state.js +9 -0
  130. package/dist/service/session-domain-state.js.map +1 -0
  131. package/dist/service/session-identity-service.d.ts +24 -0
  132. package/dist/service/session-identity-service.js +87 -0
  133. package/dist/service/session-identity-service.js.map +1 -0
  134. package/dist/service/session-lifecycle-service.d.ts +31 -0
  135. package/dist/service/session-lifecycle-service.js +236 -0
  136. package/dist/service/session-lifecycle-service.js.map +1 -0
  137. package/dist/service/session-message-service.d.ts +33 -0
  138. package/dist/service/session-message-service.js +158 -0
  139. package/dist/service/session-message-service.js.map +1 -0
  140. package/dist/service/session-presentation-service.d.ts +33 -0
  141. package/dist/service/session-presentation-service.js +37 -0
  142. package/dist/service/session-presentation-service.js.map +1 -0
  143. package/dist/service/session-query-service.d.ts +31 -0
  144. package/dist/service/session-query-service.js +78 -0
  145. package/dist/service/session-query-service.js.map +1 -0
  146. package/dist/service/terminal-relay-state.d.ts +6 -0
  147. package/dist/service/terminal-relay-state.js +4 -0
  148. package/dist/service/terminal-relay-state.js.map +1 -0
  149. package/dist/service/terminal-service.d.ts +12 -0
  150. package/dist/service/terminal-service.js +53 -0
  151. package/dist/service/terminal-service.js.map +1 -0
  152. package/dist/service/workbench-event-service.d.ts +21 -0
  153. package/dist/service/workbench-event-service.js +54 -0
  154. package/dist/service/workbench-event-service.js.map +1 -0
  155. package/dist/service/workbench-manifest-service.d.ts +88 -0
  156. package/dist/service/workbench-manifest-service.js +69 -0
  157. package/dist/service/workbench-manifest-service.js.map +1 -0
  158. package/dist/service/workspace-change-service.d.ts +9 -0
  159. package/dist/service/workspace-change-service.js +86 -0
  160. package/dist/service/workspace-change-service.js.map +1 -0
  161. package/dist/service/workspace-domain-state.d.ts +75 -0
  162. package/dist/service/workspace-domain-state.js +41 -0
  163. package/dist/service/workspace-domain-state.js.map +1 -0
  164. package/dist/service/workspace-file-service.d.ts +14 -0
  165. package/dist/service/workspace-file-service.js +77 -0
  166. package/dist/service/workspace-file-service.js.map +1 -0
  167. package/dist/service/workspace-queue-workbench-service.d.ts +55 -0
  168. package/dist/service/workspace-queue-workbench-service.js +227 -0
  169. package/dist/service/workspace-queue-workbench-service.js.map +1 -0
  170. package/dist/service/workspace-service.d.ts +15 -0
  171. package/dist/service/workspace-service.js +54 -0
  172. package/dist/service/workspace-service.js.map +1 -0
  173. package/dist/service/workspace-session-service.d.ts +23 -0
  174. package/dist/service/workspace-session-service.js +140 -0
  175. package/dist/service/workspace-session-service.js.map +1 -0
  176. package/dist/service/workspace-upload-service.d.ts +37 -0
  177. package/dist/service/workspace-upload-service.js +241 -0
  178. package/dist/service/workspace-upload-service.js.map +1 -0
  179. package/dist/service/workspace-watch-service.d.ts +18 -0
  180. package/dist/service/workspace-watch-service.js +121 -0
  181. package/dist/service/workspace-watch-service.js.map +1 -0
  182. package/dist/service/workspace-workbench-service.d.ts +38 -0
  183. package/dist/service/workspace-workbench-service.js +156 -0
  184. package/dist/service/workspace-workbench-service.js.map +1 -0
  185. package/dist/terminal.d.ts +1 -0
  186. package/dist/terminal.js +1 -1
  187. package/dist/terminal.js.map +1 -1
  188. package/dist/util/node-operation-parsers.d.ts +91 -0
  189. package/dist/util/node-operation-parsers.js +380 -0
  190. package/dist/util/node-operation-parsers.js.map +1 -0
  191. package/dist/util/runner-native-session-parsers.d.ts +72 -0
  192. package/dist/util/runner-native-session-parsers.js +337 -0
  193. package/dist/util/runner-native-session-parsers.js.map +1 -0
  194. package/dist/util/secret-environment.d.ts +1 -0
  195. package/dist/util/secret-environment.js +26 -0
  196. package/dist/util/secret-environment.js.map +1 -0
  197. package/package.json +2 -2
@@ -0,0 +1,380 @@
1
+ import { nodeCapabilitiesSchema } from '@myagentroam/protocol';
2
+ const MAX_COMPOSER_ATTACHMENT_BYTES = 5 * 1024 * 1024;
3
+ const MAX_COMPOSER_ATTACHMENTS_BYTES = 10 * 1024 * 1024;
4
+ const USER_AUTHORIZATION_CLOCK_SKEW_MS = 5_000;
5
+ const NON_IMAGE_ATTACHMENT_PROMPT_PREFIX = '\n\n本轮非图片附件已上传到工作区,请按需读取以下文件:\n';
6
+ const COMPOSER_IMAGE_MIME_TYPES = new Set([
7
+ 'image/png',
8
+ 'image/jpeg',
9
+ 'image/gif',
10
+ 'image/webp'
11
+ ]);
12
+ export const DEFAULT_SESSION_PAGE_SIZE = 10;
13
+ export const MAX_SESSION_PAGE_SIZE = 100;
14
+ export function sessionPage(sessions, input) {
15
+ const limit = typeof input.limit === 'number' &&
16
+ Number.isInteger(input.limit) &&
17
+ input.limit >= 1 &&
18
+ input.limit <= MAX_SESSION_PAGE_SIZE
19
+ ? input.limit
20
+ : DEFAULT_SESSION_PAGE_SIZE;
21
+ const cursor = typeof input.cursor === 'string' ? input.cursor : undefined;
22
+ const ordered = [...sessions].sort(compareSessionPageEntries);
23
+ const cursorEntry = cursor === undefined ? undefined : parseSessionPageCursor(cursor);
24
+ const afterCursor = cursor === undefined
25
+ ? ordered
26
+ : cursorEntry === undefined
27
+ ? []
28
+ : ordered.filter((session) => compareSessionPageEntries(session, cursorEntry) > 0);
29
+ const pinned = ordered.filter((session) => session.pinOrder !== null && session.pinOrder !== undefined);
30
+ const pinnedIndexes = new Map(pinned.map((session, index) => [session.id, index]));
31
+ const page = afterCursor.slice(0, limit).map((session) => {
32
+ const pinIndex = pinnedIndexes.get(session.id);
33
+ if (pinIndex === undefined)
34
+ return session;
35
+ return {
36
+ ...session,
37
+ canMovePinUp: pinIndex > 0,
38
+ canMovePinDown: pinIndex < pinned.length - 1
39
+ };
40
+ });
41
+ const last = page.at(-1);
42
+ return {
43
+ sessions: page,
44
+ nextCursor: last !== undefined && afterCursor.length > page.length ? createSessionPageCursor(last) : null
45
+ };
46
+ }
47
+ export function parseSessionPageCursor(cursor) {
48
+ try {
49
+ const value = JSON.parse(decodeURIComponent(cursor));
50
+ if (!Array.isArray(value) || value.length !== 3)
51
+ return undefined;
52
+ const [pinOrder, lastActivityAt, id] = value;
53
+ if ((pinOrder !== null && (typeof pinOrder !== 'number' || !Number.isFinite(pinOrder))) ||
54
+ (lastActivityAt !== null &&
55
+ (typeof lastActivityAt !== 'number' || !Number.isFinite(lastActivityAt))) ||
56
+ typeof id !== 'string')
57
+ return undefined;
58
+ return {
59
+ id,
60
+ lastActivityAt: lastActivityAt ?? 0,
61
+ pinOrder,
62
+ externalDiscovered: lastActivityAt !== null
63
+ };
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ }
69
+ export function createSessionPageCursor(session) {
70
+ return encodeURIComponent(JSON.stringify([
71
+ session.pinOrder ?? null,
72
+ session.externalDiscovered === false ? null : session.lastActivityAt,
73
+ session.id
74
+ ]));
75
+ }
76
+ export function compareSessionPageEntries(left, right) {
77
+ const leftPinned = left.pinOrder !== null && left.pinOrder !== undefined;
78
+ const rightPinned = right.pinOrder !== null && right.pinOrder !== undefined;
79
+ if (leftPinned !== rightPinned)
80
+ return leftPinned ? -1 : 1;
81
+ if (leftPinned && rightPinned)
82
+ return (left.pinOrder - right.pinOrder || left.id.localeCompare(right.id));
83
+ const leftFound = left.externalDiscovered !== false;
84
+ const rightFound = right.externalDiscovered !== false;
85
+ if (leftFound !== rightFound)
86
+ return leftFound ? -1 : 1;
87
+ return right.lastActivityAt - left.lastActivityAt || left.id.localeCompare(right.id, 'en');
88
+ }
89
+ export function compactRunnerText(value, limit) {
90
+ return value.length <= limit ? value : `${value.slice(0, Math.max(0, limit - 1))}…`;
91
+ }
92
+ export function compactRunnerValue(value, limit) {
93
+ if (value === undefined || value === null)
94
+ return { text: '', truncated: false };
95
+ let text;
96
+ if (typeof value === 'string')
97
+ text = value;
98
+ else {
99
+ try {
100
+ text = JSON.stringify(value);
101
+ }
102
+ catch {
103
+ return { text: '(无法显示)', truncated: false };
104
+ }
105
+ }
106
+ return { text: compactRunnerText(text, limit), truncated: text.length > limit };
107
+ }
108
+ export function codexTimestamp(value) {
109
+ if (typeof value === 'number' && Number.isFinite(value))
110
+ return value < 10_000_000_000 ? value * 1_000 : value;
111
+ if (typeof value === 'string') {
112
+ const timestamp = Date.parse(value);
113
+ return Number.isNaN(timestamp) ? null : timestamp;
114
+ }
115
+ return null;
116
+ }
117
+ export function nativePageEnd(cursor, sessionId, fallback) {
118
+ if (cursor === undefined)
119
+ return fallback;
120
+ try {
121
+ const value = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
122
+ return value.sessionId === sessionId &&
123
+ Number.isInteger(value.end) &&
124
+ value.end >= 0
125
+ ? Math.min(value.end, fallback)
126
+ : fallback;
127
+ }
128
+ catch {
129
+ return fallback;
130
+ }
131
+ }
132
+ export function extractClaudeText(message) {
133
+ return claudeContentBlocks(message)
134
+ .flatMap((block) => block.type === 'text' && typeof block.text === 'string' ? [block.text] : [])
135
+ .join('');
136
+ }
137
+ export function extractClaudeThinkingSummaries(message) {
138
+ return claudeContentBlocks(message).flatMap((block) => {
139
+ // `showThinkingSummaries` asks the SDK/API for exactly these public
140
+ // summaries. Partial raw thinking events are intentionally not read.
141
+ if (block.type !== 'thinking' || typeof block.thinking !== 'string')
142
+ return [];
143
+ const text = compactRunnerText(block.thinking.trim(), 10_000);
144
+ return text.length === 0 ? [] : [text];
145
+ });
146
+ }
147
+ export function extractClaudeToolUses(message) {
148
+ return claudeContentBlocks(message).flatMap((block) => {
149
+ if (block.type !== 'tool_use' || typeof block.id !== 'string' || typeof block.name !== 'string')
150
+ return [];
151
+ const input = block.input;
152
+ const command = isPlainRecord(input) && typeof input.command === 'string' ? input.command : undefined;
153
+ return [
154
+ {
155
+ id: block.id,
156
+ name: block.name,
157
+ input,
158
+ ...(command === undefined ? {} : { command }),
159
+ inputTruncated: compactRunnerValue(input, 10_000).truncated
160
+ }
161
+ ];
162
+ });
163
+ }
164
+ export function extractClaudeToolResults(message) {
165
+ const parentId = typeof message.parent_tool_use_id === 'string' ? message.parent_tool_use_id : null;
166
+ const direct = compactRunnerValue(message.tool_use_result, 10_000);
167
+ if (parentId !== null && direct.text.length > 0)
168
+ return [
169
+ { toolUseId: parentId, output: direct.text, failed: false, truncated: direct.truncated }
170
+ ];
171
+ return claudeContentBlocks(message).flatMap((block) => {
172
+ if (block.type !== 'tool_result' || typeof block.tool_use_id !== 'string')
173
+ return [];
174
+ const result = compactRunnerValue(block.content, 10_000);
175
+ return [
176
+ {
177
+ toolUseId: block.tool_use_id,
178
+ output: result.text,
179
+ failed: block.is_error === true,
180
+ truncated: result.truncated
181
+ }
182
+ ];
183
+ });
184
+ }
185
+ export function claudeContentBlocks(message) {
186
+ const content = message.message;
187
+ if (!isPlainRecord(content) || !Array.isArray(content.content))
188
+ return [];
189
+ return content.content.filter(isPlainRecord);
190
+ }
191
+ export function isClaudeCommandTool(name) {
192
+ return name === 'Bash' || name === 'bash' || name === 'Shell';
193
+ }
194
+ export function nativeClaudeCommand(entry) {
195
+ if (isPlainRecord(entry.input) && typeof entry.input.command === 'string')
196
+ return compactRunnerText(entry.input.command, 10_000);
197
+ return entry.inputSummary ?? entry.toolName;
198
+ }
199
+ export function boundedConversationItemId(prefix, value) {
200
+ const candidate = `${prefix}:${value}`;
201
+ if (candidate.length <= 88)
202
+ return candidate;
203
+ return `${prefix}:${Buffer.from(value)
204
+ .toString('base64url')
205
+ .slice(0, 88 - prefix.length - 1)}`;
206
+ }
207
+ export function validUserAuthorization(value, envelope, operation, nodeId, now = Date.now()) {
208
+ if (typeof value !== 'object' || value === null || nodeId === undefined)
209
+ return false;
210
+ const authorization = value;
211
+ return (typeof authorization.userId === 'number' &&
212
+ Number.isSafeInteger(authorization.userId) &&
213
+ authorization.userId > 0 &&
214
+ typeof authorization.sessionHash === 'string' &&
215
+ /^[A-Za-z0-9_-]{43}$/.test(authorization.sessionHash) &&
216
+ authorization.nodeId === nodeId &&
217
+ authorization.operation === operation &&
218
+ authorization.requestId === envelope.id &&
219
+ typeof authorization.issuedAt === 'number' &&
220
+ typeof authorization.expiresAt === 'number' &&
221
+ Number.isSafeInteger(authorization.issuedAt) &&
222
+ Number.isSafeInteger(authorization.expiresAt) &&
223
+ authorization.issuedAt <= now + USER_AUTHORIZATION_CLOCK_SKEW_MS &&
224
+ authorization.expiresAt >= now - USER_AUTHORIZATION_CLOCK_SKEW_MS &&
225
+ authorization.expiresAt - authorization.issuedAt <= 15_000);
226
+ }
227
+ export function isTerminalRunStatus(status) {
228
+ return (status === 'SUCCEEDED' ||
229
+ status === 'FAILED' ||
230
+ status === 'CANCELLED' ||
231
+ status === 'INTERRUPTED');
232
+ }
233
+ export function validSessionOption(value) {
234
+ return (value === undefined ||
235
+ (typeof value === 'string' && value.trim().length > 0 && value.length <= 120));
236
+ }
237
+ export function validSessionTitle(value) {
238
+ return (value === undefined ||
239
+ (typeof value === 'string' && value.trim().length > 0 && value.length <= 160));
240
+ }
241
+ export function sessionTitleFromFirstMessage(content) {
242
+ return content.trim().replace(/\s+/g, ' ').slice(0, 160);
243
+ }
244
+ export function parseComposerAttachmentUpload(input) {
245
+ if (input.composerAttachmentId === undefined && input.mime === undefined)
246
+ return undefined;
247
+ if (typeof input.composerAttachmentId !== 'string' ||
248
+ !isUuid(input.composerAttachmentId) ||
249
+ typeof input.name !== 'string' ||
250
+ !validComposerAttachmentName(input.name) ||
251
+ typeof input.mime !== 'string' ||
252
+ input.mime.length === 0 ||
253
+ input.mime.length > 120)
254
+ throw new Error('COMPOSER_ATTACHMENT_INVALID');
255
+ return { id: input.composerAttachmentId, name: input.name, mime: input.mime };
256
+ }
257
+ export function parseComposerAttachmentIds(value) {
258
+ if (value === undefined)
259
+ return [];
260
+ if (!Array.isArray(value) || value.length > 5 || value.some((id) => typeof id !== 'string'))
261
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
262
+ const ids = value;
263
+ if (ids.some((id) => !isUuid(id)) || new Set(ids).size !== ids.length)
264
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
265
+ return ids;
266
+ }
267
+ export function validComposerAttachmentName(name) {
268
+ return (name.trim().length > 0 &&
269
+ name.length <= 255 &&
270
+ name !== '.' &&
271
+ name !== '..' &&
272
+ !name.includes('/') &&
273
+ !name.includes('\\') &&
274
+ !Array.from(name).some((character) => {
275
+ const code = character.charCodeAt(0);
276
+ return code <= 31 || code === 127 || '<>:"|?*'.includes(character);
277
+ }));
278
+ }
279
+ export function isUuid(value) {
280
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
281
+ }
282
+ export function parseMessageAttachments(value) {
283
+ if (value === undefined)
284
+ return [];
285
+ if (!Array.isArray(value) || value.length > 5)
286
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
287
+ let totalBytes = 0;
288
+ return value.map((attachment) => {
289
+ if (!isPlainRecord(attachment))
290
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
291
+ if (typeof attachment.name !== 'string' ||
292
+ typeof attachment.mime !== 'string' ||
293
+ typeof attachment.dataBase64 !== 'string')
294
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
295
+ if (!validComposerAttachmentName(attachment.name) ||
296
+ attachment.mime.length === 0 ||
297
+ attachment.mime.length > 120 ||
298
+ !isCanonicalBase64(attachment.dataBase64))
299
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
300
+ const byteSize = Buffer.byteLength(attachment.dataBase64, 'base64');
301
+ if (byteSize === 0 || byteSize > MAX_COMPOSER_ATTACHMENT_BYTES)
302
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
303
+ totalBytes += byteSize;
304
+ if (totalBytes > MAX_COMPOSER_ATTACHMENTS_BYTES)
305
+ throw new Error('MESSAGE_ATTACHMENTS_INVALID');
306
+ return { name: attachment.name, mime: attachment.mime, dataBase64: attachment.dataBase64 };
307
+ });
308
+ }
309
+ export function parseRunnerImageAttachments(value) {
310
+ return parseMessageAttachments(value).map((attachment) => {
311
+ if (!isRunnerImageAttachment(attachment))
312
+ throw new Error('MESSAGE_ATTACHMENT_UNSUPPORTED');
313
+ return attachment;
314
+ });
315
+ }
316
+ export function isRunnerImageAttachment(attachment) {
317
+ return COMPOSER_IMAGE_MIME_TYPES.has(attachment.mime);
318
+ }
319
+ export function isImageAttachment(attachment) {
320
+ return attachment.mime.startsWith('image/');
321
+ }
322
+ export function withNonImageAttachmentPrompt(input, paths) {
323
+ if (paths.length === 0)
324
+ return input;
325
+ return `${input}${NON_IMAGE_ATTACHMENT_PROMPT_PREFIX}${paths
326
+ .map((path) => `- ${path}`)
327
+ .join('\n')}`;
328
+ }
329
+ export function isCanonicalBase64(value) {
330
+ return (value.length > 0 &&
331
+ value.length % 4 === 0 &&
332
+ /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value));
333
+ }
334
+ export function validatedCapabilities(value) {
335
+ return nodeCapabilitiesSchema.parse(value);
336
+ }
337
+ export function nodeConnectEndpoint(serverUrl) {
338
+ const endpoint = new URL(serverUrl);
339
+ if (endpoint.protocol === 'http:')
340
+ endpoint.protocol = 'ws:';
341
+ if (endpoint.protocol === 'https:')
342
+ endpoint.protocol = 'wss:';
343
+ if (endpoint.protocol !== 'ws:' && endpoint.protocol !== 'wss:') {
344
+ throw new Error('SERVER_URL_INVALID');
345
+ }
346
+ endpoint.pathname = `${endpoint.pathname.replace(/\/$/, '')}/api/node/connect`;
347
+ endpoint.search = '';
348
+ endpoint.hash = '';
349
+ return endpoint.toString();
350
+ }
351
+ export function nodeTerminalConnectEndpoint(serverUrl) {
352
+ const endpoint = new URL(serverUrl);
353
+ if (endpoint.protocol === 'http:')
354
+ endpoint.protocol = 'ws:';
355
+ if (endpoint.protocol === 'https:')
356
+ endpoint.protocol = 'wss:';
357
+ if (endpoint.protocol !== 'ws:' && endpoint.protocol !== 'wss:') {
358
+ throw new Error('SERVER_URL_INVALID');
359
+ }
360
+ endpoint.pathname = `${endpoint.pathname.replace(/\/$/, '')}/api/node/terminal-connect`;
361
+ endpoint.search = '';
362
+ endpoint.hash = '';
363
+ return endpoint.toString();
364
+ }
365
+ export function isPlainRecord(value) {
366
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
367
+ }
368
+ export function isNodeAgentRun(value) {
369
+ return (isPlainRecord(value) &&
370
+ typeof value.id === 'string' &&
371
+ typeof value.sessionId === 'string' &&
372
+ typeof value.status === 'string');
373
+ }
374
+ export function isNodeConversationTurn(value) {
375
+ return (isPlainRecord(value) &&
376
+ typeof value.id === 'string' &&
377
+ typeof value.sessionId === 'string' &&
378
+ Array.isArray(value.items));
379
+ }
380
+ //# sourceMappingURL=node-operation-parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-operation-parsers.js","sourceRoot":"","sources":["../../src/util/node-operation-parsers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { SessionActivityState } from '@myagentroam/protocol';
2
+ import type { NodeAgentSession, NodeConversationTurn } from '../database.js';
3
+ import type { NativeSessionHistory, NativeTranscriptImageAttachment } from '../native-session-history.js';
4
+ export interface SessionContextUsage {
5
+ readonly model: string | null;
6
+ readonly usedTokens: number;
7
+ readonly maxTokens: number;
8
+ readonly percentage: number;
9
+ }
10
+ export type ConversationHistorySource = 'official' | 'native' | 'runtime';
11
+ export interface ConversationHistoryPage {
12
+ readonly turns: readonly NodeConversationTurn[];
13
+ readonly nextCursor: string | null;
14
+ readonly snapshotSequence: number;
15
+ readonly source: ConversationHistorySource;
16
+ readonly readAt: number;
17
+ readonly latestVisibleAt: number;
18
+ }
19
+ export declare function extractId(result: unknown, key: 'thread' | 'turn'): string;
20
+ export declare function settleWithin<T>(promise: Promise<T>, milliseconds: number): Promise<T | undefined>;
21
+ export declare function extractCodexThreads(result: unknown): readonly {
22
+ readonly id: string;
23
+ readonly source: string | undefined;
24
+ readonly cwd: unknown;
25
+ readonly title: string | undefined;
26
+ }[];
27
+ export declare function codexThreadActivity(result: unknown): SessionActivityState;
28
+ export declare function externalResumeFailureDetail(error: unknown): string;
29
+ export declare function codexActiveTurnId(result: unknown): string | undefined;
30
+ export declare function codexThreadCwd(value: unknown): string;
31
+ export declare function isWithinWorkspace(cwd: string, workspacePath: string): boolean;
32
+ export declare function claudeDiscoveredSession(value: unknown, fallbackCwd: string): {
33
+ readonly externalSessionId: string;
34
+ readonly cwd: string;
35
+ readonly title?: string;
36
+ } | undefined;
37
+ export declare function latestNativeActivity(history: NativeSessionHistory): number;
38
+ export declare function sameContextUsage(left: SessionContextUsage, right: SessionContextUsage): boolean;
39
+ export declare function isNativeHistory(value: unknown): value is NativeSessionHistory;
40
+ export declare function deduplicateDirectSessions<T extends NodeAgentSession>(sessions: readonly T[]): readonly T[];
41
+ export declare function nativeConversationPage(session: NodeAgentSession, history: NativeSessionHistory, input: {
42
+ readonly cursor?: string;
43
+ readonly limit?: number;
44
+ }, runtimeTurns?: readonly NodeConversationTurn[], registerImages?: (images: readonly NativeTranscriptImageAttachment[]) => readonly Record<string, unknown>[]): {
45
+ readonly turns: readonly NodeConversationTurn[];
46
+ readonly nextCursor: string | null;
47
+ };
48
+ /**
49
+ * Claude JSONL 不保存浏览器请求 ID。Node 进程仍存活时,以正文和生成时刻
50
+ * 对齐当前运行态的用户消息,让 native 历史页替换同一乐观 Turn,而不是重复一条。
51
+ */
52
+ export declare function nativeUserClientMessageId(entry: Extract<NativeSessionHistory['items'][number], {
53
+ readonly kind: 'message';
54
+ }>, createdAt: number, runtimeTurns: readonly NodeConversationTurn[]): string | null;
55
+ /**
56
+ * Normalize the documented App Server `thread/read(includeTurns: true)`
57
+ * result. Only items with a user-visible Workbench representation are kept;
58
+ * raw protocol envelopes are deliberately never exposed to Web.
59
+ */
60
+ export declare function claudePlanText(text: string): string | undefined;
61
+ export declare function claudeUserInputQuestions(value: Record<string, unknown>): readonly {
62
+ readonly id: string;
63
+ readonly prompt: string;
64
+ readonly input: 'SINGLE_SELECT' | 'MULTI_SELECT' | 'SHORT_TEXT';
65
+ readonly options: readonly {
66
+ readonly value: string;
67
+ readonly label: string;
68
+ readonly description: string | null;
69
+ }[];
70
+ readonly allowOther: boolean;
71
+ readonly multiSelect: boolean;
72
+ }[];