nolo-cli 0.106.0-alpha.1 → 0.106.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +1 -1
  2. package/{_executeModel-C5ZUOC7O.js → _executeModel-EP6HAX3W.js} +77 -69
  3. package/action-GVA5ARSJ.js +20 -0
  4. package/{addContentAction-O7R66HEX.js → addContentAction-NZZNAVCB.js} +13 -12
  5. package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-5HVGEIXI.js} +19 -20
  6. package/{agentDeleteCommand-YB3S2LPY.js → agentDeleteCommand-M25A6UGB.js} +118 -43
  7. package/{agentEmailCommands-YBCBTG6X.js → agentEmailCommands-RUL4NL64.js} +99 -89
  8. package/agentListCommands-KSPFKHFO.js +741 -0
  9. package/{agentMachineCommands-QHYLBTVW.js → agentMachineCommands-IHBB6PHD.js} +48 -44
  10. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-ND4S2Q6Q.js} +97 -2
  11. package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-B4T2DJ5H.js} +1 -1
  12. package/agentRecordCommands-7OKIBN6H.js +138 -0
  13. package/agentRunCommand-GBKJTQQU.js +167 -0
  14. package/{agentRunControl-AVJR4JW4.js → agentRunControl-3HWA2LLQ.js} +2 -2
  15. package/{agentRuntimeLocal-FRUE5P2V.js → agentRuntimeLocal-E5HXZNXZ.js} +44 -40
  16. package/{agentSlice-7OEXULAY.js → agentSlice-7T3ZLYET.js} +15 -14
  17. package/{appDeleteCommands-JPWTSFID.js → appDeleteCommands-TTJUYTQN.js} +46 -42
  18. package/{appDeployCommands-YCVY2UYO.js → appDeployCommands-65WYK2TQ.js} +46 -42
  19. package/{appDeployStatusCommands-JMCEIKTI.js → appDeployStatusCommands-U4XESYYG.js} +46 -42
  20. package/{appGetCommands-EXWT3QAE.js → appGetCommands-VNHZZC4D.js} +46 -42
  21. package/{appListCommands-PKRLSWRE.js → appListCommands-O667ZEU6.js} +46 -42
  22. package/{authCommand-F4EFRRX6.js → authCommand-SUHHTVHA.js} +118 -24
  23. package/{authCommands-RGOGCPP6.js → authCommands-5RTUDYZW.js} +7 -5
  24. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-PUGT65WS.js} +11 -9
  25. package/{chromeCommands-FZYAU75D.js → chromeCommands-AU5ZJXBG.js} +289 -37
  26. package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-ZYTCMNHG.js} +156 -22
  27. package/{chunk-ZNV445LB.js → chunk-2NGKYC3L.js} +29 -9
  28. package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
  29. package/{chunk-HVURBGF3.js → chunk-2U3NHADM.js} +6 -6
  30. package/{chunk-XA2FJW4L.js → chunk-3SXZ6SUC.js} +11 -9
  31. package/{chunk-UKZDAFYT.js → chunk-3VKDWQMJ.js} +6 -10
  32. package/chunk-4LCOCOR5.js +50 -0
  33. package/{chunk-JPGCXHNM.js → chunk-4LKMZ3RR.js} +1 -1
  34. package/{chunk-PQFHGD77.js → chunk-4VDS344D.js} +161 -14
  35. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  36. package/{chunk-6D6VBVEW.js → chunk-4W24JM32.js} +80 -14
  37. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  38. package/{chunk-GQBOR3G6.js → chunk-5F7UKMLN.js} +8 -4
  39. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  40. package/chunk-5MMAK75Q.js +15 -0
  41. package/{chunk-7S4YWN7P.js → chunk-5UUIGN6I.js} +4 -4
  42. package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
  43. package/{chunk-YCJN2RA3.js → chunk-6AIURTE7.js} +20 -11
  44. package/{chunk-VLTIYV3X.js → chunk-7I25CBT5.js} +34 -8
  45. package/chunk-AGIM7IMJ.js +147 -0
  46. package/{chunk-S4VLC46A.js → chunk-AM4G3LDJ.js} +66 -54
  47. package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
  48. package/{chunk-TJGWNDGO.js → chunk-AZB6HR4I.js} +846 -276
  49. package/{chunk-L5UXH3B2.js → chunk-BIH7KCDJ.js} +58 -9
  50. package/{chunk-UZGQNTVW.js → chunk-BPLIXNC6.js} +8 -6
  51. package/chunk-CEQ75WPL.js +915 -0
  52. package/chunk-CHOZJMJS.js +78 -0
  53. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  54. package/{chunk-GPCZ7UXG.js → chunk-DBKRC5O2.js} +1 -1
  55. package/chunk-DJ3JABG5.js +7990 -0
  56. package/{chunk-Q554LLSI.js → chunk-DMXLXZKL.js} +1 -1
  57. package/{chunk-UOBDA2JS.js → chunk-DSXRVBTA.js} +118 -90
  58. package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
  59. package/{chunk-HJUYAD4A.js → chunk-EBS4FKW4.js} +5 -5
  60. package/{chunk-LC43IGO4.js → chunk-EHGIEGLI.js} +834 -962
  61. package/{chunk-ABQYVJBJ.js → chunk-EV235ILT.js} +5 -5
  62. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  63. package/{chunk-TOP2VXOR.js → chunk-FJKZSR5P.js} +5 -5
  64. package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
  65. package/{chunk-SH43IESU.js → chunk-GGC55Q32.js} +199 -29
  66. package/{chunk-ZCYXJSTU.js → chunk-GMP3NBAA.js} +65 -95
  67. package/chunk-GMZLP5DV.js +82 -0
  68. package/{chunk-OIVSQH2O.js → chunk-GU7DC2TD.js} +300 -5
  69. package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
  70. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  71. package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
  72. package/{chunk-RJXZDT2P.js → chunk-HNA5KV37.js} +23 -28
  73. package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
  74. package/{chunk-ACTMNVHM.js → chunk-I5YMDACN.js} +1 -1
  75. package/{chunk-O6OSWFZQ.js → chunk-IHPDK6UD.js} +6 -0
  76. package/{chunk-QDSINZM3.js → chunk-IXH3HKY2.js} +1 -22
  77. package/{chunk-Q67DOFOO.js → chunk-IYIXAIEB.js} +199 -92
  78. package/{chunk-BP4XNZRM.js → chunk-JIXGJTBU.js} +4 -4
  79. package/{chunk-OEVAY4J6.js → chunk-JWNBEIME.js} +18 -20
  80. package/{chunk-Z77CRGTW.js → chunk-KA5O5KQL.js} +1 -1
  81. package/{chunk-JZL6EHZR.js → chunk-LGWABBTZ.js} +47 -67
  82. package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
  83. package/{chunk-GEPUP7OO.js → chunk-LOPP5VT6.js} +3 -3
  84. package/{chunk-DHDMC6FO.js → chunk-LUBFABMJ.js} +15 -14
  85. package/chunk-LWLNLZC5.js +265 -0
  86. package/{chunk-BNGW5ASC.js → chunk-LYLO5U3H.js} +15 -2
  87. package/{chunk-4OEFYTWL.js → chunk-MJ3CRU77.js} +85 -50
  88. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  89. package/{chunk-NA35QHCF.js → chunk-NTNKA5VL.js} +1 -1
  90. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  91. package/chunk-NWENLDMM.js +42 -0
  92. package/chunk-O7SVKKLY.js +875 -0
  93. package/{chunk-FM2YTE6D.js → chunk-OAXBDMT7.js} +1 -1
  94. package/chunk-OCZKATRC.js +129 -0
  95. package/{chunk-EYAQT56M.js → chunk-ODTBO4W6.js} +9 -6
  96. package/{chunk-VMFTFOWF.js → chunk-OKGVNZTL.js} +35 -8
  97. package/{chunk-EEGDMATE.js → chunk-OQ5IVGCV.js} +86 -81
  98. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  99. package/{chunk-KQ4ONNQD.js → chunk-OYTWDOQV.js} +155 -8
  100. package/{chunk-JRQFUXY7.js → chunk-OZ2IIIRP.js} +99 -22
  101. package/{chunk-WV42OMV7.js → chunk-PFLF4R4E.js} +8 -8
  102. package/{chunk-J4MOO56S.js → chunk-QDH32WF5.js} +10 -2
  103. package/{chunk-3DII57IT.js → chunk-QVAWUJAJ.js} +1 -1
  104. package/{chunk-3BMYXEUW.js → chunk-R5AJODNI.js} +1 -1
  105. package/{chunk-6OZ36FXI.js → chunk-SJ7CUF65.js} +22 -4
  106. package/{chunk-IIVGDG4I.js → chunk-SJKULPGX.js} +13 -7
  107. package/{chunk-ETI2NYVF.js → chunk-SYEBIZOF.js} +4 -4
  108. package/{chunk-J3WULTWA.js → chunk-TLKXNTQJ.js} +19 -17
  109. package/chunk-TLYSGGPG.js +15 -0
  110. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  111. package/chunk-TY3TIUJK.js +89 -0
  112. package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
  113. package/{chunk-YYLHWIW6.js → chunk-UKZX3NHN.js} +1 -1
  114. package/chunk-UM7TA3K4.js +1008 -0
  115. package/{chunk-6YTOJY35.js → chunk-VBG7GWWR.js} +253 -8
  116. package/chunk-VBQGO5NX.js +164 -0
  117. package/chunk-VIWDGTDA.js +8 -0
  118. package/chunk-VJVNU77E.js +83 -0
  119. package/{chunk-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
  120. package/chunk-VYKXIHRP.js +13692 -0
  121. package/chunk-VZLO4XJD.js +17 -0
  122. package/{chunk-DNCEALKX.js → chunk-WMWYWYK2.js} +22 -29
  123. package/{chunk-H56FOERC.js → chunk-XDQ7PHU3.js} +567 -684
  124. package/{chunk-AEOE4Z6Q.js → chunk-XGOHDYM2.js} +39 -15
  125. package/{chunk-53HEEOTT.js → chunk-XLWMNFBZ.js} +83 -16
  126. package/{chunk-V4MJDUSR.js → chunk-YFU5EELM.js} +2 -2
  127. package/{chunk-IUTWFZOX.js → chunk-YQFLBS6A.js} +68 -46
  128. package/chunk-YV25TM3R.js +780 -0
  129. package/chunk-ZRAU6T47.js +56 -0
  130. package/{chunk-5H7KJX7J.js → chunk-ZVGXD7UJ.js} +5 -5
  131. package/{chunk-H62HCIUP.js → chunk-ZYM73IHG.js} +36 -22
  132. package/commandRegistry-6QIAUQDS.js +833 -0
  133. package/{contentThunks-AZVYDLM4.js → contentThunks-5DDMUQ7B.js} +39 -36
  134. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
  135. package/{createAgentAutomationAction-V55DNYCE.js → createAgentAutomationAction-NQ6AZM42.js} +40 -37
  136. package/createDialogAction-QZ6X4A7O.js +70 -0
  137. package/{createPageAction-I3HH23O3.js → createPageAction-NCGEJBVK.js} +47 -43
  138. package/{chunk-GDNQO3QR.js → cursorProvider-YGGNMVWX.js} +2751 -10172
  139. package/{dbSlice-XVWBAGYN.js → dbSlice-RCZ7NRAF.js} +12 -11
  140. package/{deleteFile-YG6QMJLU.js → deleteFile-KESP65GC.js} +7 -6
  141. package/{dialogCommands-YVMHDEOX.js → dialogCommands-OGQLEF63.js} +49 -46
  142. package/{dialogSlice-LVJ67QWE.js → dialogSlice-GIKNUHNW.js} +57 -37
  143. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  144. package/{docCreateCommands-7UTWDYJU.js → docCreateCommands-RW6LNYT6.js} +48 -44
  145. package/{docDeleteCommands-GG6BJ4PS.js → docDeleteCommands-Z742TRNY.js} +49 -45
  146. package/{docReadCommands-QHMQVSLP.js → docReadCommands-5DIGA42Y.js} +47 -43
  147. package/{docStore-UJNL6SBT.js → docStore-6GUOZH52.js} +17 -13
  148. package/{docUpdateCommands-QPL6IVUK.js → docUpdateCommands-ZFZ2QEVK.js} +48 -44
  149. package/{fetchMessages-EIU7UFFK.js → fetchMessages-3PXAHKCR.js} +5 -5
  150. package/{getPricing-LUSEABA6.js → getPricing-QVSNUFZ6.js} +4 -4
  151. package/{handleSendMessageAction-CCL7ETCL.js → handleSendMessageAction-B2VXOLMM.js} +109 -42
  152. package/index.js +87 -884
  153. package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
  154. package/{localDialogRead-BTFJ4V2I.js → localDialogRead-UYCKO7YZ.js} +2 -2
  155. package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-TU6OBC76.js} +9 -6
  156. package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-VKWVOPPI.js} +1 -1
  157. package/{machineCommands-2QNINBNI.js → machineCommands-AI3N7JHQ.js} +93 -83
  158. package/machineWsRunDispatch-RPF2D6VV.js +154 -0
  159. package/{memberThunks-QGFLFVCI.js → memberThunks-YICJI4IS.js} +20 -18
  160. package/{models-T3SG6MJ5.js → models-FTNFVO3D.js} +2 -2
  161. package/oauthTokenStore-ITEB663N.js +23 -0
  162. package/package.json +1 -1
  163. package/pdf-U6KSUEZZ.js +26435 -0
  164. package/processSpawn-SOAV3FEV.js +11 -0
  165. package/profileConfig-ZGOFORWV.js +43 -0
  166. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-OJJXQ7NM.js} +7 -7
  167. package/{providerRegistry-757OWH3O.js → providerRegistry-DXFBDCGQ.js} +11 -7
  168. package/{read-COE3ZYR6.js → read-XMBM52Y4.js} +8 -7
  169. package/{readDocTool-5USN4A6V.js → readDocTool-LAQHKCVT.js} +5 -3
  170. package/{readlineWorkspace-4GULS23D.js → readlineWorkspace-EPUCVZ73.js} +2594 -2030
  171. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-HDUI2MU3.js} +22 -26
  172. package/{runAgentClientLoop-MUMLW2SA.js → runAgentClientLoop-OXQMDGAN.js} +78 -71
  173. package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-PIVSBZRZ.js} +4 -4
  174. package/runtimeModeArgs-2Y7BALTO.js +31 -0
  175. package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-ADBVOP4O.js} +16 -14
  176. package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-PXVXQJ62.js} +23 -27
  177. package/{chunk-AFUORTY4.js → settingThunks-G2MJRKUE.js} +226 -940
  178. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
  179. package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
  180. package/{spaceCommands-BMXKR7H6.js → spaceCommands-Z662QYY6.js} +51 -47
  181. package/{streamAgentChatTurn-6EOS5PNG.js → streamAgentChatTurn-YJYEJHP7.js} +214 -114
  182. package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-Z3RZACGF.js} +19 -20
  183. package/{tableCommands-O6NWHFKV.js → tableCommands-6U4BMLRR.js} +10 -10
  184. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-AD7CXTA4.js} +4 -3
  185. package/tools-GHI3WBEI.js +117 -0
  186. package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-WTC6GCQC.js} +25 -23
  187. package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
  188. package/{updateDialogTitleAction-4YUVCBDU.js → updateDialogTitleAction-GJCNWTPY.js} +84 -45
  189. package/action-YVYQEAAV.js +0 -31
  190. package/agentListCommands-3GWH4E4G.js +0 -410
  191. package/agentRecordCommands-P76DPWKV.js +0 -128
  192. package/agentRunCommand-EQPL4F4K.js +0 -156
  193. package/browser-image-compression-MFDTD7K6.js +0 -1763
  194. package/chatQueueReduxAdapter-ZBDDI2E5.js +0 -186
  195. package/chunk-CQ3WA2NE.js +0 -299
  196. package/chunk-M76ECQRD.js +0 -13658
  197. package/chunk-MEYIRKDN.js +0 -8967
  198. package/chunk-PUOC4YRO.js +0 -394
  199. package/chunk-Q5FJJ6XI.js +0 -103
  200. package/chunk-S7Z2HMCN.js +0 -25
  201. package/chunk-WC6UUQ2C.js +0 -20923
  202. package/chunk-Y5GCAMGP.js +0 -9
  203. package/chunk-YPREESF4.js +0 -225
  204. package/createDialogAction-H6URYLIZ.js +0 -65
  205. package/machineWsRunDispatch-S3XXOKR7.js +0 -144
  206. package/settingSlice-ZQZVUPKK.js +0 -204
  207. package/syncMapping-N6RGXGBW.js +0 -437
  208. package/tools-4AJZHAK3.js +0 -110
  209. package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
  210. package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
@@ -10,6 +10,114 @@ var GLOBAL_DIALOG_RUNTIME_KEY = "__global__";
10
10
 
11
11
  // packages/chat/dialog/dialogRuntimeStore.ts
12
12
  var import_react = __toESM(require_react());
13
+
14
+ // packages/app/utils/localStorageState.ts
15
+ function readStorageJSON(key) {
16
+ if (typeof window === "undefined") return null;
17
+ try {
18
+ const raw = window.localStorage.getItem(key);
19
+ if (!raw) return null;
20
+ return JSON.parse(raw);
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ function writeStorageJSON(key, value) {
26
+ if (typeof window === "undefined") return;
27
+ try {
28
+ window.localStorage.setItem(key, JSON.stringify(value));
29
+ } catch {
30
+ }
31
+ }
32
+
33
+ // packages/chat/dialog/mediaJobPendingPersistence.ts
34
+ var MEDIA_JOB_PENDING_STORAGE_KEY = "nolo:chat:media-job-pending:v1";
35
+ var MEDIA_JOB_PENDING_KEEP_PER_DIALOG = 10;
36
+ var currentActorId = null;
37
+ function setMediaJobPendingActor(actorId) {
38
+ currentActorId = actorId && actorId.length > 0 ? actorId : null;
39
+ }
40
+ function getMediaJobPendingActor() {
41
+ return currentActorId;
42
+ }
43
+ var actorKey = () => `@${currentActorId ?? "anon"}`;
44
+ var bucketKeyOf = (dialogKey) => dialogKey ?? GLOBAL_DIALOG_RUNTIME_KEY;
45
+ var isEntry = (value) => {
46
+ if (!value || typeof value !== "object") return false;
47
+ const entry = value;
48
+ return typeof entry.id === "string" && entry.id.length > 0 && typeof entry.name === "string";
49
+ };
50
+ var readAllActors = () => {
51
+ const raw = readStorageJSON(MEDIA_JOB_PENDING_STORAGE_KEY);
52
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return {};
53
+ return raw;
54
+ };
55
+ var writeActorMap = (map) => {
56
+ const all = readAllActors();
57
+ all[actorKey()] = map;
58
+ writeStorageJSON(MEDIA_JOB_PENDING_STORAGE_KEY, all);
59
+ };
60
+ function readMediaJobPendingMap() {
61
+ const scoped = readAllActors()[actorKey()];
62
+ if (!scoped || typeof scoped !== "object" || Array.isArray(scoped)) return {};
63
+ const map = {};
64
+ for (const [dialogKey, entries] of Object.entries(scoped)) {
65
+ if (!Array.isArray(entries)) continue;
66
+ const valid = entries.filter(isEntry).map((entry) => ({
67
+ id: entry.id,
68
+ name: entry.name,
69
+ fileKey: typeof entry.fileKey === "string" ? entry.fileKey : void 0,
70
+ mimeType: typeof entry.mimeType === "string" ? entry.mimeType : void 0,
71
+ size: typeof entry.size === "number" ? entry.size : void 0,
72
+ durationSec: typeof entry.durationSec === "number" ? entry.durationSec : void 0,
73
+ savedAt: typeof entry.savedAt === "number" && Number.isFinite(entry.savedAt) ? entry.savedAt : 0
74
+ }));
75
+ if (valid.length) map[dialogKey] = valid;
76
+ }
77
+ return map;
78
+ }
79
+ function upsertMediaJobPendingEntry(entry) {
80
+ const map = readMediaJobPendingMap();
81
+ const dialogKey = bucketKeyOf(entry.dialogKey);
82
+ const kept = (map[dialogKey] ?? []).filter((item) => item.id !== entry.id);
83
+ kept.push({ ...entry, savedAt: Date.now() });
84
+ map[dialogKey] = kept.slice(-MEDIA_JOB_PENDING_KEEP_PER_DIALOG);
85
+ writeActorMap(map);
86
+ }
87
+ function removeMediaJobPendingEntryById(id) {
88
+ const map = readMediaJobPendingMap();
89
+ let changed = false;
90
+ for (const [dialogKey, entries] of Object.entries(map)) {
91
+ const kept = entries.filter((entry) => entry.id !== id);
92
+ if (kept.length !== entries.length) {
93
+ changed = true;
94
+ if (kept.length) map[dialogKey] = kept;
95
+ else delete map[dialogKey];
96
+ }
97
+ }
98
+ if (changed) writeActorMap(map);
99
+ }
100
+ function clearMediaJobPendingEntries(payload) {
101
+ if (payload?.all) {
102
+ writeStorageJSON(MEDIA_JOB_PENDING_STORAGE_KEY, {});
103
+ return;
104
+ }
105
+ const dialogKey = bucketKeyOf(payload?.dialogKey);
106
+ const map = readMediaJobPendingMap();
107
+ if (!(dialogKey in map)) return;
108
+ delete map[dialogKey];
109
+ writeActorMap(map);
110
+ }
111
+ function pruneMediaJobPendingEntries(dialogKey, keep = MEDIA_JOB_PENDING_KEEP_PER_DIALOG) {
112
+ const key = bucketKeyOf(dialogKey);
113
+ const map = readMediaJobPendingMap();
114
+ const entries = map[key];
115
+ if (!entries || entries.length <= keep) return;
116
+ map[key] = entries.slice(-keep);
117
+ writeActorMap(map);
118
+ }
119
+
120
+ // packages/chat/dialog/dialogRuntimeStore.ts
13
121
  var createEmptyTokenStats = () => ({
14
122
  inputTokens: 0,
15
123
  outputTokens: 0,
@@ -21,7 +129,10 @@ var createEmptyDialogRuntimeState = () => ({
21
129
  activeControllers: {},
22
130
  pendingRawData: {},
23
131
  loopStopReason: null,
24
- pendingUserInputQueue: []
132
+ turnPhase: null,
133
+ turnPhaseTurnId: null,
134
+ pendingUserInputQueue: [],
135
+ recoveredForegroundTurn: null
25
136
  });
26
137
  var activeDialogKey = null;
27
138
  var configError = null;
@@ -67,6 +178,8 @@ function resetDialogRuntimeSessionState(dialogKey) {
67
178
  const runtime = ensureDialogRuntimeState(dialogKey);
68
179
  runtime.tokens = createEmptyTokenStats();
69
180
  runtime.loopStopReason = null;
181
+ runtime.turnPhase = null;
182
+ runtime.turnPhaseTurnId = null;
70
183
  runtime.pendingUserInputQueue = [];
71
184
  notify();
72
185
  }
@@ -74,21 +187,49 @@ function addPendingFile(payload) {
74
187
  const targetRuntimeKey = payload.targetDialogKey ?? payload.runtimeDialogKey ?? (payload.type === "dialog" ? activeDialogKey : payload.dialogKey);
75
188
  const runtime = ensureDialogRuntimeState(targetRuntimeKey);
76
189
  if (!runtime.pendingFiles.some((f) => f.id === payload.id)) {
77
- runtime.pendingFiles.push(payload);
190
+ runtime.pendingFiles = [...runtime.pendingFiles, payload];
191
+ if (payload.type === "media_job") {
192
+ upsertMediaJobPendingEntry({
193
+ id: payload.id,
194
+ name: payload.name,
195
+ fileKey: payload.fileKey,
196
+ mimeType: payload.mimeType,
197
+ size: payload.size,
198
+ durationSec: payload.durationSec,
199
+ // 与写入侧 bucket 推导严格同源:`dialogKey || GLOBAL_DIALOG_RUNTIME_KEY`
200
+ // (useMessageInputFiles 的 effectiveDialogKey 同规则)。不依赖
201
+ // activeDialogKey 隐式回退,保证恢复时读到的就是当初写入的 bucket。
202
+ dialogKey: payload.dialogKey ?? GLOBAL_DIALOG_RUNTIME_KEY
203
+ });
204
+ }
78
205
  notify();
79
206
  }
80
207
  return action("dialogRuntime/addPendingFile", payload);
81
208
  }
82
209
  function removePendingFile(fileId) {
83
210
  const runtime = ensureDialogRuntimeState();
84
- const fileToRemove = runtime.pendingFiles.find((f) => f.id === fileId);
211
+ let fileToRemove = runtime.pendingFiles.find((f) => f.id === fileId);
212
+ let runtimeHoldingFile = runtime;
213
+ if (!fileToRemove) {
214
+ for (const candidate of Object.values(runtimeByKey)) {
215
+ const found = candidate.pendingFiles.find((f) => f.id === fileId);
216
+ if (found) {
217
+ fileToRemove = found;
218
+ runtimeHoldingFile = candidate;
219
+ break;
220
+ }
221
+ }
222
+ }
85
223
  if (fileToRemove) {
86
224
  if (fileToRemove.pageKey) {
87
- delete runtime.pendingRawData[fileToRemove.pageKey];
225
+ delete runtimeHoldingFile.pendingRawData[fileToRemove.pageKey];
88
226
  }
89
- runtime.pendingFiles = runtime.pendingFiles.filter(
227
+ runtimeHoldingFile.pendingFiles = runtimeHoldingFile.pendingFiles.filter(
90
228
  (file) => file.id !== fileId
91
229
  );
230
+ if (fileToRemove.type === "media_job") {
231
+ removeMediaJobPendingEntryById(fileToRemove.id);
232
+ }
92
233
  notify();
93
234
  }
94
235
  return action("dialogRuntime/removePendingFile", fileId);
@@ -99,10 +240,14 @@ function clearPendingAttachments(payload) {
99
240
  runtime2.pendingFiles = [];
100
241
  runtime2.pendingRawData = {};
101
242
  });
243
+ clearMediaJobPendingEntries({ all: true });
102
244
  notify();
103
245
  return action("dialogRuntime/clearPendingAttachments", payload);
104
246
  }
105
247
  const runtime = ensureDialogRuntimeState(payload?.dialogKey);
248
+ runtime.pendingFiles.forEach((file) => {
249
+ if (file.type === "media_job") removeMediaJobPendingEntryById(file.id);
250
+ });
106
251
  runtime.pendingFiles = [];
107
252
  runtime.pendingRawData = {};
108
253
  notify();
@@ -114,11 +259,89 @@ function setLoopStopReason(payload) {
114
259
  notify();
115
260
  return action("dialogRuntime/setLoopStopReason", payload);
116
261
  }
262
+ function setRecoveredForegroundTurn(payload) {
263
+ const runtime = ensureDialogRuntimeState(payload.dialogKey);
264
+ runtime.recoveredForegroundTurn = payload.status;
265
+ notify();
266
+ return action("dialogRuntime/setRecoveredForegroundTurn", payload);
267
+ }
268
+ function claimDialogTurnPhase(payload) {
269
+ const runtime = ensureDialogRuntimeState(payload.dialogKey);
270
+ runtime.turnPhaseTurnId = payload.turnId;
271
+ runtime.turnPhase = null;
272
+ notify();
273
+ return action("dialogRuntime/claimDialogTurnPhase", payload);
274
+ }
275
+ function setDialogTurnPhase(payload) {
276
+ const runtime = ensureDialogRuntimeState(payload.dialogKey);
277
+ if (typeof payload.turnId === "string" && runtime.turnPhaseTurnId !== null && runtime.turnPhaseTurnId !== payload.turnId) {
278
+ return action("dialogRuntime/setDialogTurnPhase:rejected", payload);
279
+ }
280
+ runtime.turnPhase = payload.phase;
281
+ runtime.turnPhaseTurnId = payload.phase === null ? null : payload.turnId ?? null;
282
+ notify();
283
+ return action("dialogRuntime/setDialogTurnPhase", payload);
284
+ }
285
+ function clearDialogTurnPhase(payload = {}) {
286
+ return setDialogTurnPhase({ phase: null, dialogKey: payload.dialogKey, turnId: payload.turnId });
287
+ }
117
288
  function clearDialogRuntimeState(payload) {
289
+ const runtime = runtimeByKey[payload.dialogKey];
290
+ runtime?.pendingFiles.forEach((file) => {
291
+ if (file.type === "media_job") removeMediaJobPendingEntryById(file.id);
292
+ });
118
293
  delete runtimeByKey[payload.dialogKey];
119
294
  notify();
120
295
  return action("dialogRuntime/clearDialogRuntimeState", payload);
121
296
  }
297
+ function restoreMediaJobPendingFiles(dialogKey) {
298
+ const runtimeKey = resolveDialogRuntimeKey(dialogKey);
299
+ const entries = (readMediaJobPendingMap()[runtimeKey] ?? []).slice(-MEDIA_JOB_PENDING_KEEP_PER_DIALOG);
300
+ if (!entries.length) return 0;
301
+ const runtime = ensureDialogRuntimeState(runtimeKey);
302
+ const existingIds = new Set(runtime.pendingFiles.map((file) => file.id));
303
+ let restored = 0;
304
+ for (const entry of entries) {
305
+ if (existingIds.has(entry.id)) continue;
306
+ addPendingFile({
307
+ id: entry.id,
308
+ name: entry.name,
309
+ type: "media_job",
310
+ fileKey: entry.fileKey,
311
+ mimeType: entry.mimeType,
312
+ size: entry.size,
313
+ durationSec: entry.durationSec,
314
+ trackingId: entry.id,
315
+ dialogKey: runtimeKey
316
+ });
317
+ restored += 1;
318
+ }
319
+ pruneMediaJobPendingEntries(runtimeKey);
320
+ return restored;
321
+ }
322
+ var MEDIA_NOTE_PAGE_KEY_PREFIX = "media-note:";
323
+ var isMediaNotePageReference = (pageKey) => typeof pageKey === "string" && pageKey.startsWith(MEDIA_NOTE_PAGE_KEY_PREFIX);
324
+ var getMediaJobRuntimeActor = () => getMediaJobPendingActor();
325
+ function setMediaJobRuntimeActor(actorId) {
326
+ const next = actorId && actorId.length ? actorId : null;
327
+ if (getMediaJobPendingActor() === next) return;
328
+ setMediaJobPendingActor(next);
329
+ for (const key of Object.keys(runtimeByKey)) {
330
+ const runtime = runtimeByKey[key];
331
+ const kept = runtime.pendingFiles.filter(
332
+ (f) => f.type !== "media_job" && !isMediaNotePageReference(f.pageKey)
333
+ );
334
+ if (kept.length !== runtime.pendingFiles.length) {
335
+ runtime.pendingFiles = kept;
336
+ }
337
+ for (const pageKey of Object.keys(runtime.pendingRawData)) {
338
+ if (isMediaNotePageReference(pageKey)) {
339
+ delete runtime.pendingRawData[pageKey];
340
+ }
341
+ }
342
+ }
343
+ notify();
344
+ }
122
345
  function addActiveController(payload) {
123
346
  const runtime = ensureDialogRuntimeState(payload.dialogKey);
124
347
  runtime.activeControllers[payload.messageId] = payload.controller;
@@ -181,7 +404,7 @@ function tokenUsageLiveUpdate(payload) {
181
404
  }
182
405
  function addPageReferenceToRuntime(payload) {
183
406
  const runtime = ensureDialogRuntimeState(payload.dialogKey);
184
- runtime.pendingFiles.push(payload.reference);
407
+ runtime.pendingFiles = [...runtime.pendingFiles, payload.reference];
185
408
  if (payload.rawData?.pageKey) {
186
409
  runtime.pendingRawData[payload.rawData.pageKey] = payload.rawData;
187
410
  }
@@ -258,6 +481,12 @@ function getPendingUserInputQueue(dialogKey) {
258
481
  function getLoopStopReason(dialogKey) {
259
482
  return getDialogRuntimeState(dialogKey).loopStopReason;
260
483
  }
484
+ function getDialogTurnPhase(dialogKey) {
485
+ return getDialogRuntimeState(dialogKey).turnPhase;
486
+ }
487
+ function getRecoveredForegroundTurn(dialogKey) {
488
+ return getDialogRuntimeState(dialogKey).recoveredForegroundTurn;
489
+ }
261
490
  var selectDialogRuntimeByKey = (_state, dialogKey) => getDialogRuntimeState(dialogKey);
262
491
  var selectPendingFiles = (_state, dialogKey) => getPendingFiles(dialogKey);
263
492
  var selectActiveControllers = (_state, dialogKey) => getActiveControllers(dialogKey);
@@ -293,6 +522,14 @@ function useLoopStopReason(dialogKey) {
293
522
  (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
294
523
  return getLoopStopReason(dialogKey);
295
524
  }
525
+ function useDialogTurnPhase(dialogKey) {
526
+ (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
527
+ return getDialogTurnPhase(dialogKey);
528
+ }
529
+ function useRecoveredForegroundTurn(dialogKey) {
530
+ (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
531
+ return getRecoveredForegroundTurn(dialogKey);
532
+ }
296
533
  function useDialogRuntimeTokens(dialogKey) {
297
534
  (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
298
535
  return getDialogRuntimeTokens(dialogKey);
@@ -316,7 +553,14 @@ export {
316
553
  removePendingFile,
317
554
  clearPendingAttachments,
318
555
  setLoopStopReason,
556
+ setRecoveredForegroundTurn,
557
+ claimDialogTurnPhase,
558
+ setDialogTurnPhase,
559
+ clearDialogTurnPhase,
319
560
  clearDialogRuntimeState,
561
+ restoreMediaJobPendingFiles,
562
+ getMediaJobRuntimeActor,
563
+ setMediaJobRuntimeActor,
320
564
  addActiveController,
321
565
  removeActiveController,
322
566
  clearActiveControllers,
@@ -330,8 +574,7 @@ export {
330
574
  deleteDialogRuntime,
331
575
  abortActiveControllers,
332
576
  getDialogRuntimeTokens,
333
- getPendingUserInputQueue,
334
- getLoopStopReason,
577
+ getRecoveredForegroundTurn,
335
578
  selectDialogRuntimeByKey,
336
579
  selectPendingFiles,
337
580
  selectActiveControllers,
@@ -346,6 +589,8 @@ export {
346
589
  useActiveControllers,
347
590
  usePendingUserInputQueue,
348
591
  useLoopStopReason,
592
+ useDialogTurnPhase,
593
+ useRecoveredForegroundTurn,
349
594
  useDialogRuntimeTokens,
350
595
  useCurrentDialogKey,
351
596
  useDialogConfigError
@@ -0,0 +1,164 @@
1
+ import {
2
+ noloAgentId
3
+ } from "./chunk-TLYSGGPG.js";
4
+ import {
5
+ asTrimmedLowercaseString
6
+ } from "./chunk-QSJ3HFEF.js";
7
+ import {
8
+ normalizeServerOrigin
9
+ } from "./chunk-CF7PE763.js";
10
+
11
+ // packages/app/theme/fontPreference.ts
12
+ var FONT_PRESET_ALIASES = {
13
+ system: "system",
14
+ default: "system",
15
+ hei: "hei",
16
+ heiti: "hei",
17
+ sans: "hei",
18
+ song: "song",
19
+ songti: "song",
20
+ serif: "song",
21
+ kai: "kai",
22
+ kaiti: "kai",
23
+ "kai-ti": "kai",
24
+ "fang-song": "fang-song",
25
+ fangsong: "fang-song",
26
+ "fang song": "fang-song"
27
+ };
28
+ var normalizeFontPreset = (value) => {
29
+ const normalized = asTrimmedLowercaseString(value);
30
+ return FONT_PRESET_ALIASES[normalized];
31
+ };
32
+
33
+ // packages/ai/policy/types.ts
34
+ var DEFAULT_AGENT_BASE_POLICY = {
35
+ version: 1,
36
+ tone: {
37
+ preset: "default",
38
+ resolutionMode: "blend"
39
+ },
40
+ knowledgeCaptureMaxLevel: 4,
41
+ spaceContextMaxLevel: 4,
42
+ selfEvolutionMode: "knowledge_only"
43
+ };
44
+ var DEFAULT_USER_PREFERENCE_PROFILE = {
45
+ version: 1,
46
+ tone: {
47
+ preset: "default"
48
+ },
49
+ knowledgeCaptureLevel: 2,
50
+ spaceContextLevel: 3
51
+ };
52
+
53
+ // packages/app/settings/settingTypes.ts
54
+ var SYSTEM_DEFAULT_AGENT_ID = "system-default";
55
+
56
+ // packages/app/settings/settingNormalizers.ts
57
+ var hasOwn = (target, key) => Object.prototype.hasOwnProperty.call(target, key);
58
+ var normalizeDefaultAgentIdSetting = (value) => {
59
+ if (typeof value !== "string" || value.trim() === "") {
60
+ return void 0;
61
+ }
62
+ return value === noloAgentId || value === SYSTEM_DEFAULT_AGENT_ID ? SYSTEM_DEFAULT_AGENT_ID : value;
63
+ };
64
+ var normalizeAuthorityHomeServerSetting = (value) => {
65
+ const normalized = normalizeServerOrigin(value);
66
+ return /^https?:\/\//i.test(normalized) ? normalized : null;
67
+ };
68
+ var normalizeTonePresetSetting = (value) => {
69
+ switch (value) {
70
+ case "professional":
71
+ case "friendly":
72
+ case "direct":
73
+ case "pragmatic":
74
+ case "default":
75
+ return value;
76
+ default:
77
+ return DEFAULT_USER_PREFERENCE_PROFILE.tone?.preset ?? "default";
78
+ }
79
+ };
80
+ var normalizePolicyLevelSetting = (value, fallback) => {
81
+ const n = Number(value);
82
+ if (n === 1 || n === 2 || n === 3 || n === 4) {
83
+ return n;
84
+ }
85
+ return fallback;
86
+ };
87
+ var resolveDefaultAgentIdSetting = (value) => normalizeDefaultAgentIdSetting(value) ?? SYSTEM_DEFAULT_AGENT_ID;
88
+ var omitKeys = (record, keys) => {
89
+ const next = { ...record };
90
+ keys.forEach((key) => {
91
+ delete next[key];
92
+ });
93
+ return next;
94
+ };
95
+ var isRecordLike = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
96
+ var normalizeSystemBuiltinSkills = (value, defaults) => {
97
+ const base = isRecordLike(value) ? value : {};
98
+ const result = { ...defaults };
99
+ for (const key of Object.keys(base)) {
100
+ result[key] = Boolean(base[key]);
101
+ }
102
+ return result;
103
+ };
104
+
105
+ // packages/ai/policy/selfUpdateFields.ts
106
+ var AGENT_UPDATE_FIELD_NAMES = [
107
+ "name",
108
+ "handle",
109
+ "model",
110
+ "provider",
111
+ "prompt",
112
+ "introduction",
113
+ "greeting",
114
+ "isPublic",
115
+ "tags",
116
+ "tools",
117
+ "references",
118
+ "temperature",
119
+ "top_p",
120
+ "frequency_penalty",
121
+ "presence_penalty",
122
+ "max_tokens",
123
+ "reasoning_effort"
124
+ ];
125
+ var PRIMARY_AUTO_APPROVE_SELF_UPDATE_FIELDS = [
126
+ "greeting",
127
+ "introduction",
128
+ "tags"
129
+ ];
130
+ var DEFAULT_AUTO_APPROVED_SELF_UPDATE_FIELDS = [
131
+ ...PRIMARY_AUTO_APPROVE_SELF_UPDATE_FIELDS
132
+ ];
133
+ var VALID_AGENT_UPDATE_FIELDS = new Set(AGENT_UPDATE_FIELD_NAMES);
134
+ var normalizeAgentUpdateFieldList = (value, fallback = DEFAULT_AUTO_APPROVED_SELF_UPDATE_FIELDS) => {
135
+ if (!Array.isArray(value)) {
136
+ return [...fallback];
137
+ }
138
+ const normalized = Array.from(
139
+ new Set(
140
+ value.filter(
141
+ (item) => typeof item === "string" && VALID_AGENT_UPDATE_FIELDS.has(item)
142
+ )
143
+ )
144
+ );
145
+ return normalized;
146
+ };
147
+
148
+ export {
149
+ normalizeFontPreset,
150
+ DEFAULT_AGENT_BASE_POLICY,
151
+ DEFAULT_USER_PREFERENCE_PROFILE,
152
+ AGENT_UPDATE_FIELD_NAMES,
153
+ DEFAULT_AUTO_APPROVED_SELF_UPDATE_FIELDS,
154
+ normalizeAgentUpdateFieldList,
155
+ SYSTEM_DEFAULT_AGENT_ID,
156
+ hasOwn,
157
+ normalizeDefaultAgentIdSetting,
158
+ normalizeAuthorityHomeServerSetting,
159
+ normalizeTonePresetSetting,
160
+ normalizePolicyLevelSetting,
161
+ resolveDefaultAgentIdSetting,
162
+ omitKeys,
163
+ normalizeSystemBuiltinSkills
164
+ };
@@ -0,0 +1,8 @@
1
+ // packages/agent-runtime/cursor/isCursorOAuthAgent.ts
2
+ function isCursorOAuthAgent(agent) {
3
+ return agent.apiKeyRef?.trim().toLowerCase() === "cursor";
4
+ }
5
+
6
+ export {
7
+ isCursorOAuthAgent
8
+ };
@@ -0,0 +1,83 @@
1
+ // packages/cli/secretScan.ts
2
+ var ASSIGNMENT_KEYS = [
3
+ { label: "password", keys: "password|passwd", min: 8 },
4
+ { label: "psk", keys: "psk", min: 8 },
5
+ { label: "api key", keys: "api[_-]?key|apikey", min: 12 },
6
+ { label: "token", keys: "token|secret", min: 12 }
7
+ ];
8
+ var ASSIGNMENT_PATTERNS = ASSIGNMENT_KEYS.map(
9
+ ({ label, keys, min }) => ({
10
+ label,
11
+ // 反向引用 \1 让引号成对成为必要条件:半截引号不算。值里允许空格与逗号——
12
+ // 写成带空格的口令是常见形态,旧的字符类会把这种值截成半截从而整条漏掉。
13
+ quoted: new RegExp(
14
+ `\\b(?:${keys})\\s*[:=]\\s*(["'])([^"']{${min},})\\1`,
15
+ "i"
16
+ ),
17
+ // 不带引号时只取到分隔符为止,是否算密钥交给 looksLikeBareSecret 判。
18
+ bare: new RegExp(
19
+ `\\b(?:${keys})\\s*[:=]\\s*([^\\s"',#]{${min},})`,
20
+ "i"
21
+ )
22
+ })
23
+ );
24
+ var PRIVATE_KEY_PATTERN = /-----BEGIN [A-Z ]*PRIVATE KEY-----/;
25
+ var EXPRESSION_CHARS = /[?(){};|&<>$]/;
26
+ var CONSTANT_CASE = /^[A-Z][A-Z0-9_]*$/;
27
+ var CAMEL_CASE = /^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]+)+$/;
28
+ var PROPERTY_SEGMENT = /^[A-Za-z_$][\w$]*$/;
29
+ var NAME_FORM_MAX_CHARS = 48;
30
+ var PROPERTY_SEGMENT_MAX_CHARS = 24;
31
+ function looksLikeDottedName(value) {
32
+ const segments = value.split(".");
33
+ if (segments.length < 2) return false;
34
+ return segments.every(
35
+ (segment) => PROPERTY_SEGMENT.test(segment) && (segment.length <= PROPERTY_SEGMENT_MAX_CHARS || CONSTANT_CASE.test(segment) && segment.includes("_"))
36
+ );
37
+ }
38
+ function stripTrailingMarkdownFence(value) {
39
+ return value.replace(/`+$/, "");
40
+ }
41
+ function looksLikeBareSecret(rawValue) {
42
+ const value = stripTrailingMarkdownFence(rawValue);
43
+ if (EXPRESSION_CHARS.test(value)) return false;
44
+ if (CONSTANT_CASE.test(value) && value.includes("_")) return false;
45
+ if (looksLikeDottedName(value)) return false;
46
+ if (value.length > NAME_FORM_MAX_CHARS) {
47
+ return /\d/.test(value);
48
+ }
49
+ if (CAMEL_CASE.test(value)) return false;
50
+ return true;
51
+ }
52
+ function toPreview(line) {
53
+ return line.length > 120 ? `${line.slice(0, 117)}...` : line;
54
+ }
55
+ function findPotentialSecrets(text) {
56
+ const findings = [];
57
+ text.split(/\r?\n/).forEach((line, index) => {
58
+ const lineNumber = index + 1;
59
+ const preview = toPreview(line);
60
+ for (const { label, quoted, bare } of ASSIGNMENT_PATTERNS) {
61
+ if (quoted.test(line)) {
62
+ findings.push({ label, line: lineNumber, preview });
63
+ continue;
64
+ }
65
+ const bareMatch = bare.exec(line);
66
+ if (bareMatch && looksLikeBareSecret(bareMatch[1])) {
67
+ findings.push({ label, line: lineNumber, preview });
68
+ }
69
+ }
70
+ if (PRIVATE_KEY_PATTERN.test(line)) {
71
+ findings.push({ label: "private key", line: lineNumber, preview });
72
+ }
73
+ });
74
+ return findings;
75
+ }
76
+ function formatSecretFindings(findings) {
77
+ return findings.map((finding) => ` line ${finding.line} (${finding.label}): ${finding.preview}`).join("\n");
78
+ }
79
+
80
+ export {
81
+ findPotentialSecrets,
82
+ formatSecretFindings
83
+ };