nolo-cli 0.8.0 → 0.9.1

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 (183) hide show
  1. package/_executeModel-UD44KGZ4.js +203 -0
  2. package/action-ZJWE3Y5S.js +28 -0
  3. package/addContentAction-TVDBNJM5.js +26 -0
  4. package/addDialogAgentAction-EKH774VT.js +68 -0
  5. package/agentDeleteCommand-TCPEFJTF.js +327 -0
  6. package/agentEmailCommands-CZ3UILZ4.js +626 -0
  7. package/agentListCommands-SJKO2FFB.js +223 -0
  8. package/agentMachineCommands-PSNABISZ.js +425 -0
  9. package/agentPullCommand-O2MTUAFR.js +122 -0
  10. package/agentRecordCommands-MH2JKFHS.js +94 -0
  11. package/agentRunCommand-4KH6MIZR.js +110 -0
  12. package/agentRunControl-K4VKNEHF.js +57 -0
  13. package/agentRuntimeLocal-SKHJUWSS.js +104 -0
  14. package/agentSlice-3WXXN4VK.js +42 -0
  15. package/authCommand-PXFX6JDT.js +581 -0
  16. package/authCommands-356AYWEK.js +35 -0
  17. package/chunk-2EISRLRC.js +238 -0
  18. package/chunk-2FTTDCD4.js +675 -0
  19. package/chunk-2K2ECKSG.js +222 -0
  20. package/chunk-2PUGVR6E.js +19 -0
  21. package/chunk-3ASDTTEI.js +1774 -0
  22. package/chunk-3EUW3WEO.js +8 -0
  23. package/chunk-3LY4F7SV.js +9293 -0
  24. package/chunk-3TZDXYSF.js +71 -0
  25. package/chunk-3WYQEUBI.js +34 -0
  26. package/chunk-4CQLVGRV.js +50 -0
  27. package/chunk-4IJYA27C.js +342 -0
  28. package/chunk-4K2KKCSD.js +577 -0
  29. package/chunk-4SN6J65J.js +38 -0
  30. package/chunk-4VNS5WPM.js +42 -0
  31. package/chunk-4ZDM73SD.js +34 -0
  32. package/chunk-5CS33IBL.js +301 -0
  33. package/chunk-5KLGBAAR.js +386 -0
  34. package/chunk-5MIDPSSK.js +206 -0
  35. package/chunk-5MMAK75Q.js +15 -0
  36. package/chunk-5PJ3VWCS.js +360 -0
  37. package/chunk-63SLEOLK.js +175 -0
  38. package/chunk-63W5N6P3.js +150 -0
  39. package/chunk-6GANEXVO.js +231 -0
  40. package/chunk-6HYVJV7B.js +102 -0
  41. package/chunk-6WD3OOJS.js +20 -0
  42. package/chunk-7OOXPE3N.js +628 -0
  43. package/chunk-7QRKCBOP.js +1078 -0
  44. package/chunk-ATNTHIZI.js +13 -0
  45. package/chunk-AUQ747NZ.js +902 -0
  46. package/chunk-AVMKZHBC.js +85 -0
  47. package/chunk-AZPCASRE.js +36 -0
  48. package/chunk-BBYVOSU2.js +792 -0
  49. package/chunk-C3RUNRHT.js +51 -0
  50. package/chunk-CF2WZF4N.js +134 -0
  51. package/chunk-CF7PE763.js +10 -0
  52. package/chunk-CKOJQDKR.js +198 -0
  53. package/chunk-COMXDWNM.js +807 -0
  54. package/chunk-CPB2YM4D.js +171 -0
  55. package/chunk-CWMSB67P.js +34 -0
  56. package/chunk-DCOA4QSN.js +105 -0
  57. package/chunk-DFFIZ25G.js +30 -0
  58. package/chunk-DWLEOOGR.js +8 -0
  59. package/chunk-DZ3XJVET.js +231 -0
  60. package/chunk-EHLHSX7R.js +1433 -0
  61. package/chunk-ELRRLDWI.js +478 -0
  62. package/chunk-EXTIQUCI.js +482 -0
  63. package/chunk-EYEEHCU4.js +3066 -0
  64. package/chunk-G3SUCT4W.js +8 -0
  65. package/chunk-G43KEVSC.js +1447 -0
  66. package/chunk-GAKEBQD6.js +30 -0
  67. package/chunk-GBRG75BQ.js +86 -0
  68. package/chunk-GG4AJPSR.js +191 -0
  69. package/chunk-H33743XH.js +25 -0
  70. package/chunk-HNMXYYJR.js +12 -0
  71. package/chunk-I42VC5KR.js +15 -0
  72. package/chunk-IDZTNRP2.js +85 -0
  73. package/chunk-ISNCLGUZ.js +146 -0
  74. package/chunk-IWX4UW2E.js +548 -0
  75. package/chunk-JBTJAPUF.js +35 -0
  76. package/chunk-JEXVIMYZ.js +55 -0
  77. package/chunk-JRKKFRAV.js +537 -0
  78. package/chunk-JZPBVBIY.js +94 -0
  79. package/chunk-KKY4B2Q2.js +21 -0
  80. package/chunk-KOCA5FCS.js +4750 -0
  81. package/chunk-KQHGZWSV.js +63 -0
  82. package/chunk-KTVVPRJS.js +138 -0
  83. package/chunk-KUG52IAP.js +8 -0
  84. package/chunk-KX6YBIHG.js +8 -0
  85. package/chunk-LARL2V6G.js +9017 -0
  86. package/chunk-LCBAMY2M.js +60 -0
  87. package/chunk-LM6IYQ3F.js +16 -0
  88. package/chunk-M76ECQRD.js +13658 -0
  89. package/chunk-MGOJ5R6J.js +113 -0
  90. package/chunk-MKMWT7SA.js +27196 -0
  91. package/chunk-MRC4Q34M.js +188 -0
  92. package/chunk-OLZBQWZU.js +6 -0
  93. package/chunk-OPZYGHUC.js +89 -0
  94. package/chunk-OWOHNGCN.js +50 -0
  95. package/chunk-PAKN26FP.js +239 -0
  96. package/chunk-PCWC3JTN.js +91 -0
  97. package/chunk-PG5PNA7Y.js +939 -0
  98. package/chunk-Q2YZULBH.js +104 -0
  99. package/chunk-QSJ3HFEF.js +8 -0
  100. package/chunk-QYXLLLGL.js +4519 -0
  101. package/chunk-ROWQEJRP.js +139 -0
  102. package/chunk-S7Z2HMCN.js +25 -0
  103. package/chunk-SBR32ZZS.js +1901 -0
  104. package/chunk-SH2CFQOH.js +3391 -0
  105. package/chunk-SL35K7AH.js +226 -0
  106. package/chunk-TILFE6LV.js +381 -0
  107. package/chunk-TSS3XJY4.js +2052 -0
  108. package/chunk-U4TRT5V4.js +246 -0
  109. package/chunk-U6VC4MU4.js +8 -0
  110. package/chunk-UAD2WT54.js +64 -0
  111. package/chunk-UUJDGGAK.js +421 -0
  112. package/chunk-VF4K2QE6.js +21 -0
  113. package/chunk-VHBWHNVT.js +59 -0
  114. package/chunk-VIDPVFP3.js +20 -0
  115. package/chunk-VP4WJWKW.js +8882 -0
  116. package/chunk-W4NVOSFF.js +37 -0
  117. package/chunk-WKM6FH35.js +190 -0
  118. package/chunk-WWC7I6TA.js +8 -0
  119. package/chunk-X7W4TNB4.js +1550 -0
  120. package/chunk-XE635NI4.js +1948 -0
  121. package/chunk-XKIMRZO2.js +221 -0
  122. package/chunk-XS466O7S.js +933 -0
  123. package/chunk-Y5GCAMGP.js +9 -0
  124. package/chunk-YBWOP46I.js +3272 -0
  125. package/chunk-YPRZSPF3.js +148 -0
  126. package/chunk-YYUCRDOK.js +69 -0
  127. package/chunk-Z4NR32XR.js +50 -0
  128. package/chunk-ZIG5LJ7X.js +24765 -0
  129. package/chunk-ZNFJWEN4.js +56 -0
  130. package/chunk-ZQ2UM4KG.js +2878 -0
  131. package/cliExecutor-DNE7TCC4.js +36 -0
  132. package/clipboardy-BVE3LVEH.js +12001 -0
  133. package/createAgentAutomationAction-63OIP6X5.js +866 -0
  134. package/createDialogAction-ZLYZDYBB.js +54 -0
  135. package/createPageAction-AL5FSDCK.js +171 -0
  136. package/db-HCJ5PRB5.js +271 -0
  137. package/dbSlice-PR44QPXY.js +60 -0
  138. package/deleteFile-4SKGPHOZ.js +41 -0
  139. package/dialogCommands-F6YI5742.js +63 -0
  140. package/dialogSlice-JSBNZRLR.js +148 -0
  141. package/docCreateCommands-4CTO7ERT.js +219 -0
  142. package/docDeleteCommands-VBWERDRG.js +180 -0
  143. package/docReadCommands-KNP4MFYB.js +133 -0
  144. package/docStore-ADP5VYY4.js +98 -0
  145. package/docUpdateCommands-4BCBJQHA.js +317 -0
  146. package/fetchMessages-U6ZHN56A.js +17 -0
  147. package/getPricing-3E6UNPKL.js +30 -0
  148. package/handleSendMessageAction-IJDQ6ARA.js +185 -0
  149. package/index.js +188 -112943
  150. package/lib-FYYBQIXS.js +19839 -0
  151. package/localDialogRead-Z5UTAJPU.js +26 -0
  152. package/localFirstLog-DHNOY2NA.js +19 -0
  153. package/localRuntimeAuthority-TEGCOWX4.js +471 -0
  154. package/localRuntimeDb-LGDF6FQP.js +12 -0
  155. package/machineCommands-EA3M4XTN.js +779 -0
  156. package/machineInfo-M6KB6HZN.js +10 -0
  157. package/machineWsRunDispatch-NAPKE5ZA.js +110 -0
  158. package/memoryCommands-O4MIPIWQ.js +476 -0
  159. package/models-4OPOOLFS.js +9 -0
  160. package/offlineMarxistsAgentCommand-BCPJITJL.js +242 -0
  161. package/package.json +3 -25
  162. package/read-RIJCIVKX.js +17 -0
  163. package/readDocTool-GZD2N3LO.js +16 -0
  164. package/readlineWorkspace-KMWT4T4S.js +5509 -0
  165. package/removeDialogAgentAction-GJQJNDW6.js +73 -0
  166. package/runAgentClientLoop-U5Q6NDTJ.js +291 -0
  167. package/runtimeDoctorCommands-LRHLPDRC.js +289 -0
  168. package/setDialogExtraReferencesAction-M7OQG54N.js +60 -0
  169. package/setPrimaryDialogAgentAction-46UNFJDL.js +80 -0
  170. package/settingSlice-FVUUH4JA.js +199 -0
  171. package/skillSummaryMarker-42HKSXYY.js +9 -0
  172. package/slateToRenderMarkdown-Y5IYN73U.js +7 -0
  173. package/slateUtils-2M7MUTWX.js +19 -0
  174. package/spaceCommands-E2CFRPZJ.js +454 -0
  175. package/spaceSlice-L3R6IMXE.js +147 -0
  176. package/streamAgentChatTurn-UBDAOQWE.js +4528 -0
  177. package/tableCommands-GOFP7QKA.js +1286 -0
  178. package/toolApiClient-QI3YBNWB.js +26 -0
  179. package/tools-TMJXZTCA.js +85 -0
  180. package/tuiSummaryLlmCaller-RV3THLZF.js +78 -0
  181. package/understanding-GQKNDDWM.js +271 -0
  182. package/updateCommands-VOSPKXFF.js +31 -0
  183. package/updateDialogTitleAction-ZTWRDXI2.js +188 -0
@@ -0,0 +1,188 @@
1
+ import {
2
+ API_VERSION
3
+ } from "./chunk-LCBAMY2M.js";
4
+
5
+ // packages/auth/routes.ts
6
+ var authRoutes = {
7
+ login: {
8
+ path: `${API_VERSION}/users/login`,
9
+ method: "POST",
10
+ createPath: () => `${API_VERSION}/users/login`
11
+ },
12
+ signup: {
13
+ path: `${API_VERSION}/users/signup`,
14
+ method: "POST",
15
+ createPath: () => `${API_VERSION}/users/signup`
16
+ },
17
+ users: {
18
+ cliLoginStart: {
19
+ path: `${API_VERSION}/users/cli-login/start`,
20
+ method: "POST",
21
+ createPath: () => `${API_VERSION}/users/cli-login/start`
22
+ },
23
+ cliLoginAuthorize: {
24
+ path: `${API_VERSION}/users/cli-login/authorize`,
25
+ method: "POST",
26
+ createPath: () => `${API_VERSION}/users/cli-login/authorize`
27
+ },
28
+ cliLoginPoll: {
29
+ path: `${API_VERSION}/users/cli-login/poll`,
30
+ method: "POST",
31
+ createPath: () => `${API_VERSION}/users/cli-login/poll`
32
+ },
33
+ list: {
34
+ path: `${API_VERSION}/users`,
35
+ method: "GET",
36
+ createPath: () => `${API_VERSION}/users`
37
+ },
38
+ usageReport: {
39
+ path: `${API_VERSION}/users/usage-report`,
40
+ method: "GET",
41
+ createPath: () => `${API_VERSION}/users/usage-report`
42
+ },
43
+ growthReport: {
44
+ path: `${API_VERSION}/users/growth-report`,
45
+ method: "GET",
46
+ createPath: () => `${API_VERSION}/users/growth-report`
47
+ },
48
+ providerBillingHealth: {
49
+ path: `${API_VERSION}/users/provider-billing-health`,
50
+ method: "GET",
51
+ createPath: () => `${API_VERSION}/users/provider-billing-health`
52
+ },
53
+ providerBillingDrilldown: {
54
+ path: `${API_VERSION}/users/provider-billing-drilldown`,
55
+ method: "GET",
56
+ createPath: () => `${API_VERSION}/users/provider-billing-drilldown`
57
+ },
58
+ providerCredentials: {
59
+ path: `${API_VERSION}/users/provider-credentials`,
60
+ method: "GET",
61
+ createPath: () => `${API_VERSION}/users/provider-credentials`
62
+ },
63
+ providerCredentialLifecycle: {
64
+ path: `${API_VERSION}/users/provider-credentials/lifecycle`,
65
+ method: "POST",
66
+ createPath: () => `${API_VERSION}/users/provider-credentials/lifecycle`
67
+ },
68
+ billingAnomalyLifecycle: {
69
+ path: `${API_VERSION}/users/billing-anomalies/lifecycle`,
70
+ method: "POST",
71
+ createPath: () => `${API_VERSION}/users/billing-anomalies/lifecycle`
72
+ },
73
+ billingAnomalyDrilldown: {
74
+ path: `${API_VERSION}/users/billing-anomalies/drilldown`,
75
+ method: "GET",
76
+ createPath: () => `${API_VERSION}/users/billing-anomalies/drilldown`
77
+ },
78
+ billingAnomalyAudit: {
79
+ path: `${API_VERSION}/users/billing-anomalies/audit`,
80
+ method: "POST",
81
+ createPath: () => `${API_VERSION}/users/billing-anomalies/audit`
82
+ },
83
+ detail: {
84
+ path: `${API_VERSION}/users/:userId`,
85
+ method: "GET",
86
+ createPath: (params) => `${API_VERSION}/users/${params.userId}`
87
+ },
88
+ sessionRevoke: {
89
+ path: `${API_VERSION}/users/session-revoke`,
90
+ method: "POST",
91
+ createPath: () => `${API_VERSION}/users/session-revoke`
92
+ },
93
+ transfer: {
94
+ path: `${API_VERSION}/users/:userId/transfer`,
95
+ method: "POST",
96
+ createPath: (params) => `${API_VERSION}/users/${params.userId}/transfer`
97
+ },
98
+ delete: {
99
+ path: `${API_VERSION}/users/:userId`,
100
+ method: "DELETE",
101
+ createPath: (params) => `${API_VERSION}/users/${params.userId}`
102
+ },
103
+ disable: {
104
+ path: `${API_VERSION}/users/:userId/disable`,
105
+ method: "POST",
106
+ createPath: (params) => `${API_VERSION}/users/${params.userId}/disable`
107
+ },
108
+ enable: {
109
+ path: `${API_VERSION}/users/:userId/enable`,
110
+ method: "POST",
111
+ createPath: (params) => `${API_VERSION}/users/${params.userId}/enable`
112
+ },
113
+ adminPermissions: {
114
+ path: `${API_VERSION}/users/:userId/admin-permissions`,
115
+ method: "POST",
116
+ createPath: (params) => `${API_VERSION}/users/${params.userId}/admin-permissions`
117
+ },
118
+ sendEmail: {
119
+ path: `${API_VERSION}/users/send-email`,
120
+ method: "POST",
121
+ createPath: () => `${API_VERSION}/users/send-email`
122
+ },
123
+ spaceInvite: {
124
+ path: `${API_VERSION}/users/space-invite`,
125
+ method: "POST",
126
+ createPath: () => `${API_VERSION}/users/space-invite`
127
+ },
128
+ spaceInviteStatus: {
129
+ path: `${API_VERSION}/users/space-invite/status`,
130
+ method: "GET",
131
+ createPath: () => `${API_VERSION}/users/space-invite/status`
132
+ },
133
+ spaceInviteAccept: {
134
+ path: `${API_VERSION}/users/space-invite/accept`,
135
+ method: "POST",
136
+ createPath: () => `${API_VERSION}/users/space-invite/accept`
137
+ },
138
+ emailPreferencesGet: {
139
+ path: `${API_VERSION}/users/email-preferences`,
140
+ method: "GET",
141
+ createPath: () => `${API_VERSION}/users/email-preferences`
142
+ },
143
+ emailPreferencesUpdate: {
144
+ path: `${API_VERSION}/users/email-preferences`,
145
+ method: "POST",
146
+ createPath: () => `${API_VERSION}/users/email-preferences`
147
+ },
148
+ emailReport: {
149
+ path: `${API_VERSION}/users/email-report`,
150
+ method: "GET",
151
+ createPath: () => `${API_VERSION}/users/email-report`
152
+ },
153
+ emailRetryRun: {
154
+ path: `${API_VERSION}/users/email-retry/run`,
155
+ method: "POST",
156
+ createPath: () => `${API_VERSION}/users/email-retry/run`
157
+ },
158
+ emailReplayFailures: {
159
+ path: `${API_VERSION}/users/email-replay-failures`,
160
+ method: "POST",
161
+ createPath: () => `${API_VERSION}/users/email-replay-failures`
162
+ },
163
+ emailConfigGet: {
164
+ path: `${API_VERSION}/users/email-config`,
165
+ method: "GET",
166
+ createPath: () => `${API_VERSION}/users/email-config`
167
+ },
168
+ emailConfigUpdate: {
169
+ path: `${API_VERSION}/users/email-config`,
170
+ method: "POST",
171
+ createPath: () => `${API_VERSION}/users/email-config`
172
+ },
173
+ emailUnsubscribe: {
174
+ path: `${API_VERSION}/users/email-unsubscribe`,
175
+ method: "GET",
176
+ createPath: () => `${API_VERSION}/users/email-unsubscribe`
177
+ },
178
+ rechargeHistory: {
179
+ path: `${API_VERSION}/users/:userId/recharge-history`,
180
+ method: "POST",
181
+ createPath: (params) => `${API_VERSION}/users/${params.userId}/recharge-history`
182
+ }
183
+ }
184
+ };
185
+
186
+ export {
187
+ authRoutes
188
+ };
@@ -0,0 +1,6 @@
1
+ // packages/cli/defaultServer.ts
2
+ var DEFAULT_NOLO_SERVER_URL = "https://nolo.chat";
3
+
4
+ export {
5
+ DEFAULT_NOLO_SERVER_URL
6
+ };
@@ -0,0 +1,89 @@
1
+ // packages/agent-runtime/thinkTagParser.ts
2
+ var OPEN_TAG = "<think>";
3
+ var CLOSE_TAG = "</think>";
4
+ function longestTagPrefixLength(buffer, tag) {
5
+ const max = Math.min(buffer.length, tag.length - 1);
6
+ for (let len = max; len > 0; len--) {
7
+ if (tag.startsWith(buffer.slice(-len))) {
8
+ return len;
9
+ }
10
+ }
11
+ return 0;
12
+ }
13
+ function extractThinkContent(content) {
14
+ const regex = new RegExp(`${OPEN_TAG}([\\s\\S]*?)${CLOSE_TAG}`, "g");
15
+ const matches = [...content.matchAll(regex)];
16
+ if (matches.length === 0) {
17
+ return { content };
18
+ }
19
+ const reasoning = matches.map((m) => m[1]).join("\n");
20
+ const cleaned = content.replace(regex, "");
21
+ return { content: cleaned.replace(/^\n/, ""), reasoning };
22
+ }
23
+ function createThinkParserState() {
24
+ return { mode: "content", buffer: "", trimNextVisible: false };
25
+ }
26
+ function processThinkChunk(chunk, state) {
27
+ let visible = "";
28
+ let reasoning = "";
29
+ let { mode, buffer, trimNextVisible } = state;
30
+ buffer += chunk;
31
+ while (true) {
32
+ if (mode === "content") {
33
+ const idx = buffer.indexOf(OPEN_TAG);
34
+ if (idx === -1) {
35
+ const keep = longestTagPrefixLength(buffer, OPEN_TAG);
36
+ visible += buffer.slice(0, buffer.length - keep);
37
+ buffer = buffer.slice(buffer.length - keep);
38
+ break;
39
+ }
40
+ visible += buffer.slice(0, idx);
41
+ buffer = buffer.slice(idx + OPEN_TAG.length);
42
+ mode = "reasoning";
43
+ } else {
44
+ const idx = buffer.indexOf(CLOSE_TAG);
45
+ if (idx === -1) {
46
+ const keep = longestTagPrefixLength(buffer, CLOSE_TAG);
47
+ reasoning += buffer.slice(0, buffer.length - keep);
48
+ buffer = buffer.slice(buffer.length - keep);
49
+ break;
50
+ }
51
+ reasoning += buffer.slice(0, idx);
52
+ buffer = buffer.slice(idx + CLOSE_TAG.length);
53
+ mode = "content";
54
+ trimNextVisible = true;
55
+ }
56
+ }
57
+ if (mode === "content" && visible.length > 0 && trimNextVisible) {
58
+ visible = visible.replace(/^\n/, "");
59
+ trimNextVisible = false;
60
+ }
61
+ return { content: visible, reasoning, state: { mode, buffer, trimNextVisible } };
62
+ }
63
+ function flushThinkParser(state) {
64
+ const { mode, buffer, trimNextVisible } = state;
65
+ if (mode === "reasoning") {
66
+ return {
67
+ content: "",
68
+ reasoning: buffer,
69
+ state: { mode: "content", buffer: "", trimNextVisible: false }
70
+ };
71
+ }
72
+ let visible = buffer;
73
+ const nextTrim = trimNextVisible;
74
+ if (nextTrim) {
75
+ visible = visible.replace(/^\n/, "");
76
+ }
77
+ return {
78
+ content: visible,
79
+ reasoning: "",
80
+ state: { mode: "content", buffer: "", trimNextVisible: false }
81
+ };
82
+ }
83
+
84
+ export {
85
+ extractThinkContent,
86
+ createThinkParserState,
87
+ processThinkChunk,
88
+ flushThinkParser
89
+ };
@@ -0,0 +1,50 @@
1
+ import {
2
+ compactWhitespace
3
+ } from "./chunk-DWLEOOGR.js";
4
+
5
+ // packages/chat/dialog/dialogTitle.ts
6
+ var GENERATED_DIALOG_TITLE_MAX_CHARS = 36;
7
+ var FALLBACK_DIALOG_TITLE_MAX_CHARS = 24;
8
+ var WRAPPING_QUOTES_RE = /^[`"'“”‘’「」『』《》]+|[`"'“”‘’「」『』《》]+$/gu;
9
+ var TRAILING_TITLE_PUNCTUATION_RE = /[。!?!?;;,,、::]+$/u;
10
+ var clip = (text, maxChars) => text.length <= maxChars ? text : `${text.slice(0, maxChars - 1).trimEnd()}\u2026`;
11
+ var toSingleLine = (value) => value.replace(/\r\n?/g, "\n").split("\n").map((line) => line.trim()).find(Boolean) ?? "";
12
+ var stripTitleFormatting = (value) => value.replace(/^(?:[-*#>]+\s*|\d+\.\s+)/, "").replace(WRAPPING_QUOTES_RE, "").replace(TRAILING_TITLE_PUNCTUATION_RE, "").trim();
13
+ var pickLeadingClause = (value) => {
14
+ const firstLine = toSingleLine(value);
15
+ if (!firstLine) return "";
16
+ const separatorIndexes = [firstLine.indexOf("\uFF1A"), firstLine.indexOf(":")].filter((index) => index > 0).sort((left, right) => left - right);
17
+ for (const index of separatorIndexes) {
18
+ const clause = firstLine.slice(0, index).trim();
19
+ if (clause.length >= 4) return clause;
20
+ }
21
+ return firstLine;
22
+ };
23
+ var normalizeDialogTitle = (rawTitle, maxChars = GENERATED_DIALOG_TITLE_MAX_CHARS) => {
24
+ if (typeof rawTitle !== "string") return "";
25
+ const normalized = stripTitleFormatting(
26
+ compactWhitespace(toSingleLine(rawTitle))
27
+ );
28
+ if (!normalized) return "";
29
+ return clip(normalized, maxChars);
30
+ };
31
+ var buildDialogFallbackTitleFromUserInput = (userInput, maxChars = FALLBACK_DIALOG_TITLE_MAX_CHARS) => {
32
+ if (typeof userInput !== "string") return "";
33
+ const candidate = pickLeadingClause(userInput);
34
+ return normalizeDialogTitle(candidate || userInput, maxChars);
35
+ };
36
+ var buildDialogFallbackTitleFromMessages = (messages) => {
37
+ for (const message of messages) {
38
+ if (message?.role !== "user") continue;
39
+ const title = buildDialogFallbackTitleFromUserInput(message?.content);
40
+ if (title) return title;
41
+ }
42
+ return "";
43
+ };
44
+ var resolveDialogTitle = (generatedTitle, fallbackTitle) => normalizeDialogTitle(generatedTitle) || fallbackTitle.trim();
45
+
46
+ export {
47
+ normalizeDialogTitle,
48
+ buildDialogFallbackTitleFromMessages,
49
+ resolveDialogTitle
50
+ };
@@ -0,0 +1,239 @@
1
+ import {
2
+ canonicalizeToolNames
3
+ } from "./chunk-AUQ747NZ.js";
4
+ import {
5
+ asTrimmedString
6
+ } from "./chunk-3EUW3WEO.js";
7
+
8
+ // packages/agent-runtime/identityBlock.ts
9
+ var buildIdentityBlock = (input) => {
10
+ const lines = [
11
+ "--- \u8EAB\u4EFD\u4FE1\u606F ---",
12
+ asTrimmedString(input.agentName) ? `\u540D\u79F0: ${asTrimmedString(input.agentName)}` : "",
13
+ asTrimmedString(input.agentId) ? `ID: ${asTrimmedString(input.agentId)}` : "",
14
+ asTrimmedString(input.model) ? `\u6A21\u578B: ${asTrimmedString(input.model)}` : "",
15
+ `\u56DE\u590D\u8BED\u8A00: ${asTrimmedString(input.responseLanguage) || "\u9ED8\u8BA4\u8DDF\u968F\u7528\u6237\u672C\u8F6E\u8F93\u5165\u8BED\u8A00"}`
16
+ ].filter(Boolean);
17
+ return lines.join("\n");
18
+ };
19
+
20
+ // packages/agent-runtime/contextLayerContract.ts
21
+ var buildContextLayerContractBlock = (options = {}) => {
22
+ const lines = [
23
+ "--- \u77E5\u8BC6\u5B58\u50A8\u7EA6\u5B9A ---",
24
+ "\u4E0D\u8981\u628A\u6240\u6709\u4FE1\u606F\u90FD\u585E\u8FDB\u540C\u4E00\u5C42\u3002\u4F18\u5148\u5229\u7528\u5DF2\u6709\u7684 memory / knowledge / doc\uFF0C\u800C\u4E0D\u662F\u628A\u5B83\u4EEC\u6DF7\u6210\u4E00\u6BB5\u957F\u5BF9\u8BDD\u3002",
25
+ "",
26
+ "\u5C42\u6B21\u8FB9\u754C\uFF1A",
27
+ "1. memory layer\uFF1A\u653E\u77ED\u5230\u4E2D\u671F\u3001\u53EF\u590D\u7528\u4F46\u4E0D\u5FC5\u6C38\u4E45\u6302\u8F7D\u7684\u504F\u597D\u3001\u8FD1\u671F\u5171\u8BC6\u548C\u538B\u7F29\u540E\u7684\u7ECF\u9A8C\uFF1B\u8981\u77ED\u3001\u53EF\u68C0\u7D22\u3001\u53EF\u66FF\u6362\u3002",
28
+ "2. knowledge layer\uFF1A\u653E\u7A33\u5B9A\u89C4\u5219\u3001\u957F\u671F\u6709\u6548\u4E8B\u5B9E\u548C\u6BCF\u8F6E\u90FD\u4F1A\u53CD\u590D\u4F9D\u8D56\u7684\u8BF4\u660E\uFF1B\u4F18\u5148\u901A\u8FC7 prompt / references \u81EA\u52A8\u52A0\u8F7D\u3002",
29
+ "3. doc layer\uFF1A\u653E\u9700\u8981\u8DE8\u8F6E\u6B21\u6301\u7EED\u7EF4\u62A4\u7684\u5916\u90E8\u5DE5\u4F5C\u53F0\uFF0C\u4F8B\u5982 runbook\u3001mission\u3001incident\u3001checkpoint\u3001idea backlog\u3001experiment log\uFF1B\u9700\u8981\u65F6\u663E\u5F0F\u8BFB\u53D6\u548C\u66F4\u65B0\u3002",
30
+ "",
31
+ "\u5199\u5165\u539F\u5219\uFF1A",
32
+ "- \u4E34\u65F6\u6B65\u9AA4\u3001\u539F\u59CB\u957F\u65E5\u5FD7\u3001\u4E00\u6B21\u6027\u601D\u8DEF\uFF0C\u4E0D\u8981\u76F4\u63A5\u5199\u8FDB memory \u6216 knowledge\u3002",
33
+ "- \u7A33\u5B9A\u884C\u4E3A\u89C4\u5219\u3001\u957F\u671F\u56FA\u5B9A\u7EA6\u675F\uFF0C\u4F18\u5148\u6C89\u6DC0\u5230 knowledge layer\u3002",
34
+ "- \u7528\u6237\u504F\u597D\u3001\u6700\u8FD1\u5F62\u6210\u7684\u534F\u4F5C\u5171\u8BC6\u3001\u8FD1\u671F\u53CD\u590D\u6709\u7528\u7684\u7ECF\u9A8C\uFF0C\u4F18\u5148\u6C89\u6DC0\u5230 memory layer\u3002",
35
+ "- \u9700\u8981\u8DE8\u8F6E\u6B21\u63A5\u529B\u7684\u4EFB\u52A1\u72B6\u6001\u3001\u8FD0\u884C\u624B\u518C\u3001\u4E8B\u6545\u8BB0\u5F55\u3001\u68C0\u67E5\u70B9\uFF0C\u4F18\u5148\u5199\u5165 doc layer\u3002"
36
+ ];
37
+ if (options.hasRememberMemoryTool) {
38
+ lines.push(
39
+ "- \u5F53\u67D0\u6761\u504F\u597D\u3001\u8FD1\u671F\u5171\u8BC6\u6216\u590D\u7528\u7ECF\u9A8C\u5BF9\u672A\u6765\u660E\u663E\u6709\u5E2E\u52A9\u65F6\uFF0C\u53EF\u4EE5\u8C03\u7528 rememberMemory\uFF0C\u4F46\u8981\u5199\u6210\u7B80\u6D01\u53EF\u590D\u7528\u7684\u4E00\u53E5\u8BDD\uFF1B\u53EA\u6709\u5F53\u524D dialog \u660E\u786E\u7ED1\u5B9A\u4E86 space\uFF0C\u4E14\u5185\u5BB9\u5C5E\u4E8E\u5171\u4EAB\u534F\u4F5C\u89C4\u5219\u65F6\u624D\u5199 space memory\u3002"
40
+ );
41
+ }
42
+ if (options.hasDocTools) {
43
+ lines.push(
44
+ "- \u5F53\u4EFB\u52A1\u9700\u8981 24h \u8FDE\u7EED\u8FD0\u884C\u3001\u8DE8 dialog \u63A5\u529B\u6216\u4EBA\u5DE5\u4E0E agent \u5171\u8BFB\u65F6\uFF0C\u4F18\u5148\u628A mission / runbook / incident / checkpoint / idea backlog / experiment log \u5199\u5165 doc layer\u3002"
45
+ );
46
+ }
47
+ return lines.join("\n");
48
+ };
49
+
50
+ // packages/agent-runtime/startupProtocol.ts
51
+ var buildStartupProtocolBlock = (options = {}) => {
52
+ const lines = [
53
+ "--- \u542F\u52A8\u534F\u8BAE ---",
54
+ "\u542F\u52A8\u987A\u5E8F\uFF1A",
55
+ "1. \u5148\u8BFB\u53D6 policy / knowledge\uFF1A\u4F60\u7684\u6838\u5FC3 prompt\u3001\u81EA\u52A8\u52A0\u8F7D\u7684 references\u3001\u4EE5\u53CA\u7528\u6237\u7B56\u7565\u7EA6\u675F\u3002",
56
+ "2. \u518D\u63D0\u70BC current mission\uFF1A\u4F18\u5148\u4ECE\u5F53\u524D\u7528\u6237\u8F93\u5165\u548C\u5F53\u524D\u8F93\u5165\u4E0A\u4E0B\u6587\u91CC\u786E\u8BA4\u672C\u8F6E\u76EE\u6807\u3001\u4EA4\u4ED8\u7269\u548C\u505C\u6B62\u6761\u4EF6\u3002",
57
+ "3. \u518D\u5438\u6536 recent memory\uFF1A\u7ED3\u5408 Memory Overlay\u3001\u5386\u53F2\u6458\u8981\u3001\u6700\u8FD1\u5DE5\u4F5C\u8BB0\u5FC6\u548C\u5FC5\u8981\u7684\u5386\u53F2\u5F15\u7528\uFF0C\u53EA\u4FDD\u7559\u5BF9\u672C\u8F6E\u771F\u6B63\u6709\u5E2E\u52A9\u7684\u90E8\u5206\u3002",
58
+ "4. \u9700\u8981\u65F6\u518D\u8BFB\u53D6 doc\uFF1A\u5982\u679C\u4EFB\u52A1\u6D89\u53CA\u8DE8\u8F6E\u6B21\u63A5\u529B\u3001\u8FD0\u884C\u624B\u518C\u6216\u5171\u4EAB\u5DE5\u4F5C\u53F0\uFF0C\u8BFB\u53D6\u76F8\u5173 doc \u83B7\u53D6\u6700\u65B0\u72B6\u6001\u3002",
59
+ "",
60
+ "\u5728\u7B2C\u4E00\u6B21\u5DE5\u5177\u8C03\u7528\u524D\uFF0C\u5148\u5F62\u6210\u4E00\u4EFD\u5185\u90E8 working state\uFF0C\u81F3\u5C11\u5305\u542B\uFF1A",
61
+ "- current_goal\uFF1A\u8FD9\u4E00\u8F6E\u771F\u6B63\u8981\u5B8C\u6210\u4EC0\u4E48",
62
+ "- constraints\uFF1A\u5F53\u524D\u7EA6\u675F\u3001\u504F\u597D\u3001\u8FB9\u754C\u6761\u4EF6",
63
+ "- missing_facts\uFF1A\u8FD8\u7F3A\u54EA\u4E9B\u4E8B\u5B9E\u624D\u80FD\u5B89\u5168\u884C\u52A8",
64
+ "- next_action\uFF1A\u4E0B\u4E00\u6B65\u6700\u5C0F\u4E14\u9AD8\u4EF7\u503C\u7684\u52A8\u4F5C",
65
+ "",
66
+ "\u51B3\u7B56\u89C4\u5219\uFF1A",
67
+ "- \u5982\u679C policy / knowledge \u5DF2\u7ECF\u8DB3\u591F\u56DE\u7B54\uFF0C\u5C31\u76F4\u63A5\u56DE\u7B54\uFF0C\u4E0D\u8981\u4E3A\u4E86\u663E\u5F97\u5FD9\u800C\u4E71\u8C03\u7528\u5DE5\u5177\u3002",
68
+ "- \u5982\u679C recent memory \u4E0E\u5F53\u524D\u7528\u6237\u8F93\u5165\u51B2\u7A81\uFF0C\u4EE5\u5F53\u524D\u7528\u6237\u8F93\u5165\u4E3A\u51C6\u3002",
69
+ "- \u5982\u679C\u9700\u8981\u4F9D\u8D56\u73AF\u5883\u3001\u6587\u4EF6\u72B6\u6001\u3001\u8FD0\u884C\u65F6\u4E8B\u5B9E\u6216\u5916\u90E8\u771F\u503C\uFF0C\u5148\u9A8C\u8BC1\uFF0C\u518D\u884C\u52A8\u3002",
70
+ "- \u4F18\u5148\u5C0F\u6B65\u63A8\u8FDB\uFF1B\u6BCF\u4E00\u8F6E\u5148\u505A\u6700\u80FD\u964D\u4F4E\u4E0D\u786E\u5B9A\u6027\u7684\u52A8\u4F5C\u3002"
71
+ ];
72
+ if (options.hasCheckEnvTool || options.hasExecShellTool) {
73
+ lines.push(
74
+ "- \u53EA\u8981\u4EFB\u52A1\u6D89\u53CA\u547D\u4EE4\u6267\u884C\u3001shell \u8BED\u6CD5\u3001\u8DEF\u5F84\u7EA6\u5B9A\u3001\u8FD0\u884C\u5E73\u53F0\u6216\u670D\u52A1\u72B6\u6001\uFF0C\u5E76\u4E14\u8FD9\u4E9B\u4E8B\u5B9E\u8FD8\u4E0D\u591F\u660E\u786E\uFF0C\u5C31\u5148\u786E\u8BA4\u73AF\u5883\u3002"
75
+ );
76
+ }
77
+ if (options.hasCheckEnvTool) {
78
+ lines.push(
79
+ "- \u73AF\u5883\u4E0D\u660E\u786E\u65F6\uFF0C\u4F18\u5148\u8C03\u7528 checkEnv({ check: 'context' })\uFF0C\u518D\u51B3\u5B9A\u540E\u7EED\u547D\u4EE4\u548C\u5DE5\u5177\u8DEF\u5F84\u3002"
80
+ );
81
+ }
82
+ if (options.hasExecShellTool) {
83
+ lines.push(
84
+ "- \u9700\u8981\u6267\u884C\u547D\u4EE4\u65F6\uFF0C\u5148\u6839\u636E\u5DF2\u786E\u8BA4\u7684\u73AF\u5883\u9009\u62E9 shell\uFF1BWindows \u9ED8\u8BA4 PowerShell\uFF0CLinux/macOS \u9ED8\u8BA4 bash\u3002"
85
+ );
86
+ lines.push(
87
+ "- \u5982\u679C\u53EA\u662F\u6536\u96C6\u591A\u4E2A\u53EA\u8BFB\u73AF\u5883\u4E8B\u5B9E\uFF0C\u4F18\u5148\u5408\u5E76\u6210\u4E00\u6B21 shell \u8C03\u7528\u6216\u4E00\u6761\u7EC4\u5408\u547D\u4EE4\uFF0C\u907F\u514D\u62C6\u6210\u5F88\u591A\u5C0F\u63A2\u9488\u3002"
88
+ );
89
+ }
90
+ return lines.join("\n");
91
+ };
92
+
93
+ // packages/agent-runtime/runtimeGuidance.ts
94
+ var normalizeToolName = (name) => name.replace(/[-_]/g, "").toLowerCase();
95
+ var hasAnyTool = (normalizedTools, candidates) => candidates.some((candidate) => normalizedTools.has(normalizeToolName(candidate)));
96
+ var hasAllTools = (normalizedTools, candidates) => candidates.every((candidate) => normalizedTools.has(normalizeToolName(candidate)));
97
+ var buildEmailRegistrationWorkflowBlock = (enabled) => {
98
+ if (!enabled) return "";
99
+ return [
100
+ "--- \u90AE\u7BB1\u9A8C\u8BC1\u7801\u6CE8\u518C\u6D41\u7A0B ---",
101
+ "\u5F53\u7528\u6237\u8981\u6C42\u4F60\u6CE8\u518C\u7F51\u7AD9\u8D26\u53F7\u65F6\uFF0C\u53EA\u5141\u8BB8\u5904\u7406\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u5F53\u524D\u76EE\u6807\u7F51\u7AD9\uFF0C\u4E0D\u8981\u81EA\u884C\u6269\u5C55\u5230\u5176\u4ED6\u7F51\u7AD9\u3001\u6279\u91CF\u6CE8\u518C\u6216\u89C4\u907F\u5E73\u53F0\u98CE\u63A7\u3002",
102
+ "",
103
+ "\u5206\u9636\u6BB5\u534F\u8BAE\uFF1Adiscover before acting -> assess supportability -> register -> verify -> closeout\u3002",
104
+ "",
105
+ "\u63A8\u8350\u6D41\u7A0B\uFF1A",
106
+ "1. discover before acting\uFF1A\u5148\u7528 browser_openSession / browser_readContent \u9605\u8BFB\u9875\u9762\uFF0C\u786E\u8BA4\u76EE\u6807\u6CE8\u518C\u9875 URL\u3001\u8D26\u53F7\u7528\u9014\u3001\u5FC5\u586B\u9879\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u4E0D\u8981\u4E00\u6253\u5F00\u9875\u9762\u5C31\u76F2\u70B9\u6309\u94AE\u3002\u5982\u679C\u7F3A\u5C11\u76EE\u6807\u7F51\u7AD9\uFF0C\u5148\u8BE2\u95EE\u7528\u6237\u3002",
107
+ "2. assess supportability\uFF1A\u5148\u5224\u65AD\u8BE5\u6D41\u7A0B\u662F\u5426\u652F\u6301\u5F53\u524D\u53D7\u63A7\u81EA\u52A8\u5316\u3002\u9047\u5230 CAPTCHA\u3001\u624B\u673A\u53F7\u9A8C\u8BC1\u3001\u652F\u4ED8\u3001\u8EAB\u4EFD/KYC\u3001OAuth-only\u3001\u670D\u52A1\u6761\u6B3E\u786E\u8BA4\u3001\u6216\u4EFB\u4F55\u770B\u8D77\u6765\u50CF\u89C4\u907F\u98CE\u63A7\u7684\u6B65\u9AA4\u65F6\uFF0C\u5FC5\u987B\u7ACB\u5373\u505C\u6B62\u5E76\u5411\u7528\u6237\u8BF4\u660E blockingReason\uFF1B\u4E0D\u8981\u786C\u95EF\u3002",
108
+ "3. register\uFF1A\u53EA\u6709\u5728\u786E\u8BA4\u652F\u6301\u540E\uFF0C\u624D\u4F7F\u7528 email_provision_identity \u4E3A\u5F53\u524D agent \u751F\u6210\u53D7\u63A7\u57DF\u540D\u90AE\u7BB1\u8EAB\u4EFD\uFF0C\u518D\u4F7F\u7528 browser_openSession / browser_typeText / browser_click / browser_readContent \u586B\u5199\u5E76\u63D0\u4EA4\u6CE8\u518C\u8868\u5355\u3002",
109
+ "4. verify\uFF1A\u63D0\u4EA4\u540E\u4F7F\u7528 email_wait_for \u7B49\u5F85\u8BE5 agent \u6536\u4EF6\u7BB1\u91CC\u7684\u9A8C\u8BC1\u90AE\u4EF6\uFF0C\u518D\u7528 email_extract_verification \u63D0\u53D6\u9A8C\u8BC1\u7801\u6216\u9A8C\u8BC1\u94FE\u63A5\uFF0C\u56DE\u586B\u9A8C\u8BC1\u7801\u6216\u6253\u5F00\u9A8C\u8BC1\u94FE\u63A5\u5B8C\u6210\u9A8C\u8BC1\u3002",
110
+ "5. closeout\uFF1A\u65E0\u8BBA\u6210\u529F\u8FD8\u662F\u5931\u8D25\u90FD\u8981 always close sessions\uFF0C\u4E3B\u52A8\u6E05\u7406\u6D4F\u89C8\u5668\u4F1A\u8BDD\uFF08\u4F8B\u5982 browser_closeSession\uFF09\u3002\u5982\u679C\u6D41\u7A0B\u5931\u8D25\uFF0C\u5FC5\u987B\u660E\u786E failedStage \u4E0E blockingReason\uFF0C\u5E76\u8BF4\u660E\u53EF\u6062\u590D\u9009\u9879\uFF1B\u4E0D\u8981\u76F2\u76EE\u5C1D\u8BD5\u65E0\u5173\u7F51\u7AD9\u6216\u7ED5\u8FC7\u9A8C\u8BC1\u3002",
111
+ "6. \u6700\u7EC8\u53EA\u5728\u5BF9\u8BDD\u4E2D\u8FD4\u56DE\u8D26\u53F7\u3001\u90AE\u7BB1\u548C\u4E00\u6B21\u6027\u751F\u6210\u7684\u5BC6\u7801\uFF1B\u4E0D\u8981\u6301\u4E45\u5316\u5BC6\u7801\uFF0C\u4E0D\u8981\u5199\u5165 agent metadata\u3001\u6570\u636E\u5E93\u3001\u6587\u6863\u6216\u8BB0\u5FC6\u3002",
112
+ "",
113
+ "\u5FC5\u987B\u6682\u505C\u5E76\u8BE2\u95EE\u7528\u6237\u7684\u60C5\u51B5\uFF1ACAPTCHA\u3001\u624B\u673A\u53F7\u9A8C\u8BC1\u3001\u652F\u4ED8\u3001\u8EAB\u4EFD/KYC\u3001OAuth \u6388\u6743\u3001OAuth-only\u3001\u670D\u52A1\u6761\u6B3E\u786E\u8BA4\u3001\u6216\u4EFB\u4F55\u770B\u8D77\u6765\u50CF\u89C4\u907F\u98CE\u63A7\u7684\u6B65\u9AA4\u3002",
114
+ "\u5982\u679C\u6D41\u7A0B\u5931\u8D25\uFF0C\u8BF4\u660E failedStage\u3001blockingReason \u548C\u53EF\u6062\u590D\u9009\u9879\uFF0C\u4E0D\u8981\u76F2\u76EE\u5C1D\u8BD5\u65E0\u5173\u7F51\u7AD9\u6216\u7ED5\u8FC7\u9A8C\u8BC1\u3002"
115
+ ].join("\n");
116
+ };
117
+ var buildWebResearchToolPolicyBlock = (hasExecShellTool, hasFetchWebpageTool) => {
118
+ if (!hasExecShellTool || !hasFetchWebpageTool) return "";
119
+ return [
120
+ "--- \u751F\u4EA7\u73AF\u5883\u7F51\u9875\u7814\u7A76\u5DE5\u5177\u7B56\u7565 ---",
121
+ "\u751F\u4EA7\u73AF\u5883\u7F51\u9875\u7814\u7A76\u4F18\u5148\u4F7F\u7528 fetchWebpage\u3001\u7AD9\u70B9 Markdown / llms.txt\u3001\u6216\u4E13\u7528\u6D4F\u89C8/\u641C\u7D22\u5DE5\u5177\u3002",
122
+ "\u4E0D\u8981\u7528 execShell \u8C03 curl\u3001grep\u3001sed \u7B49\u547D\u4EE4\u6293\u7F51\u9875\u6216\u622A\u53D6\u7F51\u9875\u6BB5\u843D\uFF1B\u751F\u4EA7\u73AF\u5883\u901A\u5E38\u4F1A\u7981\u7528 dev shell\uFF0C\u53CD\u590D\u5C1D\u8BD5\u53EA\u4F1A\u6D6A\u8D39\u56DE\u5408\u3002",
123
+ "\u5982\u679C\u7F51\u9875\u5185\u5BB9\u8FC7\u957F\u6216\u951A\u70B9\u6BB5\u843D\u6CA1\u6709\u88AB\u5355\u72EC\u63D0\u53D6\uFF0C\u5148\u5BFB\u627E\u8BE5\u6587\u6863\u7AD9\u63D0\u4F9B\u7684 Markdown \u7248\u672C\u3001\u72EC\u7ACB\u9875\u9762\u3001llms.txt \u7D22\u5F15\u6216\u66F4\u5177\u4F53 URL\uFF0C\u518D\u7EE7\u7EED\u56DE\u7B54\u3002"
124
+ ].join("\n");
125
+ };
126
+ var resolveRuntimeGuidanceToolOptions = (tools = []) => {
127
+ const normalizedTools = canonicalizeToolNames(tools);
128
+ const normalizedToolSet = new Set(normalizedTools.map(normalizeToolName));
129
+ const hasBrowserTools = hasAllTools(normalizedToolSet, [
130
+ "browser_openSession",
131
+ "browser_readContent",
132
+ "browser_typeText",
133
+ "browser_click",
134
+ "browser_closeSession"
135
+ ]);
136
+ const hasBrowserProbe = hasAnyTool(normalizedToolSet, ["browser_probePage", "browserProbePage"]);
137
+ const hasEmailRegistrationTools = hasAllTools(normalizedToolSet, [
138
+ "email_provision_identity",
139
+ "email_wait_for",
140
+ "email_extract_verification"
141
+ ]);
142
+ return {
143
+ hasCheckEnvTool: normalizedTools.includes("checkEnv"),
144
+ hasExecShellTool: normalizedTools.includes("execShell"),
145
+ hasRememberMemoryTool: normalizedTools.includes("rememberMemory"),
146
+ hasDocTools: normalizedTools.some(
147
+ (tool) => ["read", "readDoc", "readPage", "createDoc", "updateDoc"].includes(tool)
148
+ ),
149
+ hasBrowserTools,
150
+ hasEmailRegistrationTools,
151
+ // Require browser_probePage to be present before enabling email registration workflow guidance.
152
+ hasEmailRegistrationWorkflow: hasBrowserTools && hasBrowserProbe && hasEmailRegistrationTools
153
+ };
154
+ };
155
+ var buildRuntimeGuidanceBlocks = (tools = []) => {
156
+ const options = resolveRuntimeGuidanceToolOptions(tools);
157
+ const normalizedTools = canonicalizeToolNames(tools);
158
+ return {
159
+ startupProtocol: buildStartupProtocolBlock({
160
+ hasCheckEnvTool: options.hasCheckEnvTool,
161
+ hasExecShellTool: options.hasExecShellTool
162
+ }),
163
+ contextLayerContract: buildContextLayerContractBlock({
164
+ hasRememberMemoryTool: options.hasRememberMemoryTool,
165
+ hasDocTools: options.hasDocTools
166
+ }),
167
+ emailRegistrationWorkflow: buildEmailRegistrationWorkflowBlock(
168
+ options.hasEmailRegistrationWorkflow
169
+ ),
170
+ webResearchToolPolicy: buildWebResearchToolPolicyBlock(
171
+ options.hasExecShellTool,
172
+ normalizedTools.includes("fetchWebpage")
173
+ )
174
+ };
175
+ };
176
+
177
+ // packages/agent-runtime/currentTimeContext.ts
178
+ var pad2 = (value) => String(value).padStart(2, "0");
179
+ var resolveDefaultTimeZone = () => {
180
+ try {
181
+ return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
182
+ } catch {
183
+ return "UTC";
184
+ }
185
+ };
186
+ var partsForTimeZone = (date, timeZone) => {
187
+ const parts = new Intl.DateTimeFormat("en-US", {
188
+ timeZone,
189
+ year: "numeric",
190
+ month: "2-digit",
191
+ day: "2-digit",
192
+ hour: "2-digit",
193
+ minute: "2-digit",
194
+ second: "2-digit",
195
+ hour12: false
196
+ }).formatToParts(date);
197
+ return Object.fromEntries(
198
+ parts.filter((part) => part.type !== "literal").map((part) => [part.type, part.value])
199
+ );
200
+ };
201
+ var zonedDateTime = (date, timeZone) => {
202
+ const parts = partsForTimeZone(date, timeZone);
203
+ return [
204
+ `${parts.year}-${parts.month}-${parts.day}`,
205
+ `${parts.hour}:${parts.minute}:${parts.second}`
206
+ ].join(" ");
207
+ };
208
+ var timeZoneOffset = (date, timeZone) => {
209
+ const parts = partsForTimeZone(date, timeZone);
210
+ const utcMs = Date.UTC(
211
+ Number(parts.year),
212
+ Number(parts.month) - 1,
213
+ Number(parts.day),
214
+ Number(parts.hour),
215
+ Number(parts.minute),
216
+ Number(parts.second)
217
+ );
218
+ const offsetMinutes = Math.round((utcMs - date.getTime()) / 6e4);
219
+ const sign = offsetMinutes >= 0 ? "+" : "-";
220
+ const absolute = Math.abs(offsetMinutes);
221
+ return `UTC${sign}${pad2(Math.floor(absolute / 60))}:${pad2(absolute % 60)}`;
222
+ };
223
+ var buildCurrentTimeBlock = (now = /* @__PURE__ */ new Date(), timeZone = resolveDefaultTimeZone()) => [
224
+ "--- \u5F53\u524D\u65F6\u95F4 ---",
225
+ `\u5F53\u524D\u65E5\u671F: ${zonedDateTime(now, timeZone).slice(0, 10)}`,
226
+ `\u5F53\u524D\u672C\u5730\u65F6\u95F4: ${zonedDateTime(now, timeZone).slice(0, 16)}`,
227
+ // HH:MM only, no seconds
228
+ `\u672C\u5730\u65F6\u533A: ${timeZone} / ${timeZoneOffset(now, timeZone)}`,
229
+ `UTC \u65F6\u95F4: ${now.toISOString().slice(0, 16)}`,
230
+ // YYYY-MM-DDTHH:MM only
231
+ "\u5F53\u7528\u6237\u95EE\u201C\u73B0\u5728\u201D\u201C\u5F53\u524D\u65F6\u95F4\u201D\u201C\u5317\u4EAC\u65F6\u95F4\u201D\u7B49\u65F6\u95F4\u95EE\u9898\u65F6\uFF0C\u76F4\u63A5\u4F7F\u7528\u8FD9\u91CC\u7684\u5F53\u524D\u65F6\u95F4\uFF1B\u4E0D\u8981\u53EA\u56DE\u7B54\u65E5\u671F\u3002",
232
+ "\u5F53\u7528\u6237\u8BF4\u201C\u4ECA\u5929\u201D\u201C\u4ECA\u65E5\u201D\u6216 today \u65F6\uFF0C\u9ED8\u8BA4\u6307\u5F53\u524D\u672C\u5730\u65E5\u671F\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u7ED9\u51FA\u5176\u5B83\u65E5\u671F\u3002"
233
+ ].join("\n");
234
+
235
+ export {
236
+ buildIdentityBlock,
237
+ buildRuntimeGuidanceBlocks,
238
+ buildCurrentTimeBlock
239
+ };
@@ -0,0 +1,91 @@
1
+ import {
2
+ dialogMessageKey
3
+ } from "./chunk-SH2CFQOH.js";
4
+ import {
5
+ asOptionalFiniteNumber
6
+ } from "./chunk-WWC7I6TA.js";
7
+ import {
8
+ asOptionalTrimmedString
9
+ } from "./chunk-G3SUCT4W.js";
10
+
11
+ // packages/core/chat/dialogAttachmentCleanup.ts
12
+ var FILE_CONTENT_RE = /(?:https?:\/\/[^/"'\s]+)?\/api\/v1\/db\/file\/content\/([^?#"'\s)]+)/g;
13
+ function extractFileContentIds(value) {
14
+ const ids = /* @__PURE__ */ new Set();
15
+ const visit = (input) => {
16
+ if (typeof input === "string") {
17
+ for (const match of input.matchAll(FILE_CONTENT_RE)) {
18
+ const fileId = decodeURIComponent(match[1] ?? "").trim();
19
+ if (fileId) ids.add(fileId);
20
+ }
21
+ return;
22
+ }
23
+ if (Array.isArray(input)) {
24
+ for (const item of input) visit(item);
25
+ return;
26
+ }
27
+ if (input && typeof input === "object") {
28
+ for (const item of Object.values(input)) visit(item);
29
+ }
30
+ };
31
+ visit(value);
32
+ return [...ids];
33
+ }
34
+ function messageDbKey(dialogId, message) {
35
+ const dbKey = asOptionalTrimmedString(message.dbKey);
36
+ if (dbKey) return dbKey;
37
+ const id = asOptionalTrimmedString(message.id);
38
+ if (id) return dialogMessageKey(dialogId, id);
39
+ return null;
40
+ }
41
+ function asText(value) {
42
+ return asOptionalTrimmedString(value) ?? null;
43
+ }
44
+ function buildDialogAttachmentPlan(args) {
45
+ const messageKeys = new Set(
46
+ args.messages.map((message) => messageDbKey(args.dialogId, message)).filter((key) => Boolean(key))
47
+ );
48
+ const referencedFileIds = [
49
+ ...new Set(args.messages.flatMap((message) => extractFileContentIds(message)))
50
+ ];
51
+ const candidates = referencedFileIds.map((fileId) => {
52
+ const metadata = args.metadataByFileId[fileId];
53
+ const ownerType = asText(metadata?.ownerType);
54
+ const ownerId = asText(metadata?.ownerId);
55
+ const ownerDbKey = asText(metadata?.ownerDbKey);
56
+ const fileDbKey = asText(metadata?.dbKey);
57
+ const source = asText(metadata?.source);
58
+ const ownedByDialog = ownerType === "dialog" && ownerId === args.dialogId;
59
+ const ownedByMessage = Boolean(ownerDbKey && messageKeys.has(ownerDbKey));
60
+ const userOwnedReferenced = args.includeUserOwnedReferenced === true && Boolean(args.ownerId) && ownerType === "user" && ownerId === args.ownerId;
61
+ const canDelete = Boolean(fileDbKey && (ownedByDialog || ownedByMessage || userOwnedReferenced));
62
+ return {
63
+ fileId,
64
+ fileDbKey,
65
+ size: asOptionalFiniteNumber(metadata?.size) ?? null,
66
+ ownerType,
67
+ ownerId,
68
+ ownerDbKey,
69
+ source,
70
+ status: canDelete ? "delete" : "retain",
71
+ reason: canDelete ? ownedByMessage ? "ownerDbKey matches a message in this dialog" : userOwnedReferenced ? "user-owned file is referenced by this dialog and explicit referenced-attachment deletion is enabled" : "ownerType/ownerId matches this dialog" : fileDbKey ? "file ownership is not exclusive to this dialog" : "file metadata not found"
72
+ };
73
+ });
74
+ const deleteCandidates = candidates.filter((candidate) => candidate.status === "delete");
75
+ const retainedCandidates = candidates.filter((candidate) => candidate.status === "retain");
76
+ return {
77
+ dialogId: args.dialogId,
78
+ messageCount: args.messages.length,
79
+ referencedFileIds,
80
+ candidates,
81
+ deleteCandidates,
82
+ retainedCandidates,
83
+ bytesToDelete: deleteCandidates.reduce((sum, candidate) => sum + (candidate.size ?? 0), 0),
84
+ metadataReadFailures: args.metadataReadFailures ?? []
85
+ };
86
+ }
87
+
88
+ export {
89
+ extractFileContentIds,
90
+ buildDialogAttachmentPlan
91
+ };