nolo-cli 0.33.0-alpha.9 → 0.34.0-alpha.3

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 (164) hide show
  1. package/{_executeModel-2WR4RTZZ.js → _executeModel-TMUXL7J5.js} +64 -65
  2. package/{action-OQWPNKAH.js → action-KMBZ3LCZ.js} +12 -12
  3. package/{addContentAction-YVINZQTF.js → addContentAction-KQ44UT2U.js} +10 -10
  4. package/{addDialogAgentAction-6IOCIEPI.js → addDialogAgentAction-ILSDCMYL.js} +9 -9
  5. package/{agentDeleteCommand-H22WRYC6.js → agentDeleteCommand-KA2IQAPG.js} +40 -39
  6. package/{agentEmailCommands-DGJVCMCG.js → agentEmailCommands-UIYBGCZW.js} +74 -75
  7. package/{agentListCommands-6NWMLIMQ.js → agentListCommands-L6JNUOLH.js} +47 -37
  8. package/{agentMachineCommands-5MUO6RDI.js → agentMachineCommands-5CQW5NZR.js} +37 -36
  9. package/agentProviderCommands-65ZC2WB4.js +122 -0
  10. package/{agentPullCommand-YH5GEBK4.js → agentPullCommand-TSWAJPS2.js} +1 -1
  11. package/agentRecordCommands-VUDJQIZH.js +112 -0
  12. package/agentRunCommand-EJWYF3BL.js +132 -0
  13. package/{agentRunControl-SCIVRZWX.js → agentRunControl-7MUPSYDQ.js} +7 -1
  14. package/{agentRuntimeLocal-PRAR3NCW.js → agentRuntimeLocal-XXBMDMBU.js} +33 -33
  15. package/{agentSlice-AMDSTXP5.js → agentSlice-HTIEYKIU.js} +12 -12
  16. package/agentSuperviseCommands-MKWW3ICX.js +640 -0
  17. package/{appDeleteCommands-L5PKC42V.js → appDeleteCommands-OUBL6VHB.js} +35 -34
  18. package/{appDeployCommands-3J7Z4XWV.js → appDeployCommands-BZSS2MX4.js} +35 -34
  19. package/{appDeployStatusCommands-YTRPXE72.js → appDeployStatusCommands-P2ZQOY5X.js} +35 -34
  20. package/{appGetCommands-JVXV5WXD.js → appGetCommands-WCFWQZZM.js} +35 -34
  21. package/{appListCommands-7KDEOJSO.js → appListCommands-FVJ3QNL7.js} +35 -34
  22. package/{authCommand-6Y5LTMZB.js → authCommand-B2XRHNJH.js} +19 -19
  23. package/{authCommands-EAPFGNHN.js → authCommands-GWABTFMR.js} +6 -6
  24. package/{chatQueueReduxAdapter-ZKSS6XRV.js → chatQueueReduxAdapter-ZP2ZS63U.js} +28 -28
  25. package/{chunk-UM4H3URE.js → chunk-23KKIMD5.js} +7 -7
  26. package/chunk-2BWU4ORW.js +2574 -0
  27. package/{chunk-2UECQ7RE.js → chunk-3AOLVADY.js} +1 -1
  28. package/{chunk-M2YMQOLC.js → chunk-4APLX2RT.js} +75 -10
  29. package/{chunk-ZHYK3N56.js → chunk-4AWH4LQA.js} +3 -1
  30. package/{chunk-3GZXL6FM.js → chunk-4DMPISV6.js} +7 -3
  31. package/{chunk-BQ3OHLR5.js → chunk-5GQ6XCJY.js} +1217 -691
  32. package/{chunk-GOIDVXK5.js → chunk-5LDKQUOT.js} +21 -8
  33. package/{chunk-OIQPORYI.js → chunk-64KIQZA2.js} +175 -2
  34. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  35. package/chunk-6XG52ZQ6.js +146 -0
  36. package/{chunk-FMEVI5TG.js → chunk-7CH6U3FL.js} +1 -1
  37. package/chunk-AA2YUJNV.js +54 -0
  38. package/{chunk-7INB7NXF.js → chunk-AE5GVFMG.js} +294 -54
  39. package/{chunk-UNOTBWZZ.js → chunk-B6H5XCT2.js} +8 -8
  40. package/{chunk-NNWHHCVP.js → chunk-BMB563Y6.js} +10 -4
  41. package/{chunk-DFUPZE6V.js → chunk-C6ELZQ7H.js} +249 -34
  42. package/{chunk-7KNERA53.js → chunk-E2OQ5N2F.js} +87 -13
  43. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  44. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  45. package/{chunk-JZPBVBIY.js → chunk-FD36SCCD.js} +19 -8
  46. package/{chunk-DKMOY3QI.js → chunk-FGLKRJDI.js} +54 -3
  47. package/{chunk-MQWVAOIU.js → chunk-FT4XBCK4.js} +33 -158
  48. package/{chunk-2QTEYCR7.js → chunk-FTM4KUOZ.js} +17 -17
  49. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  50. package/{chunk-7YYHKBJP.js → chunk-GKHV4UH5.js} +1 -1
  51. package/{chunk-2IVEXF7P.js → chunk-GUYMR3JL.js} +6 -33
  52. package/{chunk-YDTYDA5W.js → chunk-GZRMWK5R.js} +6 -4
  53. package/{chunk-X664KVEV.js → chunk-HHBXCRJS.js} +204 -123
  54. package/{chunk-AN7DGYMW.js → chunk-I7VDDN45.js} +4579 -3131
  55. package/{chunk-DSBGWT2C.js → chunk-IEEEWIVO.js} +10 -10
  56. package/{chunk-75U775RZ.js → chunk-IFS5CUEH.js} +1 -1
  57. package/{chunk-WLH5BAKX.js → chunk-IIOHYLIG.js} +9 -4
  58. package/{chunk-UEAUAXYS.js → chunk-ILZY5B4U.js} +2063 -214
  59. package/chunk-IMHO5LC6.js +370 -0
  60. package/{chunk-ADLYMQB6.js → chunk-IZCHPD7T.js} +52 -3
  61. package/{chunk-ITIA6OAQ.js → chunk-IZNJDUJ4.js} +5 -5
  62. package/{chunk-X2DAEZ3X.js → chunk-J5NMOM35.js} +1 -1
  63. package/{chunk-RPRRIFXV.js → chunk-JI2TIPLP.js} +1 -1
  64. package/{chunk-EGRJC4ZN.js → chunk-JIADXJYU.js} +1 -1
  65. package/{chunk-IHEC7VBF.js → chunk-K4KIFRIN.js} +1 -1
  66. package/{chunk-WJSW43QZ.js → chunk-L3JWI7WX.js} +0 -1
  67. package/{chunk-3RUW3ONU.js → chunk-LD6Y6RJY.js} +4 -4
  68. package/chunk-M3JQWYBC.js +387 -0
  69. package/{chunk-GM6PU7B6.js → chunk-MEYIRKDN.js} +0 -1
  70. package/{chunk-6YXDOOSH.js → chunk-MGIHZ5CJ.js} +4 -4
  71. package/{chunk-4F5M2MW5.js → chunk-MJWX4JQO.js} +2 -2
  72. package/{chunk-Q5ITEGIN.js → chunk-N4XRDM26.js} +1 -1
  73. package/{chunk-5CS33IBL.js → chunk-NQ4N4IGO.js} +11 -12
  74. package/{chunk-ZZ2MH7LE.js → chunk-O6OSWFZQ.js} +0 -1
  75. package/{chunk-RJKIB55Y.js → chunk-OSCSEJJR.js} +15 -8
  76. package/{chunk-HUCT7HID.js → chunk-P2I7ELDC.js} +3 -3
  77. package/{chunk-BXPBZVRE.js → chunk-PILJX4DH.js} +285 -251
  78. package/{chunk-SCUETSRP.js → chunk-PV734VZX.js} +1 -1
  79. package/{chunk-XLLTJXAD.js → chunk-QI3CHZUT.js} +39 -2672
  80. package/{chunk-WNHST4IE.js → chunk-RKRXAL3V.js} +5451 -5013
  81. package/{chunk-7E72JMBB.js → chunk-SMPAUSX5.js} +46 -5
  82. package/{chunk-5X4GQ53C.js → chunk-TLBZMLLJ.js} +7 -7
  83. package/{chunk-ASDXPOJH.js → chunk-U6QQLXWI.js} +1 -1
  84. package/{chunk-NUO3QFWD.js → chunk-UNHKVD2N.js} +1 -1
  85. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  86. package/{chunk-CPYYM4RJ.js → chunk-V5GA74HI.js} +19 -5
  87. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  88. package/{chunk-G7E4NWFE.js → chunk-W445DPVT.js} +1 -1
  89. package/{chunk-EMW55KKX.js → chunk-WBZE7C6S.js} +1 -1
  90. package/{chunk-3UG2IIZ3.js → chunk-WN5AJG5I.js} +1 -1
  91. package/{chunk-KSRFVP36.js → chunk-WRN7L5CS.js} +1 -1
  92. package/{chunk-GJXRIOLS.js → chunk-WRP5TTM6.js} +4 -84
  93. package/chunk-X2K2JSO4.js +163 -0
  94. package/{chunk-OR2HNLVO.js → chunk-X6EN3KJX.js} +279 -477
  95. package/{chunk-VWY2CZD2.js → chunk-XMFDQYWA.js} +3 -3
  96. package/{chunk-IKWTTKWG.js → chunk-XQES6LXQ.js} +2 -2
  97. package/{chunk-IR6W62Q6.js → chunk-XT73C4VH.js} +18 -21
  98. package/{chunk-7L5CQQIT.js → chunk-Y5W623XU.js} +15 -15
  99. package/{chunk-RY57GLGW.js → chunk-YPREESF4.js} +42 -5
  100. package/{chunk-BQXOGBFN.js → chunk-YZ2WE6CW.js} +2 -2
  101. package/{chunk-DNQK7M7K.js → chunk-Z7COG62J.js} +4 -4
  102. package/{chunk-3WXRAHCG.js → chunk-ZBB3MZR3.js} +3 -3
  103. package/{cliExecutor-DW3PHGEL.js → cliExecutor-BBUVQU4L.js} +2 -2
  104. package/{clipboardy-MMBYVRLF.js → clipboardy-PRUHGPGC.js} +4 -3
  105. package/{codingSkills-DY5MINPG.js → codingSkills-6F4EQFCM.js} +4 -5
  106. package/cooldownCommands-C2SZLEEO.js +90 -0
  107. package/{createAgentAutomationAction-GVSJL2CI.js → createAgentAutomationAction-TGUXUZCY.js} +28 -30
  108. package/createDialogAction-FD5AEOUF.js +58 -0
  109. package/{createPageAction-M2VDKBYS.js → createPageAction-NPC3LYNK.js} +31 -34
  110. package/{dbSlice-UI2VCBLG.js → dbSlice-PIQGICNM.js} +9 -9
  111. package/{deleteFile-XQXPBFFB.js → deleteFile-NPZ64DFN.js} +4 -4
  112. package/{dialogCommands-26DBYNBT.js → dialogCommands-ZF2RSNCG.js} +37 -36
  113. package/{dialogSlice-FFGLRCBL.js → dialogSlice-6BINHWQT.js} +27 -27
  114. package/dist-VODFSGNG.js +7442 -0
  115. package/{docCreateCommands-F2ASWG6B.js → docCreateCommands-4VQ5MOHP.js} +36 -36
  116. package/{docDeleteCommands-A4URDZPI.js → docDeleteCommands-M7WLNVPB.js} +37 -37
  117. package/{docReadCommands-DO6VHDZD.js → docReadCommands-6LU6P2WT.js} +36 -36
  118. package/{docStore-EDAE7RNT.js → docStore-SIUFLABN.js} +29 -31
  119. package/{docUpdateCommands-ZTXZ3RTP.js → docUpdateCommands-S2LX4ENL.js} +39 -39
  120. package/{fetchMessages-7QRCCRYK.js → fetchMessages-CUEFN4GQ.js} +4 -4
  121. package/{getPricing-L2ENXWHV.js → getPricing-P3E2WRIH.js} +5 -5
  122. package/{handleSendMessageAction-CIRLGHOC.js → handleSendMessageAction-QVG5YNZY.js} +29 -29
  123. package/index.js +92 -77
  124. package/{localDialogRead-SLMPV5SK.js → localDialogRead-P7CHFMIC.js} +1 -1
  125. package/{localRuntimeAuthority-E3R24J4T.js → localRuntimeAuthority-S77B5QVB.js} +6 -2
  126. package/{localRuntimeDb-DDZCJFQZ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  127. package/{machineCommands-NIQNCYJV.js → machineCommands-OSEBN7BZ.js} +76 -77
  128. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  129. package/{machineWsRunDispatch-EMTSQGAR.js → machineWsRunDispatch-NTJQCIIF.js} +68 -69
  130. package/{models-OX2S5C6Q.js → models-L7S2EKPM.js} +2 -2
  131. package/package.json +1 -1
  132. package/{read-2VHEHCAN.js → read-6C2XD3YZ.js} +5 -5
  133. package/{readDocTool-CSWD6NPC.js → readDocTool-Y7AB365O.js} +1 -1
  134. package/{readlineWorkspace-A2JBJWLI.js → readlineWorkspace-JPME5S7A.js} +4860 -3476
  135. package/{removeDialogAgentAction-2T7BPM3T.js → removeDialogAgentAction-KG5WMJRZ.js} +13 -13
  136. package/{runAgentClientLoop-BV4736ED.js → runAgentClientLoop-SOKEXCUF.js} +61 -61
  137. package/{runtimeDoctorCommands-KIKM6BIO.js → runtimeDoctorCommands-HT4O2PXL.js} +6 -6
  138. package/{setDialogExtraReferencesAction-GPT37HTW.js → setDialogExtraReferencesAction-O2NLXMSM.js} +10 -10
  139. package/{setPrimaryDialogAgentAction-3746P7IW.js → setPrimaryDialogAgentAction-FYYUY7PB.js} +13 -13
  140. package/{settingSlice-FIFOQ6OR.js → settingSlice-GPLI6E3M.js} +11 -11
  141. package/{skillDiscovery-KLLKXPUO.js → skillDiscovery-GPUDHDTZ.js} +3 -4
  142. package/{slateUtils-VO2FU36K.js → slateUtils-RIZES3PV.js} +1 -1
  143. package/{spaceCommands-AYZQHDB3.js → spaceCommands-Z5JLMFFJ.js} +223 -37
  144. package/{spaceSlice-43BNF22B.js → spaceSlice-Z3BGCLGX.js} +28 -30
  145. package/{streamAgentChatTurn-OLLRSITV.js → streamAgentChatTurn-INF5RGK4.js} +115 -129
  146. package/{switchDialogAgentAction-MQTUTQHL.js → switchDialogAgentAction-GH5P6Q3Z.js} +9 -9
  147. package/{chunk-IDAU4UFS.js → syncMapping-N6RGXGBW.js} +11 -11
  148. package/{tableCommands-QE47K72R.js → tableCommands-PQUJ55AS.js} +3 -3
  149. package/{tools-2SI3FXLL.js → tools-ZELMSJZ3.js} +45 -47
  150. package/{tuiSummaryLlmCaller-EAWQ3IZX.js → tuiSummaryLlmCaller-LH7F2SP7.js} +18 -18
  151. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  152. package/{updateDialogTitleAction-YJEQFYOA.js → updateDialogTitleAction-EDUCIB7G.js} +31 -33
  153. package/agentRecordCommands-YMGKT2WF.js +0 -113
  154. package/agentRunCommand-LYEMVQJH.js +0 -131
  155. package/chunk-AETZ7AD6.js +0 -274
  156. package/chunk-D5JI6VDM.js +0 -1800
  157. package/chunk-M3JEW6N6.js +0 -193
  158. package/chunk-ZURFOV5J.js +0 -105
  159. package/chunk-ZWS6DUHX.js +0 -480
  160. package/createDialogAction-VVR46Q2A.js +0 -61
  161. package/syncMapping-RK2MANUX.js +0 -43
  162. package/{chunk-KMSZPTM6.js → chunk-2WKUUY2E.js} +3 -3
  163. package/{chunk-CWMSB67P.js → chunk-AGGIDPCZ.js} +0 -0
  164. package/{chunk-SAQQLJZ5.js → chunk-JDSUTNYY.js} +3 -3
@@ -6,10 +6,9 @@ import {
6
6
  parseRetryAfterHeaderMs
7
7
  } from "./chunk-RQSOAMPJ.js";
8
8
  import {
9
- isAgentUnavailableNow,
10
9
  sortSafeAgentSummaries,
11
10
  toSafeAgentSummary
12
- } from "./chunk-2IVEXF7P.js";
11
+ } from "./chunk-GUYMR3JL.js";
13
12
  import {
14
13
  getUserDataItemTimestamp,
15
14
  mergeAndDedupUserData
@@ -20,32 +19,49 @@ import {
20
19
  readPageFunc,
21
20
  readPageFunctionSchema,
22
21
  slateToSimplifiedMarkdown
23
- } from "./chunk-75U775RZ.js";
22
+ } from "./chunk-IFS5CUEH.js";
23
+ import {
24
+ TASK_PREVIEW_MAX,
25
+ buildDelegatedTaskContent,
26
+ formatListRunsCard,
27
+ formatStartRunCard,
28
+ formatStatusRunCard,
29
+ formatStopRunCard,
30
+ resolveRunLabel
31
+ } from "./chunk-KXKQO4Q6.js";
32
+ import {
33
+ createDocState
34
+ } from "./chunk-Z7COG62J.js";
35
+ import {
36
+ ToolApiError,
37
+ buildToolRequestHeaders,
38
+ callToolApi,
39
+ getRequestConfig,
40
+ getToolBaseUrl,
41
+ getToolRequestContext
42
+ } from "./chunk-BANYWEYY.js";
43
+ import {
44
+ setDialogExtraReferencesAction
45
+ } from "./chunk-U6QQLXWI.js";
24
46
  import {
25
47
  markdownToSlate
26
48
  } from "./chunk-INZZJSQF.js";
27
49
  import {
28
50
  extractMentionsFromSlate
29
- } from "./chunk-GM6PU7B6.js";
51
+ } from "./chunk-MEYIRKDN.js";
30
52
  import {
31
53
  slateToRenderMarkdown
32
54
  } from "./chunk-63W5N6P3.js";
33
55
  import {
34
56
  isSkillSummaryMarker
35
57
  } from "./chunk-VF4K2QE6.js";
36
- import {
37
- createDocState
38
- } from "./chunk-DNQK7M7K.js";
39
- import {
40
- setDialogExtraReferencesAction
41
- } from "./chunk-ASDXPOJH.js";
42
58
  import {
43
59
  BUILTIN_OBJECT_SKILL_IDS,
44
60
  buildBuiltinObjectSkillConfig,
45
61
  buildBuiltinObjectSkillDbKey,
46
62
  buildBuiltinObjectSkillPageContent,
47
63
  createDialogAction
48
- } from "./chunk-7L5CQQIT.js";
64
+ } from "./chunk-Y5W623XU.js";
49
65
  import {
50
66
  addCategory,
51
67
  addContentToSpace,
@@ -65,58 +81,39 @@ import {
65
81
  loadTableRows,
66
82
  updateContentCategory,
67
83
  updateContentTitle
68
- } from "./chunk-XLLTJXAD.js";
84
+ } from "./chunk-QI3CHZUT.js";
69
85
  import {
70
- incrementFailedSteps,
71
- incrementStepsExecuted,
72
86
  normalizeAppRouteId,
73
87
  resolveDialogRuntimeAgentKey,
74
88
  selectAllMsgs,
75
89
  selectCurrentDialogConfig,
76
90
  selectCurrentDialogId,
77
91
  selectMsgById,
78
- setWorkflow,
79
92
  uiAskChoiceFunc,
80
- uiAskChoiceFunctionSchema,
81
- updateStep
82
- } from "./chunk-BXPBZVRE.js";
93
+ uiAskChoiceFunctionSchema
94
+ } from "./chunk-PILJX4DH.js";
83
95
  import {
84
96
  createAgent,
85
97
  runLlm,
86
98
  streamAgentChatTurn,
87
99
  updateAgent
88
- } from "./chunk-5X4GQ53C.js";
100
+ } from "./chunk-TLBZMLLJ.js";
89
101
  import {
90
- NOLO_WORKSPACE_TOOL_NAMES,
91
- buildAgentRuntimeAgentLookupKeys,
92
- buildNoloSubjectRefQueryTarget,
93
- buildNoloTableQueryRequest,
94
- clampNoloPositiveInteger,
95
- filterNoloDialogSubjectRefEvidence,
96
- getNoloComparableUpdatedAt,
97
- getNoloDialogIdFromKey,
98
- normalizeNoloExcludeDialogIds,
99
- normalizeNoloSpaceInput,
100
- redactAgentRecordForWorkspaceTool,
101
- resolveNoloDialogInput,
102
- verifyNoloDialogSubjectRefQuery
103
- } from "./chunk-ADLYMQB6.js";
104
- import {
105
- buildDatabaseFileContentUrl
106
- } from "./chunk-DKMOY3QI.js";
107
- import {
108
- DEFAULT_MODEL
109
- } from "./chunk-DFUPZE6V.js";
102
+ getActiveDialogKey,
103
+ require_react,
104
+ selectCurrentDialogKey,
105
+ selectPendingRawDataByPageKey
106
+ } from "./chunk-MRWGHF56.js";
110
107
  import {
111
108
  CODING_SKILL_SLUGS,
112
109
  buildCodingSkillConfig,
113
110
  buildCodingSkillContentBySlug,
114
111
  buildCodingSkillId,
115
112
  buildCodingSkillPageKey
116
- } from "./chunk-HUCT7HID.js";
113
+ } from "./chunk-P2I7ELDC.js";
117
114
  import {
118
115
  CAPABILITY_PACKS
119
- } from "./chunk-WLH5BAKX.js";
116
+ } from "./chunk-IIOHYLIG.js";
120
117
  import {
121
118
  buildSkillDocMarkdown,
122
119
  normalizeSkillModalities,
@@ -124,43 +121,44 @@ import {
124
121
  parseExternalSkillMarkdown,
125
122
  parseSkillDocProtocol,
126
123
  resolvePageSkillMetadata
127
- } from "./chunk-AETZ7AD6.js";
124
+ } from "./chunk-EY7V7REW.js";
128
125
  import {
129
- canonicalizeToolName,
130
- canonicalizeToolNames
131
- } from "./chunk-ZZ2MH7LE.js";
126
+ NOLO_WORKSPACE_TOOL_NAMES,
127
+ buildAgentRuntimeAgentLookupKeys,
128
+ buildNoloSubjectRefQueryTarget,
129
+ buildNoloTableQueryRequest,
130
+ clampNoloPositiveInteger,
131
+ filterNoloDialogSubjectRefEvidence,
132
+ getNoloComparableUpdatedAt,
133
+ getNoloDialogIdFromKey,
134
+ normalizeNoloExcludeDialogIds,
135
+ normalizeNoloSpaceInput,
136
+ redactAgentRecordForWorkspaceTool,
137
+ resolveNoloDialogInput,
138
+ verifyNoloDialogSubjectRefQuery
139
+ } from "./chunk-IZCHPD7T.js";
132
140
  import {
133
- ToolApiError,
134
- buildToolRequestHeaders,
135
- callToolApi,
136
- getRequestConfig,
137
- getToolBaseUrl,
138
- getToolRequestContext
139
- } from "./chunk-BANYWEYY.js";
141
+ isAgentUnavailableNow
142
+ } from "./chunk-X2K2JSO4.js";
140
143
  import {
141
- getActiveDialogKey,
142
- require_react,
143
- selectCurrentDialogKey,
144
- selectPendingRawDataByPageKey
145
- } from "./chunk-MRWGHF56.js";
144
+ buildDatabaseFileContentUrl
145
+ } from "./chunk-FGLKRJDI.js";
146
+ import {
147
+ DEFAULT_MODEL
148
+ } from "./chunk-C6ELZQ7H.js";
146
149
  import {
147
150
  compactWhitespace
148
151
  } from "./chunk-DWLEOOGR.js";
149
- import {
150
- TASK_PREVIEW_MAX,
151
- buildDelegatedTaskContent,
152
- formatListRunsCard,
153
- formatStartRunCard,
154
- formatStatusRunCard,
155
- formatStopRunCard,
156
- resolveRunLabel
157
- } from "./chunk-KXKQO4Q6.js";
158
152
  import {
159
153
  toErrorMessage
160
154
  } from "./chunk-HNMXYYJR.js";
155
+ import {
156
+ canonicalizeToolName,
157
+ canonicalizeToolNames
158
+ } from "./chunk-O6OSWFZQ.js";
161
159
  import {
162
160
  shareResourceAction
163
- } from "./chunk-3RUW3ONU.js";
161
+ } from "./chunk-LD6Y6RJY.js";
164
162
  import {
165
163
  AGENT_UPDATE_FIELD_NAMES,
166
164
  nolotusId,
@@ -168,7 +166,7 @@ import {
168
166
  selectAutoApproveSelfUpdateFields,
169
167
  selectCurrentServer,
170
168
  selectSyncServers
171
- } from "./chunk-UNOTBWZZ.js";
169
+ } from "./chunk-B6H5XCT2.js";
172
170
  import {
173
171
  asRecordOrEmpty
174
172
  } from "./chunk-KX6YBIHG.js";
@@ -176,7 +174,7 @@ import {
176
174
  addContentAction,
177
175
  createSpaceKey,
178
176
  normalizeSpaceId
179
- } from "./chunk-4F5M2MW5.js";
177
+ } from "./chunk-MJWX4JQO.js";
180
178
  import {
181
179
  patch,
182
180
  read,
@@ -185,7 +183,7 @@ import {
185
183
  selectById,
186
184
  toTimestampMs,
187
185
  write
188
- } from "./chunk-UM4H3URE.js";
186
+ } from "./chunk-23KKIMD5.js";
189
187
  import {
190
188
  SEPARATOR,
191
189
  createAgentKey,
@@ -197,21 +195,24 @@ import {
197
195
  rowKey,
198
196
  toTrimmedString,
199
197
  ulid
200
- } from "./chunk-KMSZPTM6.js";
201
- import {
202
- asOptionalFiniteNumber
203
- } from "./chunk-WWC7I6TA.js";
198
+ } from "./chunk-2WKUUY2E.js";
204
199
  import {
205
200
  asNonEmptyStringArray,
206
201
  asTrimmedNonEmptyStringArray
207
202
  } from "./chunk-I42VC5KR.js";
203
+ import {
204
+ asOptionalFiniteNumber
205
+ } from "./chunk-WWC7I6TA.js";
208
206
  import {
209
207
  asTrimmedLowercaseString
210
208
  } from "./chunk-QSJ3HFEF.js";
211
209
  import {
212
210
  DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS,
213
211
  readAction
214
- } from "./chunk-IR6W62Q6.js";
212
+ } from "./chunk-XT73C4VH.js";
213
+ import {
214
+ extractCustomId
215
+ } from "./chunk-BJIRLHJR.js";
215
216
  import {
216
217
  createAsyncThunk,
217
218
  getRuntimeServerContext,
@@ -220,19 +221,16 @@ import {
220
221
  selectIdentityUserBalance,
221
222
  selectIdentityUserId,
222
223
  selectRuntimeSnapshot
223
- } from "./chunk-X664KVEV.js";
224
+ } from "./chunk-HHBXCRJS.js";
224
225
  import {
225
226
  isAbortError
226
- } from "./chunk-WJSW43QZ.js";
227
- import {
228
- asTrimmedString
229
- } from "./chunk-3EUW3WEO.js";
230
- import {
231
- extractCustomId
232
- } from "./chunk-BJIRLHJR.js";
227
+ } from "./chunk-L3JWI7WX.js";
233
228
  import {
234
229
  isRecord
235
230
  } from "./chunk-KUG52IAP.js";
231
+ import {
232
+ asTrimmedString
233
+ } from "./chunk-3EUW3WEO.js";
236
234
  import {
237
235
  API_ENDPOINTS
238
236
  } from "./chunk-LCBAMY2M.js";
@@ -249,287 +247,6 @@ import {
249
247
  __toESM
250
248
  } from "./chunk-4VNS5WPM.js";
251
249
 
252
- // packages/ai/workflow/workflowExecutor.ts
253
- function resolveTemplates(value, results) {
254
- if (typeof value === "string") {
255
- return value.replace(
256
- /\{\{steps\.([^.}\s]+)\.result(\[\d+\])?\}\}/g,
257
- (match, stepId, indexPart) => {
258
- const stepResult = results[stepId];
259
- if (stepResult === void 0) {
260
- console.warn(`Workflow: cannot resolve {{steps.${stepId}.result}} \u2014 step not completed yet`);
261
- return match;
262
- }
263
- let resolved = stepResult;
264
- if (indexPart) {
265
- const idx = parseInt(indexPart.slice(1, -1), 10);
266
- if (Array.isArray(resolved) && idx < resolved.length) {
267
- resolved = resolved[idx];
268
- } else {
269
- console.warn(`Workflow: index ${idx} out of range for steps.${stepId}.result`);
270
- return match;
271
- }
272
- }
273
- return typeof resolved === "object" ? JSON.stringify(resolved) : String(resolved);
274
- }
275
- );
276
- }
277
- if (Array.isArray(value)) {
278
- return value.map((v) => resolveTemplates(v, results));
279
- }
280
- if (value !== null && typeof value === "object") {
281
- return Object.fromEntries(
282
- Object.entries(value).map(([k, v]) => [k, resolveTemplates(v, results)])
283
- );
284
- }
285
- return value;
286
- }
287
- function isSafeConditionExpression(expr) {
288
- let s = expr.trim();
289
- if (!s) return false;
290
- s = s.replace(/"[^"\n\\]*(?:\\.[^"\n\\]*)*"/g, "0");
291
- s = s.replace(/'[^'\n\\]*(?:\\.[^'\n\\]*)*/g, "0");
292
- s = s.replace(/\b\d+(?:\.\d+)?\b/g, "0");
293
- s = s.replace(/\b(true|false|null|undefined)\b/g, "0");
294
- s = s.replace(/\bsteps\.[a-zA-Z_][a-zA-Z0-9_.]*\b/g, "0");
295
- return /^[0\s()!&|=<>]+$/.test(s);
296
- }
297
- function resolvePath(path, results) {
298
- const parts = path.split(".");
299
- if (parts[0] !== "steps" || parts.length < 2) return void 0;
300
- let cur = results;
301
- for (let i = 1; i < parts.length; i++) {
302
- if (cur === null || cur === void 0 || typeof cur !== "object") return void 0;
303
- cur = cur[parts[i]];
304
- }
305
- return cur;
306
- }
307
- function evaluateCondition(expression, results) {
308
- if (!isSafeConditionExpression(expression)) {
309
- console.warn(
310
- `Workflow: condition expression rejected by allowlist: "${expression}"`
311
- );
312
- return false;
313
- }
314
- try {
315
- const resolved = expression.replace(
316
- /\bsteps\.[a-zA-Z_][a-zA-Z0-9_.]*\b/g,
317
- (match) => JSON.stringify(resolvePath(match, results))
318
- );
319
- const fn = new Function(`"use strict"; return !!(${resolved})`);
320
- return fn();
321
- } catch (e) {
322
- console.warn(`Workflow: condition eval failed: "${expression}"`, e);
323
- return false;
324
- }
325
- }
326
- async function executeWithRetry(fn, maxRetries) {
327
- let lastError;
328
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
329
- try {
330
- return await fn();
331
- } catch (err) {
332
- lastError = err;
333
- }
334
- }
335
- throw lastError;
336
- }
337
- async function executeToolStep(step, results, thunkApi) {
338
- const executor = toolExecutors[step.tool];
339
- if (!executor) throw new Error(`Workflow: unknown tool "${step.tool}"`);
340
- const resolvedArgs = resolveTemplates(step.args, results);
341
- const result = await executor(resolvedArgs, thunkApi);
342
- return result?.rawData ?? result;
343
- }
344
- async function executeLlmStep(step, results, thunkApi) {
345
- const { dispatch } = thunkApi;
346
- const resolvedPrompt = resolveTemplates(step.prompt, results);
347
- const result = await dispatch(
348
- runLlm({
349
- content: resolvedPrompt,
350
- isStreaming: false,
351
- ...step.model && { modelOverride: step.model }
352
- })
353
- ).unwrap();
354
- return result;
355
- }
356
- async function executeParallelStep(step, results, thunkApi) {
357
- const subResults = await Promise.all(
358
- step.steps.map(async (sub) => {
359
- const subResult = sub.type === "tool" ? await executeToolStep(sub, results, thunkApi) : await executeLlmStep(sub, results, thunkApi);
360
- return [sub.id, subResult];
361
- })
362
- );
363
- return Object.fromEntries(subResults);
364
- }
365
- var runWorkflow = createAsyncThunk("workflow/run", async ({ definition }, thunkApi) => {
366
- const { dispatch } = thunkApi;
367
- const initialStepStates = definition.steps.map((s) => ({
368
- id: s.id,
369
- title: s.title,
370
- type: s.type,
371
- status: "pending"
372
- }));
373
- setWorkflow({ title: definition.title, steps: initialStepStates });
374
- const results = {};
375
- const skippedIds = /* @__PURE__ */ new Set();
376
- for (const step of definition.steps) {
377
- if (skippedIds.has(step.id)) {
378
- updateStep({ id: step.id, updates: { status: "skipped" } });
379
- continue;
380
- }
381
- updateStep({ id: step.id, updates: { status: "in-progress" } });
382
- try {
383
- let result;
384
- if (step.type === "tool" || step.type === "llm") {
385
- const retryable = step;
386
- const policy = retryable.onError ?? "stop";
387
- const maxRetries = policy === "retry" ? retryable.retryCount ?? 1 : 0;
388
- result = await executeWithRetry(
389
- () => step.type === "tool" ? executeToolStep(step, results, thunkApi) : executeLlmStep(step, results, thunkApi),
390
- maxRetries
391
- );
392
- } else if (step.type === "parallel") {
393
- result = await executeParallelStep(step, results, thunkApi);
394
- for (const [subId, subResult] of Object.entries(
395
- result
396
- )) {
397
- results[subId] = subResult;
398
- }
399
- } else if (step.type === "condition") {
400
- const passed = evaluateCondition(step.check, results);
401
- result = { passed, check: step.check };
402
- const active = passed ? step.ifTrue : step.ifFalse;
403
- const inactive = passed ? step.ifFalse : step.ifTrue;
404
- if (inactive) inactive.forEach((id) => skippedIds.add(id));
405
- if (active) active.forEach((id) => skippedIds.delete(id));
406
- }
407
- results[step.id] = result;
408
- updateStep({ id: step.id, updates: { status: "completed", result } });
409
- incrementStepsExecuted();
410
- } catch (err) {
411
- incrementFailedSteps();
412
- const errorMessage = toErrorMessage(err);
413
- updateStep(
414
- { id: step.id, updates: { status: "failed", error: errorMessage } }
415
- );
416
- const policy = step.onError ?? "stop";
417
- if (policy === "stop") {
418
- return {
419
- success: false,
420
- results,
421
- failedStep: step.id,
422
- error: errorMessage
423
- };
424
- }
425
- results[step.id] = null;
426
- }
427
- }
428
- return { success: true, results };
429
- });
430
-
431
- // packages/ai/tools/createWorkflowTool.ts
432
- var createWorkflowFunctionSchema = {
433
- name: "createWorkflow",
434
- description: "\u5F53\u4F60\u5DF2\u77E5\u5B8C\u6574\u6267\u884C\u8DEF\u5F84\u65F6\u4F7F\u7528\u672C\u5DE5\u5177\u3002\u5B9A\u4E49\u4E00\u4E2A\u591A\u6B65\u9AA4 workflow\uFF0C\u5F15\u64CE\u81EA\u52A8\u6267\u884C\u5168\u90E8\u6B65\u9AA4\uFF0C\u4E0D\u9700\u8981\u6BCF\u6B65\u90FD\u8C03\u7528 LLM \u51B3\u7B56\uFF0C\u5927\u5E45\u8282\u7701 token\u3002\u6B65\u9AA4\u7C7B\u578B\uFF1A'tool'\u2014\u2014\u76F4\u63A5\u6267\u884C\u6CE8\u518C\u5DE5\u5177\uFF1B'llm'\u2014\u2014\u5355\u6B21 LLM \u8C03\u7528\uFF08\u65E0 tool loop\uFF09\uFF1B'parallel'\u2014\u2014\u5B50\u6B65\u9AA4\u5E76\u53D1\u6267\u884C\uFF1B'condition'\u2014\u2014\u7EAF\u903B\u8F91\u5224\u65AD\u5206\u652F\uFF0C\u65E0\u9700 LLM\u3002\u6B65\u9AA4\u95F4\u901A\u8FC7 {{steps.STEP_ID.result}} \u4F20\u9012\u6570\u636E\u3002",
435
- parameters: {
436
- type: "object",
437
- properties: {
438
- title: {
439
- type: "string",
440
- description: "Workflow \u6807\u9898\uFF0C\u7B80\u660E\u63CF\u8FF0\u6574\u4F53\u76EE\u6807\u3002"
441
- },
442
- steps: {
443
- type: "array",
444
- description: "\u6709\u5E8F\u6B65\u9AA4\u5217\u8868\u3002\u6BCF\u6B65\u58F0\u660E\u7C7B\u578B\u548C\u6240\u9700\u53C2\u6570\uFF0C\u5F15\u64CE\u987A\u5E8F\u6267\u884C\uFF08parallel \u6B65\u9AA4\u5185\u90E8\u5E76\u53D1\uFF09\u3002",
445
- items: {
446
- type: "object",
447
- properties: {
448
- id: {
449
- type: "string",
450
- description: "\u6B65\u9AA4\u552F\u4E00 ID\uFF0C\u540E\u7EED\u6B65\u9AA4\u901A\u8FC7 {{steps.ID.result}} \u5F15\u7528\u3002"
451
- },
452
- type: {
453
- type: "string",
454
- enum: ["tool", "llm", "parallel", "condition"],
455
- description: "\u6B65\u9AA4\u7C7B\u578B\u3002"
456
- },
457
- title: {
458
- type: "string",
459
- description: "\u6B65\u9AA4\u4EBA\u7C7B\u53EF\u8BFB\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\u3002"
460
- },
461
- // tool step
462
- tool: {
463
- type: "string",
464
- description: "type='tool' \u65F6\u5FC5\u586B\uFF0C\u5DE5\u5177\u540D\u79F0\u3002"
465
- },
466
- args: {
467
- type: "object",
468
- description: "type='tool' \u65F6\u5FC5\u586B\uFF0C\u5DE5\u5177\u53C2\u6570\u3002\u652F\u6301 {{steps.ID.result}} \u548C {{steps.ID.result[N]}} \u5360\u4F4D\u7B26\u3002parallel \u5B50\u6B65\u9AA4\u7ED3\u679C\u4E5F\u53EF\u76F4\u63A5\u901A\u8FC7\u5176\u81EA\u8EAB ID \u5F15\u7528\uFF0C\u4F8B\u5982 {{steps.subStepId.result}}\u3002"
469
- },
470
- // llm step
471
- prompt: {
472
- type: "string",
473
- description: "type='llm' \u65F6\u5FC5\u586B\uFF0C\u53D1\u9001\u7ED9\u6A21\u578B\u7684 prompt\u3002\u652F\u6301\u5360\u4F4D\u7B26\u3002"
474
- },
475
- model: {
476
- type: "string",
477
- description: "type='llm' \u65F6\u53EF\u9009\uFF0C\u6307\u5B9A\u6A21\u578B\u540D\u3002"
478
- },
479
- // parallel step
480
- steps: {
481
- type: "array",
482
- description: "type='parallel' \u65F6\u5FC5\u586B\uFF0C\u5B50\u6B65\u9AA4\u5217\u8868\uFF08tool \u6216 llm \u7C7B\u578B\uFF09\uFF0C\u5E76\u53D1\u6267\u884C\u3002\u5B50\u6B65\u9AA4\u6267\u884C\u5B8C\u6210\u540E\uFF0C\u5176\u7ED3\u679C\u540C\u65F6\u4EE5\u5B50\u6B65\u9AA4\u81EA\u8EAB ID \u6CE8\u518C\u5230\u5168\u5C40 steps map\uFF0C\u540E\u7EED\u6B65\u9AA4\u53EF\u901A\u8FC7 {{steps.subStepId.result}} \u76F4\u63A5\u5F15\u7528\uFF0C\u65E0\u9700\u901A\u8FC7\u7236 parallel \u6B65\u9AA4\u4E2D\u8F6C\u3002",
483
- items: { type: "object" }
484
- },
485
- // condition step
486
- check: {
487
- type: "string",
488
- description: `type='condition' \u65F6\u5FC5\u586B\uFF0C\u7EAF JS \u5E03\u5C14\u8868\u8FBE\u5F0F\u3002steps.<stepId>.<prop> \u8868\u793A\u67D0\u6B65\u9AA4\u7ED3\u679C\u7684\u5C5E\u6027\uFF08\u70B9\u8DEF\u5F84\uFF0C\u4E0D\u652F\u6301 bracket notation\uFF0C\u65E0 .result \u5305\u88C5\uFF09\u3002\u652F\u6301\uFF1A\u70B9\u8DEF\u5F84 / \u5B57\u7B26\u4E32\u548C\u6570\u5B57\u5B57\u9762\u91CF / \u5E03\u5C14 null / \u6BD4\u8F83\u8FD0\u7B97\u7B26 === !== > < >= <= / \u903B\u8F91\u8FD0\u7B97\u7B26 && || ! / \u62EC\u53F7\u3002\u4F8B: "steps.validate.isValid === true" \u6216 "steps.score.value >= 80 && steps.flag.ok !== false"`
489
- },
490
- ifTrue: {
491
- type: "array",
492
- items: { type: "string" },
493
- description: "\u6761\u4EF6\u4E3A\u771F\u65F6\u6267\u884C\u7684\u6B65\u9AA4 ID \u5217\u8868\uFF0C\u5176\u4F59\u6B65\u9AA4\u8DF3\u8FC7\u3002"
494
- },
495
- ifFalse: {
496
- type: "array",
497
- items: { type: "string" },
498
- description: "\u6761\u4EF6\u4E3A\u5047\u65F6\u6267\u884C\u7684\u6B65\u9AA4 ID \u5217\u8868\uFF0C\u5176\u4F59\u6B65\u9AA4\u8DF3\u8FC7\u3002"
499
- },
500
- // error handling
501
- onError: {
502
- type: "string",
503
- enum: ["stop", "skip", "retry"],
504
- description: "\u6B65\u9AA4\u5931\u8D25\u65F6\u7B56\u7565\uFF1Astop\uFF08\u9ED8\u8BA4\uFF0C\u7EC8\u6B62 workflow\uFF09/ skip\uFF08\u8DF3\u8FC7\uFF0C\u7ED3\u679C\u8BB0\u4E3A null \u7EE7\u7EED\uFF09/ retry\uFF08\u6309 retryCount \u6B21\u6570\u91CD\u8BD5\uFF0C\u8017\u5C3D\u540E\u82E5\u4ECD\u5931\u8D25\u5219\u89E6\u53D1 stop\uFF09\u3002"
505
- },
506
- retryCount: {
507
- type: "integer",
508
- description: "onError='retry' \u65F6\u91CD\u8BD5\u6B21\u6570\uFF0C\u9ED8\u8BA4 1\uFF08\u5373\u6700\u591A\u6267\u884C 2 \u6B21\uFF09\u3002"
509
- }
510
- },
511
- required: ["id", "type"]
512
- }
513
- }
514
- },
515
- required: ["title", "steps"]
516
- }
517
- };
518
- async function createWorkflowFunc(args, thunkApi) {
519
- const { title, steps } = args;
520
- if (!steps?.length) {
521
- throw new Error("createWorkflow: steps \u4E0D\u80FD\u4E3A\u7A7A\u3002");
522
- }
523
- const definition = { title, steps };
524
- const { dispatch } = thunkApi;
525
- const result = await dispatch(runWorkflow({ definition })).unwrap();
526
- const completedCount = Object.values(result.results).filter(
527
- (v) => v !== null && v !== void 0
528
- ).length;
529
- const displayData = result.success ? `\u2705 **${title}** \u5B8C\u6210\uFF0C\u5171\u6267\u884C ${completedCount} \u6B65` : `\u274C **${title}** \u5728\u6B65\u9AA4 \`${result.failedStep}\` \u5931\u8D25\uFF1A${result.error}`;
530
- return { rawData: result, displayData };
531
- }
532
-
533
250
  // packages/ai/tools/modelUsageTools.ts
534
251
  var queryModelUsageFunctionSchema = {
535
252
  name: "queryModelUsage",
@@ -539,8 +256,8 @@ var queryModelUsageFunctionSchema = {
539
256
  properties: {
540
257
  analysisType: {
541
258
  type: "string",
542
- enum: ["billing", "workload", "cacheBreakdown", "pricingReplay", "breakEven", "prefixChurn"],
543
- description: "\u5206\u6790\u7C7B\u578B\u3002billing=\u7528\u91CF\u8D39\u7528\u7EDF\u8BA1\uFF08\u9ED8\u8BA4\uFF0C\u5411\u540E\u517C\u5BB9\uFF09\uFF1Bworkload=cache hit/output-input ratio \u6307\u7EB9\uFF1BcacheBreakdown=\u6309\u6A21\u578B/agent/\u5165\u53E3\u7684 cache hit \u5206\u7EC4\uFF1BpricingReplay=\u8F93\u5165\u5B9A\u4EF7\u65B9\u6848 \xD7 \u5386\u53F2 workload = counterfactual \u6210\u672C\u5BF9\u6BD4\uFF1BbreakEven=\u4E24\u4E2A\u5B9A\u4EF7\u65B9\u6848\u7684 break-even cache hit rate\uFF1BprefixChurn=stable prefix \u53D8\u66F4\u8BCA\u65AD\u3002",
259
+ enum: ["billing", "workload", "cacheBreakdown", "pricingReplay", "breakEven", "prefixChurn", "dialogCacheHealth"],
260
+ description: "\u5206\u6790\u7C7B\u578B\u3002billing=\u7528\u91CF\u8D39\u7528\u7EDF\u8BA1\uFF08\u9ED8\u8BA4\uFF0C\u5411\u540E\u517C\u5BB9\uFF09\uFF1Bworkload=cache hit/output-input ratio \u6307\u7EB9\uFF1BcacheBreakdown=\u6309\u6A21\u578B/agent/\u5165\u53E3\u7684 cache hit \u5206\u7EC4\uFF1BpricingReplay=\u8F93\u5165\u5B9A\u4EF7\u65B9\u6848 \xD7 \u5386\u53F2 workload = counterfactual \u6210\u672C\u5BF9\u6BD4\uFF1BbreakEven=\u4E24\u4E2A\u5B9A\u4EF7\u65B9\u6848\u7684 break-even cache hit rate\uFF1BprefixChurn=stable prefix \u53D8\u66F4\u8BCA\u65AD\uFF1BdialogCacheHealth=\u6309\u5BF9\u8BDD\u5206\u7EC4\u7684 cache hit \u5065\u5EB7\u63A2\u9488\uFF08cache_read \u9489\u6B7B/input \u6301\u7EED\u6DA8\u7684\u5BF9\u8BDD\uFF0ChitRatio \u5347\u5E8F\u6700\u5DEE\u5728\u524D\uFF09\u3002",
544
261
  default: "billing"
545
262
  },
546
263
  scope: {
@@ -577,6 +294,14 @@ var queryModelUsageFunctionSchema = {
577
294
  type: "string",
578
295
  description: "\u7ED3\u675F\u65E5\u671F\uFF0CYYYY-MM-DD\u3002\u9ED8\u8BA4\u7B49\u4E8E startDate\u3002"
579
296
  },
297
+ dialogId: {
298
+ type: "string",
299
+ description: "\u53EF\u9009\uFF1A\u6309\u5BF9\u8BDD id \u8FC7\u6EE4 prefixChurn / dialogCacheHealth \u8BCA\u65AD"
300
+ },
301
+ minCalls: {
302
+ type: "number",
303
+ description: "\u53EF\u9009\uFF1AdialogCacheHealth \u7684\u6700\u5C0F\u8C03\u7528\u6B21\u6570\u9608\u503C\uFF0C\u4F4E\u4E8E\u8BE5\u503C\u7684\u5BF9\u8BDD\u4F1A\u88AB\u8FC7\u6EE4\uFF08\u907F\u514D\u9996\u8F6E 0% \u566A\u97F3\uFF09\u3002\u9ED8\u8BA4 3\u3002"
304
+ },
580
305
  currency: {
581
306
  type: "string",
582
307
  description: "\u5C55\u793A\u8D27\u5E01/\u5355\u4F4D\u6807\u7B7E\u3002\u9ED8\u8BA4 CREDITS\uFF1B\u53EF\u586B USD\u3001CNY \u7B49\u3002",
@@ -2388,9 +2113,7 @@ var chat_locale_default = {
2388
2113
  readFile: "Read file",
2389
2114
  writeFile: "Write file",
2390
2115
  editFile: "Edit file",
2391
- listFiles: "List files",
2392
2116
  globFiles: "Find files",
2393
- searchFiles: "Search files",
2394
2117
  searchWorkspace: "Search workspace",
2395
2118
  readWorkspaceFile: "Read file",
2396
2119
  writeWorkspaceFile: "Write file",
@@ -2463,7 +2186,19 @@ var chat_locale_default = {
2463
2186
  detailLoadFailed: "Unable to load child dialog",
2464
2187
  detailEmpty: "No messages or evidence yet.",
2465
2188
  messagesAriaLabel: "Child dialog messages",
2466
- emptyContent: "(empty)"
2189
+ emptyContent: "(empty)",
2190
+ appendInstructionTitle: "Append instruction",
2191
+ appendInstructionPlaceholder: "Append instruction to running task\u2026",
2192
+ appendInstructionButton: "Send",
2193
+ appendInstructionSending: "Sending\u2026",
2194
+ appendInstructionSuccess: "Enqueued; will be consumed in the next turn",
2195
+ appendInstructionFailed: "Failed to send instruction",
2196
+ continueTaskTitle: "Continue task",
2197
+ continueTaskPlaceholder: "Enter instruction to continue task\u2026",
2198
+ continueTaskButton: "Continue",
2199
+ continueTaskSuccess: "Continue instruction sent",
2200
+ queuedCount: "{{count}} queued",
2201
+ queuedCountTitle: "Number of queued instructions"
2467
2202
  },
2468
2203
  chat: {
2469
2204
  agentBehavior: {
@@ -2745,9 +2480,7 @@ var chat_locale_default = {
2745
2480
  readFile: "\u8BFB\u53D6\u6587\u4EF6",
2746
2481
  writeFile: "\u5199\u5165\u6587\u4EF6",
2747
2482
  editFile: "\u4FEE\u6539\u6587\u4EF6",
2748
- listFiles: "\u6D4F\u89C8\u76EE\u5F55",
2749
2483
  globFiles: "\u67E5\u627E\u6587\u4EF6",
2750
- searchFiles: "\u641C\u7D22\u4EE3\u7801",
2751
2484
  searchWorkspace: "\u641C\u7D22\u5DE5\u4F5C\u533A",
2752
2485
  readWorkspaceFile: "\u8BFB\u53D6\u6587\u4EF6",
2753
2486
  writeWorkspaceFile: "\u5199\u5165\u6587\u4EF6",
@@ -2820,7 +2553,19 @@ var chat_locale_default = {
2820
2553
  detailLoadFailed: "\u65E0\u6CD5\u52A0\u8F7D\u5B50\u5BF9\u8BDD",
2821
2554
  detailEmpty: "\u6682\u65E0\u6D88\u606F\u6216\u8BC1\u636E\u3002",
2822
2555
  messagesAriaLabel: "\u5B50\u5BF9\u8BDD\u6D88\u606F",
2823
- emptyContent: "\uFF08\u7A7A\u5185\u5BB9\uFF09"
2556
+ emptyContent: "\uFF08\u7A7A\u5185\u5BB9\uFF09",
2557
+ appendInstructionTitle: "\u8FFD\u52A0\u6307\u4EE4",
2558
+ appendInstructionPlaceholder: "\u8FFD\u52A0\u6307\u4EE4\u7ED9\u8FD0\u884C\u4E2D\u7684\u4EFB\u52A1\u2026",
2559
+ appendInstructionButton: "\u8FFD\u52A0",
2560
+ appendInstructionSending: "\u53D1\u9001\u4E2D\u2026",
2561
+ appendInstructionSuccess: "\u5DF2\u52A0\u5165\u961F\u5217\uFF0C\u5C06\u5728\u4E0B\u4E00\u8F6E\u6D88\u8D39",
2562
+ appendInstructionFailed: "\u53D1\u9001\u6307\u4EE4\u5931\u8D25",
2563
+ continueTaskTitle: "\u7EE7\u7EED\u4EFB\u52A1",
2564
+ continueTaskPlaceholder: "\u8F93\u5165\u6307\u4EE4\u7EE7\u7EED\u4EFB\u52A1\u2026",
2565
+ continueTaskButton: "\u7EE7\u7EED\u4EFB\u52A1",
2566
+ continueTaskSuccess: "\u5DF2\u63D0\u4EA4\u7EE7\u7EED\u6307\u4EE4",
2567
+ queuedCount: "{{count}} \u6761\u6392\u961F\u4E2D",
2568
+ queuedCountTitle: "\u5F53\u524D\u6392\u961F\u4E2D\u7684\u6307\u4EE4\u6570"
2824
2569
  },
2825
2570
  chat: {
2826
2571
  agentBehavior: {
@@ -3092,9 +2837,7 @@ var chat_locale_default = {
3092
2837
  readFile: "\u8B80\u53D6\u6A94\u6848",
3093
2838
  writeFile: "\u5BEB\u5165\u6A94\u6848",
3094
2839
  editFile: "\u4FEE\u6539\u6A94\u6848",
3095
- listFiles: "\u700F\u89BD\u76EE\u9304",
3096
2840
  globFiles: "\u67E5\u627E\u6A94\u6848",
3097
- searchFiles: "\u641C\u5C0B\u7A0B\u5F0F\u78BC",
3098
2841
  searchWorkspace: "\u641C\u5C0B\u5DE5\u4F5C\u5340",
3099
2842
  readWorkspaceFile: "\u8B80\u53D6\u6A94\u6848",
3100
2843
  writeWorkspaceFile: "\u5BEB\u5165\u6A94\u6848",
@@ -3167,7 +2910,19 @@ var chat_locale_default = {
3167
2910
  detailLoadFailed: "\u7121\u6CD5\u8F09\u5165\u5B50\u5C0D\u8A71",
3168
2911
  detailEmpty: "\u66AB\u7121\u8A0A\u606F\u6216\u8B49\u64DA\u3002",
3169
2912
  messagesAriaLabel: "\u5B50\u5C0D\u8A71\u8A0A\u606F",
3170
- emptyContent: "\uFF08\u7A7A\u5167\u5BB9\uFF09"
2913
+ emptyContent: "\uFF08\u7A7A\u5167\u5BB9\uFF09",
2914
+ appendInstructionTitle: "\u8FFD\u52A0\u6307\u4EE4",
2915
+ appendInstructionPlaceholder: "\u8FFD\u52A0\u6307\u4EE4\u7D66\u904B\u884C\u4E2D\u7684\u4EFB\u52D9\u2026",
2916
+ appendInstructionButton: "\u8FFD\u52A0",
2917
+ appendInstructionSending: "\u767C\u9001\u4E2D\u2026",
2918
+ appendInstructionSuccess: "\u5DF2\u52A0\u5165\u4F47\u5217\uFF0C\u5C07\u5728\u4E0B\u4E00\u8F2A\u6D88\u8CBB",
2919
+ appendInstructionFailed: "\u767C\u9001\u6307\u4EE4\u5931\u6557",
2920
+ continueTaskTitle: "\u7E7C\u7E8C\u4EFB\u52D9",
2921
+ continueTaskPlaceholder: "\u8F38\u5165\u6307\u4EE4\u7E7C\u7E8C\u4EFB\u52D9\u2026",
2922
+ continueTaskButton: "\u7E7C\u7E8C\u4EFB\u52D9",
2923
+ continueTaskSuccess: "\u5DF2\u63D0\u4EA4\u7E7C\u7E8C\u6307\u4EE4",
2924
+ queuedCount: "{{count}} \u689D\u6392\u968A\u4E2D",
2925
+ queuedCountTitle: "\u76EE\u524D\u6392\u968A\u4E2D\u7684\u6307\u4EE4\u6578"
3171
2926
  }
3172
2927
  }
3173
2928
  },
@@ -3383,9 +3138,7 @@ var chat_locale_default = {
3383
3138
  readFile: "\u30D5\u30A1\u30A4\u30EB\u8AAD\u307F\u53D6\u308A",
3384
3139
  writeFile: "\u30D5\u30A1\u30A4\u30EB\u66F8\u304D\u8FBC\u307F",
3385
3140
  editFile: "\u30D5\u30A1\u30A4\u30EB\u7DE8\u96C6",
3386
- listFiles: "\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u4E00\u89A7",
3387
3141
  globFiles: "\u30D5\u30A1\u30A4\u30EB\u691C\u7D22",
3388
- searchFiles: "\u30B3\u30FC\u30C9\u691C\u7D22",
3389
3142
  searchWorkspace: "\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u691C\u7D22",
3390
3143
  readWorkspaceFile: "\u30D5\u30A1\u30A4\u30EB\u8AAD\u307F\u53D6\u308A",
3391
3144
  writeWorkspaceFile: "\u30D5\u30A1\u30A4\u30EB\u66F8\u304D\u8FBC\u307F",
@@ -3458,7 +3211,19 @@ var chat_locale_default = {
3458
3211
  detailLoadFailed: "\u5B50\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093",
3459
3212
  detailEmpty: "\u30E1\u30C3\u30BB\u30FC\u30B8\u307E\u305F\u306F\u8A3C\u62E0\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002",
3460
3213
  messagesAriaLabel: "\u5B50\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u30E1\u30C3\u30BB\u30FC\u30B8",
3461
- emptyContent: "\uFF08\u7A7A\uFF09"
3214
+ emptyContent: "\uFF08\u7A7A\uFF09",
3215
+ appendInstructionTitle: "\u6307\u793A\u3092\u8FFD\u52A0",
3216
+ appendInstructionPlaceholder: "\u5B9F\u884C\u4E2D\u306E\u30BF\u30B9\u30AF\u306B\u6307\u793A\u3092\u8FFD\u52A0\u2026",
3217
+ appendInstructionButton: "\u8FFD\u52A0",
3218
+ appendInstructionSending: "\u9001\u4FE1\u4E2D\u2026",
3219
+ appendInstructionSuccess: "\u30AD\u30E5\u30FC\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F\u3002\u6B21\u306E\u30BF\u30FC\u30F3\u3067\u51E6\u7406\u3055\u308C\u307E\u3059",
3220
+ appendInstructionFailed: "\u6307\u793A\u306E\u9001\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3221
+ continueTaskTitle: "\u30BF\u30B9\u30AF\u3092\u7D99\u7D9A",
3222
+ continueTaskPlaceholder: "\u30BF\u30B9\u30AF\u3092\u7D99\u7D9A\u3059\u308B\u6307\u793A\u3092\u5165\u529B\u2026",
3223
+ continueTaskButton: "\u30BF\u30B9\u30AF\u3092\u7D99\u7D9A",
3224
+ continueTaskSuccess: "\u7D99\u7D9A\u6307\u793A\u3092\u9001\u4FE1\u3057\u307E\u3057\u305F",
3225
+ queuedCount: "\u5F85\u6A5F\u4E2D {{count}} \u4EF6",
3226
+ queuedCountTitle: "\u5F85\u6A5F\u4E2D\u306E\u6307\u793A\u6570"
3462
3227
  }
3463
3228
  }
3464
3229
  }
@@ -9835,6 +9600,14 @@ var seoLocale = {
9835
9600
  shareCommunity: {
9836
9601
  title: "Community Shares | See What People Build with Nolo.Chat",
9837
9602
  description: "Explore public chats, docs, apps, and shared outputs from the Nolo community to see how people use AI agents for real work."
9603
+ },
9604
+ about: {
9605
+ title: "About Nolo.Chat | Autonomous Multi-Agent Workspace & AI Platform",
9606
+ description: "Learn about Nolo.Chat's mission to transform how humans work with AI through local-first autonomous multi-agent orchestration, persistent memory, and multi-model collaboration."
9607
+ },
9608
+ contact: {
9609
+ title: "Contact Us | Nolo.Chat Support, Feedback & Community",
9610
+ description: "Get in touch with the Nolo.Chat team for technical support, partnerships, bug reports, and feedback. Connect via email, community, and social channels."
9838
9611
  }
9839
9612
  },
9840
9613
  ["zh-CN" /* ZH_CN */]: {
@@ -9855,6 +9628,14 @@ var seoLocale = {
9855
9628
  shareCommunity: {
9856
9629
  title: "Nolo \u793E\u533A\u5206\u4EAB | \u770B\u522B\u4EBA\u600E\u6837\u7528 AI \u628A\u4E8B\u505A\u5B8C",
9857
9630
  description: "\u6D4F\u89C8\u793E\u533A\u516C\u5F00\u5206\u4EAB\u7684\u5BF9\u8BDD\u3001\u6587\u6863\u3001\u5E94\u7528\u4E0E\u6210\u679C\uFF0C\u4E86\u89E3\u771F\u5B9E\u7528\u6237\u5982\u4F55\u7528 Nolo \u5B8C\u6210\u7814\u7A76\u3001\u5199\u4F5C\u3001\u5F00\u53D1\u4E0E\u81EA\u52A8\u5316\u4EFB\u52A1\u3002"
9631
+ },
9632
+ about: {
9633
+ title: "\u5173\u4E8E Nolo.Chat | \u81EA\u4E3B\u591A Agent \u534F\u4F5C AI \u5DE5\u4F5C\u53F0",
9634
+ description: "\u4E86\u89E3 Nolo.Chat \u7684\u4F7F\u547D\u4E0E\u6280\u672F\u613F\u666F\uFF1A\u901A\u8FC7\u672C\u5730\u4F18\u5148\u67B6\u6784\u3001\u81EA\u4E3B\u591A Agent \u534F\u4F5C\u7F51\u7EDC\u3001\u6301\u4E45\u957F\u671F\u8BB0\u5FC6\u4E0E\u591A\u6A21\u578B\u534F\u540C\uFF0C\u6253\u9020\u771F\u6B63\u66FF\u4F60\u628A\u4E8B\u505A\u5B8C\u7684 AI \u56E2\u961F\u3002"
9635
+ },
9636
+ contact: {
9637
+ title: "\u8054\u7CFB\u6211\u4EEC | Nolo.Chat \u5B98\u65B9\u652F\u6301\u4E0E\u793E\u533A\u53CD\u9988",
9638
+ description: "\u83B7\u53D6 Nolo.Chat \u5B98\u65B9\u6280\u672F\u652F\u6301\u3001\u5546\u52A1\u5408\u4F5C\u3001\u95EE\u9898\u53CD\u9988\u4E0E\u793E\u533A\u4EA4\u6D41\u5165\u53E3\u3002\u6B22\u8FCE\u901A\u8FC7\u90AE\u4EF6\u4E0E\u5B98\u65B9\u793E\u533A\u968F\u65F6\u4E0E\u6211\u4EEC\u8054\u7CFB\u3002"
9858
9639
  }
9859
9640
  },
9860
9641
  ["zh-Hant" /* ZH_HANT */]: {
@@ -9875,6 +9656,14 @@ var seoLocale = {
9875
9656
  shareCommunity: {
9876
9657
  title: "Nolo \u793E\u7FA4\u5206\u4EAB | \u770B\u5225\u4EBA\u5982\u4F55\u7528 AI \u628A\u4E8B\u505A\u5B8C",
9877
9658
  description: "\u700F\u89BD\u793E\u7FA4\u516C\u958B\u5206\u4EAB\u7684\u5C0D\u8A71\u3001\u6587\u4EF6\u3001\u61C9\u7528\u8207\u6210\u679C\uFF0C\u4E86\u89E3\u771F\u5BE6\u4F7F\u7528\u8005\u5982\u4F55\u7528 Nolo \u5B8C\u6210\u7814\u7A76\u3001\u5BEB\u4F5C\u3001\u958B\u767C\u8207\u81EA\u52D5\u5316\u4EFB\u52D9\u3002"
9659
+ },
9660
+ about: {
9661
+ title: "\u95DC\u65BC Nolo.Chat | \u81EA\u4E3B\u591A Agent \u5354\u4F5C AI \u5DE5\u4F5C\u53F0",
9662
+ description: "\u4E86\u89E3 Nolo.Chat \u7684\u4F7F\u547D\u8207\u6280\u8853\u9858\u666F\uFF1A\u900F\u904E\u672C\u5730\u512A\u5148\u67B6\u69CB\u3001\u81EA\u4E3B\u591A Agent \u5354\u4F5C\u7DB2\u7D61\u3001\u6301\u4E45\u9577\u671F\u8A18\u61B6\u8207\u591A\u6A21\u578B\u5354\u540C\uFF0C\u6253\u9020\u771F\u6B63\u66FF\u4F60\u628A\u4E8B\u505A\u5B8C\u7684 AI \u5718\u968A\u3002"
9663
+ },
9664
+ contact: {
9665
+ title: "\u806F\u7D61\u6211\u5011 | Nolo.Chat \u5B98\u65B9\u652F\u63F4\u8207\u793E\u7FA4\u53CD\u994B",
9666
+ description: "\u7372\u53D6 Nolo.Chat \u5B98\u65B9\u6280\u8853\u652F\u63F4\u3001\u5546\u52D9\u5408\u4F5C\u3001\u554F\u984C\u53CD\u994B\u8207\u793E\u7FA4\u4EA4\u6D41\u5165\u53E3\u3002\u6B61\u8FCE\u900F\u904E\u90F5\u4EF6\u8207\u5B98\u65B9\u793E\u7FA4\u96A8\u6642\u8207\u6211\u5011\u806F\u7D61\u3002"
9878
9667
  }
9879
9668
  },
9880
9669
  ["ja" /* JA */]: {
@@ -9895,6 +9684,42 @@ var seoLocale = {
9895
9684
  shareCommunity: {
9896
9685
  title: "\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u5171\u6709 | Nolo.Chat \u3067\u4F5C\u3089\u308C\u305F\u5B9F\u4F8B\u3092\u898B\u308B",
9897
9686
  description: "\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u304C\u516C\u958B\u3057\u305F\u5BFE\u8A71\u3001\u6587\u66F8\u3001\u30A2\u30D7\u30EA\u3001\u6210\u679C\u7269\u3092\u898B\u306A\u304C\u3089\u3001Nolo \u304C\u5B9F\u52D9\u3067\u3069\u3046\u4F7F\u308F\u308C\u3066\u3044\u308B\u304B\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002"
9687
+ },
9688
+ about: {
9689
+ title: "Nolo.Chat \u306B\u3064\u3044\u3066 | \u81EA\u5F8B\u578B\u30DE\u30EB\u30C1\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8 AI \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9",
9690
+ description: "Nolo.Chat \u306E\u30D3\u30B8\u30E7\u30F3\u3068\u6280\u8853\uFF1A\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30FC\u30B9\u30C8\u8A2D\u8A08\u3001\u8907\u6570 Agent \u306E\u81EA\u5F8B\u5354\u8ABF\u3001\u9577\u671F\u8A18\u61B6\u3001\u30DE\u30EB\u30C1\u30E2\u30C7\u30EB\u9023\u643A\u3092\u901A\u3058\u3066\u3001\u4ED5\u4E8B\u3092\u5B9F\u969B\u306B\u4ED5\u4E0A\u3052\u308B AI \u30C1\u30FC\u30E0\u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002"
9691
+ },
9692
+ contact: {
9693
+ title: "\u304A\u554F\u3044\u5408\u308F\u305B | Nolo.Chat \u516C\u5F0F\u30B5\u30DD\u30FC\u30C8\uFF06\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3",
9694
+ description: "Nolo.Chat \u306E\u516C\u5F0F\u30C6\u30AF\u30CB\u30AB\u30EB\u30B5\u30DD\u30FC\u30C8\u3001\u63D0\u643A\u3001\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u7A93\u53E3\u3002\u30E1\u30FC\u30EB\u3084\u516C\u5F0F\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u304B\u3089\u304A\u6C17\u8EFD\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u304F\u3060\u3055\u3044\u3002"
9695
+ }
9696
+ },
9697
+ ["ko" /* KO */]: {
9698
+ title: "Nolo.Chat | \uB2E8\uC21C \uCC57\uBD07\uC744 \uB118\uC5B4\uC120 \uB098\uB9CC\uC758 \uD504\uB77C\uC774\uBE57 AI \uD300",
9699
+ description: "\uB2E8\uC21C\uD55C \uB300\uD654\uB97C \uB118\uC5B4, \uC5EC\uB7EC AI \uC5D0\uC774\uC804\uD2B8\uAC00 \uD611\uB825\uD558\uC5EC \uC5C5\uBB34\uB97C \uC644\uC218\uD569\uB2C8\uB2E4. \uADDC\uCE59\uC744 \uAE30\uC5B5\uD558\uACE0 \uBC24\uC0C8 \uC2E4\uD589\uD558\uC5EC \uC544\uCE68\uC5D0 \uC2E4\uC81C \uACB0\uACFC\uBB3C\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4.",
9700
+ home: {
9701
+ title: "Nolo.Chat | \uB2F9\uC2E0\uC744 \uAE30\uC5B5\uD558\uACE0 \uC5C5\uBB34\uB97C \uC644\uC218\uD558\uB294 AI \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4",
9702
+ description: "GPT, Claude, DeepSeek \uB4F1\uC744 \uD558\uB098\uC758 AI \uC791\uC5C5 \uACF5\uAC04\uC5D0\uC11C \uD65C\uC6A9\uD558\uC138\uC694. Nolo\uB294 \uBB38\uB9E5\uC744 \uAE30\uC5B5\uD558\uACE0, \uC5EC\uB7EC \uC5D0\uC774\uC804\uD2B8\uC758 \uD611\uC5C5\uACFC \uD1A0\uB860\uC744 \uD1B5\uD574 \uBB38\uC11C, \uC774\uBBF8\uC9C0, \uC6F9, \uCD5C\uC885 \uACB0\uACFC\uBB3C\uC744 \uB9CC\uB4ED\uB2C8\uB2E4."
9703
+ },
9704
+ pricing: {
9705
+ title: "Nolo \uC694\uAE08\uC81C | \uC0AC\uC6A9\uD55C \uB9CC\uD07C\uB9CC \uACB0\uC81C\uD558\uB294 \uD06C\uB808\uB527 \uC2DC\uC2A4\uD15C",
9706
+ description: "\uBB34\uB8CC\uB85C \uC2DC\uC791\uD558\uACE0 \uD544\uC694\uD560 \uB54C\uB9CC \uD06C\uB808\uB527\uC744 \uCDA9\uC804\uD558\uC138\uC694. \uBAA8\uB378\uBCC4 \uBE44\uC6A9\uC744 \uBE44\uAD50\uD558\uACE0, \uAD6C\uB3C5 \uC5C6\uC774 \uACE0\uAE09 \uAE30\uB2A5\uC744 \uC720\uC5F0\uD558\uAC8C \uC774\uC6A9\uD574 \uBCF4\uC138\uC694."
9707
+ },
9708
+ explore: {
9709
+ title: "AI \uAD11\uC7A5 | Nolo.Chat \uACF5\uAC1C AI \uC5D0\uC774\uC804\uD2B8 \uD0D0\uC0C9",
9710
+ description: "\uACF5\uAC1C\uB41C AI \uC5D0\uC774\uC804\uD2B8\uB97C \uC0B4\uD3B4\uBCF4\uACE0, \uAC01 \uBD84\uC57C\uC758 \uC804\uBB38\uC131\uACFC \uC2E4\uC81C \uC6CC\uD06C\uD50C\uB85C\uB97C \uD655\uC778\uD55C \uB4A4 \uB098\uB9CC\uC758 \uC791\uC5C5 \uACF5\uAC04\uC5D0 \uCD94\uAC00\uD558\uC138\uC694."
9711
+ },
9712
+ shareCommunity: {
9713
+ title: "\uCEE4\uBBA4\uB2C8\uD2F0 \uACF5\uC720 | Nolo.Chat\uC73C\uB85C \uC644\uC131\uB41C \uC2E4\uC81C \uC791\uC5C5 \uC0AC\uB840",
9714
+ description: "Nolo \uCEE4\uBBA4\uB2C8\uD2F0\uC5D0\uC11C \uACF5\uAC1C \uACF5\uC720\uD55C \uB300\uD654, \uBB38\uC11C, \uC571, \uC791\uC5C5 \uACB0\uACFC\uBB3C\uC744 \uB458\uB7EC\uBCF4\uACE0 \uC2E4\uC81C \uC5C5\uBB34\uC5D0 AI\uB97C \uD65C\uC6A9\uD558\uB294 \uBC29\uBC95\uC744 \uD655\uC778\uD558\uC138\uC694."
9715
+ },
9716
+ about: {
9717
+ title: "Nolo.Chat \uC18C\uAC1C | \uC790\uC728\uD615 \uBA40\uD2F0 \uC5D0\uC774\uC804\uD2B8 AI \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4",
9718
+ description: "Nolo.Chat\uC758 \uBBF8\uC158\uACFC \uBE44\uC804: \uB85C\uCEEC \uC6B0\uC120 \uC544\uD0A4\uD14D\uCC98, \uC790\uC728\uC801\uC778 \uBA40\uD2F0 \uC5D0\uC774\uC804\uD2B8 \uD611\uC5C5, \uC9C0\uC18D\uC801\uC778 \uC7A5\uAE30 \uAE30\uC5B5, \uB2E4\uC911 \uBAA8\uB378 \uC870\uC728\uC744 \uD1B5\uD574 \uC2E4\uC81C \uC5C5\uBB34\uB97C \uC644\uC218\uD558\uB294 AI \uD300\uC744 \uAD6C\uCD95\uD569\uB2C8\uB2E4."
9719
+ },
9720
+ contact: {
9721
+ title: "\uBB38\uC758\uD558\uAE30 | Nolo.Chat \uACF5\uC2DD \uC9C0\uC6D0 \uBC0F \uCEE4\uBBA4\uB2C8\uD2F0",
9722
+ description: "Nolo.Chat \uAE30\uC220 \uC9C0\uC6D0, \uC81C\uD734, \uD53C\uB4DC\uBC31 \uBC0F \uCEE4\uBBA4\uB2C8\uD2F0 \uCC44\uB110 \uC548\uB0B4. \uC774\uBA54\uC77C \uBC0F \uACF5\uC2DD \uCC44\uB110\uC744 \uD1B5\uD574 \uC5B8\uC81C\uB4E0\uC9C0 \uBB38\uC758\uD574 \uC8FC\uC138\uC694."
9898
9723
  }
9899
9724
  }
9900
9725
  };
@@ -10720,278 +10545,818 @@ Pro unlocks at ${ADVANCED_FEATURE_MIN_BALANCE} points. No subscription lock-in.`
10720
10545
  }
10721
10546
  };
10722
10547
 
10723
- // packages/app/i18n/translations/privacy.locale.ts
10724
- var privacy_locale_default = {
10548
+ // packages/app/i18n/translations/recharge.locale.ts
10549
+ var recharge_locale_default = {
10550
+ ["en" /* EN */]: {
10551
+ translation: {
10552
+ recharge: {
10553
+ title: "Recharge",
10554
+ viewPricing: "View pricing",
10555
+ channel: { online: "Online payment", transfer: "QR transfer" },
10556
+ loading: "Loading available payment methods...",
10557
+ noOnlineChannel: "No online payment method is available right now. Please pay by WeChat / Alipay QR transfer.",
10558
+ amountLabel: "Amount",
10559
+ credits: "{{count}} Points",
10560
+ custom: "Custom",
10561
+ recommended: "Popular",
10562
+ customPlaceholder: "Enter a whole number between {{min}} and {{max}} points",
10563
+ rateHint: "{{min}}-{{max}} points per order (whole numbers). The larger the top-up, the lower the price per point.",
10564
+ neverExpire: "Points never expire.",
10565
+ unlockPro: "{{n}} more points unlocks Pro \u2014 real-time web search and batch file analysis.",
10566
+ bestValue: "Best value",
10567
+ customAmountHint: "This order costs about {{price}}.",
10568
+ waffoTrust: "Payments are processed by Waffo Pancake under PCI-DSS. Points are credited automatically once the payment is confirmed.",
10569
+ methodLabel: "Payment method",
10570
+ methods: {
10571
+ waffo: { name: "Global payment", desc: "Visa / MasterCard / Apple Pay" },
10572
+ wechat: { name: "WeChat Pay", desc: "QR transfer" },
10573
+ alipay: { name: "Alipay", desc: "QR transfer" },
10574
+ cryptoDesc: "{{network}} network"
10575
+ },
10576
+ submit: {
10577
+ pay: "Pay now",
10578
+ paying: "Creating order...",
10579
+ getAddress: "Get my {{token}} deposit address",
10580
+ gettingAddress: "Loading..."
10581
+ },
10582
+ account: "Points go to your current account ({{username}})",
10583
+ accountWithBalance: "Points go to your current account ({{username}}) \xB7 balance {{balance}} points",
10584
+ notLoggedIn: "not signed in",
10585
+ cryptoHint: "Official {{token}} on {{network}} only. Points are converted from the amount actually received: 1 {{token}} = {{rate}} points, minimum {{min}} points for automatic crediting{{confirmations}}. The address is bound to your account and can be reused.",
10586
+ cryptoConfirmations: ", credited after {{count}} on-chain confirmations",
10587
+ addressLabel: "{{network}} {{token}} deposit address",
10588
+ copyAddress: "Copy address",
10589
+ transferRate: "CNY 1 = 1 point. Transfer any amount \u2014 the same number of points will be credited.",
10590
+ noticePrefix: "Please put your username in the transfer note:",
10591
+ noticeWarning: "This channel is credited manually. The note is the only proof of who paid \u2014 without it we cannot match your transfer.",
10592
+ qrTip: "Open {{name}} and scan the code to pay",
10593
+ qrLoading: "Loading securely...",
10594
+ qrAlt: "{{name}} payment QR code",
10595
+ returnMessage: {
10596
+ success: "Payment submitted. Points are credited automatically once the callback is confirmed.",
10597
+ failed: "Payment was not completed. Please try again.",
10598
+ cancel: "This payment was cancelled."
10599
+ },
10600
+ errors: {
10601
+ invalidAmount: "Enter a whole number between {{min}} and {{max}} points",
10602
+ loginRequired: "Please sign in before recharging",
10603
+ serverUnavailable: "The server is unavailable. Please try again later.",
10604
+ createOrder: "Failed to create the payment order",
10605
+ createAddress: "Failed to get the {{token}} address"
10606
+ },
10607
+ notesTitle: "Notes",
10608
+ notes: [
10609
+ `Points are billed by actual token usage and never expire. A balance of ${ADVANCED_FEATURE_MIN_BALANCE} points unlocks Pro (real-time web search, batch file analysis, and more).`,
10610
+ `A single recharge of ${GPT_PRO_REQUIRED_RECHARGE_AMOUNT} points or more unlocks Advanced (GPT Pro, Claude Opus, and similar models). Every payment channel counts.`,
10611
+ "Online payments are credited automatically after the provider confirms the callback. WeChat / Alipay transfers are credited manually, usually within 1-30 minutes, and may be delayed on holidays.",
10612
+ "Self-purchased points that are 100% unused can be fully refunded within 7 days. For refunds and other questions, contact {{email}}."
10613
+ ]
10614
+ }
10615
+ }
10616
+ },
10617
+ ["zh-CN" /* ZH_CN */]: {
10618
+ translation: {
10619
+ recharge: {
10620
+ title: "\u5145\u503C",
10621
+ viewPricing: "\u67E5\u770B\u4EF7\u683C",
10622
+ channel: { online: "\u5728\u7EBF\u652F\u4ED8", transfer: "\u626B\u7801\u8F6C\u8D26" },
10623
+ loading: "\u6B63\u5728\u52A0\u8F7D\u53EF\u7528\u7684\u652F\u4ED8\u65B9\u5F0F...",
10624
+ noOnlineChannel: "\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u7684\u5728\u7EBF\u652F\u4ED8\u65B9\u5F0F\uFF0C\u8BF7\u4F7F\u7528\u5FAE\u4FE1 / \u652F\u4ED8\u5B9D\u626B\u7801\u8F6C\u8D26\u3002",
10625
+ amountLabel: "\u5145\u503C\u989D\u5EA6",
10626
+ credits: "{{count}} \u79EF\u5206",
10627
+ custom: "\u81EA\u5B9A\u4E49",
10628
+ recommended: "\u63A8\u8350",
10629
+ customPlaceholder: "\u8BF7\u8F93\u5165 {{min}}-{{max}} \u4E4B\u95F4\u7684\u6574\u6570\u79EF\u5206",
10630
+ rateHint: "\u5355\u7B14 {{min}}-{{max}} \u79EF\u5206\uFF08\u6574\u6570\uFF09\u3002\u5145\u5F97\u8D8A\u591A\uFF0C\u6BCF\u79EF\u5206\u5355\u4EF7\u8D8A\u4F4E\u3002",
10631
+ neverExpire: "\u79EF\u5206\u6C38\u4E45\u6709\u6548\uFF0C\u4E0D\u8BBE\u6709\u6548\u671F\u3002",
10632
+ unlockPro: "\u518D\u5145 {{n}} \u79EF\u5206\u5373\u53EF\u89E3\u9501\u4E13\u4E1A\u7248\uFF1A\u5B9E\u65F6\u8054\u7F51\u641C\u7D22\u3001\u6279\u91CF\u6587\u4EF6\u5206\u6790\u3002",
10633
+ bestValue: "\u6700\u5212\u7B97",
10634
+ customAmountHint: "\u672C\u6B21\u7EA6\u9700 {{price}}\u3002",
10635
+ waffoTrust: "\u652F\u4ED8\u7531 Waffo Pancake \u5904\u7406\u5E76\u7B26\u5408 PCI-DSS \u56FD\u9645\u5B89\u5168\u6807\u51C6\uFF0C\u56DE\u8C03\u786E\u8BA4\u540E\u79EF\u5206\u81EA\u52A8\u5230\u8D26\u3002",
10636
+ methodLabel: "\u652F\u4ED8\u65B9\u5F0F",
10637
+ methods: {
10638
+ waffo: { name: "\u5168\u7403\u652F\u4ED8", desc: "Visa / MasterCard / Apple Pay" },
10639
+ wechat: { name: "\u5FAE\u4FE1\u652F\u4ED8", desc: "\u626B\u7801\u8F6C\u8D26" },
10640
+ alipay: { name: "\u652F\u4ED8\u5B9D", desc: "\u626B\u7801\u8F6C\u8D26" },
10641
+ cryptoDesc: "{{network}} \u7F51\u7EDC"
10642
+ },
10643
+ submit: {
10644
+ pay: "\u53BB\u652F\u4ED8",
10645
+ paying: "\u521B\u5EFA\u8BA2\u5355\u4E2D...",
10646
+ getAddress: "\u83B7\u53D6\u6211\u7684 {{token}} \u5145\u503C\u5730\u5740",
10647
+ gettingAddress: "\u83B7\u53D6\u4E2D..."
10648
+ },
10649
+ account: "\u79EF\u5206\u5C06\u5145\u5165\u5F53\u524D\u5E10\u6237\uFF08{{username}}\uFF09",
10650
+ accountWithBalance: "\u79EF\u5206\u5C06\u5145\u5165\u5F53\u524D\u5E10\u6237\uFF08{{username}}\uFF09\uFF0C\u5F53\u524D\u4F59\u989D {{balance}} \u79EF\u5206",
10651
+ notLoggedIn: "\u672A\u767B\u5F55",
10652
+ cryptoHint: "\u53EA\u652F\u6301 {{network}} \u7F51\u7EDC\u5B98\u65B9 {{token}}\uFF0C\u6309\u5B9E\u9645\u5230\u8D26\u91D1\u989D\u6298\u7B97\uFF1A1 {{token}} = {{rate}} \u79EF\u5206\uFF0C\u6700\u4F4E\u81EA\u52A8\u5165\u8D26 {{min}} \u79EF\u5206{{confirmations}}\u3002\u5730\u5740\u4E0E\u4F60\u7684\u8D26\u6237\u7ED1\u5B9A\uFF0C\u53EF\u91CD\u590D\u4F7F\u7528\u3002",
10653
+ cryptoConfirmations: "\uFF0C\u94FE\u4E0A {{count}} \u4E2A\u786E\u8BA4\u540E\u5165\u8D26",
10654
+ addressLabel: "{{network}} {{token}} \u6536\u6B3E\u5730\u5740",
10655
+ copyAddress: "\u590D\u5236\u5730\u5740",
10656
+ transferRate: "\u4EBA\u6C11\u5E01 1 \u5143 = 1 \u79EF\u5206\uFF0C\u8F6C\u591A\u5C11\u5230\u8D26\u591A\u5C11\u79EF\u5206\u3002",
10657
+ noticePrefix: "\u8F6C\u8D26\u5907\u6CE8\u8BF7\u52A1\u5FC5\u586B\u5199\u7528\u6237\u540D\uFF1A",
10658
+ noticeWarning: "\u8BE5\u6E20\u9053\u4E3A\u4EBA\u5DE5\u6838\u5BF9\u5145\u503C\uFF0C\u5907\u6CE8\u662F\u552F\u4E00\u7684\u6536\u6B3E\u4EBA\u51ED\u636E\uFF1B\u672A\u586B\u5199\u5C06\u65E0\u6CD5\u786E\u8BA4\u5145\u503C\u5F52\u5C5E",
10659
+ qrTip: "\u6253\u5F00{{name}}\u300C\u626B\u4E00\u626B\u300D\u5B8C\u6210\u652F\u4ED8",
10660
+ qrLoading: "\u5B89\u5168\u52A0\u8F7D\u4E2D...",
10661
+ qrAlt: "{{name}}\u5145\u503C\u4E8C\u7EF4\u7801",
10662
+ returnMessage: {
10663
+ success: "\u652F\u4ED8\u5DF2\u63D0\u4EA4\uFF0C\u5230\u8D26\u901A\u5E38\u4F1A\u5728\u56DE\u8C03\u786E\u8BA4\u540E\u81EA\u52A8\u5B8C\u6210\u3002",
10664
+ failed: "\u652F\u4ED8\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u65B0\u53D1\u8D77\u652F\u4ED8\u3002",
10665
+ cancel: "\u5DF2\u53D6\u6D88\u672C\u6B21\u652F\u4ED8\u3002"
10666
+ },
10667
+ errors: {
10668
+ invalidAmount: "\u8BF7\u8F93\u5165 {{min}}-{{max}} \u4E4B\u95F4\u7684\u6574\u6570\u79EF\u5206",
10669
+ loginRequired: "\u8BF7\u5148\u767B\u5F55\u540E\u518D\u5145\u503C",
10670
+ serverUnavailable: "\u5F53\u524D\u670D\u52A1\u5668\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
10671
+ createOrder: "\u521B\u5EFA\u652F\u4ED8\u8BA2\u5355\u5931\u8D25",
10672
+ createAddress: "\u521B\u5EFA {{token}} \u5730\u5740\u5931\u8D25"
10673
+ },
10674
+ notesTitle: "\u63D0\u793A",
10675
+ notes: [
10676
+ `\u79EF\u5206\u6309\u5B9E\u9645\u6D88\u8017\u7684 Token \u6263\u8D39\uFF0C\u6C38\u4E45\u6709\u6548\u3002\u4F59\u989D\u8FBE\u5230 ${ADVANCED_FEATURE_MIN_BALANCE} \u79EF\u5206\u81EA\u52A8\u89E3\u9501\u4E13\u4E1A\u7248\uFF08\u5B9E\u65F6\u8054\u7F51\u641C\u7D22\u3001\u6279\u91CF\u6587\u4EF6\u5206\u6790\u7B49\uFF09\u3002`,
10677
+ `\u5355\u7B14\u5145\u503C \u2265 ${GPT_PRO_REQUIRED_RECHARGE_AMOUNT} \u79EF\u5206\u89E3\u9501\u9AD8\u9636\u7248\uFF08GPT Pro\u3001Claude Opus \u7B49\u6A21\u578B\uFF09\uFF0C\u4EFB\u610F\u5145\u503C\u6E20\u9053\u5747\u8BA1\u5165\u3002`,
10678
+ "\u5728\u7EBF\u652F\u4ED8\u7531\u652F\u4ED8\u5E73\u53F0\u56DE\u8C03\u786E\u8BA4\u540E\u81EA\u52A8\u5230\u8D26\uFF1B\u5FAE\u4FE1 / \u652F\u4ED8\u5B9D\u4E3A\u4EBA\u5DE5\u6838\u5BF9\u5145\u503C\uFF0C\u901A\u5E38 1-30 \u5206\u949F\uFF0C\u8282\u5047\u65E5\u53EF\u80FD\u5EF6\u8FDF\u3002",
10679
+ "\u81EA\u8D39\u5145\u503C\u7684\u79EF\u5206\u5728 7 \u5929\u5185\u5B8C\u5168\u672A\u4F7F\u7528\u53EF\u7533\u8BF7\u5168\u989D\u9000\u6B3E\uFF0C\u9000\u6B3E\u53CA\u5176\u4ED6\u95EE\u9898\u8BF7\u8054\u7CFB {{email}}\u3002"
10680
+ ]
10681
+ }
10682
+ }
10683
+ },
10684
+ ["zh-Hant" /* ZH_HANT */]: {
10685
+ translation: {
10686
+ recharge: {
10687
+ title: "\u5132\u503C",
10688
+ viewPricing: "\u67E5\u770B\u50F9\u683C",
10689
+ channel: { online: "\u7DDA\u4E0A\u652F\u4ED8", transfer: "\u6383\u78BC\u8F49\u5E33" },
10690
+ loading: "\u6B63\u5728\u8F09\u5165\u53EF\u7528\u7684\u652F\u4ED8\u65B9\u5F0F...",
10691
+ noOnlineChannel: "\u76EE\u524D\u6C92\u6709\u53EF\u7528\u7684\u7DDA\u4E0A\u652F\u4ED8\u65B9\u5F0F\uFF0C\u8ACB\u4F7F\u7528\u5FAE\u4FE1 / \u652F\u4ED8\u5BF6\u6383\u78BC\u8F49\u5E33\u3002",
10692
+ amountLabel: "\u5132\u503C\u984D\u5EA6",
10693
+ credits: "{{count}} \u7A4D\u5206",
10694
+ custom: "\u81EA\u8A02",
10695
+ recommended: "\u63A8\u85A6",
10696
+ customPlaceholder: "\u8ACB\u8F38\u5165 {{min}}-{{max}} \u4E4B\u9593\u7684\u6574\u6578\u7A4D\u5206",
10697
+ rateHint: "\u55AE\u7B46 {{min}}-{{max}} \u7A4D\u5206\uFF08\u6574\u6578\uFF09\u3002\u5132\u503C\u8D8A\u591A\uFF0C\u6BCF\u7A4D\u5206\u55AE\u50F9\u8D8A\u4F4E\u3002",
10698
+ neverExpire: "\u7A4D\u5206\u6C38\u4E45\u6709\u6548\uFF0C\u4E0D\u8A2D\u6709\u6548\u671F\u9650\u3002",
10699
+ unlockPro: "\u518D\u5132\u503C {{n}} \u7A4D\u5206\u5373\u53EF\u89E3\u9396\u5C08\u696D\u7248\uFF1A\u5373\u6642\u806F\u7DB2\u641C\u5C0B\u3001\u6279\u6B21\u6A94\u6848\u5206\u6790\u3002",
10700
+ bestValue: "\u6700\u5212\u7B97",
10701
+ customAmountHint: "\u672C\u6B21\u7D04\u9700 {{price}}\u3002",
10702
+ waffoTrust: "\u652F\u4ED8\u7531 Waffo Pancake \u8655\u7406\u4E26\u7B26\u5408 PCI-DSS \u570B\u969B\u5B89\u5168\u6A19\u6E96\uFF0C\u56DE\u547C\u78BA\u8A8D\u5F8C\u7A4D\u5206\u81EA\u52D5\u5165\u5E33\u3002",
10703
+ methodLabel: "\u652F\u4ED8\u65B9\u5F0F",
10704
+ methods: {
10705
+ waffo: { name: "\u5168\u7403\u652F\u4ED8", desc: "Visa / MasterCard / Apple Pay" },
10706
+ wechat: { name: "\u5FAE\u4FE1\u652F\u4ED8", desc: "\u6383\u78BC\u8F49\u5E33" },
10707
+ alipay: { name: "\u652F\u4ED8\u5BF6", desc: "\u6383\u78BC\u8F49\u5E33" },
10708
+ cryptoDesc: "{{network}} \u7DB2\u8DEF"
10709
+ },
10710
+ submit: {
10711
+ pay: "\u524D\u5F80\u652F\u4ED8",
10712
+ paying: "\u5EFA\u7ACB\u8A02\u55AE\u4E2D...",
10713
+ getAddress: "\u53D6\u5F97\u6211\u7684 {{token}} \u5132\u503C\u5730\u5740",
10714
+ gettingAddress: "\u53D6\u5F97\u4E2D..."
10715
+ },
10716
+ account: "\u7A4D\u5206\u5C07\u5B58\u5165\u76EE\u524D\u5E33\u6236\uFF08{{username}}\uFF09",
10717
+ accountWithBalance: "\u7A4D\u5206\u5C07\u5B58\u5165\u76EE\u524D\u5E33\u6236\uFF08{{username}}\uFF09\uFF0C\u76EE\u524D\u9918\u984D {{balance}} \u7A4D\u5206",
10718
+ notLoggedIn: "\u672A\u767B\u5165",
10719
+ cryptoHint: "\u50C5\u652F\u63F4 {{network}} \u7DB2\u8DEF\u5B98\u65B9 {{token}}\uFF0C\u4F9D\u5BE6\u969B\u5230\u5E33\u91D1\u984D\u6298\u7B97\uFF1A1 {{token}} = {{rate}} \u7A4D\u5206\uFF0C\u6700\u4F4E\u81EA\u52D5\u5165\u5E33 {{min}} \u7A4D\u5206{{confirmations}}\u3002\u5730\u5740\u8207\u4F60\u7684\u5E33\u6236\u7D81\u5B9A\uFF0C\u53EF\u91CD\u8907\u4F7F\u7528\u3002",
10720
+ cryptoConfirmations: "\uFF0C\u93C8\u4E0A {{count}} \u500B\u78BA\u8A8D\u5F8C\u5165\u5E33",
10721
+ addressLabel: "{{network}} {{token}} \u6536\u6B3E\u5730\u5740",
10722
+ copyAddress: "\u8907\u88FD\u5730\u5740",
10723
+ transferRate: "\u4EBA\u6C11\u5E63 1 \u5143 = 1 \u7A4D\u5206\uFF0C\u8F49\u591A\u5C11\u5165\u5E33\u591A\u5C11\u7A4D\u5206\u3002",
10724
+ noticePrefix: "\u8F49\u5E33\u5099\u8A3B\u8ACB\u52D9\u5FC5\u586B\u5BEB\u4F7F\u7528\u8005\u540D\u7A31\uFF1A",
10725
+ noticeWarning: "\u6B64\u7BA1\u9053\u70BA\u4EBA\u5DE5\u6838\u5C0D\u5132\u503C\uFF0C\u5099\u8A3B\u662F\u552F\u4E00\u7684\u4ED8\u6B3E\u4EBA\u6191\u64DA\uFF1B\u672A\u586B\u5BEB\u5C07\u7121\u6CD5\u78BA\u8A8D\u5132\u503C\u6B78\u5C6C",
10726
+ qrTip: "\u958B\u555F{{name}}\u300C\u6383\u4E00\u6383\u300D\u5B8C\u6210\u652F\u4ED8",
10727
+ qrLoading: "\u5B89\u5168\u8F09\u5165\u4E2D...",
10728
+ qrAlt: "{{name}}\u5132\u503C QR Code",
10729
+ returnMessage: {
10730
+ success: "\u652F\u4ED8\u5DF2\u9001\u51FA\uFF0C\u5165\u5E33\u901A\u5E38\u6703\u5728\u56DE\u547C\u78BA\u8A8D\u5F8C\u81EA\u52D5\u5B8C\u6210\u3002",
10731
+ failed: "\u652F\u4ED8\u672A\u5B8C\u6210\uFF0C\u8ACB\u91CD\u65B0\u767C\u8D77\u652F\u4ED8\u3002",
10732
+ cancel: "\u5DF2\u53D6\u6D88\u672C\u6B21\u652F\u4ED8\u3002"
10733
+ },
10734
+ errors: {
10735
+ invalidAmount: "\u8ACB\u8F38\u5165 {{min}}-{{max}} \u4E4B\u9593\u7684\u6574\u6578\u7A4D\u5206",
10736
+ loginRequired: "\u8ACB\u5148\u767B\u5165\u5F8C\u518D\u5132\u503C",
10737
+ serverUnavailable: "\u76EE\u524D\u4F3A\u670D\u5668\u7121\u6CD5\u4F7F\u7528\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
10738
+ createOrder: "\u5EFA\u7ACB\u652F\u4ED8\u8A02\u55AE\u5931\u6557",
10739
+ createAddress: "\u5EFA\u7ACB {{token}} \u5730\u5740\u5931\u6557"
10740
+ },
10741
+ notesTitle: "\u63D0\u793A",
10742
+ notes: [
10743
+ `\u7A4D\u5206\u4F9D\u5BE6\u969B\u6D88\u8017\u7684 Token \u6263\u8CBB\uFF0C\u6C38\u4E45\u6709\u6548\u3002\u9918\u984D\u9054\u5230 ${ADVANCED_FEATURE_MIN_BALANCE} \u7A4D\u5206\u81EA\u52D5\u89E3\u9396\u5C08\u696D\u7248\uFF08\u5373\u6642\u806F\u7DB2\u641C\u5C0B\u3001\u6279\u6B21\u6A94\u6848\u5206\u6790\u7B49\uFF09\u3002`,
10744
+ `\u55AE\u7B46\u5132\u503C \u2265 ${GPT_PRO_REQUIRED_RECHARGE_AMOUNT} \u7A4D\u5206\u89E3\u9396\u9AD8\u968E\u7248\uFF08GPT Pro\u3001Claude Opus \u7B49\u6A21\u578B\uFF09\uFF0C\u4EFB\u4F55\u5132\u503C\u7BA1\u9053\u5747\u8A08\u5165\u3002`,
10745
+ "\u7DDA\u4E0A\u652F\u4ED8\u7531\u652F\u4ED8\u5E73\u53F0\u56DE\u547C\u78BA\u8A8D\u5F8C\u81EA\u52D5\u5165\u5E33\uFF1B\u5FAE\u4FE1 / \u652F\u4ED8\u5BF6\u70BA\u4EBA\u5DE5\u6838\u5C0D\u5132\u503C\uFF0C\u901A\u5E38 1-30 \u5206\u9418\uFF0C\u5047\u65E5\u53EF\u80FD\u5EF6\u9072\u3002",
10746
+ "\u81EA\u8CBB\u5132\u503C\u7684\u7A4D\u5206\u5728 7 \u5929\u5167\u5B8C\u5168\u672A\u4F7F\u7528\u53EF\u7533\u8ACB\u5168\u984D\u9000\u6B3E\uFF0C\u9000\u6B3E\u53CA\u5176\u4ED6\u554F\u984C\u8ACB\u806F\u7D61 {{email}}\u3002"
10747
+ ]
10748
+ }
10749
+ }
10750
+ },
10751
+ ["ja" /* JA */]: {
10752
+ translation: {
10753
+ recharge: {
10754
+ title: "\u30C1\u30E3\u30FC\u30B8",
10755
+ viewPricing: "\u6599\u91D1\u3092\u898B\u308B",
10756
+ channel: { online: "\u30AA\u30F3\u30E9\u30A4\u30F3\u6C7A\u6E08", transfer: "QR\u9001\u91D1" },
10757
+ loading: "\u5229\u7528\u53EF\u80FD\u306A\u6C7A\u6E08\u65B9\u6CD5\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...",
10758
+ noOnlineChannel: "\u73FE\u5728\u5229\u7528\u3067\u304D\u308B\u30AA\u30F3\u30E9\u30A4\u30F3\u6C7A\u6E08\u304C\u3042\u308A\u307E\u305B\u3093\u3002WeChat / Alipay \u306EQR\u9001\u91D1\u3092\u3054\u5229\u7528\u304F\u3060\u3055\u3044\u3002",
10759
+ amountLabel: "\u30C1\u30E3\u30FC\u30B8\u984D",
10760
+ credits: "{{count}} \u30DD\u30A4\u30F3\u30C8",
10761
+ custom: "\u30AB\u30B9\u30BF\u30E0",
10762
+ recommended: "\u304A\u3059\u3059\u3081",
10763
+ customPlaceholder: "{{min}}\u301C{{max}} \u306E\u6574\u6570\u30DD\u30A4\u30F3\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
10764
+ rateHint: "1\u56DE\u3042\u305F\u308A {{min}}\u301C{{max}} \u30DD\u30A4\u30F3\u30C8\uFF08\u6574\u6570\uFF09\u3002\u91D1\u984D\u304C\u5927\u304D\u3044\u307B\u30691\u30DD\u30A4\u30F3\u30C8\u5358\u4FA1\u304C\u4E0B\u304C\u308A\u307E\u3059\u3002",
10765
+ neverExpire: "\u30DD\u30A4\u30F3\u30C8\u306B\u6709\u52B9\u671F\u9650\u306F\u3042\u308A\u307E\u305B\u3093\u3002",
10766
+ unlockPro: "\u3042\u3068 {{n}} \u30DD\u30A4\u30F3\u30C8\u3067\u30D7\u30ED\u7248\uFF08\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u691C\u7D22\u30FB\u4E00\u62EC\u30D5\u30A1\u30A4\u30EB\u5206\u6790\uFF09\u304C\u89E3\u653E\u3055\u308C\u307E\u3059\u3002",
10767
+ bestValue: "\u6700\u3082\u304A\u5F97",
10768
+ customAmountHint: "\u4ECA\u56DE\u306E\u304A\u652F\u6255\u3044\u306F\u7D04 {{price}} \u3067\u3059\u3002",
10769
+ waffoTrust: "\u6C7A\u6E08\u306F Waffo Pancake \u304C PCI-DSS \u6E96\u62E0\u3067\u51E6\u7406\u3057\u307E\u3059\u3002\u78BA\u8A8D\u5F8C\u3001\u30DD\u30A4\u30F3\u30C8\u306F\u81EA\u52D5\u7684\u306B\u53CD\u6620\u3055\u308C\u307E\u3059\u3002",
10770
+ methodLabel: "\u6C7A\u6E08\u65B9\u6CD5",
10771
+ methods: {
10772
+ waffo: { name: "\u30B0\u30ED\u30FC\u30D0\u30EB\u6C7A\u6E08", desc: "Visa / MasterCard / Apple Pay" },
10773
+ wechat: { name: "WeChat Pay", desc: "QR\u9001\u91D1" },
10774
+ alipay: { name: "Alipay", desc: "QR\u9001\u91D1" },
10775
+ cryptoDesc: "{{network}} \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF"
10776
+ },
10777
+ submit: {
10778
+ pay: "\u652F\u6255\u3044\u3078\u9032\u3080",
10779
+ paying: "\u6CE8\u6587\u3092\u4F5C\u6210\u4E2D...",
10780
+ getAddress: "{{token}} \u306E\u5165\u91D1\u30A2\u30C9\u30EC\u30B9\u3092\u53D6\u5F97",
10781
+ gettingAddress: "\u53D6\u5F97\u4E2D..."
10782
+ },
10783
+ account: "\u30DD\u30A4\u30F3\u30C8\u306F\u73FE\u5728\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\uFF08{{username}}\uFF09\u306B\u53CD\u6620\u3055\u308C\u307E\u3059",
10784
+ accountWithBalance: "\u30DD\u30A4\u30F3\u30C8\u306F\u73FE\u5728\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\uFF08{{username}}\uFF09\u306B\u53CD\u6620\u3055\u308C\u307E\u3059\u30FB\u6B8B\u9AD8 {{balance}} \u30DD\u30A4\u30F3\u30C8",
10785
+ notLoggedIn: "\u672A\u30ED\u30B0\u30A4\u30F3",
10786
+ cryptoHint: "{{network}} \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u306E\u516C\u5F0F {{token}} \u306E\u307F\u5BFE\u5FDC\u3002\u5B9F\u969B\u306E\u7740\u91D1\u984D\u304B\u3089\u63DB\u7B97\u3055\u308C\u307E\u3059\uFF1A1 {{token}} = {{rate}} \u30DD\u30A4\u30F3\u30C8\u3001\u81EA\u52D5\u53CD\u6620\u306F\u6700\u4F4E {{min}} \u30DD\u30A4\u30F3\u30C8\u304B\u3089{{confirmations}}\u3002\u30A2\u30C9\u30EC\u30B9\u306F\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u3065\u304D\u3001\u7E70\u308A\u8FD4\u3057\u5229\u7528\u3067\u304D\u307E\u3059\u3002",
10787
+ cryptoConfirmations: "\u3001\u30C1\u30A7\u30FC\u30F3\u4E0A\u3067 {{count}} \u627F\u8A8D\u5F8C\u306B\u53CD\u6620",
10788
+ addressLabel: "{{network}} {{token}} \u5165\u91D1\u30A2\u30C9\u30EC\u30B9",
10789
+ copyAddress: "\u30A2\u30C9\u30EC\u30B9\u3092\u30B3\u30D4\u30FC",
10790
+ transferRate: "\u4EBA\u6C11\u5143 1 \u5143 = 1 \u30DD\u30A4\u30F3\u30C8\u3002\u9001\u91D1\u3057\u305F\u91D1\u984D\u3068\u540C\u3058\u30DD\u30A4\u30F3\u30C8\u304C\u53CD\u6620\u3055\u308C\u307E\u3059\u3002",
10791
+ noticePrefix: "\u9001\u91D1\u30E1\u30E2\u306B\u5FC5\u305A\u30E6\u30FC\u30B6\u30FC\u540D\u3092\u8A18\u5165\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A",
10792
+ noticeWarning: "\u3053\u306E\u65B9\u6CD5\u306F\u624B\u52D5\u3067\u306E\u30C1\u30E3\u30FC\u30B8\u3067\u3059\u3002\u30E1\u30E2\u304C\u552F\u4E00\u306E\u9001\u91D1\u8005\u306E\u8A3C\u660E\u3067\u3042\u308A\u3001\u8A18\u5165\u304C\u306A\u3044\u3068\u7167\u5408\u3067\u304D\u307E\u305B\u3093",
10793
+ qrTip: "{{name}}\u3092\u958B\u304D\u3001QR\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u652F\u6255\u3046",
10794
+ qrLoading: "\u5B89\u5168\u306B\u8AAD\u307F\u8FBC\u307F\u4E2D...",
10795
+ qrAlt: "{{name}}\u306E\u30C1\u30E3\u30FC\u30B8\u7528QR\u30B3\u30FC\u30C9",
10796
+ returnMessage: {
10797
+ success: "\u652F\u6255\u3044\u3092\u9001\u4FE1\u3057\u307E\u3057\u305F\u3002\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u78BA\u8A8D\u5F8C\u3001\u81EA\u52D5\u7684\u306B\u53CD\u6620\u3055\u308C\u307E\u3059\u3002",
10798
+ failed: "\u652F\u6255\u3044\u304C\u5B8C\u4E86\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
10799
+ cancel: "\u4ECA\u56DE\u306E\u652F\u6255\u3044\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F\u3002"
10800
+ },
10801
+ errors: {
10802
+ invalidAmount: "{{min}}\u301C{{max}} \u306E\u6574\u6570\u30DD\u30A4\u30F3\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
10803
+ loginRequired: "\u30C1\u30E3\u30FC\u30B8\u306E\u524D\u306B\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044",
10804
+ serverUnavailable: "\u30B5\u30FC\u30D0\u30FC\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
10805
+ createOrder: "\u6C7A\u6E08\u6CE8\u6587\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
10806
+ createAddress: "{{token}} \u30A2\u30C9\u30EC\u30B9\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
10807
+ },
10808
+ notesTitle: "\u3054\u6848\u5185",
10809
+ notes: [
10810
+ `\u30DD\u30A4\u30F3\u30C8\u306F\u5B9F\u969B\u306B\u6D88\u8CBB\u3057\u305F\u30C8\u30FC\u30AF\u30F3\u306B\u5FDC\u3058\u3066\u8AB2\u91D1\u3055\u308C\u3001\u6709\u52B9\u671F\u9650\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u6B8B\u9AD8\u304C ${ADVANCED_FEATURE_MIN_BALANCE} \u30DD\u30A4\u30F3\u30C8\u306B\u9054\u3059\u308B\u3068\u30D7\u30ED\u7248\uFF08\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u691C\u7D22\u3001\u4E00\u62EC\u30D5\u30A1\u30A4\u30EB\u5206\u6790\u306A\u3069\uFF09\u304C\u89E3\u653E\u3055\u308C\u307E\u3059\u3002`,
10811
+ `1\u56DE\u306E\u30C1\u30E3\u30FC\u30B8\u304C ${GPT_PRO_REQUIRED_RECHARGE_AMOUNT} \u30DD\u30A4\u30F3\u30C8\u4EE5\u4E0A\u3067\u4E0A\u7D1A\u7248\uFF08GPT Pro\u3001Claude Opus \u306A\u3069\uFF09\u304C\u89E3\u653E\u3055\u308C\u307E\u3059\u3002\u3059\u3079\u3066\u306E\u6C7A\u6E08\u65B9\u6CD5\u304C\u5BFE\u8C61\u3067\u3059\u3002`,
10812
+ "\u30AA\u30F3\u30E9\u30A4\u30F3\u6C7A\u6E08\u306F\u6C7A\u6E08\u4E8B\u696D\u8005\u306E\u78BA\u8A8D\u5F8C\u306B\u81EA\u52D5\u53CD\u6620\u3055\u308C\u307E\u3059\u3002WeChat / Alipay \u306F\u624B\u52D5\u5BFE\u5FDC\u3067\u3001\u901A\u5E38 1\u301C30 \u5206\u3001\u4F11\u65E5\u306F\u9045\u308C\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
10813
+ "\u81EA\u8CBB\u3067\u8CFC\u5165\u3057\u305F\u30DD\u30A4\u30F3\u30C8\u306F\u30017\u65E5\u4EE5\u5185\u304B\u3064\u672A\u4F7F\u7528\u3067\u3042\u308C\u3070\u5168\u984D\u8FD4\u91D1\u3092\u7533\u8ACB\u3067\u304D\u307E\u3059\u3002\u8FD4\u91D1\u3084\u305D\u306E\u4ED6\u306E\u304A\u554F\u3044\u5408\u308F\u305B\u306F {{email}} \u307E\u3067\u3002"
10814
+ ]
10815
+ }
10816
+ }
10817
+ }
10818
+ };
10819
+
10820
+ // packages/app/i18n/translations/privacy.locale.ts
10821
+ var privacy_locale_default = {
10822
+ ["en" /* EN */]: {
10823
+ translation: {
10824
+ privacy: {
10825
+ title: "Privacy Policy",
10826
+ lastUpdated: "Last updated: August 24, 2026",
10827
+ intro: 'Welcome to Nolo (hereinafter referred to as "we" or "our"). We take your privacy and data security very seriously. This Privacy Policy outlines how we handle and protect your personal information.',
10828
+ section1: {
10829
+ title: "1. Information We Collect",
10830
+ desc: "We collect minimal information necessary to deliver our services, including:",
10831
+ device: "Account & Profile: Email address, username, and authentication identifiers.",
10832
+ location: "Transaction Records: Point purchase amounts, order IDs, and payment status (we never collect or store sensitive payment details such as card numbers or CVV).",
10833
+ network: "Technical & Log Data: IP address, browser type, and system logs necessary for security and abuse prevention."
10834
+ },
10835
+ section2: {
10836
+ title: "2. Use of Information",
10837
+ desc: "We process your information for the following legitimate purposes:",
10838
+ core: "Providing and maintaining our digital AI computing and multi-agent workspace services.",
10839
+ map: "Processing points recharge orders and fulfilling accounting obligations.",
10840
+ analysis: "Ensuring platform stability, security, and preventing malicious activity."
10841
+ },
10842
+ section3: {
10843
+ title: "3. Information Sharing & Third Parties",
10844
+ desc: "We strictly do not sell, rent, or trade your personal information. Data is only shared in the following required contexts:",
10845
+ thirdParty: "Payment Processing: Payments are securely handled by Waffo Pancake in full compliance with PCI-DSS standards.",
10846
+ legal: "Legal Compliance: Disclosure required by law, regulation, or mandatory legal process."
10847
+ },
10848
+ section4: {
10849
+ title: "4. Data Security",
10850
+ desc: "All network traffic is encrypted via HTTPS/TLS. We implement industry-standard organizational and technical safeguards to protect your personal data."
10851
+ },
10852
+ section5: {
10853
+ title: "5. User Rights",
10854
+ desc: "You retain full rights to access, export, rectify, or request the deletion of your account and personal data at any time by contacting us."
10855
+ },
10856
+ section6: {
10857
+ title: "6. Contact Us",
10858
+ desc: "For any questions or privacy inquiries, please contact us at s@nolotus.com (Brand: Nolo)."
10859
+ }
10860
+ }
10861
+ }
10862
+ },
10863
+ ["zh-CN" /* ZH_CN */]: {
10864
+ translation: {
10865
+ privacy: {
10866
+ title: "\u9690\u79C1\u653F\u7B56 (Privacy Policy)",
10867
+ lastUpdated: "\u6700\u540E\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670824\u65E5",
10868
+ intro: "\u6B22\u8FCE\u4F7F\u7528 Nolo\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u6211\u4EEC\u201D\uFF09\u3002\u6211\u4EEC\u9AD8\u5EA6\u91CD\u89C6\u60A8\u7684\u9690\u79C1\u4E0E\u4E2A\u4EBA\u4FE1\u606F\u5B89\u5168\u3002\u672C\u9690\u79C1\u653F\u7B56\u8BF4\u660E\u6211\u4EEC\u5728\u60A8\u4F7F\u7528\u672C\u670D\u52A1\u65F6\u5982\u4F55\u5904\u7406\u4E0E\u4FDD\u62A4\u60A8\u7684\u4FE1\u606F\u3002",
10869
+ section1: {
10870
+ title: "1. \u6211\u4EEC\u6536\u96C6\u7684\u4FE1\u606F",
10871
+ desc: "\u4E3A\u4FDD\u969C\u6838\u5FC3\u529F\u80FD\u4E0E\u4EA4\u6613\u5B89\u5168\uFF0C\u6211\u4EEC\u4EC5\u6536\u96C6\u5FC5\u8981\u7684\u4FE1\u606F\uFF1A",
10872
+ device: "\u8D26\u53F7\u4FE1\u606F\uFF1A\u6CE8\u518C\u90AE\u7BB1\u3001\u7528\u6237\u540D\u53CA\u5B89\u5168\u8BA4\u8BC1\u6807\u8BC6\u3002",
10873
+ location: "\u4EA4\u6613\u4E0E\u8D26\u5355\uFF1A\u5145\u503C\u79EF\u5206\u989D\u5EA6\u3001\u8BA2\u5355\u7F16\u53F7\u53CA\u652F\u4ED8\u72B6\u6001\uFF08\u6211\u4EEC\u7EDD\u4E0D\u6536\u96C6\u6216\u5B58\u50A8\u60A8\u7684\u94F6\u884C\u5361\u5B8C\u6574\u5361\u53F7\u3001CVV \u7B49\u654F\u611F\u4FE1\u606F\uFF09\u3002",
10874
+ network: "\u7CFB\u7EDF\u65E5\u5FD7\uFF1A\u7528\u4E8E\u9632\u62A4\u7F51\u7EDC\u653B\u51FB\u4E0E\u5F02\u5E38\u98CE\u63A7\u7684\u57FA\u7840 IP \u4E0E\u8BBF\u95EE\u65E5\u5FD7\u3002"
10875
+ },
10876
+ section2: {
10877
+ title: "2. \u4FE1\u606F\u7684\u4F7F\u7528\u76EE\u7684",
10878
+ desc: "\u6211\u4EEC\u4EC5\u51FA\u4E8E\u4EE5\u4E0B\u5408\u6CD5\u5408\u89C4\u76EE\u7684\u4F7F\u7528\u4FE1\u606F\uFF1A",
10879
+ core: "\u63D0\u4F9B\u3001\u7EF4\u62A4\u5E76\u7ED3\u7B97\u57FA\u4E8E\u79EF\u5206\u7684\u6570\u5B57 AI \u8BA1\u7B97\u4E0E\u667A\u80FD\u4F53\u534F\u4F5C\u670D\u52A1\u3002",
10880
+ map: "\u5904\u7406\u79EF\u5206\u5145\u503C\u8BA2\u5355\u5E76\u5C65\u884C\u5FC5\u8981\u7684\u8D26\u5355\u5BA1\u8BA1\u4E49\u52A1\u3002",
10881
+ analysis: "\u4FDD\u969C\u670D\u52A1\u7A33\u5B9A\u4E0E\u5B89\u5168\u98CE\u63A7\uFF0C\u9632\u5FA1\u6076\u610F\u6EE5\u7528\u3002"
10882
+ },
10883
+ section3: {
10884
+ title: "3. \u4FE1\u606F\u5171\u4EAB\u4E0E\u7B2C\u4E09\u65B9\u5904\u7406\u65B9",
10885
+ desc: "\u6211\u4EEC\u575A\u51B3\u4E0D\u51FA\u552E\u3001\u51FA\u79DF\u6216\u6CC4\u9732\u60A8\u7684\u4E2A\u4EBA\u4FE1\u606F\u3002\u4EC5\u5728\u4EE5\u4E0B\u5FC5\u8981\u573A\u666F\u4E0B\u4E0E\u53D7\u4FE1\u4EFB\u5408\u4F5C\u65B9\u5171\u4EAB\uFF1A",
10886
+ thirdParty: "\u652F\u4ED8\u5904\u7406\u65B9\uFF1A\u6240\u6709\u652F\u4ED8\u5747\u7531 Waffo Pancake \u5B89\u5168\u5904\u7406\uFF0C\u4E25\u683C\u7B26\u5408 PCI-DSS \u56FD\u9645\u5B89\u5168\u89C4\u8303\u3002",
10887
+ legal: "\u6CD5\u5F8B\u5408\u89C4\uFF1A\u4F9D\u6CD5\u4F9D\u89C4\u54CD\u5E94\u53F8\u6CD5\u6216\u76D1\u7BA1\u673A\u6784\u7684\u6CD5\u5B9A\u8981\u6C42\u3002"
10888
+ },
10889
+ section4: {
10890
+ title: "4. \u6570\u636E\u5B89\u5168\u4FDD\u969C",
10891
+ desc: "\u5168\u7AD9\u901A\u4FE1\u4E0E\u6570\u636E\u4F20\u8F93\u5747\u901A\u8FC7 HTTPS/TLS \u9AD8\u5F3A\u5EA6\u52A0\u5BC6\u4FDD\u62A4\uFF0C\u91C7\u53D6\u4E25\u683C\u7684\u6743\u9650\u9694\u79BB\u4E0E\u6280\u672F\u5B89\u5168\u63AA\u65BD\u9632\u6B62\u6570\u636E\u6CC4\u9732\u3002"
10892
+ },
10893
+ section5: {
10894
+ title: "5. \u60A8\u7684\u6570\u636E\u6743\u5229",
10895
+ desc: "\u60A8\u6709\u6743\u968F\u65F6\u8054\u7CFB\u6211\u4EEC\u67E5\u8BE2\u3001\u66F4\u6B63\u3001\u5BFC\u51FA\u6216\u7533\u8BF7\u5220\u9664\u60A8\u7684\u4E2A\u4EBA\u6570\u636E\u53CA\u6CE8\u9500\u8D26\u6237\u3002"
10896
+ },
10897
+ section6: {
10898
+ title: "6. \u8054\u7CFB\u6211\u4EEC",
10899
+ desc: "\u5982\u6709\u4EFB\u4F55\u7591\u95EE\u6216\u9690\u79C1\u8BC9\u6C42\uFF0C\u8BF7\u8054\u7CFB\u6211\u4EEC\uFF08\u90AE\u7BB1\uFF1As@nolotus.com\uFF0C\u54C1\u724C\uFF1ANolo\uFF09\u3002"
10900
+ }
10901
+ }
10902
+ }
10903
+ },
10904
+ ["zh-Hant" /* ZH_HANT */]: {
10905
+ translation: {
10906
+ privacy: {
10907
+ title: "\u96B1\u79C1\u6B0A\u653F\u7B56 (Privacy Policy)",
10908
+ lastUpdated: "\u6700\u5F8C\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670824\u65E5",
10909
+ intro: "\u6B61\u8FCE\u4F7F\u7528 Nolo\uFF08\u4EE5\u4E0B\u7C21\u7A31\u201C\u6211\u5011\u201D\uFF09\u3002\u6211\u5011\u9AD8\u5EA6\u91CD\u8996\u60A8\u7684\u96B1\u79C1\u8207\u500B\u4EBA\u8CC7\u8A0A\u5B89\u5168\u3002\u672C\u96B1\u79C1\u6B0A\u653F\u7B56\u8AAA\u660E\u6211\u5011\u5728\u60A8\u4F7F\u7528\u672C\u670D\u52D9\u6642\u5982\u4F55\u8655\u7406\u8207\u4FDD\u8B77\u60A8\u7684\u8CC7\u8A0A\u3002",
10910
+ section1: {
10911
+ title: "1. \u6211\u5011\u6536\u96C6\u7684\u8CC7\u8A0A",
10912
+ desc: "\u70BA\u4FDD\u969C\u6838\u5FC3\u529F\u80FD\u8207\u4EA4\u6613\u5B89\u5168\uFF0C\u6211\u5011\u50C5\u6536\u96C6\u5FC5\u8981\u7684\u8CC7\u8A0A\uFF1A",
10913
+ device: "\u5E33\u865F\u8CC7\u8A0A\uFF1A\u8A3B\u518A\u4FE1\u7BB1\u3001\u4F7F\u7528\u8005\u540D\u7A31\u53CA\u5B89\u5168\u8A8D\u8B49\u6A19\u8B58\u3002",
10914
+ location: "\u4EA4\u6613\u8207\u5E33\u55AE\uFF1A\u5145\u503C\u7A4D\u5206\u984D\u5EA6\u3001\u8A02\u55AE\u7DE8\u865F\u53CA\u652F\u4ED8\u72C0\u614B\uFF08\u6211\u5011\u7D55\u4E0D\u6536\u96C6\u6216\u5132\u5B58\u60A8\u7684\u4FE1\u7528\u5361\u5B8C\u6574\u5361\u865F\u3001CVV \u7B49\u654F\u611F\u8CC7\u8A0A\uFF09\u3002",
10915
+ network: "\u7CFB\u7D71\u65E5\u8A8C\uFF1A\u7528\u65BC\u9632\u8B77\u7DB2\u8DEF\u653B\u64CA\u8207\u7570\u5E38\u98A8\u63A7\u7684\u57FA\u790E IP \u8207\u5B58\u53D6\u65E5\u8A8C\u3002"
10916
+ },
10917
+ section2: {
10918
+ title: "2. \u8CC7\u8A0A\u7684\u4F7F\u7528\u76EE\u7684",
10919
+ desc: "\u6211\u5011\u50C5\u51FA\u65BC\u4EE5\u4E0B\u5408\u6CD5\u5408\u898F\u76EE\u7684\u4F7F\u7528\u8CC7\u8A0A\uFF1A",
10920
+ core: "\u63D0\u4F9B\u3001\u7DAD\u8B77\u4E26\u7D50\u7B97\u57FA\u65BC\u7A4D\u5206\u7684\u6578\u4F4D AI \u8A08\u7B97\u8207\u667A\u80FD\u9AD4\u5354\u4F5C\u670D\u52D9\u3002",
10921
+ map: "\u8655\u7406\u7A4D\u5206\u5145\u503C\u8A02\u55AE\u4E26\u5C65\u884C\u5FC5\u8981\u7684\u5E33\u55AE\u5BE9\u8A08\u7FA9\u52D9\u3002",
10922
+ analysis: "\u4FDD\u969C\u670D\u52D9\u7A69\u5B9A\u8207\u5B89\u5168\u98A8\u63A7\uFF0C\u9632\u79A6\u60E1\u610F\u6FEB\u7528\u3002"
10923
+ },
10924
+ section3: {
10925
+ title: "3. \u8CC7\u8A0A\u5171\u4EAB\u8207\u7B2C\u4E09\u65B9\u8655\u7406\u65B9",
10926
+ desc: "\u6211\u5011\u5805\u6C7A\u4E0D\u51FA\u552E\u3001\u51FA\u79DF\u6216\u6D29\u6F0F\u60A8\u7684\u500B\u4EBA\u8CC7\u8A0A\u3002\u50C5\u5728\u4EE5\u4E0B\u5FC5\u8981\u5834\u666F\u4E0B\u8207\u53D7\u4FE1\u4EFB\u5408\u4F5C\u65B9\u5171\u4EAB\uFF1A",
10927
+ thirdParty: "\u652F\u4ED8\u8655\u7406\u65B9\uFF1A\u6240\u6709\u652F\u4ED8\u5747\u7531 Waffo Pancake \u5B89\u5168\u8655\u7406\uFF0C\u56B4\u683C\u7B26\u5408 PCI-DSS \u570B\u969B\u5B89\u5168\u898F\u7BC4\u3002",
10928
+ legal: "\u6CD5\u5F8B\u5408\u898F\uFF1A\u4F9D\u6CD5\u4F9D\u898F\u56DE\u61C9\u53F8\u6CD5\u6216\u76E3\u7BA1\u6A5F\u69CB\u7684\u6CD5\u5B9A\u8981\u6C42\u3002"
10929
+ },
10930
+ section4: {
10931
+ title: "4. \u8CC7\u6599\u5B89\u5168\u4FDD\u969C",
10932
+ desc: "\u5168\u7AD9\u901A\u8A0A\u8207\u8CC7\u6599\u50B3\u8F38\u5747\u900F\u904E HTTPS/TLS \u9AD8\u5F37\u5EA6\u52A0\u5BC6\u4FDD\u8B77\uFF0C\u63A1\u53D6\u56B4\u683C\u7684\u6B0A\u9650\u9694\u96E2\u8207\u6280\u8853\u5B89\u5168\u63AA\u65BD\u9632\u6B62\u8CC7\u6599\u5916\u6D29\u3002"
10933
+ },
10934
+ section5: {
10935
+ title: "5. \u60A8\u7684\u8CC7\u6599\u6B0A\u5229",
10936
+ desc: "\u60A8\u6709\u6B0A\u96A8\u6642\u806F\u7D61\u6211\u5011\u67E5\u8A62\u3001\u66F4\u6B63\u3001\u532F\u51FA\u6216\u7533\u8ACB\u522A\u9664\u60A8\u7684\u500B\u4EBA\u8CC7\u6599\u53CA\u8A3B\u92B7\u5E33\u865F\u3002"
10937
+ },
10938
+ section6: {
10939
+ title: "6. \u806F\u7D61\u6211\u5011",
10940
+ desc: "\u5982\u6709\u4EFB\u4F55\u7591\u554F\u6216\u96B1\u79C1\u8A34\u6C42\uFF0C\u8ACB\u806F\u7D61\u6211\u5011\uFF08\u4FE1\u7BB1\uFF1As@nolotus.com\uFF0C\u54C1\u724C\uFF1ANolo\uFF09\u3002"
10941
+ }
10942
+ }
10943
+ }
10944
+ },
10945
+ ["ja" /* JA */]: {
10946
+ translation: {
10947
+ privacy: {
10948
+ title: "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC",
10949
+ lastUpdated: "\u6700\u7D42\u66F4\u65B0\u65E5\uFF1A2026\u5E748\u670824\u65E5",
10950
+ intro: "Nolo\uFF08\u4EE5\u4E0B\u300C\u5F53\u793E\u300D\uFF09\u306F\u304A\u5BA2\u69D8\u306E\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u3092\u5C0A\u91CD\u3057\u3001\u500B\u4EBA\u60C5\u5831\u306E\u4FDD\u8B77\u306B\u52AA\u3081\u307E\u3059\u3002",
10951
+ section1: {
10952
+ title: "1. \u53CE\u96C6\u3059\u308B\u60C5\u5831",
10953
+ desc: "\u30B5\u30FC\u30D3\u30B9\u63D0\u4F9B\u306B\u5FC5\u8981\u306A\u6700\u5C0F\u9650\u306E\u60C5\u5831\u3092\u53CE\u96C6\u3057\u307E\u3059\uFF1A",
10954
+ device: "\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\uFF1A\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3001\u30E6\u30FC\u30B6\u30FC\u540D",
10955
+ location: "\u53D6\u5F15\u8A18\u9332\uFF1A\u30DD\u30A4\u30F3\u30C8\u8CFC\u5165\u5C65\u6B74\u3001\u6CE8\u6587\u756A\u53F7\uFF08\u30AB\u30FC\u30C9\u756A\u53F7\u3084\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30B3\u30FC\u30C9\u306F\u4FDD\u6301\u3057\u307E\u305B\u3093\uFF09",
10956
+ network: "\u30A2\u30AF\u30BB\u30B9\u30ED\u30B0\uFF1AIP\u30A2\u30C9\u30EC\u30B9\u304A\u3088\u3073\u30B7\u30B9\u30C6\u30E0\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30ED\u30B0"
10957
+ },
10958
+ section2: {
10959
+ title: "2. \u60C5\u5831\u306E\u5229\u7528\u76EE\u7684",
10960
+ desc: "AI\u8A08\u7B97\u30B5\u30FC\u30D3\u30B9\u306E\u63D0\u4F9B\u3001\u30DD\u30A4\u30F3\u30C8\u6C7A\u6E08\u3001\u304A\u3088\u3073\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u7BA1\u7406\u306E\u305F\u3081\u306B\u5229\u7528\u3057\u307E\u3059\u3002",
10961
+ core: "\u30B3\u30A2\u30B5\u30FC\u30D3\u30B9\u306E\u63D0\u4F9B",
10962
+ map: "\u53D6\u5F15\u51E6\u7406\u304A\u3088\u3073\u8ACB\u6C42",
10963
+ analysis: "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u304A\u3088\u3073\u4E0D\u6B63\u9632\u6B62"
10964
+ },
10965
+ section3: {
10966
+ title: "3. \u7B2C\u4E09\u8005\u3078\u306E\u958B\u793A\u3068\u63D0\u4F9B",
10967
+ desc: "\u500B\u4EBA\u60C5\u5831\u3092\u8CA9\u58F2\u3059\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u6C7A\u6E08\u306F PCI-DSS \u306B\u6E96\u62E0\u3057\u305F Waffo Pancake \u306B\u3088\u308A\u5B89\u5168\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002",
10968
+ thirdParty: "\u6C7A\u6E08\u51E6\u7406\uFF1AWaffo Pancake",
10969
+ legal: "\u6CD5\u4EE4\u306B\u57FA\u3065\u304F\u958B\u793A"
10970
+ },
10971
+ section4: {
10972
+ title: "4. \u30C7\u30FC\u30BF\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
10973
+ desc: "\u3059\u3079\u3066\u306E\u901A\u4FE1\u306F HTTPS/TLS \u306B\u3088\u308A\u6697\u53F7\u5316\u3055\u308C\u3066\u3044\u307E\u3059\u3002"
10974
+ },
10975
+ section5: {
10976
+ title: "5. \u304A\u5BA2\u69D8\u306E\u6A29\u5229",
10977
+ desc: "\u30C7\u30FC\u30BF\u306E\u958B\u793A\u3001\u8A02\u6B63\u3001\u524A\u9664\u3092\u3044\u3064\u3067\u3082\u8ACB\u6C42\u3067\u304D\u307E\u3059\u3002"
10978
+ },
10979
+ section6: {
10980
+ title: "6. \u304A\u554F\u3044\u5408\u308F\u305B",
10981
+ desc: "\u30D6\u30E9\u30F3\u30C9\uFF1ANolo / \u30E1\u30FC\u30EB\uFF1As@nolotus.com"
10982
+ }
10983
+ }
10984
+ }
10985
+ }
10986
+ };
10987
+
10988
+ // packages/app/i18n/translations/terms.locale.ts
10989
+ var terms_locale_default = {
10725
10990
  ["en" /* EN */]: {
10726
10991
  translation: {
10727
- privacy: {
10728
- title: "Privacy Policy",
10729
- lastUpdated: "Last updated: May 30, 2026",
10730
- intro: 'Welcome to Nolo (hereinafter referred to as "the App"). We take your privacy very seriously. This Privacy Policy is intended to explain how we collect, use, and protect your personal information.',
10992
+ terms: {
10993
+ title: "Terms of Service",
10994
+ lastUpdated: "Last updated: August 27, 2026",
10995
+ intro: 'Welcome to Nolo (hereinafter referred to as "we" or "our"). By accessing, registering, or purchasing points/credits on our platform, you agree to be bound by these Terms of Service.',
10731
10996
  section1: {
10732
- title: "1. Information We Collect",
10733
- desc: "To provide you with better services, the App may collect the following types of information:",
10734
- device: "Device Information: Such as device model, OS version, and unique identifiers to optimize performance and resolve crashes.",
10735
- location: "Location Information: Since the App integrates map services, we may collect your geographic location with your consent when using related features.",
10736
- network: "Network Information: The App requires internet access to provide online features, generating standard network log data."
10997
+ title: "1. Service & Billing (Pay-As-You-Go Points Model)",
10998
+ desc: "Nolo provides digital AI computing and multi-agent collaboration workspace services based on a Points/Credits system. Points are deducted instantly based on actual Token consumption when computing tasks are performed. Each recharge is a one-time purchase with no recurring or automatic subscription charges. Recharged points never expire."
10737
10999
  },
10738
11000
  section2: {
10739
- title: "2. Use of Information",
10740
- desc: "The information we collect is mainly used for the following purposes:",
10741
- core: "To provide, maintain, and improve the core features of the App.",
10742
- map: "To provide map display and location services triggered by you.",
10743
- analysis: "To analyze app usage and improve user experience."
11001
+ title: "2. Payment Processing (Waffo Pancake)",
11002
+ desc: "Payments for our services are processed securely by Waffo Pancake. All transactions comply with PCI-DSS standards. We do not collect, process, or store your sensitive payment information such as full credit card numbers or CVV codes."
10744
11003
  },
10745
11004
  section3: {
10746
- title: "3. Information Sharing and Disclosure",
10747
- desc: "We will not sell your personal information to any third party. We only share information in the following situations:",
10748
- thirdParty: "Third-party Service Providers: The App uses third-party map SDKs, which may collect and process relevant data according to their own privacy policies.",
10749
- legal: "Legal Requirements: We may disclose your information when required by law or to comply with mandatory requests from authorities."
11005
+ title: "3. Refund and Points Policy",
11006
+ desc: "Due to the instant delivery nature of digital computing resources, points that have already been consumed for computations are non-refundable. For paid recharge packages, a full refund can be requested within 7 days of purchase provided that 100% of the points remain unused. Promotional, trial, activity-granted, or invite-reward points are strictly non-refundable and cannot be converted to cash. In cases of system errors or duplicate billing, full refunds will be issued. Please submit refund requests to s@nolotus.com."
10750
11007
  },
10751
11008
  section4: {
10752
- title: "4. Data Security",
10753
- desc: "We employ reasonable technical and administrative measures to protect your information against data breaches, loss, or unauthorized access. All network communications are encrypted."
11009
+ title: "4. Acceptable Use & Intellectual Property",
11010
+ desc: "You agree not to use the service for any unlawful activities, infringement of intellectual property, or abusive behavior. In addition, you retain ownership of your generated content to the fullest extent permitted by applicable law."
10754
11011
  },
10755
11012
  section5: {
10756
- title: "5. User Rights",
10757
- desc: "You have the right to revoke your authorization for location or other sensitive permissions in system settings at any time. This may prevent some location-based features from functioning properly, but will not affect core app functionality."
11013
+ title: "5. Content Safety & Prohibited Content",
11014
+ desc: "We are committed to providing a safe and lawful service. The following categories of content may not be generated or distributed through the service: (1) pornographic or NSFW content; (2) violent or gory content; (3) hate speech; (4) child sexual abuse material (CSAM) or any content unsafe for children; (5) deepfakes or content that impersonates others; and (6) content that infringes copyright or trademarks. User input prompts are screened by our content-safety review (automated filtering and/or manual review) before generation, and prohibited content will be removed. Violations may result in a warning, restriction of features, or termination of service, and points used for prohibited content will not be refunded. To report prohibited content, please contact s@nolotus.com."
10758
11015
  },
10759
11016
  section6: {
10760
- title: "6. Contact Us",
10761
- desc: "If you have any questions or suggestions regarding this Privacy Policy, please contact us at support@nolo.chat."
11017
+ title: "6. Disclaimer & Limitation of Liability",
11018
+ desc: 'The service is provided on an "as is" and "as available" basis, without warranties of any kind, whether express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, and uninterrupted or error-free service. To the fullest extent permitted by law, we shall not be liable for any indirect, incidental, special, or consequential damages, including loss of profits or data. Our total liability arising out of or related to these Terms shall not exceed the amounts you have actually paid for the service in the 12 months preceding the claim.'
11019
+ },
11020
+ section7: {
11021
+ title: "7. User Breach & Account Disposal",
11022
+ desc: "If you breach these Terms, misuse the service, or engage in unlawful activities, we may take enforcement actions against your account. Such actions are applied in a graduated manner: a warning, restriction of features, and suspension or termination of your account. Upon termination, your access to the account will end, any unused points will be handled in accordance with the refund policy in Section 3, and content obtained through the breach will be removed. You may appeal any enforcement action by contacting s@nolotus.com."
11023
+ },
11024
+ section8: {
11025
+ title: "8. Contact & Operator",
11026
+ desc: "If you have any questions or feedback regarding these Terms, please contact us at s@nolotus.com (Brand: Nolo)."
10762
11027
  }
10763
11028
  }
10764
11029
  }
10765
11030
  },
10766
11031
  ["zh-CN" /* ZH_CN */]: {
10767
11032
  translation: {
10768
- privacy: {
10769
- title: "\u9690\u79C1\u653F\u7B56 (Privacy Policy)",
10770
- lastUpdated: "\u6700\u540E\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E745\u670830\u65E5",
10771
- intro: "\u6B22\u8FCE\u60A8\u4F7F\u7528 Nolo\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u672C\u5E94\u7528\u201D\uFF09\u3002\u6211\u4EEC\u975E\u5E38\u91CD\u89C6\u60A8\u7684\u9690\u79C1\u4FDD\u62A4\u3002\u672C\u9690\u79C1\u653F\u7B56\u65E8\u5728\u5411\u60A8\u8BF4\u660E\u672C\u5E94\u7528\u5982\u4F55\u6536\u96C6\u3001\u4F7F\u7528\u548C\u4FDD\u62A4\u60A8\u7684\u4E2A\u4EBA\u4FE1\u606F\u3002",
11033
+ terms: {
11034
+ title: "\u670D\u52A1\u6761\u6B3E",
11035
+ lastUpdated: "\u6700\u540E\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670827\u65E5",
11036
+ intro: "\u6B22\u8FCE\u4F7F\u7528 Nolo \u63D0\u4F9B\u7684\u670D\u52A1\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u672C\u670D\u52A1\u201D\uFF09\u3002\u8BBF\u95EE\u3001\u6CE8\u518C\u6216\u8D2D\u4E70\u672C\u670D\u52A1\u79EF\u5206\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u53D7\u672C\u670D\u52A1\u6761\u6B3E\u7684\u7EA6\u675F\u3002",
10772
11037
  section1: {
10773
- title: "1. \u6211\u4EEC\u6536\u96C6\u7684\u4FE1\u606F",
10774
- desc: "\u4E3A\u4E86\u5411\u60A8\u63D0\u4F9B\u66F4\u597D\u7684\u670D\u52A1\uFF0C\u672C\u5E94\u7528\u53EF\u80FD\u4F1A\u6536\u96C6\u4EE5\u4E0B\u7C7B\u578B\u7684\u4FE1\u606F\uFF1A",
10775
- device: "\u8BBE\u5907\u4FE1\u606F\uFF1A\u5982\u8BBE\u5907\u578B\u53F7\u3001\u64CD\u4F5C\u7CFB\u7EDF\u7248\u672C\u3001\u552F\u4E00\u8BBE\u5907\u6807\u8BC6\u7B26\u7B49\uFF0C\u7528\u4E8E\u4F18\u5316\u5E94\u7528\u6027\u80FD\u548C\u89E3\u51B3\u5D29\u6E83\u95EE\u9898\u3002",
10776
- location: "\u4F4D\u7F6E\u4FE1\u606F\uFF1A\u7531\u4E8E\u672C\u5E94\u7528\u96C6\u6210\u4E86\u5730\u56FE\u670D\u52A1\uFF0C\u5728\u60A8\u4F7F\u7528\u76F8\u5173\u529F\u80FD\u65F6\uFF0C\u6211\u4EEC\u5728\u5F81\u5F97\u60A8\u540C\u610F\u7684\u524D\u63D0\u4E0B\u53EF\u80FD\u4F1A\u6536\u96C6\u60A8\u7684\u5730\u7406\u4F4D\u7F6E\u4FE1\u606F\u3002",
10777
- network: "\u7F51\u7EDC\u4FE1\u606F\uFF1A\u672C\u5E94\u7528\u9700\u8981\u8BBF\u95EE\u4E92\u8054\u7F51\u4EE5\u63D0\u4F9B\u5728\u7EBF\u529F\u80FD\uFF0C\u5728\u6B64\u8FC7\u7A0B\u4E2D\u4F1A\u4EA7\u751F\u6807\u51C6\u7684\u7F51\u7EDC\u65E5\u5FD7\u6570\u636E\u3002"
11038
+ title: "1. \u670D\u52A1\u4E0E\u8BA1\u8D39\u65B9\u5F0F\uFF08\u6309\u9700\u79EF\u5206\u5373\u65F6\u7ED3\u7B97\uFF09",
11039
+ desc: "\u672C\u670D\u52A1\u4E3A\u6570\u5B57\u65E0\u5F62\u8BA1\u7B97\u670D\u52A1\uFF0C\u91C7\u7528\u79EF\u5206\uFF08Credits/Points\uFF09\u5145\u503C\u4E0E\u5373\u65F6\u6263\u8D39\u6A21\u5F0F\u3002\u5F53\u60A8\u4F7F\u7528\u76F8\u5173 AI \u6216\u8BA1\u7B97\u529F\u80FD\u65F6\uFF0C\u7CFB\u7EDF\u5C06\u6839\u636E\u5B9E\u9645 Token \u7528\u91CF\u5373\u65F6\u6263\u9664\u5BF9\u5E94\u79EF\u5206\u3002\u6BCF\u6B21\u79EF\u5206\u5145\u503C\u5747\u4E3A\u4E00\u6B21\u6027\u8D2D\u4E70\uFF0C\u4E0D\u542B\u4EFB\u4F55\u81EA\u52A8\u7EED\u8D39\u6216\u5468\u671F\u6027\u5FAA\u73AF\u6263\u6B3E\uFF0C\u5145\u503C\u79EF\u5206\u6C38\u4E45\u6709\u6548\u3002"
10778
11040
  },
10779
11041
  section2: {
10780
- title: "2. \u4FE1\u606F\u7684\u4F7F\u7528",
10781
- desc: "\u6211\u4EEC\u6536\u96C6\u7684\u4FE1\u606F\u5C06\u4E3B\u8981\u7528\u4E8E\u4EE5\u4E0B\u7528\u9014\uFF1A",
10782
- core: "\u5411\u60A8\u63D0\u4F9B\u3001\u7EF4\u62A4\u548C\u6539\u8FDB\u672C\u5E94\u7528\u7684\u6838\u5FC3\u529F\u80FD\u3002",
10783
- map: "\u7528\u4E8E\u5730\u56FE\u663E\u793A\u3001\u4F4D\u7F6E\u670D\u52A1\u7B49\u60A8\u4E3B\u52A8\u89E6\u53D1\u7684\u529F\u80FD\u3002",
10784
- analysis: "\u5206\u6790\u5E94\u7528\u7684\u4F7F\u7528\u60C5\u51B5\uFF0C\u4EE5\u63D0\u5347\u7528\u6237\u4F53\u9A8C\u3002"
11042
+ title: "2. \u652F\u4ED8\u5904\u7406\u8BF4\u660E\uFF08Waffo Pancake\uFF09",
11043
+ desc: "\u672C\u670D\u52A1\u7684\u652F\u4ED8\u7531 Waffo Pancake \u63D0\u4F9B\u5B89\u5168\u5904\u7406\u652F\u6301\u3002\u6240\u6709\u4EA4\u6613\u5747\u5728\u7B26\u5408 PCI-DSS \u56FD\u9645\u5B89\u5168\u6807\u51C6\u7684\u7F51\u5173\u4E2D\u8FDB\u884C\u3002\u6211\u4EEC\u7EDD\u4E0D\u6536\u96C6\u3001\u4E0D\u5B58\u50A8\u60A8\u7684\u4EFB\u4F55\u94F6\u884C\u5361\u53F7\u3001CVV \u7B49\u654F\u611F\u652F\u4ED8\u4FE1\u606F\u3002"
10785
11044
  },
10786
11045
  section3: {
10787
- title: "3. \u4FE1\u606F\u7684\u5171\u4EAB\u4E0E\u62AB\u9732",
10788
- desc: "\u6211\u4EEC\u4E0D\u4F1A\u5C06\u60A8\u7684\u4E2A\u4EBA\u4FE1\u606F\u51FA\u552E\u7ED9\u4EFB\u4F55\u7B2C\u4E09\u65B9\u3002\u6211\u4EEC\u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u5171\u4EAB\u4FE1\u606F\uFF1A",
10789
- thirdParty: "\u7B2C\u4E09\u65B9\u670D\u52A1\u63D0\u4F9B\u5546\uFF1A\u672C\u5E94\u7528\u4F7F\u7528\u4E86\u7B2C\u4E09\u65B9\u5730\u56FE SDK\uFF0C\u8FD9\u4E9B\u7B2C\u4E09\u65B9\u53EF\u80FD\u4F1A\u6839\u636E\u5176\u81EA\u8EAB\u7684\u9690\u79C1\u653F\u7B56\u6536\u96C6\u548C\u5904\u7406\u76F8\u5173\u6570\u636E\u3002",
10790
- legal: "\u6CD5\u5F8B\u8981\u6C42\uFF1A\u5728\u6CD5\u5F8B\u6CD5\u89C4\u8981\u6C42\u3001\u6216\u8005\u4E3A\u4E86\u914D\u5408\u653F\u5E9C\u6709\u5173\u90E8\u95E8\u7684\u5F3A\u5236\u6027\u8981\u6C42\u65F6\uFF0C\u6211\u4EEC\u53EF\u80FD\u4F1A\u62AB\u9732\u60A8\u7684\u4FE1\u606F\u3002"
11046
+ title: "3. \u9000\u6B3E\u4E0E\u79EF\u5206\u653F\u7B56",
11047
+ desc: "\u9274\u4E8E\u6570\u5B57\u8BA1\u7B97\u8D44\u6E90\u7684\u5373\u65F6\u4EA4\u4ED8\u4E0E\u6D88\u8017\u7279\u6027\uFF0C\u4E00\u65E6\u79EF\u5206\u5DF2\u88AB\u7528\u4E8E\u5B9E\u9645\u8BA1\u7B97\u5E76\u6263\u9664\uFF0C\u8BE5\u90E8\u5206\u4E0D\u4E88\u9000\u6B3E\u3002\u5BF9\u4E8E\u81EA\u8D39\u8D2D\u4E70\u7684\u79EF\u5206\u5145\u503C\u5305\uFF0C\u81EA\u8D2D\u4E70\u4E4B\u65E5\u8D77 7 \u5929\u5185\u4E14\u5B8C\u5168\u672A\u4F7F\u7528\uFF08\u79EF\u5206 100% \u5B8C\u6574\uFF09\u7684\uFF0C\u53EF\u7533\u8BF7\u5168\u989D\u539F\u8DEF\u9000\u6B3E\u3002\u7CFB\u7EDF\u8D60\u9001\u79EF\u5206\u3001\u65B0\u624B\u4F53\u9A8C\u79EF\u5206\u3001\u9080\u8BF7\u5956\u52B1\u7B49\u975E\u81EA\u8D39\u83B7\u5F97\u7684\u8D60\u9001\u79EF\u5206\uFF0C\u4E0D\u652F\u6301\u9000\u6B3E\u4E14\u4E0D\u53EF\u6298\u73B0\u3002\u56E0\u7CFB\u7EDF\u6545\u969C\u5BFC\u81F4\u7684\u91CD\u590D\u6263\u6B3E\u6838\u5B9E\u540E\u5168\u989D\u9000\u6B3E\u3002\u9000\u6B3E\u7533\u8BF7\u8BF7\u53D1\u9001\u81F3 s@nolotus.com\u3002"
10791
11048
  },
10792
11049
  section4: {
10793
- title: "4. \u6570\u636E\u5B89\u5168",
10794
- desc: "\u6211\u4EEC\u91C7\u53D6\u5408\u7406\u7684\u6280\u672F\u548C\u7BA1\u7406\u63AA\u65BD\u6765\u4FDD\u62A4\u60A8\u7684\u4FE1\u606F\u5B89\u5168\uFF0C\u9632\u6B62\u6570\u636E\u6CC4\u9732\u3001\u4E22\u5931\u6216\u88AB\u672A\u7ECF\u6388\u6743\u5730\u8BBF\u95EE\u3002\u6240\u6709\u4E0E\u670D\u52A1\u5668\u7684\u7F51\u7EDC\u901A\u4FE1\u5747\u901A\u8FC7\u52A0\u5BC6\u4F20\u8F93\u3002"
11050
+ title: "4. \u5408\u89C4\u4F7F\u7528\u4E0E\u77E5\u8BC6\u4EA7\u6743",
11051
+ desc: "\u60A8\u627F\u8BFA\u4E0D\u5229\u7528\u672C\u670D\u52A1\u4ECE\u4E8B\u4EFB\u4F55\u8FDD\u6CD5\u8FDD\u89C4\u3001\u4FB5\u72AF\u7B2C\u4E09\u65B9\u6743\u76CA\u6216\u6076\u610F\u6EE5\u7528\u653B\u51FB\u884C\u4E3A\u3002\u5728\u6CD5\u5F8B\u5141\u8BB8\u8303\u56F4\u5185\uFF0C\u60A8\u4EAB\u6709\u5408\u6CD5\u4F7F\u7528\u672C\u670D\u52A1\u751F\u6210\u5185\u5BB9\u7684\u76F8\u5173\u6743\u76CA\u3002"
10795
11052
  },
10796
11053
  section5: {
10797
- title: "5. \u7528\u6237\u6743\u5229",
10798
- desc: "\u60A8\u6709\u6743\u968F\u65F6\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u4E2D\u64A4\u9500\u5BF9\u672C\u5E94\u7528\u7684\u4F4D\u7F6E\u6743\u9650\u6216\u5176\u4ED6\u654F\u611F\u6743\u9650\u7684\u6388\u6743\u3002\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4\u90E8\u5206\u57FA\u4E8E\u4F4D\u7F6E\u7684\u529F\u80FD\u65E0\u6CD5\u6B63\u5E38\u4F7F\u7528\uFF0C\u4F46\u4E0D\u4F1A\u5F71\u54CD\u5E94\u7528\u7684\u57FA\u7840\u529F\u80FD\u3002"
11054
+ title: "5. \u5185\u5BB9\u5B89\u5168\u4E0E\u7981\u6B62\u5185\u5BB9",
11055
+ desc: "\u6211\u4EEC\u81F4\u529B\u4E8E\u63D0\u4F9B\u5B89\u5168\u3001\u5408\u6CD5\u7684\u670D\u52A1\u3002\u4EE5\u4E0B\u516D\u7C7B\u5185\u5BB9\u4E0D\u5F97\u901A\u8FC7\u672C\u670D\u52A1\u751F\u6210\u6216\u4F20\u64AD\uFF1A\uFF081\uFF09\u8272\u60C5/NSFW \u5185\u5BB9\uFF1B\uFF082\uFF09\u66B4\u529B/\u8840\u8165\u5185\u5BB9\uFF1B\uFF083\uFF09\u4EC7\u6068\u8A00\u8BBA\uFF1B\uFF084\uFF09\u513F\u7AE5\u4E0D\u5B89\u5168\u5185\u5BB9\uFF08\u542B\u513F\u7AE5\u6027\u8650\u5F85\u6750\u6599 CSAM\uFF09\uFF1B\uFF085\uFF09\u6DF1\u5EA6\u4F2A\u9020\u6216\u5192\u5145\u4ED6\u4EBA\u7684\u5185\u5BB9\uFF1B\uFF086\uFF09\u4FB5\u72AF\u7248\u6743\u6216\u5546\u6807\u7684\u5185\u5BB9\u3002\u60A8\u7684\u8F93\u5165\u63D0\u793A\u8BCD\u5728\u751F\u6210\u524D\u4F1A\u7ECF\u8FC7\u5E73\u53F0\u5185\u5BB9\u5B89\u5168\u5BA1\u6838\uFF08\u81EA\u52A8\u7B5B\u67E5\u4E0E/\u6216\u4EBA\u5DE5\u590D\u6838\uFF09\uFF0C\u8FDD\u89C4\u5185\u5BB9\u5C06\u88AB\u79FB\u9664\u3002\u8FDD\u89C4\u884C\u4E3A\u53EF\u80FD\u5BFC\u81F4\u8B66\u544A\u3001\u9650\u5236\u529F\u80FD\u6216\u7EC8\u6B62\u670D\u52A1\uFF0C\u4E14\u7528\u4E8E\u8FDD\u89C4\u5185\u5BB9\u7684\u79EF\u5206\u4E0D\u4E88\u9000\u8FD8\u3002\u5982\u53D1\u73B0\u8FDD\u89C4\u5185\u5BB9\uFF0C\u8BF7\u901A\u8FC7 s@nolotus.com \u4E3E\u62A5\u3002"
10799
11056
  },
10800
11057
  section6: {
10801
- title: "6. \u8054\u7CFB\u6211\u4EEC",
10802
- desc: "\u5982\u679C\u60A8\u5BF9\u672C\u9690\u79C1\u653F\u7B56\u6709\u4EFB\u4F55\u7591\u95EE\u6216\u5EFA\u8BAE\uFF0C\u8BF7\u8054\u7CFB\u6211\u4EEC\uFF08Email: support@nolo.chat\uFF09\u3002"
11058
+ title: "6. \u514D\u8D23\u58F0\u660E\u4E0E\u8D23\u4EFB\u9650\u5236",
11059
+ desc: "\u672C\u670D\u52A1\u6309\u201C\u73B0\u72B6\u201D\u548C\u201C\u73B0\u6709\u201D\u57FA\u7840\u63D0\u4F9B\uFF0C\u4E0D\u4F5C\u4EFB\u4F55\u660E\u793A\u6216\u9ED8\u793A\u62C5\u4FDD\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u9002\u9500\u6027\u3001\u7279\u5B9A\u7528\u9014\u9002\u7528\u6027\u4EE5\u53CA\u4E0D\u95F4\u65AD\u3001\u65E0\u9519\u8BEF\u670D\u52A1\u7684\u9ED8\u793A\u62C5\u4FDD\u3002\u5728\u6CD5\u5F8B\u5141\u8BB8\u7684\u6700\u5927\u8303\u56F4\u5185\uFF0C\u6211\u4EEC\u5BF9\u4EFB\u4F55\u95F4\u63A5\u3001\u9644\u5E26\u3001\u7279\u6B8A\u6216\u540E\u679C\u6027\u635F\u5BB3\uFF08\u5305\u62EC\u5229\u6DA6\u635F\u5931\u6216\u6570\u636E\u4E22\u5931\uFF09\u4E0D\u627F\u62C5\u8D23\u4EFB\u3002\u56E0\u672C\u6761\u6B3E\u4EA7\u751F\u7684\u6211\u65B9\u5168\u90E8\u8D23\u4EFB\uFF0C\u4EE5\u60A8\u5728\u7D22\u8D54\u53D1\u751F\u524D 12 \u4E2A\u6708\u5185\u5B9E\u9645\u652F\u4ED8\u7684\u8D39\u7528\u4E3A\u9650\u3002"
11060
+ },
11061
+ section7: {
11062
+ title: "7. \u7528\u6237\u8FDD\u7EA6\u4E0E\u8D26\u53F7\u5904\u7F6E",
11063
+ desc: "\u5982\u60A8\u8FDD\u53CD\u672C\u6761\u6B3E\u3001\u6EE5\u7528\u670D\u52A1\u6216\u4ECE\u4E8B\u8FDD\u6CD5\u884C\u4E3A\uFF0C\u6211\u4EEC\u53EF\u80FD\u5BF9\u60A8\u7684\u8D26\u53F7\u91C7\u53D6\u5904\u7F6E\u63AA\u65BD\u3002\u5904\u7F6E\u6309\u9636\u68AF\u5F0F\u6267\u884C\uFF1A\u8B66\u544A\u3001\u9650\u5236\u529F\u80FD\u3001\u6682\u505C\u6216\u7EC8\u6B62\u8D26\u53F7\u3002\u8D26\u53F7\u7EC8\u6B62\u540E\uFF0C\u60A8\u7684\u8BBF\u95EE\u6743\u9650\u5C06\u7EC8\u6B62\uFF0C\u672A\u6D88\u8D39\u79EF\u5206\u6309\u7B2C 3 \u8282\u9000\u6B3E\u653F\u7B56\u5904\u7406\uFF0C\u8FDD\u89C4\u6240\u5F97\u5185\u5BB9\u5C06\u88AB\u79FB\u9664\u3002\u60A8\u53EF\u901A\u8FC7 s@nolotus.com \u5BF9\u5904\u7F6E\u63D0\u51FA\u7533\u8BC9\u3002"
11064
+ },
11065
+ section8: {
11066
+ title: "8. \u8054\u7CFB\u6211\u4EEC\u4E0E\u8FD0\u8425\u4E3B\u4F53",
11067
+ desc: "\u5982\u6709\u4EFB\u4F55\u7591\u95EE\u6216\u652F\u6301\u9700\u6C42\uFF0C\u8BF7\u901A\u8FC7\u90AE\u7BB1 s@nolotus.com \u8054\u7CFB\u6211\u4EEC\uFF08\u54C1\u724C\uFF1ANolo\uFF09\u3002"
10803
11068
  }
10804
11069
  }
10805
11070
  }
10806
11071
  },
10807
11072
  ["zh-Hant" /* ZH_HANT */]: {
10808
11073
  translation: {
10809
- privacy: {
10810
- title: "\u96B1\u79C1\u6B0A\u653F\u7B56 (Privacy Policy)",
10811
- lastUpdated: "\u6700\u5F8C\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E745\u670830\u65E5",
10812
- intro: "\u6B61\u8FCE\u60A8\u4F7F\u7528 Nolo\uFF08\u4EE5\u4E0B\u7C21\u7A31\u201C\u672C\u61C9\u7528\u201D\uFF09\u3002\u6211\u5011\u975E\u5E38\u91CD\u8996\u60A8\u7684\u96B1\u79C1\u4FDD\u8B77\u3002\u672C\u96B1\u79C1\u6B0A\u653F\u7B56\u65E8\u5728\u5411\u60A8\u8AAA\u660E\u672C\u61C9\u7528\u5982\u4F55\u6536\u96C6\u3001\u4F7F\u7528\u548C\u4FDD\u8B77\u60A8\u7684\u500B\u4EBA\u8CC7\u8A0A\u3002",
11074
+ terms: {
11075
+ title: "\u670D\u52D9\u689D\u6B3E",
11076
+ lastUpdated: "\u6700\u5F8C\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670827\u65E5",
11077
+ intro: "\u6B61\u8FCE\u4F7F\u7528 Nolo \u63D0\u4F9B\u7684\u670D\u52D9\uFF08\u4EE5\u4E0B\u7C21\u7A31\u201C\u672C\u670D\u52D9\u201D\uFF09\u3002\u9020\u8A2A\u3001\u8A3B\u518A\u6216\u8CFC\u8CB7\u672C\u670D\u52D9\u7A4D\u5206\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u53D7\u672C\u670D\u52D9\u689D\u6B3E\u7684\u7D04\u675F\u3002",
10813
11078
  section1: {
10814
- title: "1. \u6211\u5011\u6536\u96C6\u7684\u8CC7\u8A0A",
10815
- desc: "\u70BA\u4E86\u5411\u60A8\u63D0\u4F9B\u66F4\u597D\u7684\u670D\u52D9\uFF0C\u672C\u61C9\u7528\u53EF\u80FD\u6703\u6536\u96C6\u4EE5\u4E0B\u985E\u578B\u7684\u8CC7\u8A0A\uFF1A",
10816
- device: "\u8A2D\u5099\u8CC7\u8A0A\uFF1A\u5982\u8A2D\u5099\u578B\u865F\u3001\u4F5C\u696D\u7CFB\u7D71\u7248\u672C\u3001\u552F\u4E00\u8A2D\u5099\u8B58\u5225\u78BC\u7B49\uFF0C\u7528\u65BC\u512A\u5316\u61C9\u7528\u6548\u80FD\u548C\u89E3\u6C7A\u5D29\u6F70\u554F\u984C\u3002",
10817
- location: "\u4F4D\u7F6E\u8CC7\u8A0A\uFF1A\u7531\u65BC\u672C\u61C9\u7528\u6574\u5408\u4E86\u5730\u5716\u670D\u52D9\uFF0C\u5728\u60A8\u4F7F\u7528\u76F8\u95DC\u529F\u80FD\u6642\uFF0C\u6211\u5011\u5728\u5FB5\u5F97\u60A8\u540C\u610F\u7684\u524D\u63D0\u4E0B\u53EF\u80FD\u6703\u6536\u96C6\u60A8\u7684\u5730\u7406\u4F4D\u7F6E\u8CC7\u8A0A\u3002",
10818
- network: "\u7DB2\u8DEF\u8CC7\u8A0A\uFF1A\u672C\u61C9\u7528\u9700\u8981\u5B58\u53D6\u7DB2\u969B\u7DB2\u8DEF\u4EE5\u63D0\u4F9B\u7DDA\u4E0A\u529F\u80FD\uFF0C\u5728\u6B64\u904E\u7A0B\u4E2D\u6703\u7522\u751F\u6A19\u6E96\u7684\u7DB2\u8DEF\u65E5\u8A8C\u8CC7\u6599\u3002"
11079
+ title: "1. \u670D\u52D9\u8207\u8A08\u8CBB\u65B9\u5F0F\uFF08\u6309\u9700\u7A4D\u5206\u5373\u6642\u7D50\u7B97\uFF09",
11080
+ desc: "\u672C\u670D\u52D9\u70BA\u6578\u4F4D\u7121\u5F62\u8A08\u7B97\u670D\u52D9\uFF0C\u63A1\u7528\u7A4D\u5206\uFF08Credits/Points\uFF09\u5145\u503C\u8207\u5373\u6642\u6263\u8CBB\u6A21\u5F0F\u3002\u7576\u60A8\u4F7F\u7528\u76F8\u95DC AI \u6216\u8A08\u7B97\u529F\u80FD\u6642\uFF0C\u7CFB\u7D71\u5C07\u6839\u64DA\u5BE6\u969B\u7528\u91CF\u5373\u6642\u6263\u9664\u5C0D\u61C9\u7A4D\u5206\u3002\u6BCF\u6B21\u7A4D\u5206\u5145\u503C\u5747\u70BA\u4E00\u6B21\u6027\u8CFC\u8CB7\uFF0C\u4E0D\u542B\u4EFB\u4F55\u81EA\u52D5\u7E8C\u8CBB\u6216\u9031\u671F\u6027\u6263\u6B3E\uFF0C\u5145\u503C\u7A4D\u5206\u6C38\u4E45\u6709\u6548\u3002"
10819
11081
  },
10820
11082
  section2: {
10821
- title: "2. \u8CC7\u8A0A\u7684\u4F7F\u7528",
10822
- desc: "\u6211\u5011\u6536\u96C6\u7684\u8CC7\u8A0A\u5C07\u4E3B\u8981\u7528\u65BC\u4EE5\u4E0B\u7528\u9014\uFF1A",
10823
- core: "\u5411\u60A8\u63D0\u4F9B\u3001\u7DAD\u8B77\u548C\u6539\u9032\u672C\u61C9\u7528\u7684\u6838\u5FC3\u529F\u80FD\u3002",
10824
- map: "\u7528\u65BC\u5730\u5716\u986F\u793A\u3001\u4F4D\u7F6E\u670D\u52D9\u7B49\u60A8\u4E3B\u52D5\u89F8\u767C\u7684\u529F\u80FD\u3002",
10825
- analysis: "\u5206\u6790\u61C9\u7528\u7684\u4F7F\u7528\u60C5\u6CC1\uFF0C\u4EE5\u63D0\u5347\u4F7F\u7528\u8005\u9AD4\u9A57\u3002"
11083
+ title: "2. \u652F\u4ED8\u8655\u7406\u8AAA\u660E\uFF08Waffo Pancake\uFF09",
11084
+ desc: "\u672C\u670D\u52D9\u7684\u652F\u4ED8\u7531 Waffo Pancake \u63D0\u4F9B\u5B89\u5168\u8655\u7406\u652F\u63F4\u3002\u6240\u6709\u4EA4\u6613\u5747\u5728\u7B26\u5408 PCI-DSS \u570B\u969B\u5B89\u5168\u6A19\u6E96\u7684\u9598\u9053\u4E2D\u9032\u884C\u3002\u6211\u5011\u7D55\u4E0D\u6536\u96C6\u3001\u4E0D\u5132\u5B58\u60A8\u7684\u4EFB\u4F55\u4FE1\u7528\u5361\u865F\u3001CVV \u7B49\u654F\u611F\u652F\u4ED8\u8CC7\u8A0A\u3002"
10826
11085
  },
10827
11086
  section3: {
10828
- title: "3. \u8CC7\u8A0A\u7684\u5206\u4EAB\u8207\u63ED\u9732",
10829
- desc: "\u6211\u5011\u4E0D\u6703\u5C07\u60A8\u7684\u500B\u4EBA\u8CC7\u8A0A\u51FA\u552E\u7D66\u4EFB\u4F55\u7B2C\u4E09\u65B9\u3002\u6211\u5011\u50C5\u5728\u4EE5\u4E0B\u60C5\u6CC1\u5206\u4EAB\u8CC7\u8A0A\uFF1A",
10830
- thirdParty: "\u7B2C\u4E09\u65B9\u670D\u52D9\u63D0\u4F9B\u8005\uFF1A\u672C\u61C9\u7528\u4F7F\u7528\u4E86\u7B2C\u4E09\u65B9\u5730\u5716 SDK\uFF0C\u9019\u4E9B\u7B2C\u4E09\u65B9\u53EF\u80FD\u6703\u6839\u64DA\u5176\u81EA\u8EAB\u7684\u96B1\u79C1\u6B0A\u653F\u7B56\u6536\u96C6\u548C\u8655\u7406\u76F8\u95DC\u8CC7\u6599\u3002",
10831
- legal: "\u6CD5\u5F8B\u8981\u6C42\uFF1A\u5728\u6CD5\u5F8B\u6CD5\u898F\u8981\u6C42\u3001\u6216\u8005\u70BA\u4E86\u914D\u5408\u653F\u5E9C\u6709\u95DC\u90E8\u9580\u7684\u5F37\u5236\u6027\u8981\u6C42\u6642\uFF0C\u6211\u5011\u53EF\u80FD\u6703\u63ED\u9732\u60A8\u7684\u8CC7\u8A0A\u3002"
11087
+ title: "3. \u9000\u6B3E\u8207\u7A4D\u5206\u653F\u7B56",
11088
+ desc: "\u9451\u65BC\u6578\u4F4D\u8A08\u7B97\u8CC7\u6E90\u7684\u5373\u6642\u4EA4\u4ED8\u8207\u6D88\u8017\u7279\u6027\uFF0C\u4E00\u65E6\u7A4D\u5206\u5DF2\u88AB\u7528\u65BC\u5BE6\u969B\u8A08\u7B97\u4E26\u6263\u9664\uFF0C\u8A72\u90E8\u5206\u4E0D\u4E88\u9000\u6B3E\u3002\u5C0D\u65BC\u81EA\u8CBB\u8CFC\u8CB7\u7684\u7A4D\u5206\u5305\uFF0C\u81EA\u5145\u503C\u4E4B\u65E5\u8D77 7 \u5929\u5167\u4E14\u5B8C\u5168\u672A\u4F7F\u7528\uFF08\u7A4D\u5206 100% \u5B8C\u6574\uFF09\u7684\uFF0C\u53EF\u7533\u8ACB\u5168\u984D\u9000\u6B3E\u3002\u7CFB\u7D71\u8D08\u9001\u3001\u9AD4\u9A57\u53CA\u9080\u8ACB\u734E\u52F5\u7B49\u975E\u4ED8\u8CBB\u7A4D\u5206\u4E0D\u652F\u63F4\u9000\u6B3E\u4E14\u4E0D\u53EF\u6298\u73FE\u3002\u56E0\u7CFB\u7D71\u7570\u5E38\u5C0E\u81F4\u7684\u91CD\u8907\u6263\u6B3E\u6838\u5BE6\u5F8C\u5168\u984D\u9000\u6B3E\u3002\u9000\u6B3E\u8ACB\u806F\u7D61 s@nolotus.com\u3002"
10832
11089
  },
10833
11090
  section4: {
10834
- title: "4. \u8CC7\u6599\u5B89\u5168",
10835
- desc: "\u6211\u5011\u63A1\u53D6\u5408\u7406\u7684\u6280\u8853\u548C\u7BA1\u7406\u63AA\u65BD\u4F86\u4FDD\u8B77\u60A8\u7684\u8CC7\u8A0A\u5B89\u5168\uFF0C\u9632\u6B62\u8CC7\u6599\u6D29\u9732\u3001\u907A\u5931\u6216\u88AB\u672A\u7D93\u6388\u6B0A\u5730\u5B58\u53D6\u3002\u6240\u6709\u8207\u4F3A\u670D\u5668\u7684\u7DB2\u8DEF\u901A\u8A0A\u5747\u900F\u904E\u52A0\u5BC6\u50B3\u8F38\u3002"
11091
+ title: "4. \u5408\u898F\u4F7F\u7528\u8207\u667A\u6167\u8CA1\u7522\u6B0A",
11092
+ desc: "\u60A8\u627F\u8AFE\u4E0D\u5229\u7528\u672C\u670D\u52D9\u5F9E\u4E8B\u4EFB\u4F55\u9055\u6CD5\u9055\u898F\u3001\u4FB5\u5BB3\u7B2C\u4E09\u65B9\u6B0A\u76CA\u6216\u60E1\u610F\u6FEB\u7528\u884C\u70BA\u3002\u5728\u6CD5\u5F8B\u5141\u8A31\u7BC4\u570D\u5167\uFF0C\u60A8\u4EAB\u6709\u5408\u6CD5\u4F7F\u7528\u672C\u670D\u52D9\u751F\u6210\u5167\u5BB9\u7684\u76F8\u95DC\u6B0A\u76CA\u3002"
10836
11093
  },
10837
11094
  section5: {
10838
- title: "5. \u4F7F\u7528\u8005\u6B0A\u5229",
10839
- desc: "\u60A8\u6709\u6B0A\u96A8\u6642\u5728\u7CFB\u7D71\u8A2D\u5B9A\u4E2D\u64A4\u92B7\u5C0D\u672C\u61C9\u7528\u7684\u4F4D\u7F6E\u6B0A\u9650\u6216\u5176\u4ED6\u654F\u611F\u6B0A\u9650\u7684\u6388\u6B0A\u3002\u9019\u53EF\u80FD\u6703\u5C0E\u81F4\u90E8\u5206\u57FA\u65BC\u4F4D\u7F6E\u7684\u529F\u80FD\u7121\u6CD5\u6B63\u5E38\u4F7F\u7528\uFF0C\u4F46\u4E0D\u6703\u5F71\u97FF\u61C9\u7528\u7684\u57FA\u790E\u529F\u80FD\u3002"
11095
+ title: "5. \u5167\u5BB9\u5B89\u5168\u8207\u7981\u6B62\u5167\u5BB9",
11096
+ desc: "\u6211\u5011\u81F4\u529B\u65BC\u63D0\u4F9B\u5B89\u5168\u3001\u5408\u6CD5\u7684\u670D\u52D9\u3002\u4EE5\u4E0B\u516D\u985E\u5167\u5BB9\u4E0D\u5F97\u900F\u904E\u672C\u670D\u52D9\u751F\u6210\u6216\u50B3\u64AD\uFF1A\uFF081\uFF09\u8272\u60C5/NSFW \u5167\u5BB9\uFF1B\uFF082\uFF09\u66B4\u529B/\u8840\u8165\u5167\u5BB9\uFF1B\uFF083\uFF09\u4EC7\u6068\u8A00\u8AD6\uFF1B\uFF084\uFF09\u5152\u7AE5\u4E0D\u5B89\u5168\u5167\u5BB9\uFF08\u542B\u5152\u7AE5\u6027\u8650\u5F85\u6750\u6599 CSAM\uFF09\uFF1B\uFF085\uFF09\u6DF1\u5EA6\u507D\u9020\u6216\u5192\u5145\u4ED6\u4EBA\u7684\u5167\u5BB9\uFF1B\uFF086\uFF09\u4FB5\u72AF\u7248\u6B0A\u6216\u5546\u6A19\u7684\u5167\u5BB9\u3002\u60A8\u7684\u8F38\u5165\u63D0\u793A\u8A5E\u5728\u751F\u6210\u524D\u6703\u7D93\u904E\u5E73\u53F0\u5167\u5BB9\u5B89\u5168\u5BE9\u6838\uFF08\u81EA\u52D5\u7BE9\u67E5\u8207/\u6216\u4EBA\u5DE5\u8907\u6838\uFF09\uFF0C\u9055\u898F\u5167\u5BB9\u5C07\u88AB\u79FB\u9664\u3002\u9055\u898F\u884C\u70BA\u53EF\u80FD\u5C0E\u81F4\u8B66\u544A\u3001\u9650\u5236\u529F\u80FD\u6216\u7D42\u6B62\u670D\u52D9\uFF0C\u4E14\u7528\u65BC\u9055\u898F\u5167\u5BB9\u7684\u7A4D\u5206\u4E0D\u4E88\u9000\u9084\u3002\u5982\u767C\u73FE\u9055\u898F\u5167\u5BB9\uFF0C\u8ACB\u900F\u904E s@nolotus.com \u6AA2\u8209\u3002"
10840
11097
  },
10841
11098
  section6: {
10842
- title: "6. \u806F\u7D61\u6211\u5011",
10843
- desc: "\u5982\u679C\u60A8\u5C0D\u672C\u96B1\u79C1\u6B0A\u653F\u7B56\u6709\u4EFB\u4F55\u7591\u554F\u6216\u5EFA\u8B70\uFF0C\u8ACB\u806F\u7D61\u6211\u5011\uFF08Email: support@nolo.chat\uFF09\u3002"
11099
+ title: "6. \u514D\u8CAC\u8072\u660E\u8207\u8CAC\u4EFB\u9650\u5236",
11100
+ desc: "\u672C\u670D\u52D9\u6309\u300C\u73FE\u72C0\u300D\u548C\u300C\u73FE\u6709\u300D\u57FA\u790E\u63D0\u4F9B\uFF0C\u4E0D\u4F5C\u4EFB\u4F55\u660E\u793A\u6216\u9ED8\u793A\u64D4\u4FDD\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u65BC\u9069\u92B7\u6027\u3001\u7279\u5B9A\u7528\u9014\u9069\u7528\u6027\u4EE5\u53CA\u4E0D\u9593\u65B7\u3001\u7121\u932F\u8AA4\u670D\u52D9\u7684\u9ED8\u793A\u64D4\u4FDD\u3002\u5728\u6CD5\u5F8B\u5141\u8A31\u7684\u6700\u5927\u7BC4\u570D\u5167\uFF0C\u6211\u5011\u5C0D\u4EFB\u4F55\u9593\u63A5\u3001\u9644\u5E36\u3001\u7279\u6B8A\u6216\u5F8C\u679C\u6027\u640D\u5BB3\uFF08\u5305\u62EC\u5229\u6F64\u640D\u5931\u6216\u8CC7\u6599\u907A\u5931\uFF09\u4E0D\u627F\u64D4\u8CAC\u4EFB\u3002\u56E0\u672C\u689D\u6B3E\u7522\u751F\u7684\u6211\u65B9\u5168\u90E8\u8CAC\u4EFB\uFF0C\u4EE5\u60A8\u5728\u7D22\u8CE0\u767C\u751F\u524D 12 \u500B\u6708\u5167\u5BE6\u969B\u652F\u4ED8\u7684\u8CBB\u7528\u70BA\u9650\u3002"
11101
+ },
11102
+ section7: {
11103
+ title: "7. \u7528\u6236\u9055\u7D04\u8207\u5E33\u865F\u8655\u7F6E",
11104
+ desc: "\u5982\u60A8\u9055\u53CD\u672C\u689D\u6B3E\u3001\u6FEB\u7528\u670D\u52D9\u6216\u5F9E\u4E8B\u9055\u6CD5\u884C\u70BA\uFF0C\u6211\u5011\u53EF\u80FD\u5C0D\u60A8\u7684\u5E33\u865F\u63A1\u53D6\u8655\u7F6E\u63AA\u65BD\u3002\u8655\u7F6E\u6309\u968E\u68AF\u5F0F\u57F7\u884C\uFF1A\u8B66\u544A\u3001\u9650\u5236\u529F\u80FD\u3001\u66AB\u505C\u6216\u7D42\u6B62\u5E33\u865F\u3002\u5E33\u865F\u7D42\u6B62\u5F8C\uFF0C\u60A8\u7684\u5B58\u53D6\u6B0A\u9650\u5C07\u7D42\u6B62\uFF0C\u672A\u6D88\u8CBB\u7A4D\u5206\u6309\u7B2C 3 \u7BC0\u9000\u6B3E\u653F\u7B56\u8655\u7406\uFF0C\u9055\u898F\u6240\u5F97\u5167\u5BB9\u5C07\u88AB\u79FB\u9664\u3002\u60A8\u53EF\u900F\u904E s@nolotus.com \u5C0D\u8655\u7F6E\u63D0\u51FA\u7533\u8A34\u3002"
11105
+ },
11106
+ section8: {
11107
+ title: "8. \u806F\u7D61\u6211\u5011\u8207\u71DF\u904B\u65B9",
11108
+ desc: "\u5982\u6709\u4EFB\u4F55\u7591\u554F\uFF0C\u8ACB\u900F\u904E\u96FB\u5B50\u90F5\u4EF6 s@nolotus.com \u806F\u7D61\u6211\u5011\uFF08\u54C1\u724C\uFF1ANolo\uFF09\u3002"
10844
11109
  }
10845
11110
  }
10846
11111
  }
10847
11112
  },
10848
11113
  ["ja" /* JA */]: {
10849
11114
  translation: {
10850
- privacy: {
10851
- title: "\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC",
10852
- lastUpdated: "\u6700\u7D42\u66F4\u65B0\u65E5\uFF1A2026\u5E745\u670830\u65E5",
10853
- intro: "Nolo\uFF08\u4EE5\u4E0B\u300C\u672C\u30A2\u30D7\u30EA\u300D\uFF09\u3092\u3054\u5229\u7528\u3044\u305F\u3060\u304D\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u4FDD\u8B77\u3092\u975E\u5E38\u306B\u91CD\u8996\u3057\u3066\u3044\u307E\u3059\u3002\u672C\u30DD\u30EA\u30B7\u30FC\u306F\u3001\u5F53\u793E\u304C\u500B\u4EBA\u60C5\u5831\u3092\u3069\u306E\u3088\u3046\u306B\u53CE\u96C6\u3001\u4F7F\u7528\u3001\u4FDD\u8B77\u3059\u308B\u304B\u3092\u8AAC\u660E\u3059\u308B\u3082\u306E\u3067\u3059\u3002",
11115
+ terms: {
11116
+ title: "\u5229\u7528\u898F\u7D04",
11117
+ lastUpdated: "\u6700\u7D42\u66F4\u65B0\u65E5\uFF1A2026\u5E748\u670827\u65E5",
11118
+ intro: "Nolo \u3078\u3088\u3046\u3053\u305D\u3002\u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u30A2\u30AF\u30BB\u30B9\u3001\u767B\u9332\u3001\u307E\u305F\u306F\u30DD\u30A4\u30F3\u30C8\u3092\u8CFC\u5165\u3059\u308B\u3053\u3068\u306B\u3088\u308A\u3001\u304A\u5BA2\u69D8\u306F\u672C\u5229\u7528\u898F\u7D04\u306B\u540C\u610F\u3057\u305F\u3082\u306E\u3068\u307F\u306A\u3055\u308C\u307E\u3059\u3002",
10854
11119
  section1: {
10855
- title: "1. \u53CE\u96C6\u3059\u308B\u60C5\u5831",
10856
- desc: "\u3088\u308A\u826F\u3044\u30B5\u30FC\u30D3\u30B9\u3092\u63D0\u4F9B\u3059\u308B\u305F\u3081\u3001\u672C\u30A2\u30D7\u30EA\u306F\u4EE5\u4E0B\u306E\u60C5\u5831\u3092\u53CE\u96C6\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\uFF1A",
10857
- device: "\u30C7\u30D0\u30A4\u30B9\u60C5\u5831\uFF1A\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306E\u6700\u9069\u5316\u3084\u30AF\u30E9\u30C3\u30B7\u30E5\u306E\u89E3\u6C7A\u306E\u305F\u3081\u3001\u30C7\u30D0\u30A4\u30B9\u306E\u30E2\u30C7\u30EB\u3001OS\u30D0\u30FC\u30B8\u30E7\u30F3\u3001\u4E00\u610F\u306E\u30C7\u30D0\u30A4\u30B9\u8B58\u5225\u5B50\u306A\u3069\u3092\u53CE\u96C6\u3057\u307E\u3059\u3002",
10858
- location: "\u4F4D\u7F6E\u60C5\u5831\uFF1A\u672C\u30A2\u30D7\u30EA\u306B\u306F\u5730\u56F3\u30B5\u30FC\u30D3\u30B9\u304C\u7D71\u5408\u3055\u308C\u3066\u304A\u308A\u3001\u95A2\u9023\u6A5F\u80FD\u3092\u4F7F\u7528\u3059\u308B\u969B\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u540C\u610F\u306E\u3082\u3068\u4F4D\u7F6E\u60C5\u5831\u3092\u53CE\u96C6\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
10859
- network: "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u60C5\u5831\uFF1A\u30AA\u30F3\u30E9\u30A4\u30F3\u6A5F\u80FD\u3092\u63D0\u4F9B\u3059\u308B\u305F\u3081\u3001\u30A4\u30F3\u30BF\u30FC\u30CD\u30C3\u30C8\u30A2\u30AF\u30BB\u30B9\u304C\u5FC5\u8981\u3067\u3042\u308A\u3001\u305D\u306E\u904E\u7A0B\u3067\u6A19\u6E96\u7684\u306A\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30ED\u30B0\u304C\u751F\u6210\u3055\u308C\u307E\u3059\u3002"
11120
+ title: "1. \u30B5\u30FC\u30D3\u30B9\u3068\u8ACB\u6C42\uFF08\u30DD\u30A4\u30F3\u30C8\u5373\u6642\u6D88\u8CBB\u30E2\u30C7\u30EB\uFF09",
11121
+ desc: "\u672C\u30B5\u30FC\u30D3\u30B9\u306F\u3001\u30DD\u30A4\u30F3\u30C8\uFF08Points/Credits\uFF09\u30B7\u30B9\u30C6\u30E0\u306B\u57FA\u3065\u304F\u30C7\u30B8\u30BF\u30EBAI\u8A08\u7B97\u30B5\u30FC\u30D3\u30B9\u3067\u3059\u3002\u8A08\u7B97\u30EA\u30AF\u30A8\u30B9\u30C8\u6642\u306B\u5B9F\u969B\u306E\u30EA\u30BD\u30FC\u30B9\u4F7F\u7528\u91CF\u306B\u5FDC\u3058\u3066\u5373\u5EA7\u306B\u30DD\u30A4\u30F3\u30C8\u304C\u6D88\u8CBB\u3055\u308C\u307E\u3059\u3002\u5B9A\u671F\u8CFC\u8AAD\u3084\u81EA\u52D5\u5F15\u304D\u843D\u3068\u3057\u306F\u767A\u751F\u3057\u307E\u305B\u3093\u3002\u6709\u52B9\u671F\u9650\u306F\u3042\u308A\u307E\u305B\u3093\u3002"
10860
11122
  },
10861
11123
  section2: {
10862
- title: "2. \u60C5\u5831\u306E\u5229\u7528\u76EE\u7684",
10863
- desc: "\u53CE\u96C6\u3057\u305F\u60C5\u5831\u306F\u3001\u4E3B\u306B\u4EE5\u4E0B\u306E\u76EE\u7684\u3067\u4F7F\u7528\u3055\u308C\u307E\u3059\uFF1A",
10864
- core: "\u672C\u30A2\u30D7\u30EA\u306E\u30B3\u30A2\u6A5F\u80FD\u306E\u63D0\u4F9B\u3001\u7DAD\u6301\u3001\u6539\u5584\u3002",
10865
- map: "\u5730\u56F3\u8868\u793A\u3084\u4F4D\u7F6E\u60C5\u5831\u30B5\u30FC\u30D3\u30B9\u306A\u3069\u3001\u30E6\u30FC\u30B6\u30FC\u304C\u30C8\u30EA\u30AC\u30FC\u3059\u308B\u6A5F\u80FD\u306E\u63D0\u4F9B\u3002",
10866
- analysis: "\u30E6\u30FC\u30B6\u30FC\u4F53\u9A13\u5411\u4E0A\u306E\u305F\u3081\u306E\u5229\u7528\u72B6\u6CC1\u306E\u5206\u6790\u3002"
11124
+ title: "2. \u6C7A\u6E08\u51E6\u7406\uFF08Waffo Pancake\uFF09",
11125
+ desc: "\u6C7A\u6E08\u306F Waffo Pancake \u306B\u3088\u308A\u5B89\u5168\u306B\u51E6\u7406\u3055\u308C\u3001PCI-DSS \u898F\u683C\u306B\u5B8C\u5168\u6E96\u62E0\u3057\u3066\u3044\u307E\u3059\u3002\u5F53\u793E\u304C\u30AF\u30EC\u30B8\u30C3\u30C8\u30AB\u30FC\u30C9\u756A\u53F7\u3084\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30B3\u30FC\u30C9\u3092\u53CE\u96C6\u30FB\u4FDD\u5B58\u3059\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002"
10867
11126
  },
10868
11127
  section3: {
10869
- title: "3. \u60C5\u5831\u306E\u5171\u6709\u3068\u958B\u793A",
10870
- desc: "\u5F53\u793E\u306F\u500B\u4EBA\u60C5\u5831\u3092\u7B2C\u4E09\u8005\u306B\u8CA9\u58F2\u3059\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u4EE5\u4E0B\u306E\u72B6\u6CC1\u306B\u304A\u3044\u3066\u306E\u307F\u60C5\u5831\u3092\u5171\u6709\u3057\u307E\u3059\uFF1A",
10871
- thirdParty: "\u7B2C\u4E09\u8005\u30B5\u30FC\u30D3\u30B9\u63D0\u4F9B\u8005\uFF1A\u672C\u30A2\u30D7\u30EA\u306F\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u306E\u5730\u56F3SDK\u3092\u4F7F\u7528\u3057\u3066\u304A\u308A\u3001\u3053\u308C\u3089\u306F\u72EC\u81EA\u306E\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u306B\u5F93\u3063\u3066\u30C7\u30FC\u30BF\u3092\u53CE\u96C6\u304A\u3088\u3073\u51E6\u7406\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
10872
- legal: "\u6CD5\u7684\u8981\u8ACB\uFF1A\u6CD5\u5F8B\u306E\u8981\u6C42\u3001\u307E\u305F\u306F\u653F\u5E9C\u6A5F\u95A2\u304B\u3089\u306E\u5F37\u5236\u7684\u306A\u8981\u6C42\u306B\u5354\u529B\u3059\u308B\u305F\u3081\u3001\u60C5\u5831\u3092\u958B\u793A\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002"
11128
+ title: "3. \u8FD4\u91D1\u30DD\u30EA\u30B7\u30FC",
11129
+ desc: "\u6D88\u8CBB\u6E08\u307F\u306E\u30DD\u30A4\u30F3\u30C8\u306F\u8FD4\u91D1\u5BFE\u8C61\u5916\u3067\u3059\u3002\u6709\u511F\u8CFC\u5165\u304B\u30897\u65E5\u4EE5\u5185\u3067\u5B8C\u5168\u306B\u672A\u4F7F\u7528\u306E\u30DD\u30A4\u30F3\u30C8\u30D1\u30C3\u30B1\u30FC\u30B8\u306B\u9650\u308A\u5168\u984D\u8FD4\u91D1\u3092\u627F\u308A\u307E\u3059\u3002\u7121\u511F\u4ED8\u4E0E\u3084\u62DB\u5F85\u7279\u5178\u30DD\u30A4\u30F3\u30C8\u306F\u8FD4\u91D1\u30FB\u63DB\u91D1\u4E0D\u53EF\u3067\u3059\u3002\u304A\u554F\u3044\u5408\u308F\u305B\uFF1As@nolotus.com"
10873
11130
  },
10874
11131
  section4: {
10875
- title: "4. \u30C7\u30FC\u30BF\u306E\u5B89\u5168\u6027",
10876
- desc: "\u30C7\u30FC\u30BF\u306E\u6F0F\u6D29\u3001\u640D\u5931\u3001\u4E0D\u6B63\u30A2\u30AF\u30BB\u30B9\u3092\u9632\u3050\u305F\u3081\u3001\u5F53\u793E\u306F\u5408\u7406\u7684\u306A\u6280\u8853\u7684\u304A\u3088\u3073\u7BA1\u7406\u4E0A\u306E\u63AA\u7F6E\u3092\u8B1B\u3058\u3066\u60C5\u5831\u3092\u4FDD\u8B77\u3057\u307E\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u3068\u306E\u901A\u4FE1\u306F\u3059\u3079\u3066\u6697\u53F7\u5316\u3055\u308C\u3066\u3044\u307E\u3059\u3002"
11132
+ title: "4. \u5229\u7528\u898F\u7D04\u3068\u77E5\u7684\u8CA1\u7523",
11133
+ desc: "\u6CD5\u4EE4\u9055\u53CD\u3084\u30B5\u30FC\u30D3\u30B9\u306E\u4E0D\u6B63\u5229\u7528\u3092\u7981\u6B62\u3057\u307E\u3059\u3002\u751F\u6210\u3055\u308C\u305F\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u6A29\u5229\u306F\u304A\u5BA2\u69D8\u306B\u5E30\u5C5E\u3057\u307E\u3059\u3002"
10877
11134
  },
10878
11135
  section5: {
10879
- title: "5. \u30E6\u30FC\u30B6\u30FC\u306E\u6A29\u5229",
10880
- desc: "\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A\u304B\u3089\u3044\u3064\u3067\u3082\u4F4D\u7F6E\u60C5\u5831\u3084\u305D\u306E\u4ED6\u306E\u6A29\u9650\u306E\u8A31\u53EF\u3092\u53D6\u308A\u6D88\u3059\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u3053\u308C\u306B\u3088\u308A\u4E00\u90E8\u306E\u4F4D\u7F6E\u60C5\u5831\u6A5F\u80FD\u304C\u6B63\u5E38\u306B\u6A5F\u80FD\u3057\u306A\u304F\u306A\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u30A2\u30D7\u30EA\u306E\u57FA\u672C\u6A5F\u80FD\u306B\u306F\u5F71\u97FF\u3057\u307E\u305B\u3093\u3002"
11136
+ title: "5. \u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u5B89\u5168\u6027\u3068\u7981\u6B62\u30B3\u30F3\u30C6\u30F3\u30C4",
11137
+ desc: "\u5F53\u793E\u306F\u5B89\u5168\u304B\u3064\u5408\u6CD5\u7684\u306A\u30B5\u30FC\u30D3\u30B9\u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002\u672C\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3058\u3066\u4EE5\u4E0B\u306E6\u7A2E\u985E\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u751F\u6210\u30FB\u914D\u4FE1\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\uFF1A\uFF081\uFF09\u30DD\u30EB\u30CE/NSFW\u30B3\u30F3\u30C6\u30F3\u30C4\uFF1B\uFF082\uFF09\u66B4\u529B\u7684\u30FB\u6B8B\u8650\u306A\u30B3\u30F3\u30C6\u30F3\u30C4\uFF1B\uFF083\uFF09\u30D8\u30A4\u30C8\u30B9\u30D4\u30FC\u30C1\uFF1B\uFF084\uFF09\u5150\u7AE5\u306E\u5B89\u5168\u3092\u640D\u306A\u3046\u30B3\u30F3\u30C6\u30F3\u30C4\uFF08\u5150\u7AE5\u6027\u7684\u8650\u5F85\u8CC7\u6599 CSAM \u3092\u542B\u3080\uFF09\uFF1B\uFF085\uFF09\u30C7\u30A3\u30FC\u30D7\u30D5\u30A7\u30A4\u30AF\u3084\u4ED6\u4EBA\u306B\u306A\u308A\u3059\u307E\u3059\u30B3\u30F3\u30C6\u30F3\u30C4\uFF1B\uFF086\uFF09\u8457\u4F5C\u6A29\u3084\u5546\u6A19\u3092\u4FB5\u5BB3\u3059\u308B\u30B3\u30F3\u30C6\u30F3\u30C4\u3002\u5165\u529B\u30D7\u30ED\u30F3\u30D7\u30C8\u306F\u751F\u6210\u524D\u306B\u5F53\u793E\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u5B89\u5168\u5BE9\u67FB\uFF08\u81EA\u52D5\u30D5\u30A3\u30EB\u30BF\u30EA\u30F3\u30B0\u304A\u3088\u3073/\u307E\u305F\u306F\u624B\u52D5\u30EC\u30D3\u30E5\u30FC\uFF09\u3092\u53D7\u3051\u3001\u9055\u53CD\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u524A\u9664\u3055\u308C\u307E\u3059\u3002\u9055\u53CD\u3057\u305F\u5834\u5408\u3001\u8B66\u544A\u3001\u6A5F\u80FD\u5236\u9650\u3001\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u505C\u6B62\u306E\u5BFE\u8C61\u3068\u306A\u308A\u3001\u9055\u53CD\u30B3\u30F3\u30C6\u30F3\u30C4\u306B\u4F7F\u7528\u3057\u305F\u30DD\u30A4\u30F3\u30C8\u306F\u8FD4\u91D1\u3055\u308C\u307E\u305B\u3093\u3002\u9055\u53CD\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u767A\u898B\u3057\u305F\u5834\u5408\u306F s@nolotus.com \u307E\u3067\u3054\u5831\u544A\u304F\u3060\u3055\u3044\u3002"
10881
11138
  },
10882
11139
  section6: {
10883
- title: "6. \u304A\u554F\u3044\u5408\u308F\u305B",
10884
- desc: "\u672C\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u306B\u95A2\u3059\u308B\u3054\u8CEA\u554F\u3084\u3054\u63D0\u6848\u304C\u3042\u308B\u5834\u5408\u306F\u3001support@nolo.chat \u307E\u3067\u3054\u9023\u7D61\u304F\u3060\u3055\u3044\u3002"
11140
+ title: "6. \u514D\u8CAC\u4E8B\u9805\u3068\u8CAC\u4EFB\u306E\u5236\u9650",
11141
+ desc: "\u672C\u30B5\u30FC\u30D3\u30B9\u306F\u300C\u73FE\u72B6\u6709\u59FF\u300D\u3067\u63D0\u4F9B\u3055\u308C\u3001\u5546\u54C1\u6027\u3001\u7279\u5B9A\u76EE\u7684\u3078\u306E\u9069\u5408\u6027\u3001\u4E2D\u65AD\u3084\u30A8\u30E9\u30FC\u306E\u306A\u3044\u30B5\u30FC\u30D3\u30B9\u3092\u542B\u3080\u3001\u660E\u793A\u7684\u307E\u305F\u306F\u9ED9\u793A\u7684\u306A\u4E00\u5207\u306E\u4FDD\u8A3C\u3092\u884C\u3044\u307E\u305B\u3093\u3002\u6CD5\u5F8B\u3067\u8A8D\u3081\u3089\u308C\u308B\u6700\u5927\u9650\u306E\u7BC4\u56F2\u3067\u3001\u5F53\u793E\u306F\u9593\u63A5\u7684\u30FB\u4ED8\u968F\u7684\u30FB\u7279\u5225\u30FB\u7D50\u679C\u7684\u640D\u5BB3\uFF08\u5229\u76CA\u640D\u5931\u3084\u30C7\u30FC\u30BF\u55AA\u5931\u3092\u542B\u3080\uFF09\u306B\u3064\u3044\u3066\u8CAC\u4EFB\u3092\u8CA0\u3044\u307E\u305B\u3093\u3002\u672C\u898F\u7D04\u306B\u8D77\u56E0\u3059\u308B\u5F53\u793E\u306E\u7DCF\u8CAC\u4EFB\u984D\u306F\u3001\u8ACB\u6C42\u524D12\u30F6\u6708\u9593\u306B\u304A\u5BA2\u69D8\u304C\u5B9F\u969B\u306B\u652F\u6255\u3063\u305F\u91D1\u984D\u3092\u4E0A\u9650\u3068\u3057\u307E\u3059\u3002"
11142
+ },
11143
+ section7: {
11144
+ title: "7. \u5229\u7528\u8005\u9055\u53CD\u3068\u30A2\u30AB\u30A6\u30F3\u30C8\u63AA\u7F6E",
11145
+ desc: "\u672C\u898F\u7D04\u306B\u9055\u53CD\u3057\u305F\u5834\u5408\u3001\u30B5\u30FC\u30D3\u30B9\u3092\u60AA\u7528\u3057\u305F\u5834\u5408\u3001\u307E\u305F\u306F\u9055\u6CD5\u884C\u70BA\u3092\u884C\u3063\u305F\u5834\u5408\u3001\u5F53\u793E\u306F\u304A\u5BA2\u69D8\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5BFE\u3057\u3066\u63AA\u7F6E\u3092\u8B1B\u3058\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u63AA\u7F6E\u306F\u6BB5\u968E\u7684\u306B\u9069\u7528\u3055\u308C\u307E\u3059\uFF1A\u8B66\u544A\u3001\u6A5F\u80FD\u5236\u9650\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u505C\u6B62\u307E\u305F\u306F\u7D42\u4E86\u3002\u7D42\u4E86\u5F8C\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u306F\u7D42\u4E86\u3057\u3001\u672A\u4F7F\u7528\u30DD\u30A4\u30F3\u30C8\u306F\u7B2C3\u6761\u306E\u8FD4\u91D1\u30DD\u30EA\u30B7\u30FC\u306B\u5F93\u3063\u3066\u51E6\u7406\u3055\u308C\u3001\u9055\u53CD\u306B\u3088\u3063\u3066\u5F97\u3089\u308C\u305F\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u524A\u9664\u3055\u308C\u307E\u3059\u3002\u63AA\u7F6E\u306B\u5BFE\u3057\u3066\u306F s@nolotus.com \u307E\u3067\u7570\u8B70\u7533\u3057\u7ACB\u3066\u304C\u3067\u304D\u307E\u3059\u3002"
11146
+ },
11147
+ section8: {
11148
+ title: "8. \u304A\u554F\u3044\u5408\u308F\u305B",
11149
+ desc: "\u30D6\u30E9\u30F3\u30C9\uFF1ANolo / \u30E1\u30FC\u30EB\uFF1As@nolotus.com"
10885
11150
  }
10886
11151
  }
10887
11152
  }
10888
11153
  }
10889
11154
  };
10890
11155
 
10891
- // packages/app/i18n/translations/terms.locale.ts
10892
- var terms_locale_default = {
11156
+ // packages/app/i18n/translations/aup.locale.ts
11157
+ var aup_locale_default = {
10893
11158
  ["en" /* EN */]: {
10894
11159
  translation: {
10895
- terms: {
10896
- title: "Terms of Service",
10897
- lastUpdated: "Last updated: May 30, 2026",
10898
- intro: "Welcome to Nolo. By accessing or using our services, you agree to be bound by these Terms of Service.",
11160
+ aup: {
11161
+ title: "AIGC Acceptable Use Policy",
11162
+ lastUpdated: "Last updated: August 24, 2026",
11163
+ intro: "Welcome to Nolo. This Acceptable Use Policy (AUP) outlines the acceptable and prohibited uses of our AI Generation Services to ensure a safe, legal, and responsible computing environment.",
10899
11164
  section1: {
10900
- title: "1. Account Registration",
10901
- desc: "You must provide accurate information when creating an account. You are responsible for safeguarding your account credentials."
11165
+ title: "1. Prohibited Content Categories",
11166
+ desc: "You may not generate, attempt to generate, or distribute the following categories of content:",
11167
+ nsfw: "Adult / Pornographic / NSFW Content: Explicit sexual acts, sexual services, non-consensual sexual content.",
11168
+ violence: "Violence & Gore: Content depicting extreme violence, physical harm, self-harm, suicide encouragement, or weapons manufacturing.",
11169
+ hate: "Hate Speech & Harassment: Content promoting discrimination, hatred, abuse, or degradation based on protected characteristics.",
11170
+ childSafety: "Child Exploitation & Unsafe Content: Zero-tolerance for CSAM, sexualization of minors, or exploitation.",
11171
+ deepfake: "Deepfakes & Impersonation: Non-consensual synthetic impersonation of real individuals, deceptive identity manipulation, or fraudulent endorsements.",
11172
+ infringement: "Copyright & Trademark Infringement: Generating content that directly infringes valid intellectual property rights without authorization."
10902
11173
  },
10903
11174
  section2: {
10904
- title: "2. Acceptable Use",
10905
- desc: "You agree not to use the service for any unlawful purposes or to conduct any activity that violates the rights of others."
11175
+ title: "2. Content Moderation & Screening",
11176
+ desc: "We employ multi-layered automated filtering (including prompt inspection, real-time safety classification API, and keyword interceptors) alongside human review to detect and block non-compliant prompts and generated outputs before or immediately upon generation."
10906
11177
  },
10907
11178
  section3: {
10908
- title: "3. Intellectual Property",
10909
- desc: "All content and software provided through the service are the property of Nolo or its licensors and are protected by intellectual property laws."
11179
+ title: "3. Enforcement & Penalties",
11180
+ desc: "Violations of this Policy will result in enforcement actions based on severity:",
11181
+ warning: "1. Warning & Content Removal: Written warning and immediate deletion of non-compliant content.",
11182
+ limit: "2. Feature Limitation: Restricting access to specific models, tools, or generation quotas.",
11183
+ ban: "3. Account Suspension & Termination: Immediate permanent ban for severe violations (such as child safety or malicious deepfakes) without credit refund.",
11184
+ legal: "4. Legal Action: Reporting unlawful content to competent regulatory and law enforcement authorities."
10910
11185
  },
10911
11186
  section4: {
10912
- title: "4. Termination",
10913
- desc: "We may suspend or terminate your account at any time for violations of these Terms of Service."
11187
+ title: "4. User Reporting & Appeals",
11188
+ desc: "If you detect any non-compliant, unsafe, or infringing content generated via our platform, please report it immediately to our Safety Team at s@nolotus.com. We review L1 high-priority reports within 24 hours."
11189
+ },
11190
+ section5: {
11191
+ title: "5. Contact & Safety Team",
11192
+ desc: "Safety & Abuse Contact: s@nolotus.com (Operator: Nolo)."
10914
11193
  }
10915
11194
  }
10916
11195
  }
10917
11196
  },
10918
11197
  ["zh-CN" /* ZH_CN */]: {
10919
11198
  translation: {
10920
- terms: {
10921
- title: "\u670D\u52A1\u6761\u6B3E",
10922
- lastUpdated: "\u6700\u540E\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E745\u670830\u65E5",
10923
- intro: "\u6B22\u8FCE\u4F7F\u7528 Nolo\u3002\u8BBF\u95EE\u6216\u4F7F\u7528\u6211\u4EEC\u7684\u670D\u52A1\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u53D7\u672C\u670D\u52A1\u6761\u6B3E\u7684\u7EA6\u675F\u3002",
11199
+ aup: {
11200
+ title: "AIGC \u53EF\u63A5\u53D7\u4F7F\u7528\u89C4\u8303 (AUP)",
11201
+ lastUpdated: "\u6700\u540E\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670824\u65E5",
11202
+ intro: "\u6B22\u8FCE\u4F7F\u7528 Nolo\u3002\u672C\u89C4\u8303\uFF08AUP\uFF09\u65E8\u5728\u660E\u786E\u4F7F\u7528\u672C\u5E73\u53F0 AI \u751F\u6210\u670D\u52A1\u65F6\u7684\u5185\u5BB9\u6807\u51C6\u3001\u8FDD\u89C4\u5206\u7C7B\u4E0E\u5904\u7F6E\u89C4\u5219\uFF0C\u4FDD\u969C\u5065\u5EB7\u3001\u5B89\u5168\u3001\u8D1F\u8D23\u4EFB\u7684 AI \u4F7F\u7528\u73AF\u5883\u3002",
10924
11203
  section1: {
10925
- title: "1. \u8D26\u53F7\u6CE8\u518C",
10926
- desc: "\u60A8\u5728\u521B\u5EFA\u8D26\u53F7\u65F6\u5FC5\u987B\u63D0\u4F9B\u51C6\u786E\u7684\u4FE1\u606F\u3002\u60A8\u6709\u8D23\u4EFB\u59A5\u5584\u4FDD\u7BA1\u60A8\u7684\u8D26\u53F7\u51ED\u8BC1\u3002"
11204
+ title: "1. \u4E25\u7981\u751F\u6210\u7684\u516D\u5927\u7C7B\u8FDD\u89C4\u5185\u5BB9",
11205
+ desc: "\u7528\u6237\u4E25\u7981\u5229\u7528\u672C\u5E73\u53F0\u751F\u6210\u3001\u8BF1\u5BFC\u751F\u6210\u6216\u4F20\u64AD\u5305\u542B\u4EE5\u4E0B\u5185\u5BB9\u7684\u6587\u672C\u3001\u56FE\u7247\u6216\u591A\u5A92\u4F53\u6750\u6599\uFF1A",
11206
+ nsfw: "\u8272\u60C5\u4E0E\u4F4E\u4FD7 (NSFW)\uFF1A\u660E\u786E\u7684\u6027\u884C\u4E3A\u63CF\u5199\u3001\u8272\u60C5\u4EA4\u6613\u4FE1\u606F\u6216\u975E\u81EA\u613F\u6027\u5185\u5BB9\u3002",
11207
+ violence: "\u66B4\u529B\u4E0E\u8840\u8165\uFF1A\u6781\u7AEF\u66B4\u529B\u81F4\u6B8B\u3001\u4EBA\u8EAB\u4F24\u5BB3\u3001\u9F13\u52B1\u81EA\u6B8B\u81EA\u6740\u3001\u5236\u4F5C\u5371\u9669\u6B66\u5668\u7B49\u5185\u5BB9\u3002",
11208
+ hate: "\u4EC7\u6068\u4E0E\u9A9A\u6270\uFF1A\u57FA\u4E8E\u79CD\u65CF\u3001\u6C11\u65CF\u3001\u5B97\u6559\u3001\u6027\u522B\u3001\u6B8B\u969C\u7B49\u7FA4\u4F53\u7684\u6B67\u89C6\u8A00\u8BBA\u3001\u7F51\u7EDC\u9738\u51CC\u4E0E\u6050\u5413\u3002",
11209
+ childSafety: "\u5371\u5BB3\u672A\u6210\u5E74\u4EBA (CSAM)\uFF1A\u4E25\u5389\u96F6\u5BB9\u5FCD\u6D89\u53CA\u672A\u6210\u5E74\u4EBA\u7684\u4EFB\u4F55\u8272\u60C5\u3001\u5265\u524A\u6216\u8650\u5F85\u5185\u5BB9\u3002",
11210
+ deepfake: "\u6DF1\u5EA6\u4F2A\u9020\u4E0E\u5192\u7528\uFF1A\u672A\u7ECF\u6388\u6743\u4F2A\u9020\u4ED6\u4EBA\u771F\u5B9E\u8096\u50CF/\u58F0\u97F3\u3001\u5192\u5145\u516C\u4F17\u4EBA\u7269\u3001\u4ECE\u4E8B\u6B3A\u8BC8\u6216\u9020\u8C23\u3002",
11211
+ infringement: "\u4FB5\u72AF\u77E5\u8BC6\u4EA7\u6743\uFF1A\u660E\u77E5\u4FB5\u72AF\u4ED6\u4EBA\u8457\u4F5C\u6743\u3001\u5546\u6807\u6743\u6216\u5546\u4E1A\u79D8\u5BC6\u7684\u6076\u610F\u751F\u6210\u4E0E\u4F20\u64AD\u3002"
10927
11212
  },
10928
11213
  section2: {
10929
- title: "2. \u5408\u89C4\u4F7F\u7528",
10930
- desc: "\u60A8\u540C\u610F\u4E0D\u5C06\u672C\u670D\u52A1\u7528\u4E8E\u4EFB\u4F55\u975E\u6CD5\u76EE\u7684\uFF0C\u4E5F\u4E0D\u4ECE\u4E8B\u4EFB\u4F55\u4FB5\u72AF\u4ED6\u4EBA\u5408\u6CD5\u6743\u76CA\u7684\u6D3B\u52A8\u3002"
11214
+ title: "2. \u5E73\u53F0\u5185\u5BB9\u5BA1\u6838\u673A\u5236",
11215
+ desc: "\u5E73\u53F0\u90E8\u7F72\u4E86\u591A\u5C42\u6B21\u81EA\u52A8\u5316\u5B89\u5168\u5BA1\u67E5\u673A\u5236\uFF08\u5305\u62EC\u8F93\u5165 Prompt \u654F\u611F\u8BCD\u626B\u63CF\u3001\u5B9E\u65F6\u5B89\u5168\u6A21\u578B\u5206\u7C7B\u8FC7\u6EE4\u4EE5\u53CA\u8F93\u51FA\u5185\u5BB9\u62E6\u622A\uFF09\uFF0C\u5E76\u8F85\u4EE5\u4EBA\u5DE5\u5DE1\u68C0\u4E0E\u590D\u6838\uFF0C\u786E\u4FDD\u4E0D\u826F\u4FE1\u606F\u5728\u7B2C\u4E00\u65F6\u95F4\u88AB\u963B\u65AD\u3002"
10931
11216
  },
10932
11217
  section3: {
10933
- title: "3. \u77E5\u8BC6\u4EA7\u6743",
10934
- desc: "\u901A\u8FC7\u672C\u670D\u52A1\u63D0\u4F9B\u7684\u6240\u6709\u5185\u5BB9\u548C\u8F6F\u4EF6\u5747\u5F52 Nolo \u6216\u5176\u8BB8\u53EF\u65B9\u6240\u6709\uFF0C\u53D7\u77E5\u8BC6\u4EA7\u6743\u6CD5\u5F8B\u4FDD\u62A4\u3002"
11218
+ title: "3. \u8FDD\u89C4\u5904\u7F6E\u63AA\u65BD",
11219
+ desc: "\u4E00\u65E6\u53D1\u73B0\u6216\u88AB\u4E3E\u62A5\u8FDD\u89C4\uFF0C\u5E73\u53F0\u5C06\u89C6\u60C5\u8282\u8F7B\u91CD\u91C7\u53D6\u4EE5\u4E0B\u5904\u7F6E\u63AA\u65BD\uFF1A",
11220
+ warning: "1. \u8B66\u544A\u4E0E\u4E0B\u67B6\uFF1A\u53D1\u51FA\u6B63\u5F0F\u8B66\u544A\u5E76\u7ACB\u5373\u4E0B\u67B6/\u5220\u9664\u8FDD\u89C4\u5185\u5BB9\u3002",
11221
+ limit: "2. \u6743\u9650\u9650\u5236\uFF1A\u9650\u5236\u7279\u5B9A\u6A21\u578B\u3001\u964D\u4F4E\u8BA1\u7B97\u989D\u5EA6\u6216\u51BB\u7ED3\u90E8\u5206\u529F\u80FD\u3002",
11222
+ ban: "3. \u6C38\u4E45\u5C01\u53F7\uFF1A\u9488\u5BF9\u4E25\u91CD\u8FDD\u89C4\uFF08\u5982\u5371\u5BB3\u672A\u6210\u5E74\u4EBA\u3001\u4E25\u91CD\u6DF1\u5EA6\u4F2A\u9020\uFF09\u7ACB\u5373\u6C38\u4E45\u7EC8\u6B62\u8D26\u53F7\uFF0C\u672A\u6D88\u8017\u79EF\u5206\u4E0D\u4E88\u9000\u8FD8\u3002",
11223
+ legal: "4. \u79FB\u9001\u53F8\u6CD5\uFF1A\u6D89\u5ACC\u8FDD\u6CD5\u72AF\u7F6A\u7684\uFF0C\u4F9D\u6CD5\u4FDD\u5B58\u8BC1\u636E\u5E76\u5411\u76D1\u7BA1\u4E0E\u516C\u5B89\u673A\u5173\u62A5\u544A\u3002"
10935
11224
  },
10936
11225
  section4: {
10937
- title: "4. \u7EC8\u6B62\u670D\u52A1",
10938
- desc: "\u5982\u679C\u60A8\u8FDD\u53CD\u672C\u670D\u52A1\u6761\u6B3E\uFF0C\u6211\u4EEC\u6709\u6743\u968F\u65F6\u6682\u505C\u6216\u7EC8\u6B62\u60A8\u7684\u8D26\u53F7\u3002"
11226
+ title: "4. \u7528\u6237\u4E3E\u62A5\u4E0E\u7533\u8BC9\u6E20\u9053",
11227
+ desc: "\u5982\u53D1\u73B0\u4EFB\u4F55\u8FDD\u89C4\u751F\u6210\u5185\u5BB9\u6216\u4FB5\u6743\u884C\u4E3A\uFF0C\u8BF7\u7ACB\u5373\u5411\u5B89\u5168\u5408\u89C4\u56E2\u961F\u4E3E\u62A5\uFF08\u90AE\u7BB1\uFF1As@nolotus.com\uFF09\u3002\u6211\u4EEC\u5C06\u5728 24 \u5C0F\u65F6\u5185\u53D7\u7406\u9AD8\u4F18\u5148\u7EA7\u5B89\u5168\u4E8B\u4EF6\u5E76\u8FDB\u884C\u5904\u7F6E\u3002"
11228
+ },
11229
+ section5: {
11230
+ title: "5. \u5B89\u5168\u8054\u7CFB\u65B9\u5F0F",
11231
+ desc: "\u5B89\u5168\u4E0E\u4E3E\u62A5\u90AE\u7BB1\uFF1As@nolotus.com\uFF08\u8FD0\u8425\u65B9\uFF1ANolo\uFF09\u3002"
10939
11232
  }
10940
11233
  }
10941
11234
  }
10942
11235
  },
10943
11236
  ["zh-Hant" /* ZH_HANT */]: {
10944
11237
  translation: {
10945
- terms: {
10946
- title: "\u670D\u52D9\u689D\u6B3E",
10947
- lastUpdated: "\u6700\u5F8C\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E745\u670830\u65E5",
10948
- intro: "\u6B61\u8FCE\u4F7F\u7528 Nolo\u3002\u9020\u8A2A\u6216\u4F7F\u7528\u6211\u5011\u7684\u670D\u52D9\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u53D7\u672C\u670D\u52D9\u689D\u6B3E\u7684\u7D04\u675F\u3002",
11238
+ aup: {
11239
+ title: "AIGC \u53EF\u63A5\u53D7\u4F7F\u7528\u898F\u7BC4 (AUP)",
11240
+ lastUpdated: "\u6700\u5F8C\u66F4\u65B0\u65E5\u671F\uFF1A2026\u5E748\u670824\u65E5",
11241
+ intro: "\u6B61\u8FCE\u4F7F\u7528 Nolo\u3002\u672C\u898F\u7BC4\uFF08AUP\uFF09\u65E8\u5728\u660E\u78BA\u4F7F\u7528\u672C\u5E73\u53F0 AI \u751F\u6210\u670D\u52D9\u6642\u7684\u5167\u5BB9\u6A19\u6E96\u3001\u9055\u898F\u5206\u985E\u8207\u8655\u7F6E\u898F\u5247\uFF0C\u4FDD\u969C\u5065\u5EB7\u3001\u5B89\u5168\u3001\u8CA0\u8CAC\u4EFB\u7684 AI \u4F7F\u7528\u74B0\u5883\u3002",
10949
11242
  section1: {
10950
- title: "1. \u5E33\u865F\u8A3B\u518A",
10951
- desc: "\u60A8\u5728\u5EFA\u7ACB\u5E33\u865F\u6642\u5FC5\u9808\u63D0\u4F9B\u6E96\u78BA\u7684\u8CC7\u8A0A\u3002\u60A8\u6709\u8CAC\u4EFB\u59A5\u5584\u4FDD\u7BA1\u60A8\u7684\u5E33\u865F\u6191\u8B49\u3002"
11243
+ title: "1. \u56B4\u7981\u751F\u6210\u7684\u516D\u5927\u985E\u9055\u898F\u5167\u5BB9",
11244
+ desc: "\u4F7F\u7528\u8005\u56B4\u7981\u5229\u7528\u672C\u5E73\u53F0\u751F\u6210\u3001\u8A98\u5C0E\u751F\u6210\u6216\u50B3\u64AD\u5305\u542B\u4EE5\u4E0B\u5167\u5BB9\u7684\u6587\u5B57\u3001\u5716\u7247\u6216\u591A\u5A92\u9AD4\u6750\u6599\uFF1A",
11245
+ nsfw: "\u8272\u60C5\u8207\u4F4E\u4FD7 (NSFW)\uFF1A\u660E\u78BA\u7684\u6027\u884C\u70BA\u63CF\u5BEB\u3001\u8272\u60C5\u4EA4\u6613\u8CC7\u8A0A\u6216\u975E\u81EA\u9858\u6027\u5167\u5BB9\u3002",
11246
+ violence: "\u66B4\u529B\u8207\u8840\u8165\uFF1A\u6975\u7AEF\u66B4\u529B\u81F4\u6B98\u3001\u4EBA\u8EAB\u50B7\u5BB3\u3001\u9F13\u52F5\u81EA\u6B98\u81EA\u6BBA\u3001\u88FD\u4F5C\u5371\u96AA\u6B66\u5668\u7B49\u5167\u5BB9\u3002",
11247
+ hate: "\u4EC7\u6068\u8207\u9A37\u64FE\uFF1A\u57FA\u65BC\u7A2E\u65CF\u3001\u6C11\u65CF\u3001\u5B97\u6559\u3001\u6027\u5225\u3001\u6B98\u969C\u7B49\u7FA4\u9AD4\u7684\u6B67\u8996\u8A00\u8AD6\u3001\u7DB2\u8DEF\u9738\u51CC\u8207\u6050\u5687\u3002",
11248
+ childSafety: "\u5371\u5BB3\u672A\u6210\u5E74\u4EBA (CSAM)\uFF1A\u56B4\u683C\u96F6\u5BB9\u5FCD\u6D89\u53CA\u672A\u6210\u5E74\u4EBA\u7684\u4EFB\u4F55\u8272\u60C5\u3001\u525D\u524A\u6216\u8650\u5F85\u5167\u5BB9\u3002",
11249
+ deepfake: "\u6DF1\u5EA6\u507D\u9020\u8207\u5192\u7528\uFF1A\u672A\u7D93\u6388\u6B0A\u507D\u9020\u4ED6\u4EBA\u771F\u5BE6\u8096\u50CF/\u8072\u97F3\u3001\u5192\u5145\u516C\u773E\u4EBA\u7269\u3001\u5F9E\u4E8B\u8A50\u6B3A\u6216\u9020\u8B20\u3002",
11250
+ infringement: "\u4FB5\u5BB3\u667A\u6167\u8CA1\u7522\u6B0A\uFF1A\u660E\u77E5\u4FB5\u5BB3\u4ED6\u4EBA\u8457\u4F5C\u6B0A\u3001\u5546\u6A19\u6B0A\u6216\u5546\u696D\u79D8\u5BC6\u7684\u60E1\u610F\u751F\u6210\u8207\u50B3\u64AD\u3002"
10952
11251
  },
10953
11252
  section2: {
10954
- title: "2. \u5408\u898F\u4F7F\u7528",
10955
- desc: "\u60A8\u540C\u610F\u4E0D\u5C07\u672C\u670D\u52D9\u7528\u65BC\u4EFB\u4F55\u975E\u6CD5\u76EE\u7684\uFF0C\u4E5F\u4E0D\u5F9E\u4E8B\u4EFB\u4F55\u4FB5\u72AF\u4ED6\u4EBA\u5408\u6CD5\u6B0A\u76CA\u7684\u6D3B\u52D5\u3002"
11253
+ title: "2. \u5E73\u53F0\u5167\u5BB9\u5BE9\u6838\u6A5F\u5236",
11254
+ desc: "\u5E73\u53F0\u90E8\u7F72\u4E86\u591A\u5C64\u6B21\u81EA\u52D5\u5316\u5B89\u5168\u5BE9\u67E5\u6A5F\u5236\uFF08\u5305\u62EC\u8F38\u5165 Prompt \u654F\u611F\u8A5E\u6383\u63CF\u3001\u5373\u6642\u5B89\u5168\u6A21\u578B\u5206\u985E\u904E\u6FFE\u4EE5\u53CA\u8F38\u51FA\u5167\u5BB9\u6514\u622A\uFF09\uFF0C\u4E26\u8F14\u4EE5\u4EBA\u5DE5\u5DE1\u6AA2\u8207\u8907\u6838\u3002"
10956
11255
  },
10957
11256
  section3: {
10958
- title: "3. \u667A\u6167\u8CA1\u7522\u6B0A",
10959
- desc: "\u900F\u904E\u672C\u670D\u52D9\u63D0\u4F9B\u7684\u6240\u6709\u5167\u5BB9\u548C\u8EDF\u9AD4\u5747\u6B78 Nolo \u6216\u5176\u6388\u6B0A\u65B9\u6240\u6709\uFF0C\u53D7\u667A\u6167\u8CA1\u7522\u6B0A\u6CD5\u5F8B\u4FDD\u8B77\u3002"
11257
+ title: "3. \u9055\u898F\u8655\u7F6E\u63AA\u65BD",
11258
+ desc: "\u5E73\u53F0\u5C07\u8996\u60C5\u7BC0\u8F15\u91CD\u63A1\u53D6\u8B66\u544A\u3001\u4E0B\u67B6\u3001\u9650\u5236\u6B0A\u9650\u3001\u6C38\u4E45\u5C01\u865F\u6216\u79FB\u9001\u57F7\u6CD5\u6A5F\u95DC\u8655\u7F6E\u3002",
11259
+ warning: "1. \u8B66\u544A\u8207\u4E0B\u67B6\uFF1A\u767C\u51FA\u6B63\u5F0F\u8B66\u544A\u4E26\u7ACB\u5373\u522A\u9664\u9055\u898F\u5167\u5BB9\u3002",
11260
+ limit: "2. \u6B0A\u9650\u9650\u5236\uFF1A\u9650\u5236\u7279\u5B9A\u6A21\u578B\u6216\u51CD\u7D50\u90E8\u5206\u529F\u80FD\u3002",
11261
+ ban: "3. \u6C38\u4E45\u5C01\u865F\uFF1A\u56B4\u91CD\u9055\u898F\u7ACB\u5373\u6C38\u4E45\u7D42\u6B62\u5E33\u865F\u3002",
11262
+ legal: "4. \u79FB\u9001\u53F8\u6CD5\uFF1A\u6D89\u5ACC\u9055\u6CD5\u72AF\u7F6A\u7684\u4F9D\u6CD5\u5831\u544A\u57F7\u6CD5\u6A5F\u69CB\u3002"
10960
11263
  },
10961
11264
  section4: {
10962
- title: "4. \u7D42\u6B62\u670D\u52D9",
10963
- desc: "\u5982\u679C\u60A8\u9055\u53CD\u672C\u670D\u52D9\u689D\u6B3E\uFF0C\u6211\u5011\u6709\u6B0A\u96A8\u6642\u66AB\u505C\u6216\u7D42\u6B62\u60A8\u7684\u5E33\u865F\u3002"
11265
+ title: "4. \u4F7F\u7528\u8005\u6AA2\u8209\u8207\u7533\u8A34\u7BA1\u9053",
11266
+ desc: "\u6AA2\u8209\u4FE1\u7BB1\uFF1As@nolotus.com\uFF0C\u6211\u5011\u5C07\u5728 24 \u5C0F\u6642\u5167\u53D7\u7406\u4E26\u8655\u7F6E\u3002"
11267
+ },
11268
+ section5: {
11269
+ title: "5. \u5B89\u5168\u806F\u7D61\u65B9\u5F0F",
11270
+ desc: "\u5B89\u5168\u4FE1\u7BB1\uFF1As@nolotus.com\uFF08\u71DF\u904B\u65B9\uFF1ANolo\uFF09\u3002"
10964
11271
  }
10965
11272
  }
10966
11273
  }
10967
11274
  },
10968
11275
  ["ja" /* JA */]: {
10969
11276
  translation: {
10970
- terms: {
10971
- title: "\u5229\u7528\u898F\u7D04",
10972
- lastUpdated: "\u6700\u7D42\u66F4\u65B0\u65E5\uFF1A2026\u5E745\u670830\u65E5",
10973
- intro: "Nolo \u3078\u3088\u3046\u3053\u305D\u3002\u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u30A2\u30AF\u30BB\u30B9\u307E\u305F\u306F\u5229\u7528\u3059\u308B\u3053\u3068\u306B\u3088\u308A\u3001\u304A\u5BA2\u69D8\u306F\u672C\u5229\u7528\u898F\u7D04\u306B\u62D8\u675F\u3055\u308C\u308B\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002",
11277
+ aup: {
11278
+ title: "AIGC \u5229\u7528\u898F\u7D04 (AUP)",
11279
+ lastUpdated: "\u6700\u7D42\u66F4\u65B0\u65E5\uFF1A2026\u5E748\u670824\u65E5",
11280
+ intro: "Nolo AIGC \u5229\u7528\u898F\u7D04\u3002\u5B89\u5168\u3067\u8CAC\u4EFB\u3042\u308B AI \u5229\u7528\u74B0\u5883\u3092\u7DAD\u6301\u3059\u308B\u305F\u3081\u306E\u7981\u6B62\u4E8B\u9805\u3068\u30E2\u30C7\u30EC\u30FC\u30B7\u30E7\u30F3\u57FA\u6E96\u3002",
10974
11281
  section1: {
10975
- title: "1. \u30A2\u30AB\u30A6\u30F3\u30C8\u767B\u9332",
10976
- desc: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u6210\u3059\u308B\u969B\u3001\u6B63\u78BA\u306A\u60C5\u5831\u3092\u63D0\u4F9B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u8A8D\u8A3C\u60C5\u5831\u306E\u7BA1\u7406\u306F\u3054\u81EA\u8EAB\u306E\u8CAC\u4EFB\u3067\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002"
11282
+ title: "1. \u7981\u6B62\u30B3\u30F3\u30C6\u30F3\u30C4",
11283
+ desc: "\u6210\u4EBA\u5411\u3051/NSFW\u3001\u66B4\u529B/\u81EA\u50B7\u3001\u30D8\u30A4\u30C8\u30B9\u30D4\u30FC\u30C1\u3001\u5150\u7AE5\u643E\u53D6\u3001\u30C7\u30A3\u30FC\u30D7\u30D5\u30A7\u30A4\u30AF\u3001\u8457\u4F5C\u6A29\u4FB5\u5BB3\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u751F\u6210\u3092\u53B3\u683C\u306B\u7981\u6B62\u3057\u307E\u3059\u3002",
11284
+ nsfw: "\u6210\u4EBA\u5411\u3051/NSFW \u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u7981\u6B62",
11285
+ violence: "\u66B4\u529B\u30FB\u81EA\u50B7\u884C\u70BA\u306E\u7981\u6B62",
11286
+ hate: "\u5DEE\u5225\u30FB\u30D8\u30A4\u30C8\u30B9\u30D4\u30FC\u30C1\u306E\u7981\u6B62",
11287
+ childSafety: "\u5150\u7AE5\u5B89\u5168\u4FB5\u5BB3\u306E\u7981\u6B62\uFF08\u30BC\u30ED\u30C8\u30EC\u30E9\u30F3\u30B9\uFF09",
11288
+ deepfake: "\u7121\u65AD\u30C7\u30A3\u30FC\u30D7\u30D5\u30A7\u30A4\u30AF\u30FB\u306A\u308A\u3059\u307E\u3057\u306E\u7981\u6B62",
11289
+ infringement: "\u8457\u4F5C\u6A29\u4FB5\u5BB3\u306E\u7981\u6B62"
10977
11290
  },
10978
11291
  section2: {
10979
- title: "2. \u9069\u5207\u306A\u5229\u7528",
10980
- desc: "\u304A\u5BA2\u69D8\u306F\u3001\u672C\u30B5\u30FC\u30D3\u30B9\u3092\u9055\u6CD5\u306A\u76EE\u7684\u3067\u4F7F\u7528\u3057\u306A\u3044\u3053\u3068\u3001\u4ED6\u8005\u306E\u6A29\u5229\u3092\u4FB5\u5BB3\u3059\u308B\u6D3B\u52D5\u3092\u884C\u308F\u306A\u3044\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002"
11292
+ title: "2. \u30B3\u30F3\u30C6\u30F3\u30C4\u30E2\u30C7\u30EC\u30FC\u30B7\u30E7\u30F3",
11293
+ desc: "\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u81EA\u52D5\u30D5\u30A3\u30EB\u30BF\u30EA\u30F3\u30B0\u304A\u3088\u3073\u4EBA\u9593\u306B\u3088\u308B\u30EC\u30D3\u30E5\u30FC\u3092\u5B9F\u65BD\u3057\u3066\u3044\u307E\u3059\u3002"
10981
11294
  },
10982
11295
  section3: {
10983
- title: "3. \u77E5\u7684\u8CA1\u7523\u6A29",
10984
- desc: "\u672C\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3058\u3066\u63D0\u4F9B\u3055\u308C\u308B\u3059\u3079\u3066\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304A\u3088\u3073\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306F\u3001Nolo \u307E\u305F\u306F\u305D\u306E\u30E9\u30A4\u30BB\u30F3\u30B5\u30FC\u306E\u8CA1\u7523\u3067\u3042\u308A\u3001\u77E5\u7684\u8CA1\u7523\u6CD5\u306B\u3088\u3063\u3066\u4FDD\u8B77\u3055\u308C\u3066\u3044\u307E\u3059\u3002"
11296
+ title: "3. \u9055\u53CD\u6642\u306E\u63AA\u7F6E",
11297
+ desc: "\u8B66\u544A\u3001\u30B3\u30F3\u30C6\u30F3\u30C4\u524A\u9664\u3001\u6A5F\u80FD\u5236\u9650\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u6C38\u4E45\u505C\u6B62\u3001\u6CD5\u7684\u6A5F\u95A2\u3078\u306E\u5831\u544A\u3092\u884C\u3044\u307E\u3059\u3002",
11298
+ warning: "1. \u8B66\u544A\u3068\u30B3\u30F3\u30C6\u30F3\u30C4\u524A\u9664",
11299
+ limit: "2. \u30A2\u30AF\u30BB\u30B9\u5236\u9650",
11300
+ ban: "3. \u30A2\u30AB\u30A6\u30F3\u30C8\u6C38\u4E45\u505C\u6B62",
11301
+ legal: "4. \u6CD5\u7684\u6A5F\u95A2\u3078\u306E\u5831\u544A"
10985
11302
  },
10986
11303
  section4: {
10987
- title: "4. \u5229\u7528\u505C\u6B62",
10988
- desc: "\u672C\u5229\u7528\u898F\u7D04\u306B\u9055\u53CD\u3057\u305F\u5834\u5408\u3001\u5F53\u793E\u306F\u3044\u3064\u3067\u3082\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u505C\u6B62\u307E\u305F\u306F\u7D42\u4E86\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
11304
+ title: "4. \u901A\u5831\u7A93\u53E3",
11305
+ desc: "\u9055\u53CD\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u901A\u5831\u306F s@nolotus.com \u307E\u3067\u3054\u9023\u7D61\u304F\u3060\u3055\u3044\u3002"
11306
+ },
11307
+ section5: {
11308
+ title: "5. \u304A\u554F\u3044\u5408\u308F\u305B",
11309
+ desc: "\u5B89\u5168\u7A93\u53E3\uFF1As@nolotus.com (\u904B\u55B6\uFF1ANolo)"
10989
11310
  }
10990
11311
  }
10991
11312
  }
10992
11313
  }
10993
11314
  };
10994
11315
 
11316
+ // packages/app/i18n/translations/footer.locale.ts
11317
+ var footer_locale_default = {
11318
+ ["en" /* EN */]: {
11319
+ translation: {
11320
+ footer: {
11321
+ legal: "Legal",
11322
+ about: "About us",
11323
+ contact: "Contact us",
11324
+ rights: "All rights reserved."
11325
+ }
11326
+ }
11327
+ },
11328
+ ["zh-CN" /* ZH_CN */]: {
11329
+ translation: {
11330
+ footer: {
11331
+ legal: "\u6CD5\u5F8B\u6761\u6B3E",
11332
+ about: "\u5173\u4E8E\u6211\u4EEC",
11333
+ contact: "\u8054\u7CFB\u6211\u4EEC",
11334
+ rights: "\u4FDD\u7559\u6240\u6709\u6743\u5229\u3002"
11335
+ }
11336
+ }
11337
+ },
11338
+ ["zh-Hant" /* ZH_HANT */]: {
11339
+ translation: {
11340
+ footer: {
11341
+ legal: "\u6CD5\u5F8B\u689D\u6B3E",
11342
+ about: "\u95DC\u65BC\u6211\u5011",
11343
+ contact: "\u806F\u7D61\u6211\u5011",
11344
+ rights: "\u4FDD\u7559\u6240\u6709\u6B0A\u5229\u3002"
11345
+ }
11346
+ }
11347
+ },
11348
+ ["ja" /* JA */]: {
11349
+ translation: {
11350
+ footer: {
11351
+ legal: "\u6CD5\u7684\u4E8B\u9805",
11352
+ about: "\u4F1A\u793E\u6982\u8981",
11353
+ contact: "\u304A\u554F\u3044\u5408\u308F\u305B",
11354
+ rights: "All rights reserved."
11355
+ }
11356
+ }
11357
+ }
11358
+ };
11359
+
10995
11360
  // packages/app/i18n/translations/localFirst.locale.ts
10996
11361
  var localFirst_locale_default = {
10997
11362
  ["en" /* EN */]: {
@@ -11304,8 +11669,11 @@ var resources = {
11304
11669
  ...error_locale_default["en" /* EN */].translation,
11305
11670
  ...appBuilder_locale_default["en" /* EN */].translation,
11306
11671
  ...pricing_locale_default["en" /* EN */].translation,
11672
+ ...recharge_locale_default["en" /* EN */].translation,
11307
11673
  ...privacy_locale_default["en" /* EN */].translation,
11308
11674
  ...terms_locale_default["en" /* EN */].translation,
11675
+ ...aup_locale_default["en" /* EN */].translation,
11676
+ ...footer_locale_default["en" /* EN */].translation,
11309
11677
  ...localFirst_locale_default["en" /* EN */].translation,
11310
11678
  seo: seo_locale_default["en" /* EN */]
11311
11679
  },
@@ -11319,8 +11687,11 @@ var resources = {
11319
11687
  ...error_locale_default["zh-CN" /* ZH_CN */].translation,
11320
11688
  ...appBuilder_locale_default["zh-CN" /* ZH_CN */].translation,
11321
11689
  ...pricing_locale_default["zh-CN" /* ZH_CN */].translation,
11690
+ ...recharge_locale_default["zh-CN" /* ZH_CN */].translation,
11322
11691
  ...privacy_locale_default["zh-CN" /* ZH_CN */].translation,
11323
11692
  ...terms_locale_default["zh-CN" /* ZH_CN */].translation,
11693
+ ...aup_locale_default["zh-CN" /* ZH_CN */].translation,
11694
+ ...footer_locale_default["zh-CN" /* ZH_CN */].translation,
11324
11695
  ...localFirst_locale_default["zh-CN" /* ZH_CN */].translation,
11325
11696
  seo: seo_locale_default["zh-CN" /* ZH_CN */]
11326
11697
  },
@@ -11334,8 +11705,11 @@ var resources = {
11334
11705
  ...error_locale_default["zh-Hant" /* ZH_HANT */].translation,
11335
11706
  ...appBuilder_locale_default["zh-Hant" /* ZH_HANT */].translation,
11336
11707
  ...pricing_locale_default["zh-Hant" /* ZH_HANT */].translation,
11708
+ ...recharge_locale_default["zh-Hant" /* ZH_HANT */].translation,
11337
11709
  ...privacy_locale_default["zh-Hant" /* ZH_HANT */].translation,
11338
11710
  ...terms_locale_default["zh-Hant" /* ZH_HANT */].translation,
11711
+ ...aup_locale_default["zh-Hant" /* ZH_HANT */].translation,
11712
+ ...footer_locale_default["zh-Hant" /* ZH_HANT */].translation,
11339
11713
  ...localFirst_locale_default["zh-Hant" /* ZH_HANT */].translation,
11340
11714
  seo: seo_locale_default["zh-Hant" /* ZH_HANT */]
11341
11715
  },
@@ -11349,14 +11723,35 @@ var resources = {
11349
11723
  ...error_locale_default["ja" /* JA */].translation,
11350
11724
  ...appBuilder_locale_default["ja" /* JA */].translation,
11351
11725
  ...pricing_locale_default["ja" /* JA */].translation,
11726
+ ...recharge_locale_default["ja" /* JA */].translation,
11352
11727
  ...privacy_locale_default["ja" /* JA */].translation,
11353
11728
  ...terms_locale_default["ja" /* JA */].translation,
11729
+ ...aup_locale_default["ja" /* JA */].translation,
11730
+ ...footer_locale_default["ja" /* JA */].translation,
11354
11731
  ...localFirst_locale_default["ja" /* JA */].translation,
11355
11732
  seo: seo_locale_default["ja" /* JA */]
11356
11733
  },
11357
11734
  space: space_locale_default["ja" /* JA */].translation,
11358
11735
  ai: ai_locale_default["ja" /* JA */].translation,
11359
11736
  chat: chat_locale_default["ja" /* JA */].translation
11737
+ },
11738
+ ["ko" /* KO */]: {
11739
+ common: {
11740
+ ...interface_locale_default["ko" /* KO */]?.translation ?? interface_locale_default["en" /* EN */].translation,
11741
+ ...error_locale_default["ko" /* KO */]?.translation ?? error_locale_default["en" /* EN */].translation,
11742
+ ...appBuilder_locale_default["ko" /* KO */]?.translation ?? appBuilder_locale_default["en" /* EN */].translation,
11743
+ ...pricing_locale_default["ko" /* KO */]?.translation ?? pricing_locale_default["en" /* EN */].translation,
11744
+ ...recharge_locale_default["ko" /* KO */]?.translation ?? recharge_locale_default["en" /* EN */].translation,
11745
+ ...privacy_locale_default["ko" /* KO */]?.translation ?? privacy_locale_default["en" /* EN */].translation,
11746
+ ...terms_locale_default["ko" /* KO */]?.translation ?? terms_locale_default["en" /* EN */].translation,
11747
+ ...aup_locale_default["ko" /* KO */]?.translation ?? aup_locale_default["en" /* EN */].translation,
11748
+ ...footer_locale_default["ko" /* KO */]?.translation ?? footer_locale_default["en" /* EN */].translation,
11749
+ ...localFirst_locale_default["ko" /* KO */]?.translation ?? localFirst_locale_default["en" /* EN */].translation,
11750
+ seo: seo_locale_default["ko" /* KO */]
11751
+ },
11752
+ space: space_locale_default["ko" /* KO */]?.translation ?? space_locale_default["en" /* EN */].translation,
11753
+ ai: ai_locale_default["ko" /* KO */]?.translation ?? ai_locale_default["en" /* EN */].translation,
11754
+ chat: chat_locale_default["ko" /* KO */]?.translation ?? chat_locale_default["en" /* EN */].translation
11360
11755
  }
11361
11756
  };
11362
11757
  var i18nConfig = {
@@ -11383,7 +11778,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11383
11778
  workspace: { mode: "lease" }
11384
11779
  };
11385
11780
  var findModelConfig = async (modelName, provider) => {
11386
- const { ALL_MODELS } = await import("./models-OX2S5C6Q.js");
11781
+ const { ALL_MODELS } = await import("./models-L7S2EKPM.js");
11387
11782
  const name = toTrimmedString(modelName);
11388
11783
  const prov = toTrimmedString(provider ?? "");
11389
11784
  if (!name) return null;
@@ -11624,7 +12019,7 @@ var buildFormDataFromArgs = async (args) => {
11624
12019
  const trimmedModel = toTrimmedString(model);
11625
12020
  const trimmedProvider = toTrimmedString(provider);
11626
12021
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11627
- const { getModelPricing } = await import("./getPricing-L2ENXWHV.js");
12022
+ const { getModelPricing } = await import("./getPricing-P3E2WRIH.js");
11628
12023
  const normalizedTools = tools ?? [];
11629
12024
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11630
12025
  const formData = {
@@ -14688,7 +15083,8 @@ var readDialogFunctionSchema = {
14688
15083
  name: "readDialog",
14689
15084
  description: [
14690
15085
  "Read one persisted Nolo dialog, including metadata and recent messages.",
14691
- "Prefer the full dialog dbKey (dialog-<userId>-<id>) or a dialog URL; a bare id only resolves for the currently logged-in user and cannot reliably read other users' or cross-server dialogs. Use listDialogs first when the target dialog is unclear."
15086
+ "Prefer the full dialog dbKey (dialog-<userId>-<id>) or a dialog URL; a bare id only resolves for the currently logged-in user and cannot reliably read other users' or cross-server dialogs. Use listDialogs first when the target dialog is unclear.",
15087
+ "If a read fails, first confirm the dbKey via listDialogs; the returned meta includes runtime checkpoint/status info for agent-run dialogs; a local run's dialog lives in the local environment/local server and must be read there."
14692
15088
  ].join("\n"),
14693
15089
  parameters: {
14694
15090
  type: "object",
@@ -14907,7 +15303,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14907
15303
  const deletedDialogIds = [];
14908
15304
  const deletedDialogKeys = [];
14909
15305
  const failures = [];
14910
- const { deleteDialog } = await import("./dialogSlice-FFGLRCBL.js");
15306
+ const { deleteDialog } = await import("./dialogSlice-6BINHWQT.js");
14911
15307
  for (const target of targets) {
14912
15308
  try {
14913
15309
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -15182,7 +15578,7 @@ var readSkillDocFunctionSchema = {
15182
15578
  }
15183
15579
  };
15184
15580
  async function readSkillDocFunc(args, thunkApi) {
15185
- const { buildReadDocResult } = await import("./readDocTool-CSWD6NPC.js");
15581
+ const { buildReadDocResult } = await import("./readDocTool-Y7AB365O.js");
15186
15582
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
15187
15583
  if (typeof id !== "string" || !id.trim()) {
15188
15584
  throw new Error("readSkillDoc requires id or doc.");
@@ -20637,7 +21033,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
20637
21033
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
20638
21034
  async function addImageContentToSpace(input) {
20639
21035
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
20640
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-YVINZQTF.js")).addContentAction;
21036
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-KQ44UT2U.js")).addContentAction;
20641
21037
  await addContentAction2(
20642
21038
  {
20643
21039
  spaceId: input.spaceId,
@@ -21394,9 +21790,8 @@ var rememberMemoryFunctionSchema = {
21394
21790
  " - \u5F53\u524D\u4EFB\u52A1\u7684\u4E34\u65F6\u8FDB\u5EA6 \u2192 \u4E0D\u8981\u8C03\u7528\uFF0C\u8D70\u5BF9\u8BDD\u4E0A\u4E0B\u6587",
21395
21791
  "\u5199\u6210\u4E00\u53E5\u7B80\u6D01\u3001\u672A\u6765\u4ECD\u53EF\u7406\u89E3\u7684\u8BDD\u3002\u9ED8\u8BA4\u9759\u9ED8\u6267\u884C\uFF0C\u4E0D\u7528\u5411\u7528\u6237\u6C47\u62A5\u5DF2\u8BB0\u4F4F\u3002",
21396
21792
  "",
21397
- "\u3010\u5173\u952E\u89C4\u5219\u3011\u8BB0\u5FC6\u4E0D\u53EF\u7269\u7406\u5220\u9664\uFF0C\u53EA\u80FD\u964D\u7EA7/\u5F52\u6863/\u6807\u6CE8\u3002",
21398
- "\u7269\u7406\u5220\u9664\u4F1A\u5207\u65AD\u89E3\u91CA\u94FE\u2014\u2014\u7CFB\u7EDF\u65E0\u6CD5\u56DE\u7B54'\u4E3A\u4EC0\u4E48\u53D8\u4E86'\u3001'\u66FE\u7ECF\u4FE1\u4EC0\u4E48'\u3002",
21399
- "\u9519\u8BEF\u7684\u8BB0\u5FC6\u5E94\u901A\u8FC7 rememberMemory \u4FEE\u6B63\u5E76\u964D\u6743\uFF08\u964D\u4F4E\u7F6E\u4FE1\u5EA6\uFF09\uFF0C\u800C\u4E0D\u662F\u5220\u9664\u3002",
21793
+ "\u3010\u5173\u952E\u89C4\u5219\u3011\u65E5\u5E38\u9519\u8BEF\u8BB0\u5FC6\u4F18\u5148\u901A\u8FC7 rememberMemory \u4FEE\u6B63\u5E76\u964D\u6743\uFF08\u964D\u4F4E\u7F6E\u4FE1\u5EA6\uFF09\u6216\u5F52\u6863\uFF0C\u4FDD\u7559\u6863\u6848\u4E0E\u89E3\u91CA\u94FE\u3002",
21794
+ "\u3010\u5F3A\u5236\u5220\u9664\u4F8B\u5916\u3011\u4EC5\u5728\u7528\u6237\u660E\u786E/\u5F3A\u5236\u8981\u6C42\u5220\u9664\u4E14\u5728\u7528\u6237\u81EA\u8EAB\u6743\u9650\u8303\u56F4\u5185\u65F6\uFF0C\u624D\u5141\u8BB8\u6267\u884C\u7269\u7406\u5220\u9664\uFF08\u8C03\u7528 deleteMemory\uFF0C\u4E25\u683C\u9650\u5236\u4E8E\u5F53\u524D\u7528\u6237\u62E5\u6709\u7684\u8BB0\u5FC6\uFF09\u3002",
21400
21795
  "",
21401
21796
  "\u3010\u7F6E\u4FE1\u5EA6\u6765\u6E90\u3011\u6BCF\u6761\u8BB0\u5FC6\u5FC5\u987B\u6807\u6CE8\u6765\u6E90\uFF08\u4F9B\u53EC\u56DE\u65F6\u5224\u65AD\u53EF\u4FE1\u5EA6\uFF09\uFF1A",
21402
21797
  " - verified\uFF1A\u5DE5\u5177/\u547D\u4EE4\u5B9E\u6D4B\u9A8C\u8BC1\u8FC7\uFF08\u9AD8\u7F6E\u4FE1\u5EA6\uFF09",
@@ -21454,6 +21849,116 @@ async function rememberMemoryFunc(args, thunkApi) {
21454
21849
  };
21455
21850
  }
21456
21851
 
21852
+ // packages/ai/tools/deleteMemoryToolSchema.ts
21853
+ var deleteMemoryFunctionSchema = {
21854
+ name: "deleteMemory",
21855
+ description: [
21856
+ "\u5728\u7528\u6237\u660E\u786E/\u5F3A\u5236\u8981\u6C42\u4E0B\uFF0C\u5220\u9664\u7528\u6237\u81EA\u8EAB\u6743\u9650\u8303\u56F4\u5185\u7684\u957F\u671F\u8BB0\u5FC6\u3002",
21857
+ "\u3010\u4E24\u9636\u6BB5\u786E\u8BA4\u4E0E\u5B89\u5168\u9632\u62A4\u3011\u7269\u7406\u5220\u9664\u662F\u4E0D\u53EF\u9006\u64CD\u4F5C\uFF1A",
21858
+ " - \u521D\u6B21\u8C03\u7528\uFF08\u672A\u786E\u8BA4\uFF0Cconfirmed: false\uFF09\u4F1A\u8FDB\u884C Dry-Run \u9884\u68C0\u5E76\u8FD4\u56DE\u5339\u914D\u5230\u7684\u8BB0\u5FC6\u603B\u6570\u4E0E\u9884\u89C8\u5185\u5BB9\uFF1B",
21859
+ " - \u6A21\u578B\u5FC5\u987B\u5411\u7528\u6237\u6C47\u62A5\u9884\u68C0\u7ED3\u679C\uFF0C\u5728\u7528\u6237\u770B\u5230\u5E76\u660E\u786E\u786E\u8BA4\u540E\uFF0C\u4F20\u5165 confirmed: true \u624D\u4F1A\u771F\u6B63\u6267\u884C\u7269\u7406\u5220\u9664\u3002",
21860
+ "\u3010\u6743\u9650\u8FB9\u754C\u3011\u4E25\u683C\u4EC5\u9650\u4E8E\u5F53\u524D\u7528\u6237\u62E5\u6709\u7684\u8BB0\u5FC6\uFF08ownerType: user, ownerId: \u5F53\u524D\u7528\u6237\uFF09\uFF0C\u4E25\u7981\u8D8A\u6743\u5220\u9664\u4ED6\u4EBA\u6216\u7CFB\u7EDF\u6570\u636E\u3002",
21861
+ "\u3010\u7981\u6B62\u5168\u91CF\u6E05\u7A7A\u3011\u5FC5\u987B\u63D0\u4F9B\u81F3\u5C11\u4E00\u9879\u8FC7\u6EE4\u6761\u4EF6\uFF08ids\u3001contentKeyword\u3001tags \u7B49\uFF09\uFF0C\u7981\u6B62\u65E0\u6761\u4EF6\u5168\u91CF\u6E05\u7A7A\u3002",
21862
+ "\u652F\u6301\u6309 memoryIds (ids)\u3001\u5185\u5BB9\u5173\u952E\u8BCD/\u5B50\u4E32 (contentKeyword)\u3001\u79CD\u7C7B (kinds) \u6216\u6807\u7B7E (tags) \u8FDB\u884C\u5B9A\u5411\u5220\u9664\u3002"
21863
+ ].join("\n"),
21864
+ parameters: {
21865
+ type: "object",
21866
+ properties: {
21867
+ ids: {
21868
+ type: "array",
21869
+ items: { type: "string" },
21870
+ description: "\u53EF\u9009\u3002\u8981\u7CBE\u786E\u5220\u9664\u7684\u8BB0\u5FC6 ID \u5217\u8868\u3002"
21871
+ },
21872
+ contentKeyword: {
21873
+ type: "string",
21874
+ description: "\u53EF\u9009\u3002\u6309\u5185\u5BB9\u5173\u952E\u8BCD/\u5B50\u4E32\u5339\u914D\u8981\u5220\u9664\u7684\u8BB0\u5FC6\u5185\u5BB9\u3002"
21875
+ },
21876
+ kinds: {
21877
+ type: "array",
21878
+ items: {
21879
+ type: "string",
21880
+ enum: ["episodic", "semantic", "procedural"]
21881
+ },
21882
+ description: "\u53EF\u9009\u3002\u8FC7\u6EE4\u8981\u5220\u9664\u7684\u8BB0\u5FC6\u7C7B\u578B\u3002"
21883
+ },
21884
+ tags: {
21885
+ type: "array",
21886
+ items: { type: "string" },
21887
+ description: "\u53EF\u9009\u3002\u8FC7\u6EE4\u5305\u542B\u6307\u5B9A\u6807\u7B7E\u7684\u8BB0\u5FC6\u3002"
21888
+ },
21889
+ confirmed: {
21890
+ type: "boolean",
21891
+ description: "\u53EF\u9009\u3002\u4E24\u9636\u6BB5\u786E\u8BA4\u6807\u5FD7\u3002\u521D\u6B21\u8C03\u7528\u65F6\u4E3A false\uFF08\u4EC5\u83B7\u53D6\u9884\u89C8\uFF09\uFF1B\u53EA\u6709\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u6267\u884C\u5220\u9664\u540E\u624D\u4F20\u5165 true\u3002",
21892
+ default: false
21893
+ },
21894
+ deletionToken: {
21895
+ type: "string",
21896
+ description: "\u53EF\u9009\u3002\u9884\u68C0\u9636\u6BB5\u8FD4\u56DE\u7684\u9632\u7BE1\u6539 deletionToken\uFF0C\u786E\u8BA4\u9636\u6BB5\u53EF\u5E26\u56DE\u4EE5\u4FDD\u8BC1\u64CD\u4F5C\u539F\u5B50\u6027\u3002"
21897
+ },
21898
+ reason: {
21899
+ type: "string",
21900
+ description: "\u5FC5\u586B\u3002\u7528\u6237\u660E\u786E\u63D0\u51FA\u5220\u9664\u7684\u539F\u56E0\u6216\u6307\u4EE4\u63CF\u8FF0\u3002"
21901
+ }
21902
+ },
21903
+ required: ["reason"]
21904
+ }
21905
+ };
21906
+
21907
+ // packages/ai/tools/deleteMemoryTool.ts
21908
+ async function deleteMemoryFunc(args, thunkApi) {
21909
+ const reason = String(args.reason ?? "").trim();
21910
+ if (!reason && !args.ids?.length && !args.contentKeyword && !args.tags?.length) {
21911
+ throw new Error("deleteMemory \u9700\u8981\u63D0\u4F9B\u660E\u786E\u7684\u5220\u9664\u539F\u56E0\u4E0E\u81F3\u5C11\u4E00\u9879\u8FC7\u6EE4\u6761\u4EF6\uFF08ids\u3001contentKeyword \u6216 tags\uFF09\u3002");
21912
+ }
21913
+ const isConfirmed = args.confirmed === true;
21914
+ if (isConfirmed && !args.deletionToken?.trim()) {
21915
+ throw new Error(
21916
+ "deleteMemory \u5728\u786E\u8BA4\u5220\u9664\u9636\u6BB5\uFF08confirmed: true\uFF09\u5FC5\u987B\u63D0\u4F9B\u9884\u68C0\u9636\u6BB5\u83B7\u53D6\u7684 deletionToken\u3002\u8BF7\u5148\u8C03\u7528\u672C\u5DE5\u5177\u8FDB\u884C\u9884\u68C0\u9884\u89C8\u3002"
21917
+ );
21918
+ }
21919
+ const result = await callToolApi(
21920
+ thunkApi,
21921
+ "/api/memory/delete",
21922
+ {
21923
+ ids: args.ids,
21924
+ contentSubstring: args.contentKeyword,
21925
+ kinds: args.kinds,
21926
+ tags: args.tags,
21927
+ dryRun: !isConfirmed,
21928
+ deletionToken: args.deletionToken,
21929
+ reason
21930
+ },
21931
+ { withAuth: true }
21932
+ );
21933
+ if (!result || result.success === false) {
21934
+ throw new Error("\u5220\u9664\u957F\u671F\u8BB0\u5FC6\u8BF7\u6C42\u672A\u6210\u529F\u5B8C\u6210\u3002");
21935
+ }
21936
+ if (!isConfirmed) {
21937
+ const matched = result.matchedCount ?? 0;
21938
+ if (matched === 0) {
21939
+ return {
21940
+ rawData: result,
21941
+ displayData: "\u672A\u627E\u5230\u5339\u914D\u7684\u8BB0\u5FC6\uFF0C\u65E0\u9700\u5220\u9664\u3002"
21942
+ };
21943
+ }
21944
+ const previewList = (result.preview ?? []).map((item, idx) => `${idx + 1}. [${item.kind}] ${item.content}`).join("\n");
21945
+ return {
21946
+ rawData: result,
21947
+ displayData: [
21948
+ `\u3010\u5F85\u7528\u6237\u786E\u8BA4\u3011\u5339\u914D\u5230 ${matched} \u6761\u7B26\u5408\u6761\u4EF6\u7684\u8BB0\u5FC6\uFF0C\u5373\u5C06\u7269\u7406\u5220\u9664\u3002`,
21949
+ previewList ? `\u9884\u89C8\u524D ${result.preview?.length} \u6761\uFF1A
21950
+ ${previewList}` : "",
21951
+ `\u8FD9\u662F\u4E0D\u53EF\u9006\u64CD\u4F5C\u3002\u8BF7\u5411\u7528\u6237\u5C55\u793A\u4E0A\u8FF0\u9884\u89C8\u5E76\u83B7\u5F97\u660E\u786E\u786E\u8BA4\u3002\u786E\u8BA4\u540E\uFF0C\u8BF7\u4F20\u5165 confirmed: true${result.deletionToken ? ` \u4E0E deletionToken: "${result.deletionToken}"` : ""} \u518D\u6B21\u8C03\u7528\u672C\u5DE5\u5177\u3002`
21952
+ ].filter(Boolean).join("\n\n")
21953
+ };
21954
+ }
21955
+ const count = result.deletedCount ?? 0;
21956
+ return {
21957
+ rawData: result,
21958
+ displayData: `\u5DF2\u5728\u7528\u6237\u6743\u9650\u8303\u56F4\u5185\u786E\u8BA4\u5E76\u7269\u7406\u5220\u9664 ${count} \u6761\u8BB0\u5FC6\u3002`
21959
+ };
21960
+ }
21961
+
21457
21962
  // packages/ai/tools/queryMemoryToolSchema.ts
21458
21963
  var queryMemoryFunctionSchema = {
21459
21964
  name: "queryMemory",
@@ -22783,19 +23288,32 @@ ${text.slice(-SUMMARY_TAIL_CHARS)}`;
22783
23288
  // packages/ai/tools/agent/controlAgentRunTool.ts
22784
23289
  var controlAgentRunFunctionSchema = {
22785
23290
  name: "controlAgentRun",
22786
- description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u56DB\u4E2A\u6838\u5FC3 action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3001wait\uFF08\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF0CUnix wait \u8BED\u4E49\uFF1B\u53E6\u6709 todo \u67E5\u8BE2 runtime todo\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u6216\u53EB\u505C\u3002\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF1B\u8981\u540C\u6B65\u7ED3\u679C\u76F4\u63A5\u7528 startAgentRun(wait:true) \u6216\u672C\u5DE5\u5177 wait action\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002\u6CE8\u610F\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u7ECF\u5728\u72EC\u7ACB\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u672C\u5DE5\u5177\u662F\u7ED9\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5EA6\u7684\u2014\u2014\u4E0D\u5FC5\u4E3A\u4E86\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u628A\u8FD4\u56DE\u503C\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
23291
+ description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E94\u4E2A\u6838\u5FC3 action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3001append\uFF08\u5411\u8FD0\u884C\u4E2D\u6216\u7EC8\u6001\u4EFB\u52A1\u8FFD\u52A0\u65B0\u6307\u4EE4/\u7EA0\u504F\uFF09\u3001wait\uFF08\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF0CUnix wait \u8BED\u4E49\uFF1B\u53E6\u6709 todo \u67E5\u8BE2 runtime todo\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc + write\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002\u5F02\u6B65\u6D3E\u53D1\u540E\u7981\u6B62\u8F6E\u8BE2\u67E5\u8BE2\u2014\u2014\u4E0D\u8981\u53CD\u590D\u8C03 status \u7B49\u7ED3\u679C\uFF0C\u7528\u6237\u754C\u9762\u5DF2\u5728\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF1B\u8981\u540C\u6B65\u7ED3\u679C\u76F4\u63A5\u7528 startAgentRun(wait:true) \u6216\u672C\u5DE5\u5177 wait action\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002\u6CE8\u610F\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u7ECF\u5728\u72EC\u7ACB\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u672C\u5DE5\u5177\u662F\u7ED9\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5EA6\u7684\u2014\u2014\u4E0D\u5FC5\u4E3A\u4E86\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u628A\u8FD4\u56DE\u503C\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
22787
23292
  parameters: {
22788
23293
  type: "object",
22789
23294
  properties: {
22790
23295
  action: {
22791
23296
  type: "string",
22792
- enum: ["list", "status", "stop", "todo", "wait"],
22793
- description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\uFF1Bwait=\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF08Unix wait \u8BED\u4E49\uFF1B\u5BA2\u6237\u7AEF\u8BA2\u9605\u8BE5 dialog \u7684 SSE \u4E8B\u4EF6\u6D41\u7B49 done/failed\uFF0C\u5DF2\u7EC8\u6001\u7ACB\u5373\u8FD4\u56DE\uFF09\uFF1Btodo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF0C\u72B6\u6001\u7531\u5173\u8054 run \u63A8\u5BFC\uFF09\u3002"
23297
+ enum: ["list", "status", "stop", "todo", "wait", "append"],
23298
+ description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\uFF1Bappend=\u5411\u4EFB\u52A1\u8FFD\u52A0\u6307\u4EE4\uFF08\u8FD0\u884C\u4E2D\u5165\u961F\uFF0C\u7EC8\u6001 continuation\uFF09\uFF1Bwait=\u540C\u6B65\u7B49\u5F85 run \u5230\u8FBE\u7EC8\u6001\u5E76\u8FD4\u56DE\u7ED3\u679C\uFF08Unix wait \u8BED\u4E49\uFF1B\u5BA2\u6237\u7AEF\u8BA2\u9605\u8BE5 dialog \u7684 SSE \u4E8B\u4EF6\u6D41\u7B49 done/failed\uFF0C\u5DF2\u7EC8\u6001\u7ACB\u5373\u8FD4\u56DE\uFF09\uFF1Btodo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF0C\u72B6\u6001\u7531\u5173\u8054 run \u63A8\u5BFC\uFF09\u3002"
22794
23299
  },
22795
23300
  runId: {
22796
23301
  type: "string",
22797
23302
  description: "\u76EE\u6807 run \u7684 ID\uFF08startAgentRun \u8FD4\u56DE\u7684 runId\uFF09\u3002action=list \u65F6\u7701\u7565\u3002"
22798
23303
  },
23304
+ dialogKey: {
23305
+ type: "string",
23306
+ description: "\u53EF\u9009\u3002action=append \u65F6\u76EE\u6807 dialog \u7684 dbKey\uFF08\u5982 dialog-user-xxx\uFF09\u3002\u7F3A\u7701\u65F6\u7531 runId \u63A8\u5BFC\u3002"
23307
+ },
23308
+ userInput: {
23309
+ type: "string",
23310
+ description: "action=append \u65F6\u8FFD\u52A0\u7ED9\u8BE5\u4EFB\u52A1\u7684\u65B0\u6307\u4EE4\u6216\u7EA0\u504F\u6587\u672C\u3002"
23311
+ },
23312
+ mode: {
23313
+ type: "string",
23314
+ enum: ["enqueue", "continue"],
23315
+ description: "\u53EF\u9009\u3002action=append \u65F6\u7684\u8FFD\u52A0\u6A21\u5F0F\uFF1Aenqueue=\u52A0\u5165\u961F\u5217\u4F9B\u4E0B\u4E00\u8F6E\u6D88\u8D39\uFF1Bcontinue=\u7EC8\u6001\u7EED\u8DD1\u3002\u7F3A\u7701\u65F6\u81EA\u52A8\u6839\u636E run \u72B6\u6001\u9002\u914D\u3002"
23316
+ },
22799
23317
  timeoutMs: {
22800
23318
  type: "number",
22801
23319
  description: '\u53EF\u9009\u3002action=wait \u7684\u7B49\u5F85\u4E0A\u9650\uFF08\u6BEB\u79D2\uFF09\uFF0C\u9ED8\u8BA4 100000\uFF08100s\uFF09\u3002\u8D85\u8FC7\u4E0A\u9650\u4ECD\u672A\u5230\u8FBE\u7EC8\u6001\u65F6\u8FD4\u56DE status="timeout"\uFF08\u4E0D\u662F\u5931\u8D25\uFF09\uFF0C\u53EF\u7A0D\u540E\u518D wait \u6216\u6539\u7528 status/stop\u3002',
@@ -22832,53 +23350,91 @@ var controlAgentRunFunctionSchema = {
22832
23350
  }
22833
23351
  };
22834
23352
  async function controlAgentRunFunc(args, thunkApi, _context) {
22835
- const { action, runId, tailLines, timeoutMs, batchId, status, statusFilter, limit, offset } = args;
23353
+ const { action, runId, dialogKey, userInput, mode, tailLines, timeoutMs, batchId, status, statusFilter, limit, offset } = args;
22836
23354
  if (action === "list") {
22837
23355
  return handleList(thunkApi, { batchId, status, statusFilter, limit, offset });
22838
23356
  }
22839
23357
  if (action === "todo") {
22840
23358
  return handleTodo(thunkApi, { status });
22841
23359
  }
23360
+ if (action === "append") {
23361
+ if (!userInput) {
23362
+ throw new Error("controlAgentRun(append): userInput is required");
23363
+ }
23364
+ return handleAppend(thunkApi, { runId, dialogKey, userInput, mode });
23365
+ }
22842
23366
  if (action === "status") {
22843
- if (!runId) throw new Error('controlAgentRun(action:"status"): \u7F3A\u5C11 runId\u3002');
23367
+ if (!runId) {
23368
+ throw new Error("controlAgentRun(status): runId is required");
23369
+ }
22844
23370
  return handleStatus(thunkApi, { runId, tailLines: tailLines ?? 0 });
22845
23371
  }
22846
23372
  if (action === "stop") {
22847
- if (!runId) throw new Error('controlAgentRun(action:"stop"): \u7F3A\u5C11 runId\u3002');
23373
+ if (!runId) {
23374
+ throw new Error("controlAgentRun(stop): runId is required");
23375
+ }
22848
23376
  return handleStop(thunkApi, { runId });
22849
23377
  }
22850
23378
  if (action === "wait") {
22851
- if (!runId) throw new Error('controlAgentRun(action:"wait"): \u7F3A\u5C11 runId\u3002');
22852
- return handleWait(thunkApi, { runId, timeoutMs, signal: _context?.signal });
23379
+ if (!runId) {
23380
+ throw new Error("controlAgentRun(wait): runId is required");
23381
+ }
23382
+ return handleWait(thunkApi, { runId, timeoutMs });
22853
23383
  }
22854
- throw new Error(`controlAgentRun: \u672A\u77E5 action "${action}"\u3002`);
23384
+ throw new Error(`controlAgentRun: unknown action "${action}"`);
22855
23385
  }
22856
23386
  async function handleList(thunkApi, opts) {
22857
23387
  try {
22858
- const body = { action: "list" };
22859
- const statusVal = opts.status ?? opts.statusFilter;
22860
- if (statusVal) body.statusFilter = statusVal;
22861
- if (opts.batchId) body.batchId = opts.batchId;
22862
- if (opts.limit !== void 0) body.limit = opts.limit;
22863
- if (opts.offset !== void 0) body.offset = opts.offset;
22864
23388
  const data = await callToolApi(
22865
23389
  thunkApi,
22866
23390
  "/api/agent/runs/control",
22867
- body,
23391
+ {
23392
+ action: "list",
23393
+ batchId: opts.batchId,
23394
+ status: opts.status,
23395
+ statusFilter: opts.statusFilter,
23396
+ limit: opts.limit,
23397
+ offset: opts.offset
23398
+ },
22868
23399
  { withAuth: true }
22869
23400
  );
22870
- const resData = data?.data ?? data;
22871
- const runs = resData?.runs ?? [];
22872
- const total = typeof resData?.total === "number" ? resData.total : runs.length;
22873
- const hasMore = typeof resData?.hasMore === "boolean" ? resData.hasMore : false;
23401
+ const runs = data?.data?.runs ?? data?.runs ?? [];
23402
+ const count = data?.data?.count ?? data?.count ?? runs.length;
23403
+ const total = data?.data?.total ?? data?.total ?? count;
23404
+ const hasMore = data?.data?.hasMore ?? data?.hasMore ?? false;
23405
+ const batchSummary = data?.data?.batchSummary ?? data?.batchSummary;
22874
23406
  return {
22875
- rawData: { runs, count: runs.length, total, hasMore },
22876
- displayData: formatListRunsCard(runs)
23407
+ rawData: {
23408
+ runs,
23409
+ count,
23410
+ total,
23411
+ hasMore,
23412
+ ...batchSummary ? { batchSummary } : {}
23413
+ },
23414
+ displayData: formatListRunsCard(runs, { count, total, hasMore, batchSummary })
22877
23415
  };
22878
23416
  } catch (e) {
22879
23417
  throw new Error(`controlAgentRun(list) \u5931\u8D25: ${toErrorMessage(e)}`);
22880
23418
  }
22881
23419
  }
23420
+ async function handleTodo(thunkApi, opts) {
23421
+ try {
23422
+ const data = await callToolApi(
23423
+ thunkApi,
23424
+ "/api/agent/runs/control",
23425
+ { action: "todo", status: opts.status },
23426
+ { withAuth: true }
23427
+ );
23428
+ const todos = data?.data?.todos ?? data?.todos ?? [];
23429
+ return {
23430
+ rawData: { todos },
23431
+ displayData: `Runtime Todo (${todos.length}):
23432
+ ${JSON.stringify(todos, null, 2)}`
23433
+ };
23434
+ } catch (e) {
23435
+ throw new Error(`controlAgentRun(todo) \u5931\u8D25: ${toErrorMessage(e)}`);
23436
+ }
23437
+ }
22882
23438
  async function handleStatus(thunkApi, opts) {
22883
23439
  try {
22884
23440
  const data = await callToolApi(
@@ -22888,11 +23444,10 @@ async function handleStatus(thunkApi, opts) {
22888
23444
  { withAuth: true }
22889
23445
  );
22890
23446
  const resData = data?.data ?? data;
22891
- if (!resData || resData.found === false || !resData.run) {
23447
+ if (!resData || resData.found === false) {
22892
23448
  return {
22893
- rawData: { runId: opts.runId, found: false },
22894
- displayData: `Run status
22895
- ? not_found`
23449
+ rawData: { found: false, runId: opts.runId },
23450
+ displayData: `\u672A\u627E\u5230 runId \u4E3A ${opts.runId} \u7684\u8FD0\u884C\u8BB0\u5F55\u3002`
22896
23451
  };
22897
23452
  }
22898
23453
  const run = resData.run;
@@ -22932,132 +23487,102 @@ async function handleStop(thunkApi, opts) {
22932
23487
  throw new Error(`controlAgentRun(stop) \u5931\u8D25: ${toErrorMessage(e)}`);
22933
23488
  }
22934
23489
  }
22935
- var WAIT_TERMINAL_STATUSES = /* @__PURE__ */ new Set(["done", "failed", "cancelled", "orphaned"]);
22936
- var DEFAULT_WAIT_TIMEOUT_MS = 1e5;
22937
- var WAIT_INTERRUPTED_ERROR_NAME = "AgentWaitInterruptedError";
22938
- function createWaitInterruptedError() {
22939
- const err = new Error(
22940
- "\u7B49\u5F85\u88AB\u4E2D\u6B62\uFF1ASSE \u8BA2\u9605\u5DF2\u4E2D\u65AD\uFF08\u5916\u90E8\u53D6\u6D88\u6216\u8FDE\u63A5\u6E05\u7406\uFF09\uFF0C\u672A\u6536\u5230 done/failed \u4E8B\u4EF6\uFF0C\u4E0D\u662F\u6210\u529F\u5B8C\u6210"
22941
- );
22942
- err.name = WAIT_INTERRUPTED_ERROR_NAME;
22943
- return err;
22944
- }
22945
- async function handleWait(thunkApi, opts) {
22946
- const timeoutMs = opts.timeoutMs && opts.timeoutMs > 0 ? opts.timeoutMs : DEFAULT_WAIT_TIMEOUT_MS;
22947
- const { currentServer, token } = getToolRequestContext(thunkApi);
22948
- const authHeader = token ? `Bearer ${token}` : "";
22949
- const abortController = new AbortController();
22950
- const externalSignal = opts.signal;
22951
- const onExternalAbort = () => abortController.abort();
22952
- if (externalSignal) {
22953
- if (externalSignal.aborted) {
22954
- abortController.abort();
22955
- } else {
22956
- externalSignal.addEventListener("abort", onExternalAbort, { once: true });
22957
- }
22958
- }
22959
- const sseSignal = abortController.signal;
22960
- let timer;
23490
+ async function handleAppend(thunkApi, opts) {
22961
23491
  try {
22962
- if (sseSignal.aborted) throw createWaitInterruptedError();
23492
+ const requestContext = getToolRequestContext(thunkApi);
23493
+ const resolvedKey = opts.dialogKey || (opts.runId?.startsWith("dialog-") ? opts.runId : opts.runId && requestContext?.userId ? `dialog-${requestContext.userId}-${opts.runId}` : opts.runId);
23494
+ if (!resolvedKey) {
23495
+ throw new Error("dialogKey or runId is required to append an instruction");
23496
+ }
22963
23497
  const data = await callToolApi(
22964
23498
  thunkApi,
22965
23499
  "/api/agent/runs/control",
22966
- { action: "status", runId: opts.runId },
23500
+ {
23501
+ action: "append",
23502
+ dialogKey: resolvedKey,
23503
+ userInput: opts.userInput,
23504
+ ...opts.mode ? { mode: opts.mode } : {}
23505
+ },
22967
23506
  { withAuth: true }
22968
23507
  );
22969
23508
  const resData = data?.data ?? data;
22970
- if (!resData || resData.found === false || !resData.run) {
22971
- throw new Error(`run ${opts.runId} \u4E0D\u5B58\u5728\u6216\u4E0D\u53EF\u89C1`);
22972
- }
22973
- const run = resData.run;
22974
- if (WAIT_TERMINAL_STATUSES.has(run.status)) {
22975
- return {
22976
- rawData: { runId: opts.runId, status: run.status, content: run.lastAssistantText ?? "" },
22977
- displayData: `\u2705 controlAgentRun(wait) \u5B8C\u6210\uFF0Crun ${opts.runId} \u5DF2\u5904\u4E8E\u7EC8\u6001 ${run.status}`
22978
- };
22979
- }
22980
- if (sseSignal.aborted) throw createWaitInterruptedError();
22981
- const outcome = await new Promise((resolve, reject) => {
22982
- let settled = false;
22983
- const settle = (fn) => {
22984
- if (settled) return;
22985
- settled = true;
22986
- fn();
22987
- };
22988
- listenToDialogEvents(
22989
- opts.runId,
22990
- currentServer,
22991
- authHeader,
22992
- sseSignal,
22993
- void 0,
22994
- (result) => settle(() => resolve({ kind: "done", dialogId: result.dialogId, content: result.content })),
22995
- (errMsg) => settle(() => reject(new Error(errMsg)))
22996
- ).then(
22997
- (r) => {
22998
- if (settled) return;
22999
- if (sseSignal.aborted) {
23000
- settle(() => reject(createWaitInterruptedError()));
23001
- } else if (r && ("content" in r || "usage" in r)) {
23002
- settle(() => resolve({ kind: "done", dialogId: r.dialogId, content: r.content }));
23003
- } else {
23004
- settle(() => reject(new Error("\u4E8B\u4EF6\u6D41\u610F\u5916\u5173\u95ED\uFF0C\u672A\u6536\u5230 done/failed \u4E8B\u4EF6")));
23005
- }
23006
- },
23007
- (e) => {
23008
- if (settled) return;
23009
- if (isAbortError(e)) {
23010
- settle(() => reject(e));
23011
- } else if (sseSignal.aborted) {
23012
- settle(() => reject(createWaitInterruptedError()));
23013
- } else {
23014
- settle(() => reject(e));
23015
- }
23016
- }
23017
- );
23018
- timer = setTimeout(() => {
23019
- abortController.abort();
23020
- settle(() => resolve({ kind: "timeout", waitedMs: timeoutMs }));
23021
- }, timeoutMs);
23022
- });
23023
- if (outcome.kind === "timeout") {
23024
- return {
23025
- rawData: { runId: opts.runId, status: "timeout", waitedMs: outcome.waitedMs },
23026
- displayData: `\u23F3 controlAgentRun(wait) \u5DF2\u7B49\u5F85 ${Math.round(outcome.waitedMs / 1e3)}s \u4ECD\u672A\u5B8C\u6210\uFF0C\u672A\u8FBE\u7EC8\u6001\uFF1B\u53EF\u7A0D\u540E\u518D wait\uFF0C\u6216\u6539\u7528 status/stop\u3002`
23027
- };
23028
- }
23029
23509
  return {
23030
- rawData: { runId: opts.runId, status: "done", content: outcome.content ?? "" },
23031
- displayData: `\u2705 controlAgentRun(wait) \u5B8C\u6210\uFF0CdialogId: ${outcome.dialogId}`
23510
+ rawData: resData,
23511
+ displayData: `\u8FFD\u52A0\u6307\u4EE4\u6210\u529F [${resData.mode ?? "append"}]: ${resData.message ?? "\u5DF2\u63D0\u4EA4"}${typeof resData.queued === "number" ? ` (\u6392\u961F\u6570: ${resData.queued})` : ""}`
23032
23512
  };
23033
23513
  } catch (e) {
23034
- if (isAbortError(e) || e?.name === WAIT_INTERRUPTED_ERROR_NAME) throw e;
23035
- throw new Error(`controlAgentRun(wait) \u5931\u8D25: ${toErrorMessage(e)}`);
23036
- } finally {
23037
- if (timer) clearTimeout(timer);
23038
- if (externalSignal) externalSignal.removeEventListener("abort", onExternalAbort);
23514
+ throw new Error(`controlAgentRun(append) \u5931\u8D25: ${toErrorMessage(e)}`);
23039
23515
  }
23040
23516
  }
23041
- async function handleTodo(thunkApi, opts) {
23517
+ async function handleWait(thunkApi, opts) {
23518
+ const timeoutMs = opts.timeoutMs ?? 1e5;
23519
+ const requestContext = getToolRequestContext(thunkApi);
23520
+ const serverBase = requestContext?.serverBase;
23042
23521
  try {
23043
- const body = { action: "todo" };
23044
- if (opts.status) body.status = opts.status;
23045
- const data = await callToolApi(
23522
+ const initial = await callToolApi(
23046
23523
  thunkApi,
23047
23524
  "/api/agent/runs/control",
23048
- body,
23525
+ { action: "status", runId: opts.runId, tailLines: 0 },
23049
23526
  { withAuth: true }
23050
23527
  );
23051
- const resData = data?.data ?? data;
23052
- const todos = resData?.todos ?? [];
23528
+ const initialRun = initial?.data?.run ?? initial?.run;
23529
+ if (!initialRun) {
23530
+ return {
23531
+ rawData: { found: false, runId: opts.runId, status: "not_found" },
23532
+ displayData: `\u672A\u627E\u5230 runId \u4E3A ${opts.runId} \u7684\u8FD0\u884C\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u7B49\u5F85\u3002`
23533
+ };
23534
+ }
23535
+ const terminalStatuses = ["done", "failed", "cancelled", "orphaned"];
23536
+ if (terminalStatuses.includes(initialRun.status)) {
23537
+ const name2 = resolveRunLabel(initialRun);
23538
+ return {
23539
+ rawData: { found: true, ...initialRun },
23540
+ displayData: formatStatusRunCard(name2, initialRun.status, {
23541
+ runId: opts.runId,
23542
+ lastToolNames: initialRun.lastToolNames,
23543
+ toolCallCount: initialRun.toolCallCount,
23544
+ lastAssistantText: initialRun.lastAssistantText,
23545
+ errorMessage: initialRun.errorMessage,
23546
+ timing: { startedAt: initialRun.startedAt, finishedAt: initialRun.finishedAt }
23547
+ })
23548
+ };
23549
+ }
23550
+ const terminalEvent = await listenToDialogEvents({
23551
+ dialogId: opts.runId,
23552
+ serverBase,
23553
+ timeoutMs
23554
+ });
23555
+ const status = terminalEvent.type === "done" ? "done" : terminalEvent.type === "failed" ? "failed" : terminalEvent.type === "timeout" ? "timeout" : terminalEvent.type === "cancelled" ? "cancelled" : "unknown";
23556
+ const rawData = {
23557
+ runId: opts.runId,
23558
+ found: true,
23559
+ status,
23560
+ ...terminalEvent.text ? { lastAssistantText: terminalEvent.text } : {},
23561
+ ...terminalEvent.error ? { errorMessage: terminalEvent.error } : {}
23562
+ };
23563
+ if (status === "timeout") {
23564
+ return {
23565
+ rawData,
23566
+ displayData: `\u7B49\u5F85\u8D85\u65F6\uFF08\u4E0A\u9650 ${timeoutMs}ms\uFF09\uFF0CrunId: ${opts.runId} \u4ECD\u5728\u8FD0\u884C\u4E2D\u3002\u53EF\u7A0D\u540E\u518D wait \u6216\u6539\u7528 status/stop\u3002`
23567
+ };
23568
+ }
23569
+ const name = resolveRunLabel(initialRun);
23053
23570
  return {
23054
- rawData: { todos, count: todos.length },
23055
- displayData: formatListRunsCard(
23056
- todos.map((t) => ({ agentName: t?.title ?? t?.id, status: t?.status }))
23057
- )
23571
+ rawData,
23572
+ displayData: formatStatusRunCard(name, status, {
23573
+ runId: opts.runId,
23574
+ lastAssistantText: terminalEvent.text,
23575
+ errorMessage: terminalEvent.error
23576
+ })
23058
23577
  };
23059
23578
  } catch (e) {
23060
- throw new Error(`controlAgentRun(todo) \u5931\u8D25: ${toErrorMessage(e)}`);
23579
+ if (isAbortError(e)) {
23580
+ return {
23581
+ rawData: { runId: opts.runId, status: "aborted" },
23582
+ displayData: `\u7B49\u5F85\u5DF2\u4E2D\u65AD\uFF08runId: ${opts.runId}\uFF09\u3002`
23583
+ };
23584
+ }
23585
+ throw new Error(`controlAgentRun(wait) \u5931\u8D25: ${toErrorMessage(e)}`);
23061
23586
  }
23062
23587
  }
23063
23588
 
@@ -23451,7 +23976,7 @@ var codeSearchFunctionSchema = {
23451
23976
  "",
23452
23977
  "\u63A8\u8350\u573A\u666F\uFF1A",
23453
23978
  "- mode=content\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u4EE3\u7801\u5185\u5BB9\uFF0C\u66FF\u4EE3\u65E7\u7684 searchRepo\u3002",
23454
- "- mode=files\uFF1A\u6309\u8DEF\u5F84\u8303\u56F4\u548C glob \u5217\u51FA\u6587\u4EF6\uFF0C\u66FF\u4EE3\u65E7\u7684 listFiles\u3002",
23979
+ "- mode=files\uFF1A\u6309\u8DEF\u5F84\u8303\u56F4\u548C glob \u5217\u51FA\u6587\u4EF6\u3002",
23455
23980
  "",
23456
23981
  "\u53C2\u6570\u8BF4\u660E\uFF1A",
23457
23982
  "- query\uFF1A\u641C\u7D22\u6587\u672C\uFF1Bmode=content \u65F6\u5FC5\u586B\uFF0Cmode=files \u65F6\u53EF\u7701\u7565\u3002",
@@ -23985,7 +24510,7 @@ var codeToolDefinitions = [
23985
24510
  executor: codeSearchFunc,
23986
24511
  description: {
23987
24512
  name: "codeSearch",
23988
- description: "\u57FA\u4E8E rg \u641C\u7D22\u4EE3\u7801\u5185\u5BB9\u6216\u5217\u51FA\u6587\u4EF6\uFF0C\u7EDF\u4E00\u66FF\u4EE3\u65E7\u7684 searchRepo/listFiles\u3002",
24513
+ description: "\u57FA\u4E8E rg \u641C\u7D22\u4EE3\u7801\u5185\u5BB9\u6216\u5217\u51FA\u6587\u4EF6\uFF0C\u57FA\u4E8E ripgrep \u641C\u7D22\u4EE3\u7801\u6216\u5217\u51FA\u6587\u4EF6\u3002",
23989
24514
  category: "\u4EE3\u7801\u5206\u6790"
23990
24515
  },
23991
24516
  behavior: "data",
@@ -24325,7 +24850,7 @@ var executeToolRun = createAsyncThunk(
24325
24850
  if (!executionInput) {
24326
24851
  throw new Error(`ToolRun ${id} has no input to execute with.`);
24327
24852
  }
24328
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-2SI3FXLL.js");
24853
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-ZELMSJZ3.js");
24329
24854
  const { executor } = findToolExecutor2(run.toolName);
24330
24855
  toolRunStarted({
24331
24856
  id: run.id,
@@ -24349,7 +24874,7 @@ var executeToolRun = createAsyncThunk(
24349
24874
  const latestState = thunkApi.getState();
24350
24875
  const userId = latestState.auth?.currentUser?.userId;
24351
24876
  if (userId) {
24352
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-43BNF22B.js");
24877
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-Z3BGCLGX.js");
24353
24878
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
24354
24879
  }
24355
24880
  }
@@ -25855,7 +26380,7 @@ ${styleSystemHint}
25855
26380
  }
25856
26381
  var appFileListFunctionSchema = {
25857
26382
  name: "appFileList",
25858
- description: "\u5217\u51FA Nolo React SSR \u5E94\u7528\u6E90\u7801\u5DE5\u4F5C\u533A\u7684\u6587\u4EF6\u6E05\u5355\u3002\u5B83\u662F App Builder \u53D7\u9650\u7248 listFiles\uFF1A\u53EA\u7ED1\u5B9A\u5F53\u524D app \u6E90\u7801 workspace\uFF0C\u4E0D\u4F1A\u8FD4\u56DE\u5B8C\u6574\u6E90\u7801\u3002",
26383
+ description: "\u5217\u51FA Nolo React SSR \u5E94\u7528\u6E90\u7801\u5DE5\u4F5C\u533A\u7684\u6587\u4EF6\u6E05\u5355\u3002\u5B83\u662F App Builder \u53D7\u9650\u7248\u6587\u4EF6\u5217\u8868\uFF1A\u53EA\u7ED1\u5B9A\u5F53\u524D app \u6E90\u7801 workspace\uFF0C\u4E0D\u4F1A\u8FD4\u56DE\u5B8C\u6574\u6E90\u7801\u3002",
25859
26384
  parameters: {
25860
26385
  type: "object",
25861
26386
  properties: {
@@ -25895,7 +26420,7 @@ var appFileReadFunctionSchema = {
25895
26420
  };
25896
26421
  var appFileSearchFunctionSchema = {
25897
26422
  name: "appFileSearch",
25898
- description: "\u5728 Nolo React SSR \u5E94\u7528\u6E90\u7801\u5DE5\u4F5C\u533A\u641C\u7D22\u5173\u952E\u8BCD\u6216\u6B63\u5219\u3002\u5B83\u662F App Builder \u53D7\u9650\u7248 searchFiles\uFF1B\u5148\u5B9A\u4F4D\u547D\u4E2D\u884C\uFF0C\u518D\u7528 appFileRead \u8BFB\u53D6\u8303\u56F4\u6216 appFileReplace \u7CBE\u786E\u7F16\u8F91\u3002",
26423
+ description: "\u5728 Nolo React SSR \u5E94\u7528\u6E90\u7801\u5DE5\u4F5C\u533A\u641C\u7D22\u5173\u952E\u8BCD\u6216\u6B63\u5219\u3002\u5B83\u662F App Builder \u53D7\u9650\u7248\u4EE3\u7801\u641C\u7D22\uFF1B\u5148\u5B9A\u4F4D\u547D\u4E2D\u884C\uFF0C\u518D\u7528 appFileRead \u8BFB\u53D6\u8303\u56F4\u6216 appFileReplace \u7CBE\u786E\u7F16\u8F91\u3002",
25899
26424
  parameters: {
25900
26425
  type: "object",
25901
26426
  properties: {
@@ -26832,7 +27357,7 @@ async function updateDocFunc(args, thunkApi) {
26832
27357
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
26833
27358
  };
26834
27359
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
26835
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-EDAE7RNT.js");
27360
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-SIUFLABN.js");
26836
27361
  if (getDocState().pageKey === id) {
26837
27362
  applyExternalDocUpdate({
26838
27363
  slateData: finalSlateData,
@@ -26857,7 +27382,7 @@ async function updateDocFunc(args, thunkApi) {
26857
27382
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
26858
27383
  async function dispatchSetSettings(thunkApi, changes) {
26859
27384
  const injectedSetSettings = thunkApi?.extra?.setSettings;
26860
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-FIFOQ6OR.js")).setSettings;
27385
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-GPLI6E3M.js")).setSettings;
26861
27386
  await thunkApi.dispatch(setSettings(changes)).unwrap();
26862
27387
  }
26863
27388
  var updateUserPreferenceProfileFunctionSchema = {
@@ -27482,6 +28007,17 @@ var baseToolDefinitions = [
27482
28007
  },
27483
28008
  behavior: "action"
27484
28009
  },
28010
+ {
28011
+ id: "deleteMemory",
28012
+ schema: deleteMemoryFunctionSchema,
28013
+ executor: deleteMemoryFunc,
28014
+ description: {
28015
+ name: "deleteMemory",
28016
+ description: "\u5728\u7528\u6237\u660E\u786E/\u5F3A\u5236\u8981\u6C42\u4E0B\uFF0C\u5220\u9664\u7528\u6237\u6743\u9650\u8303\u56F4\u5185\u7684\u957F\u671F\u8BB0\u5FC6\u3002",
28017
+ category: "\u8BB0\u5FC6 / \u957F\u671F\u4E0A\u4E0B\u6587"
28018
+ },
28019
+ behavior: "action"
28020
+ },
27485
28021
  {
27486
28022
  id: "updateUserPreferenceProfile",
27487
28023
  schema: updateUserPreferenceProfileFunctionSchema,
@@ -27510,17 +28046,6 @@ var baseToolDefinitions = [
27510
28046
  defaultConsent: "auto"
27511
28047
  },
27512
28048
  // --- 计划与编排(不含 Agent 专用) ---
27513
- {
27514
- id: "createWorkflow",
27515
- schema: createWorkflowFunctionSchema,
27516
- executor: createWorkflowFunc,
27517
- description: {
27518
- name: "createWorkflow",
27519
- description: "\u5F53\u6267\u884C\u8DEF\u5F84\u5DF2\u77E5\u65F6\uFF0C\u5B9A\u4E49\u5E76\u6267\u884C\u4E00\u4E2A\u591A\u6B65\u9AA4 workflow\u3002\u5F15\u64CE\u81EA\u52A8\u8FD0\u884C\uFF0C\u65E0\u9700\u6BCF\u6B65\u8C03\u7528 LLM\uFF0C\u5927\u5E45\u8282\u7701 token\u3002",
27520
- category: "\u8BA1\u5212\u4E0E\u7F16\u6392"
27521
- },
27522
- behavior: "orchestrator"
27523
- },
27524
28049
  {
27525
28050
  id: "toolquery",
27526
28051
  schema: toolQueryFunctionSchema,
@@ -29105,11 +29630,6 @@ var findToolExecutor = (rawName) => {
29105
29630
  };
29106
29631
 
29107
29632
  export {
29108
- readXPostFunctionSchema,
29109
- readXPostFunc,
29110
- readXhsProfileFunctionSchema,
29111
- readXhsProfileFunc,
29112
- setTodoListFunc,
29113
29633
  resolveBuiltinSkillPage,
29114
29634
  resolveAgentRequiredPackIds,
29115
29635
  resolveAgentRecommendedSkillNames,
@@ -29127,7 +29647,13 @@ export {
29127
29647
  waitForAbortableDelay,
29128
29648
  createSSEParser,
29129
29649
  formatAgentListCard,
29650
+ readXPostFunctionSchema,
29651
+ readXPostFunc,
29652
+ readXhsProfileFunctionSchema,
29653
+ readXhsProfileFunc,
29130
29654
  rememberMemoryFunctionSchema,
29655
+ deleteMemoryFunctionSchema,
29656
+ setTodoListFunc,
29131
29657
  TOOL_GROUP_META,
29132
29658
  toolQueryFunctionSchema,
29133
29659
  toolQueryFunc,