nolo-cli 0.8.0-alpha.2 → 0.8.0-alpha.21

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 (188) hide show
  1. package/README.md +1 -1
  2. package/_executeModel-42U3VOVZ.js +205 -0
  3. package/action-TLI3V62L.js +28 -0
  4. package/addContentAction-57RSIIMR.js +26 -0
  5. package/addDialogAgentAction-G3VWEA6E.js +68 -0
  6. package/agentDeleteCommand-5DD2IM3J.js +327 -0
  7. package/agentEmailCommands-6FACJBU4.js +628 -0
  8. package/agentListCommands-I6KZYCIG.js +223 -0
  9. package/agentMachineCommands-VKLIGMZA.js +425 -0
  10. package/agentPullCommand-O2MTUAFR.js +122 -0
  11. package/agentRecordCommands-7TZICYDT.js +96 -0
  12. package/agentRunCommand-L4OM23KV.js +114 -0
  13. package/agentRunControl-K4VKNEHF.js +57 -0
  14. package/agentRuntimeLocal-ZYEIPTY4.js +104 -0
  15. package/agentSlice-BX7GXSNO.js +42 -0
  16. package/authCommand-EB5JSOX5.js +581 -0
  17. package/authCommands-XPEHTKSM.js +35 -0
  18. package/chunk-25LCXTML.js +175 -0
  19. package/chunk-2ECQG4YX.js +22296 -0
  20. package/chunk-2FTTDCD4.js +675 -0
  21. package/chunk-2JCXITPK.js +1078 -0
  22. package/chunk-3ASDTTEI.js +1774 -0
  23. package/chunk-3EUW3WEO.js +8 -0
  24. package/chunk-3LY4F7SV.js +9293 -0
  25. package/chunk-4CQLVGRV.js +50 -0
  26. package/chunk-4IJYA27C.js +342 -0
  27. package/chunk-4O3CARJ4.js +231 -0
  28. package/chunk-4QEWT7KD.js +933 -0
  29. package/chunk-4SN6J65J.js +38 -0
  30. package/chunk-4VNS5WPM.js +42 -0
  31. package/chunk-4XENYTF5.js +222 -0
  32. package/chunk-4ZDM73SD.js +34 -0
  33. package/chunk-5CS33IBL.js +301 -0
  34. package/chunk-5EFXE3O7.js +138 -0
  35. package/chunk-5KLGBAAR.js +386 -0
  36. package/chunk-5MIDPSSK.js +206 -0
  37. package/chunk-5MMAK75Q.js +15 -0
  38. package/chunk-63W5N6P3.js +150 -0
  39. package/chunk-6HYVJV7B.js +102 -0
  40. package/chunk-6KHNO3SK.js +1948 -0
  41. package/chunk-6WD3OOJS.js +20 -0
  42. package/chunk-7DAJ4AI4.js +191 -0
  43. package/chunk-7GNGZRLZ.js +1939 -0
  44. package/chunk-7KCUSYT2.js +354 -0
  45. package/chunk-7U44LYTR.js +238 -0
  46. package/chunk-AFON4QUU.js +112 -0
  47. package/chunk-AGFH73SK.js +239 -0
  48. package/chunk-AL2KDGR2.js +27339 -0
  49. package/chunk-AS4PVWA4.js +221 -0
  50. package/chunk-ATNTHIZI.js +13 -0
  51. package/chunk-AVMKZHBC.js +85 -0
  52. package/chunk-AZPCASRE.js +36 -0
  53. package/chunk-BBYVOSU2.js +792 -0
  54. package/chunk-C3RUNRHT.js +51 -0
  55. package/chunk-C4FTUXVF.js +146 -0
  56. package/chunk-CF2WZF4N.js +134 -0
  57. package/chunk-CF7PE763.js +10 -0
  58. package/chunk-CKOJQDKR.js +198 -0
  59. package/chunk-CMKUBIGW.js +1550 -0
  60. package/chunk-CWMSB67P.js +34 -0
  61. package/chunk-DCOA4QSN.js +105 -0
  62. package/chunk-DFFIZ25G.js +30 -0
  63. package/chunk-DSZUWUYB.js +478 -0
  64. package/chunk-DWLEOOGR.js +8 -0
  65. package/chunk-DZ3XJVET.js +231 -0
  66. package/chunk-EHLHSX7R.js +1433 -0
  67. package/chunk-ENOG22KJ.js +939 -0
  68. package/chunk-FSO5B7GH.js +171 -0
  69. package/chunk-FVYY6MCS.js +1447 -0
  70. package/chunk-G3SUCT4W.js +8 -0
  71. package/chunk-GAKEBQD6.js +30 -0
  72. package/chunk-GBRG75BQ.js +86 -0
  73. package/chunk-GU3PEVGZ.js +4723 -0
  74. package/chunk-H33743XH.js +25 -0
  75. package/chunk-HNMXYYJR.js +12 -0
  76. package/chunk-HNW7IJSK.js +71 -0
  77. package/chunk-I42VC5KR.js +15 -0
  78. package/chunk-I6XMPTMR.js +113 -0
  79. package/chunk-IDZTNRP2.js +85 -0
  80. package/chunk-ISNCLGUZ.js +146 -0
  81. package/chunk-IWX4UW2E.js +548 -0
  82. package/chunk-JBTJAPUF.js +35 -0
  83. package/chunk-JEXVIMYZ.js +55 -0
  84. package/chunk-JRKKFRAV.js +537 -0
  85. package/chunk-JZPBVBIY.js +94 -0
  86. package/chunk-KKY4B2Q2.js +21 -0
  87. package/chunk-KQHGZWSV.js +63 -0
  88. package/chunk-KUG52IAP.js +8 -0
  89. package/chunk-KX6YBIHG.js +8 -0
  90. package/chunk-LCBAMY2M.js +60 -0
  91. package/chunk-LM6IYQ3F.js +16 -0
  92. package/chunk-LTRXGFMS.js +83 -0
  93. package/chunk-M76ECQRD.js +13658 -0
  94. package/chunk-MRC4Q34M.js +188 -0
  95. package/chunk-MTU75CZ2.js +91 -0
  96. package/chunk-N54XAP77.js +19 -0
  97. package/chunk-O2ZNTTET.js +3272 -0
  98. package/chunk-O4BU24WZ.js +3212 -0
  99. package/chunk-OLZBQWZU.js +6 -0
  100. package/chunk-OOSFSFMA.js +271 -0
  101. package/chunk-OPZYGHUC.js +89 -0
  102. package/chunk-OWOHNGCN.js +50 -0
  103. package/chunk-P3PKED2I.js +962 -0
  104. package/chunk-QSJ3HFEF.js +8 -0
  105. package/chunk-RCSJFQPB.js +9036 -0
  106. package/chunk-RL776AGR.js +190 -0
  107. package/chunk-ROWQEJRP.js +139 -0
  108. package/chunk-S7Z2HMCN.js +25 -0
  109. package/chunk-SDJDLO5W.js +628 -0
  110. package/chunk-SOTZ6RDN.js +69 -0
  111. package/chunk-TILFE6LV.js +381 -0
  112. package/chunk-U4TRT5V4.js +246 -0
  113. package/chunk-U6VC4MU4.js +8 -0
  114. package/chunk-UAD2WT54.js +64 -0
  115. package/chunk-UB6SN4NJ.js +421 -0
  116. package/chunk-URUUZLPA.js +807 -0
  117. package/chunk-UTLZINAP.js +3066 -0
  118. package/chunk-VC6OZXO5.js +298 -0
  119. package/chunk-VF4K2QE6.js +21 -0
  120. package/chunk-VHBWHNVT.js +59 -0
  121. package/chunk-VIDPVFP3.js +20 -0
  122. package/chunk-VP4WJWKW.js +8882 -0
  123. package/chunk-VUW5FBDB.js +573 -0
  124. package/chunk-VVX233PH.js +482 -0
  125. package/chunk-VX3SXJ3N.js +2052 -0
  126. package/chunk-W4NVOSFF.js +37 -0
  127. package/chunk-WWC7I6TA.js +8 -0
  128. package/chunk-WZSRQNQG.js +2587 -0
  129. package/chunk-XBUBEFNX.js +34 -0
  130. package/chunk-XENYHRUE.js +104 -0
  131. package/chunk-Y5GCAMGP.js +9 -0
  132. package/chunk-YPRZSPF3.js +148 -0
  133. package/chunk-Z4NR32XR.js +50 -0
  134. package/chunk-ZNFJWEN4.js +56 -0
  135. package/cliExecutor-K3F7DMRO.js +36 -0
  136. package/clipboardy-BVE3LVEH.js +12001 -0
  137. package/createAgentAutomationAction-RJF3N2QY.js +866 -0
  138. package/createDialogAction-DRSPS6CE.js +55 -0
  139. package/createPageAction-6B2WMNO3.js +172 -0
  140. package/db-HCJ5PRB5.js +271 -0
  141. package/dbSlice-Q3TM2FJV.js +60 -0
  142. package/deleteFile-OW53A6BX.js +41 -0
  143. package/dialogCommands-4IX4XIZE.js +63 -0
  144. package/dialogSlice-3M7KX2TX.js +148 -0
  145. package/docCreateCommands-SIL3NPGT.js +220 -0
  146. package/docDeleteCommands-7IOMLUS4.js +181 -0
  147. package/docReadCommands-FNFXUA5L.js +134 -0
  148. package/docStore-SV7E34D4.js +98 -0
  149. package/docUpdateCommands-X2HNDVUC.js +318 -0
  150. package/fetchMessages-KTNM7QAR.js +17 -0
  151. package/getPricing-3E6UNPKL.js +30 -0
  152. package/handleSendMessageAction-JYETO5RZ.js +185 -0
  153. package/index.js +188 -112958
  154. package/lib-FYYBQIXS.js +19839 -0
  155. package/localDialogRead-2VRI24F4.js +26 -0
  156. package/localFirstLog-DHNOY2NA.js +19 -0
  157. package/localRuntimeAuthority-TEGCOWX4.js +471 -0
  158. package/localRuntimeDb-LGDF6FQP.js +12 -0
  159. package/machineCommands-RIO3RP5Q.js +781 -0
  160. package/machineInfo-M6KB6HZN.js +10 -0
  161. package/machineWsRunDispatch-W7UYLGB5.js +112 -0
  162. package/memoryCommands-O4MIPIWQ.js +476 -0
  163. package/models-4OPOOLFS.js +9 -0
  164. package/offlineMarxistsAgentCommand-BCPJITJL.js +242 -0
  165. package/package.json +4 -24
  166. package/read-GW7ZEI23.js +17 -0
  167. package/readDocTool-HUFU6OCT.js +16 -0
  168. package/readlineWorkspace-27JR7WPW.js +5682 -0
  169. package/removeDialogAgentAction-CXKR4NJI.js +73 -0
  170. package/runAgentClientLoop-HZFAPJHS.js +293 -0
  171. package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
  172. package/setDialogExtraReferencesAction-6RKUSXHX.js +60 -0
  173. package/setPrimaryDialogAgentAction-T3UTBEFG.js +80 -0
  174. package/settingSlice-IVKXJXMG.js +199 -0
  175. package/skillDiscovery-UGSQGX2U.js +16 -0
  176. package/skillSummaryMarker-42HKSXYY.js +9 -0
  177. package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
  178. package/slateUtils-2M7MUTWX.js +19 -0
  179. package/spaceCommands-E7VOF4LO.js +450 -0
  180. package/spaceSlice-TSVROA5U.js +149 -0
  181. package/streamAgentChatTurn-3C5RQZJF.js +4510 -0
  182. package/tableCommands-O7O2LBEG.js +1286 -0
  183. package/toolApiClient-QI3YBNWB.js +26 -0
  184. package/tools-EQDEKR6N.js +87 -0
  185. package/tuiSummaryLlmCaller-RV3THLZF.js +78 -0
  186. package/understanding-3CUQQ6SV.js +271 -0
  187. package/updateCommands-VOSPKXFF.js +31 -0
  188. package/updateDialogTitleAction-3XV7VWSZ.js +188 -0
@@ -0,0 +1,221 @@
1
+ import {
2
+ toErrorMessage
3
+ } from "./chunk-HNMXYYJR.js";
4
+
5
+ // packages/create/editor/transforms/slateToSimplifiedMarkdown.ts
6
+ function renderTextNode(node) {
7
+ if (!node || typeof node.text !== "string") return "";
8
+ let text = node.text;
9
+ if (!text) return "";
10
+ if (node.bold) text = `**${text}**`;
11
+ if (node.italic) text = `*${text}*`;
12
+ if (node.strikethrough) text = `~~${text}~~`;
13
+ return text;
14
+ }
15
+ function renderPlainText(node, options = {}) {
16
+ if (!node) return "";
17
+ if (typeof node.text === "string") return renderTextNode(node);
18
+ if (!Array.isArray(node.children)) return "";
19
+ return node.children.map((child) => renderPlainText(child, options)).join("");
20
+ }
21
+ function renderTable(node, listDepth, options) {
22
+ const rows = Array.isArray(node.children) ? node.children : [];
23
+ if (rows.length === 0) return "";
24
+ const alignments = Array.isArray(node.columns) ? node.columns.map((column) => column?.align || "left") : [];
25
+ const renderedRows = rows.map(
26
+ (row) => (Array.isArray(row?.children) ? row.children : []).map((cell) => {
27
+ const content = renderPlainText(cell, options).replace(/\n+/g, " ").trim();
28
+ return content || " ";
29
+ })
30
+ );
31
+ const header = renderedRows[0] || [];
32
+ const divider = header.map((_, index) => {
33
+ const align = alignments[index];
34
+ if (align === "center") return ":---:";
35
+ if (align === "right") return "---:";
36
+ return "---";
37
+ });
38
+ const body = renderedRows.slice(1);
39
+ const allRows = [header, divider, ...body].map((cells) => `| ${cells.join(" | ")} |`).join("\n");
40
+ return `${allRows}
41
+
42
+ `;
43
+ }
44
+ function renderListItem(node, listDepth, ordered, start, index, options = {}) {
45
+ const indentation = " ".repeat(listDepth);
46
+ const marker = node.checked === true ? "- [x]" : node.checked === false ? "- [ ]" : ordered ? `${start + index}.` : "-";
47
+ const segments = Array.isArray(node.children) ? node.children : [];
48
+ const renderedSegments = segments.flatMap((child) => {
49
+ const rendered = renderNode(child, listDepth + 1, options).trimEnd();
50
+ return rendered ? [rendered] : [];
51
+ });
52
+ if (renderedSegments.length === 0) {
53
+ return `${indentation}${marker}
54
+ `;
55
+ }
56
+ const [first, ...rest] = renderedSegments;
57
+ const lines = first.split("\n");
58
+ const firstLine = lines.shift() || "";
59
+ const restFirst = lines.map((line) => `${indentation} ${line}`).join("\n");
60
+ const restBlocks = rest.map((block) => `${indentation} ${block}`).join("\n");
61
+ return [
62
+ `${indentation}${marker} ${firstLine}`,
63
+ restFirst,
64
+ restBlocks
65
+ ].filter(Boolean).join("\n") + "\n";
66
+ }
67
+ function renderNode(node, listDepth = 0, options = {}) {
68
+ if (!node) return "";
69
+ const indentation = " ".repeat(listDepth);
70
+ switch (node.type) {
71
+ case "heading-one":
72
+ return `# ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
73
+
74
+ `;
75
+ case "heading-two":
76
+ return `## ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
77
+
78
+ `;
79
+ case "heading-three":
80
+ return `### ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
81
+
82
+ `;
83
+ case "heading-four":
84
+ return `#### ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
85
+
86
+ `;
87
+ case "heading-five":
88
+ return `##### ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
89
+
90
+ `;
91
+ case "heading-six":
92
+ return `###### ${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
93
+
94
+ `;
95
+ case "paragraph":
96
+ return `${node.children.map((n) => renderNode(n, listDepth, options)).join("")}
97
+
98
+ `;
99
+ case "list":
100
+ return node.children.map(
101
+ (item, index) => renderListItem(item, listDepth, !!node.ordered, node.start || 1, index, options)
102
+ ).join("");
103
+ case "list-item":
104
+ return renderListItem(node, listDepth, false, 1, 0, options);
105
+ case "quote":
106
+ const content = node.children.map((n) => renderNode(n, listDepth, options)).join("").trim();
107
+ return `> ${content.replace(/\n/g, "\n> ")}
108
+
109
+ `;
110
+ case "code-block":
111
+ const code = node.children.map(
112
+ (line) => (line.children || []).map((text) => text.text).join("")
113
+ ).join("\n");
114
+ return "```" + (node.language || "") + "\n" + code + "\n```\n\n";
115
+ case "link":
116
+ const linkText = node.children.map((n) => renderNode(n, listDepth, options)).join("");
117
+ return `[${linkText}](${node.url})`;
118
+ case "table":
119
+ return renderTable(node, listDepth, options);
120
+ case "code-inline":
121
+ return `\`${node.children.map((n) => renderNode(n, listDepth, options)).join("")}\``;
122
+ case "mention": {
123
+ if (options.mentionResolver) {
124
+ return options.mentionResolver(node);
125
+ }
126
+ const label = node.label || node.resourceId || "mention";
127
+ const resourceType = node.resourceType || "unknown";
128
+ const resourceId = node.resourceId || "unknown";
129
+ return `@[${resourceType}:${resourceId}|${label}]`;
130
+ }
131
+ case "image": {
132
+ const alt = node.alt || "";
133
+ const title = node.title ? ` "${node.title}"` : "";
134
+ return `![${alt}](${node.url || ""}${title})`;
135
+ }
136
+ case "html-inline":
137
+ return typeof node.html === "string" ? node.html : "";
138
+ case "html-block":
139
+ return typeof node.html === "string" ? `${node.html}
140
+
141
+ ` : "";
142
+ case "thematic-break":
143
+ return "---\n\n";
144
+ default:
145
+ return renderTextNode(node) || (node.children ? node.children.map((child) => renderNode(child, listDepth, options)).join("") : "");
146
+ }
147
+ }
148
+ function slateToSimplifiedMarkdown(nodes, options = {}) {
149
+ if (!nodes || nodes.length === 0) {
150
+ return "";
151
+ }
152
+ return nodes.map((node) => renderNode(node, 0, options)).join("").trim() + "\n";
153
+ }
154
+
155
+ // packages/ai/tools/readDocTool.ts
156
+ var readDocFunctionSchema = {
157
+ name: "readDoc",
158
+ description: [
159
+ "\u8BFB\u53D6\u6307\u5B9A\u9875\u9762\u7684\u5185\u5BB9\uFF0C\u5E76\u5C06\u7ED3\u6784\u5316\u7684\u6570\u636E\u8F6C\u6362\u4E3A Markdown \u683C\u5F0F\u8FD4\u56DE\u3002",
160
+ "\u5982\u679C\u4F60\u62FF\u5230\u4E86\u9875\u9762\u7684 dbKey\uFF08\u5982 page-xxx\uFF09\uFF0C\u8BF7\u4F7F\u7528\u6B64\u5DE5\u5177\u67E5\u770B\u9875\u9762\u5185\u5BB9\u3002"
161
+ ].join("\n"),
162
+ parameters: {
163
+ type: "object",
164
+ properties: {
165
+ id: {
166
+ type: "string",
167
+ description: "\u9875\u9762/\u6587\u6863\u7684\u6570\u636E\u5E93\u952E\uFF08dbKey\uFF09\uFF0C\u4F8B\u5982 page-xxx\u3002"
168
+ }
169
+ },
170
+ required: ["id"]
171
+ }
172
+ };
173
+ var readPageFunctionSchema = {
174
+ ...readDocFunctionSchema,
175
+ name: "readPage"
176
+ };
177
+ var buildReadDocResult = (pageData) => {
178
+ const markdownContent = slateToSimplifiedMarkdown(pageData.slateData || []);
179
+ const rawData = {
180
+ success: true,
181
+ id: pageData.dbKey,
182
+ title: pageData.title,
183
+ content: markdownContent,
184
+ metadata: {
185
+ spaceId: pageData.spaceId,
186
+ created: pageData.created
187
+ }
188
+ };
189
+ const displayData = `\u5DF2\u6210\u529F\u8BFB\u53D6\u9875\u9762\u300A${pageData.title}\u300B\u3002
190
+
191
+ \u5185\u5BB9\u5982\u4E0B\uFF1A
192
+
193
+ ${markdownContent}`;
194
+ return { rawData, displayData };
195
+ };
196
+ async function readDocFunc(args, thunkApi) {
197
+ const id = args.id ?? args.doc ?? args.docKey ?? args.pageKey ?? args.key;
198
+ if (!id || !id.toLowerCase().startsWith("page-")) {
199
+ throw new Error(`\u65E0\u6548\u7684\u9875\u9762 ID: ${id}\u3002\u9875\u9762 ID \u901A\u5E38\u4EE5 "page-" \u5F00\u5934\u3002`);
200
+ }
201
+ try {
202
+ const { readAction } = await import("./read-GW7ZEI23.js");
203
+ const pageData = await readAction({ dbKey: id }, thunkApi);
204
+ if (!pageData) {
205
+ throw new Error(`\u672A\u627E\u5230 ID \u4E3A ${id} \u7684\u9875\u9762\u3002`);
206
+ }
207
+ return buildReadDocResult(pageData);
208
+ } catch (error) {
209
+ throw new Error(`\u8BFB\u53D6\u9875\u9762\u65F6\u51FA\u9519: ${toErrorMessage(error)}`);
210
+ }
211
+ }
212
+ var readPageFunc = readDocFunc;
213
+
214
+ export {
215
+ slateToSimplifiedMarkdown,
216
+ readDocFunctionSchema,
217
+ readPageFunctionSchema,
218
+ buildReadDocResult,
219
+ readDocFunc,
220
+ readPageFunc
221
+ };
@@ -0,0 +1,13 @@
1
+ // packages/ai/agent/cliPrompt.ts
2
+ function buildCliPrompt(systemPrompt, taskPrompt) {
3
+ if (!systemPrompt?.trim()) return taskPrompt;
4
+ return `[\u89D2\u8272\u8BBE\u5B9A]
5
+ ${systemPrompt.trim()}
6
+
7
+ [\u5F53\u524D\u4EFB\u52A1]
8
+ ${taskPrompt.trim()}`;
9
+ }
10
+
11
+ export {
12
+ buildCliPrompt
13
+ };
@@ -0,0 +1,85 @@
1
+ import {
2
+ isGatewayHttpStatus,
3
+ parseRetryAfterHeaderMs
4
+ } from "./chunk-GAKEBQD6.js";
5
+ import {
6
+ asTrimmedLowercaseString
7
+ } from "./chunk-QSJ3HFEF.js";
8
+
9
+ // packages/cli/connectorWebSocketTarget.ts
10
+ var ConnectorWebSocketAuthError = class extends Error {
11
+ code;
12
+ constructor(message, code = "CONNECTOR_AUTH_FAILED") {
13
+ super(message);
14
+ this.name = "ConnectorWebSocketAuthError";
15
+ this.code = code;
16
+ }
17
+ };
18
+ function isConnectorWebSocketAuthError(error) {
19
+ return error instanceof ConnectorWebSocketAuthError;
20
+ }
21
+ var ConnectorWebSocketRetryableError = class extends Error {
22
+ reason;
23
+ retryAfterMs;
24
+ constructor(message, options = {}) {
25
+ super(message);
26
+ this.name = "ConnectorWebSocketRetryableError";
27
+ this.reason = options.reason ?? "retryable";
28
+ this.retryAfterMs = options.retryAfterMs;
29
+ }
30
+ };
31
+ function isConnectorWebSocketRetryableError(error) {
32
+ return error instanceof ConnectorWebSocketRetryableError;
33
+ }
34
+ function parseRetryAfterMs(response, bodyRetryAfterMs) {
35
+ const headerDelayMs = parseRetryAfterHeaderMs(response.headers.get("Retry-After"));
36
+ if (headerDelayMs != null) return headerDelayMs;
37
+ const parsed = Number(bodyRetryAfterMs);
38
+ return Number.isFinite(parsed) && parsed >= 0 ? Math.round(parsed) : void 0;
39
+ }
40
+ async function resolveConnectorWebSocketTarget(input) {
41
+ const directWsUrl = new URL(input.serverUrl);
42
+ directWsUrl.protocol = directWsUrl.protocol === "https:" ? "wss:" : "ws:";
43
+ directWsUrl.pathname = "/api/connector/ws";
44
+ directWsUrl.search = "";
45
+ directWsUrl.searchParams.set("machineId", input.machineId);
46
+ const connectorSurface = asTrimmedLowercaseString(input.connectorSurface);
47
+ if (connectorSurface) {
48
+ directWsUrl.searchParams.set("connectorSurface", connectorSurface);
49
+ }
50
+ const probeUrl = new URL(input.serverUrl);
51
+ probeUrl.pathname = "/api/connector/ws";
52
+ probeUrl.search = directWsUrl.search;
53
+ const response = await (input.fetchImpl ?? fetch)(probeUrl, {
54
+ headers: input.headers
55
+ }).catch(() => null);
56
+ if (response && (response.status === 401 || response.status === 403)) {
57
+ const json2 = await response.json().catch(() => null);
58
+ const code = typeof json2?.code === "string" ? json2.code : "CONNECTOR_AUTH_FAILED";
59
+ const message = typeof json2?.error === "string" ? json2.error : `Connector auth failed with HTTP ${response.status}`;
60
+ throw new ConnectorWebSocketAuthError(`${code}: ${message}`, code);
61
+ }
62
+ if (response && !response.ok) {
63
+ const json2 = await response.clone().json().catch(() => null);
64
+ const retryable = json2?.retryable === true || json2?.reason === "core_draining" || isGatewayHttpStatus(response.status);
65
+ if (retryable) {
66
+ const reason = typeof json2?.reason === "string" ? json2.reason : "retryable";
67
+ const message = typeof json2?.error === "string" ? json2.error : `Connector websocket unavailable with HTTP ${response.status}`;
68
+ throw new ConnectorWebSocketRetryableError(message, {
69
+ reason,
70
+ retryAfterMs: parseRetryAfterMs(response, json2?.retryAfterMs)
71
+ });
72
+ }
73
+ }
74
+ if (!response || !response.ok) {
75
+ return directWsUrl.toString();
76
+ }
77
+ const json = await response.json().catch(() => null);
78
+ return typeof json?.wsUrl === "string" && json.wsUrl ? json.wsUrl : directWsUrl.toString();
79
+ }
80
+
81
+ export {
82
+ isConnectorWebSocketAuthError,
83
+ isConnectorWebSocketRetryableError,
84
+ resolveConnectorWebSocketTarget
85
+ };
@@ -0,0 +1,36 @@
1
+ // packages/app/utils/fileUtils.ts
2
+ var fileConstructor = typeof globalThis !== "undefined" && typeof globalThis.File === "function" ? globalThis.File : void 0;
3
+ var isImageMimeType = (value) => typeof value === "string" && value.toLowerCase().startsWith("image/");
4
+ var IMAGE_FILE_NAME_RE = /\.(avif|bmp|gif|heic|heif|ico|jpe?g|png|svg|tiff?|webp)$/i;
5
+ var VIDEO_FILE_NAME_RE = /\.(avi|m4v|mkv|mov|mp4|mpeg|mpg|webm)$/i;
6
+ var AUDIO_FILE_NAME_RE = /\.(aac|flac|m4a|mp3|ogg|wav|weba)$/i;
7
+ var DOCUMENT_FILE_NAME_RE = /\.(csv|doc|docx|md|odt|pdf|ppt|pptx|rtf|txt|xls|xlsx)$/i;
8
+ var isImageFileName = (value) => typeof value === "string" && IMAGE_FILE_NAME_RE.test(value.trim());
9
+ var isVideoMimeType = (value) => typeof value === "string" && value.toLowerCase().startsWith("video/");
10
+ var isAudioMimeType = (value) => typeof value === "string" && value.toLowerCase().startsWith("audio/");
11
+ var isPdfMimeType = (value) => typeof value === "string" && value.toLowerCase() === "application/pdf";
12
+ var isDocumentMimeType = (value) => {
13
+ if (typeof value !== "string") return false;
14
+ const normalized = value.toLowerCase();
15
+ return isPdfMimeType(normalized) || normalized === "text/plain" || normalized === "text/markdown" || normalized === "text/csv" || normalized === "application/msword" || normalized === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" || normalized === "application/vnd.ms-powerpoint" || normalized === "application/vnd.openxmlformats-officedocument.presentationml.presentation" || normalized === "application/vnd.ms-excel" || normalized === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || normalized === "application/rtf" || normalized === "application/vnd.oasis.opendocument.text";
16
+ };
17
+ var resolveFileCategory = ({
18
+ mimeType,
19
+ fileName
20
+ }) => {
21
+ if (isImageMimeType(mimeType) || isImageFileName(fileName)) return "image";
22
+ if (isVideoMimeType(mimeType) || typeof fileName === "string" && VIDEO_FILE_NAME_RE.test(fileName.trim())) {
23
+ return "video";
24
+ }
25
+ if (isAudioMimeType(mimeType) || typeof fileName === "string" && AUDIO_FILE_NAME_RE.test(fileName.trim())) {
26
+ return "audio";
27
+ }
28
+ if (isDocumentMimeType(mimeType) || typeof fileName === "string" && DOCUMENT_FILE_NAME_RE.test(fileName.trim())) {
29
+ return "document";
30
+ }
31
+ return "other";
32
+ };
33
+
34
+ export {
35
+ resolveFileCategory
36
+ };