81 lines
3.3 KiB
TypeScript
81 lines
3.3 KiB
TypeScript
/**
|
|||
|
|
* Command types for CMS domain operations. Mirrors `commands.rs`.
|
||
|
|
*/
|
||
|
|
import type { InternetMode } from "./settings.ts";
|
||
|
|
|
||
|
|
const VALID_INTERNET_MODES: InternetMode[] = ["Off", "ReadOnly", "Full"];
|
||
|
|
|
||
|
|
/** Partial update command for `Settings` — only non-null fields are applied. */
|
||
|
|
export interface SettingsPatch {
|
||
|
|
internet_mode?: string;
|
||
|
|
provider?: string;
|
||
|
|
model?: string;
|
||
|
|
api_keys?: Record<string, string>;
|
||
|
|
max_tokens?: number | null;
|
||
|
|
temperature?: number | null;
|
||
|
|
review_max_lessons_per_run?: number;
|
||
|
|
adaptive_review_max_skip?: number;
|
||
|
|
verify_command?: string | null;
|
||
|
|
verify_timeout_ms?: number;
|
||
|
|
workflow_max_concurrency?: number;
|
||
|
|
review_enabled?: boolean;
|
||
|
|
session_archive_enabled?: boolean;
|
||
|
|
hive_mind_node_timeout_ms?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** The `apply` fields a Settings-like target must expose (subset of Settings). */
|
||
|
|
export interface SettingsPatchTarget {
|
||
|
|
internet_mode: InternetMode;
|
||
|
|
provider: string;
|
||
|
|
model: string;
|
||
|
|
api_keys: Record<string, string>;
|
||
|
|
max_tokens?: number | null;
|
||
|
|
temperature?: number | null;
|
||
|
|
review_max_lessons_per_run: number;
|
||
|
|
adaptive_review_max_skip: number;
|
||
|
|
verify_command?: string | null;
|
||
|
|
verify_timeout_ms: number;
|
||
|
|
workflow_max_concurrency: number;
|
||
|
|
review_enabled: boolean;
|
||
|
|
session_archive_enabled: boolean;
|
||
|
|
hive_mind_node_timeout_ms: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Merge a patch into a settings-like target; only defined fields are applied. */
|
||
|
|
export function applySettingsPatch(patch: SettingsPatch, settings: SettingsPatchTarget): string | null {
|
||
|
|
if (patch.internet_mode !== undefined) {
|
||
|
|
const mode = patch.internet_mode;
|
||
|
|
if (!VALID_INTERNET_MODES.includes(mode as InternetMode)) {
|
||
|
|
return `invalid internet_mode '${mode}'; expected Off, ReadOnly, or Full`;
|
||
|
|
}
|
||
|
|
settings.internet_mode = mode as InternetMode;
|
||
|
|
}
|
||
|
|
if (patch.provider !== undefined) settings.provider = patch.provider;
|
||
|
|
if (patch.model !== undefined) settings.model = patch.model;
|
||
|
|
if (patch.api_keys !== undefined) settings.api_keys = patch.api_keys;
|
||
|
|
if (patch.max_tokens !== undefined) settings.max_tokens = patch.max_tokens;
|
||
|
|
if (patch.temperature !== undefined) settings.temperature = patch.temperature;
|
||
|
|
if (patch.review_max_lessons_per_run !== undefined) settings.review_max_lessons_per_run = patch.review_max_lessons_per_run;
|
||
|
|
if (patch.adaptive_review_max_skip !== undefined) settings.adaptive_review_max_skip = patch.adaptive_review_max_skip;
|
||
|
|
if (patch.verify_command !== undefined) settings.verify_command = patch.verify_command;
|
||
|
|
if (patch.verify_timeout_ms !== undefined) settings.verify_timeout_ms = patch.verify_timeout_ms;
|
||
|
|
if (patch.workflow_max_concurrency !== undefined) settings.workflow_max_concurrency = patch.workflow_max_concurrency;
|
||
|
|
if (patch.review_enabled !== undefined) settings.review_enabled = patch.review_enabled;
|
||
|
|
if (patch.session_archive_enabled !== undefined) settings.session_archive_enabled = patch.session_archive_enabled;
|
||
|
|
if (patch.hive_mind_node_timeout_ms !== undefined) settings.hive_mind_node_timeout_ms = patch.hive_mind_node_timeout_ms;
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Command to create a new memory entry. */
|
||
|
|
export interface NewMemory {
|
||
|
|
name: string;
|
||
|
|
description: string;
|
||
|
|
content: string;
|
||
|
|
kind?: string;
|
||
|
|
outcome?: string;
|
||
|
|
lifecycle?: string;
|
||
|
|
scope?: string;
|
||
|
|
before_snippet?: string;
|
||
|
|
after_snippet?: string;
|
||
|
|
provenances?: string[];
|
||
|
|
}
|