nolo-cli 0.33.0-alpha.9 → 0.34.0-alpha.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 (158) hide show
  1. package/{_executeModel-2WR4RTZZ.js → _executeModel-BUYCXZCQ.js} +65 -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-WSS2IJVM.js} +40 -39
  6. package/{agentEmailCommands-DGJVCMCG.js → agentEmailCommands-SHTPJTSX.js} +75 -75
  7. package/{agentListCommands-6NWMLIMQ.js → agentListCommands-GV6UYVAF.js} +47 -37
  8. package/{agentMachineCommands-5MUO6RDI.js → agentMachineCommands-FLD7TAFH.js} +37 -36
  9. package/agentProviderCommands-65ZC2WB4.js +122 -0
  10. package/{agentPullCommand-YH5GEBK4.js → agentPullCommand-TSWAJPS2.js} +1 -1
  11. package/agentRecordCommands-57W6R7QW.js +113 -0
  12. package/{agentRunCommand-LYEMVQJH.js → agentRunCommand-HJGXSMDN.js} +78 -76
  13. package/{agentRunControl-SCIVRZWX.js → agentRunControl-GXOB47YI.js} +5 -1
  14. package/{agentRuntimeLocal-PRAR3NCW.js → agentRuntimeLocal-G7ZV55I6.js} +33 -33
  15. package/{agentSlice-AMDSTXP5.js → agentSlice-HFR7SP3B.js} +12 -12
  16. package/agentSuperviseCommands-Q64S5SPG.js +640 -0
  17. package/{appDeleteCommands-L5PKC42V.js → appDeleteCommands-SHHE56Y2.js} +35 -34
  18. package/{appDeployCommands-3J7Z4XWV.js → appDeployCommands-WUMSO2VS.js} +35 -34
  19. package/{appDeployStatusCommands-YTRPXE72.js → appDeployStatusCommands-VZSVN6SR.js} +35 -34
  20. package/{appGetCommands-JVXV5WXD.js → appGetCommands-ZJ2C3A5Y.js} +35 -34
  21. package/{appListCommands-7KDEOJSO.js → appListCommands-W33L6U5X.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-SYIX4ODY.js} +28 -28
  25. package/{chunk-UM4H3URE.js → chunk-23KKIMD5.js} +7 -7
  26. package/{chunk-HUCT7HID.js → chunk-2KO5QQFV.js} +2 -2
  27. package/{chunk-2UECQ7RE.js → chunk-3AOLVADY.js} +1 -1
  28. package/{chunk-EMW55KKX.js → chunk-3LWZNEGQ.js} +1 -1
  29. package/{chunk-MQWVAOIU.js → chunk-3XZUNRYF.js} +33 -158
  30. package/{chunk-M2YMQOLC.js → chunk-4APLX2RT.js} +75 -10
  31. package/{chunk-ZHYK3N56.js → chunk-4AWH4LQA.js} +3 -1
  32. package/{chunk-3GZXL6FM.js → chunk-4DMPISV6.js} +7 -3
  33. package/chunk-4HOXB6SY.js +297 -0
  34. package/{chunk-OIQPORYI.js → chunk-64KIQZA2.js} +175 -2
  35. package/{chunk-BQ3OHLR5.js → chunk-6KYCG5GW.js} +1216 -690
  36. package/chunk-6XG52ZQ6.js +146 -0
  37. package/{chunk-GOIDVXK5.js → chunk-74IQ5RRO.js} +21 -8
  38. package/{chunk-FMEVI5TG.js → chunk-7CH6U3FL.js} +1 -1
  39. package/{chunk-DSBGWT2C.js → chunk-7YDKVLAE.js} +10 -10
  40. package/{chunk-5X4GQ53C.js → chunk-AUH2LTIY.js} +7 -7
  41. package/{chunk-UNOTBWZZ.js → chunk-B6H5XCT2.js} +8 -8
  42. package/{chunk-NNWHHCVP.js → chunk-BMB563Y6.js} +10 -4
  43. package/{chunk-DFUPZE6V.js → chunk-C6ELZQ7H.js} +249 -34
  44. package/{chunk-BXPBZVRE.js → chunk-DX6BP4K7.js} +285 -251
  45. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  46. package/{chunk-JZPBVBIY.js → chunk-FD36SCCD.js} +19 -8
  47. package/{chunk-7L5CQQIT.js → chunk-FDKEDU7R.js} +14 -14
  48. package/{chunk-DKMOY3QI.js → chunk-FGLKRJDI.js} +54 -3
  49. package/{chunk-2QTEYCR7.js → chunk-FTM4KUOZ.js} +17 -17
  50. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  51. package/{chunk-7YYHKBJP.js → chunk-GKHV4UH5.js} +1 -1
  52. package/{chunk-2IVEXF7P.js → chunk-GUYMR3JL.js} +6 -33
  53. package/{chunk-YDTYDA5W.js → chunk-GZRMWK5R.js} +6 -4
  54. package/{chunk-VWY2CZD2.js → chunk-HDT2RB7T.js} +3 -3
  55. package/{chunk-X664KVEV.js → chunk-HHBXCRJS.js} +204 -123
  56. package/{chunk-75U775RZ.js → chunk-IFS5CUEH.js} +1 -1
  57. package/{chunk-WLH5BAKX.js → chunk-IIOHYLIG.js} +9 -4
  58. package/{chunk-ADLYMQB6.js → chunk-IZCHPD7T.js} +52 -3
  59. package/{chunk-ITIA6OAQ.js → chunk-IZNJDUJ4.js} +5 -5
  60. package/{chunk-X2DAEZ3X.js → chunk-J5NMOM35.js} +1 -1
  61. package/{chunk-RPRRIFXV.js → chunk-JI2TIPLP.js} +1 -1
  62. package/{chunk-EGRJC4ZN.js → chunk-JIADXJYU.js} +1 -1
  63. package/{chunk-IHEC7VBF.js → chunk-K4KIFRIN.js} +1 -1
  64. package/{chunk-7INB7NXF.js → chunk-KCBK4MDT.js} +294 -54
  65. package/{chunk-WJSW43QZ.js → chunk-L3JWI7WX.js} +0 -1
  66. package/{chunk-XLLTJXAD.js → chunk-LAUUAYLK.js} +39 -2672
  67. package/{chunk-3RUW3ONU.js → chunk-LD6Y6RJY.js} +4 -4
  68. package/{chunk-AN7DGYMW.js → chunk-LQ6PUHW6.js} +5077 -3588
  69. package/chunk-M3JQWYBC.js +387 -0
  70. package/{chunk-GM6PU7B6.js → chunk-MEYIRKDN.js} +0 -1
  71. package/{chunk-6YXDOOSH.js → chunk-MGIHZ5CJ.js} +4 -4
  72. package/chunk-MI2J67UU.js +43 -0
  73. package/{chunk-4F5M2MW5.js → chunk-MJWX4JQO.js} +2 -2
  74. package/{chunk-Q5ITEGIN.js → chunk-N4XRDM26.js} +1 -1
  75. package/{chunk-5CS33IBL.js → chunk-NQ4N4IGO.js} +11 -12
  76. package/{chunk-ZZ2MH7LE.js → chunk-O6OSWFZQ.js} +0 -1
  77. package/{chunk-ZURFOV5J.js → chunk-OFZPJ3NT.js} +13 -4
  78. package/{chunk-RJKIB55Y.js → chunk-OSCSEJJR.js} +15 -8
  79. package/{chunk-SCUETSRP.js → chunk-PV734VZX.js} +1 -1
  80. package/{chunk-7E72JMBB.js → chunk-SMPAUSX5.js} +46 -5
  81. package/{chunk-ASDXPOJH.js → chunk-U6QQLXWI.js} +1 -1
  82. package/{chunk-NUO3QFWD.js → chunk-UNHKVD2N.js} +1 -1
  83. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  84. package/{chunk-CPYYM4RJ.js → chunk-V5GA74HI.js} +19 -5
  85. package/{chunk-UEAUAXYS.js → chunk-VBD7W4Q6.js} +2057 -212
  86. package/{chunk-DNQK7M7K.js → chunk-VD2SO4RG.js} +4 -4
  87. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  88. package/{chunk-7KNERA53.js → chunk-VSA6QAGV.js} +47 -3
  89. package/{chunk-G7E4NWFE.js → chunk-W445DPVT.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-IKWTTKWG.js → chunk-XQES6LXQ.js} +2 -2
  96. package/{chunk-IR6W62Q6.js → chunk-XT73C4VH.js} +18 -21
  97. package/{chunk-RY57GLGW.js → chunk-YPREESF4.js} +42 -5
  98. package/{chunk-WNHST4IE.js → chunk-YRP7LG4R.js} +4527 -4080
  99. package/{chunk-BQXOGBFN.js → chunk-YZ2WE6CW.js} +2 -2
  100. package/{chunk-3WXRAHCG.js → chunk-ZBB3MZR3.js} +3 -3
  101. package/{cliExecutor-DW3PHGEL.js → cliExecutor-BBUVQU4L.js} +2 -2
  102. package/{clipboardy-MMBYVRLF.js → clipboardy-PRUHGPGC.js} +4 -3
  103. package/{codingSkills-DY5MINPG.js → codingSkills-H6N5EKSX.js} +3 -3
  104. package/cooldownCommands-C2SZLEEO.js +90 -0
  105. package/{createAgentAutomationAction-GVSJL2CI.js → createAgentAutomationAction-BH3D2L2H.js} +28 -30
  106. package/{createDialogAction-VVR46Q2A.js → createDialogAction-U4LDV2RW.js} +31 -33
  107. package/{createPageAction-M2VDKBYS.js → createPageAction-Q2ANG535.js} +30 -32
  108. package/{dbSlice-UI2VCBLG.js → dbSlice-PIQGICNM.js} +9 -9
  109. package/{deleteFile-XQXPBFFB.js → deleteFile-NPZ64DFN.js} +4 -4
  110. package/{dialogCommands-26DBYNBT.js → dialogCommands-C556D6WD.js} +37 -36
  111. package/{dialogSlice-FFGLRCBL.js → dialogSlice-P2VSKG2X.js} +27 -27
  112. package/dist-VODFSGNG.js +7442 -0
  113. package/{docCreateCommands-F2ASWG6B.js → docCreateCommands-AAVGLQWE.js} +36 -35
  114. package/{docDeleteCommands-A4URDZPI.js → docDeleteCommands-PKMKSQD2.js} +37 -36
  115. package/{docReadCommands-DO6VHDZD.js → docReadCommands-2WUH7UXC.js} +36 -35
  116. package/{docStore-EDAE7RNT.js → docStore-J5UWRBB4.js} +29 -31
  117. package/{docUpdateCommands-ZTXZ3RTP.js → docUpdateCommands-B2N4E5HQ.js} +38 -37
  118. package/{fetchMessages-7QRCCRYK.js → fetchMessages-CUEFN4GQ.js} +4 -4
  119. package/{getPricing-L2ENXWHV.js → getPricing-P3E2WRIH.js} +5 -5
  120. package/{handleSendMessageAction-CIRLGHOC.js → handleSendMessageAction-RRZ53YYH.js} +29 -29
  121. package/index.js +92 -77
  122. package/{localDialogRead-SLMPV5SK.js → localDialogRead-P7CHFMIC.js} +1 -1
  123. package/{localRuntimeAuthority-E3R24J4T.js → localRuntimeAuthority-S77B5QVB.js} +6 -2
  124. package/{localRuntimeDb-DDZCJFQZ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  125. package/{machineCommands-NIQNCYJV.js → machineCommands-CWKMJG33.js} +77 -77
  126. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  127. package/{machineWsRunDispatch-EMTSQGAR.js → machineWsRunDispatch-UYNVNX4A.js} +69 -69
  128. package/{models-OX2S5C6Q.js → models-L7S2EKPM.js} +2 -2
  129. package/package.json +1 -1
  130. package/{read-2VHEHCAN.js → read-6C2XD3YZ.js} +5 -5
  131. package/{readDocTool-CSWD6NPC.js → readDocTool-Y7AB365O.js} +1 -1
  132. package/{readlineWorkspace-A2JBJWLI.js → readlineWorkspace-VYELP22P.js} +2851 -1515
  133. package/{removeDialogAgentAction-2T7BPM3T.js → removeDialogAgentAction-KG5WMJRZ.js} +13 -13
  134. package/{runAgentClientLoop-BV4736ED.js → runAgentClientLoop-35GKZDOZ.js} +62 -61
  135. package/{runtimeDoctorCommands-KIKM6BIO.js → runtimeDoctorCommands-HT4O2PXL.js} +6 -6
  136. package/{setDialogExtraReferencesAction-GPT37HTW.js → setDialogExtraReferencesAction-O2NLXMSM.js} +10 -10
  137. package/{setPrimaryDialogAgentAction-3746P7IW.js → setPrimaryDialogAgentAction-FYYUY7PB.js} +13 -13
  138. package/{settingSlice-FIFOQ6OR.js → settingSlice-GPLI6E3M.js} +11 -11
  139. package/{skillDiscovery-KLLKXPUO.js → skillDiscovery-COX56OBO.js} +3 -3
  140. package/{slateUtils-VO2FU36K.js → slateUtils-RIZES3PV.js} +1 -1
  141. package/{spaceCommands-AYZQHDB3.js → spaceCommands-AAKQM2PM.js} +223 -37
  142. package/{spaceSlice-43BNF22B.js → spaceSlice-NSNGR4Y2.js} +28 -30
  143. package/{streamAgentChatTurn-OLLRSITV.js → streamAgentChatTurn-D5IDHXMV.js} +116 -129
  144. package/{switchDialogAgentAction-MQTUTQHL.js → switchDialogAgentAction-GH5P6Q3Z.js} +9 -9
  145. package/{chunk-IDAU4UFS.js → syncMapping-N6RGXGBW.js} +11 -11
  146. package/{tableCommands-QE47K72R.js → tableCommands-PQUJ55AS.js} +3 -3
  147. package/{tools-2SI3FXLL.js → tools-JQOETZP5.js} +44 -45
  148. package/{tuiSummaryLlmCaller-EAWQ3IZX.js → tuiSummaryLlmCaller-LH7F2SP7.js} +18 -18
  149. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  150. package/{updateDialogTitleAction-YJEQFYOA.js → updateDialogTitleAction-WOTSDSFQ.js} +31 -33
  151. package/agentRecordCommands-YMGKT2WF.js +0 -113
  152. package/chunk-D5JI6VDM.js +0 -1800
  153. package/chunk-M3JEW6N6.js +0 -193
  154. package/chunk-ZWS6DUHX.js +0 -480
  155. package/syncMapping-RK2MANUX.js +0 -43
  156. package/{chunk-KMSZPTM6.js → chunk-2WKUUY2E.js} +3 -3
  157. package/{chunk-CWMSB67P.js → chunk-AGGIDPCZ.js} +0 -0
  158. package/{chunk-SAQQLJZ5.js → chunk-JDSUTNYY.js} +3 -3
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  readDbRecord,
3
3
  writeAgentRecord
4
- } from "./chunk-YDTYDA5W.js";
4
+ } from "./chunk-GZRMWK5R.js";
5
5
  import {
6
6
  buildSkillSummaryMarker
7
7
  } from "./chunk-VF4K2QE6.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-A7GB5UGH.js";
14
14
  import {
15
15
  createSpaceKey
16
- } from "./chunk-4F5M2MW5.js";
16
+ } from "./chunk-MJWX4JQO.js";
17
17
  import {
18
18
  asTrimmedLowercaseString
19
19
  } from "./chunk-QSJ3HFEF.js";
@@ -1,3 +1,6 @@
1
+ import {
2
+ publicAgentKey
3
+ } from "./chunk-BJIRLHJR.js";
1
4
  import {
2
5
  getRuntimeServerContext,
3
6
  partitionReadServers,
@@ -7,20 +10,17 @@ import {
7
10
  scheduleExistingRecordReplication,
8
11
  shouldReplaceLocalWithRemoteRecord,
9
12
  shouldReplicateLocalRecord
10
- } from "./chunk-X664KVEV.js";
13
+ } from "./chunk-HHBXCRJS.js";
11
14
  import {
12
15
  fetchFromClientDb,
13
16
  fetchFromServer,
14
17
  isAbortError,
15
18
  isReadTimeoutError,
16
19
  logger
17
- } from "./chunk-WJSW43QZ.js";
20
+ } from "./chunk-L3JWI7WX.js";
18
21
  import {
19
22
  shouldReplaceWithNextRecord
20
23
  } from "./chunk-GBRG75BQ.js";
21
- import {
22
- publicAgentKey
23
- } from "./chunk-BJIRLHJR.js";
24
24
  import {
25
25
  NOLO_CLUSTER_SERVERS,
26
26
  normalizeKnownServerOrigin
@@ -100,10 +100,17 @@ var BUILTIN_AGENT_CATALOG = [
100
100
  model: "glm-5.3",
101
101
  runtimeFallback: true
102
102
  },
103
+ {
104
+ id: "01GLMFLASHPB00000000BT20BC",
105
+ group: "public",
106
+ name: "GLM 5.3 Flash",
107
+ provider: "nolo",
108
+ model: "glm-5-3-flash",
109
+ runtimeFallback: true
110
+ },
103
111
  {
104
112
  id: "01KIMIK26OLLAMA0000000001",
105
113
  // 已下架的公共入口:保留 internal catalog entry 仅用于旧 Agent 记录的运行时兼容。
106
- // 旧 nolo/kimi-k2.6 请求由 platformHosted 路由到 OpenRouter qwen/qwen3.8-27b。
107
114
  group: "internal",
108
115
  name: "Kimi K2.6\uFF08\u517C\u5BB9\uFF09",
109
116
  provider: "nolo",
@@ -180,16 +187,6 @@ var BUILTIN_AGENT_CATALOG = [
180
187
  model: "gemini-3.7-flash",
181
188
  runtimeFallback: true
182
189
  },
183
- {
184
- id: "01QWEN37FLASH000000000001",
185
- // 内部图片预处理器(imagePreprocessing.ts),不是广场商品:只需运行时兜底
186
- // 拿到 provider/model,不应被 seed 写库、上架或计费。
187
- group: "internal",
188
- name: "Qwen 3.7 Flash",
189
- provider: "nolo",
190
- model: "qwen3.7-flash",
191
- runtimeFallback: true
192
- },
193
190
  {
194
191
  id: "01GPTIMG2GEN00000000SSEBOS",
195
192
  group: "public",
@@ -276,10 +273,10 @@ var PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID = entry("01DSV4FLASHPB00000000JFPFD").id;
276
273
  var PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY = publicAgentKey(PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID);
277
274
  var PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID = entry("01DSV4PRONPB00000001VIR3EK").id;
278
275
  var PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY = publicAgentKey(PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID);
276
+ var PUBLIC_GLM_53_FLASH_AGENT_ID = entry("01GLMFLASHPB00000000BT20BC").id;
277
+ var PUBLIC_GLM_53_FLASH_AGENT_KEY = publicAgentKey(PUBLIC_GLM_53_FLASH_AGENT_ID);
279
278
  var PUBLIC_KIMI_K26_IMAGE_AGENT_ID = entry("01KIMIK26OLLAMA0000000001").id;
280
279
  var PUBLIC_KIMI_K26_IMAGE_AGENT_KEY = publicAgentKey(PUBLIC_KIMI_K26_IMAGE_AGENT_ID);
281
- var PUBLIC_QWEN_37_FLASH_AGENT_ID = entry("01QWEN37FLASH000000000001").id;
282
- var PUBLIC_QWEN_37_FLASH_AGENT_KEY = publicAgentKey(PUBLIC_QWEN_37_FLASH_AGENT_ID);
283
280
  var PUBLIC_GPT_IMAGE_2_GENERATOR_AGENT_ID = entry("01GPTIMG2GEN00000000SSEBOS").id;
284
281
  var PUBLIC_GPT_IMAGE_2_GENERATOR_AGENT_KEY = publicAgentKey(PUBLIC_GPT_IMAGE_2_GENERATOR_AGENT_ID);
285
282
  var PUBLIC_GPT_IMAGE_2_EDITOR_AGENT_ID = entry("01GPTIMG2EDT00000001R4R4H4").id;
@@ -293,7 +290,8 @@ var DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS = [
293
290
  ];
294
291
  var SYSTEM_BUILTIN_TRUSTED_AGENT_KEYS = [
295
292
  PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
296
- PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY
293
+ PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY,
294
+ PUBLIC_GLM_53_FLASH_AGENT_KEY
297
295
  ];
298
296
  var SYSTEM_BUILTIN_TRUSTED_AGENT_KEY_SET = new Set(
299
297
  SYSTEM_BUILTIN_TRUSTED_AGENT_KEYS
@@ -714,17 +712,16 @@ var readAction = async (payload, thunkApi) => {
714
712
  };
715
713
 
716
714
  export {
715
+ readRequestManager,
717
716
  builtinAgentCatalogEntryById,
718
717
  builtinRuntimeFallbackEntries,
719
718
  BUILTIN_NOLO_AGENT_KEY,
720
719
  BUILTIN_NOLO_AGENT_NAME,
721
720
  BUILTIN_NOLO_AGENT_MODEL,
722
721
  PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
723
- PUBLIC_QWEN_37_FLASH_AGENT_KEY,
724
722
  DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS,
725
723
  isSystemBuiltinTrustedAgentKey,
726
724
  isBuiltinPlatformAgentKey,
727
- readRequestManager,
728
725
  resolveAgentReadServers,
729
726
  readAction
730
727
  };
@@ -79,12 +79,28 @@ function reduceChatQueue(state, event) {
79
79
  queue: [...state.queue, req]
80
80
  };
81
81
  }
82
+ case "steer": {
83
+ const req = createTurnRequest(event.text);
84
+ if (!req.text.trim() && req.event.kind === "user") {
85
+ return state;
86
+ }
87
+ return {
88
+ ...state,
89
+ queue: [req, ...state.queue]
90
+ };
91
+ }
82
92
  case "dequeue":
83
93
  if (state.queue.length === 0) return state;
84
94
  return {
85
95
  ...state,
86
96
  queue: state.queue.slice(1)
87
97
  };
98
+ case "recall-last":
99
+ if (state.queue.length === 0) return state;
100
+ return {
101
+ ...state,
102
+ queue: state.queue.slice(0, -1)
103
+ };
88
104
  case "clear":
89
105
  if (state.queue.length === 0 && state.lastDrainError === null) return state;
90
106
  return {
@@ -117,7 +133,8 @@ function shouldDrainAfterTurnEnd(state, cleanTurnEnd) {
117
133
  return cleanTurnEnd && !state.running && !state.drainPaused && state.queue.length > 0;
118
134
  }
119
135
  function applyChatQueueEvent(state, event) {
120
- const prevQueueLen = state.queue.length;
136
+ const prevQueue = state.queue;
137
+ const prevQueueLen = prevQueue.length;
121
138
  const prevRunning = state.running;
122
139
  const prevPaused = state.drainPaused;
123
140
  const next = reduceChatQueue(state, event);
@@ -131,10 +148,30 @@ function applyChatQueueEvent(state, event) {
131
148
  if (next.drainPaused !== prevPaused) {
132
149
  outgoing.push({ type: "drain-paused-changed", paused: next.drainPaused });
133
150
  }
134
- if (event.type === "turn-end" && !event.aborted && event.ok) {
135
- if (shouldDrainAfterTurnEnd(next, true)) {
136
- const head = next.queue[0];
137
- outgoing.push({ type: "drain-ready", text: head.text, request: head });
151
+ if (event.type === "recall-last" && prevQueueLen > 0) {
152
+ const last = prevQueue[prevQueueLen - 1];
153
+ outgoing.push({ type: "recalled-to-draft", text: last.text, request: last });
154
+ }
155
+ if (event.type === "steer" && next.running && next.queue.length > prevQueueLen) {
156
+ const head = next.queue[0];
157
+ if (head) {
158
+ outgoing.push({ type: "steer-ready", text: head.text, request: head });
159
+ }
160
+ }
161
+ if (event.type === "turn-end") {
162
+ if (event.aborted && prevQueueLen > 0) {
163
+ const first = prevQueue[0];
164
+ outgoing.push({
165
+ type: "aborted-draft-refill",
166
+ text: first.text,
167
+ request: first,
168
+ abortedRequests: [...prevQueue]
169
+ });
170
+ } else if (!event.aborted && event.ok) {
171
+ if (shouldDrainAfterTurnEnd(next, true)) {
172
+ const head = next.queue[0];
173
+ outgoing.push({ type: "drain-ready", text: head.text, request: head });
174
+ }
138
175
  }
139
176
  }
140
177
  return { state: next, outgoing };