@pushary/agent-hooks 1.7.2 → 1.8.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 (105) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +13 -1
  3. package/data/cursor-plugin/CHANGELOG.md +1 -0
  4. package/data/cursor-plugin/scripts/pushary-gate.mjs +2 -21
  5. package/data/cursor-plugin/scripts/pushary-gate.test.mjs +23 -1
  6. package/data/cursor-plugin/scripts/redaction.mjs +51 -0
  7. package/data/vscode-plugin/CHANGELOG.md +1 -0
  8. package/data/vscode-plugin/scripts/pushary-gate.mjs +1 -21
  9. package/data/vscode-plugin/scripts/redaction.mjs +51 -0
  10. package/dist/bin/pushary-bell-hook.js +23 -23
  11. package/dist/bin/pushary-bell.js +9 -9
  12. package/dist/bin/pushary-claude.js +28 -28
  13. package/dist/bin/pushary-clean.js +91 -107
  14. package/dist/bin/pushary-codex-bridge.js +18 -18
  15. package/dist/bin/pushary-codex-hook.js +42 -43
  16. package/dist/bin/pushary-codex.js +13 -13
  17. package/dist/bin/pushary-connect.js +13 -13
  18. package/dist/bin/pushary-cowork.js +5 -5
  19. package/dist/bin/pushary-daemon.js +27 -27
  20. package/dist/bin/pushary-disconnect.js +18 -18
  21. package/dist/bin/pushary-doctor.js +85 -79
  22. package/dist/bin/pushary-elicitation-hook.js +25 -25
  23. package/dist/bin/pushary-gemini-bridge.js +12 -12
  24. package/dist/bin/pushary-gemini-hook.js +29 -30
  25. package/dist/bin/pushary-hook.js +32 -32
  26. package/dist/bin/pushary-login.js +12 -12
  27. package/dist/bin/pushary-logout.js +7 -7
  28. package/dist/bin/pushary-mcp.js +85 -28
  29. package/dist/bin/pushary-mode.js +9 -9
  30. package/dist/bin/pushary-notification-hook.js +28 -28
  31. package/dist/bin/pushary-opencode-hook.js +28 -29
  32. package/dist/bin/pushary-permission-denied-hook.js +32 -32
  33. package/dist/bin/pushary-permission-hook.js +31 -31
  34. package/dist/bin/pushary-post-hook.js +28 -28
  35. package/dist/bin/pushary-prompt-hook.js +28 -28
  36. package/dist/bin/pushary-session-end-hook.js +28 -28
  37. package/dist/bin/pushary-session-start-hook.js +32 -32
  38. package/dist/bin/pushary-setup.js +60 -127
  39. package/dist/bin/pushary-stats.js +5 -5
  40. package/dist/bin/pushary-status.js +15 -15
  41. package/dist/bin/pushary-stop-hook.js +28 -28
  42. package/dist/bin/pushary-stopfailure-hook.js +28 -28
  43. package/dist/bin/pushary-suggestions.js +4 -4
  44. package/dist/bin/pushary-transcript-register.js +19 -19
  45. package/dist/bin/pushary-transcripts.js +7 -7
  46. package/dist/bin/pushary-upgrade.js +231 -105
  47. package/dist/bin/pushary-wait.js +9 -9
  48. package/dist/bin/pushary.js +6 -6
  49. package/dist/{chunk-VQDJ6KB3.js → chunk-2ABTSGFT.js} +3 -3
  50. package/dist/{chunk-UFNBKYWT.js → chunk-2OY3ZZ5N.js} +3 -3
  51. package/dist/{chunk-A6WQF7FQ.js → chunk-3EVPNIBE.js} +3 -3
  52. package/dist/{chunk-L6IF4JOF.js → chunk-6J2JC2RT.js} +3 -3
  53. package/dist/{chunk-3NSRL5E7.js → chunk-7Z7Q4GGS.js} +2 -2
  54. package/dist/{chunk-NYBZJ44G.js → chunk-A2A2YTMG.js} +108 -25
  55. package/dist/{chunk-SKEW3TQX.js → chunk-AHV4LNB5.js} +1 -1
  56. package/dist/{chunk-KAJT6HPI.js → chunk-AXPCESYO.js} +3 -3
  57. package/dist/{chunk-JMSB6CJT.js → chunk-C2WCPBF7.js} +1 -1
  58. package/dist/chunk-CJVVKOSR.js +73 -0
  59. package/dist/{chunk-2B4XCMH6.js → chunk-CULUZTWQ.js} +283 -41
  60. package/dist/{chunk-6QZK4O36.js → chunk-CVQYGMSR.js} +4 -4
  61. package/dist/{chunk-SEIZQZEE.js → chunk-D2FX3EPW.js} +1 -1
  62. package/dist/{chunk-LI3C2IQY.js → chunk-DB3ONZB4.js} +2 -2
  63. package/dist/{chunk-YU54LNC6.js → chunk-DE4Y6TCC.js} +6 -6
  64. package/dist/{chunk-65RN6ZCO.js → chunk-E4FJTUH4.js} +1 -1
  65. package/dist/{chunk-RLRDPZG4.js → chunk-EPCXUP3P.js} +3 -1
  66. package/dist/{chunk-OXEF6JHD.js → chunk-EX3GAPA4.js} +1 -1
  67. package/dist/{chunk-E3PLF7YB.js → chunk-EYK3GSRH.js} +4 -4
  68. package/dist/{chunk-SJN64NJX.js → chunk-GPEGOGRJ.js} +1 -1
  69. package/dist/chunk-GU3EJCVV.js +43 -0
  70. package/dist/{chunk-YNJ2H2FD.js → chunk-HQ6G3B5R.js} +2 -2
  71. package/dist/{chunk-6NHXKTQU.js → chunk-HZVVNGEW.js} +2 -2
  72. package/dist/{chunk-ZUKZJQGR.js → chunk-IPVKH2ST.js} +1 -1
  73. package/dist/{chunk-T3PRPFDY.js → chunk-J5TIV3J6.js} +5 -5
  74. package/dist/{chunk-F6BMJOSW.js → chunk-JU6W3XAU.js} +1 -1
  75. package/dist/{chunk-AWZNDM3B.js → chunk-JYG4B33G.js} +1 -1
  76. package/dist/{chunk-ZMWX5SDA.js → chunk-JZTHGAPA.js} +8 -8
  77. package/dist/{chunk-3RO2UWJQ.js → chunk-KGDWDSNL.js} +2 -2
  78. package/dist/{chunk-MY3UZO5U.js → chunk-KVQBWI5T.js} +3 -3
  79. package/dist/{chunk-HOIGXMI7.js → chunk-LXQ5FBBD.js} +1 -1
  80. package/dist/{chunk-D4OGEWLH.js → chunk-M5ICYGHT.js} +3 -3
  81. package/dist/{chunk-YLCSKVQQ.js → chunk-M5JDZ45W.js} +4 -4
  82. package/dist/{chunk-SKMWPXGV.js → chunk-MDEPU45E.js} +183 -28
  83. package/dist/{chunk-R7ZETVNR.js → chunk-MPWXGONV.js} +3 -3
  84. package/dist/{chunk-2XOHXZRC.js → chunk-NGDD6TXY.js} +20 -5
  85. package/dist/{chunk-WWTLAZQA.js → chunk-NQTHFF4W.js} +178 -39
  86. package/dist/{chunk-KLXYMPTM.js → chunk-OKXS7WDZ.js} +1 -1
  87. package/dist/{chunk-Q7CDBJXU.js → chunk-OLQRRFBX.js} +1 -1
  88. package/dist/{chunk-VSGKQ3HI.js → chunk-P7WQEVWA.js} +2 -2
  89. package/dist/{chunk-UUTWHVSV.js → chunk-Q7E4I6UA.js} +28 -16
  90. package/dist/{chunk-WXIVUIXA.js → chunk-R7437YI3.js} +2 -2
  91. package/dist/{chunk-5GIBNUBD.js → chunk-RHR6NARM.js} +2 -2
  92. package/dist/{chunk-QSZ37ROP.js → chunk-SAXBC4AZ.js} +1 -1
  93. package/dist/{chunk-U3MS6D5X.js → chunk-SIFVFP6T.js} +1 -1
  94. package/dist/{chunk-TVJYGZXB.js → chunk-SLFABHW3.js} +40 -10
  95. package/dist/{chunk-M2JGLFFS.js → chunk-TY4JT7W3.js} +1 -1
  96. package/dist/{chunk-YU4222G2.js → chunk-UI36QSBI.js} +28 -16
  97. package/dist/{chunk-OJRB5QKN.js → chunk-VQKRG3AC.js} +6 -6
  98. package/dist/{chunk-4S7CCOXB.js → chunk-WE2J62NC.js} +31 -17
  99. package/dist/{chunk-PWNQGITG.js → chunk-ZSZSSJCV.js} +1 -1
  100. package/dist/{chunk-I7B2DNVU.js → chunk-ZVSKMPBZ.js} +1 -1
  101. package/dist/{reapply-D6RSDYCK.js → reapply-CW3MA66V.js} +9 -9
  102. package/dist/src/index.js +20 -20
  103. package/package.json +1 -1
  104. package/dist/chunk-INR3RVQ3.js +0 -92
  105. package/dist/chunk-IZVAVXHQ.js +0 -255
@@ -1,52 +1,52 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-3RO2UWJQ.js";
4
+ } from "../chunk-KGDWDSNL.js";
5
5
  import {
6
6
  announceSubscriptionRequired,
7
7
  isDeferAnswer
8
8
  } from "../chunk-5OP5MQI7.js";
9
- import "../chunk-ZMWX5SDA.js";
9
+ import "../chunk-JZTHGAPA.js";
10
10
  import "../chunk-SGZJ5LYH.js";
11
- import "../chunk-E3PLF7YB.js";
12
- import "../chunk-I7B2DNVU.js";
13
- import "../chunk-JMSB6CJT.js";
14
- import "../chunk-L6IF4JOF.js";
15
- import "../chunk-4S7CCOXB.js";
16
- import "../chunk-A6WQF7FQ.js";
17
- import "../chunk-KLXYMPTM.js";
18
- import "../chunk-R7ZETVNR.js";
19
- import "../chunk-QSZ37ROP.js";
20
- import "../chunk-Q7CDBJXU.js";
11
+ import "../chunk-EYK3GSRH.js";
12
+ import "../chunk-ZVSKMPBZ.js";
13
+ import "../chunk-C2WCPBF7.js";
14
+ import "../chunk-6J2JC2RT.js";
15
+ import "../chunk-WE2J62NC.js";
16
+ import "../chunk-3EVPNIBE.js";
17
+ import "../chunk-OKXS7WDZ.js";
18
+ import "../chunk-MPWXGONV.js";
19
+ import "../chunk-SAXBC4AZ.js";
20
+ import "../chunk-OLQRRFBX.js";
21
21
  import "../chunk-XHKBHWLX.js";
22
22
  import "../chunk-N6IOSZOE.js";
23
- import "../chunk-RLRDPZG4.js";
23
+ import "../chunk-EPCXUP3P.js";
24
24
  import {
25
25
  askUser,
26
26
  isDecisionStopped,
27
27
  waitForQuestion
28
- } from "../chunk-2XOHXZRC.js";
29
- import "../chunk-6QZK4O36.js";
28
+ } from "../chunk-NGDD6TXY.js";
29
+ import "../chunk-CVQYGMSR.js";
30
30
  import "../chunk-POFBE6ZY.js";
31
31
  import "../chunk-GMXKITVA.js";
32
- import "../chunk-VSGKQ3HI.js";
32
+ import "../chunk-P7WQEVWA.js";
33
33
  import {
34
34
  SubscriptionRequiredError
35
- } from "../chunk-D4OGEWLH.js";
36
- import "../chunk-VQDJ6KB3.js";
37
- import "../chunk-UFNBKYWT.js";
35
+ } from "../chunk-M5ICYGHT.js";
36
+ import "../chunk-2ABTSGFT.js";
37
+ import "../chunk-2OY3ZZ5N.js";
38
38
  import {
39
39
  getMachineId
40
- } from "../chunk-HOIGXMI7.js";
40
+ } from "../chunk-LXQ5FBBD.js";
41
41
  import "../chunk-7QLSKOSU.js";
42
42
  import "../chunk-KZERVKTD.js";
43
- import "../chunk-LI3C2IQY.js";
44
- import "../chunk-NYBZJ44G.js";
43
+ import "../chunk-DB3ONZB4.js";
44
+ import "../chunk-A2A2YTMG.js";
45
45
  import "../chunk-T7E75EKA.js";
46
46
  import {
47
47
  getApiKey
48
- } from "../chunk-SJN64NJX.js";
49
- import "../chunk-65RN6ZCO.js";
48
+ } from "../chunk-GPEGOGRJ.js";
49
+ import "../chunk-E4FJTUH4.js";
50
50
  import {
51
51
  ELICITATION_ANSWERABLE_MODE,
52
52
  effectiveWaitSeconds,
@@ -57,7 +57,7 @@ import {
57
57
  planElicitationAsk,
58
58
  readElicitationFields,
59
59
  renderElicitationOutput
60
- } from "../chunk-WWTLAZQA.js";
60
+ } from "../chunk-NQTHFF4W.js";
61
61
 
62
62
  // bin/pushary-elicitation-hook.ts
63
63
  import { basename } from "path";
@@ -5,37 +5,37 @@ import {
5
5
  postLiveSession,
6
6
  postLiveSessionUntilAccepted,
7
7
  startLiveSessionHeartbeat
8
- } from "../chunk-WXIVUIXA.js";
8
+ } from "../chunk-R7437YI3.js";
9
9
  import {
10
10
  SESSION_IDLE_TIMEOUT_MS,
11
11
  describeIdleWindow,
12
12
  idleDeadlinePassed,
13
13
  startProcessOwnership,
14
14
  withSpawnProcessOwnership
15
- } from "../chunk-PWNQGITG.js";
16
- import "../chunk-R7ZETVNR.js";
17
- import "../chunk-QSZ37ROP.js";
15
+ } from "../chunk-ZSZSSJCV.js";
16
+ import "../chunk-MPWXGONV.js";
17
+ import "../chunk-SAXBC4AZ.js";
18
18
  import {
19
19
  transcriptsEnabled
20
- } from "../chunk-Q7CDBJXU.js";
20
+ } from "../chunk-OLQRRFBX.js";
21
21
  import {
22
22
  spawnClaude
23
23
  } from "../chunk-XHKBHWLX.js";
24
- import "../chunk-VSGKQ3HI.js";
24
+ import "../chunk-P7WQEVWA.js";
25
25
  import {
26
26
  getMachineId
27
- } from "../chunk-HOIGXMI7.js";
28
- import "../chunk-LI3C2IQY.js";
27
+ } from "../chunk-LXQ5FBBD.js";
28
+ import "../chunk-DB3ONZB4.js";
29
29
  import {
30
30
  resolveBinary
31
- } from "../chunk-NYBZJ44G.js";
31
+ } from "../chunk-A2A2YTMG.js";
32
32
  import "../chunk-T7E75EKA.js";
33
33
  import {
34
34
  getApiKey,
35
35
  getBaseUrl
36
- } from "../chunk-SJN64NJX.js";
37
- import "../chunk-65RN6ZCO.js";
38
- import "../chunk-WWTLAZQA.js";
36
+ } from "../chunk-GPEGOGRJ.js";
37
+ import "../chunk-E4FJTUH4.js";
38
+ import "../chunk-NQTHFF4W.js";
39
39
 
40
40
  // bin/pushary-gemini-bridge.ts
41
41
  import { existsSync } from "fs";
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  triggerAutoUpdate
4
- } from "../chunk-YU4222G2.js";
4
+ } from "../chunk-UI36QSBI.js";
5
5
  import {
6
6
  isGatingMoment,
7
7
  recordKeylessMoment
8
- } from "../chunk-F6BMJOSW.js";
8
+ } from "../chunk-JU6W3XAU.js";
9
9
  import {
10
10
  readHookInput
11
- } from "../chunk-3RO2UWJQ.js";
11
+ } from "../chunk-KGDWDSNL.js";
12
12
  import {
13
13
  announceSubscriptionRequired,
14
14
  denyReasonFrom,
15
15
  isDeferAnswer
16
16
  } from "../chunk-5OP5MQI7.js";
17
- import "../chunk-ZMWX5SDA.js";
17
+ import "../chunk-JZTHGAPA.js";
18
18
  import "../chunk-SGZJ5LYH.js";
19
- import "../chunk-E3PLF7YB.js";
20
- import "../chunk-I7B2DNVU.js";
21
- import "../chunk-JMSB6CJT.js";
22
- import "../chunk-L6IF4JOF.js";
23
- import "../chunk-4S7CCOXB.js";
24
- import "../chunk-A6WQF7FQ.js";
25
- import "../chunk-KLXYMPTM.js";
26
- import "../chunk-R7ZETVNR.js";
27
- import "../chunk-QSZ37ROP.js";
28
- import "../chunk-Q7CDBJXU.js";
19
+ import "../chunk-EYK3GSRH.js";
20
+ import "../chunk-ZVSKMPBZ.js";
21
+ import "../chunk-C2WCPBF7.js";
22
+ import "../chunk-6J2JC2RT.js";
23
+ import "../chunk-WE2J62NC.js";
24
+ import "../chunk-3EVPNIBE.js";
25
+ import "../chunk-OKXS7WDZ.js";
26
+ import "../chunk-MPWXGONV.js";
27
+ import "../chunk-SAXBC4AZ.js";
28
+ import "../chunk-OLQRRFBX.js";
29
29
  import "../chunk-XHKBHWLX.js";
30
30
  import {
31
31
  UNNAMED_ACTION,
@@ -45,11 +45,11 @@ import {
45
45
  repoKeyFor,
46
46
  reportEvent,
47
47
  scopePathFor
48
- } from "../chunk-2B4XCMH6.js";
48
+ } from "../chunk-CULUZTWQ.js";
49
49
  import {
50
50
  DEFAULT_SESSION
51
51
  } from "../chunk-N6IOSZOE.js";
52
- import "../chunk-RLRDPZG4.js";
52
+ import "../chunk-EPCXUP3P.js";
53
53
  import {
54
54
  DECISION_STOP_REASON,
55
55
  UNVERIFIABLE_APPROVAL_REASON,
@@ -58,41 +58,40 @@ import {
58
58
  isLocalQuestionHandoff,
59
59
  sendNotification,
60
60
  waitForQuestion
61
- } from "../chunk-2XOHXZRC.js";
61
+ } from "../chunk-NGDD6TXY.js";
62
62
  import {
63
63
  exitAfterClientReports
64
- } from "../chunk-6QZK4O36.js";
64
+ } from "../chunk-CVQYGMSR.js";
65
65
  import "../chunk-POFBE6ZY.js";
66
66
  import "../chunk-GMXKITVA.js";
67
- import "../chunk-VSGKQ3HI.js";
67
+ import "../chunk-P7WQEVWA.js";
68
68
  import {
69
69
  SubscriptionRequiredError
70
- } from "../chunk-D4OGEWLH.js";
71
- import "../chunk-VQDJ6KB3.js";
72
- import "../chunk-UFNBKYWT.js";
70
+ } from "../chunk-M5ICYGHT.js";
71
+ import "../chunk-2ABTSGFT.js";
72
+ import "../chunk-2OY3ZZ5N.js";
73
73
  import {
74
74
  getMachineId
75
- } from "../chunk-HOIGXMI7.js";
75
+ } from "../chunk-LXQ5FBBD.js";
76
76
  import "../chunk-7QLSKOSU.js";
77
77
  import {
78
78
  EXIT
79
79
  } from "../chunk-KZERVKTD.js";
80
- import "../chunk-LI3C2IQY.js";
81
- import "../chunk-NYBZJ44G.js";
80
+ import "../chunk-DB3ONZB4.js";
81
+ import "../chunk-A2A2YTMG.js";
82
82
  import "../chunk-T7E75EKA.js";
83
83
  import {
84
84
  getApiKey
85
- } from "../chunk-SJN64NJX.js";
86
- import "../chunk-65RN6ZCO.js";
85
+ } from "../chunk-GPEGOGRJ.js";
86
+ import "../chunk-E4FJTUH4.js";
87
87
  import {
88
- DECISION_LINE_MAX,
89
88
  KILL_REASON,
90
89
  effectiveWaitSeconds,
91
90
  gateOutputFor,
92
91
  hookWaitClamped,
93
92
  hookWaitDeadline,
94
93
  resolveGate
95
- } from "../chunk-WWTLAZQA.js";
94
+ } from "../chunk-NQTHFF4W.js";
96
95
 
97
96
  // bin/pushary-gemini-hook.ts
98
97
  import { basename } from "path";
@@ -185,7 +184,7 @@ var pushQuestion = async (apiKey, input, lookup, waitSeconds, mode, pollInterval
185
184
  toolName: lookup.tool,
186
185
  toolTarget: deriveToolTarget(lookup.tool, lookup.input),
187
186
  intent: readLastPrompt(input.session_id || DEFAULT_SESSION) ?? (input.transcript_path ? readLastUserPrompt(input.transcript_path) : void 0),
188
- action: description.slice(0, DECISION_LINE_MAX),
187
+ action: description,
189
188
  blocker: deriveBlocker(mode),
190
189
  actionBody: deriveActionBody(input.tool_name ?? "", input.tool_input ?? {}),
191
190
  repoKey: repoKeyFor(input.cwd)
@@ -1,63 +1,63 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-UUTWHVSV.js";
4
+ } from "../chunk-Q7E4I6UA.js";
5
5
  import {
6
6
  activeHookSource,
7
7
  normalizeToolCall,
8
8
  profileFromArgv
9
- } from "../chunk-T3PRPFDY.js";
10
- import "../chunk-KAJT6HPI.js";
11
- import "../chunk-IZVAVXHQ.js";
12
- import "../chunk-F6BMJOSW.js";
9
+ } from "../chunk-J5TIV3J6.js";
10
+ import "../chunk-AXPCESYO.js";
11
+ import "../chunk-CJVVKOSR.js";
12
+ import "../chunk-JU6W3XAU.js";
13
13
  import {
14
14
  readToolHookInput
15
- } from "../chunk-3RO2UWJQ.js";
15
+ } from "../chunk-KGDWDSNL.js";
16
16
  import "../chunk-5OP5MQI7.js";
17
- import "../chunk-ZMWX5SDA.js";
17
+ import "../chunk-JZTHGAPA.js";
18
18
  import "../chunk-SGZJ5LYH.js";
19
- import "../chunk-E3PLF7YB.js";
20
- import "../chunk-I7B2DNVU.js";
21
- import "../chunk-JMSB6CJT.js";
22
- import "../chunk-L6IF4JOF.js";
23
- import "../chunk-4S7CCOXB.js";
24
- import "../chunk-A6WQF7FQ.js";
25
- import "../chunk-KLXYMPTM.js";
26
- import "../chunk-R7ZETVNR.js";
27
- import "../chunk-QSZ37ROP.js";
28
- import "../chunk-Q7CDBJXU.js";
19
+ import "../chunk-EYK3GSRH.js";
20
+ import "../chunk-ZVSKMPBZ.js";
21
+ import "../chunk-C2WCPBF7.js";
22
+ import "../chunk-6J2JC2RT.js";
23
+ import "../chunk-WE2J62NC.js";
24
+ import "../chunk-3EVPNIBE.js";
25
+ import "../chunk-OKXS7WDZ.js";
26
+ import "../chunk-MPWXGONV.js";
27
+ import "../chunk-SAXBC4AZ.js";
28
+ import "../chunk-OLQRRFBX.js";
29
29
  import "../chunk-XHKBHWLX.js";
30
30
  import {
31
31
  canonicalGateInputs
32
- } from "../chunk-2B4XCMH6.js";
32
+ } from "../chunk-CULUZTWQ.js";
33
33
  import "../chunk-N6IOSZOE.js";
34
- import "../chunk-RLRDPZG4.js";
35
- import "../chunk-2XOHXZRC.js";
34
+ import "../chunk-EPCXUP3P.js";
35
+ import "../chunk-NGDD6TXY.js";
36
36
  import {
37
37
  exitAfterClientReports
38
- } from "../chunk-6QZK4O36.js";
38
+ } from "../chunk-CVQYGMSR.js";
39
39
  import "../chunk-POFBE6ZY.js";
40
40
  import {
41
41
  exitOnHelpFlag
42
- } from "../chunk-6NHXKTQU.js";
42
+ } from "../chunk-HZVVNGEW.js";
43
43
  import "../chunk-GMXKITVA.js";
44
- import "../chunk-VSGKQ3HI.js";
45
- import "../chunk-D4OGEWLH.js";
46
- import "../chunk-VQDJ6KB3.js";
47
- import "../chunk-UFNBKYWT.js";
48
- import "../chunk-HOIGXMI7.js";
44
+ import "../chunk-P7WQEVWA.js";
45
+ import "../chunk-M5ICYGHT.js";
46
+ import "../chunk-2ABTSGFT.js";
47
+ import "../chunk-2OY3ZZ5N.js";
48
+ import "../chunk-LXQ5FBBD.js";
49
49
  import "../chunk-7QLSKOSU.js";
50
50
  import {
51
51
  EXIT
52
52
  } from "../chunk-KZERVKTD.js";
53
- import "../chunk-LI3C2IQY.js";
54
- import "../chunk-NYBZJ44G.js";
53
+ import "../chunk-DB3ONZB4.js";
54
+ import "../chunk-A2A2YTMG.js";
55
55
  import "../chunk-T7E75EKA.js";
56
- import "../chunk-SJN64NJX.js";
57
- import "../chunk-65RN6ZCO.js";
56
+ import "../chunk-GPEGOGRJ.js";
57
+ import "../chunk-E4FJTUH4.js";
58
58
  import {
59
59
  renderPreToolUseVerdict
60
- } from "../chunk-WWTLAZQA.js";
60
+ } from "../chunk-NQTHFF4W.js";
61
61
 
62
62
  // bin/pushary-hook.ts
63
63
  exitOnHelpFlag("hook");
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runBrowserLogin
4
- } from "../chunk-AWZNDM3B.js";
4
+ } from "../chunk-JYG4B33G.js";
5
5
  import "../chunk-PUZZELE6.js";
6
6
  import {
7
7
  recoverDaemonAfterLogin
8
- } from "../chunk-4S7CCOXB.js";
8
+ } from "../chunk-WE2J62NC.js";
9
9
  import "../chunk-XHKBHWLX.js";
10
10
  import "../chunk-3EGEA4KH.js";
11
11
  import {
@@ -13,7 +13,7 @@ import {
13
13
  } from "../chunk-U4TMAANR.js";
14
14
  import {
15
15
  exitOnHelpFlag
16
- } from "../chunk-6NHXKTQU.js";
16
+ } from "../chunk-HZVVNGEW.js";
17
17
  import {
18
18
  parseFlags
19
19
  } from "../chunk-GMXKITVA.js";
@@ -22,28 +22,28 @@ import {
22
22
  readControlMode,
23
23
  readKeySource,
24
24
  writeKey
25
- } from "../chunk-VSGKQ3HI.js";
25
+ } from "../chunk-P7WQEVWA.js";
26
26
  import {
27
27
  checkApiKey,
28
28
  describeKeyCheck
29
- } from "../chunk-VQDJ6KB3.js";
30
- import "../chunk-UFNBKYWT.js";
31
- import "../chunk-HOIGXMI7.js";
29
+ } from "../chunk-2ABTSGFT.js";
30
+ import "../chunk-2OY3ZZ5N.js";
31
+ import "../chunk-LXQ5FBBD.js";
32
32
  import {
33
33
  UsageError
34
34
  } from "../chunk-7QLSKOSU.js";
35
35
  import {
36
36
  EXIT
37
37
  } from "../chunk-KZERVKTD.js";
38
- import "../chunk-LI3C2IQY.js";
39
- import "../chunk-NYBZJ44G.js";
38
+ import "../chunk-DB3ONZB4.js";
39
+ import "../chunk-A2A2YTMG.js";
40
40
  import "../chunk-T7E75EKA.js";
41
- import "../chunk-SJN64NJX.js";
42
- import "../chunk-65RN6ZCO.js";
41
+ import "../chunk-GPEGOGRJ.js";
42
+ import "../chunk-E4FJTUH4.js";
43
43
  import {
44
44
  getPackageVersion,
45
45
  isValidApiKey
46
- } from "../chunk-WWTLAZQA.js";
46
+ } from "../chunk-NQTHFF4W.js";
47
47
 
48
48
  // bin/pushary-login.ts
49
49
  exitOnHelpFlag("login");
@@ -4,33 +4,33 @@ import {
4
4
  } from "../chunk-U4TMAANR.js";
5
5
  import {
6
6
  exitOnHelpFlag
7
- } from "../chunk-6NHXKTQU.js";
7
+ } from "../chunk-HZVVNGEW.js";
8
8
  import {
9
9
  parseFlags
10
10
  } from "../chunk-GMXKITVA.js";
11
11
  import {
12
12
  clearKey,
13
13
  readKeySource
14
- } from "../chunk-VSGKQ3HI.js";
14
+ } from "../chunk-P7WQEVWA.js";
15
15
  import {
16
16
  UsageError
17
17
  } from "../chunk-7QLSKOSU.js";
18
18
  import {
19
19
  EXIT
20
20
  } from "../chunk-KZERVKTD.js";
21
- import "../chunk-LI3C2IQY.js";
21
+ import "../chunk-DB3ONZB4.js";
22
22
  import {
23
23
  claudeJson,
24
24
  codexConfigToml,
25
25
  cursorUserMcp,
26
26
  geminiSettings
27
- } from "../chunk-NYBZJ44G.js";
27
+ } from "../chunk-A2A2YTMG.js";
28
28
  import "../chunk-T7E75EKA.js";
29
29
  import {
30
30
  getBaseUrl
31
- } from "../chunk-SJN64NJX.js";
32
- import "../chunk-65RN6ZCO.js";
33
- import "../chunk-WWTLAZQA.js";
31
+ } from "../chunk-GPEGOGRJ.js";
32
+ import "../chunk-E4FJTUH4.js";
33
+ import "../chunk-NQTHFF4W.js";
34
34
 
35
35
  // bin/pushary-logout.ts
36
36
  import { existsSync } from "fs";
@@ -1,29 +1,98 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  MCP_BRIDGE_PATH,
4
- createMcpStdioBridge
5
- } from "../chunk-TVJYGZXB.js";
6
- import "../chunk-D4OGEWLH.js";
7
- import "../chunk-VQDJ6KB3.js";
4
+ bridgeError,
5
+ createMcpStdioBridge,
6
+ parseBridgeLine
7
+ } from "../chunk-SLFABHW3.js";
8
+ import "../chunk-M5ICYGHT.js";
9
+ import "../chunk-2ABTSGFT.js";
8
10
  import {
9
11
  installNetworkDefaults
10
- } from "../chunk-UFNBKYWT.js";
11
- import "../chunk-HOIGXMI7.js";
12
+ } from "../chunk-2OY3ZZ5N.js";
13
+ import "../chunk-LXQ5FBBD.js";
12
14
  import "../chunk-7QLSKOSU.js";
13
15
  import {
14
16
  EXIT
15
17
  } from "../chunk-KZERVKTD.js";
16
- import "../chunk-NYBZJ44G.js";
18
+ import "../chunk-A2A2YTMG.js";
17
19
  import "../chunk-T7E75EKA.js";
18
20
  import {
19
21
  getApiKey,
20
22
  getBaseUrl
21
- } from "../chunk-SJN64NJX.js";
22
- import "../chunk-65RN6ZCO.js";
23
- import "../chunk-WWTLAZQA.js";
23
+ } from "../chunk-GPEGOGRJ.js";
24
+ import "../chunk-E4FJTUH4.js";
25
+ import "../chunk-NQTHFF4W.js";
26
+
27
+ // src/mcp-stdio-stream.ts
28
+ var MCP_MAX_IN_FLIGHT = 16;
29
+ var MCP_CONTROL_RESERVE = 4;
30
+ var MCP_MAX_LINE_BYTES = 1024 * 1024;
31
+ var isControl = (line) => {
32
+ const parsed = parseBridgeLine(line);
33
+ if (!parsed.ok || typeof parsed.payload !== "object" || parsed.payload === null || Array.isArray(parsed.payload)) return false;
34
+ const message = parsed.payload;
35
+ if (!("method" in message)) return false;
36
+ if (message.method === "notifications/cancelled") return true;
37
+ if (message.method !== "tools/call" || !("params" in message)) return false;
38
+ const params = message.params;
39
+ return typeof params === "object" && params !== null && "name" in params && params.name === "cancel_question";
40
+ };
41
+ var writeMcpMessage = (output, message) => new Promise((resolve, reject) => {
42
+ output.write(`${JSON.stringify(message)}
43
+ `, (error) => error ? reject(error) : resolve());
44
+ });
45
+ var runMcpStdioStream = async (input, bridge2, emit) => {
46
+ const pending = /* @__PURE__ */ new Set();
47
+ let failure;
48
+ const line = Buffer.allocUnsafe(MCP_MAX_LINE_BYTES);
49
+ let lineLength = 0;
50
+ let discarding = false;
51
+ const forward = async (text) => {
52
+ if (!text.trim()) return;
53
+ const limit = MCP_MAX_IN_FLIGHT + (isControl(text) ? MCP_CONTROL_RESERVE : 0);
54
+ if (pending.size >= limit) {
55
+ await bridge2.reject(text, "Pushary MCP bridge is busy. Retry after an outstanding request finishes.");
56
+ return;
57
+ }
58
+ const task = bridge2.forward(text).catch((error) => {
59
+ failure = error;
60
+ }).finally(() => pending.delete(task));
61
+ pending.add(task);
62
+ };
63
+ try {
64
+ for await (const chunk of input) {
65
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
66
+ let start = 0;
67
+ while (start < bytes.length) {
68
+ if (failure) throw failure;
69
+ const newline = bytes.indexOf(10, start);
70
+ const end = newline < 0 ? bytes.length : newline;
71
+ if (!discarding) {
72
+ if (lineLength + end - start > MCP_MAX_LINE_BYTES) {
73
+ lineLength = 0;
74
+ discarding = true;
75
+ await emit(bridgeError(null, "MCP input line exceeds the 1 MiB limit."));
76
+ } else {
77
+ lineLength += bytes.copy(line, lineLength, start, end);
78
+ }
79
+ }
80
+ if (newline >= 0) {
81
+ if (!discarding) await forward(line.toString("utf8", 0, lineLength));
82
+ lineLength = 0;
83
+ discarding = false;
84
+ }
85
+ start = end + 1;
86
+ }
87
+ }
88
+ if (!discarding && lineLength > 0) await forward(line.toString("utf8", 0, lineLength));
89
+ } finally {
90
+ await Promise.all(pending);
91
+ }
92
+ if (failure) throw failure;
93
+ };
24
94
 
25
95
  // bin/pushary-mcp.ts
26
- import { createInterface } from "readline";
27
96
  installNetworkDefaults();
28
97
  var readApiKey = () => {
29
98
  try {
@@ -32,26 +101,14 @@ var readApiKey = () => {
32
101
  return null;
33
102
  }
34
103
  };
35
- var writeMessage = (message) => {
36
- process.stdout.write(`${JSON.stringify(message)}
37
- `);
38
- };
104
+ var writeMessage = (message) => writeMcpMessage(process.stdout, message);
39
105
  var bridge = createMcpStdioBridge({
40
106
  endpoint: `${getBaseUrl()}${MCP_BRIDGE_PATH}`,
41
107
  apiKey: readApiKey,
42
108
  fetchImpl: globalThis.fetch,
43
109
  emit: writeMessage
44
110
  });
45
- var inFlight = /* @__PURE__ */ new Set();
46
- var forwardLine = (line) => {
47
- if (!line.trim()) return;
48
- const forwarding = bridge.forward(line).finally(() => inFlight.delete(forwarding));
49
- inFlight.add(forwarding);
50
- };
51
- var exitWhenDrained = async () => {
52
- await Promise.all(inFlight);
53
- process.stdout.write("", () => process.exit(EXIT.OK));
54
- };
55
- var lines = createInterface({ input: process.stdin, crlfDelay: Infinity });
56
- lines.on("line", forwardLine);
57
- lines.on("close", () => void exitWhenDrained());
111
+ runMcpStdioStream(process.stdin, bridge, writeMessage).catch((error) => {
112
+ console.error(error instanceof Error ? error.message : String(error));
113
+ process.exitCode = EXIT.FAILED;
114
+ });
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exitOnFailedResponse
4
- } from "../chunk-OXEF6JHD.js";
4
+ } from "../chunk-EX3GAPA4.js";
5
5
  import {
6
6
  createIo
7
7
  } from "../chunk-U4TMAANR.js";
8
8
  import {
9
9
  exitOnHelpFlag
10
- } from "../chunk-6NHXKTQU.js";
10
+ } from "../chunk-HZVVNGEW.js";
11
11
  import {
12
12
  rejectUnknownFlags
13
13
  } from "../chunk-GMXKITVA.js";
14
- import "../chunk-VQDJ6KB3.js";
15
- import "../chunk-UFNBKYWT.js";
16
- import "../chunk-HOIGXMI7.js";
14
+ import "../chunk-2ABTSGFT.js";
15
+ import "../chunk-2OY3ZZ5N.js";
16
+ import "../chunk-LXQ5FBBD.js";
17
17
  import {
18
18
  UsageError
19
19
  } from "../chunk-7QLSKOSU.js";
20
20
  import {
21
21
  EXIT
22
22
  } from "../chunk-KZERVKTD.js";
23
- import "../chunk-NYBZJ44G.js";
23
+ import "../chunk-A2A2YTMG.js";
24
24
  import "../chunk-T7E75EKA.js";
25
25
  import {
26
26
  getApiKey,
27
27
  getBaseUrl
28
- } from "../chunk-SJN64NJX.js";
29
- import "../chunk-65RN6ZCO.js";
30
- import "../chunk-WWTLAZQA.js";
28
+ } from "../chunk-GPEGOGRJ.js";
29
+ import "../chunk-E4FJTUH4.js";
30
+ import "../chunk-NQTHFF4W.js";
31
31
 
32
32
  // src/cli/mode-request.ts
33
33
  var parseDuration = (value) => {