pybao-cli 1.3.21 → 1.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/REPL-U233WVGQ.js +42 -0
  2. package/dist/{acp-5COUMMLN.js → acp-MGSGKN7I.js} +26 -26
  3. package/dist/{agentsValidate-DKGJ5OX4.js → agentsValidate-E24UODFJ.js} +7 -7
  4. package/dist/{ask-QW644CAZ.js → ask-WVNNLMSZ.js} +25 -25
  5. package/dist/{autoUpdater-WUTZGWEM.js → autoUpdater-R5VI5NS5.js} +3 -3
  6. package/dist/{chunk-KANFF7SM.js → chunk-3BDBJ76H.js} +1 -1
  7. package/dist/{chunk-LCN6UMC2.js → chunk-3GSGGTNG.js} +1 -1
  8. package/dist/{chunk-YEDGG2CM.js → chunk-3NJ6JQ2M.js} +6 -12
  9. package/dist/chunk-3NJ6JQ2M.js.map +7 -0
  10. package/dist/{chunk-VXPAJIEJ.js → chunk-7OOX64M4.js} +3 -3
  11. package/dist/{chunk-4FSJIGYW.js → chunk-B4Z3JBM6.js} +2 -2
  12. package/dist/{chunk-Q27MKRQ5.js → chunk-BDRQU7KP.js} +4 -4
  13. package/dist/{chunk-YVLQDPDN.js → chunk-BHRZG737.js} +2 -2
  14. package/dist/{chunk-KAAPCK6R.js → chunk-BLZG4P4W.js} +4 -4
  15. package/dist/{chunk-Z7P6CYVJ.js → chunk-C27RUGNT.js} +2 -2
  16. package/dist/{chunk-PF3A6LJD.js → chunk-D5XZE6VD.js} +1 -1
  17. package/dist/{chunk-RSCGHYX4.js → chunk-HIN7NLKB.js} +3 -3
  18. package/dist/{chunk-3NZTTP2W.js → chunk-JPR5LF4I.js} +33 -33
  19. package/dist/{chunk-3NZTTP2W.js.map → chunk-JPR5LF4I.js.map} +2 -2
  20. package/dist/{chunk-PJ2UYD4Q.js → chunk-JZTNGHID.js} +2 -2
  21. package/dist/{chunk-6IQ6RNSC.js → chunk-O6LTYDEM.js} +2 -2
  22. package/dist/{chunk-WU4SXVFN.js → chunk-OFNZCXTL.js} +1130 -345
  23. package/dist/chunk-OFNZCXTL.js.map +7 -0
  24. package/dist/{chunk-HJPCQROC.js → chunk-OK6YLALO.js} +1 -1
  25. package/dist/{chunk-DTOUFBLG.js → chunk-Q6NZXTU7.js} +3 -3
  26. package/dist/{chunk-ZQLAZEQ6.js → chunk-QKK7OEVT.js} +1 -1
  27. package/dist/{chunk-X2LHX4TN.js → chunk-QPYMEJ7J.js} +1 -1
  28. package/dist/{chunk-IA565ACR.js → chunk-RGMQE5W7.js} +3 -3
  29. package/dist/{chunk-UDXJD3B5.js → chunk-RQHQ3V5R.js} +1 -1
  30. package/dist/{chunk-UDXJD3B5.js.map → chunk-RQHQ3V5R.js.map} +1 -1
  31. package/dist/{chunk-Q74XWGWS.js → chunk-SPSZIFD3.js} +1 -1
  32. package/dist/{chunk-TBU6CIW7.js → chunk-TB6NRY5H.js} +1 -1
  33. package/dist/{chunk-LTUBDTY7.js → chunk-UDHQY254.js} +1 -1
  34. package/dist/{chunk-ILKTL4HO.js → chunk-VHPGBFI2.js} +2 -2
  35. package/dist/{chunk-LFT6GMDJ.js → chunk-VNX4XL5W.js} +3 -3
  36. package/dist/{chunk-PWZPQLA5.js → chunk-Z3QCGGDI.js} +3 -3
  37. package/dist/{cli-5AQQAMDZ.js → cli-VHCSI3MC.js} +77 -77
  38. package/dist/commands-OAY7CB4V.js +46 -0
  39. package/dist/{config-XUTCS32D.js → config-L3IXWETT.js} +4 -4
  40. package/dist/{context-BJBOG5ML.js → context-F2IIOXEP.js} +5 -5
  41. package/dist/{customCommands-FCGJVPMM.js → customCommands-POVQCNWI.js} +4 -4
  42. package/dist/{env-PCEHNXQ7.js → env-5OAJSWRZ.js} +2 -2
  43. package/dist/index.js +3 -3
  44. package/dist/{llm-YXYHYLLL.js → llm-TQRNSHD2.js} +26 -26
  45. package/dist/{llmLazy-BWNMELGK.js → llmLazy-LP3VLWST.js} +1 -1
  46. package/dist/{loader-UXDARCPS.js → loader-LERT53VD.js} +4 -4
  47. package/dist/{mcp-OD4RSPAA.js → mcp-7WABABD5.js} +7 -7
  48. package/dist/{mentionProcessor-MRLHJCG7.js → mentionProcessor-3EES7EOM.js} +5 -5
  49. package/dist/{messages-WDA7YIIR.js → messages-KDYSBWPF.js} +1 -1
  50. package/dist/{model-E7A4ZTH3.js → model-H5SZYB3G.js} +5 -5
  51. package/dist/{openai-6VE4E33T.js → openai-OJDXHXW7.js} +5 -5
  52. package/dist/{outputStyles-ALNI7DMM.js → outputStyles-KPZL4IL6.js} +4 -4
  53. package/dist/{pluginRuntime-ZJM5CYBI.js → pluginRuntime-FMYJ2OLJ.js} +6 -6
  54. package/dist/{pluginValidation-P7F37TRM.js → pluginValidation-3XL3376C.js} +6 -6
  55. package/dist/prompts-5ZSQVFA4.js +48 -0
  56. package/dist/{pybAgentSessionLoad-DXA2GXAD.js → pybAgentSessionLoad-CWFVVJJP.js} +4 -4
  57. package/dist/{pybAgentSessionResume-GSTPB6PZ.js → pybAgentSessionResume-NOZGRPWX.js} +4 -4
  58. package/dist/{pybAgentStreamJsonSession-NJYZ5ZC5.js → pybAgentStreamJsonSession-XJBNIDCX.js} +1 -1
  59. package/dist/{pybHooks-G4QW3QWC.js → pybHooks-X4Z6SUM3.js} +4 -4
  60. package/dist/query-I6RAXHNW.js +50 -0
  61. package/dist/{ripgrep-RLDVZ7XG.js → ripgrep-2FLGSL5E.js} +3 -3
  62. package/dist/{skillMarketplace-N45WWBB3.js → skillMarketplace-EZFJG2VQ.js} +3 -3
  63. package/dist/{state-PVTHPFRK.js → state-TJYRRWRD.js} +2 -2
  64. package/dist/{theme-7YQL4AQ4.js → theme-XFYRVMO2.js} +5 -5
  65. package/dist/{toolPermissionSettings-EGYQOIYG.js → toolPermissionSettings-DFXSQ5HV.js} +6 -6
  66. package/dist/tools-CNY53VUO.js +47 -0
  67. package/dist/{userInput-6Z5PYOLR.js → userInput-EU5BLE3W.js} +27 -27
  68. package/package.json +1 -1
  69. package/dist/REPL-4QRH44HC.js +0 -42
  70. package/dist/chunk-WU4SXVFN.js.map +0 -7
  71. package/dist/chunk-YEDGG2CM.js.map +0 -7
  72. package/dist/commands-UAI6QEAI.js +0 -46
  73. package/dist/prompts-VPJ5WN33.js +0 -48
  74. package/dist/query-LGA6DMR3.js +0 -50
  75. package/dist/tools-CMR3PLSX.js +0 -47
  76. /package/dist/{REPL-4QRH44HC.js.map → REPL-U233WVGQ.js.map} +0 -0
  77. /package/dist/{acp-5COUMMLN.js.map → acp-MGSGKN7I.js.map} +0 -0
  78. /package/dist/{agentsValidate-DKGJ5OX4.js.map → agentsValidate-E24UODFJ.js.map} +0 -0
  79. /package/dist/{ask-QW644CAZ.js.map → ask-WVNNLMSZ.js.map} +0 -0
  80. /package/dist/{autoUpdater-WUTZGWEM.js.map → autoUpdater-R5VI5NS5.js.map} +0 -0
  81. /package/dist/{chunk-KANFF7SM.js.map → chunk-3BDBJ76H.js.map} +0 -0
  82. /package/dist/{chunk-LCN6UMC2.js.map → chunk-3GSGGTNG.js.map} +0 -0
  83. /package/dist/{chunk-VXPAJIEJ.js.map → chunk-7OOX64M4.js.map} +0 -0
  84. /package/dist/{chunk-4FSJIGYW.js.map → chunk-B4Z3JBM6.js.map} +0 -0
  85. /package/dist/{chunk-Q27MKRQ5.js.map → chunk-BDRQU7KP.js.map} +0 -0
  86. /package/dist/{chunk-YVLQDPDN.js.map → chunk-BHRZG737.js.map} +0 -0
  87. /package/dist/{chunk-KAAPCK6R.js.map → chunk-BLZG4P4W.js.map} +0 -0
  88. /package/dist/{chunk-Z7P6CYVJ.js.map → chunk-C27RUGNT.js.map} +0 -0
  89. /package/dist/{chunk-PF3A6LJD.js.map → chunk-D5XZE6VD.js.map} +0 -0
  90. /package/dist/{chunk-RSCGHYX4.js.map → chunk-HIN7NLKB.js.map} +0 -0
  91. /package/dist/{chunk-PJ2UYD4Q.js.map → chunk-JZTNGHID.js.map} +0 -0
  92. /package/dist/{chunk-6IQ6RNSC.js.map → chunk-O6LTYDEM.js.map} +0 -0
  93. /package/dist/{chunk-HJPCQROC.js.map → chunk-OK6YLALO.js.map} +0 -0
  94. /package/dist/{chunk-DTOUFBLG.js.map → chunk-Q6NZXTU7.js.map} +0 -0
  95. /package/dist/{chunk-ZQLAZEQ6.js.map → chunk-QKK7OEVT.js.map} +0 -0
  96. /package/dist/{chunk-X2LHX4TN.js.map → chunk-QPYMEJ7J.js.map} +0 -0
  97. /package/dist/{chunk-IA565ACR.js.map → chunk-RGMQE5W7.js.map} +0 -0
  98. /package/dist/{chunk-Q74XWGWS.js.map → chunk-SPSZIFD3.js.map} +0 -0
  99. /package/dist/{chunk-TBU6CIW7.js.map → chunk-TB6NRY5H.js.map} +0 -0
  100. /package/dist/{chunk-LTUBDTY7.js.map → chunk-UDHQY254.js.map} +0 -0
  101. /package/dist/{chunk-ILKTL4HO.js.map → chunk-VHPGBFI2.js.map} +0 -0
  102. /package/dist/{chunk-LFT6GMDJ.js.map → chunk-VNX4XL5W.js.map} +0 -0
  103. /package/dist/{chunk-PWZPQLA5.js.map → chunk-Z3QCGGDI.js.map} +0 -0
  104. /package/dist/{cli-5AQQAMDZ.js.map → cli-VHCSI3MC.js.map} +0 -0
  105. /package/dist/{commands-UAI6QEAI.js.map → commands-OAY7CB4V.js.map} +0 -0
  106. /package/dist/{config-XUTCS32D.js.map → config-L3IXWETT.js.map} +0 -0
  107. /package/dist/{context-BJBOG5ML.js.map → context-F2IIOXEP.js.map} +0 -0
  108. /package/dist/{customCommands-FCGJVPMM.js.map → customCommands-POVQCNWI.js.map} +0 -0
  109. /package/dist/{env-PCEHNXQ7.js.map → env-5OAJSWRZ.js.map} +0 -0
  110. /package/dist/{llm-YXYHYLLL.js.map → llm-TQRNSHD2.js.map} +0 -0
  111. /package/dist/{llmLazy-BWNMELGK.js.map → llmLazy-LP3VLWST.js.map} +0 -0
  112. /package/dist/{loader-UXDARCPS.js.map → loader-LERT53VD.js.map} +0 -0
  113. /package/dist/{mcp-OD4RSPAA.js.map → mcp-7WABABD5.js.map} +0 -0
  114. /package/dist/{mentionProcessor-MRLHJCG7.js.map → mentionProcessor-3EES7EOM.js.map} +0 -0
  115. /package/dist/{messages-WDA7YIIR.js.map → messages-KDYSBWPF.js.map} +0 -0
  116. /package/dist/{model-E7A4ZTH3.js.map → model-H5SZYB3G.js.map} +0 -0
  117. /package/dist/{openai-6VE4E33T.js.map → openai-OJDXHXW7.js.map} +0 -0
  118. /package/dist/{outputStyles-ALNI7DMM.js.map → outputStyles-KPZL4IL6.js.map} +0 -0
  119. /package/dist/{pluginRuntime-ZJM5CYBI.js.map → pluginRuntime-FMYJ2OLJ.js.map} +0 -0
  120. /package/dist/{pluginValidation-P7F37TRM.js.map → pluginValidation-3XL3376C.js.map} +0 -0
  121. /package/dist/{prompts-VPJ5WN33.js.map → prompts-5ZSQVFA4.js.map} +0 -0
  122. /package/dist/{pybAgentSessionLoad-DXA2GXAD.js.map → pybAgentSessionLoad-CWFVVJJP.js.map} +0 -0
  123. /package/dist/{pybAgentSessionResume-GSTPB6PZ.js.map → pybAgentSessionResume-NOZGRPWX.js.map} +0 -0
  124. /package/dist/{pybAgentStreamJsonSession-NJYZ5ZC5.js.map → pybAgentStreamJsonSession-XJBNIDCX.js.map} +0 -0
  125. /package/dist/{pybHooks-G4QW3QWC.js.map → pybHooks-X4Z6SUM3.js.map} +0 -0
  126. /package/dist/{query-LGA6DMR3.js.map → query-I6RAXHNW.js.map} +0 -0
  127. /package/dist/{ripgrep-RLDVZ7XG.js.map → ripgrep-2FLGSL5E.js.map} +0 -0
  128. /package/dist/{skillMarketplace-N45WWBB3.js.map → skillMarketplace-EZFJG2VQ.js.map} +0 -0
  129. /package/dist/{state-PVTHPFRK.js.map → state-TJYRRWRD.js.map} +0 -0
  130. /package/dist/{theme-7YQL4AQ4.js.map → theme-XFYRVMO2.js.map} +0 -0
  131. /package/dist/{toolPermissionSettings-EGYQOIYG.js.map → toolPermissionSettings-DFXSQ5HV.js.map} +0 -0
  132. /package/dist/{tools-CMR3PLSX.js.map → tools-CNY53VUO.js.map} +0 -0
  133. /package/dist/{userInput-6Z5PYOLR.js.map → userInput-EU5BLE3W.js.map} +0 -0
@@ -0,0 +1,42 @@
1
+ import { createRequire as __pybCreateRequire } from "node:module";
2
+ const require = __pybCreateRequire(import.meta.url);
3
+ import {
4
+ REPL
5
+ } from "./chunk-JPR5LF4I.js";
6
+ import "./chunk-D5XZE6VD.js";
7
+ import "./chunk-BDRQU7KP.js";
8
+ import "./chunk-HIN7NLKB.js";
9
+ import "./chunk-3BDBJ76H.js";
10
+ import "./chunk-OK6YLALO.js";
11
+ import "./chunk-C27RUGNT.js";
12
+ import "./chunk-5P7HBXTD.js";
13
+ import "./chunk-3DFBSQIT.js";
14
+ import "./chunk-3NJ6JQ2M.js";
15
+ import "./chunk-B6IMQJZM.js";
16
+ import "./chunk-B4Z3JBM6.js";
17
+ import "./chunk-VHPGBFI2.js";
18
+ import "./chunk-BLZG4P4W.js";
19
+ import "./chunk-SPSZIFD3.js";
20
+ import "./chunk-BHRZG737.js";
21
+ import "./chunk-7OOX64M4.js";
22
+ import "./chunk-QKK7OEVT.js";
23
+ import "./chunk-UNNVICVU.js";
24
+ import "./chunk-JZTNGHID.js";
25
+ import "./chunk-ERMQRV55.js";
26
+ import "./chunk-O6LTYDEM.js";
27
+ import "./chunk-A3BVXXA3.js";
28
+ import "./chunk-BJSWTHRM.js";
29
+ import "./chunk-3GSGGTNG.js";
30
+ import "./chunk-RGMQE5W7.js";
31
+ import "./chunk-Z3QCGGDI.js";
32
+ import "./chunk-QPYMEJ7J.js";
33
+ import "./chunk-VNX4XL5W.js";
34
+ import "./chunk-RQVLBMP7.js";
35
+ import "./chunk-UDHQY254.js";
36
+ import "./chunk-TB6NRY5H.js";
37
+ import "./chunk-RQHQ3V5R.js";
38
+ import "./chunk-OUXHGDLH.js";
39
+ import "./chunk-I3J4JYES.js";
40
+ export {
41
+ REPL
42
+ };
@@ -6,60 +6,60 @@ import {
6
6
  } from "./chunk-MWPFU2KU.js";
7
7
  import {
8
8
  getTools
9
- } from "./chunk-WU4SXVFN.js";
9
+ } from "./chunk-OFNZCXTL.js";
10
10
  import {
11
11
  getCommands,
12
12
  getSystemPrompt,
13
13
  grantReadPermissionForOriginalDir,
14
14
  hasPermissionsToUseTool,
15
15
  query
16
- } from "./chunk-3NZTTP2W.js";
17
- import "./chunk-PF3A6LJD.js";
16
+ } from "./chunk-JPR5LF4I.js";
17
+ import "./chunk-D5XZE6VD.js";
18
18
  import {
19
19
  getClients
20
- } from "./chunk-Q27MKRQ5.js";
21
- import "./chunk-RSCGHYX4.js";
22
- import "./chunk-KANFF7SM.js";
23
- import "./chunk-HJPCQROC.js";
24
- import "./chunk-Z7P6CYVJ.js";
20
+ } from "./chunk-BDRQU7KP.js";
21
+ import "./chunk-HIN7NLKB.js";
22
+ import "./chunk-3BDBJ76H.js";
23
+ import "./chunk-OK6YLALO.js";
24
+ import "./chunk-C27RUGNT.js";
25
25
  import "./chunk-5P7HBXTD.js";
26
26
  import "./chunk-3DFBSQIT.js";
27
- import "./chunk-YEDGG2CM.js";
27
+ import "./chunk-3NJ6JQ2M.js";
28
28
  import "./chunk-B6IMQJZM.js";
29
- import "./chunk-4FSJIGYW.js";
30
- import "./chunk-ILKTL4HO.js";
31
- import "./chunk-KAAPCK6R.js";
32
- import "./chunk-Q74XWGWS.js";
33
- import "./chunk-YVLQDPDN.js";
29
+ import "./chunk-B4Z3JBM6.js";
30
+ import "./chunk-VHPGBFI2.js";
31
+ import "./chunk-BLZG4P4W.js";
32
+ import "./chunk-SPSZIFD3.js";
33
+ import "./chunk-BHRZG737.js";
34
34
  import {
35
35
  loadToolPermissionContextFromDisk,
36
36
  persistToolPermissionUpdateToDisk
37
- } from "./chunk-VXPAJIEJ.js";
38
- import "./chunk-ZQLAZEQ6.js";
37
+ } from "./chunk-7OOX64M4.js";
38
+ import "./chunk-QKK7OEVT.js";
39
39
  import {
40
40
  applyToolPermissionContextUpdates
41
41
  } from "./chunk-UNNVICVU.js";
42
- import "./chunk-PJ2UYD4Q.js";
42
+ import "./chunk-JZTNGHID.js";
43
43
  import "./chunk-ERMQRV55.js";
44
- import "./chunk-6IQ6RNSC.js";
44
+ import "./chunk-O6LTYDEM.js";
45
45
  import "./chunk-A3BVXXA3.js";
46
46
  import "./chunk-BJSWTHRM.js";
47
47
  import {
48
48
  createAssistantMessage,
49
49
  createUserMessage
50
- } from "./chunk-LCN6UMC2.js";
51
- import "./chunk-IA565ACR.js";
50
+ } from "./chunk-3GSGGTNG.js";
51
+ import "./chunk-RGMQE5W7.js";
52
52
  import {
53
53
  getContext
54
- } from "./chunk-PWZPQLA5.js";
55
- import "./chunk-X2LHX4TN.js";
54
+ } from "./chunk-Z3QCGGDI.js";
55
+ import "./chunk-QPYMEJ7J.js";
56
56
  import {
57
57
  enableConfigs
58
- } from "./chunk-LFT6GMDJ.js";
58
+ } from "./chunk-VNX4XL5W.js";
59
59
  import "./chunk-RQVLBMP7.js";
60
60
  import {
61
61
  initDebugLogger
62
- } from "./chunk-LTUBDTY7.js";
62
+ } from "./chunk-UDHQY254.js";
63
63
  import {
64
64
  PRODUCT_COMMAND,
65
65
  getPybBaseDir,
@@ -67,10 +67,10 @@ import {
67
67
  logError,
68
68
  setCwd,
69
69
  setOriginalCwd
70
- } from "./chunk-TBU6CIW7.js";
70
+ } from "./chunk-TB6NRY5H.js";
71
71
  import {
72
72
  MACRO
73
- } from "./chunk-UDXJD3B5.js";
73
+ } from "./chunk-RQHQ3V5R.js";
74
74
  import "./chunk-OUXHGDLH.js";
75
75
  import "./chunk-I3J4JYES.js";
76
76
 
@@ -2,12 +2,12 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getModelManager
5
- } from "./chunk-IA565ACR.js";
6
- import "./chunk-LFT6GMDJ.js";
5
+ } from "./chunk-RGMQE5W7.js";
6
+ import "./chunk-VNX4XL5W.js";
7
7
  import "./chunk-RQVLBMP7.js";
8
- import "./chunk-LTUBDTY7.js";
9
- import "./chunk-TBU6CIW7.js";
10
- import "./chunk-UDXJD3B5.js";
8
+ import "./chunk-UDHQY254.js";
9
+ import "./chunk-TB6NRY5H.js";
10
+ import "./chunk-RQHQ3V5R.js";
11
11
  import "./chunk-I3J4JYES.js";
12
12
 
13
13
  // src/entrypoints/cli/agentsValidate.ts
@@ -344,8 +344,8 @@ async function validateAgentTemplates(args) {
344
344
  let knownToolNames;
345
345
  if (args.checkTools) {
346
346
  try {
347
- const { getTools } = await import("./tools-CMR3PLSX.js");
348
- const { getCurrentProjectConfig } = await import("./config-XUTCS32D.js");
347
+ const { getTools } = await import("./tools-CNY53VUO.js");
348
+ const { getCurrentProjectConfig } = await import("./config-L3IXWETT.js");
349
349
  const allTools = await getTools(getCurrentProjectConfig().enableArchitectTool);
350
350
  knownToolNames = new Set(allTools.map((t) => t.name));
351
351
  } catch {
@@ -3,49 +3,49 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSystemPrompt,
5
5
  query
6
- } from "./chunk-3NZTTP2W.js";
7
- import "./chunk-PF3A6LJD.js";
8
- import "./chunk-Q27MKRQ5.js";
9
- import "./chunk-RSCGHYX4.js";
10
- import "./chunk-KANFF7SM.js";
11
- import "./chunk-HJPCQROC.js";
12
- import "./chunk-Z7P6CYVJ.js";
6
+ } from "./chunk-JPR5LF4I.js";
7
+ import "./chunk-D5XZE6VD.js";
8
+ import "./chunk-BDRQU7KP.js";
9
+ import "./chunk-HIN7NLKB.js";
10
+ import "./chunk-3BDBJ76H.js";
11
+ import "./chunk-OK6YLALO.js";
12
+ import "./chunk-C27RUGNT.js";
13
13
  import "./chunk-5P7HBXTD.js";
14
14
  import "./chunk-3DFBSQIT.js";
15
- import "./chunk-YEDGG2CM.js";
15
+ import "./chunk-3NJ6JQ2M.js";
16
16
  import "./chunk-B6IMQJZM.js";
17
- import "./chunk-4FSJIGYW.js";
18
- import "./chunk-ILKTL4HO.js";
19
- import "./chunk-KAAPCK6R.js";
20
- import "./chunk-Q74XWGWS.js";
21
- import "./chunk-YVLQDPDN.js";
22
- import "./chunk-VXPAJIEJ.js";
23
- import "./chunk-ZQLAZEQ6.js";
17
+ import "./chunk-B4Z3JBM6.js";
18
+ import "./chunk-VHPGBFI2.js";
19
+ import "./chunk-BLZG4P4W.js";
20
+ import "./chunk-SPSZIFD3.js";
21
+ import "./chunk-BHRZG737.js";
22
+ import "./chunk-7OOX64M4.js";
23
+ import "./chunk-QKK7OEVT.js";
24
24
  import "./chunk-UNNVICVU.js";
25
- import "./chunk-PJ2UYD4Q.js";
25
+ import "./chunk-JZTNGHID.js";
26
26
  import "./chunk-ERMQRV55.js";
27
- import "./chunk-6IQ6RNSC.js";
27
+ import "./chunk-O6LTYDEM.js";
28
28
  import "./chunk-A3BVXXA3.js";
29
29
  import "./chunk-BJSWTHRM.js";
30
30
  import {
31
31
  createUserMessage
32
- } from "./chunk-LCN6UMC2.js";
32
+ } from "./chunk-3GSGGTNG.js";
33
33
  import {
34
34
  getModelManager
35
- } from "./chunk-IA565ACR.js";
35
+ } from "./chunk-RGMQE5W7.js";
36
36
  import {
37
37
  getContext
38
- } from "./chunk-PWZPQLA5.js";
39
- import "./chunk-X2LHX4TN.js";
40
- import "./chunk-LFT6GMDJ.js";
38
+ } from "./chunk-Z3QCGGDI.js";
39
+ import "./chunk-QPYMEJ7J.js";
40
+ import "./chunk-VNX4XL5W.js";
41
41
  import "./chunk-RQVLBMP7.js";
42
- import "./chunk-LTUBDTY7.js";
42
+ import "./chunk-UDHQY254.js";
43
43
  import {
44
44
  getMessagesPath,
45
45
  overwriteLog,
46
46
  setCwd
47
- } from "./chunk-TBU6CIW7.js";
48
- import "./chunk-UDXJD3B5.js";
47
+ } from "./chunk-TB6NRY5H.js";
48
+ import "./chunk-RQHQ3V5R.js";
49
49
  import {
50
50
  getTotalCost
51
51
  } from "./chunk-OUXHGDLH.js";
@@ -5,9 +5,9 @@ import {
5
5
  checkAndNotifyUpdate,
6
6
  getLatestVersion,
7
7
  getUpdateCommandSuggestions
8
- } from "./chunk-DTOUFBLG.js";
9
- import "./chunk-TBU6CIW7.js";
10
- import "./chunk-UDXJD3B5.js";
8
+ } from "./chunk-Q6NZXTU7.js";
9
+ import "./chunk-TB6NRY5H.js";
10
+ import "./chunk-RQHQ3V5R.js";
11
11
  import "./chunk-I3J4JYES.js";
12
12
  export {
13
13
  assertMinVersion,
@@ -4,7 +4,7 @@ import {
4
4
  CONFIG_BASE_DIR,
5
5
  getCwd,
6
6
  getPybBaseDir
7
- } from "./chunk-TBU6CIW7.js";
7
+ } from "./chunk-TB6NRY5H.js";
8
8
 
9
9
  // src/services/plugins/skillMarketplace.ts
10
10
  import {
@@ -448,7 +448,7 @@ function getLastAssistantMessageId(messages) {
448
448
 
449
449
  // src/utils/messages/index.ts
450
450
  async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
451
- const impl = await import("./userInput-6Z5PYOLR.js");
451
+ const impl = await import("./userInput-EU5BLE3W.js");
452
452
  return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
453
453
  }
454
454
 
@@ -5,14 +5,14 @@ import {
5
5
  } from "./chunk-B6IMQJZM.js";
6
6
  import {
7
7
  loadSettingsWithLegacyFallback
8
- } from "./chunk-ZQLAZEQ6.js";
8
+ } from "./chunk-QKK7OEVT.js";
9
9
  import {
10
10
  getSessionPlugins
11
11
  } from "./chunk-BJSWTHRM.js";
12
12
  import {
13
13
  getCwd,
14
14
  logError
15
- } from "./chunk-TBU6CIW7.js";
15
+ } from "./chunk-TB6NRY5H.js";
16
16
 
17
17
  // src/utils/session/pybHooks.ts
18
18
  import { spawn } from "child_process";
@@ -233,19 +233,13 @@ function matcherMatchesTool(matcher, toolName) {
233
233
  }
234
234
  return false;
235
235
  }
236
- function buildShellCommand(command) {
237
- if (process.platform === "win32") {
238
- return ["cmd.exe", "/d", "/s", "/c", command];
239
- }
240
- return ["/bin/sh", "-c", command];
241
- }
242
236
  async function runCommandHook(args) {
243
- const cmd = buildShellCommand(args.command);
244
- const proc = spawn(cmd[0], cmd.slice(1), {
237
+ const proc = spawn(args.command, [], {
245
238
  cwd: args.cwd,
246
239
  env: { ...process.env, ...args.env ?? {} },
247
240
  stdio: ["pipe", "pipe", "pipe"],
248
- windowsHide: true
241
+ windowsHide: true,
242
+ shell: true
249
243
  });
250
244
  let wasAborted = false;
251
245
  const onAbort = () => {
@@ -502,7 +496,7 @@ async function runPromptHook(args) {
502
496
  fallbackTimeoutMs: args.fallbackTimeoutMs
503
497
  });
504
498
  try {
505
- const { queryQuick } = await import("./llmLazy-BWNMELGK.js");
499
+ const { queryQuick } = await import("./llmLazy-LP3VLWST.js");
506
500
  const systemPrompt = [
507
501
  "You are executing a Pyb prompt hook.",
508
502
  "Return a single JSON object only (no markdown, no prose).",
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/session/pybHooks.ts"],
4
+ "sourcesContent": ["import { spawn } from 'child_process'\nimport { existsSync, readFileSync, statSync } from 'fs'\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'fs'\nimport { tmpdir } from 'os'\nimport { join } from 'path'\nimport { minimatch } from 'minimatch'\nimport { logError } from '@utils/log'\nimport { getCwd } from '@utils/state'\nimport { getPybAgentSessionId } from '@utils/protocol/pybAgentSessionId'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { loadSettingsWithLegacyFallback } from '@utils/config/settingsFiles'\n\ntype HookEventName =\n | 'PreToolUse'\n | 'PostToolUse'\n | 'Stop'\n | 'SubagentStop'\n | 'UserPromptSubmit'\n | 'SessionStart'\n | 'SessionEnd'\n\ntype CommandHook = {\n type: 'command'\n command: string\n timeout?: number\n pluginRoot?: string\n}\n\ntype PromptHook = {\n type: 'prompt'\n prompt: string\n timeout?: number\n pluginRoot?: string\n}\n\ntype Hook = CommandHook | PromptHook\n\ntype HookMatcher = {\n matcher: string\n hooks: Hook[]\n}\n\ntype HookFileEnvelope = {\n description?: unknown\n hooks?: unknown\n [key: string]: unknown\n}\n\ntype HooksSettings = Partial<Record<HookEventName, HookMatcher[]>> & {\n [key: string]: unknown\n}\n\ntype SettingsFileWithHooks = {\n hooks?: HooksSettings\n [key: string]: unknown\n}\n\nexport type PreToolUseHookOutcome =\n | {\n kind: 'allow'\n warnings: string[]\n permissionDecision?: 'allow' | 'ask'\n updatedInput?: Record<string, unknown>\n systemMessages?: string[]\n additionalContexts?: string[]\n }\n | {\n kind: 'block'\n message: string\n systemMessages?: string[]\n additionalContexts?: string[]\n }\n\ntype CachedHooks = {\n mtimeMs: number\n byEvent: Partial<Record<HookEventName, HookMatcher[]>>\n}\n\nconst cache = new Map<string, CachedHooks>()\nconst pluginHooksCache = new Map<string, CachedHooks>()\nconst sessionStartCache = new Map<string, { additionalContext: string }>()\n\ntype HookRuntimeState = {\n transcriptPath?: string\n queuedSystemMessages: string[]\n queuedAdditionalContexts: string[]\n}\n\nconst HOOK_RUNTIME_STATE_KEY = '__pybHookRuntimeState'\n\nfunction getHookRuntimeState(toolUseContext: any): HookRuntimeState {\n const existing = toolUseContext?.[HOOK_RUNTIME_STATE_KEY]\n if (\n existing &&\n typeof existing === 'object' &&\n Array.isArray((existing as any).queuedSystemMessages) &&\n Array.isArray((existing as any).queuedAdditionalContexts)\n ) {\n return existing as HookRuntimeState\n }\n const created: HookRuntimeState = {\n transcriptPath: undefined,\n queuedSystemMessages: [],\n queuedAdditionalContexts: [],\n }\n if (toolUseContext && typeof toolUseContext === 'object') {\n ;(toolUseContext as any)[HOOK_RUNTIME_STATE_KEY] = created\n }\n return created\n}\n\nexport function updateHookTranscriptForMessages(\n toolUseContext: any,\n messages: any[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n const sessionId = getPybAgentSessionId()\n\n const dir = join(tmpdir(), 'pyb-hooks-transcripts')\n try {\n mkdirSync(dir, { recursive: true })\n } catch {}\n\n if (!state.transcriptPath) {\n state.transcriptPath = join(dir, `${sessionId}.transcript.txt`)\n }\n\n const lines: string[] = []\n for (const msg of Array.isArray(messages) ? messages : []) {\n if (!msg || typeof msg !== 'object') continue\n if (msg.type !== 'user' && msg.type !== 'assistant') continue\n\n if (msg.type === 'user') {\n const content = (msg as any)?.message?.content\n if (typeof content === 'string') {\n lines.push(`user: ${content}`)\n continue\n }\n if (Array.isArray(content)) {\n const parts: string[] = []\n for (const block of content) {\n if (!block || typeof block !== 'object') continue\n if (block.type === 'text') parts.push(String(block.text ?? ''))\n if (block.type === 'tool_result')\n parts.push(`[tool_result] ${String(block.content ?? '')}`)\n }\n lines.push(`user: ${parts.join('')}`)\n }\n continue\n }\n\n const content = (msg as any)?.message?.content\n if (typeof content === 'string') {\n lines.push(`assistant: ${content}`)\n continue\n }\n if (!Array.isArray(content)) continue\n\n const parts: string[] = []\n for (const block of content) {\n if (!block || typeof block !== 'object') continue\n if (block.type === 'text') parts.push(String(block.text ?? ''))\n if (block.type === 'tool_use' || block.type === 'server_tool_use') {\n parts.push(\n `[tool_use:${String(block.name ?? '')}] ${hookValueForPrompt(block.input)}`,\n )\n }\n if (block.type === 'mcp_tool_use') {\n parts.push(\n `[mcp_tool_use:${String(block.name ?? '')}] ${hookValueForPrompt(block.input)}`,\n )\n }\n }\n lines.push(`assistant: ${parts.join('')}`)\n }\n\n try {\n writeFileSync(state.transcriptPath, lines.join('\\n') + '\\n', 'utf8')\n } catch {}\n}\n\nexport function drainHookSystemPromptAdditions(toolUseContext: any): string[] {\n const state = getHookRuntimeState(toolUseContext)\n const systemMessages = state.queuedSystemMessages.splice(\n 0,\n state.queuedSystemMessages.length,\n )\n const contexts = state.queuedAdditionalContexts.splice(\n 0,\n state.queuedAdditionalContexts.length,\n )\n\n const additions: string[] = []\n if (systemMessages.length > 0) {\n additions.push(\n ['\\n# Hook system messages', ...systemMessages.map(m => m.trim())]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n if (contexts.length > 0) {\n additions.push(\n ['\\n# Hook additional context', ...contexts.map(m => m.trim())]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n return additions\n}\n\nexport function getHookTranscriptPath(toolUseContext: any): string | undefined {\n return getHookRuntimeState(toolUseContext).transcriptPath\n}\n\nexport function queueHookSystemMessages(\n toolUseContext: any,\n messages: string[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n for (const msg of messages) {\n const trimmed = String(msg ?? '').trim()\n if (trimmed) state.queuedSystemMessages.push(trimmed)\n }\n}\n\nexport function queueHookAdditionalContexts(\n toolUseContext: any,\n contexts: string[],\n): void {\n const state = getHookRuntimeState(toolUseContext)\n for (const ctx of contexts) {\n const trimmed = String(ctx ?? '').trim()\n if (trimmed) state.queuedAdditionalContexts.push(trimmed)\n }\n}\n\nfunction isCommandHook(value: unknown): value is CommandHook {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as any).type === 'command' &&\n typeof (value as any).command === 'string' &&\n Boolean((value as any).command.trim())\n )\n}\n\nfunction isPromptHook(value: unknown): value is PromptHook {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as any).type === 'prompt' &&\n typeof (value as any).prompt === 'string' &&\n Boolean((value as any).prompt.trim())\n )\n}\n\nfunction isHook(value: unknown): value is Hook {\n return isCommandHook(value) || isPromptHook(value)\n}\n\nfunction parseHookMatchers(value: unknown): HookMatcher[] {\n if (!Array.isArray(value)) return []\n\n const out: HookMatcher[] = []\n for (const item of value) {\n if (!item || typeof item !== 'object') continue\n const matcher =\n typeof (item as any).matcher === 'string'\n ? (item as any).matcher.trim()\n : ''\n const effectiveMatcher = matcher || '*'\n const hooksRaw = (item as any).hooks\n const hooks = Array.isArray(hooksRaw) ? hooksRaw.filter(isHook) : []\n if (hooks.length === 0) continue\n out.push({ matcher: effectiveMatcher, hooks })\n }\n return out\n}\n\nfunction parseHooksByEvent(\n rawHooks: unknown,\n): Partial<Record<HookEventName, HookMatcher[]>> {\n if (!rawHooks || typeof rawHooks !== 'object') return {}\n const hooks: any = rawHooks\n return {\n PreToolUse: parseHookMatchers(hooks.PreToolUse),\n PostToolUse: parseHookMatchers(hooks.PostToolUse),\n Stop: parseHookMatchers(hooks.Stop),\n SubagentStop: parseHookMatchers(hooks.SubagentStop),\n UserPromptSubmit: parseHookMatchers(hooks.UserPromptSubmit),\n SessionStart: parseHookMatchers(hooks.SessionStart),\n SessionEnd: parseHookMatchers(hooks.SessionEnd),\n }\n}\n\nfunction loadInlinePluginHooksByEvent(plugin: {\n manifestPath: string\n manifest: unknown\n}): Partial<Record<HookEventName, HookMatcher[]>> | null {\n const manifestHooks = (plugin.manifest as any)?.hooks\n if (\n !manifestHooks ||\n typeof manifestHooks !== 'object' ||\n Array.isArray(manifestHooks)\n )\n return null\n\n const hookObj =\n (manifestHooks as any).hooks &&\n typeof (manifestHooks as any).hooks === 'object' &&\n !Array.isArray((manifestHooks as any).hooks)\n ? (manifestHooks as any).hooks\n : manifestHooks\n\n const cacheKey = `${plugin.manifestPath}#inlineHooks`\n try {\n const stat = statSync(plugin.manifestPath)\n const cached = pluginHooksCache.get(cacheKey)\n if (cached && cached.mtimeMs === stat.mtimeMs) return cached.byEvent\n\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(cacheKey, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent\n } catch (err) {\n logError(err)\n pluginHooksCache.delete(cacheKey)\n return null\n }\n}\n\nfunction loadPreToolUseMatchers(projectDir: string): HookMatcher[] {\n const loaded = loadSettingsWithLegacyFallback({\n destination: 'projectSettings',\n projectDir,\n migrateToPrimary: true,\n })\n const settingsPath = loaded.usedPath\n if (!settingsPath) {\n console.error('DEBUG: No settings path found for', projectDir)\n return []\n }\n try {\n const stat = statSync(settingsPath)\n const cached = cache.get(settingsPath)\n if (cached && cached.mtimeMs === stat.mtimeMs)\n return cached.byEvent.PreToolUse ?? []\n\n const parsed = loaded.settings as SettingsFileWithHooks | null\n const byEvent = parseHooksByEvent(parsed?.hooks)\n cache.set(settingsPath, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent.PreToolUse ?? []\n } catch {\n cache.delete(settingsPath)\n return []\n }\n}\n\nfunction loadSettingsMatchers(\n projectDir: string,\n event: HookEventName,\n): HookMatcher[] {\n const loaded = loadSettingsWithLegacyFallback({\n destination: 'projectSettings',\n projectDir,\n migrateToPrimary: true,\n })\n const settingsPath = loaded.usedPath\n if (!settingsPath) return []\n try {\n const stat = statSync(settingsPath)\n const cached = cache.get(settingsPath)\n if (cached && cached.mtimeMs === stat.mtimeMs)\n return cached.byEvent[event] ?? []\n\n const parsed = loaded.settings as SettingsFileWithHooks | null\n const byEvent = parseHooksByEvent(parsed?.hooks)\n cache.set(settingsPath, { mtimeMs: stat.mtimeMs, byEvent })\n return byEvent[event] ?? []\n } catch {\n cache.delete(settingsPath)\n return []\n }\n}\n\nfunction matcherMatchesTool(matcher: string, toolName: string): boolean {\n if (!matcher) return false\n if (matcher === '*' || matcher === 'all') return true\n if (matcher === toolName) return true\n try {\n if (minimatch(toolName, matcher, { dot: true, nocase: false })) return true\n } catch {\n }\n try {\n if (new RegExp(matcher).test(toolName)) return true\n } catch {\n }\n return false\n}\n\nasync function runCommandHook(args: {\n command: string\n stdinJson: unknown\n cwd: string\n env?: Record<string, string>\n signal?: AbortSignal\n}): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n const proc = spawn(args.command, [], {\n cwd: args.cwd,\n env: { ...(process.env as any), ...(args.env ?? {}) },\n stdio: ['pipe', 'pipe', 'pipe'],\n windowsHide: true,\n shell: true,\n })\n\n let wasAborted = false\n const onAbort = () => {\n wasAborted = true\n try {\n proc.kill()\n } catch {}\n }\n if (args.signal) {\n if (args.signal.aborted) onAbort()\n args.signal.addEventListener('abort', onAbort, { once: true })\n }\n\n try {\n const input = JSON.stringify(args.stdinJson)\n try {\n proc.stdin?.write(input)\n proc.stdin?.end()\n } catch {}\n\n let stdout = ''\n let stderr = ''\n\n const collect = (\n stream: NodeJS.ReadableStream | null,\n append: (chunk: string) => void,\n ): { done: Promise<void>; cleanup: () => void } => {\n if (!stream) {\n return { done: Promise.resolve(), cleanup: () => {} }\n }\n try {\n ;(stream as any).setEncoding?.('utf8')\n } catch {}\n\n let resolveDone: (() => void) | null = null\n const done = new Promise<void>(resolve => {\n resolveDone = resolve\n })\n\n const finish = () => {\n cleanup()\n if (!resolveDone) return\n resolveDone()\n resolveDone = null\n }\n\n const onData = (chunk: unknown) => {\n append(\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk),\n )\n }\n\n const onError = () => finish()\n\n const cleanup = () => {\n stream.off('data', onData)\n stream.off('end', finish)\n stream.off('close', finish)\n stream.off('error', onError)\n }\n\n stream.on('data', onData)\n stream.once('end', finish)\n stream.once('close', finish)\n stream.once('error', onError)\n\n return { done, cleanup }\n }\n\n const stdoutCollector = collect(proc.stdout, chunk => {\n stdout += chunk\n })\n const stderrCollector = collect(proc.stderr, chunk => {\n stderr += chunk\n })\n\n const exitCode = await new Promise<number>(resolve => {\n proc.once('exit', (code, signal) => {\n if (typeof code === 'number') return resolve(code)\n if (signal) return resolve(143)\n return resolve(0)\n })\n proc.once('error', () => resolve(1))\n })\n\n await Promise.race([\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\n new Promise(resolve => setTimeout(resolve, 250)),\n ])\n stdoutCollector.cleanup()\n stderrCollector.cleanup()\n\n return {\n exitCode: wasAborted && exitCode === 0 ? 143 : exitCode,\n stdout,\n stderr,\n }\n } finally {\n if (args.signal) {\n try {\n args.signal.removeEventListener('abort', onAbort)\n } catch {}\n }\n }\n}\n\nfunction mergeAbortSignals(signals: Array<AbortSignal | undefined>): {\n signal: AbortSignal\n cleanup: () => void\n} {\n const controller = new AbortController()\n const onAbort = () => controller.abort()\n\n const cleanups: Array<() => void> = []\n for (const signal of signals) {\n if (!signal) continue\n if (signal.aborted) {\n controller.abort()\n continue\n }\n signal.addEventListener('abort', onAbort, { once: true })\n cleanups.push(() => {\n try {\n signal.removeEventListener('abort', onAbort)\n } catch {}\n })\n }\n\n return {\n signal: controller.signal,\n cleanup: () => cleanups.forEach(fn => fn()),\n }\n}\n\nfunction withHookTimeout(args: {\n timeoutSeconds?: number\n parentSignal?: AbortSignal\n fallbackTimeoutMs: number\n}): { signal: AbortSignal; cleanup: () => void } {\n const timeoutMs =\n typeof args.timeoutSeconds === 'number' &&\n Number.isFinite(args.timeoutSeconds)\n ? Math.max(0, Math.floor(args.timeoutSeconds * 1000))\n : args.fallbackTimeoutMs\n\n const timeoutSignal =\n typeof AbortSignal !== 'undefined' &&\n typeof (AbortSignal as any).timeout === 'function'\n ? (AbortSignal as any).timeout(timeoutMs)\n : (() => {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n const signal = controller.signal\n ;(signal as any).__cleanup = () => clearTimeout(timer)\n return signal\n })()\n\n const merged = mergeAbortSignals([args.parentSignal, timeoutSignal])\n const timeoutCleanup =\n typeof (timeoutSignal as any).__cleanup === 'function'\n ? (timeoutSignal as any).__cleanup\n : () => {}\n\n return {\n signal: merged.signal,\n cleanup: () => {\n merged.cleanup()\n timeoutCleanup()\n },\n }\n}\n\nfunction coerceHookMessage(stdout: string, stderr: string): string {\n const s = (stderr || '').trim()\n if (s) return s\n const o = (stdout || '').trim()\n if (o) return o\n return 'Hook blocked the tool call.'\n}\n\nfunction coerceHookPermissionMode(mode: unknown): 'ask' | 'allow' {\n if (mode === 'acceptEdits' || mode === 'bypassPermissions') return 'allow'\n return 'ask'\n}\n\nfunction extractFirstJsonObject(text: string): string | null {\n let start = -1\n let depth = 0\n let inString = false\n let escaped = false\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n\n if (start === -1) {\n if (ch === '{') {\n start = i\n depth = 1\n }\n continue\n }\n\n if (inString) {\n if (escaped) {\n escaped = false\n continue\n }\n if (ch === '\\\\') {\n escaped = true\n continue\n }\n if (ch === '\"') {\n inString = false\n }\n continue\n }\n\n if (ch === '\"') {\n inString = true\n continue\n }\n\n if (ch === '{') {\n depth++\n continue\n }\n if (ch === '}') {\n depth--\n if (depth === 0) return text.slice(start, i + 1)\n }\n }\n\n return null\n}\n\nfunction parseSessionStartAdditionalContext(stdout: string): string | null {\n const trimmed = String(stdout ?? '').trim()\n if (!trimmed) return null\n\n const jsonStr = extractFirstJsonObject(trimmed) ?? trimmed\n try {\n const parsed = JSON.parse(jsonStr)\n const additional =\n parsed &&\n typeof parsed === 'object' &&\n (parsed as any).hookSpecificOutput &&\n typeof (parsed as any).hookSpecificOutput.additionalContext === 'string'\n ? String((parsed as any).hookSpecificOutput.additionalContext)\n : null\n return additional && additional.trim() ? additional : null\n } catch {\n return null\n }\n}\n\nfunction tryParseHookJson(stdout: string): any | null {\n const trimmed = String(stdout ?? '').trim()\n if (!trimmed) return null\n const jsonStr = extractFirstJsonObject(trimmed) ?? trimmed\n try {\n const parsed = JSON.parse(jsonStr)\n return parsed && typeof parsed === 'object' ? parsed : null\n } catch {\n return null\n }\n}\n\nfunction normalizePermissionDecision(\n value: unknown,\n): 'allow' | 'deny' | 'ask' | 'passthrough' | null {\n if (typeof value !== 'string') return null\n const normalized = value.trim().toLowerCase()\n if (normalized === 'allow' || normalized === 'approve') return 'allow'\n if (normalized === 'deny' || normalized === 'block') return 'deny'\n if (normalized === 'ask') return 'ask'\n if (normalized === 'passthrough' || normalized === 'continue')\n return 'passthrough'\n return null\n}\n\nfunction normalizeStopDecision(value: unknown): 'approve' | 'block' | null {\n if (typeof value !== 'string') return null\n const normalized = value.trim().toLowerCase()\n if (normalized === 'approve' || normalized === 'allow') return 'approve'\n if (normalized === 'block' || normalized === 'deny') return 'block'\n return null\n}\n\nfunction hookValueForPrompt(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction interpolatePromptHookTemplate(\n template: string,\n hookInput: Record<string, unknown>,\n): string {\n return String(template ?? '')\n .replaceAll('$TOOL_INPUT', hookValueForPrompt(hookInput.tool_input))\n .replaceAll('$TOOL_RESULT', hookValueForPrompt(hookInput.tool_result))\n .replaceAll('$TOOL_RESPONSE', hookValueForPrompt(hookInput.tool_response))\n .replaceAll('$USER_PROMPT', hookValueForPrompt(hookInput.user_prompt))\n .replaceAll('$PROMPT', hookValueForPrompt(hookInput.prompt))\n .replaceAll('$REASON', hookValueForPrompt(hookInput.reason))\n}\n\nfunction extractAssistantText(message: any): string {\n const content = (message as any)?.message?.content\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n return content\n .filter((b: any) => b && typeof b === 'object' && b.type === 'text')\n .map((b: any) => String(b.text ?? ''))\n .join('')\n}\n\nasync function runPromptHook(args: {\n hook: PromptHook\n hookEvent: HookEventName\n hookInput: Record<string, unknown>\n safeMode: boolean\n parentSignal?: AbortSignal\n fallbackTimeoutMs: number\n}): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: args.hook.timeout,\n parentSignal: args.parentSignal,\n fallbackTimeoutMs: args.fallbackTimeoutMs,\n })\n\n try {\n const { queryQuick } = await import('@services/llmLazy')\n\n const systemPrompt = [\n 'You are executing a Pyb prompt hook.',\n 'Return a single JSON object only (no markdown, no prose).',\n `hook_event_name: ${args.hookEvent}`,\n 'Valid fields include:',\n '- systemMessage: string',\n '- decision: \\\"approve\\\" | \\\"block\\\" (Stop/SubagentStop only)',\n '- reason: string (Stop/SubagentStop only)',\n '- hookSpecificOutput.permissionDecision: \\\"allow\\\" | \\\"deny\\\" | \\\"ask\\\" | \\\"passthrough\\\" (PreToolUse only)',\n '- hookSpecificOutput.updatedInput: object (PreToolUse only)',\n '- hookSpecificOutput.additionalContext: string (SessionStart/any)',\n ]\n\n const promptText = interpolatePromptHookTemplate(\n args.hook.prompt,\n args.hookInput,\n )\n const userPrompt = `${promptText}\\n\\n# Hook input JSON\\n${hookValueForPrompt(args.hookInput)}`\n\n const response = await queryQuick({\n systemPrompt,\n userPrompt,\n signal,\n })\n\n return { exitCode: 0, stdout: extractAssistantText(response), stderr: '' }\n } catch (err) {\n return {\n exitCode: 1,\n stdout: '',\n stderr: err instanceof Error ? err.message : String(err),\n }\n } finally {\n cleanup()\n }\n}\n\nfunction applyEnvFileToProcessEnv(envFilePath: string): void {\n let raw: string\n try {\n raw = readFileSync(envFilePath, 'utf8')\n } catch {\n return\n }\n\n const lines = raw.split(/\\r?\\n/)\n for (const line of lines) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n\n const withoutExport = trimmed.startsWith('export ')\n ? trimmed.slice('export '.length).trim()\n : trimmed\n\n const eq = withoutExport.indexOf('=')\n if (eq <= 0) continue\n\n const key = withoutExport.slice(0, eq).trim()\n let value = withoutExport.slice(eq + 1).trim()\n if (!key) continue\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1)\n }\n\n process.env[key] = value\n }\n}\n\nfunction loadPluginPreToolUseMatchers(projectDir: string): HookMatcher[] {\n const plugins = getSessionPlugins()\n if (plugins.length === 0) return []\n\n const out: HookMatcher[] = []\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n try {\n const stat = statSync(hookPath)\n const cached = pluginHooksCache.get(hookPath)\n if (cached && cached.mtimeMs === stat.mtimeMs) {\n out.push(\n ...(cached.byEvent.PreToolUse ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n continue\n }\n\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n const hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(hookPath, { mtimeMs: stat.mtimeMs, byEvent })\n out.push(\n ...(byEvent.PreToolUse ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n } catch (err) {\n logError(err)\n continue\n }\n }\n\n const inlineByEvent = loadInlinePluginHooksByEvent(plugin)\n if (inlineByEvent?.PreToolUse) {\n out.push(\n ...inlineByEvent.PreToolUse.map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n }\n }\n\n return out\n}\n\nfunction loadPluginMatchers(\n projectDir: string,\n event: HookEventName,\n): HookMatcher[] {\n const plugins = getSessionPlugins()\n if (plugins.length === 0) return []\n\n const out: HookMatcher[] = []\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n try {\n const stat = statSync(hookPath)\n const cached = pluginHooksCache.get(hookPath)\n if (cached && cached.mtimeMs === stat.mtimeMs) {\n out.push(\n ...(cached.byEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n continue\n }\n\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n const hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n const byEvent = parseHooksByEvent(hookObj)\n pluginHooksCache.set(hookPath, { mtimeMs: stat.mtimeMs, byEvent })\n out.push(\n ...(byEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n } catch (err) {\n logError(err)\n continue\n }\n }\n\n const inlineByEvent = loadInlinePluginHooksByEvent(plugin)\n if (inlineByEvent?.[event]) {\n out.push(\n ...(inlineByEvent[event] ?? []).map(m => ({\n matcher: m.matcher,\n hooks: m.hooks.map(h => ({ ...h, pluginRoot: plugin.rootDir })),\n })),\n )\n }\n }\n return out\n}\n\nfunction parseSessionStartHooks(value: unknown): CommandHook[] {\n if (!Array.isArray(value)) return []\n const out: CommandHook[] = []\n for (const item of value) {\n if (!item || typeof item !== 'object') continue\n const hooksRaw = (item as any).hooks\n const hooks = Array.isArray(hooksRaw) ? hooksRaw.filter(isCommandHook) : []\n out.push(...hooks)\n }\n return out\n}\n\nexport async function getSessionStartAdditionalContext(args?: {\n permissionMode?: unknown\n cwd?: string\n signal?: AbortSignal\n}): Promise<string> {\n const sessionId = getPybAgentSessionId()\n const cached = sessionStartCache.get(sessionId)\n if (cached) return cached.additionalContext\n\n const projectDir = args?.cwd ?? getCwd()\n const plugins = getSessionPlugins()\n if (plugins.length === 0) {\n sessionStartCache.set(sessionId, { additionalContext: '' })\n return ''\n }\n\n const envFileDir = mkdtempSync(join(tmpdir(), 'pyb-env-'))\n const envFilePath = join(envFileDir, `${sessionId}.env`)\n try {\n writeFileSync(envFilePath, '', 'utf8')\n } catch {\n }\n\n const additionalContexts: string[] = []\n\n try {\n for (const plugin of plugins) {\n for (const hookPath of plugin.hooksFiles ?? []) {\n let hookObj: any\n try {\n const raw = readFileSync(hookPath, 'utf8')\n const parsed = JSON.parse(raw) as HookFileEnvelope\n hookObj =\n parsed && typeof parsed === 'object' && parsed.hooks\n ? parsed.hooks\n : parsed\n } catch {\n continue\n }\n\n const hooks = parseSessionStartHooks(hookObj?.SessionStart).map(h => ({\n ...h,\n pluginRoot: plugin.rootDir,\n }))\n if (hooks.length === 0) continue\n\n for (const hook of hooks) {\n const payload = {\n session_id: sessionId,\n cwd: projectDir,\n hook_event_name: 'SessionStart',\n permission_mode: coerceHookPermissionMode(args?.permissionMode),\n }\n\n const result = await runCommandHook({\n command: hook.command,\n stdinJson: payload,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot\n ? { CLAUDE_PLUGIN_ROOT: hook.pluginRoot }\n : {}),\n PYB_ENV_FILE: envFilePath,\n },\n signal: args?.signal,\n })\n\n if (result.exitCode !== 0) continue\n const injected = parseSessionStartAdditionalContext(result.stdout)\n if (injected) additionalContexts.push(injected)\n }\n }\n\n const inlineHooks = (plugin.manifest as any)?.hooks\n if (\n inlineHooks &&\n typeof inlineHooks === 'object' &&\n !Array.isArray(inlineHooks)\n ) {\n const hookObj =\n (inlineHooks as any).hooks &&\n typeof (inlineHooks as any).hooks === 'object' &&\n !Array.isArray((inlineHooks as any).hooks)\n ? (inlineHooks as any).hooks\n : inlineHooks\n\n const hooks = parseSessionStartHooks(\n (hookObj as any)?.SessionStart,\n ).map(h => ({\n ...h,\n pluginRoot: plugin.rootDir,\n }))\n if (hooks.length > 0) {\n for (const hook of hooks) {\n const payload = {\n session_id: sessionId,\n cwd: projectDir,\n hook_event_name: 'SessionStart',\n permission_mode: coerceHookPermissionMode(args?.permissionMode),\n }\n\n const result = await runCommandHook({\n command: hook.command,\n stdinJson: payload,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot\n ? { CLAUDE_PLUGIN_ROOT: hook.pluginRoot }\n : {}),\n PYB_ENV_FILE: envFilePath,\n },\n signal: args?.signal,\n })\n\n if (result.exitCode !== 0) continue\n const injected = parseSessionStartAdditionalContext(result.stdout)\n if (injected) additionalContexts.push(injected)\n }\n }\n }\n }\n } finally {\n applyEnvFileToProcessEnv(envFilePath)\n try {\n rmSync(envFileDir, { recursive: true, force: true })\n } catch {}\n }\n\n const additionalContext = additionalContexts.filter(Boolean).join('\\n\\n')\n sessionStartCache.set(sessionId, { additionalContext })\n return additionalContext\n}\n\nexport async function runPreToolUseHooks(args: {\n toolName: string\n toolInput: Record<string, unknown>\n toolUseId: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<PreToolUseHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'PreToolUse'),\n ...loadPluginMatchers(projectDir, 'PreToolUse'),\n ]\n if (matchers.length === 0) return { kind: 'allow', warnings: [] }\n\n const applicable = matchers.filter(m =>\n matcherMatchesTool(m.matcher, args.toolName),\n )\n if (applicable.length === 0) return { kind: 'allow', warnings: [] }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'PreToolUse',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n tool_name: args.toolName,\n tool_input: args.toolInput,\n tool_use_id: args.toolUseId,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n let mergedUpdatedInput: Record<string, unknown> | undefined\n let permissionDecision: 'allow' | 'ask' | null = null\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'PreToolUse',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { hook, result } = item.value\n\n if (result.exitCode === 2) {\n return {\n kind: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const decision = normalizePermissionDecision(\n json.hookSpecificOutput?.permissionDecision,\n )\n if (decision === 'deny') {\n const msg =\n systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr)\n return {\n kind: 'block',\n message: msg,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (decision === 'ask') {\n permissionDecision = 'ask'\n } else if (decision === 'allow') {\n if (!permissionDecision) permissionDecision = 'allow'\n }\n\n const updated =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n json.hookSpecificOutput.updatedInput &&\n typeof json.hookSpecificOutput.updatedInput === 'object'\n ? (json.hookSpecificOutput.updatedInput as Record<string, unknown>)\n : null\n if (updated) {\n mergedUpdatedInput = { ...(mergedUpdatedInput ?? {}), ...updated }\n }\n }\n\n return {\n kind: 'allow',\n warnings,\n permissionDecision:\n permissionDecision === 'allow'\n ? 'allow'\n : permissionDecision === 'ask'\n ? 'ask'\n : undefined,\n updatedInput:\n permissionDecision === 'allow' ? mergedUpdatedInput : undefined,\n systemMessages,\n additionalContexts,\n }\n}\n\nexport async function runPostToolUseHooks(args: {\n toolName: string\n toolInput: Record<string, unknown>\n toolResult: unknown\n toolUseId: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<{\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n}> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'PostToolUse'),\n ...loadPluginMatchers(projectDir, 'PostToolUse'),\n ]\n if (matchers.length === 0) {\n return { warnings: [], systemMessages: [], additionalContexts: [] }\n }\n\n const applicable = matchers.filter(m =>\n matcherMatchesTool(m.matcher, args.toolName),\n )\n if (applicable.length === 0) {\n return { warnings: [], systemMessages: [], additionalContexts: [] }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'PostToolUse',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n tool_name: args.toolName,\n tool_input: args.toolInput,\n tool_result: args.toolResult,\n tool_response: args.toolResult,\n tool_use_id: args.toolUseId,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'PostToolUse',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n }\n\n return { warnings, systemMessages, additionalContexts }\n}\n\nexport type StopHookOutcome =\n | {\n decision: 'approve'\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n | {\n decision: 'block'\n message: string\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n\nexport async function runStopHooks(args: {\n hookEvent: 'Stop' | 'SubagentStop'\n reason?: string\n agentId?: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n stopHookActive?: boolean\n signal?: AbortSignal\n}): Promise<StopHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, args.hookEvent),\n ...loadPluginMatchers(projectDir, args.hookEvent),\n ]\n if (matchers.length === 0) {\n return {\n decision: 'approve',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n console.error('DEBUG: applicable stop hooks', applicable.length)\n if (applicable.length === 0) {\n return {\n decision: 'approve',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: args.hookEvent,\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n reason: args.reason,\n stop_hook_active: args.stopHookActive === true,\n ...(args.hookEvent === 'SubagentStop'\n ? { agent_id: args.agentId, agent_transcript_path: args.transcriptPath }\n : {}),\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: args.hookEvent,\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n\n if (result.exitCode === 2) {\n return {\n decision: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const stopDecision = normalizeStopDecision(json.decision)\n if (stopDecision === 'block') {\n const reason =\n typeof json.reason === 'string' && json.reason.trim()\n ? json.reason.trim()\n : null\n const msg =\n reason ||\n (systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr))\n return {\n decision: 'block',\n message: msg,\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n }\n\n return { decision: 'approve', warnings, systemMessages, additionalContexts }\n}\n\nexport type UserPromptHookOutcome =\n | {\n decision: 'allow'\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n | {\n decision: 'block'\n message: string\n warnings: string[]\n systemMessages: string[]\n additionalContexts: string[]\n }\n\nexport async function runUserPromptSubmitHooks(args: {\n prompt: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<UserPromptHookOutcome> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'UserPromptSubmit'),\n ...loadPluginMatchers(projectDir, 'UserPromptSubmit'),\n ]\n if (matchers.length === 0) {\n return {\n decision: 'allow',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n if (applicable.length === 0) {\n return {\n decision: 'allow',\n warnings: [],\n systemMessages: [],\n additionalContexts: [],\n }\n }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'UserPromptSubmit',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n user_prompt: args.prompt,\n prompt: args.prompt,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n const additionalContexts: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'UserPromptSubmit',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n\n if (result.exitCode === 2) {\n return {\n decision: 'block',\n message: coerceHookMessage(result.stdout, result.stderr),\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n\n const additional =\n json.hookSpecificOutput &&\n typeof json.hookSpecificOutput === 'object' &&\n typeof json.hookSpecificOutput.additionalContext === 'string'\n ? String(json.hookSpecificOutput.additionalContext)\n : null\n if (additional && additional.trim()) {\n additionalContexts.push(additional.trim())\n }\n\n const stopDecision = normalizeStopDecision(json.decision)\n if (stopDecision === 'block') {\n const reason =\n typeof json.reason === 'string' && json.reason.trim()\n ? json.reason.trim()\n : null\n const msg =\n reason ||\n (systemMessages.length > 0\n ? systemMessages.join('\\n\\n')\n : coerceHookMessage(result.stdout, result.stderr))\n return {\n decision: 'block',\n message: msg,\n warnings,\n systemMessages,\n additionalContexts,\n }\n }\n }\n\n return { decision: 'allow', warnings, systemMessages, additionalContexts }\n}\n\nexport async function runSessionEndHooks(args: {\n reason: string\n permissionMode?: unknown\n cwd?: string\n transcriptPath?: string\n safeMode?: boolean\n signal?: AbortSignal\n}): Promise<{ warnings: string[]; systemMessages: string[] }> {\n const projectDir = args.cwd ?? getCwd()\n const matchers = [\n ...loadSettingsMatchers(projectDir, 'SessionEnd'),\n ...loadPluginMatchers(projectDir, 'SessionEnd'),\n ]\n if (matchers.length === 0) return { warnings: [], systemMessages: [] }\n\n const applicable = matchers.filter(m => matcherMatchesTool(m.matcher, '*'))\n if (applicable.length === 0) return { warnings: [], systemMessages: [] }\n\n const hookInput: Record<string, unknown> = {\n session_id: getPybAgentSessionId(),\n transcript_path: args.transcriptPath,\n cwd: projectDir,\n hook_event_name: 'SessionEnd',\n permission_mode: coerceHookPermissionMode(args.permissionMode),\n reason: args.reason,\n }\n\n const warnings: string[] = []\n const systemMessages: string[] = []\n\n const executions: Array<\n Promise<{\n hook: Hook\n result: { exitCode: number; stdout: string; stderr: string }\n }>\n > = []\n\n for (const entry of applicable) {\n for (const hook of entry.hooks) {\n if (hook.type === 'prompt') {\n executions.push(\n runPromptHook({\n hook,\n hookEvent: 'SessionEnd',\n hookInput,\n safeMode: args.safeMode ?? false,\n parentSignal: args.signal,\n fallbackTimeoutMs: 30_000,\n }).then(result => ({ hook, result })),\n )\n continue\n }\n\n const { signal, cleanup } = withHookTimeout({\n timeoutSeconds: hook.timeout,\n parentSignal: args.signal,\n fallbackTimeoutMs: 60_000,\n })\n executions.push(\n runCommandHook({\n command: hook.command,\n stdinJson: hookInput,\n cwd: projectDir,\n env: {\n PYB_PROJECT_DIR: projectDir,\n ...(hook.pluginRoot ? { PYB_PLUGIN_ROOT: hook.pluginRoot } : {}),\n },\n signal,\n })\n .then(result => ({ hook, result }))\n .finally(cleanup),\n )\n }\n }\n\n const settled = await Promise.allSettled(executions)\n for (const item of settled) {\n if (item.status === 'rejected') {\n logError(item.reason)\n warnings.push(`Hook failed to run: ${String(item.reason ?? '')}`)\n continue\n }\n\n const { result } = item.value\n if (result.exitCode !== 0) {\n warnings.push(coerceHookMessage(result.stdout, result.stderr))\n continue\n }\n\n const json = tryParseHookJson(result.stdout)\n if (!json) continue\n if (typeof json.systemMessage === 'string' && json.systemMessage.trim()) {\n systemMessages.push(json.systemMessage.trim())\n }\n }\n\n return { warnings, systemMessages }\n}\n\nexport function __resetPybHooksCacheForTests(): void {\n cache.clear()\n pluginHooksCache.clear()\n sessionStartCache.clear()\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["content", "parts"]
7
+ }
@@ -4,18 +4,18 @@ import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback,
6
6
  saveSettingsToPrimaryAndSyncLegacy
7
- } from "./chunk-ZQLAZEQ6.js";
7
+ } from "./chunk-QKK7OEVT.js";
8
8
  import {
9
9
  createDefaultToolPermissionContext,
10
10
  isPersistableToolPermissionDestination
11
11
  } from "./chunk-UNNVICVU.js";
12
12
  import {
13
13
  getCurrentProjectConfig
14
- } from "./chunk-LFT6GMDJ.js";
14
+ } from "./chunk-VNX4XL5W.js";
15
15
  import {
16
16
  getCwd,
17
17
  logError
18
- } from "./chunk-TBU6CIW7.js";
18
+ } from "./chunk-TB6NRY5H.js";
19
19
 
20
20
  // src/utils/permissions/toolPermissionSettings.ts
21
21
  function uniqueStrings(value) {
@@ -4,7 +4,7 @@ import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback,
6
6
  saveSettingsToPrimaryAndSyncLegacy
7
- } from "./chunk-ZQLAZEQ6.js";
7
+ } from "./chunk-QKK7OEVT.js";
8
8
  import {
9
9
  isSettingSourceEnabled
10
10
  } from "./chunk-A3BVXXA3.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-BJSWTHRM.js";
14
14
  import {
15
15
  getCwd
16
- } from "./chunk-TBU6CIW7.js";
16
+ } from "./chunk-TB6NRY5H.js";
17
17
 
18
18
  // src/services/ui/outputStyles.ts
19
19
  import figures from "figures";
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback
6
- } from "./chunk-ZQLAZEQ6.js";
6
+ } from "./chunk-QKK7OEVT.js";
7
7
  import {
8
8
  getSessionPlugins
9
9
  } from "./chunk-BJSWTHRM.js";
10
10
  import {
11
11
  getTheme
12
- } from "./chunk-X2LHX4TN.js";
12
+ } from "./chunk-QPYMEJ7J.js";
13
13
  import {
14
14
  addMcprcServerForTesting,
15
15
  getCurrentProjectConfig,
@@ -19,13 +19,13 @@ import {
19
19
  safeParseJSON,
20
20
  saveCurrentProjectConfig,
21
21
  saveGlobalConfig
22
- } from "./chunk-LFT6GMDJ.js";
22
+ } from "./chunk-VNX4XL5W.js";
23
23
  import {
24
24
  PRODUCT_COMMAND,
25
25
  PRODUCT_NAME,
26
26
  getCwd,
27
27
  logMCPError
28
- } from "./chunk-TBU6CIW7.js";
28
+ } from "./chunk-TB6NRY5H.js";
29
29
 
30
30
  // src/services/mcp/client.ts
31
31
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
@@ -5,12 +5,12 @@ import {
5
5
  } from "./chunk-BJSWTHRM.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-LTUBDTY7.js";
8
+ } from "./chunk-UDHQY254.js";
9
9
  import {
10
10
  getCwd,
11
11
  getPybBaseDir,
12
12
  logError
13
- } from "./chunk-TBU6CIW7.js";
13
+ } from "./chunk-TB6NRY5H.js";
14
14
 
15
15
  // src/services/plugins/customCommands.ts
16
16
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";