dominds 1.23.9 → 1.23.10

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 (159) hide show
  1. package/dist/docs/dialog-system.md +2 -2
  2. package/dist/docs/dialog-system.zh.md +2 -2
  3. package/dist/docs/dominds-terminology.md +2 -2
  4. package/dist/docs/tellask-collab.md +4 -2
  5. package/dist/docs/tellask-collab.zh.md +4 -2
  6. package/dist/llm/defaults.yaml +3 -0
  7. package/dist/llm/gen/openai-compatible.js +0 -2
  8. package/dist/llm/kernel-driver/drive.js +2 -2
  9. package/dist/minds/system-prompt-parts.js +2 -2
  10. package/dist/minds/system-prompt.js +8 -4
  11. package/dist/tools/pending-tellask-reminder.js +6 -6
  12. package/dist/tools/prompts/control/en/principles.md +1 -0
  13. package/dist/tools/prompts/control/zh/principles.md +1 -0
  14. package/package.json +3 -3
  15. package/webapp/dist/assets/{_basePickBy-7LUdAfWz.js → _basePickBy-CBh9Agsi.js} +3 -3
  16. package/webapp/dist/assets/_basePickBy-CBh9Agsi.js.map +1 -0
  17. package/webapp/dist/assets/{_baseUniq-DwjWeodO.js → _baseUniq-D2UXV506.js} +2 -2
  18. package/webapp/dist/assets/_baseUniq-D2UXV506.js.map +1 -0
  19. package/webapp/dist/assets/{arc-CEnfISy0.js → arc-CmeRUuzC.js} +2 -2
  20. package/webapp/dist/assets/arc-CmeRUuzC.js.map +1 -0
  21. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BpimPdpL.js → architectureDiagram-VXUJARFQ-D5hfsb4A.js} +8 -26
  22. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-D5hfsb4A.js.map +1 -0
  23. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-BSRtGkFY.js → blockDiagram-VD42YOAC-BVswEa9D.js} +170 -187
  24. package/webapp/dist/assets/blockDiagram-VD42YOAC-BVswEa9D.js.map +1 -0
  25. package/webapp/dist/assets/{c4Diagram-IC4MRINW-kSgcfdmL.js → c4Diagram-YG6GDRKO-Bgm6yzGX.js} +4 -4
  26. package/webapp/dist/assets/c4Diagram-YG6GDRKO-Bgm6yzGX.js.map +1 -0
  27. package/webapp/dist/assets/{channel-Dp-cGMNE.js → channel-CDo0v82C.js} +2 -2
  28. package/webapp/dist/assets/channel-CDo0v82C.js.map +1 -0
  29. package/webapp/dist/assets/{chunk-4BX2VUAB-Cp-fmbaK.js → chunk-4BX2VUAB-DMqSdYxu.js} +2 -2
  30. package/webapp/dist/assets/chunk-4BX2VUAB-DMqSdYxu.js.map +1 -0
  31. package/webapp/dist/assets/{chunk-55IACEB6-BOJKMAPr.js → chunk-55IACEB6-CudmE3Fx.js} +2 -2
  32. package/webapp/dist/assets/chunk-55IACEB6-CudmE3Fx.js.map +1 -0
  33. package/webapp/dist/assets/{chunk-WL4C6EOR-BKbEzBrJ.js → chunk-B4BG7PRW-d5dfiagO.js} +121 -171
  34. package/webapp/dist/assets/chunk-B4BG7PRW-d5dfiagO.js.map +1 -0
  35. package/webapp/dist/assets/{chunk-NQ4KR5QH-BDa1UceW.js → chunk-DI55MBZ5-CZCetJxI.js} +7 -9
  36. package/webapp/dist/assets/chunk-DI55MBZ5-CZCetJxI.js.map +1 -0
  37. package/webapp/dist/assets/{chunk-FMBD7UC4-DfQxVVLu.js → chunk-FMBD7UC4-BSVSuNxy.js} +2 -2
  38. package/webapp/dist/assets/chunk-FMBD7UC4-BSVSuNxy.js.map +1 -0
  39. package/webapp/dist/assets/{chunk-KX2RTZJC-D5--lFcw.js → chunk-QN33PNHL-Cbf-pIxI.js} +2 -2
  40. package/webapp/dist/assets/chunk-QN33PNHL-Cbf-pIxI.js.map +1 -0
  41. package/webapp/dist/assets/{chunk-QZHKN3VN-B6PiydXk.js → chunk-QZHKN3VN-DYyIY8_q.js} +2 -2
  42. package/webapp/dist/assets/chunk-QZHKN3VN-DYyIY8_q.js.map +1 -0
  43. package/webapp/dist/assets/{chunk-JSJVCQXG-DTl-4Rvh.js → chunk-TZMSLE5B-aW2uEdtS.js} +6 -14
  44. package/webapp/dist/assets/chunk-TZMSLE5B-aW2uEdtS.js.map +1 -0
  45. package/webapp/dist/assets/{classDiagram-VBA2DB6C-CbCDPvgK.js → classDiagram-2ON5EDUG-C4-5PgVL.js} +6 -7
  46. package/webapp/dist/assets/classDiagram-2ON5EDUG-C4-5PgVL.js.map +1 -0
  47. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CbCDPvgK.js → classDiagram-v2-WZHVMYZB-C4-5PgVL.js} +6 -7
  48. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-C4-5PgVL.js.map +1 -0
  49. package/webapp/dist/assets/{clone-B5WbSwel.js → clone-DivPByZ0.js} +2 -2
  50. package/webapp/dist/assets/clone-DivPByZ0.js.map +1 -0
  51. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DcYLhdFN.js → cose-bilkent-S5V4N54A-CwBAjMT3.js} +2 -2
  52. package/webapp/dist/assets/cose-bilkent-S5V4N54A-CwBAjMT3.js.map +1 -0
  53. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  54. package/webapp/dist/assets/{dagre-KLK3FWXG-BeG9lIKK.js → dagre-6UL2VRFP-tC56AIio.js} +7 -7
  55. package/webapp/dist/assets/dagre-6UL2VRFP-tC56AIio.js.map +1 -0
  56. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  57. package/webapp/dist/assets/{diagram-E7M64L7V-BIRobVwO.js → diagram-PSM6KHXK-dEF_O6uj.js} +10 -10
  58. package/webapp/dist/assets/diagram-PSM6KHXK-dEF_O6uj.js.map +1 -0
  59. package/webapp/dist/assets/{diagram-IFDJBPK2-CEOYT9-f.js → diagram-QEK2KX5R-BC3CyB81.js} +8 -9
  60. package/webapp/dist/assets/diagram-QEK2KX5R-BC3CyB81.js.map +1 -0
  61. package/webapp/dist/assets/{diagram-P4PSJMXO-BQoM5Ex6.js → diagram-S2PKOQOG-BV-YMbA_.js} +8 -8
  62. package/webapp/dist/assets/diagram-S2PKOQOG-BV-YMbA_.js.map +1 -0
  63. package/webapp/dist/assets/{erDiagram-INFDFZHY-Cqjswes_.js → erDiagram-Q2GNP2WA-DIgdtwce.js} +75 -96
  64. package/webapp/dist/assets/erDiagram-Q2GNP2WA-DIgdtwce.js.map +1 -0
  65. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-Cja2_InV.js → flowDiagram-NV44I4VS-C7Mawlld.js} +81 -98
  66. package/webapp/dist/assets/flowDiagram-NV44I4VS-C7Mawlld.js.map +1 -0
  67. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-DBUuaEd2.js → ganttDiagram-JELNMOA3-DgaYLOeL.js} +3 -28
  68. package/webapp/dist/assets/ganttDiagram-JELNMOA3-DgaYLOeL.js.map +1 -0
  69. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-Dl4JE5EA.js → gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js} +46 -38
  70. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-Dwv1ZLFB.js.map +1 -0
  71. package/webapp/dist/assets/graph-saC_350a.js +425 -0
  72. package/webapp/dist/assets/graph-saC_350a.js.map +1 -0
  73. package/webapp/dist/assets/{index-DZFkLLVz.css → index-BGdI3lWA.css} +1 -1
  74. package/webapp/dist/assets/{index-Dnj_jTsn.js → index-BsSFGqVX.js} +1094 -1087
  75. package/webapp/dist/assets/{index-Dnj_jTsn.js.map → index-BsSFGqVX.js.map} +1 -1
  76. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-D_rvRkCc.js → infoDiagram-HS3SLOUP-PDKRqD6y.js} +7 -7
  77. package/webapp/dist/assets/infoDiagram-HS3SLOUP-PDKRqD6y.js.map +1 -0
  78. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  79. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-C1gZ4Bzf.js → journeyDiagram-XKPGCS4Q-DDD6YlTa.js} +5 -5
  80. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-DDD6YlTa.js.map +1 -0
  81. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DqSjhrSU.js → kanban-definition-3W4ZIXB7-CK-CJzXm.js} +3 -5
  82. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-CK-CJzXm.js.map +1 -0
  83. package/webapp/dist/assets/{layout-CRVydERy.js → layout-DRs2ltCp.js} +5 -5
  84. package/webapp/dist/assets/layout-DRs2ltCp.js.map +1 -0
  85. package/webapp/dist/assets/{linear-BKsEk85O.js → linear-CiMu0dYF.js} +2 -2
  86. package/webapp/dist/assets/linear-CiMu0dYF.js.map +1 -0
  87. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DfBx0FRA.js → mindmap-definition-VGOIOE7T-C8yEoHXx.js} +5 -7
  88. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-C8yEoHXx.js.map +1 -0
  89. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  90. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DKrkyxnK.js → pieDiagram-ADFJNKIX-BhtVILXQ.js} +8 -8
  91. package/webapp/dist/assets/pieDiagram-ADFJNKIX-BhtVILXQ.js.map +1 -0
  92. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-jC0ZA6Ei.js → quadrantDiagram-AYHSOK5B-B7Xuuv_G.js} +3 -3
  93. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-B7Xuuv_G.js.map +1 -0
  94. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-We3xysp7.js → requirementDiagram-UZGBJVZJ-DY6Q4U6l.js} +6 -16
  95. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-DY6Q4U6l.js.map +1 -0
  96. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CVKXirbt.js → sankeyDiagram-TZEHDZUN-DZPox4PX.js} +2 -2
  97. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DZPox4PX.js.map +1 -0
  98. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-C_FP9akr.js → sequenceDiagram-WL72ISMW-Bg6GPP0w.js} +201 -601
  99. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-Bg6GPP0w.js.map +1 -0
  100. package/webapp/dist/assets/{stateDiagram-RAJIS63D-I_Z9tp8x.js → stateDiagram-FKZM4ZOC-CcskYNpn.js} +9 -9
  101. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-CcskYNpn.js.map +1 -0
  102. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-CapbGJFk.js → stateDiagram-v2-4FDKWEC3-Dja5UwuW.js} +5 -5
  103. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-Dja5UwuW.js.map +1 -0
  104. package/webapp/dist/assets/{timeline-definition-YZTLITO2-BshxRk1F.js → timeline-definition-IT6M3QCI-CA-Wvxg8.js} +3 -3
  105. package/webapp/dist/assets/timeline-definition-IT6M3QCI-CA-Wvxg8.js.map +1 -0
  106. package/webapp/dist/assets/{treemap-KZPCXAKY-CocYDGAm.js → treemap-GDKQZRPO-CF_Fur4n.js} +24 -37
  107. package/webapp/dist/assets/treemap-GDKQZRPO-CF_Fur4n.js.map +1 -0
  108. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DFRdd2qS.js → xychartDiagram-PRI3JC2R-CYc3vOkZ.js} +4 -4
  109. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CYc3vOkZ.js.map +1 -0
  110. package/webapp/dist/index.html +2 -2
  111. package/webapp/dist/assets/_basePickBy-7LUdAfWz.js.map +0 -1
  112. package/webapp/dist/assets/_baseUniq-DwjWeodO.js.map +0 -1
  113. package/webapp/dist/assets/arc-CEnfISy0.js.map +0 -1
  114. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BpimPdpL.js.map +0 -1
  115. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-BSRtGkFY.js.map +0 -1
  116. package/webapp/dist/assets/c4Diagram-IC4MRINW-kSgcfdmL.js.map +0 -1
  117. package/webapp/dist/assets/channel-Dp-cGMNE.js.map +0 -1
  118. package/webapp/dist/assets/chunk-4BX2VUAB-Cp-fmbaK.js.map +0 -1
  119. package/webapp/dist/assets/chunk-55IACEB6-BOJKMAPr.js.map +0 -1
  120. package/webapp/dist/assets/chunk-FMBD7UC4-DfQxVVLu.js.map +0 -1
  121. package/webapp/dist/assets/chunk-JSJVCQXG-DTl-4Rvh.js.map +0 -1
  122. package/webapp/dist/assets/chunk-KX2RTZJC-D5--lFcw.js.map +0 -1
  123. package/webapp/dist/assets/chunk-NQ4KR5QH-BDa1UceW.js.map +0 -1
  124. package/webapp/dist/assets/chunk-QZHKN3VN-B6PiydXk.js.map +0 -1
  125. package/webapp/dist/assets/chunk-WL4C6EOR-BKbEzBrJ.js.map +0 -1
  126. package/webapp/dist/assets/classDiagram-VBA2DB6C-CbCDPvgK.js.map +0 -1
  127. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CbCDPvgK.js.map +0 -1
  128. package/webapp/dist/assets/clone-B5WbSwel.js.map +0 -1
  129. package/webapp/dist/assets/cose-bilkent-S5V4N54A-DcYLhdFN.js.map +0 -1
  130. package/webapp/dist/assets/dagre-KLK3FWXG-BeG9lIKK.js.map +0 -1
  131. package/webapp/dist/assets/diagram-E7M64L7V-BIRobVwO.js.map +0 -1
  132. package/webapp/dist/assets/diagram-IFDJBPK2-CEOYT9-f.js.map +0 -1
  133. package/webapp/dist/assets/diagram-P4PSJMXO-BQoM5Ex6.js.map +0 -1
  134. package/webapp/dist/assets/erDiagram-INFDFZHY-Cqjswes_.js.map +0 -1
  135. package/webapp/dist/assets/flowDiagram-PKNHOUZH-Cja2_InV.js.map +0 -1
  136. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-DBUuaEd2.js.map +0 -1
  137. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-Dl4JE5EA.js.map +0 -1
  138. package/webapp/dist/assets/graph-BfMWseJJ.js +0 -782
  139. package/webapp/dist/assets/graph-BfMWseJJ.js.map +0 -1
  140. package/webapp/dist/assets/infoDiagram-LFFYTUFH-D_rvRkCc.js.map +0 -1
  141. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-CvPTsJgE.js +0 -966
  142. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-CvPTsJgE.js.map +0 -1
  143. package/webapp/dist/assets/journeyDiagram-4ABVD52K-C1gZ4Bzf.js.map +0 -1
  144. package/webapp/dist/assets/kanban-definition-K7BYSVSG-DqSjhrSU.js.map +0 -1
  145. package/webapp/dist/assets/layout-CRVydERy.js.map +0 -1
  146. package/webapp/dist/assets/linear-BKsEk85O.js.map +0 -1
  147. package/webapp/dist/assets/mindmap-definition-YRQLILUH-DfBx0FRA.js.map +0 -1
  148. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DKrkyxnK.js.map +0 -1
  149. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-jC0ZA6Ei.js.map +0 -1
  150. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-We3xysp7.js.map +0 -1
  151. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CVKXirbt.js.map +0 -1
  152. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-C_FP9akr.js.map +0 -1
  153. package/webapp/dist/assets/stateDiagram-RAJIS63D-I_Z9tp8x.js.map +0 -1
  154. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-CapbGJFk.js.map +0 -1
  155. package/webapp/dist/assets/timeline-definition-YZTLITO2-BshxRk1F.js.map +0 -1
  156. package/webapp/dist/assets/treemap-KZPCXAKY-CocYDGAm.js.map +0 -1
  157. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BqnmMyq0.js +0 -2487
  158. package/webapp/dist/assets/vennDiagram-LZ73GAT5-BqnmMyq0.js.map +0 -1
  159. package/webapp/dist/assets/xychartDiagram-JWTSCODW-DFRdd2qS.js.map +0 -1
@@ -396,8 +396,8 @@ Result (second call):
396
396
 
397
397
  - **No registry lookup** - always creates a new sideDialog
398
398
  - **Not registered** - no persistence across Tellasks
399
- - **No assignment-update channel** - once emitted, it cannot be updated in place like Type B
400
- - Another `tellaskSessionless` creates **another new transient sideDialog**; it does not update, stop, or tell the earlier Type C Side Dialog to stop
399
+ - Cannot continue or change the earlier task like Type B can
400
+ - Another `tellaskSessionless` is another independent task; it does not update or stop the earlier Type C task
401
401
  - If later correction, scope change, or earlier wrap-up may be needed, choose Type B `tellask` with `sessionSlug` from the start
402
402
  - The sideDialog itself is fully capable **except** for `freshBootsReasoning({ tellaskContent: "..." })` FBR, which is tool-less and tellask-free (see `fbr.md`).
403
403
  - Only difference from TYPE B: no registry lookup/resume capability
@@ -379,8 +379,8 @@ LLM 再次发出:tellask({ targetAgentId: "researcher", sessionSlug: "market-a
379
379
 
380
380
  - **无注册表查找** - 总是创建新的支线对话
381
381
  - **不注册** - 在各次诉请之间不持久化
382
- - **无任务安排更新通道** - 发出后不能像 TYPE B 那样就地更新同一路诉请要求
383
- - 再次发起 `tellaskSessionless` 只会创建**另一条新的瞬态支线对话**,不会更新、更不会要求先前那条 TYPE C 支线停止
382
+ - 不能像 TYPE B 那样接着同一件事说、更新同一件正在做的事
383
+ - 再次发起 `tellaskSessionless` 是另一件独立任务,不会更新、更不会要求先前那条 TYPE C 任务停止
384
384
  - 若你后续可能需要改要求、纠偏或提前收口,应该从一开始就选择带 `sessionSlug` 的 TYPE B `tellask`
385
385
  - 支线对话本身一般是“完整能力”的;但 `freshBootsReasoning({ tellaskContent: "..." })` FBR 是特例:无工具且禁止任何诉请(见 `fbr.zh.md`)。
386
386
  - 与 TYPE B 的唯一区别:无注册表查找/恢复能力
@@ -212,8 +212,8 @@ tellask({
212
212
  - EN (key property): “Fresh/one-shot” is not only “new context”; it also means **no continuation semantics** — later Tellasks are not expected to resume the same session context.
213
213
  - ZH(关键性质): “Fresh/一次性”不仅表示“新开上下文”,更表示:**没有后续续话语义** —— 后续诉请不应被期待能自动续接本次一次性诉请的上下文。
214
214
 
215
- - EN (operational consequence): A Fresh Tellask has **no assignment-update channel**. Another `tellaskSessionless` creates a new transient Side Dialog; it does not update or tell the earlier one to stop.
216
- - ZH(操作后果): 一次性诉请**没有任务安排更新通道**。再次发起 `tellaskSessionless` 只会新建另一条瞬态支线,不会更新、更不会要求先前那条支线停止。
215
+ - EN (operational consequence): A Fresh Tellask cannot continue or change the earlier task. Another `tellaskSessionless` is another independent task; it does not update or stop the earlier one.
216
+ - ZH(操作后果): 一次性诉请不能接着旧任务改要求。再次发起 `tellaskSessionless` 是另一件独立任务,不会更新、更不会要求先前那条任务停止。
217
217
 
218
218
  - EN (practical guidance): If you need a follow-up after a Fresh Tellask, treat it as a new request and restate necessary context; if you need iterative follow-ups, use `Tellask Session` with `sessionSlug`.
219
219
  - ZH(实践建议): 如果你在一次性诉请后还要追问,应当把追问当作全新请求并补齐必要上下文;如果你需要可迭代的追问/推进,请使用 `Tellask Session` 并提供 `sessionSlug`。
@@ -35,9 +35,10 @@ These points reflect current behavior in `dialog-system.md`, `fbr.md`, and `dili
35
35
 
36
36
  Important addition:
37
37
 
38
- - Only `Tellask Session` has an assignment-update channel.
39
- - `Fresh Tellask` has no such channel; another `tellaskSessionless` only creates another transient Side Dialog and does not affect or tell the earlier owner to stop.
38
+ - Only `Tellask Session` can continue the same task and update that task.
39
+ - `Fresh Tellask` cannot continue or change an earlier task; another `tellaskSessionless` is another independent task and does not affect or stop the earlier task.
40
40
  - If later correction, earlier wrap-up, or scope change may be needed, do not choose `Fresh Tellask`; use `tellask` with `sessionSlug` from the start.
41
+ - Do not treat an agent teammate like a human coworker who can only handle one conversation at a time. Same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task.
41
42
 
42
43
  ### 2.2 What `Tellask Session` really means
43
44
 
@@ -139,6 +140,7 @@ For teammate Tellasks (non-`freshBootsReasoning({ tellaskContent: "..." })`), al
139
140
  Hard rule:
140
141
 
141
142
  - You can only claim “waiting for result” if there is an explicit pending Tellask and known acceptance evidence.
143
+ - If several independent tasks should go to the same teammate, do not queue them: send separate `tellaskSessionless` calls, or use different `sessionSlug` values with `tellask`.
142
144
 
143
145
  ### 4.2 Always continue via explicit re-Tellask
144
146
 
@@ -35,9 +35,10 @@
35
35
 
36
36
  关键补充:
37
37
 
38
- - 只有长线诉请有“更新任务安排”的通道。
39
- - 一次性诉请没有这个通道;后续再开一个 `tellaskSessionless` 只会创建新的瞬态支线,不会影响旧支线继续执行,更不能要求旧主理人停止。
38
+ - 只有长线诉请能接着同一件事说、更新那件正在做的事。
39
+ - 一次性诉请不能接着旧任务改要求;后续再开一个 `tellaskSessionless` 只是另一件独立任务,不会影响旧任务继续执行,更不能要求旧主理人停止。
40
40
  - 如果你后来可能需要改要求、提前收口或纠偏,就不该使用一次性诉请,而应从一开始就用带 `sessionSlug` 的长线诉请。
41
+ - 不要把智能体队友当成真人同事:祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务。
41
42
 
42
43
  ### 2.2 长线诉请的真实语义
43
44
 
@@ -136,6 +137,7 @@
136
137
 
137
138
  - 任何“等待结果/等待回贴”表述,必须能指向**刚刚已发出的具体诉请**与**等待的验收证据**。
138
139
  - 若没有已发出的待回贴诉请,就不能写“等待”;应立刻发诉请或改为本地执行。
140
+ - 若有多件独立工作要交给同一队友,不需要排队、不需要担心打扰:分别发起 `tellaskSessionless`,或用不同 `sessionSlug` 发起 `tellask`。
139
141
 
140
142
  ### 4.2 续推时必须显式“再诉请”
141
143
 
@@ -484,6 +484,9 @@ providers:
484
484
  min: 0
485
485
  max: 1
486
486
  description: Nucleus sampling parameter.
487
+ parallel_tool_calls:
488
+ type: boolean
489
+ description: Allow the model to emit parallel tool calls.
487
490
  models:
488
491
  kimi-for-coding:
489
492
  name: Kimi For Coding
@@ -117,8 +117,6 @@ function resolveOpenAiCompatibleParallelToolCalls(args) {
117
117
  if (args.openAiParams.parallel_tool_calls !== undefined) {
118
118
  return args.openAiParams.parallel_tool_calls;
119
119
  }
120
- if (isKimiCodeProvider(args.providerConfig))
121
- return undefined;
122
120
  return true;
123
121
  }
124
122
  function isOpenAiCompatibleSseCaptureEnabled() {
@@ -431,7 +431,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
431
431
  {
432
432
  type: 'func',
433
433
  name: 'tellask',
434
- description: 'Create or resume a teammate Side Dialog with sessionSlug.',
434
+ description: 'Ask a teammate to work on a task. Same targetAgentId + same sessionSlug continues the same task and updates it; a different sessionSlug is another independent task and will not affect other work for that teammate.',
435
435
  parameters: {
436
436
  type: 'object',
437
437
  properties: {
@@ -449,7 +449,7 @@ const TELLASK_SPECIAL_VIRTUAL_TOOLS = [
449
449
  {
450
450
  type: 'func',
451
451
  name: 'tellaskSessionless',
452
- description: 'Create a one-shot teammate Side Dialog with no assignment-update channel; later tellaskSessionless calls create new dialogs rather than updating or stopping this one.',
452
+ description: 'Ask a teammate to do a one-shot independent task. It does not update, affect, or stop earlier tasks.',
453
453
  parameters: {
454
454
  type: 'object',
455
455
  properties: {
@@ -196,7 +196,7 @@ function getMemoryPromptCopy(ctx) {
196
196
  ? `你当前处于支线对话:此处不允许 \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`。当你判断需要更新差遣牒(尤其是 progress 公告牌)时,请在合适时机直接诉请差遣牒维护人 \`@${ctx.taskdocMaintainerId}\` 执行更新,并给出要新增的章节、要追加的条目、已合并好的“新全文/替换稿”,或要删除的章节。不要声称已更新,除非看到回执。`
197
197
  : '你当前处于支线对话,且上下文已进入吃紧/告急处置态:本程不要维护差遣牒,也不要整理差遣牒更新提案。请把下一程需要恢复的讨论细节、定位、验证方式和临时信息写入足够详尽的接续包提醒项。',
198
198
  mainDialogDutyLine: '你当前处于主线对话:你负责综合维护全队共享差遣牒(尤其是 progress 公告牌)。当队友/支线对话提出更新建议时,及时合并、压缩并保持清晰。',
199
- teammateTellaskRoundDoneLine: `队友诉请重要语义:当你在诉请者上下文中收到带${runtimeMarkers.finalCompleted}标记的回贴,表示该轮诉请已经结束;对方不会继续执行同一轮诉请。此时如果目标未达成,“等待”是错误的:必须显式发起新一轮 tellask 才能继续推进。`,
199
+ teammateTellaskRoundDoneLine: `队友诉请重要语义:当你在诉请者上下文中收到带${runtimeMarkers.finalCompleted}标记的回贴,表示该轮诉请已经结束;对方不会继续执行同一轮诉请。此时如果目标未达成,“等待”是错误的:必须显式发起新一轮 tellask 才能继续推进。并行语义:不要把智能体队友当成真人同事;祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 sessionSlug = 接着同一件事说,并更新那件正在做的事;tellaskSessionless 或不同 sessionSlug = 另一件独立任务。`,
200
200
  teamMemoryHintLine: '提示:你具备团队记忆工具(`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`),可在必要时维护团队记忆(谨慎、少量、只写稳定约定)。',
201
201
  personalMemoryHintLine: `提示:你具备个人记忆工具(\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`)。个人记忆仅对当前智能体可见,且系统会自动按成员隔离到 \`.minds/memory/individual/<member-id>/...\`;因此 \`path\` 不应包含你的成员 id(不要写 \`${ctx.agentId}/...\`)。首次创建时直接用 \`add_personal_memory\` 即可,目录会由系统自动创建。记忆会在每次生成时自动注入上下文:保持少量、保持准确、按“未来会一起更新的内容”合并;写稳定事实(关键路径 + 最小必要约定),不要写任务进度/当天状态;一旦你修改了相关文件或发现记忆过期/冲突,立刻用 \`replace_personal_memory\` 更新。`,
202
202
  sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
@@ -230,7 +230,7 @@ function getMemoryPromptCopy(ctx) {
230
230
  ? `You are currently in a Side Dialog: \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\` are not allowed here. When Taskdoc should be updated (especially the shared progress bulletin board), tellask the Taskdoc maintainer \`@${ctx.taskdocMaintainerId}\` with the new section to create, entries to append, a fully merged replacement draft, or the section to delete. Do not claim it is updated until you see a receipt.`
231
231
  : 'You are currently in a Side Dialog under caution/critical context-health remediation: do not maintain Taskdoc and do not draft Taskdoc update proposals in this course. Put discussion details, pointers, verification method, and volatile resume information into sufficiently detailed continuation-package reminders.',
232
232
  mainDialogDutyLine: 'You are currently in the Main Dialog: you are responsible for keeping the team-shared Taskdoc coherent and up to date (especially the progress bulletin board). Merge proposals from teammates/Side Dialogs promptly and keep it concise.',
233
- teammateTellaskRoundDoneLine: `Teammate Tellask semantics: when you receive a tellasker reply with the ${runtimeMarkers.finalCompleted} marker, that Tellask round is finished; the tellaskee will not keep executing the same call in the background. If the objective is not met, “waiting” is wrong: you must explicitly start a new Tellask round to continue.`,
233
+ teammateTellaskRoundDoneLine: `Teammate Tellask semantics: when you receive a tellasker reply with the ${runtimeMarkers.finalCompleted} marker, that Tellask round is finished; the tellaskee will not keep executing the same call in the background. If the objective is not met, “waiting” is wrong: you must explicitly start a new Tellask round to continue. Parallel semantics: do not treat an agent teammate like a human coworker who can only handle one conversation at a time. Same teammate + same sessionSlug = continue the same task and update that task; tellaskSessionless or a different sessionSlug = another independent task.`,
234
234
  teamMemoryHintLine: 'Hint: you have team-memory tools (`add_team_memory` / `replace_team_memory` / `drop_team_memory` / `clear_team_memory`) and may maintain team memory when it is truly stable and worth sharing.',
235
235
  personalMemoryHintLine: `Hint: you have personal-memory tools (\`add_personal_memory\` / \`replace_personal_memory\` / \`drop_personal_memory\` / \`clear_personal_memory\`). Personal memory is private to the current agent and is automatically isolated under \`.minds/memory/individual/<member-id>/...\`; therefore \`path\` MUST NOT include your member id (do not write \`${ctx.agentId}/...\`). For first-time setup, just call \`add_personal_memory\`—the directory will be created automatically. Memory is automatically injected into context on each generation: keep it small, keep it accurate, and group facts that are updated together. Store stable facts (exact key paths + minimal contracts), not daily state/progress. If you changed those files or detect staleness/conflicts, immediately \`replace_personal_memory\` to keep it accurate.`,
236
236
  sideDialogWorkflowLine: ctx.contextHealthPromptMode === 'normal'
@@ -101,7 +101,8 @@ function buildTeammateTellaskPhaseContract(language) {
101
101
  '- 若被诉请者在回贴送达前因 `clear_mind` 开启新一程,同一进行中诉请默认继续有效;新一程会自然承接,直到产生回贴或明确失败。不要仅因对方换程就把该轮诉请当作失效重发。',
102
102
  '- 只有在存在明确进行中诉请时,才可声明“等待回贴/等待结果”(通常应可在“⏳ 进行中诉请(共 N 路,自动维护;仅 0 路时可手动删除)”这类提醒项中观测到);若该提醒项不存在,或提醒项已明确“当前没有执行中的诉请”,则“等待”是错误动作,必须执行下一动作(直接诉请或本地执行)。',
103
103
  '- “⏳ 进行中诉请”提醒项只是系统状态窗,不是控制面:内容不可手改;当存在非 0 路进行中诉请时,不可删除,误删会被拒绝并返回引导文案。若某一路诉请需要改要求、提前收口或纠偏,只能更新那一路诉请的“任务安排”(对长线诉请通常复用同一 `sessionSlug` 再发 `tellask`),让对应主理人按最新安排自行最终回复并自然结束。',
104
- '- 只有长线诉请(`tellask` + `sessionSlug`)才有“更新任务安排”的通道;一次性诉请(`tellaskSessionless`)没有这个通道。再次发起 `tellaskSessionless` 只会创建新的瞬态支线,不会更新、更不会要求旧支线主理人停止;若你后来发现可能需要改要求/提前收口,一开始就不该选择 `tellaskSessionless`。',
104
+ '- 只有长线诉请(`tellask` + `sessionSlug`)能接着同一件事说、更新同一件正在做的事;一次性诉请(`tellaskSessionless`)做不到。再次发起 `tellaskSessionless` 只是另一件独立任务,不会更新、更不会要求旧任务停止;若你后来发现可能需要改要求/提前收口,一开始就不该选择 `tellaskSessionless`。',
105
+ '- 不要把智能体队友当成真人同事:祂不会因为你又发一条诉请而被打扰。同一个队友可以同时做多件独立任务,系统会分开处理。记住这个简单规则:同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务。只要任务独立、目标清楚,就直接并行诉请。',
105
106
  '- 能由队友诉请完成的执行性工作,禁止转交 `askHuman` 做“转发员”;当你写“让 @X 执行 Y”时,必须在同一回复内直接发出 `tellask` 或 `tellaskSessionless`。',
106
107
  `- 当你在诉请正文里定义“回贴格式/交付格式”时,只写业务交付结构即可;不要要求被诉请者手写 \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR 标记(\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`),这些标记由 Dominds 运行时自动注入。`,
107
108
  '- 当你处于队友诉请触发的支线时,不要把“阻塞/不确定”默认等同于 `tellaskBack`:若按当前团队规程/SOP/职责卡已能明确判定执行负责人,直接用 `tellask` / `tellaskSessionless` 诉请对应负责人;只有确实需要诉请者补充需求、做裁决、澄清验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack`。`tellaskBack` 不携带 `sessionSlug`。',
@@ -113,7 +114,8 @@ function buildTeammateTellaskPhaseContract(language) {
113
114
  '- If the tellaskee starts a new course via `clear_mind` before delivering the reply, the same in-flight Tellask stays live by default; the new course naturally continues it until a reply is delivered or an explicit failure is returned. Do not re-tellask solely because the tellaskee changed course.',
114
115
  '- You may claim “waiting for reply/result” only when a concrete pending Tellask exists (normally observable in a “⏳ In-flight Tellasks (N total, auto-maintained; manually deletable only at zero in-flight)” reminder). If that reminder is absent, or it explicitly states there are no in-flight Tellasks, waiting is a wrong action; execute the next action now (direct Tellask or local action).',
115
116
  '- The “⏳ In-flight Tellasks” reminder is only a system status window, not a control surface: its content is not hand-editable; while any Tellask is still active, it is not deletable, and mistaken deletion will be rejected with guidance. If one Tellask needs a changed scope, earlier closure, or correction, update that Tellask’s assignment instead (for a sessioned Tellask, usually send another `tellask` with the same `sessionSlug`) so the tellaskee can deliver a final reply naturally under the latest assignment.',
116
- '- Only a sessioned Tellask (`tellask` + `sessionSlug`) has an assignment-update channel. A one-shot Tellask (`tellaskSessionless`) has no such channel: another `tellaskSessionless` creates a new transient Side Dialog and does not update, stop, or instruct the earlier one to stop. If you may need later correction or earlier wrap-up, do not choose `tellaskSessionless` in the first place.',
117
+ '- Only a sessioned Tellask (`tellask` + `sessionSlug`) can continue the same task and update that task. A one-shot Tellask (`tellaskSessionless`) cannot: another `tellaskSessionless` is a separate task and does not update, stop, or instruct the earlier task to stop. If you may need later correction or earlier wrap-up, do not choose `tellaskSessionless` in the first place.',
118
+ '- Do not treat an agent teammate like a human coworker who can only handle one conversation at a time. The same teammate can work on several independent tasks at once, and the system keeps them separate. Simple rule: same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task. When tasks are independent and clear, tellask in parallel.',
117
119
  '- Do not use `askHuman` as a relay for executable teammate work. If you write “ask @X to do Y”, emit `tellask` or `tellaskSessionless` in the same response.',
118
120
  `- When you define a “reply/delivery format” inside tellask body, keep it to the business delivery structure; do not require the tellaskee to hand-write \`${runtimeMarkers.finalCompleted}\` / \`${runtimeMarkers.tellaskBack}\` / FBR markers (\`${runtimeMarkers.fbrDirectReply}\` / \`${runtimeMarkers.fbrReasoningOnly}\`), because Dominds runtime injects those markers automatically.`,
119
121
  '- In a teammate-triggered Side Dialog, do not treat “blocked / uncertain” as an automatic `tellaskBack`: if current team SOP / role ownership already identifies the responsible executor, directly use `tellask` / `tellaskSessionless` for that owner; use `tellaskBack` only when you truly need the tellasker to clarify, decide, confirm acceptance criteria, provide missing input, or when existing SOP cannot determine ownership. `tellaskBack` must not carry `sessionSlug`.',
@@ -197,11 +199,13 @@ function buildTellaskCollaborationProtocol(language, dialogScope) {
197
199
  zh: [
198
200
  '- Tellask 统一走函数工具通道:`tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman` / `freshBootsReasoning`。',
199
201
  '- 对队友诉请默认使用 `tellask` 并复用 `sessionSlug`;仅在确认一次性诉请足够、且后续不需要更新任务安排/提前收口时才使用 `tellaskSessionless`,并需说明理由。',
202
+ '- 并行协调默认允许:不要把智能体队友当成真人同事;祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 `sessionSlug` = 接着同一件事说;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务。',
200
203
  '- 例外优先级(强制):`tellaskBack` 仅用于回问诉请者,不适用队友长线默认规则,也不携带 `sessionSlug`。',
201
204
  ],
202
205
  en: [
203
206
  '- Tellask must use the function-tool channel: `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman` / `freshBootsReasoning`.',
204
207
  '- For teammate tellasks, default to `tellask` and continue with the same `sessionSlug`; use `tellaskSessionless` only when a one-shot is truly sufficient and later assignment updates / early wrap-up are not needed.',
208
+ '- Parallel coordination is allowed by default: do not treat an agent teammate like a human coworker who can only handle one conversation at a time. Same teammate + same `sessionSlug` = continue the same task; `tellaskSessionless` or a different `sessionSlug` = another independent task.',
205
209
  '- Mandatory exception precedence: `tellaskBack` is ask-back-only and outside the teammate-session default; it does not carry `sessionSlug`.',
206
210
  ],
207
211
  }),
@@ -266,14 +270,14 @@ function buildTellaskInteractionRules(language) {
266
270
  zh: [
267
271
  '- `tellaskBack`:仅用于支线回问诉请者。',
268
272
  '- `tellask`:用于可恢复的长线诉请(必须提供 `targetAgentId` / `sessionSlug` / `tellaskContent`)。',
269
- '- `tellaskSessionless`:用于一次性诉请(必须提供 `targetAgentId` / `tellaskContent`);它不会建立可更新的任务安排通道,后续再次调用只会新开支线,不会影响旧支线继续执行。',
273
+ '- `tellaskSessionless`:用于一次性诉请(必须提供 `targetAgentId` / `tellaskContent`);它不能接着旧任务改要求,后续再次调用只是另一件独立任务,不会影响旧任务继续执行,也不会打扰同一队友正在执行的其它独立诉请。不要把智能体队友当成需要排队说话的真人同事。',
270
274
  '- `askHuman`:用于 Q4H(向人类请求必要澄清/决策/授权/缺失输入)。',
271
275
  '- `freshBootsReasoning`:用于发起扪心自问(FBR)支线(`tellaskContent` 必填,`effort` 可选)。',
272
276
  ],
273
277
  en: [
274
278
  '- `tellaskBack`: ask back to tellasker from a Side Dialog only.',
275
279
  '- `tellask`: resumable tellask (requires `targetAgentId` / `sessionSlug` / `tellaskContent`).',
276
- '- `tellaskSessionless`: one-shot tellask (requires `targetAgentId` / `tellaskContent`); it does not create an assignment-update channel, and later calls create new Side Dialogs instead of affecting the earlier one.',
280
+ '- `tellaskSessionless`: one-shot tellask (requires `targetAgentId` / `tellaskContent`); it cannot continue an earlier task or change its requirements. Later calls are separate tasks and do not affect earlier work for the same teammate. Do not treat agent teammates like human coworkers who need you to wait in line to talk.',
277
281
  '- `askHuman`: Q4H for necessary clarification/decision/authorization/missing input.',
278
282
  '- `freshBootsReasoning`: starts an FBR Side Dialog (requires `tellaskContent`, optional `effort`).',
279
283
  ],
@@ -36,13 +36,13 @@ function isPendingTellaskReminderMeta(value) {
36
36
  }
37
37
  function getPendingTellaskUpdateAltInstruction(language) {
38
38
  return language === 'zh'
39
- ? '不要手改这条系统提醒。诉请更改通道:只有长线诉请(`tellask` + `sessionSlug`)才能更新那一路诉请的“任务安排”:复用同一 `sessionSlug` 再发 `tellask`,让对应主理人按最新安排自行最终回复并自然结束。一次性诉请(`tellaskSessionless`)没有这个通道;新开一个 `tellaskSessionless` 只会再创建新的瞬态支线,不能要求旧主理人停止。其余情况等待系统按真实诉请状态自动刷新。'
40
- : 'Do not hand-edit this system reminder. Tellask change path: only a sessioned tellask (`tellask` + `sessionSlug`) can be updated in place: send another `tellask` with the same `sessionSlug` so the tellaskee can finish naturally under the latest assignment. A one-shot tellask (`tellaskSessionless`) has no such channel; another `tellaskSessionless` only creates a new transient Side Dialog and cannot tell the earlier owner to stop. Otherwise wait for system refresh from real tellask state.';
39
+ ? '不要手改这条系统提醒。诉请更改规则很简单:同一路长线诉请要改要求,就复用同一 `sessionSlug` 再发 `tellask`;`tellaskSessionless` 是另一件一次性独立任务,不能改旧任务,也不能要求旧任务停止。其它情况等待系统按真实诉请状态自动刷新。'
40
+ : 'Do not hand-edit this system reminder. The change rule is simple: to change a sessioned task, send another `tellask` with the same `sessionSlug`; `tellaskSessionless` is another one-shot independent task, so it cannot change or stop an earlier task. Otherwise wait for system refresh from real tellask state.';
41
41
  }
42
42
  function getPendingTellaskDeleteAltInstruction(language) {
43
43
  return language === 'zh'
44
- ? '这条系统提醒不可删除。诉请更改通道:只有长线诉请(`tellask` + `sessionSlug`)才能更新那一路诉请的“任务安排”:复用同一 `sessionSlug` 再发 `tellask`,让对应主理人按最新安排自行最终回复并自然结束。一次性诉请(`tellaskSessionless`)没有这个通道;新开一个 `tellaskSessionless` 只会再创建新的瞬态支线,不能要求旧主理人停止。其余情况等待系统按真实诉请状态自动刷新。'
45
- : 'This system reminder is not deletable. Tellask change path: only a sessioned tellask (`tellask` + `sessionSlug`) can be updated in place: send another `tellask` with the same `sessionSlug` so the tellaskee can finish naturally under the latest assignment. A one-shot tellask (`tellaskSessionless`) has no such channel; another `tellaskSessionless` only creates a new transient Side Dialog and cannot tell the earlier owner to stop. Otherwise wait for system refresh from real tellask state.';
44
+ ? '这条系统提醒不可删除。诉请更改规则很简单:同一路长线诉请要改要求,就复用同一 `sessionSlug` 再发 `tellask`;`tellaskSessionless` 是另一件一次性独立任务,不能改旧任务,也不能要求旧任务停止。其它情况等待系统按真实诉请状态自动刷新。'
45
+ : 'This system reminder is not deletable. The change rule is simple: to change a sessioned task, send another `tellask` with the same `sessionSlug`; `tellaskSessionless` is another one-shot independent task, so it cannot change or stop an earlier task. Otherwise wait for system refresh from real tellask state.';
46
46
  }
47
47
  function callKindLabel(language, view) {
48
48
  if (view.callType === 'A') {
@@ -121,8 +121,8 @@ function buildReminderContent(language, pending) {
121
121
  return [heading, '', noneRunningText].join('\n');
122
122
  }
123
123
  const summary = language === 'zh'
124
- ? '以下诉请仍在执行中;除这些条目外,当前没有其它仍在执行中的诉请。该提醒项只是系统状态窗,不是控制面:自动维护、不可手改,且在非 0 路进行中时不可删除。只有长线诉请(`tellask` + `sessionSlug`)才能更新“任务安排”;一次性诉请(`tellaskSessionless`)没有这个通道。新开一个 `tellaskSessionless` 只会再创建新的瞬态支线,不会影响旧支线继续执行,更不能要求旧主理人停止。若某一路长线诉请的要求变化,才可复用同一 `sessionSlug` 再发 `tellask`,让对应主理人按最新安排自行最终回复并自然结束。误删会被拒绝,并返回同样的引导文案。'
125
- : 'Only the Tellasks listed below are still in flight; besides them, no other Tellasks are currently executing. This reminder is only a system status window, not a control surface: auto-maintained, not hand-editable, and non-deletable while any tellask is still active. Only a sessioned tellask (`tellask` + `sessionSlug`) has an assignment-update channel; a one-shot tellask (`tellaskSessionless`) does not. Opening another `tellaskSessionless` only creates another transient Side Dialog; it does not affect the earlier one and cannot tell the earlier owner to stop. If a sessioned tellask needs to change, reuse the same `sessionSlug` in another `tellask` so the tellaskee can finish naturally under the latest assignment. Mistaken deletion will be rejected with the same guidance.';
124
+ ? '以下诉请仍在执行中;除这些条目外,当前没有其它仍在执行中的诉请。该提醒项只是系统状态窗,不是控制面:自动维护、不可手改,且在非 0 路进行中时不可删除。不要把智能体队友当成真人同事:同一个队友可以同时做多件独立任务。简单规则:同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务,不会影响旧任务,也不能要求旧任务停止。误删会被拒绝,并返回同样的引导文案。'
125
+ : 'Only the Tellasks listed below are still in flight; besides them, no other Tellasks are currently executing. This reminder is only a system status window, not a control surface: auto-maintained, not hand-editable, and non-deletable while any tellask is still active. Do not treat an agent teammate like a human coworker who can only handle one conversation at a time: the same teammate can work on several independent tasks at once. Simple rule: same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task, so it will not affect or stop the earlier task. Mistaken deletion will be rejected with the same guidance.';
126
126
  const lines = pending.map((p, idx) => {
127
127
  const base = language === 'zh'
128
128
  ? `${idx + 1}. ${pendingTargetLabel(language, p)} | ${callKindLabel(language, p)} | ${summarizeTellask(p)}`
@@ -98,6 +98,7 @@ Taskdoc is a **task contract** and the task's **team-shared source of current tr
98
98
  ### Decision Rules
99
99
 
100
100
  - If the current Side Dialog is unfinished, first judge whether team SOP / role ownership already identifies the responsible owner; if yes and the issue is execution work, directly use `tellask` / `tellaskSessionless` for that owner
101
+ - Do not treat an agent teammate like a human coworker who can only handle one conversation at a time. Same teammate + same `sessionSlug` = continue the same task and update that task; `tellaskSessionless` or a different `sessionSlug` = another independent task
101
102
  - Call `tellaskBack({ tellaskContent })` only when the tellasker must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership
102
103
  - If a human must personally perform login / GUI / captcha / high-risk authorization: call `askHuman({ tellaskContent })`
103
104
  - If the current Side Dialog is complete and the assignment header says `replyTellask`: call `replyTellask({ replyContent })`
@@ -98,6 +98,7 @@
98
98
  ### 决策规则
99
99
 
100
100
  - 当前支线未完成时,先判断团队规程 / SOP / 职责卡能否明确负责人;若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人
101
+ - 不要把智能体队友当成真人同事:祂不会因为你又发一条诉请而被打扰。同一个队友 + 同一个 `sessionSlug` = 接着同一件事说,并更新那件正在做的事;`tellaskSessionless` 或不同 `sessionSlug` = 另一件独立任务
101
102
  - 只有当必须向诉请者补需求、澄清目标、裁决取舍、确认验收口径、提供缺失输入,或现有规程无法明确判责时:调用 `tellaskBack({ tellaskContent })`
102
103
  - 需要人类亲自登录 / GUI / 验证码 / 高风险授权时:调用 `askHuman({ tellaskContent })`
103
104
  - 当前支线已经完成,且当前 assignment 明确要求 `replyTellask`:调用 `replyTellask({ replyContent })`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dominds",
3
- "version": "1.23.9",
3
+ "version": "1.23.10",
4
4
  "description": "Dominds CLI and aggregation shell for the LongRun AI kernel/runtime packages.",
5
5
  "type": "commonjs",
6
6
  "publishConfig": {
@@ -53,8 +53,8 @@
53
53
  "yaml": "^2.8.2",
54
54
  "zod": "^4.3.6",
55
55
  "@longrun-ai/codex-auth": "0.13.0",
56
- "@longrun-ai/shell": "1.13.6",
57
- "@longrun-ai/kernel": "1.13.6"
56
+ "@longrun-ai/kernel": "1.13.7",
57
+ "@longrun-ai/shell": "1.13.7"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/node": "^25.3.5",
@@ -1,5 +1,5 @@
1
- import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-DwjWeodO.js";
2
- import { aU as isObject, aC as baseRest, aV as isIterateeCall, aW as keysIn, aX as eq, aY as isArrayLike, aZ as isArray, a_ as identity, a$ as isIndex, b0 as assignValue } from "./index-Dnj_jTsn.js";
1
+ import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-D2UXV506.js";
2
+ import { aR as isObject, aA as baseRest, aS as isIterateeCall, aT as keysIn, aU as eq, aV as isArrayLike, aW as isArray, aX as identity, aY as isIndex, aZ as assignValue } from "./index-BsSFGqVX.js";
3
3
  var reWhitespace = /\s/;
4
4
  function trimmedEndIndex(string) {
5
5
  var index = string.length;
@@ -193,4 +193,4 @@ export {
193
193
  map as m,
194
194
  toFinite as t
195
195
  };
196
- //# sourceMappingURL=_basePickBy-7LUdAfWz.js.map
196
+ //# sourceMappingURL=_basePickBy-CBh9Agsi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_basePickBy-CBh9Agsi.js","sources":["../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toFinite.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toInteger.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/defaults.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createFind.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/findIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/find.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMap.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/map.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHas.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/has.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseLt.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseExtremum.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/min.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSet.js","../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePickBy.js"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n"],"names":["objectProto","hasOwnProperty","collection"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
@@ -1,4 +1,4 @@
1
- import { bh as isObjectLike, bi as baseGetTag, aZ as isArray, bj as Symbol$1, aY as isArrayLike, bk as arrayLikeKeys, bl as baseKeys, bm as memoize, bn as isArguments, bo as copyObject, aW as keysIn, bp as getPrototype, bq as cloneArrayBuffer, br as cloneTypedArray, bs as getTag, bf as baseUnary, bt as nodeUtil, aU as isObject, bu as copyArray, bv as isBuffer, bw as cloneBuffer, bx as initCloneObject, by as Stack, b0 as assignValue, bz as MapCache, aX as eq, bA as Uint8Array, bB as isTypedArray, bC as isLength, a$ as isIndex, a_ as identity, bd as baseFor, bD as Set } from "./index-Dnj_jTsn.js";
1
+ import { be as isObjectLike, bf as baseGetTag, aW as isArray, bg as Symbol$1, aV as isArrayLike, bh as arrayLikeKeys, bi as baseKeys, bj as memoize, bk as isArguments, bl as copyObject, aT as keysIn, bm as getPrototype, bn as cloneArrayBuffer, bo as cloneTypedArray, bp as getTag, bc as baseUnary, bq as nodeUtil, aR as isObject, br as copyArray, bs as isBuffer, bt as cloneBuffer, bu as initCloneObject, bv as Stack, aZ as assignValue, bw as MapCache, aU as eq, bx as Uint8Array, by as isTypedArray, bz as isLength, aY as isIndex, aX as identity, ba as baseFor, bA as Set } from "./index-BsSFGqVX.js";
2
2
  var symbolTag$3 = "[object Symbol]";
3
3
  function isSymbol(value) {
4
4
  return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
@@ -833,4 +833,4 @@ export {
833
833
  baseIndexOf as y,
834
834
  getAllKeysIn as z
835
835
  };
836
- //# sourceMappingURL=_baseUniq-DwjWeodO.js.map
836
+ //# sourceMappingURL=_baseUniq-D2UXV506.js.map