@claudexor/cli 3.23.2 → 3.25.1

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 (118) hide show
  1. package/dist/account-management.d.ts +17 -0
  2. package/dist/account-management.d.ts.map +1 -0
  3. package/dist/account-management.js +35 -0
  4. package/dist/account-management.js.map +1 -0
  5. package/dist/account-observations.d.ts +7 -3
  6. package/dist/account-observations.d.ts.map +1 -1
  7. package/dist/account-observations.js +16 -4
  8. package/dist/account-observations.js.map +1 -1
  9. package/dist/account-reset-command.d.ts +3 -0
  10. package/dist/account-reset-command.d.ts.map +1 -0
  11. package/dist/account-reset-command.js +32 -0
  12. package/dist/account-reset-command.js.map +1 -0
  13. package/dist/account-reset-services.d.ts +341 -0
  14. package/dist/account-reset-services.d.ts.map +1 -0
  15. package/dist/account-reset-services.js +183 -0
  16. package/dist/account-reset-services.js.map +1 -0
  17. package/dist/account-resource-query.d.ts +18 -0
  18. package/dist/account-resource-query.d.ts.map +1 -0
  19. package/dist/account-resource-query.js +62 -0
  20. package/dist/account-resource-query.js.map +1 -0
  21. package/dist/accounts-services.d.ts +1 -0
  22. package/dist/accounts-services.d.ts.map +1 -1
  23. package/dist/accounts-services.js +4 -2
  24. package/dist/accounts-services.js.map +1 -1
  25. package/dist/claude-account-resources.d.ts +5 -0
  26. package/dist/claude-account-resources.d.ts.map +1 -0
  27. package/dist/claude-account-resources.js +134 -0
  28. package/dist/claude-account-resources.js.map +1 -0
  29. package/dist/claude-oauth-codec.d.ts +4 -0
  30. package/dist/claude-oauth-codec.d.ts.map +1 -0
  31. package/dist/claude-oauth-codec.js +71 -0
  32. package/dist/claude-oauth-codec.js.map +1 -0
  33. package/dist/claude-oauth-credential.d.ts +6 -0
  34. package/dist/claude-oauth-credential.d.ts.map +1 -1
  35. package/dist/claude-oauth-credential.js +18 -0
  36. package/dist/claude-oauth-credential.js.map +1 -1
  37. package/dist/claude-oauth-fetch.d.ts +1 -1
  38. package/dist/claude-oauth-fetch.d.ts.map +1 -1
  39. package/dist/claude-oauth-fetch.js +3 -2
  40. package/dist/claude-oauth-fetch.js.map +1 -1
  41. package/dist/claude-oauth-usage.d.ts +5 -4
  42. package/dist/claude-oauth-usage.d.ts.map +1 -1
  43. package/dist/claude-oauth-usage.js +47 -75
  44. package/dist/claude-oauth-usage.js.map +1 -1
  45. package/dist/claude-resource-source.d.ts +18 -0
  46. package/dist/claude-resource-source.d.ts.map +1 -0
  47. package/dist/claude-resource-source.js +108 -0
  48. package/dist/claude-resource-source.js.map +1 -0
  49. package/dist/claude-resource-transport.d.ts +12 -0
  50. package/dist/claude-resource-transport.d.ts.map +1 -0
  51. package/dist/claude-resource-transport.js +47 -0
  52. package/dist/claude-resource-transport.js.map +1 -0
  53. package/dist/claudexord.d.ts.map +1 -1
  54. package/dist/claudexord.js +10 -4
  55. package/dist/claudexord.js.map +1 -1
  56. package/dist/cli.js +3 -0
  57. package/dist/cli.js.map +1 -1
  58. package/dist/codex-quota-source.d.ts +7 -2
  59. package/dist/codex-quota-source.d.ts.map +1 -1
  60. package/dist/codex-quota-source.js +72 -12
  61. package/dist/codex-quota-source.js.map +1 -1
  62. package/dist/command-flags.d.ts.map +1 -1
  63. package/dist/command-flags.js +7 -0
  64. package/dist/command-flags.js.map +1 -1
  65. package/dist/control-services.d.ts +264 -118
  66. package/dist/control-services.d.ts.map +1 -1
  67. package/dist/harness-command-specs.d.ts.map +1 -1
  68. package/dist/harness-command-specs.js +11 -4
  69. package/dist/harness-command-specs.js.map +1 -1
  70. package/dist/harness-command.d.ts.map +1 -1
  71. package/dist/harness-command.js +5 -0
  72. package/dist/harness-command.js.map +1 -1
  73. package/dist/harness-install-proof.d.ts +9 -0
  74. package/dist/harness-install-proof.d.ts.map +1 -1
  75. package/dist/harness-install-proof.js +60 -8
  76. package/dist/harness-install-proof.js.map +1 -1
  77. package/dist/harness-install-recipes.d.ts +24 -1
  78. package/dist/harness-install-recipes.d.ts.map +1 -1
  79. package/dist/harness-install-recipes.js +54 -2
  80. package/dist/harness-install-recipes.js.map +1 -1
  81. package/dist/harness-install-runtime.d.ts +29 -0
  82. package/dist/harness-install-runtime.d.ts.map +1 -0
  83. package/dist/harness-install-runtime.js +51 -0
  84. package/dist/harness-install-runtime.js.map +1 -0
  85. package/dist/harness-installer.d.ts +19 -65
  86. package/dist/harness-installer.d.ts.map +1 -1
  87. package/dist/harness-installer.js +46 -48
  88. package/dist/harness-installer.js.map +1 -1
  89. package/dist/harness-maintenance-service.d.ts +473 -0
  90. package/dist/harness-maintenance-service.d.ts.map +1 -0
  91. package/dist/harness-maintenance-service.js +429 -0
  92. package/dist/harness-maintenance-service.js.map +1 -0
  93. package/dist/harness-maintenance.d.ts +62 -0
  94. package/dist/harness-maintenance.d.ts.map +1 -0
  95. package/dist/harness-maintenance.js +353 -0
  96. package/dist/harness-maintenance.js.map +1 -0
  97. package/dist/mcp-runner.d.ts.map +1 -1
  98. package/dist/mcp-runner.js +5 -0
  99. package/dist/mcp-runner.js.map +1 -1
  100. package/dist/model-services.d.ts +9 -1
  101. package/dist/model-services.d.ts.map +1 -1
  102. package/dist/model-services.js +39 -10
  103. package/dist/model-services.js.map +1 -1
  104. package/dist/ops-command-specs.d.ts.map +1 -1
  105. package/dist/ops-command-specs.js +11 -2
  106. package/dist/ops-command-specs.js.map +1 -1
  107. package/dist/quota-command.d.ts.map +1 -1
  108. package/dist/quota-command.js +38 -2
  109. package/dist/quota-command.js.map +1 -1
  110. package/dist/quota-refreshers.d.ts +3 -1
  111. package/dist/quota-refreshers.d.ts.map +1 -1
  112. package/dist/quota-refreshers.js +6 -2
  113. package/dist/quota-refreshers.js.map +1 -1
  114. package/dist/quota-services.d.ts +234 -2
  115. package/dist/quota-services.d.ts.map +1 -1
  116. package/dist/quota-services.js +49 -4
  117. package/dist/quota-services.js.map +1 -1
  118. package/package.json +25 -25
@@ -5,6 +5,41 @@ const VERSION_PROBE_MAX_BYTES = 1024 * 1024;
5
5
  const VERSION_PROBE_TIMEOUT_MS = 10_000;
6
6
  const SCRIPT_VENDOR_VERSION_MAX_CHARS = 256;
7
7
  const SEMVER_TOKEN = /(?:^|[^0-9A-Za-z.+-])(\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)(?=$|[^0-9A-Za-z.+-])/g;
8
+ /** One exact registry version (no ranges, tags or `v` prefix). */
9
+ export const EXACT_VENDOR_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
10
+ /** SemVer precedence of two exact versions: negative when `a` is older. Build
11
+ * metadata is ignored; a prerelease precedes its release. */
12
+ export function compareVendorVersions(a, b) {
13
+ const split = (value) => {
14
+ const [core = "", pre] = value.split("+", 1)[0].split(/-(.*)/s, 2);
15
+ return { core: core.split(".").map(Number), pre: pre ? pre.split(".") : [] };
16
+ };
17
+ const left = split(a);
18
+ const right = split(b);
19
+ for (let index = 0; index < 3; index += 1) {
20
+ const delta = (left.core[index] ?? 0) - (right.core[index] ?? 0);
21
+ if (delta !== 0)
22
+ return delta;
23
+ }
24
+ if (!left.pre.length || !right.pre.length)
25
+ return right.pre.length - left.pre.length;
26
+ for (let index = 0; index < Math.max(left.pre.length, right.pre.length); index += 1) {
27
+ const l = left.pre[index];
28
+ const r = right.pre[index];
29
+ if (l === undefined || r === undefined)
30
+ return l === undefined ? -1 : 1;
31
+ if (l === r)
32
+ continue;
33
+ const ln = /^\d+$/.test(l);
34
+ const rn = /^\d+$/.test(r);
35
+ if (ln && rn)
36
+ return Number(l) - Number(r);
37
+ if (ln !== rn)
38
+ return ln ? -1 : 1;
39
+ return l < r ? -1 : 1;
40
+ }
41
+ return 0;
42
+ }
8
43
  function isStrictlyContained(root, candidate) {
9
44
  const remainder = relative(root, candidate);
10
45
  return (remainder !== "" &&
@@ -17,7 +52,7 @@ function outputText(value) {
17
52
  return value;
18
53
  return Buffer.isBuffer(value) ? value.toString("utf8") : "";
19
54
  }
20
- function exactSemverTokens(value) {
55
+ export function exactSemverTokens(value) {
21
56
  return [...value.matchAll(SEMVER_TOKEN)].map((match) => match[1] ?? "");
22
57
  }
23
58
  function proveVersion(installedBinary, runtime, expectedVersion, launcher = installedBinary) {
@@ -64,15 +99,15 @@ function proveVersion(installedBinary, runtime, expectedVersion, launcher = inst
64
99
  proof: { installedBinary: absoluteBinary, installedVersion: reportedVersion },
65
100
  };
66
101
  }
67
- /** Prove an exact npm package and its target-owned launcher, then execute the
68
- * absolute launcher for a matching version receipt. */
69
- export function proveInstalledNpm(spec, runtime) {
70
- const packageRoot = join(npmGlobalPackagesDir(spec.vendorRoot, runtime.platform), ...spec.npmPackage.split("/"));
102
+ /** The package manifest a managed npm prefix holds for one exact package,
103
+ * read through the same containment rules the proof uses. */
104
+ function readManagedNpmPackage(vendorRoot, npmPackage, platform) {
105
+ const packageRoot = join(npmGlobalPackagesDir(vendorRoot, platform), ...npmPackage.split("/"));
71
106
  let canonicalRoot;
72
107
  let canonicalPackageRoot;
73
108
  let canonicalPackageJson;
74
109
  try {
75
- canonicalRoot = realpathSync(spec.vendorRoot);
110
+ canonicalRoot = realpathSync(vendorRoot);
76
111
  canonicalPackageRoot = realpathSync(packageRoot);
77
112
  canonicalPackageJson = realpathSync(join(packageRoot, "package.json"));
78
113
  }
@@ -85,14 +120,31 @@ export function proveInstalledNpm(spec, runtime) {
85
120
  if (!isStrictlyContained(canonicalPackageRoot, canonicalPackageJson)) {
86
121
  return { ok: false, reason: "the npm package manifest escapes the exact package root" };
87
122
  }
88
- let packageVersion = null;
89
123
  try {
90
124
  const parsed = JSON.parse(readFileSync(canonicalPackageJson, "utf8"));
91
- packageVersion = typeof parsed.version === "string" ? parsed.version : null;
125
+ return {
126
+ ok: true,
127
+ canonicalRoot,
128
+ version: typeof parsed.version === "string" ? parsed.version : null,
129
+ };
92
130
  }
93
131
  catch {
94
132
  return { ok: false, reason: "the exact npm package manifest is unreadable" };
95
133
  }
134
+ }
135
+ /** The managed copy's declared package version, or null when there is none.
136
+ * A declaration only: `proveInstalledNpm` is what proves it runs. */
137
+ export function managedNpmPackageVersion(vendorRoot, npmPackage, platform) {
138
+ const read = readManagedNpmPackage(vendorRoot, npmPackage, platform);
139
+ return read.ok ? read.version : null;
140
+ }
141
+ /** Prove an exact npm package and its target-owned launcher, then execute the
142
+ * absolute launcher for a matching version receipt. */
143
+ export function proveInstalledNpm(spec, runtime) {
144
+ const manifest = readManagedNpmPackage(spec.vendorRoot, spec.npmPackage, runtime.platform);
145
+ if (!manifest.ok)
146
+ return manifest;
147
+ const { canonicalRoot, version: packageVersion } = manifest;
96
148
  if (packageVersion !== spec.expectedVersion) {
97
149
  return {
98
150
  ok: false,
@@ -1 +1 @@
1
- {"version":3,"file":"harness-install-proof.js","sourceRoot":"","sources":["../src/harness-install-proof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-install-proof.js","sourceRoot":"","sources":["../src/harness-install-proof.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,26 @@ type ScriptInstaller = (typeof SCRIPT_INSTALLERS)[keyof typeof SCRIPT_INSTALLERS
61
61
  /** Membership is asked of the TABLE, never re-typed: a third script vendor is
62
62
  * one row, and cannot be added to the table yet fall through here. */
63
63
  export declare function scriptInstaller(harness: InstallableHarness): ScriptInstaller | null;
64
+ /** The explicit binary override each adapter honours verbatim. A set override
65
+ * means the harness runs THAT program, so maintaining the managed copy would
66
+ * change nothing the harness executes. */
67
+ export declare const HARNESS_BINARY_OVERRIDE_ENV: Record<InstallableHarness, string>;
68
+ export declare function selectedHarnessCommand(harness: InstallableHarness, env: NodeJS.ProcessEnv, resolve: (bin: string) => string | null): string;
69
+ /** How an installed vendor CLI can be maintained. `managed_npm` installs one
70
+ * exact registry version in place; `vendor_updater` runs the vendor's own
71
+ * `update` on the launcher that updater rewrites (it resolves latest itself,
72
+ * so no exact/previous/baseline target exists); `vendor_script` has none. */
73
+ export type HarnessMaintenanceMechanism = "managed_npm" | "vendor_updater" | "vendor_script";
74
+ export type HarnessMaintenanceTargetKind = "latest" | "version" | "previous" | "baseline";
75
+ export interface HarnessMaintenanceRecipe {
76
+ mechanism: HarnessMaintenanceMechanism;
77
+ /** Targets the mechanism can install. Empty = inspection only. */
78
+ targets: readonly HarnessMaintenanceTargetKind[];
79
+ /** vendor_updater: the launchers the vendor's updater rewrites under the
80
+ * installation HOME. A copied or version-pinned launcher is NOT among them. */
81
+ launchers: (home: string) => string[];
82
+ }
83
+ export declare function harnessMaintenanceRecipe(harness: InstallableHarness, platform?: NodeJS.Platform): HarnessMaintenanceRecipe;
64
84
  export interface HarnessInstallerDisclosure {
65
85
  harness: InstallableHarness;
66
86
  /** Which prefix this disclosure describes; echoed into every receipt. */
@@ -76,6 +96,9 @@ export interface HarnessInstallerDisclosure {
76
96
  * exact vendor version was exercised by this release's freshness gates. */
77
97
  verification: HarnessInstallVerification;
78
98
  }
79
- export declare function harnessInstallerDisclosure(harness: InstallableHarness, target?: HarnessInstallTarget, platform?: NodeJS.Platform, _arch?: string): HarnessInstallerDisclosure;
99
+ export declare function harnessInstallerDisclosure(harness: InstallableHarness, target?: HarnessInstallTarget, platform?: NodeJS.Platform, _arch?: string,
100
+ /** Explicit exact maintenance target; omitted installs the release pin. The
101
+ * pin stays reported as `pinnedVersion` either way. */
102
+ version?: string): HarnessInstallerDisclosure;
80
103
  export {};
81
104
  //# sourceMappingURL=harness-install-recipes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-install-recipes.d.ts","sourceRoot":"","sources":["../src/harness-install-recipes.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAED;;yDAEyD;AACzD,eAAO,MAAM,uBAAuB,YAAI,OAAO,EAAE,QAAQ,CAAU,CAAC;AACpE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAEnF;AAED,uEAAuE;AACvE,eAAO,MAAM,cAAc,EAAE,MAAM,CACjC,oBAAoB,EACpB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAOpD,CAAC;AAEF;;;;;;aAMa;AACb,MAAM,MAAM,0BAA0B,GAClC,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB;AAClB;;qDAEqD;GACnD,qBAAqB,CAAC;AAE1B,eAAO,MAAM,QAAQ,EAAE,OAAO,CAC5B,MAAM,CACJ,kBAAkB,EAClB;IACE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,sBAAsB,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC,0BAA0B,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,CAAC;CAC7F,CACF,CA4BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,+BAA+B,CAAC;AAC/D;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,8CAA8C,CAAC;AAC3E,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,+CAA+C,CAAC;AAEpF;;2EAE2E;AAC3E,QAAA,MAAM,iBAAiB,EAAE,MAAM,CAC7B,KAAK,GAAG,QAAQ,EAChB;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;CACpB,CAoBF,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAElF;sEACsE;AACtE,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,IAAI,CAInF;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,yEAAyE;IACzE,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB;;gBAEY;IACZ,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;+EAE2E;IAC3E,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,GAAE,oBAA+B,EACvC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,KAAK,GAAE,MAAqB,GAC3B,0BAA0B,CAyC5B"}
1
+ {"version":3,"file":"harness-install-recipes.d.ts","sourceRoot":"","sources":["../src/harness-install-recipes.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { CLAUDE_VENDOR_CLI_VERSION } from "@claudexor/harness-claude";
11
11
  import { CODEX_VENDOR_CLI_VERSION } from "@claudexor/harness-codex";
12
12
  import { OPENCODE_VENDOR_CLI_VERSION } from "@claudexor/harness-opencode";
13
13
  import { copilot } from "@claudexor/harness-acp";
14
+ import { resolveCursorBin } from "@claudexor/harness-cursor";
14
15
  import { managedNodeRoot } from "@claudexor/core";
15
16
  import { INSTALLABLE_HARNESSES } from "./harness-command-specs.js";
16
17
  export function isInstallableHarness(value) {
@@ -100,7 +101,58 @@ export function scriptInstaller(harness) {
100
101
  ? SCRIPT_INSTALLERS[harness]
101
102
  : null;
102
103
  }
103
- export function harnessInstallerDisclosure(harness, target = "remote", platform = process.platform, _arch = process.arch) {
104
+ /** The explicit binary override each adapter honours verbatim. A set override
105
+ * means the harness runs THAT program, so maintaining the managed copy would
106
+ * change nothing the harness executes. */
107
+ export const HARNESS_BINARY_OVERRIDE_ENV = {
108
+ agy: "CLAUDEXOR_AGY_BIN",
109
+ claude: "CLAUDEXOR_CLAUDE_BIN",
110
+ codex: "CLAUDEXOR_CODEX_BIN",
111
+ copilot: copilot.binaryEnv,
112
+ cursor: "CLAUDEXOR_CURSOR_BIN",
113
+ opencode: "CLAUDEXOR_OPENCODE_BIN",
114
+ };
115
+ /** The command name (or override) the harness adapter itself spawns: Cursor
116
+ * owns its alias choice (`cursor-agent`, else an `agent` inside a Cursor
117
+ * install), every other harness its recipe launcher, an override verbatim. */
118
+ const ADAPTER_COMMAND = { cursor: resolveCursorBin };
119
+ export function selectedHarnessCommand(harness, env, resolve) {
120
+ const override = env[HARNESS_BINARY_OVERRIDE_ENV[harness]]?.trim();
121
+ if (override)
122
+ return override;
123
+ const adapterOwned = ADAPTER_COMMAND[harness];
124
+ if (adapterOwned)
125
+ return adapterOwned(env, resolve);
126
+ return NPM_PINS[harness]?.binaryNames[0] ?? scriptInstaller(harness)?.binaryName ?? harness;
127
+ }
128
+ /** Verified 2026-10-09 (vendor help/source): `agy update` and Cursor's
129
+ * `update` rewrite these POSIX launchers; Windows is not a verified route. */
130
+ const VENDOR_UPDATER_LAUNCHERS = {
131
+ agy: ["agy"],
132
+ cursor: ["cursor-agent", "agent"],
133
+ };
134
+ export function harnessMaintenanceRecipe(harness, platform = process.platform) {
135
+ if (NPM_PINS[harness]) {
136
+ return {
137
+ mechanism: "managed_npm",
138
+ targets: ["latest", "version", "previous", "baseline"],
139
+ launchers: () => [],
140
+ };
141
+ }
142
+ const names = VENDOR_UPDATER_LAUNCHERS[harness];
143
+ if (!names || platform === "win32") {
144
+ return { mechanism: "vendor_script", targets: [], launchers: () => [] };
145
+ }
146
+ return {
147
+ mechanism: "vendor_updater",
148
+ targets: ["latest"],
149
+ launchers: (home) => names.map((name) => join(home, ".local", "bin", name)),
150
+ };
151
+ }
152
+ export function harnessInstallerDisclosure(harness, target = "remote", platform = process.platform, _arch = process.arch,
153
+ /** Explicit exact maintenance target; omitted installs the release pin. The
154
+ * pin stays reported as `pinnedVersion` either way. */
155
+ version) {
104
156
  const layout = TARGET_LAYOUTS[target];
105
157
  const pin = NPM_PINS[harness];
106
158
  const windows = platform === "win32";
@@ -111,7 +163,7 @@ export function harnessInstallerDisclosure(harness, target = "remote", platform
111
163
  return {
112
164
  harness,
113
165
  target,
114
- command: `npm install --global --prefix ${layout.displayRoot} ${pin.npmPackage}@${pin.version}`,
166
+ command: `npm install --global --prefix ${layout.displayRoot} ${pin.npmPackage}@${version ?? pin.version}`,
115
167
  installLocation,
116
168
  pinnedVersion: pin.version,
117
169
  verification: pin.verification,
@@ -1 +1 @@
1
- {"version":3,"file":"harness-install-recipes.js","sourceRoot":"","sources":["../src/harness-install-recipes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-install-recipes.js","sourceRoot":"","sources":["../src/harness-install-recipes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The process context every harness install/maintenance step runs in: the
3
+ * HOME-anchored prefix, the runner Node and its embedded npm, and the clean
4
+ * vendor-child environment. One producer for the installer, the post-install
5
+ * proof and maintenance inspection, so they can never disagree about which
6
+ * prefix or PATH they read.
7
+ */
8
+ import { spawnSync } from "node:child_process";
9
+ import type { InstallProofRuntime } from "./harness-install-proof.js";
10
+ import type { HarnessInstallTarget } from "./harness-install-recipes.js";
11
+ export interface InstallerRuntimeOptions {
12
+ home?: string;
13
+ nodePath?: string;
14
+ /** Explicit install layout. Omitted preserves the historical remote target. */
15
+ target?: HarnessInstallTarget;
16
+ spawn?: typeof spawnSync;
17
+ platform?: NodeJS.Platform;
18
+ /** The runner Node's architecture (npm selects the platform package by it). */
19
+ arch?: string;
20
+ /** Test/integration source before the clean allowlist and target-aware PATH
21
+ * normalization are applied. Provider credentials are still scrubbed. */
22
+ sourceEnv?: NodeJS.ProcessEnv;
23
+ }
24
+ export interface InstallerRuntime extends InstallProofRuntime {
25
+ home: string;
26
+ target: HarnessInstallTarget;
27
+ }
28
+ export declare function installerRuntime(options?: InstallerRuntimeOptions): InstallerRuntime;
29
+ //# sourceMappingURL=harness-install-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-install-runtime.d.ts","sourceRoot":"","sources":["../src/harness-install-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;6EACyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,gBAAgB,CAsCxF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The process context every harness install/maintenance step runs in: the
3
+ * HOME-anchored prefix, the runner Node and its embedded npm, and the clean
4
+ * vendor-child environment. One producer for the installer, the post-install
5
+ * proof and maintenance inspection, so they can never disagree about which
6
+ * prefix or PATH they read.
7
+ */
8
+ import { spawnSync } from "node:child_process";
9
+ import { homedir } from "node:os";
10
+ import { resolve } from "node:path";
11
+ import { composeBaseEnv, pickAllowlistedEnv, WINDOWS_RUNTIME_ENV_KEYS } from "@claudexor/core";
12
+ export function installerRuntime(options = {}) {
13
+ // Anchored on the SAME `HOME` the harness PATH producer reads, so the prefix
14
+ // this installs into is the prefix doctor/login/run resolve — on Windows
15
+ // `homedir()` follows USERPROFILE and would silently diverge from a scoped
16
+ // HOME.
17
+ const home = resolve(options.home ?? ((options.sourceEnv ?? process.env).HOME || homedir()));
18
+ const target = options.target ?? "remote";
19
+ const platform = options.platform ?? process.platform;
20
+ const runnerNodePath = resolve(options.nodePath ?? process.execPath);
21
+ // Vendor-controlled npm/curl/shell children receive the shared minimal
22
+ // runtime env, never the parent process's provider credentials.
23
+ const resolutionSource = {
24
+ ...(options.sourceEnv ?? process.env),
25
+ HOME: home,
26
+ // Local resolution must not read the SSH-runtime vendor prefix; the remote
27
+ // flow keeps whatever its own runtime already exported.
28
+ ...(target === "local" ? { CLAUDEXOR_REMOTE_RUNTIME: "0" } : {}),
29
+ };
30
+ const environment = {
31
+ ...composeBaseEnv("clean", resolutionSource, runnerNodePath, platform),
32
+ // npm and the vendor image cannot start on Windows without the process
33
+ // environment the OS itself resolves against (the login/setup lanes
34
+ // forward the same named set).
35
+ ...(platform === "win32"
36
+ ? pickAllowlistedEnv(resolutionSource, WINDOWS_RUNTIME_ENV_KEYS, platform)
37
+ : {}),
38
+ HOME: home,
39
+ };
40
+ return {
41
+ home,
42
+ target,
43
+ runnerNodePath,
44
+ platform,
45
+ arch: options.arch ?? process.arch,
46
+ resolutionSource,
47
+ environment,
48
+ spawn: options.spawn ?? spawnSync,
49
+ };
50
+ }
51
+ //# sourceMappingURL=harness-install-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-install-runtime.js","sourceRoot":"","sources":["../src/harness-install-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAuB/F,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAA4B,EAAE;IACpE,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,QAAQ;IACR,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrE,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,gBAAgB,GAAG;QACvB,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;QACrC,IAAI,EAAE,IAAI;QACV,2EAA2E;QAC3E,wDAAwD;QACxD,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;IACF,MAAM,WAAW,GAAG;QAClB,GAAG,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC;QACtE,uEAAuE;QACvE,oEAAoE;QACpE,+BAA+B;QAC/B,GAAG,CAAC,QAAQ,KAAK,OAAO;YACtB,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,QAAQ,CAAC;YAC1E,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,EAAE,IAAI;KACX,CAAC;IACF,OAAO;QACL,IAAI;QACJ,MAAM;QACN,cAAc;QACd,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;QAClC,gBAAgB;QAChB,WAAW;QACX,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;KAClC,CAAC;AACJ,CAAC"}
@@ -1,58 +1,8 @@
1
- /**
2
- * `claudexor harness install` — the disclosed, pinned vendor installer
3
- * (issue #89; restored from the PR #82 cut with the security objections
4
- * fixed). The historical/default `remote` target remains the SSH-host flow;
5
- * an explicit `local` target installs into the managed toolchain root that
6
- * local harness resolution already owns.
7
- *
8
- * Contract:
9
- * - npm-distributed harnesses (claude/codex/opencode) install ONE exact
10
- * version — the per-package vendor-version SSOT — never `@latest`. npm
11
- * verifies the registry integrity checksum for an exact version, so the
12
- * pin is a real guarantee. For claude/codex that SSOT is the value the
13
- * model/effort freshness gates verified; the opencode pin is a
14
- * deterministic install target, NOT a verification claim (no recorded
15
- * fixture yet — see packages/harness-opencode vendor-cli-version.ts).
16
- * - cursor and agy have no npm artifact and CANNOT be pinned. Instead of
17
- * pretending, the HUMAN is the verifier: the complete vendor script is
18
- * downloaded first (never piped to a shell), its size and sha256 are
19
- * printed, and it runs in the visible PTY the operator is watching — the
20
- * same principle as interactive SSH auth.
21
- * - NOTHING executes without authorization: the exact command and install
22
- * destination print first, and execution needs a TTY confirmation or an
23
- * explicit `--yes` (the macOS flow confirms against this module's own
24
- * `--dry-run --json` disclosure before passing `--yes`). For a host
25
- * integration, `--target local --yes` IS that authorization, granted by the
26
- * owner action that invoked it; there is no second confirmation hidden
27
- * inside the producer, and the unattended script path never claims the
28
- * human-observed verification the watched remote path earns.
29
- * - concurrent installs into one prefix are serialized by a cross-process
30
- * lease. A lease whose owner died is NOT reclaimed automatically: it fails
31
- * closed with a typed `install_lock_stale` and the exact cleanup path.
32
- * - failures are typed and loud; a failed download, a non-zero installer exit,
33
- * or a failed post-install binary/version proof never reads as success, and
34
- * the temp download dir is removed on every path.
35
- * - the post-install PROOF is what the local target has instead of a witness.
36
- * A watched remote install keeps the historical exit-code contract, because
37
- * the operator is looking at the terminal; an unattended local install must
38
- * earn its `ok:true`, so exit zero without a resolvable launcher and a
39
- * matching `--version` is a typed failure, and `installedBinary` /
40
- * `installedVersion` are present on every local success.
41
- * - on Windows the local target installs only where the pinned npm package
42
- * yields a verified package-native image (codex): npm's own `.cmd` shim is
43
- * never the launcher, the embedded Node's `node_modules/npm/bin/npm-cli.js`
44
- * runs the install, and the proof executes the image the shared harness
45
- * PATH resolves; other vendors refuse typed before any side effect.
46
- * - `--json` keeps stdout pure: exactly ONE JSON object. In json mode every
47
- * human progress line goes to stderr and child processes (npm/curl/the
48
- * vendor script) run with their stdout routed onto stderr, so vendor
49
- * output stays visible without corrupting the machine envelope.
50
- */
51
- import { spawnSync } from "node:child_process";
52
1
  import { existsSync, mkdirSync } from "node:fs";
53
2
  import { type ParsedArgs } from "./args.js";
54
- import { type HarnessInstallTarget, type InstallableHarness } from "./harness-install-recipes.js";
55
- export { AGY_INSTALL_URL, AGY_INSTALL_URL_WINDOWS, CURSOR_INSTALL_URL, HARNESS_INSTALL_TARGETS, harnessInstallerDisclosure, isHarnessInstallTarget, isInstallableHarness, type HarnessInstallTarget, type InstallableHarness, } from "./harness-install-recipes.js";
3
+ import { type InstallerRuntimeOptions } from "./harness-install-runtime.js";
4
+ import { type InstallableHarness } from "./harness-install-recipes.js";
5
+ export { AGY_INSTALL_URL, AGY_INSTALL_URL_WINDOWS, CURSOR_INSTALL_URL, HARNESS_INSTALL_TARGETS, harnessInstallerDisclosure, isHarnessInstallTarget, isInstallableHarness, type InstallableHarness, } from "./harness-install-recipes.js";
56
6
  export interface HarnessInstallRunResult {
57
7
  exitCode: number;
58
8
  /** Set when the installer refused loudly WITHOUT running the vendor
@@ -68,30 +18,34 @@ export interface HarnessInstallRunResult {
68
18
  /** Present on every SUCCESS: the exact npm pin, or the script vendor's own
69
19
  * trimmed `--version` line. */
70
20
  installedVersion?: string;
21
+ /** Explicit-version installs only: the managed package version declared
22
+ * before the first mutation (null when there was none). */
23
+ previousVersion?: string | null;
71
24
  }
72
- export declare function runHarnessInstaller(harness: InstallableHarness, options?: {
73
- home?: string;
74
- nodePath?: string;
75
- /** Explicit install layout. Omitted preserves the historical remote target. */
76
- target?: HarnessInstallTarget;
77
- spawn?: typeof spawnSync;
25
+ /** A local Windows install is supported exactly where the pinned npm package
26
+ * has declared Windows support for this architecture. Post-install proof uses
27
+ * its standard npm entrypoint, whether native or Node. Other recipes keep
28
+ * their existing platform boundary; the remote target is unaffected. */
29
+ export declare function localPlatformRefusal(harness: InstallableHarness, platform: NodeJS.Platform, arch: string): HarnessInstallRunResult | null;
30
+ export declare function runHarnessInstaller(harness: InstallableHarness, options?: InstallerRuntimeOptions & {
78
31
  mkdir?: typeof mkdirSync;
79
32
  exists?: typeof existsSync;
80
33
  /** Production installs serialize cross-process. Tests may disable only this
81
34
  * wrapper while preserving the install recipe under test. */
82
35
  lock?: boolean;
83
36
  lockTimeoutMs?: number;
84
- platform?: NodeJS.Platform;
85
- /** The runner Node's architecture (npm selects the platform package by it). */
86
- arch?: string;
87
- /** Test/integration source before the clean allowlist and target-aware PATH
88
- * normalization are applied. Provider credentials are still scrubbed. */
89
- sourceEnv?: NodeJS.ProcessEnv;
90
37
  /** `--json` stdout purity: route human progress lines AND child stdout
91
38
  * to stderr, so stdout carries exactly one JSON object (the caller's
92
39
  * final envelope). Human mode keeps everything on stdout as before. */
93
40
  json?: boolean;
41
+ /** Explicit exact maintenance target (local npm recipes only). Omitted is
42
+ * the ensure path: install the release pin unless the managed copy already
43
+ * runs it or a NEWER runnable version, which is never downgraded. */
44
+ version?: string;
94
45
  }): HarnessInstallRunResult;
46
+ /** Blocking y/N read on the controlling TTY (fd 0). Anything but an explicit
47
+ * yes declines — closing stdin or an unreadable terminal never installs. */
48
+ export declare function confirmOnTty(question: string): boolean;
95
49
  export declare function harnessInstallCommand(args: ParsedArgs, json: boolean,
96
50
  /** Test seam: forwarded to `runHarnessInstaller` (spawn/home/... fakes). */
97
51
  runnerOptions?: Omit<NonNullable<Parameters<typeof runHarnessInstaller>[1]>, "json" | "target">): number;
@@ -1 +1 @@
1
- {"version":3,"file":"harness-installer.d.ts","sourceRoot":"","sources":["../src/harness-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAA+C,MAAM,SAAS,CAAC;AAU7F,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAe/D,OAAO,EAQL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB;+EAC2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;mCAC+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAqDD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,UAAU,CAAC;IAC3B;iEAC6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;6EACyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B;;2EAEuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;CACX,GACL,uBAAuB,CAqNzB;AA8CD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,OAAO;AACb,4EAA4E;AAC5E,aAAa,GAAE,IAAI,CACjB,WAAW,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EACtD,MAAM,GAAG,QAAQ,CACb,GACL,MAAM,CA4ER"}
1
+ {"version":3,"file":"harness-installer.d.ts","sourceRoot":"","sources":["../src/harness-installer.ts"],"names":[],"mappings":"AAmDA,OAAO,EAAE,UAAU,EAAE,SAAS,EAA+C,MAAM,SAAS,CAAC;AAI7F,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAiB/D,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE9F,OAAO,EAQL,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB;+EAC2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;mCAC+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;+DAC2D;IAC3D,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAeD;;;wEAGwE;AACxE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,IAAI,EAAE,MAAM,GACX,uBAAuB,GAAG,IAAI,CAUhC;AAoBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,uBAAuB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,UAAU,CAAC;IAC3B;iEAC6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;2EAEuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;yEAEqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,uBAAuB,CAuNzB;AA2BD;4EAC4E;AAC5E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAetD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,OAAO;AACb,4EAA4E;AAC5E,aAAa,GAAE,IAAI,CACjB,WAAW,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,EACtD,MAAM,GAAG,QAAQ,CACb,GACL,MAAM,CA4ER"}