pushary 1.9.49 → 1.9.51
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 +16 -0
- package/README.md +0 -1
- package/dist/api-PPNFRSJC.js +55 -0
- package/dist/bin/pushary-bell-hook.js +28 -25
- package/dist/bin/pushary-bell.js +13 -11
- package/dist/bin/pushary-claude.js +36 -32
- package/dist/bin/pushary-clean.js +68 -42
- package/dist/bin/pushary-codex-bridge.js +23 -20
- package/dist/bin/pushary-codex-hook.js +35 -31
- package/dist/bin/pushary-codex-session.js +17 -616
- package/dist/bin/pushary-codex.js +15 -12
- package/dist/bin/pushary-connect.js +31 -28
- package/dist/bin/pushary-cowork.js +7 -6
- package/dist/bin/pushary-daemon.js +55 -52
- package/dist/bin/pushary-disconnect.js +29 -26
- package/dist/bin/pushary-doctor.js +57 -52
- package/dist/bin/pushary-elicitation-hook.js +28 -25
- package/dist/bin/pushary-gemini-bridge.js +17 -15
- package/dist/bin/pushary-gemini-hook.js +32 -28
- package/dist/bin/pushary-hook.js +34 -31
- package/dist/bin/pushary-login.js +19 -16
- package/dist/bin/pushary-logout.js +30 -27
- package/dist/bin/pushary-mcp.js +11 -9
- package/dist/bin/pushary-mode.js +16 -14
- package/dist/bin/pushary-notification-hook.js +27 -24
- package/dist/bin/pushary-opencode-hook.js +31 -27
- package/dist/bin/pushary-permission-denied-hook.js +32 -29
- package/dist/bin/pushary-permission-hook.js +31 -28
- package/dist/bin/pushary-post-hook.js +27 -24
- package/dist/bin/pushary-prompt-hook.js +27 -24
- package/dist/bin/pushary-session-end-hook.js +27 -24
- package/dist/bin/pushary-session-start-hook.js +32 -29
- package/dist/bin/pushary-setup.js +145 -82
- package/dist/bin/pushary-stats.js +8 -7
- package/dist/bin/pushary-status.js +35 -32
- package/dist/bin/pushary-stop-hook.js +27 -24
- package/dist/bin/pushary-stopfailure-hook.js +27 -24
- package/dist/bin/pushary-suggestions.js +16 -14
- package/dist/bin/pushary-transcript-register.js +19 -17
- package/dist/bin/pushary-transcripts.js +10 -9
- package/dist/bin/pushary-upgrade.js +46 -42
- package/dist/bin/pushary-wait.js +16 -14
- package/dist/bin/pushary.js +10 -8
- package/dist/{chunk-IF2UPWD2.js → chunk-26MUPAKS.js} +1 -1
- package/dist/{chunk-AWMMABVB.js → chunk-2QPHUCXU.js} +49 -135
- package/dist/{chunk-WEY5ZHDB.js → chunk-2YSCVT6Q.js} +5 -5
- package/dist/chunk-36NGFHE4.js +72 -0
- package/dist/{chunk-25SYEAW4.js → chunk-3ICRY72Q.js} +3 -3
- package/dist/{chunk-LZYJMSOY.js → chunk-3OLEGCMU.js} +3 -3
- package/dist/{chunk-B7LV6W7U.js → chunk-3RPN7AAT.js} +1 -1
- package/dist/{chunk-VCZN7NAB.js → chunk-3YAOJEHG.js} +7 -5
- package/dist/{chunk-TGCIFEDE.js → chunk-43NXSBNZ.js} +13 -11
- package/dist/{chunk-Y74IJ2IO.js → chunk-4JM2CK2A.js} +4 -4
- package/dist/{chunk-KEAIIVW3.js → chunk-4QQEUJL4.js} +2 -2
- package/dist/{chunk-XNZB274I.js → chunk-5463UUO2.js} +1 -1
- package/dist/{chunk-ZMYLVFXC.js → chunk-5CRQCIHR.js} +14 -9
- package/dist/{chunk-KIO2MZQC.js → chunk-6QPRQVQM.js} +5 -3
- package/dist/{chunk-4PCJ6DYK.js → chunk-6SWMKF5E.js} +2 -2
- package/dist/{chunk-Y7WD72J7.js → chunk-7CLLWDCP.js} +1 -1
- package/dist/{chunk-TYTIDEBW.js → chunk-7DBTOPOT.js} +5 -5
- package/dist/chunk-7YAVKENV.js +271 -0
- package/dist/{chunk-34AQAQKW.js → chunk-AA2K3H7Y.js} +4 -4
- package/dist/{chunk-DH4BWFU7.js → chunk-AZHTI5JX.js} +5 -5
- package/dist/{chunk-PA54A437.js → chunk-BUXDR6US.js} +1 -1
- package/dist/{chunk-VUS6QGND.js → chunk-CQ5JGRML.js} +5 -1
- package/dist/{chunk-YVO4HIHX.js → chunk-DT5CACWZ.js} +12 -10
- package/dist/{chunk-LLRYP5TR.js → chunk-DT5Y55FI.js} +5 -5
- package/dist/{chunk-ZTTCYHOM.js → chunk-DUMZORSL.js} +8 -6
- package/dist/{chunk-XTVEW2NG.js → chunk-EGKD4S5H.js} +1 -1
- package/dist/{chunk-FPKQGWAF.js → chunk-EJCPHLY2.js} +2 -2
- package/dist/{chunk-YTYXFA5M.js → chunk-FI73DGNB.js} +1 -1
- package/dist/{chunk-JGNYCRB2.js → chunk-FV34HT35.js} +1 -1
- package/dist/{chunk-KK2DIUVV.js → chunk-GCN73COS.js} +1 -1
- package/dist/{chunk-SE4JFMLW.js → chunk-GTSI6NG6.js} +8 -6
- package/dist/chunk-JBT3ZSJS.js +92 -0
- package/dist/chunk-JZDRR7BL.js +427 -0
- package/dist/{chunk-KBGKWB5T.js → chunk-K3BIMGP4.js} +4 -2
- package/dist/{chunk-LY3OJFBW.js → chunk-KQBXPGXO.js} +2 -1
- package/dist/{chunk-OR5F63C2.js → chunk-LF3TLC7B.js} +2 -168
- package/dist/{chunk-QYBL4EHD.js → chunk-LXRQLDGW.js} +11 -11
- package/dist/{chunk-ZOKMGBPR.js → chunk-MC4VY5LK.js} +16 -5
- package/dist/{chunk-OW4DNSQ6.js → chunk-NSY2V7XU.js} +1 -1
- package/dist/{chunk-X3RCIOIH.js → chunk-ONCWYACA.js} +1 -1
- package/dist/{chunk-EP6S6VY3.js → chunk-PMJEN6CX.js} +6 -6
- package/dist/{chunk-K73CBZKW.js → chunk-PTNSIGLB.js} +4 -4
- package/dist/chunk-PVDSN6TB.js +729 -0
- package/dist/chunk-QTOLNRET.js +169 -0
- package/dist/{chunk-APASKZ2I.js → chunk-RLADRNPV.js} +5 -3
- package/dist/{chunk-BOVSUH4N.js → chunk-S6RNS4UL.js} +2 -2
- package/dist/{chunk-34RXPM5U.js → chunk-SRXBOMSR.js} +3 -3
- package/dist/{chunk-HXRH7ZCK.js → chunk-TQ6AGJVH.js} +2 -2
- package/dist/{chunk-SALUTWPX.js → chunk-UKX5WIB5.js} +4 -4
- package/dist/{chunk-ABMEBN2R.js → chunk-UR7XX2DV.js} +6 -4
- package/dist/{chunk-BXK6ZJVJ.js → chunk-UVT6B6XN.js} +2 -2
- package/dist/{chunk-5Q2FRMPC.js → chunk-VD2OAF7Q.js} +4 -4
- package/dist/{chunk-XH3F66VD.js → chunk-VYBH6D4X.js} +3 -3
- package/dist/{chunk-UCF3EZZL.js → chunk-VZRCM362.js} +13 -13
- package/dist/{chunk-7RMSB4A2.js → chunk-W26Q2DTD.js} +14 -12
- package/dist/{chunk-OWQHE2VV.js → chunk-WVSM3G4C.js} +19 -4
- package/dist/{chunk-GDDXGBTM.js → chunk-X5GHIFST.js} +2 -2
- package/dist/chunk-XCEN33UP.js +7 -0
- package/dist/{chunk-UHVD7BSV.js → chunk-XQHPHJHR.js} +6 -6
- package/dist/{chunk-OZLGTMIY.js → chunk-XSUJ2PQY.js} +2 -2
- package/dist/{chunk-ZYYQJSIO.js → chunk-YQDZ7ZIL.js} +44 -462
- package/dist/{chunk-PXUNPXOX.js → chunk-ZOP3I2GQ.js} +3 -3
- package/dist/{chunk-WLT6J3SB.js → chunk-ZXGDBCIH.js} +2 -2
- package/dist/codex-app-cards-switch-ZQRT7MXB.js +52 -0
- package/dist/codex-desktop-launch-X7UKQ4VR.js +27 -0
- package/dist/codex-session-launch-IX33LOQZ.js +331 -0
- package/dist/config-HX6ZNOIL.js +14 -0
- package/dist/{global-upgrade-AIUSS2YH.js → global-upgrade-DGP2E2NE.js} +8 -6
- package/dist/identity-YISWVJ2A.js +15 -0
- package/dist/live-capabilities-44KFBOD4.js +53 -0
- package/dist/{paths-RO34TYNM.js → paths-VLGX4GJA.js} +4 -2
- package/dist/{reapply-KTNPP4XE.js → reapply-35F3WDTB.js} +24 -21
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.js +22 -19
- package/dist/{upgrade-lock-5UAGXIW7.js → upgrade-lock-LMO3DSSU.js} +5 -3
- package/dist/usage-ZC6BKIE3.js +10 -0
- package/package.json +1 -1
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runBrowserLogin
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-FI73DGNB.js";
|
|
5
5
|
import {
|
|
6
6
|
coworkOutput,
|
|
7
7
|
coworkSelection
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-ZOP3I2GQ.js";
|
|
9
9
|
import "../chunk-PUZZELE6.js";
|
|
10
10
|
import {
|
|
11
11
|
clearDeclinedAgent,
|
|
12
12
|
declinedAgentForSetupChoice
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-ZXGDBCIH.js";
|
|
14
14
|
import {
|
|
15
15
|
CURSOR_GATE_SCRIPT,
|
|
16
16
|
describeVersionManagerPin,
|
|
17
17
|
saveSetupFailure,
|
|
18
18
|
versionManagerOf
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-XSUJ2PQY.js";
|
|
20
20
|
import {
|
|
21
21
|
codexTrustOutcome,
|
|
22
22
|
describeCodexTrustConfirmation,
|
|
23
23
|
needsCodexTrustStep
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-TQ6AGJVH.js";
|
|
25
25
|
import {
|
|
26
26
|
describeWaitLadder
|
|
27
27
|
} from "../chunk-CVWG2N3Y.js";
|
|
@@ -39,23 +39,24 @@ import {
|
|
|
39
39
|
roundTripEvidence,
|
|
40
40
|
verifyRoundTrip,
|
|
41
41
|
waitForYourPhone
|
|
42
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-XQHPHJHR.js";
|
|
43
43
|
import "../chunk-3EGEA4KH.js";
|
|
44
44
|
import {
|
|
45
45
|
readManagedControlEvidence,
|
|
46
46
|
waitForMachineReadiness
|
|
47
|
-
} from "../chunk-
|
|
47
|
+
} from "../chunk-LXRQLDGW.js";
|
|
48
48
|
import {
|
|
49
49
|
ensureCodexTrustsPusharyHooks
|
|
50
|
-
} from "../chunk-
|
|
51
|
-
import {
|
|
52
|
-
setHumanStream
|
|
53
|
-
} from "../chunk-QCGNGEGE.js";
|
|
50
|
+
} from "../chunk-6QPRQVQM.js";
|
|
54
51
|
import {
|
|
55
52
|
describeSetupSideEffects,
|
|
56
53
|
installAgentSkill,
|
|
57
54
|
installSkillViaSkillsCli
|
|
58
55
|
} from "../chunk-EUW7JL2K.js";
|
|
56
|
+
import {
|
|
57
|
+
codexEngineBehindLauncher
|
|
58
|
+
} from "../chunk-PVDSN6TB.js";
|
|
59
|
+
import "../chunk-XCEN33UP.js";
|
|
59
60
|
import {
|
|
60
61
|
CURSOR_PLUGIN_BACKUP_INFIX,
|
|
61
62
|
CURSOR_PLUGIN_STAGING_PREFIX,
|
|
@@ -64,7 +65,7 @@ import {
|
|
|
64
65
|
soleGateFile,
|
|
65
66
|
soleGateReceipt,
|
|
66
67
|
soleGateReceiptFile
|
|
67
|
-
} from "../chunk-
|
|
68
|
+
} from "../chunk-AA2K3H7Y.js";
|
|
68
69
|
import {
|
|
69
70
|
HERMES_PIP_PACKAGE,
|
|
70
71
|
describeDetection,
|
|
@@ -77,11 +78,14 @@ import {
|
|
|
77
78
|
runHermesConfigScript,
|
|
78
79
|
shortenHome,
|
|
79
80
|
vscodeSettingsTargets
|
|
80
|
-
} from "../chunk-
|
|
81
|
+
} from "../chunk-3YAOJEHG.js";
|
|
81
82
|
import {
|
|
82
83
|
mcpServerBearer,
|
|
83
84
|
readMacAppAgentKey
|
|
84
|
-
} from "../chunk-
|
|
85
|
+
} from "../chunk-PTNSIGLB.js";
|
|
86
|
+
import {
|
|
87
|
+
setHumanStream
|
|
88
|
+
} from "../chunk-QCGNGEGE.js";
|
|
85
89
|
import {
|
|
86
90
|
AgentConfigError,
|
|
87
91
|
FX_PUSHARY_TOOLS_RULE,
|
|
@@ -109,10 +113,10 @@ import {
|
|
|
109
113
|
writeInstructionBlock,
|
|
110
114
|
writeSetupConfigFile,
|
|
111
115
|
writeSetupConfigJson
|
|
112
|
-
} from "../chunk-
|
|
116
|
+
} from "../chunk-AZHTI5JX.js";
|
|
113
117
|
import {
|
|
114
118
|
MCP_BRIDGE_BINARY
|
|
115
|
-
} from "../chunk-
|
|
119
|
+
} from "../chunk-X5GHIFST.js";
|
|
116
120
|
import {
|
|
117
121
|
OPENCODE_HOOK_BINARY,
|
|
118
122
|
addOpenCodeMcpServer,
|
|
@@ -128,16 +132,29 @@ import {
|
|
|
128
132
|
openCodePluginDir,
|
|
129
133
|
openCodePluginFile,
|
|
130
134
|
openCodeWired
|
|
131
|
-
} from "../chunk-
|
|
135
|
+
} from "../chunk-DT5Y55FI.js";
|
|
132
136
|
import {
|
|
133
137
|
ansiPainter,
|
|
134
138
|
createIo,
|
|
135
139
|
useColor
|
|
136
140
|
} from "../chunk-FO3MDD26.js";
|
|
141
|
+
import {
|
|
142
|
+
checkCodexInstall,
|
|
143
|
+
detectProviderLiveCapabilities,
|
|
144
|
+
expectedLaunchCapabilities,
|
|
145
|
+
hasSpawnProvider,
|
|
146
|
+
missingControlPrerequisite,
|
|
147
|
+
nodeCodexInstallProbe,
|
|
148
|
+
phoneStartIsRequired,
|
|
149
|
+
resolveControlPolicy
|
|
150
|
+
} from "../chunk-WVSM3G4C.js";
|
|
151
|
+
import {
|
|
152
|
+
detectClaudeVersion
|
|
153
|
+
} from "../chunk-RIVNNBEK.js";
|
|
137
154
|
import {
|
|
138
155
|
describeAutoUpdateAnnouncement,
|
|
139
156
|
takeAutoUpdateAnnouncement
|
|
140
|
-
} from "../chunk-
|
|
157
|
+
} from "../chunk-RLADRNPV.js";
|
|
141
158
|
import {
|
|
142
159
|
addClaudeMcpServer,
|
|
143
160
|
addCompatibleHooks,
|
|
@@ -156,7 +173,7 @@ import {
|
|
|
156
173
|
hasCompatibleHooks,
|
|
157
174
|
isClaudeMcpSnapshot,
|
|
158
175
|
updateClaudeMcpSnapshot
|
|
159
|
-
} from "../chunk-
|
|
176
|
+
} from "../chunk-4JM2CK2A.js";
|
|
160
177
|
import {
|
|
161
178
|
DAEMON_COLD_START_TIMEOUT_MS,
|
|
162
179
|
clearDaemonNeedsLogin,
|
|
@@ -170,7 +187,7 @@ import {
|
|
|
170
187
|
replaceDaemonService,
|
|
171
188
|
stopDaemonService,
|
|
172
189
|
waitForDaemonRemoteProof
|
|
173
|
-
} from "../chunk-
|
|
190
|
+
} from "../chunk-5CRQCIHR.js";
|
|
174
191
|
import {
|
|
175
192
|
KEEP_HINT,
|
|
176
193
|
captureHookTakeover,
|
|
@@ -182,24 +199,29 @@ import {
|
|
|
182
199
|
geminiWired,
|
|
183
200
|
planHooks,
|
|
184
201
|
pusharyHookExecutable
|
|
185
|
-
} from "../chunk-
|
|
202
|
+
} from "../chunk-2YSCVT6Q.js";
|
|
186
203
|
import {
|
|
187
204
|
GEMINI_HOOK_BINARY,
|
|
188
205
|
GEMINI_HOOK_EVENTS,
|
|
189
206
|
addGeminiHooks,
|
|
190
207
|
addGeminiMcpServer
|
|
191
|
-
} from "../chunk-
|
|
208
|
+
} from "../chunk-3ICRY72Q.js";
|
|
192
209
|
import {
|
|
193
210
|
AGENT_CHOICES,
|
|
194
211
|
effectiveControlMode,
|
|
195
212
|
effectiveVerify,
|
|
196
213
|
parseSetupOptions
|
|
197
|
-
} from "../chunk-
|
|
198
|
-
import "../chunk-
|
|
214
|
+
} from "../chunk-BUXDR6US.js";
|
|
215
|
+
import "../chunk-EGKD4S5H.js";
|
|
199
216
|
import "../chunk-GMXKITVA.js";
|
|
200
217
|
import {
|
|
201
218
|
transcriptPreferenceForSetup
|
|
202
|
-
} from "../chunk-
|
|
219
|
+
} from "../chunk-FV34HT35.js";
|
|
220
|
+
import "../chunk-XHKBHWLX.js";
|
|
221
|
+
import {
|
|
222
|
+
compareVersion,
|
|
223
|
+
parseVersion
|
|
224
|
+
} from "../chunk-6ICPEJY5.js";
|
|
203
225
|
import {
|
|
204
226
|
KEY_FILE_MODE,
|
|
205
227
|
exportLine,
|
|
@@ -212,47 +234,36 @@ import {
|
|
|
212
234
|
recordMacAppKeyPrefix,
|
|
213
235
|
resolveShellRc,
|
|
214
236
|
writeKey
|
|
215
|
-
} from "../chunk-
|
|
237
|
+
} from "../chunk-VYBH6D4X.js";
|
|
216
238
|
import {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
nodeCodexInstallProbe,
|
|
223
|
-
resolveControlPolicy
|
|
224
|
-
} from "../chunk-OWQHE2VV.js";
|
|
225
|
-
import {
|
|
226
|
-
detectClaudeVersion
|
|
227
|
-
} from "../chunk-RIVNNBEK.js";
|
|
228
|
-
import "../chunk-XHKBHWLX.js";
|
|
229
|
-
import {
|
|
230
|
-
compareVersion,
|
|
231
|
-
parseVersion
|
|
232
|
-
} from "../chunk-6ICPEJY5.js";
|
|
239
|
+
CODEX_ENGINE_DIRECTORY,
|
|
240
|
+
CODEX_ENGINE_ENTRYPOINT,
|
|
241
|
+
CODEX_ENGINE_MANIFEST,
|
|
242
|
+
codexEngineInside
|
|
243
|
+
} from "../chunk-36NGFHE4.js";
|
|
233
244
|
import {
|
|
234
245
|
reportEvent
|
|
235
|
-
} from "../chunk-
|
|
236
|
-
import "../chunk-
|
|
237
|
-
import "../chunk-
|
|
238
|
-
import "../chunk-
|
|
246
|
+
} from "../chunk-DT5CACWZ.js";
|
|
247
|
+
import "../chunk-3RPN7AAT.js";
|
|
248
|
+
import "../chunk-JBT3ZSJS.js";
|
|
249
|
+
import "../chunk-2QPHUCXU.js";
|
|
239
250
|
import "../chunk-POFBE6ZY.js";
|
|
240
|
-
import "../chunk-
|
|
251
|
+
import "../chunk-3OLEGCMU.js";
|
|
241
252
|
import {
|
|
242
253
|
checkApiKey,
|
|
243
254
|
describeKeyCheck,
|
|
244
255
|
samePusharyAccount
|
|
245
|
-
} from "../chunk-
|
|
246
|
-
import "../chunk-
|
|
247
|
-
import "../chunk-
|
|
256
|
+
} from "../chunk-SRXBOMSR.js";
|
|
257
|
+
import "../chunk-UR7XX2DV.js";
|
|
258
|
+
import "../chunk-KQBXPGXO.js";
|
|
248
259
|
import {
|
|
249
260
|
UsageError
|
|
250
261
|
} from "../chunk-7QLSKOSU.js";
|
|
251
262
|
import {
|
|
252
263
|
EXIT
|
|
253
264
|
} from "../chunk-KZERVKTD.js";
|
|
265
|
+
import "../chunk-4QQEUJL4.js";
|
|
254
266
|
import {
|
|
255
|
-
NpmMissingError,
|
|
256
267
|
addCodexHookTrust,
|
|
257
268
|
addCodexHooks,
|
|
258
269
|
addCodexMcpServer,
|
|
@@ -272,7 +283,6 @@ import {
|
|
|
272
283
|
cursorUserHooks,
|
|
273
284
|
cursorUserMcp,
|
|
274
285
|
dropVacatedCodexHookTrust,
|
|
275
|
-
fetchLatestPublishedVersion,
|
|
276
286
|
fxAgentsMd,
|
|
277
287
|
fxConfigDir,
|
|
278
288
|
fxMcpProfile,
|
|
@@ -286,47 +296,53 @@ import {
|
|
|
286
296
|
guardedArgv,
|
|
287
297
|
hermesConfigReceipt,
|
|
288
298
|
hookTakeoverReceipt,
|
|
289
|
-
installGlobally,
|
|
290
|
-
npmInstallFailure,
|
|
291
|
-
plannedGlobalPackage,
|
|
292
299
|
pusharyConfigFile,
|
|
293
300
|
readCodexMcpAuth,
|
|
294
|
-
resolveGlobalBinDir,
|
|
295
|
-
resolveGlobalBinary,
|
|
296
301
|
vscodePluginDir,
|
|
297
302
|
vscodePluginMcp
|
|
298
|
-
} from "../chunk-
|
|
303
|
+
} from "../chunk-YQDZ7ZIL.js";
|
|
304
|
+
import {
|
|
305
|
+
NpmMissingError,
|
|
306
|
+
fetchLatestPublishedVersion,
|
|
307
|
+
installGlobally,
|
|
308
|
+
npmInstallFailure,
|
|
309
|
+
plannedGlobalPackage,
|
|
310
|
+
resolveGlobalBinDir,
|
|
311
|
+
resolveGlobalBinary
|
|
312
|
+
} from "../chunk-JZDRR7BL.js";
|
|
299
313
|
import {
|
|
300
314
|
backupFile,
|
|
301
315
|
readJsonSafe
|
|
302
316
|
} from "../chunk-AQFEP65J.js";
|
|
303
317
|
import {
|
|
304
318
|
getBaseUrl
|
|
305
|
-
} from "../chunk-
|
|
319
|
+
} from "../chunk-CQ5JGRML.js";
|
|
306
320
|
import {
|
|
307
321
|
NPX_LATEST_COMMAND,
|
|
308
322
|
renderCommandHelp
|
|
309
|
-
} from "../chunk-
|
|
323
|
+
} from "../chunk-MC4VY5LK.js";
|
|
324
|
+
import {
|
|
325
|
+
getPackageVersion,
|
|
326
|
+
isNewerVersion,
|
|
327
|
+
launchedPackage,
|
|
328
|
+
ownPackageName
|
|
329
|
+
} from "../chunk-QTOLNRET.js";
|
|
310
330
|
import {
|
|
311
331
|
HOOK_COMPATIBLE_PROFILES,
|
|
312
332
|
PRETOOLUSE_GATED_TOOLS,
|
|
313
333
|
SUPPORT_EMAIL,
|
|
314
334
|
computerOsOfPlatform,
|
|
315
|
-
getPackageVersion,
|
|
316
335
|
hookCompatibleProfile,
|
|
317
336
|
isApprovalMode,
|
|
318
337
|
isComputerAgent,
|
|
319
|
-
isNewerVersion,
|
|
320
338
|
isRecord,
|
|
321
339
|
isTimeoutAction,
|
|
322
|
-
isValidApiKey
|
|
323
|
-
|
|
324
|
-
ownPackageName
|
|
325
|
-
} from "../chunk-OR5F63C2.js";
|
|
340
|
+
isValidApiKey
|
|
341
|
+
} from "../chunk-LF3TLC7B.js";
|
|
326
342
|
|
|
327
343
|
// bin/pushary-setup.ts
|
|
328
344
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync, rmSync, renameSync, realpathSync, statSync, openSync, readSync, closeSync } from "fs";
|
|
329
|
-
import { join as join3, dirname as
|
|
345
|
+
import { join as join3, dirname as dirname3, basename } from "path";
|
|
330
346
|
import { homedir, hostname } from "os";
|
|
331
347
|
import { execSync } from "child_process";
|
|
332
348
|
import { checkbox, input, confirm } from "@inquirer/prompts";
|
|
@@ -693,6 +709,15 @@ var COMMAND_SURFACE = [
|
|
|
693
709
|
];
|
|
694
710
|
var SURFACE_COLUMN = Math.max(...COMMAND_SURFACE.map((entry) => entry.command.length)) + 2;
|
|
695
711
|
var renderCommandSurface = () => COMMAND_SURFACE.map((entry) => `${entry.command.padEnd(SURFACE_COLUMN)}${entry.summary}`);
|
|
712
|
+
var PHONE_START_VERIFIED_LINE = "Phone-start and steering: local and server checks passed just now. Recheck after sleep or network changes.";
|
|
713
|
+
var PHONE_START_NOT_RUNNING_LINE = "Phone-start and steering: not running on this computer. Approvals do not depend on it. Run pushary doctor to see what is missing.";
|
|
714
|
+
var PHONE_START_UNVERIFIED_LINE = "Phone-start and steering: unverified. Run pushary doctor to check the provider, background service and server route.";
|
|
715
|
+
var phoneStartStatusLine = (facts) => {
|
|
716
|
+
if (facts.managedControlReady === true) return PHONE_START_VERIFIED_LINE;
|
|
717
|
+
if (facts.daemonReady === false) return PHONE_START_NOT_RUNNING_LINE;
|
|
718
|
+
return PHONE_START_UNVERIFIED_LINE;
|
|
719
|
+
};
|
|
720
|
+
var phoneStartFailedTheRun = (facts) => facts.daemonReady === false && facts.phoneStartRequired !== false;
|
|
696
721
|
var PHONE_START_UNVERIFIED_STEPS = [
|
|
697
722
|
"Agent configuration and managed control are separate. Phone-start and steering could not be verified.",
|
|
698
723
|
"pushary daemon install install or repair the background service",
|
|
@@ -712,7 +737,7 @@ var WHAT_PHONE_START_NEEDS = {
|
|
|
712
737
|
};
|
|
713
738
|
var phoneStartProblemSteps = (missing) => missing ? [PHONE_START_CANNOT_RUN_LINE, ...WHAT_PHONE_START_NEEDS[missing], STOP_REQUIRING_PHONE_START_STEP] : PHONE_START_UNVERIFIED_STEPS;
|
|
714
739
|
var nextSteps = (facts, reachable) => {
|
|
715
|
-
const lines = ["Delivery follows the current approval mode, recipient rules and presence. pushary mode status shows the workspace setting.", facts
|
|
740
|
+
const lines = ["Delivery follows the current approval mode, recipient rules and presence. pushary mode status shows the workspace setting.", phoneStartStatusLine(facts)];
|
|
716
741
|
lines.push("Before stepping away, run pushary wait to see how long phone approvals wait and what happens if you do not answer.");
|
|
717
742
|
if (facts.staleEnvironmentKey) {
|
|
718
743
|
lines.push("Open a new terminal or unset PUSHARY_API_KEY, then run pushary doctor before starting an agent.");
|
|
@@ -767,7 +792,7 @@ var describeClosing = (facts) => {
|
|
|
767
792
|
reason: "stale-environment-key"
|
|
768
793
|
};
|
|
769
794
|
}
|
|
770
|
-
if (facts
|
|
795
|
+
if (phoneStartFailedTheRun(facts)) {
|
|
771
796
|
return {
|
|
772
797
|
ok: false,
|
|
773
798
|
headline: "Setup finished with 1 problem.",
|
|
@@ -913,7 +938,7 @@ var readCodexVersion = (probe) => {
|
|
|
913
938
|
};
|
|
914
939
|
|
|
915
940
|
// src/setup/codex-bundled.ts
|
|
916
|
-
import { join as join2 } from "path";
|
|
941
|
+
import { dirname as dirname2, join as join2 } from "path";
|
|
917
942
|
var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
918
943
|
var codexCliPathFromConfig = (config) => {
|
|
919
944
|
const servers = asRecord(config.mcp_servers);
|
|
@@ -924,16 +949,34 @@ var codexCliPathFromConfig = (config) => {
|
|
|
924
949
|
}
|
|
925
950
|
return null;
|
|
926
951
|
};
|
|
952
|
+
var SYSTEM_CHATGPT_APP = "/Applications/ChatGPT.app";
|
|
953
|
+
var userChatGptApp = (home) => join2(home, "Applications", "ChatGPT.app");
|
|
927
954
|
var bundledCodexCandidates = (home, platform) => platform === "darwin" ? [
|
|
928
|
-
|
|
929
|
-
|
|
955
|
+
codexEngineInside(SYSTEM_CHATGPT_APP),
|
|
956
|
+
codexEngineInside(userChatGptApp(home)),
|
|
957
|
+
join2(SYSTEM_CHATGPT_APP, "Contents", "Resources", "codex"),
|
|
958
|
+
join2(userChatGptApp(home), "Contents", "Resources", "codex")
|
|
930
959
|
] : [];
|
|
931
960
|
var findBundledCodex = (probe) => {
|
|
932
961
|
const config = probe.config();
|
|
933
962
|
const declared = config ? codexCliPathFromConfig(config) : null;
|
|
934
|
-
|
|
963
|
+
const codex = declared ? probe.engineBehindPusharyLauncher(declared) ?? declared : null;
|
|
964
|
+
if (codex && probe.exists(codex)) return codex;
|
|
935
965
|
return bundledCodexCandidates(probe.home, probe.platform).find(probe.exists) ?? null;
|
|
936
966
|
};
|
|
967
|
+
var ENGINE_ENTRYPOINT_INSIDE_THE_APP = `/${CODEX_ENGINE_DIRECTORY}/${CODEX_ENGINE_ENTRYPOINT}`;
|
|
968
|
+
var MANIFEST_VERSION = /^\d+\.\d+\.\d+/;
|
|
969
|
+
var codexEngineManifestBeside = (codex) => codex.endsWith(ENGINE_ENTRYPOINT_INSIDE_THE_APP) ? join2(dirname2(dirname2(codex)), CODEX_ENGINE_MANIFEST) : null;
|
|
970
|
+
var parseCodexEngineManifestVersion = (contents) => {
|
|
971
|
+
let manifest;
|
|
972
|
+
try {
|
|
973
|
+
manifest = JSON.parse(contents);
|
|
974
|
+
} catch {
|
|
975
|
+
return null;
|
|
976
|
+
}
|
|
977
|
+
const version = asRecord(manifest)?.version;
|
|
978
|
+
return typeof version === "string" ? version.match(MANIFEST_VERSION)?.[0] ?? null : null;
|
|
979
|
+
};
|
|
937
980
|
var parseEmbeddedCodexVersion = (haystack) => haystack.match(/cli_version(\d+\.\d+\.\d+)/)?.[1] ?? null;
|
|
938
981
|
|
|
939
982
|
// src/setup/telemetry.ts
|
|
@@ -1226,7 +1269,7 @@ var installGlobally2 = async () => {
|
|
|
1226
1269
|
var _cachedSkillContent = null;
|
|
1227
1270
|
var fetchSkillContent = async () => {
|
|
1228
1271
|
if (_cachedSkillContent) return _cachedSkillContent;
|
|
1229
|
-
const __dirname =
|
|
1272
|
+
const __dirname = dirname3(fileURLToPath(import.meta.url));
|
|
1230
1273
|
const candidates = [
|
|
1231
1274
|
join3(__dirname, "..", "..", "data", "SKILL.md"),
|
|
1232
1275
|
join3(__dirname, "..", "data", "SKILL.md")
|
|
@@ -1399,6 +1442,24 @@ var readEmbeddedCodexVersion = (path) => {
|
|
|
1399
1442
|
}
|
|
1400
1443
|
}
|
|
1401
1444
|
};
|
|
1445
|
+
var LARGEST_LAUNCHER_BYTES = 64 * 1024;
|
|
1446
|
+
var engineBehindPusharyLauncher = (path) => {
|
|
1447
|
+
try {
|
|
1448
|
+
if (statSync(path).size > LARGEST_LAUNCHER_BYTES) return null;
|
|
1449
|
+
return codexEngineBehindLauncher(readFileSync(path, "utf-8"));
|
|
1450
|
+
} catch {
|
|
1451
|
+
return null;
|
|
1452
|
+
}
|
|
1453
|
+
};
|
|
1454
|
+
var codexEngineManifestVersion = (codex) => {
|
|
1455
|
+
const manifest = codexEngineManifestBeside(codex);
|
|
1456
|
+
if (!manifest) return null;
|
|
1457
|
+
try {
|
|
1458
|
+
return parseCodexEngineManifestVersion(readFileSync(manifest, "utf-8"));
|
|
1459
|
+
} catch {
|
|
1460
|
+
return null;
|
|
1461
|
+
}
|
|
1462
|
+
};
|
|
1402
1463
|
var bundledCodex = () => findBundledCodex({
|
|
1403
1464
|
config: () => {
|
|
1404
1465
|
try {
|
|
@@ -1408,6 +1469,7 @@ var bundledCodex = () => findBundledCodex({
|
|
|
1408
1469
|
}
|
|
1409
1470
|
},
|
|
1410
1471
|
exists: existsSync,
|
|
1472
|
+
engineBehindPusharyLauncher,
|
|
1411
1473
|
home: homedir(),
|
|
1412
1474
|
platform: process.platform
|
|
1413
1475
|
});
|
|
@@ -1423,7 +1485,7 @@ var detectCodexVersion = () => readCodexVersion({
|
|
|
1423
1485
|
},
|
|
1424
1486
|
bundledVersion: () => {
|
|
1425
1487
|
const path = bundledCodex();
|
|
1426
|
-
return path ? readEmbeddedCodexVersion(path) : null;
|
|
1488
|
+
return path ? codexEngineManifestVersion(path) ?? readEmbeddedCodexVersion(path) : null;
|
|
1427
1489
|
},
|
|
1428
1490
|
brewVersions: () => {
|
|
1429
1491
|
try {
|
|
@@ -1607,7 +1669,7 @@ var setupCodex = async (apiKey) => {
|
|
|
1607
1669
|
}
|
|
1608
1670
|
};
|
|
1609
1671
|
var resolveBundledPlugin = () => {
|
|
1610
|
-
const dir =
|
|
1672
|
+
const dir = dirname3(fileURLToPath(import.meta.url));
|
|
1611
1673
|
const candidates = [
|
|
1612
1674
|
join3(dir, "..", "..", "data", "cursor-plugin"),
|
|
1613
1675
|
join3(dir, "..", "data", "cursor-plugin"),
|
|
@@ -1668,7 +1730,7 @@ var setupCursor = async (apiKey) => {
|
|
|
1668
1730
|
const source = resolveBundledPlugin();
|
|
1669
1731
|
if (!source) throw new Error("bundled Cursor plugin not found in this package");
|
|
1670
1732
|
await spinner("Installing Pushary plugin", async () => {
|
|
1671
|
-
const staging = join3(
|
|
1733
|
+
const staging = join3(dirname3(CURSOR_PLUGIN_DIR), `${CURSOR_PLUGIN_STAGING_PREFIX}${process.pid}`);
|
|
1672
1734
|
const backup = `${CURSOR_PLUGIN_DIR}${CURSOR_PLUGIN_BACKUP_INFIX}${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
|
|
1673
1735
|
rmSync(staging, { recursive: true, force: true });
|
|
1674
1736
|
try {
|
|
@@ -1716,7 +1778,7 @@ var setupCursor = async (apiKey) => {
|
|
|
1716
1778
|
noteManual("Fully quit and reopen Cursor. A Reload Window may not be enough.");
|
|
1717
1779
|
};
|
|
1718
1780
|
var resolveBundledVsCodePlugin = () => {
|
|
1719
|
-
const dir =
|
|
1781
|
+
const dir = dirname3(fileURLToPath(import.meta.url));
|
|
1720
1782
|
const candidates = [
|
|
1721
1783
|
join3(dir, "..", "..", "data", "vscode-plugin"),
|
|
1722
1784
|
join3(dir, "..", "data", "vscode-plugin"),
|
|
@@ -1743,7 +1805,7 @@ var registerVsCodePlugin = (pluginDir) => {
|
|
|
1743
1805
|
continue;
|
|
1744
1806
|
}
|
|
1745
1807
|
if (current !== null) backupFile(settingsPath);
|
|
1746
|
-
mkdirSync(
|
|
1808
|
+
mkdirSync(dirname3(settingsPath), { recursive: true });
|
|
1747
1809
|
writeSetupConfigFile(settingsPath, result.content);
|
|
1748
1810
|
written.push(settingsPath);
|
|
1749
1811
|
}
|
|
@@ -1756,9 +1818,9 @@ var setupVsCode = async (apiKey) => {
|
|
|
1756
1818
|
const source = resolveBundledVsCodePlugin();
|
|
1757
1819
|
if (!source) throw new Error("bundled VS Code plugin not found in this package");
|
|
1758
1820
|
await spinner("Installing Pushary plugin", async () => {
|
|
1759
|
-
const staging = join3(
|
|
1821
|
+
const staging = join3(dirname3(VSCODE_PLUGIN_DIR), `.pushary-staging-vscode-${process.pid}`);
|
|
1760
1822
|
const backup = `${VSCODE_PLUGIN_DIR}.pushary-backup-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
|
|
1761
|
-
mkdirSync(
|
|
1823
|
+
mkdirSync(dirname3(VSCODE_PLUGIN_DIR), { recursive: true });
|
|
1762
1824
|
rmSync(staging, { recursive: true, force: true });
|
|
1763
1825
|
try {
|
|
1764
1826
|
cpSync(source, staging, {
|
|
@@ -2173,7 +2235,7 @@ var setupCompatibleAgent = (profile) => async (apiKey) => {
|
|
|
2173
2235
|
console.log(`
|
|
2174
2236
|
${bold(`Setting up ${profile.label}`)}
|
|
2175
2237
|
`);
|
|
2176
|
-
if (!isInstalled(profile.binary) && (profile.configDirIsShared || !existsSync(
|
|
2238
|
+
if (!isInstalled(profile.binary) && (profile.configDirIsShared || !existsSync(dirname3(configFile)))) {
|
|
2177
2239
|
console.log(` ${yellow("!")} ${profile.label} not found. Skipping.`);
|
|
2178
2240
|
console.log(` ${dim(`Install ${profile.label} and re-run setup to configure.`)}`);
|
|
2179
2241
|
return "skipped";
|
|
@@ -3084,6 +3146,7 @@ var main = async () => {
|
|
|
3084
3146
|
reachesYou,
|
|
3085
3147
|
managedControlReady: !controlLifecycleFailure && managedControl.ready,
|
|
3086
3148
|
daemonReady: controlLifecycleFailure ? false : daemonReady,
|
|
3149
|
+
phoneStartRequired: phoneStartIsRequired({ mode: controlMode, policy: controlPolicy, lifecycleFailed: controlLifecycleFailure !== null }),
|
|
3087
3150
|
phoneStartMissingPrerequisite: controlMissingPrerequisite,
|
|
3088
3151
|
transcriptSync,
|
|
3089
3152
|
// null when the check did not run, so it changes nothing. Only an outright
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readLedgerSummary
|
|
4
|
-
} from "../chunk-Y7WD72J7.js";
|
|
5
2
|
import {
|
|
6
3
|
exitOnHelpFlag
|
|
7
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-S6RNS4UL.js";
|
|
5
|
+
import {
|
|
6
|
+
readLedgerSummary
|
|
7
|
+
} from "../chunk-7CLLWDCP.js";
|
|
8
8
|
import "../chunk-KZERVKTD.js";
|
|
9
9
|
import {
|
|
10
10
|
getApiKey
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-CQ5JGRML.js";
|
|
12
|
+
import "../chunk-MC4VY5LK.js";
|
|
13
|
+
import "../chunk-QTOLNRET.js";
|
|
14
|
+
import "../chunk-LF3TLC7B.js";
|
|
14
15
|
|
|
15
16
|
// bin/pushary-stats.ts
|
|
16
17
|
exitOnHelpFlag("stats");
|
|
@@ -3,69 +3,72 @@ import {
|
|
|
3
3
|
describeReach,
|
|
4
4
|
fetchChannels,
|
|
5
5
|
reachVerdict
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-XQHPHJHR.js";
|
|
7
7
|
import "../chunk-3EGEA4KH.js";
|
|
8
8
|
import {
|
|
9
9
|
describeLastSeen,
|
|
10
10
|
listMachines
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-QCGNGEGE.js";
|
|
11
|
+
} from "../chunk-LXRQLDGW.js";
|
|
13
12
|
import {
|
|
14
13
|
CONNECTED_THROUGH_MAC_APP,
|
|
15
14
|
readMacAppConnectionWhenKeyless
|
|
16
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-PTNSIGLB.js";
|
|
16
|
+
import "../chunk-QCGNGEGE.js";
|
|
17
17
|
import {
|
|
18
18
|
SIGNED_OUT_ON_MAC_MESSAGE,
|
|
19
19
|
activeKeyVerdictOf,
|
|
20
20
|
describeSignedOutKey,
|
|
21
21
|
readSignedOutDiagnosis
|
|
22
|
-
} from "../chunk-
|
|
23
|
-
import "../chunk-
|
|
22
|
+
} from "../chunk-6SWMKF5E.js";
|
|
23
|
+
import "../chunk-DT5Y55FI.js";
|
|
24
24
|
import {
|
|
25
25
|
createIo
|
|
26
26
|
} from "../chunk-FO3MDD26.js";
|
|
27
|
-
import "../chunk-Y74IJ2IO.js";
|
|
28
|
-
import "../chunk-ZMYLVFXC.js";
|
|
29
|
-
import "../chunk-WEY5ZHDB.js";
|
|
30
|
-
import "../chunk-25SYEAW4.js";
|
|
31
|
-
import "../chunk-PA54A437.js";
|
|
32
|
-
import "../chunk-XTVEW2NG.js";
|
|
33
|
-
import {
|
|
34
|
-
rejectUnknownFlags
|
|
35
|
-
} from "../chunk-GMXKITVA.js";
|
|
36
|
-
import {
|
|
37
|
-
readKeySource
|
|
38
|
-
} from "../chunk-XH3F66VD.js";
|
|
39
27
|
import {
|
|
40
28
|
exitOnHelpFlag
|
|
41
|
-
} from "../chunk-
|
|
42
|
-
import "../chunk-
|
|
29
|
+
} from "../chunk-S6RNS4UL.js";
|
|
30
|
+
import "../chunk-WVSM3G4C.js";
|
|
43
31
|
import "../chunk-RIVNNBEK.js";
|
|
32
|
+
import "../chunk-4JM2CK2A.js";
|
|
33
|
+
import "../chunk-5CRQCIHR.js";
|
|
34
|
+
import "../chunk-2YSCVT6Q.js";
|
|
35
|
+
import "../chunk-3ICRY72Q.js";
|
|
36
|
+
import "../chunk-BUXDR6US.js";
|
|
37
|
+
import "../chunk-EGKD4S5H.js";
|
|
38
|
+
import {
|
|
39
|
+
rejectUnknownFlags
|
|
40
|
+
} from "../chunk-GMXKITVA.js";
|
|
44
41
|
import "../chunk-XHKBHWLX.js";
|
|
45
42
|
import "../chunk-6ICPEJY5.js";
|
|
46
|
-
import
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
import "../chunk-
|
|
43
|
+
import {
|
|
44
|
+
readKeySource
|
|
45
|
+
} from "../chunk-VYBH6D4X.js";
|
|
46
|
+
import "../chunk-DT5CACWZ.js";
|
|
47
|
+
import "../chunk-3RPN7AAT.js";
|
|
48
|
+
import "../chunk-JBT3ZSJS.js";
|
|
49
|
+
import "../chunk-2QPHUCXU.js";
|
|
50
50
|
import "../chunk-POFBE6ZY.js";
|
|
51
|
-
import "../chunk-
|
|
51
|
+
import "../chunk-3OLEGCMU.js";
|
|
52
52
|
import {
|
|
53
53
|
checkApiKey,
|
|
54
54
|
describeKeyCheck
|
|
55
|
-
} from "../chunk-
|
|
56
|
-
import "../chunk-
|
|
57
|
-
import "../chunk-
|
|
55
|
+
} from "../chunk-SRXBOMSR.js";
|
|
56
|
+
import "../chunk-UR7XX2DV.js";
|
|
57
|
+
import "../chunk-KQBXPGXO.js";
|
|
58
58
|
import {
|
|
59
59
|
UsageError
|
|
60
60
|
} from "../chunk-7QLSKOSU.js";
|
|
61
61
|
import {
|
|
62
62
|
EXIT
|
|
63
63
|
} from "../chunk-KZERVKTD.js";
|
|
64
|
-
import "../chunk-
|
|
64
|
+
import "../chunk-4QQEUJL4.js";
|
|
65
|
+
import "../chunk-YQDZ7ZIL.js";
|
|
66
|
+
import "../chunk-JZDRR7BL.js";
|
|
65
67
|
import "../chunk-AQFEP65J.js";
|
|
66
|
-
import "../chunk-
|
|
67
|
-
import "../chunk-
|
|
68
|
-
import "../chunk-
|
|
68
|
+
import "../chunk-CQ5JGRML.js";
|
|
69
|
+
import "../chunk-MC4VY5LK.js";
|
|
70
|
+
import "../chunk-QTOLNRET.js";
|
|
71
|
+
import "../chunk-LF3TLC7B.js";
|
|
69
72
|
|
|
70
73
|
// src/status.ts
|
|
71
74
|
var SIGNED_OUT_LINE = { label: "Server", value: "key signed out on this Mac", ok: false };
|