@ainecto/mcp 0.2.0 → 0.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/auth/tokenStore.ts","../../src/core/auth/oauth.ts","../../src/core/config/endpoints.ts","../../src/core/auth/clientRegistration.ts","../../src/core/input/payloadSource.ts","../../src/core/mcp/rpcClient.ts","../../src/core/output/render.ts","../../src/core/catalog/generated.prod.ts","../../src/core/catalog/generated.dev.ts","../../src/core/catalog/index.ts","../../src/core/mcp/stdioBridge.ts","../../src/adapters/mcp/connector.ts","../../src/core/catalog/enrichments.ts","../../src/core/output/table.ts","../../src/adapters/cli/errors.ts","../../src/adapters/cli/flagParser.ts","../../src/adapters/cli/destructiveConfirmation.ts","../../src/adapters/cli/bespokeCommands.ts","../../src/adapters/cli/generatedCommandRouter.ts","../../src/core/upload/attachmentUpload.ts","../../src/adapters/cli/attachmentsUploadCommand.ts","../../src/adapters/cli/ainectoCli.ts","../../src/bin/ainecto.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, stat, writeFile, chmod } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nexport interface StoredTokenSet {\n endpoint: string;\n accessToken: string;\n refreshToken?: string;\n tokenType?: string;\n expiresAt?: number;\n scope?: string;\n clientId?: string;\n clientSecret?: string;\n authorizationServer?: string;\n updatedAt: string;\n}\n\nexport interface TokenStore {\n load(endpoint: string): Promise<StoredTokenSet | undefined>;\n save(endpoint: string, token: StoredTokenSet): Promise<void>;\n delete(endpoint: string): Promise<void>;\n}\n\ntype TokenFile = Record<string, StoredTokenSet>;\n\nexport class FileTokenStore implements TokenStore {\n readonly filePath: string;\n\n constructor(rootDir = join(homedir(), \".ainecto\")) {\n this.filePath = join(rootDir, \"tokens.json\");\n }\n\n async load(endpoint: string): Promise<StoredTokenSet | undefined> {\n const file = await this.readFile();\n return file[tokenKey(endpoint)];\n }\n\n async save(endpoint: string, token: StoredTokenSet): Promise<void> {\n const file = await this.readFile();\n file[tokenKey(endpoint)] = { ...token, endpoint, updatedAt: new Date().toISOString() };\n await this.writeFile(file);\n }\n\n async delete(endpoint: string): Promise<void> {\n const file = await this.readFile();\n delete file[tokenKey(endpoint)];\n await this.writeFile(file);\n }\n\n private async readFile(): Promise<TokenFile> {\n try {\n await this.hardenExistingPermissions();\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Token file must contain an object.\");\n }\n return parsed as TokenFile;\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return {};\n }\n throw error;\n }\n }\n\n private async writeFile(file: TokenFile): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true, mode: 0o700 });\n await chmod(dirname(this.filePath), 0o700);\n const tmpPath = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;\n await writeFile(tmpPath, `${JSON.stringify(file, null, 2)}\\n`, { mode: 0o600 });\n await chmod(tmpPath, 0o600);\n await rename(tmpPath, this.filePath);\n await chmod(this.filePath, 0o600);\n }\n\n private async hardenExistingPermissions(): Promise<void> {\n const dirPath = dirname(this.filePath);\n await chmodIfPermissive(dirPath, 0o700);\n await chmodIfPermissive(this.filePath, 0o600);\n }\n}\n\nexport function tokenKey(endpoint: string): string {\n return createHash(\"sha256\").update(endpoint).digest(\"hex\");\n}\n\nexport async function tokenStorePermissions(path: string): Promise<{ mode: number } | undefined> {\n try {\n const result = await stat(path);\n return { mode: result.mode & 0o777 };\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function tokenStoreDirectoryPermissions(path: string): Promise<{ mode: number } | undefined> {\n return tokenStorePermissions(dirname(path));\n}\n\nexport async function removeTokenStoreForTests(path: string): Promise<void> {\n await rm(dirname(path), { recursive: true, force: true });\n}\n\nfunction isNodeError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === code;\n}\n\nasync function chmodIfPermissive(path: string, mode: number): Promise<void> {\n try {\n const result = await stat(path);\n if ((result.mode & 0o077) !== 0) {\n await chmod(path, mode);\n }\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return;\n }\n throw error;\n }\n}\n","import { createHash, randomBytes } from \"node:crypto\";\nimport { createServer } from \"node:http\";\nimport { spawn } from \"node:child_process\";\nimport { URLSearchParams } from \"node:url\";\nimport type { StoredTokenSet, TokenStore } from \"./tokenStore\";\nimport { registerPublicClient, type ClientRegistrationResult } from \"./clientRegistration\";\nimport { assertTrustedEndpointUrl, isDefaultEndpoint } from \"../config/endpoints\";\n\nexport interface OAuthClientOptions {\n endpoint: string;\n tokenStore: TokenStore;\n fetchImpl?: typeof fetch;\n envVars?: NodeJS.ProcessEnv;\n openBrowser?: (url: string) => Promise<void>;\n}\n\nexport interface OAuthMetadata {\n authorizationEndpoint: string;\n tokenEndpoint: string;\n registrationEndpoint?: string;\n issuer?: string;\n codeChallengeMethodsSupported: string[];\n}\n\nexport interface TokenProvider {\n getAccessToken(): Promise<string | undefined>;\n refreshAfterUnauthorized(): Promise<string | undefined>;\n}\n\nexport class OAuthClient implements TokenProvider {\n private readonly fetchImpl: typeof fetch;\n private readonly envVars: NodeJS.ProcessEnv;\n private readonly openBrowserImpl: (url: string) => Promise<void>;\n\n constructor(private readonly options: OAuthClientOptions) {\n this.fetchImpl = options.fetchImpl ?? fetch;\n this.envVars = options.envVars ?? process.env;\n this.openBrowserImpl = options.openBrowser ?? openBrowser;\n }\n\n async getAccessToken(): Promise<string | undefined> {\n const envToken = this.envVars.AINECTO_TOKEN;\n if (envToken) {\n assertEnvTokenEndpointAllowed(this.options.endpoint, this.envVars);\n return envToken;\n }\n\n const stored = await this.options.tokenStore.load(this.options.endpoint);\n if (!stored) {\n return undefined;\n }\n\n if (!shouldRefresh(stored)) {\n return stored.accessToken;\n }\n\n return this.refreshStoredToken(stored);\n }\n\n async refreshAfterUnauthorized(): Promise<string | undefined> {\n const stored = await this.options.tokenStore.load(this.options.endpoint);\n if (!stored?.refreshToken) {\n return undefined;\n }\n return this.refreshStoredToken(stored);\n }\n\n async login(): Promise<StoredTokenSet> {\n const pkce = generatePkcePair();\n const state = generateOAuthState();\n const loopback = await createLoopbackReceiver(state);\n\n try {\n const metadata = await discoverOAuthMetadata(this.options.endpoint, this.fetchImpl);\n const registration = metadata.registrationEndpoint\n ? await registerPublicClient(metadata.registrationEndpoint, loopback.redirectUri, this.fetchImpl)\n : { clientId: \"ainecto-cli\" };\n const authorizeUrl = new URL(metadata.authorizationEndpoint);\n authorizeUrl.searchParams.set(\"response_type\", \"code\");\n authorizeUrl.searchParams.set(\"client_id\", registration.clientId);\n authorizeUrl.searchParams.set(\"redirect_uri\", loopback.redirectUri);\n authorizeUrl.searchParams.set(\"code_challenge\", pkce.codeChallenge);\n authorizeUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authorizeUrl.searchParams.set(\"resource\", this.options.endpoint);\n authorizeUrl.searchParams.set(\"state\", state);\n\n assertTrustedEndpointUrl(authorizeUrl, \"OAuth authorization URL\");\n await this.openBrowserImpl(authorizeUrl.toString());\n const code = await loopback.waitForCode();\n const token = await exchangeToken(metadata.tokenEndpoint, {\n grant_type: \"authorization_code\",\n code,\n redirect_uri: loopback.redirectUri,\n client_id: registration.clientId,\n code_verifier: pkce.codeVerifier,\n resource: this.options.endpoint,\n ...(registration.clientSecret ? { client_secret: registration.clientSecret } : {}),\n }, this.fetchImpl);\n\n const stored = toStoredToken(this.options.endpoint, token, metadata, registration);\n await this.options.tokenStore.save(this.options.endpoint, stored);\n return stored;\n } finally {\n await loopback.close();\n }\n }\n\n async logout(): Promise<void> {\n await this.options.tokenStore.delete(this.options.endpoint);\n }\n\n private async refreshStoredToken(stored: StoredTokenSet): Promise<string | undefined> {\n if (!stored.refreshToken) {\n return stored.accessToken;\n }\n const metadata = await discoverOAuthMetadata(this.options.endpoint, this.fetchImpl);\n const token = await exchangeToken(metadata.tokenEndpoint, {\n grant_type: \"refresh_token\",\n refresh_token: stored.refreshToken,\n client_id: stored.clientId ?? \"ainecto-cli\",\n ...(stored.clientSecret ? { client_secret: stored.clientSecret } : {}),\n resource: this.options.endpoint,\n }, this.fetchImpl);\n const next = toStoredToken(this.options.endpoint, token, metadata, stored);\n await this.options.tokenStore.save(this.options.endpoint, next);\n return next.accessToken;\n }\n}\n\nexport function generatePkcePair(): { codeVerifier: string; codeChallenge: string } {\n const codeVerifier = randomBytes(32).toString(\"base64url\");\n const codeChallenge = createHash(\"sha256\").update(codeVerifier).digest(\"base64url\");\n return { codeVerifier, codeChallenge };\n}\n\nexport function generateOAuthState(): string {\n return randomBytes(32).toString(\"base64url\");\n}\n\nexport function shouldRefresh(token: Pick<StoredTokenSet, \"expiresAt\">, now = Date.now()): boolean {\n if (!token.expiresAt) {\n return false;\n }\n return token.expiresAt - now < 60_000;\n}\n\nexport async function discoverOAuthMetadata(endpoint: string, fetchImpl: typeof fetch = fetch): Promise<OAuthMetadata> {\n assertTrustedEndpointUrl(endpoint, \"MCP endpoint\");\n const resourceMetadataUrl = await discoverResourceMetadataUrl(endpoint, fetchImpl);\n assertTrustedEndpointUrl(resourceMetadataUrl, \"OAuth protected resource metadata URL\");\n const resourceMetadata = await fetchJson<Record<string, unknown>>(resourceMetadataUrl, fetchImpl);\n const authorizationServers = resourceMetadata.authorization_servers;\n if (!Array.isArray(authorizationServers) || typeof authorizationServers[0] !== \"string\") {\n throw new Error(\"OAuth protected resource metadata did not include authorization_servers.\");\n }\n const authServer = authorizationServers[0];\n assertTrustedEndpointUrl(authServer, \"OAuth authorization server\");\n const metadataUrl = authServer.includes(\"/.well-known/\")\n ? authServer\n : `${authServer.replace(/\\/$/, \"\")}/.well-known/oauth-authorization-server`;\n assertTrustedEndpointUrl(metadataUrl, \"OAuth authorization server metadata URL\");\n const metadata = await fetchJson<Record<string, unknown>>(metadataUrl, fetchImpl);\n if (typeof metadata.authorization_endpoint !== \"string\" || typeof metadata.token_endpoint !== \"string\") {\n throw new Error(\"OAuth authorization server metadata is missing authorization_endpoint or token_endpoint.\");\n }\n assertTrustedEndpointUrl(metadata.authorization_endpoint, \"OAuth authorization endpoint\");\n assertTrustedEndpointUrl(metadata.token_endpoint, \"OAuth token endpoint\");\n if (typeof metadata.registration_endpoint === \"string\") {\n assertTrustedEndpointUrl(metadata.registration_endpoint, \"OAuth client registration endpoint\");\n }\n if (typeof metadata.issuer === \"string\") {\n assertTrustedEndpointUrl(metadata.issuer, \"OAuth issuer\");\n }\n const codeChallengeMethodsSupported = parseStringArray(metadata.code_challenge_methods_supported);\n if (!codeChallengeMethodsSupported.includes(\"S256\")) {\n throw new Error(\"OAuth authorization server metadata must support PKCE S256.\");\n }\n return {\n authorizationEndpoint: metadata.authorization_endpoint,\n tokenEndpoint: metadata.token_endpoint,\n registrationEndpoint: typeof metadata.registration_endpoint === \"string\" ? metadata.registration_endpoint : undefined,\n issuer: typeof metadata.issuer === \"string\" ? metadata.issuer : undefined,\n codeChallengeMethodsSupported,\n };\n}\n\nasync function discoverResourceMetadataUrl(endpoint: string, fetchImpl: typeof fetch): Promise<string> {\n const challengeUrl = new URL(endpoint);\n assertTrustedEndpointUrl(challengeUrl, \"MCP endpoint\");\n const response = await fetchImpl(challengeUrl, { method: \"GET\" });\n const challenge = response.headers.get(\"www-authenticate\");\n const fromChallenge = challenge ? parseBearerChallengeParam(challenge, \"resource_metadata\") : undefined;\n if (fromChallenge) {\n assertTrustedEndpointUrl(fromChallenge, \"OAuth protected resource metadata URL\");\n return fromChallenge;\n }\n const origin = new URL(endpoint).origin;\n const fallback = `${origin}/.well-known/oauth-protected-resource`;\n assertTrustedEndpointUrl(fallback, \"OAuth protected resource metadata URL\");\n return fallback;\n}\n\nexport function parseBearerChallengeParam(header: string, name: string): string | undefined {\n const pattern = new RegExp(`${name}=\"([^\"]+)\"`);\n return pattern.exec(header)?.[1];\n}\n\nasync function exchangeToken(\n tokenEndpoint: string,\n params: Record<string, string>,\n fetchImpl: typeof fetch,\n): Promise<Record<string, unknown>> {\n assertTrustedEndpointUrl(tokenEndpoint, \"OAuth token endpoint\");\n const response = await fetchImpl(tokenEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(params),\n });\n if (!response.ok) {\n throw new Error(`OAuth token exchange failed with HTTP ${response.status}.`);\n }\n return response.json() as Promise<Record<string, unknown>>;\n}\n\ntype TokenContext = Partial<Pick<StoredTokenSet, \"refreshToken\" | \"tokenType\" | \"expiresAt\" | \"scope\" | \"clientId\" | \"clientSecret\">>\n & Partial<ClientRegistrationResult>;\n\nfunction toStoredToken(\n endpoint: string,\n token: Record<string, unknown>,\n metadata: OAuthMetadata,\n previous?: TokenContext,\n): StoredTokenSet {\n if (typeof token.access_token !== \"string\") {\n throw new Error(\"OAuth token response did not include access_token.\");\n }\n const expiresIn = typeof token.expires_in === \"number\" ? token.expires_in : undefined;\n return {\n endpoint,\n accessToken: token.access_token,\n refreshToken: typeof token.refresh_token === \"string\" ? token.refresh_token : previous?.refreshToken,\n tokenType: typeof token.token_type === \"string\" ? token.token_type : previous?.tokenType,\n expiresAt: expiresIn ? Date.now() + expiresIn * 1000 : previous?.expiresAt,\n scope: typeof token.scope === \"string\" ? token.scope : previous?.scope,\n clientId: previous?.clientId ?? \"ainecto-cli\",\n clientSecret: previous?.clientSecret,\n authorizationServer: metadata.issuer,\n updatedAt: new Date().toISOString(),\n };\n}\n\nasync function createLoopbackReceiver(expectedState: string): Promise<{\n redirectUri: string;\n waitForCode(): Promise<string>;\n close(): Promise<void>;\n}> {\n let resolveCode!: (code: string) => void;\n let rejectCode!: (error: Error) => void;\n const codePromise = new Promise<string>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n codePromise.catch(() => undefined);\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://127.0.0.1\");\n const error = url.searchParams.get(\"error\");\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (error) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization failed. You can close this tab.\");\n rejectCode(new Error(`OAuth authorization failed: ${error}`));\n return;\n }\n if (!state || state !== expectedState) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization state mismatch. You can close this tab.\");\n rejectCode(new Error(\"OAuth state mismatch.\"));\n return;\n }\n if (!code) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Missing OAuth code.\");\n rejectCode(new Error(\"OAuth redirect did not include a code.\"));\n return;\n }\n res.writeHead(200, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization complete. You can close this tab.\");\n resolveCode(code);\n });\n\n await new Promise<void>((resolve) => server.listen(0, \"127.0.0.1\", resolve));\n const address = server.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Loopback OAuth server did not bind to a TCP port.\");\n }\n return {\n redirectUri: `http://127.0.0.1:${address.port}/callback`,\n waitForCode: () => codePromise,\n close: () => new Promise<void>((resolve, reject) => server.close((error) => error ? reject(error) : resolve())),\n };\n}\n\nfunction parseStringArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n}\n\nasync function fetchJson<T>(url: string, fetchImpl: typeof fetch): Promise<T> {\n assertTrustedEndpointUrl(url, \"OAuth metadata URL\");\n const response = await fetchImpl(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch OAuth metadata from ${url}: HTTP ${response.status}.`);\n }\n return response.json() as Promise<T>;\n}\n\nexport function getBrowserOpenCommand(\n url: string,\n platform: NodeJS.Platform = process.platform,\n): { command: string; args: string[] } {\n assertTrustedEndpointUrl(url, \"OAuth authorization URL\");\n if (platform === \"darwin\") {\n return { command: \"open\", args: [url] };\n }\n if (platform === \"win32\") {\n return { command: \"explorer.exe\", args: [url] };\n }\n return { command: \"xdg-open\", args: [url] };\n}\n\nasync function openBrowser(url: string): Promise<void> {\n const { command, args } = getBrowserOpenCommand(url);\n const child = spawn(command, args, { stdio: \"ignore\", detached: true });\n child.unref();\n}\n\nfunction assertEnvTokenEndpointAllowed(endpoint: string, envVars: NodeJS.ProcessEnv): void {\n if (envVars.AINECTO_ALLOW_CUSTOM_ENDPOINT_TOKEN === \"1\") {\n return;\n }\n if (isDefaultEndpoint(endpoint)) {\n return;\n }\n throw new Error(\"AINECTO_TOKEN can only be used with the default prod/dev endpoints. Set AINECTO_ALLOW_CUSTOM_ENDPOINT_TOKEN=1 only when you intentionally trust the custom endpoint.\");\n}\n","export type AinectoEnv = \"prod\" | \"dev\";\n\nexport interface EndpointResolutionInput {\n env?: AinectoEnv;\n endpoint?: string;\n envVars?: NodeJS.ProcessEnv;\n}\n\nexport interface ResolvedEndpoint {\n env: AinectoEnv;\n endpoint: string;\n source: \"flag\" | \"env\" | \"default\";\n}\n\n/**\n * 기본 MCP 엔드포인트.\n *\n * ★2026-09-21 도메인 전환으로 ai-erd.com 이 «사람이 보는 주소»가 됐고, /mcp 는 두 도메인\n * 모두에서 동일하게 서빙된다(둘 다 같은 인스턴스). 그래서 기본값을 새 도메인으로 옮긴다.\n *\n * ⚠단, OAuth 메타데이터는 아직 ainecto.com 을 가리킨다:\n * WWW-Authenticate resource_metadata=https://ainecto.com/.well-known/oauth-protected-resource/mcp\n * protected-resource resource=https://ainecto.com/mcp · authorization_servers=[https://ainecto.com]\n * authorization-server issuer=https://ainecto.com\n * issuer 는 «발급자 이름»이라 바꾸면 기존 토큰이 전부 무효가 되어 동결돼 있다(전환 계획서 §4-1).\n *\n * 이 CLI 는 issuer/resource 를 요청 호스트와 «대조하지 않고» 서버가 준 메타데이터를 그대로\n * 따라가므로 영향이 없다. ⚠엄격하게 대조하는 다른 MCP 클라이언트는 resource 불일치를\n * 문제 삼을 수 있다 — 그때는 --endpoint 나 AINECTO_MCP_ENDPOINT 로 옛 주소를 쓸 수 있다.\n *\n * 옛 주소도 계속 동작한다. 끊지 않는다.\n */\nconst DEFAULT_ENDPOINTS: Record<AinectoEnv, string> = {\n prod: \"https://ai-erd.com/mcp\",\n dev: \"https://dev.ai-erd.com/mcp\",\n};\n\n/** 옛 기본값 — 이미 설정에 적어둔 사용자가 있다. isDefaultEndpoint 가 이것도 «기본»으로 본다. */\nconst LEGACY_DEFAULT_ENDPOINTS: readonly string[] = [\n \"https://ainecto.com/mcp\",\n \"https://dev.ainecto.com/mcp\",\n];\n\nexport function resolveEndpoint(input: EndpointResolutionInput = {}): ResolvedEndpoint {\n const envVars = input.envVars ?? process.env;\n const env = input.env ?? \"prod\";\n\n if (input.endpoint) {\n return { env, endpoint: normalizeEndpoint(input.endpoint), source: \"flag\" };\n }\n\n if (envVars.AINECTO_MCP_ENDPOINT) {\n return { env, endpoint: normalizeEndpoint(envVars.AINECTO_MCP_ENDPOINT), source: \"env\" };\n }\n\n return { env, endpoint: DEFAULT_ENDPOINTS[env], source: \"default\" };\n}\n\nexport function normalizeEndpoint(endpoint: string): string {\n const url = new URL(endpoint);\n assertTrustedEndpointUrl(url, \"MCP endpoint\");\n url.hash = \"\";\n return url.toString().replace(/\\/$/, \"\");\n}\n\nexport function isDefaultEndpoint(endpoint: string): boolean {\n const normalized = normalizeEndpoint(endpoint);\n return Object.values(DEFAULT_ENDPOINTS).includes(normalized)\n || LEGACY_DEFAULT_ENDPOINTS.includes(normalized);\n}\n\nexport function assertTrustedEndpointUrl(value: string | URL, label = \"URL\"): void {\n const url = typeof value === \"string\" ? new URL(value) : value;\n if (url.protocol === \"https:\") {\n return;\n }\n if (url.protocol === \"http:\" && isLoopbackHostname(url.hostname)) {\n return;\n }\n throw new Error(`${label} must use https, except http is allowed for localhost loopback endpoints.`);\n}\n\nexport function assertLoopbackRedirectUrl(value: string): void {\n const url = new URL(value);\n if (url.protocol === \"http:\" && isLoopbackHostname(url.hostname)) {\n return;\n }\n throw new Error(\"OAuth redirect URI must be an http localhost loopback URL.\");\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n return hostname === \"localhost\"\n || hostname === \"127.0.0.1\"\n || hostname === \"::1\"\n || hostname === \"[::1]\";\n}\n\nexport function assertEnv(value: string | undefined): AinectoEnv | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value === \"prod\" || value === \"dev\") {\n return value;\n }\n throw new Error(`Invalid --env value \"${value}\". Expected \"prod\" or \"dev\".`);\n}\n","import { assertLoopbackRedirectUrl, assertTrustedEndpointUrl } from \"../config/endpoints\";\n\nexport interface ClientRegistrationResult {\n clientId: string;\n clientSecret?: string;\n}\n\nexport async function registerPublicClient(\n registrationEndpoint: string,\n redirectUri: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<ClientRegistrationResult> {\n assertTrustedEndpointUrl(registrationEndpoint, \"OAuth client registration endpoint\");\n assertLoopbackRedirectUrl(redirectUri);\n const response = await fetchImpl(registrationEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", accept: \"application/json\" },\n body: JSON.stringify({\n client_name: \"Ainecto CLI\",\n redirect_uris: [redirectUri],\n token_endpoint_auth_method: \"none\",\n grant_types: [\"authorization_code\", \"refresh_token\"],\n response_types: [\"code\"],\n }),\n });\n if (!response.ok) {\n throw new Error(`OAuth client registration failed with HTTP ${response.status}.`);\n }\n const body = await response.json() as unknown;\n if (!isRecord(body) || typeof body.client_id !== \"string\") {\n throw new Error(\"OAuth client registration response did not include client_id.\");\n }\n return {\n clientId: body.client_id,\n clientSecret: typeof body.client_secret === \"string\" ? body.client_secret : undefined,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport interface PayloadSourceInput {\n file?: string;\n inline?: string;\n stdin?: NodeJS.ReadStream;\n stdinText?: string;\n stdinIsTTY?: boolean;\n}\n\nexport interface ParsedPayload {\n value: unknown;\n source: \"file\" | \"stdin\" | \"inline\" | \"empty\";\n warnings: string[];\n}\n\nexport async function parsePayloadSource(input: PayloadSourceInput): Promise<ParsedPayload> {\n const warnings: string[] = [];\n const stdinIsTTY = input.stdinIsTTY ?? input.stdin?.isTTY ?? true;\n const hasInline = input.inline !== undefined && input.inline !== \"\";\n const hasStdin = input.stdinText !== undefined || !stdinIsTTY;\n\n if (input.file) {\n if (hasInline || hasStdin) {\n warnings.push(\"Multiple payload sources were provided; --file takes precedence.\");\n }\n const text = await readFileOrStdin(input.file, input);\n return { value: parseJson(text), source: input.file === \"-\" || input.file === \"@-\" ? \"stdin\" : \"file\", warnings };\n }\n\n if (hasStdin) {\n if (hasInline) {\n warnings.push(\"Multiple payload sources were provided; stdin takes precedence.\");\n }\n const text = input.stdinText ?? await readAllStdin(input.stdin);\n if (!text.trim()) {\n return { value: {}, source: \"empty\", warnings };\n }\n return { value: parseJson(text), source: \"stdin\", warnings };\n }\n\n if (hasInline) {\n const inline = input.inline === \"@-\" ? await readAllStdin(input.stdin) : input.inline;\n return { value: parseJson(inline), source: \"inline\", warnings };\n }\n\n return { value: {}, source: \"empty\", warnings };\n}\n\nfunction parseJson(text: string | undefined): unknown {\n if (text === undefined || !text.trim()) {\n return {};\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON payload: ${detail}`);\n }\n}\n\nasync function readFileOrStdin(file: string, input: PayloadSourceInput): Promise<string> {\n if (file === \"-\" || file === \"@-\") {\n return input.stdinText ?? await readAllStdin(input.stdin);\n }\n return readFile(file, \"utf8\");\n}\n\nasync function readAllStdin(stdin: NodeJS.ReadStream | undefined): Promise<string> {\n if (!stdin) {\n return \"\";\n }\n stdin.setEncoding(\"utf8\");\n let text = \"\";\n for await (const chunk of stdin) {\n text += chunk;\n }\n return text;\n}\n","import type { TokenProvider } from \"../auth/oauth\";\n\nexport interface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nexport interface JsonRpcSuccess {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n result: unknown;\n}\n\nexport interface JsonRpcFailure {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n error: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\nexport type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure;\n\nexport interface McpRpcClientOptions {\n endpoint: string;\n tokenProvider?: TokenProvider;\n fetchImpl?: typeof fetch;\n envVars?: NodeJS.ProcessEnv;\n}\n\nexport class McpRpcError extends Error {\n constructor(\n message: string,\n readonly code: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n\nexport class McpRpcClient {\n private readonly fetchImpl: typeof fetch;\n private nextId = 1;\n\n constructor(private readonly options: McpRpcClientOptions) {\n this.fetchImpl = options.fetchImpl ?? fetch;\n }\n\n initialize(): Promise<unknown> {\n return this.request(\"initialize\", {\n protocolVersion: \"2024-11-05\",\n capabilities: {},\n clientInfo: { name: \"@ainecto/mcp\", version: \"0.1.0\" },\n });\n }\n\n async toolsList(): Promise<unknown[]> {\n const result = await this.request(\"tools/list\", {});\n if (!isRecord(result) || !Array.isArray(result.tools)) {\n throw new McpRpcError(\"tools/list response did not include a tools array.\", \"MCP_PROTOCOL_ERROR\", result);\n }\n return result.tools;\n }\n\n async toolsCall(name: string, args: unknown): Promise<unknown> {\n return this.request(\"tools/call\", { name, arguments: args ?? {} });\n }\n\n async request(method: string, params?: unknown): Promise<unknown> {\n const response = await this.sendRaw({\n jsonrpc: \"2.0\",\n id: this.nextId++,\n method,\n params,\n });\n if (!response) {\n return undefined;\n }\n if (\"error\" in response) {\n throw new McpRpcError(response.error.message, \"MCP_ERROR\", response.error);\n }\n return response.result;\n }\n\n async sendRaw(request: JsonRpcRequest): Promise<JsonRpcResponse | undefined> {\n const token = await this.options.tokenProvider?.getAccessToken();\n let response = await this.postJson(request, token);\n if (response.status === 401 && this.options.tokenProvider) {\n const refreshed = await this.options.tokenProvider.refreshAfterUnauthorized();\n if (refreshed) {\n response = await this.postJson(request, refreshed);\n }\n }\n\n if (response.status === 204 || response.status === 202) {\n return undefined;\n }\n const text = await response.text();\n if (!response.ok) {\n throw new McpRpcError(\n `MCP HTTP request failed with HTTP ${response.status}.`,\n \"MCP_HTTP_ERROR\",\n httpErrorDetails(response.status, text, this.options.envVars ?? process.env),\n );\n }\n if (!text.trim()) {\n return undefined;\n }\n const parsed = JSON.parse(text) as unknown;\n if (!isJsonRpcResponse(parsed)) {\n throw new McpRpcError(\"MCP response was not a JSON-RPC response.\", \"MCP_PROTOCOL_ERROR\", parsed);\n }\n return parsed;\n }\n\n private postJson(request: JsonRpcRequest, token: string | undefined): Promise<Response> {\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n };\n if (token) {\n headers.authorization = `Bearer ${token}`;\n }\n return this.fetchImpl(this.options.endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(request),\n });\n }\n}\n\nfunction isJsonRpcResponse(value: unknown): value is JsonRpcResponse {\n return isRecord(value)\n && value.jsonrpc === \"2.0\"\n && (\"result\" in value || \"error\" in value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction httpErrorDetails(status: number, body: string, envVars: NodeJS.ProcessEnv): Record<string, unknown> {\n const details: Record<string, unknown> = { status };\n if (envVars.AINECTO_CLI_DEBUG === \"1\" || envVars.AINECTO_DEBUG === \"1\") {\n details.body = safeBodyPreview(body);\n }\n return details;\n}\n\nexport function safeBodyPreview(body: string): string {\n return body.length > 500 ? `${body.slice(0, 500)}...` : body;\n}\n","export interface CliErrorShape {\n ok: false;\n error: {\n code: string;\n message: string;\n details?: unknown;\n };\n}\n\nexport interface CliSuccessShape {\n ok: true;\n data: unknown;\n warnings?: string[];\n}\n\nexport function renderSuccess(data: unknown, options: { json?: boolean; warnings?: string[] } = {}): string {\n if (options.json) {\n const shape: CliSuccessShape = { ok: true, data };\n if (options.warnings?.length) {\n shape.warnings = options.warnings;\n }\n return `${JSON.stringify(shape, null, 2)}\\n`;\n }\n const warnings = options.warnings?.length ? `${options.warnings.map((warning) => `Warning: ${warning}`).join(\"\\n\")}\\n` : \"\";\n return `${warnings}${renderHuman(data)}\\n`;\n}\n\nexport function renderError(error: unknown, options: { json?: boolean } = {}): string {\n const shape = toErrorShape(error);\n if (options.json) {\n return `${JSON.stringify(shape, null, 2)}\\n`;\n }\n return `Error: ${shape.error.message}\\n`;\n}\n\nexport function toErrorShape(error: unknown): CliErrorShape {\n if (error instanceof Error) {\n const maybe = error as Error & { code?: string; details?: unknown };\n return {\n ok: false,\n error: {\n code: maybe.code ?? \"CLI_ERROR\",\n message: error.message,\n details: redactSecrets(maybe.details),\n },\n };\n }\n return { ok: false, error: { code: \"CLI_ERROR\", message: String(error) } };\n}\n\nexport function redactSecrets(value: unknown): unknown {\n return redactSecretsInner(value, new WeakSet<object>());\n}\n\nfunction renderHuman(data: unknown): string {\n if (Array.isArray(data)) {\n return data.map((item) => renderHuman(item)).join(\"\\n\");\n }\n if (typeof data === \"string\") {\n return data;\n }\n return JSON.stringify(data, null, 2);\n}\n\nfunction redactSecretsInner(value: unknown, seen: WeakSet<object>): unknown {\n if (typeof value === \"string\") {\n return redactSecretString(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => redactSecretsInner(item, seen));\n }\n if (value && typeof value === \"object\") {\n if (seen.has(value)) {\n return \"[circular]\";\n }\n seen.add(value);\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n output[key] = isSecretKey(key) ? \"[redacted]\" : redactSecretsInner(child, seen);\n }\n return output;\n }\n return value;\n}\n\nfunction isSecretKey(key: string): boolean {\n const normalized = key.toLowerCase().replace(/-/g, \"_\");\n return normalized === \"authorization\"\n || normalized.includes(\"access_token\")\n || normalized.includes(\"refresh_token\")\n || normalized.includes(\"client_secret\")\n || normalized.includes(\"token\");\n}\n\nfunction redactSecretString(value: string): string {\n return value\n .replace(/(\"(?:authorization|access_token|refresh_token|client_secret|token)\"\\s*:\\s*\")([^\"]*)(\")/gi, \"$1[redacted]$3\")\n .replace(/((?:authorization|access_token|refresh_token|client_secret|token)=)([^&\\s\"']+)/gi, \"$1[redacted]\")\n .replace(/(authorization:\\s*bearer\\s+)([^\\s,}]+)/gi, \"$1[redacted]\")\n .replace(/(bearer\\s+)(eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+)/gi, \"$1[redacted]\");\n}\n","import type { GeneratedToolDefinition } from \"./types\";\n\nexport const generatedTools = [\n {\"mcpName\":\"mcp__ainecto__create_documents\",\"commandPath\":[\"documents\",\"create\"],\"group\":\"document\",\"description\":\"Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Documents\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.create)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"title\":{\"description\":\"Document title\",\"type\":\"string\"},\"type\":{\"description\":\"Document type. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}.\",\"type\":\"object\"}},\"required\":[\"projectUuid\",\"type\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4aa976b9bb3b0eb6\"},\n {\"mcpName\":\"mcp__ainecto__create_folders\",\"commandPath\":[\"folders\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Folders\",\"items\":{\"properties\":{\"name\":{\"description\":\"Folder name\",\"type\":\"string\"},\"parentFolderUuid\":{\"description\":\"Parent folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d423d3c265631664\"},\n {\"mcpName\":\"mcp__ainecto__create_projects\",\"commandPath\":[\"projects\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Projects\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Project name\",\"type\":\"string\"},\"projectKey\":{\"description\":\"Unique project key\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Workspace UUID — null uses user's default workspace\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"396c80c6cc2ba41a\"},\n {\"mcpName\":\"mcp__ainecto__create_workspaces\",\"commandPath\":[\"workspaces\",\"create\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Workspaces\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Workspace name\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d663d461f9c9da65\"},\n {\"mcpName\":\"mcp__ainecto__delete_attachments\",\"commandPath\":[\"attachments\",\"delete\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Attachment UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"6e55e6511d732199\"},\n {\"mcpName\":\"mcp__ainecto__delete_documents\",\"commandPath\":[\"documents\",\"delete\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"5fbc7c142bb4a49d\"},\n {\"mcpName\":\"mcp__ainecto__delete_folders\",\"commandPath\":[\"folders\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"49fa7c0f823871b2\"},\n {\"mcpName\":\"mcp__ainecto__delete_projects\",\"commandPath\":[\"projects\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e1a86ddaa9638298\"},\n {\"mcpName\":\"mcp__ainecto__delete_workspaces\",\"commandPath\":[\"workspaces\",\"delete\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"2aca644f7a105b06\"},\n {\"mcpName\":\"mcp__ainecto__disable_shares\",\"commandPath\":[\"tools\",\"run\",\"disable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"a4b4358eff0faa97\"},\n {\"mcpName\":\"mcp__ainecto__enable_shares\",\"commandPath\":[\"tools\",\"run\",\"enable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ebace643de07e826\"},\n {\"mcpName\":\"mcp__ainecto__erd_apply_changes\",\"commandPath\":[\"erd\",\"apply-changes\"],\"group\":\"erd\",\"description\":\"Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use mcp__ainecto__request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\\nOne-call worked example:\\n{\\n \\\"documentUuid\\\": \\\"erd-doc-uuid\\\",\\n \\\"description\\\": \\\"create users/posts ERD\\\",\\n \\\"operations\\\": [\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"users\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_id\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_email\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"varchar(255)\\\",\\\"is_unique\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"posts\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_author_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"author_id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_status\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"post_status\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":3}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status\\\",\\\"name\\\":\\\"post_status\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_draft\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"draft\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_published\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"published\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref\\\",\\\"data\\\":{\\\"uuid\\\":\\\"ref_posts_author\\\",\\\"name\\\":\\\"fk_posts_author\\\",\\\"from_table_uuid\\\":\\\"tbl_posts\\\",\\\"to_table_uuid\\\":\\\"tbl_users\\\",\\\"relationship\\\":\\\">\\\",\\\"on_delete\\\":\\\"cascade\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref_column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"refcol_posts_author\\\",\\\"ref_uuid\\\":\\\"ref_posts_author\\\",\\\"from_column_uuid\\\":\\\"col_posts_author_id\\\",\\\"to_column_uuid\\\":\\\"col_users_id\\\",\\\"display_order\\\":1}}\\n ]\\n}\",\"inputSchema\":{\"properties\":{\"arrangeNewTables\":{\"description\":\"Whether to auto-place newly-created tables after the batch; defaults to true\",\"type\":\"boolean\"},\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic create/update/delete operations\",\"items\":{\"description\":\"One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.\",\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"name\"],\"title\":\"table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table\",\"description\":\"Must be 'table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"column\",\"description\":\"Must be 'column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"index data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index\",\"description\":\"Must be 'index' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"index_uuid\",\"column_uuid\"],\"title\":\"index_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index_column\",\"description\":\"Must be 'index_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"from_table_uuid\",\"to_table_uuid\",\"relationship\"],\"title\":\"ref data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref\",\"description\":\"Must be 'ref' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"ref_uuid\",\"from_column_uuid\",\"to_column_uuid\"],\"title\":\"ref_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref_column\",\"description\":\"Must be 'ref_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum\",\"description\":\"Must be 'enum' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"required\":[\"enum_uuid\"],\"title\":\"enum_value data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum_value\",\"description\":\"Must be 'enum_value' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum_value operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group\",\"description\":\"Must be 'table_group' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"table_name\"],\"title\":\"table_group_table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_table\",\"description\":\"Must be 'table_group_table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"note_uuid\"],\"title\":\"table_group_note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_note\",\"description\":\"Must be 'table_group_note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_note operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"filter\",\"description\":\"Must be 'filter' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"filter operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"note\",\"description\":\"Must be 'note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"note operation\",\"type\":\"object\"}],\"properties\":{\"data\":{\"description\":\"Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.\",\"oneOf\":[{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}],\"type\":\"object\"},\"op\":{\"description\":\"Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"description\":\"ERD entity type. This selects the operation.data shape.\",\"enum\":[\"table\",\"column\",\"index\",\"index_column\",\"ref\",\"ref_column\",\"enum\",\"enum_value\",\"table_group\",\"table_group_table\",\"table_group_note\",\"filter\",\"note\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete. Do not use this for create; use data.uuid instead.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"description\",\"operations\"],\"type\":\"object\"},\"required\":[\"description\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"dd64d1f996060ab1\"},\n {\"mcpName\":\"mcp__ainecto__erd_arrange_tables\",\"commandPath\":[\"erd\",\"arrange-tables\"],\"group\":\"erd\",\"description\":\"Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"full\":{\"description\":\"Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.\",\"type\":\"boolean\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d2e66548e3d60d30\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_enum\",\"commandPath\":[\"erd\",\"get-enum\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"enumUuid\":{\"description\":\"Enum UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"enumUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"enumUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"1e477b3fadb50c6b\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_ref\",\"commandPath\":[\"erd\",\"get-ref\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"refUuid\":{\"description\":\"Relationship UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"refUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"refUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"40bf1eb02e7a9730\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table\",\"commandPath\":[\"erd\",\"get-table\"],\"group\":\"erd\",\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"inputSchema\":{\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableUuid\":{\"description\":\"Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"8edd40794f39f47a\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table_group\",\"commandPath\":[\"erd\",\"get-table-group\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableGroupUuid\":{\"description\":\"Table group UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"bcd417344639c0c9\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_enums\",\"commandPath\":[\"erd\",\"list-enums\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e0c2207905dbb068\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_refs\",\"commandPath\":[\"erd\",\"list-refs\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9ae2e04c310b57f2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_table_groups\",\"commandPath\":[\"erd\",\"list-table-groups\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"dc8811071df04ac2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_tables\",\"commandPath\":[\"erd\",\"list-tables\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ca05b35b174fc209\"},\n {\"mcpName\":\"mcp__ainecto__get_attachment\",\"commandPath\":[\"attachment\",\"get\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Attachment UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"12bee70f6d254a5d\"},\n {\"mcpName\":\"mcp__ainecto__get_document\",\"commandPath\":[\"document\",\"get\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4949c8a5bb425491\"},\n {\"mcpName\":\"mcp__ainecto__get_project\",\"commandPath\":[\"project\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"b4ee9097f4b80df4\"},\n {\"mcpName\":\"mcp__ainecto__get_version\",\"commandPath\":[\"version\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"versionNumber\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ad81d04200d3d7f5\"},\n {\"mcpName\":\"mcp__ainecto__get_workspace\",\"commandPath\":[\"workspace\",\"get\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ef7bae555463116e\"},\n {\"mcpName\":\"mcp__ainecto__list_attachments\",\"commandPath\":[\"attachments\",\"list\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"a75657bb2e5eb383\"},\n {\"mcpName\":\"mcp__ainecto__list_documents\",\"commandPath\":[\"documents\",\"list\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"q\":{\"description\":\"Optional full-text query. When provided, results come from the search index instead of folder listing.\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"8dca77c1db9372c4\"},\n {\"mcpName\":\"mcp__ainecto__list_folders\",\"commandPath\":[\"folders\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f3cde57fe87d375c\"},\n {\"mcpName\":\"mcp__ainecto__list_projects\",\"commandPath\":[\"projects\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"q\":{\"description\":\"Optional full-text query\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Optional Workspace UUID\",\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9174d6965d7e53f5\"},\n {\"mcpName\":\"mcp__ainecto__list_trash\",\"commandPath\":[\"trash\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"82f8586d68bfcd7d\"},\n {\"mcpName\":\"mcp__ainecto__list_versions\",\"commandPath\":[\"versions\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"370e4b8b8ec18e18\"},\n {\"mcpName\":\"mcp__ainecto__list_workspaces\",\"commandPath\":[\"workspaces\",\"list\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"7c32c74000696b2f\"},\n {\"mcpName\":\"mcp__ainecto__markdown_append_document\",\"commandPath\":[\"markdown\",\"append-document\"],\"group\":\"markdown\",\"description\":\"Append to Markdown documents. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Appends\",\"items\":{\"properties\":{\"addition\":{\"description\":\"Body addition. 추가할 내용이 크면 (수십 KB 이상) LLM 토큰 절약을 위해 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` 로 uploadUrl 을 받고 curl 로 PUT 으로 보낼 것.\",\"type\":\"string\"},\"separator\":{\"description\":\"Separator between existing body and addition\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"addition\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f189514b3cccd1cc\"},\n {\"mcpName\":\"mcp__ainecto__markdown_generate_document\",\"commandPath\":[\"markdown\",\"generate-document\"],\"group\":\"markdown\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Generation requests\",\"items\":{\"properties\":{\"context\":{\"description\":\"Optional JSON context\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Target document UUID\",\"type\":\"string\"},\"prompt\":{\"description\":\"Generation prompt\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"prompt\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"72114a2d2642ed92\"},\n {\"mcpName\":\"mcp__ainecto__move_documents\",\"commandPath\":[\"documents\",\"move\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"clientMutationId\":{\"description\":\"Optional mutation identifier for client retry tracing\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newFolderUuid\":{\"description\":\"New folder UUID — null/empty for root\",\"type\":\"string\"},\"targetProjectUuid\":{\"description\":\"Target project UUID — omit to stay in current project\",\"type\":\"string\"},\"targetWorkspaceUuid\":{\"description\":\"Guard only: must match targetProjectUuid workspace\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9758d6a262913a3f\"},\n {\"mcpName\":\"mcp__ainecto__move_folders\",\"commandPath\":[\"folders\",\"move\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newParentFolderUuid\":{\"description\":\"New parent UUID — null/empty for root\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"612a779b1fd176bb\"},\n {\"mcpName\":\"mcp__ainecto__request_upload_token\",\"commandPath\":[\"tools\",\"run\",\"request-upload-token\"],\"group\":\"attachment\",\"description\":\"Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including mcp__ainecto__erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.\",\"inputSchema\":{\"properties\":{\"maxBytes\":{\"description\":\"최대 업로드 byte (서버 측 한도)\",\"type\":\"integer\"},\"purpose\":{\"description\":\"Token 용도. `mcp.call` 은 curl 로 /mcp 호출, `document.create/update/append` 는 PUT body 로 본문 업로드, `attachment.upload` 는 파일 bytes 업로드. 콘텐츠가 크면 (수십 KB 이상) LLM 토큰 절약을 위해 이 도구로 5분 재사용 토큰을 받고 curl 로 보내는 것을 강력 권장.\",\"enum\":[\"mcp.call\",\"document.create\",\"document.update\",\"document.append\",\"attachment.upload\"],\"type\":\"string\"},\"scopeJson\":{\"description\":\"선택 — JSON scope. document.create 는 projectUuid, type, title 을 포함하고 enabled type values 는 erd, markdown. document.update/document.append 는 documentUuid 를 포함. attachment.upload: {documentUuid, filename, contentType?, sizeBytes?}; storageKey 는 서버가 발급 scope 에 추가.\",\"type\":\"string\"},\"ttlSeconds\":{\"description\":\"TTL (초). 기본 300 (5분)\",\"type\":\"integer\"}},\"required\":[\"purpose\"],\"type\":\"object\"},\"required\":[\"purpose\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f1eb94523f43e72b\"},\n {\"mcpName\":\"mcp__ainecto__restore_versions\",\"commandPath\":[\"versions\",\"restore\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Restores\",\"items\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number to restore\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"c4f448cc3b96c7a6\"},\n {\"mcpName\":\"mcp__ainecto__search_documents\",\"commandPath\":[\"documents\",\"search\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"결과 개수 (기본 20, 최대 50)\",\"type\":\"integer\"},\"offset\":{\"description\":\"페이지네이션 offset (기본 0)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"특정 프로젝트로 한정 (선택)\",\"type\":\"string\"},\"q\":{\"description\":\"검색 키워드\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"}},\"required\":[\"q\"],\"type\":\"object\"},\"required\":[\"q\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"b88c3537086d0c7a\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_documents\",\"commandPath\":[\"documents\",\"unarchive\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4aae7df04fba8779\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_folders\",\"commandPath\":[\"folders\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e307cab0ebafd179\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_projects\",\"commandPath\":[\"projects\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"15ea4a409d1549de\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_workspaces\",\"commandPath\":[\"workspaces\",\"unarchive\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"641de5b64ec75ab2\"},\n {\"mcpName\":\"mcp__ainecto__update_documents\",\"commandPath\":[\"documents\",\"update\"],\"group\":\"document\",\"description\":\"Update documents. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.update)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}.\",\"type\":\"object\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"5bedb6e5f5ba4f8d\"},\n {\"mcpName\":\"mcp__ainecto__update_folders\",\"commandPath\":[\"folders\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"7bef3b4702df1f00\"},\n {\"mcpName\":\"mcp__ainecto__update_projects\",\"commandPath\":[\"projects\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"10cc0d84aeb2192b\"},\n {\"mcpName\":\"mcp__ainecto__update_workspaces\",\"commandPath\":[\"workspaces\",\"update\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"723e4f6d36ee9d02\"},\n {\"mcpName\":\"mcp__ainecto__upload_attachments\",\"commandPath\":[\"tools\",\"run\",\"upload-attachments\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Attachments to register\",\"items\":{\"properties\":{\"contentType\":{\"description\":\"MIME type\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent document UUID\",\"type\":\"string\"},\"filename\":{\"description\":\"Original file name\",\"type\":\"string\"},\"sizeBytes\":{\"description\":\"Size in bytes\",\"type\":\"integer\"},\"storageKey\":{\"description\":\"Storage key returned by request_upload_token purpose=attachment.upload\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"filename\",\"storageKey\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"0622e590de3404dd\"},\n] satisfies GeneratedToolDefinition[];\n","import type { GeneratedToolDefinition } from \"./types\";\n\nexport const generatedTools = [\n {\"mcpName\":\"mcp__ainecto__create_documents\",\"commandPath\":[\"documents\",\"create\"],\"group\":\"document\",\"description\":\"Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Documents\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.create)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"title\":{\"description\":\"Document title\",\"type\":\"string\"},\"type\":{\"description\":\"Document type. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; testcase: {defaultEnvironment (max 50 chars), defaultTestAccount (max 100 chars)}; task: no typePayload; board and default statuses are seeded automatically.\",\"type\":\"object\"}},\"required\":[\"projectUuid\",\"type\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6abbab093274fceb\"},\n {\"mcpName\":\"mcp__ainecto__create_folders\",\"commandPath\":[\"folders\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Folders\",\"items\":{\"properties\":{\"name\":{\"description\":\"Folder name\",\"type\":\"string\"},\"parentFolderUuid\":{\"description\":\"Parent folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d423d3c265631664\"},\n {\"mcpName\":\"mcp__ainecto__create_projects\",\"commandPath\":[\"projects\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Projects\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Project name\",\"type\":\"string\"},\"projectKey\":{\"description\":\"Unique project key\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Workspace UUID — null uses user's default workspace\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"396c80c6cc2ba41a\"},\n {\"mcpName\":\"mcp__ainecto__create_workspaces\",\"commandPath\":[\"workspaces\",\"create\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Workspaces\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Workspace name\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d663d461f9c9da65\"},\n {\"mcpName\":\"mcp__ainecto__delete_attachments\",\"commandPath\":[\"attachments\",\"delete\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Attachment UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6e55e6511d732199\"},\n {\"mcpName\":\"mcp__ainecto__delete_documents\",\"commandPath\":[\"documents\",\"delete\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"5fbc7c142bb4a49d\"},\n {\"mcpName\":\"mcp__ainecto__delete_folders\",\"commandPath\":[\"folders\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"49fa7c0f823871b2\"},\n {\"mcpName\":\"mcp__ainecto__delete_projects\",\"commandPath\":[\"projects\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e1a86ddaa9638298\"},\n {\"mcpName\":\"mcp__ainecto__delete_workspaces\",\"commandPath\":[\"workspaces\",\"delete\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"2aca644f7a105b06\"},\n {\"mcpName\":\"mcp__ainecto__diagram_apply_changes\",\"commandPath\":[\"tools\",\"run\",\"diagram-apply-changes\"],\"group\":\"generic\",\"description\":\"Required single-call mutation path for diagram node/edge/group create/update/delete changes. Put nodes, edges, and groups in one request and call this once. Do not look for type-specific diagram CUD tools; this tool is the only diagram CUD entry point.\",\"inputSchema\":{\"properties\":{\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"diagramUuid\":{\"description\":\"Diagram UUID\",\"type\":\"string\"},\"edges\":{\"description\":\"Edge operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"bridgeType\":{\"description\":\"Bridge type\",\"type\":\"string\"},\"fromUuid\":{\"description\":\"Source\",\"type\":\"string\"},\"label\":{\"description\":\"Edge label\",\"type\":\"string\"},\"lineStyle\":{\"description\":\"Line style\",\"type\":\"string\"},\"strokeColor\":{\"description\":\"Stroke color\",\"type\":\"string\"},\"strokeWidth\":{\"description\":\"Stroke width\",\"type\":\"integer\"},\"toUuid\":{\"description\":\"Target\",\"type\":\"string\"},\"uuid\":{\"description\":\"Required for update/delete\",\"type\":\"string\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"},\"groups\":{\"description\":\"Group operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"collapsed\":{\"description\":\"Collapsed state\",\"type\":\"boolean\"},\"color\":{\"description\":\"Group color\",\"type\":\"string\"},\"linkMode\":{\"description\":\"Link mode\",\"type\":\"string\"},\"linkedDiagramUuid\":{\"description\":\"Linked diagram UUID\",\"type\":\"string\"},\"name\":{\"description\":\"Group name\",\"type\":\"string\"},\"parentGroupUuid\":{\"description\":\"Parent group UUID\",\"type\":\"string\"},\"sortOrder\":{\"description\":\"Sort order\",\"type\":\"integer\"},\"uuid\":{\"description\":\"Required for update/delete\",\"type\":\"string\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"},\"nodes\":{\"description\":\"Node operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"fillColor\":{\"description\":\"Fill color\",\"type\":\"string\"},\"groupUuid\":{\"description\":\"Group UUID; empty string clears membership\",\"type\":\"string\"},\"height\":{\"description\":\"Height\",\"type\":\"number\"},\"shape\":{\"description\":\"Node shape (start/end/diamond/cylinder/parallelogram/stadium/hexagon/rect/roundRect/...)\",\"enum\":[\"rect\",\"roundRect\",\"stadium\",\"diamond\",\"decision\",\"circle\",\"start\",\"doubleCircle\",\"end\",\"hexagon\",\"cylinder\",\"parallelogram\"],\"type\":\"string\"},\"strokeColor\":{\"description\":\"Stroke color\",\"type\":\"string\"},\"text\":{\"description\":\"Node text/label. Supports newlines (\\\\n) for multi-line display.\",\"maxLength\":4000,\"type\":\"string\"},\"textColor\":{\"description\":\"Text color\",\"type\":\"string\"},\"type\":{\"description\":\"Node type\",\"type\":\"string\"},\"uuid\":{\"description\":\"Required for update/delete; optional for create\",\"type\":\"string\"},\"width\":{\"description\":\"Width\",\"type\":\"number\"},\"x\":{\"description\":\"X\",\"type\":\"number\"},\"y\":{\"description\":\"Y\",\"type\":\"number\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"diagramUuid\",\"description\"],\"type\":\"object\"},\"required\":[\"description\",\"diagramUuid\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1c87428fea4bb77a\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_edge\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-edge\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"edgeUuid\":{\"description\":\"Edge UUID\",\"type\":\"string\"}},\"required\":[\"edgeUuid\"],\"type\":\"object\"},\"required\":[\"edgeUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b147277e74d3b0f7\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_group\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-group\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"groupUuid\":{\"description\":\"Group UUID\",\"type\":\"string\"}},\"required\":[\"groupUuid\"],\"type\":\"object\"},\"required\":[\"groupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4516fc00303ab8db\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_node\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-node\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"nodeUuid\":{\"description\":\"Node UUID\",\"type\":\"string\"}},\"required\":[\"nodeUuid\"],\"type\":\"object\"},\"required\":[\"nodeUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"20f370ff4438c4b0\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_pending_llm_requests\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-pending-llm-requests\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"0ec4dd6d61584a98\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_edges\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-edges\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"fee200dd1433daf9\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_groups\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-groups\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"852a19cda307f863\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_nodes\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-nodes\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a8c41752151ade3e\"},\n {\"mcpName\":\"mcp__ainecto__diagram_submit_llm_result\",\"commandPath\":[\"tools\",\"run\",\"diagram-submit-llm-result\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"creditsCharged\":{\"description\":\"Deprecated; ignored. Credits are calculated server-side from tokens.\",\"type\":\"integer\"},\"inputTokens\":{\"description\":\"Input token count\",\"type\":\"integer\"},\"outputTokens\":{\"description\":\"Output token count\",\"type\":\"integer\"},\"result\":{\"description\":\"LLM result text\",\"type\":\"string\"},\"uuid\":{\"description\":\"LLM request UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"result\"],\"type\":\"object\"},\"required\":[\"result\",\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"374654baa87c1bb8\"},\n {\"mcpName\":\"mcp__ainecto__diagram_update_llm_request_status\",\"commandPath\":[\"tools\",\"run\",\"diagram-update-llm-request-status\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"errorMessage\":{\"description\":\"Error message (when status=FAILED)\",\"type\":\"string\"},\"status\":{\"description\":\"Target status — currently only FAILED is mutable from caller side\",\"enum\":[\"FAILED\"],\"type\":\"string\"},\"uuid\":{\"description\":\"LLM request UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"status\"],\"type\":\"object\"},\"required\":[\"status\",\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"25537b63698bc33d\"},\n {\"mcpName\":\"mcp__ainecto__disable_shares\",\"commandPath\":[\"tools\",\"run\",\"disable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a4b4358eff0faa97\"},\n {\"mcpName\":\"mcp__ainecto__enable_shares\",\"commandPath\":[\"tools\",\"run\",\"enable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ebace643de07e826\"},\n {\"mcpName\":\"mcp__ainecto__erd_apply_changes\",\"commandPath\":[\"erd\",\"apply-changes\"],\"group\":\"erd\",\"description\":\"Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use mcp__ainecto__request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\\nOne-call worked example:\\n{\\n \\\"documentUuid\\\": \\\"erd-doc-uuid\\\",\\n \\\"description\\\": \\\"create users/posts ERD\\\",\\n \\\"operations\\\": [\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"users\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_id\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_email\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"varchar(255)\\\",\\\"is_unique\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"posts\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_author_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"author_id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_status\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"post_status\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":3}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status\\\",\\\"name\\\":\\\"post_status\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_draft\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"draft\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_published\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"published\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref\\\",\\\"data\\\":{\\\"uuid\\\":\\\"ref_posts_author\\\",\\\"name\\\":\\\"fk_posts_author\\\",\\\"from_table_uuid\\\":\\\"tbl_posts\\\",\\\"to_table_uuid\\\":\\\"tbl_users\\\",\\\"relationship\\\":\\\">\\\",\\\"on_delete\\\":\\\"cascade\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref_column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"refcol_posts_author\\\",\\\"ref_uuid\\\":\\\"ref_posts_author\\\",\\\"from_column_uuid\\\":\\\"col_posts_author_id\\\",\\\"to_column_uuid\\\":\\\"col_users_id\\\",\\\"display_order\\\":1}}\\n ]\\n}\",\"inputSchema\":{\"properties\":{\"arrangeNewTables\":{\"description\":\"Whether to auto-place newly-created tables after the batch; defaults to true\",\"type\":\"boolean\"},\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic create/update/delete operations\",\"items\":{\"description\":\"One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.\",\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"name\"],\"title\":\"table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table\",\"description\":\"Must be 'table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"column\",\"description\":\"Must be 'column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"index data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index\",\"description\":\"Must be 'index' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"index_uuid\",\"column_uuid\"],\"title\":\"index_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index_column\",\"description\":\"Must be 'index_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"from_table_uuid\",\"to_table_uuid\",\"relationship\"],\"title\":\"ref data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref\",\"description\":\"Must be 'ref' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"ref_uuid\",\"from_column_uuid\",\"to_column_uuid\"],\"title\":\"ref_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref_column\",\"description\":\"Must be 'ref_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum\",\"description\":\"Must be 'enum' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"required\":[\"enum_uuid\"],\"title\":\"enum_value data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum_value\",\"description\":\"Must be 'enum_value' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum_value operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group\",\"description\":\"Must be 'table_group' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"table_name\"],\"title\":\"table_group_table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_table\",\"description\":\"Must be 'table_group_table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"note_uuid\"],\"title\":\"table_group_note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_note\",\"description\":\"Must be 'table_group_note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_note operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"filter\",\"description\":\"Must be 'filter' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"filter operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"note\",\"description\":\"Must be 'note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"note operation\",\"type\":\"object\"}],\"properties\":{\"data\":{\"description\":\"Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.\",\"oneOf\":[{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}],\"type\":\"object\"},\"op\":{\"description\":\"Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"description\":\"ERD entity type. This selects the operation.data shape.\",\"enum\":[\"table\",\"column\",\"index\",\"index_column\",\"ref\",\"ref_column\",\"enum\",\"enum_value\",\"table_group\",\"table_group_table\",\"table_group_note\",\"filter\",\"note\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete. Do not use this for create; use data.uuid instead.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"description\",\"operations\"],\"type\":\"object\"},\"required\":[\"description\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"dd64d1f996060ab1\"},\n {\"mcpName\":\"mcp__ainecto__erd_arrange_tables\",\"commandPath\":[\"erd\",\"arrange-tables\"],\"group\":\"erd\",\"description\":\"Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"full\":{\"description\":\"Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.\",\"type\":\"boolean\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d2e66548e3d60d30\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_enum\",\"commandPath\":[\"erd\",\"get-enum\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"enumUuid\":{\"description\":\"Enum UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"enumUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"enumUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1e477b3fadb50c6b\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_ref\",\"commandPath\":[\"erd\",\"get-ref\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"refUuid\":{\"description\":\"Relationship UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"refUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"refUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"40bf1eb02e7a9730\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table\",\"commandPath\":[\"erd\",\"get-table\"],\"group\":\"erd\",\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"inputSchema\":{\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableUuid\":{\"description\":\"Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"8edd40794f39f47a\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table_group\",\"commandPath\":[\"erd\",\"get-table-group\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableGroupUuid\":{\"description\":\"Table group UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"bcd417344639c0c9\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_enums\",\"commandPath\":[\"erd\",\"list-enums\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e0c2207905dbb068\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_refs\",\"commandPath\":[\"erd\",\"list-refs\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9ae2e04c310b57f2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_table_groups\",\"commandPath\":[\"erd\",\"list-table-groups\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"dc8811071df04ac2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_tables\",\"commandPath\":[\"erd\",\"list-tables\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ca05b35b174fc209\"},\n {\"mcpName\":\"mcp__ainecto__get_attachment\",\"commandPath\":[\"attachment\",\"get\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Attachment UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"12bee70f6d254a5d\"},\n {\"mcpName\":\"mcp__ainecto__get_document\",\"commandPath\":[\"document\",\"get\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4949c8a5bb425491\"},\n {\"mcpName\":\"mcp__ainecto__get_project\",\"commandPath\":[\"project\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b4ee9097f4b80df4\"},\n {\"mcpName\":\"mcp__ainecto__get_version\",\"commandPath\":[\"version\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"versionNumber\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ad81d04200d3d7f5\"},\n {\"mcpName\":\"mcp__ainecto__get_workspace\",\"commandPath\":[\"workspace\",\"get\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ef7bae555463116e\"},\n {\"mcpName\":\"mcp__ainecto__list_attachments\",\"commandPath\":[\"attachments\",\"list\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a75657bb2e5eb383\"},\n {\"mcpName\":\"mcp__ainecto__list_documents\",\"commandPath\":[\"documents\",\"list\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"q\":{\"description\":\"Optional full-text query. When provided, results come from the search index instead of folder listing.\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e5d92431322ac0e3\"},\n {\"mcpName\":\"mcp__ainecto__list_folders\",\"commandPath\":[\"folders\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f3cde57fe87d375c\"},\n {\"mcpName\":\"mcp__ainecto__list_projects\",\"commandPath\":[\"projects\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"q\":{\"description\":\"Optional full-text query\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Optional Workspace UUID\",\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9174d6965d7e53f5\"},\n {\"mcpName\":\"mcp__ainecto__list_trash\",\"commandPath\":[\"trash\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"82f8586d68bfcd7d\"},\n {\"mcpName\":\"mcp__ainecto__list_versions\",\"commandPath\":[\"versions\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"370e4b8b8ec18e18\"},\n {\"mcpName\":\"mcp__ainecto__list_workspaces\",\"commandPath\":[\"workspaces\",\"list\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7c32c74000696b2f\"},\n {\"mcpName\":\"mcp__ainecto__markdown_append_document\",\"commandPath\":[\"markdown\",\"append-document\"],\"group\":\"markdown\",\"description\":\"Append to Markdown documents. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Appends\",\"items\":{\"properties\":{\"addition\":{\"description\":\"Body addition. 추가할 내용이 크면 (수십 KB 이상) LLM 토큰 절약을 위해 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` 로 uploadUrl 을 받고 curl 로 PUT 으로 보낼 것.\",\"type\":\"string\"},\"separator\":{\"description\":\"Separator between existing body and addition\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"addition\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f189514b3cccd1cc\"},\n {\"mcpName\":\"mcp__ainecto__markdown_generate_document\",\"commandPath\":[\"markdown\",\"generate-document\"],\"group\":\"markdown\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Generation requests\",\"items\":{\"properties\":{\"context\":{\"description\":\"Optional JSON context\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Target document UUID\",\"type\":\"string\"},\"prompt\":{\"description\":\"Generation prompt\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"prompt\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"72114a2d2642ed92\"},\n {\"mcpName\":\"mcp__ainecto__move_documents\",\"commandPath\":[\"documents\",\"move\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"clientMutationId\":{\"description\":\"Optional mutation identifier for client retry tracing\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newFolderUuid\":{\"description\":\"New folder UUID — null/empty for root\",\"type\":\"string\"},\"targetProjectUuid\":{\"description\":\"Target project UUID — omit to stay in current project\",\"type\":\"string\"},\"targetWorkspaceUuid\":{\"description\":\"Guard only: must match targetProjectUuid workspace\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9758d6a262913a3f\"},\n {\"mcpName\":\"mcp__ainecto__move_folders\",\"commandPath\":[\"folders\",\"move\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newParentFolderUuid\":{\"description\":\"New parent UUID — null/empty for root\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"612a779b1fd176bb\"},\n {\"mcpName\":\"mcp__ainecto__request_upload_token\",\"commandPath\":[\"tools\",\"run\",\"request-upload-token\"],\"group\":\"attachment\",\"description\":\"Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including mcp__ainecto__erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.\",\"inputSchema\":{\"properties\":{\"maxBytes\":{\"description\":\"최대 업로드 byte (서버 측 한도)\",\"type\":\"integer\"},\"purpose\":{\"description\":\"Token 용도. `mcp.call` 은 curl 로 /mcp 호출, `document.create/update/append` 는 PUT body 로 본문 업로드, `attachment.upload` 는 파일 bytes 업로드. 콘텐츠가 크면 (수십 KB 이상) LLM 토큰 절약을 위해 이 도구로 5분 재사용 토큰을 받고 curl 로 보내는 것을 강력 권장.\",\"enum\":[\"mcp.call\",\"document.create\",\"document.update\",\"document.append\",\"attachment.upload\"],\"type\":\"string\"},\"scopeJson\":{\"description\":\"선택 — JSON scope. document.create 는 projectUuid, type, title 을 포함하고 enabled type values 는 erd, diagram, markdown, testcase, task. document.update/document.append 는 documentUuid 를 포함. attachment.upload: {documentUuid, filename, contentType?, sizeBytes?}; storageKey 는 서버가 발급 scope 에 추가.\",\"type\":\"string\"},\"ttlSeconds\":{\"description\":\"TTL (초). 기본 300 (5분)\",\"type\":\"integer\"}},\"required\":[\"purpose\"],\"type\":\"object\"},\"required\":[\"purpose\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"cc5db0cc4a9d9603\"},\n {\"mcpName\":\"mcp__ainecto__restore_versions\",\"commandPath\":[\"versions\",\"restore\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Restores\",\"items\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number to restore\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"c4f448cc3b96c7a6\"},\n {\"mcpName\":\"mcp__ainecto__search_documents\",\"commandPath\":[\"documents\",\"search\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"결과 개수 (기본 20, 최대 50)\",\"type\":\"integer\"},\"offset\":{\"description\":\"페이지네이션 offset (기본 0)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"특정 프로젝트로 한정 (선택)\",\"type\":\"string\"},\"q\":{\"description\":\"검색 키워드\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"}},\"required\":[\"q\"],\"type\":\"object\"},\"required\":[\"q\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"89efa02eab3c01a1\"},\n {\"mcpName\":\"mcp__ainecto__task_apply_changes\",\"commandPath\":[\"task\",\"apply-changes\"],\"group\":\"task\",\"description\":\"Task CUD entry point. Applies one atomic batch using operation objects shaped exactly as {op, uuid, data}. There is no partial success mode; any validation failure aborts the whole batch.\",\"inputSchema\":{\"examples\":[{\"baseRevision\":1,\"clientMutationId\":\"task-mutation-1\",\"documentUuid\":\"task-document-uuid\",\"operations\":[{\"data\":{\"parentTaskUuid\":null,\"title\":\"Task title\"},\"op\":\"create_task\",\"uuid\":\"client-task-uuid\"}]}],\"properties\":{\"baseRevision\":{\"description\":\"Current board revision from task_get_snapshot\",\"type\":\"integer\"},\"clientMutationId\":{\"description\":\"Optional idempotency key. Visible ASCII, 1-128 chars; will become required in a later phase.\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic batch. No partial success mode; validation failure aborts all operations.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"data\":{\"description\":\"Operation payload. Keep all operation-specific fields inside data.\",\"type\":\"object\"},\"op\":{\"description\":\"Operation type\",\"enum\":[\"create_task\",\"update_task\",\"archive_task\",\"restore_task\",\"move_task\",\"transition_task\",\"assign_task\",\"schedule_task\",\"set_progress\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Task UUID. For create_task this is the client-generated UUID.\",\"type\":\"string\"}},\"required\":[\"op\",\"uuid\",\"data\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"baseRevision\",\"operations\"],\"type\":\"object\"},\"required\":[\"baseRevision\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"085eb6e8a3eae2c8\"},\n {\"mcpName\":\"mcp__ainecto__task_get_snapshot\",\"commandPath\":[\"task\",\"get-snapshot\"],\"group\":\"task\",\"description\":\"Get one Task document snapshot. Returns board revision, statuses, tasks, member summaries, and permissions. Use before mutations to obtain baseRevision.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"includeArchived\":{\"description\":\"Whether to include archived tasks\",\"type\":\"boolean\"},\"limit\":{\"description\":\"Maximum tasks to return; defaults to server snapshot cap\",\"type\":\"integer\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a11876f9b475338a\"},\n {\"mcpName\":\"mcp__ainecto__task_get_task\",\"commandPath\":[\"task\",\"get-task\"],\"group\":\"task\",\"description\":\"Get one task by UUID from a Task document.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"taskUuid\":{\"description\":\"Task UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"taskUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"taskUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"96b1ea530c583337\"},\n {\"mcpName\":\"mcp__ainecto__task_list_statuses\",\"commandPath\":[\"task\",\"list-statuses\"],\"group\":\"task\",\"description\":\"List statuses for a Task document. Status slug is intentionally not returned.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"864ea509c54fe2e7\"},\n {\"mcpName\":\"mcp__ainecto__task_list_tasks\",\"commandPath\":[\"task\",\"list-tasks\"],\"group\":\"task\",\"description\":\"List tasks in a Task document with optional parent/status/assignee filters.\",\"inputSchema\":{\"properties\":{\"assigneeUserId\":{\"description\":\"Optional assignee user id filter\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"includeArchived\":{\"description\":\"Whether to include archived tasks\",\"type\":\"boolean\"},\"limit\":{\"description\":\"Maximum tasks to return\",\"type\":\"integer\"},\"parentTaskUuid\":{\"description\":\"Optional parent filter\",\"type\":\"string\"},\"statusUuid\":{\"description\":\"Optional status filter\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"be8dc0a4ecd117a8\"},\n {\"mcpName\":\"mcp__ainecto__testcase_archive_scenarios\",\"commandPath\":[\"testcase\",\"archive-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Scenario ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a5a8768d14ebaed7\"},\n {\"mcpName\":\"mcp__ainecto__testcase_complete_runs\",\"commandPath\":[\"testcase\",\"complete-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Run ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"84bc3dad482ac61a\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_runs\",\"commandPath\":[\"testcase\",\"create-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Runs\",\"items\":{\"properties\":{\"buildVersion\":{\"description\":\"Build version\",\"type\":\"string\"},\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"environment\":{\"description\":\"Environment\",\"type\":\"string\"},\"name\":{\"description\":\"Run name\",\"type\":\"string\"},\"projectId\":{\"description\":\"Project id\",\"type\":\"integer\"},\"testAccount\":{\"description\":\"SUT test account\",\"type\":\"string\"},\"testCaseIds\":{\"description\":\"Test case ids to attach\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"projectId\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6a08117c79f589a1\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_scenarios\",\"commandPath\":[\"testcase\",\"create-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Scenarios\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"},\"name\":{\"description\":\"Scenario name\",\"type\":\"string\"},\"parentId\":{\"description\":\"Parent scenario id\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4686fd0f078a65e8\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_testcases\",\"commandPath\":[\"testcase\",\"create-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Testcases\",\"items\":{\"properties\":{\"assigneeId\":{\"description\":\"Assignee user id\",\"type\":\"string\"},\"expectedResult\":{\"description\":\"Expected result\",\"type\":\"string\"},\"precondition\":{\"description\":\"Precondition\",\"type\":\"string\"},\"priority\":{\"description\":\"Priority\",\"enum\":[\"LOW\",\"MEDIUM\",\"HIGH\",\"CRITICAL\"],\"type\":\"string\"},\"scenarioId\":{\"description\":\"Scenario id (required)\",\"type\":\"integer\"},\"source\":{\"description\":\"Source\",\"enum\":[\"MANUAL\",\"AI\",\"IMPORT\",\"MCP\"],\"type\":\"string\"},\"status\":{\"description\":\"Status\",\"enum\":[\"DRAFT\",\"READY\",\"DEPRECATED\"],\"type\":\"string\"},\"tags\":{\"description\":\"Tags\",\"type\":\"string\"},\"testAccount\":{\"description\":\"SUT test account\",\"type\":\"string\"},\"title\":{\"description\":\"Title\",\"type\":\"string\"},\"type\":{\"description\":\"Type\",\"enum\":[\"FUNCTIONAL\",\"REGRESSION\",\"SMOKE\",\"PERFORMANCE\",\"SECURITY\",\"E2E\",\"UNIT\",\"INTEGRATION\"],\"type\":\"string\"}},\"required\":[\"scenarioId\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ae90d4749debacf0\"},\n {\"mcpName\":\"mcp__ainecto__testcase_delete_runs\",\"commandPath\":[\"testcase\",\"delete-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Run ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1ba26baf794bde57\"},\n {\"mcpName\":\"mcp__ainecto__testcase_delete_testcases\",\"commandPath\":[\"testcase\",\"delete-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Testcase ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ab095f553bf46937\"},\n {\"mcpName\":\"mcp__ainecto__testcase_get_run\",\"commandPath\":[\"testcase\",\"get-run\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"id\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"required\":[\"id\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"713c83514cf07d68\"},\n {\"mcpName\":\"mcp__ainecto__testcase_get_testcase\",\"commandPath\":[\"testcase\",\"get-testcase\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"id\":{\"description\":\"Testcase id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"required\":[\"id\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"54e497a2e3c9978d\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_executions\",\"commandPath\":[\"testcase\",\"list-executions\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\"],\"type\":\"object\"},\"required\":[\"runId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a5a2abcf9e43225e\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_runs\",\"commandPath\":[\"testcase\",\"list-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectId\":{\"description\":\"Project id\",\"type\":\"integer\"}},\"required\":[\"projectId\"],\"type\":\"object\"},\"required\":[\"projectId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b7d5275b67bb11d9\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_scenarios\",\"commandPath\":[\"testcase\",\"list-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"2486ade3c9cb0984\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_step_checks\",\"commandPath\":[\"testcase\",\"list-step-checks\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"caseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"caseId\"],\"type\":\"object\"},\"required\":[\"caseId\",\"runId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f2d5b45c0d64cd5c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_testcases\",\"commandPath\":[\"testcase\",\"list-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ef40927392d5a684\"},\n {\"mcpName\":\"mcp__ainecto__testcase_record_executions\",\"commandPath\":[\"testcase\",\"record-executions\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Executions\",\"items\":{\"properties\":{\"comment\":{\"description\":\"Comment\",\"type\":\"string\"},\"defectLinks\":{\"description\":\"Defect URLs\",\"type\":\"string\"},\"durationSeconds\":{\"description\":\"Duration in seconds\",\"type\":\"integer\"},\"result\":{\"description\":\"Result\",\"enum\":[\"PASSED\",\"FAILED\",\"BLOCKED\",\"SKIPPED\",\"UNTESTED\",\"IN_PROGRESS\"],\"type\":\"string\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"},\"testAccount\":{\"description\":\"SUT account\",\"type\":\"string\"},\"testCaseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"testCaseId\",\"result\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"071a2075d00bff9b\"},\n {\"mcpName\":\"mcp__ainecto__testcase_remove_run_cases\",\"commandPath\":[\"testcase\",\"remove-run-cases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"},\"testCaseIds\":{\"description\":\"Testcase ids to remove\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"runId\",\"testCaseIds\"],\"type\":\"object\"},\"required\":[\"runId\",\"testCaseIds\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7aef8a39afe88c5c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_reorder_scenarios\",\"commandPath\":[\"testcase\",\"reorder-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Scenario ids in new order\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7faf43a0b53c2988\"},\n {\"mcpName\":\"mcp__ainecto__testcase_reorder_testcases\",\"commandPath\":[\"testcase\",\"reorder-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Testcase ids in new order\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"5f27d8b94aca5334\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_runs\",\"commandPath\":[\"testcase\",\"update-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"buildVersion\":{\"description\":\"New build version\",\"type\":\"string\"},\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"environment\":{\"description\":\"New environment\",\"type\":\"string\"},\"id\":{\"description\":\"Run id\",\"type\":\"integer\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"status\":{\"description\":\"New status\",\"enum\":[\"DRAFT\",\"IN_PROGRESS\",\"COMPLETED\",\"CANCELLED\"],\"type\":\"string\"},\"testAccount\":{\"description\":\"New SUT account\",\"type\":\"string\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"370074b6681d495f\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_scenarios\",\"commandPath\":[\"testcase\",\"update-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"id\":{\"description\":\"Scenario id\",\"type\":\"integer\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"parentId\":{\"description\":\"New parent id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"929c8647c06c5fdd\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_testcases\",\"commandPath\":[\"testcase\",\"update-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"assigneeId\":{\"description\":\"Assignee\",\"type\":\"string\"},\"expectedResult\":{\"description\":\"New expected result\",\"type\":\"string\"},\"id\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"precondition\":{\"description\":\"New precondition\",\"type\":\"string\"},\"priority\":{\"description\":\"Priority\",\"enum\":[\"LOW\",\"MEDIUM\",\"HIGH\",\"CRITICAL\"],\"type\":\"string\"},\"scenarioId\":{\"description\":\"New scenario id\",\"type\":\"integer\"},\"status\":{\"description\":\"Status\",\"enum\":[\"DRAFT\",\"READY\",\"DEPRECATED\"],\"type\":\"string\"},\"tags\":{\"description\":\"Tags\",\"type\":\"string\"},\"testAccount\":{\"description\":\"SUT account\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"type\":{\"description\":\"Type\",\"enum\":[\"FUNCTIONAL\",\"REGRESSION\",\"SMOKE\",\"PERFORMANCE\",\"SECURITY\",\"E2E\",\"UNIT\",\"INTEGRATION\"],\"type\":\"string\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b562a7b860f6036c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_upsert_step_checks\",\"commandPath\":[\"testcase\",\"upsert-step-checks\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"caseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"items\":{\"description\":\"Step checks\",\"items\":{\"properties\":{\"checked\":{\"description\":\"Checked state\",\"type\":\"boolean\"},\"comment\":{\"description\":\"Per-step note\",\"type\":\"string\"},\"stepId\":{\"description\":\"TestStep id\",\"type\":\"integer\"}},\"required\":[\"stepId\",\"checked\"],\"type\":\"object\"},\"type\":\"array\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"caseId\",\"items\"],\"type\":\"object\"},\"required\":[\"caseId\",\"items\",\"runId\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ac5768125a9fd15c\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_documents\",\"commandPath\":[\"documents\",\"unarchive\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4aae7df04fba8779\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_folders\",\"commandPath\":[\"folders\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e307cab0ebafd179\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_projects\",\"commandPath\":[\"projects\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"15ea4a409d1549de\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_workspaces\",\"commandPath\":[\"workspaces\",\"unarchive\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"641de5b64ec75ab2\"},\n {\"mcpName\":\"mcp__ainecto__update_documents\",\"commandPath\":[\"documents\",\"update\"],\"group\":\"document\",\"description\":\"Update documents. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.update)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; testcase: {defaultEnvironment (max 50 chars), defaultTestAccount (max 100 chars)}; task: no typePayload; board and default statuses are seeded automatically.\",\"type\":\"object\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"778908eec43aba81\"},\n {\"mcpName\":\"mcp__ainecto__update_folders\",\"commandPath\":[\"folders\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7bef3b4702df1f00\"},\n {\"mcpName\":\"mcp__ainecto__update_projects\",\"commandPath\":[\"projects\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"10cc0d84aeb2192b\"},\n {\"mcpName\":\"mcp__ainecto__update_workspaces\",\"commandPath\":[\"workspaces\",\"update\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"723e4f6d36ee9d02\"},\n {\"mcpName\":\"mcp__ainecto__upload_attachments\",\"commandPath\":[\"tools\",\"run\",\"upload-attachments\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Attachments to register\",\"items\":{\"properties\":{\"contentType\":{\"description\":\"MIME type\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent document UUID\",\"type\":\"string\"},\"filename\":{\"description\":\"Original file name\",\"type\":\"string\"},\"sizeBytes\":{\"description\":\"Size in bytes\",\"type\":\"integer\"},\"storageKey\":{\"description\":\"Storage key returned by request_upload_token purpose=attachment.upload\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"filename\",\"storageKey\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"0622e590de3404dd\"},\n] satisfies GeneratedToolDefinition[];\n","import { generatedTools as prodTools } from \"./generated.prod\";\nimport { generatedTools as devTools } from \"./generated.dev\";\nimport type { AinectoEnv } from \"../config/endpoints\";\n\nexport function getGeneratedTools(env: AinectoEnv) {\n return env === \"dev\" ? devTools : prodTools;\n}\n","import { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { McpRpcClient, type JsonRpcRequest } from \"./rpcClient\";\n\nexport interface StdioBridgeOptions {\n input: Readable;\n output: Writable;\n errorOutput: Writable;\n client: McpRpcClient;\n}\n\nexport async function runStdioBridge(options: StdioBridgeOptions): Promise<void> {\n const lines = createInterface({ input: options.input, crlfDelay: Infinity });\n\n for await (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n try {\n const request = parseJsonRpcRequest(line);\n const response = await options.client.sendRaw(request);\n if (response && request.id !== undefined) {\n options.output.write(`${JSON.stringify(response)}\\n`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n options.output.write(`${JSON.stringify({\n jsonrpc: \"2.0\",\n id: null,\n error: { code: -32603, message },\n })}\\n`);\n }\n }\n}\n\nfunction parseJsonRpcRequest(line: string): JsonRpcRequest {\n const parsed = JSON.parse(line) as unknown;\n if (!isRecord(parsed) || parsed.jsonrpc !== \"2.0\" || typeof parsed.method !== \"string\") {\n throw new Error(\"Invalid JSON-RPC request.\");\n }\n return {\n jsonrpc: \"2.0\",\n id: typeof parsed.id === \"string\" || typeof parsed.id === \"number\" || parsed.id === null ? parsed.id : undefined,\n method: parsed.method,\n params: parsed.params,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { FileTokenStore } from \"../../core/auth/tokenStore\";\nimport { OAuthClient } from \"../../core/auth/oauth\";\nimport { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport { runStdioBridge } from \"../../core/mcp/stdioBridge\";\nimport type { Readable, Writable } from \"node:stream\";\n\nexport interface ConnectorOptions {\n endpoint: string;\n input: Readable;\n output: Writable;\n errorOutput: Writable;\n}\n\nexport async function runConnector(options: ConnectorOptions): Promise<void> {\n const tokenStore = new FileTokenStore();\n const auth = new OAuthClient({ endpoint: options.endpoint, tokenStore });\n const client = new McpRpcClient({ endpoint: options.endpoint, tokenProvider: auth });\n await runStdioBridge({\n input: options.input,\n output: options.output,\n errorOutput: options.errorOutput,\n client,\n });\n}\n","import type { ToolPresentationEnrichment } from \"./types\";\n\nexport const enrichments = [\n {\n mcpName: \"mcp__ainecto__list_projects\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"projectKey\", \"workspaceUuid\", \"updatedAt\"],\n displayName: \"List projects\",\n examples: [\"ainecto projects list --env dev\"],\n },\n {\n mcpName: \"mcp__ainecto__list_workspaces\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"updatedAt\"],\n displayName: \"List workspaces\",\n },\n {\n mcpName: \"mcp__ainecto__list_folders\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"projectUuid\", \"parentFolderUuid\", \"updatedAt\"],\n displayName: \"List folders\",\n },\n {\n mcpName: \"mcp__ainecto__list_documents\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"type\", \"projectUuid\", \"folderUuid\", \"updatedAt\"],\n displayName: \"List documents\",\n },\n {\n mcpName: \"mcp__ainecto__search_documents\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"type\", \"projectUuid\", \"updatedAt\"],\n displayName: \"Search documents\",\n },\n {\n mcpName: \"mcp__ainecto__list_attachments\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"filename\", \"contentType\", \"sizeBytes\", \"documentUuid\"],\n displayName: \"List attachments\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_tables\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"schema_name\", \"display_order\"],\n displayName: \"List ERD tables\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_refs\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"from_table_uuid\", \"to_table_uuid\", \"relationship\"],\n displayName: \"List ERD refs\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_enums\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"display_order\"],\n displayName: \"List ERD enums\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_table_groups\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"display_order\"],\n displayName: \"List ERD table groups\",\n },\n {\n mcpName: \"mcp__ainecto__task_list_tasks\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"statusUuid\", \"assigneeId\", \"updatedAt\"],\n displayName: \"List tasks\",\n },\n {\n mcpName: \"mcp__ainecto__task_list_statuses\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"displayOrder\"],\n displayName: \"List task statuses\",\n },\n {\n mcpName: \"mcp__ainecto__enable_shares\",\n aliases: [\"shares enable\"],\n displayName: \"Enable shares\",\n },\n {\n mcpName: \"mcp__ainecto__disable_shares\",\n aliases: [\"shares disable\"],\n displayName: \"Disable shares\",\n },\n] satisfies ToolPresentationEnrichment[];\n","export interface TableOptions {\n columns?: string[];\n}\n\nexport function renderTable(data: unknown, options: TableOptions = {}): string | undefined {\n const rows = extractRows(data);\n if (!rows.length || !rows.every(isRecord)) {\n return undefined;\n }\n\n const columns = options.columns?.length ? options.columns : inferColumns(rows);\n if (!columns.length) {\n return undefined;\n }\n\n const widths = columns.map((column) => Math.max(column.length, ...rows.map((row) => formatCell(row[column]).length)));\n const header = columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(\" \");\n const divider = widths.map((width) => \"-\".repeat(width)).join(\" \");\n const body = rows.map((row) => columns.map((column, index) => formatCell(row[column]).padEnd(widths[index] ?? column.length)).join(\" \"));\n\n return [header, divider, ...body].join(\"\\n\");\n}\n\nfunction extractRows(data: unknown): unknown[] {\n if (Array.isArray(data)) {\n return data;\n }\n if (isRecord(data)) {\n for (const key of [\"items\", \"projects\", \"workspaces\", \"folders\", \"documents\", \"tasks\", \"attachments\", \"results\", \"data\"]) {\n const value = data[key];\n if (Array.isArray(value)) {\n return value;\n }\n }\n }\n return [];\n}\n\nfunction inferColumns(rows: Record<string, unknown>[]): string[] {\n const preferred = [\"uuid\", \"id\", \"name\", \"title\", \"status\", \"type\", \"projectUuid\", \"documentUuid\", \"createdAt\", \"updatedAt\"];\n const keys = new Set(rows.flatMap((row) => Object.keys(row)));\n const columns = preferred.filter((key) => keys.has(key));\n if (columns.length > 0) {\n return columns.slice(0, 6);\n }\n return [...keys].slice(0, 6);\n}\n\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export class CliCommandError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n","import type { GeneratedToolDefinition, JsonSchema } from \"../../core/catalog/types\";\nimport { parsePayloadSource, type ParsedPayload } from \"../../core/input/payloadSource\";\nimport { CliCommandError } from \"./errors\";\n\nexport interface ParsedCommandArgs {\n args: Record<string, unknown>;\n yes: boolean;\n warnings: string[];\n}\n\nexport async function parseGeneratedCommandArgs(\n tool: GeneratedToolDefinition,\n argv: string[],\n stdin: NodeJS.ReadStream,\n): Promise<ParsedCommandArgs> {\n const parsed = parseArgv(argv);\n const payload = await parsePayload(tool, parsed, stdin);\n const args = payloadToArgs(payload.value);\n const properties = getSchemaProperties(tool.inputSchema);\n\n for (const [key, value] of Object.entries(parsed.flags)) {\n if (key === \"yes\") {\n continue;\n }\n const schemaKey = resolveSchemaKey(key, properties);\n if (!schemaKey) {\n throw new CliCommandError(\"UNKNOWN_FLAG\", `Unknown flag --${key} for ${tool.commandPath.join(\" \")}.`, {\n flag: key,\n mcpName: tool.mcpName,\n });\n }\n args[schemaKey] = coerceFlagValue(value, properties[schemaKey], schemaKey);\n }\n\n for (const required of tool.required) {\n if (args[required] === undefined || args[required] === \"\") {\n throw new CliCommandError(\"MISSING_REQUIRED_FLAG\", `Missing required argument \"${required}\" for ${tool.commandPath.join(\" \")}.`, {\n required,\n flag: `--${camelToKebab(required)}`,\n mcpName: tool.mcpName,\n });\n }\n }\n\n return {\n args,\n yes: parsed.yes,\n warnings: payload.warnings,\n };\n}\n\nfunction payloadToArgs(value: unknown): Record<string, unknown> {\n if (value === undefined || value === null) {\n return {};\n }\n if (!isRecord(value)) {\n throw new CliCommandError(\"INVALID_PAYLOAD\", \"Generated command payload must be a JSON object.\", { value });\n }\n return { ...value };\n}\n\ninterface ParsedArgv {\n flags: Record<string, string | boolean>;\n yes: boolean;\n file?: string;\n inline?: string;\n}\n\nfunction parseArgv(argv: string[]): ParsedArgv {\n const flags: Record<string, string | boolean> = {};\n const inline: string[] = [];\n let file: string | undefined;\n let yes = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--file\" || arg === \"-f\") {\n file = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--yes\" || arg === \"-y\") {\n yes = true;\n flags.yes = true;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const withoutPrefix = arg.slice(2);\n const eqIndex = withoutPrefix.indexOf(\"=\");\n if (eqIndex >= 0) {\n const key = withoutPrefix.slice(0, eqIndex);\n flags[key] = withoutPrefix.slice(eqIndex + 1);\n continue;\n }\n const next = argv[index + 1];\n if (!next || next.startsWith(\"--\")) {\n flags[withoutPrefix] = true;\n continue;\n }\n flags[withoutPrefix] = next;\n index += 1;\n continue;\n }\n inline.push(arg);\n }\n\n return {\n flags,\n yes,\n file,\n inline: inline.length > 0 ? inline.join(\" \") : undefined,\n };\n}\n\nasync function parsePayload(\n tool: GeneratedToolDefinition,\n parsed: ParsedArgv,\n stdin: NodeJS.ReadStream,\n): Promise<ParsedPayload> {\n if (tool.payloadMode === \"file-json\" || parsed.file || parsed.inline) {\n return parsePayloadSource({\n file: parsed.file,\n inline: parsed.inline,\n stdin,\n });\n }\n\n return { value: {}, source: \"empty\", warnings: [] };\n}\n\nfunction resolveSchemaKey(flag: string, properties: Record<string, JsonSchema>): string | undefined {\n if (properties[flag]) {\n return flag;\n }\n const normalized = flag.toLowerCase();\n return Object.keys(properties).find((key) => camelToKebab(key) === normalized);\n}\n\nfunction coerceFlagValue(value: string | boolean, schema: JsonSchema | undefined, key: string): unknown {\n const type = schema?.type;\n if (type === \"boolean\") {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", `Flag \"${key}\" must be a boolean.`, { key, value });\n }\n if (type === \"string\") {\n if (typeof value === \"boolean\") {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `--${camelToKebab(key)} requires a value.`, { key });\n }\n return value;\n }\n if (type === \"integer\") {\n if (typeof value === \"boolean\" || !/^-?\\d+$/.test(value)) {\n const code = typeof value === \"boolean\" ? \"FLAG_REQUIRES_VALUE\" : \"INVALID_FLAG_VALUE\";\n throw new CliCommandError(code, `Flag \"${key}\" must be an integer.`, { key, value });\n }\n return Number.parseInt(value, 10);\n }\n if (type === \"number\") {\n if (typeof value === \"boolean\" || Number.isNaN(Number(value))) {\n const code = typeof value === \"boolean\" ? \"FLAG_REQUIRES_VALUE\" : \"INVALID_FLAG_VALUE\";\n throw new CliCommandError(code, `Flag \"${key}\" must be a number.`, { key, value });\n }\n return Number(value);\n }\n throw new CliCommandError(\"UNSUPPORTED_FLAG_PAYLOAD\", `Flag \"${key}\" is not a scalar field; provide it through --file, stdin, or inline JSON.`, {\n key,\n type,\n });\n}\n\nfunction getSchemaProperties(schema: JsonSchema): Record<string, JsonSchema> {\n const properties = schema.properties;\n if (!isRecord(properties)) {\n return {};\n }\n const result: Record<string, JsonSchema> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (isRecord(value)) {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function camelToKebab(value: string): string {\n return value.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`).toLowerCase();\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `${flag} requires a value.`, { flag });\n }\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { createInterface } from \"node:readline\";\nimport type { GeneratedToolDefinition } from \"../../core/catalog/types\";\nimport { CliCommandError } from \"./errors\";\n\nexport interface ConfirmationIO {\n stdin: NodeJS.ReadStream;\n stderr: NodeJS.WriteStream;\n}\n\nexport async function confirmDestructiveCommand(options: {\n tool: GeneratedToolDefinition;\n yes: boolean;\n json: boolean;\n io: ConfirmationIO;\n}): Promise<void> {\n if (!options.tool.destructive) {\n return;\n }\n if (options.yes) {\n return;\n }\n if (options.json) {\n throw new CliCommandError(\"CONFIRMATION_REQUIRED\", `Destructive command ${options.tool.commandPath.join(\" \")} requires --yes in --json mode.`, {\n mcpName: options.tool.mcpName,\n });\n }\n\n const answer = await promptConfirmation(options.io, `Run destructive command ${options.tool.commandPath.join(\" \")}? Type \"yes\" to continue: `);\n if (answer.trim().toLowerCase() !== \"yes\") {\n throw new CliCommandError(\"CONFIRMATION_DECLINED\", \"Destructive command was not confirmed.\", {\n mcpName: options.tool.mcpName,\n });\n }\n}\n\nasync function promptConfirmation(io: ConfirmationIO, message: string): Promise<string> {\n io.stderr.write(message);\n const rl = createInterface({ input: io.stdin, terminal: false });\n try {\n for await (const line of rl) {\n return line;\n }\n return \"\";\n } finally {\n rl.close();\n }\n}\n","export const ATTACHMENTS_UPLOAD_COMMAND_PATH = [\"attachments\", \"upload\"] as const;\n\nexport const BESPOKE_COMMAND_PATHS = [\n ATTACHMENTS_UPLOAD_COMMAND_PATH,\n] as const;\n","import type { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport type { GeneratedToolDefinition, ToolPresentationEnrichment } from \"../../core/catalog/types\";\nimport { enrichments } from \"../../core/catalog/enrichments\";\nimport { getGeneratedTools } from \"../../core/catalog\";\nimport type { AinectoEnv } from \"../../core/config/endpoints\";\nimport { renderSuccess } from \"../../core/output/render\";\nimport { renderTable } from \"../../core/output/table\";\nimport { parseGeneratedCommandArgs } from \"./flagParser\";\nimport { confirmDestructiveCommand, type ConfirmationIO } from \"./destructiveConfirmation\";\nimport { BESPOKE_COMMAND_PATHS } from \"./bespokeCommands\";\n\nexport interface GeneratedCommandRoute {\n tool: GeneratedToolDefinition;\n matchedPath: string[];\n rest: string[];\n presentation?: ToolPresentationEnrichment;\n rawContractWarning?: string;\n}\n\nexport interface GeneratedCommandExecutionOptions {\n env: AinectoEnv;\n argv: string[];\n client: McpRpcClient;\n json: boolean;\n io: ConfirmationIO & { stdout: NodeJS.WriteStream };\n}\n\nexport function matchGeneratedCommand(env: AinectoEnv, argv: string[]): GeneratedCommandRoute | undefined {\n const commandTokens = argv.filter((arg) => !arg.startsWith(\"-\"));\n const tools = getGeneratedTools(env);\n const entries = buildRouteEntries(tools, enrichments);\n const match = entries\n .filter((entry) => isPrefix(entry.path, commandTokens))\n .sort((a, b) => b.path.length - a.path.length)[0];\n\n if (!match) {\n return undefined;\n }\n\n const restStart = findRestStart(argv, match.path);\n return {\n tool: match.tool,\n matchedPath: match.path,\n rest: argv.slice(restStart),\n presentation: match.presentation,\n rawContractWarning: match.tool.payloadMode === \"binary-upload\"\n ? \"This generated command uses the raw MCP argument contract only; local file upload semantics are not implemented here.\"\n : undefined,\n };\n}\n\nexport async function executeGeneratedCommand(options: GeneratedCommandExecutionOptions): Promise<number> {\n const route = matchGeneratedCommand(options.env, options.argv);\n if (!route) {\n return 2;\n }\n\n const parsed = await parseGeneratedCommandArgs(route.tool, route.rest, options.io.stdin);\n await confirmDestructiveCommand({\n tool: route.tool,\n yes: parsed.yes,\n json: options.json,\n io: options.io,\n });\n\n const result = await options.client.toolsCall(route.tool.mcpName, parsed.args);\n const warnings = [...parsed.warnings, ...(route.rawContractWarning ? [route.rawContractWarning] : [])];\n options.io.stdout.write(renderGeneratedResult(result, {\n json: options.json,\n warnings,\n presentation: route.presentation,\n }));\n return 0;\n}\n\nexport function assertNoCommandCollisions(env: AinectoEnv): void {\n const entries = buildRouteEntries(getGeneratedTools(env), enrichments);\n const seen = new Map<string, string>();\n for (const entry of entries) {\n const key = entry.path.join(\" \");\n const existing = seen.get(key);\n if (existing) {\n throw new Error(`Command collision for \"${key}\": ${existing} and ${entry.tool.mcpName}`);\n }\n seen.set(key, entry.tool.mcpName);\n }\n for (const commandPath of BESPOKE_COMMAND_PATHS) {\n const command = commandPath.join(\" \");\n const existing = seen.get(command);\n if (existing) {\n throw new Error(`Bespoke command \"${command}\" collides with ${existing}.`);\n }\n }\n}\n\nfunction renderGeneratedResult(\n result: unknown,\n options: {\n json: boolean;\n warnings: string[];\n presentation?: ToolPresentationEnrichment;\n },\n): string {\n if (!options.json && options.presentation?.outputHint === \"table\") {\n const table = renderTable(result, { columns: options.presentation.tableColumns });\n if (table) {\n const warnings = options.warnings.length ? `${options.warnings.map((warning) => `Warning: ${warning}`).join(\"\\n\")}\\n` : \"\";\n return `${warnings}${table}\\n`;\n }\n }\n return renderSuccess(result, { json: options.json, warnings: options.warnings });\n}\n\nfunction buildRouteEntries(\n tools: readonly GeneratedToolDefinition[],\n presentations: readonly ToolPresentationEnrichment[],\n): Array<{ path: string[]; tool: GeneratedToolDefinition; presentation?: ToolPresentationEnrichment }> {\n const byName = new Map(presentations.map((presentation) => [presentation.mcpName, presentation]));\n const entries: Array<{ path: string[]; tool: GeneratedToolDefinition; presentation?: ToolPresentationEnrichment }> = [];\n for (const tool of tools) {\n const presentation = byName.get(tool.mcpName);\n entries.push({ path: tool.commandPath, tool, presentation });\n for (const alias of presentation?.aliases ?? []) {\n entries.push({ path: alias.split(/\\s+/).filter(Boolean), tool, presentation });\n }\n }\n return entries;\n}\n\nfunction isPrefix(prefix: string[], values: string[]): boolean {\n return prefix.every((value, index) => values[index] === value);\n}\n\nfunction findRestStart(argv: string[], commandPath: string[]): number {\n let matched = 0;\n for (let index = 0; index < argv.length; index += 1) {\n if (!argv[index]?.startsWith(\"-\")) {\n if (argv[index] !== commandPath[matched]) {\n return index;\n }\n matched += 1;\n if (matched === commandPath.length) {\n return index + 1;\n }\n }\n }\n return argv.length;\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { McpRpcClient } from \"../mcp/rpcClient\";\n\nexport interface AttachmentUploadFileInput {\n path: string;\n filename?: string;\n contentType?: string;\n}\n\nexport interface UploadAttachmentsInput {\n documentUuid: string;\n files: AttachmentUploadFileInput[];\n maxBytes?: number;\n ttlSeconds?: number;\n requestToolName?: string;\n commitToolName?: string;\n fetchImpl?: typeof fetch;\n onProgress?: (progress: AttachmentUploadProgress) => void;\n}\n\nexport type AttachmentUploadStage = \"token\" | \"put\" | \"register\" | \"done\";\n\nexport interface AttachmentUploadProgress {\n stage: AttachmentUploadStage;\n path: string;\n filename: string;\n index: number;\n total: number;\n}\n\nexport interface RegisteredAttachmentFile {\n path: string;\n documentUuid: string;\n filename: string;\n storageKey: string;\n contentType: string;\n sizeBytes: number;\n registerResult: unknown;\n}\n\nexport interface UploadAttachmentsResult {\n count: number;\n uploaded: RegisteredAttachmentFile[];\n}\n\nexport class AttachmentUploadError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n\nexport async function uploadAttachments(\n client: McpRpcClient,\n input: UploadAttachmentsInput,\n): Promise<UploadAttachmentsResult> {\n if (!input.documentUuid.trim()) {\n throw new AttachmentUploadError(\"MISSING_REQUIRED_FLAG\", \"Missing required argument \\\"documentUuid\\\".\", {\n flag: \"--document-uuid\",\n });\n }\n if (input.files.length === 0) {\n throw new AttachmentUploadError(\"MISSING_FILE\", \"Expected at least one file to upload.\");\n }\n\n const fetchImpl = input.fetchImpl ?? fetch;\n const uploaded: RegisteredAttachmentFile[] = [];\n\n for (let index = 0; index < input.files.length; index += 1) {\n const file = input.files[index];\n if (!file) {\n continue;\n }\n uploaded.push(await uploadSingleAttachment(client, file, {\n documentUuid: input.documentUuid,\n maxBytes: input.maxBytes,\n ttlSeconds: input.ttlSeconds,\n requestToolName: input.requestToolName ?? \"mcp__ainecto__request_upload_token\",\n commitToolName: input.commitToolName ?? \"mcp__ainecto__upload_attachments\",\n fetchImpl,\n onProgress: input.onProgress,\n index,\n total: input.files.length,\n }));\n }\n\n return { count: uploaded.length, uploaded };\n}\n\ninterface SingleUploadContext {\n documentUuid: string;\n maxBytes?: number;\n ttlSeconds?: number;\n requestToolName: string;\n commitToolName: string;\n fetchImpl: typeof fetch;\n onProgress?: (progress: AttachmentUploadProgress) => void;\n index: number;\n total: number;\n}\n\ninterface UploadTokenResponse {\n token: string;\n uploadUrl: string;\n storageKey: string;\n}\n\ninterface UploadPutResponse {\n storageKey: string;\n sizeBytes: number;\n contentType: string;\n}\n\nasync function uploadSingleAttachment(\n client: McpRpcClient,\n file: AttachmentUploadFileInput,\n context: SingleUploadContext,\n): Promise<RegisteredAttachmentFile> {\n const metadata = await readFileMetadata(file);\n emitProgress(context, \"token\", file.path, metadata.filename);\n const uploadToken = await requestUploadToken(client, metadata, context);\n\n emitProgress(context, \"put\", file.path, metadata.filename);\n const putResult = await putAttachmentBytes(uploadToken, metadata, context.fetchImpl);\n validatePutResult(uploadToken, metadata, putResult);\n\n const item = {\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n storageKey: uploadToken.storageKey,\n contentType: putResult.contentType,\n sizeBytes: putResult.sizeBytes,\n };\n\n emitProgress(context, \"register\", file.path, metadata.filename);\n const registerResult = await client.toolsCall(context.commitToolName, { items: [item] });\n\n emitProgress(context, \"done\", file.path, metadata.filename);\n return {\n path: file.path,\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n storageKey: uploadToken.storageKey,\n contentType: putResult.contentType,\n sizeBytes: putResult.sizeBytes,\n registerResult,\n };\n}\n\nasync function readFileMetadata(file: AttachmentUploadFileInput): Promise<{\n bytes: Buffer;\n filename: string;\n contentType: string;\n sizeBytes: number;\n}> {\n const stats = await stat(file.path);\n if (!stats.isFile()) {\n throw new AttachmentUploadError(\"INVALID_FILE\", `Attachment path is not a file: ${file.path}`, { path: file.path });\n }\n const bytes = await readFile(file.path);\n return {\n bytes,\n filename: file.filename ?? basename(file.path),\n contentType: file.contentType ?? detectContentType(file.path),\n sizeBytes: bytes.byteLength,\n };\n}\n\nasync function requestUploadToken(\n client: McpRpcClient,\n metadata: { filename: string; contentType: string; sizeBytes: number },\n context: SingleUploadContext,\n): Promise<UploadTokenResponse> {\n const scopeJson = JSON.stringify({\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n contentType: metadata.contentType,\n sizeBytes: metadata.sizeBytes,\n });\n const requestArgs: Record<string, unknown> = {\n purpose: \"attachment.upload\",\n scopeJson,\n };\n if (context.maxBytes !== undefined) {\n requestArgs.maxBytes = context.maxBytes;\n }\n if (context.ttlSeconds !== undefined) {\n requestArgs.ttlSeconds = context.ttlSeconds;\n }\n\n const response = unwrapMcpToolPayload(await client.toolsCall(context.requestToolName, requestArgs));\n if (!isRecord(response)) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response was not an object.\");\n }\n const token = response.token;\n const uploadUrl = response.uploadUrl;\n const storageKey = response.storageKey;\n if (typeof token !== \"string\" || token.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include token.\");\n }\n if (typeof uploadUrl !== \"string\" || uploadUrl.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include uploadUrl.\");\n }\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include storageKey.\");\n }\n return { token, uploadUrl, storageKey };\n}\n\nasync function putAttachmentBytes(\n token: UploadTokenResponse,\n metadata: { bytes: Buffer; contentType: string },\n fetchImpl: typeof fetch,\n): Promise<UploadPutResponse> {\n const maxAttempts = 3;\n let lastRetryableError: unknown;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const response = await fetchImpl(token.uploadUrl, {\n method: \"PUT\",\n headers: {\n authorization: `Bearer ${token.token}`,\n \"content-type\": metadata.contentType,\n },\n body: new Uint8Array(metadata.bytes),\n });\n if (shouldRetryResponse(response.status) && attempt < maxAttempts) {\n continue;\n }\n if (!response.ok) {\n throw uploadHttpError(response.status);\n }\n return parsePutResponse(await response.text());\n } catch (error) {\n if (error instanceof AttachmentUploadError) {\n throw error;\n }\n lastRetryableError = error;\n if (attempt === maxAttempts) {\n break;\n }\n }\n }\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_FAILED\", \"Attachment upload failed.\", {\n cause: lastRetryableError instanceof Error ? lastRetryableError.message : String(lastRetryableError),\n });\n}\n\nfunction uploadHttpError(status: number): AttachmentUploadError {\n if (status === 409) {\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_CONFLICT\", \"Attachment upload failed with HTTP 409 Conflict.\", { status });\n }\n if (status === 401 || status === 403) {\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_TOKEN_EXPIRED\", `Attachment upload token was rejected with HTTP ${status}.`, { status });\n }\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_HTTP_ERROR\", `Attachment upload failed with HTTP ${status}.`, { status });\n}\n\nfunction shouldRetryResponse(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction parsePutResponse(text: string): UploadPutResponse {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response was not valid JSON.\");\n }\n if (!isRecord(parsed)) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response was not an object.\");\n }\n if (typeof parsed.storageKey !== \"string\") {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include storageKey.\");\n }\n if (typeof parsed.sizeBytes !== \"number\" || !Number.isFinite(parsed.sizeBytes)) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include numeric sizeBytes.\");\n }\n if (typeof parsed.contentType !== \"string\") {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include contentType.\");\n }\n return {\n storageKey: parsed.storageKey,\n sizeBytes: parsed.sizeBytes,\n contentType: parsed.contentType,\n };\n}\n\nfunction validatePutResult(\n token: UploadTokenResponse,\n metadata: { sizeBytes: number },\n putResult: UploadPutResponse,\n): void {\n if (putResult.storageKey !== token.storageKey) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_STORAGE_KEY_MISMATCH\", \"Attachment PUT response storageKey did not match the upload token.\", {\n expected: token.storageKey,\n actual: putResult.storageKey,\n });\n }\n if (putResult.sizeBytes !== metadata.sizeBytes) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_SIZE_MISMATCH\", \"Attachment PUT response sizeBytes did not match the local file size.\", {\n expected: metadata.sizeBytes,\n actual: putResult.sizeBytes,\n });\n }\n}\n\nfunction unwrapMcpToolPayload(value: unknown): unknown {\n if (!isRecord(value) || !Array.isArray(value.content)) {\n return value;\n }\n const text = value.content\n .map((item) => isRecord(item) && typeof item.text === \"string\" ? item.text : \"\")\n .find((itemText) => itemText.trim().startsWith(\"{\"));\n if (!text) {\n return value;\n }\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return value;\n }\n}\n\nfunction emitProgress(\n context: SingleUploadContext,\n stage: AttachmentUploadStage,\n path: string,\n filename: string,\n): void {\n context.onProgress?.({\n stage,\n path,\n filename,\n index: context.index,\n total: context.total,\n });\n}\n\nfunction detectContentType(path: string): string {\n const extension = extname(path).toLowerCase();\n return MIME_BY_EXTENSION[extension] ?? \"application/octet-stream\";\n}\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".avif\": \"image/avif\",\n \".csv\": \"text/csv\",\n \".gif\": \"image/gif\",\n \".htm\": \"text/html\",\n \".html\": \"text/html\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".json\": \"application/json\",\n \".md\": \"text/markdown\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".txt\": \"text/plain\",\n \".webp\": \"image/webp\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".zip\": \"application/zip\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport {\n uploadAttachments,\n type AttachmentUploadProgress,\n type UploadAttachmentsResult,\n} from \"../../core/upload/attachmentUpload\";\nimport { renderSuccess } from \"../../core/output/render\";\nimport { CliCommandError } from \"./errors\";\nimport { ATTACHMENTS_UPLOAD_COMMAND_PATH } from \"./bespokeCommands\";\n\nexport interface AttachmentsUploadCommandOptions {\n argv: string[];\n client: McpRpcClient;\n json: boolean;\n io: {\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n };\n}\n\nexport function isAttachmentsUploadCommand(domain: string | undefined, action: string | undefined): boolean {\n return domain === ATTACHMENTS_UPLOAD_COMMAND_PATH[0] && action === ATTACHMENTS_UPLOAD_COMMAND_PATH[1];\n}\n\nexport async function executeAttachmentsUploadCommand(options: AttachmentsUploadCommandOptions): Promise<number> {\n const parsed = parseAttachmentsUploadArgs(options.argv);\n const result = await uploadAttachments(options.client, {\n documentUuid: parsed.documentUuid,\n files: parsed.files.map((path) => ({\n path,\n filename: parsed.filename,\n contentType: parsed.contentType,\n })),\n maxBytes: parsed.maxBytes,\n ttlSeconds: parsed.ttlSeconds,\n onProgress: options.json ? undefined : (progress) => {\n renderProgress(progress, options.io.stderr);\n },\n });\n\n options.io.stdout.write(renderAttachmentUploadResult(result, options.json));\n return 0;\n}\n\ninterface ParsedAttachmentsUploadArgs {\n documentUuid: string;\n files: string[];\n filename?: string;\n contentType?: string;\n maxBytes?: number;\n ttlSeconds?: number;\n}\n\nfunction parseAttachmentsUploadArgs(argv: string[]): ParsedAttachmentsUploadArgs {\n const files: string[] = [];\n let documentUuid: string | undefined;\n let filename: string | undefined;\n let contentType: string | undefined;\n let maxBytes: number | undefined;\n let ttlSeconds: number | undefined;\n let readFilesOnly = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (readFilesOnly) {\n files.push(arg);\n continue;\n }\n if (arg === \"--\") {\n readFilesOnly = true;\n continue;\n }\n if (arg === \"--document-uuid\" || arg === \"--documentUuid\") {\n documentUuid = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--filename\" || arg === \"--name\") {\n filename = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--content-type\" || arg === \"--contentType\") {\n contentType = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--max-bytes\" || arg === \"--maxBytes\") {\n maxBytes = parsePositiveInteger(arg, requireValue(arg, argv[++index]));\n continue;\n }\n if (arg === \"--ttl-seconds\" || arg === \"--ttlSeconds\") {\n ttlSeconds = parsePositiveInteger(arg, requireValue(arg, argv[++index]));\n continue;\n }\n if (arg.startsWith(\"--\")) {\n throw new CliCommandError(\"UNKNOWN_FLAG\", `Unknown flag ${arg} for attachments upload.`, { flag: arg });\n }\n files.push(arg);\n }\n\n if (!documentUuid) {\n throw new CliCommandError(\"MISSING_REQUIRED_FLAG\", \"Missing required argument \\\"documentUuid\\\" for attachments upload.\", {\n flag: \"--document-uuid\",\n });\n }\n if (files.length === 0) {\n throw new CliCommandError(\"MISSING_FILE\", \"Expected at least one file to upload.\");\n }\n if (filename && files.length !== 1) {\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", \"--filename/--name can only be used with exactly one file.\", {\n flag: \"--filename\",\n files: files.length,\n });\n }\n\n return {\n documentUuid,\n files,\n filename,\n contentType,\n maxBytes,\n ttlSeconds,\n };\n}\n\nfunction parsePositiveInteger(flag: string, value: string): number {\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", `${flag} must be a positive integer.`, { flag, value });\n }\n return Number.parseInt(value, 10);\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `${flag} requires a value.`, { flag });\n }\n return value;\n}\n\nfunction renderProgress(progress: AttachmentUploadProgress, stderr: NodeJS.WriteStream): void {\n if (progress.stage === \"token\") {\n stderr.write(`Uploading ${progress.filename} (${progress.index + 1}/${progress.total})...\\n`);\n }\n}\n\nfunction renderAttachmentUploadResult(result: UploadAttachmentsResult, json: boolean): string {\n if (json) {\n return renderSuccess(result, { json });\n }\n const lines = [\n `Uploaded ${result.count} attachment${result.count === 1 ? \"\" : \"s\"}.`,\n ...result.uploaded.map((file) => `- ${file.filename} (${file.sizeBytes} bytes)`),\n ];\n return renderSuccess(lines.join(\"\\n\"), { json: false });\n}\n","import { FileTokenStore } from \"../../core/auth/tokenStore\";\nimport { OAuthClient } from \"../../core/auth/oauth\";\nimport { resolveEndpoint, assertEnv, type AinectoEnv } from \"../../core/config/endpoints\";\nimport { parsePayloadSource } from \"../../core/input/payloadSource\";\nimport { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport { renderError, renderSuccess } from \"../../core/output/render\";\nimport { getGeneratedTools } from \"../../core/catalog\";\nimport { runConnector } from \"../mcp/connector\";\nimport { executeGeneratedCommand } from \"./generatedCommandRouter\";\nimport { executeAttachmentsUploadCommand, isAttachmentsUploadCommand } from \"./attachmentsUploadCommand\";\n\nexport interface CliIO {\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n stdin: NodeJS.ReadStream;\n}\n\nexport async function runAinectoCli(argv: string[], io: CliIO): Promise<number> {\n let parsed: GlobalArgs = { json: argv.includes(\"--json\"), help: false, positionals: [] };\n try {\n parsed = parseGlobalArgs(argv);\n if (parsed.help || parsed.positionals.length === 0) {\n io.stdout.write(helpText());\n return 0;\n }\n\n const resolved = resolveEndpoint({ env: parsed.env, endpoint: parsed.endpoint });\n const tokenStore = new FileTokenStore();\n const auth = new OAuthClient({ endpoint: resolved.endpoint, tokenStore });\n const client = new McpRpcClient({ endpoint: resolved.endpoint, tokenProvider: auth });\n const [domain, action, ...rest] = parsed.positionals;\n\n if (domain === \"mcp\") {\n await runConnector({\n endpoint: resolved.endpoint,\n input: io.stdin,\n output: io.stdout,\n errorOutput: io.stderr,\n });\n return 0;\n }\n\n if (domain === \"auth\") {\n return handleAuth(action, auth, resolved.endpoint, parsed.json, io);\n }\n\n if (isAttachmentsUploadCommand(domain, action)) {\n return await executeAttachmentsUploadCommand({\n argv: rest,\n client,\n json: parsed.json,\n io,\n });\n }\n\n const generatedResult = await executeGeneratedCommand({\n env: parsed.env ?? \"prod\",\n argv: parsed.positionals,\n client,\n json: parsed.json,\n io,\n });\n if (generatedResult !== 2) {\n return generatedResult;\n }\n\n if (domain === \"tools\") {\n return handleTools(action, rest, parsed, client, io);\n }\n\n throw new Error(`Unknown command \"${domain}\".`);\n } catch (error) {\n io.stderr.write(renderError(error, { json: parsed.json }));\n return 1;\n }\n}\n\nasync function handleAuth(\n action: string | undefined,\n auth: OAuthClient,\n endpoint: string,\n json: boolean,\n io: CliIO,\n): Promise<number> {\n if (action === \"login\") {\n await auth.login();\n io.stdout.write(renderSuccess({ endpoint, authenticated: true }, { json }));\n return 0;\n }\n if (action === \"status\") {\n const token = await auth.getAccessToken();\n io.stdout.write(renderSuccess({ endpoint, authenticated: Boolean(token) }, { json }));\n return 0;\n }\n if (action === \"logout\") {\n await auth.logout();\n io.stdout.write(renderSuccess({ endpoint, authenticated: false }, { json }));\n return 0;\n }\n throw new Error(\"Expected auth login, auth status, or auth logout.\");\n}\n\nasync function handleTools(\n action: string | undefined,\n rest: string[],\n parsed: GlobalArgs,\n client: McpRpcClient,\n io: CliIO,\n): Promise<number> {\n if (action === \"list\") {\n const tools = await client.toolsList();\n io.stdout.write(renderSuccess(tools, { json: parsed.json }));\n return 0;\n }\n\n if (action === \"call\") {\n const toolName = rest[0];\n if (!toolName) {\n throw new Error(\"Expected MCP tool name after tools call.\");\n }\n const toolArgs = rest.slice(1);\n const payloadOptions = parsePayloadArgs(toolArgs);\n const payload = await parsePayloadSource({\n file: payloadOptions.file,\n inline: payloadOptions.inline,\n stdin: io.stdin,\n });\n const result = await client.toolsCall(toolName, payload.value);\n io.stdout.write(renderSuccess(result, { json: parsed.json, warnings: payload.warnings }));\n return 0;\n }\n\n if (action === \"catalog\") {\n const catalogEnv = parsed.env ?? \"prod\";\n io.stdout.write(renderSuccess(getGeneratedTools(parsed.env ?? \"prod\"), {\n json: parsed.json,\n warnings: [catalogEnv === \"dev\"\n ? \"Local dev catalog is a checked-in live sync snapshot; rerun sync:tools --env dev to refresh it.\"\n : \"Local prod catalog is seed fixture only until authenticated prod live sync updates generated catalogs.\"],\n }));\n return 0;\n }\n\n throw new Error(\"Expected tools list, tools call <mcpName>, or tools catalog.\");\n}\n\ninterface GlobalArgs {\n env?: AinectoEnv;\n endpoint?: string;\n json: boolean;\n help: boolean;\n positionals: string[];\n}\n\nfunction parseGlobalArgs(argv: string[]): GlobalArgs {\n const result: GlobalArgs = { json: false, help: false, positionals: [] };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--env\") {\n result.env = assertEnv(requireValue(arg, argv[++index]));\n } else if (arg === \"--endpoint\") {\n result.endpoint = requireValue(arg, argv[++index]);\n } else if (arg === \"--json\") {\n result.json = true;\n } else if (arg === \"--help\" || arg === \"-h\") {\n result.help = true;\n } else {\n result.positionals.push(arg);\n }\n }\n return result;\n}\n\nfunction parsePayloadArgs(argv: string[]): { file?: string; inline?: string } {\n const result: { file?: string; inline?: string } = {};\n const inline: string[] = [];\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--file\" || arg === \"-f\") {\n result.file = requireValue(arg, argv[++index]);\n } else {\n inline.push(arg);\n }\n }\n if (inline.length > 0) {\n result.inline = inline.join(\" \");\n }\n return result;\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n return value;\n}\n\nfunction helpText(): string {\n return [\n \"Ainecto CLI\",\n \"\",\n \"Usage:\",\n \" ainecto auth login|status|logout [--env prod|dev] [--endpoint URL] [--json]\",\n \" ainecto tools list [--env prod|dev] [--endpoint URL] [--json]\",\n \" ainecto tools call <mcpName> [-f payload.json|@-] [inline-json] [--json]\",\n \" ainecto attachments upload --document-uuid <uuid> <file...> [--json]\",\n \" ainecto <generated-command> [flags] [-f payload.json] [--yes] [--json]\",\n \" ainecto mcp [--env prod|dev] [--endpoint URL]\",\n \"\",\n ].join(\"\\n\");\n}\n","#!/usr/bin/env node\nimport { runAinectoCli } from \"../adapters/cli/ainectoCli\";\n\nconst exitCode = await runAinectoCli(process.argv.slice(2), {\n stdin: process.stdin,\n stdout: process.stdout,\n stderr: process.stderr,\n});\n\nprocess.exitCode = exitCode;\n"],"mappings":"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","names":["createHash","createHash","readFile","isRecord","generatedTools","generatedTools","isRecord","isRecord","isRecord","createInterface","createInterface","readFile","stat","isRecord","requireValue","requireValue"]}
1
+ {"version":3,"sources":["../../src/core/auth/tokenStore.ts","../../src/core/auth/oauth.ts","../../src/core/config/endpoints.ts","../../src/core/auth/clientRegistration.ts","../../src/core/harness/role.ts","../../src/core/input/payloadSource.ts","../../src/core/mcp/rpcClient.ts","../../src/core/output/render.ts","../../src/core/catalog/generated.prod.ts","../../src/core/catalog/generated.dev.ts","../../src/core/catalog/index.ts","../../src/core/mcp/stdioBridge.ts","../../src/adapters/mcp/connector.ts","../../src/core/catalog/enrichments.ts","../../src/core/output/table.ts","../../src/adapters/cli/errors.ts","../../src/adapters/cli/flagParser.ts","../../src/adapters/cli/destructiveConfirmation.ts","../../src/adapters/cli/bespokeCommands.ts","../../src/adapters/cli/generatedCommandRouter.ts","../../src/core/upload/attachmentUpload.ts","../../src/adapters/cli/attachmentsUploadCommand.ts","../../src/adapters/cli/initCommand.ts","../../src/core/harness/agentTargets.ts","../../src/core/harness/harnessDoc.ts","../../src/core/harness/initRecord.ts","../../src/core/harness/initPlan.ts","../../src/core/harness/documentFetch.ts","../../src/core/version.ts","../../src/adapters/cli/ainectoCli.ts","../../src/bin/ainecto.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rename, rm, stat, writeFile, chmod } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nexport interface StoredTokenSet {\n endpoint: string;\n accessToken: string;\n refreshToken?: string;\n tokenType?: string;\n expiresAt?: number;\n scope?: string;\n clientId?: string;\n clientSecret?: string;\n authorizationServer?: string;\n updatedAt: string;\n}\n\nexport interface TokenStore {\n load(endpoint: string, role?: string): Promise<StoredTokenSet | undefined>;\n save(endpoint: string, token: StoredTokenSet, role?: string): Promise<void>;\n delete(endpoint: string, role?: string): Promise<void>;\n}\n\ntype TokenFile = Record<string, StoredTokenSet>;\n\nexport class FileTokenStore implements TokenStore {\n readonly filePath: string;\n\n constructor(rootDir = join(homedir(), \".ainecto\")) {\n this.filePath = join(rootDir, \"tokens.json\");\n }\n\n async load(endpoint: string, role?: string): Promise<StoredTokenSet | undefined> {\n const file = await this.readFile();\n return file[tokenKey(endpoint, role)];\n }\n\n async save(endpoint: string, token: StoredTokenSet, role?: string): Promise<void> {\n const file = await this.readFile();\n file[tokenKey(endpoint, role)] = { ...token, endpoint, updatedAt: new Date().toISOString() };\n await this.writeFile(file);\n }\n\n async delete(endpoint: string, role?: string): Promise<void> {\n const file = await this.readFile();\n delete file[tokenKey(endpoint, role)];\n await this.writeFile(file);\n }\n\n private async readFile(): Promise<TokenFile> {\n try {\n await this.hardenExistingPermissions();\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Token file must contain an object.\");\n }\n return parsed as TokenFile;\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return {};\n }\n throw error;\n }\n }\n\n private async writeFile(file: TokenFile): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true, mode: 0o700 });\n await chmod(dirname(this.filePath), 0o700);\n const tmpPath = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;\n await writeFile(tmpPath, `${JSON.stringify(file, null, 2)}\\n`, { mode: 0o600 });\n await chmod(tmpPath, 0o600);\n await rename(tmpPath, this.filePath);\n await chmod(this.filePath, 0o600);\n }\n\n private async hardenExistingPermissions(): Promise<void> {\n const dirPath = dirname(this.filePath);\n await chmodIfPermissive(dirPath, 0o700);\n await chmodIfPermissive(this.filePath, 0o600);\n }\n}\n\n/**\n * ★역할마다 토큰을 «따로» 둔다.\n *\n * <p>하나로 두면 design 세션으로 로그인하는 순간 development 세션의 토큰이 덮여, 돌고 있던\n * 세션의 역할이 몰래 바뀐다. 역할이 토큰에 박히는 설계에서 토큰 저장소가 한 칸이면 그 칸이\n * 곧 역할 전환 스위치가 된다.\n *\n * <p>역할이 없으면 종전 키 그대로다 — 이미 로그인해 둔 사람이 다시 로그인하지 않아도 된다.\n */\nexport function tokenKey(endpoint: string, role?: string): string {\n const material = role && role.trim() ? `${endpoint}#role=${role.trim().toLowerCase()}` : endpoint;\n return createHash(\"sha256\").update(material).digest(\"hex\");\n}\n\nexport async function tokenStorePermissions(path: string): Promise<{ mode: number } | undefined> {\n try {\n const result = await stat(path);\n return { mode: result.mode & 0o777 };\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function tokenStoreDirectoryPermissions(path: string): Promise<{ mode: number } | undefined> {\n return tokenStorePermissions(dirname(path));\n}\n\nexport async function removeTokenStoreForTests(path: string): Promise<void> {\n await rm(dirname(path), { recursive: true, force: true });\n}\n\nfunction isNodeError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === code;\n}\n\nasync function chmodIfPermissive(path: string, mode: number): Promise<void> {\n try {\n const result = await stat(path);\n if ((result.mode & 0o077) !== 0) {\n await chmod(path, mode);\n }\n } catch (error) {\n if (isNodeError(error, \"ENOENT\")) {\n return;\n }\n throw error;\n }\n}\n","import { createHash, randomBytes } from \"node:crypto\";\nimport { createServer } from \"node:http\";\nimport { spawn } from \"node:child_process\";\nimport { URLSearchParams } from \"node:url\";\nimport type { StoredTokenSet, TokenStore } from \"./tokenStore\";\nimport { registerPublicClient, type ClientRegistrationResult } from \"./clientRegistration\";\nimport { assertTrustedEndpointUrl, isDefaultEndpoint } from \"../config/endpoints\";\nimport { ROLE_SCOPE_PREFIX, type HarnessRole } from \"../harness/role\";\n\nexport interface OAuthClientOptions {\n /** 이 클라이언트가 쓰는 세션 역할. 토큰이 이 역할로 발급되고 저장된다. */\n role?: HarnessRole;\n endpoint: string;\n tokenStore: TokenStore;\n fetchImpl?: typeof fetch;\n envVars?: NodeJS.ProcessEnv;\n openBrowser?: (url: string) => Promise<void>;\n}\n\nexport interface OAuthMetadata {\n authorizationEndpoint: string;\n tokenEndpoint: string;\n registrationEndpoint?: string;\n issuer?: string;\n codeChallengeMethodsSupported: string[];\n}\n\nexport interface TokenProvider {\n getAccessToken(): Promise<string | undefined>;\n refreshAfterUnauthorized(): Promise<string | undefined>;\n}\n\nexport class OAuthClient implements TokenProvider {\n private readonly fetchImpl: typeof fetch;\n private readonly envVars: NodeJS.ProcessEnv;\n private readonly openBrowserImpl: (url: string) => Promise<void>;\n\n constructor(private readonly options: OAuthClientOptions) {\n this.fetchImpl = options.fetchImpl ?? fetch;\n this.envVars = options.envVars ?? process.env;\n this.openBrowserImpl = options.openBrowser ?? openBrowser;\n }\n\n async getAccessToken(): Promise<string | undefined> {\n const envToken = this.envVars.AINECTO_TOKEN;\n if (envToken) {\n assertEnvTokenEndpointAllowed(this.options.endpoint, this.envVars);\n return envToken;\n }\n\n const stored = await this.options.tokenStore.load(this.options.endpoint, this.options.role);\n if (!stored) {\n return undefined;\n }\n\n if (!shouldRefresh(stored)) {\n return stored.accessToken;\n }\n\n return this.refreshStoredToken(stored);\n }\n\n async refreshAfterUnauthorized(): Promise<string | undefined> {\n const stored = await this.options.tokenStore.load(this.options.endpoint, this.options.role);\n if (!stored?.refreshToken) {\n return undefined;\n }\n return this.refreshStoredToken(stored);\n }\n\n async login(): Promise<StoredTokenSet> {\n const pkce = generatePkcePair();\n const state = generateOAuthState();\n const loopback = await createLoopbackReceiver(state);\n\n try {\n const metadata = await discoverOAuthMetadata(this.options.endpoint, this.fetchImpl);\n const registration = metadata.registrationEndpoint\n ? await registerPublicClient(metadata.registrationEndpoint, loopback.redirectUri, this.fetchImpl)\n : { clientId: \"ainecto-cli\" };\n const authorizeUrl = new URL(metadata.authorizationEndpoint);\n authorizeUrl.searchParams.set(\"response_type\", \"code\");\n authorizeUrl.searchParams.set(\"client_id\", registration.clientId);\n authorizeUrl.searchParams.set(\"redirect_uri\", loopback.redirectUri);\n authorizeUrl.searchParams.set(\"code_challenge\", pkce.codeChallenge);\n authorizeUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authorizeUrl.searchParams.set(\"resource\", this.options.endpoint);\n authorizeUrl.searchParams.set(\"state\", state);\n // ★역할을 OAuth scope 로 요구한다. 승인은 브라우저에서 사람이 한다 —\n // 그래서 에이전트가 자기 역할을 넓힌 토큰을 혼자 만들 수 없다.\n if (this.options.role) {\n authorizeUrl.searchParams.set(\"scope\", `mcp ${ROLE_SCOPE_PREFIX}${this.options.role}`);\n }\n\n assertTrustedEndpointUrl(authorizeUrl, \"OAuth authorization URL\");\n await this.openBrowserImpl(authorizeUrl.toString());\n const code = await loopback.waitForCode();\n const token = await exchangeToken(metadata.tokenEndpoint, {\n grant_type: \"authorization_code\",\n code,\n redirect_uri: loopback.redirectUri,\n client_id: registration.clientId,\n code_verifier: pkce.codeVerifier,\n resource: this.options.endpoint,\n ...(registration.clientSecret ? { client_secret: registration.clientSecret } : {}),\n }, this.fetchImpl);\n\n const stored = toStoredToken(this.options.endpoint, token, metadata, registration);\n await this.options.tokenStore.save(this.options.endpoint, stored, this.options.role);\n return stored;\n } finally {\n await loopback.close();\n }\n }\n\n async logout(): Promise<void> {\n await this.options.tokenStore.delete(this.options.endpoint, this.options.role);\n }\n\n private async refreshStoredToken(stored: StoredTokenSet): Promise<string | undefined> {\n if (!stored.refreshToken) {\n return stored.accessToken;\n }\n const metadata = await discoverOAuthMetadata(this.options.endpoint, this.fetchImpl);\n const token = await exchangeToken(metadata.tokenEndpoint, {\n grant_type: \"refresh_token\",\n refresh_token: stored.refreshToken,\n client_id: stored.clientId ?? \"ainecto-cli\",\n ...(stored.clientSecret ? { client_secret: stored.clientSecret } : {}),\n resource: this.options.endpoint,\n }, this.fetchImpl);\n const next = toStoredToken(this.options.endpoint, token, metadata, stored);\n await this.options.tokenStore.save(this.options.endpoint, next, this.options.role);\n return next.accessToken;\n }\n}\n\nexport function generatePkcePair(): { codeVerifier: string; codeChallenge: string } {\n const codeVerifier = randomBytes(32).toString(\"base64url\");\n const codeChallenge = createHash(\"sha256\").update(codeVerifier).digest(\"base64url\");\n return { codeVerifier, codeChallenge };\n}\n\nexport function generateOAuthState(): string {\n return randomBytes(32).toString(\"base64url\");\n}\n\nexport function shouldRefresh(token: Pick<StoredTokenSet, \"expiresAt\">, now = Date.now()): boolean {\n if (!token.expiresAt) {\n return false;\n }\n return token.expiresAt - now < 60_000;\n}\n\nexport async function discoverOAuthMetadata(endpoint: string, fetchImpl: typeof fetch = fetch): Promise<OAuthMetadata> {\n assertTrustedEndpointUrl(endpoint, \"MCP endpoint\");\n const resourceMetadataUrl = await discoverResourceMetadataUrl(endpoint, fetchImpl);\n assertTrustedEndpointUrl(resourceMetadataUrl, \"OAuth protected resource metadata URL\");\n const resourceMetadata = await fetchJson<Record<string, unknown>>(resourceMetadataUrl, fetchImpl);\n const authorizationServers = resourceMetadata.authorization_servers;\n if (!Array.isArray(authorizationServers) || typeof authorizationServers[0] !== \"string\") {\n throw new Error(\"OAuth protected resource metadata did not include authorization_servers.\");\n }\n const authServer = authorizationServers[0];\n assertTrustedEndpointUrl(authServer, \"OAuth authorization server\");\n const metadataUrl = authServer.includes(\"/.well-known/\")\n ? authServer\n : `${authServer.replace(/\\/$/, \"\")}/.well-known/oauth-authorization-server`;\n assertTrustedEndpointUrl(metadataUrl, \"OAuth authorization server metadata URL\");\n const metadata = await fetchJson<Record<string, unknown>>(metadataUrl, fetchImpl);\n if (typeof metadata.authorization_endpoint !== \"string\" || typeof metadata.token_endpoint !== \"string\") {\n throw new Error(\"OAuth authorization server metadata is missing authorization_endpoint or token_endpoint.\");\n }\n assertTrustedEndpointUrl(metadata.authorization_endpoint, \"OAuth authorization endpoint\");\n assertTrustedEndpointUrl(metadata.token_endpoint, \"OAuth token endpoint\");\n if (typeof metadata.registration_endpoint === \"string\") {\n assertTrustedEndpointUrl(metadata.registration_endpoint, \"OAuth client registration endpoint\");\n }\n if (typeof metadata.issuer === \"string\") {\n assertTrustedEndpointUrl(metadata.issuer, \"OAuth issuer\");\n }\n const codeChallengeMethodsSupported = parseStringArray(metadata.code_challenge_methods_supported);\n if (!codeChallengeMethodsSupported.includes(\"S256\")) {\n throw new Error(\"OAuth authorization server metadata must support PKCE S256.\");\n }\n return {\n authorizationEndpoint: metadata.authorization_endpoint,\n tokenEndpoint: metadata.token_endpoint,\n registrationEndpoint: typeof metadata.registration_endpoint === \"string\" ? metadata.registration_endpoint : undefined,\n issuer: typeof metadata.issuer === \"string\" ? metadata.issuer : undefined,\n codeChallengeMethodsSupported,\n };\n}\n\nasync function discoverResourceMetadataUrl(endpoint: string, fetchImpl: typeof fetch): Promise<string> {\n const challengeUrl = new URL(endpoint);\n assertTrustedEndpointUrl(challengeUrl, \"MCP endpoint\");\n const response = await fetchImpl(challengeUrl, { method: \"GET\" });\n const challenge = response.headers.get(\"www-authenticate\");\n const fromChallenge = challenge ? parseBearerChallengeParam(challenge, \"resource_metadata\") : undefined;\n if (fromChallenge) {\n assertTrustedEndpointUrl(fromChallenge, \"OAuth protected resource metadata URL\");\n return fromChallenge;\n }\n const origin = new URL(endpoint).origin;\n const fallback = `${origin}/.well-known/oauth-protected-resource`;\n assertTrustedEndpointUrl(fallback, \"OAuth protected resource metadata URL\");\n return fallback;\n}\n\nexport function parseBearerChallengeParam(header: string, name: string): string | undefined {\n const pattern = new RegExp(`${name}=\"([^\"]+)\"`);\n return pattern.exec(header)?.[1];\n}\n\nasync function exchangeToken(\n tokenEndpoint: string,\n params: Record<string, string>,\n fetchImpl: typeof fetch,\n): Promise<Record<string, unknown>> {\n assertTrustedEndpointUrl(tokenEndpoint, \"OAuth token endpoint\");\n const response = await fetchImpl(tokenEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(params),\n });\n if (!response.ok) {\n throw new Error(`OAuth token exchange failed with HTTP ${response.status}.`);\n }\n return response.json() as Promise<Record<string, unknown>>;\n}\n\ntype TokenContext = Partial<Pick<StoredTokenSet, \"refreshToken\" | \"tokenType\" | \"expiresAt\" | \"scope\" | \"clientId\" | \"clientSecret\">>\n & Partial<ClientRegistrationResult>;\n\nfunction toStoredToken(\n endpoint: string,\n token: Record<string, unknown>,\n metadata: OAuthMetadata,\n previous?: TokenContext,\n): StoredTokenSet {\n if (typeof token.access_token !== \"string\") {\n throw new Error(\"OAuth token response did not include access_token.\");\n }\n const expiresIn = typeof token.expires_in === \"number\" ? token.expires_in : undefined;\n return {\n endpoint,\n accessToken: token.access_token,\n refreshToken: typeof token.refresh_token === \"string\" ? token.refresh_token : previous?.refreshToken,\n tokenType: typeof token.token_type === \"string\" ? token.token_type : previous?.tokenType,\n expiresAt: expiresIn ? Date.now() + expiresIn * 1000 : previous?.expiresAt,\n scope: typeof token.scope === \"string\" ? token.scope : previous?.scope,\n clientId: previous?.clientId ?? \"ainecto-cli\",\n clientSecret: previous?.clientSecret,\n authorizationServer: metadata.issuer,\n updatedAt: new Date().toISOString(),\n };\n}\n\nasync function createLoopbackReceiver(expectedState: string): Promise<{\n redirectUri: string;\n waitForCode(): Promise<string>;\n close(): Promise<void>;\n}> {\n let resolveCode!: (code: string) => void;\n let rejectCode!: (error: Error) => void;\n const codePromise = new Promise<string>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n codePromise.catch(() => undefined);\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://127.0.0.1\");\n const error = url.searchParams.get(\"error\");\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (error) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization failed. You can close this tab.\");\n rejectCode(new Error(`OAuth authorization failed: ${error}`));\n return;\n }\n if (!state || state !== expectedState) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization state mismatch. You can close this tab.\");\n rejectCode(new Error(\"OAuth state mismatch.\"));\n return;\n }\n if (!code) {\n res.writeHead(400, { \"content-type\": \"text/plain\" });\n res.end(\"Missing OAuth code.\");\n rejectCode(new Error(\"OAuth redirect did not include a code.\"));\n return;\n }\n res.writeHead(200, { \"content-type\": \"text/plain\" });\n res.end(\"Ainecto CLI authorization complete. You can close this tab.\");\n resolveCode(code);\n });\n\n await new Promise<void>((resolve) => server.listen(0, \"127.0.0.1\", resolve));\n const address = server.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Loopback OAuth server did not bind to a TCP port.\");\n }\n return {\n redirectUri: `http://127.0.0.1:${address.port}/callback`,\n waitForCode: () => codePromise,\n close: () => new Promise<void>((resolve, reject) => server.close((error) => error ? reject(error) : resolve())),\n };\n}\n\nfunction parseStringArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n}\n\nasync function fetchJson<T>(url: string, fetchImpl: typeof fetch): Promise<T> {\n assertTrustedEndpointUrl(url, \"OAuth metadata URL\");\n const response = await fetchImpl(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch OAuth metadata from ${url}: HTTP ${response.status}.`);\n }\n return response.json() as Promise<T>;\n}\n\nexport function getBrowserOpenCommand(\n url: string,\n platform: NodeJS.Platform = process.platform,\n): { command: string; args: string[] } {\n assertTrustedEndpointUrl(url, \"OAuth authorization URL\");\n if (platform === \"darwin\") {\n return { command: \"open\", args: [url] };\n }\n if (platform === \"win32\") {\n return { command: \"explorer.exe\", args: [url] };\n }\n return { command: \"xdg-open\", args: [url] };\n}\n\nasync function openBrowser(url: string): Promise<void> {\n const { command, args } = getBrowserOpenCommand(url);\n const child = spawn(command, args, { stdio: \"ignore\", detached: true });\n child.unref();\n}\n\nfunction assertEnvTokenEndpointAllowed(endpoint: string, envVars: NodeJS.ProcessEnv): void {\n if (envVars.AINECTO_ALLOW_CUSTOM_ENDPOINT_TOKEN === \"1\") {\n return;\n }\n if (isDefaultEndpoint(endpoint)) {\n return;\n }\n throw new Error(\"AINECTO_TOKEN can only be used with the default prod/dev endpoints. Set AINECTO_ALLOW_CUSTOM_ENDPOINT_TOKEN=1 only when you intentionally trust the custom endpoint.\");\n}\n","export type AinectoEnv = \"prod\" | \"dev\";\n\nexport interface EndpointResolutionInput {\n env?: AinectoEnv;\n endpoint?: string;\n envVars?: NodeJS.ProcessEnv;\n}\n\nexport interface ResolvedEndpoint {\n env: AinectoEnv;\n endpoint: string;\n source: \"flag\" | \"env\" | \"default\";\n}\n\n/**\n * 기본 MCP 엔드포인트.\n *\n * ★2026-09-21 도메인 전환으로 ai-erd.com 이 «사람이 보는 주소»가 됐고, /mcp 는 두 도메인\n * 모두에서 동일하게 서빙된다(둘 다 같은 인스턴스). 그래서 기본값을 새 도메인으로 옮긴다.\n *\n * ⚠단, OAuth 메타데이터는 아직 ainecto.com 을 가리킨다:\n * WWW-Authenticate resource_metadata=https://ainecto.com/.well-known/oauth-protected-resource/mcp\n * protected-resource resource=https://ainecto.com/mcp · authorization_servers=[https://ainecto.com]\n * authorization-server issuer=https://ainecto.com\n * issuer 는 «발급자 이름»이라 바꾸면 기존 토큰이 전부 무효가 되어 동결돼 있다(전환 계획서 §4-1).\n *\n * 이 CLI 는 issuer/resource 를 요청 호스트와 «대조하지 않고» 서버가 준 메타데이터를 그대로\n * 따라가므로 영향이 없다. ⚠엄격하게 대조하는 다른 MCP 클라이언트는 resource 불일치를\n * 문제 삼을 수 있다 — 그때는 --endpoint 나 AINECTO_MCP_ENDPOINT 로 옛 주소를 쓸 수 있다.\n *\n * 옛 주소도 계속 동작한다. 끊지 않는다.\n */\nconst DEFAULT_ENDPOINTS: Record<AinectoEnv, string> = {\n prod: \"https://ai-erd.com/mcp\",\n dev: \"https://dev.ai-erd.com/mcp\",\n};\n\n/** 옛 기본값 — 이미 설정에 적어둔 사용자가 있다. isDefaultEndpoint 가 이것도 «기본»으로 본다. */\nconst LEGACY_DEFAULT_ENDPOINTS: readonly string[] = [\n \"https://ainecto.com/mcp\",\n \"https://dev.ainecto.com/mcp\",\n];\n\nexport function resolveEndpoint(input: EndpointResolutionInput = {}): ResolvedEndpoint {\n const envVars = input.envVars ?? process.env;\n const env = input.env ?? \"prod\";\n\n if (input.endpoint) {\n return { env, endpoint: normalizeEndpoint(input.endpoint), source: \"flag\" };\n }\n\n if (envVars.AINECTO_MCP_ENDPOINT) {\n return { env, endpoint: normalizeEndpoint(envVars.AINECTO_MCP_ENDPOINT), source: \"env\" };\n }\n\n return { env, endpoint: DEFAULT_ENDPOINTS[env], source: \"default\" };\n}\n\nexport function normalizeEndpoint(endpoint: string): string {\n const url = new URL(endpoint);\n assertTrustedEndpointUrl(url, \"MCP endpoint\");\n url.hash = \"\";\n return url.toString().replace(/\\/$/, \"\");\n}\n\n/**\n * ★<b>이 env 의 기본 주소와 «정확히» 같은가.</b>\n *\n * <p>{@link isDefaultEndpoint} 는 prod·dev·옛 주소를 전부 «기본»으로 보는 넓은 판정이라,\n * 「env=prod 인데 endpoint 만 dev」 같은 입력을 기본으로 착각한다. 그 판정으로 설정에서\n * {@code --endpoint} 를 빼면, 조회한 주소와 세션이 붙는 주소가 갈라진다\n * (2026-09-23 독립 재리뷰 I7).\n */\nexport function isDefaultEndpointFor(env: AinectoEnv, endpoint: string): boolean {\n return normalizeEndpoint(endpoint) === DEFAULT_ENDPOINTS[env];\n}\n\nexport function isDefaultEndpoint(endpoint: string): boolean {\n const normalized = normalizeEndpoint(endpoint);\n return Object.values(DEFAULT_ENDPOINTS).includes(normalized)\n || LEGACY_DEFAULT_ENDPOINTS.includes(normalized);\n}\n\nexport function assertTrustedEndpointUrl(value: string | URL, label = \"URL\"): void {\n const url = typeof value === \"string\" ? new URL(value) : value;\n if (url.protocol === \"https:\") {\n return;\n }\n if (url.protocol === \"http:\" && isLoopbackHostname(url.hostname)) {\n return;\n }\n throw new Error(`${label} must use https, except http is allowed for localhost loopback endpoints.`);\n}\n\nexport function assertLoopbackRedirectUrl(value: string): void {\n const url = new URL(value);\n if (url.protocol === \"http:\" && isLoopbackHostname(url.hostname)) {\n return;\n }\n throw new Error(\"OAuth redirect URI must be an http localhost loopback URL.\");\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n return hostname === \"localhost\"\n || hostname === \"127.0.0.1\"\n || hostname === \"::1\"\n || hostname === \"[::1]\";\n}\n\nexport function assertEnv(value: string | undefined): AinectoEnv | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value === \"prod\" || value === \"dev\") {\n return value;\n }\n throw new Error(`Invalid --env value \"${value}\". Expected \"prod\" or \"dev\".`);\n}\n","import { assertLoopbackRedirectUrl, assertTrustedEndpointUrl } from \"../config/endpoints\";\n\nexport interface ClientRegistrationResult {\n clientId: string;\n clientSecret?: string;\n}\n\nexport async function registerPublicClient(\n registrationEndpoint: string,\n redirectUri: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<ClientRegistrationResult> {\n assertTrustedEndpointUrl(registrationEndpoint, \"OAuth client registration endpoint\");\n assertLoopbackRedirectUrl(redirectUri);\n const response = await fetchImpl(registrationEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", accept: \"application/json\" },\n body: JSON.stringify({\n client_name: \"Ainecto CLI\",\n redirect_uris: [redirectUri],\n token_endpoint_auth_method: \"none\",\n grant_types: [\"authorization_code\", \"refresh_token\"],\n response_types: [\"code\"],\n }),\n });\n if (!response.ok) {\n throw new Error(`OAuth client registration failed with HTTP ${response.status}.`);\n }\n const body = await response.json() as unknown;\n if (!isRecord(body) || typeof body.client_id !== \"string\") {\n throw new Error(\"OAuth client registration response did not include client_id.\");\n }\n return {\n clientId: body.client_id,\n clientSecret: typeof body.client_secret === \"string\" ? body.client_secret : undefined,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","/**\n * 세션 역할 — AI-ERD Harness 의 「하나의 세션은 하나의 역할만 가진다」를 클라이언트 쪽에서\n * 실어 나르는 부분.\n *\n * ★역할은 «에이전트가 못 바꾸는 곳»에서 와야 한다. 그래서 출처를 둘로만 둔다:\n *\n * ① --role 플래그 MCP 서버 설정의 args 에 사람이 적는다\n * → Claude Code(.mcp.json) · Cursor(.cursor/mcp.json) 처럼\n * «프로젝트별» 설정이 있는 에이전트\n * ② AI_ERD_ROLE 세션을 띄우는 환경변수\n * → Codex 처럼 MCP 설정이 «전역»뿐이라 프로젝트별로 못 나누는 에이전트\n * ★이 브리지 프로세스는 세션 시작 시점에 뜨고 그때의 환경을 물려받는다.\n * 에이전트가 나중에 export 해도 이미 뜬 프로세스에는 닿지 않는다.\n *\n * ⛔«도구로 역할을 선언»하는 길은 택하지 않았다. 에이전트가 스스로 바꿀 수 있으면 제약이\n * 아니다 — 막히는 순간 「역할을 바꿔서 하겠습니다」가 가장 자연스러운 다음 수가 된다.\n *\n * ⚠강제하는 쪽은 서버다. 이 파일은 역할을 «전달»만 한다. 브리지에서 도구를 걸러 봐야\n * 브리지를 안 거치는 연결(HTTP 직결)에는 아무 효과가 없기 때문이다.\n */\n\nexport const HARNESS_ROLES = [\"design\", \"development\", \"test\", \"validation\"] as const;\n\nexport type HarnessRole = (typeof HARNESS_ROLES)[number];\n\n/**\n * ★역할을 싣는 OAuth scope 접두사. 서버의 McpSessionRole.ROLE_SCOPE_PREFIX 와 같아야 한다.\n *\n * <p>이것이 «진짜» 출처다. 아래 헤더는 역할 scope 토큰이 없을 때의 권고일 뿐이고,\n * 같은 토큰을 쥔 다른 경로(셸에서 CLI 직접 호출 등)는 헤더를 안 보낸다.\n */\nexport const ROLE_SCOPE_PREFIX = \"ai-erd:role:\";\n\n/** 서버가 읽는 헤더 이름. 서버의 McpSessionRoleResolver.ROLE_HEADER 와 같아야 한다. */\nexport const ROLE_HEADER = \"X-AI-ERD-Role\";\n\n/** 설정이 전역뿐인 에이전트(Codex 등)를 위한 환경변수. */\nexport const ROLE_ENV_VAR = \"AI_ERD_ROLE\";\n\nexport interface RoleResolutionInput {\n role?: string;\n envVars?: NodeJS.ProcessEnv;\n}\n\nexport interface ResolvedRole {\n role?: HarnessRole;\n source: \"flag\" | \"env\" | \"none\";\n}\n\nexport function resolveRole(input: RoleResolutionInput = {}): ResolvedRole {\n if (input.role !== undefined) {\n return { role: assertRole(input.role), source: \"flag\" };\n }\n const fromEnv = (input.envVars ?? process.env)[ROLE_ENV_VAR];\n if (fromEnv && fromEnv.trim()) {\n return { role: assertRole(fromEnv), source: \"env\" };\n }\n return { source: \"none\" };\n}\n\n/**\n * ⚠여기서는 «틀리면 멈춘다». 서버는 모르는 값을 FULL 로 받아 넘기지만, 그건 남의 설정이\n * 조용히 죽지 않게 하려는 것이고 — 이쪽은 방금 사람이 친 값이라 오타를 알려주는 편이 낫다.\n * 조용히 «역할 없음»으로 도는 것이 이 도구에서 가장 나쁜 실패다.\n */\nexport function assertRole(value: string): HarnessRole {\n const normalized = value.trim().toLowerCase();\n if ((HARNESS_ROLES as readonly string[]).includes(normalized)) {\n return normalized as HarnessRole;\n }\n throw new Error(\n `Invalid role \"${value}\". Expected one of: ${HARNESS_ROLES.join(\", \")}.`,\n );\n}\n\n/** 사람이 읽는 이름. 서버의 거부 안내문과 같은 어휘를 쓴다. */\nexport function roleDisplayName(role: HarnessRole): string {\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} Session`;\n}\n","import { readFile } from \"node:fs/promises\";\n\nexport interface PayloadSourceInput {\n file?: string;\n inline?: string;\n stdin?: NodeJS.ReadStream;\n stdinText?: string;\n stdinIsTTY?: boolean;\n}\n\nexport interface ParsedPayload {\n value: unknown;\n source: \"file\" | \"stdin\" | \"inline\" | \"empty\";\n warnings: string[];\n}\n\nexport async function parsePayloadSource(input: PayloadSourceInput): Promise<ParsedPayload> {\n const warnings: string[] = [];\n const stdinIsTTY = input.stdinIsTTY ?? input.stdin?.isTTY ?? true;\n const hasInline = input.inline !== undefined && input.inline !== \"\";\n const hasStdin = input.stdinText !== undefined || !stdinIsTTY;\n\n if (input.file) {\n if (hasInline || hasStdin) {\n warnings.push(\"Multiple payload sources were provided; --file takes precedence.\");\n }\n const text = await readFileOrStdin(input.file, input);\n return { value: parseJson(text), source: input.file === \"-\" || input.file === \"@-\" ? \"stdin\" : \"file\", warnings };\n }\n\n if (hasStdin) {\n if (hasInline) {\n warnings.push(\"Multiple payload sources were provided; stdin takes precedence.\");\n }\n const text = input.stdinText ?? await readAllStdin(input.stdin);\n if (!text.trim()) {\n return { value: {}, source: \"empty\", warnings };\n }\n return { value: parseJson(text), source: \"stdin\", warnings };\n }\n\n if (hasInline) {\n const inline = input.inline === \"@-\" ? await readAllStdin(input.stdin) : input.inline;\n return { value: parseJson(inline), source: \"inline\", warnings };\n }\n\n return { value: {}, source: \"empty\", warnings };\n}\n\nfunction parseJson(text: string | undefined): unknown {\n if (text === undefined || !text.trim()) {\n return {};\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON payload: ${detail}`);\n }\n}\n\nasync function readFileOrStdin(file: string, input: PayloadSourceInput): Promise<string> {\n if (file === \"-\" || file === \"@-\") {\n return input.stdinText ?? await readAllStdin(input.stdin);\n }\n return readFile(file, \"utf8\");\n}\n\nasync function readAllStdin(stdin: NodeJS.ReadStream | undefined): Promise<string> {\n if (!stdin) {\n return \"\";\n }\n stdin.setEncoding(\"utf8\");\n let text = \"\";\n for await (const chunk of stdin) {\n text += chunk;\n }\n return text;\n}\n","import type { TokenProvider } from \"../auth/oauth\";\nimport { ROLE_HEADER, type HarnessRole } from \"../harness/role\";\n\nexport interface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nexport interface JsonRpcSuccess {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n result: unknown;\n}\n\nexport interface JsonRpcFailure {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n error: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\nexport type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure;\n\nexport interface McpRpcClientOptions {\n endpoint: string;\n tokenProvider?: TokenProvider;\n fetchImpl?: typeof fetch;\n envVars?: NodeJS.ProcessEnv;\n /** 세션 역할. 있으면 모든 요청에 실린다 — 강제는 서버가 한다. */\n role?: HarnessRole;\n}\n\nexport class McpRpcError extends Error {\n constructor(\n message: string,\n readonly code: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n\nexport class McpRpcClient {\n private readonly fetchImpl: typeof fetch;\n private nextId = 1;\n\n constructor(private readonly options: McpRpcClientOptions) {\n this.fetchImpl = options.fetchImpl ?? fetch;\n }\n\n initialize(): Promise<unknown> {\n return this.request(\"initialize\", {\n protocolVersion: \"2024-11-05\",\n capabilities: {},\n clientInfo: { name: \"@ainecto/mcp\", version: \"0.1.0\" },\n });\n }\n\n async toolsList(): Promise<unknown[]> {\n const result = await this.request(\"tools/list\", {});\n if (!isRecord(result) || !Array.isArray(result.tools)) {\n throw new McpRpcError(\"tools/list response did not include a tools array.\", \"MCP_PROTOCOL_ERROR\", result);\n }\n return result.tools;\n }\n\n async toolsCall(name: string, args: unknown): Promise<unknown> {\n return this.request(\"tools/call\", { name, arguments: args ?? {} });\n }\n\n async request(method: string, params?: unknown): Promise<unknown> {\n const response = await this.sendRaw({\n jsonrpc: \"2.0\",\n id: this.nextId++,\n method,\n params,\n });\n if (!response) {\n return undefined;\n }\n if (\"error\" in response) {\n throw new McpRpcError(response.error.message, \"MCP_ERROR\", response.error);\n }\n return response.result;\n }\n\n async sendRaw(request: JsonRpcRequest): Promise<JsonRpcResponse | undefined> {\n const token = await this.options.tokenProvider?.getAccessToken();\n let response = await this.postJson(request, token);\n if (response.status === 401 && this.options.tokenProvider) {\n const refreshed = await this.options.tokenProvider.refreshAfterUnauthorized();\n if (refreshed) {\n response = await this.postJson(request, refreshed);\n }\n }\n\n if (response.status === 204 || response.status === 202) {\n return undefined;\n }\n const text = await response.text();\n if (!response.ok) {\n throw new McpRpcError(\n `MCP HTTP request failed with HTTP ${response.status}.`,\n \"MCP_HTTP_ERROR\",\n httpErrorDetails(response.status, text, this.options.envVars ?? process.env),\n );\n }\n if (!text.trim()) {\n return undefined;\n }\n const parsed = JSON.parse(text) as unknown;\n if (!isJsonRpcResponse(parsed)) {\n throw new McpRpcError(\"MCP response was not a JSON-RPC response.\", \"MCP_PROTOCOL_ERROR\", parsed);\n }\n return parsed;\n }\n\n private postJson(request: JsonRpcRequest, token: string | undefined): Promise<Response> {\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n };\n if (token) {\n headers.authorization = `Bearer ${token}`;\n }\n if (this.options.role) {\n headers[ROLE_HEADER.toLowerCase()] = this.options.role;\n }\n return this.fetchImpl(this.options.endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(request),\n });\n }\n}\n\n/**\n * ★MCP 는 «도구가 거부/실패했다»를 JSON-RPC error 가 아니라 결과 안의 {@code isError} 로\n * 알린다(2025-06-18 규격). 그래서 최상위 error 만 보면 실패가 성공으로 보고된다 —\n * 셸 자동화는 exit 0 을 받고 다음 단계로 간다(2026-09-22 독립 리뷰 I9).\n */\nexport function isToolError(result: unknown): boolean {\n return isRecord(result) && result.isError === true;\n}\n\nfunction isJsonRpcResponse(value: unknown): value is JsonRpcResponse {\n return isRecord(value)\n && value.jsonrpc === \"2.0\"\n && (\"result\" in value || \"error\" in value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction httpErrorDetails(status: number, body: string, envVars: NodeJS.ProcessEnv): Record<string, unknown> {\n const details: Record<string, unknown> = { status };\n if (envVars.AINECTO_CLI_DEBUG === \"1\" || envVars.AINECTO_DEBUG === \"1\") {\n details.body = safeBodyPreview(body);\n }\n return details;\n}\n\nexport function safeBodyPreview(body: string): string {\n return body.length > 500 ? `${body.slice(0, 500)}...` : body;\n}\n","export interface CliErrorShape {\n ok: false;\n error: {\n code: string;\n message: string;\n details?: unknown;\n };\n}\n\nexport interface CliSuccessShape {\n ok: true;\n data: unknown;\n warnings?: string[];\n}\n\nexport function renderSuccess(data: unknown, options: { json?: boolean; warnings?: string[] } = {}): string {\n if (options.json) {\n const shape: CliSuccessShape = { ok: true, data };\n if (options.warnings?.length) {\n shape.warnings = options.warnings;\n }\n return `${JSON.stringify(shape, null, 2)}\\n`;\n }\n const warnings = options.warnings?.length ? `${options.warnings.map((warning) => `Warning: ${warning}`).join(\"\\n\")}\\n` : \"\";\n return `${warnings}${renderHuman(data)}\\n`;\n}\n\nexport function renderError(error: unknown, options: { json?: boolean } = {}): string {\n const shape = toErrorShape(error);\n if (options.json) {\n return `${JSON.stringify(shape, null, 2)}\\n`;\n }\n return `Error: ${shape.error.message}\\n`;\n}\n\nexport function toErrorShape(error: unknown): CliErrorShape {\n if (error instanceof Error) {\n const maybe = error as Error & { code?: string; details?: unknown };\n return {\n ok: false,\n error: {\n code: maybe.code ?? \"CLI_ERROR\",\n message: error.message,\n details: redactSecrets(maybe.details),\n },\n };\n }\n return { ok: false, error: { code: \"CLI_ERROR\", message: String(error) } };\n}\n\nexport function redactSecrets(value: unknown): unknown {\n return redactSecretsInner(value, new WeakSet<object>());\n}\n\nfunction renderHuman(data: unknown): string {\n if (Array.isArray(data)) {\n return data.map((item) => renderHuman(item)).join(\"\\n\");\n }\n if (typeof data === \"string\") {\n return data;\n }\n return JSON.stringify(data, null, 2);\n}\n\nfunction redactSecretsInner(value: unknown, seen: WeakSet<object>): unknown {\n if (typeof value === \"string\") {\n return redactSecretString(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => redactSecretsInner(item, seen));\n }\n if (value && typeof value === \"object\") {\n if (seen.has(value)) {\n return \"[circular]\";\n }\n seen.add(value);\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n output[key] = isSecretKey(key) ? \"[redacted]\" : redactSecretsInner(child, seen);\n }\n return output;\n }\n return value;\n}\n\nfunction isSecretKey(key: string): boolean {\n const normalized = key.toLowerCase().replace(/-/g, \"_\");\n return normalized === \"authorization\"\n || normalized.includes(\"access_token\")\n || normalized.includes(\"refresh_token\")\n || normalized.includes(\"client_secret\")\n || normalized.includes(\"token\");\n}\n\nfunction redactSecretString(value: string): string {\n return value\n .replace(/(\"(?:authorization|access_token|refresh_token|client_secret|token)\"\\s*:\\s*\")([^\"]*)(\")/gi, \"$1[redacted]$3\")\n .replace(/((?:authorization|access_token|refresh_token|client_secret|token)=)([^&\\s\"']+)/gi, \"$1[redacted]\")\n .replace(/(authorization:\\s*bearer\\s+)([^\\s,}]+)/gi, \"$1[redacted]\")\n .replace(/(bearer\\s+)(eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+)/gi, \"$1[redacted]\");\n}\n","import type { GeneratedToolDefinition } from \"./types\";\n\nexport const generatedTools = [\n {\"mcpName\":\"mcp__ainecto__create_documents\",\"commandPath\":[\"documents\",\"create\"],\"group\":\"document\",\"description\":\"Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Documents\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.create)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"title\":{\"description\":\"Document title\",\"type\":\"string\"},\"type\":{\"description\":\"Document type. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}.\",\"type\":\"object\"}},\"required\":[\"projectUuid\",\"type\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4aa976b9bb3b0eb6\"},\n {\"mcpName\":\"mcp__ainecto__create_folders\",\"commandPath\":[\"folders\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Folders\",\"items\":{\"properties\":{\"name\":{\"description\":\"Folder name\",\"type\":\"string\"},\"parentFolderUuid\":{\"description\":\"Parent folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d423d3c265631664\"},\n {\"mcpName\":\"mcp__ainecto__create_projects\",\"commandPath\":[\"projects\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Projects\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Project name\",\"type\":\"string\"},\"projectKey\":{\"description\":\"Unique project key\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Workspace UUID — null uses user's default workspace\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"396c80c6cc2ba41a\"},\n {\"mcpName\":\"mcp__ainecto__create_workspaces\",\"commandPath\":[\"workspaces\",\"create\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Workspaces\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Workspace name\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d663d461f9c9da65\"},\n {\"mcpName\":\"mcp__ainecto__delete_attachments\",\"commandPath\":[\"attachments\",\"delete\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Attachment UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"6e55e6511d732199\"},\n {\"mcpName\":\"mcp__ainecto__delete_documents\",\"commandPath\":[\"documents\",\"delete\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"5fbc7c142bb4a49d\"},\n {\"mcpName\":\"mcp__ainecto__delete_folders\",\"commandPath\":[\"folders\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"49fa7c0f823871b2\"},\n {\"mcpName\":\"mcp__ainecto__delete_projects\",\"commandPath\":[\"projects\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e1a86ddaa9638298\"},\n {\"mcpName\":\"mcp__ainecto__delete_workspaces\",\"commandPath\":[\"workspaces\",\"delete\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"2aca644f7a105b06\"},\n {\"mcpName\":\"mcp__ainecto__disable_shares\",\"commandPath\":[\"tools\",\"run\",\"disable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"a4b4358eff0faa97\"},\n {\"mcpName\":\"mcp__ainecto__enable_shares\",\"commandPath\":[\"tools\",\"run\",\"enable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ebace643de07e826\"},\n {\"mcpName\":\"mcp__ainecto__erd_apply_changes\",\"commandPath\":[\"erd\",\"apply-changes\"],\"group\":\"erd\",\"description\":\"Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use mcp__ainecto__request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\\nOne-call worked example:\\n{\\n \\\"documentUuid\\\": \\\"erd-doc-uuid\\\",\\n \\\"description\\\": \\\"create users/posts ERD\\\",\\n \\\"operations\\\": [\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"users\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_id\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_email\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"varchar(255)\\\",\\\"is_unique\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"posts\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_author_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"author_id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_status\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"post_status\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":3}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status\\\",\\\"name\\\":\\\"post_status\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_draft\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"draft\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_published\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"published\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref\\\",\\\"data\\\":{\\\"uuid\\\":\\\"ref_posts_author\\\",\\\"name\\\":\\\"fk_posts_author\\\",\\\"from_table_uuid\\\":\\\"tbl_posts\\\",\\\"to_table_uuid\\\":\\\"tbl_users\\\",\\\"relationship\\\":\\\">\\\",\\\"on_delete\\\":\\\"cascade\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref_column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"refcol_posts_author\\\",\\\"ref_uuid\\\":\\\"ref_posts_author\\\",\\\"from_column_uuid\\\":\\\"col_posts_author_id\\\",\\\"to_column_uuid\\\":\\\"col_users_id\\\",\\\"display_order\\\":1}}\\n ]\\n}\",\"inputSchema\":{\"properties\":{\"arrangeNewTables\":{\"description\":\"Whether to auto-place newly-created tables after the batch; defaults to true\",\"type\":\"boolean\"},\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic create/update/delete operations\",\"items\":{\"description\":\"One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.\",\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"name\"],\"title\":\"table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table\",\"description\":\"Must be 'table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"column\",\"description\":\"Must be 'column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"index data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index\",\"description\":\"Must be 'index' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"index_uuid\",\"column_uuid\"],\"title\":\"index_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index_column\",\"description\":\"Must be 'index_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"from_table_uuid\",\"to_table_uuid\",\"relationship\"],\"title\":\"ref data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref\",\"description\":\"Must be 'ref' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"ref_uuid\",\"from_column_uuid\",\"to_column_uuid\"],\"title\":\"ref_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref_column\",\"description\":\"Must be 'ref_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum\",\"description\":\"Must be 'enum' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"required\":[\"enum_uuid\"],\"title\":\"enum_value data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum_value\",\"description\":\"Must be 'enum_value' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum_value operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group\",\"description\":\"Must be 'table_group' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"table_name\"],\"title\":\"table_group_table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_table\",\"description\":\"Must be 'table_group_table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"note_uuid\"],\"title\":\"table_group_note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_note\",\"description\":\"Must be 'table_group_note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_note operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"filter\",\"description\":\"Must be 'filter' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"filter operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"note\",\"description\":\"Must be 'note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"note operation\",\"type\":\"object\"}],\"properties\":{\"data\":{\"description\":\"Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.\",\"oneOf\":[{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}],\"type\":\"object\"},\"op\":{\"description\":\"Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"description\":\"ERD entity type. This selects the operation.data shape.\",\"enum\":[\"table\",\"column\",\"index\",\"index_column\",\"ref\",\"ref_column\",\"enum\",\"enum_value\",\"table_group\",\"table_group_table\",\"table_group_note\",\"filter\",\"note\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete. Do not use this for create; use data.uuid instead.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"description\",\"operations\"],\"type\":\"object\"},\"required\":[\"description\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"dd64d1f996060ab1\"},\n {\"mcpName\":\"mcp__ainecto__erd_arrange_tables\",\"commandPath\":[\"erd\",\"arrange-tables\"],\"group\":\"erd\",\"description\":\"Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"full\":{\"description\":\"Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.\",\"type\":\"boolean\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"d2e66548e3d60d30\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_enum\",\"commandPath\":[\"erd\",\"get-enum\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"enumUuid\":{\"description\":\"Enum UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"enumUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"enumUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"1e477b3fadb50c6b\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_ref\",\"commandPath\":[\"erd\",\"get-ref\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"refUuid\":{\"description\":\"Relationship UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"refUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"refUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"40bf1eb02e7a9730\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table\",\"commandPath\":[\"erd\",\"get-table\"],\"group\":\"erd\",\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"inputSchema\":{\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableUuid\":{\"description\":\"Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"8edd40794f39f47a\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table_group\",\"commandPath\":[\"erd\",\"get-table-group\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableGroupUuid\":{\"description\":\"Table group UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"bcd417344639c0c9\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_enums\",\"commandPath\":[\"erd\",\"list-enums\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e0c2207905dbb068\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_refs\",\"commandPath\":[\"erd\",\"list-refs\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9ae2e04c310b57f2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_table_groups\",\"commandPath\":[\"erd\",\"list-table-groups\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"dc8811071df04ac2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_tables\",\"commandPath\":[\"erd\",\"list-tables\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ca05b35b174fc209\"},\n {\"mcpName\":\"mcp__ainecto__get_attachment\",\"commandPath\":[\"attachment\",\"get\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Attachment UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"12bee70f6d254a5d\"},\n {\"mcpName\":\"mcp__ainecto__get_document\",\"commandPath\":[\"document\",\"get\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4949c8a5bb425491\"},\n {\"mcpName\":\"mcp__ainecto__get_project\",\"commandPath\":[\"project\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"b4ee9097f4b80df4\"},\n {\"mcpName\":\"mcp__ainecto__get_version\",\"commandPath\":[\"version\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"versionNumber\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ad81d04200d3d7f5\"},\n {\"mcpName\":\"mcp__ainecto__get_workspace\",\"commandPath\":[\"workspace\",\"get\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"ef7bae555463116e\"},\n {\"mcpName\":\"mcp__ainecto__list_attachments\",\"commandPath\":[\"attachments\",\"list\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"a75657bb2e5eb383\"},\n {\"mcpName\":\"mcp__ainecto__list_documents\",\"commandPath\":[\"documents\",\"list\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"q\":{\"description\":\"Optional full-text query. When provided, results come from the search index instead of folder listing.\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"8dca77c1db9372c4\"},\n {\"mcpName\":\"mcp__ainecto__list_folders\",\"commandPath\":[\"folders\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f3cde57fe87d375c\"},\n {\"mcpName\":\"mcp__ainecto__list_projects\",\"commandPath\":[\"projects\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"q\":{\"description\":\"Optional full-text query\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Optional Workspace UUID\",\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9174d6965d7e53f5\"},\n {\"mcpName\":\"mcp__ainecto__list_trash\",\"commandPath\":[\"trash\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"82f8586d68bfcd7d\"},\n {\"mcpName\":\"mcp__ainecto__list_versions\",\"commandPath\":[\"versions\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"370e4b8b8ec18e18\"},\n {\"mcpName\":\"mcp__ainecto__list_workspaces\",\"commandPath\":[\"workspaces\",\"list\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"7c32c74000696b2f\"},\n {\"mcpName\":\"mcp__ainecto__markdown_append_document\",\"commandPath\":[\"markdown\",\"append-document\"],\"group\":\"markdown\",\"description\":\"Append to Markdown documents. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Appends\",\"items\":{\"properties\":{\"addition\":{\"description\":\"Body addition. 추가할 내용이 크면 (수십 KB 이상) LLM 토큰 절약을 위해 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` 로 uploadUrl 을 받고 curl 로 PUT 으로 보낼 것.\",\"type\":\"string\"},\"separator\":{\"description\":\"Separator between existing body and addition\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"addition\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f189514b3cccd1cc\"},\n {\"mcpName\":\"mcp__ainecto__markdown_generate_document\",\"commandPath\":[\"markdown\",\"generate-document\"],\"group\":\"markdown\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Generation requests\",\"items\":{\"properties\":{\"context\":{\"description\":\"Optional JSON context\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Target document UUID\",\"type\":\"string\"},\"prompt\":{\"description\":\"Generation prompt\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"prompt\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"72114a2d2642ed92\"},\n {\"mcpName\":\"mcp__ainecto__move_documents\",\"commandPath\":[\"documents\",\"move\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"clientMutationId\":{\"description\":\"Optional mutation identifier for client retry tracing\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newFolderUuid\":{\"description\":\"New folder UUID — null/empty for root\",\"type\":\"string\"},\"targetProjectUuid\":{\"description\":\"Target project UUID — omit to stay in current project\",\"type\":\"string\"},\"targetWorkspaceUuid\":{\"description\":\"Guard only: must match targetProjectUuid workspace\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"9758d6a262913a3f\"},\n {\"mcpName\":\"mcp__ainecto__move_folders\",\"commandPath\":[\"folders\",\"move\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newParentFolderUuid\":{\"description\":\"New parent UUID — null/empty for root\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"612a779b1fd176bb\"},\n {\"mcpName\":\"mcp__ainecto__request_upload_token\",\"commandPath\":[\"tools\",\"run\",\"request-upload-token\"],\"group\":\"attachment\",\"description\":\"Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including mcp__ainecto__erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.\",\"inputSchema\":{\"properties\":{\"maxBytes\":{\"description\":\"최대 업로드 byte (서버 측 한도)\",\"type\":\"integer\"},\"purpose\":{\"description\":\"Token 용도. `mcp.call` 은 curl 로 /mcp 호출, `document.create/update/append` 는 PUT body 로 본문 업로드, `attachment.upload` 는 파일 bytes 업로드. 콘텐츠가 크면 (수십 KB 이상) LLM 토큰 절약을 위해 이 도구로 5분 재사용 토큰을 받고 curl 로 보내는 것을 강력 권장.\",\"enum\":[\"mcp.call\",\"document.create\",\"document.update\",\"document.append\",\"attachment.upload\"],\"type\":\"string\"},\"scopeJson\":{\"description\":\"선택 — JSON scope. document.create 는 projectUuid, type, title 을 포함하고 enabled type values 는 erd, markdown. document.update/document.append 는 documentUuid 를 포함. attachment.upload: {documentUuid, filename, contentType?, sizeBytes?}; storageKey 는 서버가 발급 scope 에 추가.\",\"type\":\"string\"},\"ttlSeconds\":{\"description\":\"TTL (초). 기본 300 (5분)\",\"type\":\"integer\"}},\"required\":[\"purpose\"],\"type\":\"object\"},\"required\":[\"purpose\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"f1eb94523f43e72b\"},\n {\"mcpName\":\"mcp__ainecto__restore_versions\",\"commandPath\":[\"versions\",\"restore\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Restores\",\"items\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number to restore\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"c4f448cc3b96c7a6\"},\n {\"mcpName\":\"mcp__ainecto__search_documents\",\"commandPath\":[\"documents\",\"search\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"결과 개수 (기본 20, 최대 50)\",\"type\":\"integer\"},\"offset\":{\"description\":\"페이지네이션 offset (기본 0)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"특정 프로젝트로 한정 (선택)\",\"type\":\"string\"},\"q\":{\"description\":\"검색 키워드\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, markdown.\",\"enum\":[\"erd\",\"markdown\"],\"type\":\"string\"}},\"required\":[\"q\"],\"type\":\"object\"},\"required\":[\"q\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"b88c3537086d0c7a\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_documents\",\"commandPath\":[\"documents\",\"unarchive\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"4aae7df04fba8779\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_folders\",\"commandPath\":[\"folders\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"e307cab0ebafd179\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_projects\",\"commandPath\":[\"projects\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"15ea4a409d1549de\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_workspaces\",\"commandPath\":[\"workspaces\",\"unarchive\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"prod\",\"schemaHash\":\"641de5b64ec75ab2\"},\n {\"mcpName\":\"mcp__ainecto__update_documents\",\"commandPath\":[\"documents\",\"update\"],\"group\":\"document\",\"description\":\"Update documents. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.update)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}.\",\"type\":\"object\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"5bedb6e5f5ba4f8d\"},\n {\"mcpName\":\"mcp__ainecto__update_folders\",\"commandPath\":[\"folders\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"7bef3b4702df1f00\"},\n {\"mcpName\":\"mcp__ainecto__update_projects\",\"commandPath\":[\"projects\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"10cc0d84aeb2192b\"},\n {\"mcpName\":\"mcp__ainecto__update_workspaces\",\"commandPath\":[\"workspaces\",\"update\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"723e4f6d36ee9d02\"},\n {\"mcpName\":\"mcp__ainecto__upload_attachments\",\"commandPath\":[\"tools\",\"run\",\"upload-attachments\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Attachments to register\",\"items\":{\"properties\":{\"contentType\":{\"description\":\"MIME type\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent document UUID\",\"type\":\"string\"},\"filename\":{\"description\":\"Original file name\",\"type\":\"string\"},\"sizeBytes\":{\"description\":\"Size in bytes\",\"type\":\"integer\"},\"storageKey\":{\"description\":\"Storage key returned by request_upload_token purpose=attachment.upload\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"filename\",\"storageKey\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"prod\",\"schemaHash\":\"0622e590de3404dd\"},\n] satisfies GeneratedToolDefinition[];\n","import type { GeneratedToolDefinition } from \"./types\";\n\nexport const generatedTools = [\n {\"mcpName\":\"mcp__ainecto__create_documents\",\"commandPath\":[\"documents\",\"create\"],\"group\":\"document\",\"description\":\"Create documents. If a document body is tens of KB or more, prefer request_upload_token (purpose=document.create) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Documents\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.create)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"title\":{\"description\":\"Document title\",\"type\":\"string\"},\"type\":{\"description\":\"Document type. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; testcase: {defaultEnvironment (max 50 chars), defaultTestAccount (max 100 chars)}; task: no typePayload; board and default statuses are seeded automatically.\",\"type\":\"object\"}},\"required\":[\"projectUuid\",\"type\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6abbab093274fceb\"},\n {\"mcpName\":\"mcp__ainecto__create_folders\",\"commandPath\":[\"folders\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Folders\",\"items\":{\"properties\":{\"name\":{\"description\":\"Folder name\",\"type\":\"string\"},\"parentFolderUuid\":{\"description\":\"Parent folder UUID\",\"type\":\"string\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d423d3c265631664\"},\n {\"mcpName\":\"mcp__ainecto__create_projects\",\"commandPath\":[\"projects\",\"create\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Projects\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Project name\",\"type\":\"string\"},\"projectKey\":{\"description\":\"Unique project key\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Workspace UUID — null uses user's default workspace\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"396c80c6cc2ba41a\"},\n {\"mcpName\":\"mcp__ainecto__create_workspaces\",\"commandPath\":[\"workspaces\",\"create\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Workspaces\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"name\":{\"description\":\"Workspace name\",\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d663d461f9c9da65\"},\n {\"mcpName\":\"mcp__ainecto__delete_attachments\",\"commandPath\":[\"attachments\",\"delete\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Attachment UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6e55e6511d732199\"},\n {\"mcpName\":\"mcp__ainecto__delete_documents\",\"commandPath\":[\"documents\",\"delete\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"5fbc7c142bb4a49d\"},\n {\"mcpName\":\"mcp__ainecto__delete_folders\",\"commandPath\":[\"folders\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"49fa7c0f823871b2\"},\n {\"mcpName\":\"mcp__ainecto__delete_projects\",\"commandPath\":[\"projects\",\"delete\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e1a86ddaa9638298\"},\n {\"mcpName\":\"mcp__ainecto__delete_workspaces\",\"commandPath\":[\"workspaces\",\"delete\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"2aca644f7a105b06\"},\n {\"mcpName\":\"mcp__ainecto__diagram_apply_changes\",\"commandPath\":[\"tools\",\"run\",\"diagram-apply-changes\"],\"group\":\"generic\",\"description\":\"Required single-call mutation path for diagram node/edge/group create/update/delete changes. Put nodes, edges, and groups in one request and call this once. Do not look for type-specific diagram CUD tools; this tool is the only diagram CUD entry point.\",\"inputSchema\":{\"properties\":{\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"diagramUuid\":{\"description\":\"Diagram UUID\",\"type\":\"string\"},\"edges\":{\"description\":\"Edge operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"bridgeType\":{\"description\":\"Bridge type\",\"type\":\"string\"},\"fromUuid\":{\"description\":\"Source\",\"type\":\"string\"},\"label\":{\"description\":\"Edge label\",\"type\":\"string\"},\"lineStyle\":{\"description\":\"Line style\",\"type\":\"string\"},\"strokeColor\":{\"description\":\"Stroke color\",\"type\":\"string\"},\"strokeWidth\":{\"description\":\"Stroke width\",\"type\":\"integer\"},\"toUuid\":{\"description\":\"Target\",\"type\":\"string\"},\"uuid\":{\"description\":\"Required for update/delete\",\"type\":\"string\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"},\"groups\":{\"description\":\"Group operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"collapsed\":{\"description\":\"Collapsed state\",\"type\":\"boolean\"},\"color\":{\"description\":\"Group color\",\"type\":\"string\"},\"linkMode\":{\"description\":\"Link mode\",\"type\":\"string\"},\"linkedDiagramUuid\":{\"description\":\"Linked diagram UUID\",\"type\":\"string\"},\"name\":{\"description\":\"Group name\",\"type\":\"string\"},\"parentGroupUuid\":{\"description\":\"Parent group UUID\",\"type\":\"string\"},\"sortOrder\":{\"description\":\"Sort order\",\"type\":\"integer\"},\"uuid\":{\"description\":\"Required for update/delete\",\"type\":\"string\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"},\"nodes\":{\"description\":\"Node operations\",\"items\":{\"properties\":{\"action\":{\"description\":\"Operation kind\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"fillColor\":{\"description\":\"Fill color\",\"type\":\"string\"},\"groupUuid\":{\"description\":\"Group UUID; empty string clears membership\",\"type\":\"string\"},\"height\":{\"description\":\"Height\",\"type\":\"number\"},\"shape\":{\"description\":\"Node shape (start/end/diamond/cylinder/parallelogram/stadium/hexagon/rect/roundRect/...)\",\"enum\":[\"rect\",\"roundRect\",\"stadium\",\"diamond\",\"decision\",\"circle\",\"start\",\"doubleCircle\",\"end\",\"hexagon\",\"cylinder\",\"parallelogram\"],\"type\":\"string\"},\"strokeColor\":{\"description\":\"Stroke color\",\"type\":\"string\"},\"text\":{\"description\":\"Node text/label. Supports newlines (\\\\n) for multi-line display.\",\"maxLength\":4000,\"type\":\"string\"},\"textColor\":{\"description\":\"Text color\",\"type\":\"string\"},\"type\":{\"description\":\"Node type\",\"type\":\"string\"},\"uuid\":{\"description\":\"Required for update/delete; optional for create\",\"type\":\"string\"},\"width\":{\"description\":\"Width\",\"type\":\"number\"},\"x\":{\"description\":\"X\",\"type\":\"number\"},\"y\":{\"description\":\"Y\",\"type\":\"number\"}},\"required\":[\"action\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"diagramUuid\",\"description\"],\"type\":\"object\"},\"required\":[\"description\",\"diagramUuid\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1c87428fea4bb77a\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_edge\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-edge\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"edgeUuid\":{\"description\":\"Edge UUID\",\"type\":\"string\"}},\"required\":[\"edgeUuid\"],\"type\":\"object\"},\"required\":[\"edgeUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b147277e74d3b0f7\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_group\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-group\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"groupUuid\":{\"description\":\"Group UUID\",\"type\":\"string\"}},\"required\":[\"groupUuid\"],\"type\":\"object\"},\"required\":[\"groupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4516fc00303ab8db\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_node\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-node\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"nodeUuid\":{\"description\":\"Node UUID\",\"type\":\"string\"}},\"required\":[\"nodeUuid\"],\"type\":\"object\"},\"required\":[\"nodeUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"20f370ff4438c4b0\"},\n {\"mcpName\":\"mcp__ainecto__diagram_get_pending_llm_requests\",\"commandPath\":[\"tools\",\"run\",\"diagram-get-pending-llm-requests\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"0ec4dd6d61584a98\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_edges\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-edges\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"fee200dd1433daf9\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_groups\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-groups\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"852a19cda307f863\"},\n {\"mcpName\":\"mcp__ainecto__diagram_list_nodes\",\"commandPath\":[\"tools\",\"run\",\"diagram-list-nodes\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"diagramUuid\":{\"description\":\"Diagram document UUID\",\"type\":\"string\"}},\"required\":[\"diagramUuid\"],\"type\":\"object\"},\"required\":[\"diagramUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a8c41752151ade3e\"},\n {\"mcpName\":\"mcp__ainecto__diagram_submit_llm_result\",\"commandPath\":[\"tools\",\"run\",\"diagram-submit-llm-result\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"creditsCharged\":{\"description\":\"Deprecated; ignored. Credits are calculated server-side from tokens.\",\"type\":\"integer\"},\"inputTokens\":{\"description\":\"Input token count\",\"type\":\"integer\"},\"outputTokens\":{\"description\":\"Output token count\",\"type\":\"integer\"},\"result\":{\"description\":\"LLM result text\",\"type\":\"string\"},\"uuid\":{\"description\":\"LLM request UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"result\"],\"type\":\"object\"},\"required\":[\"result\",\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"374654baa87c1bb8\"},\n {\"mcpName\":\"mcp__ainecto__diagram_update_llm_request_status\",\"commandPath\":[\"tools\",\"run\",\"diagram-update-llm-request-status\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"errorMessage\":{\"description\":\"Error message (when status=FAILED)\",\"type\":\"string\"},\"status\":{\"description\":\"Target status — currently only FAILED is mutable from caller side\",\"enum\":[\"FAILED\"],\"type\":\"string\"},\"uuid\":{\"description\":\"LLM request UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"status\"],\"type\":\"object\"},\"required\":[\"status\",\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"25537b63698bc33d\"},\n {\"mcpName\":\"mcp__ainecto__disable_shares\",\"commandPath\":[\"tools\",\"run\",\"disable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a4b4358eff0faa97\"},\n {\"mcpName\":\"mcp__ainecto__enable_shares\",\"commandPath\":[\"tools\",\"run\",\"enable-shares\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"targetType\":{\"description\":\"Share target type\",\"enum\":[\"project\",\"folder\",\"document\"],\"type\":\"string\"},\"targetUuids\":{\"description\":\"Target UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"targetType\",\"targetUuids\"],\"type\":\"object\"},\"required\":[\"targetType\",\"targetUuids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ebace643de07e826\"},\n {\"mcpName\":\"mcp__ainecto__erd_apply_changes\",\"commandPath\":[\"erd\",\"apply-changes\"],\"group\":\"erd\",\"description\":\"Required single-call mutation path for ERD create/update/delete changes. Put tables, columns, indexes, refs, enums, enum_values, and table groups in one operations array and call this once.\\nRules: (1) all data field names are snake_case; (2) for create, generate your own UUIDs and put them in data.uuid, then later operations in the same batch may reference those UUIDs without read-back calls; (3) enum values are separate enum_value operations, not inline on enum; (4) ref.relationship uses short dbdiagram-style symbols: >, <, or -; (5) ref_column operations map FK columns explicitly, never automatically.\\nDo not look for type-specific ERD CUD tools; this tool is the only ERD CUD entry point. If operations is very large, use mcp__ainecto__request_upload_token with purpose=mcp.call and send the tools/call payload with curl to save LLM tokens.\\nOne-call worked example:\\n{\\n \\\"documentUuid\\\": \\\"erd-doc-uuid\\\",\\n \\\"description\\\": \\\"create users/posts ERD\\\",\\n \\\"operations\\\": [\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"users\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_id\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_users_email\\\",\\\"table_uuid\\\":\\\"tbl_users\\\",\\\"name\\\":\\\"email\\\",\\\"type\\\":\\\"varchar(255)\\\",\\\"is_unique\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"table\\\",\\\"data\\\":{\\\"uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"posts\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_pk\\\":true,\\\"is_not_null\\\":true,\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_author_id\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"author_id\\\",\\\"type\\\":\\\"bigint\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"col_posts_status\\\",\\\"table_uuid\\\":\\\"tbl_posts\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"post_status\\\",\\\"is_not_null\\\":true,\\\"display_order\\\":3}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status\\\",\\\"name\\\":\\\"post_status\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_draft\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"draft\\\",\\\"display_order\\\":1}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"enum_value\\\",\\\"data\\\":{\\\"uuid\\\":\\\"enum_post_status_published\\\",\\\"enum_uuid\\\":\\\"enum_post_status\\\",\\\"value\\\":\\\"published\\\",\\\"display_order\\\":2}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref\\\",\\\"data\\\":{\\\"uuid\\\":\\\"ref_posts_author\\\",\\\"name\\\":\\\"fk_posts_author\\\",\\\"from_table_uuid\\\":\\\"tbl_posts\\\",\\\"to_table_uuid\\\":\\\"tbl_users\\\",\\\"relationship\\\":\\\">\\\",\\\"on_delete\\\":\\\"cascade\\\"}},\\n {\\\"op\\\":\\\"create\\\",\\\"type\\\":\\\"ref_column\\\",\\\"data\\\":{\\\"uuid\\\":\\\"refcol_posts_author\\\",\\\"ref_uuid\\\":\\\"ref_posts_author\\\",\\\"from_column_uuid\\\":\\\"col_posts_author_id\\\",\\\"to_column_uuid\\\":\\\"col_users_id\\\",\\\"display_order\\\":1}}\\n ]\\n}\",\"inputSchema\":{\"properties\":{\"arrangeNewTables\":{\"description\":\"Whether to auto-place newly-created tables after the batch; defaults to true\",\"type\":\"boolean\"},\"description\":{\"description\":\"Reason for batch (audit)\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic create/update/delete operations\",\"items\":{\"description\":\"One ERD mutation. Use a single operations array with client-generated data.uuid values to create cross-referenced tables, columns, enums, refs, and ref_columns without read-back calls.\",\"discriminator\":{\"propertyName\":\"type\"},\"oneOf\":[{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"name\"],\"title\":\"table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table\",\"description\":\"Must be 'table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"column\",\"description\":\"Must be 'column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"table_uuid\"],\"title\":\"index data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index\",\"description\":\"Must be 'index' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"index_uuid\",\"column_uuid\"],\"title\":\"index_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"index_column\",\"description\":\"Must be 'index_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"index_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"from_table_uuid\",\"to_table_uuid\",\"relationship\"],\"title\":\"ref data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref\",\"description\":\"Must be 'ref' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"ref_uuid\",\"from_column_uuid\",\"to_column_uuid\"],\"title\":\"ref_column data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"ref_column\",\"description\":\"Must be 'ref_column' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"ref_column operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum\",\"description\":\"Must be 'enum' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"required\":[\"enum_uuid\"],\"title\":\"enum_value data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"enum_value\",\"description\":\"Must be 'enum_value' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"enum_value operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group\",\"description\":\"Must be 'table_group' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"table_name\"],\"title\":\"table_group_table data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_table\",\"description\":\"Must be 'table_group_table' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_table operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"required\":[\"group_uuid\",\"note_uuid\"],\"title\":\"table_group_note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"table_group_note\",\"description\":\"Must be 'table_group_note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"table_group_note operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"filter\",\"description\":\"Must be 'filter' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"filter operation\",\"type\":\"object\"},{\"allOf\":[{\"if\":{\"properties\":{\"op\":{\"const\":\"create\",\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}},\"required\":[\"data\"],\"type\":\"object\"}},{\"if\":{\"properties\":{\"op\":{\"enum\":[\"update\",\"delete\"],\"type\":\"string\"}},\"required\":[\"op\"],\"type\":\"object\"},\"then\":{\"properties\":{},\"required\":[\"uuid\"],\"type\":\"object\"}}],\"properties\":{\"data\":{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"},\"op\":{\"description\":\"Operation\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"const\":\"note\",\"description\":\"Must be 'note' for this payload.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"title\":\"note operation\",\"type\":\"object\"}],\"properties\":{\"data\":{\"description\":\"Type-specific payload. All field names are snake_case. For create, data.uuid may be client-supplied and referenced by later operations in the same batch.\",\"oneOf\":[{\"description\":\"Payload for operation.type='table'.\",\"properties\":{\"alias\":{\"description\":\"Display alias.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"header_color\":{\"description\":\"Header color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"note\":{\"description\":\"Table note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='column'.\",\"properties\":{\"default_value\":{\"description\":\"Default value.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"is_increment\":{\"description\":\"Auto-increment flag.\",\"type\":\"boolean\"},\"is_not_null\":{\"description\":\"Not-null flag.\",\"type\":\"boolean\"},\"is_pk\":{\"description\":\"Primary key flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Column name.\",\"type\":\"string\"},\"note\":{\"description\":\"Column note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create; may be a data.uuid from an earlier table operation in this batch.\",\"type\":\"string\"},\"type\":{\"description\":\"SQL data type. Use this exact field name; do not send data_type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index'.\",\"properties\":{\"is_pk\":{\"description\":\"Primary key index flag.\",\"type\":\"boolean\"},\"is_unique\":{\"description\":\"Unique index flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Index name.\",\"type\":\"string\"},\"note\":{\"description\":\"Index note.\",\"type\":\"string\"},\"table_uuid\":{\"description\":\"Parent table UUID. Required for create.\",\"type\":\"string\"},\"type\":{\"description\":\"Index type.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='index_column'.\",\"properties\":{\"column_uuid\":{\"description\":\"Column UUID. Required for create.\",\"type\":\"string\"},\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"index_uuid\":{\"description\":\"Index UUID. Required for create.\",\"type\":\"string\"},\"sort_order\":{\"description\":\"Sort order, for example ASC or DESC.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"index_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref'.\",\"properties\":{\"from_table_uuid\":{\"description\":\"Source table UUID. Required for create.\",\"type\":\"string\"},\"name\":{\"description\":\"Reference name.\",\"type\":\"string\"},\"on_delete\":{\"description\":\"ON DELETE action.\",\"type\":\"string\"},\"on_update\":{\"description\":\"ON UPDATE action.\",\"type\":\"string\"},\"relationship\":{\"description\":\"Required for create. Use short dbdiagram-style relationship symbols.\",\"enum\":[\">\",\"<\",\"-\"],\"type\":\"string\"},\"to_table_uuid\":{\"description\":\"Target table UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='ref_column'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"from_column_uuid\":{\"description\":\"Source column UUID. Required for create.\",\"type\":\"string\"},\"ref_uuid\":{\"description\":\"Reference UUID. Required for create; may be a data.uuid from an earlier ref operation.\",\"type\":\"string\"},\"to_column_uuid\":{\"description\":\"Target column UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"ref_column data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum'.\",\"properties\":{\"name\":{\"description\":\"Enum name.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum note.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Schema name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"enum data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='enum_value'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"enum_uuid\":{\"description\":\"Parent enum UUID. Required for create; may be a data.uuid from an earlier enum operation.\",\"type\":\"string\"},\"note\":{\"description\":\"Enum value note.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"value\":{\"description\":\"Enum value. Inline enum values on enum are not persisted; create enum_value operations.\",\"type\":\"string\"}},\"title\":\"enum_value data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group'.\",\"properties\":{\"color\":{\"description\":\"Group color.\",\"type\":\"string\"},\"name\":{\"description\":\"Table group name.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_table'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"schema_name\":{\"description\":\"Table schema name.\",\"type\":\"string\"},\"table_name\":{\"description\":\"Table name. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_table data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='table_group_note'.\",\"properties\":{\"display_order\":{\"description\":\"Display order.\",\"type\":\"integer\"},\"group_uuid\":{\"description\":\"Table group UUID. Required for create.\",\"type\":\"string\"},\"note_uuid\":{\"description\":\"Note UUID. Required for create.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"table_group_note data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='filter'.\",\"properties\":{\"included_tables\":{\"description\":\"JSON string/list of included tables.\",\"type\":\"string\"},\"is_default\":{\"description\":\"Default filter flag.\",\"type\":\"boolean\"},\"name\":{\"description\":\"Filter name.\",\"type\":\"string\"},\"table_groups\":{\"description\":\"JSON string/object of table groups.\",\"type\":\"string\"},\"table_positions\":{\"description\":\"JSON string/object of table positions.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"}},\"title\":\"filter data\",\"type\":\"object\"},{\"description\":\"Payload for operation.type='note'.\",\"properties\":{\"color\":{\"description\":\"Note color.\",\"type\":\"string\"},\"content\":{\"description\":\"Note content.\",\"type\":\"string\"},\"height\":{\"description\":\"Height.\",\"type\":\"integer\"},\"icon_name\":{\"description\":\"Icon name.\",\"type\":\"string\"},\"position_x\":{\"description\":\"X position.\",\"type\":\"integer\"},\"position_y\":{\"description\":\"Y position.\",\"type\":\"integer\"},\"title\":{\"description\":\"Note title.\",\"type\":\"string\"},\"uuid\":{\"description\":\"Optional on create: client-generated UUID. If supplied, later operations in the same batch can reference it. Do not put create UUIDs in operation.uuid; operation.uuid is only the update/delete target.\",\"type\":\"string\"},\"width\":{\"description\":\"Width.\",\"type\":\"integer\"}},\"title\":\"note data\",\"type\":\"object\"}],\"type\":\"object\"},\"op\":{\"description\":\"Operation. For create, put any new UUID in data.uuid; for update/delete, put target UUID in operation.uuid.\",\"enum\":[\"create\",\"update\",\"delete\"],\"type\":\"string\"},\"type\":{\"description\":\"ERD entity type. This selects the operation.data shape.\",\"enum\":[\"table\",\"column\",\"index\",\"index_column\",\"ref\",\"ref_column\",\"enum\",\"enum_value\",\"table_group\",\"table_group_table\",\"table_group_note\",\"filter\",\"note\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Target UUID for update/delete. Do not use this for create; use data.uuid instead.\",\"type\":\"string\"}},\"required\":[\"op\",\"type\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"description\",\"operations\"],\"type\":\"object\"},\"required\":[\"description\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"dd64d1f996060ab1\"},\n {\"mcpName\":\"mcp__ainecto__erd_arrange_tables\",\"commandPath\":[\"erd\",\"arrange-tables\"],\"group\":\"erd\",\"description\":\"Arrange ERD tables after edits. Default incremental mode places newly-created tables while preserving existing positions; full=true re-layouts the entire diagram. Use after several separate table edits to tidy the canvas.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"full\":{\"description\":\"Re-layout the ENTIRE diagram (overwrites existing positions). Default false = arrange only newly-added (uncoordinated) tables to the top-right while preserving existing table positions. Call this after creating several tables to tidy them up.\",\"type\":\"boolean\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"d2e66548e3d60d30\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_enum\",\"commandPath\":[\"erd\",\"get-enum\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"enumUuid\":{\"description\":\"Enum UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"enumUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"enumUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1e477b3fadb50c6b\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_ref\",\"commandPath\":[\"erd\",\"get-ref\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"refUuid\":{\"description\":\"Relationship UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"refUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"refUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"40bf1eb02e7a9730\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table\",\"commandPath\":[\"erd\",\"get-table\"],\"group\":\"erd\",\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"inputSchema\":{\"description\":\"Get one ERD table with nested columns and indexes. Returns persistent table/column/index UUIDs usable directly as mcp__ainecto__erd_apply_changes update/delete targets and ref_column column references. Column fields use apply_changes snake_case names: uuid, table_uuid, name, type, is_pk, is_unique, is_not_null, is_increment, default_value, note, display_order. Index fields include uuid, name, columns (column UUIDs), is_unique, is_pk, type.\",\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableUuid\":{\"description\":\"Table UUID. Response includes columns[] and indexes[] with persistent UUIDs for apply_changes.\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"8edd40794f39f47a\"},\n {\"mcpName\":\"mcp__ainecto__erd_get_table_group\",\"commandPath\":[\"erd\",\"get-table-group\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"},\"tableGroupUuid\":{\"description\":\"Table group UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"tableGroupUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"bcd417344639c0c9\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_enums\",\"commandPath\":[\"erd\",\"list-enums\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e0c2207905dbb068\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_refs\",\"commandPath\":[\"erd\",\"list-refs\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9ae2e04c310b57f2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_table_groups\",\"commandPath\":[\"erd\",\"list-table-groups\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"dc8811071df04ac2\"},\n {\"mcpName\":\"mcp__ainecto__erd_list_tables\",\"commandPath\":[\"erd\",\"list-tables\"],\"group\":\"erd\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"ERD document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ca05b35b174fc209\"},\n {\"mcpName\":\"mcp__ainecto__get_attachment\",\"commandPath\":[\"attachment\",\"get\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Attachment UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"12bee70f6d254a5d\"},\n {\"mcpName\":\"mcp__ainecto__get_document\",\"commandPath\":[\"document\",\"get\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4949c8a5bb425491\"},\n {\"mcpName\":\"mcp__ainecto__get_project\",\"commandPath\":[\"project\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b4ee9097f4b80df4\"},\n {\"mcpName\":\"mcp__ainecto__get_version\",\"commandPath\":[\"version\",\"get\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"versionNumber\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ad81d04200d3d7f5\"},\n {\"mcpName\":\"mcp__ainecto__get_workspace\",\"commandPath\":[\"workspace\",\"get\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"required\":[\"uuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ef7bae555463116e\"},\n {\"mcpName\":\"mcp__ainecto__list_attachments\",\"commandPath\":[\"attachments\",\"list\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a75657bb2e5eb383\"},\n {\"mcpName\":\"mcp__ainecto__list_documents\",\"commandPath\":[\"documents\",\"list\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"folderUuid\":{\"description\":\"Optional folder UUID\",\"type\":\"string\"},\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"},\"q\":{\"description\":\"Optional full-text query. When provided, results come from the search index instead of folder listing.\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e5d92431322ac0e3\"},\n {\"mcpName\":\"mcp__ainecto__list_folders\",\"commandPath\":[\"folders\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectUuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"projectUuid\"],\"type\":\"object\"},\"required\":[\"projectUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f3cde57fe87d375c\"},\n {\"mcpName\":\"mcp__ainecto__list_projects\",\"commandPath\":[\"projects\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"Result cap when q is set (default 50)\",\"type\":\"integer\"},\"q\":{\"description\":\"Optional full-text query\",\"type\":\"string\"},\"workspaceUuid\":{\"description\":\"Optional Workspace UUID\",\"type\":\"string\"}},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9174d6965d7e53f5\"},\n {\"mcpName\":\"mcp__ainecto__list_trash\",\"commandPath\":[\"trash\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"82f8586d68bfcd7d\"},\n {\"mcpName\":\"mcp__ainecto__list_versions\",\"commandPath\":[\"versions\",\"list\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"370e4b8b8ec18e18\"},\n {\"mcpName\":\"mcp__ainecto__list_workspaces\",\"commandPath\":[\"workspaces\",\"list\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{},\"type\":\"object\"},\"required\":[],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7c32c74000696b2f\"},\n {\"mcpName\":\"mcp__ainecto__markdown_append_document\",\"commandPath\":[\"markdown\",\"append-document\"],\"group\":\"markdown\",\"description\":\"Append to Markdown documents. If the appended body is tens of KB or more, prefer request_upload_token (purpose=document.append) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Appends\",\"items\":{\"properties\":{\"addition\":{\"description\":\"Body addition. 추가할 내용이 크면 (수십 KB 이상) LLM 토큰 절약을 위해 `request_upload_token (purpose=document.append, scopeJson={documentUuid, separator})` 로 uploadUrl 을 받고 curl 로 PUT 으로 보낼 것.\",\"type\":\"string\"},\"separator\":{\"description\":\"Separator between existing body and addition\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"addition\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f189514b3cccd1cc\"},\n {\"mcpName\":\"mcp__ainecto__markdown_generate_document\",\"commandPath\":[\"markdown\",\"generate-document\"],\"group\":\"markdown\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Generation requests\",\"items\":{\"properties\":{\"context\":{\"description\":\"Optional JSON context\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Target document UUID\",\"type\":\"string\"},\"prompt\":{\"description\":\"Generation prompt\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"prompt\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"72114a2d2642ed92\"},\n {\"mcpName\":\"mcp__ainecto__move_documents\",\"commandPath\":[\"documents\",\"move\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"clientMutationId\":{\"description\":\"Optional mutation identifier for client retry tracing\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newFolderUuid\":{\"description\":\"New folder UUID — null/empty for root\",\"type\":\"string\"},\"targetProjectUuid\":{\"description\":\"Target project UUID — omit to stay in current project\",\"type\":\"string\"},\"targetWorkspaceUuid\":{\"description\":\"Guard only: must match targetProjectUuid workspace\",\"type\":\"string\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"9758d6a262913a3f\"},\n {\"mcpName\":\"mcp__ainecto__move_folders\",\"commandPath\":[\"folders\",\"move\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Moves\",\"items\":{\"properties\":{\"newParentFolderUuid\":{\"description\":\"New parent UUID — null/empty for root\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"612a779b1fd176bb\"},\n {\"mcpName\":\"mcp__ainecto__request_upload_token\",\"commandPath\":[\"tools\",\"run\",\"request-upload-token\"],\"group\":\"attachment\",\"description\":\"Use this for large payloads of tens of KB or more to save LLM tokens. purpose=mcp.call returns a short-lived bearer token that can call any MCP tool, including mcp__ainecto__erd_apply_changes, via curl. purpose=document.create/update/append uploads document bodies directly to the upload endpoint with PUT/curl. Tokens are reusable for 5 minutes by default.\",\"inputSchema\":{\"properties\":{\"maxBytes\":{\"description\":\"최대 업로드 byte (서버 측 한도)\",\"type\":\"integer\"},\"purpose\":{\"description\":\"Token 용도. `mcp.call` 은 curl 로 /mcp 호출, `document.create/update/append` 는 PUT body 로 본문 업로드, `attachment.upload` 는 파일 bytes 업로드. 콘텐츠가 크면 (수십 KB 이상) LLM 토큰 절약을 위해 이 도구로 5분 재사용 토큰을 받고 curl 로 보내는 것을 강력 권장.\",\"enum\":[\"mcp.call\",\"document.create\",\"document.update\",\"document.append\",\"attachment.upload\"],\"type\":\"string\"},\"scopeJson\":{\"description\":\"선택 — JSON scope. document.create 는 projectUuid, type, title 을 포함하고 enabled type values 는 erd, diagram, markdown, testcase, task. document.update/document.append 는 documentUuid 를 포함. attachment.upload: {documentUuid, filename, contentType?, sizeBytes?}; storageKey 는 서버가 발급 scope 에 추가.\",\"type\":\"string\"},\"ttlSeconds\":{\"description\":\"TTL (초). 기본 300 (5분)\",\"type\":\"integer\"}},\"required\":[\"purpose\"],\"type\":\"object\"},\"required\":[\"purpose\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"cc5db0cc4a9d9603\"},\n {\"mcpName\":\"mcp__ainecto__restore_versions\",\"commandPath\":[\"versions\",\"restore\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Restores\",\"items\":{\"properties\":{\"documentUuid\":{\"description\":\"Document UUID\",\"type\":\"string\"},\"versionNumber\":{\"description\":\"Version number to restore\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"versionNumber\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"c4f448cc3b96c7a6\"},\n {\"mcpName\":\"mcp__ainecto__search_documents\",\"commandPath\":[\"documents\",\"search\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"limit\":{\"description\":\"결과 개수 (기본 20, 최대 50)\",\"type\":\"integer\"},\"offset\":{\"description\":\"페이지네이션 offset (기본 0)\",\"type\":\"integer\"},\"projectUuid\":{\"description\":\"특정 프로젝트로 한정 (선택)\",\"type\":\"string\"},\"q\":{\"description\":\"검색 키워드\",\"type\":\"string\"},\"type\":{\"description\":\"Optional document type filter. Enabled values: erd, diagram, markdown, testcase, task.\",\"enum\":[\"erd\",\"diagram\",\"markdown\",\"testcase\",\"task\"],\"type\":\"string\"}},\"required\":[\"q\"],\"type\":\"object\"},\"required\":[\"q\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"89efa02eab3c01a1\"},\n {\"mcpName\":\"mcp__ainecto__task_apply_changes\",\"commandPath\":[\"task\",\"apply-changes\"],\"group\":\"task\",\"description\":\"Task CUD entry point. Applies one atomic batch using operation objects shaped exactly as {op, uuid, data}. There is no partial success mode; any validation failure aborts the whole batch.\",\"inputSchema\":{\"examples\":[{\"baseRevision\":1,\"clientMutationId\":\"task-mutation-1\",\"documentUuid\":\"task-document-uuid\",\"operations\":[{\"data\":{\"parentTaskUuid\":null,\"title\":\"Task title\"},\"op\":\"create_task\",\"uuid\":\"client-task-uuid\"}]}],\"properties\":{\"baseRevision\":{\"description\":\"Current board revision from task_get_snapshot\",\"type\":\"integer\"},\"clientMutationId\":{\"description\":\"Optional idempotency key. Visible ASCII, 1-128 chars; will become required in a later phase.\",\"maxLength\":128,\"minLength\":1,\"pattern\":\"^[\\\\x21-\\\\x7E]{1,128}$\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"operations\":{\"description\":\"Atomic batch. No partial success mode; validation failure aborts all operations.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"data\":{\"description\":\"Operation payload. Keep all operation-specific fields inside data.\",\"type\":\"object\"},\"op\":{\"description\":\"Operation type\",\"enum\":[\"create_task\",\"update_task\",\"archive_task\",\"restore_task\",\"move_task\",\"transition_task\",\"assign_task\",\"schedule_task\",\"set_progress\"],\"type\":\"string\"},\"uuid\":{\"description\":\"Task UUID. For create_task this is the client-generated UUID.\",\"type\":\"string\"}},\"required\":[\"op\",\"uuid\",\"data\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"documentUuid\",\"baseRevision\",\"operations\"],\"type\":\"object\"},\"required\":[\"baseRevision\",\"documentUuid\",\"operations\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"085eb6e8a3eae2c8\"},\n {\"mcpName\":\"mcp__ainecto__task_get_snapshot\",\"commandPath\":[\"task\",\"get-snapshot\"],\"group\":\"task\",\"description\":\"Get one Task document snapshot. Returns board revision, statuses, tasks, member summaries, and permissions. Use before mutations to obtain baseRevision.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"includeArchived\":{\"description\":\"Whether to include archived tasks\",\"type\":\"boolean\"},\"limit\":{\"description\":\"Maximum tasks to return; defaults to server snapshot cap\",\"type\":\"integer\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a11876f9b475338a\"},\n {\"mcpName\":\"mcp__ainecto__task_get_task\",\"commandPath\":[\"task\",\"get-task\"],\"group\":\"task\",\"description\":\"Get one task by UUID from a Task document.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"taskUuid\":{\"description\":\"Task UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"taskUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\",\"taskUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"96b1ea530c583337\"},\n {\"mcpName\":\"mcp__ainecto__task_list_statuses\",\"commandPath\":[\"task\",\"list-statuses\"],\"group\":\"task\",\"description\":\"List statuses for a Task document. Status slug is intentionally not returned.\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"864ea509c54fe2e7\"},\n {\"mcpName\":\"mcp__ainecto__task_list_tasks\",\"commandPath\":[\"task\",\"list-tasks\"],\"group\":\"task\",\"description\":\"List tasks in a Task document with optional parent/status/assignee filters.\",\"inputSchema\":{\"properties\":{\"assigneeUserId\":{\"description\":\"Optional assignee user id filter\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Task document UUID\",\"type\":\"string\"},\"includeArchived\":{\"description\":\"Whether to include archived tasks\",\"type\":\"boolean\"},\"limit\":{\"description\":\"Maximum tasks to return\",\"type\":\"integer\"},\"parentTaskUuid\":{\"description\":\"Optional parent filter\",\"type\":\"string\"},\"statusUuid\":{\"description\":\"Optional status filter\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"be8dc0a4ecd117a8\"},\n {\"mcpName\":\"mcp__ainecto__testcase_archive_scenarios\",\"commandPath\":[\"testcase\",\"archive-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Scenario ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a5a8768d14ebaed7\"},\n {\"mcpName\":\"mcp__ainecto__testcase_complete_runs\",\"commandPath\":[\"testcase\",\"complete-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Run ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"84bc3dad482ac61a\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_runs\",\"commandPath\":[\"testcase\",\"create-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Runs\",\"items\":{\"properties\":{\"buildVersion\":{\"description\":\"Build version\",\"type\":\"string\"},\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"environment\":{\"description\":\"Environment\",\"type\":\"string\"},\"name\":{\"description\":\"Run name\",\"type\":\"string\"},\"projectId\":{\"description\":\"Project id\",\"type\":\"integer\"},\"testAccount\":{\"description\":\"SUT test account\",\"type\":\"string\"},\"testCaseIds\":{\"description\":\"Test case ids to attach\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"projectId\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"6a08117c79f589a1\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_scenarios\",\"commandPath\":[\"testcase\",\"create-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Scenarios\",\"items\":{\"properties\":{\"description\":{\"description\":\"Description\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"},\"name\":{\"description\":\"Scenario name\",\"type\":\"string\"},\"parentId\":{\"description\":\"Parent scenario id\",\"type\":\"integer\"}},\"required\":[\"documentUuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4686fd0f078a65e8\"},\n {\"mcpName\":\"mcp__ainecto__testcase_create_testcases\",\"commandPath\":[\"testcase\",\"create-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Testcases\",\"items\":{\"properties\":{\"assigneeId\":{\"description\":\"Assignee user id\",\"type\":\"string\"},\"expectedResult\":{\"description\":\"Expected result\",\"type\":\"string\"},\"precondition\":{\"description\":\"Precondition\",\"type\":\"string\"},\"priority\":{\"description\":\"Priority\",\"enum\":[\"LOW\",\"MEDIUM\",\"HIGH\",\"CRITICAL\"],\"type\":\"string\"},\"scenarioId\":{\"description\":\"Scenario id (required)\",\"type\":\"integer\"},\"source\":{\"description\":\"Source\",\"enum\":[\"MANUAL\",\"AI\",\"IMPORT\",\"MCP\"],\"type\":\"string\"},\"status\":{\"description\":\"Status\",\"enum\":[\"DRAFT\",\"READY\",\"DEPRECATED\"],\"type\":\"string\"},\"tags\":{\"description\":\"Tags\",\"type\":\"string\"},\"testAccount\":{\"description\":\"SUT test account\",\"type\":\"string\"},\"title\":{\"description\":\"Title\",\"type\":\"string\"},\"type\":{\"description\":\"Type\",\"enum\":[\"FUNCTIONAL\",\"REGRESSION\",\"SMOKE\",\"PERFORMANCE\",\"SECURITY\",\"E2E\",\"UNIT\",\"INTEGRATION\"],\"type\":\"string\"}},\"required\":[\"scenarioId\",\"title\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ae90d4749debacf0\"},\n {\"mcpName\":\"mcp__ainecto__testcase_delete_runs\",\"commandPath\":[\"testcase\",\"delete-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Run ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"1ba26baf794bde57\"},\n {\"mcpName\":\"mcp__ainecto__testcase_delete_testcases\",\"commandPath\":[\"testcase\",\"delete-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Testcase ids\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ab095f553bf46937\"},\n {\"mcpName\":\"mcp__ainecto__testcase_get_run\",\"commandPath\":[\"testcase\",\"get-run\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"id\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"required\":[\"id\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"713c83514cf07d68\"},\n {\"mcpName\":\"mcp__ainecto__testcase_get_testcase\",\"commandPath\":[\"testcase\",\"get-testcase\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"id\":{\"description\":\"Testcase id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"required\":[\"id\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"54e497a2e3c9978d\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_executions\",\"commandPath\":[\"testcase\",\"list-executions\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\"],\"type\":\"object\"},\"required\":[\"runId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"a5a2abcf9e43225e\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_runs\",\"commandPath\":[\"testcase\",\"list-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"projectId\":{\"description\":\"Project id\",\"type\":\"integer\"}},\"required\":[\"projectId\"],\"type\":\"object\"},\"required\":[\"projectId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b7d5275b67bb11d9\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_scenarios\",\"commandPath\":[\"testcase\",\"list-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"2486ade3c9cb0984\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_step_checks\",\"commandPath\":[\"testcase\",\"list-step-checks\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"caseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"caseId\"],\"type\":\"object\"},\"required\":[\"caseId\",\"runId\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"f2d5b45c0d64cd5c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_list_testcases\",\"commandPath\":[\"testcase\",\"list-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"documentUuid\":{\"description\":\"Parent testcase document UUID\",\"type\":\"string\"}},\"required\":[\"documentUuid\"],\"type\":\"object\"},\"required\":[\"documentUuid\"],\"payloadMode\":\"flags\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ef40927392d5a684\"},\n {\"mcpName\":\"mcp__ainecto__testcase_record_executions\",\"commandPath\":[\"testcase\",\"record-executions\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Executions\",\"items\":{\"properties\":{\"comment\":{\"description\":\"Comment\",\"type\":\"string\"},\"defectLinks\":{\"description\":\"Defect URLs\",\"type\":\"string\"},\"durationSeconds\":{\"description\":\"Duration in seconds\",\"type\":\"integer\"},\"result\":{\"description\":\"Result\",\"enum\":[\"PASSED\",\"FAILED\",\"BLOCKED\",\"SKIPPED\",\"UNTESTED\",\"IN_PROGRESS\"],\"type\":\"string\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"},\"testAccount\":{\"description\":\"SUT account\",\"type\":\"string\"},\"testCaseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"testCaseId\",\"result\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"071a2075d00bff9b\"},\n {\"mcpName\":\"mcp__ainecto__testcase_remove_run_cases\",\"commandPath\":[\"testcase\",\"remove-run-cases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"},\"testCaseIds\":{\"description\":\"Testcase ids to remove\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"runId\",\"testCaseIds\"],\"type\":\"object\"},\"required\":[\"runId\",\"testCaseIds\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7aef8a39afe88c5c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_reorder_scenarios\",\"commandPath\":[\"testcase\",\"reorder-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Scenario ids in new order\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7faf43a0b53c2988\"},\n {\"mcpName\":\"mcp__ainecto__testcase_reorder_testcases\",\"commandPath\":[\"testcase\",\"reorder-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"ids\":{\"description\":\"Testcase ids in new order\",\"items\":{\"type\":\"integer\"},\"type\":\"array\"}},\"required\":[\"ids\"],\"type\":\"object\"},\"required\":[\"ids\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"5f27d8b94aca5334\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_runs\",\"commandPath\":[\"testcase\",\"update-runs\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"buildVersion\":{\"description\":\"New build version\",\"type\":\"string\"},\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"environment\":{\"description\":\"New environment\",\"type\":\"string\"},\"id\":{\"description\":\"Run id\",\"type\":\"integer\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"status\":{\"description\":\"New status\",\"enum\":[\"DRAFT\",\"IN_PROGRESS\",\"COMPLETED\",\"CANCELLED\"],\"type\":\"string\"},\"testAccount\":{\"description\":\"New SUT account\",\"type\":\"string\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"370074b6681d495f\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_scenarios\",\"commandPath\":[\"testcase\",\"update-scenarios\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"id\":{\"description\":\"Scenario id\",\"type\":\"integer\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"parentId\":{\"description\":\"New parent id\",\"type\":\"integer\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"929c8647c06c5fdd\"},\n {\"mcpName\":\"mcp__ainecto__testcase_update_testcases\",\"commandPath\":[\"testcase\",\"update-testcases\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"assigneeId\":{\"description\":\"Assignee\",\"type\":\"string\"},\"expectedResult\":{\"description\":\"New expected result\",\"type\":\"string\"},\"id\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"precondition\":{\"description\":\"New precondition\",\"type\":\"string\"},\"priority\":{\"description\":\"Priority\",\"enum\":[\"LOW\",\"MEDIUM\",\"HIGH\",\"CRITICAL\"],\"type\":\"string\"},\"scenarioId\":{\"description\":\"New scenario id\",\"type\":\"integer\"},\"status\":{\"description\":\"Status\",\"enum\":[\"DRAFT\",\"READY\",\"DEPRECATED\"],\"type\":\"string\"},\"tags\":{\"description\":\"Tags\",\"type\":\"string\"},\"testAccount\":{\"description\":\"SUT account\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"type\":{\"description\":\"Type\",\"enum\":[\"FUNCTIONAL\",\"REGRESSION\",\"SMOKE\",\"PERFORMANCE\",\"SECURITY\",\"E2E\",\"UNIT\",\"INTEGRATION\"],\"type\":\"string\"}},\"required\":[\"id\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"b562a7b860f6036c\"},\n {\"mcpName\":\"mcp__ainecto__testcase_upsert_step_checks\",\"commandPath\":[\"testcase\",\"upsert-step-checks\"],\"group\":\"testcase\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"caseId\":{\"description\":\"Testcase id\",\"type\":\"integer\"},\"items\":{\"description\":\"Step checks\",\"items\":{\"properties\":{\"checked\":{\"description\":\"Checked state\",\"type\":\"boolean\"},\"comment\":{\"description\":\"Per-step note\",\"type\":\"string\"},\"stepId\":{\"description\":\"TestStep id\",\"type\":\"integer\"}},\"required\":[\"stepId\",\"checked\"],\"type\":\"object\"},\"type\":\"array\"},\"runId\":{\"description\":\"Run id\",\"type\":\"integer\"}},\"required\":[\"runId\",\"caseId\",\"items\"],\"type\":\"object\"},\"required\":[\"caseId\",\"items\",\"runId\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"ac5768125a9fd15c\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_documents\",\"commandPath\":[\"documents\",\"unarchive\"],\"group\":\"document\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Document UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"4aae7df04fba8779\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_folders\",\"commandPath\":[\"folders\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Folder UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"e307cab0ebafd179\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_projects\",\"commandPath\":[\"projects\",\"unarchive\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Project UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"15ea4a409d1549de\"},\n {\"mcpName\":\"mcp__ainecto__unarchive_workspaces\",\"commandPath\":[\"workspaces\",\"unarchive\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"uuids\":{\"description\":\"Workspace UUIDs\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"uuids\"],\"type\":\"object\"},\"required\":[\"uuids\"],\"payloadMode\":\"file-json\",\"destructive\":true,\"sourceCatalog\":\"dev\",\"schemaHash\":\"641de5b64ec75ab2\"},\n {\"mcpName\":\"mcp__ainecto__update_documents\",\"commandPath\":[\"documents\",\"update\"],\"group\":\"document\",\"description\":\"Update documents. If a replacement body is tens of KB or more, prefer request_upload_token (purpose=document.update) and upload the body with curl.\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"body\":{\"description\":\"Deprecated compatibility alias for typePayload.body when document type is markdown. 본문이 수십 KB 이상으로 크면 LLM 토큰 절약을 위해 `request_upload_token (purpose=document.update)` 를 호출해 uploadUrl 을 받고 curl 로 직접 PUT 으로 보낼 것.\",\"type\":\"string\"},\"title\":{\"description\":\"New title\",\"type\":\"string\"},\"typePayload\":{\"description\":\"Type-specific payload for enabled document types. markdown: {body}; diagram: {diagramSource,sourceLanguage,edgeStyle,isModule,metadata}; testcase: {defaultEnvironment (max 50 chars), defaultTestAccount (max 100 chars)}; task: no typePayload; board and default statuses are seeded automatically.\",\"type\":\"object\"},\"uuid\":{\"description\":\"Document UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"778908eec43aba81\"},\n {\"mcpName\":\"mcp__ainecto__update_folders\",\"commandPath\":[\"folders\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Folder UUID\",\"type\":\"string\"}},\"required\":[\"uuid\",\"name\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"7bef3b4702df1f00\"},\n {\"mcpName\":\"mcp__ainecto__update_projects\",\"commandPath\":[\"projects\",\"update\"],\"group\":\"generic\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Project UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"10cc0d84aeb2192b\"},\n {\"mcpName\":\"mcp__ainecto__update_workspaces\",\"commandPath\":[\"workspaces\",\"update\"],\"group\":\"workspace\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Updates\",\"items\":{\"properties\":{\"description\":{\"description\":\"New description\",\"type\":\"string\"},\"name\":{\"description\":\"New name\",\"type\":\"string\"},\"uuid\":{\"description\":\"Workspace UUID\",\"type\":\"string\"}},\"required\":[\"uuid\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"file-json\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"723e4f6d36ee9d02\"},\n {\"mcpName\":\"mcp__ainecto__upload_attachments\",\"commandPath\":[\"tools\",\"run\",\"upload-attachments\"],\"group\":\"attachment\",\"description\":\"\",\"inputSchema\":{\"properties\":{\"items\":{\"description\":\"Attachments to register\",\"items\":{\"properties\":{\"contentType\":{\"description\":\"MIME type\",\"type\":\"string\"},\"documentUuid\":{\"description\":\"Parent document UUID\",\"type\":\"string\"},\"filename\":{\"description\":\"Original file name\",\"type\":\"string\"},\"sizeBytes\":{\"description\":\"Size in bytes\",\"type\":\"integer\"},\"storageKey\":{\"description\":\"Storage key returned by request_upload_token purpose=attachment.upload\",\"type\":\"string\"}},\"required\":[\"documentUuid\",\"filename\",\"storageKey\"],\"type\":\"object\"},\"type\":\"array\"}},\"required\":[\"items\"],\"type\":\"object\"},\"required\":[\"items\"],\"payloadMode\":\"binary-upload\",\"destructive\":false,\"sourceCatalog\":\"dev\",\"schemaHash\":\"0622e590de3404dd\"},\n] satisfies GeneratedToolDefinition[];\n","import { generatedTools as prodTools } from \"./generated.prod\";\nimport { generatedTools as devTools } from \"./generated.dev\";\nimport type { AinectoEnv } from \"../config/endpoints\";\n\nexport function getGeneratedTools(env: AinectoEnv) {\n return env === \"dev\" ? devTools : prodTools;\n}\n","import { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { McpRpcClient, type JsonRpcRequest } from \"./rpcClient\";\n\nexport interface StdioBridgeOptions {\n input: Readable;\n output: Writable;\n errorOutput: Writable;\n client: McpRpcClient;\n}\n\nexport async function runStdioBridge(options: StdioBridgeOptions): Promise<void> {\n const lines = createInterface({ input: options.input, crlfDelay: Infinity });\n\n for await (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n try {\n const request = parseJsonRpcRequest(line);\n const response = await options.client.sendRaw(request);\n if (response && request.id !== undefined) {\n options.output.write(`${JSON.stringify(response)}\\n`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n options.output.write(`${JSON.stringify({\n jsonrpc: \"2.0\",\n id: null,\n error: { code: -32603, message },\n })}\\n`);\n }\n }\n}\n\nfunction parseJsonRpcRequest(line: string): JsonRpcRequest {\n const parsed = JSON.parse(line) as unknown;\n if (!isRecord(parsed) || parsed.jsonrpc !== \"2.0\" || typeof parsed.method !== \"string\") {\n throw new Error(\"Invalid JSON-RPC request.\");\n }\n return {\n jsonrpc: \"2.0\",\n id: typeof parsed.id === \"string\" || typeof parsed.id === \"number\" || parsed.id === null ? parsed.id : undefined,\n method: parsed.method,\n params: parsed.params,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { FileTokenStore } from \"../../core/auth/tokenStore\";\nimport { OAuthClient } from \"../../core/auth/oauth\";\nimport { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport { runStdioBridge } from \"../../core/mcp/stdioBridge\";\nimport type { HarnessRole } from \"../../core/harness/role\";\nimport type { Readable, Writable } from \"node:stream\";\n\nexport interface ConnectorOptions {\n endpoint: string;\n role?: HarnessRole;\n input: Readable;\n output: Writable;\n errorOutput: Writable;\n}\n\nexport async function runConnector(options: ConnectorOptions): Promise<void> {\n const tokenStore = new FileTokenStore();\n // ★브리지도 «역할별» 토큰을 써야 한다. 여기에 역할을 안 넘기면 역할별로 로그인해 둔\n // 자격증명을 못 찾고, 남아 있는 무역할 토큰을 집는다 — 제한이 조용히 풀린다\n // (2026-09-23 독립 재리뷰 C2. RPC 클라이언트에는 넘기고 여기만 빠뜨렸다).\n const auth = new OAuthClient({ endpoint: options.endpoint, tokenStore, role: options.role });\n const client = new McpRpcClient({\n endpoint: options.endpoint,\n tokenProvider: auth,\n role: options.role,\n });\n await runStdioBridge({\n input: options.input,\n output: options.output,\n errorOutput: options.errorOutput,\n client,\n });\n}\n","import type { ToolPresentationEnrichment } from \"./types\";\n\nexport const enrichments = [\n {\n mcpName: \"mcp__ainecto__list_projects\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"projectKey\", \"workspaceUuid\", \"updatedAt\"],\n displayName: \"List projects\",\n examples: [\"ainecto projects list --env dev\"],\n },\n {\n mcpName: \"mcp__ainecto__list_workspaces\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"updatedAt\"],\n displayName: \"List workspaces\",\n },\n {\n mcpName: \"mcp__ainecto__list_folders\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"projectUuid\", \"parentFolderUuid\", \"updatedAt\"],\n displayName: \"List folders\",\n },\n {\n mcpName: \"mcp__ainecto__list_documents\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"type\", \"projectUuid\", \"folderUuid\", \"updatedAt\"],\n displayName: \"List documents\",\n },\n {\n mcpName: \"mcp__ainecto__search_documents\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"type\", \"projectUuid\", \"updatedAt\"],\n displayName: \"Search documents\",\n },\n {\n mcpName: \"mcp__ainecto__list_attachments\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"filename\", \"contentType\", \"sizeBytes\", \"documentUuid\"],\n displayName: \"List attachments\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_tables\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"schema_name\", \"display_order\"],\n displayName: \"List ERD tables\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_refs\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"from_table_uuid\", \"to_table_uuid\", \"relationship\"],\n displayName: \"List ERD refs\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_enums\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"display_order\"],\n displayName: \"List ERD enums\",\n },\n {\n mcpName: \"mcp__ainecto__erd_list_table_groups\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"display_order\"],\n displayName: \"List ERD table groups\",\n },\n {\n mcpName: \"mcp__ainecto__task_list_tasks\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"title\", \"statusUuid\", \"assigneeId\", \"updatedAt\"],\n displayName: \"List tasks\",\n },\n {\n mcpName: \"mcp__ainecto__task_list_statuses\",\n outputHint: \"table\",\n tableColumns: [\"uuid\", \"name\", \"displayOrder\"],\n displayName: \"List task statuses\",\n },\n {\n mcpName: \"mcp__ainecto__enable_shares\",\n aliases: [\"shares enable\"],\n displayName: \"Enable shares\",\n },\n {\n mcpName: \"mcp__ainecto__disable_shares\",\n aliases: [\"shares disable\"],\n displayName: \"Disable shares\",\n },\n] satisfies ToolPresentationEnrichment[];\n","export interface TableOptions {\n columns?: string[];\n}\n\nexport function renderTable(data: unknown, options: TableOptions = {}): string | undefined {\n const rows = extractRows(data);\n if (!rows.length || !rows.every(isRecord)) {\n return undefined;\n }\n\n const columns = options.columns?.length ? options.columns : inferColumns(rows);\n if (!columns.length) {\n return undefined;\n }\n\n const widths = columns.map((column) => Math.max(column.length, ...rows.map((row) => formatCell(row[column]).length)));\n const header = columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(\" \");\n const divider = widths.map((width) => \"-\".repeat(width)).join(\" \");\n const body = rows.map((row) => columns.map((column, index) => formatCell(row[column]).padEnd(widths[index] ?? column.length)).join(\" \"));\n\n return [header, divider, ...body].join(\"\\n\");\n}\n\nfunction extractRows(data: unknown): unknown[] {\n if (Array.isArray(data)) {\n return data;\n }\n if (isRecord(data)) {\n for (const key of [\"items\", \"projects\", \"workspaces\", \"folders\", \"documents\", \"tasks\", \"attachments\", \"results\", \"data\"]) {\n const value = data[key];\n if (Array.isArray(value)) {\n return value;\n }\n }\n }\n return [];\n}\n\nfunction inferColumns(rows: Record<string, unknown>[]): string[] {\n const preferred = [\"uuid\", \"id\", \"name\", \"title\", \"status\", \"type\", \"projectUuid\", \"documentUuid\", \"createdAt\", \"updatedAt\"];\n const keys = new Set(rows.flatMap((row) => Object.keys(row)));\n const columns = preferred.filter((key) => keys.has(key));\n if (columns.length > 0) {\n return columns.slice(0, 6);\n }\n return [...keys].slice(0, 6);\n}\n\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export class CliCommandError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n","import type { GeneratedToolDefinition, JsonSchema } from \"../../core/catalog/types\";\nimport { parsePayloadSource, type ParsedPayload } from \"../../core/input/payloadSource\";\nimport { CliCommandError } from \"./errors\";\n\nexport interface ParsedCommandArgs {\n args: Record<string, unknown>;\n yes: boolean;\n warnings: string[];\n}\n\nexport async function parseGeneratedCommandArgs(\n tool: GeneratedToolDefinition,\n argv: string[],\n stdin: NodeJS.ReadStream,\n): Promise<ParsedCommandArgs> {\n const parsed = parseArgv(argv);\n const payload = await parsePayload(tool, parsed, stdin);\n const args = payloadToArgs(payload.value);\n const properties = getSchemaProperties(tool.inputSchema);\n\n for (const [key, value] of Object.entries(parsed.flags)) {\n if (key === \"yes\") {\n continue;\n }\n const schemaKey = resolveSchemaKey(key, properties);\n if (!schemaKey) {\n throw new CliCommandError(\"UNKNOWN_FLAG\", `Unknown flag --${key} for ${tool.commandPath.join(\" \")}.`, {\n flag: key,\n mcpName: tool.mcpName,\n });\n }\n args[schemaKey] = coerceFlagValue(value, properties[schemaKey], schemaKey);\n }\n\n for (const required of tool.required) {\n if (args[required] === undefined || args[required] === \"\") {\n throw new CliCommandError(\"MISSING_REQUIRED_FLAG\", `Missing required argument \"${required}\" for ${tool.commandPath.join(\" \")}.`, {\n required,\n flag: `--${camelToKebab(required)}`,\n mcpName: tool.mcpName,\n });\n }\n }\n\n return {\n args,\n yes: parsed.yes,\n warnings: payload.warnings,\n };\n}\n\nfunction payloadToArgs(value: unknown): Record<string, unknown> {\n if (value === undefined || value === null) {\n return {};\n }\n if (!isRecord(value)) {\n throw new CliCommandError(\"INVALID_PAYLOAD\", \"Generated command payload must be a JSON object.\", { value });\n }\n return { ...value };\n}\n\ninterface ParsedArgv {\n flags: Record<string, string | boolean>;\n yes: boolean;\n file?: string;\n inline?: string;\n}\n\nfunction parseArgv(argv: string[]): ParsedArgv {\n const flags: Record<string, string | boolean> = {};\n const inline: string[] = [];\n let file: string | undefined;\n let yes = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--file\" || arg === \"-f\") {\n file = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--yes\" || arg === \"-y\") {\n yes = true;\n flags.yes = true;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const withoutPrefix = arg.slice(2);\n const eqIndex = withoutPrefix.indexOf(\"=\");\n if (eqIndex >= 0) {\n const key = withoutPrefix.slice(0, eqIndex);\n flags[key] = withoutPrefix.slice(eqIndex + 1);\n continue;\n }\n const next = argv[index + 1];\n if (!next || next.startsWith(\"--\")) {\n flags[withoutPrefix] = true;\n continue;\n }\n flags[withoutPrefix] = next;\n index += 1;\n continue;\n }\n inline.push(arg);\n }\n\n return {\n flags,\n yes,\n file,\n inline: inline.length > 0 ? inline.join(\" \") : undefined,\n };\n}\n\nasync function parsePayload(\n tool: GeneratedToolDefinition,\n parsed: ParsedArgv,\n stdin: NodeJS.ReadStream,\n): Promise<ParsedPayload> {\n if (tool.payloadMode === \"file-json\" || parsed.file || parsed.inline) {\n return parsePayloadSource({\n file: parsed.file,\n inline: parsed.inline,\n stdin,\n });\n }\n\n return { value: {}, source: \"empty\", warnings: [] };\n}\n\nfunction resolveSchemaKey(flag: string, properties: Record<string, JsonSchema>): string | undefined {\n if (properties[flag]) {\n return flag;\n }\n const normalized = flag.toLowerCase();\n return Object.keys(properties).find((key) => camelToKebab(key) === normalized);\n}\n\nfunction coerceFlagValue(value: string | boolean, schema: JsonSchema | undefined, key: string): unknown {\n const type = schema?.type;\n if (type === \"boolean\") {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", `Flag \"${key}\" must be a boolean.`, { key, value });\n }\n if (type === \"string\") {\n if (typeof value === \"boolean\") {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `--${camelToKebab(key)} requires a value.`, { key });\n }\n return value;\n }\n if (type === \"integer\") {\n if (typeof value === \"boolean\" || !/^-?\\d+$/.test(value)) {\n const code = typeof value === \"boolean\" ? \"FLAG_REQUIRES_VALUE\" : \"INVALID_FLAG_VALUE\";\n throw new CliCommandError(code, `Flag \"${key}\" must be an integer.`, { key, value });\n }\n return Number.parseInt(value, 10);\n }\n if (type === \"number\") {\n if (typeof value === \"boolean\" || Number.isNaN(Number(value))) {\n const code = typeof value === \"boolean\" ? \"FLAG_REQUIRES_VALUE\" : \"INVALID_FLAG_VALUE\";\n throw new CliCommandError(code, `Flag \"${key}\" must be a number.`, { key, value });\n }\n return Number(value);\n }\n throw new CliCommandError(\"UNSUPPORTED_FLAG_PAYLOAD\", `Flag \"${key}\" is not a scalar field; provide it through --file, stdin, or inline JSON.`, {\n key,\n type,\n });\n}\n\nfunction getSchemaProperties(schema: JsonSchema): Record<string, JsonSchema> {\n const properties = schema.properties;\n if (!isRecord(properties)) {\n return {};\n }\n const result: Record<string, JsonSchema> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (isRecord(value)) {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function camelToKebab(value: string): string {\n return value.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`).toLowerCase();\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `${flag} requires a value.`, { flag });\n }\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { createInterface } from \"node:readline\";\nimport type { GeneratedToolDefinition } from \"../../core/catalog/types\";\nimport { CliCommandError } from \"./errors\";\n\nexport interface ConfirmationIO {\n stdin: NodeJS.ReadStream;\n stderr: NodeJS.WriteStream;\n}\n\nexport async function confirmDestructiveCommand(options: {\n tool: GeneratedToolDefinition;\n yes: boolean;\n json: boolean;\n io: ConfirmationIO;\n}): Promise<void> {\n if (!options.tool.destructive) {\n return;\n }\n if (options.yes) {\n return;\n }\n if (options.json) {\n throw new CliCommandError(\"CONFIRMATION_REQUIRED\", `Destructive command ${options.tool.commandPath.join(\" \")} requires --yes in --json mode.`, {\n mcpName: options.tool.mcpName,\n });\n }\n\n const answer = await promptConfirmation(options.io, `Run destructive command ${options.tool.commandPath.join(\" \")}? Type \"yes\" to continue: `);\n if (answer.trim().toLowerCase() !== \"yes\") {\n throw new CliCommandError(\"CONFIRMATION_DECLINED\", \"Destructive command was not confirmed.\", {\n mcpName: options.tool.mcpName,\n });\n }\n}\n\nasync function promptConfirmation(io: ConfirmationIO, message: string): Promise<string> {\n io.stderr.write(message);\n const rl = createInterface({ input: io.stdin, terminal: false });\n try {\n for await (const line of rl) {\n return line;\n }\n return \"\";\n } finally {\n rl.close();\n }\n}\n","export const ATTACHMENTS_UPLOAD_COMMAND_PATH = [\"attachments\", \"upload\"] as const;\n\nexport const BESPOKE_COMMAND_PATHS = [\n ATTACHMENTS_UPLOAD_COMMAND_PATH,\n] as const;\n","import type { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport type { GeneratedToolDefinition, ToolPresentationEnrichment } from \"../../core/catalog/types\";\nimport { enrichments } from \"../../core/catalog/enrichments\";\nimport { getGeneratedTools } from \"../../core/catalog\";\nimport type { AinectoEnv } from \"../../core/config/endpoints\";\nimport { renderSuccess } from \"../../core/output/render\";\nimport { isToolError } from \"../../core/mcp/rpcClient\";\nimport { renderTable } from \"../../core/output/table\";\nimport { parseGeneratedCommandArgs } from \"./flagParser\";\nimport { confirmDestructiveCommand, type ConfirmationIO } from \"./destructiveConfirmation\";\nimport { BESPOKE_COMMAND_PATHS } from \"./bespokeCommands\";\n\nexport interface GeneratedCommandRoute {\n tool: GeneratedToolDefinition;\n matchedPath: string[];\n rest: string[];\n presentation?: ToolPresentationEnrichment;\n rawContractWarning?: string;\n}\n\nexport interface GeneratedCommandExecutionOptions {\n env: AinectoEnv;\n argv: string[];\n client: McpRpcClient;\n json: boolean;\n io: ConfirmationIO & { stdout: NodeJS.WriteStream };\n}\n\nexport function matchGeneratedCommand(env: AinectoEnv, argv: string[]): GeneratedCommandRoute | undefined {\n const commandTokens = argv.filter((arg) => !arg.startsWith(\"-\"));\n const tools = getGeneratedTools(env);\n const entries = buildRouteEntries(tools, enrichments);\n const match = entries\n .filter((entry) => isPrefix(entry.path, commandTokens))\n .sort((a, b) => b.path.length - a.path.length)[0];\n\n if (!match) {\n return undefined;\n }\n\n const restStart = findRestStart(argv, match.path);\n return {\n tool: match.tool,\n matchedPath: match.path,\n rest: argv.slice(restStart),\n presentation: match.presentation,\n rawContractWarning: match.tool.payloadMode === \"binary-upload\"\n ? \"This generated command uses the raw MCP argument contract only; local file upload semantics are not implemented here.\"\n : undefined,\n };\n}\n\nexport async function executeGeneratedCommand(options: GeneratedCommandExecutionOptions): Promise<number> {\n const route = matchGeneratedCommand(options.env, options.argv);\n if (!route) {\n return 2;\n }\n\n const parsed = await parseGeneratedCommandArgs(route.tool, route.rest, options.io.stdin);\n await confirmDestructiveCommand({\n tool: route.tool,\n yes: parsed.yes,\n json: options.json,\n io: options.io,\n });\n\n const result = await options.client.toolsCall(route.tool.mcpName, parsed.args);\n const warnings = [...parsed.warnings, ...(route.rawContractWarning ? [route.rawContractWarning] : [])];\n options.io.stdout.write(renderGeneratedResult(result, {\n json: options.json,\n warnings,\n presentation: route.presentation,\n }));\n // ★도구가 «거부»한 것을 성공으로 보고하지 않는다 — 셸 자동화는 exit 코드를 본다.\n return isToolError(result) ? 1 : 0;\n}\n\nexport function assertNoCommandCollisions(env: AinectoEnv): void {\n const entries = buildRouteEntries(getGeneratedTools(env), enrichments);\n const seen = new Map<string, string>();\n for (const entry of entries) {\n const key = entry.path.join(\" \");\n const existing = seen.get(key);\n if (existing) {\n throw new Error(`Command collision for \"${key}\": ${existing} and ${entry.tool.mcpName}`);\n }\n seen.set(key, entry.tool.mcpName);\n }\n for (const commandPath of BESPOKE_COMMAND_PATHS) {\n const command = commandPath.join(\" \");\n const existing = seen.get(command);\n if (existing) {\n throw new Error(`Bespoke command \"${command}\" collides with ${existing}.`);\n }\n }\n}\n\nfunction renderGeneratedResult(\n result: unknown,\n options: {\n json: boolean;\n warnings: string[];\n presentation?: ToolPresentationEnrichment;\n },\n): string {\n if (!options.json && options.presentation?.outputHint === \"table\") {\n const table = renderTable(result, { columns: options.presentation.tableColumns });\n if (table) {\n const warnings = options.warnings.length ? `${options.warnings.map((warning) => `Warning: ${warning}`).join(\"\\n\")}\\n` : \"\";\n return `${warnings}${table}\\n`;\n }\n }\n return renderSuccess(result, { json: options.json, warnings: options.warnings });\n}\n\nfunction buildRouteEntries(\n tools: readonly GeneratedToolDefinition[],\n presentations: readonly ToolPresentationEnrichment[],\n): Array<{ path: string[]; tool: GeneratedToolDefinition; presentation?: ToolPresentationEnrichment }> {\n const byName = new Map(presentations.map((presentation) => [presentation.mcpName, presentation]));\n const entries: Array<{ path: string[]; tool: GeneratedToolDefinition; presentation?: ToolPresentationEnrichment }> = [];\n for (const tool of tools) {\n const presentation = byName.get(tool.mcpName);\n entries.push({ path: tool.commandPath, tool, presentation });\n for (const alias of presentation?.aliases ?? []) {\n entries.push({ path: alias.split(/\\s+/).filter(Boolean), tool, presentation });\n }\n }\n return entries;\n}\n\nfunction isPrefix(prefix: string[], values: string[]): boolean {\n return prefix.every((value, index) => values[index] === value);\n}\n\nfunction findRestStart(argv: string[], commandPath: string[]): number {\n let matched = 0;\n for (let index = 0; index < argv.length; index += 1) {\n if (!argv[index]?.startsWith(\"-\")) {\n if (argv[index] !== commandPath[matched]) {\n return index;\n }\n matched += 1;\n if (matched === commandPath.length) {\n return index + 1;\n }\n }\n }\n return argv.length;\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { McpRpcClient } from \"../mcp/rpcClient\";\n\nexport interface AttachmentUploadFileInput {\n path: string;\n filename?: string;\n contentType?: string;\n}\n\nexport interface UploadAttachmentsInput {\n documentUuid: string;\n files: AttachmentUploadFileInput[];\n maxBytes?: number;\n ttlSeconds?: number;\n requestToolName?: string;\n commitToolName?: string;\n fetchImpl?: typeof fetch;\n onProgress?: (progress: AttachmentUploadProgress) => void;\n}\n\nexport type AttachmentUploadStage = \"token\" | \"put\" | \"register\" | \"done\";\n\nexport interface AttachmentUploadProgress {\n stage: AttachmentUploadStage;\n path: string;\n filename: string;\n index: number;\n total: number;\n}\n\nexport interface RegisteredAttachmentFile {\n path: string;\n documentUuid: string;\n filename: string;\n storageKey: string;\n contentType: string;\n sizeBytes: number;\n registerResult: unknown;\n}\n\nexport interface UploadAttachmentsResult {\n count: number;\n uploaded: RegisteredAttachmentFile[];\n}\n\nexport class AttachmentUploadError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly details?: unknown,\n ) {\n super(message);\n }\n}\n\nexport async function uploadAttachments(\n client: McpRpcClient,\n input: UploadAttachmentsInput,\n): Promise<UploadAttachmentsResult> {\n if (!input.documentUuid.trim()) {\n throw new AttachmentUploadError(\"MISSING_REQUIRED_FLAG\", \"Missing required argument \\\"documentUuid\\\".\", {\n flag: \"--document-uuid\",\n });\n }\n if (input.files.length === 0) {\n throw new AttachmentUploadError(\"MISSING_FILE\", \"Expected at least one file to upload.\");\n }\n\n const fetchImpl = input.fetchImpl ?? fetch;\n const uploaded: RegisteredAttachmentFile[] = [];\n\n for (let index = 0; index < input.files.length; index += 1) {\n const file = input.files[index];\n if (!file) {\n continue;\n }\n uploaded.push(await uploadSingleAttachment(client, file, {\n documentUuid: input.documentUuid,\n maxBytes: input.maxBytes,\n ttlSeconds: input.ttlSeconds,\n requestToolName: input.requestToolName ?? \"mcp__ainecto__request_upload_token\",\n commitToolName: input.commitToolName ?? \"mcp__ainecto__upload_attachments\",\n fetchImpl,\n onProgress: input.onProgress,\n index,\n total: input.files.length,\n }));\n }\n\n return { count: uploaded.length, uploaded };\n}\n\ninterface SingleUploadContext {\n documentUuid: string;\n maxBytes?: number;\n ttlSeconds?: number;\n requestToolName: string;\n commitToolName: string;\n fetchImpl: typeof fetch;\n onProgress?: (progress: AttachmentUploadProgress) => void;\n index: number;\n total: number;\n}\n\ninterface UploadTokenResponse {\n token: string;\n uploadUrl: string;\n storageKey: string;\n}\n\ninterface UploadPutResponse {\n storageKey: string;\n sizeBytes: number;\n contentType: string;\n}\n\nasync function uploadSingleAttachment(\n client: McpRpcClient,\n file: AttachmentUploadFileInput,\n context: SingleUploadContext,\n): Promise<RegisteredAttachmentFile> {\n const metadata = await readFileMetadata(file);\n emitProgress(context, \"token\", file.path, metadata.filename);\n const uploadToken = await requestUploadToken(client, metadata, context);\n\n emitProgress(context, \"put\", file.path, metadata.filename);\n const putResult = await putAttachmentBytes(uploadToken, metadata, context.fetchImpl);\n validatePutResult(uploadToken, metadata, putResult);\n\n const item = {\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n storageKey: uploadToken.storageKey,\n contentType: putResult.contentType,\n sizeBytes: putResult.sizeBytes,\n };\n\n emitProgress(context, \"register\", file.path, metadata.filename);\n const registerResult = await client.toolsCall(context.commitToolName, { items: [item] });\n\n emitProgress(context, \"done\", file.path, metadata.filename);\n return {\n path: file.path,\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n storageKey: uploadToken.storageKey,\n contentType: putResult.contentType,\n sizeBytes: putResult.sizeBytes,\n registerResult,\n };\n}\n\nasync function readFileMetadata(file: AttachmentUploadFileInput): Promise<{\n bytes: Buffer;\n filename: string;\n contentType: string;\n sizeBytes: number;\n}> {\n const stats = await stat(file.path);\n if (!stats.isFile()) {\n throw new AttachmentUploadError(\"INVALID_FILE\", `Attachment path is not a file: ${file.path}`, { path: file.path });\n }\n const bytes = await readFile(file.path);\n return {\n bytes,\n filename: file.filename ?? basename(file.path),\n contentType: file.contentType ?? detectContentType(file.path),\n sizeBytes: bytes.byteLength,\n };\n}\n\nasync function requestUploadToken(\n client: McpRpcClient,\n metadata: { filename: string; contentType: string; sizeBytes: number },\n context: SingleUploadContext,\n): Promise<UploadTokenResponse> {\n const scopeJson = JSON.stringify({\n documentUuid: context.documentUuid,\n filename: metadata.filename,\n contentType: metadata.contentType,\n sizeBytes: metadata.sizeBytes,\n });\n const requestArgs: Record<string, unknown> = {\n purpose: \"attachment.upload\",\n scopeJson,\n };\n if (context.maxBytes !== undefined) {\n requestArgs.maxBytes = context.maxBytes;\n }\n if (context.ttlSeconds !== undefined) {\n requestArgs.ttlSeconds = context.ttlSeconds;\n }\n\n const response = unwrapMcpToolPayload(await client.toolsCall(context.requestToolName, requestArgs));\n if (!isRecord(response)) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response was not an object.\");\n }\n const token = response.token;\n const uploadUrl = response.uploadUrl;\n const storageKey = response.storageKey;\n if (typeof token !== \"string\" || token.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include token.\");\n }\n if (typeof uploadUrl !== \"string\" || uploadUrl.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include uploadUrl.\");\n }\n if (typeof storageKey !== \"string\" || storageKey.length === 0) {\n throw new AttachmentUploadError(\"UPLOAD_TOKEN_PROTOCOL_ERROR\", \"request_upload_token response did not include storageKey.\");\n }\n return { token, uploadUrl, storageKey };\n}\n\nasync function putAttachmentBytes(\n token: UploadTokenResponse,\n metadata: { bytes: Buffer; contentType: string },\n fetchImpl: typeof fetch,\n): Promise<UploadPutResponse> {\n const maxAttempts = 3;\n let lastRetryableError: unknown;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const response = await fetchImpl(token.uploadUrl, {\n method: \"PUT\",\n headers: {\n authorization: `Bearer ${token.token}`,\n \"content-type\": metadata.contentType,\n },\n body: new Uint8Array(metadata.bytes),\n });\n if (shouldRetryResponse(response.status) && attempt < maxAttempts) {\n continue;\n }\n if (!response.ok) {\n throw uploadHttpError(response.status);\n }\n return parsePutResponse(await response.text());\n } catch (error) {\n if (error instanceof AttachmentUploadError) {\n throw error;\n }\n lastRetryableError = error;\n if (attempt === maxAttempts) {\n break;\n }\n }\n }\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_FAILED\", \"Attachment upload failed.\", {\n cause: lastRetryableError instanceof Error ? lastRetryableError.message : String(lastRetryableError),\n });\n}\n\nfunction uploadHttpError(status: number): AttachmentUploadError {\n if (status === 409) {\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_CONFLICT\", \"Attachment upload failed with HTTP 409 Conflict.\", { status });\n }\n if (status === 401 || status === 403) {\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_TOKEN_EXPIRED\", `Attachment upload token was rejected with HTTP ${status}.`, { status });\n }\n return new AttachmentUploadError(\"ATTACHMENT_UPLOAD_HTTP_ERROR\", `Attachment upload failed with HTTP ${status}.`, { status });\n}\n\nfunction shouldRetryResponse(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction parsePutResponse(text: string): UploadPutResponse {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response was not valid JSON.\");\n }\n if (!isRecord(parsed)) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response was not an object.\");\n }\n if (typeof parsed.storageKey !== \"string\") {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include storageKey.\");\n }\n if (typeof parsed.sizeBytes !== \"number\" || !Number.isFinite(parsed.sizeBytes)) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include numeric sizeBytes.\");\n }\n if (typeof parsed.contentType !== \"string\") {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_PROTOCOL_ERROR\", \"Attachment PUT response did not include contentType.\");\n }\n return {\n storageKey: parsed.storageKey,\n sizeBytes: parsed.sizeBytes,\n contentType: parsed.contentType,\n };\n}\n\nfunction validatePutResult(\n token: UploadTokenResponse,\n metadata: { sizeBytes: number },\n putResult: UploadPutResponse,\n): void {\n if (putResult.storageKey !== token.storageKey) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_STORAGE_KEY_MISMATCH\", \"Attachment PUT response storageKey did not match the upload token.\", {\n expected: token.storageKey,\n actual: putResult.storageKey,\n });\n }\n if (putResult.sizeBytes !== metadata.sizeBytes) {\n throw new AttachmentUploadError(\"ATTACHMENT_UPLOAD_SIZE_MISMATCH\", \"Attachment PUT response sizeBytes did not match the local file size.\", {\n expected: metadata.sizeBytes,\n actual: putResult.sizeBytes,\n });\n }\n}\n\nfunction unwrapMcpToolPayload(value: unknown): unknown {\n if (!isRecord(value) || !Array.isArray(value.content)) {\n return value;\n }\n const text = value.content\n .map((item) => isRecord(item) && typeof item.text === \"string\" ? item.text : \"\")\n .find((itemText) => itemText.trim().startsWith(\"{\"));\n if (!text) {\n return value;\n }\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return value;\n }\n}\n\nfunction emitProgress(\n context: SingleUploadContext,\n stage: AttachmentUploadStage,\n path: string,\n filename: string,\n): void {\n context.onProgress?.({\n stage,\n path,\n filename,\n index: context.index,\n total: context.total,\n });\n}\n\nfunction detectContentType(path: string): string {\n const extension = extname(path).toLowerCase();\n return MIME_BY_EXTENSION[extension] ?? \"application/octet-stream\";\n}\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".avif\": \"image/avif\",\n \".csv\": \"text/csv\",\n \".gif\": \"image/gif\",\n \".htm\": \"text/html\",\n \".html\": \"text/html\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".json\": \"application/json\",\n \".md\": \"text/markdown\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".txt\": \"text/plain\",\n \".webp\": \"image/webp\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".zip\": \"application/zip\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport {\n uploadAttachments,\n type AttachmentUploadProgress,\n type UploadAttachmentsResult,\n} from \"../../core/upload/attachmentUpload\";\nimport { renderSuccess } from \"../../core/output/render\";\nimport { CliCommandError } from \"./errors\";\nimport { ATTACHMENTS_UPLOAD_COMMAND_PATH } from \"./bespokeCommands\";\n\nexport interface AttachmentsUploadCommandOptions {\n argv: string[];\n client: McpRpcClient;\n json: boolean;\n io: {\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n };\n}\n\nexport function isAttachmentsUploadCommand(domain: string | undefined, action: string | undefined): boolean {\n return domain === ATTACHMENTS_UPLOAD_COMMAND_PATH[0] && action === ATTACHMENTS_UPLOAD_COMMAND_PATH[1];\n}\n\nexport async function executeAttachmentsUploadCommand(options: AttachmentsUploadCommandOptions): Promise<number> {\n const parsed = parseAttachmentsUploadArgs(options.argv);\n const result = await uploadAttachments(options.client, {\n documentUuid: parsed.documentUuid,\n files: parsed.files.map((path) => ({\n path,\n filename: parsed.filename,\n contentType: parsed.contentType,\n })),\n maxBytes: parsed.maxBytes,\n ttlSeconds: parsed.ttlSeconds,\n onProgress: options.json ? undefined : (progress) => {\n renderProgress(progress, options.io.stderr);\n },\n });\n\n options.io.stdout.write(renderAttachmentUploadResult(result, options.json));\n return 0;\n}\n\ninterface ParsedAttachmentsUploadArgs {\n documentUuid: string;\n files: string[];\n filename?: string;\n contentType?: string;\n maxBytes?: number;\n ttlSeconds?: number;\n}\n\nfunction parseAttachmentsUploadArgs(argv: string[]): ParsedAttachmentsUploadArgs {\n const files: string[] = [];\n let documentUuid: string | undefined;\n let filename: string | undefined;\n let contentType: string | undefined;\n let maxBytes: number | undefined;\n let ttlSeconds: number | undefined;\n let readFilesOnly = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (readFilesOnly) {\n files.push(arg);\n continue;\n }\n if (arg === \"--\") {\n readFilesOnly = true;\n continue;\n }\n if (arg === \"--document-uuid\" || arg === \"--documentUuid\") {\n documentUuid = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--filename\" || arg === \"--name\") {\n filename = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--content-type\" || arg === \"--contentType\") {\n contentType = requireValue(arg, argv[++index]);\n continue;\n }\n if (arg === \"--max-bytes\" || arg === \"--maxBytes\") {\n maxBytes = parsePositiveInteger(arg, requireValue(arg, argv[++index]));\n continue;\n }\n if (arg === \"--ttl-seconds\" || arg === \"--ttlSeconds\") {\n ttlSeconds = parsePositiveInteger(arg, requireValue(arg, argv[++index]));\n continue;\n }\n if (arg.startsWith(\"--\")) {\n throw new CliCommandError(\"UNKNOWN_FLAG\", `Unknown flag ${arg} for attachments upload.`, { flag: arg });\n }\n files.push(arg);\n }\n\n if (!documentUuid) {\n throw new CliCommandError(\"MISSING_REQUIRED_FLAG\", \"Missing required argument \\\"documentUuid\\\" for attachments upload.\", {\n flag: \"--document-uuid\",\n });\n }\n if (files.length === 0) {\n throw new CliCommandError(\"MISSING_FILE\", \"Expected at least one file to upload.\");\n }\n if (filename && files.length !== 1) {\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", \"--filename/--name can only be used with exactly one file.\", {\n flag: \"--filename\",\n files: files.length,\n });\n }\n\n return {\n documentUuid,\n files,\n filename,\n contentType,\n maxBytes,\n ttlSeconds,\n };\n}\n\nfunction parsePositiveInteger(flag: string, value: string): number {\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new CliCommandError(\"INVALID_FLAG_VALUE\", `${flag} must be a positive integer.`, { flag, value });\n }\n return Number.parseInt(value, 10);\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new CliCommandError(\"FLAG_REQUIRES_VALUE\", `${flag} requires a value.`, { flag });\n }\n return value;\n}\n\nfunction renderProgress(progress: AttachmentUploadProgress, stderr: NodeJS.WriteStream): void {\n if (progress.stage === \"token\") {\n stderr.write(`Uploading ${progress.filename} (${progress.index + 1}/${progress.total})...\\n`);\n }\n}\n\nfunction renderAttachmentUploadResult(result: UploadAttachmentsResult, json: boolean): string {\n if (json) {\n return renderSuccess(result, { json });\n }\n const lines = [\n `Uploaded ${result.count} attachment${result.count === 1 ? \"\" : \"s\"}.`,\n ...result.uploaded.map((file) => `- ${file.filename} (${file.sizeBytes} bytes)`),\n ];\n return renderSuccess(lines.join(\"\\n\"), { json: false });\n}\n","import { chmod, lstat, mkdir, readFile, realpath, rename, rm, rmdir, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve, sep } from \"node:path\";\nimport { McpRpcError, type McpRpcClient } from \"../../core/mcp/rpcClient\";\nimport { isDefaultEndpointFor } from \"../../core/config/endpoints\";\nimport { renderSuccess } from \"../../core/output/render\";\nimport { HARNESS_ROLES, ROLE_ENV_VAR, type HarnessRole } from \"../../core/harness/role\";\nimport {\n detectRoles,\n initRefusal,\n MANAGED_PATHS,\n planInit,\n planUndo,\n type FileWrite,\n type InitPlan,\n withCreatedDirectories,\n} from \"../../core/harness/initPlan\";\nimport { HARNESS_CONFIG_PATH, HARNESS_RECORD_PATH } from \"../../core/harness/harnessDoc\";\nimport { AGENT_TARGETS } from \"../../core/harness/agentTargets\";\nimport { fetchHarnessDocuments, type HarnessDocuments } from \"../../core/harness/documentFetch\";\n\nexport interface InitCommandOptions {\n argv: string[];\n /** 전역 `--role` / AI_ERD_ROLE 에서 온 역할. init 은 이것을 따로 파싱하지 않는다. */\n role?: HarnessRole;\n client: McpRpcClient;\n endpoint: string;\n /**\n * 문서를 받을 때 쓸 토큰을 «필요할 때» 가져온다. 없으면 패키지 기본값으로 간다.\n *\n * <p>★지연 조회인 이유: {@code --undo} 는 순수한 로컬 작업인데, 예전엔 그마저도 토큰\n * 조회·갱신·저장을 먼저 돌렸다(2026-09-23 독립 재리뷰 S1). 로컬 되돌리기가 네트워크에\n * 의존하면, 서버가 죽은 날 되돌릴 수가 없다.\n */\n accessToken?: () => Promise<string | undefined>;\n /** 시험용 주입. 기본은 전역 fetch. */\n fetchImpl?: typeof fetch;\n env: \"prod\" | \"dev\";\n cliVersion: string;\n cwd: string;\n json: boolean;\n io: { stdout: NodeJS.WriteStream; stderr: NodeJS.WriteStream };\n}\n\ninterface InitArgs {\n projectUuid?: string;\n projectName?: string;\n dryRun: boolean;\n undo: boolean;\n yes: boolean;\n}\n\n/**\n * {@code ai-erd init} — 이 저장소를 AI-ERD 하네스에 붙인다.\n *\n * ★<b>대화형 프롬프트를 쓰지 않는다.</b> 이 명령은 에이전트 세션 «안에서» 실행될 때가 많고,\n * 거기엔 사람이 답할 TTY 가 없다. 고를 것이 여럿이면 목록을 보여 주고 «다시 실행하라»고\n * 말한다 — 멈춰서 기다리다 죽는 것보다 낫다.\n */\nexport async function executeInitCommand(options: InitCommandOptions): Promise<number> {\n const args = parseInitArgs(options.argv);\n const root = resolve(options.cwd);\n const files = await readSnapshot(root);\n\n if (args.undo) {\n const plan = planUndo({ files });\n await applyPlan(root, plan, args.dryRun, files, false);\n options.io.stdout.write(renderSuccess(\n {\n action: args.dryRun ? \"undo (dry-run)\" : \"undo\",\n updated: plan.writes.map((write) => write.path),\n removed: plan.deletes,\n notes: plan.notes,\n },\n { json: options.json },\n ));\n return 0;\n }\n\n const role = options.role ?? currentRole(files);\n if (!role) {\n throw new Error(\n `--role is required on first run. Pick one of: ${HARNESS_ROLES.join(\", \")}.`,\n );\n }\n\n // ★<b>원격을 건드리기 «전»에 기록을 본다.</b> 예전엔 이 판정이 계획 안에만 있어서, 프로젝트가\n // 0개인 저장소에서 «원격에 프로젝트를 만든 뒤» 「아무것도 바꾸지 않았다」는 예외를 냈다\n // (9차 1차 리뷰 B7). 로컬 쓰기가 0이라는 것과 부수효과가 0이라는 것은 다른 사실이다.\n // ⚠이번 차수에 거절 경로를 셋 늘렸으므로(손상·구판·fields 불완전) 여기 닿을 일이 더 많아졌다.\n const refusal = initRefusal(files);\n if (refusal !== undefined) {\n throw new Error(refusal);\n }\n\n const project = await resolveProject(options, args, files, root);\n if (\"choices\" in project) {\n options.io.stdout.write(renderSuccess(\n {\n message: \"More than one project found. Re-run with --project <uuid>.\",\n projects: project.choices,\n },\n { json: options.json },\n ));\n return 1;\n }\n\n const documents: HarnessDocuments = args.dryRun\n ? { versions: {}, fallbacks: {}, unavailableReason: \"skipped in --dry-run\" }\n : await fetchHarnessDocuments({\n endpoint: options.endpoint,\n accessToken: await options.accessToken?.(),\n client: \"ai-erd-cli\",\n fetchImpl: options.fetchImpl,\n });\n\n const plan = planInit({\n role,\n env: options.env,\n projectName: project.name,\n projectUuid: project.uuid,\n endpoint: options.endpoint,\n cliVersion: options.cliVersion,\n files,\n documents,\n });\n if (plan.refusal !== undefined) {\n // ★계획이 「멈춰라」고 하면 멈춘다. 이 판정을 부르는 쪽이 안 보면 그 판정은 «없는» 것이고,\n // 그 경우 읽어 내지 못한 기록을 백업 없이 덮는다(2026-09-27 8차 독립 리뷰 I1).\n // ⚠위에서 이미 물었지만 여기서도 본다 — 계획이 거절을 «돌려주는» 이상 그것을 보지 않는\n // 경로가 생겨선 안 된다. 같은 함수를 쓰므로 두 답이 갈리지 않는다.\n throw new Error(plan.refusal);\n }\n await applyPlan(root, plan, args.dryRun, files);\n\n options.io.stdout.write(renderSuccess(\n {\n action: args.dryRun ? \"init (dry-run)\" : \"init\",\n role,\n project: { uuid: project.uuid, name: project.name },\n endpoint: options.endpoint,\n written: plan.writes.map((write) => `${write.existed ? \"updated\" : \"created\"} ${write.path}`),\n codex: `Codex keeps a single global config, so init does not touch it. Run: ${plan.codexCommand}`,\n codexPerSession: plan.codexProfile,\n codexEnvFallback: `Without a profile, start the session with ${ROLE_ENV_VAR}=${role}.`,\n // ⚠조용히 기본값으로 떨어지지 않는다 — 서버에서 규칙을 고쳐도 안 바뀌는 이유를\n // 사용자가 영영 못 찾게 된다. ★요청 자체의 실패와 «문서별» 되돌림을 둘 다 적는다\n // (2026-09-23 독립 재리뷰 I5: HTTP 200 으로 온 빈 문서가 조용히 패키지 판이 됐다).\n notes: [...plan.notes, ...fallbackNotes(documents)],\n next: [\n \"Restart the agent so it picks up the new MCP server.\",\n role === \"design\"\n // ⚠Design 은 그 변경이 «허용»된다 — 모든 역할에 같은 문장을 내보내면 거짓이 된다.\n ? \"Ask it to change a table — a Design session may, and the change lands in AI-ERD.\"\n : `Ask it to change a table — a ${role} session will be told to stop.`,\n `Enforce this on the server too: ${loginCommand(options, role)}`,\n \"Undo everything with: ai-erd init --undo\",\n ],\n },\n { json: options.json },\n ));\n return 0;\n}\n\n/**\n * 이 저장소에 이미 걸린 역할 — 디스크에서 읽는다.\n *\n * <p>★<b>인증 클라이언트를 만들기 «전에» 불러야 한다.</b> 예전엔 바깥 CLI 가 플래그·환경변수만\n * 보고 클라이언트를 먼저 만들고, init 이 나중에 파일에서 역할을 정했다. 그래서 저장소는\n * development 로 걸려 있고 그 역할 자격증명만 있는데, 역할 인자 없이 재실행하면 «무역할»\n * 슬롯을 뒤지다 401 로 끝났다(2026-09-23 독립 재리뷰 I10).\n *\n * <p>읽기만 한다. 파일이 없으면 undefined.\n */\nexport async function readRepositoryRole(cwd: string): Promise<HarnessRole | undefined> {\n const root = resolve(cwd);\n const files = new Map<string, string | undefined>();\n for (const target of AGENT_TARGETS) {\n files.set(target.path, await readManagedFile(root, target.path));\n }\n try {\n return currentRole(files);\n } catch {\n // 설정끼리 어긋난 경우 — 여기서 멈추지 않는다. init 본체가 같은 검사로 제대로 말한다.\n return undefined;\n }\n}\n\n/** 이 저장소에 이미 걸린 역할. 두 설정이 어긋나 있으면 «고르지 않고» 멈춘다. */\nfunction currentRole(files: ReadonlyMap<string, string | undefined>): HarnessRole | undefined {\n const found = [...detectRoles(files).values()].filter((role): role is HarnessRole => role !== undefined);\n const unique = [...new Set(found)];\n if (unique.length > 1) {\n throw new Error(\n `Agent configs disagree about the session role (${unique.join(\", \")}). `\n + \"Re-run with an explicit --role to line them up.\",\n );\n }\n return unique[0];\n}\n\n/** 패키지 기본값을 쓴 사실과 그 이유. 없으면 빈 배열. */\nfunction fallbackNotes(documents: HarnessDocuments): string[] {\n const notes: string[] = [];\n if (documents.unavailableReason) {\n notes.push(`Harness rules came from this package, not the server (${documents.unavailableReason}).`);\n }\n for (const [key, reason] of Object.entries(documents.fallbacks)) {\n notes.push(`${key} came from this package, not the server (${reason}).`);\n }\n return notes;\n}\n\ntype ResolvedProject = { uuid: string; name: string } | { choices: Array<{ uuid: string; name: string }> };\n\nasync function resolveProject(\n options: InitCommandOptions,\n args: InitArgs,\n files: ReadonlyMap<string, string | undefined>,\n root: string,\n): Promise<ResolvedProject> {\n const projects = await listProjects(options);\n\n if (args.projectUuid) {\n const found = projects.find((project) => project.uuid === args.projectUuid);\n return found ?? { uuid: args.projectUuid, name: args.projectName ?? args.projectUuid };\n }\n\n const bound = boundProjectUuid(files.get(HARNESS_CONFIG_PATH));\n if (bound) {\n const found = projects.find((project) => project.uuid === bound);\n if (found) {\n return found;\n }\n }\n\n if (projects.length === 1) {\n return projects[0]!;\n }\n if (projects.length > 1) {\n return { choices: projects };\n }\n\n // 프로젝트가 하나도 없다 — 만들어야 한다. ★쓰기이므로 --yes 없이는 하지 않는다.\n const name = args.projectName ?? basenameOf(root);\n if (!args.yes) {\n throw new Error(\n `No project found in your AI-ERD account. Re-run with --yes to create \"${name}\", `\n + \"or --project-name <name> --yes to pick the name.\",\n );\n }\n if (args.dryRun) {\n // ★dry-run 이 «원격에» 프로젝트를 만들면 그것은 dry-run 이 아니다\n // (2026-09-22 독립 리뷰 I6). 로컬 쓰기만 막던 검사가 여기보다 뒤에 있었다.\n throw new Error(\n `--dry-run cannot continue: there is no project to bind, and creating \"${name}\" `\n + \"would be a real change. Re-run without --dry-run, or pass --project <uuid>.\",\n );\n }\n return createProject(options, name);\n}\n\nasync function listProjects(options: InitCommandOptions): Promise<Array<{ uuid: string; name: string }>> {\n const result = await callOrExplainSignIn(options, () => options.client.toolsCall(\"list_projects\", {}));\n return extractProjects(unwrapToolJson(result));\n}\n\n/**\n * ★<b>「로그인하라」는 말을 «여기서» 한다.</b>\n *\n * <p>init 은 새 사용자가 치는 «첫 명령»인데, 토큰이 없으면 MCP 호출이 401 로 떨어지고\n * 그대로 {@code MCP HTTP request failed with HTTP 401.} 한 줄만 남았다. 그 문장은 무엇을\n * 해야 하는지 말해 주지 않는다 — 로그인은 {@code auth login} 에서만 일어나는데, 그걸\n * 모르면 여기서 막힌다(2026-09-23 살아 있는 서버로 처음 돌려 보고 발견).\n *\n * <p>⚠자동으로 로그인시키지 않는다. 같은 클라이언트를 stdio 브리지({@code ai-erd mcp})가\n * 쓰고 있어서, 401 에 브라우저를 여는 순간 에이전트 세션 한가운데서 창이 뜬다.\n */\nasync function callOrExplainSignIn<T>(\n options: InitCommandOptions,\n run: () => Promise<T>,\n): Promise<T> {\n try {\n return await run();\n } catch (error) {\n if (!isUnauthorized(error)) {\n throw error;\n }\n throw new Error(\n `Not signed in for this role, so ${options.endpoint} refused the request (HTTP 401).\\n\\n`\n + ` ${loginCommand(options, options.role)}\\n\\n`\n + \"Then run init again. The role is carried by the access token, so each role signs in once.\",\n );\n }\n}\n\n/**\n * 이 저장소·이 서버에 맞는 로그인 명령 한 줄. ★<b>만드는 곳은 여기 하나다.</b>\n *\n * <p>⚠예전엔 「이 env 의 기본 주소면 인자를 생략」이라고만 하고 그 env 자체도 안 실었다.\n * CLI 의 기본 env 는 prod 라, dev 기본 주소에서 막힌 사람이 그 명령을 그대로 치면 «운영»\n * 슬롯에 로그인하고 같은 자리에서 또 막힌다(2026-09-23 4차 독립 리뷰 S2).\n * 주소든 env 든 <b>하나는 반드시</b> 실린다.\n */\nfunction loginCommand(\n options: Pick<InitCommandOptions, \"env\" | \"endpoint\">,\n role: HarnessRole | undefined,\n): string {\n const target = isDefaultEndpointFor(options.env, options.endpoint)\n ? (options.env === \"prod\" ? \"\" : ` --env ${options.env}`)\n : ` --endpoint ${options.endpoint}`;\n return `ai-erd auth login --role ${role ?? \"<design|development|test|validation>\"}${target}`;\n}\n\nfunction isUnauthorized(error: unknown): boolean {\n return error instanceof McpRpcError\n && error.code === \"MCP_HTTP_ERROR\"\n && (error.details as { status?: number } | undefined)?.status === 401;\n}\n\nasync function createProject(options: InitCommandOptions, name: string): Promise<{ uuid: string; name: string }> {\n const result = await callOrExplainSignIn(options, () =>\n options.client.toolsCall(\"create_projects\", { items: [{ name }] }));\n const created = extractProjects(unwrapToolJson(result));\n const first = created[0];\n if (!first) {\n throw new Error(\"Project creation did not return a project uuid.\");\n }\n return first;\n}\n\n/** MCP 도구 응답은 {@code content[0].text} 에 JSON 문자열로 온다. */\nexport function unwrapToolJson(result: unknown): unknown {\n if (!isRecord(result) || !Array.isArray(result.content)) {\n return result;\n }\n const first = result.content.find((item) => isRecord(item) && item.type === \"text\");\n if (!isRecord(first) || typeof first.text !== \"string\") {\n return result;\n }\n try {\n return JSON.parse(first.text);\n } catch {\n return first.text;\n }\n}\n\n/**\n * 응답 모양을 단정하지 않고 «uuid 와 name 을 가진 객체의 배열»을 찾는다.\n * ⚠도구 응답 포맷을 여기 박아 두면 서버가 한 겹 감싸는 순간 조용히 빈 목록이 된다.\n */\nexport function extractProjects(value: unknown): Array<{ uuid: string; name: string }> {\n const candidates: unknown[] = Array.isArray(value)\n ? value\n : isRecord(value)\n ? [\"projects\", \"items\", \"created\", \"data\", \"hits\"].flatMap((key) => {\n const nested = value[key];\n return Array.isArray(nested) ? nested : [];\n })\n : [];\n const projects: Array<{ uuid: string; name: string }> = [];\n for (const candidate of candidates) {\n if (isRecord(candidate) && typeof candidate.uuid === \"string\") {\n projects.push({\n uuid: candidate.uuid,\n name: typeof candidate.name === \"string\" ? candidate.name : candidate.uuid,\n });\n }\n }\n return projects;\n}\n\nfunction boundProjectUuid(config: string | undefined): string | undefined {\n if (!config) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(config) as { project?: { uuid?: unknown } };\n return typeof parsed.project?.uuid === \"string\" ? parsed.project.uuid : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * ★<b>읽기도 경계 검사를 먼저 통과한다.</b> 예전엔 스냅샷을 다 읽은 «뒤에» 경계를 봤다 —\n * 저장소 밖을 가리키는 링크의 내용을 한 번 읽고 나서 거절했다(2026-09-23 독립 재리뷰 I4).\n * 쓰기·삭제만 막으면 되는 게 아니다. 읽는 것도 남의 파일이다.\n */\nasync function readSnapshot(root: string): Promise<Map<string, string | undefined>> {\n const snapshot = new Map<string, string | undefined>();\n for (const path of MANAGED_PATHS) {\n snapshot.set(path, await readManagedFile(root, path));\n }\n return snapshot;\n}\n\n/**\n * ★<b>저장소 안의 파일을 읽는 유일한 문.</b> 경계 검사가 읽기 «앞»에 붙어 있다.\n *\n * <p>예전엔 {@code readSnapshot} 만 검사를 했고, 나중에 붙인 역할 추론이 {@code readIfExists} 를\n * 바로 불렀다. 그래서 저장소 밖을 가리키는 설정 파일을 <b>한 번 읽고 나서</b> 거절했다\n * (2026-09-23 4차 독립 리뷰 I5). 검사와 읽기가 갈라지면, 새로 생긴 경로마다 검사를 잊는다.\n */\n/**\n * 관리 대상 파일의 부모 중 <b>지금 없는</b> 디렉터리들. 우리가 쓰면서 만들게 되는 것이다.\n *\n * <p>파일 스냅샷만으로는 「비어 있는 디렉터리가 이미 있었나」를 알 수 없다. 그걸 모르면\n * 되돌리기가 남의 빈 디렉터리를 치운다(2026-09-23 4차 독립 리뷰 S3).\n */\n\nasync function readManagedFile(root: string, path: string): Promise<string | undefined> {\n await assertInsideRepository(root, path);\n return readIfExists(join(root, path));\n}\n\nasync function readIfExists(absolutePath: string): Promise<string | undefined> {\n try {\n return await readFile(absolutePath, \"utf8\");\n } catch (error) {\n if (isRecord(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\n/**\n * ★이 경로가 정말 저장소 «안»인가.\n *\n * <p>{@code join(root, path)} 는 이름을 이어 붙일 뿐이고, {@code readFile}/{@code writeFile}\n * 은 심볼릭 링크를 따라간다. {@code .ai-erd → /somewhere/else} 인 저장소에서 undo 를 돌리면\n * 남의 디렉터리 파일이 지워졌다(2026-09-22 독립 리뷰 I4). 실제 경로로 풀어서 경계를 본다.\n */\nasync function assertInsideRepository(root: string, relativePath: string): Promise<void> {\n const absolutePath = join(root, relativePath);\n const realRoot = await realpath(root);\n let realParent: string;\n try {\n realParent = await realpath(dirname(absolutePath));\n } catch (error) {\n if (isRecord(error) && error.code === \"ENOENT\") {\n return; // 아직 없는 디렉터리는 우리가 만든다 — 링크일 수 없다.\n }\n throw error;\n }\n if (realParent !== realRoot && !realParent.startsWith(realRoot + sep)) {\n throw new Error(\n `${relativePath} resolves outside the repository (${realParent}); refusing to touch it.`,\n );\n }\n try {\n if ((await lstat(absolutePath)).isSymbolicLink()) {\n throw new Error(`${relativePath} is a symbolic link; refusing to write through it.`);\n }\n } catch (error) {\n if (!isRecord(error) || error.code !== \"ENOENT\") {\n throw error;\n }\n }\n}\n\n/**\n * 계획을 적용한다.\n *\n * <p>★<b>먼저 전부 검사하고, 그 다음에 쓴다.</b> 예전엔 한 파일씩 쓰다가 중간에 막히면\n * (권한 등) 앞 파일만 바뀐 채로 실패했다(2026-09-22 독립 리뷰 I5). 지금은 경계·링크·\n * 「스냅샷 이후 바뀌었는가」를 먼저 다 보고, 하나라도 걸리면 아무것도 안 쓴다.\n *\n * <p>⚠그래도 «쓰는 도중» 실패는 완전히 못 막는다(디스크 가득 등). 그때 무엇이 쓰였는지는\n * 오류에 적는다 — 조용히 반쪽 상태로 두지 않는다.\n */\nasync function applyPlan(\n root: string,\n plan: InitPlan,\n dryRun: boolean,\n snapshot: FileSnapshotMap,\n recordFirst = true,\n): Promise<void> {\n // ①먼저 «전부» 본다 — 하나라도 못 쓸 상황이면 아무것도 건드리지 않고 멈추는 게 낫다.\n for (const write of plan.writes) {\n await assertInsideRepository(root, write.path);\n await assertUnchangedSinceSnapshot(root, write.path, snapshot);\n }\n for (const path of plan.deletes) {\n await assertInsideRepository(root, path);\n await assertUnchangedSinceSnapshot(root, path, snapshot);\n }\n if (dryRun) {\n return;\n }\n const applied: string[] = [];\n try {\n // ★<b>복구 기록을 먼저 쓴다.</b> 예전엔 관리 기록(.ai-erd/config.json)이 «마지막» 쓰기였다.\n // 그래서 중간에 실패하면 이미 바뀐 파일이 있는데 기록이 없어 undo 가 아무것도 못 되돌렸다\n // (2026-09-23 독립 재리뷰 I11). 되돌릴 수 있게 만드는 것이 첫 일이다.\n // ★되돌리기에서는 기록을 건드리는 일이 «작업 전체»의 마지막이다. 4차에서 config 를 쓰기\n // 목록의 뒤로 옮겼지만, 쓰기가 다 끝난 «뒤에» 삭제가 온다. 그래서 삭제가 실패하면 기록은\n // 이미 옛 파일로 돌아가 있고 되돌릴 근거가 없었다(2026-09-23 5차 독립 리뷰 I1).\n const isRecord = (path: string) => !recordFirst && path === HARNESS_RECORD_PATH;\n const recordWrites = plan.writes.filter((write) => isRecord(write.path));\n const recordDeletes = plan.deletes.filter((path) => isRecord(path));\n /**\n * ★<b>우리가 «실제로 만든» 디렉터리.</b> {@code mkdir(recursive)} 는 자기가 만든 가장 위\n * 디렉터리를 돌려주고, 이미 있었으면 undefined 를 준다 — 그게 우리가 알고 싶던 사실\n * 그 자체다. 이 칸의 진실원은 이 변수 하나이고, 계획은 여기에 관여하지 않는다.\n * (직전 실행에서 이어받은 것은 이미 기록에 있으므로 함께 들고 간다.)\n */\n const createdDirectories: string[] = [...(plan.record?.createdDirectories ?? [])];\n const rememberDirectories = (directories: readonly string[]) => {\n for (const directory of directories) {\n if (!createdDirectories.includes(directory)) {\n createdDirectories.push(directory);\n }\n }\n };\n /**\n * 기록의 디렉터리 칸을 «실제로 만든 것»으로 바로잡는다.\n *\n * <p>★성공했을 때만 하면 안 된다 — 중간에 실패해도 그 순간까지의 사실이 기록에 남아야\n * 한다. 예전엔 보정이 성공 경로에만 있어서, 만들기 «전»에 실패한 계획이 그대로 남고\n * 그 뒤 사용자가 만든 디렉터리를 다음 undo 가 지웠다(2026-09-27 6차 독립 리뷰 S1).\n *\n * <p>⚠기록 보정이 실패해도 원래 오류를 덮지 않는다. 같은 내용을 두 번 써도 무해하다.\n */\n const recordActualDirectories = async () => {\n const write = plan.writes.find((w) => w.path === HARNESS_RECORD_PATH);\n if (!recordFirst || !plan.record || !write || !applied.includes(HARNESS_RECORD_PATH)) {\n return;\n }\n await writeManagedFile(root, {\n ...write,\n content: withCreatedDirectories(write.content, createdDirectories),\n });\n };\n /**\n * 보정을 «삼키지 않는다». 다른 오류가 진행 중이면 그 오류를 살리고, 아니면 드러낸다.\n *\n * <p>★예전엔 무조건 삼켰다. 그러면 init 이 종료 0 을 돌려주는데 기록의 디렉터리 칸이\n * 비어 있고, 그 상태의 undo 는 우리가 만든 디렉터리를 남긴다 — 「성공」이 기록 완료를\n * 보증하지 않았다(2026-09-27 7차 독립 리뷰 S1).\n */\n const recordDirectoriesOrExplain = async (failing: boolean) => {\n try {\n await recordActualDirectories();\n } catch (error) {\n if (!failing) {\n throw error;\n }\n }\n };\n const apply = async (writes: readonly FileWrite[], deletes: readonly string[]) => {\n for (const write of writes) {\n // ②그리고 «쓰기 직전에» 다시 본다. ①과 실제 쓰기 사이에 누가 고칠 수 있다 — 그 틈으로\n // 남의 편집이 덮여 나갔다(같은 항목). 검사와 쓰기를 붙여 놓으면 창이 작아진다.\n await assertUnchangedSinceSnapshot(root, write.path, snapshot);\n await writeManagedFile(root, write, rememberDirectories);\n applied.push(write.path);\n }\n for (const path of deletes) {\n await assertUnchangedSinceSnapshot(root, path, snapshot);\n await rm(join(root, path), { force: true });\n applied.push(path);\n }\n };\n\n try {\n await apply(\n orderedWrites(plan.writes.filter((write) => !isRecord(write.path)), recordFirst),\n plan.deletes.filter((path) => !isRecord(path)),\n );\n await recordDirectoriesOrExplain(false);\n // 여기까지 전부 된 다음에만 기록을 줄이거나 지운다.\n await apply(recordWrites, recordDeletes);\n } catch (error) {\n await recordDirectoriesOrExplain(true);\n throw error;\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(\n `${message}\\nAlready applied before this failure: ${applied.join(\", \") || \"(nothing)\"}`,\n );\n }\n // 우리가 «만든» 디렉터리가 비었으면 그것도 치운다.\n // ⛔recursive 로 지우지 않는다 — 사용자가 그 안에 둔 다른 파일까지 날아간다.\n // rmdir 는 «비어 있을 때만» 성공하므로, 비었는지는 파일시스템이 판정한다.\n // ★「비었으면 치운다」였을 때는 init 전부터 있던 빈 .cursor 까지 사라졌다\n // (2026-09-23 4차 독립 리뷰 S3). 비었다는 것과 우리 것이라는 것은 다른 사실이다.\n for (const directory of plan.removableDirectories ?? []) {\n await rmdir(join(root, directory)).catch(() => undefined);\n }\n}\n\n/**\n * 관리 기록을 맨 앞으로 옮긴 쓰기 순서.\n *\n * <p>★기록이 먼저 디스크에 있어야 그 뒤의 실패를 되돌릴 수 있다. 기록에 적힌 지문은\n * «쓰려던 내용»의 것이라, 못 쓴 파일은 지문이 안 맞아 undo 가 「손댔다」로 보고 남긴다 —\n * 안 만든 파일을 지우려 드는 것보다 안전한 쪽이다.\n */\nfunction orderedWrites(writes: readonly FileWrite[], recordFirst: boolean): FileWrite[] {\n const record = writes.filter((write) => write.path === HARNESS_RECORD_PATH);\n const rest = writes.filter((write) => write.path !== HARNESS_RECORD_PATH);\n // ★undo 에서는 «마지막»이다. undo 가 config 에 쓰는 것은 기록을 남기는 일이 아니라\n // 옛 파일로 «되돌리는» 일이라, 먼저 하면 나머지를 되돌릴 근거를 스스로 지운다\n // (2026-09-23 4차 독립 리뷰 I2). 같은 순서 규칙을 두 방향에 그대로 쓰면 안 된다.\n return recordFirst ? [...record, ...rest] : [...rest, ...record];\n}\n\n\n/** 파일을 읽은 뒤 우리가 네트워크를 기다리는 사이에 누가 고쳤으면, 그 변경을 덮지 않는다. */\nasync function assertUnchangedSinceSnapshot(\n root: string,\n relativePath: string,\n snapshot: FileSnapshotMap,\n): Promise<void> {\n if (!snapshot.has(relativePath)) {\n return;\n }\n const now = await readIfExists(join(root, relativePath));\n if (now !== snapshot.get(relativePath)) {\n throw new Error(\n `${relativePath} changed while init was running; nothing was written. Run init again.`,\n );\n }\n}\n\n/**\n * 임시 파일에 쓰고 바꿔 끼운다 — 도중에 죽어도 반쪽짜리 파일이 남지 않는다.\n *\n * <p>★<b>기존 파일의 권한을 그대로 가져간다.</b> rename 은 inode 를 «갈아치우므로», 그냥\n * 만들면 umask 기본값(보통 0644)이 된다. 남의 서버 설정에 환경변수가 들어 있는 0600 파일이\n * init 한 번에 0644 로 넓어졌다(2026-09-23 독립 재리뷰 N1). 내용을 합치는 일이 남의 파일\n * 접근 권한까지 바꾸면 안 된다.\n */\nasync function writeManagedFile(\n root: string,\n write: FileWrite,\n onDirectoriesCreated?: (directories: readonly string[]) => void,\n): Promise<string[]> {\n const absolutePath = join(root, write.path);\n const targetDirectory = dirname(absolutePath);\n const firstCreated = await mkdir(targetDirectory, { recursive: true });\n // ★<b>만든 사실을 «지금» 넘긴다.</b> 예전엔 반환값으로만 줬는데, 그 반환은 rename 뒤에\n // 일어난다 — 그 사이에 쓰기가 실패하면 «우리가 만든 디렉터리»라는 사실이 통째로 사라졌고,\n // 다음 init 의 mkdir 는 이미 있는 디렉터리에 undefined 를 주므로 회복도 못 했다\n // (2026-09-27 7차 독립 리뷰 S1). 만드는 것과 쓰는 것은 다른 일이다.\n const created = createdChain(root, firstCreated, targetDirectory);\n onDirectoriesCreated?.(created);\n const previousMode = await fileMode(absolutePath);\n const tmpPath = `${absolutePath}.${process.pid}.${Date.now()}.tmp`;\n // 임시 파일도 «처음부터» 좁게 만든다 — 넓게 만들었다가 좁히면 그 사이가 창이다.\n await writeFile(tmpPath, write.content, { encoding: \"utf8\", mode: previousMode ?? 0o600 });\n if (previousMode !== undefined) {\n await chmod(tmpPath, previousMode);\n }\n await rename(tmpPath, absolutePath);\n return created;\n}\n\n/**\n * 이번 {@code mkdir} 이 «정말 만든» 디렉터리들 — 저장소 기준 상대 경로, 깊은 것부터.\n *\n * <p>★{@code recursive: true} 는 자기가 만든 «가장 위» 디렉터리 하나만 돌려준다. 그 아래부터\n * 목표 디렉터리까지도 같이 만들어진 것이므로 구간 전체가 우리 것이다. 이미 있었으면\n * undefined 를 주므로 그때는 빈 목록이다 — <b>「있다」와 「우리가 만들었다」가 갈리는 지점</b>.\n */\nexport function createdChain(root: string, firstCreated: string | undefined, targetDirectory: string): string[] {\n if (firstCreated === undefined) {\n return [];\n }\n const stop = resolve(firstCreated);\n const made: string[] = [];\n for (let at = resolve(targetDirectory); ; at = dirname(at)) {\n const asRelative = relative(root, at);\n if (asRelative && !asRelative.startsWith(\"..\")) {\n made.push(asRelative.split(sep).join(\"/\"));\n }\n if (at === stop || dirname(at) === at) {\n break;\n }\n }\n return made;\n}\n\nasync function fileMode(absolutePath: string): Promise<number | undefined> {\n try {\n return (await stat(absolutePath)).mode & 0o7777;\n } catch (error) {\n if (isRecord(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\ntype FileSnapshotMap = Map<string, string | undefined>;\n\nfunction parseInitArgs(argv: string[]): InitArgs {\n const args: InitArgs = { dryRun: false, undo: false, yes: false };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--project\") {\n args.projectUuid = requireValue(arg, argv[++index]);\n } else if (arg === \"--project-name\") {\n args.projectName = requireValue(arg, argv[++index]);\n } else if (arg === \"--dry-run\") {\n args.dryRun = true;\n } else if (arg === \"--undo\") {\n args.undo = true;\n } else if (arg === \"--yes\" || arg === \"-y\") {\n args.yes = true;\n } else if (arg === \"--json\") {\n // 전역 플래그 — 여기선 무시한다.\n } else {\n throw new Error(`Unknown argument: ${arg}`);\n }\n }\n return args;\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n return value;\n}\n\nfunction basenameOf(path: string): string {\n const parts = path.split(/[\\\\/]/).filter(Boolean);\n return parts[parts.length - 1] ?? \"ai-erd-project\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { isDefaultEndpointFor } from \"../config/endpoints\";\nimport { HARNESS_ROLES, type HarnessRole } from \"./role\";\n\n/**\n * 「어느 에이전트의 어느 파일에 무엇을 적는가」.\n *\n * ★<b>MCP 항목은 «하나»만 쓴다.</b> 이것이 「하나의 세션은 하나의 역할」을 강제하는 방식이다 —\n * 네 역할을 동시에 등록해 두면 개발 세션이 설계 서버도 보게 되고, 그 순간 제약은 다시\n * 「규칙을 읽고 지켜라」로 내려앉는다. 역할을 바꾸려면 이 한 항목을 고치고 세션을 다시 연다.\n *\n * ⚠<b>Codex 는 여기 없다.</b> Codex 의 MCP 설정은 {@code $CODEX_HOME/config.toml} 전역이라\n * 프로젝트별 파일이 없다. 프로젝트에서 친 명령이 말없이 전역 설정을 고치면 다른 저장소의\n * 세션까지 역할이 걸린다. ⇒ 우리가 고치지 않고 <b>실행할 명령을 내준다</b>.\n *\n * <p>★<b>Codex 의 세션별 역할은 «프로필»로 한다</b>(2026-09-22 실측, codex 0.153.4).\n * {@code codex -p <name>} 은 {@code $CODEX_HOME/<name>.config.toml} 을 base 위에 얹고,\n * <b>같은 서버 이름이면 프로필 쪽이 base 를 덮어쓴다</b> — 합쳐지지 않는다. 그래서 서버 항목은\n * 여전히 «하나»이고 「한 세션에 한 역할」이 그대로 성립한다.\n * ⚠구식 {@code [profiles.<name>]} 테이블은 이제 «에러로» 거부된다 — 별도 파일이어야 한다.\n * ⛔CODEX_HOME 을 프로젝트별로 바꾸는 길은 auth.json 까지 갈려 로그인을 잃으므로 택하지 않았다.\n */\n\n/** 설정에 쓰는 서버 이름. ⛔env 에 따라 바꾸지 않는다 — 도구 접두사가 흔들리고 --undo 가 못 찾는다. */\nexport const SERVER_NAME = \"ai-erd\";\n\nexport const PACKAGE_NAME = \"@ai-erd/mcp\";\n\nexport interface AgentTarget {\n id: \"claude-code\" | \"cursor\";\n label: string;\n /** 저장소 루트 기준 상대 경로. */\n path: string;\n}\n\nexport const AGENT_TARGETS: readonly AgentTarget[] = [\n { id: \"claude-code\", label: \"Claude Code\", path: \".mcp.json\" },\n { id: \"cursor\", label: \"Cursor\", path: \".cursor/mcp.json\" },\n];\n\nexport interface ServerEntryInput {\n role: HarnessRole;\n /** \"prod\" 면 인자를 안 붙인다 — 기본값을 설정에 박으면 기본이 바뀔 때 거짓이 된다. */\n env?: \"prod\" | \"dev\";\n /**\n * 기본이 아닌 엔드포인트. ⚠<b>이걸 빠뜨리면</b> init 은 이 주소에서 프로젝트를 찾아 적어\n * 놓고, 정작 에이전트는 «기본 주소»에 붙는다 — 문서가 가리키는 곳과 세션이 보는 곳이\n * 달라진다(2026-09-22 독립 리뷰 I7).\n */\n endpoint?: string;\n}\n\nexport interface McpServerEntry {\n command: string;\n args: string[];\n}\n\nexport function buildServerEntry(input: ServerEntryInput): McpServerEntry {\n const args = [\"-y\", PACKAGE_NAME, \"--role\", input.role];\n if (input.env && input.env !== \"prod\") {\n args.push(\"--env\", input.env);\n }\n // ★«이 env 의» 기본 주소일 때만 생략한다. 넓은 기본 판정을 쓰면 dev 주소가 prod 로 해석된다.\n if (input.endpoint && !isDefaultEndpointFor(input.env ?? \"prod\", input.endpoint)) {\n args.push(\"--endpoint\", input.endpoint);\n }\n return { command: \"npx\", args };\n}\n\n/** 설정에 적힌 항목에서 역할을 되읽는다. 설정이 곧 진실원이므로 여기서만 읽는다. */\nexport function readRoleFromEntry(entry: unknown): HarnessRole | undefined {\n if (!isRecord(entry) || !Array.isArray(entry.args)) {\n return undefined;\n }\n const index = entry.args.indexOf(\"--role\");\n const value = index >= 0 ? entry.args[index + 1] : undefined;\n return typeof value === \"string\" && (HARNESS_ROLES as readonly string[]).includes(value)\n ? (value as HarnessRole)\n : undefined;\n}\n\nexport interface MergeResult {\n /** 적어 넣은 결과 JSON 문자열 (끝에 줄바꿈 포함). */\n content: string;\n /** 이 파일에 우리 항목이 이미 있었나 — 보고용. */\n replaced: boolean;\n /**\n * 우리가 «밀어낸» 원래 항목. ★undo 가 이것을 도로 넣는다.\n * 없으면 undefined — 그때는 undo 가 그냥 지운다.\n */\n replacedEntry?: unknown;\n}\n\n/**\n * 기존 설정을 살린 채 우리 항목 하나만 얹는다.\n *\n * ⚠<b>남의 서버 항목을 지우지 않는다.</b> 이 파일은 사용자의 것이고 우리는 한 칸을 빌릴 뿐이다.\n * 파싱이 안 되면 덮어쓰지 말고 던진다 — 읽을 수 없는 파일을 덮으면 사용자의 설정이 사라진다.\n */\n/**\n * 이 파일에 들어 있는 «우리» 서버 항목. 없거나 파일이 JSON 이 아니면 undefined.\n *\n * <p>undo 가 「우리가 쓴 그대로인가」를 보려고 쓴다 — 파일 «전체»가 아니라 우리가 소유한\n * 조각만 견주어야, 남이 다른 항목을 더한 것과 우리 항목을 손댄 것을 구별한다\n * (2026-09-23 독립 재리뷰 I8).\n */\nexport function readServerEntry(existing: string | undefined): unknown {\n if (existing === undefined) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(existing) as { mcpServers?: Record<string, unknown> };\n return parsed?.mcpServers?.[SERVER_NAME];\n } catch {\n return undefined;\n }\n}\n\nexport function mergeServerEntry(existing: string | undefined, entry: McpServerEntry): MergeResult {\n const root = parseConfigObject(existing);\n const servers = readServers(root);\n const replaced = Object.prototype.hasOwnProperty.call(servers, SERVER_NAME);\n const replacedEntry = replaced ? servers[SERVER_NAME] : undefined;\n servers[SERVER_NAME] = entry;\n return { content: stringify({ ...root, mcpServers: servers }), replaced, replacedEntry };\n}\n\nexport interface RemoveResult {\n /** 우리 항목을 뺀 결과. 파일을 통째로 지워야 하면 undefined. */\n content?: string;\n removed: boolean;\n /** 우리 항목을 빼고 나니 아무것도 안 남았나. */\n emptied: boolean;\n}\n\n/**\n * 되돌릴 목표를 «감싸서» 받는다.\n *\n * <p>★{@code restoreEntry?: unknown} 과 {@code !== undefined} 조합은 <b>저장된 {@code null} 을\n * 「백업 없음」으로 바꾼다.</b> 사용자가 {@code \"ai-erd\": null} 을 적어 두었고 우리가 그것을\n * 백업했다면, 되돌리기는 null 을 도로 넣어야 한다(2026-09-27 7차 독립 리뷰 I5).\n * 「값이 없다」와 「값이 null 이다」는 다른 사실이므로 그 둘을 한 자리에 담지 않는다.\n */\nexport interface RestoreEntry {\n value: unknown;\n}\n\nexport function removeServerEntry(existing: string | undefined, restore?: RestoreEntry): RemoveResult {\n if (existing === undefined) {\n return { removed: false, emptied: false };\n }\n const root = parseConfigObject(existing);\n const servers = readServers(root);\n const removed = Object.prototype.hasOwnProperty.call(servers, SERVER_NAME);\n if (restore !== undefined) {\n // ★우리가 밀어낸 사용자 항목을 도로 넣는다. 지우는 것이 아니라 «되돌리는» 것이다.\n servers[SERVER_NAME] = restore.value;\n return { content: stringify({ ...root, mcpServers: servers }), removed, emptied: false };\n }\n delete servers[SERVER_NAME];\n const otherKeys = Object.keys(root).filter((key) => key !== \"mcpServers\");\n const emptied = Object.keys(servers).length === 0 && otherKeys.length === 0;\n return { content: stringify({ ...root, mcpServers: servers }), removed, emptied };\n}\n\n/** Codex 는 전역 설정뿐이라 «우리가 고치지 않는다». 사용자가 칠 명령을 내준다. */\nexport function codexAddCommand(input: ServerEntryInput): string {\n const entry = buildServerEntry(input);\n return `codex mcp add ${SERVER_NAME} -- ${entry.command} ${entry.args.join(\" \")}`;\n}\n\n/**\n * Codex 에서 역할을 세션마다 바꾸는 법. ★프로필 파일이 같은 이름의 서버를 덮어쓰므로\n * 항목은 하나로 유지된다.\n */\nexport function codexProfileSetup(input: ServerEntryInput): string[] {\n const entry = buildServerEntry(input);\n return [\n `Per-session roles in Codex use profiles. Put this in $CODEX_HOME/${input.role}.config.toml:`,\n \"\",\n ` [mcp_servers.${SERVER_NAME}]`,\n ` command = \"${entry.command}\"`,\n ` args = ${JSON.stringify(entry.args)}`,\n \"\",\n `Then start that session with: codex -p ${input.role}`,\n \"A profile entry with the same server name replaces the global one, so the session still sees exactly one.\",\n ];\n}\n\nexport function codexRemoveCommand(): string {\n return `codex mcp remove ${SERVER_NAME}`;\n}\n\n/**\n * {@code mcpServers} 를 읽는다. ⚠<b>모양이 틀리면 «조용히 버리지» 않는다</b> —\n * 배열이나 문자열이 들어 있는 설정을 {@code {}} 로 갈아 끼우면 사용자의 내용이 사라진다\n * (2026-09-22 독립 리뷰 I8). 이미 깨진 설정이어도 원문을 없애는 건 우리 일이 아니다.\n */\nfunction readServers(root: Record<string, unknown>): Record<string, unknown> {\n const servers = root.mcpServers;\n if (servers === undefined) {\n return {};\n }\n if (!isRecord(servers)) {\n throw new Error(\n \"Existing MCP config has an \\\"mcpServers\\\" value that is not an object, so it was left untouched. \"\n + \"Fix it by hand and run init again.\",\n );\n }\n return { ...servers };\n}\n\nfunction parseConfigObject(existing: string | undefined): Record<string, unknown> {\n if (existing === undefined || !existing.trim()) {\n return {};\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(existing);\n } catch (error) {\n throw new Error(\n `Existing MCP config is not valid JSON, so it was left untouched. Fix it by hand and run init again. (${\n error instanceof Error ? error.message : String(error)\n })`,\n );\n }\n if (!isRecord(parsed)) {\n throw new Error(\"Existing MCP config must be a JSON object; it was left untouched.\");\n }\n return parsed;\n}\n\nfunction stringify(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { AGENT_TARGETS, SERVER_NAME } from \"./agentTargets\";\nimport { ROLE_ENV_VAR } from \"./role\";\n\n/**\n * 저장소에 쓰는 글. ⚠<b>사용자 노출 문자열은 영어</b>로 쓴다 — 이 저장소의 기존 관례이고\n * (help·에러 메시지가 전부 영어) 공개 npm 패키지가 남의 저장소에 써 넣는 파일이다.\n * 주석·설계 메모만 한국어다.\n *\n * ★<b>역할을 여기 적지 않는다.</b> 역할의 진실원은 MCP 서버 설정 한 곳이고, 지금 무엇인지는\n * 서버가 {@code initialize} 안내문으로 말해 준다. 이 글에도 적으면 역할을 바꿀 때마다 두\n * 곳을 맞춰야 하고, 어긋나는 순간 에이전트는 틀린 쪽을 믿는다.\n */\n\nexport const MARKER_BEGIN = \"<!-- ai-erd:begin -->\";\nexport const MARKER_END = \"<!-- ai-erd:end -->\";\n\nexport const HARNESS_DOC_PATH = \".ai-erd/HARNESS.md\";\nexport const HARNESS_CONFIG_PATH = \".ai-erd/config.json\";\n\n/**\n * ★<b>되돌리기 기록의 자리. 이 파일은 «전부 우리 것»이다.</b>\n *\n * <p>예전엔 기록이 {@code config.json} 안에 살았다. 그 파일은 사용자도 칸을 더하고 고치는\n * 파일이라, 한 파일에 주인이 둘이었다 — 그래서 되돌리기가 매번 「이 칸이 누구 것인가」를\n * 판정해야 했고, <b>그 판정이 네 차수 연속 샜다</b>(2026-09-23 4차 I7 → 5차 I2·S3 →\n * 6차 I1·I3 → 2026-09-27 7차 I1·I2·I3).\n *\n * <p>기록을 우리 파일로 내보내면 그 질문 자체가 사라진다:\n * <ul>\n * <li>우리 파일 — 통째로 쓰고 통째로 지운다. 병합도 소유 판정도 없다.</li>\n * <li>남의 파일({@code config.json}·{@code .mcp.json}·{@code AGENTS.md}) — «병합»해서 쓰고,\n * 우리 조각만 되돌린다.</li>\n * </ul>\n * ★<b>그리고 자기 지문의 순환도 같이 사라진다.</b> 「자기 해시를 담은 문서의 해시」를 피하려고\n * 정규형에서 그 칸을 빼던 장치가 필요 없다 — 우리 파일은 지문을 «재지 않는다». 사용자가\n * 고칠 파일이 아니고, 고쳐져 있으면 읽기가 실패해 「기록 없음」으로 안전하게 떨어진다.\n */\nexport const HARNESS_RECORD_PATH = \".ai-erd/init-record.json\";\n\nexport interface HarnessDocInput {\n projectName: string;\n projectUuid: string;\n endpoint: string;\n}\n\n/**\n * 저장소에 쓸 문서. ★<b>서버 본문과 패키지 기본값이 «같은 채움 경로»를 쓴다.</b>\n * 두 경로로 갈리면 서버 판만 고쳤을 때 오프라인 사용자에게는 다른 글이 나간다.\n *\n * @param template 서버에서 받은 본문. 없으면 이 패키지의 기본값(= 오프라인 기본값)을 쓴다.\n */\nexport function renderHarnessDoc(input: HarnessDocInput, template?: string): string {\n return fillTemplate(template ?? DEFAULT_HARNESS_DOC, {\n projectName: input.projectName,\n projectUuid: input.projectUuid,\n endpoint: input.endpoint,\n });\n}\n\n/**\n * {{name}} 자리표시자를 채운다.\n *\n * <p>★<b>문법은 서버 레지스트리의 것이다.</b> 예전엔 이 패키지만 {@code {name}} 을 썼는데,\n * 같은 본문을 관리자 검증기가 거절했다 — 저장소를 공유하면서 계약이 둘이었다\n * (2026-09-23 독립 재리뷰 I2).\n */\nexport function fillTemplate(template: string, values: Record<string, string>): string {\n // ★원본을 «한 번만» 훑는다. 값을 하나씩 갈아 끼우면, 먼저 넣은 값 안의 자리표시자 모양\n // 글자가 다음 차례에 또 치환된다 — 프로젝트 이름에 {{endpoint}} 라고 적어 둔 사람의\n // 이름 일부가 실제 주소로 바뀌었다(2026-09-23 4차 독립 리뷰 S4).\n // ⚠모르는 이름은 그대로 둔다 — 지우면 「못 채웠다」를 아무도 못 본다.\n return template.replace(/\\{\\{([a-zA-Z0-9_]+)}}/g, (whole, name: string) =>\n Object.prototype.hasOwnProperty.call(values, name) ? values[name]! : whole);\n}\n\nexport const DOC_KEY = \"HARNESS.DOC\";\nexport const AGENT_NOTE_KEY = \"HARNESS.AGENT_NOTE\";\n\n/** 각 문서가 반드시 담아야 할 변수 이름 — 서버의 REQUIRED_VARIABLES 와 같은 목록이다. */\nconst REQUIRED_VARIABLES: Record<string, string[]> = {\n [DOC_KEY]: [\"projectName\", \"projectUuid\", \"endpoint\"],\n [AGENT_NOTE_KEY]: [\"harnessDocPath\", \"serverName\"],\n};\n\n/**\n * 받은 본문을 저장소에 «써도 되는가». 쓰면 안 되면 그 이유, 괜찮으면 undefined.\n *\n * <p>둘을 본다: ①필수 변수가 원문에 «있는가» — 없으면 채워도 그 값이 안 들어간다.\n * ②AGENT_NOTE 라면 관리 마커가 정확히 한 쌍 있는가 — 없으면 우리 블록을 다시 찾을 수 없어\n * 재실행마다 덧붙고 undo 도 못 걷어낸다.\n */\nexport function documentContractProblem(key: string, body: string): string | undefined {\n for (const name of REQUIRED_VARIABLES[key] ?? []) {\n if (!body.includes(`{{${name}}}`)) {\n return `${key} is missing the required {{${name}}} placeholder`;\n }\n }\n if (key === AGENT_NOTE_KEY) {\n return managedBlockProblem(key, body);\n }\n return undefined;\n}\n\nconst DEFAULT_HARNESS_DOC = `# AI-ERD Harness\n\nThis repository is wired to an AI-ERD project. The design source of truth lives in AI-ERD,\nnot in this repository's files.\n\n- Project: **{{projectName}}** (\\`{{projectUuid}}\\`)\n- MCP endpoint: {{endpoint}}\n\n## One session, one role\n\nA session picks exactly one role and keeps it for the whole session. The role comes from the\nMCP server configuration — not from this file, and not from anything an agent can change at\nruntime. The server exposes only the tools that role is allowed to use, so a tool that is out\nof role is not merely discouraged: it is absent.\n\n| Role | Owns | Must not |\n| --- | --- | --- |\n| Design | Requirements, ERD, domain and module boundaries, dependency direction, tasks | Write product or test code |\n| Development | Product code, following the approved design | Change requirements, ERD, architecture, or data ownership |\n| Test | Test scenarios and test code, running them and reading results | Change product code to make a test pass; change the design |\n| Validation | Judging the result against the design and the rules | Change anything; it reports PASS or FAIL with evidence |\n\nEvery role can **read** the whole source of truth. Reading the design is how the other roles\ndo their job. A session that cannot do something reports it in the session, to you.\n\n## When you are blocked\n\nIf the work needs something your role cannot do, **stop and say so**. Do not look for a way\naround it: not by editing files the tools would have written, not by asking for the role to be\nchanged mid-session, not by deferring the decision into the implementation.\n\n The work needs a design change.\n This is a Development Session, so I cannot make it.\n Settle it in a Design Session, then continue here.\n\nValidation reports \\`PASS\\`, or \\`FAIL\\` with the rule violated, where it happened, the evidence,\nand which session should pick it up next.\n\n## Not every change needs four sessions\n\nA small change that fits the design already recorded in AI-ERD starts at Development. The rule\nis not \"always run four steps\" — it is that when a step is needed, it does not happen inside\nanother role's session.\n\n## Switching roles\n\nChange the role in the MCP server configuration and start a new session:\n\n${AGENT_TARGETS.map((target) => ` ${target.label.padEnd(12)} ${target.path}`).join(\"\\n\")}\n Codex global config — use a profile: codex -p <role>, or set ${ROLE_ENV_VAR}\n\nOr run \\`ai-erd init --role <design|development|test|validation>\\` to rewrite them.\n\n---\nGenerated by \\`ai-erd init\\`. Remove everything it wrote with \\`ai-erd init --undo\\`.\n`;\n\n/**\n * AGENTS.md / CLAUDE.md 에 넣는 블록. ★<b>짧게 쓴다.</b> 이 파일들은 사용자의 것이고\n * 이미 다른 규칙이 들어 있다. 우리는 한 문단만 빌리고 전문은 우리 파일로 보낸다.\n */\nexport function renderAgentNote(template?: string): string {\n return fillTemplate(template ?? DEFAULT_AGENT_NOTE, {\n harnessDocPath: HARNESS_DOC_PATH,\n serverName: SERVER_NAME,\n });\n}\n\nconst DEFAULT_AGENT_NOTE = `${MARKER_BEGIN}\n## AI-ERD Harness\n\nThis repository uses AI-ERD as its design source of truth, and each session has one role\n(Design / Development / Test / Validation). Read \\`{{harnessDocPath}}\\` before doing work that\ntouches requirements, the ERD, or architecture.\n\nThe role of this session comes from the \\`{{serverName}}\\` MCP server configuration, and from the\naccess token when you signed in with a role; the server states it in its \\`initialize\\`\ninstructions and exposes only that role's tools. If the work needs something outside the role,\nstop and report which session is required.\n${MARKER_END}`;\n\n/**\n * 이 본문이 <b>통째로 «관리 블록 하나»</b>인가. 아니면 그 이유.\n *\n * <p>★예전엔 「마커가 한 쌍 있나」만 봤다. 그래서 마커 «밖»에 머리말·꼬리말이 달린 본문이\n * 통과했고, 그 바깥 글은 init 때마다 한 번씩 더 붙고 undo 로도 안 걷혔다 — 우리가 걷어내는\n * 범위는 마커 «사이»뿐이기 때문이다(2026-09-23 4차 독립 리뷰 I4).\n *\n * <p>「넣는 범위」와 「빼는 범위」가 다르면 차이만큼 남의 파일에 쌓인다. 그래서 «넣을 것»도\n * 뺄 수 있는 모양이어야 한다: 앞뒤 공백을 빼면 정확히 한 블록.\n */\nexport function managedBlockProblem(key: string, body: string): string | undefined {\n const trimmed = body.trim();\n if (!trimmed.startsWith(MARKER_BEGIN)) {\n return `${key} must begin with ${MARKER_BEGIN} — text outside the block is never removed by --undo`;\n }\n if (!trimmed.endsWith(MARKER_END)) {\n return `${key} must end with ${MARKER_END} — text outside the block is never removed by --undo`;\n }\n const inner = trimmed.slice(MARKER_BEGIN.length, trimmed.length - MARKER_END.length);\n if (inner.includes(MARKER_BEGIN) || inner.includes(MARKER_END)) {\n return `${key} must contain exactly one ${MARKER_BEGIN} and one ${MARKER_END}`;\n }\n // ★<b>수락하는 모양과 «다시 찾을 수 있는» 모양이 같아야 한다.</b> 예전엔 양끝 문자열만 봐서\n // 한 줄짜리 블록이나 앞에 공백이 붙은 마커를 수락했다. 그런데 소유 판정은 「들여쓰기 없이\n // 줄 맨 앞, 그 줄에 마커만」이라 방금 쓴 블록을 못 찾고, 재실행마다 블록이 하나씩 늘었다\n // (2026-09-23 5차 독립 리뷰 I4).\n if (!inner.startsWith(\"\\n\")) {\n return `${key} must put ${MARKER_BEGIN} alone on its own line`;\n }\n if (!inner.endsWith(\"\\n\")) {\n return `${key} must put ${MARKER_END} alone on its own line`;\n }\n // 안에 닫히지 않은 코드펜스가 있으면, 파일에 합친 뒤 종료 마커가 그 펜스 «안»으로 들어간다.\n if (hasUnclosedFence(inner)) {\n return `${key} contains an unclosed code fence — the closing marker would fall inside it`;\n }\n return undefined;\n}\n\n/** 이 글이 코드펜스를 열어 둔 채 끝나는가. */\nfunction hasUnclosedFence(content: string): boolean {\n let open: { char: string; length: number } | undefined;\n for (const line of content.split(\"\\n\")) {\n const fence = fenceOf(line);\n if (!fence) continue;\n if (!open) open = { char: fence.char, length: fence.length };\n else if (fence.char === open.char && fence.length >= open.length && fence.info === \"\") open = undefined;\n }\n return open !== undefined;\n}\n\n/**\n * 저장되는 모양 하나. ★<b>쓰기·교체가 모두 이것을 쓴다.</b>\n *\n * <p>끝 개행은 «블록의 것이 아니라 파일 합성의 것»이다. 예전엔 블록에 딸려온 개행을 남긴 채\n * 합성이 하나를 더 붙여, 같은 입력으로 다시 돌릴 때마다 파일이 1바이트씩 자랐다\n * (605 → 606 → 607, 2026-09-23 5차 독립 리뷰 S2). 변경 없는 재실행은 파일을 안 바꿔야 한다.\n */\nexport function canonicalManagedBlock(block: string): string {\n return block.trim();\n}\n\n/**\n * 블록이 이미 있으면 갈아 끼우고, 없으면 끝에 붙인다. 사용자의 다른 내용은 건드리지 않는다.\n *\n * @throws Error 여는 표식만 있고 닫는 표식이 없을 때. ★<b>붙이면 안 된다</b> —\n * begin 이 둘, end 가 하나가 되어 다음 실행에서 «앞의 begin ~ 새 end» 가 한 덩이로\n * 잡히고 그 사이의 사용자 글이 사라진다(2026-09-22 독립 리뷰 I3).\n */\nexport function upsertMarkerBlock(existing: string | undefined, block: string): string {\n const current = existing ?? \"\";\n assertNoDanglingMarker(current);\n // ★개행의 소유를 한 곳으로 모은다 — 블록은 마커로 끝나고, 뒤의 한 줄은 «파일»의 것이다.\n const normalized = canonicalManagedBlock(block);\n const range = markerRange(current);\n const composed = range\n ? `${current.slice(0, range.start)}${normalized}${current.slice(range.end)}`\n : `${current.trim() ? `${current.replace(/\\s*$/, \"\")}\\n\\n` : \"\"}${normalized}\\n`;\n assertComposedBlockIsOurs(composed, current);\n return composed;\n}\n\n/**\n * ★<b>다시 찾을 수 있을 때만 쓴다.</b> 합성 «결과»를 소유 판정으로 되읽어, 관리 블록이\n * 정확히 하나로 보이는지 확인한다.\n *\n * <p>예전엔 «새 블록 안»만 검사했다. 그런데 소유 판정({@link ownedMarkerIndex})은 <b>파일\n * 문맥</b>을 본다 — 기존 파일이 코드펜스를 열어 둔 채 끝나면 멀쩡한 블록도 그 펜스 «안»으로\n * 들어가 우리 것으로 안 보인다. 그래서 init 마다 블록이 하나씩 늘고 undo 는 아무것도 못\n * 걷어냈다(2026-09-27 6차 독립 리뷰 I4).\n *\n * <p>「넣는 범위 = 빼는 범위」라는 규칙을 <b>블록이 아니라 합성 결과에</b> 적용한 것이다.\n * 검사할 대상은 우리가 만든 글이 아니라 «파일에 들어간 모습»이다.\n */\nfunction assertComposedBlockIsOurs(composed: string, existing: string): void {\n if (ownedMarkerCount(composed, MARKER_BEGIN) === 1 && ownedMarkerCount(composed, MARKER_END) === 1) {\n return;\n }\n const reason = hasUnclosedFence(existing)\n ? \"this file ends inside an unclosed code fence, so the block would sit inside it\"\n : \"the block could not be found again once merged into this file\";\n throw new Error(\n `ai-erd could not place its block where --undo would find it again — ${reason}. `\n + \"The file was left untouched; fix that and run again.\",\n );\n}\n\n/**\n * 표식이 짝이 안 맞으면 그 파일은 «손대지 않는다».\n *\n * <p>사람이 손으로 잘랐거나 붙여 넣다 만 경우다. 우리가 범위를 추측해서 지우면 남의 글이\n * 날아간다. 고치는 건 사람 몫이고, 우리는 무엇이 문제인지만 말한다.\n *\n * <p>★<b>세는 대상은 «우리 것으로 알아볼 수 있는» 표식뿐이다</b>({@link ownedMarkerIndex}).\n * 인용문·코드펜스·들여쓴 예제 안의 표식은 애초에 우리 것이 아니므로 짝을 세지 않는다 —\n * 예전엔 그런 예제까지 세어서 멀쩡한 파일을 「짝이 안 맞는다」고 거절했다.\n */\nexport function assertNoDanglingMarker(content: string): void {\n const begins = ownedMarkerCount(content, MARKER_BEGIN);\n const ends = ownedMarkerCount(content, MARKER_END);\n if (begins !== ends || begins > 1) {\n throw new Error(\n `ai-erd markers are unbalanced (${begins} begin, ${ends} end). The file was left untouched — `\n + `remove the stray ${MARKER_BEGIN} / ${MARKER_END} by hand and run again.`,\n );\n }\n if (begins === 0) {\n return;\n }\n // ★개수만 세면 «end 가 begin 보다 앞선» 한 쌍을 정상으로 본다 — 그러면 새 블록을 덧붙이고\n // 다음 실행부터 중복으로 거절된다(2026-09-23 독립 재리뷰 I3).\n if (ownedMarkerIndex(content, MARKER_END, 0) < ownedMarkerIndex(content, MARKER_BEGIN, 0)) {\n throw new Error(\n `ai-erd markers are out of order (${MARKER_END} appears before ${MARKER_BEGIN}). `\n + \"The file was left untouched — fix the markers by hand and run again.\",\n );\n }\n}\n\nfunction ownedMarkerCount(content: string, marker: string): number {\n let count = 0;\n for (let at = ownedMarkerIndex(content, marker, 0); at >= 0;\n at = ownedMarkerIndex(content, marker, at + 1)) {\n count += 1;\n }\n return count;\n}\n\n/**\n * 이 위치가 코드펜스 «안»인가.\n *\n * <p>★예전엔 줄 맨 앞의 백틱 세 개를 «세어서» 홀짝으로 판정했다. 그래서 tilde 펜스,\n * 들여쓴 펜스, 그리고 «더 긴 펜스 안에 든 짧은 백틱 줄»을 전부 놓쳤고 — 예제로 적어 둔\n * 마커를 우리 블록으로 오인해 남의 본문을 갈아 끼웠다(2026-09-23 독립 재리뷰 I9).\n *\n * <p>지금은 Markdown 의 실제 규칙을 따른다: 펜스는 백틱 또는 tilde 세 개 이상으로 열리고,\n * 들여쓰기는 세 칸까지, 닫는 펜스는 <b>같은 문자</b>로 <b>연 것보다 짧지 않게</b>, 뒤에 아무것도\n * 없어야 한다. 완전한 파서는 아니지만 판정이 틀리는 쪽은 «안전한 쪽»(손대지 않음)이다.\n */\nfunction isInsideFencedBlock(content: string, index: number): boolean {\n let open: { char: string; length: number } | undefined;\n let offset = 0;\n for (const line of content.split(\"\\n\")) {\n const nextOffset = offset + line.length + 1;\n if (index < nextOffset) {\n // 표식이 이 줄에 있다 — 이 줄 «전»까지의 상태가 답이다.\n return open !== undefined;\n }\n const fence = fenceOf(line);\n if (fence) {\n if (!open) {\n open = { char: fence.char, length: fence.length };\n } else if (fence.char === open.char && fence.length >= open.length && fence.info === \"\") {\n open = undefined;\n }\n }\n offset = nextOffset;\n }\n return open !== undefined;\n}\n\n/** 이 줄이 펜스면 그 모양. 아니면 undefined. */\nfunction fenceOf(line: string): { char: string; length: number; info: string } | undefined {\n const match = /^ {0,3}(`{3,}|~{3,})(.*)$/.exec(line);\n if (!match) {\n return undefined;\n }\n const run = match[1]!;\n const info = match[2]!.trim();\n // 백틱 펜스의 정보 문자열에는 백틱이 못 들어간다(Markdown 규칙).\n if (run.startsWith(\"`\") && info.includes(\"`\")) {\n return undefined;\n }\n return { char: run[0]!, length: run.length, info };\n}\n\nexport interface MarkerRemoval {\n content: string;\n removed: boolean;\n /** 블록을 빼고 나니 빈 파일이 됐나 — 우리가 만든 파일이면 지울 수 있다. */\n emptied: boolean;\n}\n\nexport function removeMarkerBlock(existing: string | undefined): MarkerRemoval {\n const current = existing ?? \"\";\n assertNoDanglingMarker(current);\n const range = markerRange(current);\n if (!range) {\n return { content: current, removed: false, emptied: !current.trim() };\n }\n // ★<b>이어붙는 자리만</b> 손본다. 예전엔 파일 «전체»에 /\\n{3,}/ 를 돌려, 우리가 쓰지도 않은\n // 문단 사이 빈 줄까지 줄여 놓았다(2026-09-22 독립 리뷰 I2). 안 건드린 곳은 안 건드린다.\n //\n // ⚠원래 파일이 «끝 줄바꿈 없이» 끝났다면 그것까지는 되살리지 못한다 — upsert 가 붙일 때\n // 이미 지운 정보다. 그래서 「바이트 원복」이라고 말하지 않는다. 한 줄을 더한다.\n const before = current.slice(0, range.start).replace(/\\n*$/, \"\");\n const after = current.slice(range.end).replace(/^\\n*/, \"\");\n const stripped = before && after\n ? `${before}\\n\\n${after}`\n : before\n ? `${before}\\n`\n : after;\n return { content: stripped.trim() ? stripped : \"\", removed: true, emptied: !stripped.trim() };\n}\n\n/** 관리 블록을 «원래 있던 블록»으로 갈아 끼운다. undo 가 쓴다. */\nexport function replaceMarkerBlockWith(content: string, block: string): string {\n const range = markerRange(content);\n return range ? `${content.slice(0, range.start)}${block}${content.slice(range.end)}` : content;\n}\n\n/**\n * 짝이 맞지 않는 마커 하나. 중첩·잘림도 «설명해야 할 것»이므로 증거에 자리를 차지한다.\n *\n * <p>★<b>여는 것과 닫는 것을 구별한다</b>(3차 리뷰 B2). 하나의 문자열로 뭉쳤더니\n * 「원래 있던 «닫는» 예제」와 「우리 블록에서 남은 «여는» 마커」가 서로 상쇄돼, 증거가 맞는 것처럼\n * 보이고 사용자 원본 백업이 버려졌다. 종류가 다르면 다른 증거다.\n */\nexport const UNPAIRED_BEGIN = \"(unpaired ai-erd begin)\";\nexport const UNPAIRED_END = \"(unpaired ai-erd end)\";\n\n/**\n * ★<b>init «전»에 이 파일에 있던 관리 블록들의 신원.</b> 되돌리기가 「이 파일에 남은 마커를\n * 내 기록으로 «설명할 수 있나»」를 묻는 데 쓰는 증거다.\n *\n * <p>★<b>왜 개수도, 모양 비교도 아닌가</b>(2026-09-27 9차 2차 리뷰 B2·N1). 두 번 틀렸다:\n * <ul>\n * <li>개수는 「예제를 지우고 그 자리에 우리 블록을 옮기기」를 못 본다 — 총수가 그대로다.</li>\n * <li>우리 블록을 «모양»으로 알아보려 하면, 제목 한 줄만 고쳐도·인용문({@code > })으로\n * 옮겨도·마커를 겹쳐도 못 알아보고 그것을 「블록이 없다」로 읽어 백업을 버렸다.\n * 거꾸로 init 전부터 있던 «똑같은» 예제는 우리 블록으로 오인해 정상 되돌리기를 막았다.</li>\n * </ul>\n * ⇒ 판정을 뒤집는다. 우리 블록을 알아보려 하지 않고, <b>기록에 있는 예제를 지워 나간 뒤 남는\n * 것을 «설명되지 않은 것»으로 본다.</b> 모양 비교는 「기록해 둔 예제가 그대로 있나」를 볼 때만\n * 쓰고, 의무 완료는 <b>증거 대조</b>가 정한다.\n *\n * <p>⚠사용자가 «자기 예제»를 고쳐 놓으면 그것도 설명되지 않은 것이 되어 되돌리기가 사람에게\n * 넘어간다. 백업을 지우는 것보다는 그쪽이 맞다 — 우리는 그 둘을 가를 근거를 갖고 있지 않다.\n */\nexport function markerEvidence(content: string | undefined): string[] {\n if (!content) {\n return [];\n }\n // ★<b>우리 블록을 «빼고» 본 파일이 증거다.</b> 소유 범위를 남겨 두면 그 경계를 가로질러 짝이\n // 지어진다 — 원래 «여는 마커만» 적어 둔 예제가 우리 블록의 «닫는 마커»와 한 쌍으로 묶여,\n // init 이 자기가 쓴 블록 때문에 «새로운 남의 증거»를 만들어 냈다(3차 리뷰 N2).\n // 빼고 보면 불변식이 선다: 우리 블록을 더하거나 걷어내도 남의 증거는 그대로다.\n const owned = markerRange(content);\n const rest = owned === undefined\n ? content\n : content.slice(0, owned.start) + content.slice(owned.end);\n const evidence: string[] = [];\n let cursor = 0;\n let begins = 0;\n let ends = 0;\n while (true) {\n const begin = rest.indexOf(MARKER_BEGIN, cursor);\n const close = rest.indexOf(MARKER_END, cursor);\n if (begin < 0 && close < 0) {\n break;\n }\n if (begin < 0 || (close >= 0 && close < begin)) {\n ends += 1; // 여는 것 없이 닫는 것이 먼저 나왔다.\n cursor = close + MARKER_END.length;\n continue;\n }\n const pairEnd = rest.indexOf(MARKER_END, begin + MARKER_BEGIN.length);\n if (pairEnd < 0) {\n begins += 1;\n cursor = begin + MARKER_BEGIN.length;\n continue;\n }\n evidence.push(blockShape(rest.slice(begin, pairEnd + MARKER_END.length)));\n cursor = pairEnd + MARKER_END.length;\n }\n for (let i = 0; i < begins; i += 1) evidence.push(UNPAIRED_BEGIN);\n for (let i = 0; i < ends; i += 1) evidence.push(UNPAIRED_END);\n return evidence;\n}\n\n/** 들여쓰기와 빈 줄을 지운 «모양». 펜스·목록 안으로 옮겨져도 같은 예제로 알아본다. */\nfunction blockShape(block: string): string {\n return block.split(\"\\n\").map((line) => line.trim()).filter((line) => line.length > 0).join(\"\\n\");\n}\n\n/** 파일에 이미 들어 있던 관리 블록 원문. 없으면 undefined. undo 가 이것을 도로 넣는다. */\nexport function existingMarkerBlock(content: string | undefined): string | undefined {\n if (!content) {\n return undefined;\n }\n const range = markerRange(content);\n return range ? content.slice(range.start, range.end) : undefined;\n}\n\n/** 짝이 맞는 것은 {@link assertNoDanglingMarker} 가 이미 보장한다 — 여긴 범위만 잡는다. */\nfunction markerRange(content: string): { start: number; end: number } | undefined {\n const start = ownedMarkerIndex(content, MARKER_BEGIN, 0);\n if (start < 0) {\n return undefined;\n }\n const endMarker = ownedMarkerIndex(content, MARKER_END, start);\n if (endMarker < 0) {\n return undefined;\n }\n return { start, end: endMarker + MARKER_END.length };\n}\n\n/**\n * ★<b>판정을 뒤집었다.</b> 「예제인지 알아내서 피한다」가 아니라\n * <b>「우리 것임을 확인할 수 있는 형태만 수락한다」</b>이다.\n *\n * <p>예제를 알아내려던 쪽은 계속 샜다 — tilde 펜스, 들여쓴 펜스, 더 긴 펜스 안의 짧은 줄,\n * 인용문 안의 코드, 네 칸 들여쓴 코드 블록…(2026-09-22 I3 → 2026-09-23 3차 I9 → 4차 I6).\n * Markdown 의 «안에 담는 문맥»은 끝이 없어서, 못 알아낸 하나가 곧 남의 본문을 지운다.\n *\n * <p>그래서 우리가 쓰는 <b>정확한 한 가지 형태</b>만 우리 것으로 본다:\n * 들여쓰기 없이 줄 맨 앞에서 시작하고, 그 줄에 표식 말고는 아무것도 없으며, 코드펜스 밖일 것.\n * ⚠이보다 느슨하게 적힌 우리 블록이 있다면 그것도 «못 알아본다» — 그 경우 덧붙이지도\n * 지우지도 않고 표식이 없는 파일처럼 다룬다. 남의 글을 지우는 쪽보다 낫다.\n */\nfunction ownedMarkerIndex(content: string, marker: string, from: number): number {\n for (let at = content.indexOf(marker, from); at >= 0; at = content.indexOf(marker, at + 1)) {\n const lineStart = content.lastIndexOf(\"\\n\", at - 1) + 1;\n if (lineStart !== at) {\n continue; // 들여썼거나 인용문(\">\") 뒤다 — 우리가 쓰는 형태가 아니다.\n }\n const lineEnd = content.indexOf(\"\\n\", at);\n const rest = (lineEnd < 0 ? content.slice(at) : content.slice(at, lineEnd)).slice(marker.length);\n if (rest.trim() !== \"\") {\n continue; // 같은 줄에 다른 글이 있다.\n }\n if (isInsideFencedBlock(content, at)) {\n continue;\n }\n return at;\n }\n return -1;\n}\n","import { HARNESS_CONFIG_PATH, HARNESS_RECORD_PATH } from \"./harnessDoc\";\n\n/**\n * 되돌리기 «기록»의 형식과 그 <b>상태 판정</b>. ★이 파일의 책임은 하나다 —\n * 「디스크에 있는 이것이 우리 기록인가, 그렇다면 온전한가」에 <b>명시적으로</b> 답하는 것.\n *\n * <p>★<b>왜 파일을 따로 두는가.</b> 다섯 차수에 걸쳐 같은 축이 샜고, 마지막 독립 리뷰가 그 이름을\n * 붙였다(2026-09-27 8차): <b>「파일 경로가 그 안의 내용이 유효하다는 증거는 아니다」</b>.\n * 기록을 우리 파일로 내보낸 것(7차)은 「이 칸이 누구 것인가」를 없앴지만, 그다음 질문을 남겼다 —\n * 「이 파일이 우리 것이라는 사실이 그 내용을 신뢰할 근거인가」. 아니다.\n *\n * <p>그때 무슨 일이 일어났나:\n * <ul>\n * <li>{@code kind} 가 다르거나 JSON 이 깨진 파일을 «부재»로 읽고, init 이 백업 없이 덮었다.\n * 읽기를 거절했는데 쓰기는 거절하지 않은 것이다(8차 I1).</li>\n * <li>{@code kind} 만 맞으면 {@code managed} 가 배열이어도, {@code version} 이 999 여도,\n * 지문 칸이 통째로 없어도 «정상 기록»으로 읽혔다. 그리고 그 기록으로 돌린 undo 가\n * <b>사용자가 편집한 문서를 지웠다</b>(8차 I2). 빈 기본값으로 채우는 관용이\n * 불확실성을 «확실»로 바꾼 것이다.</li>\n * </ul>\n * ⛔그래서 여기서는 {@code as unknown as} 로 모양을 «주장»하지 않고, 빈 값으로 «메우지» 않는다.\n * 읽어 낼 수 없으면 읽어 낼 수 없다고 말한다 — 그것이 부르는 쪽이 필요한 정보다.\n */\n\n/** 기록 파일의 신원. 사용자가 같은 이름으로 둔 파일을 실행 근거로 삼지 않는다. */\nexport const RECORD_KIND = \"ai-erd/init-record\";\n\n/** 이 판이 읽고 쓰는 형식. 모르는 판은 «손상»이 아니라 «지원하지 않음»이다. */\nexport const RECORD_VERSION = 2;\n\n/**\n * 우리가 «소유한 것»의 값. ★명시적 타입이라 세 가지가 갈린다:\n * 「그 자리에 아무것도 없었다」 · 「JSON 값이었다(null 일 수도 있다)」 · 「글이었다」.\n *\n * <p>예전엔 {@code undefined} 하나로 앞의 둘을 덮었고, 그래서 사용자가 저장해 둔 {@code null} 이\n * «백업 없음»으로 바뀌었다(7차 I5).\n */\nexport type Owned =\n | { at: \"absent\" }\n | { at: \"json\"; value: unknown }\n | { at: \"text\"; text: string };\n\nexport const ABSENT: Owned = { at: \"absent\" };\n\n/** 우리가 그 파일의 «무엇을» 소유하나. 넣는 법과 빼는 법이 여기서 갈린다. */\nexport type OwnedScope =\n /** 파일 본문 전체를 우리가 쓴다(.ai-erd/HARNESS.md). */\n | \"whole\"\n /** JSON 안의 MCP 서버 항목 하나(.mcp.json · .cursor/mcp.json). */\n | \"entry\"\n /** Markdown 안의 마커 블록 하나(AGENTS.md · CLAUDE.md). */\n | \"block\"\n /** JSON 안의 «칸 몇 개»(.ai-erd/config.json). 나머지 칸은 사용자 것이다. */\n | \"fields\";\n\n/**\n * 한 파일에 대한 복구 계약. ★<b>한 파일의 사실이 한 곳에 모인다.</b>\n *\n * <p>예전 기록은 경로를 키로 한 «평행한 map 아홉 개»였다({@code created}·{@code replacedEntries}·\n * {@code blockAdded}·{@code replacedBlocks}·{@code originals}·{@code lastWritten}·\n * {@code lastWrittenFragment}·{@code lastWrittenBody}·{@code foreignMarkers}). 그래서 지금까지\n * 나온 결함이 거의 전부 <b>「한 map 은 X 라 하고 다른 map 은 Y 라 한다」</b>였고, 고칠 때마다\n * 그중 «한 map»만 고쳤다. 한 항목으로 묶으면 그 어긋남이 생길 자리가 없다.\n */\nexport interface FileContract {\n scope: OwnedScope;\n /** 우리가 이 파일을 «만들었나». 지워도 되는 것은 이것뿐이다. */\n createdByUs: boolean;\n /** 되돌릴 «목표» — 우리가 밀어낸 것. {@code absent} 면 「우리가 더했다」는 뜻이다. */\n original: Owned;\n /** 우리가 «실제로 쓴» 것. 「지금 값이 아직 우리 것인가」의 유일한 근거다. */\n written: Owned;\n /**\n * 우리가 쓴 «파일 전체»의 지문. 파일을 지워도 되는지 판정할 때만 쓴다.\n *\n * <p>⚠없으면 «모른다»는 뜻이고, 모를 때는 지우지 않는다. 예전엔 지문이 없으면\n * {@code changedSinceOurWrite} 가 false 를 돌려줘서 「안 바뀌었다」로 읽혔고, 그 판정이\n * 사용자 문서 삭제의 근거가 됐다(8차 I2).\n */\n fileFingerprint?: string;\n /** {@code scope===\"fields\"} 전용 — 우리가 쓴 칸의 값. 칸 단위 대조의 근거다. */\n writtenFields?: Record<string, unknown>;\n /**\n * {@code scope===\"fields\"} 전용 — 우리가 덮기 «전»에 그 칸에 있던 것. 칸마다 따로 든다.\n *\n * <p>★파일 전체를 원본으로 들면 두 가지를 못 한다(8차 I4·I6):\n * <ul>\n * <li>재init 에서 사용자가 고친 칸을 «새 기준»으로 삼기 — 파일 단위로는 어느 칸이 바뀐\n * 것인지 말할 수 없다.</li>\n * <li>원래 «빈 객체»였던 config 를 빈 객체로 되돌리기 — 파일 부재와 빈 객체가 같은\n * 결과로 뭉쳤고, 그래서 프로젝트 연결이 남았다.</li>\n * </ul>\n * ⚠「파일이 아예 없었다」는 {@link #createdByUs} 가 말한다. 이 칸은 «있던 파일 안의 칸»만 다룬다.\n */\n originalFields?: Record<string, Owned>;\n /**\n * {@code scope===\"block\"} 전용 — init «전»에 이 파일에 있던 관리 블록들의 «신원».\n * {@code markerEvidence} 가 만든 목록이고, 짝이 안 맞는 마커는 그 자리에 표시가 하나 들어간다.\n *\n * <p>★<b>개수에서 목록으로 두 번 옮겨 왔다</b>(8차 I5 → 9차 B2·N1):\n * <ul>\n * <li>Boolean 하나로는 「원래 예제가 있다」와 「우리 블록이 옮겨져 남았다」를 못 갈랐다.</li>\n * <li>개수로는 「예제를 지우고 그 자리에 우리 블록을 옮기기」를 못 봤다 — 총수가 그대로다.</li>\n * <li>우리 블록을 «모양»으로 알아보려 하면 제목 한 줄 편집·인용문 이동·중첩에 뚫렸고,\n * 반대로 init 전부터 있던 똑같은 예제를 우리 것으로 오인해 정상 되돌리기를 막았다.</li>\n * </ul>\n * ⇒ 우리 블록을 알아보려 하지 않는다. <b>이 목록으로 설명되지 않는 마커가 파일에 있으면</b>\n * 되돌리기를 완료로 만들지 않고 백업을 지킨다.\n */\n foreignBlocks?: string[];\n}\n\nexport interface InitRecord {\n version: number;\n /** 경로 → 그 파일에 대한 계약. */\n files: Record<string, FileContract>;\n /** 우리가 «실제로 만든» 디렉터리. 적용이 mkdir 결과로 채운다. */\n createdDirectories: string[];\n}\n\nexport function emptyRecord(): InitRecord {\n return { version: RECORD_VERSION, files: {}, createdDirectories: [] };\n}\n\n/**\n * 디스크에 있는 것의 «상태». ★부르는 쪽이 넷을 구별해서 다뤄야 한다 —\n * 특히 {@code corrupt}·{@code legacy} 는 「없음」이 아니다. 덮으면 안 된다.\n */\nexport type RecordState =\n | { state: \"absent\" }\n | { state: \"valid\"; record: InitRecord }\n | { state: \"corrupt\"; reason: string }\n | { state: \"legacy\"; reason: string };\n\n/**\n * ★<b>단일 로더.</b> 기록을 읽는 곳은 여기 하나다.\n *\n * <p>⛔관용을 베풀지 않는다. 한 칸이라도 계약을 벗어나면 «손상»이다 — 그 기록으로 파일을 지우는\n * 것이 되돌리기가 하는 일이고, 판단 재료가 반쯤 맞는 상태로 그 일을 해선 안 된다.\n */\nexport function readRecord(content: string | undefined): RecordState {\n if (content === undefined) {\n return { state: \"absent\" };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return { state: \"corrupt\", reason: `${HARNESS_RECORD_PATH} is not valid JSON` };\n }\n if (!isObject(parsed)) {\n return { state: \"corrupt\", reason: `${HARNESS_RECORD_PATH} is not a JSON object` };\n }\n if (parsed.kind !== RECORD_KIND) {\n return {\n state: \"corrupt\",\n reason: `${HARNESS_RECORD_PATH} exists but is not an ai-erd record (kind=`\n + `${JSON.stringify(parsed.kind)})`,\n };\n }\n if (parsed.version !== RECORD_VERSION) {\n // ★모르는 판은 손상이 아니다 — 다른 판의 CLI 가 쓴 «온전한» 기록일 수 있다.\n // 그 기록의 뜻을 우리가 추측해선 안 되고, 덮어서도 안 된다.\n return {\n state: \"legacy\",\n reason: `${HARNESS_RECORD_PATH} was written by another version of this CLI `\n + `(record version ${JSON.stringify(parsed.version)}, this CLI reads ${RECORD_VERSION})`,\n };\n }\n const files = parsed.files;\n if (!isObject(files)) {\n return { state: \"corrupt\", reason: `${HARNESS_RECORD_PATH} has no \"files\" object` };\n }\n const out: Record<string, FileContract> = {};\n for (const [path, raw] of Object.entries(files)) {\n const read = readContract(raw);\n if (\"problem\" in read) {\n return {\n state: \"corrupt\",\n reason: `${HARNESS_RECORD_PATH} has an unusable entry for ${path} — it ${read.problem}`,\n };\n }\n out[path] = read.contract;\n }\n const directories = parsed.createdDirectories;\n if (directories !== undefined && !isStringArray(directories)) {\n return { state: \"corrupt\", reason: `${HARNESS_RECORD_PATH} has a malformed createdDirectories` };\n }\n return {\n state: \"valid\",\n record: {\n version: RECORD_VERSION,\n files: out,\n createdDirectories: directories === undefined ? [] : [...directories],\n },\n };\n}\n\n/**\n * 구판(7차 이전)이 기록을 두던 자리 — {@code .ai-erd/config.json} 의 {@code managed} 칸.\n * 그 칸에 들어 있던 «평행한 map» 이름들이다. 하나라도 있으면 우리 구판이 쓴 기록이다.\n *\n * <p>★<b>사용자가 적은 {@code managed} 와 구별해야 한다</b>(7차 독립 리뷰 I2: config 의\n * {@code managed} 칸은 기본적으로 사용자 것이다). 그래서 이름만 보지 않고 «그 안의 모양»을 본다.\n */\nconst LEGACY_MANAGED_KEYS = [\n \"created\", \"originals\", \"lastWritten\", \"lastWrittenFragment\", \"lastWrittenBody\",\n \"replacedEntries\", \"replacedBlocks\", \"blockAdded\", \"foreignMarkers\",\n] as const;\n\n/**\n * 이 config 안에 «구판이 쓴 기록»이 들어 있나.\n *\n * <p>★<b>없는 것과 못 읽는 것은 다르다</b>(9차 1차 리뷰 B6). 기록을 우리 파일로 내보낸 뒤,\n * 구판이 config 에 남긴 기록이 있는 저장소에서 되돌리기가 <b>「이전 init 기록이 없다」</b>고\n * 안내했다 — 그 config 안에 사용자 원본 백업이 그대로 들어 있는데도. 그러면 사용자는\n * 「되돌릴 것이 없구나」로 읽고 그 백업을 영영 쓰지 않는다.\n */\nexport function legacyManagedRecord(configContent: string | undefined): boolean {\n if (configContent === undefined) {\n return false;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(configContent);\n } catch {\n return false;\n }\n if (!isObject(parsed) || !isObject(parsed.managed)) {\n return false;\n }\n const managed = parsed.managed;\n const hasLegacyShape = LEGACY_MANAGED_KEYS.some(\n (key) => Object.prototype.hasOwnProperty.call(managed, key),\n );\n if (!hasLegacyShape) {\n return false;\n }\n // ★<b>모양만으로는 «사용자가 적은 칸»과 구별되지 않는다</b> — 두 판정이 맞부딪힌 자리다\n // (7차 I2 「config 의 managed 는 사용자 것이다」 ↔ 9차 B6 「구판 기록을 없는 것으로 안내한다」).\n // 그래서 구판이 «함께 쓴 것»을 본다: 구판은 managed 를 혼자 쓰지 않았다.\n // · generatedBy — 우리 CLI 만 적는 칸(cliVersion)\n // · managed.lastWritten 안의 «config 자기 경로» — 구판이 자기 지문을 거기 넣었다\n // 둘 중 하나라도 있으면 우리 구판이 쓴 파일이고, 없으면 사용자 것으로 둔다.\n if (typeof parsed.generatedBy === \"string\") {\n return true;\n }\n const lastWritten = managed.lastWritten;\n return isObject(lastWritten)\n && Object.prototype.hasOwnProperty.call(lastWritten, HARNESS_CONFIG_PATH);\n}\n\n/** 구판 기록을 만난 사람에게 할 말. ★자동 마이그레이션을 «하지 않는다»는 사실도 말한다. */\nexport function legacyManagedNotice(configPath: string): string {\n return `${configPath} holds an init record written by an older version of this CLI `\n + `(a \"managed\" field). This version keeps its record in ${HARNESS_RECORD_PATH} and cannot `\n + \"read that one, so your saved originals are still in there and nothing was changed. \"\n + \"Undo with the version that wrote it (for example: npx @ai-erd/mcp@0.2 ai-erd init --undo), \"\n + \"then run this version again.\";\n}\n\n/** 기록 파일의 저장 모양. ★지문을 담지 않는다 — 자기 해시를 담은 문서의 해시라는 순환이 생긴다. */\nexport function serializeRecord(record: InitRecord): string {\n return `${JSON.stringify({\n kind: RECORD_KIND,\n version: RECORD_VERSION,\n files: record.files,\n createdDirectories: record.createdDirectories,\n }, null, 2)}\\n`;\n}\n\n/**\n * 한 항목을 읽는다. ★읽어 내지 못하면 «무엇이 어긋났나»를 함께 돌려준다 —\n * 사용자가 손대야 할 파일이라 「읽을 수 없다」만으로는 고칠 수 없다.\n */\ntype ContractRead = { contract: FileContract } | { problem: string };\n\nfunction readContract(raw: unknown): ContractRead {\n if (!isObject(raw)) {\n return { problem: \"is not a JSON object\" };\n }\n const scope = raw.scope;\n if (scope !== \"whole\" && scope !== \"entry\" && scope !== \"block\" && scope !== \"fields\") {\n return { problem: `has an unknown scope (${JSON.stringify(raw.scope)})` };\n }\n if (typeof raw.createdByUs !== \"boolean\") {\n return { problem: \"does not say whether ai-erd created the file\" };\n }\n const original = readOwned(raw.original);\n const written = readOwned(raw.written);\n if (original === undefined) {\n return { problem: \"has no readable record of what was there before\" };\n }\n if (written === undefined) {\n return { problem: \"has no readable record of what ai-erd wrote\" };\n }\n if (raw.fileFingerprint !== undefined && typeof raw.fileFingerprint !== \"string\") {\n return { problem: \"has a malformed fileFingerprint\" };\n }\n if (raw.writtenFields !== undefined && !isObject(raw.writtenFields)) {\n return { problem: \"has a malformed writtenFields\" };\n }\n let originalFields: Record<string, Owned> | undefined;\n if (raw.originalFields !== undefined) {\n if (!isObject(raw.originalFields)) {\n return { problem: \"has a malformed originalFields\" };\n }\n originalFields = {};\n for (const [field, value] of Object.entries(raw.originalFields)) {\n const owned = readOwned(value);\n if (owned === undefined) {\n return { problem: `has no readable original for the field ${field}` };\n }\n originalFields[field] = owned;\n }\n }\n if (raw.foreignBlocks !== undefined && !isStringArray(raw.foreignBlocks)) {\n return { problem: \"has a malformed foreignBlocks\" };\n }\n if (scope === \"block\" && raw.foreignBlocks === undefined) {\n // ★블록 계약은 「이 파일에 원래 무엇이 있었나」 없이는 완료를 판정할 수 없다. 없으면 없다고 한다.\n return { problem: 'owns a marker block but does not say what marker blocks were already in the file' };\n }\n if (scope === \"fields\") {\n const problem = fieldsContractProblem({\n written,\n writtenFields: isObject(raw.writtenFields) ? raw.writtenFields : undefined,\n originalFields,\n });\n if (problem !== undefined) {\n return { problem };\n }\n }\n const contract: FileContract = {\n scope, createdByUs: raw.createdByUs, original, written,\n };\n if (typeof raw.fileFingerprint === \"string\") contract.fileFingerprint = raw.fileFingerprint;\n if (isObject(raw.writtenFields)) contract.writtenFields = { ...raw.writtenFields };\n if (originalFields !== undefined) contract.originalFields = originalFields;\n if (isStringArray(raw.foreignBlocks)) contract.foreignBlocks = [...raw.foreignBlocks];\n return { contract };\n}\n\n/**\n * {@code scope===\"fields\"} 계약이 «스스로 어긋나지» 않았나. ★로더와 계획이 <b>같은 이 함수</b>를\n * 쓴다 — 두 곳에 두면 「한쪽은 괜찮다 하고 다른 쪽은 아니라 한다」가 또 생긴다.\n *\n * <p>★<b>칸이 «있는지»에서 멈추면 반쯤 맞는 기록으로 파일을 고친다</b>(9차 B1). 세 번 뚫렸다:\n * <ul>\n * <li>{@code writtenFields.endpoint} 하나만 지운 기록을 유효로 읽었고, 되돌리기는 그 칸을\n * 「사용자가 고쳤다」로 읽어 우리 값을 남긴 뒤 <b>사용자 원본이 든 기록까지</b> 지웠다.</li>\n * <li>두 map 에서 «동시에» 지우면 그것도 유효였다 — 칸 집합끼리만 맞춰 봤기 때문이다.\n * 그래서 우리가 쓴 본문에 있는 «우리 칸»이 기록에 적혀 있는지도 본다(2차 리뷰 B1).</li>\n * <li>★원본을 {@code {at:\"text\"}} 로 바꿔 두면 유효로 읽혔고, 되돌리기는 «되돌릴 수 없는\n * 모양»을 부재로 취급해 그 칸을 지웠다 — config 가 {@code &#123;&#125;} 가 되고 기록이 사라졌다.\n * fields 의 원본은 {@code absent} 또는 {@code json} 뿐이다(2차 리뷰 B1).</li>\n * </ul>\n *\n * @param ownedFields 부르는 쪽이 아는 «우리 칸» 이름. 계획은 넘기고(그래서 양쪽 방향을 다 본다),\n * 로더는 넘기지 않는다 — 어느 칸이 우리 것인지는 형식 층의 지식이 아니다.\n */\nexport function fieldsContractProblem(\n contract: {\n written: Owned;\n writtenFields?: Record<string, unknown>;\n originalFields?: Record<string, Owned>;\n },\n ownedFields?: readonly string[],\n): string | undefined {\n const { written, writtenFields, originalFields } = contract;\n if (writtenFields === undefined) {\n return \"owns only some fields of the file but does not say which ones it wrote (writtenFields)\";\n }\n if (originalFields === undefined) {\n return \"owns only some fields of the file but does not say what was in them before (originalFields)\";\n }\n const writtenKeys = Object.keys(writtenFields).sort();\n const originalKeys = Object.keys(originalFields).sort();\n if (writtenKeys.length !== originalKeys.length\n || writtenKeys.some((key, at) => key !== originalKeys[at])) {\n return `lists different fields as written (${writtenKeys.join(\", \") || \"none\"}) and as `\n + `backed up (${originalKeys.join(\", \") || \"none\"})`;\n }\n for (const key of writtenKeys) {\n // ★되돌리기가 할 수 있는 일은 「그 값을 도로 넣기」와 「그 칸을 빼기」뿐이다. 그 둘이 아닌\n // 모양을 들고 있으면 그것은 판정 자료가 아니라 손상이다.\n const original = originalFields[key]!;\n if (original.at !== \"absent\" && original.at !== \"json\") {\n return `records the original of ${key} as ${original.at}, which is not something --undo `\n + \"can put back into a JSON field\";\n }\n }\n if (written.at !== \"text\") {\n return \"owns only some fields of the file but does not hold the file text it wrote\";\n }\n let body: unknown;\n try {\n body = JSON.parse(written.text);\n } catch {\n return \"holds a written file body that is not valid JSON\";\n }\n if (!isObject(body)) {\n return \"holds a written file body that is not a JSON object\";\n }\n for (const key of writtenKeys) {\n if (!Object.prototype.hasOwnProperty.call(body, key)) {\n return `says it wrote ${key}, but that field is not in the file body it recorded`;\n }\n if (stableStringify(body[key]) !== stableStringify(writtenFields[key])) {\n return `records a different value for ${key} than the file body it wrote`;\n }\n }\n if (ownedFields !== undefined) {\n // ★반대 방향. 우리가 쓴 본문에 «우리 칸»이 있는데 기록이 그 칸을 말하지 않으면, 그 칸에 대한\n // 판정 자료가 없다는 뜻이다 — 두 map 에서 동시에 지운 기록이 그래서 유효로 읽혔다.\n for (const key of ownedFields) {\n if (Object.prototype.hasOwnProperty.call(body, key)\n && !Object.prototype.hasOwnProperty.call(writtenFields, key)) {\n return `wrote ${key} into the file but does not record what it put there`;\n }\n }\n }\n return undefined;\n}\n\nfunction readOwned(raw: unknown): Owned | undefined {\n if (!isObject(raw)) {\n return undefined;\n }\n if (raw.at === \"absent\") {\n return ABSENT;\n }\n if (raw.at === \"json\") {\n // ⚠value 는 «없어도» 되는 칸이 아니다 — 키가 있어야 한다. null 이 값이기 때문이다.\n return Object.prototype.hasOwnProperty.call(raw, \"value\")\n ? { at: \"json\", value: raw.value }\n : undefined;\n }\n if (raw.at === \"text\") {\n return typeof raw.text === \"string\" ? { at: \"text\", text: raw.text } : undefined;\n }\n return undefined;\n}\n\n/**\n * 객체 칸의 «순서»를 지운 JSON.\n *\n * <p>★{@code JSON.parse}→{@code stringify} 는 공백은 정규화하지만 칸 순서는 그대로 둔다.\n * 그래서 사람이 편집기로 열었다 저장만 해도 「사용자가 고쳤다」로 잡혔다(4차 독립 리뷰 S1).\n *\n * <p>★<b>여기 한 벌만 둔다.</b> 기록의 «상호 일치» 판정과 계획의 «값이 바뀌었나» 판정이 다른\n * 정규형을 쓰면 「한 쪽은 같다고 하고 다른 쪽은 다르다고 한다」가 또 생긴다 — 그것이 다섯 차수를\n * 관통한 실패의 이름이었다.\n *\n * <p>⚠배열 순서는 유지한다 — 거기선 순서가 곧 내용이다(MCP 인자 목록 등).\n */\nexport function stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`).join(\",\")}}`;\n }\n return JSON.stringify(value) ?? \"null\";\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n}\n","import {\n AGENT_TARGETS,\n readServerEntry,\n buildServerEntry,\n codexAddCommand,\n codexProfileSetup,\n codexRemoveCommand,\n mergeServerEntry,\n readRoleFromEntry,\n removeServerEntry,\n SERVER_NAME,\n} from \"./agentTargets\";\nimport {\n existingMarkerBlock,\n markerEvidence,\n HARNESS_CONFIG_PATH,\n HARNESS_DOC_PATH,\n HARNESS_RECORD_PATH,\n removeMarkerBlock,\n replaceMarkerBlockWith,\n renderAgentNote,\n renderHarnessDoc,\n upsertMarkerBlock,\n} from \"./harnessDoc\";\nimport {\n ABSENT,\n emptyRecord,\n fieldsContractProblem,\n legacyManagedNotice,\n legacyManagedRecord,\n readRecord,\n serializeRecord,\n stableStringify,\n type FileContract,\n type InitRecord,\n type Owned,\n type RecordState,\n} from \"./initRecord\";\nimport { createHash } from \"node:crypto\";\nimport { ROLE_ENV_VAR, type HarnessRole } from \"./role\";\n\n/**\n * init 이 «무엇을 쓸지»를 순수하게 계산한다. 파일을 읽지도 쓰지도 않는다.\n *\n * ★<b>계획과 적용을 가른 이유.</b> 이 명령은 남의 저장소에 파일을 쓴다 — 가장 위험한 종류의\n * 일이다. 계산이 순수하면 「어떤 상태에서 무엇을 쓰는가」를 전부 시험으로 고정할 수 있고,\n * {@code --dry-run} 이 «진짜로 일어날 일»을 그대로 보여 준다(따로 만든 미리보기가 아니다).\n *\n * <p>★★<b>2026-09-27, 여덟 차례의 독립 리뷰 뒤에 경계를 셋으로 나눴다.</b> 다섯 차수 동안 같은\n * 축이 계속 샜고, 마지막 리뷰가 그 이유에 이름을 붙였다 — 기록이 «경로를 키로 한 평행한 map\n * 아홉 개»여서 나온 결함이 거의 전부 「한 map 은 X 라 하고 다른 map 은 Y 라 한다」였다.\n * 고칠 때마다 나는 그중 <b>한 map</b>을 고쳤다.\n * <ol>\n * <li>{@code initRecord.ts} — 기록의 «형식과 상태». 부재·유효·손상·구판을 명시적으로 돌려준다.</li>\n * <li><b>이 파일</b> — «파일별 복구 계약». 한 파일의 사실이 한 항목에 모이고,\n * 완료·보존·미해결이 {@link Outcome} 타입으로 갈린다.</li>\n * <li>{@code initCommand.applyPlan} — 적용과 기록 저장. 실제 변경과 mkdir 결과를 한 경계에서 모은다.</li>\n * </ol>\n */\n\n/** 규칙 블록을 넣을 지침 파일. 없으면 만드는 것과 있을 때만 고치는 것을 구분한다. */\nconst NOTE_TARGETS = [\n { path: \"AGENTS.md\", createIfMissing: true },\n { path: \"CLAUDE.md\", createIfMissing: false },\n] as const;\n\nexport const MANAGED_PATHS: readonly string[] = [\n ...AGENT_TARGETS.map((target) => target.path),\n ...NOTE_TARGETS.map((target) => target.path),\n HARNESS_DOC_PATH,\n HARNESS_CONFIG_PATH,\n HARNESS_RECORD_PATH,\n];\n\n/** 경로 → 현재 내용. 값이 {@code undefined} 면 «파일 없음». */\nexport type FileSnapshot = ReadonlyMap<string, string | undefined>;\n\nexport interface FileWrite {\n path: string;\n content: string;\n existed: boolean;\n}\n\nexport interface InitPlan {\n writes: FileWrite[];\n deletes: string[];\n /** 사용자가 직접 칠 명령 — 우리가 전역 설정을 고치지 않는다. */\n codexCommand: string;\n /** Codex 에서 세션마다 역할을 바꾸는 법(프로필). 되돌리기 계획에는 없다. */\n codexProfile?: string[];\n notes: string[];\n /** init 계획이 남기는 기록. {@code .ai-erd/init-record.json} 에 저장된다. */\n record?: InitRecord;\n /**\n * ★<b>아무것도 하지 말아야 하는 이유.</b> 있으면 부르는 쪽이 멈추고 이 문장을 보여 준다.\n *\n * <p>기록을 읽어 내지 못했을 때 그냥 진행하면 그 파일에 든 «남의 원본 백업»을 백업 없이\n * 덮는다 — 읽기를 거절했는데 쓰기는 거절하지 않은 것이다(2026-09-27 8차 독립 리뷰 I1).\n */\n refusal?: string;\n /**\n * 되돌리기가 «치워도 되는» 디렉터리 — 우리가 만든 것뿐이다.\n *\n * <p>★비었다는 것과 우리 것이라는 것은 다른 사실이다(4차 독립 리뷰 S3).\n */\n removableDirectories?: string[];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 소유한 값 다루기\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** JSON 값을 {@link Owned} 로. {@code present} 가 false 면 «그 자리에 없다»는 뜻이다. */\nfunction ownedJson(value: unknown, present: boolean): Owned {\n return present ? { at: \"json\", value } : ABSENT;\n}\n\nfunction ownedText(text: string | undefined): Owned {\n return text === undefined ? ABSENT : { at: \"text\", text };\n}\n\n/**\n * 두 소유값이 같은가. ★<b>JSON 타입을 보존한다.</b>\n *\n * <p>예전엔 문자열은 원문 그대로, 객체는 JSON 문자열로 해시해서 <b>객체와 「그 객체의 JSON 을\n * 담은 문자열」이 같은 지문</b>이 됐고, 타입이 다른데도 「원본 복구 완료」로 판정하며 객체\n * 백업을 지웠다(7차 독립 리뷰 I5). 정규화는 «칸 순서와 공백»만 지우는 일이다.\n */\nfunction sameOwned(left: Owned, right: Owned): boolean {\n if (left.at !== right.at) {\n return false;\n }\n if (left.at === \"absent\") {\n return true;\n }\n if (left.at === \"text\" && right.at === \"text\") {\n return left.text === right.text;\n }\n return left.at === \"json\" && right.at === \"json\"\n && stableStringify(left.value) === stableStringify(right.value);\n}\n\n/** 내용 지문. 암호학적 용도가 아니라 «바뀌었나»만 본다. */\nexport function contentFingerprint(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nfunction serialize(body: unknown): string {\n return `${JSON.stringify(body, null, 2)}\\n`;\n}\n\n/** 이 경로의 내용 지문. JSON 파일은 칸 순서를 지운 정규형으로 잰다. */\nfunction fingerprintFor(path: string, content: string): string {\n if (!path.endsWith(\".json\")) {\n return contentFingerprint(content);\n }\n try {\n return contentFingerprint(stableStringify(JSON.parse(content)));\n } catch {\n return contentFingerprint(content);\n }\n}\n\nfunction parseJsonObject(content: string): Record<string, unknown> | undefined {\n try {\n const parsed = JSON.parse(content) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n } catch {\n return undefined;\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// config 의 «우리 칸»\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface ConfigBodyValues {\n projectUuid: string;\n projectName: string;\n endpoint: string;\n cliVersion: string;\n versions: Record<string, string>;\n}\n\n/** init 이 config 에 쓰는 내용. ★적는 칸의 진실원이 여기 하나다. */\nfunction configBodyOf(values: ConfigBodyValues): Record<string, unknown> {\n return {\n version: 1,\n project: { uuid: values.projectUuid, name: values.projectName },\n endpoint: values.endpoint,\n generatedBy: values.cliVersion,\n promptVersions: values.versions,\n };\n}\n\n/**\n * config 에서 «우리 것»인 칸. ★여기 없는 칸은 <b>사용자가 적은 것</b>이고 되돌리기가 손대지 않는다.\n *\n * <p>목록을 {@link configBodyOf} 에서 «뽑아낸다» — 손으로 베끼면 칸이 늘 때 잊는다.\n * 같은 자리를 이미 한 번 틀렸다(4차 독립 리뷰 I3).\n *\n * <p>★{@code managed} 는 이 목록에 «없다». 기록이 자기 파일로 나갔기 때문이다 — 사용자가\n * config 에 {@code managed} 라는 칸을 적어 두어도 그것은 사용자 것이다(7차 독립 리뷰 I2).\n */\nconst OUR_CONFIG_FIELDS: readonly string[] = Object.keys(configBodyOf({\n projectUuid: \"\", projectName: \"\", endpoint: \"\", cliVersion: \"\", versions: {},\n}));\n\nconst hasField = (object: Record<string, unknown>, field: string) =>\n Object.prototype.hasOwnProperty.call(object, field);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 계획 — init\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface PlanInitInput {\n role: HarnessRole;\n env?: \"prod\" | \"dev\";\n projectName: string;\n projectUuid: string;\n endpoint: string;\n cliVersion: string;\n files: FileSnapshot;\n /** 직전 실행의 기록 «상태». ★유효하지 않으면 init 이 멈춘다 — 덮으면 백업이 사라진다. */\n previous?: RecordState;\n /** 서버에서 받은 문서 본문. 없으면 패키지 기본값(= 오프라인 기본값)을 쓴다. */\n documents?: { doc?: string; agentNote?: string; versions?: Record<string, string> };\n}\n\n/**\n * ★<b>기록 때문에 멈춰야 하나 — «파일만» 보고 답한다.</b>\n *\n * <p>계획을 세우는 것보다 «앞»에 이 질문이 있어야 한다. 예전엔 이 판정이 {@code planInit} 안에만\n * 있었고, 부르는 쪽은 그 전에 프로젝트를 해결했다 — 프로젝트가 0개면 <b>원격에 프로젝트를 만든\n * 뒤에</b> 「아무것도 바꾸지 않았다」는 예외를 냈다(9차 1차 리뷰 B7). 로컬 쓰기가 0이어도\n * 부수효과가 0인 것은 아니다. 그래서 순수 함수로 빼서 원격 호출 전에 물을 수 있게 한다.\n *\n * <p>⚠{@code planInit} 도 이 함수를 쓴다 — 두 곳에 같은 판단을 두면 어긋난다.\n */\nexport function initRefusal(files: FileSnapshot, previous?: RecordState): string | undefined {\n const state = previous ?? readRecord(files.get(HARNESS_RECORD_PATH));\n if (state.state === \"corrupt\" || state.state === \"legacy\") {\n // ★읽어 내지 못한 기록을 덮으면 그 안의 «남의 원본 백업»이 사라진다. 읽기를 거절했으면\n // 쓰기도 거절해야 한다(8차 독립 리뷰 I1).\n return `${state.reason}. Nothing was changed — move that file aside (or restore it) and run again.`;\n }\n if (state.state === \"absent\" && legacyManagedRecord(files.get(HARNESS_CONFIG_PATH))) {\n // ★구판이 config 에 남긴 기록이다. 우리는 그것을 이행할 수 없고, 덮으면 그 안의 사용자\n // 원본이 «읽을 수는 있지만 쓸 수 없는» 글이 된다 — 아무도 다시 꺼내지 않는다(9차 B6).\n return legacyManagedNotice(HARNESS_CONFIG_PATH);\n }\n const carried = state.state === \"valid\" ? state.record : emptyRecord();\n for (const [path, contract] of Object.entries(carried.files)) {\n if (contract.scope !== \"fields\") {\n continue;\n }\n // ★<b>검증 «전» 기록으로 파일을 고치지 않는다.</b> 같은 완전성 검사가 되돌리기에만 있었고,\n // 재init 은 그 기록을 그대로 실행해 «현재 값»을 새 원본으로 적어 버렸다(3차 리뷰 F1).\n // ⛔로더에 도메인 지식을 넣는 대신, 도메인을 아는 이 경계에서 두 진입점이 같은 검사를 한다.\n const problem = fieldsContractProblem(contract, OUR_CONFIG_FIELDS);\n if (problem !== undefined) {\n return `${HARNESS_RECORD_PATH}'s record for ${path} ${problem}. Nothing was changed — `\n + \"restore that file (or move it aside) and run again.\";\n }\n }\n return undefined;\n}\n\nexport function planInit(input: PlanInitInput): InitPlan {\n const previous = input.previous ?? readRecord(input.files.get(HARNESS_RECORD_PATH));\n const refusal = initRefusal(input.files, previous);\n if (refusal !== undefined) {\n return {\n writes: [], deletes: [], notes: [],\n codexCommand: codexAddCommand({ role: input.role, env: input.env, endpoint: input.endpoint }),\n refusal,\n };\n }\n\n const carriedRecord = previous.state === \"valid\" ? previous.record : emptyRecord();\n\n const entry = buildServerEntry({ role: input.role, env: input.env, endpoint: input.endpoint });\n const writes: FileWrite[] = [];\n const notes: string[] = [];\n const record: InitRecord = {\n version: carriedRecord.version,\n files: { ...carriedRecord.files },\n createdDirectories: [...carriedRecord.createdDirectories],\n };\n\n /**\n * ★<b>이어받은 계약이 아직 참인가.</b> 기록은 «지난 실행의 주장»이고 그 사이에 파일이 바뀔 수\n * 있다. 지금 값이 우리가 쓴 것도 아니고 되돌릴 목표도 아니면 그 백업은 낡은 것이다 —\n * 지금 값이 사용자의 것이므로 그것이 새 기준이 되어야 한다(6차 I3 → 8차 I4).\n */\n const priorOf = (path: string, current: Owned): FileContract | undefined => {\n const prior = record.files[path];\n if (prior === undefined) {\n return undefined;\n }\n if (sameOwned(prior.written, current) || sameOwned(prior.original, current)) {\n return prior;\n }\n delete record.files[path];\n notes.push(`${path}: it changed outside ai-erd, so the older backup was dropped and this is the new baseline.`);\n return undefined;\n };\n\n // ── MCP 설정 파일들 — 우리가 «항목 하나»를 소유한다 ──────────────────────────\n for (const target of AGENT_TARGETS) {\n const existing = input.files.get(target.path);\n const currentEntry = existing === undefined ? undefined : readServerEntry(existing);\n const prior = priorOf(target.path, ownedJson(currentEntry, currentEntry !== undefined));\n const merged = mergeServerEntry(existing, entry);\n if (existing === merged.content) {\n continue;\n }\n const before = previousRole(existing);\n if (merged.replaced && before && before !== input.role) {\n notes.push(`${target.path}: role ${before} → ${input.role}`);\n }\n const original = prior?.original ?? ownedJson(merged.replacedEntry, merged.replaced);\n if (prior === undefined && original.at !== \"absent\") {\n notes.push(`${target.path}: your existing \"${SERVER_NAME}\" entry was saved and will be restored by --undo`);\n }\n record.files[target.path] = {\n scope: \"entry\",\n createdByUs: prior?.createdByUs ?? existing === undefined,\n original,\n written: ownedJson(readServerEntry(merged.content), true),\n fileFingerprint: fingerprintFor(target.path, merged.content),\n };\n writes.push({ path: target.path, content: merged.content, existed: existing !== undefined });\n }\n\n // ── HARNESS.md — 우리가 «파일 전체»를 소유한다 ────────────────────────────────\n const existingDoc = input.files.get(HARNESS_DOC_PATH);\n const priorDoc = priorOf(HARNESS_DOC_PATH, ownedText(existingDoc));\n const docContent = renderHarnessDoc({\n projectName: input.projectName,\n projectUuid: input.projectUuid,\n endpoint: input.endpoint,\n }, input.documents?.doc);\n const docOriginal = priorDoc?.original ?? ownedText(existingDoc);\n if (priorDoc === undefined && docOriginal.at !== \"absent\") {\n notes.push(`${HARNESS_DOC_PATH} already existed; its original was saved and --undo will restore it.`);\n }\n record.files[HARNESS_DOC_PATH] = {\n scope: \"whole\",\n createdByUs: priorDoc?.createdByUs ?? existingDoc === undefined,\n original: docOriginal,\n written: ownedText(docContent),\n fileFingerprint: fingerprintFor(HARNESS_DOC_PATH, docContent),\n };\n if (docContent !== existingDoc) {\n writes.push({ path: HARNESS_DOC_PATH, content: docContent, existed: existingDoc !== undefined });\n }\n\n // ── AGENTS.md / CLAUDE.md — 우리가 «블록 하나»를 소유한다 ─────────────────────\n const note = renderAgentNote(input.documents?.agentNote);\n for (const target of NOTE_TARGETS) {\n const existing = input.files.get(target.path);\n if (existing === undefined && !target.createIfMissing) {\n notes.push(`${target.path} not found — skipped; AGENTS.md already reaches this agent.`);\n continue;\n }\n const blockNow = existing === undefined ? undefined : existingMarkerBlock(existing);\n const carried = record.files[target.path];\n // ⚠아래 판정은 «새 기준을 만들기 전에» 온다. 정상 위치에 블록이 있을 때만 검사하면,\n // 그 블록을 고치고 사본을 옆에 둔 파일이 가드를 건너뛰었다(3차 리뷰 B2).\n let content: string;\n try {\n content = upsertMarkerBlock(existing, note);\n } catch (error) {\n // ★우리 블록을 «다시 찾을 수 있게» 넣을 수 없는 파일이다 — 그 파일만 건너뛰고 나머지\n // init 은 계속한다. ⛔이때 기록은 «한 글자도» 건드리지 않는다: 새 기준도 못 세웠는데\n // 옛 백업을 버리면 양쪽 다 잃는다(7차 독립 리뷰 I4).\n notes.push(`${target.path}: ${error instanceof Error ? error.message : String(error)}`);\n continue;\n }\n if (carried?.scope === \"block\" && unexplainedMarkers(existing, carried) > 0) {\n // ★<b>이 파일의 마커를 기록으로 설명할 수 없다.</b> 우리 블록이 옮겨졌거나 한 벌 더\n // 있을 수 있다는 뜻이다(펜스·인용문 안, 제목만 고친 것, 정상 블록 옆의 사본 포함).\n // 그대로 진행하면 계약을 버려(priorOf) 사용자 원본 백업이 사라지고 파일에는 우리 블록이\n // 둘이 된다 — 그 상태의 undo 는 «새로 더한 것만» 걷어내고 완료로 처리했다(9차 B2).\n // ⇒ 이 파일은 손대지 않고 기록도 그대로 둔다. 자리를 되돌리는 것은 사람 몫이다.\n notes.push(\n `${target.path}: this file has an ai-erd marker block that is not where ai-erd can find `\n + \"it again (inside a code fence, a quote, or edited). Left untouched and the earlier \"\n + \"backup kept — move that block back to the top level, or remove it, then run again.\",\n );\n continue;\n }\n // ★<b>블록을 «못 찾는다»는 사실은 백업을 버릴 근거가 아니다</b>(3차 리뷰 B2). 마커가\n // 변형·삭제돼 우리 블록이 검출되지 않으면 예전엔 계약을 버려 사용자 원본이 사라졌다.\n // 새 기준은 «정상 위치에 사용자 것이 들어와 있을 때»만 세운다 — 그때만 되돌릴 목표가 바뀐다.\n const prior = blockNow === undefined ? carried : priorOf(target.path, ownedText(blockNow));\n if (content === existing) {\n continue;\n }\n const original = prior?.original ?? ownedText(blockNow);\n if (prior === undefined && original.at !== \"absent\") {\n notes.push(`${target.path}: an existing ai-erd block was saved and will be restored by --undo`);\n }\n record.files[target.path] = {\n scope: \"block\",\n createdByUs: prior?.createdByUs ?? existing === undefined,\n original,\n written: ownedText(existingMarkerBlock(content)),\n fileFingerprint: fingerprintFor(target.path, content),\n // init «전»에 이 파일에 있던 관리 블록들의 신원. 되돌리기가 「남은 마커를 설명할 수 있나」를\n // 이것으로 묻는다. ★재init 은 이어받는다 — 다시 재면 우리가 쓴 블록이 «원래 있던 것»이 된다.\n // ★{@code carried} 를 먼저 본다 — {@code priorOf} 가 새 기준을 세웠다는 것이 「남의 예제\n // 목록을 다시 모아도 된다」는 허가가 아니다. 다시 모으면 «우리가 옮겨 둔 사본»이\n // 「원래 있던 예제」로 등록되고, 그다음 되돌리기가 그것을 남긴 채 끝났다(3차 리뷰 B2).\n foreignBlocks: carried?.foreignBlocks ?? prior?.foreignBlocks ?? markerEvidence(existing),\n };\n writes.push({ path: target.path, content, existed: existing !== undefined });\n }\n\n // ── config.json — 우리가 «칸 몇 개»를 소유한다. 나머지는 사용자 것이다 ────────\n const existingConfig = input.files.get(HARNESS_CONFIG_PATH);\n const ourFields = configBodyOf({\n projectUuid: input.projectUuid,\n projectName: input.projectName,\n endpoint: input.endpoint,\n cliVersion: input.cliVersion,\n // ★어느 판의 규칙으로 썼나. 이게 없으면 「무엇이 적혀 있었나」를 나중에 못 되짚는다.\n versions: input.documents?.versions ?? {},\n });\n const theirConfig = existingConfig === undefined ? undefined : parseJsonObject(existingConfig);\n if (existingConfig !== undefined && theirConfig === undefined) {\n // JSON 객체가 아닌 파일은 병합할 수 없다 — 손대지 않는다. ⛔이미 있던 계약도 지우지 않는다:\n // 그 안에 아직 못 되돌린 원본이 있을 수 있다(8차 독립 리뷰 I3).\n notes.push(`${HARNESS_CONFIG_PATH} is not a JSON object — left untouched.`);\n } else {\n const priorConfig = record.files[HARNESS_CONFIG_PATH];\n const originalFields: Record<string, Owned> = {};\n for (const field of OUR_CONFIG_FIELDS) {\n const presentNow = theirConfig !== undefined && hasField(theirConfig, field);\n const currentValue = presentNow ? theirConfig![field] : undefined;\n const priorOriginal = priorConfig?.originalFields?.[field];\n const priorWritten = priorConfig?.writtenFields;\n // ★재init: 사용자가 우리 칸을 고쳤으면 «그 값»이 새 원본이다. 옛 원본을 이어받으면\n // 되돌리기가 두 판 전 값을 복원하며 사용자 편집을 잃는다(8차 독립 리뷰 I4).\n const untouchedByUser = priorWritten !== undefined && hasField(priorWritten, field)\n && stableStringify(currentValue) === stableStringify(priorWritten[field]);\n const next = untouchedByUser && priorOriginal !== undefined\n ? priorOriginal\n : ownedJson(currentValue, presentNow);\n originalFields[field] = next;\n if (priorOriginal !== undefined && !sameOwned(next, priorOriginal)) {\n notes.push(`${HARNESS_CONFIG_PATH}: you changed ${field} — ai-erd now treats your value as the one to put back.`);\n }\n }\n const mergedConfig = serialize({ ...(theirConfig ?? {}), ...ourFields });\n record.files[HARNESS_CONFIG_PATH] = {\n scope: \"fields\",\n createdByUs: priorConfig?.createdByUs ?? existingConfig === undefined,\n original: ABSENT,\n written: ownedText(mergedConfig),\n fileFingerprint: fingerprintFor(HARNESS_CONFIG_PATH, mergedConfig),\n writtenFields: { ...ourFields },\n originalFields,\n };\n if (mergedConfig !== existingConfig) {\n writes.push({\n path: HARNESS_CONFIG_PATH,\n content: mergedConfig,\n existed: existingConfig !== undefined,\n });\n }\n }\n\n // ── 기록 — 우리 파일. 통째로 쓰고 통째로 지운다 ───────────────────────────────\n const existingRecord = input.files.get(HARNESS_RECORD_PATH);\n const recordContent = serializeRecord(record);\n // ★변경 없는 재실행은 아무 파일도 안 바꿔야 한다(5차 독립 리뷰 S2). ⚠그렇다고 「쓸 것이\n // 없다」가 「새로 알게 된 사실도 없다」를 뜻해선 안 된다 — mkdir 결과는 적용이 따로 저장한다\n // (8차 독립 리뷰 S1).\n if (recordContent !== existingRecord) {\n writes.push({\n path: HARNESS_RECORD_PATH,\n content: recordContent,\n existed: existingRecord !== undefined,\n });\n }\n\n return {\n writes,\n deletes: [],\n codexCommand: codexAddCommand({ role: input.role, env: input.env, endpoint: input.endpoint }),\n codexProfile: codexProfileSetup({ role: input.role, env: input.env, endpoint: input.endpoint }),\n notes,\n record,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 계획 — undo\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * 한 파일에 대한 처리 «결과». ★완료·보존·미해결을 타입으로 가른다.\n *\n * <p>예전엔 셋이 같은 코드 경로로 흘렀고, 그래서 「손대지 않음」이 「복구 완료」와 같은 결과가\n * 됐다 — 판단 재료가 없어 아무것도 못 한 파일의 백업까지 지웠다(8차 독립 리뷰 I3).\n */\ntype Outcome =\n /** 목표에 도달했다 — 기록에서 지운다. */\n | { kind: \"done\"; note?: string }\n /** 되돌렸다 — 파일을 쓰고 기록에서 지운다. */\n | { kind: \"write\"; content: string; note?: string }\n /** 되돌렸다 — 파일을 지우고 기록에서 지운다. */\n | { kind: \"delete\"; note?: string }\n /** 이제 사용자 것이다 — 파일은 그대로 두고 기록에서 지운다. */\n | { kind: \"keep\"; note: string }\n /** 아직 못 했다 — ★기록을 «지키고» 이유를 말한다. */\n | { kind: \"unresolved\"; note: string };\n\nexport interface PlanUndoInput {\n files: FileSnapshot;\n /** 기록 «상태». 없으면 스냅샷에서 읽는다. */\n record?: RecordState;\n}\n\n/**\n * ★<b>우리가 쓴 것만 되돌린다.</b> 남의 서버 항목, 사용자가 표식 밖에 적은 글은 그대로 둔다.\n * 파일을 지우는 것은 «우리가 만든 파일»뿐이다.\n */\nexport function planUndo(input: PlanUndoInput): InitPlan {\n const state = input.record ?? readRecord(input.files.get(HARNESS_RECORD_PATH));\n const writes: FileWrite[] = [];\n const deletes: string[] = [];\n const notes: string[] = [];\n const tail = () => {\n notes.push(`Codex keeps its own global config — remove it with: ${codexRemoveCommand()}`);\n notes.push(`If you set ${ROLE_ENV_VAR} anywhere, unset it too.`);\n };\n\n if (state.state === \"absent\") {\n // ★기록이 없으면 «아무것도» 되돌리지 않는다. 예전엔 이름이 우리 것이면 지웠는데,\n // init 을 한 적도 없는 저장소의 사용자 항목까지 지웠다(독립 재리뷰 I2).\n // ⚠단 «없다»와 «구판이 다른 자리에 남겼다»는 다른 사실이다. 구판 기록이 있는 저장소에서\n // 「이전 init 기록이 없다」고 말하면, 그 config 안의 사용자 백업을 아무도 다시 꺼내지\n // 않는다 — 되돌릴 것이 없다고 읽기 때문이다(9차 1차 리뷰 B6).\n notes.push(legacyManagedRecord(input.files.get(HARNESS_CONFIG_PATH))\n ? legacyManagedNotice(HARNESS_CONFIG_PATH)\n : `No record of a previous init in ${HARNESS_RECORD_PATH} — no local file was changed.`);\n tail();\n return { writes, deletes, codexCommand: codexRemoveCommand(), notes };\n }\n if (state.state !== \"valid\") {\n // ⛔손상·구판 기록으로 파일을 «지우지» 않는다. 그 안에 아직 못 되돌린 원본이 있을 수 있고,\n // 우리는 그것을 읽어 내지 못했다(8차 독립 리뷰 I1·S2).\n notes.push(\n `${state.reason}. Nothing was changed — that file is kept because it may hold backups `\n + \"--undo still needs. Restore it, or finish the undo with the CLI version that wrote it.\",\n );\n tail();\n return { writes, deletes, codexCommand: codexRemoveCommand(), notes };\n }\n\n const record = state.record;\n /** 남은 의무. ★끝난 항목만 지운다 — 못 한 것은 남는다. */\n const remaining: Record<string, FileContract> = { ...record.files };\n\n for (const [path, contract] of Object.entries(record.files)) {\n const outcome = undoOne(path, contract, input.files.get(path));\n if (outcome.kind !== \"unresolved\" && outcome.kind !== \"keep\" && outcome.note !== undefined) {\n notes.push(outcome.note);\n } else if (outcome.kind === \"unresolved\" || outcome.kind === \"keep\") {\n notes.push(outcome.note);\n }\n if (outcome.kind === \"unresolved\") {\n continue; // 기록을 지킨다.\n }\n delete remaining[path];\n if (outcome.kind === \"write\") {\n writes.push({ path, content: outcome.content, existed: true });\n } else if (outcome.kind === \"delete\") {\n deletes.push(path);\n }\n }\n\n tail();\n\n // ★기록 파일은 «전부 우리 것»이다 — 남은 의무가 있으면 줄여서 다시 쓰고, 없으면 지운다.\n // 「이 칸이 누구 것인가」를 판정할 일이 없다.\n if (input.files.get(HARNESS_RECORD_PATH) !== undefined) {\n if (Object.keys(remaining).length > 0) {\n const reduced: InitRecord = { ...record, files: remaining };\n writes.push({ path: HARNESS_RECORD_PATH, content: serializeRecord(reduced), existed: true });\n notes.push(\n `${HARNESS_RECORD_PATH}: kept, with the finished items removed — it still holds the backups `\n + \"--undo needs. Run --undo again once the items above are resolved.\",\n );\n } else {\n deletes.push(HARNESS_RECORD_PATH);\n }\n }\n\n // ★비었다고 다 치우지 않는다 — 우리가 만든 것만. 그 목록은 적용이 mkdir 결과로 적어 둔다.\n const removableDirectories = parentsOf(deletes)\n .filter((directory) => record.createdDirectories.includes(directory));\n\n return { writes, deletes, codexCommand: codexRemoveCommand(), notes, removableDirectories };\n}\n\n/**\n * ★<b>이 파일에 남은 관리 블록을 기록으로 «설명할 수 있나».</b> 설명되지 않는 것이 하나라도\n * 있으면 우리 블록이 어딘가에 있을 수 있다는 뜻이고, 그러면 의무를 완료로 만들지 않는다.\n *\n * <p>★<b>판정을 뒤집은 자리다</b>(9차 2차 리뷰 B2·N1). 「우리 블록을 알아본다」로 짜면 제목 한 줄\n * 편집·인용문 이동·마커 중첩에 전부 뚫리고, 거꾸로 init 전부터 있던 «똑같은» 예제를 우리 것으로\n * 오인해 정상 되돌리기를 막는다. 그래서 알아보려 하지 않고 <b>기록해 둔 예제를 지워 나간 뒤\n * 남는 것</b>을 센다. 모양 비교는 「적어 둔 예제가 그대로 있나」에만 쓴다.\n */\nfunction unexplainedMarkers(existing: string | undefined, contract: FileContract): number {\n const recorded = [...(contract.foreignBlocks ?? [])];\n let unexplained = 0;\n for (const print of markerEvidence(existing)) {\n const at = recorded.indexOf(print);\n if (at >= 0) {\n recorded.splice(at, 1); // init 전에 있던 그 블록이다 — 우리 일이 아니다.\n } else {\n unexplained += 1;\n }\n }\n return unexplained;\n}\n\n/** 이 파일 하나를 어떻게 할까. ★{@link Outcome} 하나만 돌려준다 — 부수효과 없음. */\nfunction undoOne(path: string, contract: FileContract, existing: string | undefined): Outcome {\n if (existing === undefined) {\n if (contract.original.at !== \"absent\" || contract.scope === \"fields\") {\n // 백업을 든 파일이 사라졌다. 「없으니 건너뛴다」로 기록을 지우면 그 원본은 영영\n // 사라진다 — 사용자가 파일을 되살릴 수도 있다(5차 독립 리뷰 I2).\n return {\n kind: \"unresolved\",\n note: `${path} is gone, so what was there before init could not be put back — `\n + \"the backup is kept. Restore the file and run --undo again.\",\n };\n }\n return { kind: \"done\" };\n }\n switch (contract.scope) {\n case \"entry\": return undoEntry(path, contract, existing);\n case \"block\": return undoBlock(path, contract, existing);\n case \"fields\": return undoFields(path, contract, existing);\n case \"whole\": return undoWhole(path, contract, existing);\n }\n}\n\nfunction undoEntry(path: string, contract: FileContract, existing: string): Outcome {\n const current = readServerEntry(existing);\n const currentOwned = ownedJson(current, current !== undefined);\n if (sameOwned(currentOwned, contract.original)) {\n return {\n kind: \"done\",\n note: contract.original.at === \"absent\"\n ? `${path}: the \"${SERVER_NAME}\" entry ai-erd added is already gone.`\n : `${path}: your original \"${SERVER_NAME}\" entry is already back in place.`,\n };\n }\n // ★안내대로 지운 사람에게 같은 안내를 반복하지 않는다 — 남은 일은 원본을 도로 넣는 것이고\n // 그 경로가 바로 아래에 있다(7차 독립 리뷰 S2).\n const goneButWeHoldTheOriginal = current === undefined && contract.original.at !== \"absent\";\n if (!goneButWeHoldTheOriginal && !sameOwned(currentOwned, contract.written)) {\n return {\n kind: \"unresolved\",\n note: `${path}: the \"${SERVER_NAME}\" entry was edited after init — left in place. `\n + \"Remove it by hand if you meant to, then run --undo again.\",\n };\n }\n const restore = contract.original.at === \"json\" ? { value: contract.original.value } : undefined;\n const result = removeServerEntry(existing, restore);\n if (result.emptied && contract.createdByUs) {\n return { kind: \"delete\" };\n }\n if (result.content !== undefined && result.content !== existing) {\n return {\n kind: \"write\",\n content: result.content,\n note: restore === undefined ? undefined : `${path}: restored your original \"${SERVER_NAME}\" entry.`,\n };\n }\n return { kind: \"done\" };\n}\n\nfunction undoBlock(path: string, contract: FileContract, existing: string): Outcome {\n const current = existingMarkerBlock(existing);\n const currentOwned = ownedText(current);\n // ★<b>「예제가 있다」와 「우리 블록이 옮겨져 남았다」를 개수로 가른다.</b> Boolean 하나로는\n // 둘을 표현할 수 없었고, 예제가 있는 파일에서는 우리 블록이 남아 있어도 완료로 읽혔다\n // (8차 독립 리뷰 I5).\n // ★기록으로 설명되지 않는 마커가 있으면, 정상 위치의 블록을 걷어내는 것으로 의무가 끝나지\n // 않는다 — 우리 블록이 그 자리에 있을 수 있다. 개수도 모양도 아니라 «증거 대조»다(9차 2차 B2).\n if (unexplainedMarkers(existing, contract) > 0) {\n return {\n kind: \"unresolved\",\n note: `${path}: this file has an ai-erd marker block that --undo cannot account for `\n + \"(inside a code fence, a quote, or edited). Remove it by hand, then run --undo again.\",\n };\n }\n if (sameOwned(currentOwned, contract.original)) {\n return {\n kind: \"done\",\n note: contract.original.at === \"absent\"\n ? `${path}: the ai-erd block is already gone.`\n : `${path}: the ai-erd block that was there before is already back in place.`,\n };\n }\n if (current === undefined && contract.original.at === \"text\") {\n // ★안내대로 지웠다 — 원본 블록을 도로 넣는다. 예전엔 여기서도 「손으로 지우고 다시\n // 실행하라」를 반복해, 이미 지운 사람에게 실행되지 않는 경로를 요구했다(8차 S3).\n const body = existing.trim()\n ? `${existing.replace(/\\s*$/, \"\")}\\n\\n${contract.original.text}\\n`\n : `${contract.original.text}\\n`;\n return { kind: \"write\", content: body, note: `${path}: restored the ai-erd block that was there before.` };\n }\n if (!sameOwned(currentOwned, contract.written)) {\n return {\n kind: \"unresolved\",\n note: `${path}: the ai-erd block was edited after init — left in place. `\n + \"Remove the block by hand if you meant to, then run --undo again.\",\n };\n }\n let result: { content: string; removed: boolean; emptied: boolean };\n try {\n result = contract.original.at === \"text\"\n ? { content: replaceMarkerBlockWith(existing, contract.original.text), removed: true, emptied: false }\n : removeMarkerBlock(existing);\n } catch (error) {\n return { kind: \"unresolved\", note: `${path}: ${error instanceof Error ? error.message : String(error)}` };\n }\n if (!result.removed) {\n return {\n kind: \"unresolved\",\n note: `${path}: the ai-erd block could not be removed — it is still in the file. `\n + \"Remove it by hand, then run --undo again.\",\n };\n }\n if (result.emptied && contract.createdByUs) {\n return { kind: \"delete\" };\n }\n return {\n kind: \"write\",\n content: result.content,\n note: contract.original.at === \"text\"\n ? `${path}: restored the ai-erd block that was there before.`\n : undefined,\n };\n}\n\nfunction undoWhole(path: string, contract: FileContract, existing: string): Outcome {\n if (sameOwned(ownedText(existing), contract.original)) {\n // 사용자가 손으로 원본을 되돌려 놨다 — 목표에 이미 도달했다(6차 독립 리뷰 I2).\n return { kind: \"done\", note: `${path} is already the file that existed before init.` };\n }\n if (!sameOwned(ownedText(existing), contract.written)) {\n if (contract.original.at === \"text\") {\n return {\n kind: \"unresolved\",\n note: `${path} was edited after init — left in place instead of restoring the pre-init file. `\n + \"The backup is kept; run --undo again once you have resolved it.\",\n };\n }\n // 우리가 만든 파일을 사용자가 고쳤다 — 이제 사용자 것이다.\n return { kind: \"keep\", note: `${path} was edited after init — left in place instead of deleting it.` };\n }\n if (contract.original.at === \"text\") {\n return {\n kind: \"write\",\n content: contract.original.text,\n note: `${path}: restored the file that existed before init.`,\n };\n }\n return contract.createdByUs ? { kind: \"delete\" } : { kind: \"done\" };\n}\n\nfunction undoFields(path: string, contract: FileContract, existing: string): Outcome {\n const parsed = parseJsonObject(existing);\n if (parsed === undefined) {\n // ★「손대지 않음」은 «복구 완료»가 아니다. 판단 재료가 없으면 백업을 지킨다(8차 I3).\n return {\n kind: \"unresolved\",\n note: `${path} is not a JSON object any more, so ai-erd could not take its fields back out — `\n + \"the backup is kept. Fix the file and run --undo again.\",\n };\n }\n // ★<b>로더와 «같은» 검증을 여기서도 한다.</b> 그리고 여기서는 부르는 쪽이 아는 것을 하나 더\n // 넘긴다 — 어느 칸이 우리 것인지. 그래서 「우리가 쓴 칸인데 기록에 없다」까지 걸린다.\n // ⛔빈 map 으로 메우면 모든 칸이 「우리 것이 아니다」로 읽혀 파일은 그대로 두고 백업만\n // 지운다. 판정 자료가 반쯤 맞으면 그것으로 파일을 고치지 않는다(9차 B1 · 2차 리뷰 B1).\n const contractProblem = fieldsContractProblem(contract, OUR_CONFIG_FIELDS);\n if (contractProblem !== undefined) {\n return {\n kind: \"unresolved\",\n note: `${path}: ai-erd's record of the fields it wrote ${contractProblem}, so its fields `\n + \"were left in place — the backup is kept. Restore that record, or remove the fields by hand.\",\n };\n }\n const written = contract.writtenFields!;\n const originals = contract.originalFields!;\n const next: Record<string, unknown> = {};\n const kept: string[] = [];\n for (const [field, value] of Object.entries(parsed)) {\n if (!OUR_CONFIG_FIELDS.includes(field)) {\n next[field] = value; // 사용자 칸 — 손대지 않는다.\n continue;\n }\n if (!hasField(written, field)) {\n // ★우리 칸 이름인데 기록이 그 칸을 말하지 않는다 — 판정 자료가 없다. 「사용자가 고쳤다」도\n // 「우리 것이 아니다」도 근거가 없으므로 완료로 바꾸지 않는다(9차 B1).\n return {\n kind: \"unresolved\",\n note: `${path}: ai-erd has no record of what it wrote for ${field}, so its fields were `\n + \"left in place — the backup is kept. Restore that record, or remove the field by hand.\",\n };\n }\n const stillOurs = stableStringify(value) === stableStringify(written[field]);\n if (!stillOurs) {\n // ★이름이 우리 것이어도 «값»은 사용자가 고쳤다. 되돌리기가 그것을 덮지 않는다(7차 I2).\n next[field] = value;\n kept.push(field);\n continue;\n }\n const original = originals[field];\n // ★되돌릴 «목표»를 모르면 지우지 않는다. 예전엔 json 이 아닌 모든 것을 「우리가 더한 칸」으로\n // 묶어 지웠고, 원본이 {at:\"text\"} 로 바뀐 기록 하나가 config 를 «비웠다»(2차 리뷰 B1).\n // 위 검증이 이미 막지만, 이 판단을 그 검증에만 맡기지 않는다 — 여기가 파일을 고치는 자리다.\n if (original === undefined || (original.at !== \"json\" && original.at !== \"absent\")) {\n return {\n kind: \"unresolved\",\n note: `${path}: ai-erd cannot tell what was in ${field} before it wrote there, so the `\n + \"file was left as it is — the backup is kept. Remove the field by hand if you meant to.\",\n };\n }\n if (original.at === \"json\") {\n next[field] = original.value; // 원래 있던 칸 → 원본 값으로.\n }\n // ⚠original 이 absent 면 우리가 «더한» 칸이므로 넣지 않는다 = 지운다.\n // ★사용자가 우리 칸을 «지웠으면» 그 칸은 위 루프에 아예 안 들어온다 — 그래서 되살아나지\n // 않는다. 예전엔 뒤에 보충 루프가 있어 삭제를 무조건 되돌렸다(8차 독립 리뷰 I4).\n }\n const note = kept.length === 0 ? undefined\n : `${path}: you changed ${kept.join(\", \")} after init — left as you set it instead of `\n + \"putting the pre-init value back.\";\n if (Object.keys(next).length === 0 && contract.createdByUs) {\n return { kind: \"delete\", note };\n }\n // ★파일이 원래 «빈 객체»였으면 빈 객체를 되돌린다 — 부재와 구별한다(8차 독립 리뷰 I6).\n const body = serialize(next);\n return body === existing\n ? { kind: \"done\", note }\n : {\n kind: \"write\",\n content: body,\n note: note ?? `${path}: removed what ai-erd wrote and kept the rest.`,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 적용이 쓰는 것\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * 기록의 {@code createdDirectories} 를 «실제로 만든 것»으로 갈아 끼운다.\n *\n * <p>★자기 지문을 다시 계산하는 장치가 없다 — 기록이 우리 파일이라 지문을 재지 않기 때문이다.\n * 같은 순환 함정을 세 번 «요령»으로 막은 뒤(4차 I7 · 5차 S3 · 6차) 순환이 생기는 구조를\n * 없애는 쪽이 답이었다.\n */\nexport function withCreatedDirectories(current: string, directories: readonly string[]): string {\n const state = readRecord(current);\n if (state.state !== \"valid\") {\n return current;\n }\n return serializeRecord({ ...state.record, createdDirectories: [...directories] });\n}\n\nexport { readRecord, serializeRecord, emptyRecord } from \"./initRecord\";\nexport type { InitRecord, RecordState, FileContract, Owned } from \"./initRecord\";\n\n/** 이 경로들의 «저장소 안» 부모 디렉터리. 깊은 것부터 — .a/b 를 치워야 .a 가 비워진다. */\nfunction parentsOf(paths: readonly string[]): string[] {\n const directories = new Set<string>();\n for (const path of paths) {\n const parent = path.includes(\"/\") ? path.slice(0, path.lastIndexOf(\"/\")) : \"\";\n if (parent) {\n directories.add(parent);\n }\n }\n return [...directories].sort((left, right) => right.length - left.length);\n}\n\n/** 이 저장소에 이미 걸린 역할. 설정 파일들이 어긋나 있으면 전부 돌려준다. */\nexport function detectRoles(files: FileSnapshot): Map<string, HarnessRole | undefined> {\n const found = new Map<string, HarnessRole | undefined>();\n for (const target of AGENT_TARGETS) {\n const existing = files.get(target.path);\n if (existing === undefined) {\n continue;\n }\n found.set(target.path, previousRole(existing));\n }\n return found;\n}\n\nfunction previousRole(existing: string | undefined): HarnessRole | undefined {\n if (existing === undefined) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(existing) as { mcpServers?: Record<string, unknown> };\n return readRoleFromEntry(parsed.mcpServers?.[SERVER_NAME]);\n } catch {\n return undefined;\n }\n}\n","import { assertTrustedEndpointUrl } from \"../config/endpoints\";\nimport { documentContractProblem } from \"./harnessDoc\";\n\n/**\n * 저장소에 쓸 하네스 문서를 서버에서 받아 온다.\n *\n * <p>★<b>이것이 「규칙을 고치려면 npm 퍼블리시」를 끊는 지점이다.</b> 예전엔 본문이 패키지\n * 안에 박혀 있어서, 한 줄 고치려면 CLI 를 배포하고 모든 사용자가 init 을 다시 쳐야 했다.\n *\n * <p>⚠<b>못 받으면 «기본값을 썼다»고 적는다.</b> 조용히 패키지 사본으로 떨어지면, 서버에서\n * 규칙을 고쳐도 안 바뀌는 이유를 사용자가 영영 못 찾는다 — 오늘 여러 번 만난 모양이다.\n *\n * <p>MCP 엔드포인트 아래({@code <endpoint>/harness/documents})에 둔 이유: MCP 토큰은 REST\n * ({@code /api/v1/...})에서 거절되고, 도구로 내면 모든 세션의 도구 목록이 한 칸 늘어난다.\n */\nexport interface HarnessDocuments {\n doc?: string;\n agentNote?: string;\n /** 어느 판을 받았나. 못 받았으면 undefined. */\n versions: Record<string, string>;\n /** 못 받은 이유 — 요청 자체가 실패했을 때. 받았으면 undefined. */\n unavailableReason?: string;\n /**\n * ★<b>문서별로 패키지 기본값을 쓴 이유.</b> 서버가 HTTP 200 으로 «빈 문서»를 주거나\n * 계약을 안 지킨 본문을 줘도 예전엔 조용히 패키지 사본으로 떨어졌다 — 사용자는 자기가\n * 서버 판을 받았다고 믿는다(2026-09-23 독립 재리뷰 I5).\n */\n fallbacks: Record<string, string>;\n}\n\nexport interface FetchHarnessDocumentsInput {\n endpoint: string;\n accessToken?: string;\n client?: string;\n fetchImpl?: typeof fetch;\n}\n\nexport const DOC_KEY = \"HARNESS.DOC\";\nexport const AGENT_NOTE_KEY = \"HARNESS.AGENT_NOTE\";\n\nexport async function fetchHarnessDocuments(\n input: FetchHarnessDocumentsInput,\n): Promise<HarnessDocuments> {\n const url = new URL(`${input.endpoint.replace(/\\/$/, \"\")}/harness/documents`);\n assertTrustedEndpointUrl(url, \"harness documents URL\");\n if (input.client) {\n url.searchParams.set(\"client\", input.client);\n }\n const fetchImpl = input.fetchImpl ?? fetch;\n try {\n const response = await fetchImpl(url.toString(), {\n headers: {\n accept: \"application/json\",\n ...(input.accessToken ? { authorization: `Bearer ${input.accessToken}` } : {}),\n },\n });\n if (!response.ok) {\n return { versions: {}, fallbacks: {}, unavailableReason: `server answered HTTP ${response.status}` };\n }\n const payload = (await response.json()) as {\n documents?: Record<string, { body?: unknown; version?: unknown; reason?: unknown }>;\n };\n const documents = payload.documents ?? {};\n const versions: Record<string, string> = {};\n const fallbacks: Record<string, string> = {};\n const bodies: Record<string, string | undefined> = {};\n for (const key of [DOC_KEY, AGENT_NOTE_KEY]) {\n const entry = documents[key];\n const problem = usableBodyProblem(key, entry);\n if (problem) {\n // 서버가 이유를 말해 줬으면 그것을 쓰고, 아니면 우리가 본 것을 쓴다.\n fallbacks[key] = typeof entry?.reason === \"string\" && entry.reason ? entry.reason : problem;\n continue;\n }\n bodies[key] = entry!.body as string;\n if (typeof entry?.version === \"string\") {\n versions[key] = entry.version;\n }\n }\n return { doc: bodies[DOC_KEY], agentNote: bodies[AGENT_NOTE_KEY], versions, fallbacks };\n } catch (error) {\n return {\n versions: {},\n fallbacks: {},\n unavailableReason: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * 이 응답 조각을 저장소에 «써도 되는가». 쓰면 안 되는 이유가 있으면 그 이유를 돌려준다.\n *\n * <p>★서버가 200 을 줬다는 것은 «전송이 됐다»는 뜻이지 «쓸 수 있는 글»이라는 뜻이 아니다.\n * 예전엔 본문이 비어 있지만 않으면 그대로 파일에 썼다 — 변수가 빠진 DOC 이나 관리 마커가\n * 없는 AGENT_NOTE 가 사용자 저장소에 들어갔고, 마커가 없으면 재실행마다 덧붙고 undo 도\n * 못 걷어낸다(2026-09-23 독립 재리뷰 I1).\n */\nfunction usableBodyProblem(key: string, entry: { body?: unknown } | undefined): string | undefined {\n if (typeof entry?.body !== \"string\" || !entry.body.trim()) {\n return `server returned no body for ${key}`;\n }\n return documentContractProblem(key, entry.body);\n}\n","/**\n * CLI 버전. ★진실원은 {@code package.json} 이고 빌드(tsup define)가 그 값을 박는다 —\n * 상수로 또 적으면 릴리스 때 한쪽만 올라가 조용히 거짓이 된다.\n * 번들을 거치지 않는 실행(vitest·tsx)에서는 값이 없으므로 \"dev\" 로 떨어진다.\n */\ndeclare const __AI_ERD_CLI_VERSION__: string | undefined;\n\nexport const CLI_VERSION: string =\n typeof __AI_ERD_CLI_VERSION__ === \"string\" ? __AI_ERD_CLI_VERSION__ : \"dev\";\n\nexport const CLI_USER_AGENT = `@ai-erd/mcp ${CLI_VERSION}`;\n","import { FileTokenStore } from \"../../core/auth/tokenStore\";\nimport { OAuthClient } from \"../../core/auth/oauth\";\nimport { resolveEndpoint, assertEnv, type AinectoEnv } from \"../../core/config/endpoints\";\nimport { parsePayloadSource } from \"../../core/input/payloadSource\";\nimport { McpRpcClient, isToolError } from \"../../core/mcp/rpcClient\";\nimport { renderError, renderSuccess } from \"../../core/output/render\";\nimport { getGeneratedTools } from \"../../core/catalog\";\nimport { runConnector } from \"../mcp/connector\";\nimport { executeGeneratedCommand } from \"./generatedCommandRouter\";\nimport { executeAttachmentsUploadCommand, isAttachmentsUploadCommand } from \"./attachmentsUploadCommand\";\nimport { executeInitCommand, readRepositoryRole } from \"./initCommand\";\nimport { CLI_VERSION } from \"../../core/version\";\nimport { assertRole, resolveRole, type HarnessRole } from \"../../core/harness/role\";\n\nexport interface CliIO {\n stdout: NodeJS.WriteStream;\n stderr: NodeJS.WriteStream;\n stdin: NodeJS.ReadStream;\n}\n\nexport async function runAinectoCli(argv: string[], io: CliIO): Promise<number> {\n let parsed: GlobalArgs = { json: argv.includes(\"--json\"), help: false, positionals: [] };\n try {\n parsed = parseGlobalArgs(argv);\n if (parsed.help || parsed.positionals.length === 0) {\n io.stdout.write(helpText());\n return 0;\n }\n\n const resolved = resolveEndpoint({ env: parsed.env, endpoint: parsed.endpoint });\n // ★역할을 «한 번» 정하고 모든 경로가 그것을 쓴다.\n // 예전에는 stdio 브리지만 역할을 실어, 같은 토큰을 쓰는 `tools call` 경로가\n // 역할 없이 서버에 닿았다 — 제한을 우회하는 두 번째 문이었다(독립 리뷰 C1).\n let sessionRole = resolveRole({ role: parsed.role }).role;\n // ★init 은 저장소에 «이미 걸린» 역할을 이어받는다. 그 결정이 클라이언트보다 늦으면,\n // 파일에 쓸 역할과 서버에 보내는 역할이 서로 다른 시점에 정해진다(독립 재리뷰 I10).\n // ⚠undo 는 순수한 로컬 작업이라 역할이 필요 없다 — 추론하려고 저장소를 읽을 이유가 없다\n // (2026-09-23 4차 독립 리뷰 I5).\n if (parsed.positionals[0] === \"init\" && sessionRole === undefined && !argv.includes(\"--undo\")) {\n sessionRole = await readRepositoryRole(process.cwd());\n }\n const tokenStore = new FileTokenStore();\n const auth = new OAuthClient({ endpoint: resolved.endpoint, tokenStore, role: sessionRole });\n const client = new McpRpcClient({\n endpoint: resolved.endpoint,\n tokenProvider: auth,\n role: sessionRole,\n });\n const [domain, action, ...rest] = parsed.positionals;\n\n if (domain === \"mcp\") {\n await runConnector({\n endpoint: resolved.endpoint,\n // `ai-erd mcp` 로 붙는 경로도 같은 역할을 쓴다 — bin/mcp.ts 와 같은 규칙.\n role: sessionRole,\n input: io.stdin,\n output: io.stdout,\n errorOutput: io.stderr,\n });\n return 0;\n }\n\n if (domain === \"init\") {\n // ⚠init 의 플래그(--role 등)는 전역 파서가 positional 로 흘려보낸다. 그대로 넘긴다.\n return await executeInitCommand({\n argv: parsed.positionals.slice(1),\n role: sessionRole,\n // 문서는 인증 후에 받는다 — 토큰이 없으면 패키지 기본값으로 가고, 그 사실을 보고한다.\n // ★«필요할 때» 가져온다. --undo 는 로컬 작업이라 토큰을 건드릴 이유가 없다(S1).\n accessToken: () => auth.getAccessToken().catch(() => undefined),\n client,\n endpoint: resolved.endpoint,\n env: resolved.env,\n cliVersion: `@ai-erd/mcp ${CLI_VERSION}`,\n cwd: process.cwd(),\n json: parsed.json,\n io,\n });\n }\n\n if (domain === \"auth\") {\n // ★await 를 빼면 이 try 가 실패를 «못 본다» — 거부 사유가 renderError 를 지나치고\n // 날것의 스택 트레이스로 나간다(2026-09-23 실물 실행에서 발견).\n return await handleAuth(action, auth, resolved.endpoint, parsed.json, io);\n }\n\n if (isAttachmentsUploadCommand(domain, action)) {\n return await executeAttachmentsUploadCommand({\n argv: rest,\n client,\n json: parsed.json,\n io,\n });\n }\n\n const generatedResult = await executeGeneratedCommand({\n env: parsed.env ?? \"prod\",\n argv: parsed.positionals,\n client,\n json: parsed.json,\n io,\n });\n if (generatedResult !== 2) {\n return generatedResult;\n }\n\n if (domain === \"tools\") {\n // ★위와 같은 이유로 await 가 필요하다. 이쪽이 실제로 스택을 뱉고 있었다.\n return await handleTools(action, rest, parsed, client, io);\n }\n\n throw new Error(`Unknown command \"${domain}\".`);\n } catch (error) {\n io.stderr.write(renderError(error, { json: parsed.json }));\n return 1;\n }\n}\n\nasync function handleAuth(\n action: string | undefined,\n auth: OAuthClient,\n endpoint: string,\n json: boolean,\n io: CliIO,\n): Promise<number> {\n if (action === \"login\") {\n await auth.login();\n io.stdout.write(renderSuccess({ endpoint, authenticated: true }, { json }));\n return 0;\n }\n if (action === \"status\") {\n const token = await auth.getAccessToken();\n io.stdout.write(renderSuccess({ endpoint, authenticated: Boolean(token) }, { json }));\n return 0;\n }\n if (action === \"logout\") {\n await auth.logout();\n io.stdout.write(renderSuccess({ endpoint, authenticated: false }, { json }));\n return 0;\n }\n throw new Error(\"Expected auth login, auth status, or auth logout.\");\n}\n\nasync function handleTools(\n action: string | undefined,\n rest: string[],\n parsed: GlobalArgs,\n client: McpRpcClient,\n io: CliIO,\n): Promise<number> {\n if (action === \"list\") {\n const tools = await client.toolsList();\n io.stdout.write(renderSuccess(tools, { json: parsed.json }));\n return 0;\n }\n\n if (action === \"call\") {\n const toolName = rest[0];\n if (!toolName) {\n throw new Error(\"Expected MCP tool name after tools call.\");\n }\n const toolArgs = rest.slice(1);\n const payloadOptions = parsePayloadArgs(toolArgs);\n const payload = await parsePayloadSource({\n file: payloadOptions.file,\n inline: payloadOptions.inline,\n stdin: io.stdin,\n });\n const result = await client.toolsCall(toolName, payload.value);\n io.stdout.write(renderSuccess(result, { json: parsed.json, warnings: payload.warnings }));\n // 거부 문구는 그대로 보여 주되, 종료 코드로는 «실패»라고 말한다.\n return isToolError(result) ? 1 : 0;\n }\n\n if (action === \"catalog\") {\n const catalogEnv = parsed.env ?? \"prod\";\n io.stdout.write(renderSuccess(getGeneratedTools(parsed.env ?? \"prod\"), {\n json: parsed.json,\n warnings: [catalogEnv === \"dev\"\n ? \"Local dev catalog is a checked-in live sync snapshot; rerun sync:tools --env dev to refresh it.\"\n : \"Local prod catalog is seed fixture only until authenticated prod live sync updates generated catalogs.\"],\n }));\n return 0;\n }\n\n throw new Error(\"Expected tools list, tools call <mcpName>, or tools catalog.\");\n}\n\ninterface GlobalArgs {\n env?: AinectoEnv;\n endpoint?: string;\n role?: HarnessRole;\n json: boolean;\n help: boolean;\n positionals: string[];\n}\n\nfunction parseGlobalArgs(argv: string[]): GlobalArgs {\n const result: GlobalArgs = { json: false, help: false, positionals: [] };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--env\") {\n result.env = assertEnv(requireValue(arg, argv[++index]));\n } else if (arg === \"--endpoint\") {\n result.endpoint = requireValue(arg, argv[++index]);\n } else if (arg === \"--role\") {\n // ★전역 플래그다. 브리지·도구 호출·로그인·init 이 모두 같은 역할을 본다.\n result.role = assertRole(requireValue(arg, argv[++index]));\n } else if (arg === \"--json\") {\n result.json = true;\n } else if (arg === \"--help\" || arg === \"-h\") {\n result.help = true;\n } else {\n result.positionals.push(arg);\n }\n }\n return result;\n}\n\nfunction parsePayloadArgs(argv: string[]): { file?: string; inline?: string } {\n const result: { file?: string; inline?: string } = {};\n const inline: string[] = [];\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--file\" || arg === \"-f\") {\n result.file = requireValue(arg, argv[++index]);\n } else {\n inline.push(arg);\n }\n }\n if (inline.length > 0) {\n result.inline = inline.join(\" \");\n }\n return result;\n}\n\nfunction requireValue(flag: string, value: string | undefined): string {\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n return value;\n}\n\nfunction helpText(): string {\n return [\n \"Ainecto CLI\",\n \"\",\n \"Usage:\",\n \" ainecto auth login --role <design|development|test|validation> [--env prod|dev] [--json]\",\n \" ainecto auth status|logout [--role <role>] [--env prod|dev] [--json]\",\n \" ainecto tools list [--env prod|dev] [--endpoint URL] [--json]\",\n \" ainecto tools call <mcpName> [-f payload.json|@-] [inline-json] [--json]\",\n \" ainecto attachments upload --document-uuid <uuid> <file...> [--json]\",\n \" ainecto <generated-command> [flags] [-f payload.json] [--yes] [--json]\",\n \" ainecto mcp [--env prod|dev] [--endpoint URL] [--role design|development|test|validation]\",\n \"\",\n \"Harness:\",\n \" ai-erd init --role <design|development|test|validation> [--project <uuid>] [--dry-run]\",\n \" ai-erd init --undo\",\n \"\",\n ].join(\"\\n\");\n}\n","#!/usr/bin/env node\nimport { runAinectoCli } from \"../adapters/cli/ainectoCli\";\n\nconst exitCode = await runAinectoCli(process.argv.slice(2), {\n stdin: process.stdin,\n stdout: process.stdout,\n stderr: process.stderr,\n});\n\nprocess.exitCode = exitCode;\n"],"mappings":"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","names":["createHash","createHash","resolve","readFile","isRecord","generatedTools","generatedTools","isRecord","isRecord","isRecord","createInterface","createInterface","readFile","stat","isRecord","requireValue","chmod","mkdir","readFile","rename","rm","stat","writeFile","dirname","join","isRecord","createHash","createHash","DOC_KEY","AGENT_NOTE_KEY","plan","isRecord","join","readFile","dirname","rm","mkdir","writeFile","chmod","rename","stat","requireValue","requireValue"]}