pybao-cli 1.4.42 → 1.4.44
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-EAV5UQFM.js +47 -0
- package/dist/{acp-XVNKNV3E.js → acp-5O7V3YQY.js} +29 -29
- package/dist/{agentsValidate-KFF3RVPH.js → agentsValidate-G5ZQAUR4.js} +7 -7
- package/dist/{ask-LKJXJMR5.js → ask-UAVA6F5R.js} +28 -28
- package/dist/{autoUpdater-CIANZ33Q.js → autoUpdater-KKEQ2ULZ.js} +3 -3
- package/dist/{chunk-AP4VEEZP.js → chunk-25W7KIUK.js} +9 -3
- package/dist/chunk-25W7KIUK.js.map +7 -0
- package/dist/{chunk-K7IK7ZL2.js → chunk-3TW4UYVK.js} +3 -3
- package/dist/{chunk-EGV5AHT6.js → chunk-4AQYC7BM.js} +1 -1
- package/dist/{chunk-SYKTE7AC.js → chunk-5BYVWKN2.js} +3 -3
- package/dist/{chunk-BYPPCDD2.js → chunk-AEJORUDW.js} +598 -576
- package/dist/{chunk-BYPPCDD2.js.map → chunk-AEJORUDW.js.map} +4 -4
- package/dist/{chunk-M7T5OUGS.js → chunk-AYD24IXA.js} +4 -4
- package/dist/{chunk-KMMPDUGB.js → chunk-C4EW6YOH.js} +3 -3
- package/dist/{chunk-3H4A5QMO.js → chunk-C4JMYHEY.js} +369 -23
- package/dist/{chunk-3H4A5QMO.js.map → chunk-C4JMYHEY.js.map} +3 -3
- package/dist/{chunk-H3OU5E5S.js → chunk-C73YTQE3.js} +2 -2
- package/dist/{chunk-SBL55NIX.js → chunk-CEQJ3UY2.js} +3 -3
- package/dist/{chunk-Z523XI5F.js → chunk-CVR5J7HI.js} +1 -1
- package/dist/{chunk-7Y2H4GS4.js → chunk-CZEV7RNL.js} +1 -1
- package/dist/{chunk-GGCKAUKM.js → chunk-CZKMFNDC.js} +4 -4
- package/dist/{chunk-YVEC4WWH.js → chunk-DYYRGY6Q.js} +3 -3
- package/dist/{chunk-IP75LG6S.js → chunk-GSEVRFO7.js} +2 -2
- package/dist/{chunk-RVEBFG24.js → chunk-GXNEEWUV.js} +1 -1
- package/dist/{chunk-MPSUVQPO.js → chunk-IIGZBH6C.js} +2 -2
- package/dist/{chunk-57CQ4K7N.js → chunk-KUS6C7RQ.js} +1 -1
- package/dist/{chunk-57CQ4K7N.js.map → chunk-KUS6C7RQ.js.map} +1 -1
- package/dist/{chunk-URU2VODZ.js → chunk-L62LBMEY.js} +1 -1
- package/dist/{chunk-RICL7AWV.js → chunk-MUXFNBSK.js} +2 -2
- package/dist/{chunk-EINP2VAK.js → chunk-NFQ7DMXQ.js} +2 -2
- package/dist/{chunk-X6S5OK26.js → chunk-PLIISO75.js} +4 -4
- package/dist/{chunk-AHPU2PGO.js → chunk-SK2HNWN7.js} +3 -3
- package/dist/{chunk-Y4AVABF3.js → chunk-TD7EJUWP.js} +4 -4
- package/dist/{chunk-YSULMEY6.js → chunk-VZLNH3C6.js} +1 -1
- package/dist/{chunk-GZDDXJ4Q.js → chunk-WSNCRG6B.js} +1 -1
- package/dist/{chunk-V7X642BK.js → chunk-XPNFLNWB.js} +3 -3
- package/dist/{chunk-BBYZVCZQ.js → chunk-XTBYYI3V.js} +1 -1
- package/dist/{chunk-7VTM6GSK.js → chunk-YDDEKQZ6.js} +2 -2
- package/dist/{chunk-GDU2HUZH.js → chunk-ZPGYMC3H.js} +1 -1
- package/dist/{cli-LVRTYUS6.js → cli-UDRARGLH.js} +87 -87
- package/dist/commands-2LY7ZT7W.js +51 -0
- package/dist/{config-DH3LM7PS.js → config-3HTSPEEU.js} +4 -4
- package/dist/{context-GKRJFDXC.js → context-CL5QF4SK.js} +6 -6
- package/dist/{customCommands-C7PLNROC.js → customCommands-T752CSHW.js} +4 -4
- package/dist/{env-6SXLWYQV.js → env-ARPQQ6L4.js} +2 -2
- package/dist/{file-SACICH4E.js → file-UC3ZCA6G.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-NGIIGWRI.js → llm-UIPGZOHF.js} +29 -29
- package/dist/{llmLazy-363ZRV5D.js → llmLazy-FK7ADSGW.js} +1 -1
- package/dist/{loader-XY7DNFSN.js → loader-JOEZL3BT.js} +4 -4
- package/dist/{lsp-7DTZV6EK.js → lsp-I7AZDBN2.js} +6 -6
- package/dist/{lspAnchor-LJXWVOIG.js → lspAnchor-UAEMXDZN.js} +6 -6
- package/dist/{mcp-CQB4TVPE.js → mcp-JR3KRFB4.js} +7 -7
- package/dist/{mentionProcessor-GEP7CFSI.js → mentionProcessor-J26U7USW.js} +6 -6
- package/dist/{messages-HMDDIK3H.js → messages-C2NKIIAV.js} +1 -1
- package/dist/{model-6I64Q7QN.js → model-YEJVMUUS.js} +5 -5
- package/dist/{openai-HZ4RZSZX.js → openai-VJON73JP.js} +5 -5
- package/dist/{outputStyles-63K6ZX7X.js → outputStyles-UC2YD4SH.js} +4 -4
- package/dist/{pluginRuntime-DPRRSKSU.js → pluginRuntime-YLQP5EGM.js} +6 -6
- package/dist/{pluginValidation-O4QPKUK4.js → pluginValidation-654GWXWV.js} +6 -6
- package/dist/prompts-MQY43ADI.js +53 -0
- package/dist/{pybAgentSessionLoad-PV7JSSBO.js → pybAgentSessionLoad-KVUVW6ZW.js} +4 -4
- package/dist/{pybAgentSessionResume-76G3HTLT.js → pybAgentSessionResume-HQ6KUK66.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-5ZC4UL2Y.js → pybAgentStreamJsonSession-Z5PLFR57.js} +1 -1
- package/dist/{pybHooks-T5KRK2GX.js → pybHooks-MQJSEOFE.js} +4 -4
- package/dist/query-A3X6PVWC.js +55 -0
- package/dist/{registry-LUBZHHKT.js → registry-7BVK7AEO.js} +5 -5
- package/dist/{ripgrep-E3EL2SFA.js → ripgrep-D7NQJ7DP.js} +3 -3
- package/dist/{skillMarketplace-ZRVTRS44.js → skillMarketplace-TDHQC3PM.js} +3 -3
- package/dist/{state-TWPEBWE7.js → state-O52OCOG6.js} +2 -2
- package/dist/{theme-77L4IJF7.js → theme-AJTSKB5E.js} +5 -5
- package/dist/{toolPermissionSettings-6IZTGTSN.js → toolPermissionSettings-OSWJYPFQ.js} +6 -6
- package/dist/tools-WA3T66NR.js +52 -0
- package/dist/{userInput-UO23QLHA.js → userInput-S2KCTTQT.js} +30 -30
- package/package.json +1 -1
- package/dist/REPL-VG5CDI4P.js +0 -47
- package/dist/chunk-AP4VEEZP.js.map +0 -7
- package/dist/commands-ZAWRCNLL.js +0 -51
- package/dist/prompts-36PXPQGR.js +0 -53
- package/dist/query-45JI5FFN.js +0 -55
- package/dist/tools-NQ6AIYE7.js +0 -52
- /package/dist/{REPL-VG5CDI4P.js.map → REPL-EAV5UQFM.js.map} +0 -0
- /package/dist/{acp-XVNKNV3E.js.map → acp-5O7V3YQY.js.map} +0 -0
- /package/dist/{agentsValidate-KFF3RVPH.js.map → agentsValidate-G5ZQAUR4.js.map} +0 -0
- /package/dist/{ask-LKJXJMR5.js.map → ask-UAVA6F5R.js.map} +0 -0
- /package/dist/{autoUpdater-CIANZ33Q.js.map → autoUpdater-KKEQ2ULZ.js.map} +0 -0
- /package/dist/{chunk-K7IK7ZL2.js.map → chunk-3TW4UYVK.js.map} +0 -0
- /package/dist/{chunk-EGV5AHT6.js.map → chunk-4AQYC7BM.js.map} +0 -0
- /package/dist/{chunk-SYKTE7AC.js.map → chunk-5BYVWKN2.js.map} +0 -0
- /package/dist/{chunk-M7T5OUGS.js.map → chunk-AYD24IXA.js.map} +0 -0
- /package/dist/{chunk-KMMPDUGB.js.map → chunk-C4EW6YOH.js.map} +0 -0
- /package/dist/{chunk-H3OU5E5S.js.map → chunk-C73YTQE3.js.map} +0 -0
- /package/dist/{chunk-SBL55NIX.js.map → chunk-CEQJ3UY2.js.map} +0 -0
- /package/dist/{chunk-Z523XI5F.js.map → chunk-CVR5J7HI.js.map} +0 -0
- /package/dist/{chunk-7Y2H4GS4.js.map → chunk-CZEV7RNL.js.map} +0 -0
- /package/dist/{chunk-GGCKAUKM.js.map → chunk-CZKMFNDC.js.map} +0 -0
- /package/dist/{chunk-YVEC4WWH.js.map → chunk-DYYRGY6Q.js.map} +0 -0
- /package/dist/{chunk-IP75LG6S.js.map → chunk-GSEVRFO7.js.map} +0 -0
- /package/dist/{chunk-RVEBFG24.js.map → chunk-GXNEEWUV.js.map} +0 -0
- /package/dist/{chunk-MPSUVQPO.js.map → chunk-IIGZBH6C.js.map} +0 -0
- /package/dist/{chunk-URU2VODZ.js.map → chunk-L62LBMEY.js.map} +0 -0
- /package/dist/{chunk-RICL7AWV.js.map → chunk-MUXFNBSK.js.map} +0 -0
- /package/dist/{chunk-EINP2VAK.js.map → chunk-NFQ7DMXQ.js.map} +0 -0
- /package/dist/{chunk-X6S5OK26.js.map → chunk-PLIISO75.js.map} +0 -0
- /package/dist/{chunk-AHPU2PGO.js.map → chunk-SK2HNWN7.js.map} +0 -0
- /package/dist/{chunk-Y4AVABF3.js.map → chunk-TD7EJUWP.js.map} +0 -0
- /package/dist/{chunk-YSULMEY6.js.map → chunk-VZLNH3C6.js.map} +0 -0
- /package/dist/{chunk-GZDDXJ4Q.js.map → chunk-WSNCRG6B.js.map} +0 -0
- /package/dist/{chunk-V7X642BK.js.map → chunk-XPNFLNWB.js.map} +0 -0
- /package/dist/{chunk-BBYZVCZQ.js.map → chunk-XTBYYI3V.js.map} +0 -0
- /package/dist/{chunk-7VTM6GSK.js.map → chunk-YDDEKQZ6.js.map} +0 -0
- /package/dist/{chunk-GDU2HUZH.js.map → chunk-ZPGYMC3H.js.map} +0 -0
- /package/dist/{cli-LVRTYUS6.js.map → cli-UDRARGLH.js.map} +0 -0
- /package/dist/{commands-ZAWRCNLL.js.map → commands-2LY7ZT7W.js.map} +0 -0
- /package/dist/{config-DH3LM7PS.js.map → config-3HTSPEEU.js.map} +0 -0
- /package/dist/{context-GKRJFDXC.js.map → context-CL5QF4SK.js.map} +0 -0
- /package/dist/{customCommands-C7PLNROC.js.map → customCommands-T752CSHW.js.map} +0 -0
- /package/dist/{env-6SXLWYQV.js.map → env-ARPQQ6L4.js.map} +0 -0
- /package/dist/{file-SACICH4E.js.map → file-UC3ZCA6G.js.map} +0 -0
- /package/dist/{llm-NGIIGWRI.js.map → llm-UIPGZOHF.js.map} +0 -0
- /package/dist/{llmLazy-363ZRV5D.js.map → llmLazy-FK7ADSGW.js.map} +0 -0
- /package/dist/{loader-XY7DNFSN.js.map → loader-JOEZL3BT.js.map} +0 -0
- /package/dist/{lsp-7DTZV6EK.js.map → lsp-I7AZDBN2.js.map} +0 -0
- /package/dist/{lspAnchor-LJXWVOIG.js.map → lspAnchor-UAEMXDZN.js.map} +0 -0
- /package/dist/{mcp-CQB4TVPE.js.map → mcp-JR3KRFB4.js.map} +0 -0
- /package/dist/{mentionProcessor-GEP7CFSI.js.map → mentionProcessor-J26U7USW.js.map} +0 -0
- /package/dist/{messages-HMDDIK3H.js.map → messages-C2NKIIAV.js.map} +0 -0
- /package/dist/{model-6I64Q7QN.js.map → model-YEJVMUUS.js.map} +0 -0
- /package/dist/{openai-HZ4RZSZX.js.map → openai-VJON73JP.js.map} +0 -0
- /package/dist/{outputStyles-63K6ZX7X.js.map → outputStyles-UC2YD4SH.js.map} +0 -0
- /package/dist/{pluginRuntime-DPRRSKSU.js.map → pluginRuntime-YLQP5EGM.js.map} +0 -0
- /package/dist/{pluginValidation-O4QPKUK4.js.map → pluginValidation-654GWXWV.js.map} +0 -0
- /package/dist/{prompts-36PXPQGR.js.map → prompts-MQY43ADI.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-PV7JSSBO.js.map → pybAgentSessionLoad-KVUVW6ZW.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-76G3HTLT.js.map → pybAgentSessionResume-HQ6KUK66.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-5ZC4UL2Y.js.map → pybAgentStreamJsonSession-Z5PLFR57.js.map} +0 -0
- /package/dist/{pybHooks-T5KRK2GX.js.map → pybHooks-MQJSEOFE.js.map} +0 -0
- /package/dist/{query-45JI5FFN.js.map → query-A3X6PVWC.js.map} +0 -0
- /package/dist/{registry-LUBZHHKT.js.map → registry-7BVK7AEO.js.map} +0 -0
- /package/dist/{ripgrep-E3EL2SFA.js.map → ripgrep-D7NQJ7DP.js.map} +0 -0
- /package/dist/{skillMarketplace-ZRVTRS44.js.map → skillMarketplace-TDHQC3PM.js.map} +0 -0
- /package/dist/{state-TWPEBWE7.js.map → state-O52OCOG6.js.map} +0 -0
- /package/dist/{theme-77L4IJF7.js.map → theme-AJTSKB5E.js.map} +0 -0
- /package/dist/{toolPermissionSettings-6IZTGTSN.js.map → toolPermissionSettings-OSWJYPFQ.js.map} +0 -0
- /package/dist/{tools-NQ6AIYE7.js.map → tools-WA3T66NR.js.map} +0 -0
- /package/dist/{userInput-UO23QLHA.js.map → userInput-S2KCTTQT.js.map} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createRequire as __pybCreateRequire } from "node:module";
|
|
2
|
+
const require = __pybCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
REPL
|
|
5
|
+
} from "./chunk-AEJORUDW.js";
|
|
6
|
+
import "./chunk-XPNFLNWB.js";
|
|
7
|
+
import "./chunk-4AQYC7BM.js";
|
|
8
|
+
import "./chunk-CVR5J7HI.js";
|
|
9
|
+
import "./chunk-NFQ7DMXQ.js";
|
|
10
|
+
import "./chunk-5P7HBXTD.js";
|
|
11
|
+
import "./chunk-CEQJ3UY2.js";
|
|
12
|
+
import "./chunk-YDDEKQZ6.js";
|
|
13
|
+
import "./chunk-C73YTQE3.js";
|
|
14
|
+
import "./chunk-CZKMFNDC.js";
|
|
15
|
+
import "./chunk-PLIISO75.js";
|
|
16
|
+
import "./chunk-WSNCRG6B.js";
|
|
17
|
+
import "./chunk-DYYRGY6Q.js";
|
|
18
|
+
import "./chunk-UNNVICVU.js";
|
|
19
|
+
import "./chunk-25W7KIUK.js";
|
|
20
|
+
import "./chunk-ERMQRV55.js";
|
|
21
|
+
import "./chunk-GSEVRFO7.js";
|
|
22
|
+
import "./chunk-A3BVXXA3.js";
|
|
23
|
+
import "./chunk-L62LBMEY.js";
|
|
24
|
+
import "./chunk-3DFBSQIT.js";
|
|
25
|
+
import "./chunk-B6IMQJZM.js";
|
|
26
|
+
import "./chunk-OUXHGDLH.js";
|
|
27
|
+
import "./chunk-MUXFNBSK.js";
|
|
28
|
+
import "./chunk-QWIBSCDN.js";
|
|
29
|
+
import "./chunk-TD7EJUWP.js";
|
|
30
|
+
import "./chunk-SK2HNWN7.js";
|
|
31
|
+
import "./chunk-XTBYYI3V.js";
|
|
32
|
+
import "./chunk-UZ34JEUK.js";
|
|
33
|
+
import "./chunk-IIGZBH6C.js";
|
|
34
|
+
import "./chunk-BJSWTHRM.js";
|
|
35
|
+
import "./chunk-5BYVWKN2.js";
|
|
36
|
+
import "./chunk-AYD24IXA.js";
|
|
37
|
+
import "./chunk-GXNEEWUV.js";
|
|
38
|
+
import "./chunk-CZEV7RNL.js";
|
|
39
|
+
import "./chunk-3TW4UYVK.js";
|
|
40
|
+
import "./chunk-RQVLBMP7.js";
|
|
41
|
+
import "./chunk-VZLNH3C6.js";
|
|
42
|
+
import "./chunk-ZPGYMC3H.js";
|
|
43
|
+
import "./chunk-KUS6C7RQ.js";
|
|
44
|
+
import "./chunk-I3J4JYES.js";
|
|
45
|
+
export {
|
|
46
|
+
REPL
|
|
47
|
+
};
|
|
@@ -6,66 +6,66 @@ import {
|
|
|
6
6
|
} from "./chunk-MWPFU2KU.js";
|
|
7
7
|
import {
|
|
8
8
|
getTools
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-C4JMYHEY.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-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-AEJORUDW.js";
|
|
17
|
+
import "./chunk-XPNFLNWB.js";
|
|
18
|
+
import "./chunk-4AQYC7BM.js";
|
|
19
|
+
import "./chunk-CVR5J7HI.js";
|
|
20
|
+
import "./chunk-NFQ7DMXQ.js";
|
|
21
21
|
import "./chunk-5P7HBXTD.js";
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-CEQJ3UY2.js";
|
|
23
|
+
import "./chunk-YDDEKQZ6.js";
|
|
24
|
+
import "./chunk-C73YTQE3.js";
|
|
25
|
+
import "./chunk-CZKMFNDC.js";
|
|
26
26
|
import {
|
|
27
27
|
getClients
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-
|
|
28
|
+
} from "./chunk-PLIISO75.js";
|
|
29
|
+
import "./chunk-WSNCRG6B.js";
|
|
30
30
|
import {
|
|
31
31
|
loadToolPermissionContextFromDisk,
|
|
32
32
|
persistToolPermissionUpdateToDisk
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-DYYRGY6Q.js";
|
|
34
34
|
import {
|
|
35
35
|
applyToolPermissionContextUpdates
|
|
36
36
|
} from "./chunk-UNNVICVU.js";
|
|
37
|
-
import "./chunk-
|
|
37
|
+
import "./chunk-25W7KIUK.js";
|
|
38
38
|
import "./chunk-ERMQRV55.js";
|
|
39
|
-
import "./chunk-
|
|
39
|
+
import "./chunk-GSEVRFO7.js";
|
|
40
40
|
import "./chunk-A3BVXXA3.js";
|
|
41
41
|
import {
|
|
42
42
|
createAssistantMessage,
|
|
43
43
|
createUserMessage
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-L62LBMEY.js";
|
|
45
45
|
import "./chunk-3DFBSQIT.js";
|
|
46
46
|
import "./chunk-B6IMQJZM.js";
|
|
47
47
|
import "./chunk-OUXHGDLH.js";
|
|
48
|
-
import "./chunk-
|
|
48
|
+
import "./chunk-MUXFNBSK.js";
|
|
49
49
|
import "./chunk-QWIBSCDN.js";
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
52
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-TD7EJUWP.js";
|
|
51
|
+
import "./chunk-SK2HNWN7.js";
|
|
52
|
+
import "./chunk-XTBYYI3V.js";
|
|
53
53
|
import "./chunk-UZ34JEUK.js";
|
|
54
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-IIGZBH6C.js";
|
|
55
55
|
import "./chunk-BJSWTHRM.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-5BYVWKN2.js";
|
|
57
57
|
import {
|
|
58
58
|
getContext
|
|
59
|
-
} from "./chunk-
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
59
|
+
} from "./chunk-AYD24IXA.js";
|
|
60
|
+
import "./chunk-GXNEEWUV.js";
|
|
61
|
+
import "./chunk-CZEV7RNL.js";
|
|
62
62
|
import {
|
|
63
63
|
enableConfigs
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-3TW4UYVK.js";
|
|
65
65
|
import "./chunk-RQVLBMP7.js";
|
|
66
66
|
import {
|
|
67
67
|
initDebugLogger
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-VZLNH3C6.js";
|
|
69
69
|
import {
|
|
70
70
|
PRODUCT_COMMAND,
|
|
71
71
|
initSentry,
|
|
@@ -73,10 +73,10 @@ import {
|
|
|
73
73
|
resolveXdgDataPath,
|
|
74
74
|
setCwd,
|
|
75
75
|
setOriginalCwd
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
77
77
|
import {
|
|
78
78
|
MACRO
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-KUS6C7RQ.js";
|
|
80
80
|
import "./chunk-I3J4JYES.js";
|
|
81
81
|
|
|
82
82
|
// src/acp/jsonrpc.ts
|
|
@@ -2,14 +2,14 @@ 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-5BYVWKN2.js";
|
|
6
|
+
import "./chunk-3TW4UYVK.js";
|
|
7
7
|
import "./chunk-RQVLBMP7.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-VZLNH3C6.js";
|
|
9
9
|
import {
|
|
10
10
|
getXdgConfigDir
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
12
|
+
import "./chunk-KUS6C7RQ.js";
|
|
13
13
|
import "./chunk-I3J4JYES.js";
|
|
14
14
|
|
|
15
15
|
// src/entrypoints/cli/agentsValidate.ts
|
|
@@ -346,8 +346,8 @@ async function validateAgentTemplates(args) {
|
|
|
346
346
|
let knownToolNames;
|
|
347
347
|
if (args.checkTools) {
|
|
348
348
|
try {
|
|
349
|
-
const { getTools } = await import("./tools-
|
|
350
|
-
const { getCurrentProjectConfig } = await import("./config-
|
|
349
|
+
const { getTools } = await import("./tools-WA3T66NR.js");
|
|
350
|
+
const { getCurrentProjectConfig } = await import("./config-3HTSPEEU.js");
|
|
351
351
|
const allTools = await getTools(getCurrentProjectConfig().enableArchitectTool);
|
|
352
352
|
knownToolNames = new Set(allTools.map((t) => t.name));
|
|
353
353
|
} catch {
|
|
@@ -3,57 +3,57 @@ 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-
|
|
6
|
+
} from "./chunk-AEJORUDW.js";
|
|
7
|
+
import "./chunk-XPNFLNWB.js";
|
|
8
|
+
import "./chunk-4AQYC7BM.js";
|
|
9
|
+
import "./chunk-CVR5J7HI.js";
|
|
10
|
+
import "./chunk-NFQ7DMXQ.js";
|
|
11
11
|
import "./chunk-5P7HBXTD.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CEQJ3UY2.js";
|
|
13
|
+
import "./chunk-YDDEKQZ6.js";
|
|
14
|
+
import "./chunk-C73YTQE3.js";
|
|
15
|
+
import "./chunk-CZKMFNDC.js";
|
|
16
|
+
import "./chunk-PLIISO75.js";
|
|
17
|
+
import "./chunk-WSNCRG6B.js";
|
|
18
|
+
import "./chunk-DYYRGY6Q.js";
|
|
19
19
|
import "./chunk-UNNVICVU.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-25W7KIUK.js";
|
|
21
21
|
import "./chunk-ERMQRV55.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-GSEVRFO7.js";
|
|
23
23
|
import "./chunk-A3BVXXA3.js";
|
|
24
24
|
import {
|
|
25
25
|
createUserMessage
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-L62LBMEY.js";
|
|
27
27
|
import "./chunk-3DFBSQIT.js";
|
|
28
28
|
import "./chunk-B6IMQJZM.js";
|
|
29
29
|
import {
|
|
30
30
|
getTotalCost
|
|
31
31
|
} from "./chunk-OUXHGDLH.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-MUXFNBSK.js";
|
|
33
33
|
import "./chunk-QWIBSCDN.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-TD7EJUWP.js";
|
|
35
|
+
import "./chunk-SK2HNWN7.js";
|
|
36
|
+
import "./chunk-XTBYYI3V.js";
|
|
37
37
|
import "./chunk-UZ34JEUK.js";
|
|
38
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-IIGZBH6C.js";
|
|
39
39
|
import "./chunk-BJSWTHRM.js";
|
|
40
40
|
import {
|
|
41
41
|
getModelManager
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-5BYVWKN2.js";
|
|
43
43
|
import {
|
|
44
44
|
getContext
|
|
45
|
-
} from "./chunk-
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-
|
|
45
|
+
} from "./chunk-AYD24IXA.js";
|
|
46
|
+
import "./chunk-GXNEEWUV.js";
|
|
47
|
+
import "./chunk-CZEV7RNL.js";
|
|
48
|
+
import "./chunk-3TW4UYVK.js";
|
|
49
49
|
import "./chunk-RQVLBMP7.js";
|
|
50
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-VZLNH3C6.js";
|
|
51
51
|
import {
|
|
52
52
|
getMessagesPath,
|
|
53
53
|
overwriteLog,
|
|
54
54
|
setCwd
|
|
55
|
-
} from "./chunk-
|
|
56
|
-
import "./chunk-
|
|
55
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
56
|
+
import "./chunk-KUS6C7RQ.js";
|
|
57
57
|
import "./chunk-I3J4JYES.js";
|
|
58
58
|
|
|
59
59
|
// src/app/ask.ts
|
|
@@ -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-C4EW6YOH.js";
|
|
9
|
+
import "./chunk-ZPGYMC3H.js";
|
|
10
|
+
import "./chunk-KUS6C7RQ.js";
|
|
11
11
|
import "./chunk-I3J4JYES.js";
|
|
12
12
|
export {
|
|
13
13
|
assertMinVersion,
|
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
getCurrentProjectConfig,
|
|
9
9
|
getGlobalConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3TW4UYVK.js";
|
|
11
11
|
import {
|
|
12
12
|
debug
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-VZLNH3C6.js";
|
|
14
14
|
import {
|
|
15
15
|
getCwd,
|
|
16
16
|
logError,
|
|
17
17
|
resolveXdgDataPath
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
19
19
|
|
|
20
20
|
// src/utils/agent/storage.ts
|
|
21
21
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
@@ -159,6 +159,11 @@ function getTaskListContext(options) {
|
|
|
159
159
|
if (projectId) return { listId: projectId, scope: "project", source: "project" };
|
|
160
160
|
return { listId: defaultId, scope: "project", source: "default" };
|
|
161
161
|
}
|
|
162
|
+
function getTaskNextId(options) {
|
|
163
|
+
const paths = getTaskListPaths(options?.listId);
|
|
164
|
+
const index = readIndex(paths);
|
|
165
|
+
return index.nextId;
|
|
166
|
+
}
|
|
162
167
|
function resolveTaskBaseDir(context, cwd) {
|
|
163
168
|
if (context.scope === "project") {
|
|
164
169
|
const pybDir = join2(cwd, ".pyb");
|
|
@@ -1329,6 +1334,7 @@ export {
|
|
|
1329
1334
|
getAgentFilePath,
|
|
1330
1335
|
generateAgentId,
|
|
1331
1336
|
TaskStoreConflictError,
|
|
1337
|
+
getTaskNextId,
|
|
1332
1338
|
getTaskListPaths,
|
|
1333
1339
|
readTaskEventLog,
|
|
1334
1340
|
createTask,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/agent/storage.ts", "../src/utils/session/taskStore.ts", "../src/utils/session/todoStorage.ts", "../src/services/system/systemReminder.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'\nimport { join } from 'path'\nimport { randomUUID } from 'crypto'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\nimport { resolveXdgDataPath } from '@utils/config/env'\n\n\nfunction getConfigDirectory(): string {\n const override = process.env.ANYKODE_CONFIG_DIR?.trim()\n if (override) return override\n return resolveXdgDataPath('agents')\n}\n\nfunction getSessionId(): string {\n return process.env.ANYKODE_SESSION_ID ?? 'default-session'\n}\n\nexport function getAgentFilePath(agentId: string): string {\n const sessionId = getSessionId()\n const filename = `${sessionId}-agent-${agentId}.json`\n const configDir = getConfigDirectory()\n\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n return join(configDir, filename)\n}\n\nexport function readAgentData<T = any>(agentId: string): T | null {\n const filePath = getAgentFilePath(agentId)\n\n if (!existsSync(filePath)) {\n return null\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8')\n return JSON.parse(content) as T\n } catch (error) {\n logError(error)\n debugLogger.warn('AGENT_STORAGE_READ_FAILED', {\n agentId,\n error: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n}\n\nexport function writeAgentData<T = any>(agentId: string, data: T): void {\n const filePath = getAgentFilePath(agentId)\n\n try {\n writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8')\n } catch (error) {\n logError(error)\n debugLogger.warn('AGENT_STORAGE_WRITE_FAILED', {\n agentId,\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n}\n\nexport function getDefaultAgentId(): string {\n return 'default'\n}\n\nexport function resolveAgentId(agentId?: string): string {\n return agentId || getDefaultAgentId()\n}\n\nexport function generateAgentId(): string {\n return randomUUID()\n}\n", "import {\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n writeFileSync,\n} from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { createHash } from 'crypto'\nimport type { GlobalConfig, ProjectConfig } from '@utils/config'\nimport { getCurrentProjectConfig, getGlobalConfig } from '@utils/config'\nimport { resolveXdgDataPath } from '@utils/config/env'\nimport { getCwd } from '@utils/state'\n\nexport type TaskStatus = 'open' | 'in_progress' | 'blocked' | 'done' | 'archived'\n\nexport type TaskRecord = {\n id: string\n subject: string\n description?: string\n activeForm?: string\n status: TaskStatus\n tags?: string[]\n assignee?: string\n metadata?: Record<string, string>\n archived?: boolean\n blocks?: string[]\n blockedBy?: string[]\n parent?: string\n related?: string[]\n createdAt: number\n updatedAt: number\n baseVersion: number\n version: number\n legacyTodoId?: string\n}\n\nexport type TaskCreateInput = {\n subject?: string\n description?: string\n activeForm?: string\n status?: TaskStatus\n tags?: string[]\n assignee?: string\n metadata?: Record<string, string>\n archived?: boolean\n blocks?: string[]\n blockedBy?: string[]\n parent?: string\n related?: string[]\n legacyTodoId?: string\n}\n\nexport type TaskUpdateInput = Partial<TaskCreateInput> & {\n baseVersion?: number\n updatedAt?: number\n}\n\nexport type TaskUpdateResult = {\n task: TaskRecord\n conflict: boolean\n}\n\ntype TaskListScope = 'project' | 'global'\n\ntype TaskListContext = {\n listId: string\n scope: TaskListScope\n source: 'env' | 'global' | 'project' | 'default' | 'input'\n}\n\ntype TaskIndex = {\n nextId: number\n total: number\n byStatus: Record<TaskStatus, number>\n lastUpdated: number\n}\n\ntype TaskListMeta = {\n listId: string\n createdAt: number\n updatedAt: number\n todoMigration?: {\n completedAt: number\n sourceCount: number\n }\n}\n\nconst DEFAULT_LOCK_TTL_MS = 60000\n\nfunction buildActiveForm(subject: string): string {\n return `Working on ${subject}`\n}\n\nexport class TaskStoreLockError extends Error {\n code = 'TASK_STORE_LOCKED'\n constructor(message: string) {\n super(message)\n this.name = 'TaskStoreLockError'\n }\n}\n\nexport class TaskStoreConflictError extends Error {\n code = 'TASK_STORE_CONFLICT'\n taskId: string\n expectedBaseVersion: number\n actualBaseVersion: number\n constructor(params: { taskId: string; expected: number; actual: number }) {\n super(\n `Task ${params.taskId} baseVersion ${params.actual} does not match expected ${params.expected}`,\n )\n this.name = 'TaskStoreConflictError'\n this.taskId = params.taskId\n this.expectedBaseVersion = params.expected\n this.actualBaseVersion = params.actual\n }\n}\n\nexport function getDefaultTaskListId(cwd: string): string {\n return createHash('sha256').update(cwd).digest('hex').slice(0, 12)\n}\n\nfunction resolveGlobalTaskRootDir(): string {\n const override = process.env.PYB_CONFIG_DIR ?? process.env.CLAUDE_CONFIG_DIR\n if (override) return override\n const home = homedir()\n const pybDir = join(home, '.pyb')\n if (existsSync(pybDir)) return pybDir\n const claudeDir = join(home, '.claude')\n if (existsSync(claudeDir)) return claudeDir\n return pybDir\n}\n\nfunction findBaseDirWithList(\n listId: string,\n candidates: string[],\n): string | null {\n for (const candidate of candidates) {\n if (existsSync(join(candidate, listId))) return candidate\n }\n return null\n}\n\nfunction getTaskListContext(options?: {\n listId?: string\n cwd?: string\n env?: NodeJS.ProcessEnv\n projectConfig?: ProjectConfig | null\n globalConfig?: GlobalConfig | null\n}): TaskListContext {\n const env = options?.env ?? process.env\n const globalConfig = options?.globalConfig ?? getGlobalConfig()\n const projectConfig = options?.projectConfig ?? getCurrentProjectConfig()\n const cwd = options?.cwd ?? getCwd()\n const defaultId = getDefaultTaskListId(cwd)\n const inputListId = options?.listId?.trim()\n\n const envId =\n env.PYB_TASK_LIST_ID?.trim() || env.CLAUDE_CODE_TASK_LIST_ID?.trim()\n const globalId = globalConfig?.taskListId?.trim()\n const projectId = projectConfig?.taskListId?.trim()\n\n if (inputListId) {\n if (inputListId === projectId || inputListId === defaultId) {\n return { listId: inputListId, scope: 'project', source: 'input' }\n }\n if (inputListId === globalId || inputListId === envId) {\n return { listId: inputListId, scope: 'global', source: 'input' }\n }\n return { listId: inputListId, scope: 'project', source: 'input' }\n }\n\n if (envId) return { listId: envId, scope: 'global', source: 'env' }\n if (globalId) return { listId: globalId, scope: 'global', source: 'global' }\n if (projectId) return { listId: projectId, scope: 'project', source: 'project' }\n\n return { listId: defaultId, scope: 'project', source: 'default' }\n}\n\nexport function getTaskListId(options?: {\n cwd?: string\n env?: NodeJS.ProcessEnv\n projectConfig?: ProjectConfig | null\n globalConfig?: GlobalConfig | null\n}): string {\n return getTaskListContext(options).listId\n}\n\nexport function getTaskNextId(options?: { listId?: string }): number {\n const paths = getTaskListPaths(options?.listId)\n const index = readIndex(paths)\n return index.nextId\n}\n\nfunction resolveTaskBaseDir(context: TaskListContext, cwd: string): string {\n if (context.scope === 'project') {\n const pybDir = join(cwd, '.pyb')\n const claudeDir = join(cwd, '.claude')\n const hasProjectPyb = existsSync(pybDir)\n const hasProjectClaude = existsSync(claudeDir)\n const projectRoot = hasProjectPyb ? pybDir : hasProjectClaude ? claudeDir : pybDir\n const override = process.env.PYB_CONFIG_DIR ?? process.env.CLAUDE_CONFIG_DIR\n const defaultBaseDir =\n !hasProjectPyb && !hasProjectClaude && override\n ? join(override, 'tasks')\n : join(projectRoot, 'tasks')\n const candidates = [\n join(cwd, '.pyb', 'tasks'),\n join(cwd, '.claude', 'tasks'),\n ...(override ? [join(override, 'tasks')] : []),\n resolveXdgDataPath('tasks'),\n ]\n return findBaseDirWithList(context.listId, candidates) ?? defaultBaseDir\n }\n\n const override = process.env.PYB_CONFIG_DIR ?? process.env.CLAUDE_CONFIG_DIR\n const globalCandidates = override\n ? [join(override, 'tasks')]\n : [\n join(homedir(), '.pyb', 'tasks'),\n join(homedir(), '.claude', 'tasks'),\n ]\n const defaultBaseDir = join(resolveGlobalTaskRootDir(), 'tasks')\n const candidates = [...globalCandidates, resolveXdgDataPath('tasks')]\n return findBaseDirWithList(context.listId, candidates) ?? defaultBaseDir\n}\n\nexport function getTaskListPaths(listId?: string): {\n listId: string\n baseDir: string\n listDir: string\n tasksDir: string\n indexPath: string\n metaPath: string\n lockPath: string\n eventsPath: string\n} {\n const context = getTaskListContext({ listId })\n const cwd = getCwd()\n const baseDir = resolveTaskBaseDir(context, cwd)\n const listDir = join(baseDir, context.listId)\n return {\n listId: context.listId,\n baseDir,\n listDir,\n tasksDir: listDir,\n indexPath: join(listDir, 'index.json'),\n metaPath: join(listDir, 'meta.json'),\n lockPath: join(listDir, '.lock'),\n eventsPath: join(listDir, 'events.jsonl'),\n }\n}\n\nfunction ensureTaskListDirs(paths: ReturnType<typeof getTaskListPaths>): void {\n mkdirSync(paths.listDir, { recursive: true })\n}\n\nfunction defaultIndex(): TaskIndex {\n return {\n nextId: 1,\n total: 0,\n byStatus: {\n open: 0,\n in_progress: 0,\n blocked: 0,\n done: 0,\n archived: 0,\n },\n lastUpdated: Date.now(),\n }\n}\n\nfunction readJson<T>(path: string): T | null {\n if (!existsSync(path)) return null\n try {\n const raw = readFileSync(path, 'utf8')\n return JSON.parse(raw) as T\n } catch {\n return null\n }\n}\n\nfunction writeJson(path: string, value: unknown): void {\n writeFileSync(path, JSON.stringify(value, null, 2), 'utf8')\n}\n\nexport type TaskEventRecord = {\n listId: string\n taskId: string\n type: 'task.created' | 'task.updated'\n timestamp: number\n}\n\nfunction appendTaskEvent(\n paths: ReturnType<typeof getTaskListPaths>,\n event: TaskEventRecord,\n): void {\n ensureTaskListDirs(paths)\n writeFileSync(paths.eventsPath, `${JSON.stringify(event)}\\n`, {\n encoding: 'utf8',\n flag: 'a',\n })\n}\n\nexport function readTaskEventLog(\n listId?: string,\n offset: number = 0,\n): { events: TaskEventRecord[]; nextOffset: number } {\n const paths = getTaskListPaths(listId)\n if (!existsSync(paths.eventsPath)) {\n return { events: [], nextOffset: 0 }\n }\n const buffer = readFileSync(paths.eventsPath)\n const nextOffset = buffer.length\n if (offset >= nextOffset) {\n return { events: [], nextOffset }\n }\n const chunk = buffer.toString('utf8', offset)\n const events: TaskEventRecord[] = []\n for (const line of chunk.split('\\n')) {\n if (!line.trim()) continue\n try {\n const parsed = JSON.parse(line) as TaskEventRecord\n if (parsed.listId && parsed.taskId && parsed.type && parsed.timestamp) {\n events.push(parsed)\n }\n } catch {\n continue\n }\n }\n return { events, nextOffset }\n}\n\nfunction readIndex(paths: ReturnType<typeof getTaskListPaths>): TaskIndex {\n const index = readJson<TaskIndex>(paths.indexPath)\n if (index && index.nextId >= 1) return index\n return recoverIndex(paths)\n}\n\nfunction writeIndex(paths: ReturnType<typeof getTaskListPaths>, index: TaskIndex) {\n writeJson(paths.indexPath, index)\n}\n\nfunction readMeta(paths: ReturnType<typeof getTaskListPaths>): TaskListMeta {\n ensureTaskListDirs(paths)\n const meta = readJson<TaskListMeta>(paths.metaPath)\n if (meta && meta.listId) return meta\n const now = Date.now()\n const created: TaskListMeta = {\n listId: paths.listId,\n createdAt: now,\n updatedAt: now,\n }\n writeJson(paths.metaPath, created)\n return created\n}\n\nfunction writeMeta(\n paths: ReturnType<typeof getTaskListPaths>,\n meta: TaskListMeta,\n): void {\n ensureTaskListDirs(paths)\n writeJson(paths.metaPath, meta)\n}\n\nfunction readTaskFile(path: string): TaskRecord | null {\n const data = readJson<Partial<TaskRecord> & { title?: string; version?: number }>(\n path,\n )\n if (!data || !data.id || (!data.subject && !data.title) || !data.status) {\n return null\n }\n const subject = data.subject ?? data.title\n const activeForm = data.activeForm ?? buildActiveForm(subject)\n const baseVersion =\n typeof data.baseVersion === 'number'\n ? data.baseVersion\n : typeof data.version === 'number'\n ? data.version\n : 1\n const version = typeof data.version === 'number' ? data.version : baseVersion\n const createdAt =\n typeof data.createdAt === 'number' ? data.createdAt : Date.now()\n const updatedAt =\n typeof data.updatedAt === 'number' ? data.updatedAt : createdAt\n const normalized: TaskRecord = {\n id: data.id,\n subject,\n description: data.description,\n activeForm,\n status: data.status,\n tags: data.tags,\n assignee: data.assignee,\n metadata: data.metadata,\n archived: data.archived,\n blocks: data.blocks ?? [],\n blockedBy: data.blockedBy ?? [],\n parent: data.parent,\n related: data.related ?? [],\n createdAt,\n updatedAt,\n baseVersion,\n version,\n legacyTodoId: data.legacyTodoId,\n }\n delete (normalized as any).priority\n return normalized\n}\n\nfunction deriveBlocks(tasks: TaskRecord[]): Map<string, string[]> {\n const map = new Map<string, string[]>()\n for (const task of tasks) {\n map.set(task.id, [])\n }\n for (const task of tasks) {\n const blockers = task.blockedBy ?? []\n for (const blockerId of blockers) {\n const list = map.get(blockerId)\n if (list) {\n list.push(task.id)\n } else {\n map.set(blockerId, [task.id])\n }\n }\n }\n for (const [key, list] of map.entries()) {\n map.set(\n key,\n list.sort((a, b) => Number(a) - Number(b)),\n )\n }\n return map\n}\n\nfunction areBlocksEqual(a: string[] | undefined, b: string[] | undefined): boolean {\n const left = a ?? []\n const right = b ?? []\n if (left.length !== right.length) return false\n for (let i = 0; i < left.length; i += 1) {\n if (left[i] !== right[i]) return false\n }\n return true\n}\n\nfunction readTasksFromDisk(paths: ReturnType<typeof getTaskListPaths>): TaskRecord[] {\n const files = readdirSync(paths.tasksDir).filter(file => file.endsWith('.json'))\n return files\n .map(file => readTaskFile(join(paths.tasksDir, file)))\n .filter(Boolean) as TaskRecord[]\n}\n\nfunction applyBlocksMap(\n tasks: TaskRecord[],\n map: Map<string, string[]>,\n): TaskRecord[] {\n return tasks.map(task => ({\n ...task,\n blocks: map.get(task.id) ?? [],\n }))\n}\n\nfunction persistBlocksMap(\n paths: ReturnType<typeof getTaskListPaths>,\n map: Map<string, string[]>,\n): number {\n ensureTaskListDirs(paths)\n const files = readdirSync(paths.tasksDir).filter(file => file.endsWith('.json'))\n let updated = 0\n for (const file of files) {\n const path = join(paths.tasksDir, file)\n const raw = readJson<Partial<TaskRecord>>(path)\n if (!raw || !raw.id) continue\n const nextBlocks = map.get(raw.id) ?? []\n const currentBlocks = Array.isArray(raw.blocks) ? raw.blocks : []\n if (areBlocksEqual(currentBlocks, nextBlocks)) continue\n raw.blocks = nextBlocks\n writeJson(path, raw)\n updated += 1\n }\n return updated\n}\n\nfunction rebuildBlocksForPaths(paths: ReturnType<typeof getTaskListPaths>): {\n tasks: TaskRecord[]\n updated: number\n} {\n const tasks = readTasksFromDisk(paths)\n const map = deriveBlocks(tasks)\n const updated = persistBlocksMap(paths, map)\n return { tasks: applyBlocksMap(tasks, map), updated }\n}\n\nfunction recoverIndex(paths: ReturnType<typeof getTaskListPaths>): TaskIndex {\n ensureTaskListDirs(paths)\n const files = readdirSync(paths.tasksDir).filter(file => file.endsWith('.json'))\n const tasks = files\n .map(file => readTaskFile(join(paths.tasksDir, file)))\n .filter(Boolean) as TaskRecord[]\n const byStatus = {\n open: 0,\n in_progress: 0,\n blocked: 0,\n done: 0,\n archived: 0,\n }\n let maxId = 0\n for (const task of tasks) {\n byStatus[task.status] += 1\n const numericId = Number(task.id)\n if (!Number.isNaN(numericId)) {\n maxId = Math.max(maxId, numericId)\n }\n }\n const index: TaskIndex = {\n nextId: Math.max(1, maxId + 1),\n total: tasks.length,\n byStatus,\n lastUpdated: Date.now(),\n }\n writeIndex(paths, index)\n return index\n}\n\nfunction readLock(\n path: string,\n): { createdAt: number; expiresAt: number } | null {\n const lock = readJson<{ createdAt: number; expiresAt: number }>(path)\n if (!lock || !lock.createdAt || !lock.expiresAt) return null\n return lock\n}\n\nfunction isLockExpired(lock: { expiresAt: number }): boolean {\n return lock.expiresAt <= Date.now()\n}\n\nfunction acquireLock(paths: ReturnType<typeof getTaskListPaths>): void {\n ensureTaskListDirs(paths)\n const lock = readLock(paths.lockPath)\n if (lock && !isLockExpired(lock)) {\n throw new TaskStoreLockError('Task list is locked')\n }\n if (lock && isLockExpired(lock)) {\n rmSync(paths.lockPath, { force: true })\n }\n const now = Date.now()\n try {\n writeFileSync(\n paths.lockPath,\n JSON.stringify(\n {\n createdAt: now,\n expiresAt: now + DEFAULT_LOCK_TTL_MS,\n },\n null,\n 2,\n ),\n { encoding: 'utf8', flag: 'wx' },\n )\n } catch {\n throw new TaskStoreLockError('Task list is locked')\n }\n}\n\nfunction releaseLock(paths: ReturnType<typeof getTaskListPaths>): void {\n rmSync(paths.lockPath, { force: true })\n}\n\nfunction withTaskListLock<T>(\n paths: ReturnType<typeof getTaskListPaths>,\n handler: () => T,\n): T {\n acquireLock(paths)\n try {\n return handler()\n } finally {\n releaseLock(paths)\n }\n}\n\nfunction applyTaskUpdates(\n task: TaskRecord,\n updates: TaskUpdateInput,\n nextBaseVersion: number,\n): TaskRecord {\n const now = updates.updatedAt ?? Date.now()\n const subject = updates.subject ?? task.subject\n const activeForm =\n updates.activeForm ??\n (updates.subject\n ? buildActiveForm(subject)\n : task.activeForm ?? buildActiveForm(subject))\n const blockedBy = updates.blockedBy ?? task.blockedBy ?? []\n return {\n ...task,\n subject,\n description: updates.description ?? task.description,\n activeForm,\n status: updates.status ?? task.status,\n tags: updates.tags ?? task.tags,\n assignee: updates.assignee ?? task.assignee,\n metadata: updates.metadata ?? task.metadata,\n archived: updates.archived ?? task.archived,\n blocks: task.blocks ?? [],\n blockedBy,\n parent: updates.parent ?? task.parent,\n related: updates.related ?? task.related,\n updatedAt: now,\n baseVersion: nextBaseVersion,\n version: nextBaseVersion,\n legacyTodoId: updates.legacyTodoId ?? task.legacyTodoId,\n }\n}\n\nexport function createTask(\n input: TaskCreateInput,\n options?: { listId?: string },\n): TaskRecord {\n const paths = getTaskListPaths(options?.listId)\n return withTaskListLock(paths, () => {\n ensureTaskListDirs(paths)\n const index = readIndex(paths)\n const id = String(index.nextId)\n const now = Date.now()\n const subject = input.subject\n if (!subject) {\n throw new Error('Task subject is required')\n }\n const activeForm = input.activeForm ?? buildActiveForm(subject)\n const record: TaskRecord = {\n id,\n subject,\n description: input.description,\n activeForm,\n status: input.status ?? 'open',\n tags: input.tags,\n assignee: input.assignee,\n metadata: input.metadata,\n archived: input.archived,\n blocks: [],\n blockedBy: input.blockedBy ?? [],\n parent: input.parent,\n related: input.related,\n createdAt: now,\n updatedAt: now,\n baseVersion: 1,\n version: 1,\n legacyTodoId: input.legacyTodoId,\n }\n writeJson(join(paths.tasksDir, `${id}.json`), record)\n index.nextId += 1\n index.total += 1\n index.byStatus[record.status] += 1\n index.lastUpdated = Date.now()\n writeIndex(paths, index)\n const meta = readMeta(paths)\n meta.updatedAt = Date.now()\n writeMeta(paths, meta)\n appendTaskEvent(paths, {\n listId: paths.listId,\n taskId: record.id,\n type: 'task.created',\n timestamp: Date.now(),\n })\n const { tasks } = rebuildBlocksForPaths(paths)\n const refreshed = tasks.find(task => task.id === record.id)\n return refreshed ?? record\n })\n}\n\nexport function getTask(\n id: string,\n options?: { listId?: string },\n): TaskRecord | null {\n const tasks = listTasks(options)\n return tasks.find(task => task.id === id) ?? null\n}\n\nexport function listTasks(options?: { listId?: string }): TaskRecord[] {\n const paths = getTaskListPaths(options?.listId)\n readIndex(paths)\n ensureTaskListDirs(paths)\n const tasks = readTasksFromDisk(paths)\n const map = deriveBlocks(tasks)\n const derived = applyBlocksMap(tasks, map)\n const needsPersist = tasks.some(task => {\n const nextBlocks = map.get(task.id) ?? []\n return !areBlocksEqual(task.blocks, nextBlocks)\n })\n const ready = needsPersist\n ? withTaskListLock(paths, () => rebuildBlocksForPaths(paths).tasks)\n : derived\n return ready.sort((a, b) => Number(a.id) - Number(b.id))\n}\n\nexport function updateTask(\n id: string,\n updates: TaskUpdateInput,\n options?: { listId?: string; allowMerge?: boolean },\n): TaskUpdateResult {\n const paths = getTaskListPaths(options?.listId)\n return withTaskListLock(paths, () => {\n const existing = readTaskFile(join(paths.tasksDir, `${id}.json`))\n if (!existing) {\n throw new Error(`Task ${id} not found`)\n }\n const requestedBase = updates.baseVersion\n const hasConflict =\n typeof requestedBase === 'number' &&\n requestedBase !== existing.baseVersion\n if (hasConflict && !options?.allowMerge) {\n throw new TaskStoreConflictError({\n taskId: id,\n expected: requestedBase,\n actual: existing.baseVersion,\n })\n }\n if (hasConflict && options?.allowMerge) {\n const updateTimestamp = updates.updatedAt ?? Date.now()\n if (updateTimestamp <= existing.updatedAt) {\n return { task: existing, conflict: true }\n }\n }\n const nextBaseVersion = existing.baseVersion + 1\n const updated = applyTaskUpdates(existing, updates, nextBaseVersion)\n writeJson(join(paths.tasksDir, `${id}.json`), updated)\n const index = readIndex(paths)\n if (updated.status !== existing.status) {\n index.byStatus[existing.status] = Math.max(\n 0,\n index.byStatus[existing.status] - 1,\n )\n index.byStatus[updated.status] += 1\n }\n index.lastUpdated = Date.now()\n writeIndex(paths, index)\n const meta = readMeta(paths)\n meta.updatedAt = Date.now()\n writeMeta(paths, meta)\n appendTaskEvent(paths, {\n listId: paths.listId,\n taskId: updated.id,\n type: 'task.updated',\n timestamp: Date.now(),\n })\n const { tasks } = rebuildBlocksForPaths(paths)\n const refreshed = tasks.find(task => task.id === updated.id)\n return { task: refreshed ?? updated, conflict: hasConflict }\n })\n}\n\nexport function rebuildTaskBlocks(options?: { listId?: string }): {\n updated: number\n total: number\n} {\n const paths = getTaskListPaths(options?.listId)\n return withTaskListLock(paths, () => {\n readIndex(paths)\n ensureTaskListDirs(paths)\n const { tasks, updated } = rebuildBlocksForPaths(paths)\n return { updated, total: tasks.length }\n })\n}\n\nexport function getTaskListMeta(options?: { listId?: string }): TaskListMeta {\n const paths = getTaskListPaths(options?.listId)\n return readMeta(paths)\n}\n\nexport function updateTaskListMeta(\n meta: TaskListMeta,\n options?: { listId?: string },\n): TaskListMeta {\n const paths = getTaskListPaths(options?.listId)\n const updated = { ...meta, updatedAt: Date.now() }\n writeMeta(paths, updated)\n return updated\n}\n", "import { setSessionState, getSessionState } from './sessionState'\nimport { readAgentData, writeAgentData, resolveAgentId } from '@utils/agent/storage'\nimport {\n createTask,\n getTaskListMeta,\n getTaskListPaths,\n listTasks,\n TaskStatus,\n updateTask,\n updateTaskListMeta,\n} from './taskStore'\n\nexport interface TodoItem {\n id: string\n content: string\n status: 'pending' | 'in_progress' | 'completed'\n activeForm: string\n priority: 'high' | 'medium' | 'low'\n createdAt?: number\n updatedAt?: number\n tags?: string[]\n estimatedHours?: number\n previousStatus?: 'pending' | 'in_progress' | 'completed'\n}\n\nexport interface TodoQuery {\n status?: TodoItem['status'][]\n priority?: TodoItem['priority'][]\n contentMatch?: string\n tags?: string[]\n dateRange?: { from?: Date; to?: Date }\n}\n\nexport interface TodoStorageConfig {\n maxTodos: number\n autoArchiveCompleted: boolean\n sortBy: 'createdAt' | 'updatedAt' | 'priority' | 'status'\n sortOrder: 'asc' | 'desc'\n}\n\nconst TODO_STORAGE_KEY = 'todos'\nconst TODO_CONFIG_KEY = 'todoConfig'\nconst TODO_CACHE_KEY = 'todoCache'\n\nconst DEFAULT_CONFIG: TodoStorageConfig = {\n maxTodos: 100,\n autoArchiveCompleted: false,\n sortBy: 'status',\n sortOrder: 'desc',\n}\n\nlet todoCache: TodoItem[] | null = null\nlet cacheTimestamp = 0\nconst CACHE_TTL = 5000\n\nexport function isTodoCompatEnabled(env: NodeJS.ProcessEnv = process.env): boolean {\n const raw = String(\n env.PYB_TODO_COMPAT ?? env.CLAUDE_CODE_TODO_COMPAT ?? '',\n )\n .trim()\n .toLowerCase()\n if (!raw) return false\n if (['0', 'false', 'no', 'off'].includes(raw)) return false\n if (['1', 'true', 'yes', 'on'].includes(raw)) return true\n return true\n}\n\nfunction toTaskStatus(status: TodoItem['status']): TaskStatus {\n if (status === 'completed') return 'done'\n if (status === 'in_progress') return 'in_progress'\n return 'open'\n}\n\nexport function syncTodosToTasks(\n todos: TodoItem[],\n options?: { listId?: string },\n): { listId: string; created: number; updated: number } {\n const { listId } = getTaskListPaths(options?.listId)\n const tasks = listTasks({ listId })\n const byLegacyId = new Map(\n tasks\n .filter(task => task.legacyTodoId)\n .map(task => [task.legacyTodoId as string, task]),\n )\n let created = 0\n let updated = 0\n for (const todo of todos) {\n const existing = byLegacyId.get(todo.id)\n if (!existing) {\n createTask(\n {\n subject: todo.content,\n description: todo.content,\n activeForm: todo.activeForm,\n status: toTaskStatus(todo.status),\n legacyTodoId: todo.id,\n },\n { listId },\n )\n created += 1\n } else {\n updateTask(\n existing.id,\n {\n subject: todo.content,\n description: todo.content,\n activeForm: todo.activeForm,\n status: toTaskStatus(todo.status),\n legacyTodoId: todo.id,\n },\n { listId, allowMerge: true },\n )\n updated += 1\n }\n }\n return { listId, created, updated }\n}\n\nexport function migrateTodosToTasks(options?: {\n listId?: string\n agentId?: string\n}): { listId: string; migrated: boolean; created: number } {\n const { listId } = getTaskListPaths(options?.listId)\n const meta = getTaskListMeta({ listId })\n if (meta.todoMigration?.completedAt) {\n return { listId, migrated: false, created: 0 }\n }\n const todos = getTodos(options?.agentId)\n const result = syncTodosToTasks(todos, { listId })\n updateTaskListMeta(\n {\n ...meta,\n todoMigration: {\n completedAt: Date.now(),\n sourceCount: todos.length,\n },\n },\n { listId },\n )\n return { listId, migrated: true, created: result.created }\n}\n\nexport function getTodoCompatSnapshot(options?: {\n listId?: string\n agentId?: string\n}): { listId: string; todos: TodoItem[]; tasks: ReturnType<typeof listTasks> } {\n const { listId } = getTaskListPaths(options?.listId)\n return {\n listId,\n todos: getTodos(options?.agentId),\n tasks: listTasks({ listId }),\n }\n}\n\nexport interface TodoMetrics {\n totalOperations: number\n cacheHits: number\n cacheMisses: number\n lastOperation: number\n}\n\nfunction invalidateCache(): void {\n todoCache = null\n cacheTimestamp = 0\n}\n\nfunction updateMetrics(operation: string, cacheHit: boolean = false): void {\n const sessionState = getSessionState() as any\n const metrics = sessionState.todoMetrics || {\n totalOperations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n lastOperation: 0,\n }\n\n metrics.totalOperations++\n metrics.lastOperation = Date.now()\n\n if (cacheHit) {\n metrics.cacheHits++\n } else {\n metrics.cacheMisses++\n }\n\n setSessionState({\n ...sessionState,\n todoMetrics: metrics,\n })\n}\n\nexport function getTodoMetrics(): TodoMetrics {\n const sessionState = getSessionState() as any\n return (\n sessionState.todoMetrics || {\n totalOperations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n lastOperation: 0,\n }\n )\n}\n\nexport function getTodos(agentId?: string): TodoItem[] {\n const resolvedAgentId = resolveAgentId(agentId)\n const now = Date.now()\n\n if (agentId) {\n updateMetrics('getTodos', false)\n const agentTodos = readAgentData<TodoItem[]>(resolvedAgentId) || []\n\n const agentCacheKey = `todoCache_${resolvedAgentId}`\n\n return agentTodos.map(todo => ({\n ...todo,\n activeForm: todo.activeForm || todo.content,\n }))\n }\n\n if (todoCache && now - cacheTimestamp < CACHE_TTL) {\n updateMetrics('getTodos', true)\n return todoCache.map(todo => ({\n ...todo,\n activeForm: todo.activeForm || todo.content,\n }))\n }\n\n updateMetrics('getTodos', false)\n const sessionState = getSessionState()\n const todos = (sessionState as any)[TODO_STORAGE_KEY] || []\n\n todoCache = [...todos].map((todo: TodoItem) => ({\n ...todo,\n activeForm: todo.activeForm || todo.content,\n }))\n cacheTimestamp = now\n\n return todoCache\n}\n\nexport function setTodos(todos: TodoItem[], agentId?: string): void {\n const resolvedAgentId = resolveAgentId(agentId)\n const config = getTodoConfig()\n const existingTodos = getTodos(agentId)\n\n if (agentId) {\n if (todos.length > config.maxTodos) {\n throw new Error(\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\n )\n }\n\n let processedTodos = todos\n if (config.autoArchiveCompleted) {\n processedTodos = todos.filter(todo => todo.status !== 'completed')\n }\n\n const updatedTodos = processedTodos.map(todo => {\n const existingTodo = existingTodos.find(\n existing => existing.id === todo.id,\n )\n\n return {\n ...todo,\n activeForm: todo.activeForm || todo.content,\n updatedAt: Date.now(),\n createdAt: todo.createdAt || Date.now(),\n previousStatus:\n existingTodo?.status !== todo.status\n ? existingTodo?.status\n : todo.previousStatus,\n }\n })\n\n writeAgentData(resolvedAgentId, updatedTodos)\n updateMetrics('setTodos')\n return\n }\n\n if (todos.length > config.maxTodos) {\n throw new Error(\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\n )\n }\n\n let processedTodos = todos\n if (config.autoArchiveCompleted) {\n processedTodos = todos.filter(todo => todo.status !== 'completed')\n }\n\n const updatedTodos = processedTodos.map(todo => {\n const existingTodo = existingTodos.find(existing => existing.id === todo.id)\n\n return {\n ...todo,\n activeForm: todo.activeForm || todo.content,\n updatedAt: Date.now(),\n createdAt: todo.createdAt || Date.now(),\n previousStatus:\n existingTodo?.status !== todo.status\n ? existingTodo?.status\n : todo.previousStatus,\n }\n })\n\n setSessionState({\n ...getSessionState(),\n [TODO_STORAGE_KEY]: updatedTodos,\n } as any)\n\n invalidateCache()\n updateMetrics('setTodos')\n}\n\nexport function getTodoConfig(): TodoStorageConfig {\n const sessionState = getSessionState() as any\n return { ...DEFAULT_CONFIG, ...(sessionState[TODO_CONFIG_KEY] || {}) }\n}\n\nexport function setTodoConfig(config: Partial<TodoStorageConfig>): void {\n const currentConfig = getTodoConfig()\n const newConfig = { ...currentConfig, ...config }\n\n setSessionState({\n ...getSessionState(),\n [TODO_CONFIG_KEY]: newConfig,\n } as any)\n\n if (config.sortBy || config.sortOrder) {\n const todos = getTodos()\n setTodos(todos)\n }\n}\n\nexport function addTodo(\n todo: Omit<TodoItem, 'createdAt' | 'updatedAt'>,\n): TodoItem[] {\n const todos = getTodos()\n\n if (todos.some(existing => existing.id === todo.id)) {\n throw new Error(`Todo with ID '${todo.id}' already exists`)\n }\n\n const newTodo: TodoItem = {\n ...todo,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n\n const updatedTodos = [...todos, newTodo]\n setTodos(updatedTodos)\n updateMetrics('addTodo')\n return updatedTodos\n}\n\nexport function updateTodo(id: string, updates: Partial<TodoItem>): TodoItem[] {\n const todos = getTodos()\n const existingTodo = todos.find(todo => todo.id === id)\n\n if (!existingTodo) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.map(todo =>\n todo.id === id ? { ...todo, ...updates, updatedAt: Date.now() } : todo,\n )\n\n setTodos(updatedTodos)\n updateMetrics('updateTodo')\n return updatedTodos\n}\n\nexport function deleteTodo(id: string): TodoItem[] {\n const todos = getTodos()\n const todoExists = todos.some(todo => todo.id === id)\n\n if (!todoExists) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.filter(todo => todo.id !== id)\n setTodos(updatedTodos)\n updateMetrics('deleteTodo')\n return updatedTodos\n}\n\nexport function clearTodos(): void {\n setTodos([])\n updateMetrics('clearTodos')\n}\n\nexport function getTodoById(id: string): TodoItem | undefined {\n const todos = getTodos()\n updateMetrics('getTodoById')\n return todos.find(todo => todo.id === id)\n}\n\nexport function getTodosByStatus(status: TodoItem['status']): TodoItem[] {\n const todos = getTodos()\n updateMetrics('getTodosByStatus')\n return todos.filter(todo => todo.status === status)\n}\n\nexport function getTodosByPriority(priority: TodoItem['priority']): TodoItem[] {\n const todos = getTodos()\n updateMetrics('getTodosByPriority')\n return todos.filter(todo => todo.priority === priority)\n}\n\nexport function queryTodos(query: TodoQuery): TodoItem[] {\n const todos = getTodos()\n updateMetrics('queryTodos')\n\n return todos.filter(todo => {\n if (query.status && !query.status.includes(todo.status)) {\n return false\n }\n\n if (query.priority && !query.priority.includes(todo.priority)) {\n return false\n }\n\n if (\n query.contentMatch &&\n !todo.content.toLowerCase().includes(query.contentMatch.toLowerCase())\n ) {\n return false\n }\n\n if (query.tags && todo.tags) {\n const hasMatchingTag = query.tags.some(tag => todo.tags!.includes(tag))\n if (!hasMatchingTag) return false\n }\n\n if (query.dateRange) {\n const todoDate = new Date(todo.createdAt || 0)\n if (query.dateRange.from && todoDate < query.dateRange.from) return false\n if (query.dateRange.to && todoDate > query.dateRange.to) return false\n }\n\n return true\n })\n}\n\nexport function getTodoStatistics() {\n const todos = getTodos()\n const metrics = getTodoMetrics()\n\n return {\n total: todos.length,\n byStatus: {\n pending: todos.filter(t => t.status === 'pending').length,\n in_progress: todos.filter(t => t.status === 'in_progress').length,\n completed: todos.filter(t => t.status === 'completed').length,\n },\n byPriority: {\n high: todos.filter(t => t.priority === 'high').length,\n medium: todos.filter(t => t.priority === 'medium').length,\n low: todos.filter(t => t.priority === 'low').length,\n },\n metrics,\n cacheEfficiency:\n metrics.totalOperations > 0\n ? Math.round((metrics.cacheHits / metrics.totalOperations) * 100)\n : 0,\n }\n}\n\nexport function optimizeTodoStorage(): void {\n invalidateCache()\n\n const todos = getTodos()\n const validTodos = todos.filter(\n todo =>\n todo.id &&\n todo.content &&\n todo.activeForm &&\n ['pending', 'in_progress', 'completed'].includes(todo.status) &&\n ['high', 'medium', 'low'].includes(todo.priority),\n )\n\n if (validTodos.length !== todos.length) {\n setTodos(validTodos)\n }\n\n updateMetrics('optimizeTodoStorage')\n}\n", "import { getTodos, TodoItem } from '@utils/session/todoStorage'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport interface ReminderMessage {\n role: 'system'\n content: string\n isMeta: boolean\n timestamp: number\n type: string\n priority: 'low' | 'medium' | 'high'\n category: 'task' | 'security' | 'performance' | 'general'\n}\n\ninterface ReminderConfig {\n todoEmptyReminder: boolean\n securityReminder: boolean\n performanceReminder: boolean\n maxRemindersPerSession: number\n}\n\ninterface SessionReminderState {\n lastTodoUpdate: number\n lastFileAccess: number\n lastTaskUpdate: number\n sessionStartTime: number\n remindersSent: Set<string>\n contextPresent: boolean\n reminderCount: number\n taskEventTimestamps: Map<string, number>\n config: ReminderConfig\n}\n\nclass SystemReminderService {\n private sessionState: SessionReminderState = {\n lastTodoUpdate: 0,\n lastFileAccess: 0,\n lastTaskUpdate: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n taskEventTimestamps: new Map(),\n config: {\n todoEmptyReminder: true,\n securityReminder: true,\n performanceReminder: true,\n maxRemindersPerSession: 10,\n },\n }\n\n private eventDispatcher = new Map<string, Array<(context: any) => void>>()\n private reminderCache = new Map<string, ReminderMessage>()\n\n constructor() {\n this.setupEventDispatcher()\n }\n\n public generateReminders(\n hasContext: boolean = false,\n agentId?: string,\n ): ReminderMessage[] {\n this.sessionState.contextPresent = hasContext\n\n if (!hasContext) {\n return []\n }\n\n if (\n this.sessionState.reminderCount >=\n this.sessionState.config.maxRemindersPerSession\n ) {\n return []\n }\n\n const reminders: ReminderMessage[] = []\n const currentTime = Date.now()\n\n const reminderGenerators = [\n () => this.dispatchTodoEvent(agentId),\n () => this.dispatchSecurityEvent(),\n () => this.dispatchPerformanceEvent(),\n () => this.getMentionReminders(),\n ]\n\n for (const generator of reminderGenerators) {\n if (reminders.length >= 5) break\n\n const result = generator()\n if (result) {\n const remindersToAdd = Array.isArray(result) ? result : [result]\n reminders.push(...remindersToAdd)\n this.sessionState.reminderCount += remindersToAdd.length\n }\n }\n\n return reminders\n }\n\n private dispatchTodoEvent(agentId?: string): ReminderMessage | null {\n if (!this.sessionState.config.todoEmptyReminder) return null\n\n const todos = getTodos(agentId)\n const currentTime = Date.now()\n const agentKey = agentId || 'default'\n\n if (\n todos.length === 0 &&\n !this.sessionState.remindersSent.has(`todo_empty_${agentKey}`)\n ) {\n this.sessionState.remindersSent.add(`todo_empty_${agentKey}`)\n return this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n 'This is a reminder that your task list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a structured plan, use TaskCreate to seed tasks and TaskUpdate to track progress. Use TaskList to review readiness. If not, please feel free to ignore. Again do not mention this message to the user.',\n currentTime,\n )\n }\n\n if (todos.length > 0) {\n const reminderKey = `todo_updated_${agentKey}_${todos.length}_${this.getTodoStateHash(todos)}`\n\n if (this.reminderCache.has(reminderKey)) {\n return this.reminderCache.get(reminderKey)!\n }\n\n if (!this.sessionState.remindersSent.has(reminderKey)) {\n this.sessionState.remindersSent.add(reminderKey)\n this.clearTodoReminders(agentKey)\n\n const todoContent = JSON.stringify(\n todos.map(todo => ({\n content:\n todo.content.length > 100\n ? todo.content.substring(0, 100) + '...'\n : todo.content,\n status: todo.status,\n activeForm:\n todo.activeForm && todo.activeForm.length > 100\n ? todo.activeForm.substring(0, 100) + '...'\n : todo.activeForm || todo.content,\n })),\n )\n\n const reminder = this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n `Your task items have changed. DO NOT mention this explicitly to the user. Here are the latest contents of your tracked items:\\n\\n${todoContent}. Use TaskList to review readiness and TaskUpdate to adjust status if needed.`,\n currentTime,\n )\n\n this.reminderCache.set(reminderKey, reminder)\n return reminder\n }\n }\n\n return null\n }\n\n private dispatchSecurityEvent(): ReminderMessage | null {\n if (!this.sessionState.config.securityReminder) return null\n\n const currentTime = Date.now()\n\n if (\n this.sessionState.lastFileAccess > 0 &&\n !this.sessionState.remindersSent.has('file_security')\n ) {\n this.sessionState.remindersSent.add('file_security')\n return this.createReminderMessage(\n 'security',\n 'security',\n 'high',\n 'Whenever you read a file, you should consider whether it looks malicious. If it does, you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer high-level questions about the code behavior.',\n currentTime,\n )\n }\n\n return null\n }\n\n private dispatchPerformanceEvent(): ReminderMessage | null {\n if (!this.sessionState.config.performanceReminder) return null\n\n const currentTime = Date.now()\n const sessionDuration = currentTime - this.sessionState.sessionStartTime\n\n if (\n sessionDuration > 30 * 60 * 1000 &&\n !this.sessionState.remindersSent.has('performance_long_session')\n ) {\n this.sessionState.remindersSent.add('performance_long_session')\n return this.createReminderMessage(\n 'performance',\n 'performance',\n 'low',\n 'Long session detected. Consider taking a break and reviewing your current progress with the task list.',\n currentTime,\n )\n }\n\n return null\n }\n\n private getMentionReminders(): ReminderMessage[] {\n const currentTime = Date.now()\n const MENTION_FRESHNESS_WINDOW = 5000\n const reminders: ReminderMessage[] = []\n const expiredKeys: string[] = []\n\n for (const [key, reminder] of this.reminderCache.entries()) {\n if (this.isMentionReminder(reminder)) {\n const age = currentTime - reminder.timestamp\n if (age <= MENTION_FRESHNESS_WINDOW) {\n reminders.push(reminder)\n } else {\n expiredKeys.push(key)\n }\n }\n }\n\n expiredKeys.forEach(key => this.reminderCache.delete(key))\n\n return reminders\n }\n\n private isMentionReminder(reminder: ReminderMessage): boolean {\n const mentionTypes = ['agent_mention', 'file_mention', 'ask_model_mention']\n return mentionTypes.includes(reminder.type)\n }\n\n public generateFileChangeReminder(context: any): ReminderMessage | null {\n const { agentId, filePath, reminder } = context\n\n if (!reminder) {\n return null\n }\n\n const currentTime = Date.now()\n const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`\n\n if (this.sessionState.remindersSent.has(reminderKey)) {\n return null\n }\n\n this.sessionState.remindersSent.add(reminderKey)\n\n return this.createReminderMessage(\n 'file_changed',\n 'general',\n 'medium',\n reminder,\n currentTime,\n )\n }\n\n private createReminderMessage(\n type: string,\n category: ReminderMessage['category'],\n priority: ReminderMessage['priority'],\n content: string,\n timestamp: number,\n ): ReminderMessage {\n return {\n role: 'system',\n content: `<system-reminder>\\n${content}\\n</system-reminder>`,\n isMeta: true,\n timestamp,\n type,\n priority,\n category,\n }\n }\n\n private getTodoStateHash(todos: TodoItem[]): string {\n return todos\n .map(t => `${t.content}:${t.status}:${t.activeForm || t.content}`)\n .sort()\n .join('|')\n }\n\n private clearTodoReminders(agentId?: string): void {\n const agentKey = agentId || 'default'\n for (const key of this.sessionState.remindersSent) {\n if (key.startsWith(`todo_updated_${agentKey}_`)) {\n this.sessionState.remindersSent.delete(key)\n }\n }\n }\n\n private shouldEmitTaskReminder(key: string, throttleMs: number): boolean {\n const now = Date.now()\n const last = this.sessionState.taskEventTimestamps.get(key) ?? 0\n if (now - last < throttleMs) {\n return false\n }\n this.sessionState.taskEventTimestamps.set(key, now)\n return true\n }\n\n private createTaskListReminder(context: any): ReminderMessage | null {\n const { listId, summary } = context\n if (!summary || !listId) return null\n const reminderKey = `task_list_${listId}_${summary.total}_${summary.ready}_${summary.blocked}_${summary.inProgress}_${summary.open}_${summary.done}_${summary.archived}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_list_changed',\n 'task',\n 'medium',\n `Your task list changed. Ready: ${summary.ready}, Blocked: ${summary.blocked}, In progress: ${summary.inProgress}, Open: ${summary.open}, Done: ${summary.done}, Archived: ${summary.archived}.`,\n Date.now(),\n )\n }\n\n private createTaskReadyReminder(context: any): ReminderMessage | null {\n const { listId, readyIds } = context\n if (!listId || !Array.isArray(readyIds)) return null\n const limited = readyIds.slice(0, 5).join(', ')\n const reminderKey = `task_ready_${listId}_${readyIds.length}_${limited}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_ready_changed',\n 'task',\n 'medium',\n `Task readiness changed. Ready count: ${readyIds.length}. Ready ids: ${limited || 'none'}.`,\n Date.now(),\n )\n }\n\n private createTaskConflictReminder(context: any): ReminderMessage | null {\n const { listId, taskId } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_conflict_${listId}_${taskId}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_conflict',\n 'task',\n 'high',\n `Task update conflict detected for ${taskId}. Refresh task data and retry updates with the latest baseVersion.`,\n Date.now(),\n )\n }\n\n private createTaskCreatedReminder(context: any): ReminderMessage | null {\n const { listId, taskId, task } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_created_${listId}_${taskId}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n const subject = task?.subject || taskId\n return this.createReminderMessage(\n 'task_created',\n 'task',\n 'medium',\n `Task created: ${subject} (${taskId}). Review details and adjust status if needed.`,\n Date.now(),\n )\n }\n\n private createTaskUpdatedReminder(context: any): ReminderMessage | null {\n const { listId, taskId, task } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_updated_${listId}_${taskId}_${task?.baseVersion ?? ''}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n const subject = task?.subject || taskId\n return this.createReminderMessage(\n 'task_updated',\n 'task',\n 'medium',\n `Task updated: ${subject} (${taskId}). Confirm dependencies and status are correct.`,\n Date.now(),\n )\n }\n\n private createTaskStatusReminder(context: any): ReminderMessage | null {\n const { listId, taskId, previousStatus, status } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_status_${listId}_${taskId}_${previousStatus}_${status}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_status_changed',\n 'task',\n 'medium',\n `Task status changed for ${taskId}: ${previousStatus} \u2192 ${status}. Review dependent tasks if needed.`,\n Date.now(),\n )\n }\n\n private createTaskDepsReminder(context: any): ReminderMessage | null {\n const { listId, taskId, deps } = context\n if (!listId || !taskId) return null\n const reminderKey = `task_deps_${listId}_${taskId}_${JSON.stringify(deps ?? {})}`\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n return this.createReminderMessage(\n 'task_deps_changed',\n 'task',\n 'medium',\n `Task dependencies changed for ${taskId}. Recheck readiness and blockers.`,\n Date.now(),\n )\n }\n\n private setupEventDispatcher(): void {\n this.addEventListener('session:startup', context => {\n this.resetSession()\n\n this.sessionState.sessionStartTime = Date.now()\n this.sessionState.contextPresent =\n Object.keys(context.context || {}).length > 0\n })\n\n this.addEventListener('todo:changed', context => {\n this.sessionState.lastTodoUpdate = Date.now()\n this.clearTodoReminders(context.agentId)\n })\n\n this.addEventListener('todo:file_changed', context => {\n const agentId = context.agentId || 'default'\n this.clearTodoReminders(agentId)\n this.sessionState.lastTodoUpdate = Date.now()\n\n const reminder = this.generateFileChangeReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n agentId,\n type: 'file_changed',\n timestamp: Date.now(),\n })\n }\n })\n\n this.addEventListener('task:list_changed', context => {\n const key = `task_list_${context.listId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\n const reminder = this.createTaskListReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: 'task_list_changed',\n timestamp: Date.now(),\n })\n }\n })\n\n this.addEventListener('task:ready_changed', context => {\n const key = `task_ready_${context.listId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskReadyReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: 'task_ready_changed',\n timestamp: Date.now(),\n })\n }\n })\n\n this.addEventListener('task:conflict_detected', context => {\n const key = `task_conflict_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskConflictReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: 'task_conflict',\n timestamp: Date.now(),\n })\n }\n })\n\n this.addEventListener('task.created', context => {\n const key = `task_created_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskCreatedReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: reminder.type,\n timestamp: reminder.timestamp,\n })\n }\n })\n\n this.addEventListener('task.updated', context => {\n const key = `task_updated_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskUpdatedReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: reminder.type,\n timestamp: reminder.timestamp,\n })\n }\n })\n\n this.addEventListener('task.status_changed', context => {\n const key = `task_status_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskStatusReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: reminder.type,\n timestamp: reminder.timestamp,\n })\n }\n })\n\n this.addEventListener('task.deps_changed', context => {\n const key = `task_deps_${context.listId}_${context.taskId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n const reminder = this.createTaskDepsReminder(context)\n if (reminder) {\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n listId: context.listId,\n type: reminder.type,\n timestamp: reminder.timestamp,\n })\n }\n })\n\n this.addEventListener('file:read', context => {\n this.sessionState.lastFileAccess = Date.now()\n })\n\n this.addEventListener('file:edited', context => {\n })\n\n this.addEventListener('agent:mentioned', context => {\n this.createMentionReminder({\n type: 'agent_mention',\n key: `agent_mention_${context.agentType}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST use the Task tool with subagent_type=\"${context.agentType}\" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${context.agentType} agent to execute.`,\n timestamp: context.timestamp,\n })\n })\n\n this.addEventListener('file:mentioned', context => {\n this.createMentionReminder({\n type: 'file_mention',\n key: `file_mention_${context.filePath}_${context.timestamp}`,\n category: 'general',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST read the entire content of the file at path: ${context.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,\n timestamp: context.timestamp,\n })\n })\n\n this.addEventListener('ask-model:mentioned', context => {\n this.createMentionReminder({\n type: 'ask_model_mention',\n key: `ask_model_mention_${context.modelName}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${context.modelName}.`,\n timestamp: context.timestamp,\n })\n })\n }\n\n public addEventListener(\n event: string,\n callback: (context: any) => void,\n ): void {\n if (!this.eventDispatcher.has(event)) {\n this.eventDispatcher.set(event, [])\n }\n this.eventDispatcher.get(event)!.push(callback)\n }\n\n public emitEvent(event: string, context: any): void {\n const listeners = this.eventDispatcher.get(event) || []\n listeners.forEach(callback => {\n try {\n callback(context)\n } catch (error) {\n logError(error)\n debugLogger.warn('SYSTEM_REMINDER_LISTENER_ERROR', {\n event,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n })\n }\n\n private createMentionReminder(params: {\n type: string\n key: string\n category: ReminderMessage['category']\n priority: ReminderMessage['priority']\n content: string\n timestamp: number\n }): void {\n if (!this.sessionState.remindersSent.has(params.key)) {\n this.sessionState.remindersSent.add(params.key)\n\n const reminder = this.createReminderMessage(\n params.type,\n params.category,\n params.priority,\n params.content,\n params.timestamp,\n )\n\n this.reminderCache.set(params.key, reminder)\n }\n }\n\n public resetSession(): void {\n this.sessionState = {\n lastTodoUpdate: 0,\n lastFileAccess: 0,\n lastTaskUpdate: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n taskEventTimestamps: new Map(),\n config: { ...this.sessionState.config },\n }\n this.reminderCache.clear()\n }\n\n public updateConfig(config: Partial<ReminderConfig>): void {\n this.sessionState.config = { ...this.sessionState.config, ...config }\n }\n\n public getSessionState(): SessionReminderState {\n return { ...this.sessionState }\n }\n}\n\nexport const systemReminderService = new SystemReminderService()\n\nexport const generateSystemReminders = (\n hasContext: boolean = false,\n agentId?: string,\n) => systemReminderService.generateReminders(hasContext, agentId)\n\nexport const generateFileChangeReminder = (context: any) =>\n systemReminderService.generateFileChangeReminder(context)\n\nexport const emitReminderEvent = (event: string, context: any) =>\n systemReminderService.emitEvent(event, context)\n\nexport const resetReminderSession = () => systemReminderService.resetSession()\nexport const getReminderSessionState = () =>\n systemReminderService.getSessionState()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["existsSync", "mkdirSync", "readFileSync", "writeFileSync", "join", "join", "existsSync", "join", "existsSync", "override", "defaultBaseDir", "candidates", "mkdirSync", "existsSync", "readFileSync", "writeFileSync", "join", "processedTodos", "updatedTodos"]
|
|
7
|
+
}
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
} from "./chunk-RQVLBMP7.js";
|
|
6
6
|
import {
|
|
7
7
|
debug
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VZLNH3C6.js";
|
|
9
9
|
import {
|
|
10
10
|
getCwd,
|
|
11
11
|
getGlobalConfigFilePath,
|
|
12
12
|
getLegacyGlobalConfigFilePath,
|
|
13
13
|
logError
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
15
15
|
|
|
16
16
|
// src/core/config/schema.ts
|
|
17
17
|
function isAutoUpdaterStatus(value) {
|
|
@@ -688,7 +688,7 @@ function setModelPointer(pointer, modelName) {
|
|
|
688
688
|
}
|
|
689
689
|
};
|
|
690
690
|
saveGlobalConfig(updatedConfig);
|
|
691
|
-
import("./model-
|
|
691
|
+
import("./model-YEJVMUUS.js").then(({ reloadModelManager }) => {
|
|
692
692
|
reloadModelManager();
|
|
693
693
|
});
|
|
694
694
|
}
|
|
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
getSessionProjectDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NFQ7DMXQ.js";
|
|
6
6
|
import {
|
|
7
7
|
isUuid
|
|
8
8
|
} from "./chunk-5P7HBXTD.js";
|
|
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
getGlobalConfig,
|
|
5
5
|
saveGlobalConfig
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3TW4UYVK.js";
|
|
7
7
|
import {
|
|
8
8
|
debug
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VZLNH3C6.js";
|
|
10
10
|
import {
|
|
11
11
|
logError
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
13
13
|
|
|
14
14
|
// src/utils/model/index.ts
|
|
15
15
|
import { memoize } from "lodash-es";
|