@pushary/agent-hooks 1.3.0 → 1.3.1

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 (85) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/data/SKILL.md +3 -3
  3. package/data/cursor-plugin/skills/pushary/SKILL.md +2 -2
  4. package/data/vscode-plugin/skills/pushary/SKILL.md +2 -2
  5. package/dist/bin/pushary-bell-hook.js +20 -20
  6. package/dist/bin/pushary-bell.js +7 -7
  7. package/dist/bin/pushary-claude.js +20 -20
  8. package/dist/bin/pushary-clean.js +21 -21
  9. package/dist/bin/pushary-codex-bridge.js +11 -11
  10. package/dist/bin/pushary-codex-hook.js +24 -24
  11. package/dist/bin/pushary-codex.js +7 -7
  12. package/dist/bin/pushary-connect.js +7 -7
  13. package/dist/bin/pushary-cowork.js +3 -3
  14. package/dist/bin/pushary-daemon.js +24 -24
  15. package/dist/bin/pushary-disconnect.js +11 -11
  16. package/dist/bin/pushary-doctor.js +35 -22
  17. package/dist/bin/pushary-elicitation-hook.js +19 -19
  18. package/dist/bin/pushary-gemini-bridge.js +10 -10
  19. package/dist/bin/pushary-gemini-hook.js +21 -21
  20. package/dist/bin/pushary-hook.js +30 -40
  21. package/dist/bin/pushary-login.js +8 -8
  22. package/dist/bin/pushary-logout.js +5 -5
  23. package/dist/bin/pushary-mode.js +3 -3
  24. package/dist/bin/pushary-notification-hook.js +22 -22
  25. package/dist/bin/pushary-opencode-hook.js +21 -21
  26. package/dist/bin/pushary-permission-denied-hook.js +26 -26
  27. package/dist/bin/pushary-permission-hook.js +30 -29
  28. package/dist/bin/pushary-post-hook.js +22 -22
  29. package/dist/bin/pushary-prompt-hook.js +22 -22
  30. package/dist/bin/pushary-session-end-hook.js +22 -22
  31. package/dist/bin/pushary-session-start-hook.js +24 -24
  32. package/dist/bin/pushary-setup.js +27 -27
  33. package/dist/bin/pushary-stats.js +2 -2
  34. package/dist/bin/pushary-status.js +11 -11
  35. package/dist/bin/pushary-stop-hook.js +22 -22
  36. package/dist/bin/pushary-stopfailure-hook.js +22 -22
  37. package/dist/bin/pushary-transcript-register.js +18 -18
  38. package/dist/bin/pushary-transcripts.js +6 -6
  39. package/dist/bin/pushary-upgrade.js +15 -15
  40. package/dist/bin/pushary-wait.js +3 -3
  41. package/dist/{chunk-RHLUJE4H.js → chunk-34NNTYK6.js} +1 -1
  42. package/dist/{chunk-EJZCV5G4.js → chunk-35RPUNYU.js} +1 -1
  43. package/dist/{chunk-K7UIAE7I.js → chunk-465UENKO.js} +2 -2
  44. package/dist/{chunk-XBO42HKH.js → chunk-5SALHATY.js} +2 -2
  45. package/dist/{chunk-WPJS3OZH.js → chunk-5UWDYOZX.js} +20 -1
  46. package/dist/{chunk-POAFXBNH.js → chunk-5WLH2ENB.js} +1 -1
  47. package/dist/{chunk-KPNGPRYU.js → chunk-5XKMOZO6.js} +4 -4
  48. package/dist/{chunk-KS4P6F3R.js → chunk-6HH4IH4K.js} +4 -4
  49. package/dist/{chunk-XBJW4MV5.js → chunk-AFKOWCMQ.js} +1 -1
  50. package/dist/{chunk-FGVNU7XD.js → chunk-AFOTOA24.js} +1 -1
  51. package/dist/{chunk-B3S4SF3D.js → chunk-CDSL3LLO.js} +1 -1
  52. package/dist/{chunk-N43EQPJK.js → chunk-CKLWJ6EL.js} +10 -2
  53. package/dist/{chunk-2PLEJ7SY.js → chunk-EAGMQMRM.js} +1 -1
  54. package/dist/{chunk-BYGEZI7B.js → chunk-FGNABUPN.js} +1 -1
  55. package/dist/{chunk-A5ZWYQFV.js → chunk-HCTSTMDD.js} +4 -4
  56. package/dist/{chunk-X3KIGNIP.js → chunk-I2OLM3DM.js} +30 -21
  57. package/dist/{chunk-EYMMU5HC.js → chunk-JZA2JOGO.js} +1 -1
  58. package/dist/{chunk-OE6U2AXM.js → chunk-KHGIM2BN.js} +3 -3
  59. package/dist/{chunk-JYEGOYQC.js → chunk-KLZJEMSE.js} +1 -1
  60. package/dist/{chunk-BNDHXPTQ.js → chunk-LWT34GSY.js} +20 -13
  61. package/dist/{chunk-BL4SQNO6.js → chunk-NDSOOJDX.js} +1 -1
  62. package/dist/{chunk-YF4JDCU4.js → chunk-OMP3KDDU.js} +1 -1
  63. package/dist/{chunk-EU6JH7KU.js → chunk-P232YODQ.js} +8 -8
  64. package/dist/{chunk-K4TAUYUJ.js → chunk-PEV6ULSM.js} +3 -3
  65. package/dist/{chunk-4V24U44H.js → chunk-PHXU4NOP.js} +2 -2
  66. package/dist/{chunk-3AIFWTVB.js → chunk-QDYJQLXT.js} +2 -2
  67. package/dist/{chunk-DVO4SZMJ.js → chunk-QOCWB4Q6.js} +3 -3
  68. package/dist/{chunk-EKQAKSGI.js → chunk-R5CU7ED6.js} +1 -1
  69. package/dist/{chunk-XEXOHUJ6.js → chunk-REIZ5GXG.js} +4 -4
  70. package/dist/{chunk-UVXNYYHG.js → chunk-RERJ2ZDV.js} +6 -6
  71. package/dist/{chunk-ZHL62DRA.js → chunk-SGZE2JBF.js} +3 -3
  72. package/dist/{chunk-YKLCWWEI.js → chunk-SGZJ5LYH.js} +1 -1
  73. package/dist/{chunk-4LL6LG5X.js → chunk-T7E75EKA.js} +4 -3
  74. package/dist/{chunk-RVDHN2TJ.js → chunk-TGG4FWWB.js} +2 -2
  75. package/dist/{chunk-DON24PNT.js → chunk-TW7KA27C.js} +1 -1
  76. package/dist/{chunk-WXXDHGTZ.js → chunk-WOBHHXW5.js} +4 -4
  77. package/dist/{chunk-MU275U5A.js → chunk-XOUQUZ43.js} +2 -2
  78. package/dist/{chunk-IAEVVUXO.js → chunk-XP2KRTZD.js} +1 -1
  79. package/dist/{chunk-E7WBNGJS.js → chunk-XVE52YFZ.js} +1 -1
  80. package/dist/{chunk-A2URMNFM.js → chunk-YXWM4TNX.js} +1 -1
  81. package/dist/{reapply-FUCAKR6Z.js → reapply-ADFRVH5N.js} +9 -9
  82. package/dist/src/index.d.ts +2 -2
  83. package/dist/src/index.js +13 -13
  84. package/package.json +1 -1
  85. /package/dist/{chunk-KBITFQST.js → chunk-P32LPT2L.js} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  decodePublicKey,
4
4
  generateSessionKey,
5
5
  wrapSessionKey
6
- } from "./chunk-B3S4SF3D.js";
6
+ } from "./chunk-CDSL3LLO.js";
7
7
  import {
8
8
  fetchTranscriptRecipients,
9
9
  uploadTranscriptRecords
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  AGENT_CHOICES
3
- } from "./chunk-BYGEZI7B.js";
3
+ } from "./chunk-FGNABUPN.js";
4
4
  import {
5
5
  isBridgeLocator
6
- } from "./chunk-JYEGOYQC.js";
6
+ } from "./chunk-KLZJEMSE.js";
7
7
  import {
8
8
  pusharyHookExecutable
9
- } from "./chunk-DVO4SZMJ.js";
9
+ } from "./chunk-QOCWB4Q6.js";
10
10
  import {
11
11
  BELL_HOOK_BINARY
12
- } from "./chunk-2PLEJ7SY.js";
12
+ } from "./chunk-EAGMQMRM.js";
13
13
 
14
14
  // src/setup/hook-ownership.ts
15
15
  var commandsIn = (value) => {
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  detectClaudeVersion
3
- } from "./chunk-XBJW4MV5.js";
3
+ } from "./chunk-AFKOWCMQ.js";
4
4
  import {
5
5
  addClaudeMcpServer,
6
6
  addPusharyHooks,
7
7
  addPusharyToolPermissions
8
- } from "./chunk-ZHL62DRA.js";
8
+ } from "./chunk-SGZE2JBF.js";
9
9
  import {
10
10
  claudeUnprovenHolds,
11
11
  claudeWired,
12
12
  codexUnprovenHolds,
13
13
  codexWired,
14
14
  geminiWired
15
- } from "./chunk-DVO4SZMJ.js";
15
+ } from "./chunk-QOCWB4Q6.js";
16
16
  import {
17
17
  CLAUDE_HOOK_BINARY,
18
18
  CLAUDE_HOOK_EVENTS,
@@ -24,7 +24,7 @@ import {
24
24
  needsReregistration,
25
25
  registrationSignatures,
26
26
  supportedClaudeEvents
27
- } from "./chunk-OE6U2AXM.js";
27
+ } from "./chunk-KHGIM2BN.js";
28
28
  import {
29
29
  CODEX_HOOK_BINARY,
30
30
  addCodexHookTrust,
@@ -44,12 +44,12 @@ import {
44
44
  registrationHolderOf,
45
45
  resolveGlobalBinary,
46
46
  vscodePluginMcp
47
- } from "./chunk-RHLUJE4H.js";
47
+ } from "./chunk-34NNTYK6.js";
48
48
  import {
49
49
  readJsonSafe,
50
50
  writeFileAtomic,
51
51
  writeJsonAtomic
52
- } from "./chunk-4LL6LG5X.js";
52
+ } from "./chunk-T7E75EKA.js";
53
53
 
54
54
  // src/reapply.ts
55
55
  import { dirname, join } from "path";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  CLAUDE_HOOK_EVENTS,
3
3
  supportedClaudeEvents
4
- } from "./chunk-OE6U2AXM.js";
4
+ } from "./chunk-KHGIM2BN.js";
5
5
  import {
6
6
  guardBinary,
7
7
  holdBudgetOf,
8
8
  isProtectedByScope,
9
9
  registerHookEntry
10
- } from "./chunk-RHLUJE4H.js";
10
+ } from "./chunk-34NNTYK6.js";
11
11
  import {
12
12
  HOOK_LOCATOR_BINARY,
13
13
  withHookHoldBudget
14
- } from "./chunk-WPJS3OZH.js";
14
+ } from "./chunk-5UWDYOZX.js";
15
15
 
16
16
  // src/claude-config.ts
17
17
  import { join } from "path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeJsonAtomicDurable
3
- } from "./chunk-4LL6LG5X.js";
3
+ } from "./chunk-T7E75EKA.js";
4
4
 
5
5
  // src/transcript-recipient-pin.ts
6
6
  import { existsSync, mkdirSync, readFileSync, rmSync } from "fs";
@@ -1,5 +1,5 @@
1
1
  // src/cli/fsx.ts
2
- import { copyFileSync, existsSync, fsyncSync, mkdirSync, openSync, closeSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "fs";
2
+ import { copyFileSync, lstatSync, realpathSync, existsSync, fsyncSync, mkdirSync, openSync, closeSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "fs";
3
3
  import { dirname, join } from "path";
4
4
  var readJsonSafe = (filePath) => {
5
5
  let raw;
@@ -24,7 +24,8 @@ var backupFile = (filePath) => {
24
24
  return target;
25
25
  };
26
26
  var writeFileAtomic = (filePath, contents, mode, encoding = "utf-8") => {
27
- const dir = dirname(filePath);
27
+ const target = lstatSync(filePath, { throwIfNoEntry: false })?.isSymbolicLink() ? realpathSync(filePath) : filePath;
28
+ const dir = dirname(target);
28
29
  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
29
30
  const temp = join(dir, `.${process.pid}-${stamp()}.pushary-tmp`);
30
31
  try {
@@ -35,7 +36,7 @@ var writeFileAtomic = (filePath, contents, mode, encoding = "utf-8") => {
35
36
  } finally {
36
37
  closeSync(handle);
37
38
  }
38
- renameSync(temp, filePath);
39
+ renameSync(temp, target);
39
40
  } catch (err) {
40
41
  try {
41
42
  if (existsSync(temp)) unlinkSync(temp);
@@ -15,10 +15,10 @@ import {
15
15
  } from "./chunk-EYRGBYZG.js";
16
16
  import {
17
17
  reportedInstallSource
18
- } from "./chunk-POAFXBNH.js";
18
+ } from "./chunk-5WLH2ENB.js";
19
19
  import {
20
20
  isAnswerSource
21
- } from "./chunk-WPJS3OZH.js";
21
+ } from "./chunk-5UWDYOZX.js";
22
22
 
23
23
  // src/reach.ts
24
24
  var reachVerdict = (channels) => {
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  isValidApiKey,
15
15
  normalizeKeyScope
16
- } from "./chunk-WPJS3OZH.js";
16
+ } from "./chunk-5UWDYOZX.js";
17
17
 
18
18
  // src/session.ts
19
19
  var samePusharyAccount = (left, right) => left.kind === "ok" && right.kind === "ok" && left.identity.workspaceId !== "" && left.identity.workspaceId === right.identity.workspaceId && left.identity.siteId === right.identity.siteId;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  NOTIFICATION_PUSH_TYPES,
3
3
  POSTTOOLUSE_MIRROR_ONLY_TOOLS
4
- } from "./chunk-IAEVVUXO.js";
4
+ } from "./chunk-XP2KRTZD.js";
5
5
  import {
6
6
  cancelQuestion,
7
7
  isPolicyConfig,
@@ -10,13 +10,13 @@ import {
10
10
  } from "./chunk-LGXUGYUH.js";
11
11
  import {
12
12
  getMachineId
13
- } from "./chunk-K7UIAE7I.js";
13
+ } from "./chunk-465UENKO.js";
14
14
  import {
15
15
  withRetry
16
16
  } from "./chunk-EYRGBYZG.js";
17
17
  import {
18
18
  reportedInstallSource
19
- } from "./chunk-POAFXBNH.js";
19
+ } from "./chunk-5WLH2ENB.js";
20
20
  import {
21
21
  getApiKey,
22
22
  getBaseUrl
@@ -44,7 +44,7 @@ import {
44
44
  resolveAutoResolveOrigin,
45
45
  resolvePolicy,
46
46
  toToolLookup
47
- } from "./chunk-WPJS3OZH.js";
47
+ } from "./chunk-5UWDYOZX.js";
48
48
 
49
49
  // src/policy.ts
50
50
  import { createHash } from "crypto";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-RHLUJE4H.js";
3
+ } from "./chunk-34NNTYK6.js";
4
4
  import {
5
5
  readJsonSafe
6
- } from "./chunk-4LL6LG5X.js";
6
+ } from "./chunk-T7E75EKA.js";
7
7
 
8
8
  // src/process-ownership.ts
9
9
  import { createHash, randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PRETOOLUSE_GATED_TOOLS
3
- } from "./chunk-WPJS3OZH.js";
3
+ } from "./chunk-5UWDYOZX.js";
4
4
 
5
5
  // src/claude-tools.ts
6
6
  var POSTTOOLUSE_MIRROR_ONLY_TOOLS = ["TodoWrite", "Task", "WebFetch", "WebSearch"];
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOOK_BUDGETS,
3
3
  OPENCODE_APPROVAL_EVENT
4
- } from "./chunk-WPJS3OZH.js";
4
+ } from "./chunk-5UWDYOZX.js";
5
5
 
6
6
  // src/opencode-plugin.ts
7
7
  var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readTranscriptPreference
3
- } from "./chunk-XBO42HKH.js";
3
+ } from "./chunk-5SALHATY.js";
4
4
 
5
5
  // src/transcript-setting.ts
6
6
  var transcriptEnvironmentPreference = () => {
@@ -8,15 +8,15 @@ import {
8
8
  reapplyGeminiSettings,
9
9
  reapplyVsCodePlugin,
10
10
  repairCodexHolds
11
- } from "./chunk-UVXNYYHG.js";
12
- import "./chunk-XBJW4MV5.js";
13
- import "./chunk-ZHL62DRA.js";
14
- import "./chunk-DVO4SZMJ.js";
15
- import "./chunk-OE6U2AXM.js";
16
- import "./chunk-IAEVVUXO.js";
17
- import "./chunk-RHLUJE4H.js";
18
- import "./chunk-4LL6LG5X.js";
19
- import "./chunk-WPJS3OZH.js";
11
+ } from "./chunk-RERJ2ZDV.js";
12
+ import "./chunk-AFKOWCMQ.js";
13
+ import "./chunk-SGZE2JBF.js";
14
+ import "./chunk-QOCWB4Q6.js";
15
+ import "./chunk-KHGIM2BN.js";
16
+ import "./chunk-XP2KRTZD.js";
17
+ import "./chunk-34NNTYK6.js";
18
+ import "./chunk-T7E75EKA.js";
19
+ import "./chunk-5UWDYOZX.js";
20
20
  export {
21
21
  inspectConfiguredManagedProviders,
22
22
  reapplyAllAgents,
@@ -1,6 +1,6 @@
1
+ import { CanonicalGateInputs, ReceiptMeta } from '@pushary/hook-mapping';
1
2
  import { ClaudePreToolUseOutput, PolicyConfig, ApprovalMode, ModeState, AutoResolveOrigin, AgentQuestion } from '@pushary/contracts';
2
3
  export { ApprovalMode, ModeState, PolicyConfig, ToolPolicy, resolvePolicy } from '@pushary/contracts';
3
- import { ReceiptMeta } from '@pushary/hook-mapping';
4
4
 
5
5
  interface ToolInput {
6
6
  tool_name: string;
@@ -12,7 +12,7 @@ interface ToolInput {
12
12
  permission_mode?: string;
13
13
  }
14
14
  type HookOutput = ClaudePreToolUseOutput;
15
- declare const handlePreToolUse: (input: ToolInput) => Promise<HookOutput | undefined>;
15
+ declare const handlePreToolUse: (input: ToolInput, canonical?: CanonicalGateInputs | null) => Promise<HookOutput | undefined>;
16
16
 
17
17
  declare const getPolicy: (apiKey: string, expectedVersion?: string | null, agent?: string, repoAware?: boolean, sessionId?: string) => Promise<PolicyConfig>;
18
18
 
package/dist/src/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  handlePreToolUse
3
- } from "../chunk-X3KIGNIP.js";
4
- import "../chunk-BNDHXPTQ.js";
5
- import "../chunk-ZHL62DRA.js";
6
- import "../chunk-A5ZWYQFV.js";
7
- import "../chunk-YF4JDCU4.js";
3
+ } from "../chunk-I2OLM3DM.js";
4
+ import "../chunk-LWT34GSY.js";
5
+ import "../chunk-SGZE2JBF.js";
6
+ import "../chunk-HCTSTMDD.js";
7
+ import "../chunk-OMP3KDDU.js";
8
8
  import "../chunk-YHG74UFF.js";
9
- import "../chunk-OE6U2AXM.js";
9
+ import "../chunk-KHGIM2BN.js";
10
10
  import {
11
11
  fetchAccountPublicKey
12
12
  } from "../chunk-EQRS3SGM.js";
@@ -18,28 +18,28 @@ import {
18
18
  handlePostToolUse,
19
19
  handleStop,
20
20
  reportEvent
21
- } from "../chunk-WXXDHGTZ.js";
22
- import "../chunk-IAEVVUXO.js";
21
+ } from "../chunk-WOBHHXW5.js";
22
+ import "../chunk-XP2KRTZD.js";
23
23
  import {
24
24
  askUser,
25
25
  cancelQuestion,
26
26
  waitForAnswer
27
27
  } from "../chunk-LGXUGYUH.js";
28
- import "../chunk-K7UIAE7I.js";
29
- import "../chunk-RHLUJE4H.js";
28
+ import "../chunk-465UENKO.js";
29
+ import "../chunk-34NNTYK6.js";
30
30
  import "../chunk-EYRGBYZG.js";
31
31
  import "../chunk-SAF6HGAA.js";
32
32
  import "../chunk-7QLSKOSU.js";
33
33
  import "../chunk-KZERVKTD.js";
34
- import "../chunk-POAFXBNH.js";
35
- import "../chunk-4LL6LG5X.js";
34
+ import "../chunk-5WLH2ENB.js";
35
+ import "../chunk-T7E75EKA.js";
36
36
  import {
37
37
  getApiKey,
38
38
  getBaseUrl
39
39
  } from "../chunk-2UMNXADU.js";
40
40
  import {
41
41
  resolvePolicy
42
- } from "../chunk-WPJS3OZH.js";
42
+ } from "../chunk-5UWDYOZX.js";
43
43
  export {
44
44
  askUser,
45
45
  cancelQuestion,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pushary/agent-hooks",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Permission hooks for AI coding agents: route tool approvals through Pushary push notifications",
5
5
  "keywords": [
6
6
  "pushary",
File without changes