dominds 1.0.2 → 1.1.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.
- package/dist/dialog.js +18 -7
- package/dist/llm/gen/anthropic.js +45 -26
- package/dist/llm/gen/openai-compatible.js +10 -1
- package/dist/llm/kernel-driver/drive.js +22 -9
- package/dist/minds/system-prompt-parts.js +2 -2
- package/dist/persistence.js +11 -5
- package/dist/server/websocket-handler.js +41 -0
- package/dist/static/assets/_basePickBy-B82bRmTe.js +196 -0
- package/dist/static/assets/_basePickBy-B82bRmTe.js.map +1 -0
- package/dist/static/assets/{_baseUniq-CXaP1DRN.js → _baseUniq-BqskSet8.js} +214 -39
- package/dist/static/assets/_baseUniq-BqskSet8.js.map +1 -0
- package/dist/static/assets/{arc-B-paEmmQ.js → arc-BZmiEp2S.js} +2 -2
- package/dist/static/assets/{arc-B-paEmmQ.js.map → arc-BZmiEp2S.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DQ-LRMci.js → architectureDiagram-VXUJARFQ-BHYiDLJT.js} +7 -6
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DQ-LRMci.js.map → architectureDiagram-VXUJARFQ-BHYiDLJT.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-yXDlmAg6.js → blockDiagram-VD42YOAC-vgEwNOGx.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-yXDlmAg6.js.map → blockDiagram-VD42YOAC-vgEwNOGx.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-CKlXooRf.js → c4Diagram-YG6GDRKO-n9KviM0v.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-CKlXooRf.js.map → c4Diagram-YG6GDRKO-n9KviM0v.js.map} +1 -1
- package/dist/static/assets/{channel-DH1DW5ZR.js → channel-BhUIqVaj.js} +2 -2
- package/dist/static/assets/{channel-DH1DW5ZR.js.map → channel-BhUIqVaj.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-BGUV26nZ.js → chunk-4BX2VUAB-Bh_flmua.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-BGUV26nZ.js.map → chunk-4BX2VUAB-Bh_flmua.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-D-UDxpaE.js → chunk-55IACEB6-CBcUtrAA.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-D-UDxpaE.js.map → chunk-55IACEB6-CBcUtrAA.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-BmAiwyX-.js → chunk-B4BG7PRW-BYQ8WPXR.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-BmAiwyX-.js.map → chunk-B4BG7PRW-BYQ8WPXR.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-Pg62hDG3.js → chunk-DI55MBZ5-DRuIuWIv.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-Pg62hDG3.js.map → chunk-DI55MBZ5-DRuIuWIv.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-DypgScXi.js → chunk-FMBD7UC4-Ye7S_b8L.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-DypgScXi.js.map → chunk-FMBD7UC4-Ye7S_b8L.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-D099B2Lh.js → chunk-QN33PNHL-B4ofgEod.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-D099B2Lh.js.map → chunk-QN33PNHL-B4ofgEod.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-BRGnk3yw.js → chunk-QZHKN3VN-CxfiB6Ec.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-BRGnk3yw.js.map → chunk-QZHKN3VN-CxfiB6Ec.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-J4UFKyHl.js → chunk-TZMSLE5B-nY7Z_R_G.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-J4UFKyHl.js.map → chunk-TZMSLE5B-nY7Z_R_G.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-DbSBhjnI.js → classDiagram-2ON5EDUG-DZTzWVuP.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-DbSBhjnI.js.map → classDiagram-2ON5EDUG-DZTzWVuP.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DbSBhjnI.js → classDiagram-v2-WZHVMYZB-DZTzWVuP.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-DbSBhjnI.js.map → classDiagram-v2-WZHVMYZB-DZTzWVuP.js.map} +1 -1
- package/dist/static/assets/{clone-CMt2CVWH.js → clone-BdtVilYf.js} +2 -2
- package/dist/static/assets/{clone-CMt2CVWH.js.map → clone-BdtVilYf.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DgpOcJSM.js → cose-bilkent-S5V4N54A-B4qV2nSp.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-DgpOcJSM.js.map → cose-bilkent-S5V4N54A-B4qV2nSp.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-Sfkohrpt.js → dagre-6UL2VRFP-BURABS5h.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-Sfkohrpt.js.map → dagre-6UL2VRFP-BURABS5h.js.map} +1 -1
- package/dist/static/assets/{defaultLocale-DVr69WTU.js → defaultLocale-B2RvLBDe.js} +9 -9
- package/dist/static/assets/defaultLocale-B2RvLBDe.js.map +1 -0
- package/dist/static/assets/{diagram-PSM6KHXK-sqQ1DZXq.js → diagram-PSM6KHXK-Dt_DQywa.js} +9 -8
- package/dist/static/assets/{diagram-PSM6KHXK-sqQ1DZXq.js.map → diagram-PSM6KHXK-Dt_DQywa.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-Bvygmx1Z.js → diagram-QEK2KX5R-aTQ10cZh.js} +7 -6
- package/dist/static/assets/{diagram-QEK2KX5R-Bvygmx1Z.js.map → diagram-QEK2KX5R-aTQ10cZh.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-C1G_lxWW.js → diagram-S2PKOQOG-rXRvB-0y.js} +7 -6
- package/dist/static/assets/{diagram-S2PKOQOG-C1G_lxWW.js.map → diagram-S2PKOQOG-rXRvB-0y.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLDetWzs.js → erDiagram-Q2GNP2WA-C3_qe-ml.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLDetWzs.js.map → erDiagram-Q2GNP2WA-C3_qe-ml.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-Co5LYFvC.js → flowDiagram-NV44I4VS-yePT6duF.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-Co5LYFvC.js.map → flowDiagram-NV44I4VS-yePT6duF.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-ypMwB2Et.js → ganttDiagram-JELNMOA3-CeeiTfoC.js} +4 -4
- package/dist/static/assets/{ganttDiagram-JELNMOA3-ypMwB2Et.js.map → ganttDiagram-JELNMOA3-CeeiTfoC.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-NY62KEGX-BvpFeNi-.js → gitGraphDiagram-V2S2FVAM-0aHvE9pz.js} +8 -7
- package/dist/static/assets/gitGraphDiagram-V2S2FVAM-0aHvE9pz.js.map +1 -0
- package/dist/static/assets/{graph-pB4WAL9S.js → graph-D6HTT7TU.js} +4 -176
- package/dist/static/assets/graph-D6HTT7TU.js.map +1 -0
- package/dist/static/assets/{index-B53Fp26r.js → index-C0pO-3BA.js} +1015 -710
- package/dist/static/assets/index-C0pO-3BA.js.map +1 -0
- package/dist/static/assets/{index-JpBjWftL.css → index-CTkAdCTv.css} +1 -1
- package/dist/static/assets/{infoDiagram-WHAUD3N6-DrDDAMEE.js → infoDiagram-HS3SLOUP-B9k-VH4_.js} +6 -5
- package/dist/static/assets/{infoDiagram-WHAUD3N6-DrDDAMEE.js.map → infoDiagram-HS3SLOUP-B9k-VH4_.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DxdCX6xw.js → journeyDiagram-XKPGCS4Q-knPCsoIX.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DxdCX6xw.js.map → journeyDiagram-XKPGCS4Q-knPCsoIX.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-9zHUhw43.js → kanban-definition-3W4ZIXB7-3eeN94jd.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-9zHUhw43.js.map → kanban-definition-3W4ZIXB7-3eeN94jd.js.map} +1 -1
- package/dist/static/assets/{layout-dfqRYhym.js → layout-CLflNybh.js} +5 -152
- package/dist/static/assets/layout-CLflNybh.js.map +1 -0
- package/dist/static/assets/{linear-0yPuHNCD.js → linear-AqFaRRSl.js} +3 -3
- package/dist/static/assets/{linear-0yPuHNCD.js.map → linear-AqFaRRSl.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CIFBkhco.js → mindmap-definition-VGOIOE7T-cftGGw45.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CIFBkhco.js.map → mindmap-definition-VGOIOE7T-cftGGw45.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B-ZSbZbg.js → pieDiagram-ADFJNKIX-B3tVdWMf.js} +8 -7
- package/dist/static/assets/{pieDiagram-ADFJNKIX-B-ZSbZbg.js.map → pieDiagram-ADFJNKIX-B3tVdWMf.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-C2idOr0t.js → quadrantDiagram-AYHSOK5B-C2JgiL3r.js} +4 -4
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-C2idOr0t.js.map → quadrantDiagram-AYHSOK5B-C2JgiL3r.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-ZEZEoVlF.js → requirementDiagram-UZGBJVZJ-DJbgSNem.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-ZEZEoVlF.js.map → requirementDiagram-UZGBJVZJ-DJbgSNem.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CK8iW527.js → sankeyDiagram-TZEHDZUN-BFR9TXZu.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CK8iW527.js.map → sankeyDiagram-TZEHDZUN-BFR9TXZu.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-DZiRKs1m.js → sequenceDiagram-WL72ISMW-30QrbvxJ.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-DZiRKs1m.js.map → sequenceDiagram-WL72ISMW-30QrbvxJ.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-CudtHfJm.js → stateDiagram-FKZM4ZOC-agDrhxdD.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-CudtHfJm.js.map → stateDiagram-FKZM4ZOC-agDrhxdD.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-BNlnt1-z.js → stateDiagram-v2-4FDKWEC3-BsKiwDu_.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-BNlnt1-z.js.map → stateDiagram-v2-4FDKWEC3-BsKiwDu_.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ByNiGsN2.js → timeline-definition-IT6M3QCI-DSrCFaAi.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-ByNiGsN2.js.map → timeline-definition-IT6M3QCI-DSrCFaAi.js.map} +1 -1
- package/dist/static/assets/{treemap-KMMF4GRG-BO_Bm7x_.js → treemap-GDKQZRPO-Cc0kNh36.js} +15788 -10901
- package/dist/static/assets/treemap-GDKQZRPO-Cc0kNh36.js.map +1 -0
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DcP2SWz8.js → xychartDiagram-PRI3JC2R-BR_1T6y3.js} +4 -4
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-DcP2SWz8.js.map → xychartDiagram-PRI3JC2R-BR_1T6y3.js.map} +1 -1
- package/dist/static/index.html +2 -2
- package/dist/tool.js +26 -0
- package/dist/tools/builtins.js +2 -2
- package/dist/tools/ctrl.js +83 -13
- package/dist/tools/fs.js +2 -2
- package/dist/tools/plan.js +16 -5
- package/dist/tools/prompts/control/en/errors.md +1 -1
- package/dist/tools/prompts/control/zh/errors.md +1 -1
- package/package.json +11 -11
- package/dist/agent-priming.js +0 -2051
- package/dist/docs/dominds-agent-priming.md +0 -218
- package/dist/docs/dominds-agent-priming.zh.md +0 -196
- package/dist/docs/drive-logic-context-refactor-plan.zh.md +0 -338
- package/dist/docs/keep-going.md +0 -176
- package/dist/docs/keep-going.zh.md +0 -162
- package/dist/docs/showing-by-doing.md +0 -208
- package/dist/docs/showing-by-doing.zh.md +0 -177
- package/dist/docs/team-mgmt-toolset.md +0 -482
- package/dist/docs/team-mgmt-toolset.zh.md +0 -426
- package/dist/llm/driver.js +0 -4093
- package/dist/minds/promptdocs.js +0 -263
- package/dist/server/prompts-routes.js +0 -545
- package/dist/shared/team-mgmt-manual.js +0 -120
- package/dist/shared/types/prompts.js +0 -2
- package/dist/shared/types/tellask.js +0 -8
- package/dist/showing-by-doing.js +0 -1091
- package/dist/snippets/README.en.md +0 -3
- package/dist/snippets/README.md +0 -4
- package/dist/static/assets/_baseUniq-CXaP1DRN.js.map +0 -1
- package/dist/static/assets/defaultLocale-DVr69WTU.js.map +0 -1
- package/dist/static/assets/gitGraphDiagram-NY62KEGX-BvpFeNi-.js.map +0 -1
- package/dist/static/assets/graph-pB4WAL9S.js.map +0 -1
- package/dist/static/assets/index-B53Fp26r.js.map +0 -1
- package/dist/static/assets/layout-dfqRYhym.js.map +0 -1
- package/dist/static/assets/min-IX83iO4F.js +0 -42
- package/dist/static/assets/min-IX83iO4F.js.map +0 -1
- package/dist/static/assets/treemap-KMMF4GRG-BO_Bm7x_.js.map +0 -1
- package/dist/tellask.js +0 -439
- package/dist/tools/context-health.js +0 -177
- package/dist/tools/diag.js +0 -583
- package/dist/tools/team-mgmt.js +0 -3487
- package/dist/utils/task-doc.js +0 -236
package/dist/dialog.js
CHANGED
|
@@ -23,6 +23,7 @@ const runtime_language_1 = require("./shared/runtime-language");
|
|
|
23
23
|
const id_1 = require("./shared/utils/id");
|
|
24
24
|
const inter_dialog_format_1 = require("./shared/utils/inter-dialog-format");
|
|
25
25
|
const time_1 = require("./shared/utils/time");
|
|
26
|
+
const tool_1 = require("./tool");
|
|
26
27
|
const id_2 = require("./utils/id");
|
|
27
28
|
class DialogID {
|
|
28
29
|
constructor(selfId, rootId) {
|
|
@@ -313,8 +314,13 @@ class Dialog {
|
|
|
313
314
|
// should continue generating next llm messages immediately;
|
|
314
315
|
//
|
|
315
316
|
// Reminder management methods
|
|
316
|
-
addReminder(content, owner, meta, position) {
|
|
317
|
-
const reminder = {
|
|
317
|
+
addReminder(content, owner, meta, position, options) {
|
|
318
|
+
const reminder = {
|
|
319
|
+
content,
|
|
320
|
+
owner,
|
|
321
|
+
meta,
|
|
322
|
+
echoback: options?.echoback,
|
|
323
|
+
};
|
|
318
324
|
const insertIndex = position !== undefined ? position : this.reminders.length;
|
|
319
325
|
if (insertIndex < 0 || insertIndex > this.reminders.length) {
|
|
320
326
|
throw new Error(`Invalid reminder position ${insertIndex}. Valid range: 0-${this.reminders.length}`);
|
|
@@ -334,7 +340,7 @@ class Dialog {
|
|
|
334
340
|
this._remindersVer++;
|
|
335
341
|
return deleted;
|
|
336
342
|
}
|
|
337
|
-
updateReminder(index, content, meta) {
|
|
343
|
+
updateReminder(index, content, meta, options) {
|
|
338
344
|
if (index < 0 || index >= this.reminders.length) {
|
|
339
345
|
throw new Error(`Reminder index ${index} does not exist. Available reminders: 0-${this.reminders.length - 1}`);
|
|
340
346
|
}
|
|
@@ -343,6 +349,7 @@ class Dialog {
|
|
|
343
349
|
content,
|
|
344
350
|
owner: oldReminder.owner,
|
|
345
351
|
meta: meta !== undefined ? meta : oldReminder.meta,
|
|
352
|
+
echoback: options?.echoback ?? oldReminder.echoback,
|
|
346
353
|
};
|
|
347
354
|
this.reminders[index] = updatedReminder;
|
|
348
355
|
this._updatedAt = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
@@ -381,6 +388,7 @@ class Dialog {
|
|
|
381
388
|
content: result.updatedContent,
|
|
382
389
|
owner: reminder.owner,
|
|
383
390
|
meta: result.updatedMeta !== undefined ? result.updatedMeta : reminder.meta,
|
|
391
|
+
echoback: reminder.echoback,
|
|
384
392
|
};
|
|
385
393
|
this.reminders[i] = updatedReminder;
|
|
386
394
|
}
|
|
@@ -410,9 +418,12 @@ class Dialog {
|
|
|
410
418
|
catch (err) {
|
|
411
419
|
log_1.log.warn('Failed to persist reminders', err, { dialogId: this.id.valueOf() });
|
|
412
420
|
}
|
|
413
|
-
const
|
|
421
|
+
const reminderNoByIndex = (0, tool_1.computeReminderNoByIndex)(this.reminders);
|
|
422
|
+
const reminders = this.reminders.map((r, index) => ({
|
|
414
423
|
content: r.content,
|
|
415
424
|
meta: r.meta,
|
|
425
|
+
reminder_no: reminderNoByIndex.get(index),
|
|
426
|
+
echoback: (0, tool_1.reminderEchoBackEnabled)(r),
|
|
416
427
|
}));
|
|
417
428
|
// Emit full_reminders_update event with complete reminder list including metadata
|
|
418
429
|
const fullRemindersEvt = {
|
|
@@ -652,7 +663,7 @@ class Dialog {
|
|
|
652
663
|
async receiveFuncResult(result) {
|
|
653
664
|
return await this.dlgStore.receiveFuncResult(this, result);
|
|
654
665
|
}
|
|
655
|
-
async notifyGeneratingStart() {
|
|
666
|
+
async notifyGeneratingStart(msgId) {
|
|
656
667
|
// Capture the generation's starting course so any events emitted during this generation
|
|
657
668
|
// remain attributed to the correct course even if a tool mutates dialog.currentCourse
|
|
658
669
|
// mid-generation (e.g., clear_mind).
|
|
@@ -668,7 +679,7 @@ class Dialog {
|
|
|
668
679
|
// Mark generation as started with the actual genseq
|
|
669
680
|
// This ensures subdialog_final_response_evt waits for both user_text and generating_start_evt
|
|
670
681
|
this.markGenerationStarted();
|
|
671
|
-
await this.dlgStore.notifyGeneratingStart(this);
|
|
682
|
+
await this.dlgStore.notifyGeneratingStart(this, msgId);
|
|
672
683
|
}
|
|
673
684
|
async notifyGeneratingFinish(contextHealth, llmGenModel) {
|
|
674
685
|
if (contextHealth) {
|
|
@@ -1070,7 +1081,7 @@ class DialogStore {
|
|
|
1070
1081
|
/**
|
|
1071
1082
|
* Notify start of LLM generation lifecycle (generating_start_evt)
|
|
1072
1083
|
*/
|
|
1073
|
-
async notifyGeneratingStart(_dialog) { }
|
|
1084
|
+
async notifyGeneratingStart(_dialog, _msgId) { }
|
|
1074
1085
|
/**
|
|
1075
1086
|
* Notify end of LLM generation lifecycle (generating_finish_evt)
|
|
1076
1087
|
*/
|
|
@@ -576,8 +576,8 @@ function validateReconstructedContext(messages) {
|
|
|
576
576
|
}
|
|
577
577
|
async function consumeAnthropicStream(stream, receiver, abortSignal, forcedJsonToolName) {
|
|
578
578
|
// Stream lifecycle management using SDK start/stop events
|
|
579
|
-
|
|
580
|
-
|
|
579
|
+
const activeContentBlocks = new Map();
|
|
580
|
+
const activeToolUses = new Map();
|
|
581
581
|
let sayingStarted = false;
|
|
582
582
|
let thinkingStarted = false;
|
|
583
583
|
let usage = { kind: 'unavailable' };
|
|
@@ -588,23 +588,35 @@ async function consumeAnthropicStream(stream, receiver, abortSignal, forcedJsonT
|
|
|
588
588
|
}
|
|
589
589
|
switch (event.type) {
|
|
590
590
|
case 'content_block_start': {
|
|
591
|
+
const blockIndex = event.index;
|
|
591
592
|
const contentBlock = event.content_block;
|
|
593
|
+
const existingBlock = activeContentBlocks.get(blockIndex);
|
|
594
|
+
if (existingBlock) {
|
|
595
|
+
log.warn('ANTH content_block_start replacing active content block at index', new Error('content_block_start_without_stop'), {
|
|
596
|
+
index: blockIndex,
|
|
597
|
+
prevType: existingBlock.type,
|
|
598
|
+
nextType: contentBlock.type,
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
activeContentBlocks.set(blockIndex, contentBlock);
|
|
592
602
|
// Track tool use so we can emit function calls once JSON is complete
|
|
593
603
|
if (contentBlock.type === 'tool_use') {
|
|
594
|
-
|
|
604
|
+
activeToolUses.set(blockIndex, {
|
|
595
605
|
id: contentBlock.id,
|
|
596
606
|
name: contentBlock.name,
|
|
597
607
|
inputJson: '',
|
|
598
608
|
initialInput: contentBlock.input,
|
|
599
|
-
};
|
|
609
|
+
});
|
|
600
610
|
}
|
|
601
|
-
currentContentBlock = contentBlock;
|
|
602
611
|
break;
|
|
603
612
|
}
|
|
604
613
|
case 'content_block_delta': {
|
|
614
|
+
const blockIndex = event.index;
|
|
615
|
+
const activeContentBlock = activeContentBlocks.get(blockIndex);
|
|
605
616
|
// Only process deltas for known content blocks
|
|
606
|
-
if (!
|
|
617
|
+
if (!activeContentBlock) {
|
|
607
618
|
log.warn('ANTH unexpected content_block_delta without active content block', new Error('Delta received before content_block_start'), {
|
|
619
|
+
index: blockIndex,
|
|
608
620
|
deltaType: event.delta.type,
|
|
609
621
|
});
|
|
610
622
|
break;
|
|
@@ -657,37 +669,44 @@ async function consumeAnthropicStream(stream, receiver, abortSignal, forcedJsonT
|
|
|
657
669
|
}
|
|
658
670
|
else if (delta.type === 'input_json_delta') {
|
|
659
671
|
const partialJson = delta.partial_json;
|
|
660
|
-
|
|
661
|
-
|
|
672
|
+
const activeToolUse = activeToolUses.get(blockIndex);
|
|
673
|
+
if (activeToolUse) {
|
|
674
|
+
applyInputJsonDelta(activeToolUse, partialJson);
|
|
662
675
|
}
|
|
663
676
|
else if (partialJson.length > 0) {
|
|
664
677
|
log.warn('ANTH input_json_delta without active tool_use', new Error('Input JSON delta received without active tool_use block'), {
|
|
665
|
-
hasCurrentBlock:
|
|
666
|
-
|
|
678
|
+
hasCurrentBlock: true,
|
|
679
|
+
blockIndex,
|
|
680
|
+
blockType: activeContentBlock.type,
|
|
667
681
|
});
|
|
668
682
|
}
|
|
669
683
|
}
|
|
670
684
|
break;
|
|
671
685
|
}
|
|
672
686
|
case 'content_block_stop': {
|
|
673
|
-
|
|
687
|
+
const blockIndex = event.index;
|
|
688
|
+
const activeContentBlock = activeContentBlocks.get(blockIndex);
|
|
689
|
+
if (!activeContentBlock) {
|
|
674
690
|
break;
|
|
675
691
|
}
|
|
676
692
|
// Close thinking as soon as the thinking block ends so downstream UI/persistence reflects
|
|
677
693
|
// strict generation order (thinking first, then saying). This also avoids emitting
|
|
678
694
|
// thinking_finish after the main message has already completed.
|
|
679
|
-
if (
|
|
695
|
+
if (activeContentBlock.type === 'thinking' && thinkingStarted) {
|
|
680
696
|
await receiver.thinkingFinish();
|
|
681
697
|
thinkingStarted = false;
|
|
682
698
|
}
|
|
683
|
-
if (
|
|
684
|
-
|
|
685
|
-
|
|
699
|
+
if (activeContentBlock.type === 'tool_use') {
|
|
700
|
+
const activeToolUse = activeToolUses.get(blockIndex);
|
|
701
|
+
if (!activeToolUse) {
|
|
702
|
+
log.warn('ANTH tool_use stop without active tool_use', new Error('Tool_use block stopped without active tool tracking'), {
|
|
703
|
+
blockIndex,
|
|
704
|
+
});
|
|
686
705
|
}
|
|
687
706
|
else {
|
|
688
|
-
if (forcedJsonToolName &&
|
|
689
|
-
const forcedInput = parseForcedJsonToolInput(
|
|
690
|
-
const jsonText = serializeAnthropicForcedJsonObject(forcedInput, `tool_use:${
|
|
707
|
+
if (forcedJsonToolName && activeToolUse.name === forcedJsonToolName) {
|
|
708
|
+
const forcedInput = parseForcedJsonToolInput(activeToolUse.inputJson, activeToolUse.initialInput, `tool_use:${activeToolUse.id}:${activeToolUse.name}`);
|
|
709
|
+
const jsonText = serializeAnthropicForcedJsonObject(forcedInput, `tool_use:${activeToolUse.id}:${activeToolUse.name}`);
|
|
691
710
|
if (!sayingStarted) {
|
|
692
711
|
sayingStarted = true;
|
|
693
712
|
await receiver.sayingStart();
|
|
@@ -698,20 +717,20 @@ async function consumeAnthropicStream(stream, receiver, abortSignal, forcedJsonT
|
|
|
698
717
|
}
|
|
699
718
|
else {
|
|
700
719
|
let argsJson = '';
|
|
701
|
-
if (
|
|
702
|
-
argsJson =
|
|
720
|
+
if (activeToolUse.inputJson.trim().length > 0) {
|
|
721
|
+
argsJson = activeToolUse.inputJson;
|
|
703
722
|
}
|
|
704
723
|
else {
|
|
705
|
-
const stringified = JSON.stringify(
|
|
724
|
+
const stringified = JSON.stringify(activeToolUse.initialInput);
|
|
706
725
|
argsJson =
|
|
707
726
|
typeof stringified === 'string' && stringified.length > 0 ? stringified : '{}';
|
|
708
727
|
}
|
|
709
|
-
await receiver.funcCall(
|
|
728
|
+
await receiver.funcCall(activeToolUse.id, activeToolUse.name, argsJson);
|
|
710
729
|
}
|
|
711
730
|
}
|
|
712
|
-
|
|
731
|
+
activeToolUses.delete(blockIndex);
|
|
713
732
|
}
|
|
714
|
-
|
|
733
|
+
activeContentBlocks.delete(blockIndex);
|
|
715
734
|
break;
|
|
716
735
|
}
|
|
717
736
|
case 'message_start': {
|
|
@@ -767,8 +786,8 @@ async function consumeAnthropicStream(stream, receiver, abortSignal, forcedJsonT
|
|
|
767
786
|
break;
|
|
768
787
|
}
|
|
769
788
|
case 'message_stop': {
|
|
770
|
-
|
|
771
|
-
|
|
789
|
+
activeContentBlocks.clear();
|
|
790
|
+
activeToolUses.clear();
|
|
772
791
|
if (thinkingStarted) {
|
|
773
792
|
await receiver.thinkingFinish();
|
|
774
793
|
thinkingStarted = false;
|
|
@@ -627,7 +627,16 @@ class OpenAiCompatibleGen {
|
|
|
627
627
|
const toolCalls = delta.tool_calls;
|
|
628
628
|
if (Array.isArray(toolCalls)) {
|
|
629
629
|
for (const call of toolCalls) {
|
|
630
|
-
const
|
|
630
|
+
const rawIndex = call.index;
|
|
631
|
+
if (typeof rawIndex !== 'number' || !Number.isInteger(rawIndex) || rawIndex < 0) {
|
|
632
|
+
const detail = `OPENAI-COMPATIBLE invalid tool call index: ${JSON.stringify(rawIndex)}`;
|
|
633
|
+
log.error(detail, new Error('openai_compatible_invalid_tool_call_index'));
|
|
634
|
+
if (receiver.streamError) {
|
|
635
|
+
await receiver.streamError(detail);
|
|
636
|
+
}
|
|
637
|
+
throw new Error(detail);
|
|
638
|
+
}
|
|
639
|
+
const index = rawIndex;
|
|
631
640
|
const existing = activeCallsByIndex.get(index);
|
|
632
641
|
const state = existing ??
|
|
633
642
|
{
|
|
@@ -12,6 +12,7 @@ const driver_messages_1 = require("../../shared/i18n/driver-messages");
|
|
|
12
12
|
const runtime_language_1 = require("../../shared/runtime-language");
|
|
13
13
|
const id_1 = require("../../shared/utils/id");
|
|
14
14
|
const time_1 = require("../../shared/utils/time");
|
|
15
|
+
const tool_1 = require("../../tool");
|
|
15
16
|
const taskdoc_1 = require("../../utils/taskdoc");
|
|
16
17
|
const client_1 = require("../client");
|
|
17
18
|
const registry_1 = require("../gen/registry");
|
|
@@ -405,18 +406,30 @@ async function renderRemindersForContext(dlg) {
|
|
|
405
406
|
if (dlg.reminders.length === 0)
|
|
406
407
|
return [];
|
|
407
408
|
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
408
|
-
|
|
409
|
+
const reminderNoByIndex = (0, tool_1.computeReminderNoByIndex)(dlg.reminders);
|
|
410
|
+
const rendered = [];
|
|
411
|
+
for (let index = 0; index < dlg.reminders.length; index += 1) {
|
|
412
|
+
const reminder = dlg.reminders[index];
|
|
413
|
+
if (!reminder || !(0, tool_1.reminderEchoBackEnabled)(reminder)) {
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
const reminderNo = reminderNoByIndex.get(index);
|
|
417
|
+
if (reminderNo === undefined) {
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
409
420
|
if (reminder.owner) {
|
|
410
|
-
|
|
421
|
+
rendered.push(await reminder.owner.renderReminder(dlg, reminder, reminderNo - 1));
|
|
422
|
+
continue;
|
|
411
423
|
}
|
|
412
|
-
|
|
424
|
+
rendered.push({
|
|
413
425
|
type: 'environment_msg',
|
|
414
426
|
role: 'user',
|
|
415
|
-
content: (0, driver_messages_1.formatReminderItemGuide)(language,
|
|
427
|
+
content: (0, driver_messages_1.formatReminderItemGuide)(language, reminderNo, reminder.content, {
|
|
416
428
|
meta: reminder.meta,
|
|
417
429
|
}),
|
|
418
|
-
};
|
|
419
|
-
}
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return rendered;
|
|
420
433
|
}
|
|
421
434
|
function parseUnifiedTimestampMs(ts) {
|
|
422
435
|
const normalized = ts.trim();
|
|
@@ -1052,10 +1065,10 @@ async function driveDialogStreamCore(dlg, humanPrompt, driveOptions, callbacks)
|
|
|
1052
1065
|
let contextHealthForGen;
|
|
1053
1066
|
let llmGenModelForGen = model;
|
|
1054
1067
|
let suspendForHuman = false;
|
|
1055
|
-
|
|
1068
|
+
const currentPrompt = pendingPrompt;
|
|
1069
|
+
pendingPrompt = undefined;
|
|
1070
|
+
await dlg.notifyGeneratingStart(currentPrompt?.msgId);
|
|
1056
1071
|
try {
|
|
1057
|
-
const currentPrompt = pendingPrompt;
|
|
1058
|
-
pendingPrompt = undefined;
|
|
1059
1072
|
if (currentPrompt) {
|
|
1060
1073
|
const origin = currentPrompt.origin ?? 'user';
|
|
1061
1074
|
if (origin === 'diligence_push' &&
|
|
@@ -144,7 +144,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
144
144
|
progressLine: '- 其中 `progress` 是全队共享公告牌:用于“阶段性进度快照”(关键决策/当前状态/下一步),不是流水账。',
|
|
145
145
|
injectedTaskdocLine: '- 重要:差遣牒内容会被系统以内联形式注入到上下文中(本轮生成视角下即为最新;注入内容不包括全局约束)。需要回顾时请直接基于上下文里的差遣牒内容回顾与决策,不要试图用通用文件工具读取 `*.tsk/` 下的文件(会被拒绝)。',
|
|
146
146
|
constraintsLine: '- 约定:`constraints` 只写任务特有的硬要求,不得写入系统提示/工具文档里已明确且由系统强制执行的通用规则(例如 `*.tsk/` 封装禁止通用文件工具)。一经发现重复,必须删除并告知用户。',
|
|
147
|
-
remindersLine: '-
|
|
147
|
+
remindersLine: '- 提醒项(即编号提醒,工作集):当前对话的高频工作记录/关键细节(偏私有,不作为全队公告);保持少量(常见 1–3 条),优先 `update_reminder` 压缩/合并,不再需要就 `delete_reminder`。',
|
|
148
148
|
teamMemoryLine: '- 团队记忆:稳定的团队约定/工程规约(跨任务共享)。',
|
|
149
149
|
personalMemoryLine: '- 个人记忆:稳定的个人习惯/偏好与职责域知识;可维护你职责范围内的“rtws 索引”(关键文档/代码的准确路径 + 必要要点),以减少重复读文件;不要记录具体任务状态。',
|
|
150
150
|
subdialogDutyLine: `你当前处于支线对话:此处不允许 \`change_mind\`。当你判断需要更新差遣牒(尤其是 progress 公告牌)时,请在合适时机直接诉请差遣牒维护人 \`@${ctx.taskdocMaintainerId}\` 执行更新,并给出你已合并好的“新全文/替换稿”(用于替换对应章节全文)。不要声称已更新,除非看到回执。`,
|
|
@@ -166,7 +166,7 @@ function getMemoryPromptCopy(ctx) {
|
|
|
166
166
|
progressLine: '- Taskdoc `progress` is the team’s shared bulletin board: distilled milestone snapshots (key decisions/current status/next steps), not raw logs.',
|
|
167
167
|
injectedTaskdocLine: '- Important: the Taskdoc content is injected inline into the context (the latest as of this generation; injected content excludes global constraints). Review the injected Taskdoc instead of trying to read files under `*.tsk/` via general file tools (they will be rejected).',
|
|
168
168
|
constraintsLine: '- Convention: Taskdoc `constraints` must contain task-specific requirements only; do not include global, system-enforced rules already stated in system prompt/tool docs (e.g. `.tsk/` encapsulation bans general file tools). If duplication is found, you MUST remove it and notify the user.',
|
|
169
|
-
remindersLine: '- Reminders (working set): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small (often 1–3 items), prefer `update_reminder` to compress/merge; delete when obsolete.',
|
|
169
|
+
remindersLine: '- Reminders (i.e. numbered reminders, working set): your high-frequency per-dialog worklog + critical details (not a team bulletin board); keep it small (often 1–3 items), prefer `update_reminder` to compress/merge; delete when obsolete.',
|
|
170
170
|
teamMemoryLine: '- Team memory: stable shared conventions (cross-task).',
|
|
171
171
|
personalMemoryLine: '- Personal memory: stable personal habits/preferences and responsibility-scope knowledge. Maintain a compact responsibility-area rtws index (exact key doc/code paths + minimal key facts) to reduce repeat file reads; do not store per-task state.',
|
|
172
172
|
subdialogDutyLine: `You are currently in a subdialog: \`change_mind\` is not allowed here. When Taskdoc should be updated (especially the shared progress bulletin board), tellask the Taskdoc maintainer \`@${ctx.taskdocMaintainerId}\` with a fully merged replacement draft (full-section replacement). Do not claim it is updated until you see a receipt.`,
|
package/dist/persistence.js
CHANGED
|
@@ -819,7 +819,7 @@ class DiskFileDialogStore extends dialog_1.DialogStore {
|
|
|
819
819
|
* CRITICAL: This must be called BEFORE any substream events (thinking_start, markdown_start, etc.)
|
|
820
820
|
* to ensure proper event ordering on the frontend.
|
|
821
821
|
*/
|
|
822
|
-
async notifyGeneratingStart(dialog) {
|
|
822
|
+
async notifyGeneratingStart(dialog, msgId) {
|
|
823
823
|
const course = dialog.activeGenCourseOrUndefined ?? dialog.currentCourse;
|
|
824
824
|
const genseq = dialog.activeGenSeq;
|
|
825
825
|
try {
|
|
@@ -837,6 +837,7 @@ class DiskFileDialogStore extends dialog_1.DialogStore {
|
|
|
837
837
|
type: 'generating_start_evt',
|
|
838
838
|
course,
|
|
839
839
|
genseq: genseq,
|
|
840
|
+
msgId: typeof msgId === 'string' && msgId.trim() !== '' ? msgId : undefined,
|
|
840
841
|
};
|
|
841
842
|
(0, evt_registry_1.postDialogEvent)(dialog, genStartEvt);
|
|
842
843
|
// Update generating flag in latest.yaml
|
|
@@ -1460,11 +1461,14 @@ class DiskFileDialogStore extends dialog_1.DialogStore {
|
|
|
1460
1461
|
}
|
|
1461
1462
|
// Rehydrate reminders from dialog state
|
|
1462
1463
|
const dialogState = await DialogPersistence.restoreDialog(dialog.id, status);
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
}
|
|
1464
|
+
if (!dialogState) {
|
|
1465
|
+
throw new Error(`Dialog state missing during direct event replay: ${dialog.id.valueOf()} (${status})`);
|
|
1466
|
+
}
|
|
1467
|
+
// Keep typed reminder objects as-is instead of field-picking rehydrate.
|
|
1468
|
+
// This prevents accidental field loss (e.g. echoback) when Reminder shape evolves.
|
|
1469
|
+
const restoredReminders = dialogState.reminders;
|
|
1466
1470
|
dialog.reminders.length = 0;
|
|
1467
|
-
dialog.reminders.push(...
|
|
1471
|
+
dialog.reminders.push(...restoredReminders);
|
|
1468
1472
|
}
|
|
1469
1473
|
catch (error) {
|
|
1470
1474
|
log_1.log.error(`Failed to send dialog events directly for ${dialog.id.selfId}:`, error);
|
|
@@ -2641,6 +2645,7 @@ class DialogPersistence {
|
|
|
2641
2645
|
content: r.content,
|
|
2642
2646
|
ownerName: r.owner ? r.owner.name : undefined,
|
|
2643
2647
|
meta: r.meta,
|
|
2648
|
+
echoback: r.echoback,
|
|
2644
2649
|
createdAt: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
2645
2650
|
priority: 'medium',
|
|
2646
2651
|
})),
|
|
@@ -2675,6 +2680,7 @@ class DialogPersistence {
|
|
|
2675
2680
|
content: r.content,
|
|
2676
2681
|
owner,
|
|
2677
2682
|
meta: r.meta,
|
|
2683
|
+
echoback: r.echoback,
|
|
2678
2684
|
createdAt: r.createdAt,
|
|
2679
2685
|
priority: r.priority,
|
|
2680
2686
|
};
|
|
@@ -82,6 +82,39 @@ function resolveUserLanguageCode(ws, raw, fallbackDialog) {
|
|
|
82
82
|
return fallbackDialog.getLastUserLanguageCode();
|
|
83
83
|
return (0, runtime_language_1.getWorkLanguage)();
|
|
84
84
|
}
|
|
85
|
+
async function queueUserSupplementAtGenerationBoundary(dialog, prompt) {
|
|
86
|
+
const latest = await persistence_1.DialogPersistence.loadDialogLatest(dialog.id, 'running');
|
|
87
|
+
const runStateKind = latest?.runState?.kind;
|
|
88
|
+
if (runStateKind !== 'proceeding') {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (!dialog.isLocked()) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (dialog.hasUpNext()) {
|
|
95
|
+
throw new Error(`Dialog already has pending upNext prompt; cannot queue supplement now (dialog=${dialog.id.valueOf()} incomingMsgId=${prompt.msgId})`);
|
|
96
|
+
}
|
|
97
|
+
dialog.queueUpNextPrompt({
|
|
98
|
+
prompt: prompt.content,
|
|
99
|
+
msgId: prompt.msgId,
|
|
100
|
+
grammar: prompt.grammar,
|
|
101
|
+
userLanguageCode: prompt.userLanguageCode,
|
|
102
|
+
});
|
|
103
|
+
(0, evt_registry_1.postDialogEvent)(dialog, {
|
|
104
|
+
type: 'queue_user_msg_evt',
|
|
105
|
+
course: dialog.currentCourse,
|
|
106
|
+
msgId: prompt.msgId,
|
|
107
|
+
content: prompt.content,
|
|
108
|
+
grammar: prompt.grammar,
|
|
109
|
+
userLanguageCode: prompt.userLanguageCode,
|
|
110
|
+
});
|
|
111
|
+
log.debug('Queued user supplement for next generation boundary', undefined, {
|
|
112
|
+
rootId: dialog.id.rootId,
|
|
113
|
+
selfId: dialog.id.selfId,
|
|
114
|
+
msgId: prompt.msgId,
|
|
115
|
+
});
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
85
118
|
/**
|
|
86
119
|
* Get error code from unknown error
|
|
87
120
|
*/
|
|
@@ -948,6 +981,10 @@ async function handleUserMsg2Dlg(ws, packet) {
|
|
|
948
981
|
existingDialog.status === 'running' &&
|
|
949
982
|
existingSub &&
|
|
950
983
|
existingSub.dialogKey === existingDialog.id.valueOf()) {
|
|
984
|
+
const queuedAtBoundary = await queueUserSupplementAtGenerationBoundary(existingDialog, effectivePrompt);
|
|
985
|
+
if (queuedAtBoundary) {
|
|
986
|
+
return;
|
|
987
|
+
}
|
|
951
988
|
await (0, kernel_driver_1.driveDialogStream)(existingDialog, {
|
|
952
989
|
content: effectivePrompt.content,
|
|
953
990
|
msgId: effectivePrompt.msgId,
|
|
@@ -974,6 +1011,10 @@ async function handleUserMsg2Dlg(ws, packet) {
|
|
|
974
1011
|
return;
|
|
975
1012
|
}
|
|
976
1013
|
await setupWebSocketSubscription(ws, dialog);
|
|
1014
|
+
const queuedAtBoundary = await queueUserSupplementAtGenerationBoundary(dialog, effectivePrompt);
|
|
1015
|
+
if (queuedAtBoundary) {
|
|
1016
|
+
return;
|
|
1017
|
+
}
|
|
977
1018
|
await (0, kernel_driver_1.driveDialogStream)(dialog, {
|
|
978
1019
|
content: effectivePrompt.content,
|
|
979
1020
|
msgId: effectivePrompt.msgId,
|
|
@@ -0,0 +1,196 @@
|
|
|
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-BqskSet8.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-C0pO-3BA.js";
|
|
3
|
+
var reWhitespace = /\s/;
|
|
4
|
+
function trimmedEndIndex(string) {
|
|
5
|
+
var index = string.length;
|
|
6
|
+
while (index-- && reWhitespace.test(string.charAt(index))) {
|
|
7
|
+
}
|
|
8
|
+
return index;
|
|
9
|
+
}
|
|
10
|
+
var reTrimStart = /^\s+/;
|
|
11
|
+
function baseTrim(string) {
|
|
12
|
+
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
|
|
13
|
+
}
|
|
14
|
+
var NAN = 0 / 0;
|
|
15
|
+
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
|
16
|
+
var reIsBinary = /^0b[01]+$/i;
|
|
17
|
+
var reIsOctal = /^0o[0-7]+$/i;
|
|
18
|
+
var freeParseInt = parseInt;
|
|
19
|
+
function toNumber(value) {
|
|
20
|
+
if (typeof value == "number") {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
if (isSymbol(value)) {
|
|
24
|
+
return NAN;
|
|
25
|
+
}
|
|
26
|
+
if (isObject(value)) {
|
|
27
|
+
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
|
|
28
|
+
value = isObject(other) ? other + "" : other;
|
|
29
|
+
}
|
|
30
|
+
if (typeof value != "string") {
|
|
31
|
+
return value === 0 ? value : +value;
|
|
32
|
+
}
|
|
33
|
+
value = baseTrim(value);
|
|
34
|
+
var isBinary = reIsBinary.test(value);
|
|
35
|
+
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
|
|
36
|
+
}
|
|
37
|
+
var INFINITY = 1 / 0, MAX_INTEGER = 17976931348623157e292;
|
|
38
|
+
function toFinite(value) {
|
|
39
|
+
if (!value) {
|
|
40
|
+
return value === 0 ? value : 0;
|
|
41
|
+
}
|
|
42
|
+
value = toNumber(value);
|
|
43
|
+
if (value === INFINITY || value === -INFINITY) {
|
|
44
|
+
var sign = value < 0 ? -1 : 1;
|
|
45
|
+
return sign * MAX_INTEGER;
|
|
46
|
+
}
|
|
47
|
+
return value === value ? value : 0;
|
|
48
|
+
}
|
|
49
|
+
function toInteger(value) {
|
|
50
|
+
var result = toFinite(value), remainder = result % 1;
|
|
51
|
+
return result === result ? remainder ? result - remainder : result : 0;
|
|
52
|
+
}
|
|
53
|
+
function flatten(array) {
|
|
54
|
+
var length = array == null ? 0 : array.length;
|
|
55
|
+
return length ? baseFlatten(array) : [];
|
|
56
|
+
}
|
|
57
|
+
var objectProto$1 = Object.prototype;
|
|
58
|
+
var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
|
|
59
|
+
var defaults = baseRest(function(object, sources) {
|
|
60
|
+
object = Object(object);
|
|
61
|
+
var index = -1;
|
|
62
|
+
var length = sources.length;
|
|
63
|
+
var guard = length > 2 ? sources[2] : void 0;
|
|
64
|
+
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
|
65
|
+
length = 1;
|
|
66
|
+
}
|
|
67
|
+
while (++index < length) {
|
|
68
|
+
var source = sources[index];
|
|
69
|
+
var props = keysIn(source);
|
|
70
|
+
var propsIndex = -1;
|
|
71
|
+
var propsLength = props.length;
|
|
72
|
+
while (++propsIndex < propsLength) {
|
|
73
|
+
var key = props[propsIndex];
|
|
74
|
+
var value = object[key];
|
|
75
|
+
if (value === void 0 || eq(value, objectProto$1[key]) && !hasOwnProperty$1.call(object, key)) {
|
|
76
|
+
object[key] = source[key];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return object;
|
|
81
|
+
});
|
|
82
|
+
function last(array) {
|
|
83
|
+
var length = array == null ? 0 : array.length;
|
|
84
|
+
return length ? array[length - 1] : void 0;
|
|
85
|
+
}
|
|
86
|
+
function createFind(findIndexFunc) {
|
|
87
|
+
return function(collection, predicate, fromIndex) {
|
|
88
|
+
var iterable = Object(collection);
|
|
89
|
+
if (!isArrayLike(collection)) {
|
|
90
|
+
var iteratee = baseIteratee(predicate);
|
|
91
|
+
collection = keys(collection);
|
|
92
|
+
predicate = function(key) {
|
|
93
|
+
return iteratee(iterable[key], key, iterable);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
var index = findIndexFunc(collection, predicate, fromIndex);
|
|
97
|
+
return index > -1 ? iterable[iteratee ? collection[index] : index] : void 0;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
var nativeMax = Math.max;
|
|
101
|
+
function findIndex(array, predicate, fromIndex) {
|
|
102
|
+
var length = array == null ? 0 : array.length;
|
|
103
|
+
if (!length) {
|
|
104
|
+
return -1;
|
|
105
|
+
}
|
|
106
|
+
var index = fromIndex == null ? 0 : toInteger(fromIndex);
|
|
107
|
+
if (index < 0) {
|
|
108
|
+
index = nativeMax(length + index, 0);
|
|
109
|
+
}
|
|
110
|
+
return baseFindIndex(array, baseIteratee(predicate), index);
|
|
111
|
+
}
|
|
112
|
+
var find = createFind(findIndex);
|
|
113
|
+
function baseMap(collection, iteratee) {
|
|
114
|
+
var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
|
|
115
|
+
baseEach(collection, function(value, key, collection2) {
|
|
116
|
+
result[++index] = iteratee(value, key, collection2);
|
|
117
|
+
});
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
function map(collection, iteratee) {
|
|
121
|
+
var func = isArray(collection) ? arrayMap : baseMap;
|
|
122
|
+
return func(collection, baseIteratee(iteratee));
|
|
123
|
+
}
|
|
124
|
+
var objectProto = Object.prototype;
|
|
125
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
126
|
+
function baseHas(object, key) {
|
|
127
|
+
return object != null && hasOwnProperty.call(object, key);
|
|
128
|
+
}
|
|
129
|
+
function has(object, path) {
|
|
130
|
+
return object != null && hasPath(object, path, baseHas);
|
|
131
|
+
}
|
|
132
|
+
function baseLt(value, other) {
|
|
133
|
+
return value < other;
|
|
134
|
+
}
|
|
135
|
+
function baseExtremum(array, iteratee, comparator) {
|
|
136
|
+
var index = -1, length = array.length;
|
|
137
|
+
while (++index < length) {
|
|
138
|
+
var value = array[index], current = iteratee(value);
|
|
139
|
+
if (current != null && (computed === void 0 ? current === current && !isSymbol(current) : comparator(current, computed))) {
|
|
140
|
+
var computed = current, result = value;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
function min(array) {
|
|
146
|
+
return array && array.length ? baseExtremum(array, identity, baseLt) : void 0;
|
|
147
|
+
}
|
|
148
|
+
function baseSet(object, path, value, customizer) {
|
|
149
|
+
if (!isObject(object)) {
|
|
150
|
+
return object;
|
|
151
|
+
}
|
|
152
|
+
path = castPath(path, object);
|
|
153
|
+
var index = -1, length = path.length, lastIndex = length - 1, nested = object;
|
|
154
|
+
while (nested != null && ++index < length) {
|
|
155
|
+
var key = toKey(path[index]), newValue = value;
|
|
156
|
+
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
157
|
+
return object;
|
|
158
|
+
}
|
|
159
|
+
if (index != lastIndex) {
|
|
160
|
+
var objValue = nested[key];
|
|
161
|
+
newValue = void 0;
|
|
162
|
+
if (newValue === void 0) {
|
|
163
|
+
newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
assignValue(nested, key, newValue);
|
|
167
|
+
nested = nested[key];
|
|
168
|
+
}
|
|
169
|
+
return object;
|
|
170
|
+
}
|
|
171
|
+
function basePickBy(object, paths, predicate) {
|
|
172
|
+
var index = -1, length = paths.length, result = {};
|
|
173
|
+
while (++index < length) {
|
|
174
|
+
var path = paths[index], value = baseGet(object, path);
|
|
175
|
+
if (predicate(value, path)) {
|
|
176
|
+
baseSet(result, castPath(path, object), value);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
export {
|
|
182
|
+
baseLt as a,
|
|
183
|
+
baseExtremum as b,
|
|
184
|
+
baseMap as c,
|
|
185
|
+
basePickBy as d,
|
|
186
|
+
min as e,
|
|
187
|
+
flatten as f,
|
|
188
|
+
find as g,
|
|
189
|
+
has as h,
|
|
190
|
+
defaults as i,
|
|
191
|
+
toInteger as j,
|
|
192
|
+
last as l,
|
|
193
|
+
map as m,
|
|
194
|
+
toFinite as t
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=_basePickBy-B82bRmTe.js.map
|