@kontextmind/kxm 0.7.40 → 0.7.44

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 (178) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +45 -7
  3. package/docs/README.md +5 -3
  4. package/docs/agent-skills.md +1 -1
  5. package/docs/architecture.md +1 -1
  6. package/docs/configuration.md +28 -5
  7. package/docs/{vnext → contracts}/README.md +7 -7
  8. package/docs/{vnext → contracts}/architecture.md +2 -2
  9. package/docs/{vnext → contracts}/migration.md +25 -25
  10. package/docs/{vnext → contracts}/routing.md +2 -2
  11. package/docs/{vnext → contracts}/synchronization.md +1 -1
  12. package/docs/{vnext → contracts}/validation.md +7 -7
  13. package/docs/getting-started.md +1 -1
  14. package/docs/kb/qa-authentik-authentication.md +47 -0
  15. package/docs/kb/qa-extension-install-and-hub-bootstrap.md +68 -0
  16. package/docs/kb/qa-hub-on-a-public-host.md +31 -0
  17. package/docs/kb/qa-sqlite-vs-duckdb.md +18 -0
  18. package/docs/kb/qa-what-the-hub-stores.md +47 -0
  19. package/docs/packages.md +91 -0
  20. package/docs/templates/architecture.md +1 -1
  21. package/docs/test-matrix.md +6 -6
  22. package/docs/tui-components.md +131 -0
  23. package/examples/README.md +2 -2
  24. package/examples/{vnext → project}/.kxm/agents/critic-3.yaml +1 -1
  25. package/examples/{vnext → project}/README.md +4 -4
  26. package/package.json +18 -8
  27. package/packages/core/tui/CHANGELOG.md +19 -0
  28. package/packages/core/tui/LICENSE +21 -0
  29. package/packages/core/tui/README.md +45 -0
  30. package/packages/core/tui/dist/index.js +1439 -0
  31. package/packages/core/tui/src/adapters/pi.ts +73 -0
  32. package/packages/core/tui/src/adapters/terminal.ts +106 -0
  33. package/packages/core/tui/src/exports/index.ts +30 -0
  34. package/packages/core/tui/src/services/registry.ts +274 -0
  35. package/packages/core/tui/src/tui/keys.ts +130 -0
  36. package/packages/core/tui/src/tui/layout.ts +117 -0
  37. package/packages/core/tui/src/tui/panel.ts +435 -0
  38. package/packages/core/tui/src/tui/panelComponent.ts +208 -0
  39. package/packages/core/tui/src/tui/render.ts +309 -0
  40. package/packages/core/tui/src/tui/theme.ts +145 -0
  41. package/packages/core/tui/src/types/surface.ts +407 -0
  42. package/plugins/kxm/.claude-plugin/plugin.json +1 -1
  43. package/plugins/kxm/dist/cli.js +681 -553
  44. package/plugins/kxm/dist/extension.js +18 -18
  45. package/plugins/kxm/dist/mcp-server.js +1 -1
  46. package/plugins/kxm/dist/{vnext-runtime-supervisor.js → runtime-supervisor.js} +553 -553
  47. package/plugins/kxm/dist/runtime.js +608 -608
  48. package/plugins/kxm/dist/server.js +13 -13
  49. package/plugins/kxm/package.json +2 -2
  50. package/plugins/kxm/skills/kxm-project-setup/SKILL.md +2 -2
  51. package/plugins/kxm/skills/kxm-runs/SKILL.md +3 -3
  52. package/plugins/kxm/skills/kxm-session/SKILL.md +1 -1
  53. package/plugins/kxm/skills/kxm-workflow/SKILL.md +1 -1
  54. package/plugins/kxm/src/autocomplete.ts +4 -4
  55. package/plugins/kxm/src/{vnext-bindings.ts → bindings.ts} +48 -48
  56. package/plugins/kxm/src/cli/hub.ts +3 -3
  57. package/plugins/kxm/src/cli/{vnext.ts → project.ts} +106 -106
  58. package/plugins/kxm/src/cli/roles.ts +9 -9
  59. package/plugins/kxm/src/cli/system.ts +2 -2
  60. package/plugins/kxm/src/cli/tasks.ts +8 -8
  61. package/plugins/kxm/src/cli/workflows.ts +8 -8
  62. package/plugins/kxm/src/cli.ts +47 -47
  63. package/plugins/kxm/src/config.ts +69 -14
  64. package/plugins/kxm/src/database.ts +4 -4
  65. package/plugins/kxm/src/{vnext-engine-artifacts.ts → engine-artifacts.ts} +7 -7
  66. package/plugins/kxm/src/{vnext-engine-command.ts → engine-command.ts} +40 -40
  67. package/plugins/kxm/src/{vnext-engine-compile.ts → engine-compile.ts} +64 -64
  68. package/plugins/kxm/src/{vnext-engine-evidence.ts → engine-evidence.ts} +26 -26
  69. package/plugins/kxm/src/{vnext-engine-fold.ts → engine-fold.ts} +99 -99
  70. package/plugins/kxm/src/{vnext-engine-gate-records.ts → engine-gate-records.ts} +105 -105
  71. package/plugins/kxm/src/{vnext-engine-plan.ts → engine-plan.ts} +69 -69
  72. package/plugins/kxm/src/{vnext-engine.ts → engine.ts} +502 -502
  73. package/plugins/kxm/src/gate-hash.ts +10 -0
  74. package/plugins/kxm/src/{vnext-harness.ts → harness.ts} +1 -1
  75. package/plugins/kxm/src/hub.ts +1 -1
  76. package/plugins/kxm/src/init-guide-setup.ts +3 -3
  77. package/plugins/kxm/src/{vnext-init.ts → init.ts} +93 -93
  78. package/plugins/kxm/src/kxm-install-kind.ts +1 -1
  79. package/plugins/kxm/src/kxm-update-config.ts +2 -2
  80. package/plugins/kxm/src/local-snapshot.ts +23 -23
  81. package/plugins/kxm/src/mcp-server.ts +1 -1
  82. package/plugins/kxm/src/{vnext-migrate.ts → migrate.ts} +123 -123
  83. package/plugins/kxm/src/model-inventory.ts +1 -1
  84. package/plugins/kxm/src/{vnext-oneshot-evidence.ts → oneshot-evidence.ts} +2 -2
  85. package/plugins/kxm/src/{vnext-oneshot-process.ts → oneshot-process.ts} +4 -4
  86. package/plugins/kxm/src/{vnext-oneshot-producer.ts → oneshot-producer.ts} +24 -24
  87. package/plugins/kxm/src/{vnext-permission.ts → permission.ts} +86 -86
  88. package/plugins/kxm/src/{vnext-pi-producer.ts → pi-producer.ts} +13 -13
  89. package/plugins/kxm/src/{vnext-config.ts → project-config.ts} +177 -177
  90. package/plugins/kxm/src/{vnext-repair.ts → repair.ts} +159 -159
  91. package/plugins/kxm/src/restricted-yaml.d.mts +3 -3
  92. package/plugins/kxm/src/restricted-yaml.mjs +4 -4
  93. package/plugins/kxm/src/{vnext-runtime-owner.ts → runtime-owner.ts} +35 -35
  94. package/plugins/kxm/src/{vnext-runtime.ts → runtime-service.ts} +136 -136
  95. package/plugins/kxm/src/{vnext-runtime-store.ts → runtime-store.ts} +145 -145
  96. package/plugins/kxm/src/{vnext-runtime-supervisor.ts → runtime-supervisor.ts} +80 -80
  97. package/plugins/kxm/src/runtime.ts +6 -6
  98. package/plugins/kxm/src/session-work.ts +3 -3
  99. package/plugins/kxm/src/studio-layout.ts +6 -6
  100. package/plugins/kxm/src/{vnext-template.ts → template.ts} +33 -33
  101. package/plugins/kxm/src/tui.ts +10 -24
  102. package/schemas/{vnext/README.md → README.md} +3 -3
  103. package/schemas/{vnext/agent.schema.json → agent.schema.json} +1 -1
  104. package/schemas/{vnext/assignment-result.schema.json → assignment-result.schema.json} +1 -1
  105. package/schemas/{vnext/backup-manifest.schema.json → backup-manifest.schema.json} +1 -1
  106. package/schemas/{vnext/candidate.schema.json → candidate.schema.json} +1 -1
  107. package/schemas/{vnext/common.schema.json → common.schema.json} +2 -2
  108. package/schemas/{vnext/context-candidate.schema.json → context-candidate.schema.json} +1 -1
  109. package/schemas/{vnext/context-packet.schema.json → context-packet.schema.json} +1 -1
  110. package/schemas/{vnext/delivery-manifest.schema.json → delivery-manifest.schema.json} +1 -1
  111. package/schemas/{vnext/drive-receipt.schema.json → drive-receipt.schema.json} +2 -2
  112. package/schemas/{vnext/environment.schema.json → environment.schema.json} +1 -1
  113. package/schemas/{vnext/gate-registry.schema.json → gate-registry.schema.json} +1 -1
  114. package/schemas/{vnext/handoff-manifest.schema.json → handoff-manifest.schema.json} +1 -1
  115. package/schemas/{vnext/init-operation.schema.json → init-operation.schema.json} +1 -1
  116. package/schemas/{vnext/local-repository-bindings.schema.json → local-repository-bindings.schema.json} +1 -1
  117. package/schemas/{vnext/memory-record.schema.json → memory-record.schema.json} +1 -1
  118. package/schemas/{vnext/migration-decision.schema.json → migration-decision.schema.json} +1 -1
  119. package/schemas/{vnext/migration-plan.schema.json → migration-plan.schema.json} +1 -1
  120. package/schemas/{vnext/migration-receipt.schema.json → migration-receipt.schema.json} +1 -1
  121. package/schemas/{vnext/model.schema.json → model.schema.json} +1 -1
  122. package/schemas/{vnext/modes.schema.json → modes.schema.json} +1 -1
  123. package/schemas/{vnext/permission-diff.schema.json → permission-diff.schema.json} +1 -1
  124. package/schemas/policy-draft/README.md +2 -2
  125. package/schemas/{vnext/prices.schema.json → prices.schema.json} +1 -1
  126. package/schemas/{vnext/project.schema.json → project.schema.json} +1 -1
  127. package/schemas/{vnext/repository.schema.json → repository.schema.json} +1 -1
  128. package/schemas/{vnext/role.schema.json → role.schema.json} +1 -1
  129. package/schemas/{vnext/run-event.schema.json → run-event.schema.json} +1 -1
  130. package/schemas/{vnext/session-brief.schema.json → session-brief.schema.json} +2 -2
  131. package/schemas/{vnext/sync-event.schema.json → sync-event.schema.json} +1 -1
  132. package/schemas/{vnext/template-provenance.schema.json → template-provenance.schema.json} +1 -1
  133. package/schemas/{vnext/workflow.schema.json → workflow.schema.json} +1 -1
  134. package/scripts/build-package.mjs +59 -0
  135. package/scripts/build-runtime.mjs +3 -2
  136. package/scripts/check-generated.mjs +2 -1
  137. package/scripts/check-versions.mjs +12 -1
  138. package/scripts/docker-install-smoke.mjs +268 -0
  139. package/scripts/emit-codex-artifacts.mjs +1 -1
  140. package/scripts/kxm-bump-version.mjs +53 -3
  141. package/scripts/kxm-hub.mjs +36 -0
  142. package/scripts/kxm-runtime-supervisor.mjs +3 -3
  143. package/scripts/package-surfaces.mjs +39 -0
  144. package/plugins/kxm/src/vnext-gate-hash.ts +0 -10
  145. /package/docs/{vnext → contracts}/effects-and-recovery.md +0 -0
  146. /package/docs/{vnext → contracts}/lifecycles.md +0 -0
  147. /package/docs/{vnext → contracts}/terminology.md +0 -0
  148. /package/examples/{vnext → project}/.kxm/agents/coordinator.yaml +0 -0
  149. /package/examples/{vnext → project}/.kxm/agents/critic-1.yaml +0 -0
  150. /package/examples/{vnext → project}/.kxm/agents/critic-2.yaml +0 -0
  151. /package/examples/{vnext → project}/.kxm/agents/implementer.yaml +0 -0
  152. /package/examples/{vnext → project}/.kxm/agents/planner.yaml +0 -0
  153. /package/examples/{vnext → project}/.kxm/agents/reproducer.yaml +0 -0
  154. /package/examples/{vnext → project}/.kxm/agents/reviewer.yaml +0 -0
  155. /package/examples/{vnext → project}/.kxm/gates.yaml +0 -0
  156. /package/examples/{vnext → project}/.kxm/models/critic-claude.yaml +0 -0
  157. /package/examples/{vnext → project}/.kxm/models/critic-gemini.yaml +0 -0
  158. /package/examples/{vnext → project}/.kxm/models/critic-grok.yaml +0 -0
  159. /package/examples/{vnext → project}/.kxm/models/implementation.yaml +0 -0
  160. /package/examples/{vnext → project}/.kxm/models/primary.yaml +0 -0
  161. /package/examples/{vnext → project}/.kxm/prices.yaml +0 -0
  162. /package/examples/{vnext → project}/.kxm/project/env.yaml +0 -0
  163. /package/examples/{vnext → project}/.kxm/project.yaml +0 -0
  164. /package/examples/{vnext → project}/.kxm/repo/repo.yaml +0 -0
  165. /package/examples/{vnext → project}/.kxm/workflows/default.yaml +0 -0
  166. /package/examples/{vnext → project}/.kxm/workflows/fix.yaml +0 -0
  167. /package/examples/{vnext → project}/.kxm/workflows/improve.yaml +0 -0
  168. /package/examples/{vnext → project}/records/assignment-result-recorded.json +0 -0
  169. /package/examples/{vnext → project}/records/assignment-result.json +0 -0
  170. /package/examples/{vnext → project}/records/context-candidate.json +0 -0
  171. /package/examples/{vnext → project}/records/delivery-manifest.json +0 -0
  172. /package/examples/{vnext → project}/records/effect-uncertainty-resolved-sync.json +0 -0
  173. /package/examples/{vnext → project}/records/effect-uncertainty-resolved.json +0 -0
  174. /package/examples/{vnext → project}/records/run-created.json +0 -0
  175. /package/examples/{vnext → project}/records/sync-event.json +0 -0
  176. /package/examples/{vnext → project}/repositories/api/.kxm/repo/env.yaml +0 -0
  177. /package/examples/{vnext → project}/repositories/api/.kxm/repo/repo.yaml +0 -0
  178. /package/examples/{vnext → project}/repositories/web/.kxm/repo/repo.yaml +0 -0
@@ -3,50 +3,50 @@ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  import type { ContextItem } from "./context.ts";
5
5
  import {
6
- VnextConfigError,
7
- loadVnextProject,
8
- vnextCanonicalJson,
6
+ KxmConfigError,
7
+ loadKxmProject,
8
+ kxmCanonicalJson,
9
9
  type JsonObject,
10
10
  type JsonValue,
11
- type VnextConfigOptions,
12
- type VnextProjectBundle,
13
- } from "./vnext-config.ts";
14
- import { foldVnextRunState, isTerminalRunStatus, VNEXT_RUN_STATE_SCHEMA, vnextFoldPanelAttemptIds, type VnextRunState } from "./vnext-engine-fold.ts";
15
- import { verifyVnextGateEvidence } from "./vnext-engine-evidence.ts";
16
- import { loadVnextRunPlanEnvelope } from "./vnext-engine-plan.ts";
11
+ type KxmConfigOptions,
12
+ type KxmProjectBundle,
13
+ } from "./project-config.ts";
14
+ import { foldKxmRunState, isTerminalRunStatus, KXM_RUN_STATE_SCHEMA, kxmFoldPanelAttemptIds, type KxmRunState } from "./engine-fold.ts";
15
+ import { verifyKxmGateEvidence } from "./engine-evidence.ts";
16
+ import { loadKxmRunPlanEnvelope } from "./engine-plan.ts";
17
17
  import {
18
- registerVnextRuntimeHandle,
19
- resolveVnextGateHold,
20
- unregisterVnextRuntimeHandle,
21
- vnextAttemptControllers,
22
- } from "./vnext-runtime-owner.ts";
18
+ registerKxmRuntimeHandle,
19
+ resolveKxmGateHold,
20
+ unregisterKxmRuntimeHandle,
21
+ kxmAttemptControllers,
22
+ } from "./runtime-owner.ts";
23
23
  import {
24
- VNEXT_ABSENT_MEMORY_REVISION,
25
- VNEXT_RUN_EVENT_SCHEMA,
26
- VnextRunEventStore,
27
- VnextRuntimeRegistry,
28
- newVnextCommandId,
29
- newVnextEventId,
30
- newVnextRunId,
24
+ KXM_ABSENT_MEMORY_REVISION,
25
+ KXM_RUN_EVENT_SCHEMA,
26
+ KxmRunEventStore,
27
+ KxmRuntimeRegistry,
28
+ newKxmCommandId,
29
+ newKxmEventId,
30
+ newKxmRunId,
31
31
  runtimeError,
32
- vnextRuntimePaths,
33
- type VnextRunEvent,
34
- type VnextRunRecord,
35
- type VnextRunStatus,
36
- } from "./vnext-runtime-store.ts";
32
+ kxmRuntimePaths,
33
+ type KxmRunEvent,
34
+ type KxmRunRecord,
35
+ type KxmRunStatus,
36
+ } from "./runtime-store.ts";
37
37
 
38
38
  /* ------------------------------------------------------------------ *
39
39
  * Policy revisions derived deterministically from the bundle
40
40
  * ------------------------------------------------------------------ */
41
41
 
42
- export interface VnextPolicyRevisions {
42
+ export interface KxmPolicyRevisions {
43
43
  configRevision: string;
44
44
  memoryRevision: string;
45
45
  executorPolicyRevision: string;
46
46
  toolPolicyRevision: string;
47
47
  }
48
48
 
49
- export interface VnextMemoryRevisionOptions {
49
+ export interface KxmMemoryRevisionOptions {
50
50
  promotedState?: readonly ContextItem[];
51
51
  memoryDir?: string;
52
52
  skillsDir?: string;
@@ -65,7 +65,7 @@ function objectValue(value: JsonValue | undefined): JsonObject | undefined {
65
65
  }
66
66
 
67
67
  /** Executor policy: the union of executor identities referenced anywhere in the bundle. */
68
- export function vnextExecutorPolicyRevision(bundle: VnextProjectBundle): string {
68
+ export function kxmExecutorPolicyRevision(bundle: KxmProjectBundle): string {
69
69
  const executors = new Set<string>();
70
70
  const defaultExecutor = bundle.project.value.defaultExecutor;
71
71
  if (typeof defaultExecutor === "string") executors.add(defaultExecutor);
@@ -73,11 +73,11 @@ export function vnextExecutorPolicyRevision(bundle: VnextProjectBundle): string
73
73
  const executor = agent.value.executor;
74
74
  if (typeof executor === "string") executors.add(executor);
75
75
  }
76
- return sha256Of(vnextCanonicalJson([...executors].sort() as JsonValue));
76
+ return sha256Of(kxmCanonicalJson([...executors].sort() as JsonValue));
77
77
  }
78
78
 
79
79
  /** Tool policy: canonical agent/step tool ceilings across the bundle. */
80
- export function vnextToolPolicyRevision(bundle: VnextProjectBundle): string {
80
+ export function kxmToolPolicyRevision(bundle: KxmProjectBundle): string {
81
81
  const policies: JsonObject[] = [];
82
82
  for (const agent of [...bundle.agents.values()].sort((left, right) => String(left.id).localeCompare(String(right.id)))) {
83
83
  policies.push({ agent: agent.id ?? "unknown", tools: (objectValue(agent.value.tools) ?? null) as JsonValue });
@@ -91,7 +91,7 @@ export function vnextToolPolicyRevision(bundle: VnextProjectBundle): string {
91
91
  }
92
92
  }
93
93
  }
94
- return sha256Of(vnextCanonicalJson({ policies, gateRegistry: bundle.gateRegistry?.value ?? null }));
94
+ return sha256Of(kxmCanonicalJson({ policies, gateRegistry: bundle.gateRegistry?.value ?? null }));
95
95
  }
96
96
 
97
97
  function collectMemoryFiles(dir: string, baseDir: string, ignoreSubdirs: Set<string> = new Set()): { relPath: string; fullPath: string }[] {
@@ -116,9 +116,9 @@ function collectMemoryFiles(dir: string, baseDir: string, ignoreSubdirs: Set<str
116
116
  * Git-authored set (.kxm/memory, excluding candidates; .kxm/skills/promoted) plus
117
117
  * the promoted-state snapshot.
118
118
  */
119
- export function computeVnextMemoryRevision(
120
- bundle: VnextProjectBundle,
121
- options: VnextMemoryRevisionOptions = {},
119
+ export function computeKxmMemoryRevision(
120
+ bundle: KxmProjectBundle,
121
+ options: KxmMemoryRevisionOptions = {},
122
122
  ): string {
123
123
  const hash = createHash("sha256");
124
124
 
@@ -151,7 +151,7 @@ export function computeVnextMemoryRevision(
151
151
  .sort((left, right) => compareCodeUnits(left.id, right.id));
152
152
  for (const item of currentItems) {
153
153
  hash.update(`state:${item.id}\0`, "utf8");
154
- hash.update(vnextCanonicalJson(item as unknown as JsonValue), "utf8");
154
+ hash.update(kxmCanonicalJson(item as unknown as JsonValue), "utf8");
155
155
  hash.update("\0", "utf8");
156
156
  }
157
157
  }
@@ -161,10 +161,10 @@ export function computeVnextMemoryRevision(
161
161
 
162
162
  export function checkMemoryRevisionDrift(
163
163
  pinnedRevision: string,
164
- bundle: VnextProjectBundle,
165
- options?: VnextMemoryRevisionOptions,
164
+ bundle: KxmProjectBundle,
165
+ options?: KxmMemoryRevisionOptions,
166
166
  ): { drifted: boolean; currentRevision: string; pinnedRevision: string } {
167
- const currentRevision = computeVnextMemoryRevision(bundle, options);
167
+ const currentRevision = computeKxmMemoryRevision(bundle, options);
168
168
  return {
169
169
  drifted: currentRevision !== pinnedRevision,
170
170
  currentRevision,
@@ -172,30 +172,30 @@ export function checkMemoryRevisionDrift(
172
172
  };
173
173
  }
174
174
 
175
- export function vnextPolicyRevisions(
176
- bundle: VnextProjectBundle,
177
- options?: VnextMemoryRevisionOptions,
178
- ): VnextPolicyRevisions {
175
+ export function kxmPolicyRevisions(
176
+ bundle: KxmProjectBundle,
177
+ options?: KxmMemoryRevisionOptions,
178
+ ): KxmPolicyRevisions {
179
179
  return {
180
180
  configRevision: bundle.configRevision,
181
- memoryRevision: computeVnextMemoryRevision(bundle, options),
182
- executorPolicyRevision: vnextExecutorPolicyRevision(bundle),
183
- toolPolicyRevision: vnextToolPolicyRevision(bundle),
181
+ memoryRevision: computeKxmMemoryRevision(bundle, options),
182
+ executorPolicyRevision: kxmExecutorPolicyRevision(bundle),
183
+ toolPolicyRevision: kxmToolPolicyRevision(bundle),
184
184
  };
185
185
  }
186
186
 
187
- export function vnextDeclaredRepositoryIds(bundle: VnextProjectBundle): string[] {
187
+ export function kxmDeclaredRepositoryIds(bundle: KxmProjectBundle): string[] {
188
188
  return [...bundle.repositories.keys()].sort();
189
189
  }
190
190
 
191
- export function vnextDeclaredExecutorIds(bundle: VnextProjectBundle): string[] {
191
+ export function kxmDeclaredExecutorIds(bundle: KxmProjectBundle): string[] {
192
192
  return [...new Set([
193
193
  typeof bundle.project.value.defaultExecutor === "string" ? bundle.project.value.defaultExecutor : undefined,
194
194
  ...[...bundle.agents.values()].map((agent) => agent.value.executor).filter((value): value is string => typeof value === "string"),
195
195
  ].filter((value): value is string => value !== undefined))].sort();
196
196
  }
197
197
 
198
- export function vnextProjectAdmissionLimits(bundle: VnextProjectBundle): {
198
+ export function kxmProjectAdmissionLimits(bundle: KxmProjectBundle): {
199
199
  maxConcurrentRuns: number;
200
200
  maxRunDurationMs?: number;
201
201
  maxAgentTimeMs?: number;
@@ -215,35 +215,35 @@ export function vnextProjectAdmissionLimits(bundle: VnextProjectBundle): {
215
215
  * Run acceptance and lifecycle
216
216
  * ------------------------------------------------------------------ */
217
217
 
218
- export interface VnextRunAcceptanceRequest {
218
+ export interface KxmRunAcceptanceRequest {
219
219
  commandId?: string;
220
220
  workflowId: string;
221
221
  prompt: string;
222
222
  }
223
223
 
224
- export interface VnextRunAcceptance {
224
+ export interface KxmRunAcceptance {
225
225
  accepted: boolean;
226
226
  idempotent: boolean;
227
- run: VnextRunRecord;
228
- event: VnextRunEvent;
227
+ run: KxmRunRecord;
228
+ event: KxmRunEvent;
229
229
  }
230
230
 
231
- export interface VnextRuntimeContext {
232
- registry: VnextRuntimeRegistry;
231
+ export interface KxmRuntimeContext {
232
+ registry: KxmRuntimeRegistry;
233
233
  projectRoot: string;
234
234
  projectId: string;
235
235
  homeRuntimeId: string;
236
- eventStore: VnextRunEventStore;
236
+ eventStore: KxmRunEventStore;
237
237
  }
238
238
 
239
- const closedRuntimeContexts = new WeakSet<VnextRuntimeContext>();
240
- const runtimeCloseHooks = new WeakMap<VnextRuntimeContext, Set<() => void>>();
239
+ const closedRuntimeContexts = new WeakSet<KxmRuntimeContext>();
240
+ const runtimeCloseHooks = new WeakMap<KxmRuntimeContext, Set<() => void>>();
241
241
 
242
- export function isVnextRuntimeContextClosed(context: VnextRuntimeContext): boolean {
242
+ export function isKxmRuntimeContextClosed(context: KxmRuntimeContext): boolean {
243
243
  return closedRuntimeContexts.has(context);
244
244
  }
245
245
 
246
- export function registerVnextRuntimeCloseHook(context: VnextRuntimeContext, hook: () => void): () => void {
246
+ export function registerKxmRuntimeCloseHook(context: KxmRuntimeContext, hook: () => void): () => void {
247
247
  if (closedRuntimeContexts.has(context)) {
248
248
  hook();
249
249
  return () => undefined;
@@ -265,14 +265,14 @@ export function registerVnextRuntimeCloseHook(context: VnextRuntimeContext, hook
265
265
  * active runtime id; direct callers must supply one explicitly. An existing
266
266
  * registration always wins and is revalidated immutably.
267
267
  */
268
- export function openVnextRuntimeContext(
268
+ export function openKxmRuntimeContext(
269
269
  projectRoot: string,
270
- options: VnextConfigOptions & { stateRoot?: string; now?: string; homeRuntimeId: string },
271
- ): VnextRuntimeContext {
272
- const paths = vnextRuntimePaths(options.stateRoot !== undefined ? { stateRoot: options.stateRoot } : {});
273
- const registry = new VnextRuntimeRegistry(paths.registryDb);
270
+ options: KxmConfigOptions & { stateRoot?: string; now?: string; homeRuntimeId: string },
271
+ ): KxmRuntimeContext {
272
+ const paths = kxmRuntimePaths(options.stateRoot !== undefined ? { stateRoot: options.stateRoot } : {});
273
+ const registry = new KxmRuntimeRegistry(paths.registryDb);
274
274
  try {
275
- const bundle = loadVnextProject(projectRoot, options);
275
+ const bundle = loadKxmProject(projectRoot, options);
276
276
  const projectId = String(bundle.project.value.id);
277
277
  const registration = registry.registerProject({
278
278
  projectId,
@@ -281,8 +281,8 @@ export function openVnextRuntimeContext(
281
281
  configRevision: bundle.configRevision,
282
282
  now: options.now ?? new Date().toISOString(),
283
283
  });
284
- const eventStore = new VnextRunEventStore(join(paths.projectsDir, registration.projectKey, "run-events.db"));
285
- registerVnextRuntimeHandle(eventStore.path);
284
+ const eventStore = new KxmRunEventStore(join(paths.projectsDir, registration.projectKey, "run-events.db"));
285
+ registerKxmRuntimeHandle(eventStore.path);
286
286
  return {
287
287
  registry,
288
288
  projectRoot: bundle.projectRoot,
@@ -296,7 +296,7 @@ export function openVnextRuntimeContext(
296
296
  }
297
297
  }
298
298
 
299
- export function closeVnextRuntimeContext(context: VnextRuntimeContext): void {
299
+ export function closeKxmRuntimeContext(context: KxmRuntimeContext): void {
300
300
  if (closedRuntimeContexts.has(context)) return;
301
301
  closedRuntimeContexts.add(context);
302
302
  const hooks = runtimeCloseHooks.get(context);
@@ -310,7 +310,7 @@ export function closeVnextRuntimeContext(context: VnextRuntimeContext): void {
310
310
  }
311
311
  }
312
312
  }
313
- unregisterVnextRuntimeHandle(context.eventStore.path);
313
+ unregisterKxmRuntimeHandle(context.eventStore.path);
314
314
  context.eventStore.close();
315
315
  context.registry.close();
316
316
  }
@@ -318,17 +318,17 @@ export function closeVnextRuntimeContext(context: VnextRuntimeContext): void {
318
318
  const RUNTIME_EPOCH_NS = process.hrtime.bigint();
319
319
 
320
320
  /** Intra-process monotonic nanoseconds as a decimal string, ordered only by sequence. */
321
- export function vnextMonotonicNs(): string {
321
+ export function kxmMonotonicNs(): string {
322
322
  return (process.hrtime.bigint() - RUNTIME_EPOCH_NS).toString();
323
323
  }
324
324
 
325
- export function vnextIncrementMonotonicNs(value: string): string {
325
+ export function kxmIncrementMonotonicNs(value: string): string {
326
326
  return (BigInt(value) + 1n).toString();
327
327
  }
328
328
 
329
- export function vnextEventBase(context: VnextRuntimeContext, run: VnextRunRecord, now: string, monotonicNs: string, commandId?: string): Omit<VnextRunEvent, "eventId" | "eventType" | "sequence" | "payload"> {
329
+ export function kxmEventBase(context: KxmRuntimeContext, run: KxmRunRecord, now: string, monotonicNs: string, commandId?: string): Omit<KxmRunEvent, "eventId" | "eventType" | "sequence" | "payload"> {
330
330
  return {
331
- schema: VNEXT_RUN_EVENT_SCHEMA,
331
+ schema: KXM_RUN_EVENT_SCHEMA,
332
332
  projectId: context.projectId,
333
333
  runId: run.runId,
334
334
  homeRuntimeId: run.homeRuntimeId,
@@ -343,7 +343,7 @@ export function vnextEventBase(context: VnextRuntimeContext, run: VnextRunRecord
343
343
  };
344
344
  }
345
345
 
346
- export interface VnextRunAcceptanceOptions {
346
+ export interface KxmRunAcceptanceOptions {
347
347
  now?: string;
348
348
  monotonicNs?: string;
349
349
  memoryRevision?: string;
@@ -353,21 +353,21 @@ export interface VnextRunAcceptanceOptions {
353
353
  }
354
354
 
355
355
  /** Accept a run idempotently: a repeated commandId returns the prior acceptance. */
356
- export function acceptVnextRun(
357
- context: VnextRuntimeContext,
358
- bundle: VnextProjectBundle,
359
- request: VnextRunAcceptanceRequest,
360
- options: VnextRunAcceptanceOptions = {},
361
- ): VnextRunAcceptance {
362
- const commandId = request.commandId ?? newVnextCommandId();
356
+ export function acceptKxmRun(
357
+ context: KxmRuntimeContext,
358
+ bundle: KxmProjectBundle,
359
+ request: KxmRunAcceptanceRequest,
360
+ options: KxmRunAcceptanceOptions = {},
361
+ ): KxmRunAcceptance {
362
+ const commandId = request.commandId ?? newKxmCommandId();
363
363
  const now = options.now ?? new Date().toISOString();
364
- const monotonicNs = options.monotonicNs ?? vnextMonotonicNs();
364
+ const monotonicNs = options.monotonicNs ?? kxmMonotonicNs();
365
365
 
366
366
  const workflow = bundle.workflows.get(request.workflowId);
367
367
  if (!workflow) {
368
368
  throw runtimeError("run_workflow_unknown", ".kxm/workflows", `workflow ${request.workflowId} does not exist in this project`);
369
369
  }
370
- const revisions = vnextPolicyRevisions(bundle, options);
370
+ const revisions = kxmPolicyRevisions(bundle, options);
371
371
  const memoryRevision = options.memoryRevision ?? revisions.memoryRevision;
372
372
  const promptSha256 = `sha256:${createHash("sha256").update(request.prompt, "utf8").digest("hex")}`;
373
373
 
@@ -387,17 +387,17 @@ export function acceptVnextRun(
387
387
  return { accepted: true, idempotent: true, run, event: events[0]! };
388
388
  }
389
389
 
390
- const runId = newVnextRunId();
390
+ const runId = newKxmRunId();
391
391
  const payload: Record<string, unknown> = {
392
392
  workflowId: request.workflowId,
393
393
  status: "created",
394
394
  promptHash: promptSha256,
395
- repositoryIds: vnextDeclaredRepositoryIds(bundle),
396
- executorIds: vnextDeclaredExecutorIds(bundle),
395
+ repositoryIds: kxmDeclaredRepositoryIds(bundle),
396
+ executorIds: kxmDeclaredExecutorIds(bundle),
397
397
  };
398
- const event: VnextRunEvent = {
399
- schema: VNEXT_RUN_EVENT_SCHEMA,
400
- eventId: newVnextEventId(),
398
+ const event: KxmRunEvent = {
399
+ schema: KXM_RUN_EVENT_SCHEMA,
400
+ eventId: newKxmEventId(),
401
401
  eventType: "run.created",
402
402
  projectId: context.projectId,
403
403
  runId,
@@ -413,7 +413,7 @@ export function acceptVnextRun(
413
413
  toolPolicyRevision: revisions.toolPolicyRevision,
414
414
  payload,
415
415
  };
416
- const run: VnextRunRecord = {
416
+ const run: KxmRunRecord = {
417
417
  runId,
418
418
  projectId: context.projectId,
419
419
  homeRuntimeId: context.homeRuntimeId,
@@ -445,14 +445,14 @@ export function acceptVnextRun(
445
445
  * Projection
446
446
  * ------------------------------------------------------------------ */
447
447
 
448
- export function foldStoredVnextRun(context: VnextRuntimeContext, run: VnextRunRecord): VnextRunState {
448
+ export function foldStoredKxmRun(context: KxmRuntimeContext, run: KxmRunRecord): KxmRunState {
449
449
  const events = context.eventStore.events(run.runId, 0, 1_000_000);
450
450
  const planRow = context.eventStore.runPlan(run.runId);
451
451
  if (!planRow && events.some((event) => event.eventType.startsWith("step.") || event.eventType.startsWith("effect.") || event.payload.status === "preparing" || event.payload.status === "running" || event.payload.status === "cancelling")) {
452
452
  throw runtimeError("run_plan_missing", run.runId, "run reached preparing or later without a pinned plan");
453
453
  }
454
- const envelope = planRow ? loadVnextRunPlanEnvelope(context.eventStore, run) : undefined;
455
- const state = foldVnextRunState(run, envelope?.plan, events, envelope
454
+ const envelope = planRow ? loadKxmRunPlanEnvelope(context.eventStore, run) : undefined;
455
+ const state = foldKxmRunState(run, envelope?.plan, events, envelope
456
456
  ? {
457
457
  observationLookup: (attemptId, observationId) => {
458
458
  const row = context.eventStore.gateObservationForAttempt(attemptId);
@@ -467,7 +467,7 @@ export function foldStoredVnextRun(context: VnextRuntimeContext, run: VnextRunRe
467
467
  projectLimits: envelope.projectLimits,
468
468
  }
469
469
  : {});
470
- if (envelope) verifyVnextGateEvidence(context.eventStore, run, envelope, events, state);
470
+ if (envelope) verifyKxmGateEvidence(context.eventStore, run, envelope, events, state);
471
471
  assertStoredProjection(context, run);
472
472
  return state;
473
473
  }
@@ -481,22 +481,22 @@ function storedProjectionSchema(stateJson: string): string | undefined {
481
481
  }
482
482
  }
483
483
 
484
- function assertStoredProjection(context: VnextRuntimeContext, run: VnextRunRecord): void {
484
+ function assertStoredProjection(context: KxmRuntimeContext, run: KxmRunRecord): void {
485
485
  const stored = context.eventStore.runState(run.runId);
486
486
  if (!stored) return;
487
487
  const schema = storedProjectionSchema(stored.state);
488
- if (schema !== VNEXT_RUN_STATE_SCHEMA) {
488
+ if (schema !== KXM_RUN_STATE_SCHEMA) {
489
489
  throw runtimeError("run_projection_divergent", run.runId, "stored run_state does not match the folded projection");
490
490
  }
491
491
  }
492
492
 
493
493
  /** Fold a stored run into its current status with evidence verification. */
494
- export function readVnextRunStatus(context: VnextRuntimeContext, run: VnextRunRecord): VnextRunStatus {
495
- return foldStoredVnextRun(context, run).status;
494
+ export function readKxmRunStatus(context: KxmRuntimeContext, run: KxmRunRecord): KxmRunStatus {
495
+ return foldStoredKxmRun(context, run).status;
496
496
  }
497
497
 
498
- function persistProjection(context: VnextRuntimeContext, run: VnextRunRecord, state: VnextRunState, now: string): VnextRunRecord {
499
- const canonical = vnextCanonicalJson(state as unknown as JsonValue);
498
+ function persistProjection(context: KxmRuntimeContext, run: KxmRunRecord, state: KxmRunState, now: string): KxmRunRecord {
499
+ const canonical = kxmCanonicalJson(state as unknown as JsonValue);
500
500
  const stored = context.eventStore.runState(run.runId);
501
501
  if (stored && stored.state !== canonical) {
502
502
  throw runtimeError("run_projection_divergent", run.runId, "stored run_state does not match the folded projection");
@@ -514,10 +514,10 @@ function persistProjection(context: VnextRuntimeContext, run: VnextRunRecord, st
514
514
  }
515
515
 
516
516
  /** Rebuild the stored run row from the event log; returns the projected record. */
517
- export function rebuildVnextRunProjection(context: VnextRuntimeContext, runId: string): VnextRunRecord {
517
+ export function rebuildKxmRunProjection(context: KxmRuntimeContext, runId: string): KxmRunRecord {
518
518
  const stored = context.eventStore.run(runId);
519
519
  if (!stored) throw runtimeError("run_unknown", runId, "run does not exist in this event store");
520
- const state = foldStoredVnextRun(context, stored);
520
+ const state = foldStoredKxmRun(context, stored);
521
521
  const events = context.eventStore.events(runId, 0, 1_000_000);
522
522
  if (events.length === 0) throw runtimeError("run_events_corrupt", runId, "run has no events");
523
523
  const last = events[events.length - 1]!;
@@ -528,28 +528,28 @@ export function rebuildVnextRunProjection(context: VnextRuntimeContext, runId: s
528
528
  * persisting. GET paths must not write (no run_state upsert, no status
529
529
  * update, no run_projection_divergent throw) — the event log stays the sole
530
530
  * source of truth and the folded status is returned as-is. */
531
- export function projectVnextRunReadOnly(context: VnextRuntimeContext, runId: string): VnextRunRecord {
531
+ export function projectKxmRunReadOnly(context: KxmRuntimeContext, runId: string): KxmRunRecord {
532
532
  const stored = context.eventStore.run(runId);
533
533
  if (!stored) throw runtimeError("run_unknown", runId, "run does not exist in this event store");
534
- const state = foldStoredVnextRun(context, stored);
534
+ const state = foldStoredKxmRun(context, stored);
535
535
  const events = context.eventStore.events(runId, 0, 1_000_000);
536
536
  if (events.length === 0) throw runtimeError("run_events_corrupt", runId, "run has no events");
537
537
  const last = events[events.length - 1]!;
538
538
  return { ...stored, status: state.status, updatedAt: last.occurredAt };
539
539
  }
540
540
 
541
- export function persistVnextRunState(context: VnextRuntimeContext, runId: string, state: VnextRunState, lastSequence: number): void {
541
+ export function persistKxmRunState(context: KxmRuntimeContext, runId: string, state: KxmRunState, lastSequence: number): void {
542
542
  const stored = context.eventStore.runState(runId);
543
543
  if (stored) {
544
544
  const schema = storedProjectionSchema(stored.state);
545
- if (schema !== VNEXT_RUN_STATE_SCHEMA) {
545
+ if (schema !== KXM_RUN_STATE_SCHEMA) {
546
546
  throw runtimeError("run_projection_divergent", runId, "stored run_state does not match the folded projection");
547
547
  }
548
548
  }
549
549
  context.eventStore.upsertRunState({
550
550
  runId,
551
551
  lastSequence,
552
- state: vnextCanonicalJson(state as unknown as JsonValue),
552
+ state: kxmCanonicalJson(state as unknown as JsonValue),
553
553
  });
554
554
  }
555
555
 
@@ -557,14 +557,14 @@ export function persistVnextRunState(context: VnextRuntimeContext, runId: string
557
557
  * Cancel
558
558
  * ------------------------------------------------------------------ */
559
559
 
560
- export interface VnextRunCancelResult {
561
- run: VnextRunRecord;
560
+ export interface KxmRunCancelResult {
561
+ run: KxmRunRecord;
562
562
  idempotent: boolean;
563
- events: VnextRunEvent[];
563
+ events: KxmRunEvent[];
564
564
  }
565
565
 
566
- export function cancelVnextRun(
567
- context: VnextRuntimeContext,
566
+ export function cancelKxmRun(
567
+ context: KxmRuntimeContext,
568
568
  runId: string,
569
569
  options: {
570
570
  commandId?: string;
@@ -573,10 +573,10 @@ export function cancelVnextRun(
573
573
  reason?: string;
574
574
  budget?: { budgetMs: number; elapsedMs: number; source: "workflow" | "project" | "both" };
575
575
  } = {},
576
- ): VnextRunCancelResult {
577
- const commandId = options.commandId ?? newVnextCommandId();
576
+ ): KxmRunCancelResult {
577
+ const commandId = options.commandId ?? newKxmCommandId();
578
578
  const now = options.now ?? new Date().toISOString();
579
- const monotonicNs = options.monotonicNs ?? vnextMonotonicNs();
579
+ const monotonicNs = options.monotonicNs ?? kxmMonotonicNs();
580
580
  const abortControllers: AbortController[] = [];
581
581
 
582
582
  const result = context.eventStore.transaction(() => {
@@ -587,11 +587,11 @@ export function cancelVnextRun(
587
587
  }
588
588
  const run = context.eventStore.run(prior.runId);
589
589
  if (!run) throw runtimeError("run_command_corrupt", commandId, "idempotent command references a missing run");
590
- return { run, idempotent: true, events: [] as VnextRunEvent[] };
590
+ return { run, idempotent: true, events: [] as KxmRunEvent[] };
591
591
  }
592
592
  const run = context.eventStore.run(runId);
593
593
  if (!run) throw runtimeError("run_unknown", runId, "run does not exist in this event store");
594
- const folded = foldStoredVnextRun(context, run);
594
+ const folded = foldStoredKxmRun(context, run);
595
595
  if (isTerminalRunStatus(folded.status) || folded.status === "cancelling") {
596
596
  context.eventStore.insertCommand({
597
597
  commandId,
@@ -600,27 +600,27 @@ export function cancelVnextRun(
600
600
  result: { runId, status: folded.status },
601
601
  recordedAt: now,
602
602
  });
603
- return { run: { ...run, status: folded.status }, idempotent: true, events: [] as VnextRunEvent[] };
603
+ return { run: { ...run, status: folded.status }, idempotent: true, events: [] as KxmRunEvent[] };
604
604
  }
605
605
 
606
- const events: VnextRunEvent[] = [];
606
+ const events: KxmRunEvent[] = [];
607
607
  let sequence = context.eventStore.nextSequence(runId);
608
608
  let nextMono = monotonicNs;
609
- const push = (eventType: string, payload: Record<string, unknown>): VnextRunEvent => {
610
- const event: VnextRunEvent = {
611
- ...vnextEventBase(context, run, now, nextMono, commandId),
612
- eventId: newVnextEventId(),
609
+ const push = (eventType: string, payload: Record<string, unknown>): KxmRunEvent => {
610
+ const event: KxmRunEvent = {
611
+ ...kxmEventBase(context, run, now, nextMono, commandId),
612
+ eventId: newKxmEventId(),
613
613
  eventType,
614
614
  sequence: sequence++,
615
615
  payload,
616
616
  };
617
- nextMono = vnextIncrementMonotonicNs(nextMono);
617
+ nextMono = kxmIncrementMonotonicNs(nextMono);
618
618
  events.push(event);
619
619
  return event;
620
620
  };
621
621
 
622
622
  const cancelReason = options.reason ?? "operator_cancel";
623
- const activeAttempt = Boolean(folded.currentStep?.attemptId) || vnextFoldPanelAttemptIds(folded.currentStep).length > 0;
623
+ const activeAttempt = Boolean(folded.currentStep?.attemptId) || kxmFoldPanelAttemptIds(folded.currentStep).length > 0;
624
624
  const cancelPayload: Record<string, unknown> = {
625
625
  actor: { kind: "runtime", id: context.homeRuntimeId },
626
626
  reason: cancelReason,
@@ -633,11 +633,11 @@ export function cancelVnextRun(
633
633
  }
634
634
  push("run.cancel_requested", cancelPayload);
635
635
 
636
- let status: VnextRunStatus = "cancelled";
636
+ let status: KxmRunStatus = "cancelled";
637
637
  if (folded.status === "running" && activeAttempt) {
638
638
  status = "cancelling";
639
639
  push("run.status_changed", { status: "cancelling", reason: cancelReason });
640
- const attemptIds = new Set(vnextFoldPanelAttemptIds(folded.currentStep));
640
+ const attemptIds = new Set(kxmFoldPanelAttemptIds(folded.currentStep));
641
641
  if (folded.currentStep?.attemptId) attemptIds.add(folded.currentStep.attemptId);
642
642
  for (const attemptId of attemptIds) {
643
643
  const capability = context.eventStore.capabilityByAttempt(attemptId);
@@ -645,7 +645,7 @@ export function cancelVnextRun(
645
645
  context.eventStore.settleCapability(attemptId, "revoked");
646
646
  }
647
647
  }
648
- for (const owned of vnextAttemptControllers(context.eventStore.path, runId)) {
648
+ for (const owned of kxmAttemptControllers(context.eventStore.path, runId)) {
649
649
  abortControllers.push(owned.controller);
650
650
  }
651
651
  } else if (folded.status === "blocked_uncertain") {
@@ -656,9 +656,9 @@ export function cancelVnextRun(
656
656
  if (capability && (capability.state === "issued" || capability.state === "revoked")) {
657
657
  context.eventStore.settleCapability(attemptId, "revoked");
658
658
  }
659
- resolveVnextGateHold(context.eventStore.path, runId, attemptId);
659
+ resolveKxmGateHold(context.eventStore.path, runId, attemptId);
660
660
  }
661
- for (const owned of vnextAttemptControllers(context.eventStore.path, runId)) {
661
+ for (const owned of kxmAttemptControllers(context.eventStore.path, runId)) {
662
662
  abortControllers.push(owned.controller);
663
663
  }
664
664
  push("run.status_changed", { status: "cancelled", reason: cancelReason });
@@ -671,8 +671,8 @@ export function cancelVnextRun(
671
671
  }
672
672
 
673
673
  for (const event of events) context.eventStore.appendEvent(event);
674
- const nextState = foldStoredVnextRun(context, run);
675
- persistVnextRunState(context, runId, nextState, events[events.length - 1]!.sequence);
674
+ const nextState = foldStoredKxmRun(context, run);
675
+ persistKxmRunState(context, runId, nextState, events[events.length - 1]!.sequence);
676
676
  context.eventStore.updateRunStatus(runId, status, now);
677
677
  context.eventStore.insertCommand({
678
678
  commandId,
@@ -693,7 +693,7 @@ export function cancelVnextRun(
693
693
  * ------------------------------------------------------------------ */
694
694
 
695
695
  /** Runs pin revisions at acceptance; drift is reported, never silently adopted. */
696
- export function vnextRunRevisionDrift(run: VnextRunRecord, bundle: VnextProjectBundle): { configDrift: boolean; currentRevision: string; pinnedRevision: string } {
696
+ export function kxmRunRevisionDrift(run: KxmRunRecord, bundle: KxmProjectBundle): { configDrift: boolean; currentRevision: string; pinnedRevision: string } {
697
697
  return {
698
698
  configDrift: run.configRevision !== bundle.configRevision,
699
699
  currentRevision: bundle.configRevision,
@@ -701,6 +701,6 @@ export function vnextRunRevisionDrift(run: VnextRunRecord, bundle: VnextProjectB
701
701
  };
702
702
  }
703
703
 
704
- export function assertVnextConfigError(error: unknown): asserts error is VnextConfigError {
705
- if (!(error instanceof VnextConfigError)) throw error;
704
+ export function assertKxmConfigError(error: unknown): asserts error is KxmConfigError {
705
+ if (!(error instanceof KxmConfigError)) throw error;
706
706
  }