anyray-connect 0.11.81 → 0.11.83
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/dist/assets/vscodeExtensionAsset.js +5 -5
- package/dist/assets/vscodeExtensionAsset.js.map +1 -1
- package/dist/cli.js +115 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/deviceUrl.js +35 -0
- package/dist/commands/deviceUrl.js.map +1 -0
- package/dist/commands/doctor.js +110 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/persistence.js +106 -0
- package/dist/commands/persistence.js.map +1 -0
- package/dist/commands/refreshProxy.js +82 -13
- package/dist/commands/refreshProxy.js.map +1 -1
- package/dist/commands/sync.js +8 -2
- package/dist/commands/sync.js.map +1 -1
- package/dist/tools/claudeCode.js +9 -0
- package/dist/tools/claudeCode.js.map +1 -1
- package/dist/tools/cursor.js +11 -0
- package/dist/tools/cursor.js.map +1 -1
- package/dist/tools/shellEnv.js +51 -21
- package/dist/tools/shellEnv.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util/connectHealthReport.js +20 -10
- package/dist/util/connectHealthReport.js.map +1 -1
- package/dist/util/devRefresh.js +113 -14
- package/dist/util/devRefresh.js.map +1 -1
- package/dist/util/devVerify.js +8 -1
- package/dist/util/devVerify.js.map +1 -1
- package/dist/util/deviceToken.js +207 -0
- package/dist/util/deviceToken.js.map +1 -0
- package/dist/util/driftWatcher.js +255 -0
- package/dist/util/driftWatcher.js.map +1 -0
- package/dist/util/persist.js +44 -22
- package/dist/util/persist.js.map +1 -1
- package/dist/util/policySync.js +142 -17
- package/dist/util/policySync.js.map +1 -1
- package/dist/util/proxyEnrollmentGate.js +28 -0
- package/dist/util/proxyEnrollmentGate.js.map +1 -1
- package/dist/util/selfUpdate.js +10 -1
- package/dist/util/selfUpdate.js.map +1 -1
- package/dist/util/trayPersistence.js +142 -0
- package/dist/util/trayPersistence.js.map +1 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* source so both npm/npx runtimes and Bun's single-file executable carry the
|
|
5
5
|
* same installable extension without a Marketplace dependency.
|
|
6
6
|
*/
|
|
7
|
-
export const BUNDLED_VSCODE_EXTENSION_VERSION = "0.1.
|
|
8
|
-
export const BUNDLED_VSCODE_EXTENSION_SOURCE_SHA256 = "
|
|
9
|
-
export const BUNDLED_VSCODE_EXTENSION_DIST_SHA256 = "
|
|
10
|
-
export const BUNDLED_VSCODE_EXTENSION_SHA256 = "
|
|
11
|
-
export const BUNDLED_VSCODE_EXTENSION_BASE64 = "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";
|
|
7
|
+
export const BUNDLED_VSCODE_EXTENSION_VERSION = "0.1.21";
|
|
8
|
+
export const BUNDLED_VSCODE_EXTENSION_SOURCE_SHA256 = "1be676148ad4915255cb7a77d1ba8e7b7997b1607a1916838acef4cc2e2f2c65";
|
|
9
|
+
export const BUNDLED_VSCODE_EXTENSION_DIST_SHA256 = "edfbcd668a936e5bb23ab7e54a674adee124d908f4b89c9c02476e1b1209f305";
|
|
10
|
+
export const BUNDLED_VSCODE_EXTENSION_SHA256 = "c1af35e8c2b73e2d8ee3a00763d4fd5234bc3a3d06c753651c1fb9040ecf5a22";
|
|
11
|
+
export const BUNDLED_VSCODE_EXTENSION_BASE64 = "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";
|
|
12
12
|
//# sourceMappingURL=vscodeExtensionAsset.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscodeExtensionAsset.js","sourceRoot":"","sources":["../../src/assets/vscodeExtensionAsset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,QAAQ,CAAC;AACzD,MAAM,CAAC,MAAM,sCAAsC,GACjD,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,oCAAoC,GAC/C,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,
|
|
1
|
+
{"version":3,"file":"vscodeExtensionAsset.js","sourceRoot":"","sources":["../../src/assets/vscodeExtensionAsset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,QAAQ,CAAC;AACzD,MAAM,CAAC,MAAM,sCAAsC,GACjD,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,oCAAoC,GAC/C,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAC1C,0+rBAA0+rB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -15,10 +15,13 @@ import { isDraining } from "./util/drainMarker.js";
|
|
|
15
15
|
import { installRefreshScheduler, uninstallRefreshScheduler, } from "./util/refreshScheduler.js";
|
|
16
16
|
import { detectRemoteDevBackend, isContainerBackend, } from "./util/remoteContext.js";
|
|
17
17
|
import { runRefreshProxy } from "./commands/refreshProxy.js";
|
|
18
|
+
import { runPersistenceCommand } from "./commands/persistence.js";
|
|
19
|
+
import { checkTrayPersistence, reconcileTrayPersistence, } from "./util/trayPersistence.js";
|
|
18
20
|
import { loopbackEngaged } from "./util/loopback.js";
|
|
19
21
|
import { runQuitWatch } from "./commands/quitWatch.js";
|
|
20
22
|
import { runManaged } from "./commands/managed.js";
|
|
21
23
|
import { runPrintKey } from "./commands/printKey.js";
|
|
24
|
+
import { runDeviceUrl } from "./commands/deviceUrl.js";
|
|
22
25
|
import { runProjectApply } from "./commands/projectApply.js";
|
|
23
26
|
import { runClaudeDesktopCredential, } from "./commands/claudeDesktopCredential.js";
|
|
24
27
|
import { runDesktop } from "./commands/desktop.js";
|
|
@@ -39,6 +42,8 @@ import { effectiveSubscription, metadataHeaderValue } from "./types.js";
|
|
|
39
42
|
import { quitTargetKey, quitTargetLabel, relaunchResolvable, quitTargetSupported, relaunchApp, requestGracefulQuit, waitForQuit, } from "./util/appQuit.js";
|
|
40
43
|
import { bold, cyan, dim, fail, heading, info, note, ok, warn, } from "./util/log.js";
|
|
41
44
|
import { clearDevKey, clearEnrollment, hasEnrollment, loadProfile, recordManagedTools, saveProfile, saveDevKey, loadDevKey, stateDir, ensureStateDir, purgeRetiredFallbackState, } from "./util/persist.js";
|
|
45
|
+
import { revokeDeviceToken } from "./util/deviceToken.js";
|
|
46
|
+
import { isFleetLockedTool } from "./util/policySync.js";
|
|
42
47
|
import { confirm, isInteractive, prompt, resolveDisplayName, resolveTeam, } from "./commands/shared.js";
|
|
43
48
|
import { verifyConnection } from "./util/verify.js";
|
|
44
49
|
import { detectSeatState } from "./util/seatState.js";
|
|
@@ -79,6 +84,8 @@ ${bold("Subcommands")}
|
|
|
79
84
|
the auth smoke probe runs by DEFAULT (one tiny request) so an
|
|
80
85
|
all-clear means a request actually worked, not just that the
|
|
81
86
|
config looks right; --no-verify skips it for offline runs;
|
|
87
|
+
--quick runs local checks only (no probes, no telemetry) —
|
|
88
|
+
built for background pollers; skipped legs report null;
|
|
82
89
|
--verify additionally runs a retrieval-loop probe (which
|
|
83
90
|
never latches model retrieve capability);
|
|
84
91
|
--repair re-applies managed tools whose routing drifted
|
|
@@ -91,6 +98,9 @@ ${bold("Subcommands")}
|
|
|
91
98
|
sync Pull the team's shared skills/instructions into each tool's skills dir
|
|
92
99
|
print-key Print the enrolled dev's short-lived gateway key for helper
|
|
93
100
|
integrations. --json emits the desktop helper contract.
|
|
101
|
+
device-url Print this machine's device-page URL (what the tray's
|
|
102
|
+
"Open my device page" opens). stdout carries the URL alone;
|
|
103
|
+
needs the daemon running (it mints the rotating token).
|
|
94
104
|
desktop Setup help and MDM artifacts for desktop app inference
|
|
95
105
|
routing (Claude desktop app and Codex fleets).
|
|
96
106
|
retrieve <ctx_…> Print the original content behind a "· retrieve ctx_…"
|
|
@@ -339,6 +349,9 @@ export const parseArgs = (argv) => {
|
|
|
339
349
|
case "--no-verify":
|
|
340
350
|
args.noVerify = true;
|
|
341
351
|
break;
|
|
352
|
+
case "--quick":
|
|
353
|
+
args.quick = true;
|
|
354
|
+
break;
|
|
342
355
|
case "--repair":
|
|
343
356
|
args.repair = true;
|
|
344
357
|
break;
|
|
@@ -821,6 +834,17 @@ export const reconcileProxyService = async (deps = {}) => {
|
|
|
821
834
|
const profile = await (deps.load ?? loadProfile)();
|
|
822
835
|
if (profile.keyRefreshEnabled !== true || !profile.gateway)
|
|
823
836
|
return;
|
|
837
|
+
// RFC 0010 §6 P4: while a verified signed tray app owns launch-at-login,
|
|
838
|
+
// it — not launchd — respawns a dead daemon, so reinstalling the
|
|
839
|
+
// LaunchAgent here would undo the swap twice an hour. 'gone' (marker set
|
|
840
|
+
// but the app is missing/unsigned) falls through to the normal reinstall:
|
|
841
|
+
// that IS the self-heal for this service; reconcileTrayPersistence (run
|
|
842
|
+
// in the same tick) restores the scheduler and clears the marker.
|
|
843
|
+
if (profile.persistenceOwner === "tray") {
|
|
844
|
+
const tray = await (deps.checkTray ?? checkTrayPersistence)(profile);
|
|
845
|
+
if (tray === "healthy")
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
824
848
|
const port = profile.fallbackPort ?? DEFAULT_LOOPBACK_PORT;
|
|
825
849
|
// Patience before the bounce: a 1.5s probe blip on a busy-but-alive daemon
|
|
826
850
|
// must not trigger a reinstall (greptile P1 on #1389). A quarantined daemon
|
|
@@ -869,7 +893,18 @@ export const setupLoopbackProxy = async (target, port, deps = {}) => {
|
|
|
869
893
|
const probe = deps.probe ?? probeHealth;
|
|
870
894
|
const pollDelayMs = deps.pollDelayMs ?? 300;
|
|
871
895
|
heading("Seamless key refresh");
|
|
872
|
-
|
|
896
|
+
// Tray-owned persistence: never re-register the LaunchAgent the swap
|
|
897
|
+
// retired — the signed app launches (and respawns) the daemon. Probe with
|
|
898
|
+
// the same patience as a fresh install: the tray's supervisor tick may be
|
|
899
|
+
// mid-respawn.
|
|
900
|
+
const svc = deps.trayManaged
|
|
901
|
+
? {
|
|
902
|
+
ok: true,
|
|
903
|
+
messages: [
|
|
904
|
+
"Launch-at-login is managed by the Anyray Connect app — not re-registering the login service.",
|
|
905
|
+
],
|
|
906
|
+
}
|
|
907
|
+
: await install({ port, remoteOrigin: target.origin });
|
|
873
908
|
for (const m of svc.messages)
|
|
874
909
|
info(` ${m}`);
|
|
875
910
|
// A freshly-installed supervisor may take a moment to bind, so poll. But
|
|
@@ -927,6 +962,13 @@ export const reconcileRefreshScheduler = async (opts, deps = {}) => {
|
|
|
927
962
|
return;
|
|
928
963
|
const install = deps.install ?? installRefreshScheduler;
|
|
929
964
|
const uninstall = deps.uninstall ?? uninstallRefreshScheduler;
|
|
965
|
+
if (opts.want && opts.trayManaged) {
|
|
966
|
+
if (opts.announcePrimary) {
|
|
967
|
+
heading("Automatic key refresh");
|
|
968
|
+
ok(" Managed by the Anyray Connect app — it triggers the ~30-min key refresh.");
|
|
969
|
+
}
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
930
972
|
if (opts.want) {
|
|
931
973
|
const svc = await install();
|
|
932
974
|
if (opts.announcePrimary) {
|
|
@@ -964,7 +1006,14 @@ export const reconcileRefreshScheduler = async (opts, deps = {}) => {
|
|
|
964
1006
|
ok(" Removed the automatic key-refresh schedule.");
|
|
965
1007
|
}
|
|
966
1008
|
};
|
|
967
|
-
const SUBCOMMANDS = new Set([
|
|
1009
|
+
const SUBCOMMANDS = new Set([
|
|
1010
|
+
"login",
|
|
1011
|
+
"wizard",
|
|
1012
|
+
"status",
|
|
1013
|
+
"doctor",
|
|
1014
|
+
"sync",
|
|
1015
|
+
"device-url",
|
|
1016
|
+
]);
|
|
968
1017
|
export const run = async (argv) => {
|
|
969
1018
|
// Hidden hook entrypoint: Claude Code invokes `anyray-connect __anyray-hook`
|
|
970
1019
|
// as a PostToolUse hook. It speaks the hook stdin/stdout JSON protocol, so it
|
|
@@ -1048,6 +1097,11 @@ export const run = async (argv) => {
|
|
|
1048
1097
|
// it just runs the gated refresh and exits 0.
|
|
1049
1098
|
if (argv[0] === "__anyray-refresh") {
|
|
1050
1099
|
await refreshIfDue();
|
|
1100
|
+
// RFC 0010 §6 P4: if the tray app that took over launch-at-login is gone
|
|
1101
|
+
// or no longer passes its signature check, put the LaunchAgents back and
|
|
1102
|
+
// clear the marker BEFORE the daemon reconcile below reads the profile.
|
|
1103
|
+
// With no marker set this is a single profile-field read. Never throws.
|
|
1104
|
+
await reconcileTrayPersistence();
|
|
1051
1105
|
await reconcileProxyService();
|
|
1052
1106
|
// Once per install: republish configs pinned to a since-pruned version path.
|
|
1053
1107
|
await repathManagedTools();
|
|
@@ -1067,6 +1121,15 @@ export const run = async (argv) => {
|
|
|
1067
1121
|
if (argv[0] === "__anyray-fallback-proxy") {
|
|
1068
1122
|
return runRefreshProxy();
|
|
1069
1123
|
}
|
|
1124
|
+
// Hidden machine entrypoint (RFC 0010 §6 P4): the SIGNED tray app adopts
|
|
1125
|
+
// (or releases) launch-at-login ownership of the background services. The
|
|
1126
|
+
// CLI does all the work — signature gate, LaunchAgent retire/restore,
|
|
1127
|
+
// profile marker; the app only shells this. stdout stays empty (machine
|
|
1128
|
+
// contract), so it dispatches before any human-facing logging or the
|
|
1129
|
+
// durable-runtime relaunch.
|
|
1130
|
+
if (argv[0] === "__anyray-persistence") {
|
|
1131
|
+
return runPersistenceCommand(argv.slice(1));
|
|
1132
|
+
}
|
|
1070
1133
|
// Hidden entrypoint: a quit-gated adapter spawns this DETACHED when its app
|
|
1071
1134
|
// was running at apply time. It waits for that app to quit, completes the
|
|
1072
1135
|
// queued operation through the normal adapter path, and exits. Silent +
|
|
@@ -1172,11 +1235,14 @@ export const run = async (argv) => {
|
|
|
1172
1235
|
json: parsed.json,
|
|
1173
1236
|
verify: parsed.verify,
|
|
1174
1237
|
noVerify: parsed.noVerify,
|
|
1238
|
+
quick: parsed.quick,
|
|
1175
1239
|
repair: parsed.repair,
|
|
1176
1240
|
securityReview: parsed.securityReview,
|
|
1177
1241
|
});
|
|
1178
1242
|
if (sub === "sync")
|
|
1179
1243
|
return runSync({ gateway: parsed.gateway });
|
|
1244
|
+
if (sub === "device-url")
|
|
1245
|
+
return runDeviceUrl();
|
|
1180
1246
|
// 'wizard' → apply flow with the wizard enabled.
|
|
1181
1247
|
return runApplyCommand(rest, true);
|
|
1182
1248
|
}
|
|
@@ -1766,6 +1832,22 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
1766
1832
|
const usingEnvironmentKey = Boolean(envClientKey && target.clientKey === envClientKey && !enrolledCert);
|
|
1767
1833
|
const hasRefreshableCert = !usingEnvironmentKey && Boolean(enrolledCert ?? profile.enrolledCert);
|
|
1768
1834
|
const wantRefreshScheduler = !args.revert && args.noKeyRefresh !== true && hasRefreshableCert;
|
|
1835
|
+
// RFC 0010 §6 P4: does a verified signed tray app own launch-at-login on
|
|
1836
|
+
// this machine? A real run heals a stale marker in place (tray gone or
|
|
1837
|
+
// unsigned → LaunchAgents reinstalled per the profile flags, marker
|
|
1838
|
+
// cleared) so everything below sees post-heal reality; a dry run only
|
|
1839
|
+
// reads. Cheap when no marker is set — one profile-field check.
|
|
1840
|
+
const trayStatus = args.dryRun
|
|
1841
|
+
? await checkTrayPersistence(profile)
|
|
1842
|
+
: await reconcileTrayPersistence();
|
|
1843
|
+
const trayManaged = trayStatus === "healthy";
|
|
1844
|
+
if (trayStatus === "healed") {
|
|
1845
|
+
// The self-heal just cleared the takeover marker ON DISK; scrub the
|
|
1846
|
+
// pre-run snapshot too — the profile write below spreads it, and a
|
|
1847
|
+
// stale `persistenceOwner` would resurrect the cleared marker.
|
|
1848
|
+
delete profile.persistenceOwner;
|
|
1849
|
+
delete profile.trayAppPath;
|
|
1850
|
+
}
|
|
1769
1851
|
let applyTarget = target;
|
|
1770
1852
|
const resolvedKeyRefreshEnabled = wantKeyRefresh || preserveKeyRefresh;
|
|
1771
1853
|
// Hold the port when the loopback is wanted now, or preserved for the tools
|
|
@@ -1838,7 +1920,9 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
1838
1920
|
}
|
|
1839
1921
|
}
|
|
1840
1922
|
if (wantKeyRefresh && !args.dryRun) {
|
|
1841
|
-
applyTarget = await setupLoopbackProxy(target, resolvedFallbackPort
|
|
1923
|
+
applyTarget = await setupLoopbackProxy(target, resolvedFallbackPort, {
|
|
1924
|
+
trayManaged,
|
|
1925
|
+
});
|
|
1842
1926
|
}
|
|
1843
1927
|
// Drop the enrollment credential FIRST, before a single config is unpicked —
|
|
1844
1928
|
// see util/persist `clearEnrollment` for why a revert that leaves it behind
|
|
@@ -1861,6 +1945,14 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
1861
1945
|
}
|
|
1862
1946
|
}
|
|
1863
1947
|
else {
|
|
1948
|
+
// Revoke the device-page token FIRST, while the enrollment credential
|
|
1949
|
+
// below still exists — the gateway DELETE is client-key-authed, so
|
|
1950
|
+
// once clearEnrollment runs nothing could authenticate it and the row
|
|
1951
|
+
// would stay live for up to 65 minutes after disconnect. Best-effort
|
|
1952
|
+
// (never throws); it removes the local raw-token file either way. A
|
|
1953
|
+
// scoped `--tools` revert deliberately keeps the token — the seat
|
|
1954
|
+
// stays enrolled for the tools it did not name.
|
|
1955
|
+
await revokeDeviceToken(profile);
|
|
1864
1956
|
try {
|
|
1865
1957
|
if (await clearEnrollment()) {
|
|
1866
1958
|
heading("Enrollment");
|
|
@@ -1885,7 +1977,25 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
1885
1977
|
}
|
|
1886
1978
|
// A named `--tools` list (the wizard writes its checklist here too) is the
|
|
1887
1979
|
// developer choosing these adapters by hand; the default sweep names none.
|
|
1888
|
-
|
|
1980
|
+
//
|
|
1981
|
+
// Fleet-locked tools (RFC 0010 §4.1): a SCOPED revert refuses an id the
|
|
1982
|
+
// admin pinned at the `locked` tier — the admin owns its routing (checked
|
|
1983
|
+
// against the profile's cached fleet policy, so it works offline). A FULL
|
|
1984
|
+
// revert is untouched: it clears the enrollment and takes the machine out
|
|
1985
|
+
// of the fleet entirely (offboarding outranks a lock), and a later
|
|
1986
|
+
// re-enroll re-applies the policy anyway.
|
|
1987
|
+
let applyAdapters = adapters;
|
|
1988
|
+
if (args.revert && !fullRevert) {
|
|
1989
|
+
const locked = adapters.filter((a) => isFleetLockedTool(profile, a.id));
|
|
1990
|
+
if (locked.length > 0) {
|
|
1991
|
+
heading("Fleet policy");
|
|
1992
|
+
for (const adapter of locked) {
|
|
1993
|
+
warn(` ${adapter.id}: locked by your admin's fleet policy — leaving it configured. Ask an admin to change the tool's tier.`);
|
|
1994
|
+
}
|
|
1995
|
+
applyAdapters = adapters.filter((a) => !isFleetLockedTool(profile, a.id));
|
|
1996
|
+
}
|
|
1997
|
+
}
|
|
1998
|
+
const { changes, manual, results } = await runApply(applyAdapters, applyTarget, opts, args.revert, new Set(args.tools ?? []));
|
|
1889
1999
|
// Keep the managed-tool record in step: apply records landed tools, revert
|
|
1890
2000
|
// removes them, a full revert clears the record. Drift repair (`doctor
|
|
1891
2001
|
// --repair`, the detached refresh) only ever re-applies recorded ids, so
|
|
@@ -1927,6 +2037,7 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
1927
2037
|
scopedRevert: Boolean(args.revert) && !fullRevert,
|
|
1928
2038
|
dryRun: Boolean(args.dryRun),
|
|
1929
2039
|
wasEnabled: Boolean(profile.refreshSchedulerEnabled),
|
|
2040
|
+
trayManaged,
|
|
1930
2041
|
});
|
|
1931
2042
|
// Reopen here on the happy path so it reads in the right order, before the
|
|
1932
2043
|
// summary. `reopenClosed` clears its list, so the `finally` below is a
|