@superblocksteam/mcp-server 2.0.101-next.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.
- package/LICENSE.txt +87 -0
- package/README.md +264 -0
- package/dist/application/commit-history.d.ts +27 -0
- package/dist/application/commit-history.d.ts.map +1 -0
- package/dist/application/commit-history.js +36 -0
- package/dist/application/commit-history.js.map +1 -0
- package/dist/application/directory-tree.d.ts +11 -0
- package/dist/application/directory-tree.d.ts.map +1 -0
- package/dist/application/directory-tree.js +37 -0
- package/dist/application/directory-tree.js.map +1 -0
- package/dist/application/materialize-application.d.ts +16 -0
- package/dist/application/materialize-application.d.ts.map +1 -0
- package/dist/application/materialize-application.js +47 -0
- package/dist/application/materialize-application.js.map +1 -0
- package/dist/application/summary.d.ts +25 -0
- package/dist/application/summary.d.ts.map +1 -0
- package/dist/application/summary.js +42 -0
- package/dist/application/summary.js.map +1 -0
- package/dist/auth/commands.d.ts +3 -0
- package/dist/auth/commands.d.ts.map +1 -0
- package/dist/auth/commands.js +84 -0
- package/dist/auth/commands.js.map +1 -0
- package/dist/auth/resolve-auth.d.ts +14 -0
- package/dist/auth/resolve-auth.d.ts.map +1 -0
- package/dist/auth/resolve-auth.js +56 -0
- package/dist/auth/resolve-auth.js.map +1 -0
- package/dist/auth/store.d.ts +16 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +63 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/http.d.ts +9 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +404 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/profile.d.ts +3 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +7 -0
- package/dist/profile.js.map +1 -0
- package/dist/sdk/create-sdk.d.ts +3 -0
- package/dist/sdk/create-sdk.d.ts.map +1 -0
- package/dist/sdk/create-sdk.js +6 -0
- package/dist/sdk/create-sdk.js.map +1 -0
- package/dist/target/resolve-app-target.d.ts +87 -0
- package/dist/target/resolve-app-target.d.ts.map +1 -0
- package/dist/target/resolve-app-target.js +150 -0
- package/dist/target/resolve-app-target.js.map +1 -0
- package/dist/target/resolve-base-url-target.d.ts +102 -0
- package/dist/target/resolve-base-url-target.d.ts.map +1 -0
- package/dist/target/resolve-base-url-target.js +94 -0
- package/dist/target/resolve-base-url-target.js.map +1 -0
- package/dist/target/resolve-organization-target.d.ts +22 -0
- package/dist/target/resolve-organization-target.d.ts.map +1 -0
- package/dist/target/resolve-organization-target.js +50 -0
- package/dist/target/resolve-organization-target.js.map +1 -0
- package/dist/tool-call-result.d.ts +12 -0
- package/dist/tool-call-result.d.ts.map +1 -0
- package/dist/tool-call-result.js +28 -0
- package/dist/tool-call-result.js.map +1 -0
- package/dist/tools/assign-builder-seat.d.ts +3 -0
- package/dist/tools/assign-builder-seat.d.ts.map +1 -0
- package/dist/tools/assign-builder-seat.js +45 -0
- package/dist/tools/assign-builder-seat.js.map +1 -0
- package/dist/tools/check-promo.d.ts +3 -0
- package/dist/tools/check-promo.d.ts.map +1 -0
- package/dist/tools/check-promo.js +45 -0
- package/dist/tools/check-promo.js.map +1 -0
- package/dist/tools/checkout-application.d.ts +3 -0
- package/dist/tools/checkout-application.d.ts.map +1 -0
- package/dist/tools/checkout-application.js +65 -0
- package/dist/tools/checkout-application.js.map +1 -0
- package/dist/tools/contact-sales.d.ts +3 -0
- package/dist/tools/contact-sales.d.ts.map +1 -0
- package/dist/tools/contact-sales.js +46 -0
- package/dist/tools/contact-sales.js.map +1 -0
- package/dist/tools/create-application.d.ts +3 -0
- package/dist/tools/create-application.d.ts.map +1 -0
- package/dist/tools/create-application.js +52 -0
- package/dist/tools/create-application.js.map +1 -0
- package/dist/tools/create-billing-intent.d.ts +3 -0
- package/dist/tools/create-billing-intent.d.ts.map +1 -0
- package/dist/tools/create-billing-intent.js +42 -0
- package/dist/tools/create-billing-intent.js.map +1 -0
- package/dist/tools/create-checkout-session.d.ts +3 -0
- package/dist/tools/create-checkout-session.d.ts.map +1 -0
- package/dist/tools/create-checkout-session.js +44 -0
- package/dist/tools/create-checkout-session.js.map +1 -0
- package/dist/tools/create-folder.d.ts +3 -0
- package/dist/tools/create-folder.d.ts.map +1 -0
- package/dist/tools/create-folder.js +39 -0
- package/dist/tools/create-folder.js.map +1 -0
- package/dist/tools/create-integration.d.ts +3 -0
- package/dist/tools/create-integration.d.ts.map +1 -0
- package/dist/tools/create-integration.js +39 -0
- package/dist/tools/create-integration.js.map +1 -0
- package/dist/tools/delete-folder.d.ts +3 -0
- package/dist/tools/delete-folder.d.ts.map +1 -0
- package/dist/tools/delete-folder.js +42 -0
- package/dist/tools/delete-folder.js.map +1 -0
- package/dist/tools/delete-integration.d.ts +3 -0
- package/dist/tools/delete-integration.d.ts.map +1 -0
- package/dist/tools/delete-integration.js +39 -0
- package/dist/tools/delete-integration.js.map +1 -0
- package/dist/tools/deploy-application.d.ts +3 -0
- package/dist/tools/deploy-application.d.ts.map +1 -0
- package/dist/tools/deploy-application.js +79 -0
- package/dist/tools/deploy-application.js.map +1 -0
- package/dist/tools/downgrade-plan.d.ts +3 -0
- package/dist/tools/downgrade-plan.d.ts.map +1 -0
- package/dist/tools/downgrade-plan.js +42 -0
- package/dist/tools/downgrade-plan.js.map +1 -0
- package/dist/tools/find-apps-by-package.d.ts +3 -0
- package/dist/tools/find-apps-by-package.d.ts.map +1 -0
- package/dist/tools/find-apps-by-package.js +124 -0
- package/dist/tools/find-apps-by-package.js.map +1 -0
- package/dist/tools/get-app-activity-report.d.ts +3 -0
- package/dist/tools/get-app-activity-report.d.ts.map +1 -0
- package/dist/tools/get-app-activity-report.js +88 -0
- package/dist/tools/get-app-activity-report.js.map +1 -0
- package/dist/tools/get-application-access.d.ts +3 -0
- package/dist/tools/get-application-access.d.ts.map +1 -0
- package/dist/tools/get-application-access.js +35 -0
- package/dist/tools/get-application-access.js.map +1 -0
- package/dist/tools/get-application-commit-history.d.ts +3 -0
- package/dist/tools/get-application-commit-history.d.ts.map +1 -0
- package/dist/tools/get-application-commit-history.js +55 -0
- package/dist/tools/get-application-commit-history.js.map +1 -0
- package/dist/tools/get-application-dependencies.d.ts +3 -0
- package/dist/tools/get-application-dependencies.d.ts.map +1 -0
- package/dist/tools/get-application-dependencies.js +109 -0
- package/dist/tools/get-application-dependencies.js.map +1 -0
- package/dist/tools/get-application-structure.d.ts +3 -0
- package/dist/tools/get-application-structure.d.ts.map +1 -0
- package/dist/tools/get-application-structure.js +98 -0
- package/dist/tools/get-application-structure.js.map +1 -0
- package/dist/tools/get-application-summary.d.ts +3 -0
- package/dist/tools/get-application-summary.d.ts.map +1 -0
- package/dist/tools/get-application-summary.js +46 -0
- package/dist/tools/get-application-summary.js.map +1 -0
- package/dist/tools/get-audit-entities.d.ts +3 -0
- package/dist/tools/get-audit-entities.d.ts.map +1 -0
- package/dist/tools/get-audit-entities.js +37 -0
- package/dist/tools/get-audit-entities.js.map +1 -0
- package/dist/tools/get-audit-events.d.ts +3 -0
- package/dist/tools/get-audit-events.d.ts.map +1 -0
- package/dist/tools/get-audit-events.js +49 -0
- package/dist/tools/get-audit-events.js.map +1 -0
- package/dist/tools/get-audit-logs.d.ts +3 -0
- package/dist/tools/get-audit-logs.d.ts.map +1 -0
- package/dist/tools/get-audit-logs.js +52 -0
- package/dist/tools/get-audit-logs.js.map +1 -0
- package/dist/tools/get-auth-status.d.ts +3 -0
- package/dist/tools/get-auth-status.d.ts.map +1 -0
- package/dist/tools/get-auth-status.js +34 -0
- package/dist/tools/get-auth-status.js.map +1 -0
- package/dist/tools/get-billing-plan-summary.d.ts +3 -0
- package/dist/tools/get-billing-plan-summary.d.ts.map +1 -0
- package/dist/tools/get-billing-plan-summary.js +32 -0
- package/dist/tools/get-billing-plan-summary.js.map +1 -0
- package/dist/tools/get-billing-usage-daily.d.ts +3 -0
- package/dist/tools/get-billing-usage-daily.d.ts.map +1 -0
- package/dist/tools/get-billing-usage-daily.js +37 -0
- package/dist/tools/get-billing-usage-daily.js.map +1 -0
- package/dist/tools/get-billing-usage-records.d.ts +3 -0
- package/dist/tools/get-billing-usage-records.d.ts.map +1 -0
- package/dist/tools/get-billing-usage-records.js +46 -0
- package/dist/tools/get-billing-usage-records.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +3 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +38 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-git-fresh-token.d.ts +3 -0
- package/dist/tools/get-git-fresh-token.d.ts.map +1 -0
- package/dist/tools/get-git-fresh-token.js +42 -0
- package/dist/tools/get-git-fresh-token.js.map +1 -0
- package/dist/tools/get-integration-access.d.ts +3 -0
- package/dist/tools/get-integration-access.d.ts.map +1 -0
- package/dist/tools/get-integration-access.js +41 -0
- package/dist/tools/get-integration-access.js.map +1 -0
- package/dist/tools/get-integration.d.ts +3 -0
- package/dist/tools/get-integration.d.ts.map +1 -0
- package/dist/tools/get-integration.js +39 -0
- package/dist/tools/get-integration.js.map +1 -0
- package/dist/tools/get-job-access.d.ts +3 -0
- package/dist/tools/get-job-access.d.ts.map +1 -0
- package/dist/tools/get-job-access.js +41 -0
- package/dist/tools/get-job-access.js.map +1 -0
- package/dist/tools/get-knowledge.d.ts +3 -0
- package/dist/tools/get-knowledge.d.ts.map +1 -0
- package/dist/tools/get-knowledge.js +48 -0
- package/dist/tools/get-knowledge.js.map +1 -0
- package/dist/tools/get-organization-summary.d.ts +3 -0
- package/dist/tools/get-organization-summary.d.ts.map +1 -0
- package/dist/tools/get-organization-summary.js +48 -0
- package/dist/tools/get-organization-summary.js.map +1 -0
- package/dist/tools/get-workflow-access.d.ts +3 -0
- package/dist/tools/get-workflow-access.d.ts.map +1 -0
- package/dist/tools/get-workflow-access.js +41 -0
- package/dist/tools/get-workflow-access.js.map +1 -0
- package/dist/tools/grant-resource-access.d.ts +3 -0
- package/dist/tools/grant-resource-access.d.ts.map +1 -0
- package/dist/tools/grant-resource-access.js +62 -0
- package/dist/tools/grant-resource-access.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +112 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-applications.d.ts +3 -0
- package/dist/tools/list-applications.d.ts.map +1 -0
- package/dist/tools/list-applications.js +82 -0
- package/dist/tools/list-applications.js.map +1 -0
- package/dist/tools/list-builder-seats.d.ts +3 -0
- package/dist/tools/list-builder-seats.d.ts.map +1 -0
- package/dist/tools/list-builder-seats.js +42 -0
- package/dist/tools/list-builder-seats.js.map +1 -0
- package/dist/tools/list-folders.d.ts +3 -0
- package/dist/tools/list-folders.d.ts.map +1 -0
- package/dist/tools/list-folders.js +39 -0
- package/dist/tools/list-folders.js.map +1 -0
- package/dist/tools/list-integrations.d.ts +3 -0
- package/dist/tools/list-integrations.d.ts.map +1 -0
- package/dist/tools/list-integrations.js +41 -0
- package/dist/tools/list-integrations.js.map +1 -0
- package/dist/tools/list-knowledge.d.ts +3 -0
- package/dist/tools/list-knowledge.d.ts.map +1 -0
- package/dist/tools/list-knowledge.js +56 -0
- package/dist/tools/list-knowledge.js.map +1 -0
- package/dist/tools/list-organization-agents.d.ts +3 -0
- package/dist/tools/list-organization-agents.d.ts.map +1 -0
- package/dist/tools/list-organization-agents.js +46 -0
- package/dist/tools/list-organization-agents.js.map +1 -0
- package/dist/tools/list-rbac-assignments.d.ts +3 -0
- package/dist/tools/list-rbac-assignments.d.ts.map +1 -0
- package/dist/tools/list-rbac-assignments.js +57 -0
- package/dist/tools/list-rbac-assignments.js.map +1 -0
- package/dist/tools/map-rbac-assignments.d.ts +35 -0
- package/dist/tools/map-rbac-assignments.d.ts.map +1 -0
- package/dist/tools/map-rbac-assignments.js +22 -0
- package/dist/tools/map-rbac-assignments.js.map +1 -0
- package/dist/tools/registry.d.ts +26 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +25 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/revoke-resource-access.d.ts +3 -0
- package/dist/tools/revoke-resource-access.d.ts.map +1 -0
- package/dist/tools/revoke-resource-access.js +39 -0
- package/dist/tools/revoke-resource-access.js.map +1 -0
- package/dist/tools/schemas.d.ts +115 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +783 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/server-api.d.ts +12 -0
- package/dist/tools/server-api.d.ts.map +1 -0
- package/dist/tools/server-api.js +59 -0
- package/dist/tools/server-api.js.map +1 -0
- package/dist/tools/submit-payment.d.ts +3 -0
- package/dist/tools/submit-payment.d.ts.map +1 -0
- package/dist/tools/submit-payment.js +44 -0
- package/dist/tools/submit-payment.js.map +1 -0
- package/dist/tools/unassign-builder-seat.d.ts +3 -0
- package/dist/tools/unassign-builder-seat.d.ts.map +1 -0
- package/dist/tools/unassign-builder-seat.js +44 -0
- package/dist/tools/unassign-builder-seat.js.map +1 -0
- package/dist/tools/update-folder.d.ts +3 -0
- package/dist/tools/update-folder.d.ts.map +1 -0
- package/dist/tools/update-folder.js +42 -0
- package/dist/tools/update-folder.js.map +1 -0
- package/dist/tools/update-integration.d.ts +3 -0
- package/dist/tools/update-integration.d.ts.map +1 -0
- package/dist/tools/update-integration.js +40 -0
- package/dist/tools/update-integration.js.map +1 -0
- package/dist/tools/update-resource-access.d.ts +3 -0
- package/dist/tools/update-resource-access.d.ts.map +1 -0
- package/dist/tools/update-resource-access.js +44 -0
- package/dist/tools/update-resource-access.js.map +1 -0
- package/dist/tools/update-subscription.d.ts +3 -0
- package/dist/tools/update-subscription.d.ts.map +1 -0
- package/dist/tools/update-subscription.js +44 -0
- package/dist/tools/update-subscription.js.map +1 -0
- package/dist/tools/validation.d.ts +3 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +10 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/urls.d.ts +4 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.js +33 -0
- package/dist/urls.js.map +1 -0
- package/package.json +58 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
Superblocks Community Software License
|
|
2
|
+
|
|
3
|
+
This Superblocks Community License Agreement (the “Agreement”) sets forth the terms on which DayZero
|
|
4
|
+
Software, Inc. d/b/a Superblocks (“Superblocks”) makes available certain software made available by Superblocks
|
|
5
|
+
under this Agreement (the “Software”). BY INSTALLING, DOWNLOADING, ACCESSING, USING OR
|
|
6
|
+
DISTRIBUTING ANY OF THE SOFTWARE, YOU AGREE TO THE TERMS AND CONDITIONS OF THIS
|
|
7
|
+
AGREEMENT.IF YOU DO NOT AGREE TO SUCH TERMS AND CONDITIONS, YOU MUST NOT USE THE
|
|
8
|
+
SOFTWARE. IF YOU ARE RECEIVING THE SOFTWARE ON BEHALF OF A LEGAL ENTITY, YOU
|
|
9
|
+
REPRESENT AND WARRANT THAT YOU HAVE THE ACTUAL AUTHORITY TO AGREE TO THE
|
|
10
|
+
TERMS AND CONDITIONS OF THIS AGREEMENT ON BEHALF OF SUCH ENTITY. “Licensee” means you,
|
|
11
|
+
an individual, or the entity on whose behalf you are receiving the Software.
|
|
12
|
+
|
|
13
|
+
1. LICENSE GRANT AND CONDITIONS.
|
|
14
|
+
|
|
15
|
+
1.1 License. Subject to the terms and conditions of this Agreement, Superblocks hereby grants to Licensee a
|
|
16
|
+
non-exclusive, royalty-free, worldwide, non-transferable, non-sublicenseable license during the term of this
|
|
17
|
+
Agreement to: (a) use the Software; (b) prepare modifications and derivative works of the Software; (c)
|
|
18
|
+
distribute the Software (including without limitation in source code or object code form); and (d) reproduce
|
|
19
|
+
copies of the Software (the “License”). Licensee is not granted the right to, and Licensee shall not, exercise the
|
|
20
|
+
License for an Excluded Purpose. For purposes of this Agreement, “Excluded Purpose” means making
|
|
21
|
+
available any software-as-a-service, platform-as-a-service, infrastructure-as-a-service or other similar online
|
|
22
|
+
service that competes with Superblocks’ products or services.
|
|
23
|
+
|
|
24
|
+
1.2 Conditions. In consideration of the License, Licensee’s distribution of the Software is subject to the
|
|
25
|
+
following conditions:
|
|
26
|
+
|
|
27
|
+
a. Licensee must cause any Software modified by Licensee to carry prominent notices stating that Licensee
|
|
28
|
+
modified the Software.
|
|
29
|
+
b. On each Software copy, Licensee shall reproduce and not remove or alter all Superblocks or third party
|
|
30
|
+
copyright or other proprietary notices contained in the Software, and Licensee must provide the notice
|
|
31
|
+
below with each copy.
|
|
32
|
+
|
|
33
|
+
“This software is made available by DayZero Software, Inc. d/b/a Superblocks, under the terms of the
|
|
34
|
+
Superblocks Community License Agreement. © 2022 DayZero Software, Inc.”
|
|
35
|
+
|
|
36
|
+
1.3 Licensee Modifications. Licensee may add its own copyright notices to modifications made by Licensee
|
|
37
|
+
and may provide additional or different license terms and conditions for use, reproduction, or distribution of
|
|
38
|
+
Licensee’s modifications. While redistributing the Software or modifications thereof, Licensee may choose to
|
|
39
|
+
offer, for a fee or free of charge, support, warranty, indemnity, or other obligations. Licensee, and not
|
|
40
|
+
Superblocks, will be responsible for any such obligations.
|
|
41
|
+
|
|
42
|
+
1.4 No Sublicensing. The License does not include the right to sublicense the Software, however, each recipient
|
|
43
|
+
to which Licensee provides the Software may exercise the Licenses so long as such recipient agrees to the terms
|
|
44
|
+
and conditions of this Agreement.
|
|
45
|
+
|
|
46
|
+
2. TERM AND TERMINATION. This Agreement will continue unless and until earlier terminated as set forth
|
|
47
|
+
herein. If Licensee breaches any of its conditions or obligations under this Agreement, this Agreement will
|
|
48
|
+
terminate automatically and the License will terminate automatically and permanently.
|
|
49
|
+
|
|
50
|
+
3. INTELLECTUAL PROPERTY. As between the parties, Superblocks will retain all right, title, and interest in
|
|
51
|
+
the Software, and all intellectual property rights therein. Superblocks hereby reserves all rights not expressly
|
|
52
|
+
granted to Licensee in this Agreement. Superblocks hereby reserves all rights in its trademarks and service
|
|
53
|
+
marks, and no licenses therein are granted in this Agreement.
|
|
54
|
+
|
|
55
|
+
4. DISCLAIMER. SUPERBLOCKS HEREBY DISCLAIMS ANY AND ALL WARRANTIES AND
|
|
56
|
+
CONDITIONS, EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, AND SPECIFICALLY
|
|
57
|
+
DISCLAIMS ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
|
|
58
|
+
PURPOSE, WITH RESPECT TO THE SOFTWARE.
|
|
59
|
+
|
|
60
|
+
5. LIMITATION OF LIABILITY. SUPERBLOCKS WILL NOT BE LIABLE FOR ANY DAMAGES OF
|
|
61
|
+
ANY KIND, INCLUDING BUT NOT LIMITED TO, LOST PROFITS OR ANY CONSEQUENTIAL,
|
|
62
|
+
SPECIAL, INCIDENTAL, INDIRECT, OR DIRECT DAMAGES, HOWEVER CAUSED AND ON ANY
|
|
63
|
+
THEORY OF LIABILITY, ARISING OUT OF THIS AGREEMENT. THE FOREGOING SHALL APPLY TO
|
|
64
|
+
THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
65
|
+
|
|
66
|
+
6. GENERAL.
|
|
67
|
+
|
|
68
|
+
6.1 Governing Law. This Agreement will be governed by and interpreted in accordance with the laws of the
|
|
69
|
+
state of California, without reference to its conflict of laws principles. If Licensee is located within the United
|
|
70
|
+
States, all disputes arising out of this Agreement are subject to the exclusive jurisdiction of courts located in San
|
|
71
|
+
Mateo County, California. USA. If Licensee is located outside of the United States, any dispute, controversy or
|
|
72
|
+
claim arising out of or relating to this Agreement will be referred to and finally determined by arbitration in
|
|
73
|
+
accordance with the JAMS International Arbitration Rules. The tribunal will consist of one neutral arbitrator.
|
|
74
|
+
The place of arbitration will be Palo Alto, California. The language to be used in the arbitral proceedings will be
|
|
75
|
+
English. Judgment upon the award rendered by the arbitrator may be entered in any court having jurisdiction
|
|
76
|
+
thereof.
|
|
77
|
+
|
|
78
|
+
6.2. Assignment. Licensee may not assign its rights under this Agreement to any third party. Superblocks may
|
|
79
|
+
freely assign its rights under this Agreement to any third party.
|
|
80
|
+
|
|
81
|
+
6.3. Other. This Agreement is the entire agreement between the parties regarding the subject matter hereof.
|
|
82
|
+
No amendment or modification of this Agreement will be valid or binding upon the parties unless made in
|
|
83
|
+
writing and signed by the duly authorized representatives of both parties. In the event that any provision,
|
|
84
|
+
including without limitation any condition, of this Agreement is held to be unenforceable, this Agreement and
|
|
85
|
+
all licenses and rights granted hereunder will immediately terminate. Waiver by Superblocks of a breach of any
|
|
86
|
+
provision of this Agreement or the failure by Superblocks to exercise any right hereunder will not be construed
|
|
87
|
+
as a waiver of any subsequent breach of that right or as a waiver of any other right.
|
package/README.md
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# Superblocks MCP Server
|
|
2
|
+
|
|
3
|
+
A [Model Context Protocol](https://modelcontextprotocol.io/) server that connects AI assistants (Claude, ChatGPT, Cursor, and other MCP clients) to the Superblocks platform. It lets AI agents inspect, create, and manage Superblocks applications on your behalf.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
For a beginner-friendly walkthrough, see [`QUICKSTART.md`](./QUICKSTART.md).
|
|
8
|
+
|
|
9
|
+
### Via the Superblocks CLI (recommended)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Install the Superblocks CLI
|
|
13
|
+
npm install -g @superblocksteam/cli
|
|
14
|
+
|
|
15
|
+
# Authenticate
|
|
16
|
+
superblocks login
|
|
17
|
+
|
|
18
|
+
# Start the MCP server (stdio, for Cursor / Claude Desktop)
|
|
19
|
+
superblocks mcp serve
|
|
20
|
+
|
|
21
|
+
# Generate configuration for your MCP client
|
|
22
|
+
superblocks mcp setup --client cursor
|
|
23
|
+
superblocks mcp setup --client claude
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Standalone (development)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# From the superblocks repo root
|
|
30
|
+
pnpm install
|
|
31
|
+
pnpm turbo run build --filter @superblocksteam/mcp-server...
|
|
32
|
+
|
|
33
|
+
# Run directly
|
|
34
|
+
node packages/cli/packages/mcp-server/dist/index.js
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Client Configuration
|
|
38
|
+
|
|
39
|
+
### Cursor
|
|
40
|
+
|
|
41
|
+
Add to `~/.cursor/mcp.json`:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"mcpServers": {
|
|
46
|
+
"superblocks": {
|
|
47
|
+
"command": "superblocks",
|
|
48
|
+
"args": ["mcp", "serve"]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Claude Desktop
|
|
55
|
+
|
|
56
|
+
Add to `~/.claude/mcp.json`:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"mcpServers": {
|
|
61
|
+
"superblocks": {
|
|
62
|
+
"command": "superblocks",
|
|
63
|
+
"args": ["mcp", "serve"]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### ChatGPT (HTTP transport)
|
|
70
|
+
|
|
71
|
+
ChatGPT requires an HTTPS endpoint. Start the server with the HTTP transport:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
superblocks mcp serve --transport http --port 8484 --http-token <token>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then expose it via a tunnel (e.g., ngrok) and configure it as a ChatGPT connector pointing to `https://<your-tunnel>/mcp`, sending `Authorization: Bearer <token>`.
|
|
78
|
+
|
|
79
|
+
## Authentication
|
|
80
|
+
|
|
81
|
+
The MCP server uses the same authentication as the Superblocks CLI. After running `superblocks login`, the MCP server can access the same environment automatically.
|
|
82
|
+
|
|
83
|
+
For multiple environments, you can add tokens directly:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
superblocks-mcp auth add --base-url https://staging.superblocks.com --token <api-key>
|
|
87
|
+
superblocks-mcp auth list
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Auth resolution order:
|
|
91
|
+
|
|
92
|
+
1. CLI auth (`~/.superblocks/auth.json`) -- checked first
|
|
93
|
+
2. MCP auth store (`~/.superblocks/mcp-auth.json`) -- multi-environment extension
|
|
94
|
+
|
|
95
|
+
## Available Tools
|
|
96
|
+
|
|
97
|
+
### `get_auth_status`
|
|
98
|
+
|
|
99
|
+
Check whether you are authenticated for a Superblocks environment.
|
|
100
|
+
|
|
101
|
+
### `get_current_user`
|
|
102
|
+
|
|
103
|
+
Get the currently authenticated user for a given `base_url`.
|
|
104
|
+
|
|
105
|
+
### `get_application_summary`
|
|
106
|
+
|
|
107
|
+
Fetch application metadata: ID, name, organization, app mode (1.0 / 2.0), deployed commit, environment.
|
|
108
|
+
|
|
109
|
+
### `get_application_commit_history`
|
|
110
|
+
|
|
111
|
+
Paginated, reverse-chronological commit history with committer details and DBFS hashes.
|
|
112
|
+
|
|
113
|
+
### `get_audit_events`
|
|
114
|
+
|
|
115
|
+
Fetch v2 audit events in OCSF format with cursor pagination. Supports filters for class, status, severity, actor, resource, and full-text search.
|
|
116
|
+
|
|
117
|
+
### Audit tool guidance
|
|
118
|
+
|
|
119
|
+
- **Use `get_audit_events` by default** for new integrations and investigations.
|
|
120
|
+
- `get_audit_logs` and `get_audit_entities` are **legacy-compatible** helpers for older audit-log workflows.
|
|
121
|
+
- `get_audit_events` is the newer audit model and covers a broader set of operations than legacy audit logs, including:
|
|
122
|
+
- Applications
|
|
123
|
+
- APIs / Workflows
|
|
124
|
+
- Folders
|
|
125
|
+
- Integrations
|
|
126
|
+
- Users & Groups
|
|
127
|
+
- RBAC
|
|
128
|
+
- SCIM
|
|
129
|
+
- Tokens
|
|
130
|
+
- Billing
|
|
131
|
+
- OAuth
|
|
132
|
+
- Organization settings
|
|
133
|
+
- Files
|
|
134
|
+
- Profiles
|
|
135
|
+
- Repositories
|
|
136
|
+
- Knowledge
|
|
137
|
+
- Credentials
|
|
138
|
+
|
|
139
|
+
### `get_integration_access`
|
|
140
|
+
|
|
141
|
+
List all users and groups that have access to an integration, including assigned roles and effective permissions.
|
|
142
|
+
|
|
143
|
+
### `get_application_structure`
|
|
144
|
+
|
|
145
|
+
Lightweight application view. For 1.0 apps: page and API summary. For 2.0 apps: directory tree and checkout metadata (`checkout_path` is null when a temporary checkout is used and cleaned up).
|
|
146
|
+
|
|
147
|
+
### `checkout_application`
|
|
148
|
+
|
|
149
|
+
Materialize an application to disk. Supports historical snapshots via `commit_id`.
|
|
150
|
+
|
|
151
|
+
### `create_application`
|
|
152
|
+
|
|
153
|
+
Create a new Superblocks application. Returns the application ID and editor URL.
|
|
154
|
+
|
|
155
|
+
### Deployment
|
|
156
|
+
|
|
157
|
+
- `deploy_application` - deploy an application using either `app_url` or `application_id` + `base_url` (optionally with `commit_id`)
|
|
158
|
+
|
|
159
|
+
### Integration Management
|
|
160
|
+
|
|
161
|
+
- `get_integration` - fetch an integration by ID
|
|
162
|
+
- `create_integration` - create an integration from API payload
|
|
163
|
+
- `update_integration` - update an integration by ID
|
|
164
|
+
- `delete_integration` - delete an integration by ID
|
|
165
|
+
- `get_integration_access` - list users/groups with integration access
|
|
166
|
+
|
|
167
|
+
### Folder Management
|
|
168
|
+
|
|
169
|
+
- `list_folders` - list folders
|
|
170
|
+
- `create_folder` - create a folder
|
|
171
|
+
- `update_folder` - rename a folder
|
|
172
|
+
- `delete_folder` - delete a folder
|
|
173
|
+
|
|
174
|
+
### RBAC Assignment Management
|
|
175
|
+
|
|
176
|
+
- `get_workflow_access` - list users/groups with access to a workflow
|
|
177
|
+
- `get_job_access` - list users/groups with access to a scheduled job
|
|
178
|
+
- `list_rbac_assignments` - list RBAC assignments for a specific resource
|
|
179
|
+
- `grant_resource_access` - create RBAC assignments
|
|
180
|
+
- `update_resource_access` - update a specific assignment
|
|
181
|
+
- `revoke_resource_access` - delete a specific assignment
|
|
182
|
+
|
|
183
|
+
### Billing Management
|
|
184
|
+
|
|
185
|
+
- `list_builder_seats` - list builder seat assignments
|
|
186
|
+
- `assign_builder_seat` - assign a seat to a user
|
|
187
|
+
- `unassign_builder_seat` - remove a seat from a user
|
|
188
|
+
- `update_subscription` - update subscription settings (payload passthrough)
|
|
189
|
+
- `create_checkout_session` - create a checkout session (payload passthrough)
|
|
190
|
+
- `create_billing_intent` - initialize a billing/payment intent
|
|
191
|
+
- `submit_payment` - submit payment details (payload passthrough)
|
|
192
|
+
- `check_promo` - validate a promo code
|
|
193
|
+
- `downgrade_plan` - downgrade to free plan
|
|
194
|
+
- `contact_sales` - submit a sales-contact request (payload passthrough)
|
|
195
|
+
|
|
196
|
+
### Agent + Git Helpers
|
|
197
|
+
|
|
198
|
+
- `list_organization_agents` - list organization agents
|
|
199
|
+
- `get_git_fresh_token` - get a fresh Git credential token for app + host
|
|
200
|
+
|
|
201
|
+
### Derived Analytics and Search
|
|
202
|
+
|
|
203
|
+
- `get_app_activity_report` - summarize app activity from audit logs in a time window
|
|
204
|
+
- `find_apps_by_package` - scan code-mode (2.0) `package.json` files for dependency usage
|
|
205
|
+
|
|
206
|
+
### App Mode Coverage Notes
|
|
207
|
+
|
|
208
|
+
- **Multi-page (1.0)** apps expose structured page/API metadata directly.
|
|
209
|
+
- **Code-mode (2.0)** apps are file-based and usually require checkout + file scanning.
|
|
210
|
+
- Some derived tools currently support only one mode:
|
|
211
|
+
- `find_apps_by_package`: code-mode (2.0) only
|
|
212
|
+
- Tool responses include scan counters and mode-skipped counts to make this explicit.
|
|
213
|
+
|
|
214
|
+
## Tool Annotations
|
|
215
|
+
|
|
216
|
+
All tools include [MCP tool annotations](https://spec.modelcontextprotocol.io/) so clients can make informed decisions about auto-approval:
|
|
217
|
+
|
|
218
|
+
- Read-only tools (`get_auth_status`, `get_application_summary`, etc.) are marked with `readOnlyHint: true`
|
|
219
|
+
- `checkout_application` writes to disk but is non-destructive (`destructiveHint: false`)
|
|
220
|
+
- `create_application` is non-destructive and non-idempotent
|
|
221
|
+
|
|
222
|
+
## Transports
|
|
223
|
+
|
|
224
|
+
| Transport | Use case | Command |
|
|
225
|
+
| ------------------- | ----------------------------------------- | ------------------------------------------------------------------------- |
|
|
226
|
+
| **stdio** (default) | Cursor, Claude Desktop, local MCP clients | `superblocks mcp serve` |
|
|
227
|
+
| **HTTP** | ChatGPT, remote clients | `superblocks mcp serve --transport http --port 8484 --http-token <token>` |
|
|
228
|
+
|
|
229
|
+
The HTTP transport binds to `127.0.0.1` by default.
|
|
230
|
+
For security, HTTP transport requires an authentication token. Provide it via `--http-token` or `SUPERBLOCKS_MCP_HTTP_TOKEN`.
|
|
231
|
+
|
|
232
|
+
## Environment Hints
|
|
233
|
+
|
|
234
|
+
The server recognizes these Superblocks environments from URLs:
|
|
235
|
+
|
|
236
|
+
- `app.superblocks.com` / `app.superblockshq.com` → `prod`
|
|
237
|
+
- `eu.superblocks.com` / `prod-eu.superblocks.com` → `prod-eu`
|
|
238
|
+
- `staging.superblocks.com` → `staging`
|
|
239
|
+
- `dev.superblocks.com` → `dev`
|
|
240
|
+
- `pr-*.superblocks.dev` → `ephemeral`
|
|
241
|
+
- `localhost` / `127.0.0.1` → `local`
|
|
242
|
+
|
|
243
|
+
Unknown URLs still work as long as auth is configured for that base URL.
|
|
244
|
+
|
|
245
|
+
## Troubleshooting
|
|
246
|
+
|
|
247
|
+
### "Not authenticated" errors
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Check which environments are configured
|
|
251
|
+
superblocks-mcp auth list
|
|
252
|
+
|
|
253
|
+
# Re-authenticate via CLI
|
|
254
|
+
superblocks login
|
|
255
|
+
|
|
256
|
+
# Or add a token for a specific environment
|
|
257
|
+
superblocks-mcp auth add --base-url <url> --token <api-key>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Server won't start
|
|
261
|
+
|
|
262
|
+
- Ensure `node` is on your PATH (Node.js >= 24)
|
|
263
|
+
- Rebuild: `pnpm turbo run build --filter @superblocksteam/mcp-server...`
|
|
264
|
+
- Test standalone: `superblocks mcp serve --help`
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GetApplicationCommitsResponseBody } from "@superblocksteam/shared";
|
|
2
|
+
export type ApplicationCommitHistoryItem = {
|
|
3
|
+
autosave_type: string | null;
|
|
4
|
+
branch: string | null;
|
|
5
|
+
commit_id: string;
|
|
6
|
+
commit_message: string;
|
|
7
|
+
commit_type: "autosave" | "commit";
|
|
8
|
+
committed_at: string;
|
|
9
|
+
committer_email: string;
|
|
10
|
+
committer_name: string | null;
|
|
11
|
+
directory_contents_hash: string | null;
|
|
12
|
+
external_commit_id: string | null;
|
|
13
|
+
external_committed_at: string | null;
|
|
14
|
+
};
|
|
15
|
+
type SummarizeApplicationCommitHistoryPageParams = {
|
|
16
|
+
offset: number;
|
|
17
|
+
pageLimit: number;
|
|
18
|
+
response: GetApplicationCommitsResponseBody;
|
|
19
|
+
};
|
|
20
|
+
export declare function summarizeApplicationCommitHistoryPage({ offset, pageLimit, response, }: SummarizeApplicationCommitHistoryPageParams): {
|
|
21
|
+
commits: ApplicationCommitHistoryItem[];
|
|
22
|
+
has_more: boolean;
|
|
23
|
+
next_offset: number | null;
|
|
24
|
+
returned_count: number;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=commit-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-history.d.ts","sourceRoot":"","sources":["../../src/application/commit-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iCAAiC,EAClC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,4BAA4B,GAAG;IACzC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,2CAA2C,GAAG;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iCAAiC,CAAC;CAC7C,CAAC;AA6BF,wBAAgB,qCAAqC,CAAC,EACpD,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE,2CAA2C;;;;;EAa7C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
function compareCommits(left, right) {
|
|
2
|
+
const commitDateDifference = right.commitDate - left.commitDate;
|
|
3
|
+
if (commitDateDifference !== 0) {
|
|
4
|
+
return commitDateDifference;
|
|
5
|
+
}
|
|
6
|
+
return right.commitId.localeCompare(left.commitId);
|
|
7
|
+
}
|
|
8
|
+
function summarizeCommit(commit) {
|
|
9
|
+
return {
|
|
10
|
+
autosave_type: commit.autosaveType ?? null,
|
|
11
|
+
branch: commit.branch ?? null,
|
|
12
|
+
commit_id: commit.commitId,
|
|
13
|
+
commit_message: commit.commitMessage,
|
|
14
|
+
commit_type: commit.autosave ? "autosave" : "commit",
|
|
15
|
+
committed_at: new Date(commit.commitDate).toISOString(),
|
|
16
|
+
committer_email: commit.committer.email,
|
|
17
|
+
committer_name: commit.committer.name ?? null,
|
|
18
|
+
directory_contents_hash: commit.directoryContentsHash ?? null,
|
|
19
|
+
external_commit_id: commit.externalCommitId ?? null,
|
|
20
|
+
external_committed_at: commit.externalCommitDate
|
|
21
|
+
? new Date(commit.externalCommitDate).toISOString()
|
|
22
|
+
: null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function summarizeApplicationCommitHistoryPage({ offset, pageLimit, response, }) {
|
|
26
|
+
const orderedCommits = [...response.autosaves, ...response.commits].sort(compareCommits);
|
|
27
|
+
const hasMore = orderedCommits.length > pageLimit;
|
|
28
|
+
const pageItems = orderedCommits.slice(0, pageLimit).map(summarizeCommit);
|
|
29
|
+
return {
|
|
30
|
+
commits: pageItems,
|
|
31
|
+
has_more: hasMore,
|
|
32
|
+
next_offset: hasMore ? offset + pageLimit : null,
|
|
33
|
+
returned_count: pageItems.length,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=commit-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-history.js","sourceRoot":"","sources":["../../src/application/commit-history.ts"],"names":[],"mappings":"AAyBA,SAAS,cAAc,CAAC,IAAe,EAAE,KAAgB;IACvD,MAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAChE,IAAI,oBAAoB,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;QACpD,YAAY,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QACvD,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK;QACvC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI;QAC7C,uBAAuB,EAAE,MAAM,CAAC,qBAAqB,IAAI,IAAI;QAC7D,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;QACnD,qBAAqB,EAAE,MAAM,CAAC,kBAAkB;YAC9C,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE;YACnD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,EACpD,MAAM,EACN,SAAS,EACT,QAAQ,GACoC;IAC5C,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CACtE,cAAc,CACf,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE1E,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI;QAChD,cAAc,EAAE,SAAS,CAAC,MAAM;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type DirectoryTreeSummary = {
|
|
2
|
+
entries: string[];
|
|
3
|
+
truncated: boolean;
|
|
4
|
+
};
|
|
5
|
+
type BuildDirectoryTreeSummaryOptions = {
|
|
6
|
+
exclude?: Set<string>;
|
|
7
|
+
maxEntries: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function buildDirectoryTreeSummary(rootPath: string, options: BuildDirectoryTreeSummaryOptions): Promise<DirectoryTreeSummary>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=directory-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-tree.d.ts","sourceRoot":"","sources":["../../src/application/directory-tree.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,gCAAgC,GAAG;IACtC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC,CA+C/B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
export async function buildDirectoryTreeSummary(rootPath, options) {
|
|
4
|
+
const entries = [];
|
|
5
|
+
let truncated = false;
|
|
6
|
+
async function visit(currentPath, relativePath = "") {
|
|
7
|
+
if (entries.length >= options.maxEntries) {
|
|
8
|
+
truncated = true;
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const directoryEntries = (await fs.readdir(currentPath, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name));
|
|
12
|
+
for (const directoryEntry of directoryEntries) {
|
|
13
|
+
if (entries.length >= options.maxEntries) {
|
|
14
|
+
truncated = true;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (options.exclude?.has(directoryEntry.name)) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const entryRelativePath = relativePath
|
|
21
|
+
? path.posix.join(relativePath, directoryEntry.name)
|
|
22
|
+
: directoryEntry.name;
|
|
23
|
+
if (directoryEntry.isDirectory()) {
|
|
24
|
+
entries.push(`${entryRelativePath}/`);
|
|
25
|
+
await visit(path.join(currentPath, directoryEntry.name), entryRelativePath);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
entries.push(entryRelativePath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
await visit(rootPath);
|
|
32
|
+
return {
|
|
33
|
+
entries,
|
|
34
|
+
truncated,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=directory-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-tree.js","sourceRoot":"","sources":["../../src/application/directory-tree.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAY1B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,OAAyC;IAEzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,UAAU,KAAK,CAAC,WAAmB,EAAE,YAAY,GAAG,EAAE;QACzD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACzC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,CACvB,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CACvD,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7D,KAAK,MAAM,cAAc,IAAI,gBAAgB,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACzC,SAAS,GAAG,IAAI,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,MAAM,iBAAiB,GAAG,YAAY;gBACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;gBACpD,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YAExB,IAAI,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBACtC,MAAM,KAAK,CACT,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,EAC3C,iBAAiB,CAClB,CAAC;gBACF,SAAS;YACX,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO;QACL,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CodeModeApplicationWrapper, type MultiPageApplicationWrapperWithComponents, type SuperblocksSdk } from "@superblocksteam/sdk";
|
|
2
|
+
type MaterializeApplicationParams = {
|
|
3
|
+
sdk: SuperblocksSdk;
|
|
4
|
+
application: CodeModeApplicationWrapper | MultiPageApplicationWrapperWithComponents;
|
|
5
|
+
branch: string;
|
|
6
|
+
directoryContentsHash?: string;
|
|
7
|
+
destinationPath?: string;
|
|
8
|
+
};
|
|
9
|
+
export type MaterializedApplication = {
|
|
10
|
+
checkoutPath: string;
|
|
11
|
+
isTemporary: boolean;
|
|
12
|
+
temporaryRootPath?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function materializeApplication({ sdk, application, branch, directoryContentsHash, destinationPath, }: MaterializeApplicationParams): Promise<MaterializedApplication>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=materialize-application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-application.d.ts","sourceRoot":"","sources":["../../src/application/materialize-application.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,yCAAyC,EAC9C,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,KAAK,4BAA4B,GAAG;IAClC,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EACP,0BAA0B,GAC1B,yCAAyC,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,EAC3C,GAAG,EACH,WAAW,EACX,MAAM,EACN,qBAAqB,EACrB,eAAe,GAChB,EAAE,4BAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA+CjE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
import { writeApplicationToDisk, } from "@superblocksteam/sdk";
|
|
5
|
+
export async function materializeApplication({ sdk, application, branch, directoryContentsHash, destinationPath, }) {
|
|
6
|
+
const resolvedDestinationPath = destinationPath
|
|
7
|
+
? path.resolve(destinationPath)
|
|
8
|
+
: undefined;
|
|
9
|
+
if (resolvedDestinationPath &&
|
|
10
|
+
resolvedDestinationPath === path.parse(resolvedDestinationPath).root) {
|
|
11
|
+
throw new Error(`destination_path must not resolve to a filesystem root: ${resolvedDestinationPath}`);
|
|
12
|
+
}
|
|
13
|
+
const featureFlags = await sdk.getFeatureFlagsForCurrentUser();
|
|
14
|
+
const projectRootFolder = resolvedDestinationPath
|
|
15
|
+
? path.dirname(resolvedDestinationPath)
|
|
16
|
+
: await fs.mkdtemp(path.join(os.tmpdir(), "superblocks-mcp-"));
|
|
17
|
+
const appRelativePath = resolvedDestinationPath
|
|
18
|
+
? path.basename(resolvedDestinationPath)
|
|
19
|
+
: undefined;
|
|
20
|
+
let resourceConfig;
|
|
21
|
+
try {
|
|
22
|
+
resourceConfig = await writeApplicationToDisk({
|
|
23
|
+
sdk,
|
|
24
|
+
resource: application,
|
|
25
|
+
projectRootFolder,
|
|
26
|
+
appRelativePath,
|
|
27
|
+
directoryContentsHash,
|
|
28
|
+
featureFlags,
|
|
29
|
+
branch,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (!resolvedDestinationPath) {
|
|
34
|
+
// Best-effort cleanup for temporary materialization roots.
|
|
35
|
+
await fs.remove(projectRootFolder);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
checkoutPath: path.resolve(projectRootFolder, resourceConfig.location),
|
|
41
|
+
isTemporary: !resolvedDestinationPath,
|
|
42
|
+
...(resolvedDestinationPath
|
|
43
|
+
? {}
|
|
44
|
+
: { temporaryRootPath: projectRootFolder }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=materialize-application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-application.js","sourceRoot":"","sources":["../../src/application/materialize-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EACL,sBAAsB,GAIvB,MAAM,sBAAsB,CAAC;AAkB9B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,GAAG,EACH,WAAW,EACX,MAAM,EACN,qBAAqB,EACrB,eAAe,GACc;IAC7B,MAAM,uBAAuB,GAAG,eAAe;QAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAC;IACd,IACE,uBAAuB;QACvB,uBAAuB,KAAK,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,IAAI,EACpE,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,uBAAuB,EAAE,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,6BAA6B,EAAE,CAAC;IAC/D,MAAM,iBAAiB,GAAG,uBAAuB;QAC/C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACvC,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,uBAAuB;QAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,cAAoC,CAAC;IACzC,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,sBAAsB,CAAC;YAC5C,GAAG;YACH,QAAQ,EAAE,WAAW;YACrB,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,YAAY;YACZ,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7B,2DAA2D;YAC3D,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,QAAQ,CAAC;QACtE,WAAW,EAAE,CAAC,uBAAuB;QACrC,GAAG,CAAC,uBAAuB;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MultiPageApplicationWrapper, MultiPageApplicationWrapperWithComponents } from "@superblocksteam/sdk";
|
|
2
|
+
export type ApplicationMode = "1.0" | "2.0";
|
|
3
|
+
export type ApplicationModeLabel = "Legacy Low Code Apps" | "Clark AI Apps";
|
|
4
|
+
export declare function inferApplicationMode(application: Record<string, any>): ApplicationMode;
|
|
5
|
+
export declare function applicationModeLabel(mode: ApplicationMode): ApplicationModeLabel;
|
|
6
|
+
export declare function applicationModeNote(mode: ApplicationMode): string;
|
|
7
|
+
export declare function summarizeApplication(applicationWrapper: MultiPageApplicationWrapper): {
|
|
8
|
+
application_id: any;
|
|
9
|
+
application_mode: ApplicationMode;
|
|
10
|
+
deployed_commit_id: string | null;
|
|
11
|
+
name: any;
|
|
12
|
+
organization_id: any;
|
|
13
|
+
};
|
|
14
|
+
export declare function summarizeMultiPageApplicationStructure(applicationWrapper: MultiPageApplicationWrapperWithComponents): {
|
|
15
|
+
application_mode: "1.0";
|
|
16
|
+
app_api_count: number;
|
|
17
|
+
app_api_names: string[];
|
|
18
|
+
page_count: number;
|
|
19
|
+
pages: {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
api_names: string[];
|
|
23
|
+
}[];
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/application/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,yCAAyC,EAC1C,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAC5C,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,GAAG,eAAe,CAAC;AAc5E,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC/B,eAAe,CAEjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,eAAe,GACpB,oBAAoB,CAEtB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAIjE;AAED,wBAAgB,oBAAoB,CAClC,kBAAkB,EAAE,2BAA2B;;;;;;EAUhD;AAED,wBAAgB,sCAAsC,CACpD,kBAAkB,EAAE,yCAAyC;;;;;;;;;;EAqB9D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function getApiName(api) {
|
|
2
|
+
return api.apiPb?.metadata?.name ?? "Unnamed API";
|
|
3
|
+
}
|
|
4
|
+
export function inferApplicationMode(application) {
|
|
5
|
+
return application.devEnvEnabled ? "2.0" : "1.0";
|
|
6
|
+
}
|
|
7
|
+
export function applicationModeLabel(mode) {
|
|
8
|
+
return mode === "1.0" ? "Legacy Low Code Apps" : "Clark AI Apps";
|
|
9
|
+
}
|
|
10
|
+
export function applicationModeNote(mode) {
|
|
11
|
+
return mode === "1.0"
|
|
12
|
+
? "Legacy Low Code Apps are the legacy multi-page app model (1.0)."
|
|
13
|
+
: "Clark AI Apps are the code-mode app model (2.0).";
|
|
14
|
+
}
|
|
15
|
+
export function summarizeApplication(applicationWrapper) {
|
|
16
|
+
const application = applicationWrapper.application;
|
|
17
|
+
return {
|
|
18
|
+
application_id: application.id,
|
|
19
|
+
application_mode: inferApplicationMode(application),
|
|
20
|
+
deployed_commit_id: applicationWrapper.deployedCommitId ?? null,
|
|
21
|
+
name: application.name,
|
|
22
|
+
organization_id: application.organizationId,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function summarizeMultiPageApplicationStructure(applicationWrapper) {
|
|
26
|
+
const pages = applicationWrapper.pages.map((page) => ({
|
|
27
|
+
id: page.id,
|
|
28
|
+
name: page.name,
|
|
29
|
+
api_names: [...page.apis.map((api) => getApiName(api))].sort((left, right) => left.localeCompare(right)),
|
|
30
|
+
}));
|
|
31
|
+
const appApiNames = [
|
|
32
|
+
...applicationWrapper.apis.map((api) => getApiName(api)),
|
|
33
|
+
].sort((left, right) => left.localeCompare(right));
|
|
34
|
+
return {
|
|
35
|
+
application_mode: "1.0",
|
|
36
|
+
app_api_count: applicationWrapper.apis.length,
|
|
37
|
+
app_api_names: appApiNames,
|
|
38
|
+
page_count: applicationWrapper.pages.length,
|
|
39
|
+
pages,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/application/summary.ts"],"names":[],"mappings":"AAgBA,SAAS,UAAU,CAAC,GAAa;IAC/B,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAgC;IAEhC,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAqB;IAErB,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACvD,OAAO,IAAI,KAAK,KAAK;QACnB,CAAC,CAAC,iEAAiE;QACnE,CAAC,CAAC,kDAAkD,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,kBAA+C;IAE/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACnD,OAAO;QACL,cAAc,EAAE,WAAW,CAAC,EAAE;QAC9B,gBAAgB,EAAE,oBAAoB,CAAC,WAAW,CAAC;QACnD,kBAAkB,EAAE,kBAAkB,CAAC,gBAAgB,IAAI,IAAI;QAC/D,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,eAAe,EAAE,WAAW,CAAC,cAAc;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,kBAA6D;IAE7D,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3C;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,GAAG;QAClB,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzD,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnD,OAAO;QACL,gBAAgB,EAAE,KAAc;QAChC,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM;QAC7C,aAAa,EAAE,WAAW;QAC1B,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,MAAM;QAC3C,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/auth/commands.ts"],"names":[],"mappings":"AAwFA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB1E;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|