@thecorporation/corp-tools 26.3.2 → 26.3.3
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 +8 -10
- package/dist/index.js +121 -53
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -108,7 +108,7 @@ declare class CorpAPIClient {
|
|
|
108
108
|
triggerDigest(): Promise<ApiRecord>;
|
|
109
109
|
getDigest(key: string): Promise<ApiRecord>;
|
|
110
110
|
listEntities(): Promise<ApiRecord[]>;
|
|
111
|
-
listContacts(): Promise<ApiRecord[]>;
|
|
111
|
+
listContacts(entityId: string): Promise<ApiRecord[]>;
|
|
112
112
|
getContact(id: string): Promise<ApiRecord>;
|
|
113
113
|
getContactProfile(id: string): Promise<ApiRecord>;
|
|
114
114
|
createContact(data: ApiRecord): Promise<ApiRecord>;
|
|
@@ -116,15 +116,15 @@ declare class CorpAPIClient {
|
|
|
116
116
|
getNotificationPrefs(contactId: string): Promise<ApiRecord>;
|
|
117
117
|
updateNotificationPrefs(contactId: string, prefs: ApiRecord): Promise<ApiRecord>;
|
|
118
118
|
getCapTable(entityId: string): Promise<ApiRecord>;
|
|
119
|
+
/** Extract SAFE instruments from the cap table (no dedicated list endpoint). */
|
|
119
120
|
getSafeNotes(entityId: string): Promise<ApiRecord[]>;
|
|
121
|
+
/** Extract transfer-workflow info (no dedicated list endpoint for share transfers). */
|
|
120
122
|
getShareTransfers(entityId: string): Promise<ApiRecord[]>;
|
|
121
123
|
getValuations(entityId: string): Promise<ApiRecord[]>;
|
|
122
124
|
getCurrent409a(entityId: string): Promise<ApiRecord>;
|
|
123
125
|
createValuation(data: ApiRecord): Promise<ApiRecord>;
|
|
124
126
|
submitValuationForApproval(valuationId: string, entityId: string): Promise<ApiRecord>;
|
|
125
127
|
approveValuation(valuationId: string, entityId: string, resolutionId?: string): Promise<ApiRecord>;
|
|
126
|
-
issueEquity(data: ApiRecord): Promise<ApiRecord>;
|
|
127
|
-
issueSafe(data: ApiRecord): Promise<ApiRecord>;
|
|
128
128
|
transferShares(data: ApiRecord): Promise<ApiRecord>;
|
|
129
129
|
calculateDistribution(data: ApiRecord): Promise<ApiRecord>;
|
|
130
130
|
createEquityRound(data: CreateEquityRoundRequest): Promise<EquityRoundResponse>;
|
|
@@ -169,7 +169,7 @@ declare class CorpAPIClient {
|
|
|
169
169
|
getBillingStatus(): Promise<ApiRecord>;
|
|
170
170
|
getBillingPlans(): Promise<ApiRecord[]>;
|
|
171
171
|
createBillingPortal(): Promise<ApiRecord>;
|
|
172
|
-
createBillingCheckout(
|
|
172
|
+
createBillingCheckout(planId: string, entityId?: string): Promise<ApiRecord>;
|
|
173
173
|
getFormation(id: string): Promise<ApiRecord>;
|
|
174
174
|
getFormationDocuments(id: string): Promise<ApiRecord[]>;
|
|
175
175
|
createFormation(data: ApiRecord): Promise<ApiRecord>;
|
|
@@ -186,14 +186,12 @@ declare class CorpAPIClient {
|
|
|
186
186
|
getAgent(id: string): Promise<ApiRecord>;
|
|
187
187
|
createAgent(data: ApiRecord): Promise<ApiRecord>;
|
|
188
188
|
updateAgent(id: string, data: ApiRecord): Promise<ApiRecord>;
|
|
189
|
-
deleteAgent(id: string): Promise<
|
|
190
|
-
sendAgentMessage(id: string,
|
|
191
|
-
listAgentExecutions(id: string): Promise<ApiRecord[]>;
|
|
192
|
-
getAgentUsage(id: string): Promise<ApiRecord>;
|
|
189
|
+
deleteAgent(id: string): Promise<ApiRecord>;
|
|
190
|
+
sendAgentMessage(id: string, message: string): Promise<ApiRecord>;
|
|
193
191
|
addAgentSkill(id: string, data: ApiRecord): Promise<ApiRecord>;
|
|
194
192
|
listSupportedModels(): Promise<ApiRecord[]>;
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
createGovernanceBody(data: ApiRecord): Promise<ApiRecord>;
|
|
194
|
+
createGovernanceSeat(bodyId: string, data: ApiRecord): Promise<ApiRecord>;
|
|
197
195
|
listApiKeys(): Promise<ApiRecord[]>;
|
|
198
196
|
assignObligation(obligationId: string, contactId: string): Promise<ApiRecord>;
|
|
199
197
|
getConfig(): Promise<ApiRecord>;
|
package/dist/index.js
CHANGED
|
@@ -115,8 +115,8 @@ var CorpAPIClient = class {
|
|
|
115
115
|
return this.get(`/v1/workspaces/${this.workspaceId}/entities`);
|
|
116
116
|
}
|
|
117
117
|
// --- Contacts ---
|
|
118
|
-
listContacts() {
|
|
119
|
-
return this.get(`/v1/
|
|
118
|
+
listContacts(entityId) {
|
|
119
|
+
return this.get(`/v1/entities/${entityId}/contacts`);
|
|
120
120
|
}
|
|
121
121
|
getContact(id) {
|
|
122
122
|
return this.get(`/v1/contacts/${id}`);
|
|
@@ -125,7 +125,7 @@ var CorpAPIClient = class {
|
|
|
125
125
|
return this.get(`/v1/contacts/${id}/profile`);
|
|
126
126
|
}
|
|
127
127
|
createContact(data) {
|
|
128
|
-
return this.post(
|
|
128
|
+
return this.post("/v1/contacts", data);
|
|
129
129
|
}
|
|
130
130
|
updateContact(id, data) {
|
|
131
131
|
return this.patch(`/v1/contacts/${id}`, data);
|
|
@@ -140,11 +140,18 @@ var CorpAPIClient = class {
|
|
|
140
140
|
getCapTable(entityId) {
|
|
141
141
|
return this.get(`/v1/entities/${entityId}/cap-table`);
|
|
142
142
|
}
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
/** Extract SAFE instruments from the cap table (no dedicated list endpoint). */
|
|
144
|
+
async getSafeNotes(entityId) {
|
|
145
|
+
const ct = await this.getCapTable(entityId);
|
|
146
|
+
const instruments = ct.instruments ?? [];
|
|
147
|
+
const positions = ct.positions ?? [];
|
|
148
|
+
const safeIds = new Set(instruments.filter((i) => String(i.kind).toLowerCase() === "safe").map((i) => i.instrument_id));
|
|
149
|
+
if (safeIds.size === 0) return [];
|
|
150
|
+
return positions.filter((p) => safeIds.has(p.instrument_id));
|
|
145
151
|
}
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
/** Extract transfer-workflow info (no dedicated list endpoint for share transfers). */
|
|
153
|
+
async getShareTransfers(entityId) {
|
|
154
|
+
return [{ _note: "Use transfer workflows: POST /v1/equity/transfer-workflows to initiate transfers.", entity_id: entityId }];
|
|
148
155
|
}
|
|
149
156
|
getValuations(entityId) {
|
|
150
157
|
return this.get(`/v1/entities/${entityId}/valuations`);
|
|
@@ -163,14 +170,8 @@ var CorpAPIClient = class {
|
|
|
163
170
|
if (resolutionId) body.resolution_id = resolutionId;
|
|
164
171
|
return this.post(`/v1/valuations/${valuationId}/approve`, body);
|
|
165
172
|
}
|
|
166
|
-
issueEquity(data) {
|
|
167
|
-
return this.post("/v1/equity/grants", data);
|
|
168
|
-
}
|
|
169
|
-
issueSafe(data) {
|
|
170
|
-
return this.post("/v1/safe-notes", data);
|
|
171
|
-
}
|
|
172
173
|
transferShares(data) {
|
|
173
|
-
return this.post("/v1/
|
|
174
|
+
return this.post("/v1/equity/transfer-workflows", data);
|
|
174
175
|
}
|
|
175
176
|
calculateDistribution(data) {
|
|
176
177
|
return this.post("/v1/distributions", data);
|
|
@@ -287,7 +288,7 @@ var CorpAPIClient = class {
|
|
|
287
288
|
return this.post("/v1/payments", data);
|
|
288
289
|
}
|
|
289
290
|
openBankAccount(data) {
|
|
290
|
-
return this.post("/v1/bank-accounts", data);
|
|
291
|
+
return this.post("/v1/treasury/bank-accounts", data);
|
|
291
292
|
}
|
|
292
293
|
classifyContractor(data) {
|
|
293
294
|
return this.post("/v1/contractors/classify", data);
|
|
@@ -317,8 +318,8 @@ var CorpAPIClient = class {
|
|
|
317
318
|
createBillingPortal() {
|
|
318
319
|
return this.post("/v1/billing/portal", { workspace_id: this.workspaceId });
|
|
319
320
|
}
|
|
320
|
-
createBillingCheckout(
|
|
321
|
-
const body = {
|
|
321
|
+
createBillingCheckout(planId, entityId) {
|
|
322
|
+
const body = { plan_id: planId };
|
|
322
323
|
if (entityId) body.entity_id = entityId;
|
|
323
324
|
return this.post("/v1/billing/checkout", body);
|
|
324
325
|
}
|
|
@@ -367,7 +368,7 @@ var CorpAPIClient = class {
|
|
|
367
368
|
return this.get("/v1/agents");
|
|
368
369
|
}
|
|
369
370
|
getAgent(id) {
|
|
370
|
-
return this.get(`/v1/agents/${id}`);
|
|
371
|
+
return this.get(`/v1/agents/${id}/resolved`);
|
|
371
372
|
}
|
|
372
373
|
createAgent(data) {
|
|
373
374
|
return this.post("/v1/agents", data);
|
|
@@ -376,16 +377,10 @@ var CorpAPIClient = class {
|
|
|
376
377
|
return this.patch(`/v1/agents/${id}`, data);
|
|
377
378
|
}
|
|
378
379
|
deleteAgent(id) {
|
|
379
|
-
return this.
|
|
380
|
-
}
|
|
381
|
-
sendAgentMessage(id, body) {
|
|
382
|
-
return this.post(`/v1/agents/${id}/messages`, { body });
|
|
380
|
+
return this.patch(`/v1/agents/${id}`, { status: "disabled" });
|
|
383
381
|
}
|
|
384
|
-
|
|
385
|
-
return this.
|
|
386
|
-
}
|
|
387
|
-
getAgentUsage(id) {
|
|
388
|
-
return this.get(`/v1/agents/${id}/usage`);
|
|
382
|
+
sendAgentMessage(id, message) {
|
|
383
|
+
return this.post(`/v1/agents/${id}/messages`, { message });
|
|
389
384
|
}
|
|
390
385
|
addAgentSkill(id, data) {
|
|
391
386
|
return this.post(`/v1/agents/${id}/skills`, data);
|
|
@@ -393,12 +388,12 @@ var CorpAPIClient = class {
|
|
|
393
388
|
listSupportedModels() {
|
|
394
389
|
return this.get("/v1/models");
|
|
395
390
|
}
|
|
396
|
-
// ---
|
|
397
|
-
|
|
398
|
-
return this.
|
|
391
|
+
// --- Governance bodies ---
|
|
392
|
+
createGovernanceBody(data) {
|
|
393
|
+
return this.post("/v1/governance-bodies", data);
|
|
399
394
|
}
|
|
400
|
-
|
|
401
|
-
return this.
|
|
395
|
+
createGovernanceSeat(bodyId, data) {
|
|
396
|
+
return this.post(`/v1/governance-bodies/${bodyId}/seats`, data);
|
|
402
397
|
}
|
|
403
398
|
// --- API Keys ---
|
|
404
399
|
listApiKeys() {
|
|
@@ -451,7 +446,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
451
446
|
"type": "function",
|
|
452
447
|
"function": {
|
|
453
448
|
"name": "entity",
|
|
454
|
-
"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 \u2014 legacy one-shot formation), create (entity_type + entity_name \u2014 step 1 of staged formation), add_founder (entity_id + name + email + role + ownership_pct \u2014 step 2), finalize (entity_id \u2014 step 3, generates docs + cap table), convert (entity_id +
|
|
449
|
+
"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 \u2014 legacy one-shot formation), create (entity_type + entity_name \u2014 step 1 of staged formation), add_founder (entity_id + name + email + role + ownership_pct \u2014 step 2), finalize (entity_id \u2014 step 3, generates docs + cap table), convert (entity_id + target_type), dissolve (entity_id + reason).",
|
|
455
450
|
"parameters": {
|
|
456
451
|
"type": "object",
|
|
457
452
|
"properties": {
|
|
@@ -460,7 +455,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
460
455
|
"enum": ["get_cap_table", "list_documents", "list_safe_notes", "form", "create", "add_founder", "finalize", "convert", "dissolve"]
|
|
461
456
|
},
|
|
462
457
|
"entity_id": { "type": "string" },
|
|
463
|
-
"entity_type": { "type": "string", "enum": ["llc", "
|
|
458
|
+
"entity_type": { "type": "string", "enum": ["llc", "c_corp"] },
|
|
464
459
|
"entity_name": { "type": "string" },
|
|
465
460
|
"jurisdiction": { "type": "string", "description": "e.g. US-DE, US-WY. Defaults to US-WY for LLC, US-DE for corporation." },
|
|
466
461
|
"fiscal_year_end": { "type": "string", "description": "form: fiscal year end e.g. '12-31'" },
|
|
@@ -526,7 +521,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
526
521
|
"ownership_pct": { "type": "number", "description": "add_founder: ownership percentage (e.g. 50 for 50%)" },
|
|
527
522
|
"officer_title": { "type": "string", "enum": ["ceo", "cfo", "secretary", "president", "vp", "other"], "description": "add_founder: officer title (corp only)" },
|
|
528
523
|
"is_incorporator": { "type": "boolean", "description": "add_founder: is sole incorporator (corp only)" },
|
|
529
|
-
"
|
|
524
|
+
"target_type": { "type": "string", "enum": ["llc", "c_corp"], "description": "convert: target entity type" },
|
|
530
525
|
"new_jurisdiction": { "type": "string", "description": "convert: target jurisdiction" },
|
|
531
526
|
"reason": { "type": "string", "description": "dissolve: dissolution reason" },
|
|
532
527
|
"effective_date": { "type": "string", "description": "dissolve: effective date" }
|
|
@@ -573,7 +568,8 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
573
568
|
"transfer_type": { "type": "string", "description": "transfer: transfer type" },
|
|
574
569
|
"skip_governance_review": { "type": "boolean", "description": "transfer: must be true to confirm bypassing governance" },
|
|
575
570
|
"total_amount_cents": { "type": "integer", "description": "distribution: total amount in cents" },
|
|
576
|
-
"distribution_type": { "type": "string", "description": "distribution: type" }
|
|
571
|
+
"distribution_type": { "type": "string", "enum": ["dividend", "return", "liquidation"], "description": "distribution: type" },
|
|
572
|
+
"description": { "type": "string", "description": "distribution: description (required)" }
|
|
577
573
|
},
|
|
578
574
|
"required": ["action"]
|
|
579
575
|
}
|
|
@@ -653,7 +649,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
653
649
|
"type": "function",
|
|
654
650
|
"function": {
|
|
655
651
|
"name": "finance",
|
|
656
|
-
"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
|
|
652
|
+
"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).",
|
|
657
653
|
"parameters": {
|
|
658
654
|
"type": "object",
|
|
659
655
|
"properties": {
|
|
@@ -669,7 +665,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
669
665
|
"pay_period_start": { "type": "string", "description": "run_payroll: start date" },
|
|
670
666
|
"pay_period_end": { "type": "string", "description": "run_payroll: end date" },
|
|
671
667
|
"recipient": { "type": "string", "description": "submit_payment: recipient" },
|
|
672
|
-
"
|
|
668
|
+
"bank_name": { "type": "string", "description": "open_bank_account: bank name (e.g. Mercury, SVB)" },
|
|
673
669
|
"start_date": { "type": "string", "description": "reconcile: start date" },
|
|
674
670
|
"end_date": { "type": "string", "description": "reconcile: end date" }
|
|
675
671
|
},
|
|
@@ -681,7 +677,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
681
677
|
"type": "function",
|
|
682
678
|
"function": {
|
|
683
679
|
"name": "compliance",
|
|
684
|
-
"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).",
|
|
680
|
+
"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).",
|
|
685
681
|
"parameters": {
|
|
686
682
|
"type": "object",
|
|
687
683
|
"properties": {
|
|
@@ -702,8 +698,10 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
702
698
|
"exclusive_client": { "type": "boolean", "description": "classify_contractor: exclusive?" },
|
|
703
699
|
"duration_months": { "type": "integer", "description": "classify_contractor: duration" },
|
|
704
700
|
"provides_tools": { "type": "boolean", "description": "classify_contractor: provides own tools?" },
|
|
705
|
-
"template_type": { "type": "string", "description": "generate_contract: template type" },
|
|
706
|
-
"
|
|
701
|
+
"template_type": { "type": "string", "enum": ["consulting_agreement", "employment_offer", "contractor_agreement", "nda", "custom"], "description": "generate_contract: template type" },
|
|
702
|
+
"counterparty_name": { "type": "string", "description": "generate_contract: counterparty name" },
|
|
703
|
+
"effective_date": { "type": "string", "description": "generate_contract: effective date (ISO 8601, defaults to today)" },
|
|
704
|
+
"parameters": { "type": "object", "description": "generate_contract: additional template parameters" }
|
|
707
705
|
},
|
|
708
706
|
"required": ["action"]
|
|
709
707
|
}
|
|
@@ -751,7 +749,7 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
751
749
|
"type": "function",
|
|
752
750
|
"function": {
|
|
753
751
|
"name": "agent",
|
|
754
|
-
"description": "Agent management. Agents are for delegating recurring tasks \u2014 NOT for research or one-off questions. Requires a paid plan. Actions: list (list all agents), create (name + system_prompt), message (agent_id +
|
|
752
|
+
"description": "Agent management. Agents are for delegating recurring tasks \u2014 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).",
|
|
755
753
|
"parameters": {
|
|
756
754
|
"type": "object",
|
|
757
755
|
"properties": {
|
|
@@ -760,14 +758,13 @@ var GENERATED_TOOL_DEFINITIONS = [
|
|
|
760
758
|
"enum": ["list", "create", "message", "update", "add_skill"]
|
|
761
759
|
},
|
|
762
760
|
"agent_id": { "type": "string", "description": "message/update/add_skill: agent ID" },
|
|
763
|
-
"name": { "type": "string", "description": "create: agent name" },
|
|
761
|
+
"name": { "type": "string", "description": "create: agent name; add_skill: skill name" },
|
|
764
762
|
"system_prompt": { "type": "string", "description": "create: agent system prompt" },
|
|
765
763
|
"model": { "type": "string", "description": "create: model name" },
|
|
766
|
-
"
|
|
767
|
-
"status": { "type": "string", "description": "update: new status" },
|
|
768
|
-
"skill_name": { "type": "string", "description": "add_skill: skill name" },
|
|
764
|
+
"message": { "type": "string", "description": "message: message text" },
|
|
765
|
+
"status": { "type": "string", "enum": ["active", "paused", "disabled"], "description": "update: new status" },
|
|
769
766
|
"description": { "type": "string", "description": "add_skill: skill description" },
|
|
770
|
-
"
|
|
767
|
+
"parameters": { "type": "object", "description": "add_skill: skill parameters schema" }
|
|
771
768
|
},
|
|
772
769
|
"required": ["action"]
|
|
773
770
|
}
|
|
@@ -863,7 +860,11 @@ var entityActions = {
|
|
|
863
860
|
}
|
|
864
861
|
return result;
|
|
865
862
|
},
|
|
866
|
-
convert: async (args, client) =>
|
|
863
|
+
convert: async (args, client) => {
|
|
864
|
+
const body = { target_type: args.target_type ?? args.to_type ?? args.new_entity_type };
|
|
865
|
+
if (args.new_jurisdiction) body.new_jurisdiction = args.new_jurisdiction;
|
|
866
|
+
return client.convertEntity(requiredString(args, "entity_id"), body);
|
|
867
|
+
},
|
|
867
868
|
dissolve: async (args, client) => client.dissolveEntity(requiredString(args, "entity_id"), args)
|
|
868
869
|
};
|
|
869
870
|
var equityActions = {
|
|
@@ -876,8 +877,66 @@ var equityActions = {
|
|
|
876
877
|
const roundId = requiredString(args, "round_id");
|
|
877
878
|
return client.issueRound(roundId, args);
|
|
878
879
|
},
|
|
879
|
-
issue: async (args, client) =>
|
|
880
|
-
|
|
880
|
+
issue: async (args, client) => {
|
|
881
|
+
const entityId = requiredString(args, "entity_id");
|
|
882
|
+
const capTable = await client.getCapTable(entityId);
|
|
883
|
+
const issuerLegalEntityId = capTable.issuer_legal_entity_id;
|
|
884
|
+
if (!issuerLegalEntityId) return { error: "No issuer legal entity found. Has this entity been formed with a cap table?" };
|
|
885
|
+
const instruments = capTable.instruments;
|
|
886
|
+
if (!instruments?.length) return { error: "No instruments found on cap table." };
|
|
887
|
+
let instrumentId = args.instrument_id;
|
|
888
|
+
if (!instrumentId) {
|
|
889
|
+
const grantType = (args.grant_type ?? "").toLowerCase();
|
|
890
|
+
const match = instruments.find(
|
|
891
|
+
(i) => i.kind.toLowerCase().includes(grantType) || i.symbol.toLowerCase().includes(grantType)
|
|
892
|
+
) ?? instruments.find((i) => i.kind.toLowerCase().includes("common"));
|
|
893
|
+
instrumentId = (match ?? instruments[0]).instrument_id;
|
|
894
|
+
}
|
|
895
|
+
const round = await client.startEquityRound({
|
|
896
|
+
entity_id: entityId,
|
|
897
|
+
name: `${args.grant_type ?? "equity"} grant \u2014 ${args.recipient_name ?? "unknown"}`,
|
|
898
|
+
issuer_legal_entity_id: issuerLegalEntityId
|
|
899
|
+
});
|
|
900
|
+
const roundId = round.round_id ?? round.equity_round_id;
|
|
901
|
+
const securityData = {
|
|
902
|
+
entity_id: entityId,
|
|
903
|
+
instrument_id: instrumentId,
|
|
904
|
+
quantity: args.shares ?? args.quantity,
|
|
905
|
+
recipient_name: args.recipient_name,
|
|
906
|
+
grant_type: args.grant_type
|
|
907
|
+
};
|
|
908
|
+
if (args.email) securityData.email = args.email;
|
|
909
|
+
await client.addRoundSecurity(roundId, securityData);
|
|
910
|
+
return client.issueRound(roundId, { entity_id: entityId });
|
|
911
|
+
},
|
|
912
|
+
issue_safe: async (args, client) => {
|
|
913
|
+
const entityId = requiredString(args, "entity_id");
|
|
914
|
+
const capTable = await client.getCapTable(entityId);
|
|
915
|
+
const issuerLegalEntityId = capTable.issuer_legal_entity_id;
|
|
916
|
+
if (!issuerLegalEntityId) return { error: "No issuer legal entity found." };
|
|
917
|
+
const instruments = capTable.instruments;
|
|
918
|
+
const safeInstrument = instruments?.find((i) => i.kind.toLowerCase() === "safe");
|
|
919
|
+
if (!safeInstrument) return { error: "No SAFE instrument found on cap table." };
|
|
920
|
+
const principalCents = args.principal_amount_cents ?? args.amount_cents ?? 0;
|
|
921
|
+
const round = await client.startEquityRound({
|
|
922
|
+
entity_id: entityId,
|
|
923
|
+
name: `SAFE \u2014 ${args.investor_name ?? "investor"}`,
|
|
924
|
+
issuer_legal_entity_id: issuerLegalEntityId
|
|
925
|
+
});
|
|
926
|
+
const roundId = round.round_id ?? round.equity_round_id;
|
|
927
|
+
const securityData = {
|
|
928
|
+
entity_id: entityId,
|
|
929
|
+
instrument_id: safeInstrument.instrument_id,
|
|
930
|
+
quantity: principalCents || 1,
|
|
931
|
+
recipient_name: args.investor_name,
|
|
932
|
+
principal_cents: principalCents,
|
|
933
|
+
grant_type: args.safe_type ?? "post_money"
|
|
934
|
+
};
|
|
935
|
+
if (args.email) securityData.email = args.email;
|
|
936
|
+
if (args.valuation_cap_cents) securityData.valuation_cap_cents = args.valuation_cap_cents;
|
|
937
|
+
await client.addRoundSecurity(roundId, securityData);
|
|
938
|
+
return client.issueRound(roundId, { entity_id: entityId });
|
|
939
|
+
},
|
|
881
940
|
transfer: async (args, client) => {
|
|
882
941
|
if (args.skip_governance_review !== true) {
|
|
883
942
|
return {
|
|
@@ -1003,7 +1062,7 @@ var financeActions = {
|
|
|
1003
1062
|
submit_payment: async (args, client) => client.submitPayment(args),
|
|
1004
1063
|
open_bank_account: async (args, client) => {
|
|
1005
1064
|
const body = { entity_id: args.entity_id };
|
|
1006
|
-
|
|
1065
|
+
body.bank_name = args.bank_name ?? args.institution_name ?? "Mercury";
|
|
1007
1066
|
return client.openBankAccount(body);
|
|
1008
1067
|
},
|
|
1009
1068
|
reconcile: async (args, client) => client.reconcileLedger(args)
|
|
@@ -1012,7 +1071,16 @@ var complianceActions = {
|
|
|
1012
1071
|
file_tax: async (args, client) => client.fileTaxDocument(args),
|
|
1013
1072
|
track_deadline: async (args, client) => client.trackDeadline(args),
|
|
1014
1073
|
classify_contractor: async (args, client) => client.classifyContractor(args),
|
|
1015
|
-
generate_contract: async (args, client) =>
|
|
1074
|
+
generate_contract: async (args, client) => {
|
|
1075
|
+
const data = {
|
|
1076
|
+
entity_id: requiredString(args, "entity_id"),
|
|
1077
|
+
template_type: requiredString(args, "template_type"),
|
|
1078
|
+
counterparty_name: args.counterparty_name ?? args.counterparty ?? "",
|
|
1079
|
+
effective_date: args.effective_date ?? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10)
|
|
1080
|
+
};
|
|
1081
|
+
if (args.parameters) data.parameters = args.parameters;
|
|
1082
|
+
return client.generateContract(data);
|
|
1083
|
+
}
|
|
1016
1084
|
};
|
|
1017
1085
|
var documentActions = {
|
|
1018
1086
|
signing_link: async (args, client) => client.getSigningLink(args.document_id),
|
|
@@ -1077,7 +1145,7 @@ var checklistActions = {
|
|
|
1077
1145
|
var agentActions = {
|
|
1078
1146
|
list: async (_args, client) => client.listAgents(),
|
|
1079
1147
|
create: async (args, client) => client.createAgent(args),
|
|
1080
|
-
message: async (args, client) => client.sendAgentMessage(args.agent_id, args.body),
|
|
1148
|
+
message: async (args, client) => client.sendAgentMessage(args.agent_id, args.message ?? args.body),
|
|
1081
1149
|
update: async (args, client) => client.updateAgent(args.agent_id, args),
|
|
1082
1150
|
add_skill: async (args, client) => client.addAgentSkill(args.agent_id, args)
|
|
1083
1151
|
};
|
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() { return this.get(`/v1/workspaces/${this.workspaceId}/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/workspaces/${this.workspaceId}/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 getSafeNotes(entityId: string) { return this.get(`/v1/entities/${entityId}/safe-notes`) as Promise<ApiRecord[]>; }\n getShareTransfers(entityId: string) { return this.get(`/v1/entities/${entityId}/share-transfers`) as Promise<ApiRecord[]>; }\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 issueEquity(data: ApiRecord) { return this.post(\"/v1/equity/grants\", data) as Promise<ApiRecord>; }\n issueSafe(data: ApiRecord) { return this.post(\"/v1/safe-notes\", data) as Promise<ApiRecord>; }\n transferShares(data: ApiRecord) { return this.post(\"/v1/share-transfers\", 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/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(tier: string, entityId?: string) {\n const body: ApiRecord = { tier };\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}`) 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.del(`/v1/agents/${id}`); }\n sendAgentMessage(id: string, body: string) { return this.post(`/v1/agents/${id}/messages`, { body }) as Promise<ApiRecord>; }\n listAgentExecutions(id: string) { return this.get(`/v1/agents/${id}/executions`) as Promise<ApiRecord[]>; }\n getAgentUsage(id: string) { return this.get(`/v1/agents/${id}/usage`) 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 // --- Approvals ---\n listPendingApprovals() { return this.get(\"/v1/approvals/pending\") as Promise<ApiRecord[]>; }\n respondApproval(id: string, decision: string, message = \"\") { return this.patch(`/v1/approvals/${id}`, { decision, message }) 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) => client.convertEntity(requiredString(args, \"entity_id\"), args),\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) => client.issueEquity(args),\n issue_safe: async (args, client) => client.issueSafe(args),\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 if (args.institution_name) body.institution_name = args.institution_name;\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) => client.generateContract(args),\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.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 + new_entity_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\", \"corporation\"] },\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 \"new_entity_type\": { \"type\": \"string\", \"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\", \"description\": \"distribution: type\" }\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, optional institution_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 \"institution_name\": { \"type\": \"string\", \"description\": \"open_bank_account: bank name\" },\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).\",\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\", \"description\": \"generate_contract: template type\" },\n \"parameters\": { \"type\": \"object\", \"description\": \"generate_contract: 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 + body), update (agent_id + optional status), add_skill (agent_id + skill_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\" },\n \"system_prompt\": { \"type\": \"string\", \"description\": \"create: agent system prompt\" },\n \"model\": { \"type\": \"string\", \"description\": \"create: model name\" },\n \"body\": { \"type\": \"string\", \"description\": \"message: message body\" },\n \"status\": { \"type\": \"string\", \"description\": \"update: new status\" },\n \"skill_name\": { \"type\": \"string\", \"description\": \"add_skill: skill name\" },\n \"description\": { \"type\": \"string\", \"description\": \"add_skill: skill description\" },\n \"instructions\": { \"type\": \"string\", \"description\": \"add_skill: skill instructions\" }\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) { 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":[]}
|