@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.
- package/CHANGELOG.md +55 -0
- package/README.md +4 -2
- package/dist/bin/pushary-bell-hook.js +5 -5
- package/dist/bin/pushary-bell.js +11 -11
- package/dist/bin/pushary-claude.js +225 -48
- package/dist/bin/pushary-clean.js +49 -29
- package/dist/bin/pushary-codex-bridge.js +17 -16
- package/dist/bin/pushary-codex-hook.js +11 -10
- package/dist/bin/pushary-codex.js +7 -7
- package/dist/bin/pushary-connect.js +12 -12
- package/dist/bin/pushary-daemon-supervisor.d.ts +1 -0
- package/dist/bin/pushary-daemon-supervisor.js +27 -0
- package/dist/bin/pushary-daemon.js +22 -22
- package/dist/bin/pushary-disconnect.js +9 -9
- package/dist/bin/pushary-doctor.js +59 -49
- package/dist/bin/pushary-elicitation-hook.js +4 -4
- package/dist/bin/pushary-gemini-bridge.js +16 -15
- package/dist/bin/pushary-gemini-hook.js +10 -9
- package/dist/bin/pushary-hook.js +13 -13
- package/dist/bin/pushary-login.js +11 -11
- package/dist/bin/pushary-logout.js +11 -11
- package/dist/bin/pushary-mode.js +5 -5
- package/dist/bin/pushary-notification-hook.js +7 -7
- package/dist/bin/pushary-opencode-hook.js +10 -9
- package/dist/bin/pushary-permission-denied-hook.js +11 -11
- package/dist/bin/pushary-permission-hook.js +11 -11
- package/dist/bin/pushary-post-hook.js +7 -7
- package/dist/bin/pushary-prompt-hook.js +7 -7
- package/dist/bin/pushary-session-end-hook.js +7 -7
- package/dist/bin/pushary-session-start-hook.js +7 -7
- package/dist/bin/pushary-setup.js +87 -59
- package/dist/bin/pushary-stats.js +4 -4
- package/dist/bin/pushary-status.js +14 -14
- package/dist/bin/pushary-stop-hook.js +7 -7
- package/dist/bin/pushary-stopfailure-hook.js +7 -7
- package/dist/bin/pushary-suggestions.js +2 -2
- package/dist/bin/pushary-transcripts.d.ts +1 -0
- package/dist/bin/pushary-transcripts.js +79 -0
- package/dist/bin/pushary-upgrade.js +21 -21
- package/dist/bin/pushary-wait.js +5 -5
- package/dist/bin/pushary.js +3 -2
- package/dist/{chunk-6XUABEX2.js → chunk-3OXHYPZG.js} +1 -1
- package/dist/{chunk-QA72MKIT.js → chunk-3YGGEDJK.js} +5 -5
- package/dist/{chunk-IUN6VOKV.js → chunk-4IPSMEGT.js} +68 -46
- package/dist/{chunk-XX2V4QS5.js → chunk-4LL6LG5X.js} +2 -2
- package/dist/{chunk-J4K75V4D.js → chunk-5MNTWAAJ.js} +10 -9
- package/dist/{chunk-KVE5RCQL.js → chunk-5YEF55AX.js} +1 -1
- package/dist/{chunk-3SQYKLBW.js → chunk-7JZCADBR.js} +46 -18
- package/dist/{chunk-IUWRVTQK.js → chunk-ANMHIZZY.js} +1 -1
- package/dist/{chunk-6EKQZA6R.js → chunk-B2HND22S.js} +1 -1
- package/dist/{chunk-TRVIRETT.js → chunk-C56VHSXU.js} +1 -1
- package/dist/{chunk-TEZ2FZD6.js → chunk-CBGGUEKE.js} +2 -2
- package/dist/{chunk-3HFK3UXM.js → chunk-FOGW6O2Y.js} +1 -1
- package/dist/{chunk-3XTFX4CL.js → chunk-GMJDQDXU.js} +17 -2
- package/dist/{chunk-DKWM5T3P.js → chunk-JTBDBKHU.js} +2 -2
- package/dist/{chunk-Q223OM5J.js → chunk-JVLB5CAJ.js} +4 -4
- package/dist/{chunk-2LPEZYMC.js → chunk-KNLKHJZR.js} +1 -1
- package/dist/{chunk-X4ZUUFKV.js → chunk-L4ZCFMWW.js} +63 -1
- package/dist/chunk-M3UABYRT.js +20 -0
- package/dist/{chunk-PZRWFWSR.js → chunk-MNTZKFZI.js} +7 -7
- package/dist/{chunk-FZ73G2RO.js → chunk-MSTHT2M7.js} +25 -6
- package/dist/{chunk-TG3T3M4K.js → chunk-N4QJ3CLX.js} +6 -2
- package/dist/{chunk-3CUDMTL4.js → chunk-NBDU3R3G.js} +10 -3
- package/dist/{chunk-FXIL7RCL.js → chunk-OX35BSPV.js} +4 -4
- package/dist/{chunk-UDBJHQMG.js → chunk-QFJZHVVL.js} +1 -1
- package/dist/chunk-QZCFVWA7.js +58 -0
- package/dist/{chunk-TY5HVMXT.js → chunk-RAEPAUNJ.js} +1 -1
- package/dist/{chunk-NCVIWGVA.js → chunk-S4BLNILH.js} +1 -1
- package/dist/{chunk-MZGWKIUZ.js → chunk-VASZ6TWW.js} +7 -3
- package/dist/{chunk-SYUIXXQW.js → chunk-VF3RTVWY.js} +1 -1
- package/dist/{chunk-LURY4WNF.js → chunk-WHDSJ6PD.js} +1 -1
- package/dist/chunk-YKLCWWEI.js +76 -0
- package/dist/{chunk-253WC6O5.js → chunk-YXT55PYF.js} +1 -1
- package/dist/{chunk-BLODMQKJ.js → chunk-ZO43JTT3.js} +1 -1
- package/dist/{chunk-OLAGKKSR.js → chunk-ZP3SNUP7.js} +16 -6
- package/dist/{chunk-34GN3IPX.js → chunk-ZWEKONU6.js} +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +15 -11
- package/package.json +4 -2
- /package/dist/{chunk-X6RXX2NF.js → chunk-QINYXLA5.js} +0 -0
|
@@ -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,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
openCodeConfigDirFrom
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZWEKONU6.js";
|
|
4
4
|
import {
|
|
5
5
|
codexHomeFrom
|
|
6
|
-
} from "./chunk-
|
|
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
|
};
|
|
@@ -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,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-
|
|
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
|
|
101
|
-
if (!
|
|
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(
|
|
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) {
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import
|
|
6
|
-
|
|
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-
|
|
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-
|
|
23
|
-
import "../chunk-
|
|
24
|
-
import "../chunk-
|
|
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-
|
|
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-
|
|
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.
|
|
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
|