@thecorporation/corp-tools 26.3.40 → 26.3.41

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/process-transport.ts","../src/env.ts","../src/api-client.ts","../src/reference-tracker.ts","../src/workflows/equity-helpers.ts","../src/workflows/issue-equity.ts","../src/workflows/issue-safe.ts","../src/workflows/written-consent.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve, join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { createRequire } from \"node:module\";\nimport { ensureEnvFile, loadEnvFile } from \"./env.js\";\n\nconst require = createRequire(import.meta.url);\n\n// ── Binary resolution ───────────────────────────────────────────────\n\nlet cachedBinaryPath: string | undefined;\n\nexport function resolveBinaryPath(processUrl: string): string {\n if (cachedBinaryPath !== undefined) return cachedBinaryPath;\n\n const parsed = new URL(processUrl);\n if (parsed.pathname && parsed.pathname !== \"/\") {\n cachedBinaryPath = parsed.pathname;\n return cachedBinaryPath;\n }\n\n const envBin = process.env.CORP_SERVER_BIN;\n if (envBin && existsSync(envBin)) {\n cachedBinaryPath = envBin;\n return cachedBinaryPath;\n }\n\n try {\n const server = require(\"@thecorporation/server\");\n const pkgPath: string | undefined = server.getBinaryPath?.();\n if (pkgPath) {\n cachedBinaryPath = pkgPath;\n return pkgPath;\n }\n } catch {\n // Package not installed\n }\n\n cachedBinaryPath = resolve(\"services/api-rs/target/release/api-rs\");\n return cachedBinaryPath;\n}\n\n// ── Stderr parsing ──────────────────────────────────────────────────\n\nexport function parseStatusFromStderr(stderr: string): number | null {\n const lines = stderr.split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const match = lines[i].match(/^HTTP (\\d+)$/);\n if (match) return parseInt(match[1], 10);\n }\n return null;\n}\n\n// ── Response builder ────────────────────────────────────────────────\n\nconst STATUS_TEXT: Record<number, string> = {\n 200: \"OK\", 201: \"Created\", 204: \"No Content\",\n 400: \"Bad Request\", 401: \"Unauthorized\", 403: \"Forbidden\",\n 404: \"Not Found\", 409: \"Conflict\", 422: \"Unprocessable Entity\",\n 500: \"Internal Server Error\",\n};\n\nexport function buildProcessResponse(status: number, body: string): Response {\n return {\n status,\n ok: status >= 200 && status < 300,\n statusText: STATUS_TEXT[status] ?? String(status),\n headers: new Headers({ \"content-type\": \"application/json\" }),\n json: async () => JSON.parse(body),\n text: async () => body,\n body: null,\n bodyUsed: false,\n redirected: false,\n type: \"basic\" as ResponseType,\n url: \"\",\n clone: () => buildProcessResponse(status, body),\n arrayBuffer: async () => new TextEncoder().encode(body).buffer as ArrayBuffer,\n blob: async () => new Blob([body]),\n formData: async () => { throw new Error(\"not supported\"); },\n bytes: async () => new TextEncoder().encode(body),\n } as Response;\n}\n\n// ── Config reading (direct file access, no cli-ts dependency) ───────\n\nconst CORP_CONFIG_DIR = process.env.CORP_CONFIG_DIR || join(homedir(), \".corp\");\n\nfunction readJsonFileSafe(path: string): Record<string, unknown> | null {\n try {\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction loadServerSecretsFromAuth(): { jwt_secret: string; secrets_master_key: string; internal_worker_token: string } | null {\n const auth = readJsonFileSafe(join(CORP_CONFIG_DIR, \"auth.json\"));\n if (!auth) return null;\n const ss = auth.server_secrets;\n if (!ss || typeof ss !== \"object\") return null;\n const s = ss as Record<string, unknown>;\n if (typeof s.jwt_secret === \"string\" && typeof s.secrets_master_key === \"string\" && typeof s.internal_worker_token === \"string\") {\n return { jwt_secret: s.jwt_secret, secrets_master_key: s.secrets_master_key, internal_worker_token: s.internal_worker_token };\n }\n return null;\n}\n\nfunction loadDataDirFromConfig(): string | undefined {\n const cfg = readJsonFileSafe(join(CORP_CONFIG_DIR, \"config.json\"));\n if (!cfg) return undefined;\n const dataDir = typeof cfg.data_dir === \"string\" ? cfg.data_dir : undefined;\n return dataDir || undefined;\n}\n\n// ── Env loading ─────────────────────────────────────────────────────\n\nlet envLoaded = false;\n\nfunction ensureEnv(): void {\n if (envLoaded) return;\n\n // Try server_secrets from auth.json first (local mode)\n const secrets = loadServerSecretsFromAuth();\n if (secrets) {\n if (!process.env.JWT_SECRET) process.env.JWT_SECRET = secrets.jwt_secret;\n if (!process.env.SECRETS_MASTER_KEY) process.env.SECRETS_MASTER_KEY = secrets.secrets_master_key;\n if (!process.env.INTERNAL_WORKER_TOKEN) process.env.INTERNAL_WORKER_TOKEN = secrets.internal_worker_token;\n envLoaded = true;\n return;\n }\n\n // Fallback: load from .env file\n const envPath = resolve(process.cwd(), \".env\");\n ensureEnvFile(envPath);\n loadEnvFile(envPath);\n envLoaded = true;\n}\n\n// ── Process request ─────────────────────────────────────────────────\n\nexport interface ProcessRequestOptions {\n dataDir?: string;\n}\n\nexport function processRequest(\n processUrl: string,\n method: string,\n pathWithQuery: string,\n headers: Record<string, string>,\n body?: string,\n options?: ProcessRequestOptions,\n): Response {\n ensureEnv();\n\n const binPath = resolveBinaryPath(processUrl);\n const args = [\"--skip-validation\", \"call\"];\n\n const dataDir = options?.dataDir ?? loadDataDirFromConfig();\n if (dataDir) {\n args.push(\"--data-dir\", dataDir);\n }\n\n args.push(method, pathWithQuery);\n\n for (const [key, value] of Object.entries(headers)) {\n args.push(\"-H\", `${key}: ${value}`);\n }\n\n if (body) {\n args.push(\"--stdin\");\n }\n\n try {\n const stdout = execFileSync(binPath, args, {\n input: body ?? undefined,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n maxBuffer: 10 * 1024 * 1024,\n env: process.env,\n });\n\n return buildProcessResponse(200, stdout.toString(\"utf-8\"));\n } catch (err: unknown) {\n const execErr = err as { status?: number; stdout?: Buffer; stderr?: Buffer; message?: string };\n\n if (execErr.stdout === undefined && execErr.stderr === undefined) {\n throw new Error(\n \"No api-rs binary found. Install @thecorporation/server or set CORP_SERVER_BIN.\\n\" +\n `Attempted: ${binPath}\\n` +\n `Error: ${execErr.message ?? String(err)}`,\n );\n }\n\n const stderr = execErr.stderr?.toString(\"utf-8\") ?? \"\";\n const stdout = execErr.stdout?.toString(\"utf-8\") ?? \"\";\n const status = parseStatusFromStderr(stderr);\n\n if (status !== null) {\n return buildProcessResponse(status, stdout);\n }\n\n // Binary crashed — detect config errors\n const isConfigError = stderr.includes(\"panic\") ||\n stderr.includes(\"INTERNAL_WORKER_TOKEN\") ||\n stderr.includes(\"JWT_SECRET\") ||\n stderr.includes(\"SECRETS_MASTER_KEY\");\n if (isConfigError) {\n throw new Error(\"Server configuration incomplete. Run 'corp setup' to configure local mode.\");\n }\n\n throw new Error(`api-rs process failed:\\n${stderr || stdout || String(err)}`);\n }\n}\n\nexport function resetCache(): void {\n cachedBinaryPath = undefined;\n envLoaded = false;\n}\n","import { readFileSync, writeFileSync, existsSync } from \"node:fs\";\nimport { randomBytes } from \"node:crypto\";\n\nconst ENV_TEMPLATE = `# Corporation API server configuration\n# Generated by: corp serve\n\n# Required — secret for signing JWTs\nJWT_SECRET={{JWT_SECRET}}\n\n# Required — Fernet key for encrypting secrets at rest (base64url, 32 bytes)\nSECRETS_MASTER_KEY={{SECRETS_MASTER_KEY}}\n\n# Required — bearer token for internal worker-to-server auth\nINTERNAL_WORKER_TOKEN={{INTERNAL_WORKER_TOKEN}}\n\n# Server port (default: 8000)\n# PORT=8000\n\n# Data directory for git repos (default: ./data/repos)\n# DATA_DIR=./data/repos\n\n# Redis URL for agent job queue (optional)\n# REDIS_URL=redis://localhost:6379/0\n\n# LLM proxy upstream (default: https://openrouter.ai/api/v1)\n# LLM_UPSTREAM_URL=https://openrouter.ai/api/v1\n\n# PEM-encoded Ed25519 key for signing git commits (optional)\n# COMMIT_SIGNING_KEY=\n\n# Max agent queue depth (default: 1000)\n# MAX_QUEUE_DEPTH=1000\n`;\n\nexport function generateFernetKey(): string {\n // Fernet key = url-safe base64 of 32 random bytes\n return randomBytes(32).toString(\"base64url\") + \"=\";\n}\n\nexport function generateSecret(length = 32): string {\n return randomBytes(length).toString(\"hex\");\n}\n\nexport function loadEnvFile(path: string): void {\n if (!existsSync(path)) return;\n\n const content = readFileSync(path, \"utf-8\");\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const eqIdx = trimmed.indexOf(\"=\");\n if (eqIdx === -1) continue;\n\n const key = trimmed.slice(0, eqIdx).trim();\n const value = trimmed.slice(eqIdx + 1).trim().replace(/^[\"']|[\"']$/g, \"\");\n\n // Don't override vars already set in the environment\n if (!process.env[key]) {\n process.env[key] = value;\n }\n }\n}\n\nexport function ensureEnvFile(envPath: string): void {\n if (existsSync(envPath)) return;\n\n console.log(\"No .env file found. Generating one with dev defaults...\\n\");\n\n const content = ENV_TEMPLATE\n .replace(\"{{JWT_SECRET}}\", generateSecret())\n .replace(\"{{SECRETS_MASTER_KEY}}\", generateFernetKey())\n .replace(\"{{INTERNAL_WORKER_TOKEN}}\", generateSecret());\n\n writeFileSync(envPath, content, \"utf-8\");\n console.log(` Created ${envPath}\\n`);\n}\n","import type {\n AcceptEquityRoundRequest,\n ApiRecord,\n ApplyEquityRoundTermsRequest,\n BoardApproveEquityRoundRequest,\n CreateEquityRoundRequest,\n CreateExecutionIntentRequest,\n EquityRoundResponse,\n ExecuteRoundConversionRequest,\n IntentResponse,\n PreviewRoundConversionRequest,\n} from \"./types.js\";\nimport type {\n WorkspaceStatusResponse,\n FormationResponse,\n FormationWithCapTableResponse,\n PendingFormationResponse,\n AddFounderResponse,\n GovernanceBodyResponse,\n GovernanceSeatResponse,\n MeetingResponse,\n ResolutionResponse,\n AgendaItemResponse,\n VoteResponse,\n WrittenConsentResponse,\n ObligationResponse,\n DocumentResponse,\n DigestSummary,\n DigestTriggerResponse,\n NextStepsResponse,\n} from \"./api-schemas.js\";\nimport { processRequest } from \"./process-transport.js\";\n\nexport class SessionExpiredError extends Error {\n constructor(detail?: string) {\n super(detail || \"Your API key is no longer valid. Run 'corp setup' to re-authenticate.\");\n this.name = \"SessionExpiredError\";\n }\n}\n\nconst MAX_ERROR_DETAIL_LEN = 500;\n\nfunction sanitizeErrorDetail(value: string): string {\n const sanitized = value\n .replace(/[\\u0000-\\u001f\\u007f-\\u009f\\u001b]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!sanitized) {\n return \"request failed\";\n }\n return sanitized.length > MAX_ERROR_DETAIL_LEN\n ? `${sanitized.slice(0, MAX_ERROR_DETAIL_LEN)}...`\n : sanitized;\n}\n\nfunction pathSegment(value: string): string {\n return encodeURIComponent(String(value));\n}\n\nasync function extractErrorMessage(resp: Response): Promise<string> {\n try {\n const text = await resp.text();\n try {\n const json = JSON.parse(text);\n const val = json.error || json.message || json.detail;\n if (val == null) return sanitizeErrorDetail(text);\n return sanitizeErrorDetail(typeof val === \"string\" ? val : JSON.stringify(val));\n } catch {\n return sanitizeErrorDetail(text);\n }\n } catch {\n return sanitizeErrorDetail(resp.statusText);\n }\n}\n\nexport async function provisionWorkspace(\n apiUrl: string,\n name?: string\n): Promise<ApiRecord> {\n const url = `${apiUrl.replace(/\\/+$/, \"\")}/v1/workspaces/provision`;\n const body: Record<string, string> = {};\n if (name) body.name = name;\n const resp = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`Provision failed (${prefix}): ${detail}`);\n }\n return resp.json() as Promise<ApiRecord>;\n}\n\nexport class CorpAPIClient {\n readonly apiUrl: string;\n readonly apiKey: string;\n readonly workspaceId: string;\n\n constructor(apiUrl: string, apiKey: string, workspaceId: string) {\n this.apiUrl = apiUrl.startsWith(\"process://\") ? apiUrl : apiUrl.replace(/\\/+$/, \"\");\n this.apiKey = apiKey;\n this.workspaceId = workspaceId;\n }\n\n private headers(): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n }\n\n private async request(method: string, path: string, body?: unknown, params?: Record<string, string>): Promise<Response> {\n let fullPath = path;\n if (params) {\n const qs = new URLSearchParams(params).toString();\n if (qs) fullPath += `?${qs}`;\n }\n\n if (this.apiUrl.startsWith(\"process://\")) {\n const hdrs = this.headers();\n const bodyStr = body !== undefined ? JSON.stringify(body) : undefined;\n return processRequest(this.apiUrl, method, fullPath, hdrs, bodyStr);\n }\n\n const url = `${this.apiUrl}${fullPath}`;\n const opts: RequestInit = { method, headers: this.headers() };\n if (body !== undefined) opts.body = JSON.stringify(body);\n return fetch(url, opts);\n }\n\n private async throwIfError(resp: Response): Promise<void> {\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n if (resp.status === 401) throw new SessionExpiredError(detail);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`${prefix}: ${detail}`);\n }\n }\n\n private async get(path: string, params?: Record<string, string>): Promise<unknown> {\n const resp = await this.request(\"GET\", path, undefined, params);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async post(path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(\"POST\", path, body);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async postWithParams(path: string, body: unknown, params: Record<string, string>): Promise<unknown> {\n const resp = await this.request(\"POST\", path, body, params);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async patch(path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(\"PATCH\", path, body);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async del(path: string): Promise<void> {\n const resp = await this.request(\"DELETE\", path);\n await this.throwIfError(resp);\n }\n\n /** Public generic GET for declarative/registry-driven commands. */\n async fetchJSON(path: string, params?: Record<string, string>): Promise<unknown> {\n return this.get(path, params);\n }\n\n /** Public generic request for declarative/registry-driven write commands. */\n async submitJSON(method: string, path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(method, path, body);\n await this.throwIfError(resp);\n const text = await resp.text();\n if (!text) return {};\n return JSON.parse(text);\n }\n\n // --- Workspace ---\n getStatus() { return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/status`) as Promise<WorkspaceStatusResponse>; }\n\n // --- Obligations ---\n getObligations(tier?: string) {\n const params: Record<string, string> = {};\n if (tier) params.tier = tier;\n return this.get(\"/v1/obligations/summary\", params) as Promise<ApiRecord>;\n }\n\n // --- Digests ---\n listDigests() { return this.get(\"/v1/digests\") as Promise<DigestSummary[]>; }\n triggerDigest() { return this.post(\"/v1/digests/trigger\") as Promise<DigestTriggerResponse>; }\n getDigest(key: string) { return this.get(`/v1/digests/${pathSegment(key)}`) as Promise<DigestSummary>; }\n\n // --- References ---\n syncReferences(kind: string, items: Array<{ resource_id: string; label: string }>, entityId?: string) {\n const body: ApiRecord = { kind, items };\n if (entityId) body.entity_id = entityId;\n return this.post(\"/v1/references/sync\", body) as Promise<{ references: ApiRecord[] }>;\n }\n\n // --- Entities ---\n listEntities() { return this.get(\"/v1/entities\") as Promise<ApiRecord[]>; }\n\n // --- Contacts ---\n listContacts(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/contacts`) as Promise<ApiRecord[]>; }\n getContact(id: string, entityId: string) { return this.get(`/v1/contacts/${pathSegment(id)}`, { entity_id: entityId }) as Promise<ApiRecord>; }\n getContactProfile(id: string, entityId: string) { return this.get(`/v1/contacts/${pathSegment(id)}/profile`, { entity_id: entityId }) as Promise<ApiRecord>; }\n createContact(data: ApiRecord) { return this.post(\"/v1/contacts\", data) as Promise<ApiRecord>; }\n updateContact(id: string, data: ApiRecord) { return this.patch(`/v1/contacts/${pathSegment(id)}`, data) as Promise<ApiRecord>; }\n getNotificationPrefs(contactId: string) { return this.get(`/v1/contacts/${pathSegment(contactId)}/notification-prefs`) as Promise<ApiRecord>; }\n updateNotificationPrefs(contactId: string, prefs: ApiRecord) { return this.patch(`/v1/contacts/${pathSegment(contactId)}/notification-prefs`, prefs) as Promise<ApiRecord>; }\n\n // --- Cap Table ---\n getCapTable(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/cap-table`) as Promise<ApiRecord>; }\n async getSafeNotes(entityId: string): Promise<ApiRecord[]> {\n return this.get(`/v1/entities/${pathSegment(entityId)}/safe-notes`) as Promise<ApiRecord[]>;\n }\n createSafeNote(data: ApiRecord) { return this.post(\"/v1/safe-notes\", data) as Promise<ApiRecord>; }\n listShareTransfers(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/share-transfers`) as Promise<ApiRecord[]>; }\n getShareTransfers(entityId: string) { return this.listShareTransfers(entityId); }\n getValuations(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/valuations`) as Promise<ApiRecord[]>; }\n getCurrent409a(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/current-409a`) as Promise<ApiRecord>; }\n createValuation(data: ApiRecord) { return this.post(\"/v1/valuations\", data) as Promise<ApiRecord>; }\n createInstrument(data: ApiRecord) { return this.post(\"/v1/equity/instruments\", data) as Promise<ApiRecord>; }\n submitValuationForApproval(valuationId: string, entityId: string) {\n return this.post(`/v1/valuations/${pathSegment(valuationId)}/submit-for-approval`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n approveValuation(valuationId: string, entityId: string, resolutionId?: string) {\n const body: ApiRecord = { entity_id: entityId };\n if (resolutionId) body.resolution_id = resolutionId;\n return this.post(`/v1/valuations/${pathSegment(valuationId)}/approve`, body) as Promise<ApiRecord>;\n }\n transferShares(data: ApiRecord) { return this.post(\"/v1/equity/transfer-workflows\", data) as Promise<ApiRecord>; }\n calculateDistribution(data: ApiRecord) { return this.post(\"/v1/distributions\", data) as Promise<ApiRecord>; }\n\n // --- Equity rounds (v1) ---\n createEquityRound(data: CreateEquityRoundRequest) {\n return this.post(\"/v1/equity/rounds\", data) as Promise<EquityRoundResponse>;\n }\n applyEquityRoundTerms(roundId: string, data: ApplyEquityRoundTermsRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/apply-terms`, data) as Promise<ApiRecord>;\n }\n boardApproveEquityRound(roundId: string, data: BoardApproveEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/board-approve`, data) as Promise<EquityRoundResponse>;\n }\n acceptEquityRound(roundId: string, data: AcceptEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/accept`, data) as Promise<EquityRoundResponse>;\n }\n previewRoundConversion(data: PreviewRoundConversionRequest) {\n return this.post(\"/v1/equity/conversions/preview\", data) as Promise<ApiRecord>;\n }\n executeRoundConversion(data: ExecuteRoundConversionRequest) {\n return this.post(\"/v1/equity/conversions/execute\", data) as Promise<ApiRecord>;\n }\n\n // --- Staged equity rounds ---\n listEquityRounds(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/equity-rounds`) as Promise<ApiRecord[]>; }\n startEquityRound(data: ApiRecord) { return this.post(\"/v1/equity/rounds/staged\", data) as Promise<ApiRecord>; }\n addRoundSecurity(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/securities`, data) as Promise<ApiRecord>; }\n issueRound(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/issue`, data) as Promise<ApiRecord>; }\n\n // --- Intent lifecycle helpers ---\n createExecutionIntent(data: CreateExecutionIntentRequest) {\n return this.post(\"/v1/execution/intents\", data) as Promise<IntentResponse>;\n }\n evaluateIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${pathSegment(intentId)}/evaluate`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n authorizeIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${pathSegment(intentId)}/authorize`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n\n // --- Governance ---\n listGovernanceBodies(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/governance-bodies`) as Promise<GovernanceBodyResponse[]>; }\n getGovernanceSeats(bodyId: string, entityId: string) {\n return this.get(`/v1/governance-bodies/${pathSegment(bodyId)}/seats`, { entity_id: entityId }) as Promise<GovernanceSeatResponse[]>;\n }\n listMeetings(bodyId: string, entityId: string) {\n return this.get(`/v1/governance-bodies/${pathSegment(bodyId)}/meetings`, { entity_id: entityId }) as Promise<MeetingResponse[]>;\n }\n getMeetingResolutions(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/resolutions`, { entity_id: entityId }) as Promise<ResolutionResponse[]>;\n }\n scheduleMeeting(data: ApiRecord) { return this.post(\"/v1/meetings\", data) as Promise<MeetingResponse>; }\n conveneMeeting(meetingId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/convene`, data, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n castVote(entityId: string, meetingId: string, itemId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/vote`, data, { entity_id: entityId }) as Promise<VoteResponse>;\n }\n sendNotice(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/notice`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n adjournMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/adjourn`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n reopenMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/reopen`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n cancelMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/cancel`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n finalizeAgendaItem(meetingId: string, itemId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/finalize`, data) as Promise<AgendaItemResponse>;\n }\n computeResolution(meetingId: string, itemId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/resolution`, data, { entity_id: entityId }) as Promise<ResolutionResponse>;\n }\n attachResolutionDocument(meetingId: string, resolutionId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${pathSegment(meetingId)}/resolutions/${pathSegment(resolutionId)}/attach-document`, data) as Promise<ResolutionResponse>;\n }\n writtenConsent(data: ApiRecord) {\n return this.post(\"/v1/meetings/written-consent\", data) as Promise<WrittenConsentResponse>;\n }\n getGovernanceMode(entityId: string) {\n return this.get(\"/v1/governance/mode\", { entity_id: entityId }) as Promise<ApiRecord>;\n }\n setGovernanceMode(data: ApiRecord) {\n return this.post(\"/v1/governance/mode\", data) as Promise<ApiRecord>;\n }\n resignSeat(seatId: string, entityId: string) {\n return this.post(`/v1/governance-seats/${pathSegment(seatId)}/resign`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n createGovernanceIncident(data: ApiRecord) {\n return this.post(\"/v1/governance/incidents\", data) as Promise<ApiRecord>;\n }\n listGovernanceIncidents(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/governance/incidents`) as Promise<ApiRecord[]>;\n }\n resolveGovernanceIncident(incidentId: string, data: ApiRecord) {\n return this.post(`/v1/governance/incidents/${pathSegment(incidentId)}/resolve`, data) as Promise<ApiRecord>;\n }\n getGovernanceProfile(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/governance/profile`) as Promise<ApiRecord>;\n }\n listAgendaItems(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/agenda-items`, { entity_id: entityId }) as Promise<AgendaItemResponse[]>;\n }\n listVotes(meetingId: string, itemId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/votes`, { entity_id: entityId }) as Promise<VoteResponse[]>;\n }\n\n // --- Documents ---\n getEntityDocuments(entityId: string) { return this.get(`/v1/formations/${pathSegment(entityId)}/documents`) as Promise<DocumentResponse[]>; }\n getDocument(documentId: string, entityId: string) {\n return this.get(`/v1/documents/${pathSegment(documentId)}`, { entity_id: entityId }) as Promise<DocumentResponse>;\n }\n signDocument(documentId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/documents/${pathSegment(documentId)}/sign`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n generateContract(data: ApiRecord) { return this.post(\"/v1/contracts\", data) as Promise<ApiRecord>; }\n getSigningLink(documentId: string, entityId: string) {\n return this.get(`/v1/sign/${pathSegment(documentId)}`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n async validatePreviewPdf(entityId: string, documentId: string): Promise<ApiRecord> {\n const resp = await this.request(\"GET\", \"/v1/documents/preview/pdf/validate\", undefined, { entity_id: entityId, document_id: documentId });\n await this.throwIfError(resp);\n return { entity_id: entityId, document_id: documentId };\n }\n getPreviewPdfUrl(entityId: string, documentId: string): string {\n if (this.apiUrl.startsWith(\"process://\")) {\n throw new Error(\n \"PDF preview is not available in local process transport mode.\\n\" +\n \" Use cloud mode (npx corp setup) or start a local HTTP server (npx corp serve) instead.\",\n );\n }\n const qs = new URLSearchParams({ entity_id: entityId, document_id: documentId }).toString();\n return `${this.apiUrl}/v1/documents/preview/pdf?${qs}`;\n }\n\n // --- Finance ---\n listInvoices(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/invoices`) as Promise<ApiRecord[]>; }\n listBankAccounts(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/bank-accounts`) as Promise<ApiRecord[]>; }\n listPayments(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/payments`) as Promise<ApiRecord[]>; }\n listPayrollRuns(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/payroll-runs`) as Promise<ApiRecord[]>; }\n listDistributions(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/distributions`) as Promise<ApiRecord[]>; }\n listReconciliations(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/reconciliations`) as Promise<ApiRecord[]>; }\n createInvoice(data: ApiRecord) { return this.post(\"/v1/treasury/invoices\", data) as Promise<ApiRecord>; }\n runPayroll(data: ApiRecord) { return this.post(\"/v1/payroll/runs\", data) as Promise<ApiRecord>; }\n submitPayment(data: ApiRecord) { return this.post(\"/v1/payments\", data) as Promise<ApiRecord>; }\n openBankAccount(data: ApiRecord) { return this.post(\"/v1/treasury/bank-accounts\", data) as Promise<ApiRecord>; }\n activateBankAccount(bankAccountId: string, entityId: string) { return this.postWithParams(`/v1/bank-accounts/${pathSegment(bankAccountId)}/activate`, {}, { entity_id: entityId }) as Promise<ApiRecord>; }\n classifyContractor(data: ApiRecord) { return this.post(\"/v1/contractors/classify\", data) as Promise<ApiRecord>; }\n reconcileLedger(data: ApiRecord) { return this.post(\"/v1/ledger/reconcile\", data) as Promise<ApiRecord>; }\n getFinancialStatements(entityId: string, params?: Record<string, string>) {\n return this.get(\"/v1/treasury/financial-statements\", { entity_id: entityId, ...(params ?? {}) }) as Promise<ApiRecord>;\n }\n\n // --- Equity analytics ---\n getDilutionPreview(entityId: string, roundId: string) {\n return this.get(\"/v1/equity/dilution/preview\", { entity_id: entityId, round_id: roundId }) as Promise<ApiRecord>;\n }\n getControlMap(entityId: string, rootEntityId: string) {\n return this.get(\"/v1/equity/control-map\", { entity_id: entityId, root_entity_id: rootEntityId }) as Promise<ApiRecord>;\n }\n\n // --- Tax ---\n listTaxFilings(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/tax-filings`) as Promise<ApiRecord[]>; }\n listDeadlines(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/deadlines`) as Promise<ApiRecord[]>; }\n listContractorClassifications(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/contractor-classifications`) as Promise<ApiRecord[]>;\n }\n fileTaxDocument(data: ApiRecord) { return this.post(\"/v1/tax/filings\", data) as Promise<ApiRecord>; }\n trackDeadline(data: ApiRecord) { return this.post(\"/v1/deadlines\", data) as Promise<ApiRecord>; }\n\n // --- Billing ---\n getBillingStatus() { return this.get(\"/v1/billing/status\", { workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n getBillingPlans() {\n return (this.get(\"/v1/billing/plans\") as Promise<unknown>).then((data) => {\n if (typeof data === \"object\" && data !== null && \"plans\" in data) {\n return (data as { plans: ApiRecord[] }).plans;\n }\n return data as ApiRecord[];\n });\n }\n createBillingPortal() { return this.post(\"/v1/billing/portal\", { workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n createBillingCheckout(planId: string, entityId?: string) {\n const body: ApiRecord = { plan_id: planId };\n if (entityId) body.entity_id = entityId;\n return this.post(\"/v1/billing/checkout\", body) as Promise<ApiRecord>;\n }\n\n // --- Formations ---\n getFormation(id: string) { return this.get(`/v1/formations/${pathSegment(id)}`) as Promise<FormationResponse>; }\n getFormationDocuments(id: string) { return this.get(`/v1/formations/${pathSegment(id)}/documents`) as Promise<DocumentResponse[]>; }\n createFormation(data: ApiRecord) { return this.post(\"/v1/formations\", data) as Promise<FormationResponse>; }\n createFormationWithCapTable(data: ApiRecord) { return this.post(\"/v1/formations/with-cap-table\", data) as Promise<FormationWithCapTableResponse>; }\n createPendingEntity(data: ApiRecord) { return this.post(\"/v1/formations/pending\", data) as Promise<PendingFormationResponse>; }\n addFounder(entityId: string, data: ApiRecord) { return this.post(`/v1/formations/${pathSegment(entityId)}/founders`, data) as Promise<AddFounderResponse>; }\n finalizeFormation(entityId: string, data: ApiRecord = {}) { return this.post(`/v1/formations/${pathSegment(entityId)}/finalize`, data) as Promise<FormationWithCapTableResponse>; }\n markFormationDocumentsSigned(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/mark-documents-signed`) as Promise<ApiRecord>;\n }\n getFormationGates(entityId: string) {\n return this.get(`/v1/formations/${pathSegment(entityId)}/gates`) as Promise<ApiRecord>;\n }\n recordFilingAttestation(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/filing-attestation`, data) as Promise<ApiRecord>;\n }\n addRegisteredAgentConsentEvidence(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/registered-agent-consent-evidence`, data) as Promise<ApiRecord>;\n }\n submitFiling(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/submit-filing`) as Promise<ApiRecord>;\n }\n confirmFiling(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/filing-confirmation`, data) as Promise<ApiRecord>;\n }\n applyEin(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/apply-ein`) as Promise<ApiRecord>;\n }\n confirmEin(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/ein-confirmation`, data) as Promise<ApiRecord>;\n }\n\n // --- Human obligations ---\n getHumanObligations() { return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/human-obligations`) as Promise<ObligationResponse[]>; }\n getSignerToken(obligationId: string) { return this.post(`/v1/human-obligations/${pathSegment(obligationId)}/signer-token`) as Promise<ApiRecord>; }\n\n // --- Next Steps ---\n getEntityNextSteps(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/next-steps`) as Promise<NextStepsResponse>;\n }\n\n getWorkspaceNextSteps() {\n return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/next-steps`) as Promise<NextStepsResponse>;\n }\n\n // --- Demo ---\n seedDemo(data: ApiRecord) { return this.post(\"/v1/demo/seed\", data) as Promise<ApiRecord>; }\n\n // --- Entities writes ---\n convertEntity(entityId: string, data: ApiRecord) {\n const body: ApiRecord = {\n target_type: data.target_type ?? data.new_entity_type,\n };\n const jurisdiction = data.jurisdiction ?? data.new_jurisdiction;\n if (jurisdiction) body.jurisdiction = jurisdiction;\n return this.post(`/v1/entities/${pathSegment(entityId)}/convert`, body) as Promise<ApiRecord>;\n }\n dissolveEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/dissolve`, data) as Promise<ApiRecord>; }\n\n // --- Agents ---\n listAgents() { return this.get(\"/v1/agents\") as Promise<ApiRecord[]>; }\n getAgent(id: string) { return this.get(`/v1/agents/${pathSegment(id)}/resolved`) as Promise<ApiRecord>; }\n createAgent(data: ApiRecord) { return this.post(\"/v1/agents\", data) as Promise<ApiRecord>; }\n updateAgent(id: string, data: ApiRecord) { return this.patch(`/v1/agents/${pathSegment(id)}`, data) as Promise<ApiRecord>; }\n deleteAgent(id: string) { return this.patch(`/v1/agents/${pathSegment(id)}`, { status: \"disabled\" }) as Promise<ApiRecord>; }\n sendAgentMessage(id: string, message: string) { return this.post(`/v1/agents/${pathSegment(id)}/messages`, { message }) as Promise<ApiRecord>; }\n addAgentSkill(id: string, data: ApiRecord) { return this.post(`/v1/agents/${pathSegment(id)}/skills`, data) as Promise<ApiRecord>; }\n listSupportedModels() { return this.get(\"/v1/models\") as Promise<ApiRecord[]>; }\n async getAgentExecution(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}`) as Promise<ApiRecord>;\n }\n async getAgentExecutionResult(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/result`) as Promise<ApiRecord>;\n }\n async getAgentExecutionLogs(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/logs`) as Promise<ApiRecord>;\n }\n async killAgentExecution(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.post(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/kill`, {}) as Promise<ApiRecord>;\n }\n\n // --- Governance bodies ---\n createGovernanceBody(data: ApiRecord) { return this.post(\"/v1/governance-bodies\", data) as Promise<ApiRecord>; }\n createGovernanceSeat(bodyId: string, entityId: string, data: ApiRecord) { return this.postWithParams(`/v1/governance-bodies/${pathSegment(bodyId)}/seats`, data, { entity_id: entityId }) as Promise<ApiRecord>; }\n\n // --- Work Items ---\n listWorkItems(entityId: string, params?: Record<string, string>) { return this.get(`/v1/entities/${pathSegment(entityId)}/work-items`, params) as Promise<ApiRecord[]>; }\n getWorkItem(entityId: string, workItemId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}`) as Promise<ApiRecord>; }\n createWorkItem(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items`, data) as Promise<ApiRecord>; }\n claimWorkItem(entityId: string, workItemId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/claim`, data) as Promise<ApiRecord>; }\n completeWorkItem(entityId: string, workItemId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/complete`, data) as Promise<ApiRecord>; }\n releaseWorkItem(entityId: string, workItemId: string) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/release`, {}) as Promise<ApiRecord>; }\n cancelWorkItem(entityId: string, workItemId: string) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/cancel`, {}) as Promise<ApiRecord>; }\n\n // --- API Keys ---\n listApiKeys() { return this.get(\"/v1/api-keys\", { workspace_id: this.workspaceId }) as Promise<ApiRecord[]>; }\n async createApiKey(data: ApiRecord): Promise<ApiRecord> {\n return this.post(\"/v1/api-keys\", data) as Promise<ApiRecord>;\n }\n async revokeApiKey(keyId: string): Promise<void> {\n return this.del(`/v1/api-keys/${pathSegment(keyId)}`);\n }\n async rotateApiKey(keyId: string): Promise<ApiRecord> {\n return this.post(`/v1/api-keys/${pathSegment(keyId)}/rotate`, {}) as Promise<ApiRecord>;\n }\n\n // --- Obligations ---\n assignObligation(obligationId: string, contactId: string) {\n return this.patch(`/v1/obligations/${pathSegment(obligationId)}/assign`, { contact_id: contactId }) as Promise<ApiRecord>;\n }\n\n // --- Config ---\n getConfig() { return this.get(\"/v1/config\") as Promise<ApiRecord>; }\n\n // --- Services ---\n listServiceCatalog() { return this.get(\"/v1/services/catalog\") as Promise<ApiRecord[]>; }\n createServiceRequest(data: ApiRecord) { return this.post(\"/v1/services/requests\", data) as Promise<ApiRecord>; }\n getServiceRequest(id: string, entityId: string) { return this.get(`/v1/services/requests/${pathSegment(id)}`, { entity_id: entityId }) as Promise<ApiRecord>; }\n listServiceRequests(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/service-requests`) as Promise<ApiRecord[]>; }\n beginServiceCheckout(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/checkout`, data) as Promise<ApiRecord>; }\n fulfillServiceRequest(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/fulfill`, data) as Promise<ApiRecord>; }\n cancelServiceRequest(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/cancel`, data) as Promise<ApiRecord>; }\n\n // --- Feedback ---\n submitFeedback(message: string, category?: string, email?: string) {\n return this.post(\"/v1/feedback\", { message, category, email }) as Promise<{ feedback_id: string; submitted_at: string }>;\n }\n\n // --- Link/Claim ---\n async createLink(externalId: string, provider: string): Promise<ApiRecord> {\n const resp = await this.request(\"POST\", \"/v1/workspaces/link\", { external_id: externalId, provider });\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n if (resp.status === 401) throw new SessionExpiredError(detail);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`${prefix}: ${detail}`);\n }\n return resp.json() as Promise<ApiRecord>;\n }\n}\n","/**\n * Browser-compatible reference matching and tracking core.\n *\n * Pure functions for matching, ranking, and describing resource references,\n * plus the pluggable ReferenceTracker class that works in any JS runtime.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ResourceKind =\n | \"entity\"\n | \"contact\"\n | \"share_transfer\"\n | \"invoice\"\n | \"bank_account\"\n | \"payment\"\n | \"payroll_run\"\n | \"distribution\"\n | \"reconciliation\"\n | \"tax_filing\"\n | \"deadline\"\n | \"classification\"\n | \"body\"\n | \"meeting\"\n | \"seat\"\n | \"agenda_item\"\n | \"resolution\"\n | \"document\"\n | \"work_item\"\n | \"agent\"\n | \"valuation\"\n | \"safe_note\"\n | \"instrument\"\n | \"share_class\"\n | \"round\"\n | \"service_request\";\n\nexport type MatchRecord = {\n id: string;\n label: string;\n tokens: Set<string>;\n raw: Record<string, unknown>;\n};\n\nexport type ReferenceMatch = {\n kind: ResourceKind;\n id: string;\n short_id: string;\n label: string;\n alias?: string;\n raw: Record<string, unknown>;\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const RESOURCE_KINDS = [\n \"entity\",\n \"contact\",\n \"share_transfer\",\n \"invoice\",\n \"bank_account\",\n \"payment\",\n \"payroll_run\",\n \"distribution\",\n \"reconciliation\",\n \"tax_filing\",\n \"deadline\",\n \"classification\",\n \"body\",\n \"meeting\",\n \"seat\",\n \"agenda_item\",\n \"resolution\",\n \"document\",\n \"work_item\",\n \"agent\",\n \"valuation\",\n \"safe_note\",\n \"instrument\",\n \"share_class\",\n \"round\",\n \"service_request\",\n] as const satisfies readonly ResourceKind[];\n\nconst VALID_RESOURCE_KINDS = new Set<ResourceKind>(RESOURCE_KINDS);\nconst MAX_REFERENCE_INPUT_LEN = 256;\n\n// ---------------------------------------------------------------------------\n// Pure helpers\n// ---------------------------------------------------------------------------\n\nexport function normalize(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function validateReferenceInput(\n value: string,\n field: string,\n options: { allowEmpty?: boolean } = {},\n): string {\n const trimmed = value.trim();\n if (!options.allowEmpty && trimmed.length === 0) {\n throw new Error(`${field} cannot be empty.`);\n }\n if (trimmed.length > MAX_REFERENCE_INPUT_LEN) {\n throw new Error(`${field} must be at most ${MAX_REFERENCE_INPUT_LEN} characters.`);\n }\n return trimmed;\n}\n\nexport function shortId(value: string | undefined): string {\n return String(value ?? \"\").slice(0, 8);\n}\n\nexport function slugify(value: string | undefined): string {\n return String(value ?? \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nexport function isOpaqueUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value.trim(),\n );\n}\n\nexport function isShortIdCandidate(value: string): boolean {\n const trimmed = value.trim();\n return /^[0-9a-f-]{4,}$/i.test(trimmed) || /^[a-z]+_[a-z0-9_-]{3,}$/i.test(trimmed);\n}\n\nexport function parseLastReference(value: string): { isLast: boolean; kind?: ResourceKind } {\n const trimmed = validateReferenceInput(value, \"reference\", { allowEmpty: false }).toLowerCase();\n if (trimmed === \"_\" || trimmed === \"@last\") {\n return { isLast: true };\n }\n if (trimmed.startsWith(\"@last:\")) {\n const kind = trimmed.slice(6);\n if (!VALID_RESOURCE_KINDS.has(kind as ResourceKind)) {\n throw new Error(`Unknown reference kind: ${kind}`);\n }\n return { isLast: true, kind: kind as ResourceKind };\n }\n return { isLast: false };\n}\n\nexport function uniqueStrings(values: Array<string | undefined | null>): Set<string> {\n const out = new Set<string>();\n for (const value of values) {\n if (!value) continue;\n const trimmed = value.trim();\n if (!trimmed) continue;\n out.add(normalize(trimmed));\n const slug = slugify(trimmed);\n if (slug) out.add(slug);\n }\n return out;\n}\n\nexport function kindLabel(kind: ResourceKind): string {\n return kind.replaceAll(\"_\", \" \");\n}\n\nexport function isEntityScopedKind(kind: ResourceKind): boolean {\n return kind !== \"entity\" && kind !== \"agent\";\n}\n\nexport function extractId(record: Record<string, unknown>, fields: string[]): string | undefined {\n for (const field of fields) {\n const value = record[field];\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nexport function isValidResourceKind(kind: string): kind is ResourceKind {\n return VALID_RESOURCE_KINDS.has(kind as ResourceKind);\n}\n\n// ---------------------------------------------------------------------------\n// describeReferenceRecord — extract id / label / tokens from a raw record\n// ---------------------------------------------------------------------------\n\nexport function describeReferenceRecord(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): MatchRecord | null {\n const specs: Record<ResourceKind, { idFields: string[]; labelFields: string[] }> = {\n entity: { idFields: [\"entity_id\", \"id\"], labelFields: [\"legal_name\", \"name\"] },\n contact: { idFields: [\"contact_id\", \"id\"], labelFields: [\"name\", \"email\"] },\n share_transfer: {\n idFields: [\"transfer_id\", \"id\"],\n labelFields: [\"from_holder\", \"to_holder\", \"transfer_type\", \"status\"],\n },\n invoice: {\n idFields: [\"invoice_id\", \"id\"],\n labelFields: [\"customer_name\", \"description\", \"due_date\"],\n },\n bank_account: {\n idFields: [\"bank_account_id\", \"account_id\", \"id\"],\n labelFields: [\"bank_name\", \"account_type\"],\n },\n payment: {\n idFields: [\"payment_id\", \"id\"],\n labelFields: [\"recipient\", \"description\", \"payment_method\"],\n },\n payroll_run: {\n idFields: [\"payroll_run_id\", \"id\"],\n labelFields: [\"pay_period_start\", \"pay_period_end\"],\n },\n distribution: {\n idFields: [\"distribution_id\", \"id\"],\n labelFields: [\"description\", \"distribution_type\"],\n },\n reconciliation: {\n idFields: [\"reconciliation_id\", \"id\"],\n labelFields: [\"as_of_date\", \"status\"],\n },\n tax_filing: {\n idFields: [\"filing_id\", \"id\"],\n labelFields: [\"document_type\", \"tax_year\"],\n },\n deadline: {\n idFields: [\"deadline_id\", \"id\"],\n labelFields: [\"deadline_type\", \"description\", \"due_date\"],\n },\n classification: {\n idFields: [\"classification_id\", \"id\"],\n labelFields: [\"contractor_name\", \"state\", \"risk_level\"],\n },\n body: { idFields: [\"body_id\", \"id\"], labelFields: [\"name\"] },\n meeting: { idFields: [\"meeting_id\", \"id\"], labelFields: [\"title\", \"name\"] },\n seat: {\n idFields: [\"seat_id\", \"id\"],\n labelFields: [\"seat_name\", \"title\", \"holder_name\", \"holder\", \"holder_email\"],\n },\n agenda_item: { idFields: [\"agenda_item_id\", \"item_id\", \"id\"], labelFields: [\"title\"] },\n resolution: { idFields: [\"resolution_id\", \"id\"], labelFields: [\"title\"] },\n document: { idFields: [\"document_id\", \"id\"], labelFields: [\"title\", \"name\"] },\n work_item: { idFields: [\"work_item_id\", \"id\"], labelFields: [\"title\"] },\n agent: { idFields: [\"agent_id\", \"id\"], labelFields: [\"name\"] },\n valuation: {\n idFields: [\"valuation_id\", \"id\"],\n labelFields: [\"valuation_type\", \"effective_date\", \"date\"],\n },\n safe_note: {\n idFields: [\"safe_note_id\", \"safe_id\", \"id\"],\n labelFields: [\"investor_name\", \"investor\", \"safe_type\"],\n },\n instrument: { idFields: [\"instrument_id\", \"id\"], labelFields: [\"symbol\", \"kind\", \"name\"] },\n share_class: {\n idFields: [\"share_class_id\", \"id\"],\n labelFields: [\"class_code\", \"name\", \"share_class\"],\n },\n round: { idFields: [\"round_id\", \"equity_round_id\", \"id\"], labelFields: [\"name\"] },\n service_request: {\n idFields: [\"request_id\", \"service_request_id\", \"id\"],\n labelFields: [\"service_slug\", \"status\"],\n },\n };\n const spec = specs[kind];\n const id = extractId(record, spec.idFields);\n if (!id) {\n return null;\n }\n const labels = spec.labelFields\n .map((field) => record[field])\n .filter((value): value is string => typeof value === \"string\" && value.trim().length > 0);\n const persistedHandle =\n typeof record.handle === \"string\" && record.handle.trim().length > 0\n ? record.handle.trim()\n : undefined;\n let label = labels[0] ?? id;\n if (kind === \"share_transfer\") {\n const fromHolder = typeof record.from_holder === \"string\" ? record.from_holder.trim() : \"\";\n const toHolder = typeof record.to_holder === \"string\" ? record.to_holder.trim() : \"\";\n const transferType =\n typeof record.transfer_type === \"string\" ? record.transfer_type.trim() : \"\";\n const composite = [\n fromHolder && toHolder ? `${fromHolder}-to-${toHolder}` : \"\",\n transferType,\n ]\n .filter(Boolean)\n .join(\"-\");\n if (composite) {\n label = composite;\n }\n }\n return {\n id,\n label,\n tokens: uniqueStrings([id, persistedHandle, ...labels]),\n raw: record,\n };\n}\n\n// ---------------------------------------------------------------------------\n// getReferenceId / getReferenceLabel / getReferenceAlias\n// ---------------------------------------------------------------------------\n\nexport function getReferenceId(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n return describeReferenceRecord(kind, record)?.id;\n}\n\nexport function getReferenceLabel(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n return describeReferenceRecord(kind, record)?.label;\n}\n\nexport function getReferenceAlias(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n if (typeof record.handle === \"string\" && record.handle.trim().length > 0) {\n return record.handle.trim();\n }\n const described = describeReferenceRecord(kind, record);\n if (!described) return undefined;\n const alias = slugify(described.label);\n return alias || shortId(described.id);\n}\n\n// ---------------------------------------------------------------------------\n// matchRank — rank how well a record matches a normalized query\n// ---------------------------------------------------------------------------\n\nexport function matchRank(record: MatchRecord, normalizedQuery: string): number {\n if (!normalizedQuery || normalizedQuery === \"*\") {\n return 5;\n }\n if (normalize(record.id) === normalizedQuery) {\n return 0;\n }\n if (record.tokens.has(normalizedQuery)) {\n return 1;\n }\n if (normalize(record.id).startsWith(normalizedQuery)) {\n return 2;\n }\n if (Array.from(record.tokens).some((token) => token.startsWith(normalizedQuery))) {\n return 3;\n }\n return 4;\n}\n\n// ---------------------------------------------------------------------------\n// ReferenceStorage — pluggable storage interface\n// ---------------------------------------------------------------------------\n\nexport interface ReferenceStorage {\n getLastReference(kind: ResourceKind, entityId?: string): string | undefined;\n setLastReference(kind: ResourceKind, id: string, entityId?: string): void;\n getActiveEntityId(): string | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// ReferenceTracker — browser-compatible matching + @last tracking\n// ---------------------------------------------------------------------------\n\nexport class ReferenceTracker {\n constructor(private storage: ReferenceStorage) {}\n\n /** Remember a reference for @last reuse. */\n remember(kind: ResourceKind, id: string, entityId?: string): void {\n this.storage.setLastReference(kind, id, entityId);\n }\n\n /** Resolve @last / @last:kind references. */\n resolveLastReference(\n ref: string,\n kind: ResourceKind,\n entityId?: string,\n ): { isLast: boolean; kind?: ResourceKind; id?: string } {\n const parsed = parseLastReference(ref);\n if (!parsed.isLast) return parsed;\n const lastKind = parsed.kind ?? kind;\n if (lastKind !== kind) {\n throw new Error(\n `@last:${lastKind} cannot be used where a ${kindLabel(kind)} reference is required.`,\n );\n }\n const id = this.storage.getLastReference(lastKind, entityId);\n return { ...parsed, id };\n }\n\n /** Find the single best match for a query against a list of records. */\n findBestMatch(\n kind: ResourceKind,\n query: string,\n records: Record<string, unknown>[],\n ): ReferenceMatch | null {\n const matches = this.findMatches(kind, query, records);\n return matches.length > 0 ? matches[0] : null;\n }\n\n /** Find all matching records ranked by relevance. */\n findMatches(\n kind: ResourceKind,\n query: string,\n records: Record<string, unknown>[],\n ): ReferenceMatch[] {\n const trimmedQuery = validateReferenceInput(query, \"query\", { allowEmpty: true });\n const described = records\n .map((record) => describeReferenceRecord(kind, record))\n .filter((record): record is MatchRecord => record !== null);\n const normalizedQuery = normalize(trimmedQuery);\n\n const matches = described\n .filter((record) => {\n if (!normalizedQuery || normalizedQuery === \"*\") {\n return true;\n }\n if (normalize(record.id).startsWith(normalizedQuery)) {\n return true;\n }\n if (record.tokens.has(normalizedQuery)) {\n return true;\n }\n return Array.from(record.tokens).some((token) => token.includes(normalizedQuery));\n })\n .sort(\n (left, right) =>\n matchRank(left, normalizedQuery) - matchRank(right, normalizedQuery) ||\n left.label.localeCompare(right.label) ||\n left.id.localeCompare(right.id),\n );\n\n return matches.map((record) => ({\n kind,\n id: record.id,\n short_id: shortId(record.id),\n label: record.label,\n alias: getReferenceAlias(kind, record.raw),\n raw: record.raw,\n }));\n }\n}\n","// ---------------------------------------------------------------------------\n// Pure business-logic helpers for equity issuance\n// No Node/CLI/browser dependencies — just data transforms and validation.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { CapTableInstrument } from \"../tools.js\";\n\nexport type { CapTableInstrument } from \"../tools.js\";\n\n// ---------------------------------------------------------------------------\n// Grant-type normalization\n// ---------------------------------------------------------------------------\n\nexport function normalizedGrantType(grantType: string): string {\n return grantType.trim().toLowerCase().replaceAll(\"-\", \"_\").replaceAll(\" \", \"_\");\n}\n\n// ---------------------------------------------------------------------------\n// Instrument-kind mapping\n// ---------------------------------------------------------------------------\n\nexport function expectedInstrumentKinds(grantType: string): string[] {\n switch (normalizedGrantType(grantType)) {\n case \"common\":\n case \"common_stock\":\n return [\"common_equity\"];\n case \"preferred\":\n case \"preferred_stock\":\n return [\"preferred_equity\"];\n case \"unit\":\n case \"membership_unit\":\n return [\"membership_unit\"];\n case \"option\":\n case \"options\":\n case \"stock_option\":\n case \"iso\":\n case \"nso\":\n return [\"option_grant\"];\n case \"rsa\":\n return [\"common_equity\", \"preferred_equity\"];\n default:\n return [];\n }\n}\n\n// ---------------------------------------------------------------------------\n// 409A requirement check\n// ---------------------------------------------------------------------------\n\nexport function grantRequiresCurrent409a(\n grantType: string,\n instrumentKind?: string,\n): boolean {\n return (\n instrumentKind?.toLowerCase() === \"option_grant\" ||\n expectedInstrumentKinds(grantType).includes(\"option_grant\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Instrument creation hint (CLI-agnostic text)\n// ---------------------------------------------------------------------------\n\nexport function buildInstrumentCreationHint(grantType: string): string {\n const normalized = normalizedGrantType(grantType);\n switch (normalized) {\n case \"preferred\":\n case \"preferred_stock\":\n return \"Create one with: corp cap-table create-instrument --kind preferred_equity --symbol SERIES-A --authorized-units <shares>\";\n case \"option\":\n case \"options\":\n case \"stock_option\":\n case \"iso\":\n case \"nso\":\n return \"Create one with: corp cap-table create-instrument --kind option_grant --symbol OPTION-PLAN --authorized-units <shares>\";\n case \"membership_unit\":\n case \"unit\":\n return \"Create one with: corp cap-table create-instrument --kind membership_unit --symbol UNIT --authorized-units <units>\";\n case \"common\":\n case \"common_stock\":\n return \"Create one with: corp cap-table create-instrument --kind common_equity --symbol COMMON --authorized-units <shares>\";\n default:\n return \"Create a matching instrument first, then pass --instrument-id explicitly.\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Resolve the instrument for a given grant type\n// ---------------------------------------------------------------------------\n\nexport function resolveInstrumentForGrant(\n instruments: CapTableInstrument[],\n grantType: string,\n explicitInstrumentId?: string,\n): CapTableInstrument {\n if (explicitInstrumentId) {\n const explicit = instruments.find(\n (instrument) => instrument.instrument_id === explicitInstrumentId,\n );\n if (!explicit) {\n throw new Error(\n `Instrument ${explicitInstrumentId} was not found on the cap table.`,\n );\n }\n return explicit;\n }\n\n const kinds = expectedInstrumentKinds(grantType);\n if (kinds.length === 0) {\n throw new Error(\n `No default instrument mapping exists for grant type \"${grantType}\". ${buildInstrumentCreationHint(grantType)}`,\n );\n }\n const match = instruments.find((instrument) =>\n kinds.includes(String(instrument.kind).toLowerCase()),\n );\n if (!match) {\n throw new Error(\n `No instrument found for grant type \"${grantType}\". Expected one of: ${kinds.join(\", \")}. ${buildInstrumentCreationHint(grantType)}`,\n );\n }\n return match;\n}\n\n// ---------------------------------------------------------------------------\n// Board check\n// ---------------------------------------------------------------------------\n\nexport async function entityHasActiveBoard(\n client: CorpAPIClient,\n entityId: string,\n): Promise<boolean> {\n const bodies = await client.listGovernanceBodies(entityId);\n return bodies.some(\n (body) =>\n String(body.body_type ?? \"\").toLowerCase() === \"board_of_directors\" &&\n String(body.status ?? \"active\").toLowerCase() === \"active\",\n );\n}\n\n// ---------------------------------------------------------------------------\n// Issuance preflight: board approval + 409A\n// ---------------------------------------------------------------------------\n\nexport async function ensureIssuancePreflight(\n client: CorpAPIClient,\n entityId: string,\n grantType: string,\n instrument?: CapTableInstrument,\n meetingId?: string,\n resolutionId?: string,\n operationLabel?: string,\n): Promise<void> {\n if (!meetingId || !resolutionId) {\n if (await entityHasActiveBoard(client, entityId)) {\n const label = operationLabel ?? \"this issuance\";\n throw new Error(\n `Board approval is required for ${label}. Pass --meeting-id and --resolution-id from a passed board vote.\\n` +\n ` Tip: Use 'corp governance quick-approve --text \"RESOLVED: authorize ${label}\"' for one-step approval.`,\n );\n }\n }\n\n if (!grantRequiresCurrent409a(grantType, instrument?.kind)) {\n return;\n }\n\n try {\n await client.getCurrent409a(entityId);\n } catch (err) {\n const msg = String(err);\n if (\n msg.includes(\"404\") ||\n msg.includes(\"Not found\") ||\n msg.includes(\"not found\")\n ) {\n throw new Error(\n \"Stock option issuances require a current approved 409A valuation. Create and approve one first with: corp cap-table create-valuation --type four_oh_nine_a --date YYYY-MM-DD --methodology <method>; corp cap-table submit-valuation <valuation-ref>; corp cap-table approve-valuation <valuation-ref> --resolution-id <resolution-ref>\",\n );\n }\n throw err;\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: issue-equity\n//\n// Pure function: preflight checks → start round → add security → issue round.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { ApiRecord } from \"../types.js\";\nimport type { WorkflowResult } from \"./types.js\";\nimport {\n type CapTableInstrument,\n ensureIssuancePreflight,\n expectedInstrumentKinds,\n resolveInstrumentForGrant,\n} from \"./equity-helpers.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface IssueEquityArgs {\n entityId: string;\n grantType: string;\n shares: number;\n recipientName: string;\n recipientEmail?: string;\n /** Pre-resolved instrument ID (already resolved by the caller). */\n instrumentId?: string;\n /** Pre-resolved meeting ID. */\n meetingId?: string;\n /** Pre-resolved resolution ID. */\n resolutionId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function issueEquity(\n client: CorpAPIClient,\n args: IssueEquityArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n\n try {\n // ── Fetch cap table ──────────────────────────────────────────\n const capTable = await client.getCapTable(args.entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as\n | string\n | undefined;\n if (!issuerLegalEntityId) {\n return {\n success: false,\n error:\n \"No issuer legal entity found. Has this entity been formed with a cap table?\",\n steps,\n };\n }\n\n const instruments = (capTable.instruments ?? []) as CapTableInstrument[];\n if (!instruments.length) {\n return {\n success: false,\n error:\n \"No instruments found on cap table. Create one with: corp cap-table create-instrument --kind common_equity --symbol COMMON --authorized-units <shares>\",\n steps,\n };\n }\n\n // ── Resolve instrument (auto-create option_grant for ISO/NSO if missing) ──\n let instrument: CapTableInstrument;\n try {\n instrument = resolveInstrumentForGrant(\n instruments,\n args.grantType,\n args.instrumentId,\n );\n } catch (resolveErr) {\n // Auto-create option_grant instrument for ISO/NSO grants\n const kinds = expectedInstrumentKinds(args.grantType);\n if (kinds.includes(\"option_grant\") && !args.instrumentId) {\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string | undefined;\n if (!issuerLegalEntityId) throw resolveErr;\n const created = await client.createInstrument({\n entity_id: args.entityId,\n issuer_legal_entity_id: issuerLegalEntityId,\n kind: \"option_grant\",\n symbol: \"OPTION-PLAN\",\n authorized_units: 10_000_000,\n });\n instrument = created as unknown as CapTableInstrument;\n steps.push({\n name: \"auto_create_instrument\",\n status: \"ok\",\n detail: `Auto-created option_grant instrument OPTION-PLAN`,\n });\n } else {\n throw resolveErr;\n }\n }\n const instrumentId = instrument.instrument_id;\n steps.push({\n name: \"resolve_instrument\",\n status: \"ok\",\n data: {\n instrument_id: instrumentId,\n symbol: instrument.symbol,\n kind: instrument.kind,\n },\n detail: `Using instrument: ${instrument.symbol} (${instrument.kind})`,\n });\n\n // ── Preflight checks ─────────────────────────────────────────\n await ensureIssuancePreflight(\n client,\n args.entityId,\n args.grantType,\n instrument,\n args.meetingId,\n args.resolutionId,\n \"equity issuance\",\n );\n steps.push({ name: \"preflight\", status: \"ok\" });\n\n // ── Step 1: Start a staged round ─────────────────────────────\n const round = await client.startEquityRound({\n entity_id: args.entityId,\n name: `${args.grantType} grant \\u2014 ${args.recipientName}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n steps.push({\n name: \"start_round\",\n status: \"ok\",\n data: { round_id: roundId },\n });\n\n // ── Step 2: Add the security ─────────────────────────────────\n const securityData: Record<string, unknown> = {\n entity_id: args.entityId,\n instrument_id: instrumentId,\n quantity: args.shares,\n recipient_name: args.recipientName,\n grant_type: args.grantType,\n };\n if (args.recipientEmail) securityData.email = args.recipientEmail;\n\n // Attempt to find existing holder to avoid duplicates\n const existingHolders = (capTable.holders ?? []) as ApiRecord[];\n const matchingHolder = existingHolders.find((h) => {\n const nameMatch =\n String(h.name ?? \"\").toLowerCase() ===\n args.recipientName.toLowerCase();\n const emailMatch =\n args.recipientEmail &&\n String(h.email ?? \"\").toLowerCase() ===\n args.recipientEmail.toLowerCase();\n return nameMatch || emailMatch;\n });\n if (matchingHolder) {\n const holderId =\n matchingHolder.holder_id ??\n matchingHolder.contact_id ??\n matchingHolder.id;\n if (holderId) securityData.holder_id = holderId;\n }\n\n await client.addRoundSecurity(roundId, securityData);\n steps.push({ name: \"add_security\", status: \"ok\" });\n\n // ── Step 3: Issue the round ──────────────────────────────────\n const issuePayload: Record<string, unknown> = {\n entity_id: args.entityId,\n };\n if (args.meetingId) issuePayload.meeting_id = args.meetingId;\n if (args.resolutionId) issuePayload.resolution_id = args.resolutionId;\n const result = await client.issueRound(roundId, issuePayload);\n steps.push({ name: \"issue_round\", status: \"ok\" });\n\n return {\n success: true,\n data: {\n ...result,\n round_id: roundId,\n round,\n shares: args.shares,\n grant_type: args.grantType,\n recipient: args.recipientName,\n },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: issue-safe\n//\n// Pure function: preflight checks → create SAFE note.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { WorkflowResult } from \"./types.js\";\nimport { ensureIssuancePreflight } from \"./equity-helpers.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface IssueSafeArgs {\n entityId: string;\n investorName: string;\n amountCents: number;\n valuationCapCents: number;\n safeType?: string;\n email?: string;\n /** Pre-resolved meeting ID. */\n meetingId?: string;\n /** Pre-resolved resolution ID. */\n resolutionId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function issueSafe(\n client: CorpAPIClient,\n args: IssueSafeArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n const safeType = args.safeType ?? \"post_money\";\n\n try {\n // ── Preflight checks ─────────────────────────────────────────\n await ensureIssuancePreflight(\n client,\n args.entityId,\n safeType,\n undefined,\n args.meetingId,\n args.resolutionId,\n \"SAFE issuance\",\n );\n steps.push({ name: \"preflight\", status: \"ok\" });\n\n // ── Create SAFE note ─────────────────────────────────────────\n const body: Record<string, unknown> = {\n entity_id: args.entityId,\n investor_name: args.investorName,\n principal_amount_cents: args.amountCents,\n valuation_cap_cents: args.valuationCapCents,\n safe_type: safeType,\n };\n if (args.email) body.email = args.email;\n if (args.meetingId) body.meeting_id = args.meetingId;\n if (args.resolutionId) body.resolution_id = args.resolutionId;\n\n const result = await client.createSafeNote(body);\n steps.push({ name: \"create_safe\", status: \"ok\" });\n\n return {\n success: true,\n data: {\n ...result,\n investor_name: args.investorName,\n amount_cents: args.amountCents,\n valuation_cap_cents: args.valuationCapCents,\n },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: written-consent\n//\n// Pure function: create written consent → auto-open with all body seats.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { WorkflowResult } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface WrittenConsentArgs {\n entityId: string;\n /** Pre-resolved governance body ID. */\n bodyId: string;\n title: string;\n description: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function writtenConsent(\n client: CorpAPIClient,\n args: WrittenConsentArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n\n try {\n // ── Create written consent ───────────────────────────────────\n const payload = {\n entity_id: args.entityId,\n body_id: args.bodyId,\n title: args.title,\n description: args.description,\n };\n const result = await client.writtenConsent(payload);\n const meetingId = String(result.meeting_id ?? \"\");\n steps.push({\n name: \"create_written_consent\",\n status: \"ok\",\n data: { meeting_id: meetingId || undefined },\n });\n\n // ── Auto-open with all body seats ────────────────────────────\n if (meetingId) {\n try {\n const seats = await client.getGovernanceSeats(\n args.bodyId,\n args.entityId,\n );\n const seatIds = seats\n .map((s) =>\n String(\n s.seat_id ?? (s as Record<string, unknown>).id ?? \"\",\n ),\n )\n .filter((id) => id.length > 0);\n if (seatIds.length > 0) {\n await client.conveneMeeting(meetingId, args.entityId, {\n present_seat_ids: seatIds,\n });\n steps.push({\n name: \"auto_open\",\n status: \"ok\",\n data: { seat_count: seatIds.length },\n detail: `Opened with ${seatIds.length} seat(s) present`,\n });\n } else {\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"No seats found on body\",\n });\n }\n } catch {\n // Non-fatal: written consent can still proceed without open step\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"Failed to auto-open meeting (non-fatal)\",\n });\n }\n } else {\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"No meeting_id returned\",\n });\n }\n\n return {\n success: true,\n data: { ...result, meeting_id: meetingId || undefined },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n"],"mappings":"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","names":["existsSync","readFileSync","require","existsSync","readFileSync","issuerLegalEntityId"]}
1
+ {"version":3,"sources":["../src/process-transport.ts","../src/env.ts","../src/api-client.ts","../src/reference-tracker.ts","../src/workflows/equity-helpers.ts","../src/workflows/issue-equity.ts","../src/workflows/issue-safe.ts","../src/workflows/written-consent.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve, join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { createRequire } from \"node:module\";\nimport { ensureEnvFile, loadEnvFile } from \"./env.js\";\n\nconst require = createRequire(import.meta.url);\n\n// ── Binary resolution ───────────────────────────────────────────────\n\nlet cachedBinaryPath: string | undefined;\n\nexport function resolveBinaryPath(processUrl: string): string {\n if (cachedBinaryPath !== undefined) return cachedBinaryPath;\n\n const parsed = new URL(processUrl);\n if (parsed.pathname && parsed.pathname !== \"/\") {\n cachedBinaryPath = parsed.pathname;\n return cachedBinaryPath;\n }\n\n const envBin = process.env.CORP_SERVER_BIN;\n if (envBin && existsSync(envBin)) {\n cachedBinaryPath = envBin;\n return cachedBinaryPath;\n }\n\n try {\n const server = require(\"@thecorporation/server\");\n const pkgPath: string | undefined = server.getBinaryPath?.();\n if (pkgPath) {\n cachedBinaryPath = pkgPath;\n return pkgPath;\n }\n } catch {\n // Package not installed\n }\n\n cachedBinaryPath = resolve(\"services/api-rs/target/release/api-rs\");\n return cachedBinaryPath;\n}\n\n// ── Stderr parsing ──────────────────────────────────────────────────\n\nexport function parseStatusFromStderr(stderr: string): number | null {\n const lines = stderr.split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const match = lines[i].match(/^HTTP (\\d+)$/);\n if (match) return parseInt(match[1], 10);\n }\n return null;\n}\n\n// ── Response builder ────────────────────────────────────────────────\n\nconst STATUS_TEXT: Record<number, string> = {\n 200: \"OK\", 201: \"Created\", 204: \"No Content\",\n 400: \"Bad Request\", 401: \"Unauthorized\", 403: \"Forbidden\",\n 404: \"Not Found\", 409: \"Conflict\", 422: \"Unprocessable Entity\",\n 500: \"Internal Server Error\",\n};\n\nexport function buildProcessResponse(status: number, body: string): Response {\n return {\n status,\n ok: status >= 200 && status < 300,\n statusText: STATUS_TEXT[status] ?? String(status),\n headers: new Headers({ \"content-type\": \"application/json\" }),\n json: async () => JSON.parse(body),\n text: async () => body,\n body: null,\n bodyUsed: false,\n redirected: false,\n type: \"basic\" as ResponseType,\n url: \"\",\n clone: () => buildProcessResponse(status, body),\n arrayBuffer: async () => new TextEncoder().encode(body).buffer as ArrayBuffer,\n blob: async () => new Blob([body]),\n formData: async () => { throw new Error(\"not supported\"); },\n bytes: async () => new TextEncoder().encode(body),\n } as Response;\n}\n\n// ── Config reading (direct file access, no cli-ts dependency) ───────\n\nconst CORP_CONFIG_DIR = process.env.CORP_CONFIG_DIR || join(homedir(), \".corp\");\n\nfunction readJsonFileSafe(path: string): Record<string, unknown> | null {\n try {\n if (!existsSync(path)) return null;\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction loadServerSecretsFromAuth(): { jwt_secret: string; secrets_master_key: string; internal_worker_token: string } | null {\n const auth = readJsonFileSafe(join(CORP_CONFIG_DIR, \"auth.json\"));\n if (!auth) return null;\n const ss = auth.server_secrets;\n if (!ss || typeof ss !== \"object\") return null;\n const s = ss as Record<string, unknown>;\n if (typeof s.jwt_secret === \"string\" && typeof s.secrets_master_key === \"string\" && typeof s.internal_worker_token === \"string\") {\n return { jwt_secret: s.jwt_secret, secrets_master_key: s.secrets_master_key, internal_worker_token: s.internal_worker_token };\n }\n return null;\n}\n\nfunction loadDataDirFromConfig(): string | undefined {\n const cfg = readJsonFileSafe(join(CORP_CONFIG_DIR, \"config.json\"));\n if (!cfg) return undefined;\n const dataDir = typeof cfg.data_dir === \"string\" ? cfg.data_dir : undefined;\n return dataDir || undefined;\n}\n\n// ── Env loading ─────────────────────────────────────────────────────\n\nlet envLoaded = false;\n\nfunction ensureEnv(): void {\n if (envLoaded) return;\n\n // Try server_secrets from auth.json first (local mode)\n const secrets = loadServerSecretsFromAuth();\n if (secrets) {\n if (!process.env.JWT_SECRET) process.env.JWT_SECRET = secrets.jwt_secret;\n if (!process.env.SECRETS_MASTER_KEY) process.env.SECRETS_MASTER_KEY = secrets.secrets_master_key;\n if (!process.env.INTERNAL_WORKER_TOKEN) process.env.INTERNAL_WORKER_TOKEN = secrets.internal_worker_token;\n envLoaded = true;\n return;\n }\n\n // Fallback: load from .env file\n const envPath = resolve(process.cwd(), \".env\");\n ensureEnvFile(envPath);\n loadEnvFile(envPath);\n envLoaded = true;\n}\n\n// ── Process request ─────────────────────────────────────────────────\n\nexport interface ProcessRequestOptions {\n dataDir?: string;\n}\n\nexport function processRequest(\n processUrl: string,\n method: string,\n pathWithQuery: string,\n headers: Record<string, string>,\n body?: string,\n options?: ProcessRequestOptions,\n): Response {\n ensureEnv();\n\n const binPath = resolveBinaryPath(processUrl);\n const args = [\"--skip-validation\", \"call\"];\n\n const dataDir = options?.dataDir ?? loadDataDirFromConfig();\n if (dataDir) {\n args.push(\"--data-dir\", dataDir);\n }\n\n args.push(method, pathWithQuery);\n\n for (const [key, value] of Object.entries(headers)) {\n args.push(\"-H\", `${key}: ${value}`);\n }\n\n if (body) {\n args.push(\"--stdin\");\n }\n\n try {\n const stdout = execFileSync(binPath, args, {\n input: body ?? undefined,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n maxBuffer: 10 * 1024 * 1024,\n env: process.env,\n });\n\n return buildProcessResponse(200, stdout.toString(\"utf-8\"));\n } catch (err: unknown) {\n const execErr = err as { status?: number; stdout?: Buffer; stderr?: Buffer; message?: string };\n\n if (execErr.stdout === undefined && execErr.stderr === undefined) {\n throw new Error(\n \"No api-rs binary found. Install @thecorporation/server or set CORP_SERVER_BIN.\\n\" +\n `Attempted: ${binPath}\\n` +\n `Error: ${execErr.message ?? String(err)}`,\n );\n }\n\n const stderr = execErr.stderr?.toString(\"utf-8\") ?? \"\";\n const stdout = execErr.stdout?.toString(\"utf-8\") ?? \"\";\n const status = parseStatusFromStderr(stderr);\n\n if (status !== null) {\n return buildProcessResponse(status, stdout);\n }\n\n // Binary crashed — detect config errors\n const isConfigError = stderr.includes(\"panic\") ||\n stderr.includes(\"INTERNAL_WORKER_TOKEN\") ||\n stderr.includes(\"JWT_SECRET\") ||\n stderr.includes(\"SECRETS_MASTER_KEY\");\n if (isConfigError) {\n throw new Error(\"Server configuration incomplete. Run 'corp setup' to configure local mode.\");\n }\n\n throw new Error(`api-rs process failed:\\n${stderr || stdout || String(err)}`);\n }\n}\n\nexport function resetCache(): void {\n cachedBinaryPath = undefined;\n envLoaded = false;\n}\n","import { readFileSync, writeFileSync, existsSync } from \"node:fs\";\nimport { randomBytes } from \"node:crypto\";\n\nconst ENV_TEMPLATE = `# Corporation API server configuration\n# Generated by: corp serve\n\n# Required — secret for signing JWTs\nJWT_SECRET={{JWT_SECRET}}\n\n# Required — Fernet key for encrypting secrets at rest (base64url, 32 bytes)\nSECRETS_MASTER_KEY={{SECRETS_MASTER_KEY}}\n\n# Required — bearer token for internal worker-to-server auth\nINTERNAL_WORKER_TOKEN={{INTERNAL_WORKER_TOKEN}}\n\n# Server port (default: 8000)\n# PORT=8000\n\n# Data directory for git repos (default: ./data/repos)\n# DATA_DIR=./data/repos\n\n# Redis URL for agent job queue (optional)\n# REDIS_URL=redis://localhost:6379/0\n\n# LLM proxy upstream (default: https://openrouter.ai/api/v1)\n# LLM_UPSTREAM_URL=https://openrouter.ai/api/v1\n\n# PEM-encoded Ed25519 key for signing git commits (optional)\n# COMMIT_SIGNING_KEY=\n\n# Max agent queue depth (default: 1000)\n# MAX_QUEUE_DEPTH=1000\n`;\n\nexport function generateFernetKey(): string {\n // Fernet key = url-safe base64 of 32 random bytes\n return randomBytes(32).toString(\"base64url\") + \"=\";\n}\n\nexport function generateSecret(length = 32): string {\n return randomBytes(length).toString(\"hex\");\n}\n\nexport function loadEnvFile(path: string): void {\n if (!existsSync(path)) return;\n\n const content = readFileSync(path, \"utf-8\");\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const eqIdx = trimmed.indexOf(\"=\");\n if (eqIdx === -1) continue;\n\n const key = trimmed.slice(0, eqIdx).trim();\n const value = trimmed.slice(eqIdx + 1).trim().replace(/^[\"']|[\"']$/g, \"\");\n\n // Don't override vars already set in the environment\n if (!process.env[key]) {\n process.env[key] = value;\n }\n }\n}\n\nexport function ensureEnvFile(envPath: string): void {\n if (existsSync(envPath)) return;\n\n console.log(\"No .env file found. Generating one with dev defaults...\\n\");\n\n const content = ENV_TEMPLATE\n .replace(\"{{JWT_SECRET}}\", generateSecret())\n .replace(\"{{SECRETS_MASTER_KEY}}\", generateFernetKey())\n .replace(\"{{INTERNAL_WORKER_TOKEN}}\", generateSecret());\n\n writeFileSync(envPath, content, \"utf-8\");\n console.log(` Created ${envPath}\\n`);\n}\n","import type {\n AcceptEquityRoundRequest,\n ApiRecord,\n ApplyEquityRoundTermsRequest,\n BoardApproveEquityRoundRequest,\n CreateEquityRoundRequest,\n CreateExecutionIntentRequest,\n EquityRoundResponse,\n ExecuteRoundConversionRequest,\n IntentResponse,\n PreviewRoundConversionRequest,\n} from \"./types.js\";\nimport type {\n WorkspaceStatusResponse,\n FormationResponse,\n FormationWithCapTableResponse,\n PendingFormationResponse,\n AddFounderResponse,\n GovernanceBodyResponse,\n GovernanceSeatResponse,\n MeetingResponse,\n ResolutionResponse,\n AgendaItemResponse,\n VoteResponse,\n WrittenConsentResponse,\n ObligationResponse,\n DocumentResponse,\n DigestSummary,\n DigestTriggerResponse,\n NextStepsResponse,\n} from \"./api-schemas.js\";\nimport { processRequest } from \"./process-transport.js\";\n\nexport class SessionExpiredError extends Error {\n constructor(detail?: string) {\n super(detail || \"Your API key is no longer valid. Run 'corp setup' to re-authenticate.\");\n this.name = \"SessionExpiredError\";\n }\n}\n\nconst MAX_ERROR_DETAIL_LEN = 500;\n\nfunction sanitizeErrorDetail(value: string): string {\n const sanitized = value\n .replace(/[\\u0000-\\u001f\\u007f-\\u009f\\u001b]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!sanitized) {\n return \"request failed\";\n }\n return sanitized.length > MAX_ERROR_DETAIL_LEN\n ? `${sanitized.slice(0, MAX_ERROR_DETAIL_LEN)}...`\n : sanitized;\n}\n\nfunction pathSegment(value: string): string {\n return encodeURIComponent(String(value));\n}\n\nasync function extractErrorMessage(resp: Response): Promise<string> {\n try {\n const text = await resp.text();\n try {\n const json = JSON.parse(text);\n const val = json.error || json.message || json.detail;\n if (val == null) return sanitizeErrorDetail(text);\n return sanitizeErrorDetail(typeof val === \"string\" ? val : JSON.stringify(val));\n } catch {\n return sanitizeErrorDetail(text);\n }\n } catch {\n return sanitizeErrorDetail(resp.statusText);\n }\n}\n\nexport async function provisionWorkspace(\n apiUrl: string,\n name?: string\n): Promise<ApiRecord> {\n const url = `${apiUrl.replace(/\\/+$/, \"\")}/v1/workspaces/provision`;\n const body: Record<string, string> = {};\n if (name) body.name = name;\n const resp = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`Provision failed (${prefix}): ${detail}`);\n }\n return resp.json() as Promise<ApiRecord>;\n}\n\nexport class CorpAPIClient {\n readonly apiUrl: string;\n readonly apiKey: string;\n readonly workspaceId: string;\n\n constructor(apiUrl: string, apiKey: string, workspaceId: string) {\n this.apiUrl = apiUrl.startsWith(\"process://\") ? apiUrl : apiUrl.replace(/\\/+$/, \"\");\n this.apiKey = apiKey;\n this.workspaceId = workspaceId;\n }\n\n private headers(): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n }\n\n private async request(method: string, path: string, body?: unknown, params?: Record<string, string>): Promise<Response> {\n let fullPath = path;\n if (params) {\n const qs = new URLSearchParams(params).toString();\n if (qs) fullPath += `?${qs}`;\n }\n\n if (this.apiUrl.startsWith(\"process://\")) {\n const hdrs = this.headers();\n const bodyStr = body !== undefined ? JSON.stringify(body) : undefined;\n return processRequest(this.apiUrl, method, fullPath, hdrs, bodyStr);\n }\n\n const url = `${this.apiUrl}${fullPath}`;\n const opts: RequestInit = { method, headers: this.headers() };\n if (body !== undefined) opts.body = JSON.stringify(body);\n return fetch(url, opts);\n }\n\n private async throwIfError(resp: Response): Promise<void> {\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n if (resp.status === 401) throw new SessionExpiredError(detail);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`${prefix}: ${detail}`);\n }\n }\n\n private async get(path: string, params?: Record<string, string>): Promise<unknown> {\n const resp = await this.request(\"GET\", path, undefined, params);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async post(path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(\"POST\", path, body);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async postWithParams(path: string, body: unknown, params: Record<string, string>): Promise<unknown> {\n const resp = await this.request(\"POST\", path, body, params);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async patch(path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(\"PATCH\", path, body);\n await this.throwIfError(resp);\n return resp.json();\n }\n\n private async del(path: string): Promise<void> {\n const resp = await this.request(\"DELETE\", path);\n await this.throwIfError(resp);\n }\n\n /** Public generic GET for declarative/registry-driven commands. */\n async fetchJSON(path: string, params?: Record<string, string>): Promise<unknown> {\n return this.get(path, params);\n }\n\n /** Public generic request for declarative/registry-driven write commands. */\n async submitJSON(method: string, path: string, body?: unknown): Promise<unknown> {\n const resp = await this.request(method, path, body);\n await this.throwIfError(resp);\n const text = await resp.text();\n if (!text) return {};\n return JSON.parse(text);\n }\n\n // --- Workspace ---\n getStatus() { return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/status`) as Promise<WorkspaceStatusResponse>; }\n\n // --- Obligations ---\n getObligations(tier?: string) {\n const params: Record<string, string> = {};\n if (tier) params.tier = tier;\n return this.get(\"/v1/obligations/summary\", params) as Promise<ApiRecord>;\n }\n\n // --- Digests ---\n listDigests() { return this.get(\"/v1/digests\") as Promise<DigestSummary[]>; }\n triggerDigest() { return this.post(\"/v1/digests/trigger\") as Promise<DigestTriggerResponse>; }\n getDigest(key: string) { return this.get(`/v1/digests/${pathSegment(key)}`) as Promise<DigestSummary>; }\n\n // --- References ---\n syncReferences(kind: string, items: Array<{ resource_id: string; label: string }>, entityId?: string) {\n const body: ApiRecord = { kind, items };\n if (entityId) body.entity_id = entityId;\n return this.post(\"/v1/references/sync\", body) as Promise<{ references: ApiRecord[] }>;\n }\n\n // --- Entities ---\n listEntities() { return this.get(\"/v1/entities\") as Promise<ApiRecord[]>; }\n\n // --- Contacts ---\n listContacts(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/contacts`) as Promise<ApiRecord[]>; }\n getContact(id: string, entityId: string) { return this.get(`/v1/contacts/${pathSegment(id)}`, { entity_id: entityId }) as Promise<ApiRecord>; }\n getContactProfile(id: string, entityId: string) { return this.get(`/v1/contacts/${pathSegment(id)}/profile`, { entity_id: entityId }) as Promise<ApiRecord>; }\n createContact(data: ApiRecord) { return this.post(\"/v1/contacts\", data) as Promise<ApiRecord>; }\n updateContact(id: string, data: ApiRecord) { return this.patch(`/v1/contacts/${pathSegment(id)}`, data) as Promise<ApiRecord>; }\n getNotificationPrefs(contactId: string) { return this.get(`/v1/contacts/${pathSegment(contactId)}/notification-prefs`) as Promise<ApiRecord>; }\n updateNotificationPrefs(contactId: string, prefs: ApiRecord) { return this.patch(`/v1/contacts/${pathSegment(contactId)}/notification-prefs`, prefs) as Promise<ApiRecord>; }\n\n // --- Cap Table ---\n getCapTable(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/cap-table`) as Promise<ApiRecord>; }\n async getSafeNotes(entityId: string): Promise<ApiRecord[]> {\n return this.get(`/v1/entities/${pathSegment(entityId)}/safe-notes`) as Promise<ApiRecord[]>;\n }\n createSafeNote(data: ApiRecord) { return this.post(\"/v1/safe-notes\", data) as Promise<ApiRecord>; }\n listShareTransfers(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/share-transfers`) as Promise<ApiRecord[]>; }\n getShareTransfers(entityId: string) { return this.listShareTransfers(entityId); }\n getValuations(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/valuations`) as Promise<ApiRecord[]>; }\n getCurrent409a(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/current-409a`) as Promise<ApiRecord>; }\n createValuation(data: ApiRecord) { return this.post(\"/v1/valuations\", data) as Promise<ApiRecord>; }\n createInstrument(data: ApiRecord) { return this.post(\"/v1/equity/instruments\", data) as Promise<ApiRecord>; }\n submitValuationForApproval(valuationId: string, entityId: string) {\n return this.post(`/v1/valuations/${pathSegment(valuationId)}/submit-for-approval`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n approveValuation(valuationId: string, entityId: string, resolutionId?: string) {\n const body: ApiRecord = { entity_id: entityId };\n if (resolutionId) body.resolution_id = resolutionId;\n return this.post(`/v1/valuations/${pathSegment(valuationId)}/approve`, body) as Promise<ApiRecord>;\n }\n transferShares(data: ApiRecord) { return this.post(\"/v1/equity/transfer-workflows\", data) as Promise<ApiRecord>; }\n calculateDistribution(data: ApiRecord) { return this.post(\"/v1/distributions\", data) as Promise<ApiRecord>; }\n\n // --- Equity rounds (v1) ---\n createEquityRound(data: CreateEquityRoundRequest) {\n return this.post(\"/v1/equity/rounds\", data) as Promise<EquityRoundResponse>;\n }\n applyEquityRoundTerms(roundId: string, data: ApplyEquityRoundTermsRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/apply-terms`, data) as Promise<ApiRecord>;\n }\n boardApproveEquityRound(roundId: string, data: BoardApproveEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/board-approve`, data) as Promise<EquityRoundResponse>;\n }\n acceptEquityRound(roundId: string, data: AcceptEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/accept`, data) as Promise<EquityRoundResponse>;\n }\n previewRoundConversion(data: PreviewRoundConversionRequest) {\n return this.post(\"/v1/equity/conversions/preview\", data) as Promise<ApiRecord>;\n }\n executeRoundConversion(data: ExecuteRoundConversionRequest) {\n return this.post(\"/v1/equity/conversions/execute\", data) as Promise<ApiRecord>;\n }\n\n // --- Staged equity rounds ---\n listEquityRounds(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/equity-rounds`) as Promise<ApiRecord[]>; }\n startEquityRound(data: ApiRecord) { return this.post(\"/v1/equity/rounds/staged\", data) as Promise<ApiRecord>; }\n addRoundSecurity(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/securities`, data) as Promise<ApiRecord>; }\n issueRound(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${pathSegment(roundId)}/issue`, data) as Promise<ApiRecord>; }\n\n // --- Intent lifecycle helpers ---\n createExecutionIntent(data: CreateExecutionIntentRequest) {\n return this.post(\"/v1/execution/intents\", data) as Promise<IntentResponse>;\n }\n evaluateIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${pathSegment(intentId)}/evaluate`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n authorizeIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${pathSegment(intentId)}/authorize`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n\n // --- Governance ---\n listGovernanceBodies(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/governance-bodies`) as Promise<GovernanceBodyResponse[]>; }\n getGovernanceSeats(bodyId: string, entityId: string) {\n return this.get(`/v1/governance-bodies/${pathSegment(bodyId)}/seats`, { entity_id: entityId }) as Promise<GovernanceSeatResponse[]>;\n }\n listMeetings(bodyId: string, entityId: string) {\n return this.get(`/v1/governance-bodies/${pathSegment(bodyId)}/meetings`, { entity_id: entityId }) as Promise<MeetingResponse[]>;\n }\n getMeetingResolutions(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/resolutions`, { entity_id: entityId }) as Promise<ResolutionResponse[]>;\n }\n scheduleMeeting(data: ApiRecord) { return this.post(\"/v1/meetings\", data) as Promise<MeetingResponse>; }\n conveneMeeting(meetingId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/convene`, data, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n castVote(entityId: string, meetingId: string, itemId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/vote`, data, { entity_id: entityId }) as Promise<VoteResponse>;\n }\n sendNotice(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/notice`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n adjournMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/adjourn`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n reopenMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/reopen`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n cancelMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/cancel`, {}, { entity_id: entityId }) as Promise<MeetingResponse>;\n }\n finalizeAgendaItem(meetingId: string, itemId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/finalize`, data) as Promise<AgendaItemResponse>;\n }\n computeResolution(meetingId: string, itemId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/resolution`, data, { entity_id: entityId }) as Promise<ResolutionResponse>;\n }\n attachResolutionDocument(meetingId: string, resolutionId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${pathSegment(meetingId)}/resolutions/${pathSegment(resolutionId)}/attach-document`, data) as Promise<ResolutionResponse>;\n }\n writtenConsent(data: ApiRecord) {\n return this.post(\"/v1/meetings/written-consent\", data) as Promise<WrittenConsentResponse>;\n }\n getGovernanceMode(entityId: string) {\n return this.get(\"/v1/governance/mode\", { entity_id: entityId }) as Promise<ApiRecord>;\n }\n setGovernanceMode(data: ApiRecord) {\n return this.post(\"/v1/governance/mode\", data) as Promise<ApiRecord>;\n }\n resignSeat(seatId: string, entityId: string) {\n return this.post(`/v1/governance-seats/${pathSegment(seatId)}/resign`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n createGovernanceIncident(data: ApiRecord) {\n return this.post(\"/v1/governance/incidents\", data) as Promise<ApiRecord>;\n }\n listGovernanceIncidents(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/governance/incidents`) as Promise<ApiRecord[]>;\n }\n resolveGovernanceIncident(incidentId: string, data: ApiRecord) {\n return this.post(`/v1/governance/incidents/${pathSegment(incidentId)}/resolve`, data) as Promise<ApiRecord>;\n }\n getGovernanceProfile(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/governance/profile`) as Promise<ApiRecord>;\n }\n listAgendaItems(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/agenda-items`, { entity_id: entityId }) as Promise<AgendaItemResponse[]>;\n }\n listVotes(meetingId: string, itemId: string, entityId: string) {\n return this.get(`/v1/meetings/${pathSegment(meetingId)}/agenda-items/${pathSegment(itemId)}/votes`, { entity_id: entityId }) as Promise<VoteResponse[]>;\n }\n\n // --- Documents ---\n getEntityDocuments(entityId: string) { return this.get(`/v1/formations/${pathSegment(entityId)}/documents`) as Promise<DocumentResponse[]>; }\n getDocument(documentId: string, entityId: string) {\n return this.get(`/v1/documents/${pathSegment(documentId)}`, { entity_id: entityId }) as Promise<DocumentResponse>;\n }\n signDocument(documentId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/documents/${pathSegment(documentId)}/sign`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n generateContract(data: ApiRecord) { return this.post(\"/v1/contracts\", data) as Promise<ApiRecord>; }\n getSigningLink(documentId: string, entityId: string) {\n return this.get(`/v1/sign/${pathSegment(documentId)}`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n async validatePreviewPdf(entityId: string, documentId: string): Promise<ApiRecord> {\n const resp = await this.request(\"GET\", \"/v1/documents/preview/pdf/validate\", undefined, { entity_id: entityId, document_id: documentId });\n await this.throwIfError(resp);\n return { entity_id: entityId, document_id: documentId };\n }\n getPreviewPdfUrl(entityId: string, documentId: string): string {\n if (this.apiUrl.startsWith(\"process://\")) {\n throw new Error(\n \"PDF preview is not available in local process transport mode.\\n\" +\n \" Use cloud mode (npx corp setup) or start a local HTTP server (npx corp serve) instead.\",\n );\n }\n const qs = new URLSearchParams({ entity_id: entityId, document_id: documentId }).toString();\n return `${this.apiUrl}/v1/documents/preview/pdf?${qs}`;\n }\n\n // --- Finance ---\n listInvoices(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/invoices`) as Promise<ApiRecord[]>; }\n listBankAccounts(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/bank-accounts`) as Promise<ApiRecord[]>; }\n listPayments(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/payments`) as Promise<ApiRecord[]>; }\n listPayrollRuns(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/payroll-runs`) as Promise<ApiRecord[]>; }\n listDistributions(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/distributions`) as Promise<ApiRecord[]>; }\n listReconciliations(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/reconciliations`) as Promise<ApiRecord[]>; }\n createInvoice(data: ApiRecord) { return this.post(\"/v1/treasury/invoices\", data) as Promise<ApiRecord>; }\n runPayroll(data: ApiRecord) { return this.post(\"/v1/payroll/runs\", data) as Promise<ApiRecord>; }\n submitPayment(data: ApiRecord) { return this.post(\"/v1/payments\", data) as Promise<ApiRecord>; }\n openBankAccount(data: ApiRecord) { return this.post(\"/v1/treasury/bank-accounts\", data) as Promise<ApiRecord>; }\n activateBankAccount(bankAccountId: string, entityId: string) { return this.postWithParams(`/v1/bank-accounts/${pathSegment(bankAccountId)}/activate`, {}, { entity_id: entityId }) as Promise<ApiRecord>; }\n classifyContractor(data: ApiRecord) { return this.post(\"/v1/contractors/classify\", data) as Promise<ApiRecord>; }\n reconcileLedger(data: ApiRecord) { return this.post(\"/v1/ledger/reconcile\", data) as Promise<ApiRecord>; }\n getFinancialStatements(entityId: string, params?: Record<string, string>) {\n return this.get(\"/v1/treasury/financial-statements\", { entity_id: entityId, ...(params ?? {}) }) as Promise<ApiRecord>;\n }\n\n // --- Equity analytics ---\n getDilutionPreview(entityId: string, roundId: string) {\n return this.get(\"/v1/equity/dilution/preview\", { entity_id: entityId, round_id: roundId }) as Promise<ApiRecord>;\n }\n getControlMap(entityId: string, rootEntityId: string) {\n return this.get(\"/v1/equity/control-map\", { entity_id: entityId, root_entity_id: rootEntityId }) as Promise<ApiRecord>;\n }\n\n // --- Tax ---\n listTaxFilings(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/tax-filings`) as Promise<ApiRecord[]>; }\n listDeadlines(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/deadlines`) as Promise<ApiRecord[]>; }\n listContractorClassifications(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/contractor-classifications`) as Promise<ApiRecord[]>;\n }\n fileTaxDocument(data: ApiRecord) { return this.post(\"/v1/tax/filings\", data) as Promise<ApiRecord>; }\n trackDeadline(data: ApiRecord) { return this.post(\"/v1/deadlines\", data) as Promise<ApiRecord>; }\n\n // --- Billing ---\n getBillingStatus() { return this.get(\"/v1/billing/status\", { workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n getBillingPlans() {\n return (this.get(\"/v1/billing/plans\") as Promise<unknown>).then((data) => {\n if (typeof data === \"object\" && data !== null && \"plans\" in data) {\n return (data as { plans: ApiRecord[] }).plans;\n }\n return data as ApiRecord[];\n });\n }\n createBillingPortal() { return this.post(\"/v1/billing/portal\", { workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n createBillingCheckout(planId: string, entityId?: string) {\n const body: ApiRecord = { plan_id: planId };\n if (entityId) body.entity_id = entityId;\n return this.post(\"/v1/billing/checkout\", body) as Promise<ApiRecord>;\n }\n\n // --- Formations ---\n getFormation(id: string) { return this.get(`/v1/formations/${pathSegment(id)}`) as Promise<FormationResponse>; }\n getFormationDocuments(id: string) { return this.get(`/v1/formations/${pathSegment(id)}/documents`) as Promise<DocumentResponse[]>; }\n createFormation(data: ApiRecord) { return this.post(\"/v1/formations\", data) as Promise<FormationResponse>; }\n createFormationWithCapTable(data: ApiRecord) { return this.post(\"/v1/formations/with-cap-table\", data) as Promise<FormationWithCapTableResponse>; }\n createPendingEntity(data: ApiRecord) { return this.post(\"/v1/formations/pending\", data) as Promise<PendingFormationResponse>; }\n addFounder(entityId: string, data: ApiRecord) { return this.post(`/v1/formations/${pathSegment(entityId)}/founders`, data) as Promise<AddFounderResponse>; }\n finalizeFormation(entityId: string, data: ApiRecord = {}) { return this.post(`/v1/formations/${pathSegment(entityId)}/finalize`, data) as Promise<FormationWithCapTableResponse>; }\n markFormationDocumentsSigned(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/mark-documents-signed`) as Promise<ApiRecord>;\n }\n getFormationGates(entityId: string) {\n return this.get(`/v1/formations/${pathSegment(entityId)}/gates`) as Promise<ApiRecord>;\n }\n recordFilingAttestation(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/filing-attestation`, data) as Promise<ApiRecord>;\n }\n addRegisteredAgentConsentEvidence(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/registered-agent-consent-evidence`, data) as Promise<ApiRecord>;\n }\n submitFiling(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/submit-filing`) as Promise<ApiRecord>;\n }\n confirmFiling(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/filing-confirmation`, data) as Promise<ApiRecord>;\n }\n applyEin(entityId: string) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/apply-ein`) as Promise<ApiRecord>;\n }\n confirmEin(entityId: string, data: ApiRecord) {\n return this.post(`/v1/formations/${pathSegment(entityId)}/ein-confirmation`, data) as Promise<ApiRecord>;\n }\n\n // --- Human obligations ---\n getHumanObligations() { return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/human-obligations`) as Promise<ObligationResponse[]>; }\n getSignerToken(obligationId: string) { return this.post(`/v1/human-obligations/${pathSegment(obligationId)}/signer-token`) as Promise<ApiRecord>; }\n\n // --- Next Steps ---\n getEntityNextSteps(entityId: string) {\n return this.get(`/v1/entities/${pathSegment(entityId)}/next-steps`) as Promise<NextStepsResponse>;\n }\n\n getWorkspaceNextSteps() {\n return this.get(`/v1/workspaces/${pathSegment(this.workspaceId)}/next-steps`) as Promise<NextStepsResponse>;\n }\n\n // --- Demo ---\n seedDemo(data: ApiRecord) { return this.post(\"/v1/demo/seed\", data) as Promise<ApiRecord>; }\n\n // --- Entities writes ---\n convertEntity(entityId: string, data: ApiRecord) {\n const body: ApiRecord = {\n target_type: data.target_type ?? data.new_entity_type,\n };\n const jurisdiction = data.jurisdiction ?? data.new_jurisdiction;\n if (jurisdiction) body.jurisdiction = jurisdiction;\n return this.post(`/v1/entities/${pathSegment(entityId)}/convert`, body) as Promise<ApiRecord>;\n }\n dissolveEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/dissolve`, data) as Promise<ApiRecord>; }\n\n // --- Agents ---\n listAgents() { return this.get(\"/v1/agents\") as Promise<ApiRecord[]>; }\n getAgent(id: string) { return this.get(`/v1/agents/${pathSegment(id)}/resolved`) as Promise<ApiRecord>; }\n createAgent(data: ApiRecord) { return this.post(\"/v1/agents\", data) as Promise<ApiRecord>; }\n updateAgent(id: string, data: ApiRecord) { return this.patch(`/v1/agents/${pathSegment(id)}`, data) as Promise<ApiRecord>; }\n deleteAgent(id: string) { return this.patch(`/v1/agents/${pathSegment(id)}`, { status: \"disabled\" }) as Promise<ApiRecord>; }\n sendAgentMessage(id: string, message: string) { return this.post(`/v1/agents/${pathSegment(id)}/messages`, { message }) as Promise<ApiRecord>; }\n addAgentSkill(id: string, data: ApiRecord) { return this.post(`/v1/agents/${pathSegment(id)}/skills`, data) as Promise<ApiRecord>; }\n listSupportedModels() { return this.get(\"/v1/models\") as Promise<ApiRecord[]>; }\n async getAgentExecution(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}`) as Promise<ApiRecord>;\n }\n async getAgentExecutionResult(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/result`) as Promise<ApiRecord>;\n }\n async getAgentExecutionLogs(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.get(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/logs`) as Promise<ApiRecord>;\n }\n async killAgentExecution(agentId: string, executionId: string): Promise<ApiRecord> {\n return this.post(`/v1/agents/${pathSegment(agentId)}/executions/${pathSegment(executionId)}/kill`, {}) as Promise<ApiRecord>;\n }\n\n // --- Governance bodies ---\n createGovernanceBody(data: ApiRecord) { return this.post(\"/v1/governance-bodies\", data) as Promise<ApiRecord>; }\n createGovernanceSeat(bodyId: string, entityId: string, data: ApiRecord) { return this.postWithParams(`/v1/governance-bodies/${pathSegment(bodyId)}/seats`, data, { entity_id: entityId }) as Promise<ApiRecord>; }\n\n // --- Work Items ---\n listWorkItems(entityId: string, params?: Record<string, string>) { return this.get(`/v1/entities/${pathSegment(entityId)}/work-items`, params) as Promise<ApiRecord[]>; }\n getWorkItem(entityId: string, workItemId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}`) as Promise<ApiRecord>; }\n createWorkItem(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items`, data) as Promise<ApiRecord>; }\n claimWorkItem(entityId: string, workItemId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/claim`, data) as Promise<ApiRecord>; }\n completeWorkItem(entityId: string, workItemId: string, data: ApiRecord) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/complete`, data) as Promise<ApiRecord>; }\n releaseWorkItem(entityId: string, workItemId: string) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/release`, {}) as Promise<ApiRecord>; }\n cancelWorkItem(entityId: string, workItemId: string) { return this.post(`/v1/entities/${pathSegment(entityId)}/work-items/${pathSegment(workItemId)}/cancel`, {}) as Promise<ApiRecord>; }\n\n // --- API Keys ---\n listApiKeys() { return this.get(\"/v1/api-keys\", { workspace_id: this.workspaceId }) as Promise<ApiRecord[]>; }\n async createApiKey(data: ApiRecord): Promise<ApiRecord> {\n return this.post(\"/v1/api-keys\", data) as Promise<ApiRecord>;\n }\n async revokeApiKey(keyId: string): Promise<void> {\n return this.del(`/v1/api-keys/${pathSegment(keyId)}`);\n }\n async rotateApiKey(keyId: string): Promise<ApiRecord> {\n return this.post(`/v1/api-keys/${pathSegment(keyId)}/rotate`, {}) as Promise<ApiRecord>;\n }\n\n // --- Obligations ---\n assignObligation(obligationId: string, contactId: string) {\n return this.patch(`/v1/obligations/${pathSegment(obligationId)}/assign`, { contact_id: contactId }) as Promise<ApiRecord>;\n }\n\n // --- Config ---\n getConfig() { return this.get(\"/v1/config\") as Promise<ApiRecord>; }\n\n // --- Services ---\n listServiceCatalog() { return this.get(\"/v1/services/catalog\") as Promise<ApiRecord[]>; }\n createServiceRequest(data: ApiRecord) { return this.post(\"/v1/services/requests\", data) as Promise<ApiRecord>; }\n getServiceRequest(id: string, entityId: string) { return this.get(`/v1/services/requests/${pathSegment(id)}`, { entity_id: entityId }) as Promise<ApiRecord>; }\n listServiceRequests(entityId: string) { return this.get(`/v1/entities/${pathSegment(entityId)}/service-requests`) as Promise<ApiRecord[]>; }\n beginServiceCheckout(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/checkout`, data) as Promise<ApiRecord>; }\n fulfillServiceRequest(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/fulfill`, data) as Promise<ApiRecord>; }\n cancelServiceRequest(id: string, data: ApiRecord) { return this.post(`/v1/services/requests/${pathSegment(id)}/cancel`, data) as Promise<ApiRecord>; }\n\n // --- Feedback ---\n submitFeedback(message: string, category?: string, email?: string) {\n return this.post(\"/v1/feedback\", { message, category, email }) as Promise<{ feedback_id: string; submitted_at: string }>;\n }\n\n // --- Link/Claim ---\n async createLink(externalId: string, provider: string): Promise<ApiRecord> {\n const resp = await this.request(\"POST\", \"/v1/workspaces/link\", { external_id: externalId, provider });\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n if (resp.status === 401) throw new SessionExpiredError(detail);\n const prefix = resp.status >= 500\n ? \"Server error\"\n : resp.status === 404\n ? \"Not found\"\n : resp.status === 422\n ? \"Validation error\"\n : `HTTP ${resp.status}`;\n throw new Error(`${prefix}: ${detail}`);\n }\n return resp.json() as Promise<ApiRecord>;\n }\n}\n","/**\n * Browser-compatible reference matching and tracking core.\n *\n * Pure functions for matching, ranking, and describing resource references,\n * plus the pluggable ReferenceTracker class that works in any JS runtime.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ResourceKind =\n | \"entity\"\n | \"contact\"\n | \"share_transfer\"\n | \"invoice\"\n | \"bank_account\"\n | \"payment\"\n | \"payroll_run\"\n | \"distribution\"\n | \"reconciliation\"\n | \"tax_filing\"\n | \"deadline\"\n | \"classification\"\n | \"body\"\n | \"meeting\"\n | \"seat\"\n | \"agenda_item\"\n | \"resolution\"\n | \"document\"\n | \"work_item\"\n | \"agent\"\n | \"valuation\"\n | \"safe_note\"\n | \"instrument\"\n | \"share_class\"\n | \"round\"\n | \"service_request\";\n\nexport type MatchRecord = {\n id: string;\n label: string;\n tokens: Set<string>;\n raw: Record<string, unknown>;\n};\n\nexport type ReferenceMatch = {\n kind: ResourceKind;\n id: string;\n short_id: string;\n label: string;\n alias?: string;\n raw: Record<string, unknown>;\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const RESOURCE_KINDS = [\n \"entity\",\n \"contact\",\n \"share_transfer\",\n \"invoice\",\n \"bank_account\",\n \"payment\",\n \"payroll_run\",\n \"distribution\",\n \"reconciliation\",\n \"tax_filing\",\n \"deadline\",\n \"classification\",\n \"body\",\n \"meeting\",\n \"seat\",\n \"agenda_item\",\n \"resolution\",\n \"document\",\n \"work_item\",\n \"agent\",\n \"valuation\",\n \"safe_note\",\n \"instrument\",\n \"share_class\",\n \"round\",\n \"service_request\",\n] as const satisfies readonly ResourceKind[];\n\nconst VALID_RESOURCE_KINDS = new Set<ResourceKind>(RESOURCE_KINDS);\nconst MAX_REFERENCE_INPUT_LEN = 256;\n\n// ---------------------------------------------------------------------------\n// Pure helpers\n// ---------------------------------------------------------------------------\n\nexport function normalize(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function validateReferenceInput(\n value: string,\n field: string,\n options: { allowEmpty?: boolean } = {},\n): string {\n const trimmed = value.trim();\n if (!options.allowEmpty && trimmed.length === 0) {\n throw new Error(`${field} cannot be empty.`);\n }\n if (trimmed.length > MAX_REFERENCE_INPUT_LEN) {\n throw new Error(`${field} must be at most ${MAX_REFERENCE_INPUT_LEN} characters.`);\n }\n return trimmed;\n}\n\nexport function shortId(value: string | undefined): string {\n return String(value ?? \"\").slice(0, 8);\n}\n\nexport function slugify(value: string | undefined): string {\n return String(value ?? \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nexport function isOpaqueUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value.trim(),\n );\n}\n\nexport function isShortIdCandidate(value: string): boolean {\n const trimmed = value.trim();\n return /^[0-9a-f-]{4,}$/i.test(trimmed) || /^[a-z]+_[a-z0-9_-]{3,}$/i.test(trimmed);\n}\n\nexport function parseLastReference(value: string): { isLast: boolean; kind?: ResourceKind } {\n const trimmed = validateReferenceInput(value, \"reference\", { allowEmpty: false }).toLowerCase();\n if (trimmed === \"_\" || trimmed === \"@last\") {\n return { isLast: true };\n }\n if (trimmed.startsWith(\"@last:\")) {\n const kind = trimmed.slice(6);\n if (!VALID_RESOURCE_KINDS.has(kind as ResourceKind)) {\n throw new Error(`Unknown reference kind: ${kind}`);\n }\n return { isLast: true, kind: kind as ResourceKind };\n }\n return { isLast: false };\n}\n\nexport function uniqueStrings(values: Array<string | undefined | null>): Set<string> {\n const out = new Set<string>();\n for (const value of values) {\n if (!value) continue;\n const trimmed = value.trim();\n if (!trimmed) continue;\n out.add(normalize(trimmed));\n const slug = slugify(trimmed);\n if (slug) out.add(slug);\n }\n return out;\n}\n\nexport function kindLabel(kind: ResourceKind): string {\n return kind.replaceAll(\"_\", \" \");\n}\n\nexport function isEntityScopedKind(kind: ResourceKind): boolean {\n return kind !== \"entity\" && kind !== \"agent\";\n}\n\nexport function extractId(record: Record<string, unknown>, fields: string[]): string | undefined {\n for (const field of fields) {\n const value = record[field];\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nexport function isValidResourceKind(kind: string): kind is ResourceKind {\n return VALID_RESOURCE_KINDS.has(kind as ResourceKind);\n}\n\n// ---------------------------------------------------------------------------\n// describeReferenceRecord — extract id / label / tokens from a raw record\n// ---------------------------------------------------------------------------\n\nexport function describeReferenceRecord(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): MatchRecord | null {\n const specs: Record<ResourceKind, { idFields: string[]; labelFields: string[] }> = {\n entity: { idFields: [\"entity_id\", \"id\"], labelFields: [\"legal_name\", \"name\"] },\n contact: { idFields: [\"contact_id\", \"id\"], labelFields: [\"name\", \"email\"] },\n share_transfer: {\n idFields: [\"transfer_id\", \"id\"],\n labelFields: [\"from_holder\", \"to_holder\", \"transfer_type\", \"status\"],\n },\n invoice: {\n idFields: [\"invoice_id\", \"id\"],\n labelFields: [\"customer_name\", \"description\", \"due_date\"],\n },\n bank_account: {\n idFields: [\"bank_account_id\", \"account_id\", \"id\"],\n labelFields: [\"bank_name\", \"account_type\"],\n },\n payment: {\n idFields: [\"payment_id\", \"id\"],\n labelFields: [\"recipient\", \"description\", \"payment_method\"],\n },\n payroll_run: {\n idFields: [\"payroll_run_id\", \"id\"],\n labelFields: [\"pay_period_start\", \"pay_period_end\"],\n },\n distribution: {\n idFields: [\"distribution_id\", \"id\"],\n labelFields: [\"description\", \"distribution_type\"],\n },\n reconciliation: {\n idFields: [\"reconciliation_id\", \"id\"],\n labelFields: [\"as_of_date\", \"status\"],\n },\n tax_filing: {\n idFields: [\"filing_id\", \"id\"],\n labelFields: [\"document_type\", \"tax_year\"],\n },\n deadline: {\n idFields: [\"deadline_id\", \"id\"],\n labelFields: [\"deadline_type\", \"description\", \"due_date\"],\n },\n classification: {\n idFields: [\"classification_id\", \"id\"],\n labelFields: [\"contractor_name\", \"state\", \"risk_level\"],\n },\n body: { idFields: [\"body_id\", \"id\"], labelFields: [\"name\"] },\n meeting: { idFields: [\"meeting_id\", \"id\"], labelFields: [\"title\", \"name\"] },\n seat: {\n idFields: [\"seat_id\", \"id\"],\n labelFields: [\"seat_name\", \"title\", \"holder_name\", \"holder\", \"holder_email\"],\n },\n agenda_item: { idFields: [\"agenda_item_id\", \"item_id\", \"id\"], labelFields: [\"title\"] },\n resolution: { idFields: [\"resolution_id\", \"id\"], labelFields: [\"title\"] },\n document: { idFields: [\"document_id\", \"id\"], labelFields: [\"title\", \"name\"] },\n work_item: { idFields: [\"work_item_id\", \"id\"], labelFields: [\"title\"] },\n agent: { idFields: [\"agent_id\", \"id\"], labelFields: [\"name\"] },\n valuation: {\n idFields: [\"valuation_id\", \"id\"],\n labelFields: [\"valuation_type\", \"effective_date\", \"date\"],\n },\n safe_note: {\n idFields: [\"safe_note_id\", \"safe_id\", \"id\"],\n labelFields: [\"investor_name\", \"investor\", \"safe_type\"],\n },\n instrument: { idFields: [\"instrument_id\", \"id\"], labelFields: [\"symbol\", \"kind\", \"name\"] },\n share_class: {\n idFields: [\"share_class_id\", \"id\"],\n labelFields: [\"class_code\", \"name\", \"share_class\"],\n },\n round: { idFields: [\"round_id\", \"equity_round_id\", \"id\"], labelFields: [\"name\"] },\n service_request: {\n idFields: [\"request_id\", \"service_request_id\", \"id\"],\n labelFields: [\"service_slug\", \"status\"],\n },\n };\n const spec = specs[kind];\n const id = extractId(record, spec.idFields);\n if (!id) {\n return null;\n }\n const labels = spec.labelFields\n .map((field) => record[field])\n .filter((value): value is string => typeof value === \"string\" && value.trim().length > 0);\n const persistedHandle =\n typeof record.handle === \"string\" && record.handle.trim().length > 0\n ? record.handle.trim()\n : undefined;\n let label = labels[0] ?? id;\n if (kind === \"share_transfer\") {\n const fromHolder = typeof record.from_holder === \"string\" ? record.from_holder.trim() : \"\";\n const toHolder = typeof record.to_holder === \"string\" ? record.to_holder.trim() : \"\";\n const transferType =\n typeof record.transfer_type === \"string\" ? record.transfer_type.trim() : \"\";\n const composite = [\n fromHolder && toHolder ? `${fromHolder}-to-${toHolder}` : \"\",\n transferType,\n ]\n .filter(Boolean)\n .join(\"-\");\n if (composite) {\n label = composite;\n }\n }\n return {\n id,\n label,\n tokens: uniqueStrings([id, persistedHandle, ...labels]),\n raw: record,\n };\n}\n\n// ---------------------------------------------------------------------------\n// getReferenceId / getReferenceLabel / getReferenceAlias\n// ---------------------------------------------------------------------------\n\nexport function getReferenceId(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n return describeReferenceRecord(kind, record)?.id;\n}\n\nexport function getReferenceLabel(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n return describeReferenceRecord(kind, record)?.label;\n}\n\nexport function getReferenceAlias(\n kind: ResourceKind,\n record: Record<string, unknown>,\n): string | undefined {\n if (typeof record.handle === \"string\" && record.handle.trim().length > 0) {\n return record.handle.trim();\n }\n const described = describeReferenceRecord(kind, record);\n if (!described) return undefined;\n const alias = slugify(described.label);\n return alias || shortId(described.id);\n}\n\n// ---------------------------------------------------------------------------\n// matchRank — rank how well a record matches a normalized query\n// ---------------------------------------------------------------------------\n\nexport function matchRank(record: MatchRecord, normalizedQuery: string): number {\n if (!normalizedQuery || normalizedQuery === \"*\") {\n return 5;\n }\n if (normalize(record.id) === normalizedQuery) {\n return 0;\n }\n if (record.tokens.has(normalizedQuery)) {\n return 1;\n }\n if (normalize(record.id).startsWith(normalizedQuery)) {\n return 2;\n }\n if (Array.from(record.tokens).some((token) => token.startsWith(normalizedQuery))) {\n return 3;\n }\n return 4;\n}\n\n// ---------------------------------------------------------------------------\n// ReferenceStorage — pluggable storage interface\n// ---------------------------------------------------------------------------\n\nexport interface ReferenceStorage {\n getLastReference(kind: ResourceKind, entityId?: string): string | undefined;\n setLastReference(kind: ResourceKind, id: string, entityId?: string): void;\n getActiveEntityId(): string | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// ReferenceTracker — browser-compatible matching + @last tracking\n// ---------------------------------------------------------------------------\n\nexport class ReferenceTracker {\n constructor(private storage: ReferenceStorage) {}\n\n /** Remember a reference for @last reuse. */\n remember(kind: ResourceKind, id: string, entityId?: string): void {\n this.storage.setLastReference(kind, id, entityId);\n }\n\n /** Resolve @last / @last:kind references. */\n resolveLastReference(\n ref: string,\n kind: ResourceKind,\n entityId?: string,\n ): { isLast: boolean; kind?: ResourceKind; id?: string } {\n const parsed = parseLastReference(ref);\n if (!parsed.isLast) return parsed;\n const lastKind = parsed.kind ?? kind;\n if (lastKind !== kind) {\n throw new Error(\n `@last:${lastKind} cannot be used where a ${kindLabel(kind)} reference is required.`,\n );\n }\n const id = this.storage.getLastReference(lastKind, entityId);\n return { ...parsed, id };\n }\n\n /** Find the single best match for a query against a list of records. */\n findBestMatch(\n kind: ResourceKind,\n query: string,\n records: Record<string, unknown>[],\n ): ReferenceMatch | null {\n const matches = this.findMatches(kind, query, records);\n return matches.length > 0 ? matches[0] : null;\n }\n\n /** Find all matching records ranked by relevance. */\n findMatches(\n kind: ResourceKind,\n query: string,\n records: Record<string, unknown>[],\n ): ReferenceMatch[] {\n const trimmedQuery = validateReferenceInput(query, \"query\", { allowEmpty: true });\n const described = records\n .map((record) => describeReferenceRecord(kind, record))\n .filter((record): record is MatchRecord => record !== null);\n const normalizedQuery = normalize(trimmedQuery);\n\n const matches = described\n .filter((record) => {\n if (!normalizedQuery || normalizedQuery === \"*\") {\n return true;\n }\n if (normalize(record.id).startsWith(normalizedQuery)) {\n return true;\n }\n if (record.tokens.has(normalizedQuery)) {\n return true;\n }\n return Array.from(record.tokens).some((token) => token.includes(normalizedQuery));\n })\n .sort(\n (left, right) =>\n matchRank(left, normalizedQuery) - matchRank(right, normalizedQuery) ||\n left.label.localeCompare(right.label) ||\n left.id.localeCompare(right.id),\n );\n\n return matches.map((record) => ({\n kind,\n id: record.id,\n short_id: shortId(record.id),\n label: record.label,\n alias: getReferenceAlias(kind, record.raw),\n raw: record.raw,\n }));\n }\n}\n","// ---------------------------------------------------------------------------\n// Pure business-logic helpers for equity issuance\n// No Node/CLI/browser dependencies — just data transforms and validation.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { CapTableInstrument } from \"../tools.js\";\n\nexport type { CapTableInstrument } from \"../tools.js\";\n\n// ---------------------------------------------------------------------------\n// Grant-type normalization\n// ---------------------------------------------------------------------------\n\nexport function normalizedGrantType(grantType: string): string {\n return grantType.trim().toLowerCase().replaceAll(\"-\", \"_\").replaceAll(\" \", \"_\");\n}\n\n// ---------------------------------------------------------------------------\n// Instrument-kind mapping\n// ---------------------------------------------------------------------------\n\nexport function expectedInstrumentKinds(grantType: string): string[] {\n switch (normalizedGrantType(grantType)) {\n case \"common\":\n case \"common_stock\":\n return [\"common_equity\"];\n case \"preferred\":\n case \"preferred_stock\":\n return [\"preferred_equity\"];\n case \"unit\":\n case \"membership_unit\":\n return [\"membership_unit\"];\n case \"option\":\n case \"options\":\n case \"stock_option\":\n case \"iso\":\n case \"nso\":\n return [\"option_grant\"];\n case \"rsa\":\n return [\"common_equity\", \"preferred_equity\"];\n default:\n return [];\n }\n}\n\n// ---------------------------------------------------------------------------\n// 409A requirement check\n// ---------------------------------------------------------------------------\n\nexport function grantRequiresCurrent409a(\n grantType: string,\n instrumentKind?: string,\n): boolean {\n return (\n instrumentKind?.toLowerCase() === \"option_grant\" ||\n expectedInstrumentKinds(grantType).includes(\"option_grant\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Instrument creation hint (CLI-agnostic text)\n// ---------------------------------------------------------------------------\n\nexport function buildInstrumentCreationHint(grantType: string): string {\n const normalized = normalizedGrantType(grantType);\n switch (normalized) {\n case \"preferred\":\n case \"preferred_stock\":\n return \"Create one with: corp cap-table create-instrument --kind preferred_equity --symbol SERIES-A --authorized-units <shares>\";\n case \"option\":\n case \"options\":\n case \"stock_option\":\n case \"iso\":\n case \"nso\":\n return \"Create one with: corp cap-table create-instrument --kind option_grant --symbol OPTION-PLAN --authorized-units <shares>\";\n case \"membership_unit\":\n case \"unit\":\n return \"Create one with: corp cap-table create-instrument --kind membership_unit --symbol UNIT --authorized-units <units>\";\n case \"common\":\n case \"common_stock\":\n return \"Create one with: corp cap-table create-instrument --kind common_equity --symbol COMMON --authorized-units <shares>\";\n default:\n return \"Create a matching instrument first, then pass --instrument-id explicitly.\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Resolve the instrument for a given grant type\n// ---------------------------------------------------------------------------\n\nexport function resolveInstrumentForGrant(\n instruments: CapTableInstrument[],\n grantType: string,\n explicitInstrumentId?: string,\n): CapTableInstrument {\n if (explicitInstrumentId) {\n const explicit = instruments.find(\n (instrument) => instrument.instrument_id === explicitInstrumentId,\n );\n if (!explicit) {\n throw new Error(\n `Instrument ${explicitInstrumentId} was not found on the cap table.`,\n );\n }\n return explicit;\n }\n\n const kinds = expectedInstrumentKinds(grantType);\n if (kinds.length === 0) {\n throw new Error(\n `No default instrument mapping exists for grant type \"${grantType}\". ${buildInstrumentCreationHint(grantType)}`,\n );\n }\n const match = instruments.find((instrument) =>\n kinds.includes(String(instrument.kind).toLowerCase()),\n );\n if (!match) {\n throw new Error(\n `No instrument found for grant type \"${grantType}\". Expected one of: ${kinds.join(\", \")}. ${buildInstrumentCreationHint(grantType)}`,\n );\n }\n return match;\n}\n\n// ---------------------------------------------------------------------------\n// Board check\n// ---------------------------------------------------------------------------\n\nexport async function entityHasActiveBoard(\n client: CorpAPIClient,\n entityId: string,\n): Promise<boolean> {\n const bodies = await client.listGovernanceBodies(entityId);\n return bodies.some(\n (body) =>\n String(body.body_type ?? \"\").toLowerCase() === \"board_of_directors\" &&\n String(body.status ?? \"active\").toLowerCase() === \"active\",\n );\n}\n\n// ---------------------------------------------------------------------------\n// Issuance preflight: board approval + 409A\n// ---------------------------------------------------------------------------\n\nexport async function ensureIssuancePreflight(\n client: CorpAPIClient,\n entityId: string,\n grantType: string,\n instrument?: CapTableInstrument,\n meetingId?: string,\n resolutionId?: string,\n operationLabel?: string,\n): Promise<void> {\n if (!meetingId || !resolutionId) {\n if (await entityHasActiveBoard(client, entityId)) {\n const label = operationLabel ?? \"this issuance\";\n throw new Error(\n `Board approval is required for ${label}. Pass --meeting-id and --resolution-id from a passed board vote.\\n` +\n ` Tip: Use 'corp governance quick-approve --text \"RESOLVED: authorize ${label}\"' for one-step approval.`,\n );\n }\n }\n\n if (!grantRequiresCurrent409a(grantType, instrument?.kind)) {\n return;\n }\n\n try {\n await client.getCurrent409a(entityId);\n } catch (err) {\n const msg = String(err);\n if (\n msg.includes(\"404\") ||\n msg.includes(\"Not found\") ||\n msg.includes(\"not found\")\n ) {\n // Auto-create and auto-approve a 409A valuation for early-stage companies\n try {\n const today = new Date().toISOString().slice(0, 10);\n const valuation = await client.createValuation({\n entity_id: entityId,\n valuation_type: \"four_oh_nine_a\",\n effective_date: today,\n methodology: \"backsolve\",\n fmv_per_share_cents: 1, // $0.01 par value — typical early stage\n });\n const valuationId = String((valuation as Record<string, unknown>).valuation_id ?? \"\");\n if (valuationId) {\n await client.submitValuationForApproval(valuationId, entityId);\n await client.approveValuation(valuationId, entityId);\n }\n return; // 409A now exists, proceed with grant\n } catch {\n // Auto-create failed (board may be required) — fall through to original error\n }\n throw new Error(\n \"Stock option issuances require a current approved 409A valuation.\\n\" +\n \" Auto-creation failed. Create manually:\\n\" +\n \" corp cap-table create-valuation --type four_oh_nine_a --date YYYY-MM-DD --methodology backsolve --auto-approve\",\n );\n }\n throw err;\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: issue-equity\n//\n// Pure function: preflight checks → start round → add security → issue round.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { ApiRecord } from \"../types.js\";\nimport type { WorkflowResult } from \"./types.js\";\nimport {\n type CapTableInstrument,\n ensureIssuancePreflight,\n expectedInstrumentKinds,\n resolveInstrumentForGrant,\n} from \"./equity-helpers.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface IssueEquityArgs {\n entityId: string;\n grantType: string;\n shares: number;\n recipientName: string;\n recipientEmail?: string;\n /** Pre-resolved instrument ID (already resolved by the caller). */\n instrumentId?: string;\n /** Pre-resolved meeting ID. */\n meetingId?: string;\n /** Pre-resolved resolution ID. */\n resolutionId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function issueEquity(\n client: CorpAPIClient,\n args: IssueEquityArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n\n try {\n // ── Fetch cap table ──────────────────────────────────────────\n const capTable = await client.getCapTable(args.entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as\n | string\n | undefined;\n if (!issuerLegalEntityId) {\n return {\n success: false,\n error:\n \"No issuer legal entity found. Has this entity been formed with a cap table?\",\n steps,\n };\n }\n\n const instruments = (capTable.instruments ?? []) as CapTableInstrument[];\n if (!instruments.length) {\n return {\n success: false,\n error:\n \"No instruments found on cap table. Create one with: corp cap-table create-instrument --kind common_equity --symbol COMMON --authorized-units <shares>\",\n steps,\n };\n }\n\n // ── Resolve instrument (auto-create option_grant for ISO/NSO if missing) ──\n let instrument: CapTableInstrument;\n try {\n instrument = resolveInstrumentForGrant(\n instruments,\n args.grantType,\n args.instrumentId,\n );\n } catch (resolveErr) {\n // Auto-create option_grant instrument for ISO/NSO grants\n const kinds = expectedInstrumentKinds(args.grantType);\n if (kinds.includes(\"option_grant\") && !args.instrumentId) {\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string | undefined;\n if (!issuerLegalEntityId) throw resolveErr;\n const created = await client.createInstrument({\n entity_id: args.entityId,\n issuer_legal_entity_id: issuerLegalEntityId,\n kind: \"option_grant\",\n symbol: \"OPTION-PLAN\",\n authorized_units: 10_000_000,\n });\n instrument = created as unknown as CapTableInstrument;\n steps.push({\n name: \"auto_create_instrument\",\n status: \"ok\",\n detail: `Auto-created option_grant instrument OPTION-PLAN`,\n });\n } else {\n throw resolveErr;\n }\n }\n const instrumentId = instrument.instrument_id;\n steps.push({\n name: \"resolve_instrument\",\n status: \"ok\",\n data: {\n instrument_id: instrumentId,\n symbol: instrument.symbol,\n kind: instrument.kind,\n },\n detail: `Using instrument: ${instrument.symbol} (${instrument.kind})`,\n });\n\n // ── Preflight checks ─────────────────────────────────────────\n await ensureIssuancePreflight(\n client,\n args.entityId,\n args.grantType,\n instrument,\n args.meetingId,\n args.resolutionId,\n \"equity issuance\",\n );\n steps.push({ name: \"preflight\", status: \"ok\" });\n\n // ── Step 1: Start a staged round ─────────────────────────────\n const round = await client.startEquityRound({\n entity_id: args.entityId,\n name: `${args.grantType} grant \\u2014 ${args.recipientName}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n steps.push({\n name: \"start_round\",\n status: \"ok\",\n data: { round_id: roundId },\n });\n\n // ── Step 2: Add the security ─────────────────────────────────\n const securityData: Record<string, unknown> = {\n entity_id: args.entityId,\n instrument_id: instrumentId,\n quantity: args.shares,\n recipient_name: args.recipientName,\n grant_type: args.grantType,\n };\n if (args.recipientEmail) securityData.email = args.recipientEmail;\n\n // Attempt to find existing holder to avoid duplicates\n const existingHolders = (capTable.holders ?? []) as ApiRecord[];\n const matchingHolder = existingHolders.find((h) => {\n const nameMatch =\n String(h.name ?? \"\").toLowerCase() ===\n args.recipientName.toLowerCase();\n const emailMatch =\n args.recipientEmail &&\n String(h.email ?? \"\").toLowerCase() ===\n args.recipientEmail.toLowerCase();\n return nameMatch || emailMatch;\n });\n if (matchingHolder) {\n const holderId =\n matchingHolder.holder_id ??\n matchingHolder.contact_id ??\n matchingHolder.id;\n if (holderId) securityData.holder_id = holderId;\n }\n\n await client.addRoundSecurity(roundId, securityData);\n steps.push({ name: \"add_security\", status: \"ok\" });\n\n // ── Step 3: Issue the round ──────────────────────────────────\n const issuePayload: Record<string, unknown> = {\n entity_id: args.entityId,\n };\n if (args.meetingId) issuePayload.meeting_id = args.meetingId;\n if (args.resolutionId) issuePayload.resolution_id = args.resolutionId;\n const result = await client.issueRound(roundId, issuePayload);\n steps.push({ name: \"issue_round\", status: \"ok\" });\n\n return {\n success: true,\n data: {\n ...result,\n round_id: roundId,\n round,\n shares: args.shares,\n grant_type: args.grantType,\n recipient: args.recipientName,\n },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: issue-safe\n//\n// Pure function: preflight checks → create SAFE note.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { WorkflowResult } from \"./types.js\";\nimport { ensureIssuancePreflight } from \"./equity-helpers.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface IssueSafeArgs {\n entityId: string;\n investorName: string;\n amountCents: number;\n valuationCapCents: number;\n safeType?: string;\n email?: string;\n /** Pre-resolved meeting ID. */\n meetingId?: string;\n /** Pre-resolved resolution ID. */\n resolutionId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function issueSafe(\n client: CorpAPIClient,\n args: IssueSafeArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n const safeType = args.safeType ?? \"post_money\";\n\n try {\n // ── Preflight checks ─────────────────────────────────────────\n await ensureIssuancePreflight(\n client,\n args.entityId,\n safeType,\n undefined,\n args.meetingId,\n args.resolutionId,\n \"SAFE issuance\",\n );\n steps.push({ name: \"preflight\", status: \"ok\" });\n\n // ── Create SAFE note ─────────────────────────────────────────\n const body: Record<string, unknown> = {\n entity_id: args.entityId,\n investor_name: args.investorName,\n principal_amount_cents: args.amountCents,\n valuation_cap_cents: args.valuationCapCents,\n safe_type: safeType,\n };\n if (args.email) body.email = args.email;\n if (args.meetingId) body.meeting_id = args.meetingId;\n if (args.resolutionId) body.resolution_id = args.resolutionId;\n\n const result = await client.createSafeNote(body);\n steps.push({ name: \"create_safe\", status: \"ok\" });\n\n return {\n success: true,\n data: {\n ...result,\n investor_name: args.investorName,\n amount_cents: args.amountCents,\n valuation_cap_cents: args.valuationCapCents,\n },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n","// ---------------------------------------------------------------------------\n// Workflow: written-consent\n//\n// Pure function: create written consent → auto-open with all body seats.\n// No console output, no process.exit — returns a structured WorkflowResult.\n// ---------------------------------------------------------------------------\n\nimport type { CorpAPIClient } from \"../api-client.js\";\nimport type { WorkflowResult } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Args\n// ---------------------------------------------------------------------------\n\nexport interface WrittenConsentArgs {\n entityId: string;\n /** Pre-resolved governance body ID. */\n bodyId: string;\n title: string;\n description: string;\n}\n\n// ---------------------------------------------------------------------------\n// Workflow\n// ---------------------------------------------------------------------------\n\nexport async function writtenConsent(\n client: CorpAPIClient,\n args: WrittenConsentArgs,\n): Promise<WorkflowResult> {\n const steps: WorkflowResult[\"steps\"] = [];\n\n try {\n // ── Create written consent ───────────────────────────────────\n const payload = {\n entity_id: args.entityId,\n body_id: args.bodyId,\n title: args.title,\n description: args.description,\n };\n const result = await client.writtenConsent(payload);\n const meetingId = String(result.meeting_id ?? \"\");\n steps.push({\n name: \"create_written_consent\",\n status: \"ok\",\n data: { meeting_id: meetingId || undefined },\n });\n\n // ── Auto-open with all body seats ────────────────────────────\n if (meetingId) {\n try {\n const seats = await client.getGovernanceSeats(\n args.bodyId,\n args.entityId,\n );\n const seatIds = seats\n .map((s) =>\n String(\n s.seat_id ?? (s as Record<string, unknown>).id ?? \"\",\n ),\n )\n .filter((id) => id.length > 0);\n if (seatIds.length > 0) {\n await client.conveneMeeting(meetingId, args.entityId, {\n present_seat_ids: seatIds,\n });\n steps.push({\n name: \"auto_open\",\n status: \"ok\",\n data: { seat_count: seatIds.length },\n detail: `Opened with ${seatIds.length} seat(s) present`,\n });\n } else {\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"No seats found on body\",\n });\n }\n } catch {\n // Non-fatal: written consent can still proceed without open step\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"Failed to auto-open meeting (non-fatal)\",\n });\n }\n } else {\n steps.push({\n name: \"auto_open\",\n status: \"skipped\",\n detail: \"No meeting_id returned\",\n });\n }\n\n return {\n success: true,\n data: { ...result, meeting_id: meetingId || undefined },\n steps,\n };\n } catch (err) {\n steps.push({\n name: \"error\",\n status: \"failed\",\n detail: String(err),\n });\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n steps,\n };\n }\n}\n"],"mappings":"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","names":["existsSync","readFileSync","require","existsSync","readFileSync","issuerLegalEntityId"]}