@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 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(tier: string, entityId?: string): Promise<ApiRecord>;
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<void>;
190
- sendAgentMessage(id: string, body: string): Promise<ApiRecord>;
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
- listPendingApprovals(): Promise<ApiRecord[]>;
196
- respondApproval(id: string, decision: string, message?: string): Promise<ApiRecord>;
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/workspaces/${this.workspaceId}/contacts`);
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(`/v1/workspaces/${this.workspaceId}/contacts`, data);
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
- getSafeNotes(entityId) {
144
- return this.get(`/v1/entities/${entityId}/safe-notes`);
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
- getShareTransfers(entityId) {
147
- return this.get(`/v1/entities/${entityId}/share-transfers`);
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/share-transfers", data);
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(tier, entityId) {
321
- const body = { tier };
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.del(`/v1/agents/${id}`);
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
- listAgentExecutions(id) {
385
- return this.get(`/v1/agents/${id}/executions`);
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
- // --- Approvals ---
397
- listPendingApprovals() {
398
- return this.get("/v1/approvals/pending");
391
+ // --- Governance bodies ---
392
+ createGovernanceBody(data) {
393
+ return this.post("/v1/governance-bodies", data);
399
394
  }
400
- respondApproval(id, decision, message = "") {
401
- return this.patch(`/v1/approvals/${id}`, { decision, message });
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 + new_entity_type), dissolve (entity_id + reason).",
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", "corporation"] },
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
- "new_entity_type": { "type": "string", "description": "convert: target entity type" },
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, optional institution_name), reconcile (entity_id + start_date + end_date).",
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
- "institution_name": { "type": "string", "description": "open_bank_account: bank name" },
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
- "parameters": { "type": "object", "description": "generate_contract: template parameters" }
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 + body), update (agent_id + optional status), add_skill (agent_id + skill_name + description).",
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
- "body": { "type": "string", "description": "message: message body" },
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
- "instructions": { "type": "string", "description": "add_skill: skill instructions" }
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) => client.convertEntity(requiredString(args, "entity_id"), args),
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) => client.issueEquity(args),
880
- issue_safe: async (args, client) => client.issueSafe(args),
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
- if (args.institution_name) body.institution_name = args.institution_name;
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) => client.generateContract(args)
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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thecorporation/corp-tools",
3
- "version": "26.3.2",
3
+ "version": "26.3.3",
4
4
  "description": "Shared corporate tool handlers, API client, and types",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",