nolo-cli 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,26 @@
1
+ import {
2
+ ToolApiError,
3
+ buildToolRequestHeaders,
4
+ callToolApi,
5
+ getRequestConfig,
6
+ getToolBaseUrl,
7
+ getToolRequestContext,
8
+ resolveToolApiBaseUrl,
9
+ resolveToolBaseUrl
10
+ } from "./chunk-5MIDPSSK.js";
11
+ import "./chunk-DFFIZ25G.js";
12
+ import "./chunk-3ASDTTEI.js";
13
+ import "./chunk-DWLEOOGR.js";
14
+ import "./chunk-QSJ3HFEF.js";
15
+ import "./chunk-KUG52IAP.js";
16
+ import "./chunk-4VNS5WPM.js";
17
+ export {
18
+ ToolApiError,
19
+ buildToolRequestHeaders,
20
+ callToolApi,
21
+ getRequestConfig,
22
+ getToolBaseUrl,
23
+ getToolRequestContext,
24
+ resolveToolApiBaseUrl,
25
+ resolveToolBaseUrl
26
+ };
@@ -0,0 +1,85 @@
1
+ import {
2
+ TOOL_GROUP_META,
3
+ TOOL_PACKS,
4
+ addDefaultLightWebToolsForConfiguredAgents,
5
+ applyDefaultWebToolPacks,
6
+ findToolExecutor,
7
+ patchAgentToolSchemas,
8
+ toolDefinitionsByName,
9
+ toolDescriptions,
10
+ toolExecutors,
11
+ toolQueryFunc,
12
+ toolQueryFunctionSchema,
13
+ toolRegistry
14
+ } from "./chunk-MKMWT7SA.js";
15
+ import "./chunk-GAKEBQD6.js";
16
+ import "./chunk-KQHGZWSV.js";
17
+ import "./chunk-XKIMRZO2.js";
18
+ import "./chunk-3LY4F7SV.js";
19
+ import "./chunk-VP4WJWKW.js";
20
+ import "./chunk-63W5N6P3.js";
21
+ import "./chunk-UUJDGGAK.js";
22
+ import "./chunk-PG5PNA7Y.js";
23
+ import "./chunk-ZQ2UM4KG.js";
24
+ import "./chunk-Q2YZULBH.js";
25
+ import "./chunk-ZIG5LJ7X.js";
26
+ import "./chunk-4ZDM73SD.js";
27
+ import "./chunk-MRC4Q34M.js";
28
+ import "./chunk-PCWC3JTN.js";
29
+ import "./chunk-CWMSB67P.js";
30
+ import "./chunk-4K2KKCSD.js";
31
+ import "./chunk-KTVVPRJS.js";
32
+ import "./chunk-Z4NR32XR.js";
33
+ import "./chunk-M76ECQRD.js";
34
+ import "./chunk-YYUCRDOK.js";
35
+ import "./chunk-MGOJ5R6J.js";
36
+ import "./chunk-UAD2WT54.js";
37
+ import "./chunk-DCOA4QSN.js";
38
+ import "./chunk-AUQ747NZ.js";
39
+ import "./chunk-5MMAK75Q.js";
40
+ import "./chunk-BBYVOSU2.js";
41
+ import "./chunk-5CS33IBL.js";
42
+ import "./chunk-JZPBVBIY.js";
43
+ import "./chunk-IWX4UW2E.js";
44
+ import "./chunk-5MIDPSSK.js";
45
+ import "./chunk-DFFIZ25G.js";
46
+ import "./chunk-3ASDTTEI.js";
47
+ import "./chunk-DWLEOOGR.js";
48
+ import "./chunk-HNMXYYJR.js";
49
+ import "./chunk-63SLEOLK.js";
50
+ import "./chunk-TSS3XJY4.js";
51
+ import "./chunk-Y5GCAMGP.js";
52
+ import "./chunk-COMXDWNM.js";
53
+ import "./chunk-AZPCASRE.js";
54
+ import "./chunk-2EISRLRC.js";
55
+ import "./chunk-KX6YBIHG.js";
56
+ import "./chunk-SH2CFQOH.js";
57
+ import "./chunk-I42VC5KR.js";
58
+ import "./chunk-WWC7I6TA.js";
59
+ import "./chunk-QSJ3HFEF.js";
60
+ import "./chunk-ELRRLDWI.js";
61
+ import "./chunk-EYEEHCU4.js";
62
+ import "./chunk-QYXLLLGL.js";
63
+ import "./chunk-GBRG75BQ.js";
64
+ import "./chunk-4SN6J65J.js";
65
+ import "./chunk-LCBAMY2M.js";
66
+ import "./chunk-3EUW3WEO.js";
67
+ import "./chunk-U6VC4MU4.js";
68
+ import "./chunk-CF7PE763.js";
69
+ import "./chunk-G3SUCT4W.js";
70
+ import "./chunk-KUG52IAP.js";
71
+ import "./chunk-4VNS5WPM.js";
72
+ export {
73
+ TOOL_GROUP_META,
74
+ TOOL_PACKS,
75
+ addDefaultLightWebToolsForConfiguredAgents,
76
+ applyDefaultWebToolPacks,
77
+ findToolExecutor,
78
+ patchAgentToolSchemas,
79
+ toolDefinitionsByName,
80
+ toolDescriptions,
81
+ toolExecutors,
82
+ toolQueryFunc,
83
+ toolQueryFunctionSchema,
84
+ toolRegistry
85
+ };
@@ -0,0 +1,78 @@
1
+ import {
2
+ BUILTIN_SUMMARY_LLM_CONFIG
3
+ } from "./chunk-4ZDM73SD.js";
4
+ import {
5
+ buildPlatformChatCompletionRequest,
6
+ canUsePlatformChatProvider,
7
+ parsePlatformChatCompletionResponse,
8
+ resolvePlatformChatProviderConfig
9
+ } from "./chunk-5KLGBAAR.js";
10
+ import "./chunk-OPZYGHUC.js";
11
+ import "./chunk-JRKKFRAV.js";
12
+ import "./chunk-BBYVOSU2.js";
13
+ import "./chunk-IWX4UW2E.js";
14
+ import "./chunk-I42VC5KR.js";
15
+ import "./chunk-QSJ3HFEF.js";
16
+ import "./chunk-3EUW3WEO.js";
17
+ import "./chunk-CF7PE763.js";
18
+ import "./chunk-G3SUCT4W.js";
19
+ import "./chunk-KUG52IAP.js";
20
+ import "./chunk-4VNS5WPM.js";
21
+
22
+ // packages/cli/client/tuiSummaryLlmCaller.ts
23
+ function createTuiSummaryLlmCaller(env, options) {
24
+ const fetchImpl = options?.fetchImpl ?? fetch;
25
+ const timeoutMs = options?.timeoutMs ?? 3e4;
26
+ return async (content) => {
27
+ if (!canUsePlatformChatProvider(env)) {
28
+ return null;
29
+ }
30
+ try {
31
+ const providerConfig = await resolvePlatformChatProviderConfig({
32
+ agentConfig: { ...BUILTIN_SUMMARY_LLM_CONFIG, key: BUILTIN_SUMMARY_LLM_CONFIG.id },
33
+ env,
34
+ apiKeyRefResolver: options?.apiKeyRefResolver,
35
+ credentialBroker: options?.credentialBroker
36
+ });
37
+ if (!providerConfig?.authToken) {
38
+ return null;
39
+ }
40
+ const messages = [
41
+ { role: "user", content }
42
+ ];
43
+ const request = buildPlatformChatCompletionRequest({
44
+ providerConfig,
45
+ messages,
46
+ stream: false
47
+ });
48
+ const response = await fetchImpl(request.url, {
49
+ ...request.init,
50
+ signal: AbortSignal.timeout(timeoutMs)
51
+ });
52
+ if (!response.ok) {
53
+ return null;
54
+ }
55
+ const raw = await response.text().catch(() => "");
56
+ const data = safeParseJson(raw);
57
+ if (!data) return null;
58
+ const parsed = parsePlatformChatCompletionResponse({
59
+ providerConfig,
60
+ data,
61
+ trace: []
62
+ });
63
+ return parsed?.content?.trim() || null;
64
+ } catch {
65
+ return null;
66
+ }
67
+ };
68
+ }
69
+ function safeParseJson(raw) {
70
+ try {
71
+ return JSON.parse(raw);
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+ export {
77
+ createTuiSummaryLlmCaller
78
+ };
@@ -0,0 +1,271 @@
1
+ import {
2
+ createMemoryItem,
3
+ writeMemoryItemWithIndexesToDb
4
+ } from "./chunk-3TZDXYSF.js";
5
+ import {
6
+ loadMemoryCandidatesFromDb
7
+ } from "./chunk-Q2YZULBH.js";
8
+ import {
9
+ compactWhitespace
10
+ } from "./chunk-DWLEOOGR.js";
11
+ import "./chunk-SH2CFQOH.js";
12
+ import "./chunk-I42VC5KR.js";
13
+ import "./chunk-WWC7I6TA.js";
14
+ import "./chunk-3EUW3WEO.js";
15
+ import "./chunk-U6VC4MU4.js";
16
+ import "./chunk-G3SUCT4W.js";
17
+ import "./chunk-4VNS5WPM.js";
18
+
19
+ // packages/ai/memory/scope.ts
20
+ var buildUserMemoryTarget = (userId) => ({
21
+ ownerType: "user",
22
+ ownerId: userId,
23
+ visibility: "private",
24
+ subjectType: "user",
25
+ subjectId: userId
26
+ });
27
+ var buildSpaceMemoryTarget = (spaceId) => ({
28
+ ownerType: "space",
29
+ ownerId: spaceId,
30
+ visibility: "shared",
31
+ subjectType: "space",
32
+ subjectId: spaceId
33
+ });
34
+ var resolveUserOrSpaceMemoryTarget = (input) => {
35
+ if (input.userId) return buildUserMemoryTarget(input.userId);
36
+ if (input.spaceId) return buildSpaceMemoryTarget(input.spaceId);
37
+ return null;
38
+ };
39
+ var buildAgentSubjectTarget = (target, agentKey) => ({
40
+ owner: { ownerType: target.ownerType, ownerId: target.ownerId },
41
+ visibility: target.visibility,
42
+ subjectType: "agent",
43
+ subjectId: agentKey
44
+ });
45
+
46
+ // packages/ai/memory/understanding.ts
47
+ var UNDERSTANDING_TAG = "understanding-memory";
48
+ var normalizeClause = (value) => (
49
+ // Compact first so trailing whitespace after sentence punct still strips
50
+ // (matches pre-seam: compact → strip end punct → trim residual spaces).
51
+ compactWhitespace(value.replace(/[“”"]/g, "")).replace(/[。!?!?;;]+$/u, "").trim()
52
+ );
53
+ var normalizeSignalLead = (value) => normalizeClause(value.split(/[\n,,。!?!?;;]+/u)[0] ?? "");
54
+ var stripLead = (value) => value.replace(/^(明白|好的|对|是的|所以|其实|我记得|欢迎回来|嗯|那)\s*[,,::\-]?\s*/u, "").trim();
55
+ var contentToText = (content) => {
56
+ if (typeof content === "string") return content.trim();
57
+ if (!Array.isArray(content)) return "";
58
+ return content.map((part) => part?.type === "text" ? part.text.trim() : "").filter(Boolean).join("\n").trim();
59
+ };
60
+ var extractPreference = (text) => {
61
+ const matches = [];
62
+ const normalized = stripLead(text);
63
+ const moreValue = normalized.match(/[你我](?:更)?在意(.+)/u);
64
+ if (moreValue?.[1]) {
65
+ matches.push(`\u66F4\u5728\u610F${normalizeSignalLead(moreValue[1])}`);
66
+ }
67
+ const concern = normalized.match(/[你我](?:更)?关心(.+)/u);
68
+ if (concern?.[1]) {
69
+ matches.push(`\u66F4\u5173\u5FC3${normalizeSignalLead(concern[1])}`);
70
+ }
71
+ const fear = normalized.match(/[你我](?:更)?怕(.+)/u);
72
+ if (fear?.[1]) {
73
+ matches.push(`\u66F4\u6015${normalizeSignalLead(fear[1])}`);
74
+ }
75
+ const dontWant = normalized.match(/[你我]不想(.+)/u);
76
+ if (dontWant?.[1]) {
77
+ matches.push(`\u4E0D\u60F3${normalizeSignalLead(dontWant[1])}`);
78
+ }
79
+ const dontHope = normalized.match(/[你我]不希望(.+)/u);
80
+ if (dontHope?.[1]) {
81
+ matches.push(`\u4E0D\u5E0C\u671B${normalizeSignalLead(dontHope[1])}`);
82
+ }
83
+ return matches;
84
+ };
85
+ var extractStyle = (text) => {
86
+ const matches = [];
87
+ const normalized = stripLead(text);
88
+ const dislike = normalized.match(/[你我]不喜欢(.+)/u);
89
+ if (dislike?.[1]) {
90
+ matches.push(`\u4E0D\u559C\u6B22${normalizeSignalLead(dislike[1])}`);
91
+ }
92
+ const prefer = normalized.match(/[你我](?:更)?喜欢(.+)/u);
93
+ if (prefer?.[1]) {
94
+ matches.push(`\u66F4\u559C\u6B22${normalizeSignalLead(prefer[1])}`);
95
+ }
96
+ return matches;
97
+ };
98
+ var extractGoal = (text) => {
99
+ const matches = [];
100
+ const normalized = stripLead(text);
101
+ if (/[??]/u.test(normalized)) {
102
+ return matches;
103
+ }
104
+ const wantFirst = normalized.match(/[你我](?:这次)?(?:更)?想先(?:把)?(.+)/u);
105
+ if (wantFirst?.[1]) {
106
+ matches.push(`\u60F3\u5148${normalizeSignalLead(wantFirst[1])}`);
107
+ }
108
+ const shouldFirst = normalized.match(/[你我](?:还是)?想要先(?:把)?(.+)/u);
109
+ if (shouldFirst?.[1]) {
110
+ matches.push(`\u60F3\u5148${normalizeSignalLead(shouldFirst[1])}`);
111
+ }
112
+ return matches;
113
+ };
114
+ var normalizeTensionTail = (tail) => normalizeClause(
115
+ tail.replace(/^在/u, "").replace(/^权衡/u, "").replace(/^比较/u, "").split(/[。!?!?;;\n]/u)[0] ?? ""
116
+ );
117
+ var extractTension = (text) => {
118
+ const matches = [];
119
+ const normalized = stripLead(text);
120
+ const weigh = normalized.match(/[你我]在权衡(.+)/u);
121
+ if (weigh?.[1]) {
122
+ matches.push(`\u5728\u6743\u8861${normalizeTensionTail(weigh[1])}`);
123
+ }
124
+ const struggle = normalized.match(/[你我](?:现在)?(?:真正)?纠结(?:的是)?[::,,\s]*(.+)/u);
125
+ if (struggle?.[1] && struggle[1].includes("\u8FD8\u662F")) {
126
+ matches.push(`\u5728\u6743\u8861${normalizeTensionTail(struggle[1])}`);
127
+ }
128
+ const stuck = normalized.match(/[你我]卡的点不是.+?而是(.+)/u);
129
+ if (stuck?.[1]) {
130
+ matches.push(`\u5728\u6743\u8861${normalizeTensionTail(stuck[1])}`);
131
+ }
132
+ return matches;
133
+ };
134
+ var extractUnfinished = (text) => {
135
+ const matches = [];
136
+ const normalized = stripLead(text);
137
+ const direct = normalized.match(/[你我](?:还)?(?:没|尚未)决定(.+)/u);
138
+ if (direct?.[1]) {
139
+ matches.push(`\u8FD8\u6CA1\u51B3\u5B9A${normalizeClause(direct[1])}`);
140
+ }
141
+ const uncertain = normalized.match(/[你我](?:还)?不确定(.+)/u);
142
+ if (uncertain?.[1]) {
143
+ matches.push(`\u8FD8\u4E0D\u786E\u5B9A${normalizeClause(uncertain[1])}`);
144
+ }
145
+ const notReady = normalized.match(/[你我](?:还)?没想好(.+)/u);
146
+ if (notReady?.[1]) {
147
+ matches.push(`\u8FD8\u6CA1\u60F3\u597D${normalizeClause(notReady[1])}`);
148
+ }
149
+ return matches;
150
+ };
151
+ var buildPatternKey = (facet, content) => `understanding:${facet}:${content.toLowerCase()}`;
152
+ var buildCandidate = (facet, content) => {
153
+ const normalized = normalizeClause(content);
154
+ if (!normalized || normalized.length < 6) return null;
155
+ const importance = facet === "unfinished" ? 0.91 : facet === "tension" ? 0.89 : facet === "preference" ? 0.84 : facet === "style" ? 0.8 : 0.82;
156
+ const confidence = facet === "unfinished" || facet === "tension" ? 0.76 : 0.72;
157
+ return {
158
+ facet,
159
+ content: normalized,
160
+ importance,
161
+ confidence,
162
+ patternKey: buildPatternKey(facet, normalized),
163
+ tags: [UNDERSTANDING_TAG, `memory-facet:${facet}`]
164
+ };
165
+ };
166
+ var extractUnderstandingMemoryCandidates = (input) => {
167
+ const texts = [
168
+ input.userInput,
169
+ ...(input.trace ?? []).filter((message) => message.role === "assistant" || message.role === "user").map((message) => contentToText(message.content))
170
+ ].map((value) => value.trim()).filter(Boolean);
171
+ const candidates = [];
172
+ for (const text of texts) {
173
+ for (const content of extractPreference(text)) {
174
+ const candidate = buildCandidate("preference", content);
175
+ if (candidate) candidates.push(candidate);
176
+ }
177
+ for (const content of extractStyle(text)) {
178
+ const candidate = buildCandidate("style", content);
179
+ if (candidate) candidates.push(candidate);
180
+ }
181
+ for (const content of extractGoal(text)) {
182
+ const candidate = buildCandidate("goal", content);
183
+ if (candidate) candidates.push(candidate);
184
+ }
185
+ for (const content of extractTension(text)) {
186
+ const candidate = buildCandidate("tension", content);
187
+ if (candidate) candidates.push(candidate);
188
+ }
189
+ for (const content of extractUnfinished(text)) {
190
+ const candidate = buildCandidate("unfinished", content);
191
+ if (candidate) candidates.push(candidate);
192
+ }
193
+ }
194
+ const seen = /* @__PURE__ */ new Set();
195
+ return candidates.filter((candidate) => {
196
+ const key = `${candidate.facet}:${candidate.content.toLowerCase()}`;
197
+ if (seen.has(key)) return false;
198
+ seen.add(key);
199
+ return true;
200
+ });
201
+ };
202
+ var buildUnderstandingTarget = (input) => {
203
+ const target = resolveUserOrSpaceMemoryTarget(input);
204
+ return target ? buildAgentSubjectTarget(target, input.agentKey) : null;
205
+ };
206
+ var sameUnderstanding = (item, candidate, agentKey) => item.subjectType === "agent" && item.subjectId === agentKey && item.patternKey === candidate.patternKey;
207
+ var captureUnderstandingMemoryFromDialog = async (input) => {
208
+ const target = buildUnderstandingTarget(input);
209
+ if (!target) return;
210
+ const candidates = extractUnderstandingMemoryCandidates({
211
+ userInput: input.userInput,
212
+ trace: input.trace
213
+ });
214
+ if (candidates.length === 0) return;
215
+ const existing = await loadMemoryCandidatesFromDb(input.db, {
216
+ owners: [target.owner],
217
+ subjects: [{ subjectType: target.subjectType, subjectId: target.subjectId }],
218
+ kinds: ["episodic", "semantic"],
219
+ ownerLimit: 100
220
+ });
221
+ for (const candidate of candidates) {
222
+ const sameItems = existing.filter((item) => sameUnderstanding(item, candidate, input.agentKey));
223
+ const existingSemantic = sameItems.find((item) => item.kind === "semantic");
224
+ if (existingSemantic) continue;
225
+ const existingEpisode = sameItems.find((item) => item.kind === "episodic");
226
+ if (existingEpisode && existingEpisode.sourceDialogId && existingEpisode.sourceDialogId !== input.dialogId) {
227
+ const semantic = createMemoryItem({
228
+ ownerType: target.owner.ownerType,
229
+ ownerId: target.owner.ownerId,
230
+ visibility: target.visibility,
231
+ subjectType: target.subjectType,
232
+ subjectId: target.subjectId,
233
+ kind: "semantic",
234
+ content: candidate.content,
235
+ facet: candidate.facet,
236
+ importance: Math.min(0.95, candidate.importance + 0.03),
237
+ confidence: Math.min(0.86, candidate.confidence + 0.06),
238
+ tags: [...candidate.tags, "consolidated-understanding"],
239
+ patternKey: candidate.patternKey,
240
+ sourceDialogId: input.dialogId
241
+ });
242
+ await writeMemoryItemWithIndexesToDb(input.db, semantic);
243
+ existing.push(semantic);
244
+ continue;
245
+ }
246
+ if (existingEpisode && existingEpisode.sourceDialogId === input.dialogId) {
247
+ continue;
248
+ }
249
+ const episodic = createMemoryItem({
250
+ ownerType: target.owner.ownerType,
251
+ ownerId: target.owner.ownerId,
252
+ visibility: target.visibility,
253
+ subjectType: target.subjectType,
254
+ subjectId: target.subjectId,
255
+ kind: "episodic",
256
+ content: candidate.content,
257
+ facet: candidate.facet,
258
+ importance: candidate.importance,
259
+ confidence: candidate.confidence,
260
+ tags: candidate.tags,
261
+ patternKey: candidate.patternKey,
262
+ sourceDialogId: input.dialogId
263
+ });
264
+ await writeMemoryItemWithIndexesToDb(input.db, episodic);
265
+ existing.push(episodic);
266
+ }
267
+ };
268
+ export {
269
+ captureUnderstandingMemoryFromDialog,
270
+ extractUnderstandingMemoryCandidates
271
+ };
@@ -0,0 +1,31 @@
1
+ import {
2
+ buildCliDoctorText,
3
+ buildCliVersionText,
4
+ buildNpmSelfUpdateCommand,
5
+ buildSelfUpdateCommand,
6
+ getCliInstallChannel,
7
+ readPackageInfo,
8
+ renderProgressBar,
9
+ resolveSelfUpdateServerUrl,
10
+ runSelfUpdate
11
+ } from "./chunk-CKOJQDKR.js";
12
+ import "./chunk-ROWQEJRP.js";
13
+ import "./chunk-IDZTNRP2.js";
14
+ import "./chunk-ISNCLGUZ.js";
15
+ import "./chunk-OLZBQWZU.js";
16
+ import "./chunk-4SN6J65J.js";
17
+ import "./chunk-LCBAMY2M.js";
18
+ import "./chunk-CF7PE763.js";
19
+ import "./chunk-G3SUCT4W.js";
20
+ import "./chunk-4VNS5WPM.js";
21
+ export {
22
+ buildCliDoctorText,
23
+ buildCliVersionText,
24
+ buildNpmSelfUpdateCommand,
25
+ buildSelfUpdateCommand,
26
+ getCliInstallChannel,
27
+ readPackageInfo,
28
+ renderProgressBar,
29
+ resolveSelfUpdateServerUrl,
30
+ runSelfUpdate
31
+ };
@@ -0,0 +1,188 @@
1
+ import {
2
+ buildDialogFallbackTitleFromMessages,
3
+ resolveDialogTitle
4
+ } from "./chunk-OWOHNGCN.js";
5
+ import {
6
+ isAssistantToolStub,
7
+ selectAllMsgs,
8
+ serializeMessageContent,
9
+ updateContentTitle
10
+ } from "./chunk-ZIG5LJ7X.js";
11
+ import {
12
+ BUILTIN_TITLE_LLM_CONFIG
13
+ } from "./chunk-4ZDM73SD.js";
14
+ import "./chunk-MRC4Q34M.js";
15
+ import "./chunk-PCWC3JTN.js";
16
+ import "./chunk-CWMSB67P.js";
17
+ import {
18
+ runLlm
19
+ } from "./chunk-4K2KKCSD.js";
20
+ import "./chunk-KTVVPRJS.js";
21
+ import "./chunk-Z4NR32XR.js";
22
+ import {
23
+ require_date_fns
24
+ } from "./chunk-M76ECQRD.js";
25
+ import "./chunk-YYUCRDOK.js";
26
+ import "./chunk-MGOJ5R6J.js";
27
+ import {
28
+ normalizeSpaceId
29
+ } from "./chunk-UAD2WT54.js";
30
+ import "./chunk-DCOA4QSN.js";
31
+ import "./chunk-5MMAK75Q.js";
32
+ import "./chunk-BBYVOSU2.js";
33
+ import "./chunk-5CS33IBL.js";
34
+ import "./chunk-JZPBVBIY.js";
35
+ import "./chunk-IWX4UW2E.js";
36
+ import {
37
+ extractCustomId
38
+ } from "./chunk-DFFIZ25G.js";
39
+ import "./chunk-3ASDTTEI.js";
40
+ import "./chunk-DWLEOOGR.js";
41
+ import "./chunk-HNMXYYJR.js";
42
+ import "./chunk-TSS3XJY4.js";
43
+ import "./chunk-Y5GCAMGP.js";
44
+ import {
45
+ patch,
46
+ selectById
47
+ } from "./chunk-COMXDWNM.js";
48
+ import "./chunk-AZPCASRE.js";
49
+ import "./chunk-2EISRLRC.js";
50
+ import "./chunk-KX6YBIHG.js";
51
+ import "./chunk-SH2CFQOH.js";
52
+ import "./chunk-I42VC5KR.js";
53
+ import "./chunk-WWC7I6TA.js";
54
+ import "./chunk-QSJ3HFEF.js";
55
+ import "./chunk-ELRRLDWI.js";
56
+ import {
57
+ selectIdentityUserId
58
+ } from "./chunk-EYEEHCU4.js";
59
+ import "./chunk-QYXLLLGL.js";
60
+ import "./chunk-GBRG75BQ.js";
61
+ import "./chunk-4SN6J65J.js";
62
+ import "./chunk-LCBAMY2M.js";
63
+ import {
64
+ asTrimmedString
65
+ } from "./chunk-3EUW3WEO.js";
66
+ import "./chunk-U6VC4MU4.js";
67
+ import "./chunk-CF7PE763.js";
68
+ import "./chunk-G3SUCT4W.js";
69
+ import "./chunk-KUG52IAP.js";
70
+ import {
71
+ __toESM
72
+ } from "./chunk-4VNS5WPM.js";
73
+
74
+ // packages/chat/dialog/actions/updateDialogTitleAction.ts
75
+ var import_date_fns2 = __toESM(require_date_fns());
76
+
77
+ // packages/chat/dialog/actions/updateDialogTitlePolicy.ts
78
+ var import_date_fns = __toESM(require_date_fns());
79
+ var TITLE_UPDATE_INTERVAL_MINUTES = 30;
80
+ var FORCE_UPDATE_FOR_TEST = false;
81
+ var shouldUpdateTitle = (createdAt, lastUpdatedAt, now = /* @__PURE__ */ new Date()) => {
82
+ if (FORCE_UPDATE_FOR_TEST) return true;
83
+ const lastUpdate = lastUpdatedAt ? new Date(lastUpdatedAt) : null;
84
+ const creation = createdAt ? new Date(createdAt) : null;
85
+ if (!lastUpdate || !creation || Number.isNaN(lastUpdate.getTime()) || Number.isNaN(creation.getTime())) {
86
+ return true;
87
+ }
88
+ return (0, import_date_fns.differenceInMinutes)(now, creation) <= TITLE_UPDATE_INTERVAL_MINUTES || (0, import_date_fns.differenceInMinutes)(now, lastUpdate) >= TITLE_UPDATE_INTERVAL_MINUTES;
89
+ };
90
+
91
+ // packages/chat/dialog/actions/updateDialogTitleAction.ts
92
+ var MAX_MESSAGES_FOR_CONTEXT = 20;
93
+ var dedupeById = (messages) => {
94
+ const seen = /* @__PURE__ */ new Set();
95
+ return messages.filter((message) => {
96
+ const id = typeof message.id === "string" ? message.id : "";
97
+ if (!id || seen.has(id)) return false;
98
+ seen.add(id);
99
+ return true;
100
+ });
101
+ };
102
+ var getMessageContextForTitle = (state, dialogKey, selectAllMessages = selectAllMsgs) => {
103
+ const allMsgs = selectAllMessages(state, extractCustomId(dialogKey));
104
+ const flattened = Array.isArray(allMsgs) ? typeof allMsgs.flat === "function" ? allMsgs.flat() : allMsgs.reduce(
105
+ (acc, cur) => acc.concat(cur),
106
+ []
107
+ ) : [];
108
+ const normalized = flattened.filter((msg) => msg?.role !== "tool" && !isAssistantToolStub(msg)).map((msg) => {
109
+ const textContent = serializeMessageContent(msg?.content, "\u8FD9\u91CC\u662F\u4E00\u4E2A\u56FE\u7247");
110
+ if (!textContent) return null;
111
+ return {
112
+ ...msg,
113
+ content: textContent
114
+ // 之后只会用到 role + content
115
+ };
116
+ }).filter(Boolean);
117
+ const earlyUserTurns = normalized.filter((msg) => msg.role === "user").slice(0, 3);
118
+ const recentTurns = normalized.slice(-12);
119
+ return dedupeById([...earlyUserTurns, ...recentTurns]).slice(
120
+ 0,
121
+ MAX_MESSAGES_FOR_CONTEXT
122
+ );
123
+ };
124
+ var shouldSkipPlatformTitleLlm = (args) => {
125
+ const current = asTrimmedString(args.currentUserId);
126
+ const loggedOut = !current || current === "local";
127
+ if (!loggedOut) return false;
128
+ const dialogUserId = asTrimmedString(args.dialogConfig?.userId);
129
+ const agentUserId = asTrimmedString(args.agentConfig?.userId);
130
+ const hasLocalCredentialRef = typeof args.agentConfig?.credentialRef === "string" && args.agentConfig.credentialRef.trim().length > 0;
131
+ const dialogKey = typeof args.dialogKey === "string" ? args.dialogKey : "";
132
+ return dialogUserId === "local" || agentUserId === "local" || hasLocalCredentialRef || dialogKey.startsWith("dialog-local-");
133
+ };
134
+ var updateDialogTitleActionWithDeps = async (args, thunkApi, deps = {}) => {
135
+ const {
136
+ runLlmAction = runLlm,
137
+ patchAction = patch,
138
+ selectDialogById = selectById,
139
+ selectAllMessages = selectAllMsgs,
140
+ updateSpaceContentTitle = updateContentTitle,
141
+ selectCurrentUserId = selectIdentityUserId
142
+ } = deps;
143
+ const { dialogKey, agentConfig } = args;
144
+ const { dispatch, getState } = thunkApi;
145
+ const state = getState();
146
+ const dialogConfig = selectDialogById(state, dialogKey);
147
+ if (!dialogConfig || !shouldUpdateTitle(dialogConfig.createdAt, dialogConfig.updatedAt)) {
148
+ return dialogConfig;
149
+ }
150
+ const messageContext = getMessageContextForTitle(state, dialogKey, selectAllMessages);
151
+ if (messageContext.length === 0) {
152
+ return dialogConfig;
153
+ }
154
+ const fallbackTitle = buildDialogFallbackTitleFromMessages(messageContext) || `Conversation on ${(0, import_date_fns2.format)(/* @__PURE__ */ new Date(), "MMM d")}`;
155
+ let generatedTitle = "";
156
+ const currentUserId = selectCurrentUserId(state);
157
+ if (!shouldSkipPlatformTitleLlm({
158
+ currentUserId,
159
+ dialogKey,
160
+ dialogConfig,
161
+ agentConfig
162
+ })) {
163
+ const content = JSON.stringify(
164
+ messageContext.map((msg) => ({ role: msg.role, content: msg.content }))
165
+ );
166
+ generatedTitle = await dispatch(
167
+ runLlmAction({
168
+ llmConfig: BUILTIN_TITLE_LLM_CONFIG,
169
+ content,
170
+ billingDialogKey: dialogKey
171
+ })
172
+ ).unwrap();
173
+ }
174
+ const title = resolveDialogTitle(generatedTitle, fallbackTitle);
175
+ const spaceId = dialogConfig?.spaceId && normalizeSpaceId(dialogConfig.spaceId);
176
+ if (spaceId) {
177
+ dispatch(updateSpaceContentTitle({ spaceId, contentKey: dialogKey, title }));
178
+ }
179
+ return await dispatch(
180
+ patchAction({ dbKey: dialogKey, changes: { title } })
181
+ ).unwrap();
182
+ };
183
+ var updateDialogTitleAction = async (args, thunkApi) => updateDialogTitleActionWithDeps(args, thunkApi);
184
+ export {
185
+ shouldSkipPlatformTitleLlm,
186
+ updateDialogTitleAction,
187
+ updateDialogTitleActionWithDeps
188
+ };