@typeship-ax/mcp 0.8.0 → 0.9.1

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.
Files changed (103) hide show
  1. package/AGENTS.md +31 -0
  2. package/README.md +66 -9
  3. package/api.json +1617 -712
  4. package/api.md +8292 -382
  5. package/dist/api-identity.d.ts +40 -0
  6. package/dist/api-identity.d.ts.map +1 -0
  7. package/dist/api-identity.js +128 -0
  8. package/dist/auth-profiles.d.ts +30 -0
  9. package/dist/auth-profiles.d.ts.map +1 -0
  10. package/dist/auth-profiles.js +138 -0
  11. package/dist/core/http.d.ts +17 -2
  12. package/dist/core/http.d.ts.map +1 -1
  13. package/dist/core/http.js +78 -17
  14. package/dist/credential-storage.d.ts +24 -0
  15. package/dist/credential-storage.d.ts.map +1 -0
  16. package/dist/credential-storage.js +207 -0
  17. package/dist/docs.d.ts +25 -0
  18. package/dist/docs.d.ts.map +1 -1
  19. package/dist/docs.js +144 -0
  20. package/dist/errors.d.ts +18 -10
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +24 -14
  23. package/dist/index.d.ts +10 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +20 -4
  26. package/dist/mcp-authorization.d.ts +52 -0
  27. package/dist/mcp-authorization.d.ts.map +1 -0
  28. package/dist/mcp-authorization.js +232 -0
  29. package/dist/mcp-protocol.d.ts +51 -2
  30. package/dist/mcp-protocol.d.ts.map +1 -1
  31. package/dist/mcp-protocol.js +249 -37
  32. package/dist/mcp.d.ts +21 -3
  33. package/dist/mcp.d.ts.map +1 -1
  34. package/dist/mcp.js +185 -68
  35. package/dist/named-credentials.d.ts +21 -0
  36. package/dist/named-credentials.d.ts.map +1 -0
  37. package/dist/named-credentials.js +86 -0
  38. package/dist/oauth-request.d.ts +21 -0
  39. package/dist/oauth-request.d.ts.map +1 -0
  40. package/dist/oauth-request.js +119 -0
  41. package/dist/oauth-session.d.ts +106 -0
  42. package/dist/oauth-session.d.ts.map +1 -0
  43. package/dist/oauth-session.js +244 -0
  44. package/dist/ops.d.ts +14 -1
  45. package/dist/ops.d.ts.map +1 -1
  46. package/dist/ops.js +30 -30
  47. package/dist/resources/account.d.ts +2 -2
  48. package/dist/resources/account.d.ts.map +1 -1
  49. package/dist/resources/account.js +1 -0
  50. package/dist/resources/api-keys.d.ts +3 -3
  51. package/dist/resources/api-keys.d.ts.map +1 -1
  52. package/dist/resources/api-keys.js +2 -0
  53. package/dist/resources/definition-revisions.d.ts +5 -5
  54. package/dist/resources/definition-revisions.d.ts.map +1 -1
  55. package/dist/resources/definition-revisions.js +4 -0
  56. package/dist/resources/definitions.d.ts +15 -4
  57. package/dist/resources/definitions.d.ts.map +1 -1
  58. package/dist/resources/definitions.js +11 -2
  59. package/dist/resources/generate.d.ts +14 -3
  60. package/dist/resources/generate.d.ts.map +1 -1
  61. package/dist/resources/generate.js +10 -2
  62. package/dist/resources/generations.d.ts +3 -3
  63. package/dist/resources/generations.d.ts.map +1 -1
  64. package/dist/resources/generations.js +2 -0
  65. package/dist/resources/projects.d.ts +56 -20
  66. package/dist/resources/projects.d.ts.map +1 -1
  67. package/dist/resources/projects.js +40 -4
  68. package/dist/resources/targets.d.ts +20 -9
  69. package/dist/resources/targets.d.ts.map +1 -1
  70. package/dist/resources/targets.js +14 -1
  71. package/dist/schemas.d.ts.map +1 -1
  72. package/dist/schemas.js +38 -22
  73. package/dist/types.d.ts +385 -119
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js +11 -0
  76. package/dist/worker.js +4 -4
  77. package/package.json +11 -1
  78. package/server.json +42 -0
  79. package/src/api-identity.ts +98 -0
  80. package/src/auth-profiles.ts +114 -0
  81. package/src/core/http.ts +88 -19
  82. package/src/credential-storage.ts +183 -0
  83. package/src/docs.ts +138 -0
  84. package/src/errors.ts +26 -15
  85. package/src/index.ts +29 -4
  86. package/src/mcp-authorization.ts +211 -0
  87. package/src/mcp-protocol.ts +287 -38
  88. package/src/mcp.ts +186 -72
  89. package/src/named-credentials.ts +74 -0
  90. package/src/oauth-request.ts +90 -0
  91. package/src/oauth-session.ts +258 -0
  92. package/src/ops.ts +44 -31
  93. package/src/resources/account.ts +3 -0
  94. package/src/resources/api-keys.ts +5 -0
  95. package/src/resources/definition-revisions.ts +9 -0
  96. package/src/resources/definitions.ts +25 -0
  97. package/src/resources/generate.ts +23 -0
  98. package/src/resources/generations.ts +5 -0
  99. package/src/resources/projects.ts +95 -7
  100. package/src/resources/targets.ts +32 -0
  101. package/src/schemas.ts +38 -22
  102. package/src/types.ts +404 -119
  103. package/src/worker.ts +4 -4
package/src/types.ts CHANGED
@@ -930,7 +930,7 @@ export interface TargetFields {
930
930
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
931
931
  * belong to the Definition.
932
932
  */
933
- config?: ProjectConfig | null;
933
+ config?: TargetConfig | null;
934
934
  deliveries?: DeliveryInput[];
935
935
  }
936
936
 
@@ -951,7 +951,7 @@ export interface TargetFieldsRead {
951
951
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
952
952
  * belong to the Definition.
953
953
  */
954
- config?: ProjectConfigRead | null;
954
+ config?: TargetConfigRead | null;
955
955
  deliveries?: DeliveryInputRead[];
956
956
  }
957
957
 
@@ -969,7 +969,7 @@ export interface InitialTargetFields {
969
969
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
970
970
  * belong to the Definition.
971
971
  */
972
- config?: ProjectConfig | null;
972
+ config?: TargetConfig | null;
973
973
  deliveries?: DeliveryInput[];
974
974
  }
975
975
 
@@ -988,7 +988,7 @@ export interface InitialTargetFieldsRead {
988
988
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
989
989
  * belong to the Definition.
990
990
  */
991
- config?: ProjectConfigRead | null;
991
+ config?: TargetConfigRead | null;
992
992
  deliveries?: DeliveryInputRead[];
993
993
  }
994
994
 
@@ -1002,7 +1002,7 @@ export interface TargetUpdateRequest {
1002
1002
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
1003
1003
  * belong to the Definition.
1004
1004
  */
1005
- config?: ProjectConfig | null;
1005
+ config?: TargetConfig | null;
1006
1006
  deliveries?: DeliveryInput[];
1007
1007
  }
1008
1008
 
@@ -1017,7 +1017,7 @@ export interface TargetUpdateRequestRead {
1017
1017
  * Target-specific overrides merged over Project.config. GraphQL settings are rejected here and
1018
1018
  * belong to the Definition.
1019
1019
  */
1020
- config?: ProjectConfigRead | null;
1020
+ config?: TargetConfigRead | null;
1021
1021
  deliveries?: DeliveryInputRead[];
1022
1022
  }
1023
1023
 
@@ -1041,7 +1041,8 @@ export interface Target {
1041
1041
  * Target-specific overrides merged over Project.config. GraphQL settings are Definition-owned and
1042
1042
  * never appear here.
1043
1043
  */
1044
- config: ProjectConfig | null;
1044
+ config: TargetConfig | null;
1045
+ /** At most one repository and one hosted MCP Delivery. */
1045
1046
  deliveries: Delivery[];
1046
1047
  /** Format: date-time */
1047
1048
  created_at: string;
@@ -1071,7 +1072,8 @@ export interface TargetRead {
1071
1072
  * Target-specific overrides merged over Project.config. GraphQL settings are Definition-owned and
1072
1073
  * never appear here.
1073
1074
  */
1074
- config: ProjectConfigRead | null;
1075
+ config: TargetConfigRead | null;
1076
+ /** At most one repository and one hosted MCP Delivery. */
1075
1077
  deliveries: DeliveryRead[];
1076
1078
  /** Format: date-time */
1077
1079
  created_at: string;
@@ -1350,18 +1352,15 @@ export interface DefinitionUpdateRequestRead {
1350
1352
  diagnostic_policy?: DiagnosticPolicyRead;
1351
1353
  }
1352
1354
 
1355
+ /**
1356
+ * Project-owned identity, Definition reference, generation controls, and shared configuration.
1357
+ * Targets and Deliveries are available only through their canonical Target endpoints.
1358
+ */
1353
1359
  export interface Project {
1354
1360
  id: ProjectId;
1355
1361
  object: "project";
1356
1362
  name: string;
1357
1363
  definition_id: DefinitionId;
1358
- /** All configured Targets, including disabled Targets and their saved Deliveries. */
1359
- targets: Target[];
1360
- /**
1361
- * Flattened convenience view derived from the same Target bundles. Every Delivery retains
1362
- * target_id so ownership is explicit.
1363
- */
1364
- deliveries: Delivery[];
1365
1364
  /**
1366
1365
  * Regenerate when the Definition changes: on every push to the default branch for a repository
1367
1366
  * source, every 30 minutes for a URL source. Off by default: the first generation is always one
@@ -1393,13 +1392,6 @@ export interface Project {
1393
1392
  export interface ProjectWrite {
1394
1393
  name: string;
1395
1394
  definition_id: DefinitionId;
1396
- /** All configured Targets, including disabled Targets and their saved Deliveries. */
1397
- targets: Target[];
1398
- /**
1399
- * Flattened convenience view derived from the same Target bundles. Every Delivery retains
1400
- * target_id so ownership is explicit.
1401
- */
1402
- deliveries: Delivery[];
1403
1395
  /**
1404
1396
  * Regenerate when the Definition changes: on every push to the default branch for a repository
1405
1397
  * source, every 30 minutes for a URL source. Off by default: the first generation is always one
@@ -1426,13 +1418,6 @@ export interface ProjectRead {
1426
1418
  object: "project" | (string & {});
1427
1419
  name: string;
1428
1420
  definition_id: DefinitionId;
1429
- /** All configured Targets, including disabled Targets and their saved Deliveries. */
1430
- targets: TargetRead[];
1431
- /**
1432
- * Flattened convenience view derived from the same Target bundles. Every Delivery retains
1433
- * target_id so ownership is explicit.
1434
- */
1435
- deliveries: DeliveryRead[];
1436
1421
  /**
1437
1422
  * Regenerate when the Definition changes: on every push to the default branch for a repository
1438
1423
  * source, every 30 minutes for a URL source. Off by default: the first generation is always one
@@ -1461,8 +1446,8 @@ export interface ProjectRead {
1461
1446
  }
1462
1447
 
1463
1448
  /**
1464
- * Lean Project identity returned by collection endpoints. Retrieve the Project or list its Targets
1465
- * for the complete aggregate.
1449
+ * Lean Project identity returned by collection endpoints. Retrieve the Project for shared
1450
+ * configuration and list its Targets for the complete canonical child collection.
1466
1451
  */
1467
1452
  export interface ProjectSummary {
1468
1453
  id: ProjectId;
@@ -1580,30 +1565,151 @@ export interface AccountRead {
1580
1565
  request_id: RequestId;
1581
1566
  }
1582
1567
 
1583
- /** How the generated CLI behaves. Part of Config. */
1584
- export interface CliBehavior {
1585
- /** Command users run, independent of how the CLI is distributed. */
1586
- command_name?: string | null;
1568
+ /**
1569
+ * Authorization-server metadata used by generated OAuth flows. Secrets and runtime credentials are
1570
+ * never accepted here.
1571
+ */
1572
+ export interface OAuthServer {
1587
1573
  /**
1588
- * resource.method of a zero-argument GET that the generated CLI's whoami command calls. Overrides
1589
- * auto-detection; a value that matches nothing is reported as a generation warning.
1574
+ * Exact authorization-server issuer, including any tenant path.
1575
+ * Format: uri
1576
+ */
1577
+ issuer?: string | null;
1578
+ /**
1579
+ * Exact metadata URL when it cannot be derived from the issuer.
1580
+ * Format: uri
1581
+ */
1582
+ discovery_url?: string | null;
1583
+ /**
1584
+ * Authorization endpoint override.
1585
+ * Format: uri
1590
1586
  */
1591
- whoami_operation?: string | null;
1587
+ authorization_url?: string | null;
1592
1588
  /**
1593
- * OAuth client id baked into the generated CLI for device-flow login. Without it, login prompts
1594
- * for a pasted credential.
1589
+ * Token endpoint override.
1590
+ * Format: uri
1595
1591
  */
1596
- oauth_client_id?: string | null;
1592
+ token_url?: string | null;
1597
1593
  /**
1598
- * Scopes requested during device-flow login. Include offline_access if the authorization server
1599
- * gates refresh tokens behind it.
1594
+ * Device-authorization endpoint override.
1595
+ * Format: uri
1600
1596
  */
1601
- oauth_scopes?: string[];
1597
+ device_authorization_url?: string | null;
1598
+ /** Default scopes requested during login. */
1599
+ scopes?: string[] | null;
1600
+ /** Default audience included in authorization and token requests. */
1601
+ audience?: string | null;
1602
1602
  /**
1603
- * Audience sent with the device-authorization request, for authorization servers that require one
1604
- * to issue API-valid access tokens.
1603
+ * Protected API resource included in authorization and token requests.
1604
+ * Format: uri
1605
+ */
1606
+ resource?: string | null;
1607
+ }
1608
+
1609
+ /**
1610
+ * OAuth application available to generated products. Public clients support interactive login;
1611
+ * confidential clients support runtime-supplied machine credentials. Client secrets are never
1612
+ * stored.
1613
+ */
1614
+ export interface OAuthApplication {
1615
+ /** OAuth client identifier. */
1616
+ client_id: string;
1617
+ /** Interactive login method. Browser login uses Authorization Code with PKCE. */
1618
+ login_method?: "browser" | "device" | null;
1619
+ /** How a runtime-supplied client secret is sent for machine grants. */
1620
+ client_auth_method?: "post" | "basic" | null;
1621
+ /**
1622
+ * Loopback callback URL for browser login.
1623
+ * Format: uri
1605
1624
  */
1606
- oauth_audience?: string | null;
1625
+ redirect_uri?: string | null;
1626
+ /** Provider parameter used to request an organization during browser login. */
1627
+ organization_parameter?: "organization" | "organization_id" | null;
1628
+ }
1629
+
1630
+ /** Response shape for OAuthApplication. */
1631
+ export interface OAuthApplicationRead {
1632
+ /** OAuth client identifier. */
1633
+ client_id: string;
1634
+ /** Interactive login method. Browser login uses Authorization Code with PKCE. */
1635
+ login_method?: ("browser" | "device" | null) | (string & {}) | null;
1636
+ /** How a runtime-supplied client secret is sent for machine grants. */
1637
+ client_auth_method?: ("post" | "basic" | null) | (string & {}) | null;
1638
+ /**
1639
+ * Loopback callback URL for browser login.
1640
+ * Format: uri
1641
+ */
1642
+ redirect_uri?: string | null;
1643
+ /** Provider parameter used to request an organization during browser login. */
1644
+ organization_parameter?: ("organization" | "organization_id" | null) | (string & {}) | null;
1645
+ }
1646
+
1647
+ /**
1648
+ * Authenticated identity read used to verify a login before it is saved. Operation is auto-detected
1649
+ * when omitted. Requests must include at least one of subject_field, account_field, or
1650
+ * organization_field.
1651
+ */
1652
+ export interface IdentityVerification {
1653
+ /** resource.method of a safe identity read with no required arguments. */
1654
+ operation?: string;
1655
+ /** JSON Pointer to the stable caller ID in the identity response. */
1656
+ subject_field?: string;
1657
+ /** JSON Pointer to the customer account ID. */
1658
+ account_field?: string;
1659
+ /** JSON Pointer to the customer organization ID. */
1660
+ organization_field?: string;
1661
+ }
1662
+
1663
+ /** OAuth application and request-value overrides for one named API environment. */
1664
+ export interface AuthenticationEnvironment {
1665
+ oauth_application?: string | null;
1666
+ scopes?: string[] | null;
1667
+ audience?: string | null;
1668
+ /** Format: uri */
1669
+ resource?: string | null;
1670
+ }
1671
+
1672
+ /**
1673
+ * Public authentication defaults for generated clients and tools. Stored Projects own the OAuth
1674
+ * server, application catalog, and identity policy; stateless generation accepts the same shape for
1675
+ * one run. Runtime credentials and client secrets are never accepted.
1676
+ */
1677
+ export interface AuthenticationConfig {
1678
+ oauth_server?: OAuthServer | null;
1679
+ /** OAuth applications keyed by a stable name. */
1680
+ oauth_applications?: Record<string, OAuthApplication> | null;
1681
+ /** Default OAuth application used by generated products. */
1682
+ oauth_application?: string | null;
1683
+ identity_verification?: IdentityVerification | null;
1684
+ /**
1685
+ * Base URL of a custom browser-approval backend implementing the start, status, and revoke
1686
+ * contract. Used only when OAuth is not configured.
1687
+ * Format: uri
1688
+ */
1689
+ approval_url?: string | null;
1690
+ /** Authentication selections keyed by generated API environment name. */
1691
+ environments?: Record<string, AuthenticationEnvironment> | null;
1692
+ }
1693
+
1694
+ export interface TargetAuthenticationEnvironment {
1695
+ oauth_application?: string | null;
1696
+ }
1697
+
1698
+ /**
1699
+ * Selects a Project OAuth application for one Target. OAuth server metadata, applications, and
1700
+ * identity policy remain Project-owned.
1701
+ */
1702
+ export interface TargetAuthenticationConfig {
1703
+ /** Project OAuth application to use. Omit to inherit the Project default. */
1704
+ oauth_application?: string | null;
1705
+ /** Project OAuth application selections keyed by API environment. */
1706
+ environments?: Record<string, TargetAuthenticationEnvironment> | null;
1707
+ }
1708
+
1709
+ /** How the generated CLI behaves. Part of Config. */
1710
+ export interface CliBehavior {
1711
+ /** Command users run, independent of how the CLI is distributed. */
1712
+ command_name?: string | null;
1607
1713
  /**
1608
1714
  * Opt in to a once-a-day registry check that prints an upgrade hint. Off by default; generated
1609
1715
  * code phones nobody unless this is enabled.
@@ -1614,11 +1720,6 @@ export interface CliBehavior {
1614
1720
  * title and environment details.
1615
1721
  */
1616
1722
  support_url?: string | null;
1617
- /**
1618
- * Base URL of the browser-approval endpoint pair used by CLI login. The CLI keeps the verifier
1619
- * and receives the credential directly; no key is pasted through a conversation.
1620
- */
1621
- auth_url?: string | null;
1622
1723
  /**
1623
1724
  * Hosted MCP endpoint installed by the generated CLI instead of launching the package's local
1624
1725
  * stdio server.
@@ -1628,10 +1729,34 @@ export interface CliBehavior {
1628
1729
  skills_repo?: string | null;
1629
1730
  }
1630
1731
 
1631
- /** How the generated MCP server and the hosted endpoint behave. Part of Config. */
1732
+ /** How generated MCP servers and the Typeship-hosted endpoint behave. Part of Config. */
1632
1733
  export interface McpBehavior {
1633
1734
  /** Stable official MCP registry name, independent of the server runtime. */
1634
1735
  registry_name?: string | null;
1736
+ /**
1737
+ * Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting
1738
+ * application resolves upstream API credentials separately at runtime. This setting does not
1739
+ * apply to the Typeship-hosted endpoint.
1740
+ */
1741
+ access?: {
1742
+ /**
1743
+ * Exact issuer allowed to sign MCP connection tokens.
1744
+ * Format: uri
1745
+ */
1746
+ issuer: string;
1747
+ /**
1748
+ * Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.
1749
+ * Format: uri
1750
+ */
1751
+ resource: string;
1752
+ /**
1753
+ * Public signing-key endpoint. Omit to discover it from the issuer.
1754
+ * Format: uri
1755
+ */
1756
+ jwks_url?: string;
1757
+ /** Minimum scopes required to connect to the self-hosted MCP server. */
1758
+ scopes?: string[];
1759
+ };
1635
1760
  /**
1636
1761
  * MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so
1637
1762
  * large APIs don't flood an agent's context window. Auto considers the serialized tool schemas,
@@ -1651,12 +1776,50 @@ export interface McpBehavior {
1651
1776
  * match no operation are reported as generation warnings.
1652
1777
  */
1653
1778
  tool_descriptions?: Record<string, string>;
1779
+ /**
1780
+ * Exact name-or-ID resolver overrides keyed first by the target operationId or "METHOD /path",
1781
+ * then by its wire argument name. A resolver names one read collection operation plus 1-4 item
1782
+ * fields to match case-insensitively; false opts that argument out of strict inference.
1783
+ */
1784
+ reference_resolvers?: Record<string, Record<string, false
1785
+ | {
1786
+ /** OperationId, "METHOD /path", MCP tool name, or dotted resource.method of the list operation. */
1787
+ via: string;
1788
+ /** Item fields compared exactly and case-insensitively, such as name, slug, key, or email. */
1789
+ match: string[];
1790
+ /** Item field substituted into the requested argument. Defaults to id. */
1791
+ id?: string;
1792
+ }>>;
1654
1793
  }
1655
1794
 
1656
1795
  /** Response shape for McpBehavior. */
1657
1796
  export interface McpBehaviorRead {
1658
1797
  /** Stable official MCP registry name, independent of the server runtime. */
1659
1798
  registry_name?: string | null;
1799
+ /**
1800
+ * Authorization for callers connecting to a generated MCP server deployed over HTTP. The hosting
1801
+ * application resolves upstream API credentials separately at runtime. This setting does not
1802
+ * apply to the Typeship-hosted endpoint.
1803
+ */
1804
+ access?: {
1805
+ /**
1806
+ * Exact issuer allowed to sign MCP connection tokens.
1807
+ * Format: uri
1808
+ */
1809
+ issuer: string;
1810
+ /**
1811
+ * Canonical public URL of the self-hosted MCP endpoint that connection tokens must target.
1812
+ * Format: uri
1813
+ */
1814
+ resource: string;
1815
+ /**
1816
+ * Public signing-key endpoint. Omit to discover it from the issuer.
1817
+ * Format: uri
1818
+ */
1819
+ jwks_url?: string;
1820
+ /** Minimum scopes required to connect to the self-hosted MCP server. */
1821
+ scopes?: string[];
1822
+ };
1660
1823
  /**
1661
1824
  * MCP tool shape. meta collapses per-operation tools into search_docs, read_docs, and execute so
1662
1825
  * large APIs don't flood an agent's context window. Auto considers the serialized tool schemas,
@@ -1676,6 +1839,30 @@ export interface McpBehaviorRead {
1676
1839
  * match no operation are reported as generation warnings.
1677
1840
  */
1678
1841
  tool_descriptions?: Record<string, string>;
1842
+ /**
1843
+ * Exact name-or-ID resolver overrides keyed first by the target operationId or "METHOD /path",
1844
+ * then by its wire argument name. A resolver names one read collection operation plus 1-4 item
1845
+ * fields to match case-insensitively; false opts that argument out of strict inference.
1846
+ */
1847
+ reference_resolvers?: Record<string, Record<string, false | (string & {})
1848
+ | {
1849
+ /** OperationId, "METHOD /path", MCP tool name, or dotted resource.method of the list operation. */
1850
+ via: string;
1851
+ /** Item fields compared exactly and case-insensitively, such as name, slug, key, or email. */
1852
+ match: string[];
1853
+ /** Item field substituted into the requested argument. Defaults to id. */
1854
+ id?: string;
1855
+ }>>;
1856
+ }
1857
+
1858
+ /** Generated README behavior. Part of Config. */
1859
+ export interface ReadmeBehavior {
1860
+ /**
1861
+ * operationId or "METHOD /path" to feature as the README's first API call. It must be present in
1862
+ * the generated package and callable with no required input beyond path placeholders. Missing or
1863
+ * unsuitable choices produce a warning and use the automatic example.
1864
+ */
1865
+ quickstart_operation?: string | null;
1679
1866
  }
1680
1867
 
1681
1868
  /**
@@ -1700,7 +1887,7 @@ export interface PackageBehavior {
1700
1887
 
1701
1888
  /**
1702
1889
  * Everything Typeship needs beyond the Definition, in one object: generation customization
1703
- * (globals, retries, pagination) and how the generated tooling behaves (cli, mcp, package,
1890
+ * (globals, retries, pagination, readme) and how the generated tooling behaves (cli, mcp, package,
1704
1891
  * docs_url). Plain configuration. Typeship never requires vendor extensions inside the Definition
1705
1892
  * itself. Stateless generation also accepts GraphQL settings here; stored projects keep those
1706
1893
  * settings on their Definition.
@@ -1719,8 +1906,10 @@ export interface Config {
1719
1906
  */
1720
1907
  pagination?: Record<string, PaginationRule | boolean>;
1721
1908
  graphql?: GraphqlSettings;
1909
+ auth?: AuthenticationConfig;
1722
1910
  cli?: CliBehavior;
1723
1911
  mcp?: McpBehavior;
1912
+ readme?: ReadmeBehavior;
1724
1913
  package?: PackageBehavior;
1725
1914
  /**
1726
1915
  * The API's documentation site. Read through its llms.txt by the generated CLI's docs command,
@@ -1750,8 +1939,10 @@ export interface ConfigRead {
1750
1939
  */
1751
1940
  pagination?: Record<string, PaginationRuleRead | boolean>;
1752
1941
  graphql?: GraphqlSettingsRead;
1942
+ auth?: AuthenticationConfig;
1753
1943
  cli?: CliBehavior;
1754
1944
  mcp?: McpBehaviorRead;
1945
+ readme?: ReadmeBehavior;
1755
1946
  package?: PackageBehavior;
1756
1947
  /**
1757
1948
  * The API's documentation site. Read through its llms.txt by the generated CLI's docs command,
@@ -1769,8 +1960,8 @@ export interface ConfigRead {
1769
1960
  /**
1770
1961
  * Shared generated-client and tooling behavior for a stored Project. Every Target inherits these
1771
1962
  * defaults. Target.config is merged over them for one Target; top-level values replace defaults
1772
- * while cli, mcp, and package merge by field. GraphQL-only source settings live on the Project's
1773
- * Definition and are rejected in both stored config scopes.
1963
+ * while cli, mcp, auth, readme, and package merge by field. GraphQL-only source settings live on
1964
+ * the Project's Definition and are rejected in both stored config scopes.
1774
1965
  */
1775
1966
  export interface ProjectConfig {
1776
1967
  /**
@@ -1785,8 +1976,10 @@ export interface ProjectConfig {
1785
1976
  * reported as generation warnings.
1786
1977
  */
1787
1978
  pagination?: Record<string, PaginationRule | boolean>;
1979
+ auth?: AuthenticationConfig;
1788
1980
  cli?: CliBehavior;
1789
1981
  mcp?: McpBehavior;
1982
+ readme?: ReadmeBehavior;
1790
1983
  package?: PackageBehavior;
1791
1984
  /**
1792
1985
  * The API's documentation site. Read through its llms.txt by the generated CLI's docs command,
@@ -1815,8 +2008,10 @@ export interface ProjectConfigRead {
1815
2008
  * reported as generation warnings.
1816
2009
  */
1817
2010
  pagination?: Record<string, PaginationRuleRead | boolean>;
2011
+ auth?: AuthenticationConfig;
1818
2012
  cli?: CliBehavior;
1819
2013
  mcp?: McpBehaviorRead;
2014
+ readme?: ReadmeBehavior;
1820
2015
  package?: PackageBehavior;
1821
2016
  /**
1822
2017
  * The API's documentation site. Read through its llms.txt by the generated CLI's docs command,
@@ -1831,6 +2026,42 @@ export interface ProjectConfigRead {
1831
2026
  docs_index_url?: string | null;
1832
2027
  }
1833
2028
 
2029
+ /**
2030
+ * Target-specific generation and delivery overrides. Authentication may only select a Project-owned
2031
+ * OAuth application. OAuth server metadata, applications, and identity policy remain Project-owned.
2032
+ * Self-hosted MCP access may be overridden for a Target-specific deployment.
2033
+ */
2034
+ export interface TargetConfig {
2035
+ globals?: string[];
2036
+ retries?: RetryTuning;
2037
+ pagination?: Record<string, PaginationRule | boolean>;
2038
+ auth?: TargetAuthenticationConfig;
2039
+ cli?: CliBehavior;
2040
+ mcp?: McpBehavior;
2041
+ readme?: ReadmeBehavior;
2042
+ package?: PackageBehavior;
2043
+ /** Format: uri */
2044
+ docs_url?: string | null;
2045
+ /** Format: uri */
2046
+ docs_index_url?: string | null;
2047
+ }
2048
+
2049
+ /** Response shape for TargetConfig. */
2050
+ export interface TargetConfigRead {
2051
+ globals?: string[];
2052
+ retries?: RetryTuning;
2053
+ pagination?: Record<string, PaginationRuleRead | boolean>;
2054
+ auth?: TargetAuthenticationConfig;
2055
+ cli?: CliBehavior;
2056
+ mcp?: McpBehaviorRead;
2057
+ readme?: ReadmeBehavior;
2058
+ package?: PackageBehavior;
2059
+ /** Format: uri */
2060
+ docs_url?: string | null;
2061
+ /** Format: uri */
2062
+ docs_index_url?: string | null;
2063
+ }
2064
+
1834
2065
  /** What a GraphQL schema cannot say about itself. Ignored for OpenAPI specs. */
1835
2066
  export interface GraphqlSettings {
1836
2067
  /**
@@ -1964,6 +2195,38 @@ export interface FileStub {
1964
2195
  bytes: number;
1965
2196
  }
1966
2197
 
2198
+ export const GenerationStatus = {
2199
+ SUCCEEDED: "succeeded",
2200
+ FAILED: "failed",
2201
+ } as const;
2202
+ export type GenerationStatus = (typeof GenerationStatus)[keyof typeof GenerationStatus];
2203
+
2204
+ export const GenerationTrigger = {
2205
+ MANUAL: "manual",
2206
+ WEBHOOK: "webhook",
2207
+ POLL: "poll",
2208
+ PREVIEW: "preview",
2209
+ } as const;
2210
+ export type GenerationTrigger = (typeof GenerationTrigger)[keyof typeof GenerationTrigger];
2211
+
2212
+ export interface GenerationProvenance {
2213
+ /** Pinned generator contract edition. */
2214
+ generator_edition: string;
2215
+ /** Exact engine build identifier used for replay and support. */
2216
+ engine_build: string;
2217
+ /**
2218
+ * Immutable effective Target configuration used by this run; source credentials are never
2219
+ * included.
2220
+ */
2221
+ resolved_config: Record<string, unknown> | null;
2222
+ config_hash: string | null;
2223
+ /** Resolved generator and entitlement plan used to select the emitted public surface. */
2224
+ surface_plan: Record<string, unknown> | null;
2225
+ surface_plan_hash: string | null;
2226
+ entitlement_cap: number | null;
2227
+ package_version: string | null;
2228
+ }
2229
+
1967
2230
  export interface Generation {
1968
2231
  id: GenerationId;
1969
2232
  object: "generation";
@@ -1975,29 +2238,13 @@ export interface Generation {
1975
2238
  files_index?: FileStub[];
1976
2239
  project_id: ProjectId;
1977
2240
  definition_revision_id: DefinitionRevisionId | null;
1978
- status: "succeeded" | "failed";
1979
- trigger: "manual" | "webhook" | "poll" | "preview";
2241
+ status: GenerationStatus;
2242
+ trigger: GenerationTrigger;
1980
2243
  /** Persisted Target identity. Null only for stateless generation. */
1981
2244
  target_id: TargetId | null;
1982
2245
  /** Resolved generator implementation; provenance rather than resource identity. */
1983
2246
  generator: GeneratorKind;
1984
- provenance: {
1985
- /** Pinned generator contract edition. */
1986
- generator_edition: string;
1987
- /** Exact engine build identifier used for replay and support. */
1988
- engine_build: string;
1989
- /**
1990
- * Immutable effective Target configuration used by this run; source credentials are never
1991
- * included.
1992
- */
1993
- resolved_config: Record<string, unknown> | null;
1994
- config_hash: string | null;
1995
- /** Resolved generator and entitlement plan used to select the emitted public surface. */
1996
- surface_plan: Record<string, unknown> | null;
1997
- surface_plan_hash: string | null;
1998
- entitlement_cap: number | null;
1999
- package_version: string | null;
2000
- };
2247
+ provenance: GenerationProvenance;
2001
2248
  /** Null only for a failed or legacy generation that produced no metadata. */
2002
2249
  meta: GenerationMeta | null;
2003
2250
  warnings: string[];
@@ -2020,29 +2267,13 @@ export interface GenerationWrite {
2020
2267
  files_index?: FileStub[];
2021
2268
  project_id: ProjectId;
2022
2269
  definition_revision_id: DefinitionRevisionId | null;
2023
- status: "succeeded" | "failed";
2024
- trigger: "manual" | "webhook" | "poll" | "preview";
2270
+ status: GenerationStatus;
2271
+ trigger: GenerationTrigger;
2025
2272
  /** Persisted Target identity. Null only for stateless generation. */
2026
2273
  target_id: TargetId | null;
2027
2274
  /** Resolved generator implementation; provenance rather than resource identity. */
2028
2275
  generator: GeneratorKind;
2029
- provenance: {
2030
- /** Pinned generator contract edition. */
2031
- generator_edition: string;
2032
- /** Exact engine build identifier used for replay and support. */
2033
- engine_build: string;
2034
- /**
2035
- * Immutable effective Target configuration used by this run; source credentials are never
2036
- * included.
2037
- */
2038
- resolved_config: Record<string, unknown> | null;
2039
- config_hash: string | null;
2040
- /** Resolved generator and entitlement plan used to select the emitted public surface. */
2041
- surface_plan: Record<string, unknown> | null;
2042
- surface_plan_hash: string | null;
2043
- entitlement_cap: number | null;
2044
- package_version: string | null;
2045
- };
2276
+ provenance: GenerationProvenance;
2046
2277
  /** Null only for a failed or legacy generation that produced no metadata. */
2047
2278
  meta: GenerationMeta | null;
2048
2279
  warnings: string[];
@@ -2066,29 +2297,13 @@ export interface GenerationRead {
2066
2297
  files_index?: FileStub[];
2067
2298
  project_id: ProjectId;
2068
2299
  definition_revision_id: DefinitionRevisionId | null;
2069
- status: ("succeeded" | "failed") | (string & {});
2070
- trigger: ("manual" | "webhook" | "poll" | "preview") | (string & {});
2300
+ status: GenerationStatus | (string & {});
2301
+ trigger: GenerationTrigger | (string & {});
2071
2302
  /** Persisted Target identity. Null only for stateless generation. */
2072
2303
  target_id: TargetId | null;
2073
2304
  /** Resolved generator implementation; provenance rather than resource identity. */
2074
2305
  generator: GeneratorKind | (string & {});
2075
- provenance: {
2076
- /** Pinned generator contract edition. */
2077
- generator_edition: string;
2078
- /** Exact engine build identifier used for replay and support. */
2079
- engine_build: string;
2080
- /**
2081
- * Immutable effective Target configuration used by this run; source credentials are never
2082
- * included.
2083
- */
2084
- resolved_config: Record<string, unknown> | null;
2085
- config_hash: string | null;
2086
- /** Resolved generator and entitlement plan used to select the emitted public surface. */
2087
- surface_plan: Record<string, unknown> | null;
2088
- surface_plan_hash: string | null;
2089
- entitlement_cap: number | null;
2090
- package_version: string | null;
2091
- };
2306
+ provenance: GenerationProvenance;
2092
2307
  /** Null only for a failed or legacy generation that produced no metadata. */
2093
2308
  meta: GenerationMetaRead | null;
2094
2309
  warnings: string[];
@@ -2100,6 +2315,71 @@ export interface GenerationRead {
2100
2315
  request_id?: RequestId;
2101
2316
  }
2102
2317
 
2318
+ /**
2319
+ * Generation metadata returned by collection endpoints. Generated file contents and file indexes
2320
+ * are available only from retrieve and create operations.
2321
+ */
2322
+ export interface GenerationSummary {
2323
+ id: GenerationId;
2324
+ object: "generation";
2325
+ project_id: ProjectId;
2326
+ definition_revision_id: DefinitionRevisionId | null;
2327
+ status: GenerationStatus;
2328
+ trigger: GenerationTrigger;
2329
+ /** Persisted Target identity. Null only for stateless generation. */
2330
+ target_id: TargetId | null;
2331
+ /** Resolved generator implementation; provenance rather than resource identity. */
2332
+ generator: GeneratorKind;
2333
+ provenance: GenerationProvenance;
2334
+ /** Null only for a failed or legacy generation that produced no metadata. */
2335
+ meta: GenerationMeta | null;
2336
+ warnings: string[];
2337
+ error: string | null;
2338
+ /** Format: date-time */
2339
+ created_at: string;
2340
+ }
2341
+
2342
+ /** Request shape for GenerationSummary. */
2343
+ export interface GenerationSummaryWrite {
2344
+ id: GenerationId;
2345
+ project_id: ProjectId;
2346
+ definition_revision_id: DefinitionRevisionId | null;
2347
+ status: GenerationStatus;
2348
+ trigger: GenerationTrigger;
2349
+ /** Persisted Target identity. Null only for stateless generation. */
2350
+ target_id: TargetId | null;
2351
+ /** Resolved generator implementation; provenance rather than resource identity. */
2352
+ generator: GeneratorKind;
2353
+ provenance: GenerationProvenance;
2354
+ /** Null only for a failed or legacy generation that produced no metadata. */
2355
+ meta: GenerationMeta | null;
2356
+ warnings: string[];
2357
+ error: string | null;
2358
+ /** Format: date-time */
2359
+ created_at: string;
2360
+ }
2361
+
2362
+ /** Response shape for GenerationSummary. */
2363
+ export interface GenerationSummaryRead {
2364
+ id: GenerationId;
2365
+ object: "generation" | (string & {});
2366
+ project_id: ProjectId;
2367
+ definition_revision_id: DefinitionRevisionId | null;
2368
+ status: GenerationStatus | (string & {});
2369
+ trigger: GenerationTrigger | (string & {});
2370
+ /** Persisted Target identity. Null only for stateless generation. */
2371
+ target_id: TargetId | null;
2372
+ /** Resolved generator implementation; provenance rather than resource identity. */
2373
+ generator: GeneratorKind | (string & {});
2374
+ provenance: GenerationProvenance;
2375
+ /** Null only for a failed or legacy generation that produced no metadata. */
2376
+ meta: GenerationMetaRead | null;
2377
+ warnings: string[];
2378
+ error: string | null;
2379
+ /** Format: date-time */
2380
+ created_at: string;
2381
+ }
2382
+
2103
2383
  export type GenerationResponse = Generation & ResponseMetadata;
2104
2384
 
2105
2385
  /** Request shape for GenerationResponse. */
@@ -2124,20 +2404,24 @@ export interface GenerationFailureRead {
2124
2404
  error: string;
2125
2405
  }
2126
2406
 
2407
+ /**
2408
+ * Metadata for each Target generation attempted by a Project run. Retrieve one Generation
2409
+ * separately for generated files.
2410
+ */
2127
2411
  export interface GenerationBatch {
2128
- data: Array<Generation | GenerationFailure>;
2412
+ data: Array<GenerationSummary | GenerationFailure>;
2129
2413
  request_id: RequestId;
2130
2414
  }
2131
2415
 
2132
2416
  /** Request shape for GenerationBatch. */
2133
2417
  export interface GenerationBatchWrite {
2134
- data: Array<GenerationWrite | GenerationFailure>;
2418
+ data: Array<GenerationSummaryWrite | GenerationFailure>;
2135
2419
  request_id: RequestId;
2136
2420
  }
2137
2421
 
2138
2422
  /** Response shape for GenerationBatch. */
2139
2423
  export interface GenerationBatchRead {
2140
- data: Array<GenerationRead | GenerationFailureRead>;
2424
+ data: Array<GenerationSummaryRead | GenerationFailureRead>;
2141
2425
  request_id: RequestId;
2142
2426
  }
2143
2427
 
@@ -2306,7 +2590,7 @@ export interface ProjectListRead {
2306
2590
 
2307
2591
  export interface GenerationList {
2308
2592
  object: ListObject;
2309
- data: Generation[];
2593
+ data: GenerationSummary[];
2310
2594
  /** Whether another page is available after this one. */
2311
2595
  has_more: boolean;
2312
2596
  /** Pass this value as cursor to retrieve the next page; null on the last page. */
@@ -2317,7 +2601,7 @@ export interface GenerationList {
2317
2601
  /** Request shape for GenerationList. */
2318
2602
  export interface GenerationListWrite {
2319
2603
  object: ListObject;
2320
- data: GenerationWrite[];
2604
+ data: GenerationSummaryWrite[];
2321
2605
  /** Whether another page is available after this one. */
2322
2606
  has_more: boolean;
2323
2607
  /** Pass this value as cursor to retrieve the next page; null on the last page. */
@@ -2328,7 +2612,7 @@ export interface GenerationListWrite {
2328
2612
  /** Response shape for GenerationList. */
2329
2613
  export interface GenerationListRead {
2330
2614
  object: ListObject;
2331
- data: GenerationRead[];
2615
+ data: GenerationSummaryRead[];
2332
2616
  /** Whether another page is available after this one. */
2333
2617
  has_more: boolean;
2334
2618
  /** Pass this value as cursor to retrieve the next page; null on the last page. */
@@ -2433,6 +2717,7 @@ export const ErrorCode = {
2433
2717
  FETCH_ERROR: "fetch_error",
2434
2718
  REPOSITORY_PROVIDER_UNSUPPORTED: "repository_provider_unsupported",
2435
2719
  EDITION_UNAVAILABLE: "edition_unavailable",
2720
+ TARGET_BUSY: "target_busy",
2436
2721
  DELIVERY_CONFLICT: "delivery_conflict",
2437
2722
  RESOURCE_HAS_DEPENDENCIES: "resource_has_dependencies",
2438
2723
  PLAN_LIMIT_REACHED: "plan_limit_reached",