pybao-cli 1.3.20 → 1.3.22
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/REPL-U233WVGQ.js +42 -0
- package/dist/{acp-2JJ27DEM.js → acp-MGSGKN7I.js} +26 -26
- package/dist/{agentsValidate-Z4BM4EC6.js → agentsValidate-E24UODFJ.js} +7 -7
- package/dist/{ask-K6HXLLK2.js → ask-WVNNLMSZ.js} +25 -25
- package/dist/{autoUpdater-KMO3OTDD.js → autoUpdater-R5VI5NS5.js} +3 -3
- package/dist/{chunk-P2LMOS5Q.js → chunk-3BDBJ76H.js} +1 -1
- package/dist/{chunk-45BITV3T.js → chunk-3GSGGTNG.js} +1 -1
- package/dist/{chunk-K4DOMJMD.js → chunk-3NJ6JQ2M.js} +6 -12
- package/dist/chunk-3NJ6JQ2M.js.map +7 -0
- package/dist/{chunk-F4B27ZN5.js → chunk-7OOX64M4.js} +3 -3
- package/dist/{chunk-EFXPOFOW.js → chunk-B4Z3JBM6.js} +2 -2
- package/dist/{chunk-7HFR2XLR.js → chunk-BDRQU7KP.js} +4 -4
- package/dist/{chunk-AADZRD5W.js → chunk-BHRZG737.js} +2 -2
- package/dist/{chunk-7RKS5YSA.js → chunk-BLZG4P4W.js} +4 -4
- package/dist/{chunk-A3IIDK3Z.js → chunk-C27RUGNT.js} +2 -2
- package/dist/{chunk-2RB6ZKUM.js → chunk-D5XZE6VD.js} +1 -1
- package/dist/{chunk-N2ZVIF32.js → chunk-HIN7NLKB.js} +3 -3
- package/dist/{chunk-2RZ27ATX.js → chunk-JPR5LF4I.js} +34 -34
- package/dist/{chunk-2RZ27ATX.js.map → chunk-JPR5LF4I.js.map} +2 -2
- package/dist/{chunk-A5FXNIV7.js → chunk-JZTNGHID.js} +2 -2
- package/dist/{chunk-KGIX5DXN.js → chunk-O6LTYDEM.js} +2 -2
- package/dist/{chunk-AFJPHDZP.js → chunk-OFNZCXTL.js} +1130 -345
- package/dist/chunk-OFNZCXTL.js.map +7 -0
- package/dist/{chunk-IJ64UTEA.js → chunk-OK6YLALO.js} +1 -1
- package/dist/{chunk-U46MSZBG.js → chunk-Q6NZXTU7.js} +3 -3
- package/dist/{chunk-ZHOKAFLI.js → chunk-QKK7OEVT.js} +1 -1
- package/dist/{chunk-AZQ3PH5X.js → chunk-QPYMEJ7J.js} +1 -1
- package/dist/{chunk-F2XP4S6I.js → chunk-RGMQE5W7.js} +3 -3
- package/dist/{chunk-NHJV7S3O.js → chunk-RQHQ3V5R.js} +1 -1
- package/dist/{chunk-NHJV7S3O.js.map → chunk-RQHQ3V5R.js.map} +1 -1
- package/dist/{chunk-SZD77HPK.js → chunk-SPSZIFD3.js} +1 -1
- package/dist/{chunk-SEYHW6VO.js → chunk-TB6NRY5H.js} +5 -8
- package/dist/chunk-TB6NRY5H.js.map +7 -0
- package/dist/{chunk-ZN5VZPQV.js → chunk-UDHQY254.js} +1 -1
- package/dist/{chunk-X64M7NSQ.js → chunk-VHPGBFI2.js} +2 -2
- package/dist/{chunk-UQWBHUCX.js → chunk-VNX4XL5W.js} +3 -3
- package/dist/{chunk-CBMDGQIF.js → chunk-Z3QCGGDI.js} +3 -3
- package/dist/{cli-NCCNQ53J.js → cli-VHCSI3MC.js} +77 -77
- package/dist/commands-OAY7CB4V.js +46 -0
- package/dist/{config-KRRCQVEV.js → config-L3IXWETT.js} +4 -4
- package/dist/{context-36FYRQPT.js → context-F2IIOXEP.js} +5 -5
- package/dist/{customCommands-NH2BHKAF.js → customCommands-POVQCNWI.js} +4 -4
- package/dist/{env-L3FCBQNY.js → env-5OAJSWRZ.js} +2 -2
- package/dist/index.js +3 -3
- package/dist/{llm-6LNLEJYZ.js → llm-TQRNSHD2.js} +26 -26
- package/dist/{llmLazy-3F5FIV3N.js → llmLazy-LP3VLWST.js} +1 -1
- package/dist/{loader-MARMA7A3.js → loader-LERT53VD.js} +4 -4
- package/dist/{mcp-YCQQU4CR.js → mcp-7WABABD5.js} +7 -7
- package/dist/{mentionProcessor-7C3VQN4L.js → mentionProcessor-3EES7EOM.js} +5 -5
- package/dist/{messages-FLGJ4UO4.js → messages-KDYSBWPF.js} +1 -1
- package/dist/{model-EJQIQQS7.js → model-H5SZYB3G.js} +5 -5
- package/dist/{openai-BE6ANRNX.js → openai-OJDXHXW7.js} +5 -5
- package/dist/{outputStyles-LLBEKZWF.js → outputStyles-KPZL4IL6.js} +4 -4
- package/dist/{pluginRuntime-4TAKSWU2.js → pluginRuntime-FMYJ2OLJ.js} +6 -6
- package/dist/{pluginValidation-E2ZIERQ4.js → pluginValidation-3XL3376C.js} +6 -6
- package/dist/prompts-5ZSQVFA4.js +48 -0
- package/dist/{pybAgentSessionLoad-IXTAZ25O.js → pybAgentSessionLoad-CWFVVJJP.js} +4 -4
- package/dist/{pybAgentSessionResume-W2QAY53J.js → pybAgentSessionResume-NOZGRPWX.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-R5TQBKZW.js → pybAgentStreamJsonSession-XJBNIDCX.js} +1 -1
- package/dist/{pybHooks-T4ENUPL7.js → pybHooks-X4Z6SUM3.js} +4 -4
- package/dist/query-I6RAXHNW.js +50 -0
- package/dist/{ripgrep-WKGAUD4C.js → ripgrep-2FLGSL5E.js} +3 -3
- package/dist/{skillMarketplace-JTFFP4NM.js → skillMarketplace-EZFJG2VQ.js} +3 -3
- package/dist/{state-YDEBTCFK.js → state-TJYRRWRD.js} +2 -2
- package/dist/{theme-UJ3ZOM2G.js → theme-XFYRVMO2.js} +5 -5
- package/dist/{toolPermissionSettings-6N5C3LTH.js → toolPermissionSettings-DFXSQ5HV.js} +6 -6
- package/dist/tools-CNY53VUO.js +47 -0
- package/dist/{userInput-4XLXSVYP.js → userInput-EU5BLE3W.js} +27 -27
- package/package.json +1 -1
- package/dist/REPL-NTSMBAN3.js +0 -42
- package/dist/chunk-AFJPHDZP.js.map +0 -7
- package/dist/chunk-K4DOMJMD.js.map +0 -7
- package/dist/chunk-SEYHW6VO.js.map +0 -7
- package/dist/commands-DIC2IHEP.js +0 -46
- package/dist/prompts-6PXJTN4R.js +0 -48
- package/dist/query-VMP2QAOQ.js +0 -50
- package/dist/tools-QMM66OOR.js +0 -47
- /package/dist/{REPL-NTSMBAN3.js.map → REPL-U233WVGQ.js.map} +0 -0
- /package/dist/{acp-2JJ27DEM.js.map → acp-MGSGKN7I.js.map} +0 -0
- /package/dist/{agentsValidate-Z4BM4EC6.js.map → agentsValidate-E24UODFJ.js.map} +0 -0
- /package/dist/{ask-K6HXLLK2.js.map → ask-WVNNLMSZ.js.map} +0 -0
- /package/dist/{autoUpdater-KMO3OTDD.js.map → autoUpdater-R5VI5NS5.js.map} +0 -0
- /package/dist/{chunk-P2LMOS5Q.js.map → chunk-3BDBJ76H.js.map} +0 -0
- /package/dist/{chunk-45BITV3T.js.map → chunk-3GSGGTNG.js.map} +0 -0
- /package/dist/{chunk-F4B27ZN5.js.map → chunk-7OOX64M4.js.map} +0 -0
- /package/dist/{chunk-EFXPOFOW.js.map → chunk-B4Z3JBM6.js.map} +0 -0
- /package/dist/{chunk-7HFR2XLR.js.map → chunk-BDRQU7KP.js.map} +0 -0
- /package/dist/{chunk-AADZRD5W.js.map → chunk-BHRZG737.js.map} +0 -0
- /package/dist/{chunk-7RKS5YSA.js.map → chunk-BLZG4P4W.js.map} +0 -0
- /package/dist/{chunk-A3IIDK3Z.js.map → chunk-C27RUGNT.js.map} +0 -0
- /package/dist/{chunk-2RB6ZKUM.js.map → chunk-D5XZE6VD.js.map} +0 -0
- /package/dist/{chunk-N2ZVIF32.js.map → chunk-HIN7NLKB.js.map} +0 -0
- /package/dist/{chunk-A5FXNIV7.js.map → chunk-JZTNGHID.js.map} +0 -0
- /package/dist/{chunk-KGIX5DXN.js.map → chunk-O6LTYDEM.js.map} +0 -0
- /package/dist/{chunk-IJ64UTEA.js.map → chunk-OK6YLALO.js.map} +0 -0
- /package/dist/{chunk-U46MSZBG.js.map → chunk-Q6NZXTU7.js.map} +0 -0
- /package/dist/{chunk-ZHOKAFLI.js.map → chunk-QKK7OEVT.js.map} +0 -0
- /package/dist/{chunk-AZQ3PH5X.js.map → chunk-QPYMEJ7J.js.map} +0 -0
- /package/dist/{chunk-F2XP4S6I.js.map → chunk-RGMQE5W7.js.map} +0 -0
- /package/dist/{chunk-SZD77HPK.js.map → chunk-SPSZIFD3.js.map} +0 -0
- /package/dist/{chunk-ZN5VZPQV.js.map → chunk-UDHQY254.js.map} +0 -0
- /package/dist/{chunk-X64M7NSQ.js.map → chunk-VHPGBFI2.js.map} +0 -0
- /package/dist/{chunk-UQWBHUCX.js.map → chunk-VNX4XL5W.js.map} +0 -0
- /package/dist/{chunk-CBMDGQIF.js.map → chunk-Z3QCGGDI.js.map} +0 -0
- /package/dist/{cli-NCCNQ53J.js.map → cli-VHCSI3MC.js.map} +0 -0
- /package/dist/{commands-DIC2IHEP.js.map → commands-OAY7CB4V.js.map} +0 -0
- /package/dist/{config-KRRCQVEV.js.map → config-L3IXWETT.js.map} +0 -0
- /package/dist/{context-36FYRQPT.js.map → context-F2IIOXEP.js.map} +0 -0
- /package/dist/{customCommands-NH2BHKAF.js.map → customCommands-POVQCNWI.js.map} +0 -0
- /package/dist/{env-L3FCBQNY.js.map → env-5OAJSWRZ.js.map} +0 -0
- /package/dist/{llm-6LNLEJYZ.js.map → llm-TQRNSHD2.js.map} +0 -0
- /package/dist/{llmLazy-3F5FIV3N.js.map → llmLazy-LP3VLWST.js.map} +0 -0
- /package/dist/{loader-MARMA7A3.js.map → loader-LERT53VD.js.map} +0 -0
- /package/dist/{mcp-YCQQU4CR.js.map → mcp-7WABABD5.js.map} +0 -0
- /package/dist/{mentionProcessor-7C3VQN4L.js.map → mentionProcessor-3EES7EOM.js.map} +0 -0
- /package/dist/{messages-FLGJ4UO4.js.map → messages-KDYSBWPF.js.map} +0 -0
- /package/dist/{model-EJQIQQS7.js.map → model-H5SZYB3G.js.map} +0 -0
- /package/dist/{openai-BE6ANRNX.js.map → openai-OJDXHXW7.js.map} +0 -0
- /package/dist/{outputStyles-LLBEKZWF.js.map → outputStyles-KPZL4IL6.js.map} +0 -0
- /package/dist/{pluginRuntime-4TAKSWU2.js.map → pluginRuntime-FMYJ2OLJ.js.map} +0 -0
- /package/dist/{pluginValidation-E2ZIERQ4.js.map → pluginValidation-3XL3376C.js.map} +0 -0
- /package/dist/{prompts-6PXJTN4R.js.map → prompts-5ZSQVFA4.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-IXTAZ25O.js.map → pybAgentSessionLoad-CWFVVJJP.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-W2QAY53J.js.map → pybAgentSessionResume-NOZGRPWX.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-R5TQBKZW.js.map → pybAgentStreamJsonSession-XJBNIDCX.js.map} +0 -0
- /package/dist/{pybHooks-T4ENUPL7.js.map → pybHooks-X4Z6SUM3.js.map} +0 -0
- /package/dist/{query-VMP2QAOQ.js.map → query-I6RAXHNW.js.map} +0 -0
- /package/dist/{ripgrep-WKGAUD4C.js.map → ripgrep-2FLGSL5E.js.map} +0 -0
- /package/dist/{skillMarketplace-JTFFP4NM.js.map → skillMarketplace-EZFJG2VQ.js.map} +0 -0
- /package/dist/{state-YDEBTCFK.js.map → state-TJYRRWRD.js.map} +0 -0
- /package/dist/{theme-UJ3ZOM2G.js.map → theme-XFYRVMO2.js.map} +0 -0
- /package/dist/{toolPermissionSettings-6N5C3LTH.js.map → toolPermissionSettings-DFXSQ5HV.js.map} +0 -0
- /package/dist/{tools-QMM66OOR.js.map → tools-CNY53VUO.js.map} +0 -0
- /package/dist/{userInput-4XLXSVYP.js.map → userInput-EU5BLE3W.js.map} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createRequire as __pybCreateRequire } from "node:module";
|
|
2
|
+
const require = __pybCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
REPL
|
|
5
|
+
} from "./chunk-JPR5LF4I.js";
|
|
6
|
+
import "./chunk-D5XZE6VD.js";
|
|
7
|
+
import "./chunk-BDRQU7KP.js";
|
|
8
|
+
import "./chunk-HIN7NLKB.js";
|
|
9
|
+
import "./chunk-3BDBJ76H.js";
|
|
10
|
+
import "./chunk-OK6YLALO.js";
|
|
11
|
+
import "./chunk-C27RUGNT.js";
|
|
12
|
+
import "./chunk-5P7HBXTD.js";
|
|
13
|
+
import "./chunk-3DFBSQIT.js";
|
|
14
|
+
import "./chunk-3NJ6JQ2M.js";
|
|
15
|
+
import "./chunk-B6IMQJZM.js";
|
|
16
|
+
import "./chunk-B4Z3JBM6.js";
|
|
17
|
+
import "./chunk-VHPGBFI2.js";
|
|
18
|
+
import "./chunk-BLZG4P4W.js";
|
|
19
|
+
import "./chunk-SPSZIFD3.js";
|
|
20
|
+
import "./chunk-BHRZG737.js";
|
|
21
|
+
import "./chunk-7OOX64M4.js";
|
|
22
|
+
import "./chunk-QKK7OEVT.js";
|
|
23
|
+
import "./chunk-UNNVICVU.js";
|
|
24
|
+
import "./chunk-JZTNGHID.js";
|
|
25
|
+
import "./chunk-ERMQRV55.js";
|
|
26
|
+
import "./chunk-O6LTYDEM.js";
|
|
27
|
+
import "./chunk-A3BVXXA3.js";
|
|
28
|
+
import "./chunk-BJSWTHRM.js";
|
|
29
|
+
import "./chunk-3GSGGTNG.js";
|
|
30
|
+
import "./chunk-RGMQE5W7.js";
|
|
31
|
+
import "./chunk-Z3QCGGDI.js";
|
|
32
|
+
import "./chunk-QPYMEJ7J.js";
|
|
33
|
+
import "./chunk-VNX4XL5W.js";
|
|
34
|
+
import "./chunk-RQVLBMP7.js";
|
|
35
|
+
import "./chunk-UDHQY254.js";
|
|
36
|
+
import "./chunk-TB6NRY5H.js";
|
|
37
|
+
import "./chunk-RQHQ3V5R.js";
|
|
38
|
+
import "./chunk-OUXHGDLH.js";
|
|
39
|
+
import "./chunk-I3J4JYES.js";
|
|
40
|
+
export {
|
|
41
|
+
REPL
|
|
42
|
+
};
|
|
@@ -6,60 +6,60 @@ import {
|
|
|
6
6
|
} from "./chunk-MWPFU2KU.js";
|
|
7
7
|
import {
|
|
8
8
|
getTools
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OFNZCXTL.js";
|
|
10
10
|
import {
|
|
11
11
|
getCommands,
|
|
12
12
|
getSystemPrompt,
|
|
13
13
|
grantReadPermissionForOriginalDir,
|
|
14
14
|
hasPermissionsToUseTool,
|
|
15
15
|
query
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-JPR5LF4I.js";
|
|
17
|
+
import "./chunk-D5XZE6VD.js";
|
|
18
18
|
import {
|
|
19
19
|
getClients
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-BDRQU7KP.js";
|
|
21
|
+
import "./chunk-HIN7NLKB.js";
|
|
22
|
+
import "./chunk-3BDBJ76H.js";
|
|
23
|
+
import "./chunk-OK6YLALO.js";
|
|
24
|
+
import "./chunk-C27RUGNT.js";
|
|
25
25
|
import "./chunk-5P7HBXTD.js";
|
|
26
26
|
import "./chunk-3DFBSQIT.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-3NJ6JQ2M.js";
|
|
28
28
|
import "./chunk-B6IMQJZM.js";
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-B4Z3JBM6.js";
|
|
30
|
+
import "./chunk-VHPGBFI2.js";
|
|
31
|
+
import "./chunk-BLZG4P4W.js";
|
|
32
|
+
import "./chunk-SPSZIFD3.js";
|
|
33
|
+
import "./chunk-BHRZG737.js";
|
|
34
34
|
import {
|
|
35
35
|
loadToolPermissionContextFromDisk,
|
|
36
36
|
persistToolPermissionUpdateToDisk
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import "./chunk-
|
|
37
|
+
} from "./chunk-7OOX64M4.js";
|
|
38
|
+
import "./chunk-QKK7OEVT.js";
|
|
39
39
|
import {
|
|
40
40
|
applyToolPermissionContextUpdates
|
|
41
41
|
} from "./chunk-UNNVICVU.js";
|
|
42
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-JZTNGHID.js";
|
|
43
43
|
import "./chunk-ERMQRV55.js";
|
|
44
|
-
import "./chunk-
|
|
44
|
+
import "./chunk-O6LTYDEM.js";
|
|
45
45
|
import "./chunk-A3BVXXA3.js";
|
|
46
46
|
import "./chunk-BJSWTHRM.js";
|
|
47
47
|
import {
|
|
48
48
|
createAssistantMessage,
|
|
49
49
|
createUserMessage
|
|
50
|
-
} from "./chunk-
|
|
51
|
-
import "./chunk-
|
|
50
|
+
} from "./chunk-3GSGGTNG.js";
|
|
51
|
+
import "./chunk-RGMQE5W7.js";
|
|
52
52
|
import {
|
|
53
53
|
getContext
|
|
54
|
-
} from "./chunk-
|
|
55
|
-
import "./chunk-
|
|
54
|
+
} from "./chunk-Z3QCGGDI.js";
|
|
55
|
+
import "./chunk-QPYMEJ7J.js";
|
|
56
56
|
import {
|
|
57
57
|
enableConfigs
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-VNX4XL5W.js";
|
|
59
59
|
import "./chunk-RQVLBMP7.js";
|
|
60
60
|
import {
|
|
61
61
|
initDebugLogger
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-UDHQY254.js";
|
|
63
63
|
import {
|
|
64
64
|
PRODUCT_COMMAND,
|
|
65
65
|
getPybBaseDir,
|
|
@@ -67,10 +67,10 @@ import {
|
|
|
67
67
|
logError,
|
|
68
68
|
setCwd,
|
|
69
69
|
setOriginalCwd
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-TB6NRY5H.js";
|
|
71
71
|
import {
|
|
72
72
|
MACRO
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-RQHQ3V5R.js";
|
|
74
74
|
import "./chunk-OUXHGDLH.js";
|
|
75
75
|
import "./chunk-I3J4JYES.js";
|
|
76
76
|
|
|
@@ -2,12 +2,12 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
getModelManager
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-RGMQE5W7.js";
|
|
6
|
+
import "./chunk-VNX4XL5W.js";
|
|
7
7
|
import "./chunk-RQVLBMP7.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-UDHQY254.js";
|
|
9
|
+
import "./chunk-TB6NRY5H.js";
|
|
10
|
+
import "./chunk-RQHQ3V5R.js";
|
|
11
11
|
import "./chunk-I3J4JYES.js";
|
|
12
12
|
|
|
13
13
|
// src/entrypoints/cli/agentsValidate.ts
|
|
@@ -344,8 +344,8 @@ async function validateAgentTemplates(args) {
|
|
|
344
344
|
let knownToolNames;
|
|
345
345
|
if (args.checkTools) {
|
|
346
346
|
try {
|
|
347
|
-
const { getTools } = await import("./tools-
|
|
348
|
-
const { getCurrentProjectConfig } = await import("./config-
|
|
347
|
+
const { getTools } = await import("./tools-CNY53VUO.js");
|
|
348
|
+
const { getCurrentProjectConfig } = await import("./config-L3IXWETT.js");
|
|
349
349
|
const allTools = await getTools(getCurrentProjectConfig().enableArchitectTool);
|
|
350
350
|
knownToolNames = new Set(allTools.map((t) => t.name));
|
|
351
351
|
} catch {
|
|
@@ -3,49 +3,49 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getSystemPrompt,
|
|
5
5
|
query
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-JPR5LF4I.js";
|
|
7
|
+
import "./chunk-D5XZE6VD.js";
|
|
8
|
+
import "./chunk-BDRQU7KP.js";
|
|
9
|
+
import "./chunk-HIN7NLKB.js";
|
|
10
|
+
import "./chunk-3BDBJ76H.js";
|
|
11
|
+
import "./chunk-OK6YLALO.js";
|
|
12
|
+
import "./chunk-C27RUGNT.js";
|
|
13
13
|
import "./chunk-5P7HBXTD.js";
|
|
14
14
|
import "./chunk-3DFBSQIT.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-3NJ6JQ2M.js";
|
|
16
16
|
import "./chunk-B6IMQJZM.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-B4Z3JBM6.js";
|
|
18
|
+
import "./chunk-VHPGBFI2.js";
|
|
19
|
+
import "./chunk-BLZG4P4W.js";
|
|
20
|
+
import "./chunk-SPSZIFD3.js";
|
|
21
|
+
import "./chunk-BHRZG737.js";
|
|
22
|
+
import "./chunk-7OOX64M4.js";
|
|
23
|
+
import "./chunk-QKK7OEVT.js";
|
|
24
24
|
import "./chunk-UNNVICVU.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-JZTNGHID.js";
|
|
26
26
|
import "./chunk-ERMQRV55.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-O6LTYDEM.js";
|
|
28
28
|
import "./chunk-A3BVXXA3.js";
|
|
29
29
|
import "./chunk-BJSWTHRM.js";
|
|
30
30
|
import {
|
|
31
31
|
createUserMessage
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-3GSGGTNG.js";
|
|
33
33
|
import {
|
|
34
34
|
getModelManager
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-RGMQE5W7.js";
|
|
36
36
|
import {
|
|
37
37
|
getContext
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
38
|
+
} from "./chunk-Z3QCGGDI.js";
|
|
39
|
+
import "./chunk-QPYMEJ7J.js";
|
|
40
|
+
import "./chunk-VNX4XL5W.js";
|
|
41
41
|
import "./chunk-RQVLBMP7.js";
|
|
42
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-UDHQY254.js";
|
|
43
43
|
import {
|
|
44
44
|
getMessagesPath,
|
|
45
45
|
overwriteLog,
|
|
46
46
|
setCwd
|
|
47
|
-
} from "./chunk-
|
|
48
|
-
import "./chunk-
|
|
47
|
+
} from "./chunk-TB6NRY5H.js";
|
|
48
|
+
import "./chunk-RQHQ3V5R.js";
|
|
49
49
|
import {
|
|
50
50
|
getTotalCost
|
|
51
51
|
} from "./chunk-OUXHGDLH.js";
|
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
checkAndNotifyUpdate,
|
|
6
6
|
getLatestVersion,
|
|
7
7
|
getUpdateCommandSuggestions
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-Q6NZXTU7.js";
|
|
9
|
+
import "./chunk-TB6NRY5H.js";
|
|
10
|
+
import "./chunk-RQHQ3V5R.js";
|
|
11
11
|
import "./chunk-I3J4JYES.js";
|
|
12
12
|
export {
|
|
13
13
|
assertMinVersion,
|
|
@@ -448,7 +448,7 @@ function getLastAssistantMessageId(messages) {
|
|
|
448
448
|
|
|
449
449
|
// src/utils/messages/index.ts
|
|
450
450
|
async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
|
|
451
|
-
const impl = await import("./userInput-
|
|
451
|
+
const impl = await import("./userInput-EU5BLE3W.js");
|
|
452
452
|
return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
|
|
453
453
|
}
|
|
454
454
|
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
} from "./chunk-B6IMQJZM.js";
|
|
6
6
|
import {
|
|
7
7
|
loadSettingsWithLegacyFallback
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QKK7OEVT.js";
|
|
9
9
|
import {
|
|
10
10
|
getSessionPlugins
|
|
11
11
|
} from "./chunk-BJSWTHRM.js";
|
|
12
12
|
import {
|
|
13
13
|
getCwd,
|
|
14
14
|
logError
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-TB6NRY5H.js";
|
|
16
16
|
|
|
17
17
|
// src/utils/session/pybHooks.ts
|
|
18
18
|
import { spawn } from "child_process";
|
|
@@ -233,19 +233,13 @@ function matcherMatchesTool(matcher, toolName) {
|
|
|
233
233
|
}
|
|
234
234
|
return false;
|
|
235
235
|
}
|
|
236
|
-
function buildShellCommand(command) {
|
|
237
|
-
if (process.platform === "win32") {
|
|
238
|
-
return ["cmd.exe", "/d", "/s", "/c", command];
|
|
239
|
-
}
|
|
240
|
-
return ["/bin/sh", "-c", command];
|
|
241
|
-
}
|
|
242
236
|
async function runCommandHook(args) {
|
|
243
|
-
const
|
|
244
|
-
const proc = spawn(cmd[0], cmd.slice(1), {
|
|
237
|
+
const proc = spawn(args.command, [], {
|
|
245
238
|
cwd: args.cwd,
|
|
246
239
|
env: { ...process.env, ...args.env ?? {} },
|
|
247
240
|
stdio: ["pipe", "pipe", "pipe"],
|
|
248
|
-
windowsHide: true
|
|
241
|
+
windowsHide: true,
|
|
242
|
+
shell: true
|
|
249
243
|
});
|
|
250
244
|
let wasAborted = false;
|
|
251
245
|
const onAbort = () => {
|
|
@@ -502,7 +496,7 @@ async function runPromptHook(args) {
|
|
|
502
496
|
fallbackTimeoutMs: args.fallbackTimeoutMs
|
|
503
497
|
});
|
|
504
498
|
try {
|
|
505
|
-
const { queryQuick } = await import("./llmLazy-
|
|
499
|
+
const { queryQuick } = await import("./llmLazy-LP3VLWST.js");
|
|
506
500
|
const systemPrompt = [
|
|
507
501
|
"You are executing a Pyb prompt hook.",
|
|
508
502
|
"Return a single JSON object only (no markdown, no prose).",
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/session/pybHooks.ts"],
|
|
4
|
+
"sourcesContent": ["import { spawn } from 'child_process'\nimport { existsSync, readFileSync, statSync } from 'fs'\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'fs'\nimport { tmpdir } from 'os'\nimport { join } from 'path'\nimport { minimatch } from 'minimatch'\nimport { logError } from '@utils/log'\nimport { getCwd } from '@utils/state'\nimport { getPybAgentSessionId } from '@utils/protocol/pybAgentSessionId'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { loadSettingsWithLegacyFallback } from '@utils/config/settingsFiles'\n\ntype HookEventName =\n | 'PreToolUse'\n | 'PostToolUse'\n | 'Stop'\n | 'SubagentStop'\n | 'UserPromptSubmit'\n | 'SessionStart'\n | 'SessionEnd'\n\ntype CommandHook = {\n type: 'command'\n command: string\n timeout?: number\n pluginRoot?: string\n}\n\ntype PromptHook = {\n type: 'prompt'\n prompt: string\n timeout?: number\n pluginRoot?: string\n}\n\ntype Hook = CommandHook | PromptHook\n\ntype HookMatcher = {\n matcher: string\n hooks: Hook[]\n}\n\ntype HookFileEnvelope = {\n description?: unknown\n hooks?: unknown\n [key: string]: unknown\n}\n\ntype HooksSettings = Partial<Record<HookEventName, HookMatcher[]>> & {\n [key: string]: unknown\n}\n\ntype SettingsFileWithHooks = {\n hooks?: HooksSettings\n [key: string]: unknown\n}\n\nexport type PreToolUseHookOutcome =\n | {\n kind: 'allow'\n warnings: string[]\n permissionDecision?: 'allow' | 'ask'\n updatedInput?: Record<string, unknown>\n systemMessages?: string[]\n additionalContexts?: string[]\n }\n | {\n kind: 'block'\n message: string\n systemMessages?: string[]\n additionalContexts?: string[]\n }\n\ntype CachedHooks = {\n mtimeMs: number\n byEvent: Partial<Record<HookEventName, HookMatcher[]>>\n}\n\nconst cache = new Map<string, CachedHooks>()\nconst pluginHooksCache = new Map<string, CachedHooks>()\nconst sessionStartCache = new Map<string, { additionalContext: string }>()\n\ntype HookRuntimeState = {\n transcriptPath?: string\n queuedSystemMessages: string[]\n queuedAdditionalContexts: string[]\n}\n\nconst HOOK_RUNTIME_STATE_KEY = '__pybHookRuntimeState'\n\nfunction getHookRuntimeState(toolUseContext: any): HookRuntimeState {\n const existing = toolUseContext?.[HOOK_RUNTIME_STATE_KEY]\n if (\n existing &&\n typeof existing === 'object' &&\n Array.isArray((existing as any).queuedSystemMessages) &&\n Array.isArray((existing as any).queuedAdditionalContexts)\n ) {\n return existing as HookRuntimeState\n }\n const created: HookRuntimeState = {\n transcriptPath: undefined,\n queuedSystemMessages: [],\n queuedAdditionalContexts: [],\n }\n if (toolUseContext && typeof toolUseContext === 'object') {\n ;(toolUseContext as any)[HOOK_RUNTIME_STATE_KEY] = created\n }\n return created\n}\n\nexport function updateHookTranscriptForMessages(\n toolUseContext: any,\n messages: any[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n const sessionId = getPybAgentSessionId()\n\n const dir = join(tmpdir(), 'pyb-hooks-transcripts')\n try {\n mkdirSync(dir, { recursive: true })\n } catch {}\n\n if (!state.transcriptPath) {\n state.transcriptPath = join(dir, `${sessionId}.transcript.txt`)\n }\n\n const lines: string[] = []\n for (const msg of Array.isArray(messages) ? messages : []) {\n if (!msg || typeof msg !== 'object') continue\n if (msg.type !== 'user' && msg.type !== 'assistant') continue\n\n if (msg.type === 'user') {\n const content = (msg as any)?.message?.content\n if (typeof content === 'string') {\n lines.push(`user: ${content}`)\n continue\n }\n if (Array.isArray(content)) {\n const parts: string[] = []\n for (const block of content) {\n if (!block || typeof block !== 'object') continue\n if (block.type === 'text') parts.push(String(block.text ?? ''))\n if (block.type === 'tool_result')\n parts.push(`[tool_result] ${String(block.content ?? '')}`)\n }\n lines.push(`user: ${parts.join('')}`)\n }\n continue\n }\n\n const content = (msg as any)?.message?.content\n if (typeof content === 'string') {\n lines.push(`assistant: ${content}`)\n continue\n }\n if (!Array.isArray(content)) continue\n\n const parts: string[] = []\n for (const block of content) {\n if (!block || typeof block !== 'object') continue\n if (block.type === 'text') parts.push(String(block.text ?? ''))\n if (block.type === 'tool_use' || block.type === 'server_tool_use') {\n parts.push(\n `[tool_use:${String(block.name ?? '')}] ${hookValueForPrompt(block.input)}`,\n )\n }\n if (block.type === 'mcp_tool_use') {\n parts.push(\n `[mcp_tool_use:${String(block.name ?? '')}] ${hookValueForPrompt(block.input)}`,\n )\n }\n }\n lines.push(`assistant: ${parts.join('')}`)\n }\n\n try {\n writeFileSync(state.transcriptPath, lines.join('\\n') + '\\n', 'utf8')\n } catch {}\n}\n\nexport function drainHookSystemPromptAdditions(toolUseContext: any): string[] {\n const state = getHookRuntimeState(toolUseContext)\n const systemMessages = state.queuedSystemMessages.splice(\n 0,\n state.queuedSystemMessages.length,\n )\n const contexts = state.queuedAdditionalContexts.splice(\n 0,\n state.queuedAdditionalContexts.length,\n )\n\n const additions: string[] = []\n if (systemMessages.length > 0) {\n additions.push(\n ['\\n# Hook system messages', ...systemMessages.map(m => m.trim())]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n if (contexts.length > 0) {\n additions.push(\n ['\\n# Hook additional context', ...contexts.map(m => m.trim())]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n return additions\n}\n\nexport function getHookTranscriptPath(toolUseContext: any): string | undefined {\n return getHookRuntimeState(toolUseContext).transcriptPath\n}\n\nexport function queueHookSystemMessages(\n toolUseContext: any,\n messages: string[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n for (const msg of messages) {\n const trimmed = String(msg ?? '').trim()\n if (trimmed) state.queuedSystemMessages.push(trimmed)\n }\n}\n\nexport function queueHookAdditionalContexts(\n toolUseContext: any,\n contexts: string[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n for (const ctx of contexts) {\n const trimmed = String(ctx ?? '').trim()\n if (trimmed) state.queuedAdditionalContexts.push(trimmed)\n }\n}\n\nfunction isCommandHook(value: unknown): value is CommandHook {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as any).type === 'command' &&\n typeof (value as any).command === 'string' &&\n Boolean((value as any).command.trim())\n )\n}\n\nfunction isPromptHook(value: unknown): value is PromptHook {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as any).type === 'prompt' &&\n typeof (value as any).prompt === 'string' &&\n Boolean((value as any).prompt.trim())\n )\n}\n\nfunction isHook(value: unknown): value is Hook {\n return isCommandHook(value) || isPromptHook(value)\n}\n\nfunction parseHookMatchers(value: unknown): HookMatcher[] {\n if (!Array.isArray(value)) return []\n\n const out: HookMatcher[] = []\n for (const item of value) {\n if (!item || typeof item !== 'object') continue\n const matcher =\n typeof (item as any).matcher === 'string'\n ? (item as any).matcher.trim()\n : ''\n const effectiveMatcher = matcher || '*'\n const hooksRaw = (item as any).hooks\n const hooks = Array.isArray(hooksRaw) ? hooksRaw.filter(isHook) : []\n if (hooks.length === 0) continue\n out.push({ matcher: effectiveMatcher, hooks })\n }\n return out\n}\n\nfunction parseHooksByEvent(\n rawHooks: unknown,\n): Partial<Record<HookEventName, HookMatcher[]>> {\n if (!rawHooks || typeof rawHooks !== 'object') return {}\n const hooks: any = rawHooks\n return {\n PreToolUse: parseHookMatchers(hooks.PreToolUse),\n PostToolUse: parseHookMatchers(hooks.PostToolUse),\n Stop: parseHookMatchers(hooks.Stop),\n SubagentStop: parseHookMatchers(hooks.SubagentStop),\n UserPromptSubmit: parseHookMatchers(hooks.UserPromptSubmit),\n SessionStart: parseHookMatchers(hooks.SessionStart),\n SessionEnd: parseHookMatchers(hooks.SessionEnd),\n }\n}\n\nfunction loadInlinePluginHooksByEvent(plugin: {\n manifestPath: string\n manifest: unknown\n}): Partial<Record<HookEventName, HookMatcher[]>> | null {\n const manifestHooks = (plugin.manifest as any)?.hooks\n if (\n !manifestHooks ||\n typeof manifestHooks !== 'object' ||\n Array.isArray(manifestHooks)\n )\n return null\n\n const hookObj =\n (manifestHooks as any).hooks &&\n typeof (manifestHooks as any).hooks === 'object' &&\n !Array.isArray((manifestHooks as any).hooks)\n ? (manifestHooks as any).hooks\n : manifestHooks\n\n const cacheKey = `${plugin.manifestPath}#inlineHooks`\n try {\n const stat = statSync(plugin.manifestPath)\n const cached = pluginHooksCache.get(cacheKey)\n if (cached && cached.mtimeMs === stat.mtimeMs) return cached.byEvent\n\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(cacheKey, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent\n } catch (err) {\n logError(err)\n pluginHooksCache.delete(cacheKey)\n return null\n }\n}\n\nfunction loadPreToolUseMatchers(projectDir: string): HookMatcher[] {\n const loaded = loadSettingsWithLegacyFallback({\n destination: 'projectSettings',\n projectDir,\n migrateToPrimary: true,\n })\n const settingsPath = loaded.usedPath\n if (!settingsPath) {\n console.error('DEBUG: No settings path found for', projectDir)\n return []\n }\n try {\n const stat = statSync(settingsPath)\n const cached = cache.get(settingsPath)\n if (cached && cached.mtimeMs === stat.mtimeMs)\n return cached.byEvent.PreToolUse ?? []\n\n const parsed = loaded.settings as SettingsFileWithHooks | null\n const byEvent = parseHooksByEvent(parsed?.hooks)\n cache.set(settingsPath, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent.PreToolUse ?? []\n } catch {\n cache.delete(settingsPath)\n return []\n }\n}\n\nfunction loadSettingsMatchers(\n projectDir: string,\n event: HookEventName,\n): HookMatcher[] {\n const loaded = loadSettingsWithLegacyFallback({\n destination: 'projectSettings',\n projectDir,\n migrateToPrimary: true,\n })\n const settingsPath = loaded.usedPath\n if (!settingsPath) return []\n try {\n const stat = statSync(settingsPath)\n const cached = cache.get(settingsPath)\n if (cached && cached.mtimeMs === stat.mtimeMs)\n return cached.byEvent[event] ?? []\n\n const parsed = loaded.settings as SettingsFileWithHooks | null\n const byEvent = parseHooksByEvent(parsed?.hooks)\n cache.set(settingsPath, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent[event] ?? []\n } catch {\n cache.delete(settingsPath)\n return []\n }\n}\n\nfunction matcherMatchesTool(matcher: string, toolName: string): boolean {\n if (!matcher) return false\n if (matcher === '*' || matcher === 'all') return true\n if (matcher === toolName) return true\n try {\n if (minimatch(toolName, matcher, { dot: true, nocase: false })) return true\n } catch {\n }\n try {\n if (new RegExp(matcher).test(toolName)) return true\n } catch {\n }\n return false\n}\n\nasync function runCommandHook(args: {\n command: string\n stdinJson: unknown\n cwd: string\n env?: Record<string, string>\n signal?: AbortSignal\n}): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n const proc = spawn(args.command, [], {\n cwd: args.cwd,\n env: { ...(process.env as any), ...(args.env ?? {}) },\n stdio: ['pipe', 'pipe', 'pipe'],\n windowsHide: true,\n shell: true,\n })\n\n let wasAborted = false\n const onAbort = () => {\n wasAborted = true\n try {\n proc.kill()\n } catch {}\n }\n if (args.signal) {\n if (args.signal.aborted) onAbort()\n args.signal.addEventListener('abort', onAbort, { once: true })\n }\n\n try {\n const input = JSON.stringify(args.stdinJson)\n try {\n proc.stdin?.write(input)\n proc.stdin?.end()\n } catch {}\n\n let stdout = ''\n let stderr = ''\n\n const collect = (\n stream: NodeJS.ReadableStream | null,\n append: (chunk: string) => void,\n ): { done: Promise<void>; cleanup: () => void } => {\n if (!stream) {\n return { done: Promise.resolve(), cleanup: () => {} }\n }\n try {\n ;(stream as any).setEncoding?.('utf8')\n } catch {}\n\n let resolveDone: (() => void) | null = null\n const done = new Promise<void>(resolve => {\n resolveDone = resolve\n })\n\n const finish = () => {\n cleanup()\n if (!resolveDone) return\n resolveDone()\n resolveDone = null\n }\n\n const onData = (chunk: unknown) => {\n append(\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk),\n )\n }\n\n const onError = () => finish()\n\n const cleanup = () => {\n stream.off('data', onData)\n stream.off('end', finish)\n stream.off('close', finish)\n stream.off('error', onError)\n }\n\n stream.on('data', onData)\n stream.once('end', finish)\n stream.once('close', finish)\n stream.once('error', onError)\n\n return { done, cleanup }\n }\n\n const stdoutCollector = collect(proc.stdout, chunk => {\n stdout += chunk\n })\n const stderrCollector = collect(proc.stderr, chunk => {\n stderr += chunk\n })\n\n const exitCode = await new Promise<number>(resolve => {\n proc.once('exit', (code, signal) => {\n if (typeof code === 'number') return resolve(code)\n if (signal) return resolve(143)\n return resolve(0)\n })\n proc.once('error', () => resolve(1))\n })\n\n await Promise.race([\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\n new Promise(resolve => setTimeout(resolve, 250)),\n ])\n stdoutCollector.cleanup()\n stderrCollector.cleanup()\n\n return {\n exitCode: wasAborted && exitCode === 0 ? 143 : exitCode,\n stdout,\n stderr,\n }\n } finally {\n if (args.signal) {\n try {\n args.signal.removeEventListener('abort', onAbort)\n } catch {}\n }\n }\n}\n\nfunction mergeAbortSignals(signals: Array<AbortSignal | undefined>): {\n signal: AbortSignal\n cleanup: () => void\n} {\n const controller = new AbortController()\n const onAbort = () => controller.abort()\n\n const cleanups: Array<() => void> = []\n for (const signal of signals) {\n if (!signal) continue\n if (signal.aborted) {\n controller.abort()\n continue\n }\n signal.addEventListener('abort', onAbort, { once: true })\n cleanups.push(() => {\n try {\n signal.removeEventListener('abort', onAbort)\n } catch {}\n })\n }\n\n return {\n signal: controller.signal,\n cleanup: () => cleanups.forEach(fn => fn()),\n }\n}\n\nfunction withHookTimeout(args: {\n timeoutSeconds?: number\n parentSignal?: AbortSignal\n fallbackTimeoutMs: number\n}): { signal: AbortSignal; cleanup: () => void } {\n const timeoutMs =\n typeof args.timeoutSeconds === 'number' &&\n Number.isFinite(args.timeoutSeconds)\n ? Math.max(0, Math.floor(args.timeoutSeconds * 1000))\n : args.fallbackTimeoutMs\n\n const timeoutSignal =\n typeof AbortSignal !== 'undefined' &&\n typeof (AbortSignal as any).timeout === 'function'\n ? (AbortSignal as any).timeout(timeoutMs)\n : (() => {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n const signal = controller.signal\n ;(signal as any).__cleanup = () => clearTimeout(timer)\n return signal\n })()\n\n const merged = mergeAbortSignals([args.parentSignal, timeoutSignal])\n const timeoutCleanup =\n typeof (timeoutSignal as any).__cleanup === 'function'\n ? (timeoutSignal as any).__cleanup\n : () => {}\n\n return {\n signal: merged.signal,\n cleanup: () => {\n merged.cleanup()\n timeoutCleanup()\n },\n }\n}\n\nfunction coerceHookMessage(stdout: string, stderr: string): string {\n const s = (stderr || '').trim()\n if (s) return s\n const o = (stdout || '').trim()\n if (o) return o\n return 'Hook blocked the tool call.'\n}\n\nfunction coerceHookPermissionMode(mode: unknown): 'ask' | 'allow' {\n if (mode === 'acceptEdits' || mode === 'bypassPermissions') return 'allow'\n return 'ask'\n}\n\nfunction extractFirstJsonObject(text: string): string | null {\n let start = -1\n let depth = 0\n let inString = false\n let escaped = false\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n\n if (start === -1) {\n if (ch === '{') {\n start = i\n depth = 1\n }\n continue\n }\n\n if (inString) {\n if (escaped) {\n escaped = false\n continue\n }\n if (ch === '\\\\') {\n escaped = true\n continue\n }\n if (ch === '\"') {\n inString = false\n }\n continue\n }\n\n if (ch === '\"') {\n inString = true\n continue\n }\n\n if (ch === '{') {\n depth++\n continue\n }\n if (ch === '}') {\n depth--\n if (depth === 0) return text.slice(start, i + 1)\n }\n }\n\n return null\n}\n\nfunction parseSessionStartAdditionalContext(stdout: string): string | null {\n const trimmed = String(stdout ?? '').trim()\n if (!trimmed) return null\n\n const jsonStr = extractFirstJsonObject(trimmed) ?? trimmed\n try {\n const parsed = JSON.parse(jsonStr)\n const additional =\n parsed &&\n typeof parsed === 'object' &&\n (parsed as any).hookSpecificOutput &&\n typeof (parsed as any).hookSpecificOutput.additionalContext === 'string'\n ? String((parsed as any).hookSpecificOutput.additionalContext)\n : null\n return additional && additional.trim() ? additional : null\n } catch {\n return null\n }\n}\n\nfunction tryParseHookJson(stdout: string): any | null {\n const trimmed = String(stdout ?? '').trim()\n if (!trimmed) return null\n const jsonStr = extractFirstJsonObject(trimmed) ?? trimmed\n try {\n const parsed = JSON.parse(jsonStr)\n return parsed && typeof parsed === 'object' ? parsed : null\n } catch {\n return null\n }\n}\n\nfunction normalizePermissionDecision(\n value: unknown,\n): 'allow' | 'deny' | 'ask' | 'passthrough' | null {\n if (typeof value !== 'string') return null\n const normalized = value.trim().toLowerCase()\n if (normalized === 'allow' || normalized === 'approve') return 'allow'\n if (normalized === 'deny' || normalized === 'block') return 'deny'\n if (normalized === 'ask') return 'ask'\n if (normalized === 'passthrough' || normalized === 'continue')\n return 'passthrough'\n return null\n}\n\nfunction normalizeStopDecision(value: unknown): 'approve' | 'block' | null {\n if (typeof value !== 'string') return null\n const normalized = value.trim().toLowerCase()\n if (normalized === 'approve' || normalized === 'allow') return 'approve'\n if (normalized === 'block' || normalized === 'deny') return 'block'\n return null\n}\n\nfunction hookValueForPrompt(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction interpolatePromptHookTemplate(\n template: string,\n hookInput: Record<string, unknown>,\n): string {\n return String(template ?? '')\n .replaceAll('$TOOL_INPUT', hookValueForPrompt(hookInput.tool_input))\n .replaceAll('$TOOL_RESULT', hookValueForPrompt(hookInput.tool_result))\n .replaceAll('$TOOL_RESPONSE', hookValueForPrompt(hookInput.tool_response))\n .replaceAll('$USER_PROMPT', hookValueForPrompt(hookInput.user_prompt))\n .replaceAll('$PROMPT', hookValueForPrompt(hookInput.prompt))\n .replaceAll('$REASON', hookValueForPrompt(hookInput.reason))\n}\n\nfunction extractAssistantText(message: any): string {\n const content = (message as any)?.message?.content\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n return content\n .filter((b: any) => b && typeof b === 'object' && b.type === 'text')\n .map((b: any) => String(b.text ?? ''))\n .join('')\n}\n\nasync function runPromptHook(args: {\n hook: PromptHook\n hookEvent: HookEventName\n hookInput: Record<string, unknown>\n safeMode: boolean\n parentSignal?: AbortSignal\n fallbackTimeoutMs: number\n}): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: args.hook.timeout,\n parentSignal: args.parentSignal,\n fallbackTimeoutMs: args.fallbackTimeoutMs,\n })\n\n try {\n const { queryQuick } = await import('@services/llmLazy')\n\n const systemPrompt = [\n 'You are executing a Pyb prompt hook.',\n 'Return a single JSON object only (no markdown, no prose).',\n `hook_event_name: ${args.hookEvent}`,\n 'Valid fields include:',\n '- systemMessage: string',\n '- decision: \\\"approve\\\" | \\\"block\\\" (Stop/SubagentStop only)',\n '- reason: string (Stop/SubagentStop only)',\n '- hookSpecificOutput.permissionDecision: \\\"allow\\\" | \\\"deny\\\" | \\\"ask\\\" | \\\"passthrough\\\" (PreToolUse only)',\n '- hookSpecificOutput.updatedInput: object (PreToolUse only)',\n '- hookSpecificOutput.additionalContext: string (SessionStart/any)',\n ]\n\n const promptText = interpolatePromptHookTemplate(\n args.hook.prompt,\n args.hookInput,\n )\n const userPrompt = `${promptText}\\n\\n# Hook input JSON\\n${hookValueForPrompt(args.hookInput)}`\n\n const response = await queryQuick({\n systemPrompt,\n userPrompt,\n signal,\n })\n\n return { exitCode: 0, stdout: extractAssistantText(response), stderr: '' }\n } catch (err) {\n return {\n exitCode: 1,\n stdout: '',\n stderr: err instanceof Error ? err.message : String(err),\n }\n } finally {\n cleanup()\n }\n}\n\nfunction applyEnvFileToProcessEnv(envFilePath: string): void {\n let raw: string\n try {\n raw = readFileSync(envFilePath, 'utf8')\n } catch {\n return\n }\n\n const lines = raw.split(/\\r?\\n/)\n for (const line of lines) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n\n const withoutExport = trimmed.startsWith('export ')\n ? trimmed.slice('export '.length).trim()\n : trimmed\n\n const eq = withoutExport.indexOf('=')\n if (eq <= 0) continue\n\n const key = withoutExport.slice(0, eq).trim()\n let value = withoutExport.slice(eq + 1).trim()\n if (!key) continue\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1)\n }\n\n process.env[key] = value\n }\n}\n\nfunction loadPluginPreToolUseMatchers(projectDir: string): HookMatcher[] {\n const plugins = getSessionPlugins()\n if (plugins.length === 0) return []\n\n const out: HookMatcher[] = []\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n try {\n const stat = statSync(hookPath)\n const cached = pluginHooksCache.get(hookPath)\n if (cached && cached.mtimeMs === stat.mtimeMs) {\n out.push(\n ...(cached.byEvent.PreToolUse ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n continue\n }\n\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n const hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(hookPath, { mtimeMs: stat.mtimeMs, byEvent })\n out.push(\n ...(byEvent.PreToolUse ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n } catch (err) {\n logError(err)\n continue\n }\n }\n\n const inlineByEvent = loadInlinePluginHooksByEvent(plugin)\n if (inlineByEvent?.PreToolUse) {\n out.push(\n ...inlineByEvent.PreToolUse.map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n }\n }\n\n return out\n}\n\nfunction loadPluginMatchers(\n projectDir: string,\n event: HookEventName,\n): HookMatcher[] {\n const plugins = getSessionPlugins()\n if (plugins.length === 0) return []\n\n const out: HookMatcher[] = []\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n try {\n const stat = statSync(hookPath)\n const cached = pluginHooksCache.get(hookPath)\n if (cached && cached.mtimeMs === stat.mtimeMs) {\n out.push(\n ...(cached.byEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n continue\n }\n\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n const hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(hookPath, { mtimeMs: stat.mtimeMs, byEvent })\n out.push(\n ...(byEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n } catch (err) {\n logError(err)\n continue\n }\n }\n\n const inlineByEvent = loadInlinePluginHooksByEvent(plugin)\n if (inlineByEvent?.[event]) {\n out.push(\n ...(inlineByEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n }\n }\n return out\n}\n\nfunction parseSessionStartHooks(value: unknown): CommandHook[] {\n if (!Array.isArray(value)) return []\n const out: CommandHook[] = []\n for (const item of value) {\n if (!item || typeof item !== 'object') continue\n const hooksRaw = (item as any).hooks\n const hooks = Array.isArray(hooksRaw) ? hooksRaw.filter(isCommandHook) : []\n out.push(...hooks)\n }\n return out\n}\n\nexport async function getSessionStartAdditionalContext(args?: {\n permissionMode?: unknown\n cwd?: string\n signal?: AbortSignal\n}): Promise<string> {\n const sessionId = getPybAgentSessionId()\n const cached = sessionStartCache.get(sessionId)\n if (cached) return cached.additionalContext\n\n const projectDir = args?.cwd ?? getCwd()\n const plugins = getSessionPlugins()\n if (plugins.length === 0) {\n sessionStartCache.set(sessionId, { additionalContext: '' })\n return ''\n }\n\n const envFileDir = mkdtempSync(join(tmpdir(), 'pyb-env-'))\n const envFilePath = join(envFileDir, `${sessionId}.env`)\n try {\n writeFileSync(envFilePath, '', 'utf8')\n } catch {\n }\n\n const additionalContexts: string[] = []\n\n try {\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n let hookObj: any\n try {\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n } catch {\n continue\n }\n\n const hooks = parseSessionStartHooks(hookObj?.SessionStart).map(h => ({\n ...h,\n pluginRoot: plugin.rootDir,\n }))\n if (hooks.length === 0) continue\n\n for (const hook of hooks) {\n const payload = {\n session_id: sessionId,\n cwd: projectDir,\n hook_event_name: 'SessionStart',\n permission_mode: coerceHookPermissionMode(args?.permissionMode),\n }\n\n const result = await runCommandHook({\n command: hook.command,\n stdinJson: payload,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot\n ? { CLAUDE_PLUGIN_ROOT: hook.pluginRoot }\n : {}),\n PYB_ENV_FILE: envFilePath,\n },\n signal: args?.signal,\n })\n\n if (result.exitCode !== 0) continue\n const injected = parseSessionStartAdditionalContext(result.stdout)\n if (injected) additionalContexts.push(injected)\n }\n }\n\n const inlineHooks = (plugin.manifest as any)?.hooks\n if (\n inlineHooks &&\n typeof inlineHooks === 'object' &&\n !Array.isArray(inlineHooks)\n ) {\n const hookObj =\n (inlineHooks as any).hooks &&\n typeof (inlineHooks as any).hooks === 'object' &&\n !Array.isArray((inlineHooks as any).hooks)\n ? (inlineHooks as any).hooks\n : inlineHooks\n\n const hooks = parseSessionStartHooks(\n (hookObj as any)?.SessionStart,\n ).map(h => ({\n ...h,\n pluginRoot: plugin.rootDir,\n }))\n if (hooks.length > 0) {\n for (const hook of hooks) {\n const payload = {\n session_id: sessionId,\n cwd: projectDir,\n hook_event_name: 'SessionStart',\n permission_mode: coerceHookPermissionMode(args?.permissionMode),\n }\n\n const result = await runCommandHook({\n command: hook.command,\n stdinJson: payload,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot\n ? { CLAUDE_PLUGIN_ROOT: hook.pluginRoot }\n : {}),\n PYB_ENV_FILE: envFilePath,\n },\n signal: args?.signal,\n })\n\n if (result.exitCode !== 0) continue\n const injected = parseSessionStartAdditionalContext(result.stdout)\n if (injected) additionalContexts.push(injected)\n }\n }\n }\n }\n } finally {\n applyEnvFileToProcessEnv(envFilePath)\n try {\n rmSync(envFileDir, { recursive: true, force: true })\n } catch {}\n }\n\n const additionalContext = additionalContexts.filter(Boolean).join('\\n\\n')\n sessionStartCache.set(sessionId, { additionalContext })\n return additionalContext\n}\n\nexport async function runPreToolUseHooks(args: {\n toolName: string\n toolInput: Record<string, unknown>\n toolUseId: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<PreToolUseHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'PreToolUse'),\n ...loadPluginMatchers(projectDir, 'PreToolUse'),\n ]\n if (matchers.length === 0) return { kind: 'allow', warnings: [] }\n\n const applicable = matchers.filter(m =>\n matcherMatchesTool(m.matcher, args.toolName),\n )\n if (applicable.length === 0) return { kind: 'allow', warnings: [] }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'PreToolUse',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n tool_name: args.toolName,\n tool_input: args.toolInput,\n tool_use_id: args.toolUseId,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n let mergedUpdatedInput: Record<string, unknown> | undefined\n let permissionDecision: 'allow' | 'ask' | null = null\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'PreToolUse',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { hook, result } = item.value\n\n if (result.exitCode === 2) {\n return {\n kind: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const decision = normalizePermissionDecision(\n json.hookSpecificOutput?.permissionDecision,\n )\n if (decision === 'deny') {\n const msg =\n systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr)\n return {\n kind: 'block',\n message: msg,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (decision === 'ask') {\n permissionDecision = 'ask'\n } else if (decision === 'allow') {\n if (!permissionDecision) permissionDecision = 'allow'\n }\n\n const updated =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n json.hookSpecificOutput.updatedInput &&\n typeof json.hookSpecificOutput.updatedInput === 'object'\n ? (json.hookSpecificOutput.updatedInput as Record<string, unknown>)\n : null\n if (updated) {\n mergedUpdatedInput = { ...(mergedUpdatedInput ?? {}), ...updated }\n }\n }\n\n return {\n kind: 'allow',\n warnings,\n permissionDecision:\n permissionDecision === 'allow'\n ? 'allow'\n : permissionDecision === 'ask'\n ? 'ask'\n : undefined,\n updatedInput:\n permissionDecision === 'allow' ? mergedUpdatedInput : undefined,\n systemMessages,\n additionalContexts,\n }\n}\n\nexport async function runPostToolUseHooks(args: {\n toolName: string\n toolInput: Record<string, unknown>\n toolResult: unknown\n toolUseId: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<{\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n}> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'PostToolUse'),\n ...loadPluginMatchers(projectDir, 'PostToolUse'),\n ]\n if (matchers.length === 0) {\n return { warnings: [], systemMessages: [], additionalContexts: [] }\n }\n\n const applicable = matchers.filter(m =>\n matcherMatchesTool(m.matcher, args.toolName),\n )\n if (applicable.length === 0) {\n return { warnings: [], systemMessages: [], additionalContexts: [] }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'PostToolUse',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n tool_name: args.toolName,\n tool_input: args.toolInput,\n tool_result: args.toolResult,\n tool_response: args.toolResult,\n tool_use_id: args.toolUseId,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'PostToolUse',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n }\n\n return { warnings, systemMessages, additionalContexts }\n}\n\nexport type StopHookOutcome =\n | {\n decision: 'approve'\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n | {\n decision: 'block'\n message: string\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n\nexport async function runStopHooks(args: {\n hookEvent: 'Stop' | 'SubagentStop'\n reason?: string\n agentId?: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n stopHookActive?: boolean\n signal?: AbortSignal\n}): Promise<StopHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, args.hookEvent),\n ...loadPluginMatchers(projectDir, args.hookEvent),\n ]\n if (matchers.length === 0) {\n return {\n decision: 'approve',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n console.error('DEBUG: applicable stop hooks', applicable.length)\n if (applicable.length === 0) {\n return {\n decision: 'approve',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: args.hookEvent,\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n reason: args.reason,\n stop_hook_active: args.stopHookActive === true,\n ...(args.hookEvent === 'SubagentStop'\n ? { agent_id: args.agentId, agent_transcript_path: args.transcriptPath }\n : {}),\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: args.hookEvent,\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n\n if (result.exitCode === 2) {\n return {\n decision: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const stopDecision = normalizeStopDecision(json.decision)\n if (stopDecision === 'block') {\n const reason =\n typeof json.reason === 'string' && json.reason.trim()\n ? json.reason.trim()\n : null\n const msg =\n reason ||\n (systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr))\n return {\n decision: 'block',\n message: msg,\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n }\n\n return { decision: 'approve', warnings, systemMessages, additionalContexts }\n}\n\nexport type UserPromptHookOutcome =\n | {\n decision: 'allow'\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n | {\n decision: 'block'\n message: string\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n\nexport async function runUserPromptSubmitHooks(args: {\n prompt: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<UserPromptHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'UserPromptSubmit'),\n ...loadPluginMatchers(projectDir, 'UserPromptSubmit'),\n ]\n if (matchers.length === 0) {\n return {\n decision: 'allow',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n if (applicable.length === 0) {\n return {\n decision: 'allow',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'UserPromptSubmit',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n user_prompt: args.prompt,\n prompt: args.prompt,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'UserPromptSubmit',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n\n if (result.exitCode === 2) {\n return {\n decision: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const stopDecision = normalizeStopDecision(json.decision)\n if (stopDecision === 'block') {\n const reason =\n typeof json.reason === 'string' && json.reason.trim()\n ? json.reason.trim()\n : null\n const msg =\n reason ||\n (systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr))\n return {\n decision: 'block',\n message: msg,\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n }\n\n return { decision: 'allow', warnings, systemMessages, additionalContexts }\n}\n\nexport async function runSessionEndHooks(args: {\n reason: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<{ warnings: string[]; systemMessages: string[] }> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'SessionEnd'),\n ...loadPluginMatchers(projectDir, 'SessionEnd'),\n ]\n if (matchers.length === 0) return { warnings: [], systemMessages: [] }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n if (applicable.length === 0) return { warnings: [], systemMessages: [] }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'SessionEnd',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n reason: args.reason,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'SessionEnd',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n }\n\n return { warnings, systemMessages }\n}\n\nexport function __resetPybHooksCacheForTests(): void {\n cache.clear()\n pluginHooksCache.clear()\n sessionStartCache.clear()\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AACtB,SAAqB,cAAc,gBAAgB;AACnD,SAAS,WAAW,aAAa,QAAQ,qBAAqB;AAC9D,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAyE1B,IAAM,QAAQ,oBAAI,IAAyB;AAC3C,IAAM,mBAAmB,oBAAI,IAAyB;AACtD,IAAM,oBAAoB,oBAAI,IAA2C;AAQzE,IAAM,yBAAyB;AAE/B,SAAS,oBAAoB,gBAAuC;AAClE,QAAM,WAAW,iBAAiB,sBAAsB;AACxD,MACE,YACA,OAAO,aAAa,YACpB,MAAM,QAAS,SAAiB,oBAAoB,KACpD,MAAM,QAAS,SAAiB,wBAAwB,GACxD;AACA,WAAO;AAAA,EACT;AACA,QAAM,UAA4B;AAAA,IAChC,gBAAgB;AAAA,IAChB,sBAAsB,CAAC;AAAA,IACvB,0BAA0B,CAAC;AAAA,EAC7B;AACA,MAAI,kBAAkB,OAAO,mBAAmB,UAAU;AACxD;AAAC,IAAC,eAAuB,sBAAsB,IAAI;AAAA,EACrD;AACA,SAAO;AACT;AAEO,SAAS,gCACd,gBACA,UACM;AACN,QAAM,QAAQ,oBAAoB,cAAc;AAChD,QAAM,YAAY,qBAAqB;AAEvC,QAAM,MAAM,KAAK,OAAO,GAAG,uBAAuB;AAClD,MAAI;AACF,cAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC,QAAQ;AAAA,EAAC;AAET,MAAI,CAAC,MAAM,gBAAgB;AACzB,UAAM,iBAAiB,KAAK,KAAK,GAAG,SAAS,iBAAiB;AAAA,EAChE;AAEA,QAAM,QAAkB,CAAC;AACzB,aAAW,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,GAAG;AACzD,QAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AACrC,QAAI,IAAI,SAAS,UAAU,IAAI,SAAS,YAAa;AAErD,QAAI,IAAI,SAAS,QAAQ;AACvB,YAAMA,WAAW,KAAa,SAAS;AACvC,UAAI,OAAOA,aAAY,UAAU;AAC/B,cAAM,KAAK,SAASA,QAAO,EAAE;AAC7B;AAAA,MACF;AACA,UAAI,MAAM,QAAQA,QAAO,GAAG;AAC1B,cAAMC,SAAkB,CAAC;AACzB,mBAAW,SAASD,UAAS;AAC3B,cAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,cAAI,MAAM,SAAS,OAAQ,CAAAC,OAAM,KAAK,OAAO,MAAM,QAAQ,EAAE,CAAC;AAC9D,cAAI,MAAM,SAAS;AACjB,YAAAA,OAAM,KAAK,iBAAiB,OAAO,MAAM,WAAW,EAAE,CAAC,EAAE;AAAA,QAC7D;AACA,cAAM,KAAK,SAASA,OAAM,KAAK,EAAE,CAAC,EAAE;AAAA,MACtC;AACA;AAAA,IACF;AAEA,UAAM,UAAW,KAAa,SAAS;AACvC,QAAI,OAAO,YAAY,UAAU;AAC/B,YAAM,KAAK,cAAc,OAAO,EAAE;AAClC;AAAA,IACF;AACA,QAAI,CAAC,MAAM,QAAQ,OAAO,EAAG;AAE7B,UAAM,QAAkB,CAAC;AACzB,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,UAAI,MAAM,SAAS,OAAQ,OAAM,KAAK,OAAO,MAAM,QAAQ,EAAE,CAAC;AAC9D,UAAI,MAAM,SAAS,cAAc,MAAM,SAAS,mBAAmB;AACjE,cAAM;AAAA,UACJ,aAAa,OAAO,MAAM,QAAQ,EAAE,CAAC,KAAK,mBAAmB,MAAM,KAAK,CAAC;AAAA,QAC3E;AAAA,MACF;AACA,UAAI,MAAM,SAAS,gBAAgB;AACjC,cAAM;AAAA,UACJ,iBAAiB,OAAO,MAAM,QAAQ,EAAE,CAAC,KAAK,mBAAmB,MAAM,KAAK,CAAC;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,cAAc,MAAM,KAAK,EAAE,CAAC,EAAE;AAAA,EAC3C;AAEA,MAAI;AACF,kBAAc,MAAM,gBAAgB,MAAM,KAAK,IAAI,IAAI,MAAM,MAAM;AAAA,EACrE,QAAQ;AAAA,EAAC;AACX;AAEO,SAAS,+BAA+B,gBAA+B;AAC5E,QAAM,QAAQ,oBAAoB,cAAc;AAChD,QAAM,iBAAiB,MAAM,qBAAqB;AAAA,IAChD;AAAA,IACA,MAAM,qBAAqB;AAAA,EAC7B;AACA,QAAM,WAAW,MAAM,yBAAyB;AAAA,IAC9C;AAAA,IACA,MAAM,yBAAyB;AAAA,EACjC;AAEA,QAAM,YAAsB,CAAC;AAC7B,MAAI,eAAe,SAAS,GAAG;AAC7B,cAAU;AAAA,MACR,CAAC,4BAA4B,GAAG,eAAe,IAAI,OAAK,EAAE,KAAK,CAAC,CAAC,EAC9D,OAAO,OAAO,EACd,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AACA,MAAI,SAAS,SAAS,GAAG;AACvB,cAAU;AAAA,MACR,CAAC,+BAA+B,GAAG,SAAS,IAAI,OAAK,EAAE,KAAK,CAAC,CAAC,EAC3D,OAAO,OAAO,EACd,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,gBAAyC;AAC7E,SAAO,oBAAoB,cAAc,EAAE;AAC7C;AAEO,SAAS,wBACd,gBACA,UACM;AACN,QAAM,QAAQ,oBAAoB,cAAc;AAChD,aAAW,OAAO,UAAU;AAC1B,UAAM,UAAU,OAAO,OAAO,EAAE,EAAE,KAAK;AACvC,QAAI,QAAS,OAAM,qBAAqB,KAAK,OAAO;AAAA,EACtD;AACF;AAEO,SAAS,4BACd,gBACA,UACM;AACN,QAAM,QAAQ,oBAAoB,cAAc;AAChD,aAAW,OAAO,UAAU;AAC1B,UAAM,UAAU,OAAO,OAAO,EAAE,EAAE,KAAK;AACvC,QAAI,QAAS,OAAM,yBAAyB,KAAK,OAAO;AAAA,EAC1D;AACF;AAEA,SAAS,cAAc,OAAsC;AAC3D,SACE,UAAU,QACV,OAAO,UAAU,YAChB,MAAc,SAAS,aACxB,OAAQ,MAAc,YAAY,YAClC,QAAS,MAAc,QAAQ,KAAK,CAAC;AAEzC;AAEA,SAAS,aAAa,OAAqC;AACzD,SACE,UAAU,QACV,OAAO,UAAU,YAChB,MAAc,SAAS,YACxB,OAAQ,MAAc,WAAW,YACjC,QAAS,MAAc,OAAO,KAAK,CAAC;AAExC;AAEA,SAAS,OAAO,OAA+B;AAC7C,SAAO,cAAc,KAAK,KAAK,aAAa,KAAK;AACnD;AAEA,SAAS,kBAAkB,OAA+B;AACxD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AAEnC,QAAM,MAAqB,CAAC;AAC5B,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,UAAM,UACJ,OAAQ,KAAa,YAAY,WAC5B,KAAa,QAAQ,KAAK,IAC3B;AACN,UAAM,mBAAmB,WAAW;AACpC,UAAM,WAAY,KAAa;AAC/B,UAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,SAAS,OAAO,MAAM,IAAI,CAAC;AACnE,QAAI,MAAM,WAAW,EAAG;AACxB,QAAI,KAAK,EAAE,SAAS,kBAAkB,MAAM,CAAC;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,kBACP,UAC+C;AAC/C,MAAI,CAAC,YAAY,OAAO,aAAa,SAAU,QAAO,CAAC;AACvD,QAAM,QAAa;AACnB,SAAO;AAAA,IACL,YAAY,kBAAkB,MAAM,UAAU;AAAA,IAC9C,aAAa,kBAAkB,MAAM,WAAW;AAAA,IAChD,MAAM,kBAAkB,MAAM,IAAI;AAAA,IAClC,cAAc,kBAAkB,MAAM,YAAY;AAAA,IAClD,kBAAkB,kBAAkB,MAAM,gBAAgB;AAAA,IAC1D,cAAc,kBAAkB,MAAM,YAAY;AAAA,IAClD,YAAY,kBAAkB,MAAM,UAAU;AAAA,EAChD;AACF;AAEA,SAAS,6BAA6B,QAGmB;AACvD,QAAM,gBAAiB,OAAO,UAAkB;AAChD,MACE,CAAC,iBACD,OAAO,kBAAkB,YACzB,MAAM,QAAQ,aAAa;AAE3B,WAAO;AAET,QAAM,UACH,cAAsB,SACvB,OAAQ,cAAsB,UAAU,YACxC,CAAC,MAAM,QAAS,cAAsB,KAAK,IACtC,cAAsB,QACvB;AAEN,QAAM,WAAW,GAAG,OAAO,YAAY;AACvC,MAAI;AACF,UAAM,OAAO,SAAS,OAAO,YAAY;AACzC,UAAM,SAAS,iBAAiB,IAAI,QAAQ;AAC5C,QAAI,UAAU,OAAO,YAAY,KAAK,QAAS,QAAO,OAAO;AAE7D,UAAM,UAAU,kBAAkB,OAAO;AACzC,qBAAiB,IAAI,UAAU,EAAE,SAAS,KAAK,SAAS,QAAQ,CAAC;AACjE,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,aAAS,GAAG;AACZ,qBAAiB,OAAO,QAAQ;AAChC,WAAO;AAAA,EACT;AACF;AA6BA,SAAS,qBACP,YACA,OACe;AACf,QAAM,SAAS,+BAA+B;AAAA,IAC5C,aAAa;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACD,QAAM,eAAe,OAAO;AAC5B,MAAI,CAAC,aAAc,QAAO,CAAC;AAC3B,MAAI;AACF,UAAM,OAAO,SAAS,YAAY;AAClC,UAAM,SAAS,MAAM,IAAI,YAAY;AACrC,QAAI,UAAU,OAAO,YAAY,KAAK;AACpC,aAAO,OAAO,QAAQ,KAAK,KAAK,CAAC;AAEnC,UAAM,SAAS,OAAO;AACtB,UAAM,UAAU,kBAAkB,QAAQ,KAAK;AAC/C,UAAM,IAAI,cAAc,EAAE,SAAS,KAAK,SAAS,QAAQ,CAAC;AAC1D,WAAO,QAAQ,KAAK,KAAK,CAAC;AAAA,EAC5B,QAAQ;AACN,UAAM,OAAO,YAAY;AACzB,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,mBAAmB,SAAiB,UAA2B;AACtE,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,YAAY,OAAO,YAAY,MAAO,QAAO;AACjD,MAAI,YAAY,SAAU,QAAO;AACjC,MAAI;AACF,QAAI,UAAU,UAAU,SAAS,EAAE,KAAK,MAAM,QAAQ,MAAM,CAAC,EAAG,QAAO;AAAA,EACzE,QAAQ;AAAA,EACR;AACA,MAAI;AACF,QAAI,IAAI,OAAO,OAAO,EAAE,KAAK,QAAQ,EAAG,QAAO;AAAA,EACjD,QAAQ;AAAA,EACR;AACA,SAAO;AACT;AAEA,eAAe,eAAe,MAMoC;AAChE,QAAM,OAAO,MAAM,KAAK,SAAS,CAAC,GAAG;AAAA,IACnC,KAAK,KAAK;AAAA,IACV,KAAK,EAAE,GAAI,QAAQ,KAAa,GAAI,KAAK,OAAO,CAAC,EAAG;AAAA,IACpD,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,IAC9B,aAAa;AAAA,IACb,OAAO;AAAA,EACT,CAAC;AAED,MAAI,aAAa;AACjB,QAAM,UAAU,MAAM;AACpB,iBAAa;AACb,QAAI;AACF,WAAK,KAAK;AAAA,IACZ,QAAQ;AAAA,IAAC;AAAA,EACX;AACA,MAAI,KAAK,QAAQ;AACf,QAAI,KAAK,OAAO,QAAS,SAAQ;AACjC,SAAK,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,EAC/D;AAEA,MAAI;AACF,UAAM,QAAQ,KAAK,UAAU,KAAK,SAAS;AAC3C,QAAI;AACF,WAAK,OAAO,MAAM,KAAK;AACvB,WAAK,OAAO,IAAI;AAAA,IAClB,QAAQ;AAAA,IAAC;AAET,QAAI,SAAS;AACb,QAAI,SAAS;AAEb,UAAM,UAAU,CACd,QACA,WACiD;AACjD,UAAI,CAAC,QAAQ;AACX,eAAO,EAAE,MAAM,QAAQ,QAAQ,GAAG,SAAS,MAAM;AAAA,QAAC,EAAE;AAAA,MACtD;AACA,UAAI;AACF;AAAC,QAAC,OAAe,cAAc,MAAM;AAAA,MACvC,QAAQ;AAAA,MAAC;AAET,UAAI,cAAmC;AACvC,YAAM,OAAO,IAAI,QAAc,aAAW;AACxC,sBAAc;AAAA,MAChB,CAAC;AAED,YAAM,SAAS,MAAM;AACnB,gBAAQ;AACR,YAAI,CAAC,YAAa;AAClB,oBAAY;AACZ,sBAAc;AAAA,MAChB;AAEA,YAAM,SAAS,CAAC,UAAmB;AACjC;AAAA,UACE,OAAO,UAAU,WACb,QACA,OAAO,SAAS,KAAK,IACnB,MAAM,SAAS,MAAM,IACrB,OAAO,KAAK;AAAA,QACpB;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,OAAO;AAE7B,YAAM,UAAU,MAAM;AACpB,eAAO,IAAI,QAAQ,MAAM;AACzB,eAAO,IAAI,OAAO,MAAM;AACxB,eAAO,IAAI,SAAS,MAAM;AAC1B,eAAO,IAAI,SAAS,OAAO;AAAA,MAC7B;AAEA,aAAO,GAAG,QAAQ,MAAM;AACxB,aAAO,KAAK,OAAO,MAAM;AACzB,aAAO,KAAK,SAAS,MAAM;AAC3B,aAAO,KAAK,SAAS,OAAO;AAE5B,aAAO,EAAE,MAAM,QAAQ;AAAA,IACzB;AAEA,UAAM,kBAAkB,QAAQ,KAAK,QAAQ,WAAS;AACpD,gBAAU;AAAA,IACZ,CAAC;AACD,UAAM,kBAAkB,QAAQ,KAAK,QAAQ,WAAS;AACpD,gBAAU;AAAA,IACZ,CAAC;AAED,UAAM,WAAW,MAAM,IAAI,QAAgB,aAAW;AACpD,WAAK,KAAK,QAAQ,CAAC,MAAM,WAAW;AAClC,YAAI,OAAO,SAAS,SAAU,QAAO,QAAQ,IAAI;AACjD,YAAI,OAAQ,QAAO,QAAQ,GAAG;AAC9B,eAAO,QAAQ,CAAC;AAAA,MAClB,CAAC;AACD,WAAK,KAAK,SAAS,MAAM,QAAQ,CAAC,CAAC;AAAA,IACrC,CAAC;AAED,UAAM,QAAQ,KAAK;AAAA,MACjB,QAAQ,WAAW,CAAC,gBAAgB,MAAM,gBAAgB,IAAI,CAAC;AAAA,MAC/D,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AAAA,IACjD,CAAC;AACD,oBAAgB,QAAQ;AACxB,oBAAgB,QAAQ;AAExB,WAAO;AAAA,MACL,UAAU,cAAc,aAAa,IAAI,MAAM;AAAA,MAC/C;AAAA,MACA;AAAA,IACF;AAAA,EACF,UAAE;AACA,QAAI,KAAK,QAAQ;AACf,UAAI;AACF,aAAK,OAAO,oBAAoB,SAAS,OAAO;AAAA,MAClD,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,SAGzB;AACA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,MAAM,WAAW,MAAM;AAEvC,QAAM,WAA8B,CAAC;AACrC,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,OAAQ;AACb,QAAI,OAAO,SAAS;AAClB,iBAAW,MAAM;AACjB;AAAA,IACF;AACA,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACxD,aAAS,KAAK,MAAM;AAClB,UAAI;AACF,eAAO,oBAAoB,SAAS,OAAO;AAAA,MAC7C,QAAQ;AAAA,MAAC;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,QAAQ,WAAW;AAAA,IACnB,SAAS,MAAM,SAAS,QAAQ,QAAM,GAAG,CAAC;AAAA,EAC5C;AACF;AAEA,SAAS,gBAAgB,MAIwB;AAC/C,QAAM,YACJ,OAAO,KAAK,mBAAmB,YAC/B,OAAO,SAAS,KAAK,cAAc,IAC/B,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,iBAAiB,GAAI,CAAC,IAClD,KAAK;AAEX,QAAM,gBACJ,OAAO,gBAAgB,eACvB,OAAQ,YAAoB,YAAY,aACnC,YAAoB,QAAQ,SAAS,KACrC,MAAM;AACL,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAC5D,UAAM,SAAS,WAAW;AACzB,IAAC,OAAe,YAAY,MAAM,aAAa,KAAK;AACrD,WAAO;AAAA,EACT,GAAG;AAET,QAAM,SAAS,kBAAkB,CAAC,KAAK,cAAc,aAAa,CAAC;AACnE,QAAM,iBACJ,OAAQ,cAAsB,cAAc,aACvC,cAAsB,YACvB,MAAM;AAAA,EAAC;AAEb,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,SAAS,MAAM;AACb,aAAO,QAAQ;AACf,qBAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,QAAgB,QAAwB;AACjE,QAAM,KAAK,UAAU,IAAI,KAAK;AAC9B,MAAI,EAAG,QAAO;AACd,QAAM,KAAK,UAAU,IAAI,KAAK;AAC9B,MAAI,EAAG,QAAO;AACd,SAAO;AACT;AAEA,SAAS,yBAAyB,MAAgC;AAChE,MAAI,SAAS,iBAAiB,SAAS,oBAAqB,QAAO;AACnE,SAAO;AACT;AAEA,SAAS,uBAAuB,MAA6B;AAC3D,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,WAAW;AACf,MAAI,UAAU;AAEd,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,KAAK,KAAK,CAAC;AAEjB,QAAI,UAAU,IAAI;AAChB,UAAI,OAAO,KAAK;AACd,gBAAQ;AACR,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,UAAI,SAAS;AACX,kBAAU;AACV;AAAA,MACF;AACA,UAAI,OAAO,MAAM;AACf,kBAAU;AACV;AAAA,MACF;AACA,UAAI,OAAO,KAAK;AACd,mBAAW;AAAA,MACb;AACA;AAAA,IACF;AAEA,QAAI,OAAO,KAAK;AACd,iBAAW;AACX;AAAA,IACF;AAEA,QAAI,OAAO,KAAK;AACd;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd;AACA,UAAI,UAAU,EAAG,QAAO,KAAK,MAAM,OAAO,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,mCAAmC,QAA+B;AACzE,QAAM,UAAU,OAAO,UAAU,EAAE,EAAE,KAAK;AAC1C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,UAAU,uBAAuB,OAAO,KAAK;AACnD,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,UAAM,aACJ,UACA,OAAO,WAAW,YACjB,OAAe,sBAChB,OAAQ,OAAe,mBAAmB,sBAAsB,WAC5D,OAAQ,OAAe,mBAAmB,iBAAiB,IAC3D;AACN,WAAO,cAAc,WAAW,KAAK,IAAI,aAAa;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,QAA4B;AACpD,QAAM,UAAU,OAAO,UAAU,EAAE,EAAE,KAAK;AAC1C,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU,uBAAuB,OAAO,KAAK;AACnD,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,WAAO,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4BACP,OACiD;AACjD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,WAAW,eAAe,UAAW,QAAO;AAC/D,MAAI,eAAe,UAAU,eAAe,QAAS,QAAO;AAC5D,MAAI,eAAe,MAAO,QAAO;AACjC,MAAI,eAAe,iBAAiB,eAAe;AACjD,WAAO;AACT,SAAO;AACT;AAEA,SAAS,sBAAsB,OAA4C;AACzE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,aAAa,eAAe,QAAS,QAAO;AAC/D,MAAI,eAAe,WAAW,eAAe,OAAQ,QAAO;AAC5D,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAwB;AAClD,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,WAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,EACtC,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAEA,SAAS,8BACP,UACA,WACQ;AACR,SAAO,OAAO,YAAY,EAAE,EACzB,WAAW,eAAe,mBAAmB,UAAU,UAAU,CAAC,EAClE,WAAW,gBAAgB,mBAAmB,UAAU,WAAW,CAAC,EACpE,WAAW,kBAAkB,mBAAmB,UAAU,aAAa,CAAC,EACxE,WAAW,gBAAgB,mBAAmB,UAAU,WAAW,CAAC,EACpE,WAAW,WAAW,mBAAmB,UAAU,MAAM,CAAC,EAC1D,WAAW,WAAW,mBAAmB,UAAU,MAAM,CAAC;AAC/D;AAEA,SAAS,qBAAqB,SAAsB;AAClD,QAAM,UAAW,SAAiB,SAAS;AAC3C,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AACpC,SAAO,QACJ,OAAO,CAAC,MAAW,KAAK,OAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAClE,IAAI,CAAC,MAAW,OAAO,EAAE,QAAQ,EAAE,CAAC,EACpC,KAAK,EAAE;AACZ;AAEA,eAAe,cAAc,MAOqC;AAChE,QAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,IAC1C,gBAAgB,KAAK,KAAK;AAAA,IAC1B,cAAc,KAAK;AAAA,IACnB,mBAAmB,KAAK;AAAA,EAC1B,CAAC;AAED,MAAI;AACF,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,uBAAmB;AAEvD,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA,oBAAoB,KAAK,SAAS;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,aAAa;AAAA,MACjB,KAAK,KAAK;AAAA,MACV,KAAK;AAAA,IACP;AACA,UAAM,aAAa,GAAG,UAAU;AAAA;AAAA;AAAA,EAA0B,mBAAmB,KAAK,SAAS,CAAC;AAE5F,UAAM,WAAW,MAAM,WAAW;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,EAAE,UAAU,GAAG,QAAQ,qBAAqB,QAAQ,GAAG,QAAQ,GAAG;AAAA,EAC3E,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACzD;AAAA,EACF,UAAE;AACA,YAAQ;AAAA,EACV;AACF;AAEA,SAAS,yBAAyB,aAA2B;AAC3D,MAAI;AACJ,MAAI;AACF,UAAM,aAAa,aAAa,MAAM;AAAA,EACxC,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,CAAC,WAAW,QAAQ,WAAW,GAAG,EAAG;AAEzC,UAAM,gBAAgB,QAAQ,WAAW,SAAS,IAC9C,QAAQ,MAAM,UAAU,MAAM,EAAE,KAAK,IACrC;AAEJ,UAAM,KAAK,cAAc,QAAQ,GAAG;AACpC,QAAI,MAAM,EAAG;AAEb,UAAM,MAAM,cAAc,MAAM,GAAG,EAAE,EAAE,KAAK;AAC5C,QAAI,QAAQ,cAAc,MAAM,KAAK,CAAC,EAAE,KAAK;AAC7C,QAAI,CAAC,IAAK;AAEV,QACG,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAC5C;AACA,cAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,IAC3B;AAEA,YAAQ,IAAI,GAAG,IAAI;AAAA,EACrB;AACF;AAwDA,SAAS,mBACP,YACA,OACe;AACf,QAAM,UAAU,kBAAkB;AAClC,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,QAAM,MAAqB,CAAC;AAC5B,aAAW,UAAU,SAAS;AAC5B,eAAW,YAAY,OAAO,cAAc,CAAC,GAAG;AAC9C,UAAI;AACF,cAAM,OAAO,SAAS,QAAQ;AAC9B,cAAM,SAAS,iBAAiB,IAAI,QAAQ;AAC5C,YAAI,UAAU,OAAO,YAAY,KAAK,SAAS;AAC7C,cAAI;AAAA,YACF,IAAI,OAAO,QAAQ,KAAK,KAAK,CAAC,GAAG,IAAI,QAAM;AAAA,cACzC,SAAS,EAAE;AAAA,cACX,OAAO,EAAE,MAAM,IAAI,QAAM,EAAE,GAAG,GAAG,YAAY,OAAO,QAAQ,EAAE;AAAA,YAChE,EAAE;AAAA,UACJ;AACA;AAAA,QACF;AAEA,cAAM,MAAM,aAAa,UAAU,MAAM;AACzC,cAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,cAAM,UACJ,UAAU,OAAO,WAAW,YAAY,OAAO,QAC3C,OAAO,QACP;AACN,cAAM,UAAU,kBAAkB,OAAO;AACzC,yBAAiB,IAAI,UAAU,EAAE,SAAS,KAAK,SAAS,QAAQ,CAAC;AACjE,YAAI;AAAA,UACF,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,IAAI,QAAM;AAAA,YAClC,SAAS,EAAE;AAAA,YACX,OAAO,EAAE,MAAM,IAAI,QAAM,EAAE,GAAG,GAAG,YAAY,OAAO,QAAQ,EAAE;AAAA,UAChE,EAAE;AAAA,QACJ;AAAA,MACF,SAAS,KAAK;AACZ,iBAAS,GAAG;AACZ;AAAA,MACF;AAAA,IACF;AAEA,UAAM,gBAAgB,6BAA6B,MAAM;AACzD,QAAI,gBAAgB,KAAK,GAAG;AAC1B,UAAI;AAAA,QACF,IAAI,cAAc,KAAK,KAAK,CAAC,GAAG,IAAI,QAAM;AAAA,UACxC,SAAS,EAAE;AAAA,UACX,OAAO,EAAE,MAAM,IAAI,QAAM,EAAE,GAAG,GAAG,YAAY,OAAO,QAAQ,EAAE;AAAA,QAChE,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,QAAM,MAAqB,CAAC;AAC5B,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,UAAM,WAAY,KAAa;AAC/B,UAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,SAAS,OAAO,aAAa,IAAI,CAAC;AAC1E,QAAI,KAAK,GAAG,KAAK;AAAA,EACnB;AACA,SAAO;AACT;AAEA,eAAsB,iCAAiC,MAInC;AAClB,QAAM,YAAY,qBAAqB;AACvC,QAAM,SAAS,kBAAkB,IAAI,SAAS;AAC9C,MAAI,OAAQ,QAAO,OAAO;AAE1B,QAAM,aAAa,MAAM,OAAO,OAAO;AACvC,QAAM,UAAU,kBAAkB;AAClC,MAAI,QAAQ,WAAW,GAAG;AACxB,sBAAkB,IAAI,WAAW,EAAE,mBAAmB,GAAG,CAAC;AAC1D,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,YAAY,KAAK,OAAO,GAAG,UAAU,CAAC;AACzD,QAAM,cAAc,KAAK,YAAY,GAAG,SAAS,MAAM;AACvD,MAAI;AACF,kBAAc,aAAa,IAAI,MAAM;AAAA,EACvC,QAAQ;AAAA,EACR;AAEA,QAAM,qBAA+B,CAAC;AAEtC,MAAI;AACF,eAAW,UAAU,SAAS;AAC5B,iBAAW,YAAY,OAAO,cAAc,CAAC,GAAG;AAC9C,YAAI;AACJ,YAAI;AACF,gBAAM,MAAM,aAAa,UAAU,MAAM;AACzC,gBAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,oBACE,UAAU,OAAO,WAAW,YAAY,OAAO,QAC3C,OAAO,QACP;AAAA,QACR,QAAQ;AACN;AAAA,QACF;AAEA,cAAM,QAAQ,uBAAuB,SAAS,YAAY,EAAE,IAAI,QAAM;AAAA,UACpE,GAAG;AAAA,UACH,YAAY,OAAO;AAAA,QACrB,EAAE;AACF,YAAI,MAAM,WAAW,EAAG;AAExB,mBAAW,QAAQ,OAAO;AACxB,gBAAM,UAAU;AAAA,YACd,YAAY;AAAA,YACZ,KAAK;AAAA,YACL,iBAAiB;AAAA,YACjB,iBAAiB,yBAAyB,MAAM,cAAc;AAAA,UAChE;AAEA,gBAAM,SAAS,MAAM,eAAe;AAAA,YAClC,SAAS,KAAK;AAAA,YACd,WAAW;AAAA,YACX,KAAK;AAAA,YACL,KAAK;AAAA,cACH,iBAAiB;AAAA,cACjB,GAAI,KAAK,aACL,EAAE,oBAAoB,KAAK,WAAW,IACtC,CAAC;AAAA,cACL,cAAc;AAAA,YAChB;AAAA,YACA,QAAQ,MAAM;AAAA,UAChB,CAAC;AAED,cAAI,OAAO,aAAa,EAAG;AAC3B,gBAAM,WAAW,mCAAmC,OAAO,MAAM;AACjE,cAAI,SAAU,oBAAmB,KAAK,QAAQ;AAAA,QAChD;AAAA,MACF;AAEA,YAAM,cAAe,OAAO,UAAkB;AAC9C,UACE,eACA,OAAO,gBAAgB,YACvB,CAAC,MAAM,QAAQ,WAAW,GAC1B;AACA,cAAM,UACH,YAAoB,SACrB,OAAQ,YAAoB,UAAU,YACtC,CAAC,MAAM,QAAS,YAAoB,KAAK,IACpC,YAAoB,QACrB;AAEN,cAAM,QAAQ;AAAA,UACX,SAAiB;AAAA,QACpB,EAAE,IAAI,QAAM;AAAA,UACV,GAAG;AAAA,UACH,YAAY,OAAO;AAAA,QACrB,EAAE;AACF,YAAI,MAAM,SAAS,GAAG;AACpB,qBAAW,QAAQ,OAAO;AACxB,kBAAM,UAAU;AAAA,cACd,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,iBAAiB;AAAA,cACjB,iBAAiB,yBAAyB,MAAM,cAAc;AAAA,YAChE;AAEA,kBAAM,SAAS,MAAM,eAAe;AAAA,cAClC,SAAS,KAAK;AAAA,cACd,WAAW;AAAA,cACX,KAAK;AAAA,cACL,KAAK;AAAA,gBACH,iBAAiB;AAAA,gBACjB,GAAI,KAAK,aACL,EAAE,oBAAoB,KAAK,WAAW,IACtC,CAAC;AAAA,gBACL,cAAc;AAAA,cAChB;AAAA,cACA,QAAQ,MAAM;AAAA,YAChB,CAAC;AAED,gBAAI,OAAO,aAAa,EAAG;AAC3B,kBAAM,WAAW,mCAAmC,OAAO,MAAM;AACjE,gBAAI,SAAU,oBAAmB,KAAK,QAAQ;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,6BAAyB,WAAW;AACpC,QAAI;AACF,aAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IACrD,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,QAAM,oBAAoB,mBAAmB,OAAO,OAAO,EAAE,KAAK,MAAM;AACxE,oBAAkB,IAAI,WAAW,EAAE,kBAAkB,CAAC;AACtD,SAAO;AACT;AAEA,eAAsB,mBAAmB,MASN;AACjC,QAAM,aAAa,KAAK,OAAO,OAAO;AACtC,QAAM,WAAW;AAAA,IACf,GAAG,qBAAqB,YAAY,YAAY;AAAA,IAChD,GAAG,mBAAmB,YAAY,YAAY;AAAA,EAChD;AACA,MAAI,SAAS,WAAW,EAAG,QAAO,EAAE,MAAM,SAAS,UAAU,CAAC,EAAE;AAEhE,QAAM,aAAa,SAAS;AAAA,IAAO,OACjC,mBAAmB,EAAE,SAAS,KAAK,QAAQ;AAAA,EAC7C;AACA,MAAI,WAAW,WAAW,EAAG,QAAO,EAAE,MAAM,SAAS,UAAU,CAAC,EAAE;AAElE,QAAM,YAAqC;AAAA,IACzC,YAAY,qBAAqB;AAAA,IACjC,iBAAiB,KAAK;AAAA,IACtB,KAAK;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiB,yBAAyB,KAAK,cAAc;AAAA,IAC7D,WAAW,KAAK;AAAA,IAChB,YAAY,KAAK;AAAA,IACjB,aAAa,KAAK;AAAA,EACpB;AAEA,QAAM,WAAqB,CAAC;AAC5B,QAAM,iBAA2B,CAAC;AAClC,QAAM,qBAA+B,CAAC;AAEtC,MAAI;AACJ,MAAI,qBAA6C;AAEjD,QAAM,aAKF,CAAC;AAEL,aAAW,SAAS,YAAY;AAC9B,eAAW,QAAQ,MAAM,OAAO;AAC9B,UAAI,KAAK,SAAS,UAAU;AAC1B,mBAAW;AAAA,UACT,cAAc;AAAA,YACZ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,UAAU,KAAK,YAAY;AAAA,YAC3B,cAAc,KAAK;AAAA,YACnB,mBAAmB;AAAA,UACrB,CAAC,EAAE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE;AAAA,QACtC;AACA;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,QAC1C,gBAAgB,KAAK;AAAA,QACrB,cAAc,KAAK;AAAA,QACnB,mBAAmB;AAAA,MACrB,CAAC;AACD,iBAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,GAAI,KAAK,aAAa,EAAE,iBAAiB,KAAK,WAAW,IAAI,CAAC;AAAA,UAChE;AAAA,UACA;AAAA,QACF,CAAC,EACE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE,EACjC,QAAQ,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,WAAW,UAAU;AACnD,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,WAAW,YAAY;AAC9B,eAAS,KAAK,MAAM;AACpB,eAAS,KAAK,uBAAuB,OAAO,KAAK,UAAU,EAAE,CAAC,EAAE;AAChE;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,OAAO,IAAI,KAAK;AAE9B,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AAAA,MACzD;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,GAAG;AACzB,eAAS,KAAK,kBAAkB,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC7D;AAAA,IACF;AAEA,UAAM,OAAO,iBAAiB,OAAO,MAAM;AAC3C,QAAI,CAAC,KAAM;AAEX,QAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,cAAc,KAAK,GAAG;AACvE,qBAAe,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,aACJ,KAAK,sBACL,OAAO,KAAK,uBAAuB,YACnC,OAAO,KAAK,mBAAmB,sBAAsB,WACjD,OAAO,KAAK,mBAAmB,iBAAiB,IAChD;AACN,QAAI,cAAc,WAAW,KAAK,GAAG;AACnC,yBAAmB,KAAK,WAAW,KAAK,CAAC;AAAA,IAC3C;AAEA,UAAM,WAAW;AAAA,MACf,KAAK,oBAAoB;AAAA,IAC3B;AACA,QAAI,aAAa,QAAQ;AACvB,YAAM,MACJ,eAAe,SAAS,IACpB,eAAe,KAAK,MAAM,IAC1B,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AACpD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,OAAO;AACtB,2BAAqB;AAAA,IACvB,WAAW,aAAa,SAAS;AAC/B,UAAI,CAAC,mBAAoB,sBAAqB;AAAA,IAChD;AAEA,UAAM,UACJ,KAAK,sBACL,OAAO,KAAK,uBAAuB,YACnC,KAAK,mBAAmB,gBACxB,OAAO,KAAK,mBAAmB,iBAAiB,WAC3C,KAAK,mBAAmB,eACzB;AACN,QAAI,SAAS;AACX,2BAAqB,EAAE,GAAI,sBAAsB,CAAC,GAAI,GAAG,QAAQ;AAAA,IACnE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,oBACE,uBAAuB,UACnB,UACA,uBAAuB,QACrB,QACA;AAAA,IACR,cACE,uBAAuB,UAAU,qBAAqB;AAAA,IACxD;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,oBAAoB,MAcvC;AACD,QAAM,aAAa,KAAK,OAAO,OAAO;AACtC,QAAM,WAAW;AAAA,IACf,GAAG,qBAAqB,YAAY,aAAa;AAAA,IACjD,GAAG,mBAAmB,YAAY,aAAa;AAAA,EACjD;AACA,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,EAAE;AAAA,EACpE;AAEA,QAAM,aAAa,SAAS;AAAA,IAAO,OACjC,mBAAmB,EAAE,SAAS,KAAK,QAAQ;AAAA,EAC7C;AACA,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,EAAE;AAAA,EACpE;AAEA,QAAM,YAAqC;AAAA,IACzC,YAAY,qBAAqB;AAAA,IACjC,iBAAiB,KAAK;AAAA,IACtB,KAAK;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiB,yBAAyB,KAAK,cAAc;AAAA,IAC7D,WAAW,KAAK;AAAA,IAChB,YAAY,KAAK;AAAA,IACjB,aAAa,KAAK;AAAA,IAClB,eAAe,KAAK;AAAA,IACpB,aAAa,KAAK;AAAA,EACpB;AAEA,QAAM,WAAqB,CAAC;AAC5B,QAAM,iBAA2B,CAAC;AAClC,QAAM,qBAA+B,CAAC;AAEtC,QAAM,aAKF,CAAC;AAEL,aAAW,SAAS,YAAY;AAC9B,eAAW,QAAQ,MAAM,OAAO;AAC9B,UAAI,KAAK,SAAS,UAAU;AAC1B,mBAAW;AAAA,UACT,cAAc;AAAA,YACZ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,UAAU,KAAK,YAAY;AAAA,YAC3B,cAAc,KAAK;AAAA,YACnB,mBAAmB;AAAA,UACrB,CAAC,EAAE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE;AAAA,QACtC;AACA;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,QAC1C,gBAAgB,KAAK;AAAA,QACrB,cAAc,KAAK;AAAA,QACnB,mBAAmB;AAAA,MACrB,CAAC;AACD,iBAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,GAAI,KAAK,aAAa,EAAE,iBAAiB,KAAK,WAAW,IAAI,CAAC;AAAA,UAChE;AAAA,UACA;AAAA,QACF,CAAC,EACE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE,EACjC,QAAQ,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,WAAW,UAAU;AACnD,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,WAAW,YAAY;AAC9B,eAAS,KAAK,MAAM;AACpB,eAAS,KAAK,uBAAuB,OAAO,KAAK,UAAU,EAAE,CAAC,EAAE;AAChE;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,aAAa,GAAG;AACzB,eAAS,KAAK,kBAAkB,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC7D;AAAA,IACF;AAEA,UAAM,OAAO,iBAAiB,OAAO,MAAM;AAC3C,QAAI,CAAC,KAAM;AAEX,QAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,cAAc,KAAK,GAAG;AACvE,qBAAe,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,aACJ,KAAK,sBACL,OAAO,KAAK,uBAAuB,YACnC,OAAO,KAAK,mBAAmB,sBAAsB,WACjD,OAAO,KAAK,mBAAmB,iBAAiB,IAChD;AACN,QAAI,cAAc,WAAW,KAAK,GAAG;AACnC,yBAAmB,KAAK,WAAW,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,gBAAgB,mBAAmB;AACxD;AAiBA,eAAsB,aAAa,MAUN;AAC3B,QAAM,aAAa,KAAK,OAAO,OAAO;AACtC,QAAM,WAAW;AAAA,IACf,GAAG,qBAAqB,YAAY,KAAK,SAAS;AAAA,IAClD,GAAG,mBAAmB,YAAY,KAAK,SAAS;AAAA,EAClD;AACA,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,gBAAgB,CAAC;AAAA,MACjB,oBAAoB,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,OAAO,OAAK,mBAAmB,EAAE,SAAS,GAAG,CAAC;AACxE,UAAQ,MAAM,gCAAgC,WAAW,MAAM;AAC/D,MAAI,WAAW,WAAW,GAAG;AAC7B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,gBAAgB,CAAC;AAAA,MACjB,oBAAoB,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,YAAY,qBAAqB;AAAA,IACjC,iBAAiB,KAAK;AAAA,IACtB,KAAK;AAAA,IACL,iBAAiB,KAAK;AAAA,IACtB,iBAAiB,yBAAyB,KAAK,cAAc;AAAA,IAC7D,QAAQ,KAAK;AAAA,IACb,kBAAkB,KAAK,mBAAmB;AAAA,IAC1C,GAAI,KAAK,cAAc,iBACnB,EAAE,UAAU,KAAK,SAAS,uBAAuB,KAAK,eAAe,IACrE,CAAC;AAAA,EACP;AAEA,QAAM,WAAqB,CAAC;AAC5B,QAAM,iBAA2B,CAAC;AAClC,QAAM,qBAA+B,CAAC;AAEtC,QAAM,aAKF,CAAC;AAEL,aAAW,SAAS,YAAY;AAC9B,eAAW,QAAQ,MAAM,OAAO;AAC9B,UAAI,KAAK,SAAS,UAAU;AAC1B,mBAAW;AAAA,UACT,cAAc;AAAA,YACZ;AAAA,YACA,WAAW,KAAK;AAAA,YAChB;AAAA,YACA,UAAU,KAAK,YAAY;AAAA,YAC3B,cAAc,KAAK;AAAA,YACnB,mBAAmB;AAAA,UACrB,CAAC,EAAE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE;AAAA,QACtC;AACA;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,QAC1C,gBAAgB,KAAK;AAAA,QACrB,cAAc,KAAK;AAAA,QACnB,mBAAmB;AAAA,MACrB,CAAC;AACD,iBAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,GAAI,KAAK,aAAa,EAAE,iBAAiB,KAAK,WAAW,IAAI,CAAC;AAAA,UAChE;AAAA,UACA;AAAA,QACF,CAAC,EACE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE,EACjC,QAAQ,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,WAAW,UAAU;AACnD,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,WAAW,YAAY;AAC9B,eAAS,KAAK,MAAM;AACpB,eAAS,KAAK,uBAAuB,OAAO,KAAK,UAAU,EAAE,CAAC,EAAE;AAChE;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI,KAAK;AAExB,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,GAAG;AACzB,eAAS,KAAK,kBAAkB,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC7D;AAAA,IACF;AAEA,UAAM,OAAO,iBAAiB,OAAO,MAAM;AAC3C,QAAI,CAAC,KAAM;AAEX,QAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,cAAc,KAAK,GAAG;AACvE,qBAAe,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,aACJ,KAAK,sBACL,OAAO,KAAK,uBAAuB,YACnC,OAAO,KAAK,mBAAmB,sBAAsB,WACjD,OAAO,KAAK,mBAAmB,iBAAiB,IAChD;AACN,QAAI,cAAc,WAAW,KAAK,GAAG;AACnC,yBAAmB,KAAK,WAAW,KAAK,CAAC;AAAA,IAC3C;AAEA,UAAM,eAAe,sBAAsB,KAAK,QAAQ;AACxD,QAAI,iBAAiB,SAAS;AAC5B,YAAM,SACJ,OAAO,KAAK,WAAW,YAAY,KAAK,OAAO,KAAK,IAChD,KAAK,OAAO,KAAK,IACjB;AACN,YAAM,MACJ,WACC,eAAe,SAAS,IACrB,eAAe,KAAK,MAAM,IAC1B,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AACpD,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,WAAW,UAAU,gBAAgB,mBAAmB;AAC7E;AAiBA,eAAsB,yBAAyB,MAOZ;AACjC,QAAM,aAAa,KAAK,OAAO,OAAO;AACtC,QAAM,WAAW;AAAA,IACf,GAAG,qBAAqB,YAAY,kBAAkB;AAAA,IACtD,GAAG,mBAAmB,YAAY,kBAAkB;AAAA,EACtD;AACA,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,gBAAgB,CAAC;AAAA,MACjB,oBAAoB,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,OAAO,OAAK,mBAAmB,EAAE,SAAS,GAAG,CAAC;AAC1E,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,gBAAgB,CAAC;AAAA,MACjB,oBAAoB,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,YAAqC;AAAA,IACzC,YAAY,qBAAqB;AAAA,IACjC,iBAAiB,KAAK;AAAA,IACtB,KAAK;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiB,yBAAyB,KAAK,cAAc;AAAA,IAC7D,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK;AAAA,EACf;AAEA,QAAM,WAAqB,CAAC;AAC5B,QAAM,iBAA2B,CAAC;AAClC,QAAM,qBAA+B,CAAC;AAEtC,QAAM,aAKF,CAAC;AAEL,aAAW,SAAS,YAAY;AAC9B,eAAW,QAAQ,MAAM,OAAO;AAC9B,UAAI,KAAK,SAAS,UAAU;AAC1B,mBAAW;AAAA,UACT,cAAc;AAAA,YACZ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,UAAU,KAAK,YAAY;AAAA,YAC3B,cAAc,KAAK;AAAA,YACnB,mBAAmB;AAAA,UACrB,CAAC,EAAE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE;AAAA,QACtC;AACA;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,QAC1C,gBAAgB,KAAK;AAAA,QACrB,cAAc,KAAK;AAAA,QACnB,mBAAmB;AAAA,MACrB,CAAC;AACD,iBAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,GAAI,KAAK,aAAa,EAAE,iBAAiB,KAAK,WAAW,IAAI,CAAC;AAAA,UAChE;AAAA,UACA;AAAA,QACF,CAAC,EACE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE,EACjC,QAAQ,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,WAAW,UAAU;AACnD,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,WAAW,YAAY;AAC9B,eAAS,KAAK,MAAM;AACpB,eAAS,KAAK,uBAAuB,OAAO,KAAK,UAAU,EAAE,CAAC,EAAE;AAChE;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI,KAAK;AAExB,QAAI,OAAO,aAAa,GAAG;AACzB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,GAAG;AACzB,eAAS,KAAK,kBAAkB,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC7D;AAAA,IACF;AAEA,UAAM,OAAO,iBAAiB,OAAO,MAAM;AAC3C,QAAI,CAAC,KAAM;AAEX,QAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,cAAc,KAAK,GAAG;AACvE,qBAAe,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,aACJ,KAAK,sBACL,OAAO,KAAK,uBAAuB,YACnC,OAAO,KAAK,mBAAmB,sBAAsB,WACjD,OAAO,KAAK,mBAAmB,iBAAiB,IAChD;AACN,QAAI,cAAc,WAAW,KAAK,GAAG;AACnC,yBAAmB,KAAK,WAAW,KAAK,CAAC;AAAA,IAC3C;AAEA,UAAM,eAAe,sBAAsB,KAAK,QAAQ;AACxD,QAAI,iBAAiB,SAAS;AAC5B,YAAM,SACJ,OAAO,KAAK,WAAW,YAAY,KAAK,OAAO,KAAK,IAChD,KAAK,OAAO,KAAK,IACjB;AACN,YAAM,MACJ,WACC,eAAe,SAAS,IACrB,eAAe,KAAK,MAAM,IAC1B,kBAAkB,OAAO,QAAQ,OAAO,MAAM;AACpD,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,SAAS,UAAU,gBAAgB,mBAAmB;AAC3E;AAEA,eAAsB,mBAAmB,MAOqB;AAC5D,QAAM,aAAa,KAAK,OAAO,OAAO;AACtC,QAAM,WAAW;AAAA,IACf,GAAG,qBAAqB,YAAY,YAAY;AAAA,IAChD,GAAG,mBAAmB,YAAY,YAAY;AAAA,EAChD;AACA,MAAI,SAAS,WAAW,EAAG,QAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC,EAAE;AAErE,QAAM,aAAa,SAAS,OAAO,OAAK,mBAAmB,EAAE,SAAS,GAAG,CAAC;AAC1E,MAAI,WAAW,WAAW,EAAG,QAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC,EAAE;AAEvE,QAAM,YAAqC;AAAA,IACzC,YAAY,qBAAqB;AAAA,IACjC,iBAAiB,KAAK;AAAA,IACtB,KAAK;AAAA,IACL,iBAAiB;AAAA,IACjB,iBAAiB,yBAAyB,KAAK,cAAc;AAAA,IAC7D,QAAQ,KAAK;AAAA,EACf;AAEA,QAAM,WAAqB,CAAC;AAC5B,QAAM,iBAA2B,CAAC;AAElC,QAAM,aAKF,CAAC;AAEL,aAAW,SAAS,YAAY;AAC9B,eAAW,QAAQ,MAAM,OAAO;AAC9B,UAAI,KAAK,SAAS,UAAU;AAC1B,mBAAW;AAAA,UACT,cAAc;AAAA,YACZ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,UAAU,KAAK,YAAY;AAAA,YAC3B,cAAc,KAAK;AAAA,YACnB,mBAAmB;AAAA,UACrB,CAAC,EAAE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE;AAAA,QACtC;AACA;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,QAC1C,gBAAgB,KAAK;AAAA,QACrB,cAAc,KAAK;AAAA,QACnB,mBAAmB;AAAA,MACrB,CAAC;AACD,iBAAW;AAAA,QACT,eAAe;AAAA,UACb,SAAS,KAAK;AAAA,UACd,WAAW;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,GAAI,KAAK,aAAa,EAAE,iBAAiB,KAAK,WAAW,IAAI,CAAC;AAAA,UAChE;AAAA,UACA;AAAA,QACF,CAAC,EACE,KAAK,aAAW,EAAE,MAAM,OAAO,EAAE,EACjC,QAAQ,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,WAAW,UAAU;AACnD,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,WAAW,YAAY;AAC9B,eAAS,KAAK,MAAM;AACpB,eAAS,KAAK,uBAAuB,OAAO,KAAK,UAAU,EAAE,CAAC,EAAE;AAChE;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,aAAa,GAAG;AACzB,eAAS,KAAK,kBAAkB,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC7D;AAAA,IACF;AAEA,UAAM,OAAO,iBAAiB,OAAO,MAAM;AAC3C,QAAI,CAAC,KAAM;AACX,QAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,cAAc,KAAK,GAAG;AACvE,qBAAe,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,eAAe;AACpC;AAEO,SAAS,+BAAqC;AACnD,QAAM,MAAM;AACZ,mBAAiB,MAAM;AACvB,oBAAkB,MAAM;AAC1B;",
|
|
6
|
+
"names": ["content", "parts"]
|
|
7
|
+
}
|
|
@@ -4,18 +4,18 @@ import {
|
|
|
4
4
|
getSettingsFileCandidates,
|
|
5
5
|
loadSettingsWithLegacyFallback,
|
|
6
6
|
saveSettingsToPrimaryAndSyncLegacy
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QKK7OEVT.js";
|
|
8
8
|
import {
|
|
9
9
|
createDefaultToolPermissionContext,
|
|
10
10
|
isPersistableToolPermissionDestination
|
|
11
11
|
} from "./chunk-UNNVICVU.js";
|
|
12
12
|
import {
|
|
13
13
|
getCurrentProjectConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-VNX4XL5W.js";
|
|
15
15
|
import {
|
|
16
16
|
getCwd,
|
|
17
17
|
logError
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-TB6NRY5H.js";
|
|
19
19
|
|
|
20
20
|
// src/utils/permissions/toolPermissionSettings.ts
|
|
21
21
|
function uniqueStrings(value) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getSettingsFileCandidates,
|
|
5
5
|
loadSettingsWithLegacyFallback,
|
|
6
6
|
saveSettingsToPrimaryAndSyncLegacy
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QKK7OEVT.js";
|
|
8
8
|
import {
|
|
9
9
|
isSettingSourceEnabled
|
|
10
10
|
} from "./chunk-A3BVXXA3.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-BJSWTHRM.js";
|
|
14
14
|
import {
|
|
15
15
|
getCwd
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TB6NRY5H.js";
|
|
17
17
|
|
|
18
18
|
// src/services/ui/outputStyles.ts
|
|
19
19
|
import figures from "figures";
|
|
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getSettingsFileCandidates,
|
|
5
5
|
loadSettingsWithLegacyFallback
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QKK7OEVT.js";
|
|
7
7
|
import {
|
|
8
8
|
getSessionPlugins
|
|
9
9
|
} from "./chunk-BJSWTHRM.js";
|
|
10
10
|
import {
|
|
11
11
|
getTheme
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QPYMEJ7J.js";
|
|
13
13
|
import {
|
|
14
14
|
addMcprcServerForTesting,
|
|
15
15
|
getCurrentProjectConfig,
|
|
@@ -19,13 +19,13 @@ import {
|
|
|
19
19
|
safeParseJSON,
|
|
20
20
|
saveCurrentProjectConfig,
|
|
21
21
|
saveGlobalConfig
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-VNX4XL5W.js";
|
|
23
23
|
import {
|
|
24
24
|
PRODUCT_COMMAND,
|
|
25
25
|
PRODUCT_NAME,
|
|
26
26
|
getCwd,
|
|
27
27
|
logMCPError
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-TB6NRY5H.js";
|
|
29
29
|
|
|
30
30
|
// src/services/mcp/client.ts
|
|
31
31
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
} from "./chunk-BJSWTHRM.js";
|
|
6
6
|
import {
|
|
7
7
|
debug
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-UDHQY254.js";
|
|
9
9
|
import {
|
|
10
10
|
getCwd,
|
|
11
11
|
getPybBaseDir,
|
|
12
12
|
logError
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TB6NRY5H.js";
|
|
14
14
|
|
|
15
15
|
// src/services/plugins/customCommands.ts
|
|
16
16
|
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|