pybao-cli 1.4.98 → 1.5.0

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 (152) hide show
  1. package/dist/REPL-XTWJQCGP.js +49 -0
  2. package/dist/{acp-OYNDAMUG.js → acp-SAL4EP5J.js} +30 -30
  3. package/dist/{agentsValidate-CSJFTPMF.js → agentsValidate-C6YKUGF7.js} +7 -7
  4. package/dist/{ask-RUL7DBVW.js → ask-HGYWJZS2.js} +29 -29
  5. package/dist/{autoUpdater-2US37QCD.js → autoUpdater-KPHKCCCG.js} +3 -3
  6. package/dist/{chunk-X3S6OAMU.js → chunk-2ASJ2ZXT.js} +2 -2
  7. package/dist/{chunk-EKCV6FAR.js → chunk-3AOEQNVF.js} +3 -3
  8. package/dist/{chunk-HIRKT55M.js → chunk-3GHP4ZYL.js} +3 -3
  9. package/dist/{chunk-VFEFTBAX.js → chunk-3LJHZG66.js} +2 -2
  10. package/dist/{chunk-FUO4GQ7W.js → chunk-3LNF2KW3.js} +1 -1
  11. package/dist/chunk-3LNF2KW3.js.map +7 -0
  12. package/dist/{chunk-57TUHQTK.js → chunk-4VJCTBGJ.js} +1 -1
  13. package/dist/{chunk-FTXV6D26.js → chunk-6SKPT5PO.js} +1 -1
  14. package/dist/{chunk-ZT2EDUJ5.js → chunk-7WOVOXMQ.js} +1 -1
  15. package/dist/{chunk-6CZGZTTR.js → chunk-C35G3PBK.js} +4 -4
  16. package/dist/{chunk-7HPC6NEL.js → chunk-FYBZ3YQE.js} +4 -4
  17. package/dist/{chunk-G2NDX3AE.js → chunk-GIADXQL5.js} +1 -1
  18. package/dist/{chunk-N6RZW54E.js → chunk-I6OHRNKP.js} +1 -1
  19. package/dist/{chunk-MSUD3TJP.js → chunk-IPFCYGNA.js} +3 -3
  20. package/dist/{chunk-JN7LIP22.js → chunk-JE5NAHTD.js} +2 -2
  21. package/dist/{chunk-KJLAOYAB.js → chunk-KCFPJKWW.js} +207 -94
  22. package/dist/chunk-KCFPJKWW.js.map +7 -0
  23. package/dist/{chunk-WS3OA4DJ.js → chunk-KGDEFE3J.js} +1 -1
  24. package/dist/{chunk-Y56ETINA.js → chunk-LFL6UX3A.js} +4 -4
  25. package/dist/{chunk-QCPTRT42.js → chunk-LOJMWCX3.js} +1 -1
  26. package/dist/{chunk-6CFLL7MP.js → chunk-NOBHSMZC.js} +3 -3
  27. package/dist/{chunk-NJY725BV.js → chunk-OLROXGX5.js} +3 -3
  28. package/dist/{chunk-AQDHWNHO.js → chunk-QHIPHNA3.js} +1 -1
  29. package/dist/{chunk-7YOXNCGC.js → chunk-RQD4IK2S.js} +8 -76
  30. package/dist/chunk-RQD4IK2S.js.map +7 -0
  31. package/dist/{chunk-5SASDPJI.js → chunk-SWAY3K6C.js} +17 -25
  32. package/dist/{chunk-5SASDPJI.js.map → chunk-SWAY3K6C.js.map} +2 -2
  33. package/dist/{chunk-736LB6QF.js → chunk-TIVWTFPO.js} +3 -3
  34. package/dist/{chunk-ELZOI2EN.js → chunk-VQDEUTRM.js} +1 -1
  35. package/dist/{chunk-5FPVUG76.js → chunk-WAHZEY6D.js} +1 -1
  36. package/dist/{chunk-6W4QXF5T.js → chunk-WKC5WKYW.js} +2 -2
  37. package/dist/{chunk-277MFG2S.js → chunk-XAAHVHOO.js} +2 -2
  38. package/dist/{chunk-XFAWFKEO.js → chunk-XDZGNZH4.js} +4 -4
  39. package/dist/{chunk-NFCKELD5.js → chunk-Y36VNIZL.js} +2 -2
  40. package/dist/{chunk-45KNYAUE.js → chunk-ZM3QKHBL.js} +3 -3
  41. package/dist/{cli-EW2FS2BF.js → cli-GHECZSHS.js} +89 -89
  42. package/dist/commands-GBM4GBRX.js +53 -0
  43. package/dist/{config-VMG22F4D.js → config-CTLYJJBD.js} +4 -4
  44. package/dist/{context-RCECS2MV.js → context-E2QU37Y5.js} +6 -6
  45. package/dist/{conversationTracker-EDZLP7O4.js → conversationTracker-U4OXNLGV.js} +3 -3
  46. package/dist/{customCommands-B6RXZMP5.js → customCommands-RQRKKSHO.js} +4 -4
  47. package/dist/{env-YTAL5KRK.js → env-L2BPT5X6.js} +2 -2
  48. package/dist/{file-OOCDMD3U.js → file-D2K7KAMP.js} +4 -4
  49. package/dist/index.js +3 -3
  50. package/dist/{llm-R5NWZO5G.js → llm-BNSWKO5H.js} +30 -30
  51. package/dist/{llmLazy-VWKTHJ4M.js → llmLazy-4Q7PQTA7.js} +1 -1
  52. package/dist/{loader-WWGN7JMY.js → loader-YFCZ4BDY.js} +4 -4
  53. package/dist/{lsp-YT4SHOXN.js → lsp-C22XTWJ2.js} +6 -6
  54. package/dist/{lspAnchor-B3LGI6VC.js → lspAnchor-Q5HVYXDG.js} +6 -6
  55. package/dist/{mcp-AIT7BP27.js → mcp-G6F3HTBX.js} +7 -7
  56. package/dist/{mentionProcessor-TTRH7MSS.js → mentionProcessor-QFOV4EID.js} +5 -5
  57. package/dist/{messages-V5YRA4WO.js → messages-MJADVQLI.js} +1 -1
  58. package/dist/{model-7QLTSWZV.js → model-EAGYR44H.js} +5 -5
  59. package/dist/{openai-O5UTQHNX.js → openai-QDVCKCWO.js} +5 -5
  60. package/dist/{outputStyles-CUYPATTD.js → outputStyles-6VDI5PML.js} +4 -4
  61. package/dist/{pluginRuntime-Z3VUXLLL.js → pluginRuntime-LDS7EVLY.js} +6 -6
  62. package/dist/{pluginValidation-OIFMXGZW.js → pluginValidation-QLMPU2AY.js} +6 -6
  63. package/dist/prompts-S5K332CK.js +55 -0
  64. package/dist/{pybAgentSessionLoad-YE3R7GCM.js → pybAgentSessionLoad-VIRMSYB6.js} +4 -4
  65. package/dist/{pybAgentSessionResume-H3X4E5WZ.js → pybAgentSessionResume-N5ZNISL4.js} +4 -4
  66. package/dist/{pybAgentStreamJsonSession-LBTQ5QVA.js → pybAgentStreamJsonSession-PC7IBPVT.js} +1 -1
  67. package/dist/{pybHooks-ICFUKF5J.js → pybHooks-77BWG6PM.js} +4 -4
  68. package/dist/query-3C42H2KQ.js +57 -0
  69. package/dist/{registry-U5KXMAQT.js → registry-4R56WZ2F.js} +5 -5
  70. package/dist/{ripgrep-WWOPEBCI.js → ripgrep-JB5BUTEY.js} +3 -3
  71. package/dist/{skillMarketplace-P7BGMBU7.js → skillMarketplace-CLZ4AWZB.js} +3 -3
  72. package/dist/{state-BNEI4WAC.js → state-GHWTTEKJ.js} +2 -2
  73. package/dist/{theme-4JWO3G3X.js → theme-JO4GZK2B.js} +5 -5
  74. package/dist/{toolPermissionSettings-LQLARZGN.js → toolPermissionSettings-4PNGLWZU.js} +6 -6
  75. package/dist/tools-VIPBGGMM.js +54 -0
  76. package/dist/{userInput-GMSZGZQS.js → userInput-FOKPASU4.js} +31 -31
  77. package/package.json +1 -1
  78. package/dist/REPL-HSLBK5NZ.js +0 -49
  79. package/dist/chunk-7YOXNCGC.js.map +0 -7
  80. package/dist/chunk-FUO4GQ7W.js.map +0 -7
  81. package/dist/chunk-KJLAOYAB.js.map +0 -7
  82. package/dist/commands-ED3B27YA.js +0 -53
  83. package/dist/prompts-VSYX4Z3H.js +0 -55
  84. package/dist/query-3MCWSQFG.js +0 -57
  85. package/dist/tools-6AAIJTHG.js +0 -54
  86. /package/dist/{REPL-HSLBK5NZ.js.map → REPL-XTWJQCGP.js.map} +0 -0
  87. /package/dist/{acp-OYNDAMUG.js.map → acp-SAL4EP5J.js.map} +0 -0
  88. /package/dist/{agentsValidate-CSJFTPMF.js.map → agentsValidate-C6YKUGF7.js.map} +0 -0
  89. /package/dist/{ask-RUL7DBVW.js.map → ask-HGYWJZS2.js.map} +0 -0
  90. /package/dist/{autoUpdater-2US37QCD.js.map → autoUpdater-KPHKCCCG.js.map} +0 -0
  91. /package/dist/{chunk-X3S6OAMU.js.map → chunk-2ASJ2ZXT.js.map} +0 -0
  92. /package/dist/{chunk-EKCV6FAR.js.map → chunk-3AOEQNVF.js.map} +0 -0
  93. /package/dist/{chunk-HIRKT55M.js.map → chunk-3GHP4ZYL.js.map} +0 -0
  94. /package/dist/{chunk-VFEFTBAX.js.map → chunk-3LJHZG66.js.map} +0 -0
  95. /package/dist/{chunk-57TUHQTK.js.map → chunk-4VJCTBGJ.js.map} +0 -0
  96. /package/dist/{chunk-FTXV6D26.js.map → chunk-6SKPT5PO.js.map} +0 -0
  97. /package/dist/{chunk-ZT2EDUJ5.js.map → chunk-7WOVOXMQ.js.map} +0 -0
  98. /package/dist/{chunk-6CZGZTTR.js.map → chunk-C35G3PBK.js.map} +0 -0
  99. /package/dist/{chunk-7HPC6NEL.js.map → chunk-FYBZ3YQE.js.map} +0 -0
  100. /package/dist/{chunk-G2NDX3AE.js.map → chunk-GIADXQL5.js.map} +0 -0
  101. /package/dist/{chunk-N6RZW54E.js.map → chunk-I6OHRNKP.js.map} +0 -0
  102. /package/dist/{chunk-MSUD3TJP.js.map → chunk-IPFCYGNA.js.map} +0 -0
  103. /package/dist/{chunk-JN7LIP22.js.map → chunk-JE5NAHTD.js.map} +0 -0
  104. /package/dist/{chunk-WS3OA4DJ.js.map → chunk-KGDEFE3J.js.map} +0 -0
  105. /package/dist/{chunk-Y56ETINA.js.map → chunk-LFL6UX3A.js.map} +0 -0
  106. /package/dist/{chunk-QCPTRT42.js.map → chunk-LOJMWCX3.js.map} +0 -0
  107. /package/dist/{chunk-6CFLL7MP.js.map → chunk-NOBHSMZC.js.map} +0 -0
  108. /package/dist/{chunk-NJY725BV.js.map → chunk-OLROXGX5.js.map} +0 -0
  109. /package/dist/{chunk-AQDHWNHO.js.map → chunk-QHIPHNA3.js.map} +0 -0
  110. /package/dist/{chunk-736LB6QF.js.map → chunk-TIVWTFPO.js.map} +0 -0
  111. /package/dist/{chunk-ELZOI2EN.js.map → chunk-VQDEUTRM.js.map} +0 -0
  112. /package/dist/{chunk-5FPVUG76.js.map → chunk-WAHZEY6D.js.map} +0 -0
  113. /package/dist/{chunk-6W4QXF5T.js.map → chunk-WKC5WKYW.js.map} +0 -0
  114. /package/dist/{chunk-277MFG2S.js.map → chunk-XAAHVHOO.js.map} +0 -0
  115. /package/dist/{chunk-XFAWFKEO.js.map → chunk-XDZGNZH4.js.map} +0 -0
  116. /package/dist/{chunk-NFCKELD5.js.map → chunk-Y36VNIZL.js.map} +0 -0
  117. /package/dist/{chunk-45KNYAUE.js.map → chunk-ZM3QKHBL.js.map} +0 -0
  118. /package/dist/{cli-EW2FS2BF.js.map → cli-GHECZSHS.js.map} +0 -0
  119. /package/dist/{commands-ED3B27YA.js.map → commands-GBM4GBRX.js.map} +0 -0
  120. /package/dist/{config-VMG22F4D.js.map → config-CTLYJJBD.js.map} +0 -0
  121. /package/dist/{context-RCECS2MV.js.map → context-E2QU37Y5.js.map} +0 -0
  122. /package/dist/{conversationTracker-EDZLP7O4.js.map → conversationTracker-U4OXNLGV.js.map} +0 -0
  123. /package/dist/{customCommands-B6RXZMP5.js.map → customCommands-RQRKKSHO.js.map} +0 -0
  124. /package/dist/{env-YTAL5KRK.js.map → env-L2BPT5X6.js.map} +0 -0
  125. /package/dist/{file-OOCDMD3U.js.map → file-D2K7KAMP.js.map} +0 -0
  126. /package/dist/{llm-R5NWZO5G.js.map → llm-BNSWKO5H.js.map} +0 -0
  127. /package/dist/{llmLazy-VWKTHJ4M.js.map → llmLazy-4Q7PQTA7.js.map} +0 -0
  128. /package/dist/{loader-WWGN7JMY.js.map → loader-YFCZ4BDY.js.map} +0 -0
  129. /package/dist/{lsp-YT4SHOXN.js.map → lsp-C22XTWJ2.js.map} +0 -0
  130. /package/dist/{lspAnchor-B3LGI6VC.js.map → lspAnchor-Q5HVYXDG.js.map} +0 -0
  131. /package/dist/{mcp-AIT7BP27.js.map → mcp-G6F3HTBX.js.map} +0 -0
  132. /package/dist/{mentionProcessor-TTRH7MSS.js.map → mentionProcessor-QFOV4EID.js.map} +0 -0
  133. /package/dist/{messages-V5YRA4WO.js.map → messages-MJADVQLI.js.map} +0 -0
  134. /package/dist/{model-7QLTSWZV.js.map → model-EAGYR44H.js.map} +0 -0
  135. /package/dist/{openai-O5UTQHNX.js.map → openai-QDVCKCWO.js.map} +0 -0
  136. /package/dist/{outputStyles-CUYPATTD.js.map → outputStyles-6VDI5PML.js.map} +0 -0
  137. /package/dist/{pluginRuntime-Z3VUXLLL.js.map → pluginRuntime-LDS7EVLY.js.map} +0 -0
  138. /package/dist/{pluginValidation-OIFMXGZW.js.map → pluginValidation-QLMPU2AY.js.map} +0 -0
  139. /package/dist/{prompts-VSYX4Z3H.js.map → prompts-S5K332CK.js.map} +0 -0
  140. /package/dist/{pybAgentSessionLoad-YE3R7GCM.js.map → pybAgentSessionLoad-VIRMSYB6.js.map} +0 -0
  141. /package/dist/{pybAgentSessionResume-H3X4E5WZ.js.map → pybAgentSessionResume-N5ZNISL4.js.map} +0 -0
  142. /package/dist/{pybAgentStreamJsonSession-LBTQ5QVA.js.map → pybAgentStreamJsonSession-PC7IBPVT.js.map} +0 -0
  143. /package/dist/{pybHooks-ICFUKF5J.js.map → pybHooks-77BWG6PM.js.map} +0 -0
  144. /package/dist/{query-3MCWSQFG.js.map → query-3C42H2KQ.js.map} +0 -0
  145. /package/dist/{registry-U5KXMAQT.js.map → registry-4R56WZ2F.js.map} +0 -0
  146. /package/dist/{ripgrep-WWOPEBCI.js.map → ripgrep-JB5BUTEY.js.map} +0 -0
  147. /package/dist/{skillMarketplace-P7BGMBU7.js.map → skillMarketplace-CLZ4AWZB.js.map} +0 -0
  148. /package/dist/{state-BNEI4WAC.js.map → state-GHWTTEKJ.js.map} +0 -0
  149. /package/dist/{theme-4JWO3G3X.js.map → theme-JO4GZK2B.js.map} +0 -0
  150. /package/dist/{toolPermissionSettings-LQLARZGN.js.map → toolPermissionSettings-4PNGLWZU.js.map} +0 -0
  151. /package/dist/{tools-6AAIJTHG.js.map → tools-VIPBGGMM.js.map} +0 -0
  152. /package/dist/{userInput-GMSZGZQS.js.map → userInput-FOKPASU4.js.map} +0 -0
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  logError
5
- } from "./chunk-57TUHQTK.js";
5
+ } from "./chunk-4VJCTBGJ.js";
6
6
 
7
7
  // src/utils/session/conversationMessageState.ts
8
8
  function mapFinishReason(rawReason) {
@@ -4,17 +4,17 @@ import {
4
4
  LspServerRegistry,
5
5
  findNearestRoot,
6
6
  getInstallNotices
7
- } from "./chunk-NJY725BV.js";
7
+ } from "./chunk-OLROXGX5.js";
8
8
  import {
9
9
  levenshtein
10
10
  } from "./chunk-UZ34JEUK.js";
11
11
  import {
12
12
  debug
13
- } from "./chunk-G2NDX3AE.js";
13
+ } from "./chunk-GIADXQL5.js";
14
14
  import {
15
15
  getCwd,
16
16
  getSessionRoot
17
- } from "./chunk-57TUHQTK.js";
17
+ } from "./chunk-4VJCTBGJ.js";
18
18
 
19
19
  // src/lsp/index.ts
20
20
  import { extname as extname2 } from "path";
@@ -565,7 +565,7 @@ var LspClientManager = class _LspClientManager {
565
565
  const safeCwd = /[^\x00-\x7F]/.test(resolvedRoot) ? process.cwd() : resolvedRoot;
566
566
  let initOpts = serverInfo.initializationOptions;
567
567
  if (serverInfo.id === "pyright" || serverInfo.id === "ty") {
568
- const { detectPythonVenv } = await import("./registry-U5KXMAQT.js");
568
+ const { detectPythonVenv } = await import("./registry-4R56WZ2F.js");
569
569
  const pythonPath = detectPythonVenv(resolvedRoot);
570
570
  if (pythonPath) {
571
571
  initOpts = { ...initOpts ?? {}, pythonPath };
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSessionProjectDir,
5
5
  getSessionProjectsDir
6
- } from "./chunk-NFCKELD5.js";
6
+ } from "./chunk-Y36VNIZL.js";
7
7
  import {
8
8
  isUuid
9
9
  } from "./chunk-5P7HBXTD.js";
@@ -8,14 +8,14 @@ import {
8
8
  getSettingsFileCandidates,
9
9
  loadSettingsWithLegacyFallback,
10
10
  saveSettingsToPrimaryAndSyncLegacy
11
- } from "./chunk-FTXV6D26.js";
11
+ } from "./chunk-6SKPT5PO.js";
12
12
  import {
13
13
  getCurrentProjectConfig
14
- } from "./chunk-736LB6QF.js";
14
+ } from "./chunk-TIVWTFPO.js";
15
15
  import {
16
16
  getCwd,
17
17
  logError
18
- } from "./chunk-57TUHQTK.js";
18
+ } from "./chunk-4VJCTBGJ.js";
19
19
 
20
20
  // src/utils/permissions/toolPermissionSettings.ts
21
21
  function uniqueStrings(value) {
@@ -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-FTXV6D26.js";
5
+ } from "./chunk-6SKPT5PO.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-G2NDX3AE.js";
8
+ } from "./chunk-GIADXQL5.js";
9
9
  import {
10
10
  env,
11
11
  getSessionRoot,
12
12
  resolveXdgDataPath
13
- } from "./chunk-57TUHQTK.js";
13
+ } from "./chunk-4VJCTBGJ.js";
14
14
  import {
15
15
  __require
16
16
  } from "./chunk-I3J4JYES.js";
@@ -5,7 +5,7 @@ import {
5
5
  getCwd,
6
6
  resolveXdgCachePath,
7
7
  resolveXdgDataPath
8
- } from "./chunk-57TUHQTK.js";
8
+ } from "./chunk-4VJCTBGJ.js";
9
9
 
10
10
  // src/services/plugins/skillMarketplace.ts
11
11
  import {
@@ -2,10 +2,10 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  debug
5
- } from "./chunk-G2NDX3AE.js";
5
+ } from "./chunk-GIADXQL5.js";
6
6
  import {
7
7
  logError
8
- } from "./chunk-57TUHQTK.js";
8
+ } from "./chunk-4VJCTBGJ.js";
9
9
 
10
10
  // src/services/system/systemReminder.ts
11
11
  var SystemReminderService = class {
@@ -19,7 +19,7 @@ var SystemReminderService = class {
19
19
  taskEventTimestamps: /* @__PURE__ */ new Map(),
20
20
  config: {
21
21
  securityReminder: true,
22
- performanceReminder: true,
22
+ performanceReminder: false,
23
23
  maxRemindersPerSession: 10
24
24
  }
25
25
  };
@@ -106,25 +106,6 @@ var SystemReminderService = class {
106
106
  const mentionTypes = ["agent_mention", "file_mention", "ask_model_mention"];
107
107
  return mentionTypes.includes(reminder.type);
108
108
  }
109
- generateFileChangeReminder(context) {
110
- const { agentId, filePath, reminder } = context;
111
- if (!reminder) {
112
- return null;
113
- }
114
- const currentTime = Date.now();
115
- const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`;
116
- if (this.sessionState.remindersSent.has(reminderKey)) {
117
- return null;
118
- }
119
- this.sessionState.remindersSent.add(reminderKey);
120
- return this.createReminderMessage(
121
- "file_changed",
122
- "general",
123
- "medium",
124
- reminder,
125
- currentTime
126
- );
127
- }
128
109
  createReminderMessage(type, category, priority, content, timestamp) {
129
110
  return {
130
111
  role: "system",
@@ -244,80 +225,31 @@ ${content}
244
225
  const key = `task_list_${context.listId}`;
245
226
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
246
227
  this.sessionState.lastTaskUpdate = Date.now();
247
- const reminder = this.createTaskListReminder(context);
248
- if (reminder) {
249
- this.emitEvent("reminder:inject", {
250
- reminder: reminder.content,
251
- listId: context.listId,
252
- type: "task_list_changed",
253
- timestamp: Date.now()
254
- });
255
- }
256
228
  });
257
229
  this.addEventListener("task:ready_changed", (context) => {
258
230
  const key = `task_ready_${context.listId}`;
259
231
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
260
- const reminder = this.createTaskReadyReminder(context);
261
- if (reminder) {
262
- this.emitEvent("reminder:inject", {
263
- reminder: reminder.content,
264
- listId: context.listId,
265
- type: "task_ready_changed",
266
- timestamp: Date.now()
267
- });
268
- }
232
+ this.sessionState.lastTaskUpdate = Date.now();
269
233
  });
270
234
  this.addEventListener("task.created", (context) => {
271
235
  const key = `task_created_${context.listId}_${context.taskId}`;
272
236
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
273
- const reminder = this.createTaskCreatedReminder(context);
274
- if (reminder) {
275
- this.emitEvent("reminder:inject", {
276
- reminder: reminder.content,
277
- listId: context.listId,
278
- type: reminder.type,
279
- timestamp: reminder.timestamp
280
- });
281
- }
237
+ this.sessionState.lastTaskUpdate = Date.now();
282
238
  });
283
239
  this.addEventListener("task.updated", (context) => {
284
240
  const key = `task_updated_${context.listId}_${context.taskId}`;
285
241
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
286
- const reminder = this.createTaskUpdatedReminder(context);
287
- if (reminder) {
288
- this.emitEvent("reminder:inject", {
289
- reminder: reminder.content,
290
- listId: context.listId,
291
- type: reminder.type,
292
- timestamp: reminder.timestamp
293
- });
294
- }
242
+ this.sessionState.lastTaskUpdate = Date.now();
295
243
  });
296
244
  this.addEventListener("task.status_changed", (context) => {
297
245
  const key = `task_status_${context.listId}_${context.taskId}`;
298
246
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
299
- const reminder = this.createTaskStatusReminder(context);
300
- if (reminder) {
301
- this.emitEvent("reminder:inject", {
302
- reminder: reminder.content,
303
- listId: context.listId,
304
- type: reminder.type,
305
- timestamp: reminder.timestamp
306
- });
307
- }
247
+ this.sessionState.lastTaskUpdate = Date.now();
308
248
  });
309
249
  this.addEventListener("task.deps_changed", (context) => {
310
250
  const key = `task_deps_${context.listId}_${context.taskId}`;
311
251
  if (!this.shouldEmitTaskReminder(key, 2e3)) return;
312
- const reminder = this.createTaskDepsReminder(context);
313
- if (reminder) {
314
- this.emitEvent("reminder:inject", {
315
- reminder: reminder.content,
316
- listId: context.listId,
317
- type: reminder.type,
318
- timestamp: reminder.timestamp
319
- });
320
- }
252
+ this.sessionState.lastTaskUpdate = Date.now();
321
253
  });
322
254
  this.addEventListener("file:read", (context) => {
323
255
  this.sessionState.lastFileAccess = Date.now();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/system/systemReminder.ts"],
4
+ "sourcesContent": ["import { 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 securityReminder: boolean\n performanceReminder: boolean\n maxRemindersPerSession: number\n}\n\ninterface SessionReminderState {\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 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 securityReminder: true,\n performanceReminder: false,\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\n const reminderGenerators = [\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 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 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 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.deleted}`\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}, Deleted: ${summary.deleted}.`,\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 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}`\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('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 })\n\n this.addEventListener('task:ready_changed', context => {\n const key = `task_ready_${context.listId}`\n if (!this.shouldEmitTaskReminder(key, 2000)) return\n this.sessionState.lastTaskUpdate = Date.now()\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 this.sessionState.lastTaskUpdate = Date.now()\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 this.sessionState.lastTaskUpdate = Date.now()\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 this.sessionState.lastTaskUpdate = Date.now()\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 this.sessionState.lastTaskUpdate = Date.now()\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 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 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": []
7
+ }
@@ -39,57 +39,57 @@ import {
39
39
  runWithTaskListEnv,
40
40
  runWithTaskListId,
41
41
  updateTask
42
- } from "./chunk-KJLAOYAB.js";
42
+ } from "./chunk-KCFPJKWW.js";
43
43
  import {
44
44
  queryLLM
45
- } from "./chunk-XFAWFKEO.js";
45
+ } from "./chunk-XDZGNZH4.js";
46
46
  import {
47
47
  FallbackToolUseRejectedMessage,
48
48
  MCPTool,
49
49
  getClients,
50
50
  getMCPTools
51
- } from "./chunk-7HPC6NEL.js";
51
+ } from "./chunk-FYBZ3YQE.js";
52
52
  import {
53
53
  emitReminderEvent
54
- } from "./chunk-7YOXNCGC.js";
54
+ } from "./chunk-RQD4IK2S.js";
55
55
  import {
56
56
  getActiveAgents,
57
57
  getAgentByType,
58
58
  getAvailableAgentTypes
59
- } from "./chunk-6W4QXF5T.js";
59
+ } from "./chunk-WKC5WKYW.js";
60
60
  import {
61
61
  INTERRUPT_MESSAGE,
62
62
  createAssistantMessage,
63
63
  createUserMessage,
64
64
  getLastAssistantMessageId
65
- } from "./chunk-5FPVUG76.js";
65
+ } from "./chunk-WAHZEY6D.js";
66
66
  import {
67
67
  formatDuration,
68
68
  formatNumber
69
69
  } from "./chunk-OUXHGDLH.js";
70
70
  import {
71
71
  getAbsolutePath
72
- } from "./chunk-VFEFTBAX.js";
72
+ } from "./chunk-3LJHZG66.js";
73
73
  import {
74
74
  LspFacade,
75
75
  formatDiagnosticsPretty
76
- } from "./chunk-Y56ETINA.js";
76
+ } from "./chunk-LFL6UX3A.js";
77
77
  import {
78
78
  getModelManager
79
- } from "./chunk-MSUD3TJP.js";
79
+ } from "./chunk-IPFCYGNA.js";
80
80
  import {
81
81
  getContext
82
- } from "./chunk-6CZGZTTR.js";
82
+ } from "./chunk-C35G3PBK.js";
83
83
  import {
84
84
  filesToTree,
85
85
  ripGrepWithStatus
86
- } from "./chunk-ZT2EDUJ5.js";
86
+ } from "./chunk-7WOVOXMQ.js";
87
87
  import {
88
88
  getTheme
89
- } from "./chunk-ELZOI2EN.js";
89
+ } from "./chunk-VQDEUTRM.js";
90
90
  import {
91
91
  debug
92
- } from "./chunk-G2NDX3AE.js";
92
+ } from "./chunk-GIADXQL5.js";
93
93
  import {
94
94
  BunShell,
95
95
  MEMORY_DIR,
@@ -101,7 +101,7 @@ import {
101
101
  overwriteLog,
102
102
  readTaskOutput,
103
103
  resolveXdgDataPath
104
- } from "./chunk-57TUHQTK.js";
104
+ } from "./chunk-4VJCTBGJ.js";
105
105
 
106
106
  // src/tools/index.ts
107
107
  import { memoize as memoize2 } from "lodash-es";
@@ -780,7 +780,7 @@ async function analyzeOutputWithLsp(output, exitCode) {
780
780
  if (exitCode !== 0 || errorCount > 0 || warningCount > 0) {
781
781
  try {
782
782
  const { isAbsolute: isAbsolute3, resolve: resolve4 } = await import("path");
783
- const { getSessionRoot: getSessionRoot2 } = await import("./state-BNEI4WAC.js");
783
+ const { getSessionRoot: getSessionRoot2 } = await import("./state-GHWTTEKJ.js");
784
784
  const lines = output.split("\n");
785
785
  const uniqueFiles = /* @__PURE__ */ new Set();
786
786
  const lspSuggestions = [];
@@ -1153,7 +1153,7 @@ var DeleteTool = {
1153
1153
  }
1154
1154
  if (!force) {
1155
1155
  try {
1156
- const { LspFacade: LspFacade2 } = await import("./lsp-YT4SHOXN.js");
1156
+ const { LspFacade: LspFacade2 } = await import("./lsp-C22XTWJ2.js");
1157
1157
  const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
1158
1158
  if (referenceDetail) {
1159
1159
  failedItems.push(
@@ -1362,7 +1362,7 @@ var DESCRIPTION3 = `\u5217\u51FA\u6307\u5B9A\u76EE\u5F55\u7684\u4E00\u5C42\u5B8C
1362
1362
  // src/tools/lsTool/lsTool.tsx
1363
1363
  var MAX_FILES_LIMIT = 0;
1364
1364
  var TOP_LEVEL_LIMIT = 5e3;
1365
- var DISPLAY_LINE_LIMIT = 4;
1365
+ var DISPLAY_LINE_LIMIT = 1;
1366
1366
  var isEnabledFlag = (raw, defaultValue = false) => {
1367
1367
  const normalized = String(raw ?? "").trim().toLowerCase();
1368
1368
  if (!normalized) return defaultValue;
@@ -3741,14 +3741,6 @@ var TaskUpdateTool = {
3741
3741
  return task;
3742
3742
  });
3743
3743
  const candidateIds = new Set(candidateTasks.map((task) => task.id));
3744
- if (tasks.length > 1 && tasks[0]?.id !== updatedTask.id && (updatedTask.blockedBy?.length ?? 0) === 0) {
3745
- emitReminderEvent("task.dependency_chain_missing", {
3746
- listId,
3747
- taskId: updatedTask.id,
3748
- blockedBy: updatedTask.blockedBy ?? [],
3749
- timestamp: Date.now()
3750
- });
3751
- }
3752
3744
  const missingBlockedBy = getMissingBlockedBy(
3753
3745
  updatedTask.blockedBy,
3754
3746
  candidateIds