@pushary/agent-hooks 0.95.1 → 0.95.2

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 (82) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +9 -0
  3. package/data/cowork/SKILL.md +77 -0
  4. package/dist/bin/pushary-bell-hook.js +17 -16
  5. package/dist/bin/pushary-bell.js +7 -7
  6. package/dist/bin/pushary-claude.js +18 -17
  7. package/dist/bin/pushary-clean.js +16 -15
  8. package/dist/bin/pushary-codex-bridge.js +9 -9
  9. package/dist/bin/pushary-codex-hook.js +20 -19
  10. package/dist/bin/pushary-codex.js +7 -7
  11. package/dist/bin/pushary-connect.js +8 -8
  12. package/dist/bin/pushary-cowork.d.ts +1 -0
  13. package/dist/bin/pushary-cowork.js +37 -0
  14. package/dist/bin/pushary-daemon.js +22 -21
  15. package/dist/bin/pushary-disconnect.js +8 -8
  16. package/dist/bin/pushary-doctor.js +20 -20
  17. package/dist/bin/pushary-elicitation-hook.js +16 -15
  18. package/dist/bin/pushary-gemini-bridge.js +9 -9
  19. package/dist/bin/pushary-gemini-hook.js +19 -18
  20. package/dist/bin/pushary-hook.js +23 -22
  21. package/dist/bin/pushary-login.js +11 -10
  22. package/dist/bin/pushary-logout.js +6 -6
  23. package/dist/bin/pushary-mode.js +5 -5
  24. package/dist/bin/pushary-notification-hook.js +18 -17
  25. package/dist/bin/pushary-opencode-hook.js +19 -18
  26. package/dist/bin/pushary-permission-denied-hook.js +21 -20
  27. package/dist/bin/pushary-permission-hook.js +21 -20
  28. package/dist/bin/pushary-post-hook.js +18 -17
  29. package/dist/bin/pushary-prompt-hook.js +18 -17
  30. package/dist/bin/pushary-session-end-hook.js +18 -17
  31. package/dist/bin/pushary-session-start-hook.js +21 -20
  32. package/dist/bin/pushary-setup.js +39 -27
  33. package/dist/bin/pushary-stats.js +4 -4
  34. package/dist/bin/pushary-status.js +10 -10
  35. package/dist/bin/pushary-stop-hook.js +18 -17
  36. package/dist/bin/pushary-stopfailure-hook.js +18 -17
  37. package/dist/bin/pushary-suggestions.js +2 -2
  38. package/dist/bin/pushary-transcript-register.js +15 -14
  39. package/dist/bin/pushary-transcripts.js +6 -6
  40. package/dist/bin/pushary-upgrade.js +15 -15
  41. package/dist/bin/pushary-wait.js +5 -5
  42. package/dist/bin/pushary.js +2 -1
  43. package/dist/{chunk-77U3ZVV6.js → chunk-2XUPP4WM.js} +1 -1
  44. package/dist/chunk-3ZUTNTZA.js +133 -0
  45. package/dist/{chunk-T23EGPRI.js → chunk-4XXUHWIK.js} +1 -1
  46. package/dist/chunk-5GLPYGKS.js +88 -0
  47. package/dist/{chunk-VOWZ5VOO.js → chunk-6FAHPGCZ.js} +30 -0
  48. package/dist/{chunk-WJZUTMMU.js → chunk-76XICHYT.js} +3 -3
  49. package/dist/{chunk-BWNU4MX4.js → chunk-7LUFYRH4.js} +3 -3
  50. package/dist/{chunk-C2MV4G4A.js → chunk-A4R6BZCK.js} +1 -1
  51. package/dist/{chunk-R7NPGCSD.js → chunk-AMZJ3CKW.js} +1 -1
  52. package/dist/{chunk-IFCS6LXB.js → chunk-CH6DTGQR.js} +3 -3
  53. package/dist/{chunk-VLKEAYJ4.js → chunk-CKOLDI47.js} +1 -1
  54. package/dist/{chunk-J55K6YS4.js → chunk-DNVDKHQD.js} +5 -5
  55. package/dist/{chunk-IZRI4M3C.js → chunk-E3NF5CL2.js} +1 -1
  56. package/dist/{chunk-RNH2AE52.js → chunk-EPFDN2ZT.js} +1 -1
  57. package/dist/{chunk-UQSKCQBO.js → chunk-EUAQ4YAN.js} +1 -1
  58. package/dist/{chunk-IP63LMZM.js → chunk-FQUV5KTM.js} +6 -6
  59. package/dist/{chunk-YPYPI6BG.js → chunk-G24SEVCI.js} +2 -2
  60. package/dist/{chunk-MF64S7WO.js → chunk-G4TL4YWH.js} +1 -1
  61. package/dist/{chunk-Z3Z4VK5F.js → chunk-GKIUEIDX.js} +4 -33
  62. package/dist/{chunk-JSASMV3H.js → chunk-GUVCYYDK.js} +1 -1
  63. package/dist/{chunk-SSQ5X6SA.js → chunk-IAEXPTXA.js} +1 -1
  64. package/dist/{chunk-UFGDCMUD.js → chunk-IPHOUBTU.js} +1 -1
  65. package/dist/{chunk-PDFVIRPB.js → chunk-JDFB3YKG.js} +1 -1
  66. package/dist/{chunk-M64I4T7J.js → chunk-M7WWEFG6.js} +1 -1
  67. package/dist/{chunk-BVBEURWJ.js → chunk-MOY5X6HJ.js} +1 -1
  68. package/dist/chunk-PUZZELE6.js +37 -0
  69. package/dist/{chunk-ZOR5OJZJ.js → chunk-QF4RI5CD.js} +1 -1
  70. package/dist/{chunk-7MGF5Q7G.js → chunk-QUE76J4H.js} +1 -1
  71. package/dist/{chunk-CU5KI425.js → chunk-RVSEGFPD.js} +2 -2
  72. package/dist/{chunk-Y24D5ZWS.js → chunk-UOTSWS5N.js} +7 -7
  73. package/dist/{chunk-CC625NRG.js → chunk-UW4LWAWY.js} +6 -6
  74. package/dist/{chunk-TTO76NZJ.js → chunk-V27AHID3.js} +1 -1
  75. package/dist/{chunk-K7ZZGI2Y.js → chunk-VX3BWMC5.js} +1 -1
  76. package/dist/{chunk-3F4VV5TS.js → chunk-WB2C7VPF.js} +1 -1
  77. package/dist/{chunk-ZW3KAWTM.js → chunk-WM5XMCID.js} +5 -131
  78. package/dist/{chunk-T5B3LRYF.js → chunk-X7YWD6IS.js} +1 -1
  79. package/dist/{chunk-AQ5OAYOH.js → chunk-YJAQRKH5.js} +1 -1
  80. package/dist/{chunk-43GMYSS4.js → chunk-ZDAT5KMU.js} +12 -0
  81. package/dist/src/index.js +10 -10
  82. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.95.2
4
+
5
+ - Add `pushary cowork` and connector-only setup aliases for Claude Desktop, Chat and Cowork, without acquiring a CLI key or installing local hooks.
6
+ - Bundle the canonical Cowork skill and expose setup steps, standing instructions and a real user-answer test prompt.
7
+ - Explain cooperative connector limits and keep native permission hooks and managed session control separate.
8
+
3
9
  ## 0.95.0
4
10
 
5
11
  Requires the additive session-control and encrypted transcript-preview server routes before rollout.
package/README.md CHANGED
@@ -183,6 +183,7 @@ failing closed would let one malformed download silence every hook on the machin
183
183
  asserts this list matches it. Do not edit one without the other. -->
184
184
 
185
185
  ```
186
+ cowork Set up Claude Desktop and Cowork with the Pushary connector
186
187
  setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, VS Code, or OpenCode with Pushary
187
188
  claude Run Claude Code through Pushary, reachable from your phone even when idle
188
189
  daemon Keep this machine reachable so your phone can START a new session
@@ -278,3 +279,11 @@ If a policy cannot be fetched or a hook errors, the decision falls back to the a
278
279
  ## License
279
280
 
280
281
  MIT
282
+
283
+ ## Claude Desktop and Cowork
284
+
285
+ Run `pushary cowork` (or `npx @pushary/agent-hooks@latest cowork`) for connector setup. `pushary setup --agents cowork` opens the same setup path without storing a CLI key or writing hooks. Add the OAuth URL in Claude and sign in with the account used by your Pushary phone/Mac app.
286
+
287
+ Use `pushary cowork --instructions` for standing instructions or `pushary cowork --skill > SKILL.md` to export the bundled skill for upload. `--json` reports `manual_setup_required`; printing a link does not prove a connection. Ask a test question in Claude, answer it in Pushary, and verify Claude receives it.
288
+
289
+ This connector is cooperative. Cowork supports plugin hooks on supported versions, but this setup does not install or verify native permission hooks. Use the normal setup command for Claude Code CLI hooks.
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: pushary-cowork
3
+ version: 0.4.2
4
+ description: Phone notifications and human-in-the-loop for Claude Cowork through the Pushary connector. Use inside a Cowork session whenever you need a human and nobody is watching the session, such as before an irreversible or destructive action, before spending money, deploying, force-pushing or deleting, when blocked on a decision outside your authority, when running unattended and you hit a genuine ambiguity, when another skill's workflow says to confirm with the user, and when a task finishes or fails with nobody watching. Also use it when the user says things like ping me on my phone when this is done, ask me before doing anything risky, keep me in the loop while I am away, or notify me if you get stuck. Sends completion alerts, asks questions (yes/no, multiple choice, or free text) via push, and gets answers from connected devices. This Pushary connector is cooperative; it does not install native Cowork permission hooks. Pushary is a hosted service, $9.99/mo after a 3-day card-first trial.
5
+ metadata:
6
+ tags: notifications, push, mcp, human-in-the-loop, cowork, claude, alerts, approvals
7
+ ---
8
+
9
+ # Pushary for Claude Cowork
10
+
11
+ Pushary is connected as a custom connector. It reaches the user on their phone, where confirm notifications can offer lock-screen actions; choices and text open the app. Use it proactively. Do not wait for the user to ask.
12
+
13
+ ## Ask in as few interruptions as possible
14
+
15
+ Honor authorization already granted in this session. Ask only for a missing decision or an action outside that authorization, or when an enforced host policy requires it. A multi-step task alone does not require plan approval. Never ask again merely because the next authorized step deletes, deploys or publishes something. These skills guide the agent; supported hooks and runtime approval gates enforce policy. Do not bypass an enforced gate.
16
+
17
+ Every question costs the user their attention wherever they are. Before a run of more than a step or two, work out where you will need a human and fold those points together: one `select` carrying the real options beats three `confirm`s in a row, ask once at a boundary rather than once per instance, and never ask what you can determine yourself from the task or from a tool call you can make.
18
+
19
+ ## When to reach out
20
+
21
+ - **You need a decision or a clarifying answer.** Call `ask_user` instead of guessing or stalling. Use type `confirm` for yes or no, `select` for a fixed set of options, and `input` for free text.
22
+ - **An action outside your existing authorization is risky or irreversible.** Deleting or overwriting files, spending money, sending anything external, bulk changes: call `ask_user` with type `confirm` first and wait for approval.
23
+ - **Meaningful work finishes while the user is away, or they requested an alert.** Call `send_notification` with a short summary of what changed, and pass `context.type` as `task_complete`. That is what marks it a task update, and the user's setting for where task updates land can only route one that says so. Keep a reply channel open only for a specific unresolved decision needed to finish, as described below.
24
+ - **You are blocked or hit an error you cannot resolve.** Call `send_notification` with `context.type` as `error` so the user knows, and `ask_user` if you need a decision to continue.
25
+ - **Another skill's workflow says to confirm with the user.** That instruction assumes someone is watching the session. Often nobody is. Route the confirmation through `ask_user` so the run continues when they answer, instead of stalling on a prompt they never see.
26
+
27
+ ## Hand back with a way to reply
28
+
29
+ The connector is the only channel between this session and the user's phone, and it carries only what you ask it to. A plain completion notice is one way traffic: once your turn ends nothing here is listening, so anything the user types back on their phone has nowhere to land. Pushary also cannot start a new Cowork task on its own, so a reply that says "now do X" reaches nobody unless you asked for it before you stopped.
30
+
31
+ When a specific unresolved decision is needed before you can finish, keep the channel open:
32
+
33
+ 1. Call `send_notification` with `context.type` set to `task_complete` and `context.askQuestion` set to an `input` question, such as "Which of these two drafts should I publish?".
34
+ 2. Poll the returned `linkedCorrelationId` once with `wait_for_answer`, then follow its handoff.
35
+ 3. Act on the answer in this same session, then hand back the same way again if more work follows.
36
+
37
+ Do not create a question just to keep the turn alive or ask for optional feedback after every result. Once this turn ends, tell the user to reopen Cowork for follow-up work.
38
+
39
+ ## How to wait for answers
40
+
41
+ Read `answered`, `status` and `handoffAction` (falling back to `nextAction`) on every response. Only `pending` is live; expired, cancelled, missing and unavailable are not new timeouts. Follow the returned handoff rather than inventing a retry loop. Before moving a live question to the current chat, cancel it. If cancellation says `stop`, stop; if it loses a race, poll once for one second and honor the winning answer. Silence is never consent. A select or input value containing “yes” is answer data, not approval of a separate action.
42
+
43
+ Delivery is controlled by the user's policy: `push_first` uses presence, `push_only` requests push every time, `notify_only` leaves the decision in the current client, and `terminal_only` avoids push. Do not override the mode or duplicate a question on every surface. The runtime owns delivery, expiry and settlement; do not claim that a reply can restart an ended agent turn.
44
+
45
+ - If `ask_user` times out, call `wait_for_answer` once with the same question id. If it is still pending, cancel it before asking in the current client. If cancellation returns `handoffAction: "stop"`, stop. Otherwise, if cancellation returns false, poll once for 1 second and honor the answer that won the race.
46
+ - On long tasks where the user might be away, prefer `send_notification` with `context.askQuestion` over a blocking `ask_user`. The user can answer from the notification page while the question remains live. Poll the returned `linkedCorrelationId` once when you need the result, then follow the returned handoff; do not promise an overnight wait or a reply after the turn ends.
47
+ - Use `cancel_question` to retract a question that is no longer needed.
48
+
49
+ ## Answer surfaces and account boundaries
50
+
51
+ | Surface | What the user can do |
52
+ | --- | --- |
53
+ | Mobile app | Answer confirm, select and input questions. Supported confirm notifications offer approve/deny actions on the lock screen; arbitrary choices and text open the app. |
54
+ | Mac notch | Answer personal account questions with confirm, select, input and question-set controls, including keyboard controls. Presence and delivery policy determine when the phone is also reached. |
55
+ | Slack | Answer through buttons, menus or text modals when the integration and intended recipient are configured. |
56
+ | Browser | Open the decision page as a fallback; browser notification delivery requires permission. |
57
+
58
+ Personal setup connects the operator's devices. For a Mac, install from https://pushary.com/download, sign in to the same personal account and connect your agents in the app. Run `npx @pushary/agent-hooks@latest cowork` for connector setup, then ask one harmless test question inside Cowork, answer it from Pushary, and verify Cowork receives the answer. CLI doctor checks do not verify a hosted connector. Test phone fallback while away from the Mac; do not infer delivery from a successful API call alone.
59
+
60
+ Partner customers use scoped enrollment links issued by their application. Do not enroll them into the operator's account or send their decisions through personal tools. The Mac notch currently uses the personal account/session API; do not promise a Partner customer inbox on Mac. See https://pushary.com/docs/agents/embed for Partner setup.
61
+
62
+ ## Conventions
63
+
64
+ - Reuse one opaque `sessionId` per Cowork task. Do not reuse it across parallel tasks or put credentials in it.
65
+ - Pass `agentName` as `Claude Cowork - <task name>` on every call, so the user knows which session is asking and their dashboard groups the session correctly.
66
+ - Keep questions short and decision-shaped. One sentence of context, then the ask. The user is reading a lock screen, not a report.
67
+ - Do not ask through Pushary for things you can safely decide yourself. Reserve it for real decisions, risky steps, completions, and errors, so a ping always means something.
68
+
69
+ ## Setup and capability boundary
70
+
71
+ Install the Pushary Cowork plugin to supply this skill and its remote MCP connector, or add `https://pushary.com/api/mcp/mcp` under Customize > Connectors. Sign in with the same Pushary account used by your phone and Mac. Enable the connector in the task and approve its tool access when Claude asks. For proactive behavior, use this skill or standing instructions under Settings > Cowork; do not rely on a repository memory file.
72
+
73
+ Anthropic documents plugin hooks in supported Cowork versions. This plugin currently uses the cooperative connector and does not install or verify native permission hooks. Local and cloud Cowork tasks may have different capabilities; do not infer them from the product name. Native Claude permission prompts still need Claude’s own approval surface.
74
+
75
+ ## If the connector is missing
76
+
77
+ If no Pushary tools are available in this session, the connector is not enabled. Tell the user once: Pushary is not connected in this session. Enable it under Customize, Connectors, or set it up at https://pushary.com/docs/agents/guides/claude-desktop. Then continue the task without it.
@@ -1,37 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-7MGF5Q7G.js";
4
+ } from "../chunk-QUE76J4H.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-K7ZZGI2Y.js";
8
- import "../chunk-CC625NRG.js";
7
+ } from "../chunk-VX3BWMC5.js";
8
+ import "../chunk-UW4LWAWY.js";
9
9
  import "../chunk-YKLCWWEI.js";
10
- import "../chunk-ZW3KAWTM.js";
11
- import "../chunk-77U3ZVV6.js";
12
- import "../chunk-IFCS6LXB.js";
13
- import "../chunk-CU5KI425.js";
14
- import "../chunk-BWNU4MX4.js";
10
+ import "../chunk-WM5XMCID.js";
11
+ import "../chunk-3ZUTNTZA.js";
12
+ import "../chunk-2XUPP4WM.js";
13
+ import "../chunk-CH6DTGQR.js";
14
+ import "../chunk-RVSEGFPD.js";
15
+ import "../chunk-7LUFYRH4.js";
15
16
  import "../chunk-DSTLA2TC.js";
16
17
  import "../chunk-EZIEXHYM.js";
17
- import "../chunk-UFGDCMUD.js";
18
+ import "../chunk-IPHOUBTU.js";
18
19
  import "../chunk-EQRS3SGM.js";
19
- import "../chunk-ZOR5OJZJ.js";
20
+ import "../chunk-QF4RI5CD.js";
20
21
  import "../chunk-XHKBHWLX.js";
21
22
  import "../chunk-L4ZCFMWW.js";
22
- import "../chunk-TTO76NZJ.js";
23
- import "../chunk-SSQ5X6SA.js";
24
- import "../chunk-3F4VV5TS.js";
23
+ import "../chunk-V27AHID3.js";
24
+ import "../chunk-IAEXPTXA.js";
25
+ import "../chunk-WB2C7VPF.js";
25
26
  import "../chunk-GMXKITVA.js";
26
27
  import "../chunk-DINDL2CF.js";
27
- import "../chunk-JSASMV3H.js";
28
+ import "../chunk-GUVCYYDK.js";
28
29
  import "../chunk-BC3VCZ3E.js";
29
30
  import "../chunk-7QLSKOSU.js";
30
31
  import "../chunk-KZERVKTD.js";
31
- import "../chunk-T5B3LRYF.js";
32
+ import "../chunk-X7YWD6IS.js";
32
33
  import "../chunk-4LL6LG5X.js";
33
34
  import "../chunk-2UMNXADU.js";
34
- import "../chunk-VOWZ5VOO.js";
35
+ import "../chunk-6FAHPGCZ.js";
35
36
 
36
37
  // bin/pushary-bell-hook.ts
37
38
  var main = async () => {
@@ -5,7 +5,7 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-7MGF5Q7G.js";
8
+ } from "../chunk-QUE76J4H.js";
9
9
  import {
10
10
  addBellHooks,
11
11
  bellInstalled,
@@ -15,31 +15,31 @@ import "../chunk-EZIEXHYM.js";
15
15
  import "../chunk-L4ZCFMWW.js";
16
16
  import {
17
17
  claudeSettings
18
- } from "../chunk-3F4VV5TS.js";
18
+ } from "../chunk-WB2C7VPF.js";
19
19
  import {
20
20
  createIo
21
21
  } from "../chunk-5RUIFDTP.js";
22
22
  import {
23
23
  exitOnHelpFlag
24
- } from "../chunk-BVBEURWJ.js";
25
- import "../chunk-43GMYSS4.js";
24
+ } from "../chunk-MOY5X6HJ.js";
25
+ import "../chunk-ZDAT5KMU.js";
26
26
  import {
27
27
  parseFlags
28
28
  } from "../chunk-GMXKITVA.js";
29
29
  import "../chunk-DINDL2CF.js";
30
- import "../chunk-JSASMV3H.js";
30
+ import "../chunk-GUVCYYDK.js";
31
31
  import "../chunk-BC3VCZ3E.js";
32
32
  import "../chunk-7QLSKOSU.js";
33
33
  import {
34
34
  EXIT
35
35
  } from "../chunk-KZERVKTD.js";
36
- import "../chunk-T5B3LRYF.js";
36
+ import "../chunk-X7YWD6IS.js";
37
37
  import {
38
38
  readJsonSafe,
39
39
  writeJsonAtomic
40
40
  } from "../chunk-4LL6LG5X.js";
41
41
  import "../chunk-2UMNXADU.js";
42
- import "../chunk-VOWZ5VOO.js";
42
+ import "../chunk-6FAHPGCZ.js";
43
43
 
44
44
  // bin/pushary-bell.ts
45
45
  exitOnHelpFlag("bell");
@@ -8,7 +8,7 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-M64I4T7J.js";
11
+ } from "../chunk-M7WWEFG6.js";
12
12
  import {
13
13
  isDeferAnswer
14
14
  } from "../chunk-YHG74UFF.js";
@@ -17,24 +17,25 @@ import {
17
17
  loadSessionKey,
18
18
  registerTranscript,
19
19
  registeredTranscriptEnabled
20
- } from "../chunk-CC625NRG.js";
20
+ } from "../chunk-UW4LWAWY.js";
21
21
  import "../chunk-YKLCWWEI.js";
22
- import "../chunk-ZW3KAWTM.js";
23
- import "../chunk-77U3ZVV6.js";
24
- import "../chunk-IFCS6LXB.js";
22
+ import "../chunk-WM5XMCID.js";
23
+ import "../chunk-3ZUTNTZA.js";
24
+ import "../chunk-2XUPP4WM.js";
25
+ import "../chunk-CH6DTGQR.js";
25
26
  import {
26
27
  ensureDaemonRunning
27
- } from "../chunk-CU5KI425.js";
28
- import "../chunk-BWNU4MX4.js";
28
+ } from "../chunk-RVSEGFPD.js";
29
+ import "../chunk-7LUFYRH4.js";
29
30
  import "../chunk-DSTLA2TC.js";
30
31
  import "../chunk-EZIEXHYM.js";
31
32
  import {
32
33
  encryptRecord
33
- } from "../chunk-UFGDCMUD.js";
34
+ } from "../chunk-IPHOUBTU.js";
34
35
  import "../chunk-EQRS3SGM.js";
35
36
  import {
36
37
  transcriptsEnabled
37
- } from "../chunk-ZOR5OJZJ.js";
38
+ } from "../chunk-QF4RI5CD.js";
38
39
  import {
39
40
  needsShell,
40
41
  spawnClaude
@@ -46,7 +47,7 @@ import {
46
47
  phoneDrivenEnv,
47
48
  repoKeyFor,
48
49
  reportEvent
49
- } from "../chunk-J55K6YS4.js";
50
+ } from "../chunk-DNVDKHQD.js";
50
51
  import {
51
52
  DEFAULT_SESSION,
52
53
  askUser,
@@ -64,21 +65,21 @@ import {
64
65
  deriveToolTarget,
65
66
  describeToolCall,
66
67
  scopePathFor
67
- } from "../chunk-VLKEAYJ4.js";
68
- import "../chunk-TTO76NZJ.js";
68
+ } from "../chunk-CKOLDI47.js";
69
+ import "../chunk-V27AHID3.js";
69
70
  import {
70
71
  getMachineId
71
- } from "../chunk-SSQ5X6SA.js";
72
- import "../chunk-3F4VV5TS.js";
72
+ } from "../chunk-IAEXPTXA.js";
73
+ import "../chunk-WB2C7VPF.js";
73
74
  import "../chunk-GMXKITVA.js";
74
75
  import "../chunk-DINDL2CF.js";
75
- import "../chunk-JSASMV3H.js";
76
+ import "../chunk-GUVCYYDK.js";
76
77
  import "../chunk-BC3VCZ3E.js";
77
78
  import "../chunk-EYRGBYZG.js";
78
79
  import "../chunk-SAF6HGAA.js";
79
80
  import "../chunk-7QLSKOSU.js";
80
81
  import "../chunk-KZERVKTD.js";
81
- import "../chunk-T5B3LRYF.js";
82
+ import "../chunk-X7YWD6IS.js";
82
83
  import "../chunk-4LL6LG5X.js";
83
84
  import {
84
85
  getApiKey,
@@ -88,7 +89,7 @@ import {
88
89
  KILL_REASON,
89
90
  redactSecrets,
90
91
  resolveGate
91
- } from "../chunk-VOWZ5VOO.js";
92
+ } from "../chunk-6FAHPGCZ.js";
92
93
 
93
94
  // src/wrapper/localPassthrough.ts
94
95
  var SIGNAL_NUMBERS = {
@@ -11,7 +11,7 @@ import {
11
11
  shortenHome,
12
12
  unregisterPluginLocation,
13
13
  vscodeSettingsTargets
14
- } from "../chunk-YPYPI6BG.js";
14
+ } from "../chunk-G24SEVCI.js";
15
15
  import {
16
16
  OPENCODE_PLUGIN_SIBLING,
17
17
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -21,38 +21,39 @@ import {
21
21
  openCodePluginDir,
22
22
  openCodePluginFile,
23
23
  removeOpenCodeMcpServer
24
- } from "../chunk-IZRI4M3C.js";
24
+ } from "../chunk-E3NF5CL2.js";
25
25
  import {
26
26
  isClaudeMcpSnapshot,
27
27
  removeClaudeMcpServers,
28
28
  removePusharySettings,
29
29
  restoreClaudeMcpServer
30
- } from "../chunk-WJZUTMMU.js";
30
+ } from "../chunk-76XICHYT.js";
31
31
  import {
32
32
  hookOwnerOf,
33
33
  isHookTakeoverReceipt,
34
34
  restoreHookTakeover,
35
35
  restoreMcpServer
36
- } from "../chunk-ZW3KAWTM.js";
37
- import "../chunk-77U3ZVV6.js";
36
+ } from "../chunk-WM5XMCID.js";
37
+ import "../chunk-3ZUTNTZA.js";
38
+ import "../chunk-2XUPP4WM.js";
38
39
  import {
39
40
  pusharyHookExecutable
40
- } from "../chunk-IFCS6LXB.js";
41
+ } from "../chunk-CH6DTGQR.js";
41
42
  import {
42
43
  disableDaemonService
43
- } from "../chunk-CU5KI425.js";
44
+ } from "../chunk-RVSEGFPD.js";
44
45
  import {
45
46
  removeGeminiSettings
46
- } from "../chunk-BWNU4MX4.js";
47
+ } from "../chunk-7LUFYRH4.js";
47
48
  import "../chunk-DSTLA2TC.js";
48
49
  import "../chunk-EZIEXHYM.js";
49
50
  import "../chunk-XHKBHWLX.js";
50
51
  import {
51
52
  execNpm
52
53
  } from "../chunk-L4ZCFMWW.js";
53
- import "../chunk-VLKEAYJ4.js";
54
- import "../chunk-TTO76NZJ.js";
55
- import "../chunk-SSQ5X6SA.js";
54
+ import "../chunk-CKOLDI47.js";
55
+ import "../chunk-V27AHID3.js";
56
+ import "../chunk-IAEXPTXA.js";
56
57
  import {
57
58
  claudeJson,
58
59
  claudeMcpReceipt,
@@ -78,11 +79,11 @@ import {
78
79
  restoreCodexHookTrust,
79
80
  vscodePluginDir,
80
81
  vscodePluginMcp
81
- } from "../chunk-3F4VV5TS.js";
82
+ } from "../chunk-WB2C7VPF.js";
82
83
  import {
83
84
  exitOnHelpFlag
84
- } from "../chunk-BVBEURWJ.js";
85
- import "../chunk-43GMYSS4.js";
85
+ } from "../chunk-MOY5X6HJ.js";
86
+ import "../chunk-ZDAT5KMU.js";
86
87
  import {
87
88
  rejectUnknownFlags
88
89
  } from "../chunk-GMXKITVA.js";
@@ -99,7 +100,7 @@ import "../chunk-2UMNXADU.js";
99
100
  import {
100
101
  CURSOR_GATE_EVENTS,
101
102
  HOOK_LOCATOR_BINARY
102
- } from "../chunk-VOWZ5VOO.js";
103
+ } from "../chunk-6FAHPGCZ.js";
103
104
 
104
105
  // bin/pushary-clean.ts
105
106
  import { existsSync, readFileSync, copyFileSync, readdirSync } from "fs";
@@ -6,19 +6,19 @@ import {
6
6
  postLiveSession,
7
7
  postLiveSessionUntilAccepted,
8
8
  startLiveSessionHeartbeat
9
- } from "../chunk-T23EGPRI.js";
9
+ } from "../chunk-4XXUHWIK.js";
10
10
  import {
11
11
  SESSION_IDLE_TIMEOUT_MS,
12
12
  describeIdleWindow,
13
13
  idleDeadlinePassed,
14
14
  startProcessOwnership,
15
15
  withSpawnProcessOwnership
16
- } from "../chunk-M64I4T7J.js";
17
- import "../chunk-UFGDCMUD.js";
16
+ } from "../chunk-M7WWEFG6.js";
17
+ import "../chunk-IPHOUBTU.js";
18
18
  import "../chunk-EQRS3SGM.js";
19
19
  import {
20
20
  transcriptsEnabled
21
- } from "../chunk-ZOR5OJZJ.js";
21
+ } from "../chunk-QF4RI5CD.js";
22
22
  import {
23
23
  spawnClaude
24
24
  } from "../chunk-XHKBHWLX.js";
@@ -27,17 +27,17 @@ import {
27
27
  } from "../chunk-L4ZCFMWW.js";
28
28
  import {
29
29
  getMachineId
30
- } from "../chunk-SSQ5X6SA.js";
31
- import "../chunk-3F4VV5TS.js";
32
- import "../chunk-JSASMV3H.js";
30
+ } from "../chunk-IAEXPTXA.js";
31
+ import "../chunk-WB2C7VPF.js";
32
+ import "../chunk-GUVCYYDK.js";
33
33
  import "../chunk-BC3VCZ3E.js";
34
- import "../chunk-T5B3LRYF.js";
34
+ import "../chunk-X7YWD6IS.js";
35
35
  import "../chunk-4LL6LG5X.js";
36
36
  import {
37
37
  getApiKey,
38
38
  getBaseUrl
39
39
  } from "../chunk-2UMNXADU.js";
40
- import "../chunk-VOWZ5VOO.js";
40
+ import "../chunk-6FAHPGCZ.js";
41
41
 
42
42
  // bin/pushary-codex-bridge.ts
43
43
  import { existsSync } from "fs";
@@ -1,30 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  defersToNativeMode
4
- } from "../chunk-C2MV4G4A.js";
4
+ } from "../chunk-A4R6BZCK.js";
5
5
  import {
6
6
  isGatingMoment,
7
7
  recordKeylessMoment
8
- } from "../chunk-UQSKCQBO.js";
8
+ } from "../chunk-EUAQ4YAN.js";
9
9
  import {
10
10
  readHookInput
11
- } from "../chunk-K7ZZGI2Y.js";
11
+ } from "../chunk-VX3BWMC5.js";
12
12
  import {
13
13
  denyReasonFrom,
14
14
  isDeferAnswer
15
15
  } from "../chunk-YHG74UFF.js";
16
- import "../chunk-CC625NRG.js";
16
+ import "../chunk-UW4LWAWY.js";
17
17
  import "../chunk-YKLCWWEI.js";
18
- import "../chunk-ZW3KAWTM.js";
19
- import "../chunk-77U3ZVV6.js";
20
- import "../chunk-IFCS6LXB.js";
21
- import "../chunk-CU5KI425.js";
22
- import "../chunk-BWNU4MX4.js";
18
+ import "../chunk-WM5XMCID.js";
19
+ import "../chunk-3ZUTNTZA.js";
20
+ import "../chunk-2XUPP4WM.js";
21
+ import "../chunk-CH6DTGQR.js";
22
+ import "../chunk-RVSEGFPD.js";
23
+ import "../chunk-7LUFYRH4.js";
23
24
  import "../chunk-DSTLA2TC.js";
24
25
  import "../chunk-EZIEXHYM.js";
25
- import "../chunk-UFGDCMUD.js";
26
+ import "../chunk-IPHOUBTU.js";
26
27
  import "../chunk-EQRS3SGM.js";
27
- import "../chunk-ZOR5OJZJ.js";
28
+ import "../chunk-QF4RI5CD.js";
28
29
  import "../chunk-XHKBHWLX.js";
29
30
  import "../chunk-L4ZCFMWW.js";
30
31
  import {
@@ -50,7 +51,7 @@ import {
50
51
  toCodexWire,
51
52
  toPolicyLookup,
52
53
  toPolicyLookups
53
- } from "../chunk-J55K6YS4.js";
54
+ } from "../chunk-DNVDKHQD.js";
54
55
  import {
55
56
  DEFAULT_SESSION,
56
57
  askUser,
@@ -67,23 +68,23 @@ import {
67
68
  describeToolCall,
68
69
  scopePathFor,
69
70
  sessionIdentityOf
70
- } from "../chunk-VLKEAYJ4.js";
71
- import "../chunk-TTO76NZJ.js";
71
+ } from "../chunk-CKOLDI47.js";
72
+ import "../chunk-V27AHID3.js";
72
73
  import {
73
74
  getMachineId
74
- } from "../chunk-SSQ5X6SA.js";
75
+ } from "../chunk-IAEXPTXA.js";
75
76
  import {
76
77
  canonicalJson
77
- } from "../chunk-3F4VV5TS.js";
78
+ } from "../chunk-WB2C7VPF.js";
78
79
  import "../chunk-GMXKITVA.js";
79
80
  import "../chunk-DINDL2CF.js";
80
- import "../chunk-JSASMV3H.js";
81
+ import "../chunk-GUVCYYDK.js";
81
82
  import "../chunk-BC3VCZ3E.js";
82
83
  import "../chunk-EYRGBYZG.js";
83
84
  import "../chunk-SAF6HGAA.js";
84
85
  import "../chunk-7QLSKOSU.js";
85
86
  import "../chunk-KZERVKTD.js";
86
- import "../chunk-T5B3LRYF.js";
87
+ import "../chunk-X7YWD6IS.js";
87
88
  import "../chunk-4LL6LG5X.js";
88
89
  import {
89
90
  getApiKey
@@ -95,7 +96,7 @@ import {
95
96
  hookWaitClamped,
96
97
  hookWaitDeadline,
97
98
  resolveGate
98
- } from "../chunk-VOWZ5VOO.js";
99
+ } from "../chunk-6FAHPGCZ.js";
99
100
 
100
101
  // bin/pushary-codex-hook.ts
101
102
  import { basename } from "path";
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reportEvent
4
- } from "../chunk-J55K6YS4.js";
4
+ } from "../chunk-DNVDKHQD.js";
5
5
  import {
6
6
  askUser,
7
7
  waitForAnswer
8
8
  } from "../chunk-RER3FRTD.js";
9
- import "../chunk-VLKEAYJ4.js";
10
- import "../chunk-TTO76NZJ.js";
9
+ import "../chunk-CKOLDI47.js";
10
+ import "../chunk-V27AHID3.js";
11
11
  import {
12
12
  getMachineId
13
- } from "../chunk-SSQ5X6SA.js";
14
- import "../chunk-3F4VV5TS.js";
13
+ } from "../chunk-IAEXPTXA.js";
14
+ import "../chunk-WB2C7VPF.js";
15
15
  import "../chunk-EYRGBYZG.js";
16
16
  import "../chunk-SAF6HGAA.js";
17
17
  import "../chunk-7QLSKOSU.js";
18
18
  import "../chunk-KZERVKTD.js";
19
- import "../chunk-T5B3LRYF.js";
19
+ import "../chunk-X7YWD6IS.js";
20
20
  import "../chunk-4LL6LG5X.js";
21
21
  import {
22
22
  getApiKey
23
23
  } from "../chunk-2UMNXADU.js";
24
- import "../chunk-VOWZ5VOO.js";
24
+ import "../chunk-6FAHPGCZ.js";
25
25
 
26
26
  // bin/pushary-codex.ts
27
27
  import { basename } from "path";
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  printKeyCheck
4
- } from "../chunk-AQ5OAYOH.js";
4
+ } from "../chunk-YJAQRKH5.js";
5
5
  import {
6
6
  connectDevice,
7
7
  connectExistingApp,
8
8
  printConnectInstructions
9
- } from "../chunk-R7NPGCSD.js";
9
+ } from "../chunk-AMZJ3CKW.js";
10
10
  import "../chunk-3EGEA4KH.js";
11
11
  import {
12
12
  checkApiKey
13
- } from "../chunk-PDFVIRPB.js";
13
+ } from "../chunk-JDFB3YKG.js";
14
14
  import "../chunk-QCGNGEGE.js";
15
15
  import {
16
16
  createIo
17
17
  } from "../chunk-5RUIFDTP.js";
18
18
  import {
19
19
  exitOnHelpFlag
20
- } from "../chunk-BVBEURWJ.js";
21
- import "../chunk-43GMYSS4.js";
20
+ } from "../chunk-MOY5X6HJ.js";
21
+ import "../chunk-ZDAT5KMU.js";
22
22
  import {
23
23
  parseFlags
24
24
  } from "../chunk-GMXKITVA.js";
25
25
  import "../chunk-DINDL2CF.js";
26
26
  import {
27
27
  readKeySource
28
- } from "../chunk-JSASMV3H.js";
28
+ } from "../chunk-GUVCYYDK.js";
29
29
  import "../chunk-BC3VCZ3E.js";
30
30
  import "../chunk-EYRGBYZG.js";
31
31
  import "../chunk-SAF6HGAA.js";
@@ -35,10 +35,10 @@ import {
35
35
  import {
36
36
  EXIT
37
37
  } from "../chunk-KZERVKTD.js";
38
- import "../chunk-T5B3LRYF.js";
38
+ import "../chunk-X7YWD6IS.js";
39
39
  import "../chunk-4LL6LG5X.js";
40
40
  import "../chunk-2UMNXADU.js";
41
- import "../chunk-VOWZ5VOO.js";
41
+ import "../chunk-6FAHPGCZ.js";
42
42
 
43
43
  // bin/pushary-connect.ts
44
44
  exitOnHelpFlag("connect");
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ coworkOutput,
4
+ parseCoworkOptions
5
+ } from "../chunk-5GLPYGKS.js";
6
+ import {
7
+ canOpenBrowser,
8
+ openInBrowser
9
+ } from "../chunk-PUZZELE6.js";
10
+ import "../chunk-3ZUTNTZA.js";
11
+ import {
12
+ exitOnHelpFlag
13
+ } from "../chunk-MOY5X6HJ.js";
14
+ import "../chunk-ZDAT5KMU.js";
15
+ import "../chunk-GMXKITVA.js";
16
+ import "../chunk-DINDL2CF.js";
17
+ import {
18
+ UsageError
19
+ } from "../chunk-7QLSKOSU.js";
20
+ import {
21
+ EXIT
22
+ } from "../chunk-KZERVKTD.js";
23
+ import {
24
+ CLAUDE_CONNECTOR_GUIDE
25
+ } from "../chunk-6FAHPGCZ.js";
26
+
27
+ // bin/pushary-cowork.ts
28
+ exitOnHelpFlag("cowork");
29
+ try {
30
+ const options = parseCoworkOptions(process.argv.slice(2));
31
+ process.stdout.write(coworkOutput(options.format));
32
+ if (options.open && canOpenBrowser()) openInBrowser(CLAUDE_CONNECTOR_GUIDE);
33
+ } catch (error) {
34
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}
35
+ `);
36
+ process.exitCode = error instanceof UsageError ? EXIT.USAGE : EXIT.FAILED;
37
+ }