@pushary/agent-hooks 0.89.11 → 0.89.13

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 (80) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +4 -2
  3. package/dist/bin/pushary-bell-hook.js +5 -5
  4. package/dist/bin/pushary-bell.js +11 -11
  5. package/dist/bin/pushary-claude.js +225 -48
  6. package/dist/bin/pushary-clean.js +49 -29
  7. package/dist/bin/pushary-codex-bridge.js +17 -16
  8. package/dist/bin/pushary-codex-hook.js +11 -10
  9. package/dist/bin/pushary-codex.js +7 -7
  10. package/dist/bin/pushary-connect.js +12 -12
  11. package/dist/bin/pushary-daemon-supervisor.d.ts +1 -0
  12. package/dist/bin/pushary-daemon-supervisor.js +27 -0
  13. package/dist/bin/pushary-daemon.js +22 -22
  14. package/dist/bin/pushary-disconnect.js +9 -9
  15. package/dist/bin/pushary-doctor.js +59 -49
  16. package/dist/bin/pushary-elicitation-hook.js +4 -4
  17. package/dist/bin/pushary-gemini-bridge.js +16 -15
  18. package/dist/bin/pushary-gemini-hook.js +10 -9
  19. package/dist/bin/pushary-hook.js +13 -13
  20. package/dist/bin/pushary-login.js +11 -11
  21. package/dist/bin/pushary-logout.js +11 -11
  22. package/dist/bin/pushary-mode.js +5 -5
  23. package/dist/bin/pushary-notification-hook.js +7 -7
  24. package/dist/bin/pushary-opencode-hook.js +10 -9
  25. package/dist/bin/pushary-permission-denied-hook.js +11 -11
  26. package/dist/bin/pushary-permission-hook.js +11 -11
  27. package/dist/bin/pushary-post-hook.js +7 -7
  28. package/dist/bin/pushary-prompt-hook.js +7 -7
  29. package/dist/bin/pushary-session-end-hook.js +7 -7
  30. package/dist/bin/pushary-session-start-hook.js +7 -7
  31. package/dist/bin/pushary-setup.js +87 -59
  32. package/dist/bin/pushary-stats.js +4 -4
  33. package/dist/bin/pushary-status.js +14 -14
  34. package/dist/bin/pushary-stop-hook.js +7 -7
  35. package/dist/bin/pushary-stopfailure-hook.js +7 -7
  36. package/dist/bin/pushary-suggestions.js +2 -2
  37. package/dist/bin/pushary-transcripts.d.ts +1 -0
  38. package/dist/bin/pushary-transcripts.js +79 -0
  39. package/dist/bin/pushary-upgrade.js +21 -21
  40. package/dist/bin/pushary-wait.js +5 -5
  41. package/dist/bin/pushary.js +3 -2
  42. package/dist/{chunk-6XUABEX2.js → chunk-3OXHYPZG.js} +1 -1
  43. package/dist/{chunk-QA72MKIT.js → chunk-3YGGEDJK.js} +5 -5
  44. package/dist/{chunk-IUN6VOKV.js → chunk-4IPSMEGT.js} +68 -46
  45. package/dist/{chunk-XX2V4QS5.js → chunk-4LL6LG5X.js} +2 -2
  46. package/dist/{chunk-J4K75V4D.js → chunk-5MNTWAAJ.js} +10 -9
  47. package/dist/{chunk-KVE5RCQL.js → chunk-5YEF55AX.js} +1 -1
  48. package/dist/{chunk-3SQYKLBW.js → chunk-7JZCADBR.js} +46 -18
  49. package/dist/{chunk-IUWRVTQK.js → chunk-ANMHIZZY.js} +1 -1
  50. package/dist/{chunk-6EKQZA6R.js → chunk-B2HND22S.js} +1 -1
  51. package/dist/{chunk-TRVIRETT.js → chunk-C56VHSXU.js} +1 -1
  52. package/dist/{chunk-TEZ2FZD6.js → chunk-CBGGUEKE.js} +2 -2
  53. package/dist/{chunk-3HFK3UXM.js → chunk-FOGW6O2Y.js} +1 -1
  54. package/dist/{chunk-3XTFX4CL.js → chunk-GMJDQDXU.js} +17 -2
  55. package/dist/{chunk-DKWM5T3P.js → chunk-JTBDBKHU.js} +2 -2
  56. package/dist/{chunk-Q223OM5J.js → chunk-JVLB5CAJ.js} +4 -4
  57. package/dist/{chunk-2LPEZYMC.js → chunk-KNLKHJZR.js} +1 -1
  58. package/dist/{chunk-X4ZUUFKV.js → chunk-L4ZCFMWW.js} +63 -1
  59. package/dist/chunk-M3UABYRT.js +20 -0
  60. package/dist/{chunk-PZRWFWSR.js → chunk-MNTZKFZI.js} +7 -7
  61. package/dist/{chunk-FZ73G2RO.js → chunk-MSTHT2M7.js} +25 -6
  62. package/dist/{chunk-TG3T3M4K.js → chunk-N4QJ3CLX.js} +6 -2
  63. package/dist/{chunk-3CUDMTL4.js → chunk-NBDU3R3G.js} +10 -3
  64. package/dist/{chunk-FXIL7RCL.js → chunk-OX35BSPV.js} +4 -4
  65. package/dist/{chunk-UDBJHQMG.js → chunk-QFJZHVVL.js} +1 -1
  66. package/dist/chunk-QZCFVWA7.js +58 -0
  67. package/dist/{chunk-TY5HVMXT.js → chunk-RAEPAUNJ.js} +1 -1
  68. package/dist/{chunk-NCVIWGVA.js → chunk-S4BLNILH.js} +1 -1
  69. package/dist/{chunk-MZGWKIUZ.js → chunk-VASZ6TWW.js} +7 -3
  70. package/dist/{chunk-SYUIXXQW.js → chunk-VF3RTVWY.js} +1 -1
  71. package/dist/{chunk-LURY4WNF.js → chunk-WHDSJ6PD.js} +1 -1
  72. package/dist/chunk-YKLCWWEI.js +76 -0
  73. package/dist/{chunk-253WC6O5.js → chunk-YXT55PYF.js} +1 -1
  74. package/dist/{chunk-BLODMQKJ.js → chunk-ZO43JTT3.js} +1 -1
  75. package/dist/{chunk-OLAGKKSR.js → chunk-ZP3SNUP7.js} +16 -6
  76. package/dist/{chunk-34GN3IPX.js → chunk-ZWEKONU6.js} +1 -1
  77. package/dist/src/index.d.ts +3 -1
  78. package/dist/src/index.js +15 -11
  79. package/package.json +4 -2
  80. /package/dist/{chunk-X6RXX2NF.js → chunk-QINYXLA5.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolvePathBinary
3
- } from "./chunk-X4ZUUFKV.js";
3
+ } from "./chunk-L4ZCFMWW.js";
4
4
 
5
5
  // src/hermes-config.ts
6
6
  import { execFileSync } from "child_process";
@@ -0,0 +1,58 @@
1
+ import {
2
+ getBaseUrl
3
+ } from "./chunk-2UMNXADU.js";
4
+
5
+ // src/transcript-api.ts
6
+ var fetchTranscriptRecipients = async (apiKey, baseUrl = getBaseUrl()) => {
7
+ try {
8
+ const res = await fetch(`${baseUrl}/api/agent/encryption-account`, {
9
+ headers: { Authorization: `Bearer ${apiKey}` },
10
+ signal: AbortSignal.timeout(5e3)
11
+ });
12
+ if (!res.ok) return null;
13
+ const data = await res.json();
14
+ if (typeof data.publicKey !== "string" || data.publicKey.length === 0) return null;
15
+ if (data.providerRecovery === void 0 || data.providerRecovery === null) {
16
+ return { phonePublicKey: data.publicKey, provider: null };
17
+ }
18
+ if (typeof data.providerRecovery !== "object") return null;
19
+ const provider = data.providerRecovery;
20
+ if (typeof provider.required !== "boolean" || typeof provider.keyId !== "string" || provider.keyId.length === 0 || typeof provider.publicKey !== "string" || provider.publicKey.length === 0) return null;
21
+ return {
22
+ phonePublicKey: data.publicKey,
23
+ provider: { required: provider.required, keyId: provider.keyId, publicKey: provider.publicKey }
24
+ };
25
+ } catch {
26
+ return null;
27
+ }
28
+ };
29
+ var fetchAccountPublicKey = async (apiKey, baseUrl = getBaseUrl()) => (await fetchTranscriptRecipients(apiKey, baseUrl))?.phonePublicKey ?? null;
30
+ var uploadTranscriptRecords = async (apiKey, params, baseUrl = getBaseUrl()) => {
31
+ try {
32
+ const res = await fetch(`${baseUrl}/api/agent/transcript`, {
33
+ method: "POST",
34
+ headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" },
35
+ body: JSON.stringify(params),
36
+ signal: AbortSignal.timeout(15e3)
37
+ });
38
+ const body = await res.json().catch(() => null);
39
+ const keyRegistered = body?.keyRegistered === true;
40
+ const keyConflict = body?.keyConflict === true;
41
+ const ids = (value) => Array.isArray(value) ? value.filter((v) => typeof v === "string") : [];
42
+ return {
43
+ ok: res.ok && !keyConflict && (params.dataEncryptionKey === void 0 || keyRegistered),
44
+ keyRegistered,
45
+ keyConflict,
46
+ settledIds: Array.isArray(body?.settledIds) ? ids(body.settledIds) : null,
47
+ rejectedIds: ids(body?.rejectedIds)
48
+ };
49
+ } catch {
50
+ return { ok: false, keyRegistered: false, keyConflict: false, settledIds: null, rejectedIds: [] };
51
+ }
52
+ };
53
+
54
+ export {
55
+ fetchTranscriptRecipients,
56
+ fetchAccountPublicKey,
57
+ uploadTranscriptRecords
58
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getMachineId
3
- } from "./chunk-DKWM5T3P.js";
3
+ } from "./chunk-JTBDBKHU.js";
4
4
  import {
5
5
  getPackageVersion
6
6
  } from "./chunk-DINDL2CF.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shouldDeferToNativeMode
3
- } from "./chunk-X6RXX2NF.js";
3
+ } from "./chunk-QINYXLA5.js";
4
4
 
5
5
  // src/native-defer.ts
6
6
  var nativeDeferOptions = () => {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  openCodeConfigDirFrom
3
- } from "./chunk-34GN3IPX.js";
3
+ } from "./chunk-ZWEKONU6.js";
4
4
  import {
5
5
  codexHomeFrom
6
- } from "./chunk-QA72MKIT.js";
6
+ } from "./chunk-3YGGEDJK.js";
7
7
 
8
8
  // src/vscode-config.ts
9
9
  import { homedir } from "os";
@@ -326,6 +326,9 @@ var hasInstructionBlock = (filePath) => {
326
326
  }
327
327
  };
328
328
 
329
+ // src/hooks-spec.ts
330
+ var CURSOR_GATE_SCRIPT = "pushary-gate.mjs";
331
+
329
332
  export {
330
333
  registerPluginLocation,
331
334
  unregisterPluginLocation,
@@ -342,5 +345,6 @@ export {
342
345
  renderProjectAgentInstructions,
343
346
  writeInstructionBlock,
344
347
  removeInstructionBlock,
345
- hasInstructionBlock
348
+ hasInstructionBlock,
349
+ CURSOR_GATE_SCRIPT
346
350
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  quoteIfNeeded
3
- } from "./chunk-X4ZUUFKV.js";
3
+ } from "./chunk-L4ZCFMWW.js";
4
4
 
5
5
  // src/hook-command.ts
6
6
  var HOOK_SHELL = "/bin/sh -c";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  renderCommandHelp
3
- } from "./chunk-3XTFX4CL.js";
3
+ } from "./chunk-GMJDQDXU.js";
4
4
  import {
5
5
  getPackageVersion
6
6
  } from "./chunk-DINDL2CF.js";
@@ -0,0 +1,76 @@
1
+ import {
2
+ writeJsonAtomicDurable
3
+ } from "./chunk-4LL6LG5X.js";
4
+
5
+ // src/transcript-recipient-pin.ts
6
+ import { existsSync, mkdirSync, readFileSync, rmSync } from "fs";
7
+ import { homedir } from "os";
8
+ import { dirname, join } from "path";
9
+ var pinFile = () => process.env.PUSHARY_RECIPIENT_PIN_FILE?.trim() || join(homedir(), ".pushary", "recipients.json");
10
+ var asPin = (offer) => ({
11
+ phonePublicKey: offer.phonePublicKey,
12
+ providerKeyId: offer.provider?.keyId ?? null,
13
+ providerPublicKey: offer.provider?.publicKey ?? null
14
+ });
15
+ var loadPin = () => {
16
+ const path = pinFile();
17
+ if (!existsSync(path)) return null;
18
+ try {
19
+ const raw = JSON.parse(readFileSync(path, "utf-8"));
20
+ if (typeof raw.phonePublicKey !== "string" || raw.phonePublicKey.length === 0) return null;
21
+ return {
22
+ phonePublicKey: raw.phonePublicKey,
23
+ providerKeyId: typeof raw.providerKeyId === "string" ? raw.providerKeyId : null,
24
+ providerPublicKey: typeof raw.providerPublicKey === "string" ? raw.providerPublicKey : null
25
+ };
26
+ } catch {
27
+ return null;
28
+ }
29
+ };
30
+ var savePin = (pin) => {
31
+ const path = pinFile();
32
+ try {
33
+ mkdirSync(dirname(path), { recursive: true, mode: 448 });
34
+ writeJsonAtomicDurable(path, pin, 384);
35
+ return true;
36
+ } catch {
37
+ return false;
38
+ }
39
+ };
40
+ var clearPin = () => {
41
+ try {
42
+ rmSync(pinFile(), { force: true });
43
+ } catch {
44
+ }
45
+ };
46
+ var verifyRecipients = (offer, pinned) => {
47
+ if (!pinned) return { kind: "first-use", pin: asPin(offer) };
48
+ const next = asPin(offer);
49
+ const changed = [];
50
+ if (next.phonePublicKey !== pinned.phonePublicKey) changed.push("the phone key this machine seals to");
51
+ if (next.providerKeyId !== pinned.providerKeyId) changed.push("the compliance recovery key id");
52
+ if (next.providerPublicKey !== pinned.providerPublicKey) changed.push("the compliance recovery key");
53
+ return changed.length === 0 ? { kind: "match" } : { kind: "changed", changed };
54
+ };
55
+ var fingerprint = (publicKey) => {
56
+ const hex = Buffer.from(publicKey, "base64").toString("hex").toUpperCase();
57
+ return (hex.slice(0, 8).match(/.{2}/g) ?? []).join(" ");
58
+ };
59
+ var changedRecipientsMessage = (verdict, offer) => [
60
+ "[pushary] Transcript sync stopped: the keys this machine seals transcripts to have changed.",
61
+ ...verdict.changed.map((what) => `[pushary] changed: ${what}`),
62
+ `[pushary] now offered: phone ${fingerprint(offer.phonePublicKey)}${offer.provider ? `, recovery ${offer.provider.keyId.slice(0, 8)}` : ", no recovery key"}`,
63
+ "[pushary] If you reinstalled the app or rotated a key, this is expected. Compare the",
64
+ "[pushary] fingerprint above with the one in the app under Settings, then run:",
65
+ "[pushary] pushary transcripts trust --rotate",
66
+ "[pushary] Until then nothing is uploaded, so no turn is sealed to a key you have not seen."
67
+ ].join("\n");
68
+
69
+ export {
70
+ loadPin,
71
+ savePin,
72
+ clearPin,
73
+ verifyRecipients,
74
+ fingerprint,
75
+ changedRecipientsMessage
76
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  describeKeyCheck,
3
3
  keyCheckFromResponse
4
- } from "./chunk-BLODMQKJ.js";
4
+ } from "./chunk-ZO43JTT3.js";
5
5
  import {
6
6
  createIo
7
7
  } from "./chunk-5RUIFDTP.js";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-2UMNXADU.js";
13
13
  import {
14
14
  isValidApiKey
15
- } from "./chunk-X6RXX2NF.js";
15
+ } from "./chunk-QINYXLA5.js";
16
16
 
17
17
  // src/session.ts
18
18
  var IDENTITY_PATH = "/api/v1/server/identity";
@@ -1,11 +1,13 @@
1
1
  import {
2
2
  buildTranscriptRecords,
3
3
  decodePublicKey,
4
- fetchAccountPublicKey,
5
4
  generateSessionKey,
6
- uploadTranscriptRecords,
7
5
  wrapSessionKey
8
- } from "./chunk-IUN6VOKV.js";
6
+ } from "./chunk-4IPSMEGT.js";
7
+ import {
8
+ fetchTranscriptRecipients,
9
+ uploadTranscriptRecords
10
+ } from "./chunk-QZCFVWA7.js";
9
11
 
10
12
  // src/live-session.ts
11
13
  var MAX_TRANSCRIPT_QUEUE = 100;
@@ -71,6 +73,8 @@ var LiveTranscriptRelay = class {
71
73
  queue = [];
72
74
  sessionKey = null;
73
75
  wrappedKey = null;
76
+ providerWrappedKey = null;
77
+ providerKeyId = null;
74
78
  keyUploaded = false;
75
79
  keyRejected = false;
76
80
  flushing = null;
@@ -97,10 +101,14 @@ var LiveTranscriptRelay = class {
97
101
  async flushBatch() {
98
102
  try {
99
103
  if (!this.sessionKey) {
100
- const publicKey = await fetchAccountPublicKey(this.options.apiKey, this.options.baseUrl);
101
- if (!publicKey) return false;
104
+ const recipients = await fetchTranscriptRecipients(this.options.apiKey, this.options.baseUrl);
105
+ if (!recipients) return false;
102
106
  this.sessionKey = generateSessionKey();
103
- this.wrappedKey = wrapSessionKey(this.sessionKey, decodePublicKey(publicKey));
107
+ this.wrappedKey = wrapSessionKey(this.sessionKey, decodePublicKey(recipients.phonePublicKey));
108
+ if (recipients.provider) {
109
+ this.providerWrappedKey = wrapSessionKey(this.sessionKey, decodePublicKey(recipients.provider.publicKey));
110
+ this.providerKeyId = recipients.provider.keyId;
111
+ }
104
112
  }
105
113
  const count = Math.min(this.queue.length, 50);
106
114
  const records = buildTranscriptRecords(this.queue.slice(0, count), this.sessionKey).records;
@@ -112,6 +120,8 @@ var LiveTranscriptRelay = class {
112
120
  sessionId: this.sessionId,
113
121
  machineId: this.options.machineId,
114
122
  dataEncryptionKey: this.keyUploaded ? void 0 : this.wrappedKey ?? void 0,
123
+ providerWrappedSessionKey: this.keyUploaded ? void 0 : this.providerWrappedKey ?? void 0,
124
+ providerKeyId: this.keyUploaded ? void 0 : this.providerKeyId ?? void 0,
115
125
  records
116
126
  }, this.options.baseUrl);
117
127
  if (result.keyConflict) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOOK_BUDGETS,
3
3
  OPENCODE_APPROVAL_EVENT
4
- } from "./chunk-X6RXX2NF.js";
4
+ } from "./chunk-QINYXLA5.js";
5
5
 
6
6
  // src/opencode-plugin.ts
7
7
  var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
@@ -151,4 +151,6 @@ declare const cancelQuestion: (apiKey: string, correlationId: string) => Promise
151
151
  declare const getApiKey: () => string;
152
152
  declare const getBaseUrl: () => string;
153
153
 
154
- export { askUser, cancelQuestion, fetchModeOverride, fetchModeState, getApiKey, getBaseUrl, getPolicy, handleNotification, handlePostToolUse, handlePreToolUse, handleStop, reportEvent, waitForAnswer };
154
+ declare const fetchAccountPublicKey: (apiKey: string, baseUrl?: string) => Promise<string | null>;
155
+
156
+ export { askUser, cancelQuestion, fetchAccountPublicKey, fetchModeOverride, fetchModeState, getApiKey, getBaseUrl, getPolicy, handleNotification, handlePostToolUse, handlePreToolUse, handleStop, reportEvent, waitForAnswer };
package/dist/src/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import {
2
2
  handlePreToolUse
3
- } from "../chunk-J4K75V4D.js";
4
- import "../chunk-6EKQZA6R.js";
5
- import "../chunk-NCVIWGVA.js";
6
- import "../chunk-3HFK3UXM.js";
3
+ } from "../chunk-5MNTWAAJ.js";
4
+ import "../chunk-B2HND22S.js";
5
+ import {
6
+ fetchAccountPublicKey
7
+ } from "../chunk-QZCFVWA7.js";
8
+ import "../chunk-S4BLNILH.js";
9
+ import "../chunk-FOGW6O2Y.js";
7
10
  import "../chunk-YHG74UFF.js";
8
11
  import {
9
12
  fetchModeOverride,
@@ -13,31 +16,32 @@ import {
13
16
  handlePostToolUse,
14
17
  handleStop,
15
18
  reportEvent
16
- } from "../chunk-FXIL7RCL.js";
19
+ } from "../chunk-OX35BSPV.js";
17
20
  import {
18
21
  askUser,
19
22
  cancelQuestion,
20
23
  waitForAnswer
21
24
  } from "../chunk-JHJHCMAF.js";
22
- import "../chunk-TG3T3M4K.js";
23
- import "../chunk-DKWM5T3P.js";
24
- import "../chunk-QA72MKIT.js";
25
+ import "../chunk-N4QJ3CLX.js";
26
+ import "../chunk-JTBDBKHU.js";
27
+ import "../chunk-3YGGEDJK.js";
25
28
  import "../chunk-BSZYIAZL.js";
26
29
  import "../chunk-SAF6HGAA.js";
27
- import "../chunk-IUWRVTQK.js";
28
30
  import "../chunk-7QLSKOSU.js";
29
31
  import "../chunk-KZERVKTD.js";
30
- import "../chunk-XX2V4QS5.js";
32
+ import "../chunk-ANMHIZZY.js";
33
+ import "../chunk-4LL6LG5X.js";
31
34
  import {
32
35
  getApiKey,
33
36
  getBaseUrl
34
37
  } from "../chunk-2UMNXADU.js";
35
38
  import {
36
39
  resolvePolicy
37
- } from "../chunk-X6RXX2NF.js";
40
+ } from "../chunk-QINYXLA5.js";
38
41
  export {
39
42
  askUser,
40
43
  cancelQuestion,
44
+ fetchAccountPublicKey,
41
45
  fetchModeOverride,
42
46
  fetchModeState,
43
47
  getApiKey,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pushary/agent-hooks",
3
- "version": "0.89.11",
3
+ "version": "0.89.13",
4
4
  "description": "Permission hooks for AI coding agents: route tool approvals through Pushary push notifications",
5
5
  "keywords": [
6
6
  "pushary",
@@ -51,6 +51,7 @@
51
51
  "pushary-elicitation-hook": "./dist/bin/pushary-elicitation-hook.js",
52
52
  "pushary-claude": "./dist/bin/pushary-claude.js",
53
53
  "pushary-daemon": "./dist/bin/pushary-daemon.js",
54
+ "pushary-daemon-supervisor": "./dist/bin/pushary-daemon-supervisor.js",
54
55
  "pushary-codex": "./dist/bin/pushary-codex.js",
55
56
  "pushary-codex-bridge": "./dist/bin/pushary-codex-bridge.js",
56
57
  "pushary-codex-hook": "./dist/bin/pushary-codex-hook.js",
@@ -71,7 +72,8 @@
71
72
  "pushary-upgrade": "./dist/bin/pushary-upgrade.js",
72
73
  "pushary-bell": "./dist/bin/pushary-bell.js",
73
74
  "pushary-bell-hook": "./dist/bin/pushary-bell-hook.js",
74
- "pushary-disconnect": "./dist/bin/pushary-disconnect.js"
75
+ "pushary-disconnect": "./dist/bin/pushary-disconnect.js",
76
+ "pushary-transcripts": "./dist/bin/pushary-transcripts.js"
75
77
  },
76
78
  "files": [
77
79
  "dist",
File without changes