@pushary/agent-hooks 1.9.9 → 1.9.11

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 (103) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/dist/bin/pushary-bell-hook.js +25 -21
  4. package/dist/bin/pushary-bell.js +9 -9
  5. package/dist/bin/pushary-claude.js +31 -34
  6. package/dist/bin/pushary-clean.js +108 -34
  7. package/dist/bin/pushary-codex-bridge.js +20 -22
  8. package/dist/bin/pushary-codex-hook.js +33 -36
  9. package/dist/bin/pushary-codex.js +12 -14
  10. package/dist/bin/pushary-connect.js +27 -29
  11. package/dist/bin/pushary-cowork.js +5 -5
  12. package/dist/bin/pushary-daemon.js +31 -33
  13. package/dist/bin/pushary-disconnect.js +29 -29
  14. package/dist/bin/pushary-doctor.js +60 -50
  15. package/dist/bin/pushary-elicitation-hook.js +26 -26
  16. package/dist/bin/pushary-gemini-bridge.js +13 -13
  17. package/dist/bin/pushary-gemini-hook.js +30 -33
  18. package/dist/bin/pushary-hook.js +31 -33
  19. package/dist/bin/pushary-login.js +12 -12
  20. package/dist/bin/pushary-logout.js +18 -78
  21. package/dist/bin/pushary-mcp.js +9 -9
  22. package/dist/bin/pushary-mode.js +12 -12
  23. package/dist/bin/pushary-notification-hook.js +24 -26
  24. package/dist/bin/pushary-opencode-hook.js +29 -32
  25. package/dist/bin/pushary-permission-denied-hook.js +29 -31
  26. package/dist/bin/pushary-permission-hook.js +28 -30
  27. package/dist/bin/pushary-post-hook.js +24 -26
  28. package/dist/bin/pushary-prompt-hook.js +24 -26
  29. package/dist/bin/pushary-session-end-hook.js +24 -26
  30. package/dist/bin/pushary-session-start-hook.js +28 -30
  31. package/dist/bin/pushary-setup.js +62 -46
  32. package/dist/bin/pushary-stats.js +5 -5
  33. package/dist/bin/pushary-status.js +30 -32
  34. package/dist/bin/pushary-stop-hook.js +24 -26
  35. package/dist/bin/pushary-stopfailure-hook.js +24 -26
  36. package/dist/bin/pushary-suggestions.js +12 -12
  37. package/dist/bin/pushary-transcript-register.js +17 -17
  38. package/dist/bin/pushary-transcripts.js +7 -7
  39. package/dist/bin/pushary-upgrade.js +30 -32
  40. package/dist/bin/pushary-wait.js +12 -12
  41. package/dist/bin/pushary.js +6 -6
  42. package/dist/{chunk-IIVZZMSO.js → chunk-2AQ4VZSA.js} +1 -1
  43. package/dist/{chunk-APP43AW7.js → chunk-2GG77ADC.js} +1 -1
  44. package/dist/{chunk-KOWFRUIT.js → chunk-2NAQRPZQ.js} +1 -1
  45. package/dist/{chunk-Z23ZBYDW.js → chunk-4FWWHCYM.js} +4 -4
  46. package/dist/{chunk-ZGADIZDS.js → chunk-4HR2ICME.js} +1 -1
  47. package/dist/{chunk-E5HOHIUV.js → chunk-4RENRBSB.js} +4 -4
  48. package/dist/{chunk-RQ32ADJP.js → chunk-5WAYSUWV.js} +2 -2
  49. package/dist/{chunk-BYLKCZ2G.js → chunk-7RWQZQV2.js} +14 -14
  50. package/dist/{chunk-KQFTBQ66.js → chunk-A6J5Z2HO.js} +514 -313
  51. package/dist/{chunk-EIAEUG7G.js → chunk-AIWZRRSK.js} +2 -2
  52. package/dist/{chunk-H5T27W7M.js → chunk-BDRXDO25.js} +2 -2
  53. package/dist/{chunk-UAP5DS6P.js → chunk-BMP2BLIR.js} +3 -3
  54. package/dist/{chunk-VIIHC42X.js → chunk-BZI7EBTB.js} +1 -1
  55. package/dist/{chunk-TO3PS646.js → chunk-C6QM5SJR.js} +2 -2
  56. package/dist/{chunk-BNSKVIAW.js → chunk-CBDJ2X5P.js} +2 -2
  57. package/dist/{chunk-COQ64C4F.js → chunk-CHDAH4HP.js} +8 -8
  58. package/dist/{chunk-M3STIAGU.js → chunk-CZYMYM7X.js} +3 -3
  59. package/dist/{chunk-MD4SVNT6.js → chunk-E6YQW43K.js} +1 -1
  60. package/dist/{chunk-5N5L6DNN.js → chunk-EJVYEOKC.js} +3 -3
  61. package/dist/{chunk-AI7RMFVV.js → chunk-ERXY2SIW.js} +19 -16
  62. package/dist/{chunk-IRHABAQT.js → chunk-FJCOOFT7.js} +1 -1
  63. package/dist/{chunk-NGKUXZID.js → chunk-GA4J6YFN.js} +2 -2
  64. package/dist/{chunk-WRPYCIV2.js → chunk-GUNZHSTL.js} +136 -8
  65. package/dist/{chunk-T6ZN4TEF.js → chunk-HX5TI6DP.js} +1 -1
  66. package/dist/{chunk-QRXPWW3M.js → chunk-I4I4UH62.js} +3 -3
  67. package/dist/{chunk-6AYSKVLL.js → chunk-KBN3UP2R.js} +3 -3
  68. package/dist/{chunk-UF6RBP5V.js → chunk-KEV2MOJH.js} +46 -21
  69. package/dist/{chunk-BZLHTMT6.js → chunk-KIVFWGG6.js} +12 -10
  70. package/dist/{chunk-HBWYMRR5.js → chunk-LBAMPNDM.js} +5 -4
  71. package/dist/{chunk-LENBKYRB.js → chunk-LUHNNZSH.js} +2 -2
  72. package/dist/{chunk-R5RIVOPL.js → chunk-LX6EWNRK.js} +15 -3
  73. package/dist/{chunk-5DCDQ5VW.js → chunk-M54ATCOZ.js} +2 -2
  74. package/dist/{chunk-6W5M3MSE.js → chunk-MHHXR7DT.js} +4 -4
  75. package/dist/{chunk-NUVGDBZC.js → chunk-MITMDERZ.js} +1 -1
  76. package/dist/{chunk-QTIUJZRX.js → chunk-MJLTABWF.js} +3 -3
  77. package/dist/{chunk-QIOIO7VN.js → chunk-MX3LPP3K.js} +6 -6
  78. package/dist/{chunk-F7R3SZ4Q.js → chunk-N6GEI3PK.js} +2 -2
  79. package/dist/{chunk-462EQA6K.js → chunk-N7HXP4PZ.js} +1 -1
  80. package/dist/{chunk-Q6C6ILUS.js → chunk-OKSU74QH.js} +2 -2
  81. package/dist/{chunk-AZOKPWVI.js → chunk-P2EJN7UB.js} +1 -1
  82. package/dist/{chunk-OAYWO5NP.js → chunk-P7N7FJ7W.js} +1 -1
  83. package/dist/{chunk-DP3WX7FW.js → chunk-PRJNUNCV.js} +2 -2
  84. package/dist/{chunk-SZ4Q6ZVS.js → chunk-PTGUJZSD.js} +5 -5
  85. package/dist/chunk-SB2GN6OP.js +71 -0
  86. package/dist/{chunk-DCCSULXK.js → chunk-STUJXZC2.js} +4 -4
  87. package/dist/{chunk-MLGIVVSG.js → chunk-TVVUJTUW.js} +1 -1
  88. package/dist/{chunk-5OP5MQI7.js → chunk-V6IW5WMK.js} +1 -1
  89. package/dist/{chunk-5RGA636G.js → chunk-VOP5U2VX.js} +145 -9
  90. package/dist/{chunk-K545B734.js → chunk-WCELLK4P.js} +2 -2
  91. package/dist/{chunk-VHPFNLRS.js → chunk-WHRYW4P2.js} +5 -5
  92. package/dist/{chunk-G7RIDXAT.js → chunk-XYCTS3WP.js} +1 -1
  93. package/dist/{chunk-6EBGOHDJ.js → chunk-YETKAI5Q.js} +6 -6
  94. package/dist/{chunk-REU2VQPH.js → chunk-Z4AOR6RZ.js} +15 -13
  95. package/dist/{chunk-B5NMSP3V.js → chunk-ZTSMQYST.js} +3 -5
  96. package/dist/{global-upgrade-H272QOGD.js → global-upgrade-VT2JS7DR.js} +6 -6
  97. package/dist/{paths-HMVOTFUN.js → paths-WRBEUNEY.js} +2 -2
  98. package/dist/{reapply-Q5NHDTVU.js → reapply-BCR6U7HO.js} +20 -22
  99. package/dist/src/index.js +19 -21
  100. package/dist/{upgrade-lock-L3GHFIRW.js → upgrade-lock-VRYMTPZQ.js} +3 -3
  101. package/package.json +1 -1
  102. package/dist/chunk-N6IOSZOE.js +0 -185
  103. package/dist/chunk-UPIZSCYD.js +0 -142
@@ -227,6 +227,20 @@ var AGENTS = {
227
227
  enforcementDetail: "exec, write and edit through native PreToolUse hooks, answered in Devin's own approve/block schema.",
228
228
  capabilityNote: "Devin CLI answers PreToolUse with `{decision}` rather than a permission decision. Pushary blocks an unanswered approval because this adapter cannot request a native prompt reliably. Question and plan dialogs remain with Devin; this adapter does not render their answers. It also fires no Notification event."
229
229
  },
230
+ antigravity_cli: {
231
+ ...defaults,
232
+ label: "Antigravity CLI",
233
+ hookSource: "antigravity",
234
+ bridged: true,
235
+ policyAgent: "antigravity_cli",
236
+ repoAware: true,
237
+ disconnectable: true,
238
+ enforcement: "enforced",
239
+ connectVia: "Native hooks + MCP",
240
+ setupCommand: PUSHARY_SETUP_COMMAND,
241
+ enforcementDetail: "Shell commands, file writes, edits and MCP calls through native PreToolUse hooks in ~/.gemini/config/hooks.json, answered allow or deny.",
242
+ capabilityNote: 'Antigravity CLI ignores a hook\'s allow unless it runs in always-proceed mode (`toolPermission: "always-proceed"` or `--dangerously-skip-permissions`), so approving from the phone needs that mode, with Pushary as the only gate. Pushary answers allow or deny and never ask, because ask and force_ask run the call unprompted in that mode. An unanswered approval is blocked with a reason.'
243
+ },
230
244
  windsurf: {
231
245
  ...defaults,
232
246
  label: "Windsurf",
@@ -283,7 +297,7 @@ var normalizeAgentId = (value, accepted) => {
283
297
  };
284
298
 
285
299
  // ../contracts/src/agent-wiring.ts
286
- var COMPATIBLE_AGENT_TYPES = ["qwen_code", "codebuddy", "qoder", "droid", "devin"];
300
+ var COMPATIBLE_AGENT_TYPES = ["qwen_code", "codebuddy", "qoder", "droid", "devin", "antigravity_cli"];
287
301
  var CANONICAL_PATH_KEYS = ["file_path", "path", "notebook_path"];
288
302
  var CANONICAL_COMMAND_KEYS = ["command"];
289
303
  var SHELL_TOOLS = /* @__PURE__ */ new Set(["Bash", "PowerShell"]);
@@ -296,6 +310,10 @@ var firstString = (record, keys) => {
296
310
  }
297
311
  return void 0;
298
312
  };
313
+ var withCanonicalInputKeys = (profile, toolInput) => {
314
+ const renamed = Object.entries(profile.inputKeyAliases).flatMap(([agentKey, canonicalKey]) => toolInput[agentKey] === void 0 || toolInput[canonicalKey] !== void 0 ? [] : [[canonicalKey, toolInput[agentKey]]]);
315
+ return renamed.length === 0 ? toolInput : { ...toolInput, ...Object.fromEntries(renamed) };
316
+ };
299
317
  var canonicalToolName = (profile, toolName) => profile.toolAliases[toolName] ?? toolName;
300
318
  var toToolLookup = (profile, toolName, toolInput, resolvePath = (path) => path) => {
301
319
  const tool = canonicalToolName(profile, toolName);
@@ -310,10 +328,25 @@ var toToolLookup = (profile, toolName, toolInput, resolvePath = (path) => path)
310
328
  if (!PATH_TOOLS.has(tool)) return { tool, input: toolInput, unreadable: false };
311
329
  const filePath = firstString(toolInput, [...profile.pathInputKeys, ...CANONICAL_PATH_KEYS]);
312
330
  if (!filePath) return { tool, input: toolInput, unreadable: true };
313
- return { tool, input: { ...toolInput, file_path: resolvePath(filePath) }, unreadable: false };
331
+ return { tool, input: { ...withCanonicalInputKeys(profile, toolInput), file_path: resolvePath(filePath) }, unreadable: false };
332
+ };
333
+ var NO_AGENT_PROMPT_REASON = "Pushary needs an answer from the phone before this can run, and this agent has no approval prompt of its own here, so nothing ran. Ask the user, then try again.";
334
+ var DENIED_BY_PUSHARY_REASON = "Denied from Pushary.";
335
+ var UNCARRIED_ANSWER_REASON = "The answer from the phone cannot be passed to this agent, so the call did not run. Ask the question in chat instead.";
336
+ var renderAllowDenyDecision = (verdict) => {
337
+ const { permissionDecision, permissionDecisionReason } = verdict.hookSpecificOutput;
338
+ if (verdict.continue === false) {
339
+ return { decision: "deny", reason: verdict.stopReason ?? permissionDecisionReason ?? DENIED_BY_PUSHARY_REASON };
340
+ }
341
+ if (permissionDecision === "allow") {
342
+ return verdict.hookSpecificOutput.updatedInput ? { decision: "deny", reason: UNCARRIED_ANSWER_REASON } : { decision: "allow" };
343
+ }
344
+ if (permissionDecision === "ask") return { decision: "deny", reason: NO_AGENT_PROMPT_REASON };
345
+ return { decision: "deny", reason: permissionDecisionReason ?? DENIED_BY_PUSHARY_REASON };
314
346
  };
315
347
  var renderPreToolUseVerdict = (profile, verdict) => {
316
348
  if (profile.wire === "permission_decision") return verdict;
349
+ if (profile.wire === "allow_deny_decision") return renderAllowDenyDecision(verdict);
317
350
  const { permissionDecision, permissionDecisionReason, updatedInput } = verdict.hookSpecificOutput;
318
351
  if (permissionDecision === "ask") return { decision: "block", reason: permissionDecisionReason ?? "Pushary requires an explicit approval before this tool can run." };
319
352
  if (updatedInput) return void 0;
@@ -324,6 +357,39 @@ var renderPreToolUseVerdict = (profile, verdict) => {
324
357
  ...stop
325
358
  };
326
359
  };
360
+ var ANTIGRAVITY_MCP_TOOL = "call_mcp_tool";
361
+ var isPayloadRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
362
+ var nonEmptyString = (value) => typeof value === "string" && value.length > 0 ? value : void 0;
363
+ var mcpToolCall = (args) => {
364
+ const server = nonEmptyString(args.ServerName);
365
+ const tool = nonEmptyString(args.ToolName);
366
+ if (!server || !tool) return void 0;
367
+ return { tool_name: `mcp__${server}__${tool}`, tool_input: isPayloadRecord(args.Arguments) ? args.Arguments : {} };
368
+ };
369
+ var antigravityToolCall = (toolCall) => {
370
+ if (!isPayloadRecord(toolCall)) return void 0;
371
+ const name = nonEmptyString(toolCall.name);
372
+ if (!name) return void 0;
373
+ const args = isPayloadRecord(toolCall.args) ? toolCall.args : {};
374
+ return (name === ANTIGRAVITY_MCP_TOOL ? mcpToolCall(args) : void 0) ?? { tool_name: name, tool_input: args };
375
+ };
376
+ var firstWorkspace = (payload) => Array.isArray(payload.workspacePaths) ? payload.workspacePaths.map(nonEmptyString).find(Boolean) : void 0;
377
+ var fromAntigravity = (event, payload) => {
378
+ const { toolCall, ...rest } = payload;
379
+ const call = antigravityToolCall(toolCall);
380
+ const cwd = firstWorkspace(payload) ?? nonEmptyString(call?.tool_input.Cwd);
381
+ const sessionId = nonEmptyString(payload.conversationId);
382
+ const transcriptPath = nonEmptyString(payload.transcriptPath);
383
+ return {
384
+ ...rest,
385
+ ...event ? { hook_event_name: event } : {},
386
+ ...sessionId ? { session_id: sessionId } : {},
387
+ ...transcriptPath ? { transcript_path: transcriptPath } : {},
388
+ ...cwd ? { cwd } : {},
389
+ ...call ?? {}
390
+ };
391
+ };
392
+ var claudeShapedHookInput = (dialect, event, payload) => dialect === "antigravity" ? fromAntigravity(event, payload) : payload;
327
393
  var CLAUDE_SHAPED_EVENTS = [
328
394
  "PreToolUse",
329
395
  "PostToolUse",
@@ -361,15 +427,20 @@ var QWEN_CODE = {
361
427
  ask_user_question: "AskUserQuestion",
362
428
  exit_plan_mode: "ExitPlanMode"
363
429
  },
430
+ inputKeyAliases: {},
364
431
  extraMatchers: ["mcp__.*"],
365
432
  pathInputKeys: ["absolute_path"],
366
433
  shellCommandKeys: [],
367
434
  shellContextKeys: ["directory"],
368
435
  events: without("TeammateIdle", "Elicitation", "PermissionDenied"),
369
436
  wire: "permission_decision",
437
+ payload: "claude",
438
+ nonToolEntries: "nested",
370
439
  mcp: { shape: "gemini_http", file: [".qwen", "settings.json"], trusted: true },
371
440
  instructions: { file: [".qwen", "QWEN.md"], label: "Qwen Code" },
372
- permissionRuleFile: null
441
+ permissionRuleFile: null,
442
+ configDirIsShared: false,
443
+ setupNote: null
373
444
  };
374
445
  var CODEBUDDY = {
375
446
  agentType: "codebuddy",
@@ -379,15 +450,20 @@ var CODEBUDDY = {
379
450
  configFile: [".codebuddy", "settings.json"],
380
451
  hooksKeyPath: ["hooks"],
381
452
  toolAliases: {},
453
+ inputKeyAliases: {},
382
454
  extraMatchers: ["mcp__.*"],
383
455
  pathInputKeys: [],
384
456
  shellCommandKeys: [],
385
457
  shellContextKeys: [],
386
458
  events: without("Elicitation", "PermissionDenied"),
387
459
  wire: "permission_decision",
460
+ payload: "claude",
461
+ nonToolEntries: "nested",
388
462
  mcp: { shape: "claude_http", file: [".codebuddy", ".mcp.json"], trusted: false },
389
463
  instructions: { file: [".codebuddy", "CODEBUDDY.md"], label: "CodeBuddy" },
390
- permissionRuleFile: [".codebuddy", "settings.json"]
464
+ permissionRuleFile: [".codebuddy", "settings.json"],
465
+ configDirIsShared: false,
466
+ setupNote: null
391
467
  };
392
468
  var QODER = {
393
469
  agentType: "qoder",
@@ -397,15 +473,20 @@ var QODER = {
397
473
  configFile: [".qoder", "settings.json"],
398
474
  hooksKeyPath: ["hooks"],
399
475
  toolAliases: {},
476
+ inputKeyAliases: {},
400
477
  extraMatchers: ["mcp__.*"],
401
478
  pathInputKeys: [],
402
479
  shellCommandKeys: [],
403
480
  shellContextKeys: [],
404
481
  events: without("Elicitation", "PermissionDenied"),
405
482
  wire: "permission_decision",
483
+ payload: "claude",
484
+ nonToolEntries: "nested",
406
485
  mcp: { shape: "claude_http", file: [".qoder", "settings.json"], trusted: true },
407
486
  instructions: null,
408
- permissionRuleFile: null
487
+ permissionRuleFile: null,
488
+ configDirIsShared: false,
489
+ setupNote: null
409
490
  };
410
491
  var DROID = {
411
492
  agentType: "droid",
@@ -420,15 +501,20 @@ var DROID = {
420
501
  ApplyPatch: "Edit",
421
502
  FetchUrl: "WebFetch"
422
503
  },
504
+ inputKeyAliases: {},
423
505
  extraMatchers: ["mcp__.*"],
424
506
  pathInputKeys: [],
425
507
  shellCommandKeys: [],
426
508
  shellContextKeys: [],
427
509
  events: ["PreToolUse", "PostToolUse", "UserPromptSubmit", "Notification", "Stop", "SubagentStop", "PreCompact", "SessionStart", "SessionEnd"],
428
510
  wire: "permission_decision",
511
+ payload: "claude",
512
+ nonToolEntries: "nested",
429
513
  mcp: null,
430
514
  instructions: null,
431
- permissionRuleFile: null
515
+ permissionRuleFile: null,
516
+ configDirIsShared: false,
517
+ setupNote: null
432
518
  };
433
519
  var DEVIN = {
434
520
  agentType: "devin",
@@ -448,17 +534,57 @@ var DEVIN = {
448
534
  web_search: "WebSearch",
449
535
  run_subagent: "Task"
450
536
  },
537
+ inputKeyAliases: {},
451
538
  extraMatchers: ["mcp__.*", "mcp_call_tool", "write_to_process"],
452
539
  pathInputKeys: [],
453
540
  shellCommandKeys: [],
454
541
  shellContextKeys: [],
455
542
  events: ["PreToolUse", "PostToolUse", "UserPromptSubmit", "Stop", "SessionStart", "SessionEnd"],
456
543
  wire: "legacy_decision",
544
+ payload: "claude",
545
+ nonToolEntries: "nested",
457
546
  mcp: null,
458
547
  instructions: null,
459
- permissionRuleFile: null
548
+ permissionRuleFile: null,
549
+ configDirIsShared: false,
550
+ setupNote: null
551
+ };
552
+ var ANTIGRAVITY_CLI = {
553
+ agentType: "antigravity_cli",
554
+ source: "antigravity",
555
+ label: "Antigravity CLI",
556
+ binary: "agy",
557
+ configFile: [".gemini", "config", "hooks.json"],
558
+ hooksKeyPath: ["pushary"],
559
+ toolAliases: {
560
+ run_command: "Bash",
561
+ write_to_file: "Write",
562
+ replace_file_content: "Edit",
563
+ multi_replace_file_content: "Edit",
564
+ view_file: "Read",
565
+ read_url_content: "WebFetch",
566
+ search_web: "WebSearch"
567
+ },
568
+ inputKeyAliases: {
569
+ CodeContent: "content",
570
+ TargetContent: "old_string",
571
+ ReplacementContent: "new_string"
572
+ },
573
+ extraMatchers: [ANTIGRAVITY_MCP_TOOL],
574
+ pathInputKeys: ["TargetFile", "AbsolutePath"],
575
+ shellCommandKeys: ["CommandLine"],
576
+ shellContextKeys: ["Cwd"],
577
+ events: ["PreToolUse", "PostToolUse", "Stop"],
578
+ wire: "allow_deny_decision",
579
+ payload: "antigravity",
580
+ nonToolEntries: "handler",
581
+ mcp: { shape: "antigravity_http", file: [".gemini", "config", "mcp_config.json"], trusted: false },
582
+ instructions: null,
583
+ permissionRuleFile: null,
584
+ configDirIsShared: true,
585
+ setupNote: 'Approvals from your phone take effect only when Antigravity CLI runs in always-proceed mode: start it with --dangerously-skip-permissions, or set "toolPermission": "always-proceed" in ~/.gemini/antigravity-cli/settings.json. Pushary is then the only gate, and an unanswered approval is blocked.'
460
586
  };
461
- var HOOK_COMPATIBLE_PROFILES = Object.freeze([QWEN_CODE, CODEBUDDY, QODER, DROID, DEVIN]);
587
+ var HOOK_COMPATIBLE_PROFILES = Object.freeze([QWEN_CODE, CODEBUDDY, QODER, DROID, DEVIN, ANTIGRAVITY_CLI]);
462
588
  var hookCompatibleProfile = (agentType) => HOOK_COMPATIBLE_PROFILES.find((profile) => profile.agentType === agentType);
463
589
  var hookCompatibleProfileBySource = (source) => HOOK_COMPATIBLE_PROFILES.find((profile) => profile.source === source);
464
590
  var compatibleTargetFiles = (profile) => {
@@ -871,7 +997,8 @@ var HOOK_BUDGETS = {
871
997
  codebuddy: { budgetSeconds: 600, guardSeconds: 10 },
872
998
  qoder: { budgetSeconds: 600, guardSeconds: 10 },
873
999
  droid: { budgetSeconds: 600, guardSeconds: 10 },
874
- devin: { budgetSeconds: 600, guardSeconds: 10 }
1000
+ devin: { budgetSeconds: 600, guardSeconds: 10 },
1001
+ antigravity: { budgetSeconds: 600, guardSeconds: 10 }
875
1002
  };
876
1003
  var hookMaxWaitSeconds = (agent) => Math.max(HOOK_BUDGETS[agent].budgetSeconds - HOOK_BUDGETS[agent].guardSeconds, 1);
877
1004
  var HOOK_HOLD_BUDGET_FLAG = "--hold-budget";
@@ -905,12 +1032,16 @@ var hookWaitClamped = (startMs, policyWaitSeconds, agent, nowMs) => startMs + ho
905
1032
  var effectiveWaitSeconds = (timeoutAction, policySeconds, agent) => timeoutAction === "wait" ? hookMaxWaitSeconds(agent) : policySeconds;
906
1033
  var OPENCODE_APPROVAL_EVENT = "permission.ask";
907
1034
  var CURSOR_GATE_EVENTS = ["beforeShellExecution", "beforeMCPExecution", "preToolUse"];
1035
+ var hasNativeApprovalPrompt = (source, event) => !(source === "cursor" && event === "preToolUse") && !(source === "antigravity" && event === "PreToolUse");
908
1036
  var SUPPORT_EMAIL = "business@pushary.com";
909
1037
  var SUPPORT_DISCORD = "https://discord.gg/9v3VvUByrr";
910
1038
  var HOOK_LOCATOR_BINARY = "pushary-bridge";
911
1039
  var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1040
+ var isTokenCount = (value) => typeof value === "number" && Number.isInteger(value) && value >= 0;
1041
+ var reportableSessionId = (value) => typeof value === "string" && value.length > 0 && value.length <= SESSION_ID_MAX_LENGTH ? value : null;
912
1042
  var HOOK_BATCH_MAX_BYTES = 4 * 1024 * 1024;
913
1043
  var REPO_KEY_MAX_LENGTH = 200;
1044
+ var SESSION_ID_MAX_LENGTH = 200;
914
1045
  var WILDCARD_TOOL_PATTERN = "*";
915
1046
  var isRepoKeyMatch = (ruleRepoKey, currentRepoKey) => {
916
1047
  if (!ruleRepoKey) return true;
@@ -2430,6 +2561,7 @@ var pendingCommandEvents = (source) => {
2430
2561
  case "qoder":
2431
2562
  case "droid":
2432
2563
  case "devin":
2564
+ case "antigravity":
2433
2565
  return compatiblePendingCommandEvents(source);
2434
2566
  }
2435
2567
  };
@@ -2810,6 +2942,7 @@ export {
2810
2942
  canonicalToolName,
2811
2943
  toToolLookup,
2812
2944
  renderPreToolUseVerdict,
2945
+ claudeShapedHookInput,
2813
2946
  HOOK_COMPATIBLE_PROFILES,
2814
2947
  hookCompatibleProfile,
2815
2948
  hookCompatibleProfileBySource,
@@ -2853,9 +2986,12 @@ export {
2853
2986
  effectiveWaitSeconds,
2854
2987
  OPENCODE_APPROVAL_EVENT,
2855
2988
  CURSOR_GATE_EVENTS,
2989
+ hasNativeApprovalPrompt,
2856
2990
  SUPPORT_EMAIL,
2857
2991
  SUPPORT_DISCORD,
2858
2992
  HOOK_LOCATOR_BINARY,
2993
+ isTokenCount,
2994
+ reportableSessionId,
2859
2995
  normalizeRepoRemote,
2860
2996
  localRepoKey,
2861
2997
  isSafeReadOnlyCommand,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-POFBE6ZY.js";
4
4
  import {
5
5
  autoUpdateState
6
- } from "./chunk-Z23ZBYDW.js";
6
+ } from "./chunk-4FWWHCYM.js";
7
7
  import {
8
8
  readJsonSafe,
9
9
  writeJsonAtomic
@@ -14,7 +14,7 @@ import {
14
14
  cliPackagePathSegments,
15
15
  globalUpgradeEntry,
16
16
  ownPackageRoot
17
- } from "./chunk-5RGA636G.js";
17
+ } from "./chunk-VOP5U2VX.js";
18
18
 
19
19
  // src/auto-update.ts
20
20
  import { spawn } from "child_process";
@@ -4,7 +4,7 @@ import {
4
4
  forkFinishWithUpgradeLock,
5
5
  installWithUpgradeLock,
6
6
  releaseAutoUpdateLock
7
- } from "./chunk-AZOKPWVI.js";
7
+ } from "./chunk-P2EJN7UB.js";
8
8
  import {
9
9
  describeAutoUpdateCheck,
10
10
  globalInstallLocation,
@@ -14,7 +14,7 @@ import {
14
14
  readAutoUpdateState,
15
15
  updateAutoUpdateState,
16
16
  upgradeEntryFor
17
- } from "./chunk-K545B734.js";
17
+ } from "./chunk-WCELLK4P.js";
18
18
  import {
19
19
  EXIT
20
20
  } from "./chunk-KZERVKTD.js";
@@ -27,10 +27,10 @@ import {
27
27
  npmErrorMessage,
28
28
  readGlobalCliInstallAt,
29
29
  readGlobalPrefix
30
- } from "./chunk-Z23ZBYDW.js";
30
+ } from "./chunk-4FWWHCYM.js";
31
31
  import {
32
32
  NPX_LATEST_COMMAND
33
- } from "./chunk-5DCDQ5VW.js";
33
+ } from "./chunk-M54ATCOZ.js";
34
34
  import {
35
35
  commandsPackage,
36
36
  globalUpgradeEntry,
@@ -39,7 +39,7 @@ import {
39
39
  isSameMajorVersion,
40
40
  ownPackageRoot,
41
41
  packageVersionAt
42
- } from "./chunk-5RGA636G.js";
42
+ } from "./chunk-VOP5U2VX.js";
43
43
 
44
44
  // src/global-upgrade.ts
45
45
  import { existsSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readConfigFileKey
3
- } from "./chunk-REU2VQPH.js";
3
+ } from "./chunk-Z4AOR6RZ.js";
4
4
 
5
5
  // src/bell/fleet.ts
6
6
  import { closeSync, constants, futimesSync, lstatSync, mkdirSync, openSync, readdirSync, unlinkSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ensureCodexTrustsPusharyHooks
3
- } from "./chunk-NGKUXZID.js";
3
+ } from "./chunk-GA4J6YFN.js";
4
4
  import {
5
5
  detectClaudeVersion
6
6
  } from "./chunk-RIVNNBEK.js";
@@ -12,12 +12,12 @@ import {
12
12
  openCodeHookArgv,
13
13
  openCodePluginDir,
14
14
  openCodeWired
15
- } from "./chunk-BZLHTMT6.js";
15
+ } from "./chunk-KIVFWGG6.js";
16
16
  import {
17
17
  addClaudeMcpServer,
18
18
  addPusharyHooks,
19
19
  addPusharyToolPermissions
20
- } from "./chunk-UF6RBP5V.js";
20
+ } from "./chunk-KEV2MOJH.js";
21
21
  import {
22
22
  claudeUnprovenHolds,
23
23
  claudeWired,
@@ -25,7 +25,7 @@ import {
25
25
  codexWired,
26
26
  geminiWired,
27
27
  planHooks
28
- } from "./chunk-BYLKCZ2G.js";
28
+ } from "./chunk-7RWQZQV2.js";
29
29
  import {
30
30
  CLAUDE_HOOK_BINARY,
31
31
  CLAUDE_HOOK_EVENTS,
@@ -36,7 +36,7 @@ import {
36
36
  needsReregistration,
37
37
  registrationSignatures,
38
38
  supportedClaudeEvents
39
- } from "./chunk-M3STIAGU.js";
39
+ } from "./chunk-CZYMYM7X.js";
40
40
  import {
41
41
  formatVersion
42
42
  } from "./chunk-6ICPEJY5.js";
@@ -59,7 +59,7 @@ import {
59
59
  registrationHolderOf,
60
60
  resolveGlobalBinary,
61
61
  vscodePluginMcp
62
- } from "./chunk-Z23ZBYDW.js";
62
+ } from "./chunk-4FWWHCYM.js";
63
63
  import {
64
64
  readJsonSafe,
65
65
  writeFileAtomic,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveInstallSourceFor
3
- } from "./chunk-BNSKVIAW.js";
3
+ } from "./chunk-CBDJ2X5P.js";
4
4
  import {
5
5
  backupFile,
6
6
  readJsonSafe,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-T7E75EKA.js";
10
10
  import {
11
11
  configFilePath
12
- } from "./chunk-IRHABAQT.js";
12
+ } from "./chunk-FJCOOFT7.js";
13
13
 
14
14
  // src/shell-alias.ts
15
15
  import { homedir } from "os";
@@ -322,19 +322,20 @@ var shellProfileCandidates = () => {
322
322
  const fallbacks = FALLBACK_RCS.map((name) => join2(homedir2(), name));
323
323
  return resolved ? [resolved.path, ...fallbacks.filter((path) => path !== resolved.path)] : fallbacks;
324
324
  };
325
- var findExportedKeyLine = (profiles = shellProfileCandidates()) => {
326
- for (const path of profiles) {
327
- let contents;
328
- try {
329
- contents = readFileSync2(path, "utf8");
330
- } catch {
331
- continue;
332
- }
333
- const found = findKeyExport(contents);
334
- if (found) return { path, ...found };
325
+ var readProfileOrNull = (path) => {
326
+ try {
327
+ return readFileSync2(path, "utf8");
328
+ } catch {
329
+ return null;
335
330
  }
336
- return null;
337
331
  };
332
+ var exportedKeyLineIn = (path) => {
333
+ const contents = readProfileOrNull(path);
334
+ const found = contents === null ? null : findKeyExport(contents);
335
+ return found ? [{ path, ...found }] : [];
336
+ };
337
+ var findExportedKeyLines = (profiles = shellProfileCandidates()) => profiles.flatMap(exportedKeyLineIn);
338
+ var findExportedKeyLine = (profiles = shellProfileCandidates()) => findExportedKeyLines(profiles)[0] ?? null;
338
339
 
339
340
  export {
340
341
  CANDIDATE_RCS,
@@ -354,5 +355,6 @@ export {
354
355
  readKeySource,
355
356
  readMacAppKeyPrefix,
356
357
  recordMacAppKeyPrefix,
358
+ findExportedKeyLines,
357
359
  findExportedKeyLine
358
360
  };
@@ -1,19 +1,17 @@
1
1
  import {
2
2
  AUTO_DECISION_WINDOW_MS,
3
+ DEFAULT_SESSION,
3
4
  claimThrottle,
4
5
  deriveToolTarget,
5
6
  permissionDeniedAction,
6
7
  releaseThrottle,
7
8
  reportEvent
8
- } from "./chunk-KQFTBQ66.js";
9
- import {
10
- DEFAULT_SESSION
11
- } from "./chunk-N6IOSZOE.js";
9
+ } from "./chunk-A6J5Z2HO.js";
12
10
  import {
13
11
  machineDecisionFor,
14
12
  shouldDeferToNativeMode,
15
13
  wireVerdictFor
16
- } from "./chunk-5RGA636G.js";
14
+ } from "./chunk-VOP5U2VX.js";
17
15
 
18
16
  // src/machine-decision-audit.ts
19
17
  import { basename } from "path";
@@ -5,15 +5,15 @@ import {
5
5
  readGlobalUpgradeSubject,
6
6
  upgradeInstalledPackage,
7
7
  withUpgradeLock
8
- } from "./chunk-VHPFNLRS.js";
9
- import "./chunk-AZOKPWVI.js";
10
- import "./chunk-K545B734.js";
8
+ } from "./chunk-WHRYW4P2.js";
9
+ import "./chunk-P2EJN7UB.js";
10
+ import "./chunk-WCELLK4P.js";
11
11
  import "./chunk-POFBE6ZY.js";
12
12
  import "./chunk-KZERVKTD.js";
13
- import "./chunk-Z23ZBYDW.js";
13
+ import "./chunk-4FWWHCYM.js";
14
14
  import "./chunk-T7E75EKA.js";
15
- import "./chunk-5DCDQ5VW.js";
16
- import "./chunk-5RGA636G.js";
15
+ import "./chunk-M54ATCOZ.js";
16
+ import "./chunk-VOP5U2VX.js";
17
17
  export {
18
18
  finishGlobalUpgrade,
19
19
  finishUpgradeWithLock,
@@ -32,8 +32,8 @@ import {
32
32
  pusharyDir,
33
33
  vscodePluginDir,
34
34
  vscodePluginMcp
35
- } from "./chunk-Z23ZBYDW.js";
36
- import "./chunk-5RGA636G.js";
35
+ } from "./chunk-4FWWHCYM.js";
36
+ import "./chunk-VOP5U2VX.js";
37
37
  export {
38
38
  autoUpdateLock,
39
39
  autoUpdateLog,
@@ -10,36 +10,34 @@ import {
10
10
  reapplyOpenCodePlugin,
11
11
  reapplyVsCodePlugin,
12
12
  repairCodexHolds
13
- } from "./chunk-6EBGOHDJ.js";
14
- import "./chunk-NGKUXZID.js";
13
+ } from "./chunk-YETKAI5Q.js";
14
+ import "./chunk-GA4J6YFN.js";
15
15
  import "./chunk-RIVNNBEK.js";
16
16
  import "./chunk-XHKBHWLX.js";
17
- import "./chunk-BZLHTMT6.js";
18
- import "./chunk-UF6RBP5V.js";
19
- import "./chunk-BYLKCZ2G.js";
20
- import "./chunk-M3STIAGU.js";
21
- import "./chunk-ZGADIZDS.js";
22
- import "./chunk-MLGIVVSG.js";
17
+ import "./chunk-KIVFWGG6.js";
18
+ import "./chunk-KEV2MOJH.js";
19
+ import "./chunk-7RWQZQV2.js";
20
+ import "./chunk-CZYMYM7X.js";
21
+ import "./chunk-4HR2ICME.js";
22
+ import "./chunk-TVVUJTUW.js";
23
23
  import "./chunk-GMXKITVA.js";
24
24
  import "./chunk-6ICPEJY5.js";
25
- import "./chunk-KQFTBQ66.js";
26
- import "./chunk-N6IOSZOE.js";
27
- import "./chunk-MD4SVNT6.js";
28
- import "./chunk-WRPYCIV2.js";
29
- import "./chunk-6AYSKVLL.js";
30
- import "./chunk-QRXPWW3M.js";
31
- import "./chunk-UPIZSCYD.js";
25
+ import "./chunk-A6J5Z2HO.js";
26
+ import "./chunk-E6YQW43K.js";
27
+ import "./chunk-GUNZHSTL.js";
32
28
  import "./chunk-POFBE6ZY.js";
33
- import "./chunk-5N5L6DNN.js";
34
- import "./chunk-KOWFRUIT.js";
29
+ import "./chunk-KBN3UP2R.js";
30
+ import "./chunk-I4I4UH62.js";
31
+ import "./chunk-EJVYEOKC.js";
32
+ import "./chunk-2NAQRPZQ.js";
35
33
  import "./chunk-7QLSKOSU.js";
36
34
  import "./chunk-KZERVKTD.js";
37
- import "./chunk-BNSKVIAW.js";
38
- import "./chunk-Z23ZBYDW.js";
35
+ import "./chunk-CBDJ2X5P.js";
36
+ import "./chunk-4FWWHCYM.js";
39
37
  import "./chunk-T7E75EKA.js";
40
- import "./chunk-IRHABAQT.js";
41
- import "./chunk-5DCDQ5VW.js";
42
- import "./chunk-5RGA636G.js";
38
+ import "./chunk-FJCOOFT7.js";
39
+ import "./chunk-M54ATCOZ.js";
40
+ import "./chunk-VOP5U2VX.js";
43
41
  export {
44
42
  ensureCodexTrustAfterReapply,
45
43
  inspectConfiguredManagedProviders,
package/dist/src/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  handlePreToolUse
3
- } from "../chunk-AI7RMFVV.js";
4
- import "../chunk-B5NMSP3V.js";
5
- import "../chunk-IIVZZMSO.js";
6
- import "../chunk-5OP5MQI7.js";
3
+ } from "../chunk-ERXY2SIW.js";
4
+ import "../chunk-ZTSMQYST.js";
5
+ import "../chunk-2AQ4VZSA.js";
6
+ import "../chunk-V6IW5WMK.js";
7
7
  import {
8
8
  fetchAccountPublicKey
9
- } from "../chunk-462EQA6K.js";
10
- import "../chunk-UF6RBP5V.js";
11
- import "../chunk-M3STIAGU.js";
9
+ } from "../chunk-N7HXP4PZ.js";
10
+ import "../chunk-KEV2MOJH.js";
11
+ import "../chunk-CZYMYM7X.js";
12
12
  import "../chunk-6ICPEJY5.js";
13
13
  import {
14
14
  fetchModeOverride,
@@ -18,33 +18,31 @@ import {
18
18
  handlePostToolUse,
19
19
  handleStop,
20
20
  reportEvent
21
- } from "../chunk-KQFTBQ66.js";
22
- import "../chunk-N6IOSZOE.js";
23
- import "../chunk-MD4SVNT6.js";
21
+ } from "../chunk-A6J5Z2HO.js";
22
+ import "../chunk-E6YQW43K.js";
24
23
  import {
25
24
  askUser,
26
25
  cancelQuestion,
27
26
  waitForAnswer
28
- } from "../chunk-WRPYCIV2.js";
29
- import "../chunk-6AYSKVLL.js";
30
- import "../chunk-QRXPWW3M.js";
31
- import "../chunk-UPIZSCYD.js";
27
+ } from "../chunk-GUNZHSTL.js";
32
28
  import "../chunk-POFBE6ZY.js";
33
- import "../chunk-5N5L6DNN.js";
34
- import "../chunk-KOWFRUIT.js";
29
+ import "../chunk-KBN3UP2R.js";
30
+ import "../chunk-I4I4UH62.js";
31
+ import "../chunk-EJVYEOKC.js";
32
+ import "../chunk-2NAQRPZQ.js";
35
33
  import "../chunk-7QLSKOSU.js";
36
34
  import "../chunk-KZERVKTD.js";
37
- import "../chunk-BNSKVIAW.js";
38
- import "../chunk-Z23ZBYDW.js";
35
+ import "../chunk-CBDJ2X5P.js";
36
+ import "../chunk-4FWWHCYM.js";
39
37
  import "../chunk-T7E75EKA.js";
40
38
  import {
41
39
  getApiKey,
42
40
  getBaseUrl
43
- } from "../chunk-IRHABAQT.js";
44
- import "../chunk-5DCDQ5VW.js";
41
+ } from "../chunk-FJCOOFT7.js";
42
+ import "../chunk-M54ATCOZ.js";
45
43
  import {
46
44
  resolvePolicy
47
- } from "../chunk-5RGA636G.js";
45
+ } from "../chunk-VOP5U2VX.js";
48
46
  export {
49
47
  askUser,
50
48
  cancelQuestion,