nolo-cli 0.96.0-alpha.1 → 0.96.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +1 -1
  2. package/{_executeModel-AUQRMRWL.js → _executeModel-GWF37P7J.js} +68 -63
  3. package/{action-YVYQEAAV.js → action-GI44T4DR.js} +10 -10
  4. package/{addContentAction-O7R66HEX.js → addContentAction-B2DRF7P6.js} +9 -9
  5. package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-T3I7IXPK.js} +15 -17
  6. package/{agentDeleteCommand-4BAHJRU3.js → agentDeleteCommand-5SHJMUF7.js} +47 -43
  7. package/{agentEmailCommands-QISOY7Y6.js → agentEmailCommands-YC7RFNYN.js} +90 -82
  8. package/{agentListCommands-U46ODMQU.js → agentListCommands-O4DSVOHQ.js} +78 -82
  9. package/{agentMachineCommands-EHV2KM2C.js → agentMachineCommands-ZSQCK3SA.js} +42 -38
  10. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-EMZCM6VA.js} +1 -1
  11. package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-HF4A42D4.js} +1 -1
  12. package/agentRecordCommands-MUG5QMN7.js +136 -0
  13. package/{agentRunCommand-K4CLMA6B.js → agentRunCommand-5EBSIN74.js} +90 -80
  14. package/{agentRunControl-XLGD3UZ5.js → agentRunControl-5T64LM2M.js} +2 -2
  15. package/{agentRuntimeLocal-O4HPUJA4.js → agentRuntimeLocal-KTWDCVYZ.js} +44 -36
  16. package/{agentSlice-ZYT2OUR3.js → agentSlice-QA6WAKNE.js} +11 -11
  17. package/{appDeleteCommands-R5BBTKQK.js → appDeleteCommands-JPPKN55V.js} +42 -38
  18. package/{appDeployCommands-ZJIXOJWD.js → appDeployCommands-QU5PW23S.js} +42 -38
  19. package/{appDeployStatusCommands-B3R2ZTBF.js → appDeployStatusCommands-QVAJTRSP.js} +42 -38
  20. package/{appGetCommands-2AQSOV2A.js → appGetCommands-LT3KDTHJ.js} +42 -38
  21. package/{appListCommands-HCIJGZFY.js → appListCommands-V37HIWKN.js} +42 -38
  22. package/{authCommand-F4EFRRX6.js → authCommand-2YPMMIJN.js} +117 -23
  23. package/{authCommands-RGOGCPP6.js → authCommands-FFDS4FVX.js} +7 -5
  24. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-CALVIJTX.js} +6 -5
  25. package/{chatQueueReduxAdapter-Q5V4YJVI.js → chatQueueReduxAdapter-YYIRKWPD.js} +30 -29
  26. package/{chromeCommands-FZYAU75D.js → chromeCommands-K27J4OVZ.js} +124 -28
  27. package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-IXRLN57H.js} +4 -3
  28. package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
  29. package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
  30. package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
  31. package/{chunk-BLJWCTRL.js → chunk-45LEXXBA.js} +1 -1
  32. package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
  33. package/chunk-4LCOCOR5.js +50 -0
  34. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  35. package/{chunk-LLT642J4.js → chunk-4W65H3KF.js} +24 -5
  36. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  37. package/chunk-5G7QSEFG.js +13349 -0
  38. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  39. package/chunk-5J3PYNUP.js +255 -0
  40. package/chunk-5MMAK75Q.js +15 -0
  41. package/{chunk-JPGCXHNM.js → chunk-5OA5HMTL.js} +1 -1
  42. package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
  43. package/{chunk-6YTOJY35.js → chunk-6D2JFXLY.js} +35 -0
  44. package/{chunk-3BMYXEUW.js → chunk-6O4IK4V2.js} +1 -1
  45. package/{chunk-WADCY6G6.js → chunk-6ZWMH6TJ.js} +111 -41
  46. package/{chunk-ABQYVJBJ.js → chunk-7CHC4W22.js} +1 -1
  47. package/{chunk-YQTQQX2H.js → chunk-7IJ3GSRH.js} +1 -1
  48. package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
  49. package/{chunk-OA6Q2A4I.js → chunk-A7RSPKU6.js} +98 -22
  50. package/chunk-ALY3N3HU.js +7600 -0
  51. package/{chunk-Q554LLSI.js → chunk-AUDNYVRC.js} +1 -1
  52. package/{chunk-GPCZ7UXG.js → chunk-AZRHIN5B.js} +1 -1
  53. package/chunk-BMQ2MJUK.js +153 -0
  54. package/{chunk-3IIEFNGY.js → chunk-C53ZG23R.js} +2 -2
  55. package/chunk-CHOZJMJS.js +78 -0
  56. package/{chunk-HJUYAD4A.js → chunk-CPUFH46E.js} +8 -8
  57. package/{chunk-LS2ZANRJ.js → chunk-CTUQJVQM.js} +1 -1
  58. package/{chunk-BP4XNZRM.js → chunk-CU3QB4HW.js} +3 -3
  59. package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
  60. package/{chunk-KQ4ONNQD.js → chunk-DAWDCRIG.js} +82 -8
  61. package/{chunk-VLTIYV3X.js → chunk-DCLMZ5TX.js} +4 -4
  62. package/{chunk-UKZDAFYT.js → chunk-DSSTTEKI.js} +6 -10
  63. package/{chunk-HVURBGF3.js → chunk-ESRMFY7G.js} +2 -2
  64. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  65. package/{chunk-ZLR5JN3E.js → chunk-FKBRWL4E.js} +7 -7
  66. package/{chunk-XOVEWFLK.js → chunk-G3BCMDJB.js} +100 -100
  67. package/chunk-GMZLP5DV.js +82 -0
  68. package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
  69. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  70. package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
  71. package/{chunk-IAO6JBYW.js → chunk-HP2HV7RZ.js} +171 -14
  72. package/{chunk-H62HCIUP.js → chunk-HYZIYH2H.js} +11 -10
  73. package/{chunk-NTW5GWDM.js → chunk-I3QNET24.js} +32 -17
  74. package/{chunk-WV42OMV7.js → chunk-IAESIMK7.js} +4 -4
  75. package/{chunk-JRQFUXY7.js → chunk-KCDUTE5V.js} +96 -19
  76. package/{chunk-XRWZB6CF.js → chunk-KLTTJFH2.js} +23 -76
  77. package/{chunk-IIVGDG4I.js → chunk-LNPYTNMG.js} +8 -4
  78. package/{chunk-AFDS2CVM.js → chunk-MDMTFGJ2.js} +15 -20
  79. package/{chunk-4MY4GLIW.js → chunk-MN3RHOFX.js} +969 -1090
  80. package/{chunk-7S4YWN7P.js → chunk-MX574M24.js} +1 -1
  81. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  82. package/{chunk-53HEEOTT.js → chunk-O26PCYLS.js} +80 -13
  83. package/{chunk-3DII57IT.js → chunk-O2OWEFII.js} +1 -1
  84. package/chunk-OCZKATRC.js +129 -0
  85. package/{chunk-6D6VBVEW.js → chunk-OTEMQQZI.js} +80 -14
  86. package/chunk-P6GMCCAT.js +870 -0
  87. package/{chunk-CPH3W5A7.js → chunk-Q4GP72HX.js} +94 -3
  88. package/{chunk-DHDMC6FO.js → chunk-QKUMVP3O.js} +11 -6
  89. package/{chunk-76WEAXJB.js → chunk-QXWGM7NK.js} +18 -15
  90. package/{chunk-JOHSKZQX.js → chunk-R2TEASHZ.js} +865 -207
  91. package/{chunk-Z77CRGTW.js → chunk-R4SQ3LGW.js} +1 -1
  92. package/{chunk-V4MJDUSR.js → chunk-RSEEDUMS.js} +2 -2
  93. package/{chunk-UZGQNTVW.js → chunk-S5XGT6GB.js} +5 -3
  94. package/{chunk-QIAVMDHY.js → chunk-SDAPKV2N.js} +4 -4
  95. package/{chunk-SNPMM7H3.js → chunk-SN2U5EE7.js} +13 -13
  96. package/{chunk-AFUORTY4.js → chunk-SONWNI3L.js} +21 -21
  97. package/{chunk-A6G32FNX.js → chunk-SYAMDUAL.js} +13 -13
  98. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  99. package/{chunk-OF7AQZUG.js → chunk-TU5NE4U3.js} +9 -84
  100. package/{chunk-EGSKXKR5.js → chunk-TWROMK2A.js} +1 -1
  101. package/chunk-TY3TIUJK.js +89 -0
  102. package/chunk-UNYJU5L6.js +780 -0
  103. package/{chunk-J4MOO56S.js → chunk-UQNS32WZ.js} +10 -2
  104. package/chunk-VIWDGTDA.js +8 -0
  105. package/chunk-VJVNU77E.js +83 -0
  106. package/{chunk-MMPXJXHT.js → chunk-VKEMMN62.js} +584 -480
  107. package/{chunk-ZXKVPF4K.js → chunk-W5HY3V6I.js} +236 -36
  108. package/{chunk-JAXOVNM4.js → chunk-WILHZY7K.js} +45 -45
  109. package/{chunk-UKWGR5SS.js → chunk-WIWM4FE3.js} +187 -398
  110. package/{chunk-BGSLKVCP.js → chunk-XAAUXO27.js} +6 -7
  111. package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
  112. package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
  113. package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
  114. package/{chunk-BZWBEHGD.js → chunk-YYMTXN25.js} +66 -38
  115. package/{chunk-TOP2VXOR.js → chunk-Z4CSIXYP.js} +2 -2
  116. package/{chunk-DEUUPHOO.js → chunk-ZGESTNDD.js} +77 -17
  117. package/{chunk-2F7RJC6L.js → chunk-ZOVKKMF6.js} +1 -1
  118. package/chunk-ZRAU6T47.js +56 -0
  119. package/commandRegistry-JPJBZMSB.js +833 -0
  120. package/{contentThunks-PT23JWJX.js → contentThunks-S5S6Y7FH.js} +32 -30
  121. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
  122. package/{createAgentAutomationAction-N27SYTLU.js → createAgentAutomationAction-E3V23HF4.js} +32 -30
  123. package/{createDialogAction-XZPLHD5G.js → createDialogAction-PS2N7OCP.js} +36 -33
  124. package/{createPageAction-KHVJQ3CS.js → createPageAction-6XUY3KXJ.js} +38 -36
  125. package/{chunk-3SJQXXGY.js → cursorProvider-YGGNMVWX.js} +2560 -9879
  126. package/{dbSlice-XVWBAGYN.js → dbSlice-DQ32LYTJ.js} +8 -8
  127. package/{deleteFile-YG6QMJLU.js → deleteFile-NX6QHCWZ.js} +3 -3
  128. package/{dialogCommands-ZUWW5UT6.js → dialogCommands-3YXLYO2W.js} +45 -41
  129. package/{dialogSlice-3YH242HS.js → dialogSlice-NTZ5GT5B.js} +36 -29
  130. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  131. package/{docCreateCommands-Q6FADDSJ.js → docCreateCommands-4JSMQDST.js} +44 -40
  132. package/{docDeleteCommands-ZKIH54PZ.js → docDeleteCommands-3KTE3KP6.js} +44 -40
  133. package/{docReadCommands-7BZT2QTW.js → docReadCommands-54BL4OYN.js} +43 -39
  134. package/{docStore-YSZRNUUD.js → docStore-QE6H3LDC.js} +11 -10
  135. package/{docUpdateCommands-WJXWTRL7.js → docUpdateCommands-BMBPTW5U.js} +44 -40
  136. package/{fetchMessages-EIU7UFFK.js → fetchMessages-67MEFPZR.js} +2 -2
  137. package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +3 -3
  138. package/{handleSendMessageAction-KJO2QDBM.js → handleSendMessageAction-34BJIBML.js} +91 -83
  139. package/index.js +87 -884
  140. package/{localDialogRead-BTFJ4V2I.js → localDialogRead-EBRS242U.js} +2 -2
  141. package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-5W6IJRAD.js} +6 -6
  142. package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-3LRMNLCM.js} +1 -1
  143. package/{machineCommands-QC4TD7GJ.js → machineCommands-KBMEZDL3.js} +85 -77
  144. package/{machineWsRunDispatch-XUOIAXO7.js → machineWsRunDispatch-FRANXJZJ.js} +82 -74
  145. package/{memberThunks-QGFLFVCI.js → memberThunks-5ZXPR63F.js} +9 -9
  146. package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
  147. package/oauthTokenStore-ITEB663N.js +23 -0
  148. package/package.json +1 -1
  149. package/pdf-U6KSUEZZ.js +26435 -0
  150. package/processSpawn-SOAV3FEV.js +11 -0
  151. package/profileConfig-ZGOFORWV.js +43 -0
  152. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-76AVU3HD.js} +7 -7
  153. package/{providerRegistry-757OWH3O.js → providerRegistry-Z62NC45X.js} +11 -7
  154. package/{read-COE3ZYR6.js → read-EPTJRAEF.js} +5 -5
  155. package/{readDocTool-5USN4A6V.js → readDocTool-W4NDXNEX.js} +5 -3
  156. package/{readlineWorkspace-74TXXSLO.js → readlineWorkspace-P7WDR4NG.js} +2450 -2022
  157. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-BVAWQKXE.js} +17 -19
  158. package/{runAgentClientLoop-37BXJD62.js → runAgentClientLoop-5OQN64SG.js} +62 -58
  159. package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-3USD722U.js} +3 -3
  160. package/runtimeModeArgs-2Y7BALTO.js +31 -0
  161. package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-LYY45IAD.js} +12 -11
  162. package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-73IL7DLU.js} +18 -20
  163. package/{settingSlice-ZQZVUPKK.js → settingSlice-Q6EKL7EQ.js} +9 -9
  164. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
  165. package/{spaceCommands-P3ONT6LL.js → spaceCommands-W7B34E7K.js} +44 -40
  166. package/{streamAgentChatTurn-FGXQXALU.js → streamAgentChatTurn-7AX7XVHL.js} +184 -91
  167. package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-UUXDSQ6X.js} +15 -17
  168. package/{tableCommands-O6NWHFKV.js → tableCommands-G7RV3RU3.js} +4 -4
  169. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-INIQCPGY.js} +3 -3
  170. package/{tools-R5UF2KZO.js → tools-357446VN.js} +55 -51
  171. package/{tuiSummaryLlmCaller-T2SHYMDZ.js → tuiSummaryLlmCaller-74NRRLVW.js} +18 -16
  172. package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
  173. package/{updateDialogTitleAction-RTADGV7A.js → updateDialogTitleAction-A2OK52IY.js} +81 -43
  174. package/agentRecordCommands-SIPURU2S.js +0 -128
  175. package/chunk-FOWEGIMF.js +0 -18881
  176. package/chunk-M76ECQRD.js +0 -13658
  177. package/chunk-Q5FJJ6XI.js +0 -103
  178. package/chunk-S7Z2HMCN.js +0 -25
  179. package/{chunk-VMFTFOWF.js → chunk-3AH7LNUB.js} +7 -7
  180. package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
  181. package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-KHCLMKZZ.js";
5
5
  import {
6
6
  asTrimmedNonEmptyStringArray
7
- } from "./chunk-VMFTFOWF.js";
7
+ } from "./chunk-3AH7LNUB.js";
8
8
  import {
9
9
  asOptionalTrimmedString
10
10
  } from "./chunk-G3SUCT4W.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  generatePkcePair,
3
3
  startCallbackServer
4
- } from "./chunk-53HEEOTT.js";
4
+ } from "./chunk-O26PCYLS.js";
5
5
  import {
6
6
  toErrorMessage
7
7
  } from "./chunk-HNMXYYJR.js";
@@ -0,0 +1,153 @@
1
+ import {
2
+ isRecord
3
+ } from "./chunk-KUG52IAP.js";
4
+
5
+ // packages/core/chat/validationUrl.ts
6
+ function safeUrl(raw) {
7
+ if (typeof raw !== "string") return void 0;
8
+ const trimmed = raw.trim();
9
+ if (!/^https?:\/\//i.test(trimmed)) return void 0;
10
+ try {
11
+ const parsed = new URL(trimmed);
12
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
13
+ return void 0;
14
+ }
15
+ return parsed.href;
16
+ } catch {
17
+ return void 0;
18
+ }
19
+ }
20
+ function scanValidationDetails(details) {
21
+ if (!Array.isArray(details)) return {};
22
+ let url;
23
+ let text;
24
+ let learnMoreUrl;
25
+ for (const detail of details) {
26
+ if (url && learnMoreUrl) break;
27
+ if (!isRecord(detail)) continue;
28
+ const metadata = isRecord(detail.metadata) ? detail.metadata : void 0;
29
+ if (metadata) {
30
+ url = url ?? safeUrl(metadata.validation_url);
31
+ text = text ?? (typeof metadata.validation_url_link_text === "string" ? metadata.validation_url_link_text : void 0);
32
+ learnMoreUrl = learnMoreUrl ?? safeUrl(metadata.validation_learn_more_url);
33
+ }
34
+ const links = Array.isArray(detail.links) ? detail.links : [];
35
+ for (const link of links) {
36
+ if (!isRecord(link)) continue;
37
+ const linkUrl = safeUrl(link.url);
38
+ if (!linkUrl) continue;
39
+ const desc = typeof link.description === "string" ? link.description : "";
40
+ if (!url && /verify|continue/i.test(desc)) {
41
+ url = linkUrl;
42
+ text = text ?? desc;
43
+ } else if (!learnMoreUrl && /learn more/i.test(desc)) {
44
+ learnMoreUrl = linkUrl;
45
+ }
46
+ }
47
+ }
48
+ return { url, text, learnMoreUrl };
49
+ }
50
+ function unescapeJsonString(text) {
51
+ return text.replace(
52
+ /\\(["\\/nrtbf]|u[0-9a-fA-F]{4})/g,
53
+ (_match, esc) => {
54
+ switch (esc[0]) {
55
+ case "n":
56
+ return "\n";
57
+ case "r":
58
+ return "\r";
59
+ case "t":
60
+ return " ";
61
+ case "b":
62
+ return "\b";
63
+ case "f":
64
+ return "\f";
65
+ case "u":
66
+ return String.fromCharCode(parseInt(esc.slice(1), 16));
67
+ default:
68
+ return esc;
69
+ }
70
+ }
71
+ );
72
+ }
73
+ function sliceBalancedJsonObject(text) {
74
+ const start = text.indexOf("{");
75
+ if (start < 0) return void 0;
76
+ let depth = 0;
77
+ let inString = false;
78
+ let escaped = false;
79
+ for (let i = start; i < text.length; i += 1) {
80
+ const ch = text[i];
81
+ if (inString) {
82
+ if (escaped) escaped = false;
83
+ else if (ch === "\\") escaped = true;
84
+ else if (ch === '"') inString = false;
85
+ continue;
86
+ }
87
+ if (ch === '"') inString = true;
88
+ else if (ch === "{") depth += 1;
89
+ else if (ch === "}") {
90
+ depth -= 1;
91
+ if (depth === 0) return text.slice(start, i + 1);
92
+ }
93
+ }
94
+ return void 0;
95
+ }
96
+ function parseBalancedJson(text) {
97
+ const slice = sliceBalancedJsonObject(text);
98
+ if (!slice) return void 0;
99
+ try {
100
+ return JSON.parse(slice);
101
+ } catch {
102
+ return void 0;
103
+ }
104
+ }
105
+ function findValidationInParsed(parsed, depth = 0) {
106
+ if (depth > 3 || !isRecord(parsed)) return {};
107
+ const err = isRecord(parsed.error) ? parsed.error : parsed;
108
+ const fromDetails = scanValidationDetails(isRecord(err) ? err.details : void 0);
109
+ if (fromDetails.url) return fromDetails;
110
+ const nested = isRecord(err) ? err.message : void 0;
111
+ if (typeof nested === "string" && nested.trim().startsWith("{")) {
112
+ try {
113
+ const reparsed = findValidationInParsed(JSON.parse(nested), depth + 1);
114
+ if (reparsed.url) return reparsed;
115
+ } catch {
116
+ }
117
+ }
118
+ return {};
119
+ }
120
+ function stripTerminalControlChars(raw) {
121
+ return raw.replace(/[\u0000-\u001f\u007f]/g, "");
122
+ }
123
+ function regexValidationFallback(text) {
124
+ const urlMatch = text.match(
125
+ /validation_url[^h]{0,10}(https?:\/\/[^\s"\\]+)/i
126
+ );
127
+ if (!urlMatch) return {};
128
+ const textMatch = text.match(
129
+ /validation_url_link_text[^A-Za-z]{0,10}([^"\\\n]{1,60})/i
130
+ );
131
+ return {
132
+ // safeUrl first (normalizes C0 into %XX); fall back to stripping controls
133
+ // so a truncated-but-real link is still emitted rather than dropped.
134
+ url: safeUrl(urlMatch[1]) ?? stripTerminalControlChars(urlMatch[1]),
135
+ text: textMatch?.[1] ? stripTerminalControlChars(textMatch[1].trim()) || void 0 : void 0
136
+ };
137
+ }
138
+ function extractGoogleValidationLink(errorText) {
139
+ for (const candidate of [
140
+ parseBalancedJson(errorText),
141
+ parseBalancedJson(unescapeJsonString(errorText))
142
+ ]) {
143
+ if (candidate === void 0) continue;
144
+ const found = findValidationInParsed(candidate);
145
+ if (found.url) return found;
146
+ }
147
+ return regexValidationFallback(errorText);
148
+ }
149
+
150
+ export {
151
+ scanValidationDetails,
152
+ extractGoogleValidationLink
153
+ };
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-5ZUL4CUO.js";
4
4
  import {
5
5
  getModelContextWindow
6
- } from "./chunk-JAXOVNM4.js";
6
+ } from "./chunk-WILHZY7K.js";
7
7
  import {
8
8
  findModelConfig,
9
9
  getProviderByModelName
10
- } from "./chunk-OIVSQH2O.js";
10
+ } from "./chunk-3BXNTXYI.js";
11
11
  import {
12
12
  asOptionalFiniteNumber
13
13
  } from "./chunk-WWC7I6TA.js";
@@ -0,0 +1,78 @@
1
+ import {
2
+ clipCompactText
3
+ } from "./chunk-5MMAK75Q.js";
4
+ import {
5
+ asRecordOrEmpty
6
+ } from "./chunk-KX6YBIHG.js";
7
+ import {
8
+ asOptionalTrimmedString
9
+ } from "./chunk-G3SUCT4W.js";
10
+
11
+ // packages/agent-runtime/fileWritePolicy.ts
12
+ function evaluateFileWritePolicy(args) {
13
+ if (args.sessionApproved) return { permissionDecision: "allow" };
14
+ return {
15
+ permissionDecision: "ask",
16
+ permissionRequest: {
17
+ id: "permission-file-write-session",
18
+ tool: args.tool,
19
+ action: "file_write",
20
+ title: "\u786E\u8BA4\u5199\u5165\u6587\u4EF6",
21
+ body: `\u672C\u4F1A\u8BDD\u9996\u6B21\u5199\u5165\u6587\u4EF6\uFF1A${args.path}\u3002\u6279\u51C6\u540E\u672C\u4F1A\u8BDD\u540E\u7EED\u5199\u5165\u4E0D\u518D\u9010\u6B21\u786E\u8BA4\u3002`,
22
+ command: args.path,
23
+ suggestedRule: {
24
+ scope: "session",
25
+ pattern: { capability: "file_write", target: "session" }
26
+ }
27
+ }
28
+ };
29
+ }
30
+
31
+ // packages/agent-runtime/parseToolArguments.ts
32
+ function parseToolArgumentsJson(raw) {
33
+ if (!raw?.trim()) return {};
34
+ try {
35
+ return asRecordOrEmpty(JSON.parse(raw));
36
+ } catch {
37
+ return {};
38
+ }
39
+ }
40
+
41
+ // packages/agent-runtime/summarizeToolArguments.ts
42
+ function clip(value, max = 240) {
43
+ return clipCompactText(value, max);
44
+ }
45
+ function summarizeToolArguments(toolName, rawArgs) {
46
+ const args = parseToolArgumentsJson(rawArgs);
47
+ const pick = (...keys2) => {
48
+ for (const key of keys2) {
49
+ const value = asOptionalTrimmedString(args[key]);
50
+ if (value) return value;
51
+ }
52
+ return "";
53
+ };
54
+ const command = pick("command", "cmd", "runCommand", "executeCommand", "bash");
55
+ if (command) return clip(command);
56
+ const query = pick("query", "pattern", "search", "q");
57
+ if (query) return clip(query);
58
+ const filePath = pick("filePath", "file_path", "path", "filename", "file");
59
+ if (filePath) return clip(filePath);
60
+ const keys = Object.keys(args);
61
+ if (keys.length === 0) return "";
62
+ return clip(
63
+ keys.slice(0, 6).map((key) => {
64
+ const value = args[key];
65
+ if (typeof value === "string") return `${key}=${clip(value, 80)}`;
66
+ if (typeof value === "number" || typeof value === "boolean") {
67
+ return `${key}=${String(value)}`;
68
+ }
69
+ if (Array.isArray(value)) return `${key}[${value.length}]`;
70
+ return `${key}=${value === null ? "null" : typeof value}`;
71
+ }).join(" ")
72
+ );
73
+ }
74
+
75
+ export {
76
+ evaluateFileWritePolicy,
77
+ summarizeToolArguments
78
+ };
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-UAD2WT54.js";
8
8
  import {
9
9
  toTimestampMs
10
- } from "./chunk-H62HCIUP.js";
10
+ } from "./chunk-HYZIYH2H.js";
11
11
  import {
12
12
  fetchFromServer,
13
13
  getAllServers
@@ -280,12 +280,6 @@ var fetchAuthoritativeRemoteSpace = async ({
280
280
  };
281
281
 
282
282
  export {
283
- selectSpaceRemoteAuth,
284
- spaceListsUser,
285
- membershipBelongsToUser,
286
- fetchRemoteUserSpaceMemberships,
287
- fetchRemoteSpace,
288
- fetchAuthoritativeRemoteSpace,
289
283
  getMemberSpaces,
290
284
  getAllMemberSpaces,
291
285
  setMemberSpaces,
@@ -297,5 +291,11 @@ export {
297
291
  setMembershipLoaded,
298
292
  addMemberSpace,
299
293
  removeMemberSpace,
300
- updateMemberSpaceName
294
+ updateMemberSpaceName,
295
+ selectSpaceRemoteAuth,
296
+ spaceListsUser,
297
+ membershipBelongsToUser,
298
+ fetchRemoteUserSpaceMemberships,
299
+ fetchRemoteSpace,
300
+ fetchAuthoritativeRemoteSpace
301
301
  };
@@ -4,7 +4,7 @@ import {
4
4
 
5
5
  // packages/cli/agentCommandSupport.ts
6
6
  async function getDefaultCliDb() {
7
- const { getDefaultCliLocalRuntimeDb } = await import("./localRuntimeDb-SYQGUF4U.js");
7
+ const { getDefaultCliLocalRuntimeDb } = await import("./localRuntimeDb-3LRMNLCM.js");
8
8
  return getDefaultCliLocalRuntimeDb();
9
9
  }
10
10
  function createNullCliDb() {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-AFUORTY4.js";
4
+ } from "./chunk-SONWNI3L.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,11 +10,11 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-VMFTFOWF.js";
13
+ } from "./chunk-3AH7LNUB.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest
17
- } from "./chunk-UKWGR5SS.js";
17
+ } from "./chunk-WIWM4FE3.js";
18
18
  import {
19
19
  normalizeTimeFields
20
20
  } from "./chunk-QOKAKDPE.js";
@@ -4,7 +4,7 @@ import {
4
4
  openrouterModels,
5
5
  platformHostedModels,
6
6
  zaiModels
7
- } from "./chunk-Q67DOFOO.js";
7
+ } from "./chunk-Y3PMXGLH.js";
8
8
 
9
9
  // packages/ai/llm/modelAbility.ts
10
10
  var MODEL_ABILITY_TABLE = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ANTIGRAVITY_CLOUD_CODE_BASE_URL
3
- } from "./chunk-UZGQNTVW.js";
3
+ } from "./chunk-S5XGT6GB.js";
4
4
  import {
5
5
  kimiCodeModels,
6
6
  moonshotModels,
@@ -9,13 +9,16 @@ import {
9
9
  qwenTokenPlanModels,
10
10
  stepfunModels,
11
11
  stepfunStepPlanModels
12
- } from "./chunk-OIVSQH2O.js";
12
+ } from "./chunk-3BXNTXYI.js";
13
13
  import {
14
14
  PLATFORM_HOSTED_DEEPSEEK_FLASH_OFF_PEAK_PRICE,
15
15
  PLATFORM_HOSTED_DEEPSEEK_FLASH_PEAK_PRICE,
16
16
  PLATFORM_HOSTED_DEEPSEEK_PRO_OFF_PEAK_PRICE,
17
17
  PLATFORM_HOSTED_DEEPSEEK_PRO_PEAK_PRICE
18
- } from "./chunk-Q67DOFOO.js";
18
+ } from "./chunk-Y3PMXGLH.js";
19
+ import {
20
+ asTrimmedLowercaseString
21
+ } from "./chunk-QSJ3HFEF.js";
19
22
 
20
23
  // packages/integrations/commandcode/models.ts
21
24
  var commandCodeModels = [
@@ -267,6 +270,17 @@ var STEPFUN_STEP_PLAN_MODEL_OPTIONS = stepfunStepPlanModels.map((m, i) => ({
267
270
  hasVision: m.hasVision,
268
271
  ...i === 0 ? { recommended: true } : {}
269
272
  }));
273
+ var TOGETHER_MODEL_OPTIONS = [
274
+ {
275
+ id: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
276
+ label: "Llama 3.3 70B Instruct Turbo",
277
+ recommended: true
278
+ },
279
+ { id: "deepseek-ai/DeepSeek-V4-Pro-0813", label: "DeepSeek V4 Pro" },
280
+ { id: "Qwen/Qwen3.6-Plus", label: "Qwen3.6 Plus" },
281
+ { id: "zai-org/GLM-5.2", label: "GLM-5.2" },
282
+ { id: "openai/gpt-oss-120b", label: "GPT-OSS 120B" }
283
+ ];
270
284
  var SUBSCRIPTION_OAUTH_PROVIDERS = [
271
285
  {
272
286
  kind: "oauth",
@@ -279,6 +293,9 @@ var SUBSCRIPTION_OAUTH_PROVIDERS = [
279
293
  defaultReasoningEffort: "medium",
280
294
  modelOptions: [
281
295
  { id: "gpt-6-astra", label: "GPT-6 Astra", hasVision: true, recommended: true },
296
+ // GPT-6.1 Sol 已列入 Codex 订阅通道选型指南,但按账号灰度("when available
297
+ // to your account and client"),未开通的账号选它会 400,不影响其他选项。
298
+ { id: "gpt-6.1-sol", label: "GPT-6.1 Sol", hasVision: true },
282
299
  { id: "gpt-5.6-sol", label: "GPT-5.6 Sol", hasVision: true },
283
300
  { id: "gpt-5.6-terra", label: "GPT-5.6 Terra", hasVision: true },
284
301
  { id: "gpt-5.6-luna", label: "GPT-5.6 Luna", hasVision: true }
@@ -324,11 +341,13 @@ var SUBSCRIPTION_OAUTH_PROVIDERS = [
324
341
  description: "Anthropic Subscription",
325
342
  apiKeyRef: "claude",
326
343
  provider: "anthropic",
327
- defaultModel: "claude-sonnet-5",
344
+ defaultModel: "claude-sonnet-5-5",
328
345
  defaultReasoningEffort: "high",
329
346
  modelOptions: [
347
+ { id: "claude-opus-5-5", label: "Claude Opus 5.5", hasVision: true, recommended: true },
348
+ { id: "claude-sonnet-5-5", label: "Claude Sonnet 5.5", hasVision: true },
330
349
  { id: "claude-sonnet-5", label: "Claude Sonnet 5", hasVision: true },
331
- { id: "claude-opus-5", label: "Claude Opus 5", hasVision: true, recommended: true },
350
+ { id: "claude-opus-5", label: "Claude Opus 5", hasVision: true },
332
351
  { id: "claude-opus-4-8", label: "Claude Opus 4.8", hasVision: true },
333
352
  { id: "claude-fable-5", label: "Claude Fable 5", hasVision: true }
334
353
  ]
@@ -539,7 +558,12 @@ var CUSTOM_API_KEY_TEMPLATES = [
539
558
  label: "OpenAI API",
540
559
  provider: "openai",
541
560
  baseUrl: "https://api.openai.com/v1",
542
- defaultModel: "gpt-6-astra",
561
+ defaultModel: "gpt-6.1-sol",
562
+ modelOptions: [
563
+ { id: "gpt-6.1-sol", label: "GPT-6.1 Sol", hasVision: true, recommended: true },
564
+ { id: "gpt-6-astra", label: "GPT-6 Astra", hasVision: true },
565
+ { id: "gpt-6-luna", label: "GPT-6 Luna", hasVision: true }
566
+ ],
543
567
  commercialKind: "api",
544
568
  accessVariant: "metered_key"
545
569
  },
@@ -549,7 +573,7 @@ var CUSTOM_API_KEY_TEMPLATES = [
549
573
  label: "Anthropic API",
550
574
  provider: "anthropic",
551
575
  baseUrl: "https://api.anthropic.com",
552
- defaultModel: "claude-sonnet-5",
576
+ defaultModel: "claude-sonnet-5-5",
553
577
  apiKeyHeader: "x-api-key",
554
578
  commercialKind: "api",
555
579
  accessVariant: "metered_key"
@@ -575,6 +599,19 @@ var CUSTOM_API_KEY_TEMPLATES = [
575
599
  commercialKind: "api",
576
600
  accessVariant: "metered_key"
577
601
  },
602
+ // anthropic/claude-sonnet-5、qwen/qwen3.8-27b),不维护易腐的静态清单。
603
+ {
604
+ kind: "api_key_template",
605
+ id: "openrouter-api",
606
+ label: "OpenRouter API \u7528\u91CF\u8BA1\u8D39",
607
+ description: "OpenRouter \u805A\u5408\u7F51\u5173\uFF08OpenAI \u517C\u5BB9\uFF0C\u4E00\u4E2A Key \u8BBF\u95EE\u591A\u5BB6\u6A21\u578B\uFF0C\u6309\u91CF\u8BA1\u8D39\uFF09",
608
+ provider: "openrouter",
609
+ baseUrl: "https://openrouter.ai/api/v1",
610
+ defaultModel: "anthropic/claude-sonnet-5",
611
+ keyFormatHint: "\u5728 openrouter.ai/keys \u521B\u5EFA\uFF0C\u5F62\u5982 sk-or-\u2026",
612
+ commercialKind: "api",
613
+ accessVariant: "metered_key"
614
+ },
578
615
  // DeepSeek 模型统一改走 nolo provider(Ollama Cloud,thinking=max 快 28-49%)。
579
616
  // 现按用户选择回归:自带 Key 的 metered 通道与平台托管通道并存,互不影响。
580
617
  {
@@ -649,6 +686,21 @@ var CUSTOM_API_KEY_TEMPLATES = [
649
686
  defaultModel: "MiniMax-Text-01",
650
687
  commercialKind: "api",
651
688
  accessVariant: "metered_key"
689
+ },
690
+ // Together AI 平台:用户自带 Key 的 metered 通道(复用 OpenAI-compatible 通道,
691
+ // apiSource:"custom",不扣平台积分)。模型 ID 为 namespaced 全 ID,直传不 remap;
692
+ // OpenAI 兼容 base_url = https://api.together.ai/v1(官方兼容文档在案)。
693
+ {
694
+ kind: "api_key_template",
695
+ id: "together-api",
696
+ label: "Together AI API \u7528\u91CF\u8BA1\u8D39",
697
+ description: "Together AI\uFF08OpenAI \u517C\u5BB9\uFF0C\u6309\u91CF\u8BA1\u8D39\uFF09",
698
+ provider: "together",
699
+ baseUrl: "https://api.together.ai/v1",
700
+ defaultModel: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
701
+ modelOptions: TOGETHER_MODEL_OPTIONS,
702
+ commercialKind: "api",
703
+ accessVariant: "metered_key"
652
704
  }
653
705
  ];
654
706
  var ALL_PROVIDER_REGISTRY = [
@@ -666,6 +718,26 @@ function isCustomApiKeyTemplate(id) {
666
718
  if (!id) return false;
667
719
  return CUSTOM_API_KEY_TEMPLATES.some((p) => p.id === id);
668
720
  }
721
+ function normalizeEndpointUrl(url) {
722
+ return asTrimmedLowercaseString(url).replace(/\/+$/, "");
723
+ }
724
+ var SUBSCRIPTION_ENDPOINT_URLS = new Set(
725
+ CUSTOM_API_KEY_TEMPLATES.filter((t) => t.commercialKind === "subscription").map(
726
+ (t) => normalizeEndpointUrl(t.baseUrl)
727
+ )
728
+ );
729
+ var SUBSCRIPTION_OAUTH_APIKEY_REFS = new Set(
730
+ SUBSCRIPTION_OAUTH_PROVIDERS.map((p) => asTrimmedLowercaseString(p.apiKeyRef))
731
+ );
732
+ function isSubscriptionEndpoint(customProviderUrl) {
733
+ if (typeof customProviderUrl !== "string") return false;
734
+ const normalized = normalizeEndpointUrl(customProviderUrl);
735
+ return normalized.length > 0 && SUBSCRIPTION_ENDPOINT_URLS.has(normalized);
736
+ }
737
+ function isSubscriptionOAuthCredential(apiKeyRef) {
738
+ const ref = asTrimmedLowercaseString(apiKeyRef ?? "");
739
+ return ref.length > 0 && SUBSCRIPTION_OAUTH_APIKEY_REFS.has(ref);
740
+ }
669
741
 
670
742
  export {
671
743
  SUBSCRIPTION_OAUTH_PROVIDERS,
@@ -673,5 +745,7 @@ export {
673
745
  ALL_PROVIDER_REGISTRY,
674
746
  findProviderById,
675
747
  isSubscriptionOAuthProvider,
676
- isCustomApiKeyTemplate
748
+ isCustomApiKeyTemplate,
749
+ isSubscriptionEndpoint,
750
+ isSubscriptionOAuthCredential
677
751
  };
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  getActiveDialogKey
3
- } from "./chunk-6YTOJY35.js";
3
+ } from "./chunk-6D2JFXLY.js";
4
4
  import {
5
5
  compactWhitespace
6
6
  } from "./chunk-DWLEOOGR.js";
7
7
  import {
8
8
  asTrimmedLowercaseString
9
9
  } from "./chunk-QSJ3HFEF.js";
10
- import {
11
- extractCustomId
12
- } from "./chunk-M2EJHDJP.js";
13
10
  import {
14
11
  selectIdentityToken
15
12
  } from "./chunk-SEJ5OS6F.js";
16
13
  import {
17
14
  isRecord
18
15
  } from "./chunk-KUG52IAP.js";
16
+ import {
17
+ extractCustomId
18
+ } from "./chunk-M2EJHDJP.js";
19
19
 
20
20
  // packages/ai/tools/toolApiClient.ts
21
21
  var MAIN_SERVER = "https://nolo.chat";
@@ -1,19 +1,15 @@
1
1
  import {
2
- getActiveDialogKey
3
- } from "./chunk-6YTOJY35.js";
2
+ formatISO
3
+ } from "./chunk-ZRAU6T47.js";
4
4
  import {
5
- require_date_fns
6
- } from "./chunk-M76ECQRD.js";
5
+ getActiveDialogKey
6
+ } from "./chunk-6D2JFXLY.js";
7
7
  import {
8
8
  patch,
9
9
  selectById
10
- } from "./chunk-H62HCIUP.js";
11
- import {
12
- __toESM
13
- } from "./chunk-4VNS5WPM.js";
10
+ } from "./chunk-HYZIYH2H.js";
14
11
 
15
12
  // packages/chat/dialog/actions/setDialogExtraReferencesAction.ts
16
- var import_date_fns = __toESM(require_date_fns());
17
13
  var setDialogExtraReferencesAction = async (extraReferences, thunkApi) => {
18
14
  const { dispatch, getState } = thunkApi;
19
15
  const state = getState();
@@ -33,7 +29,7 @@ var setDialogExtraReferencesAction = async (extraReferences, thunkApi) => {
33
29
  dbKey: currentDialogKey,
34
30
  changes: {
35
31
  extraReferences: extraReferences ?? [],
36
- updatedAt: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date())
32
+ updatedAt: formatISO(/* @__PURE__ */ new Date())
37
33
  }
38
34
  })
39
35
  ).unwrap();
@@ -2,10 +2,10 @@ import {
2
2
  getCredentialsDir,
3
3
  getLegacyCredentialPath,
4
4
  migrateLegacyCredentialFile
5
- } from "./chunk-ONXOABJR.js";
5
+ } from "./chunk-HNGRBWYF.js";
6
6
  import {
7
7
  asNonEmptyStringArray
8
- } from "./chunk-VMFTFOWF.js";
8
+ } from "./chunk-3AH7LNUB.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-KUG52IAP.js";
@@ -91,6 +91,7 @@ function createCliAuthorityBrokerSocketInvoker(options) {
91
91
  const timeout = setTimeout(() => {
92
92
  finish(() => {
93
93
  socket.destroy();
94
+ socket.unref?.();
94
95
  reject(new CliAuthorityBrokerTimeoutError(options.endpoint, timeoutMs));
95
96
  });
96
97
  }, timeoutMs);
@@ -3,7 +3,7 @@ import {
3
3
  createFileCredentialBroker,
4
4
  migrateAgentSecrets,
5
5
  normalizeAgentRuntimeToolPolicy
6
- } from "./chunk-HVURBGF3.js";
6
+ } from "./chunk-ESRMFY7G.js";
7
7
  import {
8
8
  asRecordOrEmpty
9
9
  } from "./chunk-KX6YBIHG.js";
@@ -11,16 +11,16 @@ import {
11
11
  patch,
12
12
  remove,
13
13
  write
14
- } from "./chunk-H62HCIUP.js";
14
+ } from "./chunk-HYZIYH2H.js";
15
15
  import {
16
16
  createAgentKey,
17
17
  toTrimmedString
18
- } from "./chunk-VMFTFOWF.js";
18
+ } from "./chunk-3AH7LNUB.js";
19
19
  import {
20
20
  asyncThunkCreator,
21
21
  buildCreateSlice,
22
22
  getRuntimeServerContext
23
- } from "./chunk-UKWGR5SS.js";
23
+ } from "./chunk-WIWM4FE3.js";
24
24
  import {
25
25
  asTrimmedString
26
26
  } from "./chunk-3EUW3WEO.js";
@@ -304,7 +304,7 @@ var slice = createSliceWithThunks({
304
304
  const overrides = {};
305
305
  if (args.systemPromptOverride !== void 0) overrides.prompt = args.systemPromptOverride;
306
306
  if (args.toolsOverride !== void 0) overrides.tools = args.toolsOverride;
307
- const { _executeModel } = await import("./_executeModel-AUQRMRWL.js");
307
+ const { _executeModel } = await import("./_executeModel-GWF37P7J.js");
308
308
  return _executeModel(
309
309
  {
310
310
  isStreaming: args.isStreaming ?? false,
@@ -325,7 +325,7 @@ var slice = createSliceWithThunks({
325
325
  * - 循环直到无工具调用或触发其他运行时停止条件
326
326
  */
327
327
  runAgent: create.asyncThunk(async (args, thunkApi) => {
328
- const { runAgentClientLoop } = await import("./runAgentClientLoop-37BXJD62.js");
328
+ const { runAgentClientLoop } = await import("./runAgentClientLoop-5OQN64SG.js");
329
329
  const { content: loopContent, toolCallCount } = await runAgentClientLoop(
330
330
  {
331
331
  agentKey: args.agentKey,
@@ -341,7 +341,7 @@ var slice = createSliceWithThunks({
341
341
  * 聊天轮次流式 Agent 调用
342
342
  */
343
343
  streamAgentChatTurn: create.asyncThunk(async (args, thunkApi) => {
344
- const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-FGXQXALU.js");
344
+ const { streamAgentChatTurnHandler } = await import("./streamAgentChatTurn-7AX7XVHL.js");
345
345
  return streamAgentChatTurnHandler(args, thunkApi);
346
346
  }),
347
347
  /**