pybao-cli 1.4.45 → 1.4.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/dist/REPL-T5MR6VS3.js +47 -0
  2. package/dist/{acp-NQQWCE6I.js → acp-SF2NQMZG.js} +29 -29
  3. package/dist/{agentsValidate-4RWRD7GX.js → agentsValidate-GLBXCFYZ.js} +7 -7
  4. package/dist/{ask-NT5AU6PG.js → ask-YBV7ODJM.js} +28 -28
  5. package/dist/{autoUpdater-27VMHRIW.js → autoUpdater-VYKAJUSN.js} +3 -3
  6. package/dist/{chunk-YHMGDUI2.js → chunk-26VG3M2M.js} +3 -3
  7. package/dist/{chunk-M6H3DZ65.js → chunk-3SWMMKPJ.js} +9 -9
  8. package/dist/chunk-3SWMMKPJ.js.map +7 -0
  9. package/dist/{chunk-OPJPQHBD.js → chunk-43NXI3DK.js} +36 -36
  10. package/dist/{chunk-OPJPQHBD.js.map → chunk-43NXI3DK.js.map} +1 -1
  11. package/dist/{chunk-A4FM24JV.js → chunk-4ODM3Y4O.js} +2 -2
  12. package/dist/{chunk-LZEVQLVC.js → chunk-6K5FVPGV.js} +1 -1
  13. package/dist/{chunk-RKBKT4VL.js → chunk-BIUZILAD.js} +2 -2
  14. package/dist/{chunk-D4WFVW5A.js → chunk-CGGTZGKD.js} +3 -3
  15. package/dist/{chunk-YJ3CGHCY.js → chunk-CORLDVAP.js} +2 -2
  16. package/dist/{chunk-LKWFKXSV.js → chunk-F5RAKG24.js} +1 -1
  17. package/dist/{chunk-FY33EKD2.js → chunk-FPGPMXBY.js} +1 -1
  18. package/dist/{chunk-GWGTKMHL.js → chunk-G2M7GOGN.js} +4 -4
  19. package/dist/{chunk-MBSRHORQ.js → chunk-GDBLHUCN.js} +3 -3
  20. package/dist/{chunk-DFPWDMWF.js → chunk-GJFEBAML.js} +1 -1
  21. package/dist/{chunk-DHOM7ZG7.js → chunk-GVI5S5UP.js} +1 -1
  22. package/dist/{chunk-JTNNU6AH.js → chunk-ITI2LLOZ.js} +3 -3
  23. package/dist/{chunk-ZYCVBMPM.js → chunk-LRSON7AD.js} +1 -1
  24. package/dist/{chunk-4WQPA6KJ.js → chunk-MFG2FDIS.js} +1 -1
  25. package/dist/{chunk-Z6MQJ4P7.js → chunk-MRPC6G4Y.js} +2 -2
  26. package/dist/{chunk-5BKLRHQ5.js → chunk-ONLKTCPY.js} +3 -3
  27. package/dist/{chunk-KTCMDKTK.js → chunk-OQSN3267.js} +1 -1
  28. package/dist/{chunk-NKDRET5K.js → chunk-PLCXOKAE.js} +2 -2
  29. package/dist/{chunk-4XD5ZHAP.js → chunk-QWQWWAWY.js} +65 -23
  30. package/dist/{chunk-4XD5ZHAP.js.map → chunk-QWQWWAWY.js.map} +2 -2
  31. package/dist/{chunk-VGEX5UAB.js → chunk-RK3EJLZI.js} +3 -3
  32. package/dist/{chunk-K4XQFGVW.js → chunk-T65BVES2.js} +4 -4
  33. package/dist/{chunk-VJHLW5BR.js → chunk-TZXH2DAK.js} +1 -1
  34. package/dist/{chunk-VJHLW5BR.js.map → chunk-TZXH2DAK.js.map} +1 -1
  35. package/dist/{chunk-N242HITL.js → chunk-UBPJRHFR.js} +1 -1
  36. package/dist/{chunk-YZ2X5A6U.js → chunk-WFAQLNLO.js} +3 -3
  37. package/dist/{chunk-VYGP6UEJ.js → chunk-XSCWKXBG.js} +4 -4
  38. package/dist/{chunk-MMFLDFEZ.js → chunk-YORDNUOL.js} +2 -2
  39. package/dist/{chunk-7AQEFP6S.js → chunk-ZSJFUCVZ.js} +4 -4
  40. package/dist/{cli-FZVC3FYD.js → cli-GZL6NYQC.js} +87 -87
  41. package/dist/commands-BCPWPRKX.js +51 -0
  42. package/dist/{config-RMUD7VZA.js → config-S2HRIKN7.js} +4 -4
  43. package/dist/{context-KSG57YHS.js → context-VJ5K3EWH.js} +6 -6
  44. package/dist/{customCommands-W7Z63GJT.js → customCommands-MNHSHU35.js} +4 -4
  45. package/dist/{env-O63FHSAU.js → env-P6FBVAG4.js} +2 -2
  46. package/dist/{file-RVZP33QD.js → file-N2DZCGEZ.js} +4 -4
  47. package/dist/index.js +3 -3
  48. package/dist/{llm-7FKEPBX3.js → llm-B5NJCISU.js} +29 -29
  49. package/dist/{llmLazy-U4QRG2SA.js → llmLazy-7HY6EBG6.js} +1 -1
  50. package/dist/{loader-FBUYOOWY.js → loader-U72TGUDO.js} +4 -4
  51. package/dist/{lsp-J7AOBAOF.js → lsp-57NKMT4B.js} +6 -6
  52. package/dist/{lspAnchor-2CF7ACGD.js → lspAnchor-JEKPUG57.js} +6 -6
  53. package/dist/{mcp-BPILVUKJ.js → mcp-RDPCEZDR.js} +7 -7
  54. package/dist/{mentionProcessor-UYF5Y3W7.js → mentionProcessor-OOREAFK4.js} +6 -6
  55. package/dist/{messages-5KIK22BZ.js → messages-GAAE6FRF.js} +1 -1
  56. package/dist/{model-IIDWEMQF.js → model-7ZUGNUX3.js} +5 -5
  57. package/dist/{openai-66I2ACE7.js → openai-Q6N3I7GI.js} +5 -5
  58. package/dist/{outputStyles-AWMBRL5J.js → outputStyles-63XHWDAT.js} +4 -4
  59. package/dist/{pluginRuntime-STMVT5SH.js → pluginRuntime-OUNJEEPV.js} +6 -6
  60. package/dist/{pluginValidation-YGFLCUSI.js → pluginValidation-JYRL2VTM.js} +6 -6
  61. package/dist/prompts-Y6VJ5BJU.js +53 -0
  62. package/dist/{pybAgentSessionLoad-U7IMOVF7.js → pybAgentSessionLoad-HSAHNP72.js} +4 -4
  63. package/dist/{pybAgentSessionResume-MORKC42X.js → pybAgentSessionResume-LCDPTAEM.js} +4 -4
  64. package/dist/{pybAgentStreamJsonSession-DBVI64JT.js → pybAgentStreamJsonSession-SNBRAO6M.js} +1 -1
  65. package/dist/{pybHooks-GR5RDDUJ.js → pybHooks-46JCSO72.js} +4 -4
  66. package/dist/query-7TOLIEE2.js +55 -0
  67. package/dist/{registry-K7PM6GEJ.js → registry-W6YB5RPP.js} +5 -5
  68. package/dist/{ripgrep-ARBQAPW5.js → ripgrep-NIALNDWU.js} +3 -3
  69. package/dist/{skillMarketplace-5JETIWMW.js → skillMarketplace-VPNT5VWA.js} +3 -3
  70. package/dist/{state-VJMBMXXW.js → state-LFVIOJ3N.js} +2 -2
  71. package/dist/{theme-WOSRFEFP.js → theme-HPZPU3IQ.js} +5 -5
  72. package/dist/{toolPermissionSettings-LG6TR22N.js → toolPermissionSettings-CKJTOIF7.js} +6 -6
  73. package/dist/tools-SBQHBSYH.js +52 -0
  74. package/dist/{userInput-HVFQNVL7.js → userInput-V5WLF65L.js} +30 -30
  75. package/package.json +1 -1
  76. package/dist/REPL-MWC7RKTH.js +0 -47
  77. package/dist/chunk-M6H3DZ65.js.map +0 -7
  78. package/dist/commands-HJ3NKPNM.js +0 -51
  79. package/dist/prompts-KNNEGMID.js +0 -53
  80. package/dist/query-SALFQHDS.js +0 -55
  81. package/dist/tools-GMKTDTHW.js +0 -52
  82. /package/dist/{REPL-MWC7RKTH.js.map → REPL-T5MR6VS3.js.map} +0 -0
  83. /package/dist/{acp-NQQWCE6I.js.map → acp-SF2NQMZG.js.map} +0 -0
  84. /package/dist/{agentsValidate-4RWRD7GX.js.map → agentsValidate-GLBXCFYZ.js.map} +0 -0
  85. /package/dist/{ask-NT5AU6PG.js.map → ask-YBV7ODJM.js.map} +0 -0
  86. /package/dist/{autoUpdater-27VMHRIW.js.map → autoUpdater-VYKAJUSN.js.map} +0 -0
  87. /package/dist/{chunk-YHMGDUI2.js.map → chunk-26VG3M2M.js.map} +0 -0
  88. /package/dist/{chunk-A4FM24JV.js.map → chunk-4ODM3Y4O.js.map} +0 -0
  89. /package/dist/{chunk-LZEVQLVC.js.map → chunk-6K5FVPGV.js.map} +0 -0
  90. /package/dist/{chunk-RKBKT4VL.js.map → chunk-BIUZILAD.js.map} +0 -0
  91. /package/dist/{chunk-D4WFVW5A.js.map → chunk-CGGTZGKD.js.map} +0 -0
  92. /package/dist/{chunk-YJ3CGHCY.js.map → chunk-CORLDVAP.js.map} +0 -0
  93. /package/dist/{chunk-LKWFKXSV.js.map → chunk-F5RAKG24.js.map} +0 -0
  94. /package/dist/{chunk-FY33EKD2.js.map → chunk-FPGPMXBY.js.map} +0 -0
  95. /package/dist/{chunk-GWGTKMHL.js.map → chunk-G2M7GOGN.js.map} +0 -0
  96. /package/dist/{chunk-MBSRHORQ.js.map → chunk-GDBLHUCN.js.map} +0 -0
  97. /package/dist/{chunk-DFPWDMWF.js.map → chunk-GJFEBAML.js.map} +0 -0
  98. /package/dist/{chunk-DHOM7ZG7.js.map → chunk-GVI5S5UP.js.map} +0 -0
  99. /package/dist/{chunk-JTNNU6AH.js.map → chunk-ITI2LLOZ.js.map} +0 -0
  100. /package/dist/{chunk-ZYCVBMPM.js.map → chunk-LRSON7AD.js.map} +0 -0
  101. /package/dist/{chunk-4WQPA6KJ.js.map → chunk-MFG2FDIS.js.map} +0 -0
  102. /package/dist/{chunk-Z6MQJ4P7.js.map → chunk-MRPC6G4Y.js.map} +0 -0
  103. /package/dist/{chunk-5BKLRHQ5.js.map → chunk-ONLKTCPY.js.map} +0 -0
  104. /package/dist/{chunk-KTCMDKTK.js.map → chunk-OQSN3267.js.map} +0 -0
  105. /package/dist/{chunk-NKDRET5K.js.map → chunk-PLCXOKAE.js.map} +0 -0
  106. /package/dist/{chunk-VGEX5UAB.js.map → chunk-RK3EJLZI.js.map} +0 -0
  107. /package/dist/{chunk-K4XQFGVW.js.map → chunk-T65BVES2.js.map} +0 -0
  108. /package/dist/{chunk-N242HITL.js.map → chunk-UBPJRHFR.js.map} +0 -0
  109. /package/dist/{chunk-YZ2X5A6U.js.map → chunk-WFAQLNLO.js.map} +0 -0
  110. /package/dist/{chunk-VYGP6UEJ.js.map → chunk-XSCWKXBG.js.map} +0 -0
  111. /package/dist/{chunk-MMFLDFEZ.js.map → chunk-YORDNUOL.js.map} +0 -0
  112. /package/dist/{chunk-7AQEFP6S.js.map → chunk-ZSJFUCVZ.js.map} +0 -0
  113. /package/dist/{cli-FZVC3FYD.js.map → cli-GZL6NYQC.js.map} +0 -0
  114. /package/dist/{commands-HJ3NKPNM.js.map → commands-BCPWPRKX.js.map} +0 -0
  115. /package/dist/{config-RMUD7VZA.js.map → config-S2HRIKN7.js.map} +0 -0
  116. /package/dist/{context-KSG57YHS.js.map → context-VJ5K3EWH.js.map} +0 -0
  117. /package/dist/{customCommands-W7Z63GJT.js.map → customCommands-MNHSHU35.js.map} +0 -0
  118. /package/dist/{env-O63FHSAU.js.map → env-P6FBVAG4.js.map} +0 -0
  119. /package/dist/{file-RVZP33QD.js.map → file-N2DZCGEZ.js.map} +0 -0
  120. /package/dist/{llm-7FKEPBX3.js.map → llm-B5NJCISU.js.map} +0 -0
  121. /package/dist/{llmLazy-U4QRG2SA.js.map → llmLazy-7HY6EBG6.js.map} +0 -0
  122. /package/dist/{loader-FBUYOOWY.js.map → loader-U72TGUDO.js.map} +0 -0
  123. /package/dist/{lsp-J7AOBAOF.js.map → lsp-57NKMT4B.js.map} +0 -0
  124. /package/dist/{lspAnchor-2CF7ACGD.js.map → lspAnchor-JEKPUG57.js.map} +0 -0
  125. /package/dist/{mcp-BPILVUKJ.js.map → mcp-RDPCEZDR.js.map} +0 -0
  126. /package/dist/{mentionProcessor-UYF5Y3W7.js.map → mentionProcessor-OOREAFK4.js.map} +0 -0
  127. /package/dist/{messages-5KIK22BZ.js.map → messages-GAAE6FRF.js.map} +0 -0
  128. /package/dist/{model-IIDWEMQF.js.map → model-7ZUGNUX3.js.map} +0 -0
  129. /package/dist/{openai-66I2ACE7.js.map → openai-Q6N3I7GI.js.map} +0 -0
  130. /package/dist/{outputStyles-AWMBRL5J.js.map → outputStyles-63XHWDAT.js.map} +0 -0
  131. /package/dist/{pluginRuntime-STMVT5SH.js.map → pluginRuntime-OUNJEEPV.js.map} +0 -0
  132. /package/dist/{pluginValidation-YGFLCUSI.js.map → pluginValidation-JYRL2VTM.js.map} +0 -0
  133. /package/dist/{prompts-KNNEGMID.js.map → prompts-Y6VJ5BJU.js.map} +0 -0
  134. /package/dist/{pybAgentSessionLoad-U7IMOVF7.js.map → pybAgentSessionLoad-HSAHNP72.js.map} +0 -0
  135. /package/dist/{pybAgentSessionResume-MORKC42X.js.map → pybAgentSessionResume-LCDPTAEM.js.map} +0 -0
  136. /package/dist/{pybAgentStreamJsonSession-DBVI64JT.js.map → pybAgentStreamJsonSession-SNBRAO6M.js.map} +0 -0
  137. /package/dist/{pybHooks-GR5RDDUJ.js.map → pybHooks-46JCSO72.js.map} +0 -0
  138. /package/dist/{query-SALFQHDS.js.map → query-7TOLIEE2.js.map} +0 -0
  139. /package/dist/{registry-K7PM6GEJ.js.map → registry-W6YB5RPP.js.map} +0 -0
  140. /package/dist/{ripgrep-ARBQAPW5.js.map → ripgrep-NIALNDWU.js.map} +0 -0
  141. /package/dist/{skillMarketplace-5JETIWMW.js.map → skillMarketplace-VPNT5VWA.js.map} +0 -0
  142. /package/dist/{state-VJMBMXXW.js.map → state-LFVIOJ3N.js.map} +0 -0
  143. /package/dist/{theme-WOSRFEFP.js.map → theme-HPZPU3IQ.js.map} +0 -0
  144. /package/dist/{toolPermissionSettings-LG6TR22N.js.map → toolPermissionSettings-CKJTOIF7.js.map} +0 -0
  145. /package/dist/{tools-GMKTDTHW.js.map → tools-SBQHBSYH.js.map} +0 -0
  146. /package/dist/{userInput-HVFQNVL7.js.map → userInput-V5WLF65L.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-43NXI3DK.js";
6
+ import "./chunk-ITI2LLOZ.js";
7
+ import "./chunk-MFG2FDIS.js";
8
+ import "./chunk-OQSN3267.js";
9
+ import "./chunk-MRPC6G4Y.js";
10
+ import "./chunk-5P7HBXTD.js";
11
+ import "./chunk-GDBLHUCN.js";
12
+ import "./chunk-4ODM3Y4O.js";
13
+ import "./chunk-YORDNUOL.js";
14
+ import "./chunk-G2M7GOGN.js";
15
+ import "./chunk-T65BVES2.js";
16
+ import "./chunk-UBPJRHFR.js";
17
+ import "./chunk-ONLKTCPY.js";
18
+ import "./chunk-UNNVICVU.js";
19
+ import "./chunk-3SWMMKPJ.js";
20
+ import "./chunk-ERMQRV55.js";
21
+ import "./chunk-BIUZILAD.js";
22
+ import "./chunk-A3BVXXA3.js";
23
+ import "./chunk-GVI5S5UP.js";
24
+ import "./chunk-3DFBSQIT.js";
25
+ import "./chunk-B6IMQJZM.js";
26
+ import "./chunk-OUXHGDLH.js";
27
+ import "./chunk-PLCXOKAE.js";
28
+ import "./chunk-QWIBSCDN.js";
29
+ import "./chunk-XSCWKXBG.js";
30
+ import "./chunk-26VG3M2M.js";
31
+ import "./chunk-GJFEBAML.js";
32
+ import "./chunk-UZ34JEUK.js";
33
+ import "./chunk-CORLDVAP.js";
34
+ import "./chunk-BJSWTHRM.js";
35
+ import "./chunk-WFAQLNLO.js";
36
+ import "./chunk-ZSJFUCVZ.js";
37
+ import "./chunk-LRSON7AD.js";
38
+ import "./chunk-F5RAKG24.js";
39
+ import "./chunk-RK3EJLZI.js";
40
+ import "./chunk-RQVLBMP7.js";
41
+ import "./chunk-FPGPMXBY.js";
42
+ import "./chunk-6K5FVPGV.js";
43
+ import "./chunk-TZXH2DAK.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-4XD5ZHAP.js";
9
+ } from "./chunk-QWQWWAWY.js";
10
10
  import {
11
11
  getCommands,
12
12
  getSystemPrompt,
13
13
  grantReadPermissionForOriginalDir,
14
14
  hasPermissionsToUseTool,
15
15
  query
16
- } from "./chunk-OPJPQHBD.js";
17
- import "./chunk-JTNNU6AH.js";
18
- import "./chunk-4WQPA6KJ.js";
19
- import "./chunk-KTCMDKTK.js";
20
- import "./chunk-Z6MQJ4P7.js";
16
+ } from "./chunk-43NXI3DK.js";
17
+ import "./chunk-ITI2LLOZ.js";
18
+ import "./chunk-MFG2FDIS.js";
19
+ import "./chunk-OQSN3267.js";
20
+ import "./chunk-MRPC6G4Y.js";
21
21
  import "./chunk-5P7HBXTD.js";
22
- import "./chunk-MBSRHORQ.js";
23
- import "./chunk-A4FM24JV.js";
24
- import "./chunk-MMFLDFEZ.js";
25
- import "./chunk-GWGTKMHL.js";
22
+ import "./chunk-GDBLHUCN.js";
23
+ import "./chunk-4ODM3Y4O.js";
24
+ import "./chunk-YORDNUOL.js";
25
+ import "./chunk-G2M7GOGN.js";
26
26
  import {
27
27
  getClients
28
- } from "./chunk-K4XQFGVW.js";
29
- import "./chunk-N242HITL.js";
28
+ } from "./chunk-T65BVES2.js";
29
+ import "./chunk-UBPJRHFR.js";
30
30
  import {
31
31
  loadToolPermissionContextFromDisk,
32
32
  persistToolPermissionUpdateToDisk
33
- } from "./chunk-5BKLRHQ5.js";
33
+ } from "./chunk-ONLKTCPY.js";
34
34
  import {
35
35
  applyToolPermissionContextUpdates
36
36
  } from "./chunk-UNNVICVU.js";
37
- import "./chunk-M6H3DZ65.js";
37
+ import "./chunk-3SWMMKPJ.js";
38
38
  import "./chunk-ERMQRV55.js";
39
- import "./chunk-RKBKT4VL.js";
39
+ import "./chunk-BIUZILAD.js";
40
40
  import "./chunk-A3BVXXA3.js";
41
41
  import {
42
42
  createAssistantMessage,
43
43
  createUserMessage
44
- } from "./chunk-DHOM7ZG7.js";
44
+ } from "./chunk-GVI5S5UP.js";
45
45
  import "./chunk-3DFBSQIT.js";
46
46
  import "./chunk-B6IMQJZM.js";
47
47
  import "./chunk-OUXHGDLH.js";
48
- import "./chunk-NKDRET5K.js";
48
+ import "./chunk-PLCXOKAE.js";
49
49
  import "./chunk-QWIBSCDN.js";
50
- import "./chunk-VYGP6UEJ.js";
51
- import "./chunk-YHMGDUI2.js";
52
- import "./chunk-DFPWDMWF.js";
50
+ import "./chunk-XSCWKXBG.js";
51
+ import "./chunk-26VG3M2M.js";
52
+ import "./chunk-GJFEBAML.js";
53
53
  import "./chunk-UZ34JEUK.js";
54
- import "./chunk-YJ3CGHCY.js";
54
+ import "./chunk-CORLDVAP.js";
55
55
  import "./chunk-BJSWTHRM.js";
56
- import "./chunk-YZ2X5A6U.js";
56
+ import "./chunk-WFAQLNLO.js";
57
57
  import {
58
58
  getContext
59
- } from "./chunk-7AQEFP6S.js";
60
- import "./chunk-ZYCVBMPM.js";
61
- import "./chunk-LKWFKXSV.js";
59
+ } from "./chunk-ZSJFUCVZ.js";
60
+ import "./chunk-LRSON7AD.js";
61
+ import "./chunk-F5RAKG24.js";
62
62
  import {
63
63
  enableConfigs
64
- } from "./chunk-VGEX5UAB.js";
64
+ } from "./chunk-RK3EJLZI.js";
65
65
  import "./chunk-RQVLBMP7.js";
66
66
  import {
67
67
  initDebugLogger
68
- } from "./chunk-FY33EKD2.js";
68
+ } from "./chunk-FPGPMXBY.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-LZEVQLVC.js";
76
+ } from "./chunk-6K5FVPGV.js";
77
77
  import {
78
78
  MACRO
79
- } from "./chunk-VJHLW5BR.js";
79
+ } from "./chunk-TZXH2DAK.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-YZ2X5A6U.js";
6
- import "./chunk-VGEX5UAB.js";
5
+ } from "./chunk-WFAQLNLO.js";
6
+ import "./chunk-RK3EJLZI.js";
7
7
  import "./chunk-RQVLBMP7.js";
8
- import "./chunk-FY33EKD2.js";
8
+ import "./chunk-FPGPMXBY.js";
9
9
  import {
10
10
  getXdgConfigDir
11
- } from "./chunk-LZEVQLVC.js";
12
- import "./chunk-VJHLW5BR.js";
11
+ } from "./chunk-6K5FVPGV.js";
12
+ import "./chunk-TZXH2DAK.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-GMKTDTHW.js");
350
- const { getCurrentProjectConfig } = await import("./config-RMUD7VZA.js");
349
+ const { getTools } = await import("./tools-SBQHBSYH.js");
350
+ const { getCurrentProjectConfig } = await import("./config-S2HRIKN7.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-OPJPQHBD.js";
7
- import "./chunk-JTNNU6AH.js";
8
- import "./chunk-4WQPA6KJ.js";
9
- import "./chunk-KTCMDKTK.js";
10
- import "./chunk-Z6MQJ4P7.js";
6
+ } from "./chunk-43NXI3DK.js";
7
+ import "./chunk-ITI2LLOZ.js";
8
+ import "./chunk-MFG2FDIS.js";
9
+ import "./chunk-OQSN3267.js";
10
+ import "./chunk-MRPC6G4Y.js";
11
11
  import "./chunk-5P7HBXTD.js";
12
- import "./chunk-MBSRHORQ.js";
13
- import "./chunk-A4FM24JV.js";
14
- import "./chunk-MMFLDFEZ.js";
15
- import "./chunk-GWGTKMHL.js";
16
- import "./chunk-K4XQFGVW.js";
17
- import "./chunk-N242HITL.js";
18
- import "./chunk-5BKLRHQ5.js";
12
+ import "./chunk-GDBLHUCN.js";
13
+ import "./chunk-4ODM3Y4O.js";
14
+ import "./chunk-YORDNUOL.js";
15
+ import "./chunk-G2M7GOGN.js";
16
+ import "./chunk-T65BVES2.js";
17
+ import "./chunk-UBPJRHFR.js";
18
+ import "./chunk-ONLKTCPY.js";
19
19
  import "./chunk-UNNVICVU.js";
20
- import "./chunk-M6H3DZ65.js";
20
+ import "./chunk-3SWMMKPJ.js";
21
21
  import "./chunk-ERMQRV55.js";
22
- import "./chunk-RKBKT4VL.js";
22
+ import "./chunk-BIUZILAD.js";
23
23
  import "./chunk-A3BVXXA3.js";
24
24
  import {
25
25
  createUserMessage
26
- } from "./chunk-DHOM7ZG7.js";
26
+ } from "./chunk-GVI5S5UP.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-NKDRET5K.js";
32
+ import "./chunk-PLCXOKAE.js";
33
33
  import "./chunk-QWIBSCDN.js";
34
- import "./chunk-VYGP6UEJ.js";
35
- import "./chunk-YHMGDUI2.js";
36
- import "./chunk-DFPWDMWF.js";
34
+ import "./chunk-XSCWKXBG.js";
35
+ import "./chunk-26VG3M2M.js";
36
+ import "./chunk-GJFEBAML.js";
37
37
  import "./chunk-UZ34JEUK.js";
38
- import "./chunk-YJ3CGHCY.js";
38
+ import "./chunk-CORLDVAP.js";
39
39
  import "./chunk-BJSWTHRM.js";
40
40
  import {
41
41
  getModelManager
42
- } from "./chunk-YZ2X5A6U.js";
42
+ } from "./chunk-WFAQLNLO.js";
43
43
  import {
44
44
  getContext
45
- } from "./chunk-7AQEFP6S.js";
46
- import "./chunk-ZYCVBMPM.js";
47
- import "./chunk-LKWFKXSV.js";
48
- import "./chunk-VGEX5UAB.js";
45
+ } from "./chunk-ZSJFUCVZ.js";
46
+ import "./chunk-LRSON7AD.js";
47
+ import "./chunk-F5RAKG24.js";
48
+ import "./chunk-RK3EJLZI.js";
49
49
  import "./chunk-RQVLBMP7.js";
50
- import "./chunk-FY33EKD2.js";
50
+ import "./chunk-FPGPMXBY.js";
51
51
  import {
52
52
  getMessagesPath,
53
53
  overwriteLog,
54
54
  setCwd
55
- } from "./chunk-LZEVQLVC.js";
56
- import "./chunk-VJHLW5BR.js";
55
+ } from "./chunk-6K5FVPGV.js";
56
+ import "./chunk-TZXH2DAK.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-D4WFVW5A.js";
9
- import "./chunk-LZEVQLVC.js";
10
- import "./chunk-VJHLW5BR.js";
8
+ } from "./chunk-CGGTZGKD.js";
9
+ import "./chunk-6K5FVPGV.js";
10
+ import "./chunk-TZXH2DAK.js";
11
11
  import "./chunk-I3J4JYES.js";
12
12
  export {
13
13
  assertMinVersion,
@@ -2,15 +2,15 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  loadSettingsWithLegacyFallback
5
- } from "./chunk-DFPWDMWF.js";
5
+ } from "./chunk-GJFEBAML.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-FY33EKD2.js";
8
+ } from "./chunk-FPGPMXBY.js";
9
9
  import {
10
10
  env,
11
11
  getSessionRoot,
12
12
  resolveXdgDataPath
13
- } from "./chunk-LZEVQLVC.js";
13
+ } from "./chunk-6K5FVPGV.js";
14
14
  import {
15
15
  __require
16
16
  } from "./chunk-I3J4JYES.js";
@@ -7,15 +7,15 @@ import {
7
7
  import {
8
8
  getCurrentProjectConfig,
9
9
  getGlobalConfig
10
- } from "./chunk-VGEX5UAB.js";
10
+ } from "./chunk-RK3EJLZI.js";
11
11
  import {
12
12
  debug
13
- } from "./chunk-FY33EKD2.js";
13
+ } from "./chunk-FPGPMXBY.js";
14
14
  import {
15
15
  getCwd,
16
16
  logError,
17
17
  resolveXdgDataPath
18
- } from "./chunk-LZEVQLVC.js";
18
+ } from "./chunk-6K5FVPGV.js";
19
19
 
20
20
  // src/utils/agent/storage.ts
21
21
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
@@ -91,9 +91,6 @@ import { join as join2 } from "path";
91
91
  import { homedir } from "os";
92
92
  import { createHash } from "crypto";
93
93
  var DEFAULT_LOCK_TTL_MS = 6e4;
94
- function buildActiveForm(subject) {
95
- return `Working on ${subject}`;
96
- }
97
94
  var TaskStoreLockError = class extends Error {
98
95
  code = "TASK_STORE_LOCKED";
99
96
  constructor(message) {
@@ -304,7 +301,7 @@ function readTaskFile(path) {
304
301
  return null;
305
302
  }
306
303
  const subject = data.subject ?? data.title;
307
- const activeForm = data.activeForm ?? buildActiveForm(subject);
304
+ const activeForm = data.activeForm;
308
305
  const baseVersion = typeof data.baseVersion === "number" ? data.baseVersion : typeof data.version === "number" ? data.version : 1;
309
306
  const version = typeof data.version === "number" ? data.version : baseVersion;
310
307
  const createdAt = typeof data.createdAt === "number" ? data.createdAt : Date.now();
@@ -475,7 +472,7 @@ function withTaskListLock(paths, handler) {
475
472
  function applyTaskUpdates(task, updates, nextBaseVersion) {
476
473
  const now = updates.updatedAt ?? Date.now();
477
474
  const subject = updates.subject ?? task.subject;
478
- const activeForm = updates.activeForm ?? (updates.subject ? buildActiveForm(subject) : task.activeForm ?? buildActiveForm(subject));
475
+ const activeForm = updates.activeForm ?? task.activeForm;
479
476
  const blockedBy = updates.blockedBy ?? task.blockedBy ?? [];
480
477
  const nextStatus = updates.status ?? task.status;
481
478
  const status = nextStatus === "open" ? task.status : nextStatus;
@@ -513,7 +510,10 @@ function createTask(input, options) {
513
510
  if (!subject) {
514
511
  throw new Error("Task subject is required");
515
512
  }
516
- const activeForm = input.activeForm ?? buildActiveForm(subject);
513
+ if (!input.activeForm) {
514
+ throw new Error("Task activeForm is required");
515
+ }
516
+ const activeForm = input.activeForm;
517
517
  const status = input.status ?? "pending";
518
518
  if (status === "open") {
519
519
  throw new Error("Task status open is not supported");
@@ -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 = 'pending' | 'in_progress' | 'blocked' | 'done' | 'archived'\nexport type TaskStatusInput = TaskStatus | 'open'\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?: TaskStatusInput\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\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 pending: 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<{\n nextId?: number\n total?: number\n byStatus?: Record<string, number>\n lastUpdated?: number\n }>(paths.indexPath)\n if (index && typeof index.nextId === 'number' && index.nextId >= 1) {\n const byStatus = index.byStatus ?? {}\n const pending =\n typeof byStatus.pending === 'number'\n ? byStatus.pending\n : typeof byStatus.open === 'number'\n ? byStatus.open\n : 0\n return {\n nextId: index.nextId,\n total: typeof index.total === 'number' ? index.total : 0,\n byStatus: {\n pending,\n in_progress:\n typeof byStatus.in_progress === 'number' ? byStatus.in_progress : 0,\n blocked: typeof byStatus.blocked === 'number' ? byStatus.blocked : 0,\n done: typeof byStatus.done === 'number' ? byStatus.done : 0,\n archived: typeof byStatus.archived === 'number' ? byStatus.archived : 0,\n },\n lastUpdated:\n typeof index.lastUpdated === 'number' ? index.lastUpdated : Date.now(),\n }\n }\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<\n Partial<Omit<TaskRecord, 'status'>> & {\n status?: TaskStatusInput | string\n title?: string\n version?: number\n }\n >(path)\n if (!data || !data.id || (!data.subject && !data.title) || !data.status) {\n return null\n }\n const status = data.status === 'open' ? 'pending' : data.status\n if (\n status !== 'pending' &&\n status !== 'in_progress' &&\n status !== 'blocked' &&\n status !== 'done' &&\n status !== 'archived'\n ) {\n return null\n }\n const subject = data.subject ?? data.title\n const activeForm = data.activeForm\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,\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 pending: 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 = updates.activeForm ?? task.activeForm\n const blockedBy = updates.blockedBy ?? task.blockedBy ?? []\n const nextStatus = updates.status ?? task.status\n const status = nextStatus === 'open' ? task.status : nextStatus\n return {\n ...task,\n subject,\n description: updates.description ?? task.description,\n activeForm,\n 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 if (input.status === 'open') {\n throw new Error('Task status open is not supported')\n }\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 if (!input.activeForm) {\n throw new Error('Task activeForm is required')\n }\n const activeForm = input.activeForm\n const status = input.status ?? 'pending'\n if (status === 'open') {\n throw new Error('Task status open is not supported')\n }\n const record: TaskRecord = {\n id,\n subject,\n description: input.description,\n activeForm,\n status,\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 if (updates.status === 'open') {\n throw new Error('Task status open is not supported')\n }\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 'pending'\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.pending}_${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}, Pending: ${summary.pending}, 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
+ }