@kici-dev/engine 0.1.27 → 0.3.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 (148) hide show
  1. package/dist/approval/types.d.ts +8 -1
  2. package/dist/approval/types.js +8 -1
  3. package/dist/artifacts/name.d.ts +60 -0
  4. package/dist/artifacts/name.js +71 -0
  5. package/dist/audit/access-log-policy.d.ts +1 -1
  6. package/dist/audit/access-log-policy.js +8 -0
  7. package/dist/audit/activity.d.ts +12 -12
  8. package/dist/audit/retention-policy.js +16 -0
  9. package/dist/billing/plan-type.d.ts +53 -0
  10. package/dist/billing/plan-type.js +70 -0
  11. package/dist/bundler/rolldown-config.d.ts +3 -3
  12. package/dist/check-mode.d.ts +1 -1
  13. package/dist/context/concurrency-strategy.d.ts +34 -0
  14. package/dist/context/concurrency-strategy.js +35 -0
  15. package/dist/context/held-run-job-id.d.ts +45 -0
  16. package/dist/context/held-run-job-id.js +56 -0
  17. package/dist/context/held-run-status.d.ts +33 -0
  18. package/dist/context/held-run-status.js +37 -0
  19. package/dist/context/hold-expiry.d.ts +20 -0
  20. package/dist/context/hold-expiry.js +25 -0
  21. package/dist/context/hold-reason.d.ts +33 -0
  22. package/dist/context/hold-reason.js +23 -0
  23. package/dist/context/hold-type.d.ts +40 -0
  24. package/dist/context/hold-type.js +61 -0
  25. package/dist/context/index.d.ts +9 -1
  26. package/dist/context/index.js +9 -2
  27. package/dist/context/multi-context.d.ts +3 -3
  28. package/dist/context/scope-name.d.ts +29 -0
  29. package/dist/context/scope-name.js +49 -0
  30. package/dist/context/scope-resolver.d.ts +33 -0
  31. package/dist/context/scope-resolver.js +45 -15
  32. package/dist/context/types.d.ts +8 -5
  33. package/dist/dev-ops/operations.d.ts +8 -0
  34. package/dist/dev-ops/operations.js +36 -19
  35. package/dist/diagnostics/infra-alert.d.ts +71 -0
  36. package/dist/diagnostics/infra-alert.js +60 -0
  37. package/dist/env/environment-allowlist.d.ts +4 -4
  38. package/dist/fanout/materialize.d.ts +16 -0
  39. package/dist/fanout/materialize.js +32 -3
  40. package/dist/index.d.ts +15 -6
  41. package/dist/index.js +34 -19
  42. package/dist/inputs/descriptor.d.ts +9 -9
  43. package/dist/inventory.d.ts +4 -4
  44. package/dist/labels.d.ts +82 -2
  45. package/dist/labels.js +119 -1
  46. package/dist/matrix/expand.d.ts +49 -2
  47. package/dist/matrix/expand.js +102 -13
  48. package/dist/matrix/format.d.ts +6 -1
  49. package/dist/matrix/format.js +6 -1
  50. package/dist/mcp/held-run-resolve.d.ts +7 -10
  51. package/dist/mcp/held-run-resolve.js +33 -7
  52. package/dist/metrics/catalog-policy.js +4 -4
  53. package/dist/metrics/metric-catalog.generated.d.ts +959 -739
  54. package/dist/metrics/metric-catalog.generated.js +284 -20
  55. package/dist/metrics/metric-kind-compat.d.ts +26 -0
  56. package/dist/metrics/metric-kind-compat.js +33 -0
  57. package/dist/protocol/analytics-events.d.ts +6 -6
  58. package/dist/protocol/dashboard-api-errors.d.ts +1 -0
  59. package/dist/protocol/dashboard-api-errors.js +5 -1
  60. package/dist/protocol/dashboard-write-operations.d.ts +143 -86
  61. package/dist/protocol/dashboard-write-operations.js +91 -17
  62. package/dist/protocol/messages/access-log.d.ts +437 -392
  63. package/dist/protocol/messages/access-log.js +11 -2
  64. package/dist/protocol/messages/actor.d.ts +2 -2
  65. package/dist/protocol/messages/agent-dev-ops.d.ts +4 -2
  66. package/dist/protocol/messages/agent-dev-ops.js +2 -5
  67. package/dist/protocol/messages/agent-run-result.d.ts +72 -62
  68. package/dist/protocol/messages/auth.d.ts +35 -23
  69. package/dist/protocol/messages/browser.d.ts +81 -5
  70. package/dist/protocol/messages/browser.js +53 -2
  71. package/dist/protocol/messages/capabilities.d.ts +106 -31
  72. package/dist/protocol/messages/capabilities.js +94 -10
  73. package/dist/protocol/messages/common.d.ts +45 -2
  74. package/dist/protocol/messages/common.js +64 -3
  75. package/dist/protocol/messages/dashboard-sealed-write.d.ts +52 -0
  76. package/dist/protocol/messages/dashboard-sealed-write.js +57 -0
  77. package/dist/protocol/messages/dashboard.d.ts +1026 -498
  78. package/dist/protocol/messages/dashboard.js +208 -31
  79. package/dist/protocol/messages/deployment-identity.d.ts +37 -10
  80. package/dist/protocol/messages/deployment-identity.js +30 -3
  81. package/dist/protocol/messages/event-log.d.ts +5 -5
  82. package/dist/protocol/messages/execution-status.d.ts +189 -53
  83. package/dist/protocol/messages/execution-status.js +108 -40
  84. package/dist/protocol/messages/heartbeat-health.d.ts +83 -0
  85. package/dist/protocol/messages/heartbeat-health.js +87 -0
  86. package/dist/protocol/messages/log-stream.d.ts +18 -0
  87. package/dist/protocol/messages/log-stream.js +19 -0
  88. package/dist/protocol/messages/oidc-mint.d.ts +7 -0
  89. package/dist/protocol/messages/oidc-mint.js +7 -0
  90. package/dist/protocol/messages/orchestrator-agent.d.ts +264 -67
  91. package/dist/protocol/messages/orchestrator-agent.js +170 -5
  92. package/dist/protocol/messages/pat-kind.d.ts +1 -1
  93. package/dist/protocol/messages/peer.d.ts +122 -58
  94. package/dist/protocol/messages/peer.js +37 -2
  95. package/dist/protocol/messages/platform-orchestrator.d.ts +561 -217
  96. package/dist/protocol/messages/platform-orchestrator.js +131 -21
  97. package/dist/protocol/messages/run-events.d.ts +5 -5
  98. package/dist/protocol/messages/scaler-event.d.ts +3 -3
  99. package/dist/protocol/messages/source-registration.d.ts +56 -13
  100. package/dist/protocol/messages/source-registration.js +49 -6
  101. package/dist/protocol/source-origin.d.ts +1 -1
  102. package/dist/provenance/attestation-origin.d.ts +1 -1
  103. package/dist/provenance/schema.d.ts +11 -11
  104. package/dist/provenance/verify.js +2 -1
  105. package/dist/provider/changed-files-fetcher.d.ts +21 -2
  106. package/dist/provider/check-run-conclusion.d.ts +2 -2
  107. package/dist/provider/check-status-poster.d.ts +23 -0
  108. package/dist/provider/index.d.ts +2 -2
  109. package/dist/registration/registerable-trigger-type.d.ts +14 -13
  110. package/dist/registration/registerable-trigger-type.js +1 -0
  111. package/dist/sandbox/capabilities.d.ts +6 -0
  112. package/dist/sandbox/capabilities.js +57 -0
  113. package/dist/scaler/scaler-backend-type.d.ts +1 -1
  114. package/dist/status/presentation.d.ts +89 -0
  115. package/dist/status/presentation.js +163 -0
  116. package/dist/trigger/compiled-matchers.d.ts +13 -0
  117. package/dist/trigger/compiled-matchers.js +44 -0
  118. package/dist/trigger/event-buckets.d.ts +44 -0
  119. package/dist/trigger/event-buckets.js +93 -0
  120. package/dist/trigger/matcher.d.ts +7 -3
  121. package/dist/trigger/matcher.js +53 -15
  122. package/dist/trigger/schedule-key.d.ts +14 -0
  123. package/dist/trigger/schedule-key.js +21 -0
  124. package/dist/trigger/trigger-event-type.d.ts +1 -1
  125. package/dist/trigger/trigger-event-type.js +2 -0
  126. package/dist/trigger/types.d.ts +173 -43
  127. package/dist/trigger/types.js +82 -25
  128. package/dist/webhook/event-types.d.ts +56 -0
  129. package/dist/webhook/event-types.js +59 -0
  130. package/dist/ws/ws-like.d.ts +13 -0
  131. package/package.json +12 -4
  132. package/sbom.spdx.json +10 -10
  133. package/dist/environment/host-match.d.ts +0 -25
  134. package/dist/environment/index.d.ts +0 -6
  135. package/dist/environment/multi-env.d.ts +0 -30
  136. package/dist/environment/scope-resolver.d.ts +0 -46
  137. package/dist/environment/scope-template.d.ts +0 -18
  138. package/dist/environment/types.d.ts +0 -119
  139. package/dist/package-manager.d.ts +0 -20
  140. package/dist/protocol/messages/observe.d.ts +0 -76
  141. package/dist/protocol/messages/saas-orchestrator.d.ts +0 -2179
  142. package/dist/protocol/messages/test-run.d.ts +0 -59
  143. package/dist/state-machine/index.d.ts +0 -2
  144. package/dist/state-machine/index.js +0 -3
  145. package/dist/state-machine/machine.d.ts +0 -34
  146. package/dist/state-machine/machine.js +0 -103
  147. package/dist/state-machine/types.d.ts +0 -34
  148. package/dist/state-machine/types.js +0 -15
@@ -1,10 +1,65 @@
1
1
  import "../rolldown-runtime-ClRpJifh.js";
2
2
  //#region src/matrix/expand.ts
3
3
  /**
4
+ * Thrown when a matrix value does not match the documented contract — a
5
+ * `string[]` or a `Record<string, string[]>`. A static matrix is guaranteed by
6
+ * the lock-file schema, but a dynamic matrix returns arbitrary runtime data, so
7
+ * the contract has to be enforced here rather than by the type system.
8
+ */
9
+ var MatrixShapeError = class MatrixShapeError extends Error {
10
+ name = "MatrixShapeError";
11
+ constructor(message) {
12
+ super(message);
13
+ Object.setPrototypeOf(this, MatrixShapeError.prototype);
14
+ }
15
+ };
16
+ /** Describe a rejected value for an error message, without dumping it wholesale. */
17
+ function describeValue(value) {
18
+ if (value === null) return "null";
19
+ if (value === void 0) return "undefined";
20
+ if (Array.isArray(value)) return "an array";
21
+ if (typeof value === "string") return `a string (${JSON.stringify(value)})`;
22
+ if (typeof value === "object") return "an object";
23
+ return `a ${typeof value}`;
24
+ }
25
+ /** Coerce one matrix element, rejecting anything that has no sensible string form. */
26
+ function coerceElement(value, where) {
27
+ if (typeof value === "string") return value;
28
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
29
+ throw new MatrixShapeError(`matrix ${where} must contain strings, got ${describeValue(value)}`);
30
+ }
31
+ /**
32
+ * Validate and normalize a matrix value. Accepts the two documented shapes,
33
+ * coercing numeric and boolean elements to strings (they already reach job
34
+ * names as strings), and rejects everything else with the contract in the
35
+ * message. Dimensions are sorted here so expansion stays deterministic.
36
+ */
37
+ function normalizeMatrixInput(input) {
38
+ if (Array.isArray(input)) return {
39
+ kind: "array",
40
+ values: Array.from(input, (v, i) => coerceElement(v, `values[${i}]`))
41
+ };
42
+ if (input === null || typeof input !== "object") {
43
+ const suffix = typeof input === "string" ? " — a bare string is read as one dimension per character; split it into an array" : "";
44
+ throw new MatrixShapeError(`matrix must be a string array or an object of string arrays, got ${describeValue(input)}${suffix}`);
45
+ }
46
+ const dimensions = [];
47
+ for (const [name, values] of Object.entries(input)) {
48
+ if (!Array.isArray(values)) throw new MatrixShapeError(`matrix dimension "${name}" must be an array, got ${describeValue(values)}`);
49
+ dimensions.push([name, Array.from(values, (v, i) => coerceElement(v, `dimension "${name}"[${i}]`))]);
50
+ }
51
+ dimensions.sort((a, b) => a[0].localeCompare(b[0]));
52
+ return {
53
+ kind: "object",
54
+ dimensions
55
+ };
56
+ }
57
+ /**
4
58
  * Compute the cartesian product of the given value sets in row-major order.
5
59
  * An empty set list yields a single empty tuple; any empty set yields no tuples.
6
60
  */
7
61
  function cartesianProduct(sets) {
62
+ if (sets.some((set) => set.length === 0)) return [];
8
63
  return sets.reduce((acc, set) => acc.flatMap((tuple) => set.map((value) => [...tuple, value])), [[]]);
9
64
  }
10
65
  /**
@@ -24,20 +79,54 @@ function expandMultiDimension(matrix) {
24
79
  if (dimensions.length === 0) return [];
25
80
  dimensions.sort((a, b) => a[0].localeCompare(b[0]));
26
81
  const names = dimensions.map(([name]) => name);
27
- return cartesianProduct(dimensions.map(([, values]) => values)).map((combo) => {
28
- const result = {};
29
- names.forEach((name, idx) => {
30
- result[name] = combo[idx];
31
- });
32
- return result;
33
- });
82
+ return cartesianProduct(dimensions.map(([, values]) => values)).map((combo) => Object.fromEntries(names.map((name, idx) => [name, combo[idx]])));
83
+ }
84
+ /**
85
+ * Validated entry point: normalizes an untrusted matrix value, then dispatches
86
+ * to single- or multi-dimensional expansion. {@link expandSingleDimension} and
87
+ * {@link expandMultiDimension} remain available for a caller that already holds
88
+ * a typed value; this is the one to use for anything crossing a runtime
89
+ * boundary, such as the return value of a dynamic matrix function.
90
+ */
91
+ function expandMatrix(input) {
92
+ const normalized = normalizeMatrixInput(input);
93
+ if (normalized.kind === "array") return expandSingleDimension(normalized.values);
94
+ return expandMultiDimension(Object.fromEntries(normalized.dimensions));
34
95
  }
35
96
  /**
36
- * Unified expand function that dispatches to single or multi-dimensional expansion.
97
+ * How many combinations a matrix would expand to, computed WITHOUT building
98
+ * them. Callers use this to refuse an oversized matrix before allocating it —
99
+ * the product is checked, never materialized.
37
100
  */
38
- function expandMatrix(matrix) {
39
- if (Array.isArray(matrix)) return expandSingleDimension(matrix);
40
- return expandMultiDimension(matrix);
101
+ function matrixCombinationCount(input) {
102
+ const normalized = normalizeMatrixInput(input);
103
+ if (normalized.kind === "array") return normalized.values.length;
104
+ if (normalized.dimensions.length === 0) return 0;
105
+ return normalized.dimensions.reduce((acc, [, values]) => acc * values.length, 1);
106
+ }
107
+ /** Stable identity for a combination: its key/value pairs, key-sorted. */
108
+ function combinationKey(combo) {
109
+ return JSON.stringify(Object.entries(combo).filter(([, value]) => value !== void 0).sort((a, b) => a[0].localeCompare(b[0])));
110
+ }
111
+ /**
112
+ * The first combination whose key collides with an earlier one, or `null` when
113
+ * every combination is distinct.
114
+ *
115
+ * `keyOf` decides what "the same combination" means. Callers that own a job name
116
+ * pass a renderer for the expanded name, because the collision that actually
117
+ * hurts is two children sharing a name — they are indistinguishable to an
118
+ * operator and ambiguous as a needs-edge target. Two structurally different
119
+ * combinations can still render the same name, so name-keying is strictly
120
+ * stronger than the structural default.
121
+ */
122
+ function findDuplicateCombination(combos, keyOf = combinationKey) {
123
+ const seen = /* @__PURE__ */ new Set();
124
+ for (const combo of combos) {
125
+ const key = keyOf(combo);
126
+ if (seen.has(key)) return combo;
127
+ seen.add(key);
128
+ }
129
+ return null;
41
130
  }
42
131
  /**
43
132
  * Apply include/exclude modifications to expanded matrix combinations.
@@ -62,11 +151,11 @@ function applyIncludeExclude(expanded, include, exclude) {
62
151
  const comboKeys = Object.keys(combo);
63
152
  if (inclKeys.length !== comboKeys.length) return false;
64
153
  return inclKeys.every((key) => combo[key] === incl[key]);
65
- })) result.push(incl);
154
+ })) result.push(Object.fromEntries([...inclKeys].sort((a, b) => a.localeCompare(b)).map((key) => [key, incl[key]])));
66
155
  }
67
156
  return result;
68
157
  }
69
158
  //#endregion
70
- export { applyIncludeExclude, cartesianProduct, expandMatrix, expandMultiDimension, expandSingleDimension };
159
+ export { MatrixShapeError, applyIncludeExclude, cartesianProduct, expandMatrix, expandMultiDimension, expandSingleDimension, findDuplicateCombination, matrixCombinationCount, normalizeMatrixInput };
71
160
 
72
161
  //# sourceMappingURL=expand.js.map
@@ -5,6 +5,11 @@ import type { MatrixValues } from './expand.js';
5
5
  * Multi-dimensional: "linux, 18"
6
6
  */
7
7
  export declare function formatMatrixSuffix(matrixValues: MatrixValues): string;
8
- /** Expanded child job name: `${baseName} (${suffix})`. MUST match the local executor. */
8
+ /**
9
+ * Expanded child job name: `${baseName} (${suffix})`. The `(...)` wrapper is
10
+ * load-bearing, not decoration: `variantLabelOf` (fanout/materialize.ts) and
11
+ * `buildMatrixOutputsEnvelope` (the orchestrator's `byMatrix` key) both recover
12
+ * the suffix by slicing it back out of the name.
13
+ */
9
14
  export declare function formatExpandedJobName(baseName: string, matrixValues: MatrixValues): string;
10
15
  //# sourceMappingURL=format.d.ts.map
@@ -10,7 +10,12 @@ function formatMatrixSuffix(matrixValues) {
10
10
  if (defined.length === 1 && defined[0][0] === "value") return defined[0][1];
11
11
  return defined.map(([, v]) => v).join(", ");
12
12
  }
13
- /** Expanded child job name: `${baseName} (${suffix})`. MUST match the local executor. */
13
+ /**
14
+ * Expanded child job name: `${baseName} (${suffix})`. The `(...)` wrapper is
15
+ * load-bearing, not decoration: `variantLabelOf` (fanout/materialize.ts) and
16
+ * `buildMatrixOutputsEnvelope` (the orchestrator's `byMatrix` key) both recover
17
+ * the suffix by slicing it back out of the name.
18
+ */
14
19
  function formatExpandedJobName(baseName, matrixValues) {
15
20
  return `${baseName} (${formatMatrixSuffix(matrixValues)})`;
16
21
  }
@@ -1,13 +1,3 @@
1
- /**
2
- * Shared held-run resolution for the `kici approve` / `kici reject` commands and
3
- * the developer MCP `approve_run` / `reject_run` tools.
4
- *
5
- * Both surfaces first list the pending holds for a run, then resolve the one
6
- * the caller named via `job` / `step` (or the sole pending hold when there is
7
- * exactly one and no filter is given). The resolution is a pure function so it
8
- * can be unit-tested without HTTP, and it stays import-free so it is safe to
9
- * re-export from the browser-facing engine barrel.
10
- */
11
1
  /** Hold scope, mirroring the engine `HoldScope` enum. */
12
2
  export type HeldRunScope = 'workflow' | 'job' | 'step';
13
3
  /** A pending-hold row as returned by the held-runs list. */
@@ -18,6 +8,13 @@ export interface HeldRunSummary {
18
8
  holdScope?: HeldRunScope;
19
9
  stepIndex?: number | null;
20
10
  status: string;
11
+ /**
12
+ * Persisted `held_runs.hold_type`, when the orchestrator's list response
13
+ * carried one. Optional and un-normalized: callers pass it through
14
+ * `normalizePersistedHoldType` before branching. Absent from an older
15
+ * orchestrator's response.
16
+ */
17
+ holdType?: string;
21
18
  /** Computed drift payload for a `when: 'drift'` step hold; absent otherwise. */
22
19
  payload?: {
23
20
  summaryMarkdown: string;
@@ -1,6 +1,32 @@
1
1
  import "../rolldown-runtime-ClRpJifh.js";
2
+ import { HeldRunStatus } from "../context/held-run-status.js";
2
3
  //#region src/mcp/held-run-resolve.ts
3
4
  /**
5
+ * Shared held-run resolution for the `kici approve` / `kici reject` commands and
6
+ * the developer MCP `approve_run` / `reject_run` tools.
7
+ *
8
+ * Both surfaces first list the pending holds for a run, then resolve the one
9
+ * the caller named via `job` / `step` (or the sole pending hold when there is
10
+ * exactly one and no filter is given). The resolution is a pure function so it
11
+ * can be unit-tested without HTTP, and it imports nothing beyond the shared
12
+ * held-run vocabulary, so it is safe to re-export from the browser-facing
13
+ * engine barrel.
14
+ */
15
+ /**
16
+ * Name a hold the way the caller would type it: the literal `jobId` (so an
17
+ * `__install__…` sentinel or an opaque legacy id is reproduced verbatim), with
18
+ * the step index prefixed for a step-scoped hold.
19
+ */
20
+ function describeHold(hold) {
21
+ const job = hold.jobId || "(unnamed hold)";
22
+ if (hold.holdScope === "step" && hold.stepIndex != null) return `step ${hold.stepIndex} of ${job}`;
23
+ return job;
24
+ }
25
+ /** The distinct hold descriptions, in listing order, for an error message. */
26
+ function listCandidates(holds) {
27
+ return [...new Set(holds.map(describeHold))].join(", ");
28
+ }
29
+ /**
4
30
  * Resolve the held-run id matching the filter from a list of pending holds.
5
31
  *
6
32
  * - `step` requires `job` and matches a `step`-scoped hold whose step index
@@ -9,7 +35,7 @@ import "../rolldown-runtime-ClRpJifh.js";
9
35
  * - With no filter, the sole pending hold is used; ambiguity is an error.
10
36
  */
11
37
  function resolveHeldRunId(holds, filter) {
12
- const pending = holds.filter((h) => h.status === "pending");
38
+ const pending = holds.filter((h) => h.status === HeldRunStatus.enum.pending);
13
39
  if (pending.length === 0) return {
14
40
  ok: false,
15
41
  error: "No pending approval holds found for this run."
@@ -19,12 +45,12 @@ function resolveHeldRunId(holds, filter) {
19
45
  ok: false,
20
46
  error: "--step requires --job to identify the held step."
21
47
  };
22
- return pickSingle(pending.filter((h) => h.holdScope === "step" && h.jobId === filter.job && String(h.stepIndex ?? "") === filter.step), `step ${filter.step} of job '${filter.job}'`);
48
+ return pickSingle(pending.filter((h) => h.holdScope === "step" && h.jobId === filter.job && String(h.stepIndex ?? "") === filter.step), `step ${filter.step} of job '${filter.job}'`, pending);
23
49
  }
24
- if (filter.job !== void 0) return pickSingle(pending.filter((h) => h.jobId === filter.job && h.holdScope !== "step"), `job '${filter.job}'`);
50
+ if (filter.job !== void 0) return pickSingle(pending.filter((h) => h.jobId === filter.job && h.holdScope !== "step"), `job '${filter.job}'`, pending);
25
51
  if (pending.length > 1) return {
26
52
  ok: false,
27
- error: "Multiple pending holds for this run. Use --job <name> (and --step <index>) to choose one."
53
+ error: `Multiple pending holds for this run. Use --job <name> (and --step <index>) to choose one. Candidates: ${listCandidates(pending)}.`
28
54
  };
29
55
  return {
30
56
  ok: true,
@@ -32,14 +58,14 @@ function resolveHeldRunId(holds, filter) {
32
58
  hold: pending[0]
33
59
  };
34
60
  }
35
- function pickSingle(matches, label) {
61
+ function pickSingle(matches, label, pending) {
36
62
  if (matches.length === 0) return {
37
63
  ok: false,
38
- error: `No pending hold found for ${label}.`
64
+ error: `No pending hold found for ${label}. Pending holds: ${listCandidates(pending)}.`
39
65
  };
40
66
  if (matches.length > 1) return {
41
67
  ok: false,
42
- error: `Multiple pending holds match ${label}; cannot disambiguate.`
68
+ error: `Multiple pending holds match ${label}; cannot disambiguate. Candidates: ${listCandidates(matches)}.`
43
69
  };
44
70
  return {
45
71
  ok: true,
@@ -259,10 +259,6 @@ const METRIC_LABEL_POLICY = {
259
259
  "v8js.gc.type": { maxUniqueValues: 6 },
260
260
  scaler: { values: AGENT_SCALER_VALUES }
261
261
  },
262
- "v8js.memory.heap.limit": {
263
- "v8js.heap.space.name": { maxUniqueValues: 20 },
264
- scaler: { values: AGENT_SCALER_VALUES }
265
- },
266
262
  "v8js.memory.heap.used": {
267
263
  "v8js.heap.space.name": { maxUniqueValues: 20 },
268
264
  scaler: { values: AGENT_SCALER_VALUES }
@@ -274,6 +270,10 @@ const METRIC_LABEL_POLICY = {
274
270
  "v8js.memory.heap.space.physical_size": {
275
271
  "v8js.heap.space.name": { maxUniqueValues: 20 },
276
272
  scaler: { values: AGENT_SCALER_VALUES }
273
+ },
274
+ "v8js.resource.active": {
275
+ "v8js.resource.type": { maxUniqueValues: 20 },
276
+ scaler: { values: AGENT_SCALER_VALUES }
277
277
  }
278
278
  };
279
279
  //#endregion