feat(rewrite): bootstrap monorepo Bun + port domain layer ke TypeScript
Mulai migrasi Zesdex dari Rust ke TypeScript/Bun.
- Root workspace package.json, tsconfig strict, bun.lock, gitignore fix
- Paket @zesdex/domain (apps/packages/domain):
- core: ChatMessage/Conversation/ToolCall/SseParser/repairJson/
sanitizeToolArguments/UsageStats/Store/DomainError
- auth: Session/SessionId/SessionLock/OAuth + repository & service interfaces
- cms: AppConfig/Settings/SettingsPatch/Memory/EditLog + repository &
service interfaces
- agent: TurnEvent/SessionRuntime/AgentTurnParams/AgentProgress/prompt
- subagent & workflow models
- Wire-shape JSON disamakan dengan Rust (serde rename/flatten/skip_if)
- 27 unit test Bun port dari test Rust (SseParser, repair_json, resolve_effective_model, session id)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9d1544d799
commit
07e84e43b3
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* 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[];
|
||||
}
|
||||
Reference in New Issue
Block a user