@xemahq/kernel-contracts 0.4.0 → 0.5.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.
@@ -1,6 +1,7 @@
1
1
  import type { ToolSelectionEntry } from '../../mcp-tool';
2
2
  import type { NodeOverlayFragment } from '../../workflow';
3
3
  import type { SkillRef } from '../../skill';
4
+ import type { BiomeAvailabilityScoped } from '../../biome-availability';
4
5
  import type { CapabilityLayer } from './capability-layer';
5
6
  import type { CompositionWorkspace } from './composition-workspace';
6
7
  export interface AgentRef {
@@ -25,7 +26,7 @@ export interface CompositionLimits {
25
26
  readonly maxSpawns: number;
26
27
  readonly tokenBudget?: number | undefined;
27
28
  }
28
- export interface CompositionNode extends NodeOverlayFragment {
29
+ export interface CompositionNode extends NodeOverlayFragment, BiomeAvailabilityScoped {
29
30
  readonly agent: AgentRef;
30
31
  readonly alias?: string;
31
32
  readonly skills: readonly SkillRef[];
@@ -44,7 +45,7 @@ export interface Composition {
44
45
  readonly capability?: CapabilityLayer;
45
46
  readonly workspace?: CompositionWorkspace;
46
47
  }
47
- export interface ResolvedCompositionNode extends NodeOverlayFragment {
48
+ export interface ResolvedCompositionNode extends NodeOverlayFragment, BiomeAvailabilityScoped {
48
49
  readonly agent: Required<AgentRef>;
49
50
  readonly alias?: string;
50
51
  readonly skills: readonly SkillRef[];
@@ -1 +1 @@
1
- {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/agent-composition/lib/composition.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAKpE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAQD,oBAAY,oBAAoB;IAC9B,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAwBD,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAQ3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AASD,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAE1D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAErC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAM9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAQ9C,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAKD,MAAM,WAAW,WAAW;IAE1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IAEzC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IAStC,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAC3C;AAWD,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAElE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAErC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAM9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAQtD,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAEjC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IAEvC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IAOrC,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAC3C"}
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/agent-composition/lib/composition.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/agent-composition/lib/composition.ts"],"names":[],"mappings":";;;AAmCA,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,iCAAa,CAAA;AACf,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AAQD,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,uCAAe,CAAA;IACf,+CAAuB,CAAA;IACvB,6CAAqB,CAAA;AACvB,CAAC,EAJW,oBAAoB,oCAApB,oBAAoB,QAI/B"}
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/agent-composition/lib/composition.ts"],"names":[],"mappings":";;;AAoCA,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,+BAAW,CAAA;IACX,uCAAmB,CAAA;IACnB,iCAAa,CAAA;AACf,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AAQD,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,uCAAe,CAAA;IACf,+CAAuB,CAAA;IACvB,6CAAqB,CAAA;AACvB,CAAC,EAJW,oBAAoB,oCAApB,oBAAoB,QAI/B"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://xema.dev/schemas/awp-spec.v1.json",
3
- "emittedAt": "2026-06-13T09:08:25.716Z",
3
+ "emittedAt": "2026-06-14T10:17:37.907Z",
4
4
  "spec": {
5
5
  "id": "awp/v1",
6
6
  "version": "1.2.0",
@@ -0,0 +1,2 @@
1
+ export * from './lib/biome-availability';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/biome-availability/index.ts"],"names":[],"mappings":"AAQA,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lib/biome-availability"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/biome-availability/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAQA,2DAAyC"}
@@ -0,0 +1,9 @@
1
+ export interface BiomeAvailabilityFilter {
2
+ readonly include?: readonly string[];
3
+ readonly exclude?: readonly string[];
4
+ }
5
+ export interface BiomeAvailabilityScoped {
6
+ readonly biomeAvailability?: BiomeAvailabilityFilter;
7
+ }
8
+ export declare function isBiomeContributionAllowed(biomeId: string | null | undefined, filter: BiomeAvailabilityFilter | undefined): boolean;
9
+ //# sourceMappingURL=biome-availability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-availability.d.ts","sourceRoot":"","sources":["../../../src/biome-availability/lib/biome-availability.ts"],"names":[],"mappings":"AAsCA,MAAM,WAAW,uBAAuB;IAOtC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAMrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAQD,MAAM,WAAW,uBAAuB;IAKtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CACtD;AAuBD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAC1C,OAAO,CAqBT"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBiomeContributionAllowed = isBiomeContributionAllowed;
4
+ function isBiomeContributionAllowed(biomeId, filter) {
5
+ if (biomeId === null || biomeId === undefined || biomeId.length === 0) {
6
+ return true;
7
+ }
8
+ if (filter === undefined) {
9
+ return true;
10
+ }
11
+ const exclude = filter.exclude ?? [];
12
+ const include = filter.include ?? [];
13
+ if (exclude.includes(biomeId)) {
14
+ return false;
15
+ }
16
+ if (include.length > 0 && !include.includes(biomeId)) {
17
+ return false;
18
+ }
19
+ return true;
20
+ }
21
+ //# sourceMappingURL=biome-availability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-availability.js","sourceRoot":"","sources":["../../../src/biome-availability/lib/biome-availability.ts"],"names":[],"mappings":";;AAyFA,gEAwBC;AAxBD,SAAgB,0BAA0B,CACxC,OAAkC,EAClC,MAA2C;IAG3C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAErC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { CompiledWorkspaceManifest } from './compiled-workspace-manifest';
2
+ import type { BiomeAvailabilityScoped } from '../../biome-availability';
2
3
  import type { ActionRef } from './action-ref';
3
4
  import type { Briefcase } from './briefcase';
4
5
  import type { ConcurrencyGroup } from './concurrency-group';
@@ -72,7 +73,7 @@ export interface CompiledRetryPolicy {
72
73
  readonly maximumIntervalMs: number;
73
74
  readonly nonRetryableErrorTypes: readonly string[];
74
75
  }
75
- export interface CompiledJob {
76
+ export interface CompiledJob extends BiomeAvailabilityScoped {
76
77
  readonly jobKey: string;
77
78
  readonly title: string | null;
78
79
  readonly needs: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"compiled-run.d.ts","sourceRoot":"","sources":["../../../src/workflow/lib/compiled-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiled-run.d.ts","sourceRoot":"","sources":["../../../src/workflow/lib/compiled-run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/kernel-contracts",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Consolidated Xema OS kernel wire contracts — pure types + zod schemas for the 32 kernel protocol surfaces. One package, one npm scope, wildcard per-surface subpath exports. No framework/runtime deps.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/",
@@ -16,6 +16,7 @@
16
16
  import type { ToolSelectionEntry } from '../../mcp-tool';
17
17
  import type { NodeOverlayFragment } from '../../workflow';
18
18
  import type { SkillRef } from '../../skill';
19
+ import type { BiomeAvailabilityScoped } from '../../biome-availability';
19
20
  import type { CapabilityLayer } from './capability-layer';
20
21
  import type { CompositionWorkspace } from './composition-workspace';
21
22
 
@@ -99,7 +100,9 @@ export interface CompositionLimits {
99
100
  * `skills` / `tools` / `modelOverride` attach AT this node — they extend or
100
101
  * override what the referenced agent definition declares intrinsically.
101
102
  */
102
- export interface CompositionNode extends NodeOverlayFragment {
103
+ export interface CompositionNode
104
+ extends NodeOverlayFragment,
105
+ BiomeAvailabilityScoped {
103
106
  /** The agent definition this node runs. */
104
107
  readonly agent: AgentRef;
105
108
  /** Optional alias when the same agent appears more than once in the tree. */
@@ -159,7 +162,9 @@ export interface Composition {
159
162
  * Distinct from `CompositionNode` (the AUTHORED form): a resolved node
160
163
  * has its agent reference fully version-pinned, never `latest`.
161
164
  */
162
- export interface ResolvedCompositionNode extends NodeOverlayFragment {
165
+ export interface ResolvedCompositionNode
166
+ extends NodeOverlayFragment,
167
+ BiomeAvailabilityScoped {
163
168
  /** Fully version-pinned agent reference. */
164
169
  readonly agent: Required<AgentRef>;
165
170
  readonly alias?: string;
@@ -0,0 +1,9 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════
2
+ // ── Biome Availability Contracts — Barrel Export ──
3
+ //
4
+ // Kernel (Layer-0) leaf: the per-definition biome opt-in/opt-out POST-scope
5
+ // filter (DBM.2). Zero cross-subpath deps so agent-composition / skill /
6
+ // capability / workflow / action resolvers can all import it without a cycle.
7
+ // ═══════════════════════════════════════════════════════════════════════════
8
+
9
+ export * from './lib/biome-availability';
@@ -0,0 +1,114 @@
1
+ // ═══════════════════════════════════════════════════════════════════════════
2
+ // ── Biome Availability Filter — per-definition opt-in/opt-out (DBM.2) ──
3
+ //
4
+ // A definition (an Agent Composition node, an Agent definition, a workflow
5
+ // job, a Session) MAY declare which biomes' contributions it wants in or out.
6
+ // This is a POST-SCOPE FILTER applied AFTER implicit-by-scope resolution
7
+ // (the 5-tier `SkillScope`/`CompositionScope` precedence): it NARROWS the
8
+ // already-visible set; it never widens it and it is NOT a parallel
9
+ // availability/binding table (see `.claude/rules/skills-and-composition.md`).
10
+ //
11
+ // Why a filter and not a binding table: the ownership model is implicit-by-
12
+ // scope — a contribution is available because its owning biome is installed
13
+ // and enabled for the org. This filter lets ONE definition say "even though
14
+ // biome X is installed, I don't want its contributions" (exclude) or "only
15
+ // honor biomes Y and Z, ignore everything else" (allow-list include). It is
16
+ // authored on the definition, additive + optional, and absent ⇒ no filtering
17
+ // (every implicitly-visible contribution passes).
18
+ //
19
+ // Fail-fast is unchanged: this filter decides VISIBILITY, not lifecycle. A
20
+ // reference that survives the filter and is still unavailable degrades only
21
+ // when its `MissingReferencePolicy` is `Optional` (see `reference-resolution`).
22
+ //
23
+ // Pure Layer-0 leaf: zero cross-subpath imports so every resolver
24
+ // (agent-composition / skill / capability / workflow / action) can import it
25
+ // without creating a cycle.
26
+ // ═══════════════════════════════════════════════════════════════════════════
27
+
28
+ /**
29
+ * Per-definition opt-in / opt-out over biome-contributed references.
30
+ * Additive + optional everywhere it is attached. Both fields are
31
+ * independent and may be combined; an empty/absent filter never narrows.
32
+ *
33
+ * Precedence when both are set is encoded by {@link isBiomeContributionAllowed}:
34
+ * an explicit {@link exclude} ALWAYS wins (a biome in both lists is excluded),
35
+ * and a non-empty {@link include} turns the filter into an allow-list (any
36
+ * biome not listed is dropped). Non-biome contributions (no owning biome) are
37
+ * never affected.
38
+ */
39
+ export interface BiomeAvailabilityFilter {
40
+ /**
41
+ * Allow-list. When non-empty, ONLY contributions whose owning biome id is
42
+ * in this list survive the filter (plus non-biome contributions, which are
43
+ * never filtered). When omitted/empty, every biome is allowed unless
44
+ * {@link exclude}d.
45
+ */
46
+ readonly include?: readonly string[];
47
+ /**
48
+ * Deny-list. A contribution whose owning biome id is in this list is
49
+ * always dropped, even if it also appears in {@link include}. Omitted/empty
50
+ * ⇒ nothing is force-excluded.
51
+ */
52
+ readonly exclude?: readonly string[];
53
+ }
54
+
55
+ /**
56
+ * The shape a definition mixes in to gain the optional biome opt-in/opt-out
57
+ * knob. Mixed into `CompositionNode`, the Agent definition contract, the
58
+ * workflow job/stage contract, and the Session shape so the field has ONE
59
+ * declaration site (no per-shape restating).
60
+ */
61
+ export interface BiomeAvailabilityScoped {
62
+ /**
63
+ * Optional per-definition biome opt-in/opt-out. POST-scope filter applied
64
+ * after implicit-by-scope resolution. Absent ⇒ no filtering.
65
+ */
66
+ readonly biomeAvailability?: BiomeAvailabilityFilter;
67
+ }
68
+
69
+ /**
70
+ * The single predicate every resolver calls to decide whether a
71
+ * biome-contributed reference survives a definition's
72
+ * {@link BiomeAvailabilityFilter}. Implemented in exactly one place so the
73
+ * include/exclude precedence is never re-derived (and never silently
74
+ * diverges) per resolver.
75
+ *
76
+ * Rules, in order:
77
+ * 1. A contribution with no owning biome (`biomeId` null/undefined) is
78
+ * NEVER filtered — it is not biome-attributed, so opt-in/opt-out does
79
+ * not apply. Returns `true`.
80
+ * 2. No filter, or an empty filter ⇒ everything is allowed. Returns `true`.
81
+ * 3. `exclude` wins: a biome present in `exclude` is dropped. Returns `false`.
82
+ * 4. A non-empty `include` makes the filter an allow-list: a biome NOT in
83
+ * `include` is dropped. Returns `false`.
84
+ * 5. Otherwise allowed. Returns `true`.
85
+ *
86
+ * @param biomeId the owning biome of the contribution, or null/undefined for
87
+ * a non-biome (system/org/user/project-authored) contribution.
88
+ * @param filter the definition's optional filter; absent ⇒ allow all.
89
+ */
90
+ export function isBiomeContributionAllowed(
91
+ biomeId: string | null | undefined,
92
+ filter: BiomeAvailabilityFilter | undefined,
93
+ ): boolean {
94
+ // (1) Non-biome contributions are out of scope for this filter.
95
+ if (biomeId === null || biomeId === undefined || biomeId.length === 0) {
96
+ return true;
97
+ }
98
+ // (2) No filter ⇒ allow all.
99
+ if (filter === undefined) {
100
+ return true;
101
+ }
102
+ const exclude = filter.exclude ?? [];
103
+ const include = filter.include ?? [];
104
+ // (3) exclude always wins.
105
+ if (exclude.includes(biomeId)) {
106
+ return false;
107
+ }
108
+ // (4) non-empty include ⇒ allow-list semantics.
109
+ if (include.length > 0 && !include.includes(biomeId)) {
110
+ return false;
111
+ }
112
+ // (5) allowed.
113
+ return true;
114
+ }
@@ -1,5 +1,6 @@
1
1
  import type { CompiledWorkspaceManifest } from './compiled-workspace-manifest';
2
2
 
3
+ import type { BiomeAvailabilityScoped } from '../../biome-availability';
3
4
  import type { ActionRef } from './action-ref';
4
5
  import type { Briefcase } from './briefcase';
5
6
  import type { ConcurrencyGroup } from './concurrency-group';
@@ -210,7 +211,7 @@ export interface CompiledRetryPolicy {
210
211
  readonly nonRetryableErrorTypes: readonly string[];
211
212
  }
212
213
 
213
- export interface CompiledJob {
214
+ export interface CompiledJob extends BiomeAvailabilityScoped {
214
215
  /** Stable logical key (as authored in YAML). Unique per CompiledRun. */
215
216
  readonly jobKey: string;
216
217
  /** Optional human-readable title; falls back to jobKey in UIs. */