@kontextmind/kxm
Version:
KXM local-first multi-agent orchestration and operator dashboard
57 lines (47 loc) • 2.06 kB
text/typescript
import type { JsonObject } from "./restricted-yaml.mjs";
export const POLICY_DRAFT_MODEL_SCHEMA: "kxm.model.v2";
export const POLICY_DRAFT_ROLE_SCHEMA: "kxm.role.v2";
export const POLICY_DRAFT_PURPOSES: readonly [
"writer",
"planner",
"reviewer-arch",
"reviewer-cli",
"experiment",
];
export const POLICY_DRAFT_PERMISSIONS: readonly ["edit", "read-only"];
export const POLICY_DRAFT_STATUSES: readonly ["admitted", "candidate", "retired"];
export interface PolicyDraftIssue {
phase: "parse" | "schema" | "reference" | "semantic";
code: string;
file: string;
message: string;
}
export interface PolicyDraftCeiling {
readonly provider: string;
readonly roles?: readonly string[];
readonly permissions: readonly string[];
readonly models?: readonly string[];
readonly efforts?: readonly string[];
}
export interface PolicyDraftOptions {
readonly ceilings: Readonly<Record<string, PolicyDraftCeiling>>;
readonly nativePiBrakeProviders: readonly string[];
readonly piAllowedProviders: readonly string[];
readonly piNativeVendorProviders?: Readonly<Record<string, string>>;
readonly vendorAliases?: Readonly<Record<string, string>>;
}
export type PolicyDraftDocument = JsonObject | string | Uint8Array;
export interface PolicyDraftInput {
readonly models?: Readonly<Record<string, PolicyDraftDocument>> | readonly PolicyDraftDocument[];
readonly roles?: Readonly<Record<string, PolicyDraftDocument>> | readonly PolicyDraftDocument[];
readonly evidence?: Readonly<Record<string, string | Uint8Array>>;
}
export interface PolicyDraftData {
readonly models: Readonly<Record<string, JsonObject>>;
readonly roles: Readonly<Record<string, JsonObject>>;
}
export type PolicyDraftResult =
| { readonly ok: true; readonly data: PolicyDraftData }
| { readonly ok: false; readonly issues: readonly PolicyDraftIssue[] };
/** Pure draft validation. Not admission, not a trusted loader, and not file I/O. */
export function validatePolicyDraft(input: PolicyDraftInput, options: PolicyDraftOptions): PolicyDraftResult;