dominds 1.25.13 → 1.25.14
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-display-state.d.ts +4 -2
- package/dist/dialog-display-state.js +26 -6
- package/dist/llm/kernel-driver/flow.js +3 -0
- package/dist/llm/kernel-driver/sideDialog.js +1 -9
- package/dist/server/api-routes.js +5 -8
- package/dist/server/websocket-handler.js +5 -15
- package/dist/tools/cmd-runner-protocol.d.ts +1 -0
- package/dist/tools/cmd-runner-protocol.js +8 -1
- package/dist/tools/cmd-runner.js +33 -6
- package/dist/tools/os.js +13 -8
- package/dist/tools/process-kill.d.ts +4 -0
- package/dist/tools/process-kill.js +48 -0
- package/dist/tools/prompts/os/en/tools.md +2 -2
- package/dist/tools/prompts/os/zh/tools.md +2 -2
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-B1-brAPU.js → _basePickBy-xJw0ZLXb.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-B1-brAPU.js.map → _basePickBy-xJw0ZLXb.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-BuB0jmKD.js → _baseUniq-BwH1mnxt.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-BuB0jmKD.js.map → _baseUniq-BwH1mnxt.js.map} +1 -1
- package/webapp/dist/assets/{arc-CvsBvjnB.js → arc-CXDyEAks.js} +2 -2
- package/webapp/dist/assets/{arc-CvsBvjnB.js.map → arc-CXDyEAks.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B-xGuLbb.js → architectureDiagram-2XIMDMQ5-CQfjSekJ.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B-xGuLbb.js.map → architectureDiagram-2XIMDMQ5-CQfjSekJ.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-Bu53fwsa.js → blockDiagram-WCTKOSBZ-DFTd-DGC.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-Bu53fwsa.js.map → blockDiagram-WCTKOSBZ-DFTd-DGC.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D9-FJ4LB.js → c4Diagram-IC4MRINW-DS_zRetl.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D9-FJ4LB.js.map → c4Diagram-IC4MRINW-DS_zRetl.js.map} +1 -1
- package/webapp/dist/assets/{channel-D1VPurpu.js → channel-BbTmwKgX.js} +2 -2
- package/webapp/dist/assets/{channel-D1VPurpu.js.map → channel-BbTmwKgX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-DB14wcWS.js → chunk-4BX2VUAB-CwosIBGF.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-DB14wcWS.js.map → chunk-4BX2VUAB-CwosIBGF.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-C5KCE85A.js → chunk-55IACEB6-Cwh90dP4.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-C5KCE85A.js.map → chunk-55IACEB6-Cwh90dP4.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-Bb6zm0iH.js → chunk-FMBD7UC4-BNnil15z.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-Bb6zm0iH.js.map → chunk-FMBD7UC4-BNnil15z.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-CJPrv6fM.js → chunk-JSJVCQXG-DimIImfv.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-CJPrv6fM.js.map → chunk-JSJVCQXG-DimIImfv.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-8J1Swk7E.js → chunk-KX2RTZJC-iWTw8TpU.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-8J1Swk7E.js.map → chunk-KX2RTZJC-iWTw8TpU.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-DySHY4x9.js → chunk-NQ4KR5QH-vej7OjjD.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-DySHY4x9.js.map → chunk-NQ4KR5QH-vej7OjjD.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-CTO5Z-4P.js → chunk-QZHKN3VN-UTOcRcah.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-CTO5Z-4P.js.map → chunk-QZHKN3VN-UTOcRcah.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-Ci_Ec8Ax.js → chunk-WL4C6EOR-BPG9Okux.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-Ci_Ec8Ax.js.map → chunk-WL4C6EOR-BPG9Okux.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CxAxBvv7.js → classDiagram-VBA2DB6C-BY0IlgU0.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CxAxBvv7.js.map → classDiagram-VBA2DB6C-BY0IlgU0.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CxAxBvv7.js → classDiagram-v2-RAHNMMFH-BY0IlgU0.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CxAxBvv7.js.map → classDiagram-v2-RAHNMMFH-BY0IlgU0.js.map} +1 -1
- package/webapp/dist/assets/{clone-ePiNaiNY.js → clone-HAPhhkfG.js} +2 -2
- package/webapp/dist/assets/{clone-ePiNaiNY.js.map → clone-HAPhhkfG.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-j-Ex-Sef.js → cose-bilkent-S5V4N54A-BQlr3U5G.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-j-Ex-Sef.js.map → cose-bilkent-S5V4N54A-BQlr3U5G.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-ihZ2wOCM.js → dagre-KLK3FWXG-DphPFDYz.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-ihZ2wOCM.js.map → dagre-KLK3FWXG-DphPFDYz.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-Cp4GQGS7.js → diagram-E7M64L7V-Bv4UxxXd.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-Cp4GQGS7.js.map → diagram-E7M64L7V-Bv4UxxXd.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-B70cgyS5.js → diagram-IFDJBPK2-y1CGHto0.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-B70cgyS5.js.map → diagram-IFDJBPK2-y1CGHto0.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-DMOv7eKE.js → diagram-P4PSJMXO-IXiebzDc.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-DMOv7eKE.js.map → diagram-P4PSJMXO-IXiebzDc.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BKpXWjIc.js → erDiagram-INFDFZHY-DgVQi2c7.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-BKpXWjIc.js.map → erDiagram-INFDFZHY-DgVQi2c7.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DgrItj0h.js → flowDiagram-PKNHOUZH-Ccs_iaLm.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DgrItj0h.js.map → flowDiagram-PKNHOUZH-Ccs_iaLm.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-7-8hlYsT.js → ganttDiagram-A5KZAMGK-BOlky6CI.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-7-8hlYsT.js.map → ganttDiagram-A5KZAMGK-BOlky6CI.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-cPSaCUUk.js → gitGraphDiagram-K3NZZRJ6-loEvdSsO.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-cPSaCUUk.js.map → gitGraphDiagram-K3NZZRJ6-loEvdSsO.js.map} +1 -1
- package/webapp/dist/assets/{graph-CAlg3tEk.js → graph-CbpUBil5.js} +3 -3
- package/webapp/dist/assets/{graph-CAlg3tEk.js.map → graph-CbpUBil5.js.map} +1 -1
- package/webapp/dist/assets/{index-DLTS_eOh.js → index-BiFvaOdQ.js} +139 -51
- package/webapp/dist/assets/{index-DLTS_eOh.js.map → index-BiFvaOdQ.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CHJHvxMC.js → infoDiagram-LFFYTUFH-hytR8L_9.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-CHJHvxMC.js.map → infoDiagram-LFFYTUFH-hytR8L_9.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-S8N-XZ8E.js → ishikawaDiagram-PHBUUO56-C-58-pR6.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-S8N-XZ8E.js.map → ishikawaDiagram-PHBUUO56-C-58-pR6.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-ChHNpMtH.js → journeyDiagram-4ABVD52K-DlW9wE_9.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-ChHNpMtH.js.map → journeyDiagram-4ABVD52K-DlW9wE_9.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Cqxd99wZ.js → kanban-definition-K7BYSVSG-DMwi6h6F.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-Cqxd99wZ.js.map → kanban-definition-K7BYSVSG-DMwi6h6F.js.map} +1 -1
- package/webapp/dist/assets/{layout-uOLcVthp.js → layout-m0UN-laA.js} +5 -5
- package/webapp/dist/assets/{layout-uOLcVthp.js.map → layout-m0UN-laA.js.map} +1 -1
- package/webapp/dist/assets/{linear-Ga_f4H_w.js → linear-Dl3WyCTF.js} +2 -2
- package/webapp/dist/assets/{linear-Ga_f4H_w.js.map → linear-Dl3WyCTF.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-TSH7wOlZ.js → mindmap-definition-YRQLILUH-CY7MDfxd.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-TSH7wOlZ.js.map → mindmap-definition-YRQLILUH-CY7MDfxd.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DPXszqns.js → pieDiagram-SKSYHLDU-BcpxKyhx.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DPXszqns.js.map → pieDiagram-SKSYHLDU-BcpxKyhx.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BgA_GVhR.js → quadrantDiagram-337W2JSQ-BgNfCvPO.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-BgA_GVhR.js.map → quadrantDiagram-337W2JSQ-BgNfCvPO.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CM-47daj.js → requirementDiagram-Z7DCOOCP-CvBkuXMk.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CM-47daj.js.map → requirementDiagram-Z7DCOOCP-CvBkuXMk.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CxDCwHAj.js → sankeyDiagram-WA2Y5GQK-cCG4yz8C.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CxDCwHAj.js.map → sankeyDiagram-WA2Y5GQK-cCG4yz8C.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-1UJP6Fff.js → sequenceDiagram-2WXFIKYE-DAWnxFqU.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-1UJP6Fff.js.map → sequenceDiagram-2WXFIKYE-DAWnxFqU.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-B2aqr0KQ.js → stateDiagram-RAJIS63D-rtvr6jfW.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-B2aqr0KQ.js.map → stateDiagram-RAJIS63D-rtvr6jfW.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DvmkevVb.js → stateDiagram-v2-FVOUBMTO-G6IcG_Il.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DvmkevVb.js.map → stateDiagram-v2-FVOUBMTO-G6IcG_Il.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-CaOrqzT1.js → timeline-definition-YZTLITO2-BZ-h_t5V.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-CaOrqzT1.js.map → timeline-definition-YZTLITO2-BZ-h_t5V.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-CWs_8GJm.js → treemap-KZPCXAKY-BZyhJ20s.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-CWs_8GJm.js.map → treemap-KZPCXAKY-BZyhJ20s.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BuBxFDz6.js → vennDiagram-LZ73GAT5-x92Elcin.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BuBxFDz6.js.map → vennDiagram-LZ73GAT5-x92Elcin.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-ChjL-_2b.js → xychartDiagram-JWTSCODW-gYBO5I1F.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-ChjL-_2b.js.map → xychartDiagram-JWTSCODW-gYBO5I1F.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -17,19 +17,21 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { DialogDisplayState, DialogInterruptionReason } from '@longrun-ai/kernel/types/display-state';
|
|
19
19
|
import type { DialogExecutionMarker, DialogLatestFile } from '@longrun-ai/kernel/types/storage';
|
|
20
|
-
import type { WebSocketMessage } from '@longrun-ai/kernel/types/wire';
|
|
20
|
+
import type { RunControlCountsMessage, WebSocketMessage } from '@longrun-ai/kernel/types/wire';
|
|
21
21
|
import { DialogID, type Dialog } from './dialog';
|
|
22
22
|
type StopRequestedReason = 'user_stop' | 'emergency_stop';
|
|
23
23
|
export type RunControlCountsSnapshot = {
|
|
24
24
|
proceeding: number;
|
|
25
25
|
resumable: number;
|
|
26
26
|
};
|
|
27
|
-
export declare function
|
|
27
|
+
export declare function getRunControlCountsSnapshotEpoch(): string;
|
|
28
|
+
export declare function setDisplayStateBroadcaster(fn: ((msg: WebSocketMessage) => void) | null): void;
|
|
28
29
|
export declare function isStoppedReasonResumable(reason: DialogInterruptionReason): boolean;
|
|
29
30
|
export declare function isDisplayStateResumable(state: DialogDisplayState | undefined): boolean;
|
|
30
31
|
export declare function isExecutionMarkerResumable(executionMarker: DialogExecutionMarker | undefined): boolean;
|
|
31
32
|
export declare function isDialogLatestResumable(latest: DialogLatestFile | null | undefined): boolean;
|
|
32
33
|
export declare function getRunControlCountsSnapshot(): Promise<RunControlCountsSnapshot>;
|
|
34
|
+
export declare function createRunControlCountsMessage(): Promise<RunControlCountsMessage>;
|
|
33
35
|
export declare function broadcastRunControlCountsSnapshot(): Promise<void>;
|
|
34
36
|
export declare function hasActiveRun(dialogId: DialogID): boolean;
|
|
35
37
|
export declare function getActiveRunSignal(dialogId: DialogID): AbortSignal | undefined;
|
|
@@ -17,12 +17,14 @@
|
|
|
17
17
|
* so multi-tab views converge without polling.
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.getRunControlCountsSnapshotEpoch = getRunControlCountsSnapshotEpoch;
|
|
20
21
|
exports.setDisplayStateBroadcaster = setDisplayStateBroadcaster;
|
|
21
22
|
exports.isStoppedReasonResumable = isStoppedReasonResumable;
|
|
22
23
|
exports.isDisplayStateResumable = isDisplayStateResumable;
|
|
23
24
|
exports.isExecutionMarkerResumable = isExecutionMarkerResumable;
|
|
24
25
|
exports.isDialogLatestResumable = isDialogLatestResumable;
|
|
25
26
|
exports.getRunControlCountsSnapshot = getRunControlCountsSnapshot;
|
|
27
|
+
exports.createRunControlCountsMessage = createRunControlCountsMessage;
|
|
26
28
|
exports.broadcastRunControlCountsSnapshot = broadcastRunControlCountsSnapshot;
|
|
27
29
|
exports.hasActiveRun = hasActiveRun;
|
|
28
30
|
exports.getActiveRunSignal = getActiveRunSignal;
|
|
@@ -44,6 +46,7 @@ exports.reconcileDisplayStatesAfterRestart = reconcileDisplayStatesAfterRestart;
|
|
|
44
46
|
exports.requestInterruptDialog = requestInterruptDialog;
|
|
45
47
|
exports.requestEmergencyStopAll = requestEmergencyStopAll;
|
|
46
48
|
const time_1 = require("@longrun-ai/kernel/utils/time");
|
|
49
|
+
const crypto_1 = require("crypto");
|
|
47
50
|
const dialog_1 = require("./dialog");
|
|
48
51
|
const dialog_generation_run_1 = require("./dialog-generation-run");
|
|
49
52
|
const dialog_global_registry_1 = require("./dialog-global-registry");
|
|
@@ -58,8 +61,14 @@ const log = (0, log_1.createLogger)('dialog-display-state');
|
|
|
58
61
|
let broadcastToClients;
|
|
59
62
|
const activeRunsByDialogKey = new Map();
|
|
60
63
|
const quarantiningMainDialogIds = new Set();
|
|
64
|
+
const runControlCountsSnapshotEpoch = (0, crypto_1.randomUUID)();
|
|
65
|
+
let runControlCountsSnapshotSeq = 0;
|
|
66
|
+
let runControlCountsSnapshotQueue = Promise.resolve();
|
|
67
|
+
function getRunControlCountsSnapshotEpoch() {
|
|
68
|
+
return runControlCountsSnapshotEpoch;
|
|
69
|
+
}
|
|
61
70
|
function setDisplayStateBroadcaster(fn) {
|
|
62
|
-
broadcastToClients = fn;
|
|
71
|
+
broadcastToClients = fn ?? undefined;
|
|
63
72
|
}
|
|
64
73
|
function syncRunControlCountsAfterActiveRunChange(trigger, dialogId) {
|
|
65
74
|
void (async () => {
|
|
@@ -259,16 +268,27 @@ async function getRunControlCountsSnapshot() {
|
|
|
259
268
|
}
|
|
260
269
|
return { proceeding, resumable };
|
|
261
270
|
}
|
|
262
|
-
async function
|
|
263
|
-
if (!broadcastToClients)
|
|
264
|
-
return;
|
|
271
|
+
async function createRunControlCountsMessageUnqueued() {
|
|
265
272
|
const counts = await getRunControlCountsSnapshot();
|
|
266
|
-
|
|
273
|
+
const snapshotSeq = ++runControlCountsSnapshotSeq;
|
|
274
|
+
return {
|
|
267
275
|
type: 'run_control_counts_evt',
|
|
268
276
|
proceeding: counts.proceeding,
|
|
269
277
|
resumable: counts.resumable,
|
|
278
|
+
snapshotEpoch: runControlCountsSnapshotEpoch,
|
|
279
|
+
snapshotSeq,
|
|
270
280
|
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
271
|
-
}
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function createRunControlCountsMessage() {
|
|
284
|
+
const nextSnapshot = runControlCountsSnapshotQueue.then(() => createRunControlCountsMessageUnqueued());
|
|
285
|
+
runControlCountsSnapshotQueue = nextSnapshot.then(() => undefined, () => undefined);
|
|
286
|
+
return nextSnapshot;
|
|
287
|
+
}
|
|
288
|
+
async function broadcastRunControlCountsSnapshot() {
|
|
289
|
+
if (!broadcastToClients)
|
|
290
|
+
return;
|
|
291
|
+
broadcastToClients(await createRunControlCountsMessage());
|
|
272
292
|
}
|
|
273
293
|
function hasActiveRun(dialogId) {
|
|
274
294
|
return activeRunsByDialogKey.has(dialogId.key());
|
|
@@ -1676,6 +1676,9 @@ async function executeDriveRound(args) {
|
|
|
1676
1676
|
replyContinuationScope.target() ??
|
|
1677
1677
|
calleeDialogReplyTarget;
|
|
1678
1678
|
activeTellaskReplyDirective = activeTellaskReplyDirective ?? replyContinuationScope.directive();
|
|
1679
|
+
if (driveResult.lastFunctionCallGenseq !== null) {
|
|
1680
|
+
activePromptWasReplyToolReminder = false;
|
|
1681
|
+
}
|
|
1679
1682
|
interruptedBySignal = (0, dialog_display_state_1.getActiveRunSignal)(dialog.id)?.aborted === true;
|
|
1680
1683
|
if (!interruptedBySignal) {
|
|
1681
1684
|
const queuedFollowUp = dialog.peekQueuedPrompt();
|
|
@@ -381,15 +381,7 @@ async function supplyResponseToAskerDialog(args) {
|
|
|
381
381
|
}), callerDialog.status);
|
|
382
382
|
if (maybeSideDialog) {
|
|
383
383
|
const displayState = await (0, dialog_display_state_1.computeIdleDisplayState)(maybeSideDialog);
|
|
384
|
-
await
|
|
385
|
-
kind: 'patch',
|
|
386
|
-
patch: {
|
|
387
|
-
displayState,
|
|
388
|
-
executionMarker: displayState.kind === 'stopped'
|
|
389
|
-
? { kind: 'interrupted', reason: displayState.reason }
|
|
390
|
-
: undefined,
|
|
391
|
-
},
|
|
392
|
-
}), callerDialog.status);
|
|
384
|
+
await (0, dialog_display_state_1.setDialogDisplayState)(sideDialogId, displayState, callerDialog.status);
|
|
393
385
|
}
|
|
394
386
|
}
|
|
395
387
|
await syncPendingTellaskReminderBestEffort(callerDialog, 'kernel-driver:supplyResponseToAskerDialog');
|
|
@@ -2282,12 +2282,15 @@ async function handleGetDialogs(res, status) {
|
|
|
2282
2282
|
}
|
|
2283
2283
|
async function handleGetRunControlCounts(res) {
|
|
2284
2284
|
try {
|
|
2285
|
-
const counts = await (0, dialog_display_state_1.
|
|
2285
|
+
const counts = await (0, dialog_display_state_1.createRunControlCountsMessage)();
|
|
2286
2286
|
respondJson(res, 200, {
|
|
2287
2287
|
success: true,
|
|
2288
2288
|
counts: {
|
|
2289
2289
|
proceeding: counts.proceeding,
|
|
2290
2290
|
resumable: counts.resumable,
|
|
2291
|
+
snapshotEpoch: counts.snapshotEpoch,
|
|
2292
|
+
snapshotSeq: counts.snapshotSeq,
|
|
2293
|
+
timestamp: counts.timestamp,
|
|
2291
2294
|
},
|
|
2292
2295
|
});
|
|
2293
2296
|
return true;
|
|
@@ -2771,13 +2774,7 @@ function broadcastDialogDeletes(clients, message) {
|
|
|
2771
2774
|
async function broadcastRunControlCounts(clients) {
|
|
2772
2775
|
if (!clients)
|
|
2773
2776
|
return;
|
|
2774
|
-
const
|
|
2775
|
-
const data = JSON.stringify({
|
|
2776
|
-
type: 'run_control_counts_evt',
|
|
2777
|
-
proceeding: counts.proceeding,
|
|
2778
|
-
resumable: counts.resumable,
|
|
2779
|
-
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
2780
|
-
});
|
|
2777
|
+
const data = JSON.stringify(await (0, dialog_display_state_1.createRunControlCountsMessage)());
|
|
2781
2778
|
for (const ws of clients) {
|
|
2782
2779
|
if (ws.readyState === 1) {
|
|
2783
2780
|
ws.send(data);
|
|
@@ -1908,14 +1908,9 @@ function setupWebSocketServer(httpServer, clients, auth, serverWorkLanguage, mod
|
|
|
1908
1908
|
if (msg.fromStatus !== 'running') {
|
|
1909
1909
|
return;
|
|
1910
1910
|
}
|
|
1911
|
-
void (0, dialog_display_state_1.
|
|
1912
|
-
.then((
|
|
1913
|
-
broadcastToClients(
|
|
1914
|
-
type: 'run_control_counts_evt',
|
|
1915
|
-
proceeding: counts.proceeding,
|
|
1916
|
-
resumable: counts.resumable,
|
|
1917
|
-
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
1918
|
-
});
|
|
1911
|
+
void (0, dialog_display_state_1.createRunControlCountsMessage)()
|
|
1912
|
+
.then((message) => {
|
|
1913
|
+
broadcastToClients(message);
|
|
1919
1914
|
})
|
|
1920
1915
|
.catch((error) => {
|
|
1921
1916
|
log.warn('Failed to broadcast run-control counts after dialog quarantine', error, {
|
|
@@ -1977,6 +1972,7 @@ function setupWebSocketServer(httpServer, clients, auth, serverWorkLanguage, mod
|
|
|
1977
1972
|
message: 'Connected to dialog server',
|
|
1978
1973
|
serverWorkLanguage,
|
|
1979
1974
|
supportedLanguageCodes: [...language_1.supportedLanguageCodes],
|
|
1975
|
+
runControlCountsSnapshotEpoch: (0, dialog_display_state_1.getRunControlCountsSnapshotEpoch)(),
|
|
1980
1976
|
runtimeStatus,
|
|
1981
1977
|
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
1982
1978
|
}));
|
|
@@ -2005,13 +2001,7 @@ function setupWebSocketServer(httpServer, clients, auth, serverWorkLanguage, mod
|
|
|
2005
2001
|
}
|
|
2006
2002
|
})();
|
|
2007
2003
|
try {
|
|
2008
|
-
|
|
2009
|
-
ws.send(JSON.stringify({
|
|
2010
|
-
type: 'run_control_counts_evt',
|
|
2011
|
-
proceeding: counts.proceeding,
|
|
2012
|
-
resumable: counts.resumable,
|
|
2013
|
-
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
2014
|
-
}));
|
|
2004
|
+
ws.send(JSON.stringify(await (0, dialog_display_state_1.createRunControlCountsMessage)()));
|
|
2015
2005
|
}
|
|
2016
2006
|
catch (error) {
|
|
2017
2007
|
log.warn('Failed to send initial run-control counts snapshot', error);
|
|
@@ -226,9 +226,16 @@ function parseCmdRunnerRequestLine(line) {
|
|
|
226
226
|
throw new Error('Invalid cmd_runner request: expected object');
|
|
227
227
|
}
|
|
228
228
|
const type = asString(raw['type']);
|
|
229
|
-
if (type === 'ping' || type === 'get_status'
|
|
229
|
+
if (type === 'ping' || type === 'get_status') {
|
|
230
230
|
return { type };
|
|
231
231
|
}
|
|
232
|
+
if (type === 'stop') {
|
|
233
|
+
const entirePg = asBoolean(raw['entirePg']);
|
|
234
|
+
if (entirePg === null) {
|
|
235
|
+
throw new Error('Invalid cmd_runner stop request: entirePg must be boolean');
|
|
236
|
+
}
|
|
237
|
+
return { type, entirePg };
|
|
238
|
+
}
|
|
232
239
|
if (type === 'get_output') {
|
|
233
240
|
const stdout = asBoolean(raw['stdout']);
|
|
234
241
|
const stderr = asBoolean(raw['stderr']);
|
package/dist/tools/cmd-runner.js
CHANGED
|
@@ -10,6 +10,7 @@ const node_net_1 = __importDefault(require("node:net"));
|
|
|
10
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
11
11
|
const node_util_1 = require("node:util");
|
|
12
12
|
const cmd_runner_protocol_1 = require("./cmd-runner-protocol");
|
|
13
|
+
const process_kill_1 = require("./process-kill");
|
|
13
14
|
const shell_capture_env_1 = require("./shell-capture-env");
|
|
14
15
|
const execFileAsync = (0, node_util_1.promisify)(child_process_1.execFile);
|
|
15
16
|
class ScrollingBuffer {
|
|
@@ -113,8 +114,8 @@ async function ensureSocketParentDir(endpoint) {
|
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
function writeSocketResponse(socket, response) {
|
|
117
|
-
socket.end(`${JSON.stringify(response)}\n
|
|
117
|
+
function writeSocketResponse(socket, response, callback) {
|
|
118
|
+
socket.end(`${JSON.stringify(response)}\n`, callback);
|
|
118
119
|
}
|
|
119
120
|
function isProcessAlive(pid) {
|
|
120
121
|
try {
|
|
@@ -126,6 +127,11 @@ function isProcessAlive(pid) {
|
|
|
126
127
|
return code !== 'ESRCH';
|
|
127
128
|
}
|
|
128
129
|
}
|
|
130
|
+
function markDaemonMissing(state) {
|
|
131
|
+
state.isRunning = false;
|
|
132
|
+
state.exitCode = null;
|
|
133
|
+
state.exitSignal = 'SIGKILL';
|
|
134
|
+
}
|
|
129
135
|
async function main() {
|
|
130
136
|
const initMessage = await new Promise((resolve, reject) => {
|
|
131
137
|
const timeout = setTimeout(() => {
|
|
@@ -335,11 +341,12 @@ async function main() {
|
|
|
335
341
|
return;
|
|
336
342
|
}
|
|
337
343
|
await handleStopRequest(request, state, childProcess);
|
|
344
|
+
const shouldExitAfterResponse = !state.isRunning;
|
|
338
345
|
writeSocketResponse(socket, {
|
|
339
346
|
type: 'stop_result',
|
|
340
347
|
ok: true,
|
|
341
348
|
...buildStatusPayload(state),
|
|
342
|
-
});
|
|
349
|
+
}, shouldExitAfterResponse ? () => closeServerAndExit(0) : undefined);
|
|
343
350
|
}
|
|
344
351
|
catch (error) {
|
|
345
352
|
writeSocketResponse(socket, {
|
|
@@ -412,8 +419,24 @@ async function handleStopRequest(request, state, childProcess) {
|
|
|
412
419
|
if (!state.isRunning) {
|
|
413
420
|
return;
|
|
414
421
|
}
|
|
415
|
-
|
|
416
|
-
|
|
422
|
+
if (request.entirePg && process.platform === 'win32') {
|
|
423
|
+
await (0, process_kill_1.bestEffortKillWindowsProcessTree)(state.daemonPid);
|
|
424
|
+
await (0, process_kill_1.sleepMs)(100);
|
|
425
|
+
if (!state.isRunning || !isProcessAlive(state.daemonPid)) {
|
|
426
|
+
if (!state.isRunning) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
markDaemonMissing(state);
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
try {
|
|
434
|
+
process.kill(state.daemonPid, 'SIGTERM');
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
await (0, process_kill_1.sleepMs)(1000);
|
|
417
440
|
if (!state.isRunning) {
|
|
418
441
|
return;
|
|
419
442
|
}
|
|
@@ -423,13 +446,17 @@ async function handleStopRequest(request, state, childProcess) {
|
|
|
423
446
|
catch {
|
|
424
447
|
// Process may have exited during grace period.
|
|
425
448
|
}
|
|
426
|
-
await
|
|
449
|
+
await (0, process_kill_1.sleepMs)(100);
|
|
427
450
|
if (!state.isRunning) {
|
|
428
451
|
return;
|
|
429
452
|
}
|
|
430
453
|
if (typeof childProcess.kill === 'function') {
|
|
431
454
|
childProcess.kill('SIGKILL');
|
|
432
455
|
}
|
|
456
|
+
await (0, process_kill_1.sleepMs)(100);
|
|
457
|
+
if (state.isRunning && !isProcessAlive(state.daemonPid)) {
|
|
458
|
+
markDaemonMissing(state);
|
|
459
|
+
}
|
|
433
460
|
}
|
|
434
461
|
void main().catch((error) => {
|
|
435
462
|
void flushIpc({
|
package/dist/tools/os.js
CHANGED
|
@@ -31,6 +31,7 @@ const shared_reminders_1 = require("../shared-reminders");
|
|
|
31
31
|
const tool_1 = require("../tool");
|
|
32
32
|
const cmd_runner_protocol_1 = require("./cmd-runner-protocol");
|
|
33
33
|
const output_limit_1 = require("./output-limit");
|
|
34
|
+
const process_kill_1 = require("./process-kill");
|
|
34
35
|
const shell_capture_env_1 = require("./shell-capture-env");
|
|
35
36
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
36
37
|
const requireFn = (0, module_1.createRequire)(__filename);
|
|
@@ -794,12 +795,9 @@ function parseStopDaemonArgs(args) {
|
|
|
794
795
|
if (entirePg !== undefined && typeof entirePg !== 'boolean') {
|
|
795
796
|
throw new Error('stop_daemon.entire_pg must be a boolean if provided');
|
|
796
797
|
}
|
|
797
|
-
if (process.platform === 'win32' && entirePg === true) {
|
|
798
|
-
throw new Error('stop_daemon.entire_pg=true is unsupported on Windows');
|
|
799
|
-
}
|
|
800
798
|
return {
|
|
801
799
|
pid,
|
|
802
|
-
entirePg: entirePg ??
|
|
800
|
+
entirePg: entirePg ?? true,
|
|
803
801
|
};
|
|
804
802
|
}
|
|
805
803
|
function parseGetDaemonOutputArgs(args) {
|
|
@@ -1026,6 +1024,13 @@ async function callRunner(endpoint, request, timeoutMs = 5000) {
|
|
|
1026
1024
|
}
|
|
1027
1025
|
async function bestEffortKillDaemonProcessGroup(meta, options) {
|
|
1028
1026
|
const includeEntirePg = options?.includeEntirePg ?? true;
|
|
1027
|
+
if (includeEntirePg && process.platform === 'win32') {
|
|
1028
|
+
await (0, process_kill_1.bestEffortKillWindowsProcessTree)(meta.pid);
|
|
1029
|
+
if (meta.runnerPid !== undefined && meta.runnerPid !== meta.pid) {
|
|
1030
|
+
(0, process_kill_1.bestEffortKillPid)(meta.runnerPid);
|
|
1031
|
+
}
|
|
1032
|
+
return;
|
|
1033
|
+
}
|
|
1029
1034
|
if (includeEntirePg && process.platform !== 'win32' && meta.processGroupId !== undefined) {
|
|
1030
1035
|
try {
|
|
1031
1036
|
process.kill(-meta.processGroupId, 'SIGTERM');
|
|
@@ -1033,7 +1038,7 @@ async function bestEffortKillDaemonProcessGroup(meta, options) {
|
|
|
1033
1038
|
catch {
|
|
1034
1039
|
// Best effort only.
|
|
1035
1040
|
}
|
|
1036
|
-
await
|
|
1041
|
+
await (0, process_kill_1.sleepMs)(1000);
|
|
1037
1042
|
try {
|
|
1038
1043
|
process.kill(-meta.processGroupId, 'SIGKILL');
|
|
1039
1044
|
}
|
|
@@ -1047,7 +1052,7 @@ async function bestEffortKillDaemonProcessGroup(meta, options) {
|
|
|
1047
1052
|
catch {
|
|
1048
1053
|
// Best effort only.
|
|
1049
1054
|
}
|
|
1050
|
-
await
|
|
1055
|
+
await (0, process_kill_1.sleepMs)(250);
|
|
1051
1056
|
try {
|
|
1052
1057
|
process.kill(meta.pid, 'SIGKILL');
|
|
1053
1058
|
}
|
|
@@ -1216,7 +1221,7 @@ const stopDaemonSchema = {
|
|
|
1216
1221
|
},
|
|
1217
1222
|
entire_pg: {
|
|
1218
1223
|
type: 'boolean',
|
|
1219
|
-
description: 'Whether to
|
|
1224
|
+
description: 'Whether to stop the entire process group/process tree instead of only the tracked PID (default: true)',
|
|
1220
1225
|
},
|
|
1221
1226
|
},
|
|
1222
1227
|
required: ['pid'],
|
|
@@ -2752,7 +2757,7 @@ exports.stopDaemonTool = {
|
|
|
2752
2757
|
if (reminder.meta.runnerEndpoint !== undefined &&
|
|
2753
2758
|
reminder.meta.runnerEndpoint.trim() !== '') {
|
|
2754
2759
|
try {
|
|
2755
|
-
const stopResponse = await callRunner(reminder.meta.runnerEndpoint, { type: 'stop' }, 10000);
|
|
2760
|
+
const stopResponse = await callRunner(reminder.meta.runnerEndpoint, { type: 'stop', entirePg }, 10000);
|
|
2756
2761
|
if (stopResponse.ok && runnerResponseMatchesReminder(reminder.meta, stopResponse)) {
|
|
2757
2762
|
if (stopResponse.isRunning) {
|
|
2758
2763
|
await bestEffortKillDaemonProcessGroup(reminder.meta, { includeEntirePg: entirePg });
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function sleepMs(milliseconds: number): Promise<void>;
|
|
2
|
+
export declare function buildWindowsTaskkillArgs(pid: number, force: boolean): string[];
|
|
3
|
+
export declare function bestEffortKillWindowsProcessTree(pid: number): Promise<void>;
|
|
4
|
+
export declare function bestEffortKillPid(pid: number): void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sleepMs = sleepMs;
|
|
4
|
+
exports.buildWindowsTaskkillArgs = buildWindowsTaskkillArgs;
|
|
5
|
+
exports.bestEffortKillWindowsProcessTree = bestEffortKillWindowsProcessTree;
|
|
6
|
+
exports.bestEffortKillPid = bestEffortKillPid;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_util_1 = require("node:util");
|
|
9
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
10
|
+
function sleepMs(milliseconds) {
|
|
11
|
+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
12
|
+
}
|
|
13
|
+
function buildWindowsTaskkillArgs(pid, force) {
|
|
14
|
+
assertValidPid(pid);
|
|
15
|
+
return force ? ['/PID', String(pid), '/T', '/F'] : ['/PID', String(pid), '/T'];
|
|
16
|
+
}
|
|
17
|
+
function assertValidPid(pid) {
|
|
18
|
+
if (!Number.isInteger(pid) || pid <= 0) {
|
|
19
|
+
throw new Error(`Invalid process pid: ${String(pid)}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function bestEffortTaskkill(pid, force) {
|
|
23
|
+
try {
|
|
24
|
+
await execFileAsync('taskkill.exe', buildWindowsTaskkillArgs(pid, force), {
|
|
25
|
+
windowsHide: true,
|
|
26
|
+
maxBuffer: 1024 * 1024,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Best effort only.
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function bestEffortKillWindowsProcessTree(pid) {
|
|
34
|
+
assertValidPid(pid);
|
|
35
|
+
await bestEffortTaskkill(pid, false);
|
|
36
|
+
await sleepMs(1000);
|
|
37
|
+
await bestEffortTaskkill(pid, true);
|
|
38
|
+
bestEffortKillPid(pid);
|
|
39
|
+
}
|
|
40
|
+
function bestEffortKillPid(pid) {
|
|
41
|
+
assertValidPid(pid);
|
|
42
|
+
try {
|
|
43
|
+
process.kill(pid, 'SIGKILL');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Best effort only.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -55,7 +55,7 @@ Stop daemon process.
|
|
|
55
55
|
**Parameters:**
|
|
56
56
|
|
|
57
57
|
- `pid` (required): Daemon process ID (number)
|
|
58
|
-
- `entire_pg` (optional): Whether to
|
|
58
|
+
- `entire_pg` (optional): Whether to stop the entire process group/process tree (default: `true`; on Windows this stops the tracked shell process and its child processes)
|
|
59
59
|
|
|
60
60
|
**Returns:**
|
|
61
61
|
|
|
@@ -151,7 +151,7 @@ stop_daemon({
|
|
|
151
151
|
pid: 12345,
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
//
|
|
154
|
+
// Explicitly stop the whole process group/process tree
|
|
155
155
|
stop_daemon({
|
|
156
156
|
pid: 12345,
|
|
157
157
|
entire_pg: true,
|
|
@@ -55,7 +55,7 @@ executed_at: <执行时间戳>
|
|
|
55
55
|
**参数:**
|
|
56
56
|
|
|
57
57
|
- `pid`(必需):守护进程 PID(数字)
|
|
58
|
-
- `entire_pg
|
|
58
|
+
- `entire_pg`(可选):是否停止整个进程组/进程树(默认:`true`;Windows 上会停止被追踪的 shell 进程及其子进程)
|
|
59
59
|
|
|
60
60
|
**返回:**
|
|
61
61
|
|
|
@@ -151,7 +151,7 @@ stop_daemon({
|
|
|
151
151
|
pid: 12345,
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
//
|
|
154
|
+
// 显式要求停止整个进程组/进程树
|
|
155
155
|
stop_daemon({
|
|
156
156
|
pid: 12345,
|
|
157
157
|
entire_pg: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dominds",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.14",
|
|
4
4
|
"description": "Dominds CLI and aggregation shell for the LongRun AI kernel/runtime packages.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"publishConfig": {
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"ws": "^8.19.0",
|
|
53
53
|
"yaml": "^2.8.2",
|
|
54
54
|
"zod": "^4.3.6",
|
|
55
|
-
"@longrun-ai/
|
|
56
|
-
"@longrun-ai/
|
|
57
|
-
"@longrun-ai/
|
|
55
|
+
"@longrun-ai/codex-auth": "0.13.0",
|
|
56
|
+
"@longrun-ai/kernel": "1.15.10",
|
|
57
|
+
"@longrun-ai/shell": "1.15.10"
|
|
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-
|
|
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-
|
|
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-BwH1mnxt.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-BiFvaOdQ.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-
|
|
196
|
+
//# sourceMappingURL=_basePickBy-xJw0ZLXb.js.map
|