anyray-connect 0.11.49 → 0.11.53

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 (37) hide show
  1. package/dist/assets/vscodeExtensionAsset.js +5 -5
  2. package/dist/assets/vscodeExtensionAsset.js.map +1 -1
  3. package/dist/cli.js +7 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/fallbackProxy.js +11 -6
  6. package/dist/commands/fallbackProxy.js.map +1 -1
  7. package/dist/commands/login.js +268 -0
  8. package/dist/commands/login.js.map +1 -0
  9. package/dist/commands/managed.js +6 -1
  10. package/dist/commands/managed.js.map +1 -1
  11. package/dist/commands/ssoGate.js +3 -28
  12. package/dist/commands/ssoGate.js.map +1 -1
  13. package/dist/commands/sync.js +39 -28
  14. package/dist/commands/sync.js.map +1 -1
  15. package/dist/tools/copilotChat.js +33 -7
  16. package/dist/tools/copilotChat.js.map +1 -1
  17. package/dist/tools/cursor.js +36 -7
  18. package/dist/tools/cursor.js.map +1 -1
  19. package/dist/tools/shellEnv.js +19 -0
  20. package/dist/tools/shellEnv.js.map +1 -1
  21. package/dist/util/devRefresh.js +23 -1
  22. package/dist/util/devRefresh.js.map +1 -1
  23. package/dist/util/durableRuntime.js +18 -0
  24. package/dist/util/durableRuntime.js.map +1 -1
  25. package/dist/util/fallback.js +16 -8
  26. package/dist/util/fallback.js.map +1 -1
  27. package/dist/util/jsonc.js +74 -0
  28. package/dist/util/jsonc.js.map +1 -0
  29. package/dist/util/log.js +18 -11
  30. package/dist/util/log.js.map +1 -1
  31. package/dist/util/openBrowser.js +25 -0
  32. package/dist/util/openBrowser.js.map +1 -0
  33. package/dist/util/policySync.js +156 -39
  34. package/dist/util/policySync.js.map +1 -1
  35. package/dist/util/proxyEnrollmentGate.js +30 -7
  36. package/dist/util/proxyEnrollmentGate.js.map +1 -1
  37. package/package.json +7 -4
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Team skills/policy sync (client side).
2
+ * Team policy sync and reconciliation (client side).
3
3
  *
4
4
  * `anyray-connect sync` pulls the org's shared skills/instructions from the
5
5
  * gateway and writes them as `SKILL.md` files into each supported coding tool's
@@ -9,25 +9,66 @@
9
9
  * fine and does not touch the privacy invariant.
10
10
  *
11
11
  * Contract (gateway-side): `GET <gatewayUrl>/connect/policy` with header
12
- * `x-anyray-api-key: <personal key or placeholder>` → 200
13
- * { "skills": [ { "id", "name", "version", "body" } ], "updatedAt": "ISO" }
12
+ * `x-anyray-api-key: <personal key>` returns versioned metadata/config: shared
13
+ * skills plus optional routing origin, bound team, and enabled tool ids. A
14
+ * skills-only document without `version` is the legacy v0 shape.
14
15
  *
15
16
  * On a non-200 or a network error we fail gracefully with a clear message
16
17
  * (never crash). The last-synced version per skill is tracked in ~/.anyray so
17
18
  * re-runs only rewrite files whose `version` changed.
18
19
  */
19
- import { mkdir, writeFile } from 'node:fs/promises';
20
- import { join } from 'node:path';
20
+ import { mkdir, writeFile } from "node:fs/promises";
21
+ import { join } from "node:path";
22
+ import { z } from "zod";
23
+ import { REGISTRY } from "../tools/index.js";
24
+ import { resolveOrigin } from "../target.js";
25
+ import { loadProfile, saveProfile } from "./persist.js";
26
+ import { targetFromProfile } from "./profileTarget.js";
27
+ import { findDriftedManagedTools, repairSucceeded, repairTools, } from "./repair.js";
21
28
  const POLICY_TIMEOUT_MS = 10_000;
22
- const optionalString = (value) => typeof value === 'string' && value.trim() ? value.trim() : undefined;
29
+ export const TEAM_POLICY_VERSION = 1;
30
+ const safeSkillId = z
31
+ .string()
32
+ .min(1)
33
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/)
34
+ .refine((id) => id !== "." && id !== "..");
35
+ const policySkillSchema = z.object({
36
+ id: safeSkillId,
37
+ name: z.string().min(1),
38
+ version: z.string().min(1),
39
+ /** Markdown body of the skill — team policy text, content-free. */
40
+ body: z.string(),
41
+ });
23
42
  /**
24
- * A skill `id` becomes a directory name (`<skillsDir>/<id>/SKILL.md`). The
25
- * gateway only validates it as non-empty, so a malicious or mistyped id like
26
- * `../../evil` would escape the skills dir and write SKILL.md anywhere. Restrict
27
- * it to a single safe path segment: a leading alphanumeric, then alphanumerics,
28
- * `.`, `_`, `-` — which excludes `/`, `\`, `..`, and absolute paths.
43
+ * The consume-side policy boundary. Zod objects strip unknown keys, so future
44
+ * additive fields are ignored. Every v1 field is optional; the shared-skills
45
+ * array is the legacy core, and absence of `version` means a v0 document.
29
46
  */
30
- const isSafeSkillId = (id) => /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(id) && id !== '.' && id !== '..';
47
+ export const teamPolicySchema = z.object({
48
+ version: z.literal(TEAM_POLICY_VERSION).optional(),
49
+ skills: z.array(policySkillSchema),
50
+ updatedAt: z.string().min(1).optional(),
51
+ routing: z
52
+ .object({
53
+ origin: z.string().min(1),
54
+ })
55
+ .optional(),
56
+ team: z.string().min(1).optional(),
57
+ tools: z
58
+ .object({
59
+ enabled: z.array(z.string().min(1)),
60
+ })
61
+ .optional(),
62
+ });
63
+ /** A skill id becomes a directory name, so it must be one safe path segment. */
64
+ const isSafeSkillId = (id) => /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(id) && id !== "." && id !== "..";
65
+ /** Safe label for parse/fetch failures; never includes response bodies. */
66
+ export const policyErrorName = (error) => error &&
67
+ typeof error === "object" &&
68
+ "name" in error &&
69
+ typeof error.name === "string"
70
+ ? error.name
71
+ : "Error";
31
72
  /**
32
73
  * Fetch the team policy from the gateway. Throws an Error with a clear,
33
74
  * content-free message on non-200 or network failure — callers catch it and
@@ -41,13 +82,13 @@ export const fetchTeamPolicy = async (gatewayUrl, apiKey, opts = {}) => {
41
82
  let res;
42
83
  try {
43
84
  res = await fetch(url, {
44
- method: 'GET',
45
- headers: { 'x-anyray-api-key': apiKey },
85
+ method: "GET",
86
+ headers: { "x-anyray-api-key": apiKey },
46
87
  signal: controller.signal,
47
88
  });
48
89
  }
49
90
  catch (error) {
50
- const reason = error instanceof Error && error.name === 'AbortError'
91
+ const reason = error instanceof Error && error.name === "AbortError"
51
92
  ? `no response within ${timeoutMs}ms`
52
93
  : error instanceof Error
53
94
  ? error.message
@@ -62,30 +103,106 @@ export const fetchTeamPolicy = async (gatewayUrl, apiKey, opts = {}) => {
62
103
  }
63
104
  let body;
64
105
  try {
65
- body = (await res.json());
106
+ body = await res.json();
66
107
  }
67
- catch {
68
- throw new Error('team policy fetch failed: the gateway returned a malformed response');
108
+ catch (error) {
109
+ const malformed = new Error("team policy fetch failed: the gateway returned a malformed response");
110
+ malformed.name = policyErrorName(error);
111
+ throw malformed;
69
112
  }
70
- const rawSkills = Array.isArray(body.skills) ? body.skills : [];
71
- const skills = [];
72
- for (const raw of rawSkills) {
73
- const entry = raw;
74
- const id = optionalString(entry?.id);
75
- const version = optionalString(entry?.version);
76
- // Skip entries that can't be keyed/diffed; an id+version are required for
77
- // the SKILL.md path and the version diff. Reject ids that aren't a safe path
78
- // segment — they'd let a hostile policy write outside the skills dir.
79
- if (!id || !version || !isSafeSkillId(id))
80
- continue;
81
- skills.push({
82
- id,
83
- name: optionalString(entry?.name) ?? id,
84
- version,
85
- body: typeof entry?.body === 'string' ? entry.body : '',
86
- });
113
+ return teamPolicySchema.parse(body);
114
+ };
115
+ /**
116
+ * Reconcile the server-owned fleet fields into the local profile and installed
117
+ * tools. The tool policy is strictly enable-only AND revert-safe: it only ever
118
+ * re-points tools already recorded in `managedTools`. An enabled id that is not
119
+ * managed — never enrolled, or intentionally reverted — is never applied or
120
+ * recorded, so a fleet policy can never resurrect a tool the developer reverted
121
+ * (the #1031 rule the drift path also enforces). A routing/team change re-points
122
+ * every managed tool; otherwise only managed tools that have drifted off the
123
+ * origin are re-applied, so a steady-state reconcile is a no-op.
124
+ */
125
+ export const reconcileFleetPolicy = async (policy, deps = {}) => {
126
+ const load = deps.loadProfile ?? loadProfile;
127
+ const save = deps.saveProfile ?? saveProfile;
128
+ const buildTarget = deps.targetFromProfile ?? targetFromProfile;
129
+ const adapters = deps.adapters ?? REGISTRY;
130
+ const applyTools = deps.repairTools ?? repairTools;
131
+ const profile = await load();
132
+ let next = { ...profile };
133
+ let routingUpdated = false;
134
+ let teamUpdated = false;
135
+ if (policy.routing?.origin) {
136
+ const origin = resolveOrigin(policy.routing.origin);
137
+ if (origin !== profile.gateway) {
138
+ next.gateway = origin;
139
+ routingUpdated = true;
140
+ }
141
+ }
142
+ if (policy.team && policy.team !== profile.team) {
143
+ next.team = policy.team;
144
+ teamUpdated = true;
145
+ }
146
+ if (routingUpdated || teamUpdated) {
147
+ // Merge onto the freshest credential/profile snapshot so a key refresh
148
+ // that completed during policy parsing is not rolled back.
149
+ next = { ...(await load()) };
150
+ if (routingUpdated)
151
+ next.gateway = resolveOrigin(policy.routing.origin);
152
+ if (teamUpdated)
153
+ next.team = policy.team;
154
+ await save(next);
155
+ }
156
+ // Only tools already recorded in `managedTools` may be touched. An enabled id
157
+ // absent from the record was never enrolled or was intentionally reverted, and
158
+ // must never be resurrected here — the same #1031 revert-stickiness guarantee
159
+ // the drift path enforces. Enabled ids keep their (already-managed) tool
160
+ // pointed; a routing/team change re-points every managed tool.
161
+ const enabled = new Set(policy.tools?.enabled ?? []);
162
+ const managedIds = next.managedTools ?? [];
163
+ const candidateIds = managedIds.filter((id) => enabled.has(id) || routingUpdated || teamUpdated);
164
+ let toolsRequested = 0;
165
+ let toolsApplied = 0;
166
+ if (candidateIds.length > 0) {
167
+ const resolved = await buildTarget(async () => next);
168
+ if (resolved) {
169
+ // A team-only change is invisible to `pointsAt` (same origin), so when
170
+ // routing or team changed we re-point every installed candidate.
171
+ // Otherwise re-apply only the candidates that have actually drifted off
172
+ // the origin, so a steady-state reconcile applies nothing (idempotent).
173
+ let toApply;
174
+ if (routingUpdated || teamUpdated) {
175
+ const candidate = new Set(candidateIds);
176
+ toApply = [];
177
+ for (const adapter of adapters) {
178
+ if (!candidate.has(adapter.id))
179
+ continue;
180
+ try {
181
+ if ((await adapter.detect()).installed)
182
+ toApply.push(adapter);
183
+ }
184
+ catch {
185
+ // An unreadable/uninstalled tool is not changed.
186
+ }
187
+ }
188
+ }
189
+ else {
190
+ toApply = await findDriftedManagedTools(candidateIds, resolved.toolOrigin, adapters);
191
+ }
192
+ toolsRequested = toApply.length;
193
+ if (toApply.length > 0) {
194
+ const results = await applyTools(toApply, resolved.target);
195
+ toolsApplied = results.filter(repairSucceeded).length;
196
+ }
197
+ }
87
198
  }
88
- return { skills, updatedAt: optionalString(body.updatedAt) };
199
+ return {
200
+ routingUpdated,
201
+ teamUpdated,
202
+ toolsRequested,
203
+ toolsApplied,
204
+ profileUpdated: routingUpdated || teamUpdated,
205
+ };
89
206
  };
90
207
  /**
91
208
  * Diff the fetched policy against the previously synced versions and write
@@ -121,11 +238,11 @@ export const syncPolicyToDirs = async (policy, skillsDirs, previousVersions) =>
121
238
  const files = [];
122
239
  for (const dir of skillsDirs) {
123
240
  const skillDir = join(dir, skill.id);
124
- const file = join(skillDir, 'SKILL.md');
241
+ const file = join(skillDir, "SKILL.md");
125
242
  await mkdir(skillDir, { recursive: true });
126
243
  // Skill bodies are team policy text (content-free); persisting them is
127
244
  // intended. A trailing newline keeps the files diff-friendly.
128
- await writeFile(file, ensureTrailingNewline(skill.body), 'utf-8');
245
+ await writeFile(file, ensureTrailingNewline(skill.body), "utf-8");
129
246
  files.push(file);
130
247
  }
131
248
  changed += 1;
@@ -139,5 +256,5 @@ export const syncPolicyToDirs = async (policy, skillsDirs, previousVersions) =>
139
256
  }
140
257
  return { results, changed, unchanged, versions, updatedAt: policy.updatedAt };
141
258
  };
142
- const ensureTrailingNewline = (body) => body.endsWith('\n') ? body : `${body}\n`;
259
+ const ensureTrailingNewline = (body) => body.endsWith("\n") ? body : `${body}\n`;
143
260
  //# sourceMappingURL=policySync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policySync.js","sourceRoot":"","sources":["../../src/util/policySync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policySync.js","sourceRoot":"","sources":["../../src/util/policySync.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,10 @@ import { runSsoGate } from '../commands/ssoGate.js';
30
30
  const GATE_ATTEMPT_MIN_GAP_MS = 60_000;
31
31
  /** Re-notify the SAME pending grant at most this often. */
32
32
  const RENOTIFY_MIN_GAP_MS = 10 * 60_000;
33
+ const headerValue = (headers, name) => {
34
+ const raw = headers[name];
35
+ return typeof raw === 'string' ? raw : Array.isArray(raw) ? raw[0] : undefined;
36
+ };
33
37
  /**
34
38
  * Mirror of the gateway's token-source order (`tokenFrom` in
35
39
  * clientKeyAuth): x-anyray-api-key, an Authorization Bearer, or an `ark_`
@@ -38,16 +42,35 @@ const RENOTIFY_MIN_GAP_MS = 10 * 60_000;
38
42
  * and firing on someone else's presented credential would be noise.
39
43
  */
40
44
  export const inboundPresentsToken = (headers) => {
41
- const value = (name) => {
42
- const raw = headers[name];
43
- return typeof raw === 'string' ? raw : Array.isArray(raw) ? raw[0] : undefined;
44
- };
45
- if (value('x-anyray-api-key')?.trim())
45
+ if (headerValue(headers, 'x-anyray-api-key')?.trim())
46
46
  return true;
47
- const auth = value('authorization')?.trim() ?? '';
47
+ const auth = headerValue(headers, 'authorization')?.trim() ?? '';
48
48
  if (/^bearer\s+\S+/i.test(auth))
49
49
  return true;
50
- const xApiKey = value('x-api-key')?.trim() ?? '';
50
+ const xApiKey = headerValue(headers, 'x-api-key')?.trim() ?? '';
51
+ return xApiKey.startsWith('ark_');
52
+ };
53
+ /**
54
+ * Narrower sibling of inboundPresentsToken for the key-INJECTION decision: does
55
+ * the request already carry a CLIENT KEY (an `ark_` gateway key)? The only
56
+ * difference is the Authorization Bearer: a bare bearer is a client key ONLY
57
+ * when it's an `ark_` token. A subscription/provider OAuth bearer (passthrough
58
+ * mode — the seat token the gateway forwards upstream) is NOT a client key; it
59
+ * lives in a different slot than the `x-anyray-api-key` the gateway reads for
60
+ * client-key identity. So when only a seat OAuth is present the daemon may
61
+ * inject the enrolled per-user key into the empty client-key slot without
62
+ * overriding anything the caller presented — which lets a passthrough tool pick
63
+ * up a freshly re-minted key mid-session with no restart. The brute-force /
64
+ * enrollment gate above still uses the broader inboundPresentsToken (a seat
65
+ * OAuth means "has a credential, don't nag to enroll").
66
+ */
67
+ export const inboundPresentsClientKey = (headers) => {
68
+ if (headerValue(headers, 'x-anyray-api-key')?.trim())
69
+ return true;
70
+ const auth = headerValue(headers, 'authorization')?.trim() ?? '';
71
+ if (/^bearer\s+ark_\S+/i.test(auth))
72
+ return true;
73
+ const xApiKey = headerValue(headers, 'x-api-key')?.trim() ?? '';
51
74
  return xApiKey.startsWith('ark_');
52
75
  };
53
76
  /** The gateway's clientKeyAuth guard surface: /v1/ paths only. */
@@ -1 +1 @@
1
- {"version":3,"file":"proxyEnrollmentGate.js","sourceRoot":"","sources":["../../src/util/proxyEnrollmentGate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxyEnrollmentGate.js","sourceRoot":"","sources":["../../src/util/proxyEnrollmentGate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anyray-connect",
3
- "version": "0.11.49",
3
+ "version": "0.11.53",
4
4
  "description": "Anyray connect — points local coding tools (Claude Code, Cursor, Windsurf, SDKs) at the Anyray gateway through supported configuration and enrolled personal authentication.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,6 +25,9 @@
25
25
  "engines": {
26
26
  "node": ">=24"
27
27
  },
28
+ "dependencies": {
29
+ "zod": "4.4.3"
30
+ },
28
31
  "files": [
29
32
  "dist/",
30
33
  "README.md"
@@ -39,8 +42,8 @@
39
42
  "prepublishOnly": "npm run build && npm test"
40
43
  },
41
44
  "devDependencies": {
42
- "@types/node": "26.1.0",
43
- "tsx": "4.23.0",
44
- "typescript": "6.0.3"
45
+ "@types/node": "26.1.1",
46
+ "tsx": "4.23.1",
47
+ "typescript": "7.0.2"
45
48
  }
46
49
  }