@claudexor/orchestrator 3.1.1 → 3.2.0

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 (173) hide show
  1. package/dist/attemptFinalize.d.ts +14 -11
  2. package/dist/attemptFinalize.d.ts.map +1 -1
  3. package/dist/attemptFinalize.js +41 -14
  4. package/dist/attemptFinalize.js.map +1 -1
  5. package/dist/attemptTelemetry.d.ts +16 -20
  6. package/dist/attemptTelemetry.d.ts.map +1 -1
  7. package/dist/attemptTelemetry.js +38 -70
  8. package/dist/attemptTelemetry.js.map +1 -1
  9. package/dist/attemptUsageCost.d.ts +47 -0
  10. package/dist/attemptUsageCost.d.ts.map +1 -0
  11. package/dist/attemptUsageCost.js +191 -0
  12. package/dist/attemptUsageCost.js.map +1 -0
  13. package/dist/budgetFailure.d.ts +3 -1
  14. package/dist/budgetFailure.d.ts.map +1 -1
  15. package/dist/budgetFailure.js.map +1 -1
  16. package/dist/candidateEvidence.d.ts +5 -0
  17. package/dist/candidateEvidence.d.ts.map +1 -1
  18. package/dist/candidateEvidence.js +3 -1
  19. package/dist/candidateEvidence.js.map +1 -1
  20. package/dist/candidateOutputs.d.ts +19 -0
  21. package/dist/candidateOutputs.d.ts.map +1 -1
  22. package/dist/candidateOutputs.js +201 -67
  23. package/dist/candidateOutputs.js.map +1 -1
  24. package/dist/credential-profile-rotation.d.ts +145 -0
  25. package/dist/credential-profile-rotation.d.ts.map +1 -0
  26. package/dist/credential-profile-rotation.js +315 -0
  27. package/dist/credential-profile-rotation.js.map +1 -0
  28. package/dist/credential-profiles.d.ts +35 -134
  29. package/dist/credential-profiles.d.ts.map +1 -1
  30. package/dist/credential-profiles.js +73 -295
  31. package/dist/credential-profiles.js.map +1 -1
  32. package/dist/decisionBudget.d.ts +43 -0
  33. package/dist/decisionBudget.d.ts.map +1 -0
  34. package/dist/decisionBudget.js +84 -0
  35. package/dist/decisionBudget.js.map +1 -0
  36. package/dist/decisionTerminalReconciliation.d.ts +18 -0
  37. package/dist/decisionTerminalReconciliation.d.ts.map +1 -0
  38. package/dist/decisionTerminalReconciliation.js +26 -0
  39. package/dist/decisionTerminalReconciliation.js.map +1 -0
  40. package/dist/deepScanReducer.d.ts +14 -44
  41. package/dist/deepScanReducer.d.ts.map +1 -1
  42. package/dist/deepScanReducer.js +240 -128
  43. package/dist/deepScanReducer.js.map +1 -1
  44. package/dist/delegation-parent-activation.d.ts +6 -0
  45. package/dist/delegation-parent-activation.d.ts.map +1 -0
  46. package/dist/delegation-parent-activation.js +13 -0
  47. package/dist/delegation-parent-activation.js.map +1 -0
  48. package/dist/delegationBudgetAuthority.d.ts +30 -0
  49. package/dist/delegationBudgetAuthority.d.ts.map +1 -0
  50. package/dist/delegationBudgetAuthority.js +157 -0
  51. package/dist/delegationBudgetAuthority.js.map +1 -0
  52. package/dist/delegationFailure.d.ts +58 -0
  53. package/dist/delegationFailure.d.ts.map +1 -0
  54. package/dist/delegationFailure.js +184 -0
  55. package/dist/delegationFailure.js.map +1 -0
  56. package/dist/delegationToolEvidence.d.ts +20 -0
  57. package/dist/delegationToolEvidence.d.ts.map +1 -0
  58. package/dist/delegationToolEvidence.js +46 -0
  59. package/dist/delegationToolEvidence.js.map +1 -0
  60. package/dist/git-precondition.d.ts +11 -0
  61. package/dist/git-precondition.d.ts.map +1 -0
  62. package/dist/git-precondition.js +69 -0
  63. package/dist/git-precondition.js.map +1 -0
  64. package/dist/index.d.ts +3 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/interaction.d.ts +14 -6
  69. package/dist/interaction.d.ts.map +1 -1
  70. package/dist/interaction.js +106 -19
  71. package/dist/interaction.js.map +1 -1
  72. package/dist/orchestrator.d.ts +62 -115
  73. package/dist/orchestrator.d.ts.map +1 -1
  74. package/dist/orchestrator.js +671 -965
  75. package/dist/orchestrator.js.map +1 -1
  76. package/dist/plan-prompt.d.ts +3 -0
  77. package/dist/plan-prompt.d.ts.map +1 -0
  78. package/dist/plan-prompt.js +28 -0
  79. package/dist/plan-prompt.js.map +1 -0
  80. package/dist/planBrief.d.ts +27 -0
  81. package/dist/planBrief.d.ts.map +1 -0
  82. package/dist/planBrief.js +42 -0
  83. package/dist/planBrief.js.map +1 -0
  84. package/dist/planRun.d.ts +4 -3
  85. package/dist/planRun.d.ts.map +1 -1
  86. package/dist/planRun.js +33 -33
  87. package/dist/planRun.js.map +1 -1
  88. package/dist/plannerAttempt.d.ts +64 -0
  89. package/dist/plannerAttempt.d.ts.map +1 -0
  90. package/dist/plannerAttempt.js +235 -0
  91. package/dist/plannerAttempt.js.map +1 -0
  92. package/dist/policyFindings.js.map +1 -1
  93. package/dist/requestRequirements.d.ts +45 -1
  94. package/dist/requestRequirements.d.ts.map +1 -1
  95. package/dist/requestRequirements.js +158 -11
  96. package/dist/requestRequirements.js.map +1 -1
  97. package/dist/reviewerPanel.js.map +1 -1
  98. package/dist/root-ledger.d.ts +13 -0
  99. package/dist/root-ledger.d.ts.map +1 -0
  100. package/dist/root-ledger.js +21 -0
  101. package/dist/root-ledger.js.map +1 -0
  102. package/dist/routing-failure.d.ts +6 -0
  103. package/dist/routing-failure.d.ts.map +1 -0
  104. package/dist/routing-failure.js +12 -0
  105. package/dist/routing-failure.js.map +1 -0
  106. package/dist/run-bounded.d.ts +3 -0
  107. package/dist/run-bounded.d.ts.map +1 -0
  108. package/dist/run-bounded.js +23 -0
  109. package/dist/run-bounded.js.map +1 -0
  110. package/dist/run-input-resolution.d.ts +10 -0
  111. package/dist/run-input-resolution.d.ts.map +1 -0
  112. package/dist/run-input-resolution.js +88 -0
  113. package/dist/run-input-resolution.js.map +1 -0
  114. package/dist/runEventLog.d.ts +48 -0
  115. package/dist/runEventLog.d.ts.map +1 -0
  116. package/dist/runEventLog.js +63 -0
  117. package/dist/runEventLog.js.map +1 -0
  118. package/dist/runFacts.d.ts +23 -0
  119. package/dist/runFacts.d.ts.map +1 -0
  120. package/dist/runFacts.js +179 -0
  121. package/dist/runFacts.js.map +1 -0
  122. package/dist/runFactsBuilder.d.ts +5 -0
  123. package/dist/runFactsBuilder.d.ts.map +1 -0
  124. package/dist/runFactsBuilder.js +412 -0
  125. package/dist/runFactsBuilder.js.map +1 -0
  126. package/dist/runFactsDeliverable.d.ts +13 -0
  127. package/dist/runFactsDeliverable.d.ts.map +1 -0
  128. package/dist/runFactsDeliverable.js +94 -0
  129. package/dist/runFactsDeliverable.js.map +1 -0
  130. package/dist/runFactsPresentation.d.ts +7 -0
  131. package/dist/runFactsPresentation.d.ts.map +1 -0
  132. package/dist/runFactsPresentation.js +113 -0
  133. package/dist/runFactsPresentation.js.map +1 -0
  134. package/dist/runFactsReview.d.ts +7 -0
  135. package/dist/runFactsReview.d.ts.map +1 -0
  136. package/dist/runFactsReview.js +63 -0
  137. package/dist/runFactsReview.js.map +1 -0
  138. package/dist/runSupport.d.ts +17 -15
  139. package/dist/runSupport.d.ts.map +1 -1
  140. package/dist/runSupport.js +16 -0
  141. package/dist/runSupport.js.map +1 -1
  142. package/dist/runTelemetryWriter.d.ts +5 -2
  143. package/dist/runTelemetryWriter.d.ts.map +1 -1
  144. package/dist/runTelemetryWriter.js +72 -1
  145. package/dist/runTelemetryWriter.js.map +1 -1
  146. package/dist/runTerminalContext.d.ts +31 -0
  147. package/dist/runTerminalContext.d.ts.map +1 -0
  148. package/dist/runTerminalContext.js +12 -0
  149. package/dist/runTerminalContext.js.map +1 -0
  150. package/dist/runTerminalResults.d.ts +55 -0
  151. package/dist/runTerminalResults.d.ts.map +1 -0
  152. package/dist/runTerminalResults.js +134 -0
  153. package/dist/runTerminalResults.js.map +1 -0
  154. package/dist/runTerminals.d.ts +8 -57
  155. package/dist/runTerminals.d.ts.map +1 -1
  156. package/dist/runTerminals.js +423 -135
  157. package/dist/runTerminals.js.map +1 -1
  158. package/dist/secretDiff.d.ts +32 -0
  159. package/dist/secretDiff.d.ts.map +1 -0
  160. package/dist/secretDiff.js +140 -0
  161. package/dist/secretDiff.js.map +1 -0
  162. package/dist/structuredOutput.d.ts.map +1 -1
  163. package/dist/structuredOutput.js.map +1 -1
  164. package/dist/task-contract-builder.d.ts +35 -0
  165. package/dist/task-contract-builder.d.ts.map +1 -0
  166. package/dist/task-contract-builder.js +114 -0
  167. package/dist/task-contract-builder.js.map +1 -0
  168. package/dist/terminalOutcome.d.ts +22 -0
  169. package/dist/terminalOutcome.d.ts.map +1 -0
  170. package/dist/terminalOutcome.js +39 -0
  171. package/dist/terminalOutcome.js.map +1 -0
  172. package/dist/transientClassify.js.map +1 -1
  173. package/package.json +17 -17
@@ -1,6 +1,7 @@
1
- import { chmodSync, closeSync, constants, copyFileSync, existsSync, lstatSync, mkdirSync, openSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
1
+ import { chmodSync, closeSync, constants, copyFileSync, existsSync, fstatSync, lstatSync, mkdirSync, openSync, realpathSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
2
2
  import { dirname, extname, join, relative as pathRelative, resolve, sep } from "node:path";
3
3
  import { CLAUDEXOR_ARTIFACT_DIR, summarizeDiffPaths } from "@claudexor/core";
4
+ import { containsSecretLikeToken } from "@claudexor/util";
4
5
  const RASTER_OUTPUT_EXTENSIONS = new Set([".png", ".jpg", ".jpeg", ".webp", ".gif"]);
5
6
  const MAX_OUTPUT_BYTES = 16 * 1024 * 1024;
6
7
  const MAX_TOTAL_BYTES = 32 * 1024 * 1024;
@@ -27,6 +28,119 @@ function writeNoFollow(path, data, mode, replace) {
27
28
  closeSync(fd);
28
29
  }
29
30
  }
31
+ function rasterBytesIfSafe(source, maxBytes = MAX_OUTPUT_BYTES) {
32
+ let fd = null;
33
+ try {
34
+ fd = openSync(source, constants.O_RDONLY | constants.O_NOFOLLOW);
35
+ const stat = fstatSync(fd);
36
+ if (!stat.isFile() || stat.size > maxBytes)
37
+ return null;
38
+ const bytes = readFileSync(fd);
39
+ if (bytes.length > maxBytes || containsSecretLikeToken(bytes.toString("latin1")))
40
+ return null;
41
+ return { bytes, mode: stat.mode & 0o777 };
42
+ }
43
+ catch {
44
+ // Detection callers interpret an unreadable raster as an unprovable secret
45
+ // risk; persistence callers skip it. Never let a filesystem race turn the
46
+ // fail-closed artifact fence into an untyped attempt crash.
47
+ return null;
48
+ }
49
+ finally {
50
+ if (fd !== null) {
51
+ try {
52
+ closeSync(fd);
53
+ }
54
+ catch {
55
+ // The bytes are already bounded in memory or the read failed closed.
56
+ }
57
+ }
58
+ }
59
+ }
60
+ function copyRasterIfSafe(source, target, maxBytes) {
61
+ const safe = rasterBytesIfSafe(source, maxBytes);
62
+ if (!safe)
63
+ return null;
64
+ mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
65
+ writeNoFollow(target, safe.bytes, safe.mode, false);
66
+ return safe.bytes.length;
67
+ }
68
+ /** Lexically contain a path and reject symlinks or unreadable/non-directory
69
+ * intermediate components before any candidate output is inspected. */
70
+ function candidatePathStatus(root, raw) {
71
+ const target = resolve(root, raw);
72
+ if (target === root || !target.startsWith(root + sep))
73
+ return { kind: "unsafe" };
74
+ const parts = pathRelative(root, target).split(sep).filter(Boolean);
75
+ let current = root;
76
+ for (let index = 0; index < parts.length; index += 1) {
77
+ current = join(current, parts[index]);
78
+ let stat;
79
+ try {
80
+ stat = lstatIfPresent(current);
81
+ }
82
+ catch {
83
+ return { kind: "unsafe" };
84
+ }
85
+ if (!stat)
86
+ return { kind: "missing" };
87
+ if (stat.isSymbolicLink()) {
88
+ return { kind: index === parts.length - 1 ? "symlink" : "unsafe" };
89
+ }
90
+ if (index < parts.length - 1 && !stat.isDirectory())
91
+ return { kind: "unsafe" };
92
+ if (index === parts.length - 1)
93
+ return { kind: "safe", path: target, stat };
94
+ }
95
+ return { kind: "unsafe" };
96
+ }
97
+ function artifactMediaPaths(root) {
98
+ const artifactRoot = join(root, CLAUDEXOR_ARTIFACT_DIR);
99
+ const rootStatus = candidatePathStatus(root, artifactRoot);
100
+ if (rootStatus.kind === "missing")
101
+ return { paths: [], unsafe: false };
102
+ if (rootStatus.kind !== "safe" || !rootStatus.stat.isDirectory()) {
103
+ return { paths: [], unsafe: true };
104
+ }
105
+ const paths = [];
106
+ let unsafe = false;
107
+ const walk = (dir) => {
108
+ let entries;
109
+ try {
110
+ entries = readdirSync(dir);
111
+ }
112
+ catch {
113
+ unsafe = true;
114
+ return;
115
+ }
116
+ for (const name of entries.sort()) {
117
+ const status = candidatePathStatus(root, join(dir, name));
118
+ if (status.kind === "missing")
119
+ continue;
120
+ // A leaf symlink is never followed or persisted, but its presence beside
121
+ // ordinary owned media does not make the whole candidate suspicious.
122
+ if (status.kind === "symlink")
123
+ continue;
124
+ if (status.kind !== "safe") {
125
+ unsafe = true;
126
+ continue;
127
+ }
128
+ if (status.stat.isDirectory()) {
129
+ walk(status.path);
130
+ continue;
131
+ }
132
+ if (!RASTER_OUTPUT_EXTENSIONS.has(extname(name).toLowerCase()))
133
+ continue;
134
+ if (!status.stat.isFile()) {
135
+ unsafe = true;
136
+ continue;
137
+ }
138
+ paths.push(pathRelative(root, status.path).split("\\").join("/"));
139
+ }
140
+ };
141
+ walk(artifactRoot);
142
+ return { paths, unsafe };
143
+ }
30
144
  /** Stage large synthesis evidence in the envelope, returning an idempotent
31
145
  * cleanup that callers run before any diff/gate/review. */
32
146
  export function stageFileBackedContext(worktreePath, content) {
@@ -72,24 +186,35 @@ export function persistCandidateOutputs(input) {
72
186
  const root = resolve(input.worktreePath);
73
187
  let total = 0;
74
188
  const preserved = [];
189
+ const candidates = new Map();
75
190
  for (const raw of input.changedPaths) {
76
- const relative = raw.split("\\").join("/");
77
- if (!RASTER_OUTPUT_EXTENSIONS.has(extname(relative).toLowerCase()))
78
- continue;
79
- const source = resolve(root, relative);
80
- if (source !== root && !source.startsWith(root + sep))
191
+ if (!RASTER_OUTPUT_EXTENSIONS.has(extname(raw).toLowerCase()))
81
192
  continue;
82
- if (!existsSync(source))
193
+ const status = candidatePathStatus(root, raw);
194
+ if (status.kind !== "safe" || !status.stat.isFile())
83
195
  continue;
84
- // lstat (not stat): a candidate-created symlink must never make output
85
- // preservation copy a host file outside the envelope.
86
- const stat = lstatSync(source);
87
- if (!stat.isFile() || stat.size > MAX_OUTPUT_BYTES || total + stat.size > MAX_TOTAL_BYTES)
196
+ const relative = pathRelative(root, status.path).split("\\").join("/");
197
+ let identity;
198
+ try {
199
+ // realpath returns the filesystem's canonical spelling, so case and
200
+ // Unicode-normalization aliases on macOS collapse before any O_EXCL
201
+ // destination write. The already-verified lexical path remains the
202
+ // source used by the no-follow copy fence.
203
+ identity = realpathSync.native(status.path);
204
+ }
205
+ catch {
88
206
  continue;
207
+ }
208
+ if (!candidates.has(identity)) {
209
+ candidates.set(identity, { relative, source: status.path });
210
+ }
211
+ }
212
+ for (const { relative, source } of candidates.values()) {
89
213
  const target = join(input.attemptDir, "produced", relative);
90
- mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
91
- copyFileSync(source, target);
92
- total += stat.size;
214
+ const copied = copyRasterIfSafe(source, target, Math.min(MAX_OUTPUT_BYTES, MAX_TOTAL_BYTES - total));
215
+ if (copied === null)
216
+ continue;
217
+ total += copied;
93
218
  preserved.push(relative);
94
219
  }
95
220
  return preserved;
@@ -105,45 +230,54 @@ export function persistCandidateOutputs(input) {
105
230
  */
106
231
  export function collectArtifactDirMedia(input) {
107
232
  const root = resolve(input.worktreePath);
108
- const artifactRoot = join(root, CLAUDEXOR_ARTIFACT_DIR);
109
- if (!existsSync(artifactRoot))
110
- return [];
111
233
  let total = 0;
112
234
  const preserved = [];
113
- const walk = (dir) => {
114
- let entries;
115
- try {
116
- entries = readdirSync(dir);
117
- }
118
- catch {
119
- return;
120
- }
121
- for (const name of entries.sort()) {
122
- const abs = join(dir, name);
123
- const stat = lstatIfPresent(abs);
124
- // lstat: a symlink inside the artifact dir must never copy a host file.
125
- if (!stat || stat.isSymbolicLink())
126
- continue;
127
- if (stat.isDirectory()) {
128
- walk(abs);
129
- continue;
130
- }
131
- if (!stat.isFile())
132
- continue;
133
- if (!RASTER_OUTPUT_EXTENSIONS.has(extname(name).toLowerCase()))
134
- continue;
135
- if (stat.size > MAX_OUTPUT_BYTES || total + stat.size > MAX_TOTAL_BYTES)
136
- continue;
137
- const rel = pathRelative(root, abs).split("\\").join("/");
138
- const target = join(input.attemptDir, "produced", rel);
139
- mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
140
- copyFileSync(abs, target);
141
- total += stat.size;
142
- preserved.push(rel);
235
+ for (const rel of artifactMediaPaths(root).paths) {
236
+ const status = candidatePathStatus(root, rel);
237
+ if (status.kind !== "safe" || !status.stat.isFile())
238
+ continue;
239
+ const target = join(input.attemptDir, "produced", rel);
240
+ const copied = copyRasterIfSafe(status.path, target, Math.min(MAX_OUTPUT_BYTES, MAX_TOTAL_BYTES - total));
241
+ if (copied === null)
242
+ continue;
243
+ total += copied;
244
+ preserved.push(rel);
245
+ }
246
+ return preserved;
247
+ }
248
+ export function candidateOutputsContainSecret(input) {
249
+ return candidateOutputSecretRisk(input).risky;
250
+ }
251
+ export function candidateOutputSecretRisk(input) {
252
+ const root = resolve(input.worktreePath);
253
+ const artifactMedia = artifactMediaPaths(root);
254
+ const riskyPaths = [];
255
+ const nonReversiblePaths = [];
256
+ const paths = [...input.changedPaths, ...artifactMedia.paths];
257
+ for (const relative of new Set(paths)) {
258
+ if (!RASTER_OUTPUT_EXTENSIONS.has(extname(relative).toLowerCase()))
259
+ continue;
260
+ const status = candidatePathStatus(root, relative);
261
+ if (status.kind === "missing")
262
+ continue;
263
+ if (status.kind !== "safe" || !status.stat.isFile()) {
264
+ riskyPaths.push(relative);
265
+ // A text patch can represent the symlink or special-file directory
266
+ // entry, but rollback cannot prove anything about bytes reached through
267
+ // that entry. Never collapse it to a followed realpath identity.
268
+ nonReversiblePaths.push(relative);
269
+ continue;
143
270
  }
271
+ const safe = rasterBytesIfSafe(status.path);
272
+ if (!safe)
273
+ riskyPaths.push(relative);
274
+ }
275
+ return {
276
+ risky: artifactMedia.unsafe || riskyPaths.length > 0,
277
+ riskyPaths,
278
+ nonReversiblePaths,
279
+ artifactDirectoryUnsafe: artifactMedia.unsafe,
144
280
  };
145
- walk(artifactRoot);
146
- return preserved;
147
281
  }
148
282
  export function rasterLinksInMarkdown(markdown) {
149
283
  const paths = [];
@@ -161,25 +295,25 @@ export function rasterLinksInMarkdown(markdown) {
161
295
  return [...new Set(paths)];
162
296
  }
163
297
  export function writeCandidateAttemptArtifacts(input) {
164
- input.store.writeText(join(input.attemptDir, "patch.diff"), input.diff);
298
+ if (input.persistPatch !== false) {
299
+ input.store.writeText(join(input.attemptDir, "patch.diff"), input.diff);
300
+ }
165
301
  const stats = summarizeDiffPaths(input.diff);
166
- const produced = [
167
- ...new Set([
168
- ...persistCandidateOutputs({
169
- worktreePath: input.worktreePath,
170
- attemptDir: input.attemptDir,
171
- changedPaths: [
172
- ...new Set([...stats.paths, ...rasterLinksInMarkdown(input.answerText ?? "")]),
173
- ],
174
- }),
175
- // F4: media in the claudexor-owned artifact dir is excluded from the diff,
176
- // so it is never in `stats.paths` — collect it into the gallery here.
177
- ...collectArtifactDirMedia({
178
- worktreePath: input.worktreePath,
179
- attemptDir: input.attemptDir,
180
- }),
181
- ]),
182
- ];
302
+ // Build one candidate path set before the first filesystem write. A raster
303
+ // may be both linked from markdown and discovered under the owned artifact
304
+ // directory; copying each source in a separate pass would race itself on the
305
+ // O_EXCL destination and would incorrectly grant each pass its own byte cap.
306
+ const produced = input.persistProducedMedia === false
307
+ ? []
308
+ : persistCandidateOutputs({
309
+ worktreePath: input.worktreePath,
310
+ attemptDir: input.attemptDir,
311
+ changedPaths: [
312
+ ...stats.paths,
313
+ ...rasterLinksInMarkdown(input.answerText ?? ""),
314
+ ...artifactMediaPaths(resolve(input.worktreePath)).paths,
315
+ ],
316
+ });
183
317
  input.store.writeYaml(join(input.attemptDir, "attempt.yaml"), {
184
318
  ...input.record,
185
319
  diffstat: {
@@ -1 +1 @@
1
- {"version":3,"file":"candidateOutputs.js","sourceRoot":"","sources":["../src/candidateOutputs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE3F,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACrF,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAqB,EAAE,IAAY,EAAE,OAAgB;IACxF,MAAM,KAAK,GACT,SAAS,CAAC,QAAQ;QAClB,SAAS,CAAC,OAAO;QACjB,SAAS,CAAC,UAAU;QACpB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED;2DAC2D;AAC3D,MAAM,UAAU,sBAAsB,CAAC,YAAoB,EAAE,OAAgB;IAC3E,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,+BAA+B,CAAC,CAAC;IACjE,IAAI,QAAQ,GAA2C,IAAI,CAAC;IAC5D,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,QAAQ,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;IACpE,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACvD,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1D,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAI7C;IACC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU;SAC3B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,SAAS,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;SACxF,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO;QACL,MAAM,EACJ,GAAG,KAAK,CAAC,YAAY,MAAM;YAC3B,kEAAkE;YAClE,kFAAkF;QACpF,OAAO,EACL,wBAAwB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;YAChG,4BAA4B,KAAK,EAAE;KACtC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAIvC;IACC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,SAAS;QAChE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAClC,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,eAAe;YACvF,SAAS;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5D,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAGvC;IACC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,wEAAwE;YACxE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;gBAAE,SAAS;YAC7C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC7B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YACzE,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,eAAe;gBAAE,SAAS;YAClF,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YACvD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,CAAC;IACnB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,sDAAsD,CAAC,EAAE,CAAC;QAC9F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9E,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAO9C;IACC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG;QACf,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,uBAAuB,CAAC;gBACzB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,YAAY,EAAE;oBACZ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC/E;aACF,CAAC;YACF,2EAA2E;YAC3E,sEAAsE;YACtE,GAAG,uBAAuB,CAAC;gBACzB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;SACH,CAAC;KACH,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE;QAC5D,GAAG,KAAK,CAAC,MAAM;QACf,QAAQ,EAAE;YACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YACzB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;QACD,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;qEACqE;AACrE,MAAM,UAAU,wBAAwB,CAAC,KAIxC;IACC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"candidateOutputs.js","sourceRoot":"","sources":["../src/candidateOutputs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import type { CredentialProfile, HarnessRunSpec, QuotaSnapshot } from "@claudexor/schema";
2
+ export interface ProfilePolicy {
3
+ limit_action: "fail" | "ask" | "rotate";
4
+ rotation_eligible: string[];
5
+ headroom_threshold: number;
6
+ }
7
+ /** Typed quota evidence for a profile over its headroom bound (provenance). */
8
+ export interface HeadroomBreach {
9
+ constraint_id: string;
10
+ used_ratio: number;
11
+ threshold: number;
12
+ resets_at: string | null;
13
+ }
14
+ /**
15
+ * Static rotation candidates, before any credential-backed readiness probe.
16
+ * One owner applies policy order, enabled/harness scope, current identity,
17
+ * already-tried exclusions, and the payment-kind fence. Callers then probe
18
+ * only identities that could actually be selected.
19
+ */
20
+ export declare function staticRotationCandidates(args: {
21
+ registry: readonly CredentialProfile[];
22
+ harnessId: string;
23
+ policy: ProfilePolicy;
24
+ current: Pick<CredentialProfile, "profile_id" | "credential_kind"> | null;
25
+ excluded?: ReadonlySet<string>;
26
+ }): CredentialProfile[];
27
+ /**
28
+ * Proactive headroom check (W5.4 `profile_headroom_preflight`): the SELECTED
29
+ * profile's freshest snapshot windows against the policy threshold. Unknown
30
+ * usage is NOT a breach — rotation never triggers on missing data.
31
+ */
32
+ export declare function profileHeadroomBreach(snapshots: readonly QuotaSnapshot[], harnessId: string, profileId: string | null, threshold: number): HeadroomBreach | null;
33
+ /**
34
+ * The next rotation target after `currentProfileId` (W5.4): policy order wins
35
+ * (`rotation_eligible`), else every enabled profile of the harness in registry
36
+ * order. The current profile and disabled/unknown ids never come back; a
37
+ * profile already over the headroom bound is skipped (rotating INTO a spent
38
+ * subscription is not a failover). Cross-subscription rotation of one vendor
39
+ * is allowed by owner decision — but rotation NEVER crosses credential kinds
40
+ * (release wave round-16 BLOCK): a subscription→API-key swap silently changes
41
+ * the payment model mid-attempt, and the attempt's first-wins auth-route
42
+ * receipt (decided once before spawn) would misvalue metered usage as
43
+ * subscription entitlement, bypassing a finite cash cap.
44
+ */
45
+ export declare function nextEligibleProfile(registry: readonly CredentialProfile[], harnessId: string, policy: ProfilePolicy, current: Pick<CredentialProfile, "profile_id" | "credential_kind"> | null, snapshots: readonly QuotaSnapshot[], readyProfileIds: ReadonlySet<string>, excluded?: ReadonlySet<string>): CredentialProfile | null;
46
+ /**
47
+ * `rotation_retry_eligible` (sol #30): a failover retry is allowed ONLY when
48
+ * the attempt saw a TYPED vendor limit AND produced no deliverable and no
49
+ * workspace mutation — a partially-acted attempt never silently reruns.
50
+ */
51
+ export declare function rotationRetryEligible(input: {
52
+ sawTypedLimit: boolean;
53
+ deliverableEmpty: boolean;
54
+ }): boolean;
55
+ type EmitFn = (type: "route.profile.headroom_exceeded" | "route.profile.rotated" | "route.profile.rotation_exhausted", payload: Record<string, unknown>) => void;
56
+ /**
57
+ * `profile_headroom_preflight` (W5.4): BEFORE spawn, the selected profile's
58
+ * freshest quota windows are checked against the policy threshold. A breach
59
+ * is always a typed event; `rotate` swaps to the next eligible profile with
60
+ * provenance, `ask`/`fail` proceed on the selected profile — the runtime
61
+ * `vendor_limit_rejected` evidence stays the terminating truth.
62
+ */
63
+ export declare function preflightCredentialProfile(args: {
64
+ profile: CredentialProfile;
65
+ harnessId: string;
66
+ policy: ProfilePolicy;
67
+ registry: readonly CredentialProfile[];
68
+ snapshots: readonly QuotaSnapshot[];
69
+ readyProfileIds: ReadonlySet<string>;
70
+ emit: EmitFn;
71
+ }): CredentialProfile;
72
+ /**
73
+ * Default-subject start selection (INV-135, owner scope "auto-balance"): when
74
+ * NO profile is pinned, the policy is `rotate`, and the DEFAULT store's own
75
+ * fresh quota window is at/over the headroom bound, pick the first eligible
76
+ * SUBSCRIPTION profile instead of spawning into a near-certain vendor limit.
77
+ * Strictly opt-in: `fail`/`ask` keep today's default-user behavior untouched
78
+ * (the profile engine's fail action governs PINNED profiles only — throwing
79
+ * here would brick every default user at 90% quota). Unknown or stale usage
80
+ * never rotates.
81
+ */
82
+ export declare function preflightDefaultSubject(args: {
83
+ harnessId: string;
84
+ policy: ProfilePolicy;
85
+ registry: readonly CredentialProfile[];
86
+ snapshots: readonly QuotaSnapshot[];
87
+ readyProfileIds: ReadonlySet<string>;
88
+ defaultRoute: "local_session" | "api_key" | null;
89
+ emit: EmitFn;
90
+ }): CredentialProfile | null;
91
+ /**
92
+ * Reactive failover plan (`vendor_limit_rejected`, W5.4): rotation fires ONLY
93
+ * on the typed predicate under a `rotate` policy, marks the current profile
94
+ * tried (at most once per attempt each), and returns the next target with
95
+ * provenance already emitted — or null when the attempt must fail as-is.
96
+ * `currentProfile: null` is the DEFAULT subject: allowed ONLY when the caller
97
+ * proves the attempt's pre-spawn route was vendor_native (a metered default
98
+ * hitting a limit is a budget fact, not a subscription to fail over from).
99
+ */
100
+ export declare function planReactiveRotation(args: {
101
+ currentProfile: CredentialProfile | null;
102
+ defaultRouteWasVendorNative?: boolean;
103
+ harnessId: string;
104
+ attemptId: string;
105
+ policy: ProfilePolicy;
106
+ registry: readonly CredentialProfile[];
107
+ snapshots: readonly QuotaSnapshot[];
108
+ readyProfileIds: ReadonlySet<string>;
109
+ triedProfiles: Set<string>;
110
+ sawTypedLimit: boolean;
111
+ deliverableEmpty: boolean;
112
+ lastLimit: {
113
+ retryDelayMs: number | null;
114
+ resetsAt: string | null;
115
+ } | null;
116
+ emit: EmitFn;
117
+ }): CredentialProfile | null;
118
+ /**
119
+ * Shared reactive-failover step for BOTH lanes: given the attempt's typed
120
+ * evidence, plan a rotation and rebuild the spec on a NEW vendor session
121
+ * under the next profile — or return null when the attempt must fail as-is.
122
+ */
123
+ export declare function rotateSpecOnTypedLimit(args: {
124
+ spec: HarnessRunSpec;
125
+ harnessId: string;
126
+ attemptId: string;
127
+ policy: ProfilePolicy;
128
+ registry: readonly CredentialProfile[];
129
+ snapshots: readonly QuotaSnapshot[];
130
+ readyProfileIds: ReadonlySet<string>;
131
+ triedProfiles: Set<string>;
132
+ sawTypedLimit: boolean;
133
+ deliverableEmpty: boolean;
134
+ lastLimit: {
135
+ retryDelayMs: number | null;
136
+ resetsAt: string | null;
137
+ } | null;
138
+ emit: EmitFn;
139
+ newSessionId: () => string;
140
+ /** Pre-spawn route estimate for a profile-less spec: default-subject
141
+ * rotation is allowed ONLY off a vendor_native attempt. */
142
+ defaultRouteWasVendorNative?: boolean;
143
+ }): HarnessRunSpec | null;
144
+ export {};
145
+ //# sourceMappingURL=credential-profile-rotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-profile-rotation.d.ts","sourceRoot":"","sources":["../src/credential-profile-rotation.ts"],"names":[],"mappings":"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"}