/** * Mandu Symbol ์ƒ์ˆ˜ ์ •์˜ ๐Ÿ”ฃ * * ont-run์˜ Symbol ๊ธฐ๋ฐ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒจํ„ด ์ฐธ๊ณ  * @see DNA/ont-run/src/config/categorical.ts * @see docs/plans/08_ont-run_adoption_plan.md - ์„น์…˜ 3.2 * * Symbol.for()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ์‹ฌ๋ณผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก * โ†’ ๋ชจ๋“ˆ ๊ฐ„์—๋„ ๋™์ผํ•œ ์‹ฌ๋ณผ ๊ณต์œ  ๊ฐ€๋Šฅ */ // ============================================ // ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์‹ฌ๋ณผ // ============================================ /** * MCP ์„œ๋ฒ„ ์ƒํƒœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - connected, disconnected, error ๋“ฑ */ export const MCP_SERVER_STATUS = Symbol.for("mandu:mcpServerStatus"); /** * ๊ฒ€์ฆ ์ปจํ…์ŠคํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - ์ปค์Šคํ…€ ๊ฒ€์ฆ ๊ทœ์น™, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋“ฑ */ export const VALIDATION_CONTEXT = Symbol.for("mandu:validationContext"); /** * ์Šคํ‚ค๋งˆ ์ฐธ์กฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - ๋‹ค๋ฅธ ์Šคํ‚ค๋งˆ/ํ•จ์ˆ˜ ์ฐธ์กฐ */ export const SCHEMA_REFERENCE = Symbol.for("mandu:schemaReference"); /** * ํ•„๋“œ ์†Œ์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - ํ•„๋“œ ๊ฐ’์˜ ์ถœ์ฒ˜ (env, config, default ๋“ฑ) */ export const FIELD_SOURCE = Symbol.for("mandu:fieldSource"); /** * ๋ฏผ๊ฐ ์ •๋ณด ๋งˆ์ปค * - ๋กœ๊น…/์ถœ๋ ฅ ์‹œ ๋งˆ์Šคํ‚น ํ•„์š” */ export const SENSITIVE_FIELD = Symbol.for("mandu:sensitiveField"); /** * ๋ณดํ˜ธ๋œ ํ•„๋“œ ๋งˆ์ปค * - AI ์—์ด์ „ํŠธ ์ˆ˜์ • ๋ถˆ๊ฐ€ */ export const PROTECTED_FIELD = Symbol.for("mandu:protectedField"); /** * ๊ธฐ๋ณธ๊ฐ’ ์ถœ์ฒ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - ๊ธฐ๋ณธ๊ฐ’์ด ์–ด๋””์„œ ์™”๋Š”์ง€ ์ถ”์  */ export const DEFAULT_SOURCE = Symbol.for("mandu:defaultSource"); /** * ๋Ÿฐํƒ€์ž„ ์ฃผ์ž… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ * - ๋Ÿฐํƒ€์ž„์— ์ฃผ์ž…๋˜๋Š” ๊ฐ’ ํ‘œ์‹œ */ export const RUNTIME_INJECTED = Symbol.for("mandu:runtimeInjected"); // ============================================ // ํƒ€์ž… ์ •์˜ // ============================================ export interface McpServerStatusMetadata { status: "connected" | "disconnected" | "error" | "unknown"; lastChecked?: string; error?: string; } export interface ValidationContextMetadata { customMessage?: string; severity?: "error" | "warning" | "info"; autoFix?: boolean; } export interface SchemaReferenceMetadata { type: "mcpServer" | "function" | "schema" | "env"; name: string; optional?: boolean; } export interface FieldSourceMetadata { source: "env" | "config" | "default" | "computed" | "injected"; key?: string; fallback?: unknown; } export interface SensitiveFieldMetadata { redactIn: ("log" | "diff" | "snapshot")[]; mask?: string; } export interface ProtectedFieldMetadata { reason: string; allowedModifiers?: string[]; } // ============================================ // ์‹ฌ๋ณผ-ํƒ€์ž… ๋งคํ•‘ // ============================================ export type SymbolMetadataMap = { [MCP_SERVER_STATUS]: McpServerStatusMetadata; [VALIDATION_CONTEXT]: ValidationContextMetadata; [SCHEMA_REFERENCE]: SchemaReferenceMetadata; [FIELD_SOURCE]: FieldSourceMetadata; [SENSITIVE_FIELD]: SensitiveFieldMetadata; [PROTECTED_FIELD]: ProtectedFieldMetadata; [DEFAULT_SOURCE]: string; [RUNTIME_INJECTED]: boolean; }; // ============================================ // ์‹ฌ๋ณผ ๋ชฉ๋ก (์ˆœํšŒ์šฉ) // ============================================ export const ALL_METADATA_SYMBOLS = [ MCP_SERVER_STATUS, VALIDATION_CONTEXT, SCHEMA_REFERENCE, FIELD_SOURCE, SENSITIVE_FIELD, PROTECTED_FIELD, DEFAULT_SOURCE, RUNTIME_INJECTED, ] as const; /** * ์‹ฌ๋ณผ์ด mandu ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์‹ฌ๋ณผ์ธ์ง€ ํ™•์ธ */ export function isManduMetadataSymbol(sym: symbol): boolean { return (ALL_METADATA_SYMBOLS as readonly symbol[]).includes(sym); } /** * ์‹ฌ๋ณผ ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ (๋””๋ฒ„๊น…์šฉ) */ export function getSymbolName(sym: symbol): string | undefined { return sym.description?.replace("mandu:", ""); }