pushary 1.9.136 → 1.9.137

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 (42) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/bin/pushary-bell-hook.js +3 -3
  3. package/dist/bin/pushary-claude.js +2 -2
  4. package/dist/bin/pushary-clean.js +9 -9
  5. package/dist/bin/pushary-codex-hook.js +3 -3
  6. package/dist/bin/pushary-codex-session.js +2 -2
  7. package/dist/bin/pushary-daemon.js +3 -3
  8. package/dist/bin/pushary-display-hook.js +36 -24
  9. package/dist/bin/pushary-doctor.js +12 -8
  10. package/dist/bin/pushary-elicitation-hook.js +3 -3
  11. package/dist/bin/pushary-gemini-hook.js +3 -3
  12. package/dist/bin/pushary-hook.js +4 -4
  13. package/dist/bin/pushary-login.js +1 -1
  14. package/dist/bin/pushary-notification-hook.js +3 -3
  15. package/dist/bin/pushary-opencode-hook.js +3 -3
  16. package/dist/bin/pushary-permission-denied-hook.js +4 -4
  17. package/dist/bin/pushary-permission-hook.js +4 -4
  18. package/dist/bin/pushary-post-hook.js +3 -3
  19. package/dist/bin/pushary-prompt-hook.js +3 -3
  20. package/dist/bin/pushary-session-end-hook.js +3 -3
  21. package/dist/bin/pushary-session-start-hook.js +3 -3
  22. package/dist/bin/pushary-setup.js +11 -9
  23. package/dist/bin/pushary-status.js +2 -2
  24. package/dist/bin/pushary-stop-hook.js +3 -3
  25. package/dist/bin/pushary-stopfailure-hook.js +3 -3
  26. package/dist/bin/pushary-transcript-register.js +2 -2
  27. package/dist/bin/pushary-transcripts.js +2 -2
  28. package/dist/bin/pushary-upgrade.js +2 -2
  29. package/dist/{chunk-L7Q57R4J.js → chunk-6WT5OIRM.js} +1 -1
  30. package/dist/{chunk-EQZB5P6I.js → chunk-7NCI2DGB.js} +2 -2
  31. package/dist/{chunk-RPFSVNH6.js → chunk-7VKW7OA5.js} +1 -1
  32. package/dist/{chunk-YURIU333.js → chunk-7XD56GXA.js} +1 -1
  33. package/dist/chunk-B4UIRMOE.js +31 -0
  34. package/dist/{chunk-HKJLPVPZ.js → chunk-CMAB4KQG.js} +1 -1
  35. package/dist/{chunk-FAF5RDWT.js → chunk-MD63J3T7.js} +229 -38
  36. package/dist/{chunk-O5T53LZ5.js → chunk-R6N6FREL.js} +1 -1
  37. package/dist/{chunk-J42EAEX3.js → chunk-XR27HPYC.js} +2 -1
  38. package/dist/{codex-app-cards-switch-Z7TMF2OR.js → codex-app-cards-switch-JU236CG2.js} +3 -3
  39. package/dist/{codex-desktop-launch-HKXGKL3T.js → codex-desktop-launch-LRQ4LU64.js} +1 -1
  40. package/dist/src/index.js +4 -4
  41. package/package.json +1 -1
  42. package/dist/chunk-GACQSKNG.js +0 -75
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.137
4
+
5
+ - After `npm uninstall -g pushary`, the background service stops trying to start the removed program. Before, macOS and Linux restarted it every 10 seconds for good, writing an error each time.
6
+ - macOS: the service exits cleanly when it starts and Pushary is gone, so launchd does not restart it.
7
+ - Linux: systemd skips the start when the program is gone, at login and on its automatic restarts. systemd 253 and older check the start condition again on each restart; 254 and newer run the unit's new condition command, which versions before 243 ignore with a warning.
8
+ - Linux: that condition command runs with the service's Node, so a Node that cannot run also skips the start instead of failing it, for example after nvm or asdf removed that version. `pushary doctor` reports a Node that is gone and says to run `pushary daemon install`; it does not catch a Node that is there but broken.
9
+ - Nothing is deleted. Reinstalling Pushary does not start the daemon by itself: it starts at your next login or agent session, or when you run `pushary setup` or `pushary upgrade`. The same now holds if the daemon restarts in the moment `npm install -g` is replacing its files, or at a login where the program's disk is not mounted yet: it stays down until then, where before it came back 10 seconds later.
10
+ - A service you already have gets this the next time setup, `pushary upgrade` or `pushary daemon install` rewrites it. On Linux automatic updates are paused, so run `pushary upgrade` there.
11
+ - `pushary doctor` fails a row when the background service starts a Pushary install that is gone.
12
+ - Windows did not loop and is unchanged. A supervisor still running when the package is removed restarts a crashed daemon, with backoff, until you log off.
13
+
3
14
  ## 1.9.136
4
15
 
5
16
  - Qwen Code: tapping yes on your phone lets the command run. Before, Qwen read Pushary's yes as "carry on to the usual prompt", so the command still waited at Qwen's own approval prompt in the terminal while your phone showed the question as answered. A call Pushary already allows, such as a read-only command or an auto-approve rule from the dashboard, now runs at that prompt too. CodeBuddy and Qoder already ran the call on a yes and are unchanged.
@@ -4,13 +4,13 @@ import {
4
4
  } from "../chunk-MENTZJHA.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-YURIU333.js";
7
+ } from "../chunk-7XD56GXA.js";
8
8
  import "../chunk-NN43KGTN.js";
9
- import "../chunk-L7Q57R4J.js";
9
+ import "../chunk-6WT5OIRM.js";
10
10
  import "../chunk-VAE5JBR5.js";
11
11
  import "../chunk-G66WIAST.js";
12
12
  import "../chunk-43DT3QWZ.js";
13
- import "../chunk-FAF5RDWT.js";
13
+ import "../chunk-MD63J3T7.js";
14
14
  import "../chunk-TLK5YLIE.js";
15
15
  import "../chunk-D7AAAD6W.js";
16
16
  import "../chunk-A2YJ2FBR.js";
@@ -24,12 +24,12 @@ import {
24
24
  registerTranscript,
25
25
  registeredTranscriptEnabled,
26
26
  startDraftPublisher
27
- } from "../chunk-L7Q57R4J.js";
27
+ } from "../chunk-6WT5OIRM.js";
28
28
  import "../chunk-VAE5JBR5.js";
29
29
  import "../chunk-G66WIAST.js";
30
30
  import {
31
31
  ensureDaemonRunning
32
- } from "../chunk-FAF5RDWT.js";
32
+ } from "../chunk-MD63J3T7.js";
33
33
  import "../chunk-TLK5YLIE.js";
34
34
  import {
35
35
  DEFAULT_SESSION,
@@ -15,13 +15,13 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-EQZB5P6I.js";
18
+ } from "../chunk-7NCI2DGB.js";
19
19
  import {
20
20
  PUSHARY_SKILL_NAME,
21
21
  PUSHARY_SKILL_SOURCE,
22
22
  createGuards
23
- } from "../chunk-J42EAEX3.js";
24
- import "../chunk-RPFSVNH6.js";
23
+ } from "../chunk-XR27HPYC.js";
24
+ import "../chunk-7VKW7OA5.js";
25
25
  import "../chunk-XCEN33UP.js";
26
26
  import {
27
27
  describeCliKeyRevocation,
@@ -98,7 +98,7 @@ import {
98
98
  } from "../chunk-43DT3QWZ.js";
99
99
  import {
100
100
  disableDaemonService
101
- } from "../chunk-FAF5RDWT.js";
101
+ } from "../chunk-MD63J3T7.js";
102
102
  import {
103
103
  hookOwnerOf,
104
104
  isHookTakeoverReceipt,
@@ -623,9 +623,9 @@ var cursorPluginLeftovers = () => {
623
623
  var guardedDaemonRemoval = async () => {
624
624
  if (dryRun) {
625
625
  wouldNote("stop and uninstall", "Pushary background service");
626
- return true;
626
+ return { kind: "ok" };
627
627
  }
628
- return (await disableDaemonService({ requireAbsenceProof: true })).kind === "ok";
628
+ return disableDaemonService({ requireAbsenceProof: true });
629
629
  };
630
630
  var guardedInstructionBlockRemoval = (path) => {
631
631
  if (!dryRun) return removeInstructionBlock(path);
@@ -880,9 +880,9 @@ var main = async () => {
880
880
  console.log(` ${dim("Fix the hooks file or receipt above, then re-run")} ${NPX_LATEST_COMMAND} clean`);
881
881
  process.exit(EXIT.FAILED);
882
882
  }
883
- const daemonRemoved = await guardedDaemonRemoval();
884
- if (!daemonRemoved) {
885
- console.log(` ${cross} Background service ${dim("(could not stop or uninstall)")}`);
883
+ const daemonRemoval = await guardedDaemonRemoval();
884
+ if (daemonRemoval.kind !== "ok") {
885
+ console.log(` ${cross} Background service ${dim(`(could not stop or uninstall: ${daemonRemoval.detail})`)}`);
886
886
  console.log(` ${yellow(bold("Clean stopped before changing provider configuration or local state."))}`);
887
887
  console.log(` ${dim("Fix the background service, then re-run")} ${NPX_LATEST_COMMAND} clean`);
888
888
  console.log();
@@ -23,17 +23,17 @@ import {
23
23
  } from "../chunk-ICCM3DLT.js";
24
24
  import {
25
25
  readHookInput
26
- } from "../chunk-YURIU333.js";
26
+ } from "../chunk-7XD56GXA.js";
27
27
  import "../chunk-NN43KGTN.js";
28
28
  import {
29
29
  announceSubscriptionRequired,
30
30
  isDeferAnswer
31
31
  } from "../chunk-H2RE3IPK.js";
32
- import "../chunk-L7Q57R4J.js";
32
+ import "../chunk-6WT5OIRM.js";
33
33
  import "../chunk-VAE5JBR5.js";
34
34
  import "../chunk-G66WIAST.js";
35
35
  import "../chunk-43DT3QWZ.js";
36
- import "../chunk-FAF5RDWT.js";
36
+ import "../chunk-MD63J3T7.js";
37
37
  import "../chunk-TLK5YLIE.js";
38
38
  import {
39
39
  CODEX_AGENT,
@@ -19,7 +19,7 @@ var desktopAccount = async () => {
19
19
  return null;
20
20
  }
21
21
  };
22
- var desktopLaunch = await import("../codex-desktop-launch-HKXGKL3T.js").catch(() => null);
22
+ var desktopLaunch = await import("../codex-desktop-launch-LRQ4LU64.js").catch(() => null);
23
23
  if (desktopLaunch === null && appBehindTheProxy !== void 0) {
24
24
  process.exitCode = await letCodexRunWithoutPushary(appBehindTheProxy, args.slice(3));
25
25
  } else {
@@ -27,7 +27,7 @@ if (desktopLaunch === null && appBehindTheProxy !== void 0) {
27
27
  const stop = () => abort.abort();
28
28
  if (!args[0]?.startsWith("--desktop")) for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, stop);
29
29
  try {
30
- const { codexDesktopCommand } = desktopLaunch ?? await import("../codex-desktop-launch-HKXGKL3T.js");
30
+ const { codexDesktopCommand } = desktopLaunch ?? await import("../codex-desktop-launch-LRQ4LU64.js");
31
31
  const desktop = await codexDesktopCommand(args, [process.execPath, ...process.execArgv, process.argv[1], "codex"], desktopAccount);
32
32
  if (desktop !== null) process.exitCode = desktop;
33
33
  else {
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  HEARTBEAT_INTERVAL_MS,
17
17
  sendHeartbeat
18
- } from "../chunk-HKJLPVPZ.js";
18
+ } from "../chunk-CMAB4KQG.js";
19
19
  import "../chunk-6SWFS4GU.js";
20
20
  import {
21
21
  readSignedOutDiagnosis
@@ -60,7 +60,7 @@ import {
60
60
  import "../chunk-NN43KGTN.js";
61
61
  import {
62
62
  startRegisteredTranscripts
63
- } from "../chunk-L7Q57R4J.js";
63
+ } from "../chunk-6WT5OIRM.js";
64
64
  import "../chunk-VAE5JBR5.js";
65
65
  import "../chunk-G66WIAST.js";
66
66
  import "../chunk-43DT3QWZ.js";
@@ -81,7 +81,7 @@ import {
81
81
  requestDaemonHandoff,
82
82
  stopDaemonRunning,
83
83
  writeDaemonNeedsLogin
84
- } from "../chunk-FAF5RDWT.js";
84
+ } from "../chunk-MD63J3T7.js";
85
85
  import {
86
86
  hookOwnerOf
87
87
  } from "../chunk-TLK5YLIE.js";
@@ -2911,8 +2911,8 @@ import { join as join3 } from "path";
2911
2911
  init_fsx();
2912
2912
  init_paths();
2913
2913
  import { createHash as createHash10 } from "crypto";
2914
- import { lstatSync as lstatSync5, readFileSync as readFileSync18, readdirSync as readdirSync2, realpathSync as realpathSync4, statSync as statSync5, unlinkSync as unlinkSync5 } from "fs";
2915
- import { basename as basename2, dirname as dirname8, isAbsolute, join as join19, relative, resolve as resolve3, sep } from "path";
2914
+ import { lstatSync as lstatSync5, readFileSync as readFileSync19, readdirSync as readdirSync2, realpathSync as realpathSync4, statSync as statSync5, unlinkSync as unlinkSync5 } from "fs";
2915
+ import { basename as basename3, dirname as dirname9, isAbsolute, join as join20, relative, resolve as resolve3, sep } from "path";
2916
2916
 
2917
2917
  // src/transcript-phone-trust.ts
2918
2918
  import { createHash as createHash5 } from "crypto";
@@ -7623,8 +7623,8 @@ var hookOwnerOfCommands = (commands, appAvailable = true) => {
7623
7623
 
7624
7624
  // src/daemon-lifecycle.ts
7625
7625
  init_src();
7626
- import { dirname as dirname7, join as join18, win32 as win32Path } from "path";
7627
- import { existsSync as existsSync6, mkdirSync as mkdirSync6, readFileSync as readFileSync17, realpathSync as realpathSync3, renameSync as renameSync3, statSync as statSync4, unlinkSync as unlinkSync4, writeFileSync as writeFileSync5 } from "fs";
7626
+ import { dirname as dirname8, join as join19, win32 as win32Path } from "path";
7627
+ import { existsSync as existsSync6, mkdirSync as mkdirSync7, readFileSync as readFileSync18, realpathSync as realpathSync3, renameSync as renameSync3, statSync as statSync4, unlinkSync as unlinkSync4, writeFileSync as writeFileSync5 } from "fs";
7628
7628
  import { createHash as createHash9, randomUUID as randomUUID3 } from "crypto";
7629
7629
  import { homedir as homedir8, uptime, userInfo } from "os";
7630
7630
 
@@ -7649,8 +7649,20 @@ import { win32 as win323 } from "path";
7649
7649
  // src/daemon-lifecycle.ts
7650
7650
  init_npm();
7651
7651
  init_cli_package_name();
7652
- init_global_package();
7653
7652
  import { execFileSync as execFileSync3 } from "child_process";
7653
+
7654
+ // src/daemon-entry-guard.ts
7655
+ init_fsx();
7656
+ import { mkdirSync as mkdirSync6, readFileSync as readFileSync17 } from "fs";
7657
+ import { basename, dirname as dirname7, join as join18 } from "path";
7658
+ var DAEMON_ENTRY_GUARD_SOURCE = [
7659
+ "const { existsSync } = require('node:fs')",
7660
+ "if (process.argv[1] && !existsSync(process.argv[1])) process.exit(0)",
7661
+ ""
7662
+ ].join("\n");
7663
+
7664
+ // src/daemon-lifecycle.ts
7665
+ init_global_package();
7654
7666
  var DAEMON_LEASE_RENEW_INTERVAL_MS = 3e4;
7655
7667
  var LOCAL_LEASE_TIMEOUT_MS = DAEMON_LEASE_RENEW_INTERVAL_MS * 3;
7656
7668
  var DAEMON_YIELD_CHECK_INTERVAL_MS = 2e3;
@@ -7701,7 +7713,7 @@ var firstString = (...values) => values.find((v) => typeof v === "string" && v.l
7701
7713
  // ../hook-mapping/src/map.ts
7702
7714
  init_src();
7703
7715
  init_src();
7704
- import { basename } from "path";
7716
+ import { basename as basename2 } from "path";
7705
7717
  var AGENT_IDENTITIES = {
7706
7718
  claude: { type: "claude_code", label: AGENT_LABELS_BY_TYPE.claude_code },
7707
7719
  codex: { type: "codex", label: AGENT_LABELS_BY_TYPE.codex },
@@ -7824,18 +7836,18 @@ var storedRegistrationSchema = external_exports.object({
7824
7836
  endedAt: external_exports.number().positive().optional(),
7825
7837
  drained: external_exports.boolean().optional()
7826
7838
  });
7827
- var defaultRegistryDirectory = () => process.env.PUSHARY_TRANSCRIPT_REGISTRY_DIR || join19(pusharyDir(), "transcript-capture");
7839
+ var defaultRegistryDirectory = () => process.env.PUSHARY_TRANSCRIPT_REGISTRY_DIR || join20(pusharyDir(), "transcript-capture");
7828
7840
  var cliRegistry = (apiKey = getApiKey()) => ({ apiKey, baseUrl: getBaseUrl(), directory: defaultRegistryDirectory() });
7829
7841
  var accountFor = (registry) => createHash10("sha256").update(`${registry.baseUrl}\0${registry.apiKey}`).digest("hex");
7830
7842
  var TTL = 48 * 60 * 60 * 1e3;
7831
7843
  var read = (path) => {
7832
7844
  if (statSync5(path).size > 16384) throw new Error("History registration exceeds its size limit");
7833
- return storedRegistrationSchema.parse(JSON.parse(readFileSync18(path, "utf8")));
7845
+ return storedRegistrationSchema.parse(JSON.parse(readFileSync19(path, "utf8")));
7834
7846
  };
7835
7847
  var consent = (record) => record.consentOverride ?? readTranscriptPreference() ?? true;
7836
7848
  var withoutTrailingSlash = (url) => url.replace(/\/+$/, "");
7837
7849
  var sameServer = (url, registry) => withoutTrailingSlash(url) === withoutTrailingSlash(registry.baseUrl);
7838
- var fileFor3 = (registry, sessionId) => join19(registry.directory, `${createHash10("sha256").update(accountFor(registry) + sessionId).digest("hex")}.json`);
7850
+ var fileFor3 = (registry, sessionId) => join20(registry.directory, `${createHash10("sha256").update(accountFor(registry) + sessionId).digest("hex")}.json`);
7839
7851
  var permitted = (registry, raw2) => raw2.account === accountFor(registry) && consent(raw2) && !raw2.drained && (raw2.source !== "claude" || !!raw2.expectedSiteId || !macOwnsClaudeHooks(raw2.cwd)) && (!raw2.expectedSiteId || raw2.expectedSiteId === raw2.verifiedSiteId && !!raw2.expectedBaseUrl && sameServer(raw2.expectedBaseUrl, registry));
7840
7852
  var registeredTranscriptEnabled = (apiKey, sessionId, registry = cliRegistry(apiKey)) => {
7841
7853
  try {
@@ -7845,12 +7857,12 @@ var registeredTranscriptEnabled = (apiKey, sessionId, registry = cliRegistry(api
7845
7857
  }
7846
7858
  };
7847
7859
  var macOwnsClaudeHooks = (cwd) => [
7848
- join19(claudeConfigDir(), "settings.json"),
7849
- join19(cwd, ".claude", "settings.json"),
7850
- join19(cwd, ".claude", "settings.local.json")
7860
+ join20(claudeConfigDir(), "settings.json"),
7861
+ join20(cwd, ".claude", "settings.json"),
7862
+ join20(cwd, ".claude", "settings.local.json")
7851
7863
  ].some((path) => {
7852
7864
  try {
7853
- return hookOwnerOf(JSON.parse(readFileSync18(path, "utf8"))) === "app";
7865
+ return hookOwnerOf(JSON.parse(readFileSync19(path, "utf8"))) === "app";
7854
7866
  } catch {
7855
7867
  return false;
7856
7868
  }
@@ -7858,22 +7870,22 @@ var macOwnsClaudeHooks = (cwd) => [
7858
7870
  var TRANSCRIPT_ROOT_NAME = { claude: "projects", codex: "sessions", gemini: "tmp", cursor: "projects", hermes: "hermes-history" };
7859
7871
  var transcriptRoots = (source) => {
7860
7872
  const home = homedir9();
7861
- if (source === "codex") return [join19(codexHome(), TRANSCRIPT_ROOT_NAME.codex)];
7862
- if (source === "cursor") return [join19(home, ".cursor", TRANSCRIPT_ROOT_NAME.cursor)];
7863
- if (source === "hermes") return [join19(home, ".pushary", TRANSCRIPT_ROOT_NAME.hermes)];
7864
- if (source === "gemini") return [join19(process.env.GEMINI_CLI_HOME || home, ".gemini", "tmp"), join19(home, ".cache", ".gemini", "tmp")];
7873
+ if (source === "codex") return [join20(codexHome(), TRANSCRIPT_ROOT_NAME.codex)];
7874
+ if (source === "cursor") return [join20(home, ".cursor", TRANSCRIPT_ROOT_NAME.cursor)];
7875
+ if (source === "hermes") return [join20(home, ".pushary", TRANSCRIPT_ROOT_NAME.hermes)];
7876
+ if (source === "gemini") return [join20(process.env.GEMINI_CLI_HOME || home, ".gemini", "tmp"), join20(home, ".cache", ".gemini", "tmp")];
7865
7877
  const configured = process.env.CLAUDE_CONFIG_DIR;
7866
- return [join19(configured || join19(home, ".claude"), TRANSCRIPT_ROOT_NAME.claude), join19(home, ".claude", TRANSCRIPT_ROOT_NAME.claude)];
7878
+ return [join20(configured || join20(home, ".claude"), TRANSCRIPT_ROOT_NAME.claude), join20(home, ".claude", TRANSCRIPT_ROOT_NAME.claude)];
7867
7879
  };
7868
- var isAgentTranscriptRoot = (root, source) => isAbsolute(root) && resolve3(root) === root && basename2(root) === TRANSCRIPT_ROOT_NAME[source];
7880
+ var isAgentTranscriptRoot = (root, source) => isAbsolute(root) && resolve3(root) === root && basename3(root) === TRANSCRIPT_ROOT_NAME[source];
7869
7881
  var acceptedTranscriptRoots = (source, registeredRoot) => typeof registeredRoot === "string" && isAgentTranscriptRoot(registeredRoot, source) ? [...transcriptRoots(source), registeredRoot] : transcriptRoots(source);
7870
7882
  var resolvedSourcePath = (path) => {
7871
7883
  const absolute = resolve3(path);
7872
7884
  try {
7873
7885
  return realpathSync4(absolute);
7874
7886
  } catch {
7875
- const parent = dirname8(absolute);
7876
- return parent === absolute ? absolute : join19(resolvedSourcePath(parent), basename2(absolute));
7887
+ const parent = dirname9(absolute);
7888
+ return parent === absolute ? absolute : join20(resolvedSourcePath(parent), basename3(absolute));
7877
7889
  }
7878
7890
  };
7879
7891
  var transcriptRootContaining = (candidate, roots) => {
@@ -7891,9 +7903,9 @@ var captureRegistration = (source, value, registeredRoot) => {
7891
7903
  const root = transcriptRootContaining(path, acceptedTranscriptRoots(source, registeredRoot));
7892
7904
  if (root === null) return null;
7893
7905
  const segments = relative(root, path).split(sep);
7894
- if (source === "hermes" && (segments.length !== 2 || !/^[a-f0-9]{64}$/.test(segments[0] ?? "") || basename2(path) !== `${sessionId}.json`)) return null;
7895
- if (source === "gemini" && (segments.length !== 3 || segments[1] !== "chats" || !basename2(path).startsWith("session-"))) return null;
7896
- if (source === "cursor" && (segments[1] !== "agent-transcripts" || basename2(path) !== `${sessionId}.jsonl` || !(segments.length === 3 || segments.length === 4 && basename2(dirname8(path)) === sessionId))) return null;
7906
+ if (source === "hermes" && (segments.length !== 2 || !/^[a-f0-9]{64}$/.test(segments[0] ?? "") || basename3(path) !== `${sessionId}.json`)) return null;
7907
+ if (source === "gemini" && (segments.length !== 3 || segments[1] !== "chats" || !basename3(path).startsWith("session-"))) return null;
7908
+ if (source === "cursor" && (segments[1] !== "agent-transcripts" || basename3(path) !== `${sessionId}.jsonl` || !(segments.length === 3 || segments.length === 4 && basename3(dirname9(path)) === sessionId))) return null;
7897
7909
  return { sessionId, cwd: input.cwd, path, source, root };
7898
7910
  };
7899
7911
 
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- describeServiceNodeRisk,
4
- readServiceExecPath,
5
- readSetupFailure,
6
- versionManagerOf
7
- } from "../chunk-GACQSKNG.js";
3
+ readSetupFailure
4
+ } from "../chunk-B4UIRMOE.js";
8
5
  import {
9
6
  describeWaitLadder
10
7
  } from "../chunk-CVWG2N3Y.js";
@@ -40,7 +37,7 @@ import {
40
37
  import {
41
38
  readMachineReadiness,
42
39
  readManagedControlEvidence
43
- } from "../chunk-HKJLPVPZ.js";
40
+ } from "../chunk-CMAB4KQG.js";
44
41
  import {
45
42
  assessCodexHookTrust,
46
43
  readCodexTrustForPusharyHooks
@@ -144,11 +141,15 @@ import {
144
141
  daemonHasRemoteProof,
145
142
  daemonServiceManagerAvailable,
146
143
  describeDaemonLoginBlock,
144
+ describeServiceNodeRisk,
147
145
  hasDaemonServiceDefinition,
148
146
  readDaemonNeedsLogin,
149
147
  readDaemonStatus,
150
- readInstalledDaemonService
151
- } from "../chunk-FAF5RDWT.js";
148
+ readInstalledDaemonService,
149
+ readServiceExecPath,
150
+ serviceStartFileChecks,
151
+ versionManagerOf
152
+ } from "../chunk-MD63J3T7.js";
152
153
  import {
153
154
  GEMINI_HOOK_BINARY,
154
155
  claudeOtherHolders,
@@ -1201,6 +1202,9 @@ var main = async () => {
1201
1202
  "Remote-control service runtime",
1202
1203
  present ? `${serviceNode}${manager ? ` (${describeServiceNodeRisk(manager)})` : ""}` : `${serviceNode} is gone${manager ? ` (${manager} switched Node since setup)` : ""}; run \`pushary daemon install\` to repin the service`
1203
1204
  );
1205
+ for (const start of serviceStartFileChecks(serviceFile.contents, process.platform, existsSync)) {
1206
+ check(start.passed, start.label, start.detail);
1207
+ }
1204
1208
  } else if (serviceFile) {
1205
1209
  console.log(` ${warn} Remote-control service runtime ${dim(`(could not read the node path out of ${serviceFile.path})`)}`);
1206
1210
  }
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-YURIU333.js";
4
+ } from "../chunk-7XD56GXA.js";
5
5
  import "../chunk-NN43KGTN.js";
6
6
  import {
7
7
  announceSubscriptionRequired,
8
8
  isDeferAnswer
9
9
  } from "../chunk-H2RE3IPK.js";
10
- import "../chunk-L7Q57R4J.js";
10
+ import "../chunk-6WT5OIRM.js";
11
11
  import "../chunk-VAE5JBR5.js";
12
12
  import "../chunk-G66WIAST.js";
13
13
  import "../chunk-43DT3QWZ.js";
14
- import "../chunk-FAF5RDWT.js";
14
+ import "../chunk-MD63J3T7.js";
15
15
  import "../chunk-TLK5YLIE.js";
16
16
  import "../chunk-D7AAAD6W.js";
17
17
  import "../chunk-A2YJ2FBR.js";
@@ -16,17 +16,17 @@ import {
16
16
  } from "../chunk-ICCM3DLT.js";
17
17
  import {
18
18
  readHookInput
19
- } from "../chunk-YURIU333.js";
19
+ } from "../chunk-7XD56GXA.js";
20
20
  import "../chunk-NN43KGTN.js";
21
21
  import {
22
22
  announceSubscriptionRequired,
23
23
  isDeferAnswer
24
24
  } from "../chunk-H2RE3IPK.js";
25
- import "../chunk-L7Q57R4J.js";
25
+ import "../chunk-6WT5OIRM.js";
26
26
  import "../chunk-VAE5JBR5.js";
27
27
  import "../chunk-G66WIAST.js";
28
28
  import "../chunk-43DT3QWZ.js";
29
- import "../chunk-FAF5RDWT.js";
29
+ import "../chunk-MD63J3T7.js";
30
30
  import "../chunk-TLK5YLIE.js";
31
31
  import {
32
32
  DEFAULT_SESSION,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-O5T53LZ5.js";
4
+ } from "../chunk-R6N6FREL.js";
5
5
  import "../chunk-UP5QXEUU.js";
6
6
  import "../chunk-G73ACPR2.js";
7
7
  import {
@@ -12,10 +12,10 @@ import "../chunk-HY4ATVCT.js";
12
12
  import "../chunk-YQQGIDBC.js";
13
13
  import {
14
14
  readToolHookCall
15
- } from "../chunk-YURIU333.js";
15
+ } from "../chunk-7XD56GXA.js";
16
16
  import "../chunk-NN43KGTN.js";
17
17
  import "../chunk-H2RE3IPK.js";
18
- import "../chunk-L7Q57R4J.js";
18
+ import "../chunk-6WT5OIRM.js";
19
19
  import "../chunk-VAE5JBR5.js";
20
20
  import "../chunk-G66WIAST.js";
21
21
  import {
@@ -23,7 +23,7 @@ import {
23
23
  normalizeToolCall,
24
24
  profileFromArgv
25
25
  } from "../chunk-43DT3QWZ.js";
26
- import "../chunk-FAF5RDWT.js";
26
+ import "../chunk-MD63J3T7.js";
27
27
  import "../chunk-TLK5YLIE.js";
28
28
  import "../chunk-D7AAAD6W.js";
29
29
  import {
@@ -25,7 +25,7 @@ import {
25
25
  import "../chunk-G66WIAST.js";
26
26
  import {
27
27
  recoverDaemonAfterLogin
28
- } from "../chunk-FAF5RDWT.js";
28
+ } from "../chunk-MD63J3T7.js";
29
29
  import {
30
30
  parseFlags
31
31
  } from "../chunk-YPY4YCIZ.js";
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-YURIU333.js";
4
+ } from "../chunk-7XD56GXA.js";
5
5
  import "../chunk-NN43KGTN.js";
6
- import "../chunk-L7Q57R4J.js";
6
+ import "../chunk-6WT5OIRM.js";
7
7
  import "../chunk-VAE5JBR5.js";
8
8
  import "../chunk-G66WIAST.js";
9
9
  import {
10
10
  activeHookSource,
11
11
  activeIdentity
12
12
  } from "../chunk-43DT3QWZ.js";
13
- import "../chunk-FAF5RDWT.js";
13
+ import "../chunk-MD63J3T7.js";
14
14
  import "../chunk-TLK5YLIE.js";
15
15
  import {
16
16
  handleNotification
@@ -13,17 +13,17 @@ import {
13
13
  } from "../chunk-YQQGIDBC.js";
14
14
  import {
15
15
  readHookInput
16
- } from "../chunk-YURIU333.js";
16
+ } from "../chunk-7XD56GXA.js";
17
17
  import "../chunk-NN43KGTN.js";
18
18
  import {
19
19
  announceSubscriptionRequired,
20
20
  isDeferAnswer
21
21
  } from "../chunk-H2RE3IPK.js";
22
- import "../chunk-L7Q57R4J.js";
22
+ import "../chunk-6WT5OIRM.js";
23
23
  import "../chunk-VAE5JBR5.js";
24
24
  import "../chunk-G66WIAST.js";
25
25
  import "../chunk-43DT3QWZ.js";
26
- import "../chunk-FAF5RDWT.js";
26
+ import "../chunk-MD63J3T7.js";
27
27
  import "../chunk-TLK5YLIE.js";
28
28
  import {
29
29
  DEFAULT_SESSION,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionDenied
4
- } from "../chunk-O5T53LZ5.js";
4
+ } from "../chunk-R6N6FREL.js";
5
5
  import "../chunk-UP5QXEUU.js";
6
6
  import "../chunk-G73ACPR2.js";
7
7
  import {
@@ -12,14 +12,14 @@ import "../chunk-HY4ATVCT.js";
12
12
  import "../chunk-YQQGIDBC.js";
13
13
  import {
14
14
  readHookInput
15
- } from "../chunk-YURIU333.js";
15
+ } from "../chunk-7XD56GXA.js";
16
16
  import "../chunk-NN43KGTN.js";
17
17
  import "../chunk-H2RE3IPK.js";
18
- import "../chunk-L7Q57R4J.js";
18
+ import "../chunk-6WT5OIRM.js";
19
19
  import "../chunk-VAE5JBR5.js";
20
20
  import "../chunk-G66WIAST.js";
21
21
  import "../chunk-43DT3QWZ.js";
22
- import "../chunk-FAF5RDWT.js";
22
+ import "../chunk-MD63J3T7.js";
23
23
  import "../chunk-TLK5YLIE.js";
24
24
  import "../chunk-D7AAAD6W.js";
25
25
  import "../chunk-A2YJ2FBR.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionRequest
4
- } from "../chunk-O5T53LZ5.js";
4
+ } from "../chunk-R6N6FREL.js";
5
5
  import "../chunk-UP5QXEUU.js";
6
6
  import "../chunk-G73ACPR2.js";
7
7
  import {
@@ -12,10 +12,10 @@ import "../chunk-HY4ATVCT.js";
12
12
  import "../chunk-YQQGIDBC.js";
13
13
  import {
14
14
  readToolHookInput
15
- } from "../chunk-YURIU333.js";
15
+ } from "../chunk-7XD56GXA.js";
16
16
  import "../chunk-NN43KGTN.js";
17
17
  import "../chunk-H2RE3IPK.js";
18
- import "../chunk-L7Q57R4J.js";
18
+ import "../chunk-6WT5OIRM.js";
19
19
  import "../chunk-VAE5JBR5.js";
20
20
  import "../chunk-G66WIAST.js";
21
21
  import {
@@ -24,7 +24,7 @@ import {
24
24
  permissionRequestAsPreToolUseSeesIt,
25
25
  profileFromArgv
26
26
  } from "../chunk-43DT3QWZ.js";
27
- import "../chunk-FAF5RDWT.js";
27
+ import "../chunk-MD63J3T7.js";
28
28
  import "../chunk-TLK5YLIE.js";
29
29
  import "../chunk-D7AAAD6W.js";
30
30
  import {
@@ -4,9 +4,9 @@ import {
4
4
  } from "../chunk-UP5QXEUU.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-YURIU333.js";
7
+ } from "../chunk-7XD56GXA.js";
8
8
  import "../chunk-NN43KGTN.js";
9
- import "../chunk-L7Q57R4J.js";
9
+ import "../chunk-6WT5OIRM.js";
10
10
  import "../chunk-VAE5JBR5.js";
11
11
  import "../chunk-G66WIAST.js";
12
12
  import {
@@ -15,7 +15,7 @@ import {
15
15
  normalizeToolCall,
16
16
  profileFromArgv
17
17
  } from "../chunk-43DT3QWZ.js";
18
- import "../chunk-FAF5RDWT.js";
18
+ import "../chunk-MD63J3T7.js";
19
19
  import "../chunk-TLK5YLIE.js";
20
20
  import {
21
21
  emitHookOutput,
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-YURIU333.js";
4
+ } from "../chunk-7XD56GXA.js";
5
5
  import "../chunk-NN43KGTN.js";
6
- import "../chunk-L7Q57R4J.js";
6
+ import "../chunk-6WT5OIRM.js";
7
7
  import "../chunk-VAE5JBR5.js";
8
8
  import "../chunk-G66WIAST.js";
9
9
  import {
10
10
  activeHookSource,
11
11
  activeIdentity
12
12
  } from "../chunk-43DT3QWZ.js";
13
- import "../chunk-FAF5RDWT.js";
13
+ import "../chunk-MD63J3T7.js";
14
14
  import "../chunk-TLK5YLIE.js";
15
15
  import {
16
16
  emitHookOutput,
@@ -5,16 +5,16 @@ import {
5
5
  import "../chunk-CYTPQDQY.js";
6
6
  import {
7
7
  readHookInput
8
- } from "../chunk-YURIU333.js";
8
+ } from "../chunk-7XD56GXA.js";
9
9
  import "../chunk-NN43KGTN.js";
10
- import "../chunk-L7Q57R4J.js";
10
+ import "../chunk-6WT5OIRM.js";
11
11
  import "../chunk-VAE5JBR5.js";
12
12
  import "../chunk-G66WIAST.js";
13
13
  import {
14
14
  activeHookSource,
15
15
  activeIdentity
16
16
  } from "../chunk-43DT3QWZ.js";
17
- import "../chunk-FAF5RDWT.js";
17
+ import "../chunk-MD63J3T7.js";
18
18
  import "../chunk-TLK5YLIE.js";
19
19
  import {
20
20
  handleSessionEnd
@@ -15,16 +15,16 @@ import {
15
15
  } from "../chunk-ICCM3DLT.js";
16
16
  import {
17
17
  readHookInput
18
- } from "../chunk-YURIU333.js";
18
+ } from "../chunk-7XD56GXA.js";
19
19
  import "../chunk-NN43KGTN.js";
20
- import "../chunk-L7Q57R4J.js";
20
+ import "../chunk-6WT5OIRM.js";
21
21
  import "../chunk-VAE5JBR5.js";
22
22
  import "../chunk-G66WIAST.js";
23
23
  import {
24
24
  activeHookSource,
25
25
  activeIdentity
26
26
  } from "../chunk-43DT3QWZ.js";
27
- import "../chunk-FAF5RDWT.js";
27
+ import "../chunk-MD63J3T7.js";
28
28
  import "../chunk-TLK5YLIE.js";
29
29
  import {
30
30
  CLAUDE_CODE_AGENT,