@muxoai/platform 1.3.3 → 1.4.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/.agents/plugins/marketplace.json +2 -2
- package/.claude-plugin/marketplace.json +2 -2
- package/ARCHITECTURE.md +16 -6
- package/README.md +7 -5
- package/dist/cli.js +393 -13
- package/dist/composio-catalog.d.ts +58 -0
- package/dist/composio-catalog.js +474 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.js +16 -0
- package/dist/durable-workflow.d.ts +45 -0
- package/dist/durable-workflow.js +90 -0
- package/dist/engine.d.ts +276 -5
- package/dist/engine.js +1261 -71
- package/dist/mcp-schema.d.ts +125 -0
- package/dist/mcp-schema.js +1076 -0
- package/dist/mcp.d.ts +2 -30
- package/dist/mcp.js +505 -539
- package/dist/memory-graph.d.ts +21 -0
- package/dist/memory-graph.js +173 -0
- package/dist/nl.js +155 -0
- package/dist/oauth.d.ts +32 -0
- package/dist/oauth.js +134 -0
- package/dist/policy.d.ts +75 -1
- package/dist/policy.js +1119 -0
- package/dist/providers/composio-instant.js +225 -5
- package/dist/providers/composio-sdk.d.ts +68 -5
- package/dist/providers/composio-sdk.js +683 -78
- package/dist/providers/microsoft-governance.d.ts +28 -1
- package/dist/providers/microsoft-governance.js +224 -11
- package/dist/providers/stripe-billing.d.ts +42 -0
- package/dist/providers/stripe-billing.js +230 -1
- package/dist/providers/stripe-projects.d.ts +451 -3
- package/dist/providers/stripe-projects.js +2106 -87
- package/dist/providers/supermemory.d.ts +74 -1
- package/dist/providers/supermemory.js +426 -0
- package/dist/provisioning-managed.d.ts +50 -0
- package/dist/provisioning-managed.js +155 -0
- package/dist/sdk.d.ts +538 -8
- package/dist/sdk.js +377 -10
- package/dist/server.js +1841 -232
- package/dist/store.d.ts +113 -6
- package/dist/store.js +675 -52
- package/dist/types.d.ts +212 -5
- package/dist/ui/console-html.d.ts +10 -1
- package/dist/ui/console-html.js +1188 -462
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/plugins/muxo/.claude-plugin/plugin.json +1 -1
- package/plugins/muxo/.codex-plugin/plugin.json +1 -1
- package/plugins/muxo/plugin.json +2 -2
- package/plugins/muxo/skills/muxo/SKILL.md +42 -1
- package/plugins/muxo/skills/muxo/references/mcp.md +3 -2
- package/plugins/muxo/skills/setup/SKILL.md +8 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** SDK-free Composio enterprise toolkit and trigger catalogue shared by the Node server and the edge worker. */
|
|
2
|
+
export interface ComposioToolkitMetadata {
|
|
3
|
+
slug: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
categories: string[];
|
|
7
|
+
authSchemes: Array<"OAUTH2" | "API_KEY" | "BEARER_TOKEN" | "NO_AUTH">;
|
|
8
|
+
pinnedVersion: string;
|
|
9
|
+
readOnlyScopes: string[];
|
|
10
|
+
fullAccessScopes: string[];
|
|
11
|
+
sampleActions: Array<{
|
|
12
|
+
upstreamSlug: string;
|
|
13
|
+
muxoSlug: string;
|
|
14
|
+
name: string;
|
|
15
|
+
riskLevel: "read" | "write" | "destructive" | "financial";
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
export interface ComposioTriggerSubscription {
|
|
19
|
+
id: string;
|
|
20
|
+
workspaceId: string;
|
|
21
|
+
triggerSlug: string;
|
|
22
|
+
providerSlug: string;
|
|
23
|
+
connectedAccountId: string;
|
|
24
|
+
webhookUrl: string;
|
|
25
|
+
config: Record<string, unknown>;
|
|
26
|
+
status: "active" | "paused" | "disabled";
|
|
27
|
+
createdAt: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ComposioTriggerEventRecord {
|
|
30
|
+
id: string;
|
|
31
|
+
workspaceId: string;
|
|
32
|
+
triggerSlug: string;
|
|
33
|
+
providerSlug: string;
|
|
34
|
+
receivedAt: string;
|
|
35
|
+
promptInjectionScan: {
|
|
36
|
+
safe: boolean;
|
|
37
|
+
riskScore: number;
|
|
38
|
+
findings: string[];
|
|
39
|
+
};
|
|
40
|
+
disposition: "dispatched" | "quarantined";
|
|
41
|
+
payloadPreview: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export declare const ENTERPRISE_TOOLKITS_CATALOG: ComposioToolkitMetadata[];
|
|
44
|
+
export declare function getSampleActionSchema(muxoSlug: string, upstreamSlug?: string): Record<string, unknown>;
|
|
45
|
+
export interface ComposioTriggerType {
|
|
46
|
+
slug: string;
|
|
47
|
+
providerSlug: string;
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
}
|
|
51
|
+
export declare const COMPOSIO_TRIGGER_CATALOGUE: ComposioTriggerType[];
|
|
52
|
+
export declare function listComposioTriggerTypes(providerSlug?: string): ComposioTriggerType[];
|
|
53
|
+
export declare function filterComposioToolkits(params?: {
|
|
54
|
+
category?: string;
|
|
55
|
+
search?: string;
|
|
56
|
+
}): ComposioToolkitMetadata[];
|
|
57
|
+
/** Least-privilege scopes for a custom auth config: explicit scopes win, then the toolkit's read-only or full set. */
|
|
58
|
+
export declare function composioAuthConfigScopes(toolkitSlug: string, scopeMode: "read_only" | "full_access", customScopes?: string[]): string[];
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/** SDK-free Composio enterprise toolkit and trigger catalogue shared by the Node server and the edge worker. */
|
|
2
|
+
export const ENTERPRISE_TOOLKITS_CATALOG = [
|
|
3
|
+
{
|
|
4
|
+
slug: "github",
|
|
5
|
+
name: "GitHub",
|
|
6
|
+
description: "Repositories, pull requests, issues, releases, Actions workflows, and code search.",
|
|
7
|
+
categories: ["developer", "git", "devops"],
|
|
8
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
9
|
+
pinnedVersion: "20260901_00",
|
|
10
|
+
readOnlyScopes: ["repo:status", "public_repo", "read:org", "read:user"],
|
|
11
|
+
fullAccessScopes: ["repo", "workflow", "read:org", "admin:repo_hook"],
|
|
12
|
+
sampleActions: [
|
|
13
|
+
{ upstreamSlug: "GITHUB_CREATE_AN_ISSUE", muxoSlug: "app.github.create_issue", name: "GitHub: Create Issue", riskLevel: "write" },
|
|
14
|
+
{ upstreamSlug: "GITHUB_LIST_REPOSITORY_ISSUES", muxoSlug: "app.github.list_issues", name: "GitHub: List Issues", riskLevel: "read" },
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
slug: "gmail",
|
|
19
|
+
name: "Gmail",
|
|
20
|
+
description: "Read threads, draft replies, search messages, and send transactional or support emails.",
|
|
21
|
+
categories: ["email", "communication", "google"],
|
|
22
|
+
authSchemes: ["OAUTH2"],
|
|
23
|
+
pinnedVersion: "20260901_00",
|
|
24
|
+
readOnlyScopes: ["https://www.googleapis.com/auth/gmail.readonly"],
|
|
25
|
+
fullAccessScopes: ["https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.send"],
|
|
26
|
+
sampleActions: [
|
|
27
|
+
{ upstreamSlug: "GMAIL_FETCH_EMAILS", muxoSlug: "app.gmail.list_messages", name: "Gmail: List Messages", riskLevel: "read" },
|
|
28
|
+
{ upstreamSlug: "GMAIL_SEND_EMAIL", muxoSlug: "app.gmail.send_email", name: "Gmail: Send Email", riskLevel: "write" },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
slug: "slack",
|
|
33
|
+
name: "Slack",
|
|
34
|
+
description: "Post channel notifications, read thread context, and coordinate incident response.",
|
|
35
|
+
categories: ["messaging", "chat", "incident"],
|
|
36
|
+
authSchemes: ["OAUTH2"],
|
|
37
|
+
pinnedVersion: "20260901_00",
|
|
38
|
+
readOnlyScopes: ["channels:history", "channels:read", "users:read"],
|
|
39
|
+
fullAccessScopes: ["channels:history", "channels:read", "chat:write", "reactions:write"],
|
|
40
|
+
sampleActions: [
|
|
41
|
+
{ upstreamSlug: "SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL", muxoSlug: "app.slack.send_message", name: "Slack: Send Channel Message", riskLevel: "write" },
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
slug: "notion",
|
|
46
|
+
name: "Notion",
|
|
47
|
+
description: "Search workspaces, create knowledge base pages, and query structured databases.",
|
|
48
|
+
categories: ["docs", "wiki", "productivity"],
|
|
49
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
50
|
+
pinnedVersion: "20260901_00",
|
|
51
|
+
readOnlyScopes: ["read_content"],
|
|
52
|
+
fullAccessScopes: ["read_content", "update_content", "insert_content"],
|
|
53
|
+
sampleActions: [
|
|
54
|
+
{ upstreamSlug: "NOTION_SEARCH_NOTION_PAGE", muxoSlug: "app.notion.search_pages", name: "Notion: Search Pages", riskLevel: "read" },
|
|
55
|
+
{ upstreamSlug: "NOTION_CREATE_NOTION_PAGE", muxoSlug: "app.notion.create_page", name: "Notion: Create Page", riskLevel: "write" },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
slug: "linear",
|
|
60
|
+
name: "Linear",
|
|
61
|
+
description: "Create engineering issues, triage bugs, manage cycles, and track project roadmaps.",
|
|
62
|
+
categories: ["project_management", "engineering"],
|
|
63
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
64
|
+
pinnedVersion: "20260901_00",
|
|
65
|
+
readOnlyScopes: ["read"],
|
|
66
|
+
fullAccessScopes: ["read", "write", "issues:create"],
|
|
67
|
+
sampleActions: [
|
|
68
|
+
{ upstreamSlug: "LINEAR_CREATE_LINEAR_ISSUE", muxoSlug: "app.linear.create_issue", name: "Linear: Create Issue", riskLevel: "write" },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
slug: "googlecalendar",
|
|
73
|
+
name: "Google Calendar",
|
|
74
|
+
description: "List upcoming meetings, check availability, and schedule calendar events.",
|
|
75
|
+
categories: ["calendar", "scheduling", "google"],
|
|
76
|
+
authSchemes: ["OAUTH2"],
|
|
77
|
+
pinnedVersion: "20260901_00",
|
|
78
|
+
readOnlyScopes: ["https://www.googleapis.com/auth/calendar.readonly"],
|
|
79
|
+
fullAccessScopes: ["https://www.googleapis.com/auth/calendar.events"],
|
|
80
|
+
sampleActions: [
|
|
81
|
+
{ upstreamSlug: "GOOGLECALENDAR_EVENTS_LIST", muxoSlug: "app.googlecalendar.list_events", name: "Google Calendar: List Events", riskLevel: "read" },
|
|
82
|
+
{ upstreamSlug: "GOOGLECALENDAR_CREATE_EVENT", muxoSlug: "app.googlecalendar.create_event", name: "Google Calendar: Create Event", riskLevel: "write" },
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
slug: "hubspot",
|
|
87
|
+
name: "HubSpot CRM",
|
|
88
|
+
description: "Manage CRM contacts, deals, company records, and sales pipeline stages.",
|
|
89
|
+
categories: ["crm", "sales", "marketing"],
|
|
90
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
91
|
+
pinnedVersion: "20260901_00",
|
|
92
|
+
readOnlyScopes: ["crm.objects.contacts.read", "crm.objects.deals.read"],
|
|
93
|
+
fullAccessScopes: ["crm.objects.contacts.read", "crm.objects.contacts.write", "crm.objects.deals.write"],
|
|
94
|
+
sampleActions: [
|
|
95
|
+
{ upstreamSlug: "HUBSPOT_SEARCH_CONTACTS", muxoSlug: "app.hubspot.search_contacts", name: "HubSpot: Search Contacts", riskLevel: "read" },
|
|
96
|
+
{ upstreamSlug: "HUBSPOT_CREATE_CONTACT", muxoSlug: "app.hubspot.create_contact", name: "HubSpot: Create Contact", riskLevel: "write" },
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
slug: "jira",
|
|
101
|
+
name: "Jira Software",
|
|
102
|
+
description: "Search JQL issues, create sprint tickets, transition workflows, and link incidents.",
|
|
103
|
+
categories: ["project_management", "engineering", "enterprise"],
|
|
104
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
105
|
+
pinnedVersion: "20260901_00",
|
|
106
|
+
readOnlyScopes: ["read:jira-work", "read:jira-user"],
|
|
107
|
+
fullAccessScopes: ["read:jira-work", "write:jira-work"],
|
|
108
|
+
sampleActions: [
|
|
109
|
+
{ upstreamSlug: "JIRA_SEARCH_ISSUES", muxoSlug: "app.jira.search_issues", name: "Jira: Search Issues (JQL)", riskLevel: "read" },
|
|
110
|
+
{ upstreamSlug: "JIRA_CREATE_ISSUE", muxoSlug: "app.jira.create_issue", name: "Jira: Create Issue", riskLevel: "write" },
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
slug: "salesforce",
|
|
115
|
+
name: "Salesforce",
|
|
116
|
+
description: "Query SOQL objects, manage leads, accounts, opportunities, and enterprise cases.",
|
|
117
|
+
categories: ["crm", "enterprise", "sales"],
|
|
118
|
+
authSchemes: ["OAUTH2"],
|
|
119
|
+
pinnedVersion: "20260901_00",
|
|
120
|
+
readOnlyScopes: ["api", "refresh_token"],
|
|
121
|
+
fullAccessScopes: ["api", "full", "refresh_token"],
|
|
122
|
+
sampleActions: [
|
|
123
|
+
{ upstreamSlug: "SALESFORCE_RUN_SOQL_QUERY", muxoSlug: "app.salesforce.soql_query", name: "Salesforce: Run SOQL Query", riskLevel: "read" },
|
|
124
|
+
{ upstreamSlug: "SALESFORCE_CREATE_LEAD", muxoSlug: "app.salesforce.create_lead", name: "Salesforce: Create Lead", riskLevel: "write" },
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
slug: "zendesk",
|
|
129
|
+
name: "Zendesk Support",
|
|
130
|
+
description: "Triage customer support tickets, post internal notes, and update ticket priority.",
|
|
131
|
+
categories: ["support", "customer_success", "helpdesk"],
|
|
132
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
133
|
+
pinnedVersion: "20260901_00",
|
|
134
|
+
readOnlyScopes: ["tickets:read", "users:read"],
|
|
135
|
+
fullAccessScopes: ["tickets:read", "tickets:write", "users:read"],
|
|
136
|
+
sampleActions: [
|
|
137
|
+
{ upstreamSlug: "ZENDESK_LIST_TICKETS", muxoSlug: "app.zendesk.list_tickets", name: "Zendesk: List Tickets", riskLevel: "read" },
|
|
138
|
+
{ upstreamSlug: "ZENDESK_REPLY_TICKET", muxoSlug: "app.zendesk.reply_ticket", name: "Zendesk: Reply to Ticket", riskLevel: "write" },
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
slug: "shopify",
|
|
143
|
+
name: "Shopify",
|
|
144
|
+
description: "Inspect store orders, inventory levels, customer records, and refunds.",
|
|
145
|
+
categories: ["commerce", "orders", "retail"],
|
|
146
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
147
|
+
pinnedVersion: "20260901_00",
|
|
148
|
+
readOnlyScopes: ["read_orders", "read_products", "read_customers"],
|
|
149
|
+
fullAccessScopes: ["read_orders", "write_orders", "read_products", "write_products"],
|
|
150
|
+
sampleActions: [
|
|
151
|
+
{ upstreamSlug: "SHOPIFY_GET_ORDERS", muxoSlug: "app.shopify.list_orders", name: "Shopify: List Orders", riskLevel: "read" },
|
|
152
|
+
{ upstreamSlug: "SHOPIFY_CREATE_REFUND", muxoSlug: "app.shopify.create_refund", name: "Shopify: Create Refund", riskLevel: "financial" },
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
slug: "pagerduty",
|
|
157
|
+
name: "PagerDuty",
|
|
158
|
+
description: "Acknowledge on-call incidents, list escalation policies, and trigger alert paging.",
|
|
159
|
+
categories: ["incident", "devops", "sre"],
|
|
160
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
161
|
+
pinnedVersion: "20260901_00",
|
|
162
|
+
readOnlyScopes: ["incidents.read", "services.read"],
|
|
163
|
+
fullAccessScopes: ["incidents.read", "incidents.write", "services.read"],
|
|
164
|
+
sampleActions: [
|
|
165
|
+
{ upstreamSlug: "PAGERDUTY_LIST_INCIDENTS", muxoSlug: "app.pagerduty.list_incidents", name: "PagerDuty: List Incidents", riskLevel: "read" },
|
|
166
|
+
{ upstreamSlug: "PAGERDUTY_CREATE_INCIDENT", muxoSlug: "app.pagerduty.create_incident", name: "PagerDuty: Trigger Incident", riskLevel: "write" },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
slug: "discord",
|
|
171
|
+
name: "Discord",
|
|
172
|
+
description: "Send channel messages, manage server roles, and read guild threads.",
|
|
173
|
+
categories: ["communication", "chat", "messaging"],
|
|
174
|
+
authSchemes: ["OAUTH2"],
|
|
175
|
+
pinnedVersion: "20260901_00",
|
|
176
|
+
readOnlyScopes: ["identify", "guilds"],
|
|
177
|
+
fullAccessScopes: ["identify", "guilds", "bot", "messages.read"],
|
|
178
|
+
sampleActions: [
|
|
179
|
+
{ upstreamSlug: "DISCORD_SEND_MESSAGE", muxoSlug: "app.discord.send_message", name: "Discord: Send Channel Message", riskLevel: "write" },
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
slug: "googledrive",
|
|
184
|
+
name: "Google Drive",
|
|
185
|
+
description: "Search files and folders, manage permissions, and export workspace documents.",
|
|
186
|
+
categories: ["storage", "docs", "productivity", "google"],
|
|
187
|
+
authSchemes: ["OAUTH2"],
|
|
188
|
+
pinnedVersion: "20260901_00",
|
|
189
|
+
readOnlyScopes: ["https://www.googleapis.com/auth/drive.readonly"],
|
|
190
|
+
fullAccessScopes: ["https://www.googleapis.com/auth/drive"],
|
|
191
|
+
sampleActions: [
|
|
192
|
+
{ upstreamSlug: "GOOGLEDRIVE_FIND_FILE", muxoSlug: "app.googledrive.search_files", name: "Google Drive: Search Files & Folders", riskLevel: "read" },
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
slug: "airtable",
|
|
197
|
+
name: "Airtable",
|
|
198
|
+
description: "List, create, and update structured records across Airtable bases and tables.",
|
|
199
|
+
categories: ["database", "productivity"],
|
|
200
|
+
authSchemes: ["OAUTH2", "API_KEY"],
|
|
201
|
+
pinnedVersion: "20260901_00",
|
|
202
|
+
readOnlyScopes: ["data.records:read", "schema.bases:read"],
|
|
203
|
+
fullAccessScopes: ["data.records:read", "data.records:write", "schema.bases:read"],
|
|
204
|
+
sampleActions: [
|
|
205
|
+
{ upstreamSlug: "AIRTABLE_LIST_RECORDS", muxoSlug: "app.airtable.list_records", name: "Airtable: List Base Records", riskLevel: "read" },
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
slug: "sentry",
|
|
210
|
+
name: "Sentry",
|
|
211
|
+
description: "Inspect production issues, stack traces, release health, and error events.",
|
|
212
|
+
categories: ["devops", "monitoring", "engineering"],
|
|
213
|
+
authSchemes: ["API_KEY", "BEARER_TOKEN"],
|
|
214
|
+
pinnedVersion: "20260901_00",
|
|
215
|
+
readOnlyScopes: ["project:read", "event:read", "org:read"],
|
|
216
|
+
fullAccessScopes: ["project:read", "event:read", "event:write", "org:read"],
|
|
217
|
+
sampleActions: [
|
|
218
|
+
{ upstreamSlug: "SENTRY_LIST_ISSUES", muxoSlug: "app.sentry.list_issues", name: "Sentry: List Project Issues", riskLevel: "read" },
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
const SAMPLE_ACTION_SCHEMAS = {
|
|
223
|
+
"app.github.list_issues": {
|
|
224
|
+
type: "object",
|
|
225
|
+
required: ["owner", "repo"],
|
|
226
|
+
properties: {
|
|
227
|
+
owner: { type: "string", description: "Repository owner" },
|
|
228
|
+
repo: { type: "string", description: "Repository name" },
|
|
229
|
+
state: { type: "string", enum: ["open", "closed", "all"], default: "open" },
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
"app.slack.send_message": {
|
|
233
|
+
type: "object",
|
|
234
|
+
required: ["channel", "text"],
|
|
235
|
+
properties: {
|
|
236
|
+
channel: { type: "string", description: "Slack channel ID or name" },
|
|
237
|
+
text: { type: "string", description: "Message text" },
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
"app.notion.create_page": {
|
|
241
|
+
type: "object",
|
|
242
|
+
required: ["parent_id", "title"],
|
|
243
|
+
properties: {
|
|
244
|
+
parent_id: { type: "string", description: "Parent page or database ID" },
|
|
245
|
+
title: { type: "string", description: "Page title" },
|
|
246
|
+
content: { type: "string", description: "Markdown content" },
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
"app.googlecalendar.list_events": {
|
|
250
|
+
type: "object",
|
|
251
|
+
properties: {
|
|
252
|
+
calendarId: { type: "string", default: "primary" },
|
|
253
|
+
maxResults: { type: "number", default: 10 },
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
"app.googlecalendar.create_event": {
|
|
257
|
+
type: "object",
|
|
258
|
+
required: ["summary", "start_datetime", "end_datetime"],
|
|
259
|
+
properties: {
|
|
260
|
+
calendarId: { type: "string", default: "primary" },
|
|
261
|
+
summary: { type: "string", description: "Event title" },
|
|
262
|
+
start_datetime: { type: "string", description: "ISO 8601 start timestamp" },
|
|
263
|
+
end_datetime: { type: "string", description: "ISO 8601 end timestamp" },
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
"app.hubspot.search_contacts": {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
query: { type: "string", description: "Contact name, email, or company search query" },
|
|
270
|
+
limit: { type: "number", default: 10 },
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
"app.hubspot.create_contact": {
|
|
274
|
+
type: "object",
|
|
275
|
+
required: ["email"],
|
|
276
|
+
properties: {
|
|
277
|
+
email: { type: "string", description: "Contact email address" },
|
|
278
|
+
firstname: { type: "string" },
|
|
279
|
+
lastname: { type: "string" },
|
|
280
|
+
company: { type: "string" },
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
"app.jira.search_issues": {
|
|
284
|
+
type: "object",
|
|
285
|
+
properties: {
|
|
286
|
+
jql: { type: "string", description: "JQL query string" },
|
|
287
|
+
max_results: { type: "number", default: 25 },
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
"app.jira.create_issue": {
|
|
291
|
+
type: "object",
|
|
292
|
+
required: ["project_key", "summary"],
|
|
293
|
+
properties: {
|
|
294
|
+
project_key: { type: "string", description: "Jira project key (e.g. ENG)" },
|
|
295
|
+
summary: { type: "string", description: "Issue summary" },
|
|
296
|
+
description: { type: "string", description: "Issue description" },
|
|
297
|
+
issue_type: { type: "string", default: "Task" },
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
"app.salesforce.soql_query": {
|
|
301
|
+
type: "object",
|
|
302
|
+
required: ["query"],
|
|
303
|
+
properties: {
|
|
304
|
+
query: { type: "string", description: "SOQL query string" },
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
"app.salesforce.create_lead": {
|
|
308
|
+
type: "object",
|
|
309
|
+
required: ["LastName", "Company"],
|
|
310
|
+
properties: {
|
|
311
|
+
FirstName: { type: "string" },
|
|
312
|
+
LastName: { type: "string" },
|
|
313
|
+
Company: { type: "string" },
|
|
314
|
+
Email: { type: "string" },
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
"app.zendesk.list_tickets": {
|
|
318
|
+
type: "object",
|
|
319
|
+
properties: {
|
|
320
|
+
status: { type: "string", default: "open" },
|
|
321
|
+
per_page: { type: "number", default: 25 },
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
"app.zendesk.reply_ticket": {
|
|
325
|
+
type: "object",
|
|
326
|
+
required: ["ticket_id", "body"],
|
|
327
|
+
properties: {
|
|
328
|
+
ticket_id: { type: "number", description: "Zendesk ticket ID" },
|
|
329
|
+
body: { type: "string", description: "Reply comment text" },
|
|
330
|
+
public: { type: "boolean", default: true },
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
"app.shopify.list_orders": {
|
|
334
|
+
type: "object",
|
|
335
|
+
properties: {
|
|
336
|
+
status: { type: "string", default: "any" },
|
|
337
|
+
limit: { type: "number", default: 25 },
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
"app.shopify.create_refund": {
|
|
341
|
+
type: "object",
|
|
342
|
+
required: ["order_id"],
|
|
343
|
+
properties: {
|
|
344
|
+
order_id: { type: "string", description: "Shopify order ID" },
|
|
345
|
+
reason: { type: "string", description: "Refund reason" },
|
|
346
|
+
amount_cents: { type: "number", description: "Optional refund amount in cents" },
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
"app.pagerduty.list_incidents": {
|
|
350
|
+
type: "object",
|
|
351
|
+
properties: {
|
|
352
|
+
statuses: { type: "array", items: { type: "string" } },
|
|
353
|
+
limit: { type: "number", default: 25 },
|
|
354
|
+
},
|
|
355
|
+
},
|
|
356
|
+
"app.pagerduty.create_incident": {
|
|
357
|
+
type: "object",
|
|
358
|
+
required: ["title", "service_id"],
|
|
359
|
+
properties: {
|
|
360
|
+
title: { type: "string", description: "Incident summary title" },
|
|
361
|
+
service_id: { type: "string", description: "PagerDuty service ID" },
|
|
362
|
+
urgency: { type: "string", enum: ["high", "low"], default: "high" },
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
"app.discord.send_message": {
|
|
366
|
+
type: "object",
|
|
367
|
+
required: ["channel_id", "content"],
|
|
368
|
+
properties: {
|
|
369
|
+
channel_id: { type: "string", description: "Discord channel ID" },
|
|
370
|
+
content: { type: "string", description: "Message content" },
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
"app.googledrive.search_files": {
|
|
374
|
+
type: "object",
|
|
375
|
+
properties: {
|
|
376
|
+
query: { type: "string", description: "File or folder search query" },
|
|
377
|
+
pageSize: { type: "number", default: 10 },
|
|
378
|
+
},
|
|
379
|
+
},
|
|
380
|
+
"app.airtable.list_records": {
|
|
381
|
+
type: "object",
|
|
382
|
+
required: ["base_id", "table_name"],
|
|
383
|
+
properties: {
|
|
384
|
+
base_id: { type: "string", description: "Airtable Base ID" },
|
|
385
|
+
table_name: { type: "string", description: "Table name or ID" },
|
|
386
|
+
max_records: { type: "number", default: 20 },
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
"app.sentry.list_issues": {
|
|
390
|
+
type: "object",
|
|
391
|
+
properties: {
|
|
392
|
+
project_slug: { type: "string", description: "Sentry project slug" },
|
|
393
|
+
query: { type: "string", description: "Issue search query", default: "is:unresolved" },
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
};
|
|
397
|
+
export function getSampleActionSchema(muxoSlug, upstreamSlug) {
|
|
398
|
+
return (SAMPLE_ACTION_SCHEMAS[muxoSlug] ||
|
|
399
|
+
(upstreamSlug ? SAMPLE_ACTION_SCHEMAS[upstreamSlug] : undefined) || {
|
|
400
|
+
type: "object",
|
|
401
|
+
properties: {
|
|
402
|
+
query: { type: "string", description: "Search query or identifier" },
|
|
403
|
+
payload: { type: "object", description: "Structured action parameters" },
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
export const COMPOSIO_TRIGGER_CATALOGUE = [
|
|
408
|
+
{
|
|
409
|
+
slug: "GITHUB_COMMIT_EVENT",
|
|
410
|
+
providerSlug: "github",
|
|
411
|
+
name: "GitHub Commit Pushed",
|
|
412
|
+
description: "Fires when a commit is pushed to a monitored repository branch.",
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
slug: "GITHUB_PULL_REQUEST_EVENT",
|
|
416
|
+
providerSlug: "github",
|
|
417
|
+
name: "GitHub Pull Request Event",
|
|
418
|
+
description: "Fires when a pull request is opened, synchronized, or merged.",
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
slug: "SLACK_RECEIVE_MESSAGE",
|
|
422
|
+
providerSlug: "slack",
|
|
423
|
+
name: "Slack Channel Message Received",
|
|
424
|
+
description: "Fires when a new message is posted in a monitored Slack channel.",
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
slug: "GMAIL_NEW_GMAIL_MESSAGE",
|
|
428
|
+
providerSlug: "gmail",
|
|
429
|
+
name: "Gmail New Inbound Email",
|
|
430
|
+
description: "Fires when a new email arrives in the connected Gmail inbox.",
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
slug: "LINEAR_ISSUE_CREATED",
|
|
434
|
+
providerSlug: "linear",
|
|
435
|
+
name: "Linear Issue Created",
|
|
436
|
+
description: "Fires when a new issue is created in a Linear team.",
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
slug: "HUBSPOT_CONTACT_CREATED",
|
|
440
|
+
providerSlug: "hubspot",
|
|
441
|
+
name: "HubSpot New CRM Contact",
|
|
442
|
+
description: "Fires when a new contact lead enters HubSpot CRM.",
|
|
443
|
+
},
|
|
444
|
+
];
|
|
445
|
+
export function listComposioTriggerTypes(providerSlug) {
|
|
446
|
+
if (!providerSlug)
|
|
447
|
+
return COMPOSIO_TRIGGER_CATALOGUE.map((t) => ({ ...t }));
|
|
448
|
+
const p = providerSlug.toLowerCase().trim();
|
|
449
|
+
return COMPOSIO_TRIGGER_CATALOGUE.filter((c) => c.providerSlug === p).map((t) => ({ ...t }));
|
|
450
|
+
}
|
|
451
|
+
export function filterComposioToolkits(params) {
|
|
452
|
+
const q = (params?.search || "").trim().toLowerCase();
|
|
453
|
+
const cat = (params?.category || "").trim().toLowerCase();
|
|
454
|
+
let list = [...ENTERPRISE_TOOLKITS_CATALOG];
|
|
455
|
+
if (q) {
|
|
456
|
+
list = list.filter((t) => t.slug.includes(q) ||
|
|
457
|
+
t.name.toLowerCase().includes(q) ||
|
|
458
|
+
t.description.toLowerCase().includes(q) ||
|
|
459
|
+
t.categories.some((c) => c.toLowerCase().includes(q)));
|
|
460
|
+
}
|
|
461
|
+
if (cat) {
|
|
462
|
+
list = list.filter((t) => t.categories.some((c) => c.toLowerCase() === cat));
|
|
463
|
+
}
|
|
464
|
+
return list;
|
|
465
|
+
}
|
|
466
|
+
/** Least-privilege scopes for a custom auth config: explicit scopes win, then the toolkit's read-only or full set. */
|
|
467
|
+
export function composioAuthConfigScopes(toolkitSlug, scopeMode, customScopes) {
|
|
468
|
+
if (customScopes && customScopes.length > 0)
|
|
469
|
+
return customScopes;
|
|
470
|
+
const meta = ENTERPRISE_TOOLKITS_CATALOG.find((t) => t.slug === toolkitSlug);
|
|
471
|
+
return scopeMode === "read_only"
|
|
472
|
+
? meta?.readOnlyScopes || ["read"]
|
|
473
|
+
: meta?.fullAccessScopes || ["read", "write"];
|
|
474
|
+
}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ClerkEnv } from "./clerk.js";
|
|
1
2
|
export declare const ROOT_DIR: string;
|
|
2
3
|
export interface MuxoConfig {
|
|
3
4
|
port: number;
|
|
@@ -6,6 +7,11 @@ export interface MuxoConfig {
|
|
|
6
7
|
composioApiKey: string;
|
|
7
8
|
composioBaseUrl: string;
|
|
8
9
|
stripeSecretKey: string;
|
|
10
|
+
stripePublishableKey: string;
|
|
11
|
+
stripeApiBaseUrl: string;
|
|
12
|
+
stripeProvisioningApiVersion: string;
|
|
13
|
+
stripeProjectId: string;
|
|
14
|
+
stripeConnectedAccountId?: string;
|
|
9
15
|
stripeStarterPriceId: string;
|
|
10
16
|
stripeCreditsPriceId: string;
|
|
11
17
|
stripeWebhookSecret: string;
|
|
@@ -16,5 +22,9 @@ export interface MuxoConfig {
|
|
|
16
22
|
publicWebUrl: string;
|
|
17
23
|
docsUrl: string;
|
|
18
24
|
vaultMasterKey: Buffer;
|
|
25
|
+
/** Clerk sign-in settings; sign-in stays password-based unless CLERK_PUBLISHABLE_KEY is set. */
|
|
26
|
+
clerkEnv?: ClerkEnv & {
|
|
27
|
+
MUXO_OWNER_EMAILS?: string;
|
|
28
|
+
};
|
|
19
29
|
}
|
|
20
30
|
export declare function getConfig(): MuxoConfig;
|
package/dist/config.js
CHANGED
|
@@ -70,6 +70,15 @@ export function getConfig() {
|
|
|
70
70
|
stripeSecretKey: process.env.MUXO_EXTERNAL_MODE === "1"
|
|
71
71
|
? ""
|
|
72
72
|
: process.env.STRIPE_SECRET_KEY || "",
|
|
73
|
+
stripePublishableKey: process.env.MUXO_EXTERNAL_MODE === "1"
|
|
74
|
+
? ""
|
|
75
|
+
: process.env.STRIPE_PUBLISHABLE_KEY || "",
|
|
76
|
+
stripeApiBaseUrl: process.env.STRIPE_API_BASE_URL || "https://api.stripe.com",
|
|
77
|
+
stripeProvisioningApiVersion: process.env.STRIPE_PROVISIONING_API_VERSION || "2026-09-30.preview",
|
|
78
|
+
stripeProjectId: process.env.STRIPE_PROJECT_ID || "",
|
|
79
|
+
stripeConnectedAccountId: process.env.STRIPE_CONNECTED_ACCOUNT_ID ||
|
|
80
|
+
process.env.STRIPE_CONTEXT ||
|
|
81
|
+
"",
|
|
73
82
|
stripeStarterPriceId: process.env.STRIPE_STARTER_PRICE_ID || "",
|
|
74
83
|
stripeCreditsPriceId: process.env.STRIPE_CREDITS_PRICE_ID || "",
|
|
75
84
|
stripeWebhookSecret: process.env.STRIPE_WEBHOOK_SECRET || "",
|
|
@@ -85,5 +94,12 @@ export function getConfig() {
|
|
|
85
94
|
publicWebUrl: process.env.MUXO_PUBLIC_WEB_URL || "https://muxo.ai",
|
|
86
95
|
docsUrl: process.env.MUXO_DOCS_URL || "https://docs.muxo.ai",
|
|
87
96
|
vaultMasterKey: deriveVaultMasterKey(),
|
|
97
|
+
clerkEnv: {
|
|
98
|
+
CLERK_PUBLISHABLE_KEY: process.env.CLERK_PUBLISHABLE_KEY,
|
|
99
|
+
CLERK_SECRET_KEY: process.env.CLERK_SECRET_KEY,
|
|
100
|
+
CLERK_JWT_KEY: process.env.CLERK_JWT_KEY,
|
|
101
|
+
CLERK_AUTHORIZED_PARTIES: process.env.CLERK_AUTHORIZED_PARTIES,
|
|
102
|
+
MUXO_OWNER_EMAILS: process.env.MUXO_OWNER_EMAILS,
|
|
103
|
+
},
|
|
88
104
|
};
|
|
89
105
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Cloud provisioning pipeline modelled on Cloudflare Workflows primitives, shared by the Node engine and the edge worker. */
|
|
2
|
+
import { MuxoToolError } from "./mcp-schema.js";
|
|
3
|
+
export type DurableWorkflowStepStatus = "completed" | "waiting" | "pending";
|
|
4
|
+
export interface DurableWorkflowStep {
|
|
5
|
+
name: string;
|
|
6
|
+
primitive: "step.do" | "step.waitForEvent" | "step.sleep";
|
|
7
|
+
status: DurableWorkflowStepStatus;
|
|
8
|
+
output?: Record<string, unknown>;
|
|
9
|
+
completedAt?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface DurableWorkflow {
|
|
12
|
+
id: string;
|
|
13
|
+
workspaceId: string;
|
|
14
|
+
workflowType: "cloud_provisioning_pipeline" | "approval_handoff_pipeline";
|
|
15
|
+
status: "running" | "waiting_for_event" | "completed" | "failed";
|
|
16
|
+
provider: string;
|
|
17
|
+
serviceRef: string;
|
|
18
|
+
resourceId: string | null;
|
|
19
|
+
steps: DurableWorkflowStep[];
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const WORKFLOW_RESOURCE_COMPLETED_EVENT = "v2.provisioning.resource.completed";
|
|
24
|
+
export declare function workflowNotFoundError(workflowId: string): MuxoToolError;
|
|
25
|
+
export declare function normalizeWorkflowTarget(params: {
|
|
26
|
+
provider?: string;
|
|
27
|
+
serviceRef?: string;
|
|
28
|
+
}): {
|
|
29
|
+
provider: string;
|
|
30
|
+
serviceRef: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function createCloudProvisioningWorkflow(params: {
|
|
33
|
+
id: string;
|
|
34
|
+
workspaceId: string;
|
|
35
|
+
resourceId: string;
|
|
36
|
+
provider: string;
|
|
37
|
+
serviceRef: string;
|
|
38
|
+
region?: string;
|
|
39
|
+
apiVersion?: string;
|
|
40
|
+
}): DurableWorkflow;
|
|
41
|
+
/** Completes every outstanding step once the resource-completed event (or a manual advance) arrives. */
|
|
42
|
+
export declare function completeCloudProvisioningWorkflow(wf: DurableWorkflow, params: {
|
|
43
|
+
secretKeys: string[];
|
|
44
|
+
triggerEvent?: unknown;
|
|
45
|
+
}): DurableWorkflow;
|