@thecorporation/corp-tools 26.3.3 → 26.3.4

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.
package/dist/index.d.ts CHANGED
@@ -109,8 +109,8 @@ declare class CorpAPIClient {
109
109
  getDigest(key: string): Promise<ApiRecord>;
110
110
  listEntities(): Promise<ApiRecord[]>;
111
111
  listContacts(entityId: string): Promise<ApiRecord[]>;
112
- getContact(id: string): Promise<ApiRecord>;
113
- getContactProfile(id: string): Promise<ApiRecord>;
112
+ getContact(id: string, entityId: string): Promise<ApiRecord>;
113
+ getContactProfile(id: string, entityId: string): Promise<ApiRecord>;
114
114
  createContact(data: ApiRecord): Promise<ApiRecord>;
115
115
  updateContact(id: string, data: ApiRecord): Promise<ApiRecord>;
116
116
  getNotificationPrefs(contactId: string): Promise<ApiRecord>;
@@ -140,9 +140,9 @@ declare class CorpAPIClient {
140
140
  evaluateIntent(intentId: string, entityId: string): Promise<ApiRecord>;
141
141
  authorizeIntent(intentId: string, entityId: string): Promise<ApiRecord>;
142
142
  listGovernanceBodies(entityId: string): Promise<ApiRecord[]>;
143
- getGovernanceSeats(bodyId: string): Promise<ApiRecord[]>;
144
- listMeetings(bodyId: string): Promise<ApiRecord[]>;
145
- getMeetingResolutions(meetingId: string): Promise<ApiRecord[]>;
143
+ getGovernanceSeats(bodyId: string, entityId: string): Promise<ApiRecord[]>;
144
+ listMeetings(bodyId: string, entityId: string): Promise<ApiRecord[]>;
145
+ getMeetingResolutions(meetingId: string, entityId: string): Promise<ApiRecord[]>;
146
146
  scheduleMeeting(data: ApiRecord): Promise<ApiRecord>;
147
147
  conveneMeeting(meetingId: string, entityId: string, data: ApiRecord): Promise<ApiRecord>;
148
148
  castVote(entityId: string, meetingId: string, itemId: string, data: ApiRecord): Promise<ApiRecord>;
@@ -157,7 +157,7 @@ declare class CorpAPIClient {
157
157
  listVotes(meetingId: string, itemId: string, entityId: string): Promise<ApiRecord[]>;
158
158
  getEntityDocuments(entityId: string): Promise<ApiRecord[]>;
159
159
  generateContract(data: ApiRecord): Promise<ApiRecord>;
160
- getSigningLink(documentId: string): ApiRecord;
160
+ getSigningLink(documentId: string, entityId: string): Promise<ApiRecord>;
161
161
  createInvoice(data: ApiRecord): Promise<ApiRecord>;
162
162
  runPayroll(data: ApiRecord): Promise<ApiRecord>;
163
163
  submitPayment(data: ApiRecord): Promise<ApiRecord>;
@@ -195,7 +195,7 @@ declare class CorpAPIClient {
195
195
  listApiKeys(): Promise<ApiRecord[]>;
196
196
  assignObligation(obligationId: string, contactId: string): Promise<ApiRecord>;
197
197
  getConfig(): Promise<ApiRecord>;
198
- createLink(): Promise<ApiRecord>;
198
+ createLink(externalId: string, provider: string): Promise<ApiRecord>;
199
199
  }
200
200
 
201
201
  interface ToolContext {
package/dist/index.js CHANGED
@@ -118,11 +118,11 @@ var CorpAPIClient = class {
118
118
  listContacts(entityId) {
119
119
  return this.get(`/v1/entities/${entityId}/contacts`);
120
120
  }
121
- getContact(id) {
122
- return this.get(`/v1/contacts/${id}`);
121
+ getContact(id, entityId) {
122
+ return this.get(`/v1/contacts/${id}`, { entity_id: entityId });
123
123
  }
124
- getContactProfile(id) {
125
- return this.get(`/v1/contacts/${id}/profile`);
124
+ getContactProfile(id, entityId) {
125
+ return this.get(`/v1/contacts/${id}/profile`, { entity_id: entityId });
126
126
  }
127
127
  createContact(data) {
128
128
  return this.post("/v1/contacts", data);
@@ -219,14 +219,14 @@ var CorpAPIClient = class {
219
219
  listGovernanceBodies(entityId) {
220
220
  return this.get(`/v1/entities/${entityId}/governance-bodies`);
221
221
  }
222
- getGovernanceSeats(bodyId) {
223
- return this.get(`/v1/governance-bodies/${bodyId}/seats`);
222
+ getGovernanceSeats(bodyId, entityId) {
223
+ return this.get(`/v1/governance-bodies/${bodyId}/seats`, { entity_id: entityId });
224
224
  }
225
- listMeetings(bodyId) {
226
- return this.get(`/v1/governance-bodies/${bodyId}/meetings`);
225
+ listMeetings(bodyId, entityId) {
226
+ return this.get(`/v1/governance-bodies/${bodyId}/meetings`, { entity_id: entityId });
227
227
  }
228
- getMeetingResolutions(meetingId) {
229
- return this.get(`/v1/meetings/${meetingId}/resolutions`);
228
+ getMeetingResolutions(meetingId, entityId) {
229
+ return this.get(`/v1/meetings/${meetingId}/resolutions`, { entity_id: entityId });
230
230
  }
231
231
  scheduleMeeting(data) {
232
232
  return this.post("/v1/meetings", data);
@@ -271,11 +271,8 @@ var CorpAPIClient = class {
271
271
  generateContract(data) {
272
272
  return this.post("/v1/contracts", data);
273
273
  }
274
- getSigningLink(documentId) {
275
- return {
276
- document_id: documentId,
277
- signing_url: `https://humans.thecorporation.ai/sign/${documentId}`
278
- };
274
+ getSigningLink(documentId, entityId) {
275
+ return this.get(`/v1/sign/${documentId}`, { entity_id: entityId });
279
276
  }
280
277
  // --- Finance ---
281
278
  createInvoice(data) {
@@ -408,9 +405,12 @@ var CorpAPIClient = class {
408
405
  return this.get("/v1/config");
409
406
  }
410
407
  // --- Link/Claim ---
411
- async createLink() {
412
- const resp = await this.request("POST", "/v1/workspaces/link");
413
- if (!resp.ok) throw new Error(`${resp.status} ${resp.statusText}`);
408
+ async createLink(externalId, provider) {
409
+ const resp = await this.request("POST", "/v1/workspaces/link", { external_id: externalId, provider });
410
+ if (!resp.ok) {
411
+ const detail = await extractErrorMessage(resp);
412
+ throw new Error(`${resp.status} ${resp.statusText} \u2014 ${detail}`);
413
+ }
414
414
  return resp.json();
415
415
  }
416
416
  };
@@ -637,7 +637,7 @@ var GENERATED_TOOL_DEFINITIONS = [
637
637
  "vote_value": { "type": "string", "enum": ["for", "against", "abstain", "recusal"], "description": "vote: for, against, abstain, or recusal" },
638
638
  "resolution_text": { "type": "string", "description": "resolve: resolution text" },
639
639
  "effective_date": { "type": "string", "description": "resolve: optional effective date" },
640
- "status": { "type": "string", "enum": ["Voted", "Discussed", "Tabled", "Withdrawn"], "description": "finalize_item: Voted, Discussed, Tabled, or Withdrawn" },
640
+ "status": { "type": "string", "enum": ["voted", "discussed", "tabled", "withdrawn"], "description": "finalize_item: voted, discussed, tabled, or withdrawn" },
641
641
  "resolution_id": { "type": "string", "description": "attach_document: resolution ID" },
642
642
  "document_id": { "type": "string", "description": "attach_document: document ID" }
643
643
  },
@@ -711,7 +711,7 @@ var GENERATED_TOOL_DEFINITIONS = [
711
711
  "type": "function",
712
712
  "function": {
713
713
  "name": "document",
714
- "description": "Document access, signing, and preview. Actions: signing_link (document_id \u2014 get signing link for a document), signer_link (obligation_id \u2014 generate signing link for a human obligation), download_link (document_id \u2014 get download link), preview_pdf (entity_id + document_id \u2014 preview a governance document as PDF without requiring a saved document).",
714
+ "description": "Document access, signing, and preview. Actions: signing_link (entity_id + document_id \u2014 get signing link with token for a document), signer_link (obligation_id \u2014 generate signing link for a human obligation), download_link (document_id \u2014 get download link), preview_pdf (entity_id + document_id \u2014 preview a governance document as PDF without requiring a saved document).",
715
715
  "parameters": {
716
716
  "type": "object",
717
717
  "properties": {
@@ -721,7 +721,7 @@ var GENERATED_TOOL_DEFINITIONS = [
721
721
  },
722
722
  "document_id": { "type": "string", "description": "signing_link/download_link/preview_pdf: document ID (or AST definition ID for preview_pdf)" },
723
723
  "obligation_id": { "type": "string", "description": "signer_link: obligation ID" },
724
- "entity_id": { "type": "string", "description": "preview_pdf: entity whose profile to use for rendering" }
724
+ "entity_id": { "type": "string", "description": "signing_link/preview_pdf: entity ID (required)" }
725
725
  },
726
726
  "required": ["action"]
727
727
  }
@@ -1083,7 +1083,7 @@ var complianceActions = {
1083
1083
  }
1084
1084
  };
1085
1085
  var documentActions = {
1086
- signing_link: async (args, client) => client.getSigningLink(args.document_id),
1086
+ signing_link: async (args, client) => client.getSigningLink(args.document_id, requiredString(args, "entity_id")),
1087
1087
  signer_link: async (args, client) => {
1088
1088
  const result = await client.getSignerToken(args.obligation_id);
1089
1089
  const token = result.token ?? "";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api-client.ts","../src/tools.ts","../src/tool-defs.generated.ts","../src/tool-descriptions.ts","../src/system-prompt.ts","../src/definitions.ts"],"sourcesContent":["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\";\n\nexport class SessionExpiredError extends Error {\n constructor() {\n super(\"Your API key is no longer valid. Run 'corp setup' to re-authenticate.\");\n this.name = \"SessionExpiredError\";\n }\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 return json.error || json.message || json.detail || text;\n } catch {\n return text;\n }\n } catch {\n return 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 throw new Error(`Provision failed: ${resp.status} ${resp.statusText} — ${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.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 url = `${this.apiUrl}${path}`;\n if (params) {\n const qs = new URLSearchParams(params).toString();\n if (qs) url += `?${qs}`;\n }\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.status === 401) throw new SessionExpiredError();\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n throw new Error(`${resp.status} ${resp.statusText} — ${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 // --- Workspace ---\n getStatus() { return this.get(`/v1/workspaces/${this.workspaceId}/status`) as Promise<ApiRecord>; }\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<ApiRecord[]>; }\n triggerDigest() { return this.post(\"/v1/digests/trigger\") as Promise<ApiRecord>; }\n getDigest(key: string) { return this.get(`/v1/digests/${key}`) as Promise<ApiRecord>; }\n\n // --- Entities ---\n listEntities() { return this.get(`/v1/workspaces/${this.workspaceId}/entities`) as Promise<ApiRecord[]>; }\n\n // --- Contacts ---\n listContacts(entityId: string) { return this.get(`/v1/entities/${entityId}/contacts`) as Promise<ApiRecord[]>; }\n getContact(id: string) { return this.get(`/v1/contacts/${id}`) as Promise<ApiRecord>; }\n getContactProfile(id: string) { return this.get(`/v1/contacts/${id}/profile`) 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/${id}`, data) as Promise<ApiRecord>; }\n getNotificationPrefs(contactId: string) { return this.get(`/v1/contacts/${contactId}/notification-prefs`) as Promise<ApiRecord>; }\n updateNotificationPrefs(contactId: string, prefs: ApiRecord) { return this.patch(`/v1/contacts/${contactId}/notification-prefs`, prefs) as Promise<ApiRecord>; }\n\n // --- Cap Table ---\n getCapTable(entityId: string) { return this.get(`/v1/entities/${entityId}/cap-table`) as Promise<ApiRecord>; }\n /** Extract SAFE instruments from the cap table (no dedicated list endpoint). */\n async getSafeNotes(entityId: string): Promise<ApiRecord[]> {\n const ct = await this.getCapTable(entityId);\n const instruments = (ct.instruments ?? []) as ApiRecord[];\n const positions = (ct.positions ?? []) as ApiRecord[];\n const safeIds = new Set(instruments.filter((i) => String(i.kind).toLowerCase() === \"safe\").map((i) => i.instrument_id));\n if (safeIds.size === 0) return [];\n return positions.filter((p) => safeIds.has(p.instrument_id));\n }\n /** Extract transfer-workflow info (no dedicated list endpoint for share transfers). */\n async getShareTransfers(entityId: string): Promise<ApiRecord[]> {\n // No list endpoint exists; return empty with a hint.\n return [{ _note: \"Use transfer workflows: POST /v1/equity/transfer-workflows to initiate transfers.\", entity_id: entityId }];\n }\n getValuations(entityId: string) { return this.get(`/v1/entities/${entityId}/valuations`) as Promise<ApiRecord[]>; }\n getCurrent409a(entityId: string) { return this.get(`/v1/entities/${entityId}/current-409a`) as Promise<ApiRecord>; }\n createValuation(data: ApiRecord) { return this.post(\"/v1/valuations\", data) as Promise<ApiRecord>; }\n submitValuationForApproval(valuationId: string, entityId: string) {\n return this.post(`/v1/valuations/${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/${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/${roundId}/apply-terms`, data) as Promise<ApiRecord>;\n }\n boardApproveEquityRound(roundId: string, data: BoardApproveEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${roundId}/board-approve`, data) as Promise<EquityRoundResponse>;\n }\n acceptEquityRound(roundId: string, data: AcceptEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${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 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/${roundId}/securities`, data) as Promise<ApiRecord>; }\n issueRound(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${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/${intentId}/evaluate`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n authorizeIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${intentId}/authorize`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n\n // --- Governance ---\n listGovernanceBodies(entityId: string) { return this.get(`/v1/entities/${entityId}/governance-bodies`) as Promise<ApiRecord[]>; }\n getGovernanceSeats(bodyId: string) { return this.get(`/v1/governance-bodies/${bodyId}/seats`) as Promise<ApiRecord[]>; }\n listMeetings(bodyId: string) { return this.get(`/v1/governance-bodies/${bodyId}/meetings`) as Promise<ApiRecord[]>; }\n getMeetingResolutions(meetingId: string) { return this.get(`/v1/meetings/${meetingId}/resolutions`) as Promise<ApiRecord[]>; }\n scheduleMeeting(data: ApiRecord) { return this.post(\"/v1/meetings\", data) as Promise<ApiRecord>; }\n conveneMeeting(meetingId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/convene`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n castVote(entityId: string, meetingId: string, itemId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/agenda-items/${itemId}/vote`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n sendNotice(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/notice`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n adjournMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/adjourn`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n cancelMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/cancel`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n finalizeAgendaItem(meetingId: string, itemId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${meetingId}/agenda-items/${itemId}/finalize`, data) as Promise<ApiRecord>;\n }\n computeResolution(meetingId: string, itemId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/agenda-items/${itemId}/resolution`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n attachResolutionDocument(meetingId: string, resolutionId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${meetingId}/resolutions/${resolutionId}/attach-document`, data) as Promise<ApiRecord>;\n }\n writtenConsent(data: ApiRecord) {\n return this.post(\"/v1/meetings/written-consent\", data) as Promise<ApiRecord>;\n }\n listAgendaItems(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${meetingId}/agenda-items`, { entity_id: entityId }) as Promise<ApiRecord[]>;\n }\n listVotes(meetingId: string, itemId: string, entityId: string) {\n return this.get(`/v1/meetings/${meetingId}/agenda-items/${itemId}/votes`, { entity_id: entityId }) as Promise<ApiRecord[]>;\n }\n\n // --- Documents ---\n getEntityDocuments(entityId: string) { return this.get(`/v1/formations/${entityId}/documents`) as Promise<ApiRecord[]>; }\n generateContract(data: ApiRecord) { return this.post(\"/v1/contracts\", data) as Promise<ApiRecord>; }\n getSigningLink(documentId: string): ApiRecord {\n return {\n document_id: documentId,\n signing_url: `https://humans.thecorporation.ai/sign/${documentId}`,\n };\n }\n\n // --- Finance ---\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 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\n // --- Tax ---\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/${id}`) as Promise<ApiRecord>; }\n getFormationDocuments(id: string) { return this.get(`/v1/formations/${id}/documents`) as Promise<ApiRecord[]>; }\n createFormation(data: ApiRecord) { return this.post(\"/v1/formations\", data) as Promise<ApiRecord>; }\n createFormationWithCapTable(data: ApiRecord) { return this.post(\"/v1/formations/with-cap-table\", data) as Promise<ApiRecord>; }\n createPendingEntity(data: ApiRecord) { return this.post(\"/v1/formations/pending\", data) as Promise<ApiRecord>; }\n addFounder(entityId: string, data: ApiRecord) { return this.post(`/v1/formations/${entityId}/founders`, data) as Promise<ApiRecord>; }\n finalizeFormation(entityId: string) { return this.post(`/v1/formations/${entityId}/finalize`, {}) as Promise<ApiRecord>; }\n\n // --- Human obligations ---\n getHumanObligations() { return this.get(`/v1/workspaces/${this.workspaceId}/human-obligations`) as Promise<ApiRecord[]>; }\n getSignerToken(obligationId: string) { return this.post(`/v1/human-obligations/${obligationId}/signer-token`) as Promise<ApiRecord>; }\n\n // --- Demo ---\n seedDemo(name: string) { return this.post(\"/v1/demo/seed\", { name, workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n\n // --- Entities writes ---\n convertEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${entityId}/convert`, data) as Promise<ApiRecord>; }\n dissolveEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${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/${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/${id}`, data) as Promise<ApiRecord>; }\n deleteAgent(id: string) { return this.patch(`/v1/agents/${id}`, { status: \"disabled\" }) as Promise<ApiRecord>; }\n sendAgentMessage(id: string, message: string) { return this.post(`/v1/agents/${id}/messages`, { message }) as Promise<ApiRecord>; }\n addAgentSkill(id: string, data: ApiRecord) { return this.post(`/v1/agents/${id}/skills`, data) as Promise<ApiRecord>; }\n listSupportedModels() { return this.get(\"/v1/models\") as Promise<ApiRecord[]>; }\n\n // --- Governance bodies ---\n createGovernanceBody(data: ApiRecord) { return this.post(\"/v1/governance-bodies\", data) as Promise<ApiRecord>; }\n createGovernanceSeat(bodyId: string, data: ApiRecord) { return this.post(`/v1/governance-bodies/${bodyId}/seats`, data) as Promise<ApiRecord>; }\n\n // --- API Keys ---\n listApiKeys() { return this.get(\"/v1/api-keys\", { workspace_id: this.workspaceId }) as Promise<ApiRecord[]>; }\n\n // --- Obligations ---\n assignObligation(obligationId: string, contactId: string) {\n return this.patch(`/v1/obligations/${obligationId}/assign`, { contact_id: contactId }) as Promise<ApiRecord>;\n }\n\n // --- Config ---\n getConfig() { return this.get(\"/v1/config\") as Promise<ApiRecord>; }\n\n // --- Link/Claim ---\n async createLink(): Promise<ApiRecord> {\n const resp = await this.request(\"POST\", \"/v1/workspaces/link\");\n if (!resp.ok) throw new Error(`${resp.status} ${resp.statusText}`);\n return resp.json() as Promise<ApiRecord>;\n }\n}\n","import type { CorpAPIClient } from \"./api-client.js\";\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\n\nexport interface ToolContext {\n dataDir: string;\n onEntityFormed?: (entityId: string) => void;\n}\n\ntype ToolHandler = (args: Record<string, unknown>, client: CorpAPIClient, ctx: ToolContext) => Promise<unknown>;\n\nfunction requiredString(args: Record<string, unknown>, key: string): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Missing required field: ${key}`);\n }\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-handlers grouped by consolidated tool\n// ---------------------------------------------------------------------------\n\nconst workspaceActions: Record<string, ToolHandler> = {\n status: async (_args, client) => client.getStatus(),\n list_entities: async (_args, client) => client.listEntities(),\n obligations: async (args, client) => client.getObligations(args.tier as string | undefined),\n billing: async (_args, client) => {\n const [status, plans] = await Promise.all([client.getBillingStatus(), client.getBillingPlans()]);\n return { status, plans };\n },\n};\n\nconst entityActions: Record<string, ToolHandler> = {\n get_cap_table: async (args, client) => client.getCapTable(requiredString(args, \"entity_id\")),\n list_documents: async (args, client) => client.getEntityDocuments(requiredString(args, \"entity_id\")),\n list_safe_notes: async (args, client) => client.getSafeNotes(requiredString(args, \"entity_id\")),\n\n create: async (args, client) => {\n const entityType = args.entity_type as string;\n let jurisdiction = (args.jurisdiction as string) || \"\";\n if (!jurisdiction || jurisdiction.length === 2) {\n jurisdiction = entityType === \"llc\" ? \"US-WY\" : \"US-DE\";\n }\n return client.createPendingEntity({\n entity_type: entityType,\n legal_name: args.entity_name,\n jurisdiction,\n });\n },\n\n add_founder: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n let ownershipPct = args.ownership_pct as number | undefined;\n if (typeof ownershipPct === \"number\" && ownershipPct > 1) {\n ownershipPct = ownershipPct / 100;\n }\n return client.addFounder(entityId, {\n name: args.name,\n email: args.email,\n role: args.role,\n ownership_pct: ownershipPct,\n officer_title: args.officer_title,\n is_incorporator: args.is_incorporator,\n });\n },\n\n finalize: async (args, client, ctx) => {\n const entityId = requiredString(args, \"entity_id\");\n const result = await client.finalizeFormation(entityId);\n if (entityId && ctx.onEntityFormed) {\n ctx.onEntityFormed(entityId);\n }\n return result;\n },\n\n form: async (args, client, ctx) => {\n const entityType = args.entity_type as string;\n let jurisdiction = (args.jurisdiction as string) || \"\";\n if (!jurisdiction || jurisdiction.length === 2) {\n jurisdiction = entityType === \"llc\" ? \"US-WY\" : \"US-DE\";\n }\n const members = (args.members ?? []) as Record<string, unknown>[];\n if (!members.length) return { error: \"Members are required.\" };\n for (const m of members) {\n if (!m.investor_type) m.investor_type = \"natural_person\";\n if (typeof m.ownership_pct === \"number\" && (m.ownership_pct as number) > 1) {\n m.ownership_pct = (m.ownership_pct as number) / 100;\n }\n }\n const result = await client.createFormationWithCapTable({\n entity_type: entityType, legal_name: args.entity_name, jurisdiction,\n members, workspace_id: client.workspaceId,\n fiscal_year_end: args.fiscal_year_end,\n s_corp_election: args.s_corp_election,\n transfer_restrictions: args.transfer_restrictions,\n right_of_first_refusal: args.right_of_first_refusal,\n company_address: args.company_address,\n });\n const entityId = result.entity_id as string;\n if (entityId && ctx.onEntityFormed) {\n ctx.onEntityFormed(entityId);\n }\n return result;\n },\n\n convert: async (args, client) => {\n const body: Record<string, unknown> = { target_type: args.target_type ?? args.to_type ?? args.new_entity_type };\n if (args.new_jurisdiction) body.new_jurisdiction = args.new_jurisdiction;\n return client.convertEntity(requiredString(args, \"entity_id\"), body);\n },\n dissolve: async (args, client) => client.dissolveEntity(requiredString(args, \"entity_id\"), args),\n};\n\nconst equityActions: Record<string, ToolHandler> = {\n start_round: async (args, client) => client.startEquityRound(args),\n\n add_security: async (args, client) => {\n const roundId = requiredString(args, \"round_id\");\n return client.addRoundSecurity(roundId, args);\n },\n\n issue_round: async (args, client) => {\n const roundId = requiredString(args, \"round_id\");\n return client.issueRound(roundId, args);\n },\n\n issue: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n // Fetch cap table to auto-resolve issuer and instrument\n const capTable = await client.getCapTable(entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string;\n if (!issuerLegalEntityId) return { error: \"No issuer legal entity found. Has this entity been formed with a cap table?\" };\n\n const instruments = capTable.instruments as Array<{ instrument_id: string; kind: string; symbol: string }>;\n if (!instruments?.length) return { error: \"No instruments found on cap table.\" };\n\n let instrumentId = args.instrument_id as string | undefined;\n if (!instrumentId) {\n const grantType = (args.grant_type as string ?? \"\").toLowerCase();\n const match = instruments.find(\n (i) => i.kind.toLowerCase().includes(grantType) || i.symbol.toLowerCase().includes(grantType),\n ) ?? instruments.find((i) => i.kind.toLowerCase().includes(\"common\"));\n instrumentId = (match ?? instruments[0]).instrument_id;\n }\n\n const round = await client.startEquityRound({\n entity_id: entityId,\n name: `${args.grant_type ?? \"equity\"} grant — ${args.recipient_name ?? \"unknown\"}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n\n const securityData: Record<string, unknown> = {\n entity_id: entityId,\n instrument_id: instrumentId,\n quantity: args.shares ?? args.quantity,\n recipient_name: args.recipient_name,\n grant_type: args.grant_type,\n };\n if (args.email) securityData.email = args.email;\n await client.addRoundSecurity(roundId, securityData);\n\n return client.issueRound(roundId, { entity_id: entityId });\n },\n issue_safe: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n const capTable = await client.getCapTable(entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string;\n if (!issuerLegalEntityId) return { error: \"No issuer legal entity found.\" };\n\n const instruments = capTable.instruments as Array<{ instrument_id: string; kind: string; symbol: string }>;\n const safeInstrument = instruments?.find((i) => i.kind.toLowerCase() === \"safe\");\n if (!safeInstrument) return { error: \"No SAFE instrument found on cap table.\" };\n\n const principalCents = (args.principal_amount_cents ?? args.amount_cents ?? 0) as number;\n const round = await client.startEquityRound({\n entity_id: entityId,\n name: `SAFE — ${args.investor_name ?? \"investor\"}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n\n const securityData: Record<string, unknown> = {\n entity_id: entityId,\n instrument_id: safeInstrument.instrument_id,\n quantity: principalCents || 1,\n recipient_name: args.investor_name,\n principal_cents: principalCents,\n grant_type: args.safe_type ?? \"post_money\",\n };\n if (args.email) securityData.email = args.email;\n if (args.valuation_cap_cents) securityData.valuation_cap_cents = args.valuation_cap_cents;\n await client.addRoundSecurity(roundId, securityData);\n\n return client.issueRound(roundId, { entity_id: entityId });\n },\n\n transfer: async (args, client) => {\n if (args.skip_governance_review !== true) {\n return {\n error: \"Transfer blocked: governance review required. Use the transfer workflow (create_transfer_workflow → submit-review → record-board-approval → execute) for governed transfers. To bypass governance and record a direct transfer, pass skip_governance_review: true.\",\n };\n }\n return client.transferShares(args);\n },\n\n distribution: async (args, client) => client.calculateDistribution(args),\n};\n\nconst valuationActions: Record<string, ToolHandler> = {\n create: async (args, client) => client.createValuation(args),\n\n submit: async (args, client) =>\n client.submitValuationForApproval(\n requiredString(args, \"valuation_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n approve: async (args, client) =>\n client.approveValuation(\n requiredString(args, \"valuation_id\"),\n requiredString(args, \"entity_id\"),\n args.resolution_id as string | undefined,\n ),\n};\n\nconst meetingActions: Record<string, ToolHandler> = {\n schedule: async (args, client) => {\n const body: Record<string, unknown> = {\n entity_id: requiredString(args, \"entity_id\"),\n body_id: requiredString(args, \"body_id\"),\n meeting_type: requiredString(args, \"meeting_type\"),\n title: requiredString(args, \"title\"),\n };\n const scheduledDate = args.scheduled_date ?? args.proposed_date;\n if (typeof scheduledDate === \"string\" && scheduledDate.trim().length > 0) {\n body.scheduled_date = scheduledDate;\n }\n const agendaItems = args.agenda_item_titles ?? args.agenda_items;\n if (Array.isArray(agendaItems)) body.agenda_item_titles = agendaItems;\n return client.scheduleMeeting(body);\n },\n\n notice: async (args, client) => client.sendNotice(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n convene: async (args, client) => client.conveneMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n {\n present_seat_ids: Array.isArray(args.present_seat_ids) ? args.present_seat_ids : [],\n },\n ),\n\n vote: async (args, client) =>\n client.castVote(\n requiredString(args, \"entity_id\"),\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n {\n voter_id: requiredString(args, \"voter_id\"),\n vote_value: requiredString(args, \"vote_value\"),\n },\n ),\n\n resolve: async (args, client) => {\n const data: Record<string, unknown> = {\n resolution_text: requiredString(args, \"resolution_text\"),\n };\n if (typeof args.effective_date === \"string\") data.effective_date = args.effective_date;\n return client.computeResolution(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n requiredString(args, \"entity_id\"),\n data,\n );\n },\n\n finalize_item: async (args, client) => client.finalizeAgendaItem(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n {\n entity_id: requiredString(args, \"entity_id\"),\n status: requiredString(args, \"status\"),\n },\n ),\n\n adjourn: async (args, client) => client.adjournMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n cancel: async (args, client) => client.cancelMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n consent: async (args, client) => client.writtenConsent({\n entity_id: requiredString(args, \"entity_id\"),\n body_id: requiredString(args, \"body_id\"),\n title: requiredString(args, \"title\"),\n description: args.description as string ?? \"\",\n }),\n\n attach_document: async (args, client) => client.attachResolutionDocument(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"resolution_id\"),\n {\n entity_id: requiredString(args, \"entity_id\"),\n document_id: requiredString(args, \"document_id\"),\n },\n ),\n\n list_items: async (args, client) => client.listAgendaItems(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n list_votes: async (args, client) => client.listVotes(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n requiredString(args, \"entity_id\"),\n ),\n};\n\nconst financeActions: Record<string, ToolHandler> = {\n create_invoice: async (args, client) => {\n if (!(\"amount_cents\" in args) && Array.isArray(args.line_items)) {\n args.amount_cents = (args.line_items as Record<string, number>[])\n .reduce((sum, item) => sum + (item.amount_cents ?? 0), 0);\n }\n if (!(\"amount_cents\" in args)) args.amount_cents = 0;\n if (!(\"description\" in args) || typeof args.description !== \"string\" || args.description.trim().length === 0) {\n args.description = \"Invoice\";\n }\n return client.createInvoice(args);\n },\n\n run_payroll: async (args, client) => client.runPayroll(args),\n submit_payment: async (args, client) => client.submitPayment(args),\n\n open_bank_account: async (args, client) => {\n const body: Record<string, unknown> = { entity_id: args.entity_id };\n body.bank_name = args.bank_name ?? args.institution_name ?? \"Mercury\";\n return client.openBankAccount(body);\n },\n\n reconcile: async (args, client) => client.reconcileLedger(args),\n};\n\nconst complianceActions: Record<string, ToolHandler> = {\n file_tax: async (args, client) => client.fileTaxDocument(args),\n track_deadline: async (args, client) => client.trackDeadline(args),\n classify_contractor: async (args, client) => client.classifyContractor(args),\n generate_contract: async (args, client) => {\n const data: Record<string, unknown> = {\n entity_id: requiredString(args, \"entity_id\"),\n template_type: requiredString(args, \"template_type\"),\n counterparty_name: args.counterparty_name ?? args.counterparty ?? \"\",\n effective_date: args.effective_date ?? new Date().toISOString().slice(0, 10),\n };\n if (args.parameters) data.parameters = args.parameters;\n return client.generateContract(data);\n },\n};\n\nconst documentActions: Record<string, ToolHandler> = {\n signing_link: async (args, client) => client.getSigningLink(args.document_id as string),\n\n signer_link: async (args, client) => {\n const result = await client.getSignerToken(args.obligation_id as string);\n const token = result.token as string ?? \"\";\n const obligationId = args.obligation_id as string;\n const humansBase = client.apiUrl.replace(\"://api.\", \"://humans.\");\n return {\n signer_url: `${humansBase}/human/${obligationId}?token=${token}`,\n obligation_id: obligationId,\n expires_in_seconds: result.expires_in ?? 900,\n message: \"Share this link with the signer. Link expires in 15 minutes.\",\n };\n },\n\n download_link: async (args, client) => {\n const docId = args.document_id as string;\n try {\n const resp = await fetch(`${client.apiUrl}/v1/documents/${docId}/request-copy`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${client.apiKey}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email: \"owner@workspace\" }),\n });\n if (!resp.ok) throw new Error(\"request-copy failed\");\n const result = await resp.json() as Record<string, string>;\n let downloadUrl = result.download_url ?? \"\";\n if (downloadUrl.startsWith(\"/\")) downloadUrl = client.apiUrl + downloadUrl;\n return { document_id: docId, download_url: downloadUrl, expires_in: \"24 hours\" };\n } catch {\n return {\n document_id: docId,\n download_url: `${client.apiUrl}/v1/documents/${docId}/pdf`,\n note: \"Use your API key to authenticate the download.\",\n };\n }\n },\n\n preview_pdf: async (args, client) => {\n const entityId = args.entity_id as string;\n const documentId = args.document_id as string;\n const qs = new URLSearchParams({ entity_id: entityId, document_id: documentId }).toString();\n return {\n entity_id: entityId,\n document_id: documentId,\n download_url: `${client.apiUrl}/v1/documents/preview/pdf?${qs}`,\n note: \"Use your API key to authenticate the download.\",\n };\n },\n};\n\nconst checklistActions: Record<string, ToolHandler> = {\n get: async (_args, _client, ctx) => {\n const path = join(ctx.dataDir, \"checklist.md\");\n if (existsSync(path)) return { checklist: readFileSync(path, \"utf-8\") };\n return { checklist: null, message: \"No checklist yet.\" };\n },\n\n update: async (args, _client, ctx) => {\n const path = join(ctx.dataDir, \"checklist.md\");\n mkdirSync(ctx.dataDir, { recursive: true });\n writeFileSync(path, args.checklist as string);\n return { status: \"updated\", checklist: args.checklist };\n },\n};\n\nconst agentActions: Record<string, ToolHandler> = {\n list: async (_args, client) => client.listAgents(),\n create: async (args, client) => client.createAgent(args),\n message: async (args, client) => client.sendAgentMessage(args.agent_id as string, (args.message ?? args.body) as string),\n update: async (args, client) => client.updateAgent(args.agent_id as string, args),\n add_skill: async (args, client) => client.addAgentSkill(args.agent_id as string, args),\n};\n\n// ---------------------------------------------------------------------------\n// Dispatch table: consolidated tool name → action sub-handlers\n// ---------------------------------------------------------------------------\n\nconst TOOL_DISPATCH: Record<string, Record<string, ToolHandler>> = {\n workspace: workspaceActions,\n entity: entityActions,\n equity: equityActions,\n valuation: valuationActions,\n meeting: meetingActions,\n finance: financeActions,\n compliance: complianceActions,\n document: documentActions,\n checklist: checklistActions,\n agent: agentActions,\n};\n\n// Tool definitions are generated from the backend OpenAPI spec.\n// Regenerate: make generate-tools\nexport const TOOL_DEFINITIONS: Record<string, unknown>[] = GENERATED_TOOL_DEFINITIONS;\n\n// Actions that are read-only (no user confirmation needed)\nconst READ_ONLY_ACTIONS = new Set([\n \"workspace:status\",\n \"workspace:list_entities\",\n \"workspace:obligations\",\n \"workspace:billing\",\n \"entity:get_cap_table\",\n \"entity:list_documents\",\n \"entity:list_safe_notes\",\n \"document:signing_link\",\n \"document:signer_link\",\n \"document:download_link\",\n \"document:preview_pdf\",\n \"checklist:get\",\n \"meeting:list_items\",\n \"meeting:list_votes\",\n \"agent:list\",\n]);\n\nexport function isWriteTool(name: string, args?: Record<string, unknown>): boolean {\n if (args && typeof args.action === \"string\") {\n return !READ_ONLY_ACTIONS.has(`${name}:${args.action}`);\n }\n // Fallback: if no action provided, assume write\n return true;\n}\n\nexport async function executeTool(\n name: string,\n args: Record<string, unknown>,\n client: CorpAPIClient,\n ctx: ToolContext,\n): Promise<string> {\n const dispatch = TOOL_DISPATCH[name];\n if (!dispatch) return JSON.stringify({ error: `Unknown tool: ${name}` });\n\n const action = args.action as string;\n if (!action) return JSON.stringify({ error: `Missing required field: action` });\n\n const handler = dispatch[action];\n if (!handler) return JSON.stringify({ error: `Unknown action \"${action}\" for tool \"${name}\"` });\n\n try {\n const result = await handler(args, client, ctx);\n return JSON.stringify(result, null, 0);\n } catch (err) {\n return JSON.stringify({ error: String(err) });\n }\n}\n","// AUTO-GENERATED from backend OpenAPI spec — do not edit by hand.\n// Regenerate: make generate-tools\n\nexport const GENERATED_TOOL_DEFINITIONS: Record<string, unknown>[] = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"workspace\",\n \"description\": \"Workspace-level queries. Actions: status (get workspace summary), list_entities (list all entities), obligations (list obligations, optional tier filter), billing (get billing status and plans).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"status\", \"list_entities\", \"obligations\", \"billing\"]\n },\n \"tier\": {\n \"type\": \"string\",\n \"description\": \"obligations: filter by urgency tier\"\n }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"entity\",\n \"description\": \"Entity reads and lifecycle. Actions: get_cap_table (entity_id), list_documents (entity_id), list_safe_notes (entity_id), form (entity_type + entity_name + jurisdiction + members — legacy one-shot formation), create (entity_type + entity_name — step 1 of staged formation), add_founder (entity_id + name + email + role + ownership_pct — step 2), finalize (entity_id — step 3, generates docs + cap table), convert (entity_id + target_type), dissolve (entity_id + reason).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"get_cap_table\", \"list_documents\", \"list_safe_notes\", \"form\", \"create\", \"add_founder\", \"finalize\", \"convert\", \"dissolve\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"entity_type\": { \"type\": \"string\", \"enum\": [\"llc\", \"c_corp\"] },\n \"entity_name\": { \"type\": \"string\" },\n \"jurisdiction\": { \"type\": \"string\", \"description\": \"e.g. US-DE, US-WY. Defaults to US-WY for LLC, US-DE for corporation.\" },\n \"fiscal_year_end\": { \"type\": \"string\", \"description\": \"form: fiscal year end e.g. '12-31'\" },\n \"s_corp_election\": { \"type\": \"boolean\", \"description\": \"form: elect S-Corp tax treatment\" },\n \"transfer_restrictions\": { \"type\": \"boolean\", \"description\": \"form: include transfer restrictions in bylaws (corp)\" },\n \"right_of_first_refusal\": { \"type\": \"boolean\", \"description\": \"form: include ROFR in bylaws (corp)\" },\n \"company_address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": { \"type\": \"string\" },\n \"street2\": { \"type\": \"string\" },\n \"city\": { \"type\": \"string\" },\n \"state\": { \"type\": \"string\" },\n \"zip\": { \"type\": \"string\" }\n },\n \"required\": [\"street\", \"city\", \"state\", \"zip\"]\n },\n \"members\": {\n \"type\": \"array\",\n \"description\": \"form: founding members array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"investor_type\": { \"type\": \"string\", \"enum\": [\"natural_person\", \"agent\", \"entity\"] },\n \"email\": { \"type\": \"string\" },\n \"agent_id\": { \"type\": \"string\" },\n \"entity_id\": { \"type\": \"string\" },\n \"ownership_pct\": { \"type\": \"number\" },\n \"membership_units\": { \"type\": \"integer\" },\n \"share_count\": { \"type\": \"integer\" },\n \"share_class\": { \"type\": \"string\" },\n \"role\": { \"type\": \"string\", \"enum\": [\"director\", \"officer\", \"manager\", \"member\", \"chair\"] },\n \"officer_title\": { \"type\": \"string\", \"enum\": [\"ceo\", \"cfo\", \"secretary\", \"president\", \"vp\", \"other\"] },\n \"shares_purchased\": { \"type\": \"integer\" },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": { \"type\": \"string\" },\n \"street2\": { \"type\": \"string\" },\n \"city\": { \"type\": \"string\" },\n \"state\": { \"type\": \"string\" },\n \"zip\": { \"type\": \"string\" }\n }\n },\n \"vesting\": {\n \"type\": \"object\",\n \"properties\": {\n \"total_months\": { \"type\": \"integer\" },\n \"cliff_months\": { \"type\": \"integer\" },\n \"acceleration\": { \"type\": \"string\", \"enum\": [\"single_trigger\", \"double_trigger\"] }\n }\n },\n \"ip_description\": { \"type\": \"string\" },\n \"is_incorporator\": { \"type\": \"boolean\" }\n },\n \"required\": [\"name\", \"investor_type\"]\n }\n },\n \"name\": { \"type\": \"string\", \"description\": \"add_founder: full legal name\" },\n \"email\": { \"type\": \"string\", \"description\": \"add_founder: email address\" },\n \"role\": { \"type\": \"string\", \"enum\": [\"director\", \"officer\", \"manager\", \"member\", \"chair\"], \"description\": \"add_founder: role\" },\n \"ownership_pct\": { \"type\": \"number\", \"description\": \"add_founder: ownership percentage (e.g. 50 for 50%)\" },\n \"officer_title\": { \"type\": \"string\", \"enum\": [\"ceo\", \"cfo\", \"secretary\", \"president\", \"vp\", \"other\"], \"description\": \"add_founder: officer title (corp only)\" },\n \"is_incorporator\": { \"type\": \"boolean\", \"description\": \"add_founder: is sole incorporator (corp only)\" },\n \"target_type\": { \"type\": \"string\", \"enum\": [\"llc\", \"c_corp\"], \"description\": \"convert: target entity type\" },\n \"new_jurisdiction\": { \"type\": \"string\", \"description\": \"convert: target jurisdiction\" },\n \"reason\": { \"type\": \"string\", \"description\": \"dissolve: dissolution reason\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"dissolve: effective date\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"equity\",\n \"description\": \"Equity and cap table operations. Actions: start_round (entity_id + name + issuer_legal_entity_id — step 1), add_security (round_id + instrument_id + quantity + recipient_name — step 2), issue_round (round_id — step 3, closes round + creates board agenda item), issue (entity_id + grant_type + shares + recipient_name — legacy single grant), issue_safe (entity_id + investor_name + principal_amount_cents + safe_type + valuation_cap_cents), transfer (entity_id + from_holder + to_holder + shares + skip_governance_review=true — bypasses governance), distribution (entity_id + total_amount_cents).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"start_round\", \"add_security\", \"issue_round\", \"issue\", \"issue_safe\", \"transfer\", \"distribution\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"name\": { \"type\": \"string\", \"description\": \"start_round: round name (e.g. 'Seed Round')\" },\n \"issuer_legal_entity_id\": { \"type\": \"string\", \"description\": \"start_round: from cap table\" },\n \"pre_money_cents\": { \"type\": \"integer\", \"description\": \"start_round: pre-money valuation in cents\" },\n \"round_price_cents\": { \"type\": \"integer\", \"description\": \"start_round: price per share in cents\" },\n \"target_raise_cents\": { \"type\": \"integer\", \"description\": \"start_round: target raise in cents\" },\n \"round_id\": { \"type\": \"string\", \"description\": \"add_security/issue_round: round ID\" },\n \"instrument_id\": { \"type\": \"string\", \"description\": \"add_security: instrument ID from cap table\" },\n \"quantity\": { \"type\": \"integer\", \"description\": \"add_security: number of shares/units\" },\n \"recipient_name\": { \"type\": \"string\", \"description\": \"add_security/issue: recipient name\" },\n \"holder_id\": { \"type\": \"string\", \"description\": \"add_security: existing holder ID\" },\n \"email\": { \"type\": \"string\", \"description\": \"add_security: recipient email\" },\n \"principal_cents\": { \"type\": \"integer\", \"description\": \"add_security: investment amount in cents\" },\n \"grant_type\": { \"type\": \"string\", \"description\": \"issue/add_security: e.g. common, preferred, option\" },\n \"shares\": { \"type\": \"integer\", \"description\": \"issue/transfer: number of shares\" },\n \"vesting_schedule\": { \"type\": \"string\", \"description\": \"issue: vesting schedule\" },\n \"investor_name\": { \"type\": \"string\", \"description\": \"issue_safe: investor name\" },\n \"principal_amount_cents\": { \"type\": \"integer\", \"description\": \"issue_safe: principal in cents\" },\n \"safe_type\": { \"type\": \"string\", \"description\": \"issue_safe: SAFE type\" },\n \"valuation_cap_cents\": { \"type\": \"integer\", \"description\": \"issue_safe: valuation cap in cents\" },\n \"from_holder\": { \"type\": \"string\", \"description\": \"transfer: source holder\" },\n \"to_holder\": { \"type\": \"string\", \"description\": \"transfer: destination holder\" },\n \"share_class_id\": { \"type\": \"string\", \"description\": \"transfer: share class\" },\n \"transfer_type\": { \"type\": \"string\", \"description\": \"transfer: transfer type\" },\n \"skip_governance_review\": { \"type\": \"boolean\", \"description\": \"transfer: must be true to confirm bypassing governance\" },\n \"total_amount_cents\": { \"type\": \"integer\", \"description\": \"distribution: total amount in cents\" },\n \"distribution_type\": { \"type\": \"string\", \"enum\": [\"dividend\", \"return\", \"liquidation\"], \"description\": \"distribution: type\" },\n \"description\": { \"type\": \"string\", \"description\": \"distribution: description (required)\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"valuation\",\n \"description\": \"Valuation lifecycle. Actions: create (entity_id + valuation_type + effective_date + methodology → Draft), submit (entity_id + valuation_id → PendingApproval, auto-creates board agenda item), approve (entity_id + valuation_id + optional resolution_id → Approved, auto-supersedes previous 409A).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"create\", \"submit\", \"approve\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"valuation_id\": { \"type\": \"string\", \"description\": \"submit/approve: valuation ID\" },\n \"valuation_type\": {\n \"type\": \"string\",\n \"enum\": [\"four_oh_nine_a\", \"llc_profits_interest\", \"fair_market_value\", \"gift\", \"estate\", \"other\"],\n \"description\": \"create: valuation type\"\n },\n \"effective_date\": { \"type\": \"string\", \"description\": \"create: effective date (ISO 8601)\" },\n \"methodology\": {\n \"type\": \"string\",\n \"enum\": [\"income\", \"market\", \"asset\", \"backsolve\", \"hybrid\", \"other\"],\n \"description\": \"create: valuation methodology\"\n },\n \"fmv_per_share_cents\": { \"type\": \"integer\", \"description\": \"create: FMV per share in cents\" },\n \"enterprise_value_cents\": { \"type\": \"integer\", \"description\": \"create: enterprise value in cents\" },\n \"hurdle_amount_cents\": { \"type\": \"integer\", \"description\": \"create: hurdle amount in cents\" },\n \"provider_contact_id\": { \"type\": \"string\", \"description\": \"create: valuation provider contact ID\" },\n \"report_document_id\": { \"type\": \"string\", \"description\": \"create: valuation report document ID\" },\n \"resolution_id\": { \"type\": \"string\", \"description\": \"approve: resolution ID from board vote\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"meeting\",\n \"description\": \"Governance meeting lifecycle. Actions: schedule (entity_id + body_id + meeting_type + title), notice (entity_id + meeting_id — Draft→Noticed), convene (entity_id + meeting_id + present_seat_ids — quorum check), vote (entity_id + meeting_id + agenda_item_id + voter_id + vote_value), resolve (entity_id + meeting_id + agenda_item_id + resolution_text — tally votes), finalize_item (entity_id + meeting_id + agenda_item_id + status), adjourn (entity_id + meeting_id), cancel (entity_id + meeting_id), consent (entity_id + body_id + title + description — written consent, no meeting), attach_document (entity_id + meeting_id + resolution_id + document_id), list_items (entity_id + meeting_id), list_votes (entity_id + meeting_id + agenda_item_id).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"schedule\", \"notice\", \"convene\", \"vote\", \"resolve\", \"finalize_item\", \"adjourn\", \"cancel\", \"consent\", \"attach_document\", \"list_items\", \"list_votes\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"meeting_id\": { \"type\": \"string\" },\n \"body_id\": { \"type\": \"string\", \"description\": \"schedule/consent: governance body ID\" },\n \"meeting_type\": { \"type\": \"string\", \"description\": \"schedule: meeting type\" },\n \"title\": { \"type\": \"string\", \"description\": \"schedule/consent: meeting title\" },\n \"description\": { \"type\": \"string\", \"description\": \"consent: description\" },\n \"scheduled_date\": { \"type\": \"string\", \"description\": \"schedule: date (ISO 8601)\" },\n \"agenda_item_titles\": { \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"description\": \"schedule: agenda items\" },\n \"present_seat_ids\": { \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"description\": \"convene: seat IDs present\" },\n \"agenda_item_id\": { \"type\": \"string\", \"description\": \"vote/resolve/finalize_item/list_votes: agenda item ID\" },\n \"voter_id\": { \"type\": \"string\", \"description\": \"vote: voter seat ID\" },\n \"vote_value\": { \"type\": \"string\", \"enum\": [\"for\", \"against\", \"abstain\", \"recusal\"], \"description\": \"vote: for, against, abstain, or recusal\" },\n \"resolution_text\": { \"type\": \"string\", \"description\": \"resolve: resolution text\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"resolve: optional effective date\" },\n \"status\": { \"type\": \"string\", \"enum\": [\"Voted\", \"Discussed\", \"Tabled\", \"Withdrawn\"], \"description\": \"finalize_item: Voted, Discussed, Tabled, or Withdrawn\" },\n \"resolution_id\": { \"type\": \"string\", \"description\": \"attach_document: resolution ID\" },\n \"document_id\": { \"type\": \"string\", \"description\": \"attach_document: document ID\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"finance\",\n \"description\": \"Financial operations. Actions: create_invoice (entity_id + customer_name + amount_cents + description + due_date), run_payroll (entity_id + pay_period_start + pay_period_end), submit_payment (entity_id + amount_cents + recipient), open_bank_account (entity_id + bank_name), reconcile (entity_id + start_date + end_date).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"create_invoice\", \"run_payroll\", \"submit_payment\", \"open_bank_account\", \"reconcile\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"customer_name\": { \"type\": \"string\", \"description\": \"create_invoice: customer name\" },\n \"amount_cents\": { \"type\": \"integer\", \"description\": \"create_invoice/submit_payment: amount in cents\" },\n \"description\": { \"type\": \"string\", \"description\": \"create_invoice/submit_payment: description\" },\n \"due_date\": { \"type\": \"string\", \"description\": \"create_invoice: due date\" },\n \"pay_period_start\": { \"type\": \"string\", \"description\": \"run_payroll: start date\" },\n \"pay_period_end\": { \"type\": \"string\", \"description\": \"run_payroll: end date\" },\n \"recipient\": { \"type\": \"string\", \"description\": \"submit_payment: recipient\" },\n \"bank_name\": { \"type\": \"string\", \"description\": \"open_bank_account: bank name (e.g. Mercury, SVB)\" },\n \"start_date\": { \"type\": \"string\", \"description\": \"reconcile: start date\" },\n \"end_date\": { \"type\": \"string\", \"description\": \"reconcile: end date\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"compliance\",\n \"description\": \"Compliance and legal operations. Actions: file_tax (entity_id + document_type + tax_year), track_deadline (entity_id + deadline_type + due_date + description), classify_contractor (entity_id + contractor_name + state + hours_per_week), generate_contract (entity_id + template_type + counterparty_name, optional effective_date).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"file_tax\", \"track_deadline\", \"classify_contractor\", \"generate_contract\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"document_type\": { \"type\": \"string\", \"description\": \"file_tax: tax document type\" },\n \"tax_year\": { \"type\": \"integer\", \"description\": \"file_tax: tax year\" },\n \"deadline_type\": { \"type\": \"string\", \"description\": \"track_deadline: deadline type\" },\n \"due_date\": { \"type\": \"string\", \"description\": \"track_deadline: due date\" },\n \"description\": { \"type\": \"string\", \"description\": \"track_deadline: description\" },\n \"recurrence\": { \"type\": \"string\", \"description\": \"track_deadline: recurrence\" },\n \"contractor_name\": { \"type\": \"string\", \"description\": \"classify_contractor: contractor name\" },\n \"state\": { \"type\": \"string\", \"description\": \"classify_contractor: state\" },\n \"hours_per_week\": { \"type\": \"integer\", \"description\": \"classify_contractor: hours/week\" },\n \"exclusive_client\": { \"type\": \"boolean\", \"description\": \"classify_contractor: exclusive?\" },\n \"duration_months\": { \"type\": \"integer\", \"description\": \"classify_contractor: duration\" },\n \"provides_tools\": { \"type\": \"boolean\", \"description\": \"classify_contractor: provides own tools?\" },\n \"template_type\": { \"type\": \"string\", \"enum\": [\"consulting_agreement\", \"employment_offer\", \"contractor_agreement\", \"nda\", \"custom\"], \"description\": \"generate_contract: template type\" },\n \"counterparty_name\": { \"type\": \"string\", \"description\": \"generate_contract: counterparty name\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"generate_contract: effective date (ISO 8601, defaults to today)\" },\n \"parameters\": { \"type\": \"object\", \"description\": \"generate_contract: additional template parameters\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"document\",\n \"description\": \"Document access, signing, and preview. Actions: signing_link (document_id — get signing link for a document), signer_link (obligation_id — generate signing link for a human obligation), download_link (document_id — get download link), preview_pdf (entity_id + document_id — preview a governance document as PDF without requiring a saved document).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"signing_link\", \"signer_link\", \"download_link\", \"preview_pdf\"]\n },\n \"document_id\": { \"type\": \"string\", \"description\": \"signing_link/download_link/preview_pdf: document ID (or AST definition ID for preview_pdf)\" },\n \"obligation_id\": { \"type\": \"string\", \"description\": \"signer_link: obligation ID\" },\n \"entity_id\": { \"type\": \"string\", \"description\": \"preview_pdf: entity whose profile to use for rendering\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"checklist\",\n \"description\": \"Workspace progress checklist. Actions: get (retrieve current checklist), update (checklist — set checklist content in markdown checkbox format).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"get\", \"update\"]\n },\n \"checklist\": { \"type\": \"string\", \"description\": \"update: markdown checklist content\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"agent\",\n \"description\": \"Agent management. Agents are for delegating recurring tasks — NOT for research or one-off questions. Requires a paid plan. Actions: list (list all agents), create (name + system_prompt), message (agent_id + message), update (agent_id + optional status), add_skill (agent_id + name + description).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"list\", \"create\", \"message\", \"update\", \"add_skill\"]\n },\n \"agent_id\": { \"type\": \"string\", \"description\": \"message/update/add_skill: agent ID\" },\n \"name\": { \"type\": \"string\", \"description\": \"create: agent name; add_skill: skill name\" },\n \"system_prompt\": { \"type\": \"string\", \"description\": \"create: agent system prompt\" },\n \"model\": { \"type\": \"string\", \"description\": \"create: model name\" },\n \"message\": { \"type\": \"string\", \"description\": \"message: message text\" },\n \"status\": { \"type\": \"string\", \"enum\": [\"active\", \"paused\", \"disabled\"], \"description\": \"update: new status\" },\n \"description\": { \"type\": \"string\", \"description\": \"add_skill: skill description\" },\n \"parameters\": { \"type\": \"object\", \"description\": \"add_skill: skill parameters schema\" }\n },\n \"required\": [\"action\"]\n }\n }\n }\n];\n","function centsToUsd(cents: number): string {\n return \"$\" + (cents / 100).toLocaleString(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 0 });\n}\n\nexport function describeToolCall(name: string, args: Record<string, unknown>): string {\n const a = { ...args } as Record<string, unknown>;\n for (const k of [\"amount_cents\", \"principal_amount_cents\", \"total_amount_cents\", \"valuation_cap_cents\"]) {\n if (k in a) {\n try { a._amount = centsToUsd(Number(a[k])); } catch { a._amount = String(a[k]); }\n }\n }\n a._amount ??= \"?\";\n a.institution_name ??= \"Mercury\";\n a.payment_method ??= \"ach\";\n\n const action = a.action as string | undefined;\n const key = action ? `${name}:${action}` : name;\n\n const fmts: Record<string, string> = {\n // workspace\n \"workspace:status\": \"Get workspace status\",\n \"workspace:list_entities\": \"List all entities\",\n \"workspace:obligations\": \"List obligations\",\n \"workspace:billing\": \"Get billing status\",\n\n // entity\n \"entity:get_cap_table\": \"Get cap table\",\n \"entity:list_documents\": \"List documents\",\n \"entity:list_safe_notes\": \"List SAFE notes\",\n \"entity:create\": 'Create pending {entity_type} named \"{entity_name}\"',\n \"entity:add_founder\": 'Add founder \"{name}\" ({role}, {ownership_pct}%)',\n \"entity:finalize\": \"Finalize formation and generate documents + cap table\",\n \"entity:form\": 'Form a new {entity_type} named \"{entity_name}\" in {jurisdiction}',\n \"entity:convert\": \"Convert entity to {new_entity_type}\",\n \"entity:dissolve\": \"Dissolve entity — {reason}\",\n\n // equity\n \"equity:start_round\": 'Start equity round \"{name}\"',\n \"equity:add_security\": \"Add {quantity} shares to {recipient_name} in round\",\n \"equity:issue_round\": \"Issue all securities and close the round\",\n \"equity:issue\": \"Issue {shares} {grant_type} shares to {recipient_name}\",\n \"equity:issue_safe\": \"Issue SAFE note to {investor_name} for {_amount}\",\n \"equity:transfer\": \"Direct transfer {shares} shares (bypass governance)\",\n \"equity:distribution\": \"Calculate {distribution_type} distribution of {_amount}\",\n\n // valuation\n \"valuation:create\": \"Create {valuation_type} valuation effective {effective_date}\",\n \"valuation:submit\": \"Submit valuation for board approval\",\n \"valuation:approve\": \"Approve valuation\",\n\n // meeting\n \"meeting:schedule\": 'Schedule {meeting_type} meeting: \"{title}\"',\n \"meeting:notice\": \"Send notice for meeting\",\n \"meeting:convene\": \"Convene meeting\",\n \"meeting:vote\": \"Cast {vote_value} vote\",\n \"meeting:resolve\": \"Compute resolution for agenda item\",\n \"meeting:finalize_item\": \"Finalize agenda item to {status}\",\n \"meeting:adjourn\": \"Adjourn meeting\",\n \"meeting:cancel\": \"Cancel meeting\",\n \"meeting:consent\": 'Create written consent: \"{title}\"',\n \"meeting:attach_document\": \"Attach document to resolution\",\n \"meeting:list_items\": \"List agenda items for meeting\",\n \"meeting:list_votes\": \"List votes on agenda item\",\n\n // finance\n \"finance:create_invoice\": \"Create invoice for {customer_name} — {_amount}\",\n \"finance:run_payroll\": \"Run payroll for {pay_period_start} to {pay_period_end}\",\n \"finance:submit_payment\": \"Submit {_amount} payment to {recipient} via {payment_method}\",\n \"finance:open_bank_account\": \"Open bank account at {institution_name}\",\n \"finance:reconcile\": \"Reconcile ledger from {start_date} to {end_date}\",\n\n // compliance\n \"compliance:file_tax\": \"File {document_type} for tax year {tax_year}\",\n \"compliance:track_deadline\": \"Track {deadline_type} deadline — {description}\",\n \"compliance:classify_contractor\": \"Classify contractor {contractor_name} in {state}\",\n \"compliance:generate_contract\": \"Generate {template_type} contract for {counterparty_name}\",\n\n // document\n \"document:signing_link\": \"Get signing link for document\",\n \"document:signer_link\": \"Generate signer link for obligation\",\n \"document:download_link\": \"Get download link for document\",\n \"document:preview_pdf\": \"Preview document PDF for {document_id}\",\n\n // checklist\n \"checklist:get\": \"Get workspace checklist\",\n \"checklist:update\": \"Update workspace checklist\",\n\n // agent\n \"agent:list\": \"List agents\",\n \"agent:create\": 'Create agent \"{name}\"',\n \"agent:message\": \"Send message to agent\",\n \"agent:update\": \"Update agent configuration\",\n \"agent:add_skill\": 'Add skill \"{skill_name}\" to agent',\n };\n\n const fmt = fmts[key];\n if (fmt) {\n try {\n return fmt.replace(/\\{(\\w+)\\}/g, (_, k: string) => String(a[k] ?? \"?\"));\n } catch { /* fall through */ }\n }\n return action ? `${name} → ${action}` : name.replace(/_/g, \" \");\n}\n","/**\n * System prompt base and config formatter.\n */\n\nexport const SYSTEM_PROMPT_BASE = `You are a corporate governance assistant for TheCorporation, an agentic corporate governance platform.\n\n## Context\n{context}\n\n## Tools\nYou have 10 tools, each with an \\`action\\` parameter that selects the operation:\n\n| Tool | Actions |\n|------|---------|\n| **workspace** | status, list_entities, obligations, billing |\n| **entity** | get_cap_table, list_documents, list_safe_notes, form, create, add_founder, finalize, convert, dissolve |\n| **equity** | start_round, add_security, issue_round, issue, issue_safe, transfer, distribution |\n| **valuation** | create, submit, approve |\n| **meeting** | schedule, notice, convene, vote, resolve, finalize_item, adjourn, cancel, consent, attach_document, list_items, list_votes |\n| **finance** | create_invoice, run_payroll, submit_payment, open_bank_account, reconcile |\n| **compliance** | file_tax, track_deadline, classify_contractor, generate_contract |\n| **document** | signing_link, signer_link, download_link |\n| **checklist** | get, update |\n| **agent** | list, create, message, update, add_skill |\n\n## Rules\n- All monetary values are in integer cents ($1,000 = 100000).\n- Be concise and helpful.\n- **You MUST confirm with the user before calling ANY write action.** Describe what you are about to do and wait for explicit approval. Never execute tools speculatively or \"on behalf of\" the user without their go-ahead.\n- Don't ask for info available in platform config — use the correct values automatically.\n- If only one option exists for a field, use it without asking.\n- Don't make up data — only present what the tools return.\n- If a tool returns an error, explain it simply without exposing raw error details.\n- NEVER create an agent to answer a question you can answer yourself. You are the assistant — answer questions directly using your knowledge and the read tools.\n\n## Agent Rules\n- Agents are for **delegating recurring corporate operations tasks** that the user explicitly requests — e.g. \"process incoming invoices\", \"monitor compliance deadlines\", \"handle payroll every two weeks\".\n- Agents are NOT for research, answering questions, or one-off lookups. If the user asks a question, YOU answer it.\n- NEVER proactively suggest or create an agent unless the user specifically asks for one.\n- Agent tools require a paid plan.\n\n## Entity Formation Rules\n- **Prefer the staged formation flow** over \\`entity action=form\\`:\n 1. \\`entity action=create\\` — type + name → returns \\`entity_id\\`\n 2. \\`entity action=add_founder\\` — add each founder one at a time (name, email, role, ownership_pct)\n 3. \\`entity action=finalize\\` — generates documents + cap table\n- When using \\`entity action=form\\` (legacy), you MUST ask about all founding members and their ownership allocations BEFORE calling it.\n- For LLCs, ownership percentages must total 100%.\n\n## Equity Round Rules\n- **Prefer the staged round flow** for issuing equity to multiple holders:\n 1. \\`equity action=start_round\\` — entity_id + name + issuer_legal_entity_id → returns \\`round_id\\`\n 2. \\`equity action=add_security\\` — add each holder's shares one at a time (round_id, instrument_id, quantity, recipient_name, plus holder_id or email)\n 3. \\`equity action=issue_round\\` — creates positions for all pending securities, closes the round, and auto-creates a board meeting agenda item for approval (or adds to an existing pending meeting)\n 4. Complete the board meeting lifecycle (notice → convene → vote → resolve → finalize → adjourn) to formally approve the round\n- The entity must already have a cap table with holders and instruments set up.\n- Use \\`entity action=get_cap_table\\` to look up holder IDs, instrument IDs, and the issuer legal entity ID before starting.\n- \\`equity action=add_security\\` can resolve recipients by \\`holder_id\\`, \\`email\\`, or auto-create from \\`recipient_name\\`.\n\n## Share Transfer Rules\n- **Prefer the transfer workflow** for share transfers — it includes bylaws review, ROFR, board approval, document generation, and signatures.\n- \\`equity action=transfer\\` is a direct bypass that skips all governance. It requires \\`skip_governance_review: true\\` to confirm the caller intentionally wants to skip the workflow. Only use it for corrective entries or when the user explicitly requests skipping governance.\n\n## Valuation Rules\n- To create and approve a 409A valuation:\n 1. \\`valuation action=create\\` — type=four_oh_nine_a + effective_date + methodology + fmv_per_share_cents → valuation_id (Draft)\n 2. \\`valuation action=submit\\` — Draft → PendingApproval; auto-creates board meeting agenda item (or adds to existing pending meeting)\n 3. Complete the board meeting lifecycle (notice → convene → vote → resolve → finalize → adjourn)\n 4. \\`valuation action=approve\\` — PendingApproval → Approved; pass resolution_id from the board vote\n- 409A valuations auto-expire after 365 days from effective_date\n- When a new 409A is approved, any previous approved 409A is auto-superseded\n\n## Governance Meeting Rules\n- Full meeting lifecycle:\n 1. \\`meeting action=schedule\\` — entity_id + body_id + meeting_type + title + agenda_item_titles → meeting_id\n 2. \\`meeting action=notice\\` — Draft → Noticed\n 3. \\`meeting action=convene\\` — present_seat_ids → quorum check → Noticed → Convened\n 4. \\`meeting action=vote\\` — vote on each agenda item (requires Convened + quorum met)\n 5. \\`meeting action=resolve\\` — tally votes → create Resolution\n 6. \\`meeting action=finalize_item\\` — mark item as Voted (requires resolution), Discussed, Tabled, or Withdrawn\n 7. \\`meeting action=adjourn\\` — Convened → Adjourned\n- For written consent (no physical meeting): use \\`meeting action=consent\\` — auto-convened, skip notice/convene\n- Use \\`meeting action=list_items\\` to get agenda_item_ids after scheduling\n- Use \\`entity action=get_cap_table\\` or governance read tools to look up body_id and seat holder IDs\n- \\`meeting action=cancel\\` works from Draft or Noticed status only\n\n## Document Signing Rules\n- You CANNOT sign documents on behalf of users. Signing is a human action.\n- Use \\`document action=signing_link\\` to generate a signing URL for a document.\n- Present the signing link so users can open it and sign themselves.\n- NEVER attempt to sign, execute, or complete signature actions automatically.\n- The \\`document action=signing_link\\` tool does NOT sign anything — it only returns a URL.\n\n## User Journey\nAfter completing any action, ALWAYS present the logical next step(s) as a\nnumbered list. The user should never wonder \"what now?\" — guide them forward.\n\nAfter entity formation (staged or legacy):\n1. The \\`entity action=finalize\\` (or \\`entity action=form\\`) response includes a \\`document_ids\\` array. These documents are created immediately — they are NEVER \"still being generated\" or delayed.\n2. Immediately call \\`document action=signing_link\\` for each document ID in the response to get signing URLs.\n3. Present the signing links to the user right away. Do NOT tell the user to \"check back later\" or that documents are \"being prepared\" — they already exist.\n4. Then: \"Documents signed! Next: apply for an EIN, open a bank account, or issue equity.\"\n\nAfter document generation:\n1. Present signing links immediately — don't wait for the user to ask.\n2. Use the document IDs from the tool response — do NOT call \\`entity action=list_documents\\` to re-fetch them.\n\nAfter signing:\n1. \"Documents are signed! Next: file for EIN, open a bank account, or add team members.\"\n\nAfter equity issuance:\n1. \"Equity issued! Next: generate the stock certificate for signing, or issue more grants.\"\n\nGeneral pattern:\n- Always end with 1-2 concrete next actions the user can take.\n- Phrase them as questions or suggestions: \"Would you like to [next step]?\"\n- If there are signing obligations, proactively generate and present the signing links.\n- Never just say \"done\" — always show what comes next.\n\nAfter major actions, use \\`checklist action=update\\` to track progress. Use markdown checkbox\nformat (- [x] / - [ ]). Call \\`checklist action=get\\` first to see current state, then\nupdate with checked-off items. This helps users see where they are.\n\n{extra_sections}`;\n\ninterface ConfigItem {\n value: string;\n label?: string;\n}\n\nexport function formatConfigSection(cfgData: Record<string, unknown>): string {\n const lines: string[] = [];\n\n const entityTypes = cfgData.entity_types as ConfigItem[] | undefined;\n if (entityTypes?.length) {\n const vals = entityTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Entity types: ${vals}`);\n }\n\n const jurisdictions = cfgData.jurisdictions as Record<string, ConfigItem[]> | undefined;\n if (jurisdictions) {\n for (const [etype, jurs] of Object.entries(jurisdictions)) {\n const jurVals = jurs.map((j) => `${j.label} (${j.value})`).join(\", \");\n lines.push(`Jurisdictions for ${etype}: ${jurVals}`);\n }\n }\n\n const invTypes = cfgData.investor_types as ConfigItem[] | undefined;\n if (invTypes?.length) {\n const vals = invTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Investor types: ${vals}`);\n }\n\n const workers = cfgData.worker_classifications as ConfigItem[] | undefined;\n if (workers?.length) {\n const vals = workers.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Worker classifications: ${vals}`);\n }\n\n const vesting = cfgData.vesting_schedules as ConfigItem[] | undefined;\n if (vesting?.length) {\n const vals = vesting.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Vesting schedules: ${vals}`);\n }\n\n const safeTypes = cfgData.safe_types as ConfigItem[] | undefined;\n if (safeTypes?.length) {\n const vals = safeTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`SAFE types: ${vals}`);\n }\n\n const compTypes = cfgData.compensation_types as ConfigItem[] | undefined;\n if (compTypes?.length) {\n const vals = compTypes.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Compensation types: ${vals}`);\n }\n\n const bodyTypes = cfgData.governance_body_types as ConfigItem[] | undefined;\n if (bodyTypes?.length) {\n const vals = bodyTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Governance body types: ${vals}`);\n }\n\n const quorum = cfgData.quorum_rules as ConfigItem[] | undefined;\n if (quorum?.length) {\n const vals = quorum.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Quorum rules: ${vals}`);\n }\n\n const voting = cfgData.voting_methods as ConfigItem[] | undefined;\n if (voting?.length) {\n const vals = voting.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Voting methods: ${vals}`);\n }\n\n if (!lines.length) return \"\";\n\n const configYaml = lines.map((line) => `- ${line}`).join(\"\\n\");\n return (\n \"\\n## Platform Configuration\\n\" +\n \"The following are the ONLY valid values supported by this platform. \" +\n \"Do not offer or accept values outside these lists.\\n\\n\" +\n configYaml + \"\\n\"\n );\n}\n","/**\n * Tool registry and classification helpers.\n * Re-exports from existing modules + builds a registry from generated defs.\n */\n\nimport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\n\nexport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\nexport { isWriteTool } from \"./tools.js\";\nexport { describeToolCall } from \"./tool-descriptions.js\";\n\ninterface ToolFunction {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\ninterface ToolDef {\n type: string;\n function: ToolFunction;\n}\n\n/** Registry: tool name → function metadata (description + parameters). */\nexport const TOOL_REGISTRY: Record<string, ToolFunction> = {};\n\nfor (const td of GENERATED_TOOL_DEFINITIONS as unknown as ToolDef[]) {\n TOOL_REGISTRY[td.function.name] = td.function;\n}\n\n/**\n * Read-only tool:action pairs that don't require user confirmation.\n * @deprecated Use isWriteTool(name, args) instead for action-aware checking.\n */\nexport const READ_ONLY_TOOLS = new Set([\n \"workspace\", \"checklist\",\n]);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/api-client.ts","../src/tools.ts","../src/tool-defs.generated.ts","../src/tool-descriptions.ts","../src/system-prompt.ts","../src/definitions.ts"],"sourcesContent":["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\";\n\nexport class SessionExpiredError extends Error {\n constructor() {\n super(\"Your API key is no longer valid. Run 'corp setup' to re-authenticate.\");\n this.name = \"SessionExpiredError\";\n }\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 return json.error || json.message || json.detail || text;\n } catch {\n return text;\n }\n } catch {\n return 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 throw new Error(`Provision failed: ${resp.status} ${resp.statusText} — ${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.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 url = `${this.apiUrl}${path}`;\n if (params) {\n const qs = new URLSearchParams(params).toString();\n if (qs) url += `?${qs}`;\n }\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.status === 401) throw new SessionExpiredError();\n if (!resp.ok) {\n const detail = await extractErrorMessage(resp);\n throw new Error(`${resp.status} ${resp.statusText} — ${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 // --- Workspace ---\n getStatus() { return this.get(`/v1/workspaces/${this.workspaceId}/status`) as Promise<ApiRecord>; }\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<ApiRecord[]>; }\n triggerDigest() { return this.post(\"/v1/digests/trigger\") as Promise<ApiRecord>; }\n getDigest(key: string) { return this.get(`/v1/digests/${key}`) as Promise<ApiRecord>; }\n\n // --- Entities ---\n listEntities() { return this.get(`/v1/workspaces/${this.workspaceId}/entities`) as Promise<ApiRecord[]>; }\n\n // --- Contacts ---\n listContacts(entityId: string) { return this.get(`/v1/entities/${entityId}/contacts`) as Promise<ApiRecord[]>; }\n getContact(id: string, entityId: string) { return this.get(`/v1/contacts/${id}`, { entity_id: entityId }) as Promise<ApiRecord>; }\n getContactProfile(id: string, entityId: string) { return this.get(`/v1/contacts/${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/${id}`, data) as Promise<ApiRecord>; }\n getNotificationPrefs(contactId: string) { return this.get(`/v1/contacts/${contactId}/notification-prefs`) as Promise<ApiRecord>; }\n updateNotificationPrefs(contactId: string, prefs: ApiRecord) { return this.patch(`/v1/contacts/${contactId}/notification-prefs`, prefs) as Promise<ApiRecord>; }\n\n // --- Cap Table ---\n getCapTable(entityId: string) { return this.get(`/v1/entities/${entityId}/cap-table`) as Promise<ApiRecord>; }\n /** Extract SAFE instruments from the cap table (no dedicated list endpoint). */\n async getSafeNotes(entityId: string): Promise<ApiRecord[]> {\n const ct = await this.getCapTable(entityId);\n const instruments = (ct.instruments ?? []) as ApiRecord[];\n const positions = (ct.positions ?? []) as ApiRecord[];\n const safeIds = new Set(instruments.filter((i) => String(i.kind).toLowerCase() === \"safe\").map((i) => i.instrument_id));\n if (safeIds.size === 0) return [];\n return positions.filter((p) => safeIds.has(p.instrument_id));\n }\n /** Extract transfer-workflow info (no dedicated list endpoint for share transfers). */\n async getShareTransfers(entityId: string): Promise<ApiRecord[]> {\n // No list endpoint exists; return empty with a hint.\n return [{ _note: \"Use transfer workflows: POST /v1/equity/transfer-workflows to initiate transfers.\", entity_id: entityId }];\n }\n getValuations(entityId: string) { return this.get(`/v1/entities/${entityId}/valuations`) as Promise<ApiRecord[]>; }\n getCurrent409a(entityId: string) { return this.get(`/v1/entities/${entityId}/current-409a`) as Promise<ApiRecord>; }\n createValuation(data: ApiRecord) { return this.post(\"/v1/valuations\", data) as Promise<ApiRecord>; }\n submitValuationForApproval(valuationId: string, entityId: string) {\n return this.post(`/v1/valuations/${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/${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/${roundId}/apply-terms`, data) as Promise<ApiRecord>;\n }\n boardApproveEquityRound(roundId: string, data: BoardApproveEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${roundId}/board-approve`, data) as Promise<EquityRoundResponse>;\n }\n acceptEquityRound(roundId: string, data: AcceptEquityRoundRequest) {\n return this.post(`/v1/equity/rounds/${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 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/${roundId}/securities`, data) as Promise<ApiRecord>; }\n issueRound(roundId: string, data: ApiRecord) { return this.post(`/v1/equity/rounds/${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/${intentId}/evaluate`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n authorizeIntent(intentId: string, entityId: string) {\n return this.postWithParams(`/v1/intents/${intentId}/authorize`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n\n // --- Governance ---\n listGovernanceBodies(entityId: string) { return this.get(`/v1/entities/${entityId}/governance-bodies`) as Promise<ApiRecord[]>; }\n getGovernanceSeats(bodyId: string, entityId: string) { return this.get(`/v1/governance-bodies/${bodyId}/seats`, { entity_id: entityId }) as Promise<ApiRecord[]>; }\n listMeetings(bodyId: string, entityId: string) { return this.get(`/v1/governance-bodies/${bodyId}/meetings`, { entity_id: entityId }) as Promise<ApiRecord[]>; }\n getMeetingResolutions(meetingId: string, entityId: string) { return this.get(`/v1/meetings/${meetingId}/resolutions`, { entity_id: entityId }) as Promise<ApiRecord[]>; }\n scheduleMeeting(data: ApiRecord) { return this.post(\"/v1/meetings\", data) as Promise<ApiRecord>; }\n conveneMeeting(meetingId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/convene`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n castVote(entityId: string, meetingId: string, itemId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/agenda-items/${itemId}/vote`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n sendNotice(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/notice`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n adjournMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/adjourn`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n cancelMeeting(meetingId: string, entityId: string) {\n return this.postWithParams(`/v1/meetings/${meetingId}/cancel`, {}, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n finalizeAgendaItem(meetingId: string, itemId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${meetingId}/agenda-items/${itemId}/finalize`, data) as Promise<ApiRecord>;\n }\n computeResolution(meetingId: string, itemId: string, entityId: string, data: ApiRecord) {\n return this.postWithParams(`/v1/meetings/${meetingId}/agenda-items/${itemId}/resolution`, data, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n attachResolutionDocument(meetingId: string, resolutionId: string, data: ApiRecord) {\n return this.post(`/v1/meetings/${meetingId}/resolutions/${resolutionId}/attach-document`, data) as Promise<ApiRecord>;\n }\n writtenConsent(data: ApiRecord) {\n return this.post(\"/v1/meetings/written-consent\", data) as Promise<ApiRecord>;\n }\n listAgendaItems(meetingId: string, entityId: string) {\n return this.get(`/v1/meetings/${meetingId}/agenda-items`, { entity_id: entityId }) as Promise<ApiRecord[]>;\n }\n listVotes(meetingId: string, itemId: string, entityId: string) {\n return this.get(`/v1/meetings/${meetingId}/agenda-items/${itemId}/votes`, { entity_id: entityId }) as Promise<ApiRecord[]>;\n }\n\n // --- Documents ---\n getEntityDocuments(entityId: string) { return this.get(`/v1/formations/${entityId}/documents`) as Promise<ApiRecord[]>; }\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/${documentId}`, { entity_id: entityId }) as Promise<ApiRecord>;\n }\n\n // --- Finance ---\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 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\n // --- Tax ---\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/${id}`) as Promise<ApiRecord>; }\n getFormationDocuments(id: string) { return this.get(`/v1/formations/${id}/documents`) as Promise<ApiRecord[]>; }\n createFormation(data: ApiRecord) { return this.post(\"/v1/formations\", data) as Promise<ApiRecord>; }\n createFormationWithCapTable(data: ApiRecord) { return this.post(\"/v1/formations/with-cap-table\", data) as Promise<ApiRecord>; }\n createPendingEntity(data: ApiRecord) { return this.post(\"/v1/formations/pending\", data) as Promise<ApiRecord>; }\n addFounder(entityId: string, data: ApiRecord) { return this.post(`/v1/formations/${entityId}/founders`, data) as Promise<ApiRecord>; }\n finalizeFormation(entityId: string) { return this.post(`/v1/formations/${entityId}/finalize`, {}) as Promise<ApiRecord>; }\n\n // --- Human obligations ---\n getHumanObligations() { return this.get(`/v1/workspaces/${this.workspaceId}/human-obligations`) as Promise<ApiRecord[]>; }\n getSignerToken(obligationId: string) { return this.post(`/v1/human-obligations/${obligationId}/signer-token`) as Promise<ApiRecord>; }\n\n // --- Demo ---\n seedDemo(name: string) { return this.post(\"/v1/demo/seed\", { name, workspace_id: this.workspaceId }) as Promise<ApiRecord>; }\n\n // --- Entities writes ---\n convertEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${entityId}/convert`, data) as Promise<ApiRecord>; }\n dissolveEntity(entityId: string, data: ApiRecord) { return this.post(`/v1/entities/${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/${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/${id}`, data) as Promise<ApiRecord>; }\n deleteAgent(id: string) { return this.patch(`/v1/agents/${id}`, { status: \"disabled\" }) as Promise<ApiRecord>; }\n sendAgentMessage(id: string, message: string) { return this.post(`/v1/agents/${id}/messages`, { message }) as Promise<ApiRecord>; }\n addAgentSkill(id: string, data: ApiRecord) { return this.post(`/v1/agents/${id}/skills`, data) as Promise<ApiRecord>; }\n listSupportedModels() { return this.get(\"/v1/models\") as Promise<ApiRecord[]>; }\n\n // --- Governance bodies ---\n createGovernanceBody(data: ApiRecord) { return this.post(\"/v1/governance-bodies\", data) as Promise<ApiRecord>; }\n createGovernanceSeat(bodyId: string, data: ApiRecord) { return this.post(`/v1/governance-bodies/${bodyId}/seats`, data) as Promise<ApiRecord>; }\n\n // --- API Keys ---\n listApiKeys() { return this.get(\"/v1/api-keys\", { workspace_id: this.workspaceId }) as Promise<ApiRecord[]>; }\n\n // --- Obligations ---\n assignObligation(obligationId: string, contactId: string) {\n return this.patch(`/v1/obligations/${obligationId}/assign`, { contact_id: contactId }) as Promise<ApiRecord>;\n }\n\n // --- Config ---\n getConfig() { return this.get(\"/v1/config\") as Promise<ApiRecord>; }\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 throw new Error(`${resp.status} ${resp.statusText} — ${detail}`);\n }\n return resp.json() as Promise<ApiRecord>;\n }\n}\n","import type { CorpAPIClient } from \"./api-client.js\";\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\n\nexport interface ToolContext {\n dataDir: string;\n onEntityFormed?: (entityId: string) => void;\n}\n\ntype ToolHandler = (args: Record<string, unknown>, client: CorpAPIClient, ctx: ToolContext) => Promise<unknown>;\n\nfunction requiredString(args: Record<string, unknown>, key: string): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Missing required field: ${key}`);\n }\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-handlers grouped by consolidated tool\n// ---------------------------------------------------------------------------\n\nconst workspaceActions: Record<string, ToolHandler> = {\n status: async (_args, client) => client.getStatus(),\n list_entities: async (_args, client) => client.listEntities(),\n obligations: async (args, client) => client.getObligations(args.tier as string | undefined),\n billing: async (_args, client) => {\n const [status, plans] = await Promise.all([client.getBillingStatus(), client.getBillingPlans()]);\n return { status, plans };\n },\n};\n\nconst entityActions: Record<string, ToolHandler> = {\n get_cap_table: async (args, client) => client.getCapTable(requiredString(args, \"entity_id\")),\n list_documents: async (args, client) => client.getEntityDocuments(requiredString(args, \"entity_id\")),\n list_safe_notes: async (args, client) => client.getSafeNotes(requiredString(args, \"entity_id\")),\n\n create: async (args, client) => {\n const entityType = args.entity_type as string;\n let jurisdiction = (args.jurisdiction as string) || \"\";\n if (!jurisdiction || jurisdiction.length === 2) {\n jurisdiction = entityType === \"llc\" ? \"US-WY\" : \"US-DE\";\n }\n return client.createPendingEntity({\n entity_type: entityType,\n legal_name: args.entity_name,\n jurisdiction,\n });\n },\n\n add_founder: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n let ownershipPct = args.ownership_pct as number | undefined;\n if (typeof ownershipPct === \"number\" && ownershipPct > 1) {\n ownershipPct = ownershipPct / 100;\n }\n return client.addFounder(entityId, {\n name: args.name,\n email: args.email,\n role: args.role,\n ownership_pct: ownershipPct,\n officer_title: args.officer_title,\n is_incorporator: args.is_incorporator,\n });\n },\n\n finalize: async (args, client, ctx) => {\n const entityId = requiredString(args, \"entity_id\");\n const result = await client.finalizeFormation(entityId);\n if (entityId && ctx.onEntityFormed) {\n ctx.onEntityFormed(entityId);\n }\n return result;\n },\n\n form: async (args, client, ctx) => {\n const entityType = args.entity_type as string;\n let jurisdiction = (args.jurisdiction as string) || \"\";\n if (!jurisdiction || jurisdiction.length === 2) {\n jurisdiction = entityType === \"llc\" ? \"US-WY\" : \"US-DE\";\n }\n const members = (args.members ?? []) as Record<string, unknown>[];\n if (!members.length) return { error: \"Members are required.\" };\n for (const m of members) {\n if (!m.investor_type) m.investor_type = \"natural_person\";\n if (typeof m.ownership_pct === \"number\" && (m.ownership_pct as number) > 1) {\n m.ownership_pct = (m.ownership_pct as number) / 100;\n }\n }\n const result = await client.createFormationWithCapTable({\n entity_type: entityType, legal_name: args.entity_name, jurisdiction,\n members, workspace_id: client.workspaceId,\n fiscal_year_end: args.fiscal_year_end,\n s_corp_election: args.s_corp_election,\n transfer_restrictions: args.transfer_restrictions,\n right_of_first_refusal: args.right_of_first_refusal,\n company_address: args.company_address,\n });\n const entityId = result.entity_id as string;\n if (entityId && ctx.onEntityFormed) {\n ctx.onEntityFormed(entityId);\n }\n return result;\n },\n\n convert: async (args, client) => {\n const body: Record<string, unknown> = { target_type: args.target_type ?? args.to_type ?? args.new_entity_type };\n if (args.new_jurisdiction) body.new_jurisdiction = args.new_jurisdiction;\n return client.convertEntity(requiredString(args, \"entity_id\"), body);\n },\n dissolve: async (args, client) => client.dissolveEntity(requiredString(args, \"entity_id\"), args),\n};\n\nconst equityActions: Record<string, ToolHandler> = {\n start_round: async (args, client) => client.startEquityRound(args),\n\n add_security: async (args, client) => {\n const roundId = requiredString(args, \"round_id\");\n return client.addRoundSecurity(roundId, args);\n },\n\n issue_round: async (args, client) => {\n const roundId = requiredString(args, \"round_id\");\n return client.issueRound(roundId, args);\n },\n\n issue: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n // Fetch cap table to auto-resolve issuer and instrument\n const capTable = await client.getCapTable(entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string;\n if (!issuerLegalEntityId) return { error: \"No issuer legal entity found. Has this entity been formed with a cap table?\" };\n\n const instruments = capTable.instruments as Array<{ instrument_id: string; kind: string; symbol: string }>;\n if (!instruments?.length) return { error: \"No instruments found on cap table.\" };\n\n let instrumentId = args.instrument_id as string | undefined;\n if (!instrumentId) {\n const grantType = (args.grant_type as string ?? \"\").toLowerCase();\n const match = instruments.find(\n (i) => i.kind.toLowerCase().includes(grantType) || i.symbol.toLowerCase().includes(grantType),\n ) ?? instruments.find((i) => i.kind.toLowerCase().includes(\"common\"));\n instrumentId = (match ?? instruments[0]).instrument_id;\n }\n\n const round = await client.startEquityRound({\n entity_id: entityId,\n name: `${args.grant_type ?? \"equity\"} grant — ${args.recipient_name ?? \"unknown\"}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n\n const securityData: Record<string, unknown> = {\n entity_id: entityId,\n instrument_id: instrumentId,\n quantity: args.shares ?? args.quantity,\n recipient_name: args.recipient_name,\n grant_type: args.grant_type,\n };\n if (args.email) securityData.email = args.email;\n await client.addRoundSecurity(roundId, securityData);\n\n return client.issueRound(roundId, { entity_id: entityId });\n },\n issue_safe: async (args, client) => {\n const entityId = requiredString(args, \"entity_id\");\n const capTable = await client.getCapTable(entityId);\n const issuerLegalEntityId = capTable.issuer_legal_entity_id as string;\n if (!issuerLegalEntityId) return { error: \"No issuer legal entity found.\" };\n\n const instruments = capTable.instruments as Array<{ instrument_id: string; kind: string; symbol: string }>;\n const safeInstrument = instruments?.find((i) => i.kind.toLowerCase() === \"safe\");\n if (!safeInstrument) return { error: \"No SAFE instrument found on cap table.\" };\n\n const principalCents = (args.principal_amount_cents ?? args.amount_cents ?? 0) as number;\n const round = await client.startEquityRound({\n entity_id: entityId,\n name: `SAFE — ${args.investor_name ?? \"investor\"}`,\n issuer_legal_entity_id: issuerLegalEntityId,\n });\n const roundId = (round.round_id ?? round.equity_round_id) as string;\n\n const securityData: Record<string, unknown> = {\n entity_id: entityId,\n instrument_id: safeInstrument.instrument_id,\n quantity: principalCents || 1,\n recipient_name: args.investor_name,\n principal_cents: principalCents,\n grant_type: args.safe_type ?? \"post_money\",\n };\n if (args.email) securityData.email = args.email;\n if (args.valuation_cap_cents) securityData.valuation_cap_cents = args.valuation_cap_cents;\n await client.addRoundSecurity(roundId, securityData);\n\n return client.issueRound(roundId, { entity_id: entityId });\n },\n\n transfer: async (args, client) => {\n if (args.skip_governance_review !== true) {\n return {\n error: \"Transfer blocked: governance review required. Use the transfer workflow (create_transfer_workflow → submit-review → record-board-approval → execute) for governed transfers. To bypass governance and record a direct transfer, pass skip_governance_review: true.\",\n };\n }\n return client.transferShares(args);\n },\n\n distribution: async (args, client) => client.calculateDistribution(args),\n};\n\nconst valuationActions: Record<string, ToolHandler> = {\n create: async (args, client) => client.createValuation(args),\n\n submit: async (args, client) =>\n client.submitValuationForApproval(\n requiredString(args, \"valuation_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n approve: async (args, client) =>\n client.approveValuation(\n requiredString(args, \"valuation_id\"),\n requiredString(args, \"entity_id\"),\n args.resolution_id as string | undefined,\n ),\n};\n\nconst meetingActions: Record<string, ToolHandler> = {\n schedule: async (args, client) => {\n const body: Record<string, unknown> = {\n entity_id: requiredString(args, \"entity_id\"),\n body_id: requiredString(args, \"body_id\"),\n meeting_type: requiredString(args, \"meeting_type\"),\n title: requiredString(args, \"title\"),\n };\n const scheduledDate = args.scheduled_date ?? args.proposed_date;\n if (typeof scheduledDate === \"string\" && scheduledDate.trim().length > 0) {\n body.scheduled_date = scheduledDate;\n }\n const agendaItems = args.agenda_item_titles ?? args.agenda_items;\n if (Array.isArray(agendaItems)) body.agenda_item_titles = agendaItems;\n return client.scheduleMeeting(body);\n },\n\n notice: async (args, client) => client.sendNotice(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n convene: async (args, client) => client.conveneMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n {\n present_seat_ids: Array.isArray(args.present_seat_ids) ? args.present_seat_ids : [],\n },\n ),\n\n vote: async (args, client) =>\n client.castVote(\n requiredString(args, \"entity_id\"),\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n {\n voter_id: requiredString(args, \"voter_id\"),\n vote_value: requiredString(args, \"vote_value\"),\n },\n ),\n\n resolve: async (args, client) => {\n const data: Record<string, unknown> = {\n resolution_text: requiredString(args, \"resolution_text\"),\n };\n if (typeof args.effective_date === \"string\") data.effective_date = args.effective_date;\n return client.computeResolution(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n requiredString(args, \"entity_id\"),\n data,\n );\n },\n\n finalize_item: async (args, client) => client.finalizeAgendaItem(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n {\n entity_id: requiredString(args, \"entity_id\"),\n status: requiredString(args, \"status\"),\n },\n ),\n\n adjourn: async (args, client) => client.adjournMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n cancel: async (args, client) => client.cancelMeeting(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n consent: async (args, client) => client.writtenConsent({\n entity_id: requiredString(args, \"entity_id\"),\n body_id: requiredString(args, \"body_id\"),\n title: requiredString(args, \"title\"),\n description: args.description as string ?? \"\",\n }),\n\n attach_document: async (args, client) => client.attachResolutionDocument(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"resolution_id\"),\n {\n entity_id: requiredString(args, \"entity_id\"),\n document_id: requiredString(args, \"document_id\"),\n },\n ),\n\n list_items: async (args, client) => client.listAgendaItems(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"entity_id\"),\n ),\n\n list_votes: async (args, client) => client.listVotes(\n requiredString(args, \"meeting_id\"),\n requiredString(args, \"agenda_item_id\"),\n requiredString(args, \"entity_id\"),\n ),\n};\n\nconst financeActions: Record<string, ToolHandler> = {\n create_invoice: async (args, client) => {\n if (!(\"amount_cents\" in args) && Array.isArray(args.line_items)) {\n args.amount_cents = (args.line_items as Record<string, number>[])\n .reduce((sum, item) => sum + (item.amount_cents ?? 0), 0);\n }\n if (!(\"amount_cents\" in args)) args.amount_cents = 0;\n if (!(\"description\" in args) || typeof args.description !== \"string\" || args.description.trim().length === 0) {\n args.description = \"Invoice\";\n }\n return client.createInvoice(args);\n },\n\n run_payroll: async (args, client) => client.runPayroll(args),\n submit_payment: async (args, client) => client.submitPayment(args),\n\n open_bank_account: async (args, client) => {\n const body: Record<string, unknown> = { entity_id: args.entity_id };\n body.bank_name = args.bank_name ?? args.institution_name ?? \"Mercury\";\n return client.openBankAccount(body);\n },\n\n reconcile: async (args, client) => client.reconcileLedger(args),\n};\n\nconst complianceActions: Record<string, ToolHandler> = {\n file_tax: async (args, client) => client.fileTaxDocument(args),\n track_deadline: async (args, client) => client.trackDeadline(args),\n classify_contractor: async (args, client) => client.classifyContractor(args),\n generate_contract: async (args, client) => {\n const data: Record<string, unknown> = {\n entity_id: requiredString(args, \"entity_id\"),\n template_type: requiredString(args, \"template_type\"),\n counterparty_name: args.counterparty_name ?? args.counterparty ?? \"\",\n effective_date: args.effective_date ?? new Date().toISOString().slice(0, 10),\n };\n if (args.parameters) data.parameters = args.parameters;\n return client.generateContract(data);\n },\n};\n\nconst documentActions: Record<string, ToolHandler> = {\n signing_link: async (args, client) => client.getSigningLink(args.document_id as string, requiredString(args, \"entity_id\")),\n\n signer_link: async (args, client) => {\n const result = await client.getSignerToken(args.obligation_id as string);\n const token = result.token as string ?? \"\";\n const obligationId = args.obligation_id as string;\n const humansBase = client.apiUrl.replace(\"://api.\", \"://humans.\");\n return {\n signer_url: `${humansBase}/human/${obligationId}?token=${token}`,\n obligation_id: obligationId,\n expires_in_seconds: result.expires_in ?? 900,\n message: \"Share this link with the signer. Link expires in 15 minutes.\",\n };\n },\n\n download_link: async (args, client) => {\n const docId = args.document_id as string;\n try {\n const resp = await fetch(`${client.apiUrl}/v1/documents/${docId}/request-copy`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${client.apiKey}`, \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email: \"owner@workspace\" }),\n });\n if (!resp.ok) throw new Error(\"request-copy failed\");\n const result = await resp.json() as Record<string, string>;\n let downloadUrl = result.download_url ?? \"\";\n if (downloadUrl.startsWith(\"/\")) downloadUrl = client.apiUrl + downloadUrl;\n return { document_id: docId, download_url: downloadUrl, expires_in: \"24 hours\" };\n } catch {\n return {\n document_id: docId,\n download_url: `${client.apiUrl}/v1/documents/${docId}/pdf`,\n note: \"Use your API key to authenticate the download.\",\n };\n }\n },\n\n preview_pdf: async (args, client) => {\n const entityId = args.entity_id as string;\n const documentId = args.document_id as string;\n const qs = new URLSearchParams({ entity_id: entityId, document_id: documentId }).toString();\n return {\n entity_id: entityId,\n document_id: documentId,\n download_url: `${client.apiUrl}/v1/documents/preview/pdf?${qs}`,\n note: \"Use your API key to authenticate the download.\",\n };\n },\n};\n\nconst checklistActions: Record<string, ToolHandler> = {\n get: async (_args, _client, ctx) => {\n const path = join(ctx.dataDir, \"checklist.md\");\n if (existsSync(path)) return { checklist: readFileSync(path, \"utf-8\") };\n return { checklist: null, message: \"No checklist yet.\" };\n },\n\n update: async (args, _client, ctx) => {\n const path = join(ctx.dataDir, \"checklist.md\");\n mkdirSync(ctx.dataDir, { recursive: true });\n writeFileSync(path, args.checklist as string);\n return { status: \"updated\", checklist: args.checklist };\n },\n};\n\nconst agentActions: Record<string, ToolHandler> = {\n list: async (_args, client) => client.listAgents(),\n create: async (args, client) => client.createAgent(args),\n message: async (args, client) => client.sendAgentMessage(args.agent_id as string, (args.message ?? args.body) as string),\n update: async (args, client) => client.updateAgent(args.agent_id as string, args),\n add_skill: async (args, client) => client.addAgentSkill(args.agent_id as string, args),\n};\n\n// ---------------------------------------------------------------------------\n// Dispatch table: consolidated tool name → action sub-handlers\n// ---------------------------------------------------------------------------\n\nconst TOOL_DISPATCH: Record<string, Record<string, ToolHandler>> = {\n workspace: workspaceActions,\n entity: entityActions,\n equity: equityActions,\n valuation: valuationActions,\n meeting: meetingActions,\n finance: financeActions,\n compliance: complianceActions,\n document: documentActions,\n checklist: checklistActions,\n agent: agentActions,\n};\n\n// Tool definitions are generated from the backend OpenAPI spec.\n// Regenerate: make generate-tools\nexport const TOOL_DEFINITIONS: Record<string, unknown>[] = GENERATED_TOOL_DEFINITIONS;\n\n// Actions that are read-only (no user confirmation needed)\nconst READ_ONLY_ACTIONS = new Set([\n \"workspace:status\",\n \"workspace:list_entities\",\n \"workspace:obligations\",\n \"workspace:billing\",\n \"entity:get_cap_table\",\n \"entity:list_documents\",\n \"entity:list_safe_notes\",\n \"document:signing_link\",\n \"document:signer_link\",\n \"document:download_link\",\n \"document:preview_pdf\",\n \"checklist:get\",\n \"meeting:list_items\",\n \"meeting:list_votes\",\n \"agent:list\",\n]);\n\nexport function isWriteTool(name: string, args?: Record<string, unknown>): boolean {\n if (args && typeof args.action === \"string\") {\n return !READ_ONLY_ACTIONS.has(`${name}:${args.action}`);\n }\n // Fallback: if no action provided, assume write\n return true;\n}\n\nexport async function executeTool(\n name: string,\n args: Record<string, unknown>,\n client: CorpAPIClient,\n ctx: ToolContext,\n): Promise<string> {\n const dispatch = TOOL_DISPATCH[name];\n if (!dispatch) return JSON.stringify({ error: `Unknown tool: ${name}` });\n\n const action = args.action as string;\n if (!action) return JSON.stringify({ error: `Missing required field: action` });\n\n const handler = dispatch[action];\n if (!handler) return JSON.stringify({ error: `Unknown action \"${action}\" for tool \"${name}\"` });\n\n try {\n const result = await handler(args, client, ctx);\n return JSON.stringify(result, null, 0);\n } catch (err) {\n return JSON.stringify({ error: String(err) });\n }\n}\n","// AUTO-GENERATED from backend OpenAPI spec — do not edit by hand.\n// Regenerate: make generate-tools\n\nexport const GENERATED_TOOL_DEFINITIONS: Record<string, unknown>[] = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"workspace\",\n \"description\": \"Workspace-level queries. Actions: status (get workspace summary), list_entities (list all entities), obligations (list obligations, optional tier filter), billing (get billing status and plans).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"status\", \"list_entities\", \"obligations\", \"billing\"]\n },\n \"tier\": {\n \"type\": \"string\",\n \"description\": \"obligations: filter by urgency tier\"\n }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"entity\",\n \"description\": \"Entity reads and lifecycle. Actions: get_cap_table (entity_id), list_documents (entity_id), list_safe_notes (entity_id), form (entity_type + entity_name + jurisdiction + members — legacy one-shot formation), create (entity_type + entity_name — step 1 of staged formation), add_founder (entity_id + name + email + role + ownership_pct — step 2), finalize (entity_id — step 3, generates docs + cap table), convert (entity_id + target_type), dissolve (entity_id + reason).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"get_cap_table\", \"list_documents\", \"list_safe_notes\", \"form\", \"create\", \"add_founder\", \"finalize\", \"convert\", \"dissolve\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"entity_type\": { \"type\": \"string\", \"enum\": [\"llc\", \"c_corp\"] },\n \"entity_name\": { \"type\": \"string\" },\n \"jurisdiction\": { \"type\": \"string\", \"description\": \"e.g. US-DE, US-WY. Defaults to US-WY for LLC, US-DE for corporation.\" },\n \"fiscal_year_end\": { \"type\": \"string\", \"description\": \"form: fiscal year end e.g. '12-31'\" },\n \"s_corp_election\": { \"type\": \"boolean\", \"description\": \"form: elect S-Corp tax treatment\" },\n \"transfer_restrictions\": { \"type\": \"boolean\", \"description\": \"form: include transfer restrictions in bylaws (corp)\" },\n \"right_of_first_refusal\": { \"type\": \"boolean\", \"description\": \"form: include ROFR in bylaws (corp)\" },\n \"company_address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": { \"type\": \"string\" },\n \"street2\": { \"type\": \"string\" },\n \"city\": { \"type\": \"string\" },\n \"state\": { \"type\": \"string\" },\n \"zip\": { \"type\": \"string\" }\n },\n \"required\": [\"street\", \"city\", \"state\", \"zip\"]\n },\n \"members\": {\n \"type\": \"array\",\n \"description\": \"form: founding members array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"investor_type\": { \"type\": \"string\", \"enum\": [\"natural_person\", \"agent\", \"entity\"] },\n \"email\": { \"type\": \"string\" },\n \"agent_id\": { \"type\": \"string\" },\n \"entity_id\": { \"type\": \"string\" },\n \"ownership_pct\": { \"type\": \"number\" },\n \"membership_units\": { \"type\": \"integer\" },\n \"share_count\": { \"type\": \"integer\" },\n \"share_class\": { \"type\": \"string\" },\n \"role\": { \"type\": \"string\", \"enum\": [\"director\", \"officer\", \"manager\", \"member\", \"chair\"] },\n \"officer_title\": { \"type\": \"string\", \"enum\": [\"ceo\", \"cfo\", \"secretary\", \"president\", \"vp\", \"other\"] },\n \"shares_purchased\": { \"type\": \"integer\" },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": { \"type\": \"string\" },\n \"street2\": { \"type\": \"string\" },\n \"city\": { \"type\": \"string\" },\n \"state\": { \"type\": \"string\" },\n \"zip\": { \"type\": \"string\" }\n }\n },\n \"vesting\": {\n \"type\": \"object\",\n \"properties\": {\n \"total_months\": { \"type\": \"integer\" },\n \"cliff_months\": { \"type\": \"integer\" },\n \"acceleration\": { \"type\": \"string\", \"enum\": [\"single_trigger\", \"double_trigger\"] }\n }\n },\n \"ip_description\": { \"type\": \"string\" },\n \"is_incorporator\": { \"type\": \"boolean\" }\n },\n \"required\": [\"name\", \"investor_type\"]\n }\n },\n \"name\": { \"type\": \"string\", \"description\": \"add_founder: full legal name\" },\n \"email\": { \"type\": \"string\", \"description\": \"add_founder: email address\" },\n \"role\": { \"type\": \"string\", \"enum\": [\"director\", \"officer\", \"manager\", \"member\", \"chair\"], \"description\": \"add_founder: role\" },\n \"ownership_pct\": { \"type\": \"number\", \"description\": \"add_founder: ownership percentage (e.g. 50 for 50%)\" },\n \"officer_title\": { \"type\": \"string\", \"enum\": [\"ceo\", \"cfo\", \"secretary\", \"president\", \"vp\", \"other\"], \"description\": \"add_founder: officer title (corp only)\" },\n \"is_incorporator\": { \"type\": \"boolean\", \"description\": \"add_founder: is sole incorporator (corp only)\" },\n \"target_type\": { \"type\": \"string\", \"enum\": [\"llc\", \"c_corp\"], \"description\": \"convert: target entity type\" },\n \"new_jurisdiction\": { \"type\": \"string\", \"description\": \"convert: target jurisdiction\" },\n \"reason\": { \"type\": \"string\", \"description\": \"dissolve: dissolution reason\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"dissolve: effective date\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"equity\",\n \"description\": \"Equity and cap table operations. Actions: start_round (entity_id + name + issuer_legal_entity_id — step 1), add_security (round_id + instrument_id + quantity + recipient_name — step 2), issue_round (round_id — step 3, closes round + creates board agenda item), issue (entity_id + grant_type + shares + recipient_name — legacy single grant), issue_safe (entity_id + investor_name + principal_amount_cents + safe_type + valuation_cap_cents), transfer (entity_id + from_holder + to_holder + shares + skip_governance_review=true — bypasses governance), distribution (entity_id + total_amount_cents).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"start_round\", \"add_security\", \"issue_round\", \"issue\", \"issue_safe\", \"transfer\", \"distribution\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"name\": { \"type\": \"string\", \"description\": \"start_round: round name (e.g. 'Seed Round')\" },\n \"issuer_legal_entity_id\": { \"type\": \"string\", \"description\": \"start_round: from cap table\" },\n \"pre_money_cents\": { \"type\": \"integer\", \"description\": \"start_round: pre-money valuation in cents\" },\n \"round_price_cents\": { \"type\": \"integer\", \"description\": \"start_round: price per share in cents\" },\n \"target_raise_cents\": { \"type\": \"integer\", \"description\": \"start_round: target raise in cents\" },\n \"round_id\": { \"type\": \"string\", \"description\": \"add_security/issue_round: round ID\" },\n \"instrument_id\": { \"type\": \"string\", \"description\": \"add_security: instrument ID from cap table\" },\n \"quantity\": { \"type\": \"integer\", \"description\": \"add_security: number of shares/units\" },\n \"recipient_name\": { \"type\": \"string\", \"description\": \"add_security/issue: recipient name\" },\n \"holder_id\": { \"type\": \"string\", \"description\": \"add_security: existing holder ID\" },\n \"email\": { \"type\": \"string\", \"description\": \"add_security: recipient email\" },\n \"principal_cents\": { \"type\": \"integer\", \"description\": \"add_security: investment amount in cents\" },\n \"grant_type\": { \"type\": \"string\", \"description\": \"issue/add_security: e.g. common, preferred, option\" },\n \"shares\": { \"type\": \"integer\", \"description\": \"issue/transfer: number of shares\" },\n \"vesting_schedule\": { \"type\": \"string\", \"description\": \"issue: vesting schedule\" },\n \"investor_name\": { \"type\": \"string\", \"description\": \"issue_safe: investor name\" },\n \"principal_amount_cents\": { \"type\": \"integer\", \"description\": \"issue_safe: principal in cents\" },\n \"safe_type\": { \"type\": \"string\", \"description\": \"issue_safe: SAFE type\" },\n \"valuation_cap_cents\": { \"type\": \"integer\", \"description\": \"issue_safe: valuation cap in cents\" },\n \"from_holder\": { \"type\": \"string\", \"description\": \"transfer: source holder\" },\n \"to_holder\": { \"type\": \"string\", \"description\": \"transfer: destination holder\" },\n \"share_class_id\": { \"type\": \"string\", \"description\": \"transfer: share class\" },\n \"transfer_type\": { \"type\": \"string\", \"description\": \"transfer: transfer type\" },\n \"skip_governance_review\": { \"type\": \"boolean\", \"description\": \"transfer: must be true to confirm bypassing governance\" },\n \"total_amount_cents\": { \"type\": \"integer\", \"description\": \"distribution: total amount in cents\" },\n \"distribution_type\": { \"type\": \"string\", \"enum\": [\"dividend\", \"return\", \"liquidation\"], \"description\": \"distribution: type\" },\n \"description\": { \"type\": \"string\", \"description\": \"distribution: description (required)\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"valuation\",\n \"description\": \"Valuation lifecycle. Actions: create (entity_id + valuation_type + effective_date + methodology → Draft), submit (entity_id + valuation_id → PendingApproval, auto-creates board agenda item), approve (entity_id + valuation_id + optional resolution_id → Approved, auto-supersedes previous 409A).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"create\", \"submit\", \"approve\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"valuation_id\": { \"type\": \"string\", \"description\": \"submit/approve: valuation ID\" },\n \"valuation_type\": {\n \"type\": \"string\",\n \"enum\": [\"four_oh_nine_a\", \"llc_profits_interest\", \"fair_market_value\", \"gift\", \"estate\", \"other\"],\n \"description\": \"create: valuation type\"\n },\n \"effective_date\": { \"type\": \"string\", \"description\": \"create: effective date (ISO 8601)\" },\n \"methodology\": {\n \"type\": \"string\",\n \"enum\": [\"income\", \"market\", \"asset\", \"backsolve\", \"hybrid\", \"other\"],\n \"description\": \"create: valuation methodology\"\n },\n \"fmv_per_share_cents\": { \"type\": \"integer\", \"description\": \"create: FMV per share in cents\" },\n \"enterprise_value_cents\": { \"type\": \"integer\", \"description\": \"create: enterprise value in cents\" },\n \"hurdle_amount_cents\": { \"type\": \"integer\", \"description\": \"create: hurdle amount in cents\" },\n \"provider_contact_id\": { \"type\": \"string\", \"description\": \"create: valuation provider contact ID\" },\n \"report_document_id\": { \"type\": \"string\", \"description\": \"create: valuation report document ID\" },\n \"resolution_id\": { \"type\": \"string\", \"description\": \"approve: resolution ID from board vote\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"meeting\",\n \"description\": \"Governance meeting lifecycle. Actions: schedule (entity_id + body_id + meeting_type + title), notice (entity_id + meeting_id — Draft→Noticed), convene (entity_id + meeting_id + present_seat_ids — quorum check), vote (entity_id + meeting_id + agenda_item_id + voter_id + vote_value), resolve (entity_id + meeting_id + agenda_item_id + resolution_text — tally votes), finalize_item (entity_id + meeting_id + agenda_item_id + status), adjourn (entity_id + meeting_id), cancel (entity_id + meeting_id), consent (entity_id + body_id + title + description — written consent, no meeting), attach_document (entity_id + meeting_id + resolution_id + document_id), list_items (entity_id + meeting_id), list_votes (entity_id + meeting_id + agenda_item_id).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"schedule\", \"notice\", \"convene\", \"vote\", \"resolve\", \"finalize_item\", \"adjourn\", \"cancel\", \"consent\", \"attach_document\", \"list_items\", \"list_votes\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"meeting_id\": { \"type\": \"string\" },\n \"body_id\": { \"type\": \"string\", \"description\": \"schedule/consent: governance body ID\" },\n \"meeting_type\": { \"type\": \"string\", \"description\": \"schedule: meeting type\" },\n \"title\": { \"type\": \"string\", \"description\": \"schedule/consent: meeting title\" },\n \"description\": { \"type\": \"string\", \"description\": \"consent: description\" },\n \"scheduled_date\": { \"type\": \"string\", \"description\": \"schedule: date (ISO 8601)\" },\n \"agenda_item_titles\": { \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"description\": \"schedule: agenda items\" },\n \"present_seat_ids\": { \"type\": \"array\", \"items\": { \"type\": \"string\" }, \"description\": \"convene: seat IDs present\" },\n \"agenda_item_id\": { \"type\": \"string\", \"description\": \"vote/resolve/finalize_item/list_votes: agenda item ID\" },\n \"voter_id\": { \"type\": \"string\", \"description\": \"vote: voter seat ID\" },\n \"vote_value\": { \"type\": \"string\", \"enum\": [\"for\", \"against\", \"abstain\", \"recusal\"], \"description\": \"vote: for, against, abstain, or recusal\" },\n \"resolution_text\": { \"type\": \"string\", \"description\": \"resolve: resolution text\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"resolve: optional effective date\" },\n \"status\": { \"type\": \"string\", \"enum\": [\"voted\", \"discussed\", \"tabled\", \"withdrawn\"], \"description\": \"finalize_item: voted, discussed, tabled, or withdrawn\" },\n \"resolution_id\": { \"type\": \"string\", \"description\": \"attach_document: resolution ID\" },\n \"document_id\": { \"type\": \"string\", \"description\": \"attach_document: document ID\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"finance\",\n \"description\": \"Financial operations. Actions: create_invoice (entity_id + customer_name + amount_cents + description + due_date), run_payroll (entity_id + pay_period_start + pay_period_end), submit_payment (entity_id + amount_cents + recipient), open_bank_account (entity_id + bank_name), reconcile (entity_id + start_date + end_date).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"create_invoice\", \"run_payroll\", \"submit_payment\", \"open_bank_account\", \"reconcile\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"customer_name\": { \"type\": \"string\", \"description\": \"create_invoice: customer name\" },\n \"amount_cents\": { \"type\": \"integer\", \"description\": \"create_invoice/submit_payment: amount in cents\" },\n \"description\": { \"type\": \"string\", \"description\": \"create_invoice/submit_payment: description\" },\n \"due_date\": { \"type\": \"string\", \"description\": \"create_invoice: due date\" },\n \"pay_period_start\": { \"type\": \"string\", \"description\": \"run_payroll: start date\" },\n \"pay_period_end\": { \"type\": \"string\", \"description\": \"run_payroll: end date\" },\n \"recipient\": { \"type\": \"string\", \"description\": \"submit_payment: recipient\" },\n \"bank_name\": { \"type\": \"string\", \"description\": \"open_bank_account: bank name (e.g. Mercury, SVB)\" },\n \"start_date\": { \"type\": \"string\", \"description\": \"reconcile: start date\" },\n \"end_date\": { \"type\": \"string\", \"description\": \"reconcile: end date\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"compliance\",\n \"description\": \"Compliance and legal operations. Actions: file_tax (entity_id + document_type + tax_year), track_deadline (entity_id + deadline_type + due_date + description), classify_contractor (entity_id + contractor_name + state + hours_per_week), generate_contract (entity_id + template_type + counterparty_name, optional effective_date).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"file_tax\", \"track_deadline\", \"classify_contractor\", \"generate_contract\"]\n },\n \"entity_id\": { \"type\": \"string\" },\n \"document_type\": { \"type\": \"string\", \"description\": \"file_tax: tax document type\" },\n \"tax_year\": { \"type\": \"integer\", \"description\": \"file_tax: tax year\" },\n \"deadline_type\": { \"type\": \"string\", \"description\": \"track_deadline: deadline type\" },\n \"due_date\": { \"type\": \"string\", \"description\": \"track_deadline: due date\" },\n \"description\": { \"type\": \"string\", \"description\": \"track_deadline: description\" },\n \"recurrence\": { \"type\": \"string\", \"description\": \"track_deadline: recurrence\" },\n \"contractor_name\": { \"type\": \"string\", \"description\": \"classify_contractor: contractor name\" },\n \"state\": { \"type\": \"string\", \"description\": \"classify_contractor: state\" },\n \"hours_per_week\": { \"type\": \"integer\", \"description\": \"classify_contractor: hours/week\" },\n \"exclusive_client\": { \"type\": \"boolean\", \"description\": \"classify_contractor: exclusive?\" },\n \"duration_months\": { \"type\": \"integer\", \"description\": \"classify_contractor: duration\" },\n \"provides_tools\": { \"type\": \"boolean\", \"description\": \"classify_contractor: provides own tools?\" },\n \"template_type\": { \"type\": \"string\", \"enum\": [\"consulting_agreement\", \"employment_offer\", \"contractor_agreement\", \"nda\", \"custom\"], \"description\": \"generate_contract: template type\" },\n \"counterparty_name\": { \"type\": \"string\", \"description\": \"generate_contract: counterparty name\" },\n \"effective_date\": { \"type\": \"string\", \"description\": \"generate_contract: effective date (ISO 8601, defaults to today)\" },\n \"parameters\": { \"type\": \"object\", \"description\": \"generate_contract: additional template parameters\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"document\",\n \"description\": \"Document access, signing, and preview. Actions: signing_link (entity_id + document_id — get signing link with token for a document), signer_link (obligation_id — generate signing link for a human obligation), download_link (document_id — get download link), preview_pdf (entity_id + document_id — preview a governance document as PDF without requiring a saved document).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"signing_link\", \"signer_link\", \"download_link\", \"preview_pdf\"]\n },\n \"document_id\": { \"type\": \"string\", \"description\": \"signing_link/download_link/preview_pdf: document ID (or AST definition ID for preview_pdf)\" },\n \"obligation_id\": { \"type\": \"string\", \"description\": \"signer_link: obligation ID\" },\n \"entity_id\": { \"type\": \"string\", \"description\": \"signing_link/preview_pdf: entity ID (required)\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"checklist\",\n \"description\": \"Workspace progress checklist. Actions: get (retrieve current checklist), update (checklist — set checklist content in markdown checkbox format).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"get\", \"update\"]\n },\n \"checklist\": { \"type\": \"string\", \"description\": \"update: markdown checklist content\" }\n },\n \"required\": [\"action\"]\n }\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"agent\",\n \"description\": \"Agent management. Agents are for delegating recurring tasks — NOT for research or one-off questions. Requires a paid plan. Actions: list (list all agents), create (name + system_prompt), message (agent_id + message), update (agent_id + optional status), add_skill (agent_id + name + description).\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"action\": {\n \"type\": \"string\",\n \"enum\": [\"list\", \"create\", \"message\", \"update\", \"add_skill\"]\n },\n \"agent_id\": { \"type\": \"string\", \"description\": \"message/update/add_skill: agent ID\" },\n \"name\": { \"type\": \"string\", \"description\": \"create: agent name; add_skill: skill name\" },\n \"system_prompt\": { \"type\": \"string\", \"description\": \"create: agent system prompt\" },\n \"model\": { \"type\": \"string\", \"description\": \"create: model name\" },\n \"message\": { \"type\": \"string\", \"description\": \"message: message text\" },\n \"status\": { \"type\": \"string\", \"enum\": [\"active\", \"paused\", \"disabled\"], \"description\": \"update: new status\" },\n \"description\": { \"type\": \"string\", \"description\": \"add_skill: skill description\" },\n \"parameters\": { \"type\": \"object\", \"description\": \"add_skill: skill parameters schema\" }\n },\n \"required\": [\"action\"]\n }\n }\n }\n];\n","function centsToUsd(cents: number): string {\n return \"$\" + (cents / 100).toLocaleString(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 0 });\n}\n\nexport function describeToolCall(name: string, args: Record<string, unknown>): string {\n const a = { ...args } as Record<string, unknown>;\n for (const k of [\"amount_cents\", \"principal_amount_cents\", \"total_amount_cents\", \"valuation_cap_cents\"]) {\n if (k in a) {\n try { a._amount = centsToUsd(Number(a[k])); } catch { a._amount = String(a[k]); }\n }\n }\n a._amount ??= \"?\";\n a.institution_name ??= \"Mercury\";\n a.payment_method ??= \"ach\";\n\n const action = a.action as string | undefined;\n const key = action ? `${name}:${action}` : name;\n\n const fmts: Record<string, string> = {\n // workspace\n \"workspace:status\": \"Get workspace status\",\n \"workspace:list_entities\": \"List all entities\",\n \"workspace:obligations\": \"List obligations\",\n \"workspace:billing\": \"Get billing status\",\n\n // entity\n \"entity:get_cap_table\": \"Get cap table\",\n \"entity:list_documents\": \"List documents\",\n \"entity:list_safe_notes\": \"List SAFE notes\",\n \"entity:create\": 'Create pending {entity_type} named \"{entity_name}\"',\n \"entity:add_founder\": 'Add founder \"{name}\" ({role}, {ownership_pct}%)',\n \"entity:finalize\": \"Finalize formation and generate documents + cap table\",\n \"entity:form\": 'Form a new {entity_type} named \"{entity_name}\" in {jurisdiction}',\n \"entity:convert\": \"Convert entity to {new_entity_type}\",\n \"entity:dissolve\": \"Dissolve entity — {reason}\",\n\n // equity\n \"equity:start_round\": 'Start equity round \"{name}\"',\n \"equity:add_security\": \"Add {quantity} shares to {recipient_name} in round\",\n \"equity:issue_round\": \"Issue all securities and close the round\",\n \"equity:issue\": \"Issue {shares} {grant_type} shares to {recipient_name}\",\n \"equity:issue_safe\": \"Issue SAFE note to {investor_name} for {_amount}\",\n \"equity:transfer\": \"Direct transfer {shares} shares (bypass governance)\",\n \"equity:distribution\": \"Calculate {distribution_type} distribution of {_amount}\",\n\n // valuation\n \"valuation:create\": \"Create {valuation_type} valuation effective {effective_date}\",\n \"valuation:submit\": \"Submit valuation for board approval\",\n \"valuation:approve\": \"Approve valuation\",\n\n // meeting\n \"meeting:schedule\": 'Schedule {meeting_type} meeting: \"{title}\"',\n \"meeting:notice\": \"Send notice for meeting\",\n \"meeting:convene\": \"Convene meeting\",\n \"meeting:vote\": \"Cast {vote_value} vote\",\n \"meeting:resolve\": \"Compute resolution for agenda item\",\n \"meeting:finalize_item\": \"Finalize agenda item to {status}\",\n \"meeting:adjourn\": \"Adjourn meeting\",\n \"meeting:cancel\": \"Cancel meeting\",\n \"meeting:consent\": 'Create written consent: \"{title}\"',\n \"meeting:attach_document\": \"Attach document to resolution\",\n \"meeting:list_items\": \"List agenda items for meeting\",\n \"meeting:list_votes\": \"List votes on agenda item\",\n\n // finance\n \"finance:create_invoice\": \"Create invoice for {customer_name} — {_amount}\",\n \"finance:run_payroll\": \"Run payroll for {pay_period_start} to {pay_period_end}\",\n \"finance:submit_payment\": \"Submit {_amount} payment to {recipient} via {payment_method}\",\n \"finance:open_bank_account\": \"Open bank account at {institution_name}\",\n \"finance:reconcile\": \"Reconcile ledger from {start_date} to {end_date}\",\n\n // compliance\n \"compliance:file_tax\": \"File {document_type} for tax year {tax_year}\",\n \"compliance:track_deadline\": \"Track {deadline_type} deadline — {description}\",\n \"compliance:classify_contractor\": \"Classify contractor {contractor_name} in {state}\",\n \"compliance:generate_contract\": \"Generate {template_type} contract for {counterparty_name}\",\n\n // document\n \"document:signing_link\": \"Get signing link for document\",\n \"document:signer_link\": \"Generate signer link for obligation\",\n \"document:download_link\": \"Get download link for document\",\n \"document:preview_pdf\": \"Preview document PDF for {document_id}\",\n\n // checklist\n \"checklist:get\": \"Get workspace checklist\",\n \"checklist:update\": \"Update workspace checklist\",\n\n // agent\n \"agent:list\": \"List agents\",\n \"agent:create\": 'Create agent \"{name}\"',\n \"agent:message\": \"Send message to agent\",\n \"agent:update\": \"Update agent configuration\",\n \"agent:add_skill\": 'Add skill \"{skill_name}\" to agent',\n };\n\n const fmt = fmts[key];\n if (fmt) {\n try {\n return fmt.replace(/\\{(\\w+)\\}/g, (_, k: string) => String(a[k] ?? \"?\"));\n } catch { /* fall through */ }\n }\n return action ? `${name} → ${action}` : name.replace(/_/g, \" \");\n}\n","/**\n * System prompt base and config formatter.\n */\n\nexport const SYSTEM_PROMPT_BASE = `You are a corporate governance assistant for TheCorporation, an agentic corporate governance platform.\n\n## Context\n{context}\n\n## Tools\nYou have 10 tools, each with an \\`action\\` parameter that selects the operation:\n\n| Tool | Actions |\n|------|---------|\n| **workspace** | status, list_entities, obligations, billing |\n| **entity** | get_cap_table, list_documents, list_safe_notes, form, create, add_founder, finalize, convert, dissolve |\n| **equity** | start_round, add_security, issue_round, issue, issue_safe, transfer, distribution |\n| **valuation** | create, submit, approve |\n| **meeting** | schedule, notice, convene, vote, resolve, finalize_item, adjourn, cancel, consent, attach_document, list_items, list_votes |\n| **finance** | create_invoice, run_payroll, submit_payment, open_bank_account, reconcile |\n| **compliance** | file_tax, track_deadline, classify_contractor, generate_contract |\n| **document** | signing_link, signer_link, download_link |\n| **checklist** | get, update |\n| **agent** | list, create, message, update, add_skill |\n\n## Rules\n- All monetary values are in integer cents ($1,000 = 100000).\n- Be concise and helpful.\n- **You MUST confirm with the user before calling ANY write action.** Describe what you are about to do and wait for explicit approval. Never execute tools speculatively or \"on behalf of\" the user without their go-ahead.\n- Don't ask for info available in platform config — use the correct values automatically.\n- If only one option exists for a field, use it without asking.\n- Don't make up data — only present what the tools return.\n- If a tool returns an error, explain it simply without exposing raw error details.\n- NEVER create an agent to answer a question you can answer yourself. You are the assistant — answer questions directly using your knowledge and the read tools.\n\n## Agent Rules\n- Agents are for **delegating recurring corporate operations tasks** that the user explicitly requests — e.g. \"process incoming invoices\", \"monitor compliance deadlines\", \"handle payroll every two weeks\".\n- Agents are NOT for research, answering questions, or one-off lookups. If the user asks a question, YOU answer it.\n- NEVER proactively suggest or create an agent unless the user specifically asks for one.\n- Agent tools require a paid plan.\n\n## Entity Formation Rules\n- **Prefer the staged formation flow** over \\`entity action=form\\`:\n 1. \\`entity action=create\\` — type + name → returns \\`entity_id\\`\n 2. \\`entity action=add_founder\\` — add each founder one at a time (name, email, role, ownership_pct)\n 3. \\`entity action=finalize\\` — generates documents + cap table\n- When using \\`entity action=form\\` (legacy), you MUST ask about all founding members and their ownership allocations BEFORE calling it.\n- For LLCs, ownership percentages must total 100%.\n\n## Equity Round Rules\n- **Prefer the staged round flow** for issuing equity to multiple holders:\n 1. \\`equity action=start_round\\` — entity_id + name + issuer_legal_entity_id → returns \\`round_id\\`\n 2. \\`equity action=add_security\\` — add each holder's shares one at a time (round_id, instrument_id, quantity, recipient_name, plus holder_id or email)\n 3. \\`equity action=issue_round\\` — creates positions for all pending securities, closes the round, and auto-creates a board meeting agenda item for approval (or adds to an existing pending meeting)\n 4. Complete the board meeting lifecycle (notice → convene → vote → resolve → finalize → adjourn) to formally approve the round\n- The entity must already have a cap table with holders and instruments set up.\n- Use \\`entity action=get_cap_table\\` to look up holder IDs, instrument IDs, and the issuer legal entity ID before starting.\n- \\`equity action=add_security\\` can resolve recipients by \\`holder_id\\`, \\`email\\`, or auto-create from \\`recipient_name\\`.\n\n## Share Transfer Rules\n- **Prefer the transfer workflow** for share transfers — it includes bylaws review, ROFR, board approval, document generation, and signatures.\n- \\`equity action=transfer\\` is a direct bypass that skips all governance. It requires \\`skip_governance_review: true\\` to confirm the caller intentionally wants to skip the workflow. Only use it for corrective entries or when the user explicitly requests skipping governance.\n\n## Valuation Rules\n- To create and approve a 409A valuation:\n 1. \\`valuation action=create\\` — type=four_oh_nine_a + effective_date + methodology + fmv_per_share_cents → valuation_id (Draft)\n 2. \\`valuation action=submit\\` — Draft → PendingApproval; auto-creates board meeting agenda item (or adds to existing pending meeting)\n 3. Complete the board meeting lifecycle (notice → convene → vote → resolve → finalize → adjourn)\n 4. \\`valuation action=approve\\` — PendingApproval → Approved; pass resolution_id from the board vote\n- 409A valuations auto-expire after 365 days from effective_date\n- When a new 409A is approved, any previous approved 409A is auto-superseded\n\n## Governance Meeting Rules\n- Full meeting lifecycle:\n 1. \\`meeting action=schedule\\` — entity_id + body_id + meeting_type + title + agenda_item_titles → meeting_id\n 2. \\`meeting action=notice\\` — Draft → Noticed\n 3. \\`meeting action=convene\\` — present_seat_ids → quorum check → Noticed → Convened\n 4. \\`meeting action=vote\\` — vote on each agenda item (requires Convened + quorum met)\n 5. \\`meeting action=resolve\\` — tally votes → create Resolution\n 6. \\`meeting action=finalize_item\\` — mark item as Voted (requires resolution), Discussed, Tabled, or Withdrawn\n 7. \\`meeting action=adjourn\\` — Convened → Adjourned\n- For written consent (no physical meeting): use \\`meeting action=consent\\` — auto-convened, skip notice/convene\n- Use \\`meeting action=list_items\\` to get agenda_item_ids after scheduling\n- Use \\`entity action=get_cap_table\\` or governance read tools to look up body_id and seat holder IDs\n- \\`meeting action=cancel\\` works from Draft or Noticed status only\n\n## Document Signing Rules\n- You CANNOT sign documents on behalf of users. Signing is a human action.\n- Use \\`document action=signing_link\\` to generate a signing URL for a document.\n- Present the signing link so users can open it and sign themselves.\n- NEVER attempt to sign, execute, or complete signature actions automatically.\n- The \\`document action=signing_link\\` tool does NOT sign anything — it only returns a URL.\n\n## User Journey\nAfter completing any action, ALWAYS present the logical next step(s) as a\nnumbered list. The user should never wonder \"what now?\" — guide them forward.\n\nAfter entity formation (staged or legacy):\n1. The \\`entity action=finalize\\` (or \\`entity action=form\\`) response includes a \\`document_ids\\` array. These documents are created immediately — they are NEVER \"still being generated\" or delayed.\n2. Immediately call \\`document action=signing_link\\` for each document ID in the response to get signing URLs.\n3. Present the signing links to the user right away. Do NOT tell the user to \"check back later\" or that documents are \"being prepared\" — they already exist.\n4. Then: \"Documents signed! Next: apply for an EIN, open a bank account, or issue equity.\"\n\nAfter document generation:\n1. Present signing links immediately — don't wait for the user to ask.\n2. Use the document IDs from the tool response — do NOT call \\`entity action=list_documents\\` to re-fetch them.\n\nAfter signing:\n1. \"Documents are signed! Next: file for EIN, open a bank account, or add team members.\"\n\nAfter equity issuance:\n1. \"Equity issued! Next: generate the stock certificate for signing, or issue more grants.\"\n\nGeneral pattern:\n- Always end with 1-2 concrete next actions the user can take.\n- Phrase them as questions or suggestions: \"Would you like to [next step]?\"\n- If there are signing obligations, proactively generate and present the signing links.\n- Never just say \"done\" — always show what comes next.\n\nAfter major actions, use \\`checklist action=update\\` to track progress. Use markdown checkbox\nformat (- [x] / - [ ]). Call \\`checklist action=get\\` first to see current state, then\nupdate with checked-off items. This helps users see where they are.\n\n{extra_sections}`;\n\ninterface ConfigItem {\n value: string;\n label?: string;\n}\n\nexport function formatConfigSection(cfgData: Record<string, unknown>): string {\n const lines: string[] = [];\n\n const entityTypes = cfgData.entity_types as ConfigItem[] | undefined;\n if (entityTypes?.length) {\n const vals = entityTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Entity types: ${vals}`);\n }\n\n const jurisdictions = cfgData.jurisdictions as Record<string, ConfigItem[]> | undefined;\n if (jurisdictions) {\n for (const [etype, jurs] of Object.entries(jurisdictions)) {\n const jurVals = jurs.map((j) => `${j.label} (${j.value})`).join(\", \");\n lines.push(`Jurisdictions for ${etype}: ${jurVals}`);\n }\n }\n\n const invTypes = cfgData.investor_types as ConfigItem[] | undefined;\n if (invTypes?.length) {\n const vals = invTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Investor types: ${vals}`);\n }\n\n const workers = cfgData.worker_classifications as ConfigItem[] | undefined;\n if (workers?.length) {\n const vals = workers.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Worker classifications: ${vals}`);\n }\n\n const vesting = cfgData.vesting_schedules as ConfigItem[] | undefined;\n if (vesting?.length) {\n const vals = vesting.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Vesting schedules: ${vals}`);\n }\n\n const safeTypes = cfgData.safe_types as ConfigItem[] | undefined;\n if (safeTypes?.length) {\n const vals = safeTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`SAFE types: ${vals}`);\n }\n\n const compTypes = cfgData.compensation_types as ConfigItem[] | undefined;\n if (compTypes?.length) {\n const vals = compTypes.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Compensation types: ${vals}`);\n }\n\n const bodyTypes = cfgData.governance_body_types as ConfigItem[] | undefined;\n if (bodyTypes?.length) {\n const vals = bodyTypes.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Governance body types: ${vals}`);\n }\n\n const quorum = cfgData.quorum_rules as ConfigItem[] | undefined;\n if (quorum?.length) {\n const vals = quorum.map((t) => `\"${t.value}\"`).join(\", \");\n lines.push(`Quorum rules: ${vals}`);\n }\n\n const voting = cfgData.voting_methods as ConfigItem[] | undefined;\n if (voting?.length) {\n const vals = voting.map((t) => `${t.label} (${t.value})`).join(\", \");\n lines.push(`Voting methods: ${vals}`);\n }\n\n if (!lines.length) return \"\";\n\n const configYaml = lines.map((line) => `- ${line}`).join(\"\\n\");\n return (\n \"\\n## Platform Configuration\\n\" +\n \"The following are the ONLY valid values supported by this platform. \" +\n \"Do not offer or accept values outside these lists.\\n\\n\" +\n configYaml + \"\\n\"\n );\n}\n","/**\n * Tool registry and classification helpers.\n * Re-exports from existing modules + builds a registry from generated defs.\n */\n\nimport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\n\nexport { GENERATED_TOOL_DEFINITIONS } from \"./tool-defs.generated.js\";\nexport { isWriteTool } from \"./tools.js\";\nexport { describeToolCall } from \"./tool-descriptions.js\";\n\ninterface ToolFunction {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\ninterface ToolDef {\n type: string;\n function: ToolFunction;\n}\n\n/** Registry: tool name → function metadata (description + parameters). */\nexport const TOOL_REGISTRY: Record<string, ToolFunction> = {};\n\nfor (const td of GENERATED_TOOL_DEFINITIONS as unknown as ToolDef[]) {\n TOOL_REGISTRY[td.function.name] = td.function;\n}\n\n/**\n * Read-only tool:action pairs that don't require user confirmation.\n * @deprecated Use isWriteTool(name, args) instead for action-aware checking.\n */\nexport const READ_ONLY_TOOLS = new Set([\n \"workspace\", \"checklist\",\n]);\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thecorporation/corp-tools",
3
- "version": "26.3.3",
3
+ "version": "26.3.4",
4
4
  "description": "Shared corporate tool handlers, API client, and types",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",