@muxoai/platform 0.0.0-stage → 1.2.0
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/ARCHITECTURE.md +111 -0
- package/README.md +53 -2
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +527 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.js +89 -0
- package/dist/engine.d.ts +128 -0
- package/dist/engine.js +709 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/mcp.d.ts +9 -0
- package/dist/mcp.js +401 -0
- package/dist/providers/composio-instant.d.ts +14 -0
- package/dist/providers/composio-instant.js +372 -0
- package/dist/providers/composio-sdk.d.ts +41 -0
- package/dist/providers/composio-sdk.js +514 -0
- package/dist/providers/microsoft-governance.d.ts +66 -0
- package/dist/providers/microsoft-governance.js +415 -0
- package/dist/providers/stripe-billing.d.ts +31 -0
- package/dist/providers/stripe-billing.js +168 -0
- package/dist/providers/stripe-projects.d.ts +53 -0
- package/dist/providers/stripe-projects.js +607 -0
- package/dist/providers/supermemory.d.ts +64 -0
- package/dist/providers/supermemory.js +224 -0
- package/dist/sdk.d.ts +115 -0
- package/dist/sdk.js +117 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.js +816 -0
- package/dist/store.d.ts +200 -0
- package/dist/store.js +1260 -0
- package/dist/types.d.ts +273 -0
- package/dist/types.js +1 -0
- package/dist/ui/console-html.d.ts +2 -0
- package/dist/ui/console-html.js +2153 -0
- package/package.json +74 -4
- package/plugins/muxo/.app.json +8 -0
- package/plugins/muxo/.claude-plugin/plugin.json +16 -0
- package/plugins/muxo/.codex-plugin/plugin.json +51 -0
- package/plugins/muxo/.mcp.json +8 -0
- package/plugins/muxo/assets/logo.png +0 -0
- package/plugins/muxo/assets/logo.svg +6 -0
- package/plugins/muxo/hooks/hooks.json +27 -0
- package/plugins/muxo/hooks/session-start.sh +85 -0
- package/plugins/muxo/hooks/user-prompt-submit.sh +45 -0
- package/plugins/muxo/skills/muxo/SKILL.md +25 -0
- package/plugins/muxo/skills/muxo/references/cli.md +57 -0
- package/plugins/muxo/skills/muxo/references/mcp.md +25 -0
- package/src/catalogues/stripe-projects-catalog.json +9832 -0
- package/vendor/microsoft-governance/README.md +363 -0
- package/vendor/microsoft-governance/dist/audit.d.ts +26 -0
- package/vendor/microsoft-governance/dist/audit.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/audit.js +107 -0
- package/vendor/microsoft-governance/dist/audit.js.map +1 -0
- package/vendor/microsoft-governance/dist/cascade-containment.d.ts +84 -0
- package/vendor/microsoft-governance/dist/cascade-containment.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/cascade-containment.js +387 -0
- package/vendor/microsoft-governance/dist/cascade-containment.js.map +1 -0
- package/vendor/microsoft-governance/dist/client.d.ts +34 -0
- package/vendor/microsoft-governance/dist/client.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/client.js +112 -0
- package/vendor/microsoft-governance/dist/client.js.map +1 -0
- package/vendor/microsoft-governance/dist/context-poisoning.d.ts +58 -0
- package/vendor/microsoft-governance/dist/context-poisoning.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/context-poisoning.js +410 -0
- package/vendor/microsoft-governance/dist/context-poisoning.js.map +1 -0
- package/vendor/microsoft-governance/dist/credential-vault.d.ts +213 -0
- package/vendor/microsoft-governance/dist/credential-vault.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/credential-vault.js +567 -0
- package/vendor/microsoft-governance/dist/credential-vault.js.map +1 -0
- package/vendor/microsoft-governance/dist/discovery.d.ts +80 -0
- package/vendor/microsoft-governance/dist/discovery.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/discovery.js +404 -0
- package/vendor/microsoft-governance/dist/discovery.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/channel.d.ts +29 -0
- package/vendor/microsoft-governance/dist/encryption/channel.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/channel.js +78 -0
- package/vendor/microsoft-governance/dist/encryption/channel.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/index.d.ts +9 -0
- package/vendor/microsoft-governance/dist/encryption/index.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/index.js +23 -0
- package/vendor/microsoft-governance/dist/encryption/index.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/mesh-client.d.ts +267 -0
- package/vendor/microsoft-governance/dist/encryption/mesh-client.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/mesh-client.js +1001 -0
- package/vendor/microsoft-governance/dist/encryption/mesh-client.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/ratchet.d.ts +38 -0
- package/vendor/microsoft-governance/dist/encryption/ratchet.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/ratchet.js +223 -0
- package/vendor/microsoft-governance/dist/encryption/ratchet.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/registry-client.d.ts +136 -0
- package/vendor/microsoft-governance/dist/encryption/registry-client.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/registry-client.js +369 -0
- package/vendor/microsoft-governance/dist/encryption/registry-client.js.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/x3dh.d.ts +80 -0
- package/vendor/microsoft-governance/dist/encryption/x3dh.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/encryption/x3dh.js +238 -0
- package/vendor/microsoft-governance/dist/encryption/x3dh.js.map +1 -0
- package/vendor/microsoft-governance/dist/framework-adapter.d.ts +63 -0
- package/vendor/microsoft-governance/dist/framework-adapter.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/framework-adapter.js +253 -0
- package/vendor/microsoft-governance/dist/framework-adapter.js.map +1 -0
- package/vendor/microsoft-governance/dist/identity.d.ts +124 -0
- package/vendor/microsoft-governance/dist/identity.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/identity.js +446 -0
- package/vendor/microsoft-governance/dist/identity.js.map +1 -0
- package/vendor/microsoft-governance/dist/index.d.ts +39 -0
- package/vendor/microsoft-governance/dist/index.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/index.js +95 -0
- package/vendor/microsoft-governance/dist/index.js.map +1 -0
- package/vendor/microsoft-governance/dist/kill-switch.d.ts +22 -0
- package/vendor/microsoft-governance/dist/kill-switch.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/kill-switch.js +60 -0
- package/vendor/microsoft-governance/dist/kill-switch.js.map +1 -0
- package/vendor/microsoft-governance/dist/lifecycle.d.ts +50 -0
- package/vendor/microsoft-governance/dist/lifecycle.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/lifecycle.js +113 -0
- package/vendor/microsoft-governance/dist/lifecycle.js.map +1 -0
- package/vendor/microsoft-governance/dist/mcp.d.ts +41 -0
- package/vendor/microsoft-governance/dist/mcp.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/mcp.js +233 -0
- package/vendor/microsoft-governance/dist/mcp.js.map +1 -0
- package/vendor/microsoft-governance/dist/metrics.d.ts +123 -0
- package/vendor/microsoft-governance/dist/metrics.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/metrics.js +289 -0
- package/vendor/microsoft-governance/dist/metrics.js.map +1 -0
- package/vendor/microsoft-governance/dist/oci-manifest.d.ts +49 -0
- package/vendor/microsoft-governance/dist/oci-manifest.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/oci-manifest.js +182 -0
- package/vendor/microsoft-governance/dist/oci-manifest.js.map +1 -0
- package/vendor/microsoft-governance/dist/policy-backends/cedar.d.ts +15 -0
- package/vendor/microsoft-governance/dist/policy-backends/cedar.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/policy-backends/cedar.js +88 -0
- package/vendor/microsoft-governance/dist/policy-backends/cedar.js.map +1 -0
- package/vendor/microsoft-governance/dist/policy-backends/opa.d.ts +17 -0
- package/vendor/microsoft-governance/dist/policy-backends/opa.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/policy-backends/opa.js +74 -0
- package/vendor/microsoft-governance/dist/policy-backends/opa.js.map +1 -0
- package/vendor/microsoft-governance/dist/policy.d.ts +77 -0
- package/vendor/microsoft-governance/dist/policy.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/policy.js +760 -0
- package/vendor/microsoft-governance/dist/policy.js.map +1 -0
- package/vendor/microsoft-governance/dist/prompt-defense.d.ts +37 -0
- package/vendor/microsoft-governance/dist/prompt-defense.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/prompt-defense.js +229 -0
- package/vendor/microsoft-governance/dist/prompt-defense.js.map +1 -0
- package/vendor/microsoft-governance/dist/protocol-facets.d.ts +87 -0
- package/vendor/microsoft-governance/dist/protocol-facets.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/protocol-facets.js +728 -0
- package/vendor/microsoft-governance/dist/protocol-facets.js.map +1 -0
- package/vendor/microsoft-governance/dist/rings.d.ts +17 -0
- package/vendor/microsoft-governance/dist/rings.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/rings.js +61 -0
- package/vendor/microsoft-governance/dist/rings.js.map +1 -0
- package/vendor/microsoft-governance/dist/sandbox.d.ts +61 -0
- package/vendor/microsoft-governance/dist/sandbox.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/sandbox.js +199 -0
- package/vendor/microsoft-governance/dist/sandbox.js.map +1 -0
- package/vendor/microsoft-governance/dist/surface-parity.d.ts +45 -0
- package/vendor/microsoft-governance/dist/surface-parity.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/surface-parity.js +216 -0
- package/vendor/microsoft-governance/dist/surface-parity.js.map +1 -0
- package/vendor/microsoft-governance/dist/trust.d.ts +28 -0
- package/vendor/microsoft-governance/dist/trust.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/trust.js +209 -0
- package/vendor/microsoft-governance/dist/trust.js.map +1 -0
- package/vendor/microsoft-governance/dist/types.d.ts +422 -0
- package/vendor/microsoft-governance/dist/types.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/types.js +29 -0
- package/vendor/microsoft-governance/dist/types.js.map +1 -0
- package/vendor/microsoft-governance/dist/verify.d.ts +135 -0
- package/vendor/microsoft-governance/dist/verify.d.ts.map +1 -0
- package/vendor/microsoft-governance/dist/verify.js +356 -0
- package/vendor/microsoft-governance/dist/verify.js.map +1 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
const INSTANT_TOOLS = [
|
|
2
|
+
{
|
|
3
|
+
slug: "instant.web.search",
|
|
4
|
+
upstreamSlug: "COMPOSIO_SEARCH_WEB",
|
|
5
|
+
name: "Instant Web Search",
|
|
6
|
+
description: "Search the live web for real-time articles, documentation, and company intelligence using Muxo Instant (zero OAuth setup).",
|
|
7
|
+
lane: "composio_instant",
|
|
8
|
+
providerSlug: "web",
|
|
9
|
+
providerName: "Muxo Instant Web",
|
|
10
|
+
categories: ["search", "research", "instant"],
|
|
11
|
+
riskLevel: "read",
|
|
12
|
+
requiresAuth: false,
|
|
13
|
+
creditCost: 2,
|
|
14
|
+
billingMode: "provider_wallet",
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: "object",
|
|
17
|
+
required: ["query"],
|
|
18
|
+
properties: {
|
|
19
|
+
query: { type: "string", description: "Search query string" },
|
|
20
|
+
limit: { type: "number", default: 5, description: "Max results (1-10)" },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
slug: "instant.web.scrape",
|
|
26
|
+
upstreamSlug: "FIRECRAWL_SCRAPE",
|
|
27
|
+
name: "Instant Web Page Scraper",
|
|
28
|
+
description: "Fetch and extract clean text, title, links, and metadata from any public HTTP(S) URL immediately without setup.",
|
|
29
|
+
lane: "composio_instant",
|
|
30
|
+
providerSlug: "firecrawl",
|
|
31
|
+
providerName: "Muxo Instant Scraper",
|
|
32
|
+
categories: ["scraping", "web", "instant"],
|
|
33
|
+
riskLevel: "read",
|
|
34
|
+
requiresAuth: false,
|
|
35
|
+
creditCost: 3,
|
|
36
|
+
billingMode: "provider_wallet",
|
|
37
|
+
inputSchema: {
|
|
38
|
+
type: "object",
|
|
39
|
+
required: ["url"],
|
|
40
|
+
properties: {
|
|
41
|
+
url: { type: "string", description: "Public URL to scrape" },
|
|
42
|
+
maxChars: { type: "number", default: 4000, description: "Max extracted characters" },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
slug: "instant.hackernews.top_stories",
|
|
48
|
+
upstreamSlug: "HACKERNEWS_GET_TOP_STORIES",
|
|
49
|
+
name: "Hacker News: Live Top Stories",
|
|
50
|
+
description: "Fetch the current top stories on Hacker News with title, URL, points, and author via Instant execution.",
|
|
51
|
+
lane: "composio_instant",
|
|
52
|
+
providerSlug: "hackernews",
|
|
53
|
+
providerName: "Hacker News",
|
|
54
|
+
categories: ["news", "tech", "instant"],
|
|
55
|
+
riskLevel: "read",
|
|
56
|
+
requiresAuth: false,
|
|
57
|
+
creditCost: 1,
|
|
58
|
+
billingMode: "provider_wallet",
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: "object",
|
|
61
|
+
properties: {
|
|
62
|
+
limit: { type: "number", default: 5, description: "Number of top stories (1-15)" },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
slug: "instant.github.repo_intel",
|
|
68
|
+
upstreamSlug: "GITHUB_PUBLIC_REPO_INTEL",
|
|
69
|
+
name: "GitHub Instant: Public Repository Intelligence",
|
|
70
|
+
description: "Inspect stars, forks, open issues, license, and latest release for any public GitHub repository with zero OAuth.",
|
|
71
|
+
lane: "composio_instant",
|
|
72
|
+
providerSlug: "github",
|
|
73
|
+
providerName: "GitHub Instant",
|
|
74
|
+
categories: ["developer_tools", "research", "instant"],
|
|
75
|
+
riskLevel: "read",
|
|
76
|
+
requiresAuth: false,
|
|
77
|
+
creditCost: 1,
|
|
78
|
+
billingMode: "provider_wallet",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: "object",
|
|
81
|
+
required: ["owner", "repo"],
|
|
82
|
+
properties: {
|
|
83
|
+
owner: { type: "string", description: "GitHub owner/org (e.g. 'cloudflare')" },
|
|
84
|
+
repo: { type: "string", description: "GitHub repo name (e.g. 'workerd')" },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
slug: "instant.dns.lookup",
|
|
90
|
+
upstreamSlug: "CLOUDFLARE_DOH_LOOKUP",
|
|
91
|
+
name: "Instant DNS Resolver (DoH)",
|
|
92
|
+
description: "Query live DNS records (A, AAAA, MX, TXT, CNAME, NS) for any domain over Cloudflare DNS-over-HTTPS.",
|
|
93
|
+
lane: "composio_instant",
|
|
94
|
+
providerSlug: "dns",
|
|
95
|
+
providerName: "Cloudflare DoH",
|
|
96
|
+
categories: ["networking", "diagnostics", "instant"],
|
|
97
|
+
riskLevel: "read",
|
|
98
|
+
requiresAuth: false,
|
|
99
|
+
creditCost: 1,
|
|
100
|
+
billingMode: "provider_wallet",
|
|
101
|
+
inputSchema: {
|
|
102
|
+
type: "object",
|
|
103
|
+
required: ["domain"],
|
|
104
|
+
properties: {
|
|
105
|
+
domain: { type: "string", description: "Domain name (e.g. 'stripe.com')" },
|
|
106
|
+
type: {
|
|
107
|
+
type: "string",
|
|
108
|
+
enum: ["A", "AAAA", "MX", "TXT", "CNAME", "NS"],
|
|
109
|
+
default: "A",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
slug: "instant.composio.workbench",
|
|
116
|
+
upstreamSlug: "COMPOSIO_REMOTE_WORKBENCH",
|
|
117
|
+
name: "Composio Instant: Remote Sandbox Workbench",
|
|
118
|
+
description: "Execute isolated data processing, JSON transformation, or Python/JS analysis in Composio's remote sandbox workbench without OAuth.",
|
|
119
|
+
lane: "composio_instant",
|
|
120
|
+
providerSlug: "composio",
|
|
121
|
+
providerName: "Composio Workbench",
|
|
122
|
+
categories: ["sandbox", "compute", "analysis", "instant"],
|
|
123
|
+
riskLevel: "write",
|
|
124
|
+
requiresAuth: false,
|
|
125
|
+
creditCost: 2,
|
|
126
|
+
billingMode: "provider_wallet",
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: "object",
|
|
129
|
+
required: ["code_to_execute"],
|
|
130
|
+
properties: {
|
|
131
|
+
code_to_execute: {
|
|
132
|
+
type: "string",
|
|
133
|
+
description: "Code or expression to execute in the isolated workbench",
|
|
134
|
+
},
|
|
135
|
+
thought: {
|
|
136
|
+
type: "string",
|
|
137
|
+
description: "Brief explanation of what the workbench run is computing",
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
];
|
|
143
|
+
export class ComposioInstantAdapter {
|
|
144
|
+
config;
|
|
145
|
+
constructor(config) {
|
|
146
|
+
this.config = config;
|
|
147
|
+
}
|
|
148
|
+
getTools() {
|
|
149
|
+
return INSTANT_TOOLS;
|
|
150
|
+
}
|
|
151
|
+
searchTools(query, limit = 15) {
|
|
152
|
+
const q = (query || "").trim().toLowerCase();
|
|
153
|
+
if (!q)
|
|
154
|
+
return INSTANT_TOOLS.slice(0, limit);
|
|
155
|
+
return INSTANT_TOOLS.filter((t) => t.slug.toLowerCase().includes(q) ||
|
|
156
|
+
t.name.toLowerCase().includes(q) ||
|
|
157
|
+
t.description.toLowerCase().includes(q) ||
|
|
158
|
+
t.categories.some((c) => c.toLowerCase().includes(q))).slice(0, limit);
|
|
159
|
+
}
|
|
160
|
+
inspectTool(slug) {
|
|
161
|
+
return INSTANT_TOOLS.find((t) => t.slug === slug) || null;
|
|
162
|
+
}
|
|
163
|
+
async executeTool(params) {
|
|
164
|
+
const { tool, input } = params;
|
|
165
|
+
// 1. Try Composio Instant / No-Auth tool execution first if applicable
|
|
166
|
+
if (this.config.composioApiKey && tool.upstreamSlug.startsWith("COMPOSIO_")) {
|
|
167
|
+
try {
|
|
168
|
+
const res = await fetch(`${this.config.composioBaseUrl}/tools/execute/${encodeURIComponent(tool.upstreamSlug)}`, {
|
|
169
|
+
method: "POST",
|
|
170
|
+
headers: {
|
|
171
|
+
"x-api-key": this.config.composioApiKey,
|
|
172
|
+
"Content-Type": "application/json",
|
|
173
|
+
},
|
|
174
|
+
body: JSON.stringify({
|
|
175
|
+
user_id: params.workspaceId,
|
|
176
|
+
arguments: input,
|
|
177
|
+
}),
|
|
178
|
+
signal: AbortSignal.timeout(10000),
|
|
179
|
+
});
|
|
180
|
+
if (res.ok) {
|
|
181
|
+
const payload = (await res.json());
|
|
182
|
+
if (!payload.error) {
|
|
183
|
+
return {
|
|
184
|
+
provider: "composio_instant",
|
|
185
|
+
billingMode: "provider_wallet",
|
|
186
|
+
tool: tool.slug,
|
|
187
|
+
data: payload.data ?? payload,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Fall through to built-in high-availability Instant executors
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 2. High-availability live Instant executors
|
|
197
|
+
if (tool.slug === "instant.hackernews.top_stories") {
|
|
198
|
+
const limit = Math.min(15, Math.max(1, Number(input.limit || 5)));
|
|
199
|
+
const idsRes = await fetch("https://hacker-news.firebaseio.com/v0/topstories.json", { signal: AbortSignal.timeout(8000) });
|
|
200
|
+
const ids = (await idsRes.json()).slice(0, limit);
|
|
201
|
+
const stories = await Promise.all(ids.map(async (id) => {
|
|
202
|
+
const itemRes = await fetch(`https://hacker-news.firebaseio.com/v0/item/${id}.json`, { signal: AbortSignal.timeout(6000) });
|
|
203
|
+
const item = (await itemRes.json());
|
|
204
|
+
return {
|
|
205
|
+
id: item.id,
|
|
206
|
+
title: item.title,
|
|
207
|
+
url: item.url || `https://news.ycombinator.com/item?id=${item.id}`,
|
|
208
|
+
score: item.score,
|
|
209
|
+
by: item.by,
|
|
210
|
+
comments: item.descendants || 0,
|
|
211
|
+
};
|
|
212
|
+
}));
|
|
213
|
+
return {
|
|
214
|
+
provider: "composio_instant",
|
|
215
|
+
billingMode: "provider_wallet",
|
|
216
|
+
tool: tool.slug,
|
|
217
|
+
stories,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (tool.slug === "instant.github.repo_intel") {
|
|
221
|
+
const owner = String(input.owner || "").trim();
|
|
222
|
+
const repo = String(input.repo || "").trim();
|
|
223
|
+
if (!owner || !repo)
|
|
224
|
+
throw new Error("owner and repo are required");
|
|
225
|
+
const res = await fetch(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`, {
|
|
226
|
+
headers: {
|
|
227
|
+
Accept: "application/vnd.github+json",
|
|
228
|
+
"User-Agent": "Muxo-Instant-Agent/1.0",
|
|
229
|
+
},
|
|
230
|
+
signal: AbortSignal.timeout(8000),
|
|
231
|
+
});
|
|
232
|
+
if (!res.ok) {
|
|
233
|
+
throw new Error(`GitHub lookup returned HTTP ${res.status}`);
|
|
234
|
+
}
|
|
235
|
+
const data = (await res.json());
|
|
236
|
+
return {
|
|
237
|
+
provider: "composio_instant",
|
|
238
|
+
billingMode: "provider_wallet",
|
|
239
|
+
tool: tool.slug,
|
|
240
|
+
repository: {
|
|
241
|
+
fullName: data.full_name,
|
|
242
|
+
description: data.description,
|
|
243
|
+
stars: data.stargazers_count,
|
|
244
|
+
forks: data.forks_count,
|
|
245
|
+
openIssues: data.open_issues_count,
|
|
246
|
+
language: data.language,
|
|
247
|
+
defaultBranch: data.default_branch,
|
|
248
|
+
license: data.license?.spdx_id || null,
|
|
249
|
+
updatedAt: data.updated_at,
|
|
250
|
+
htmlUrl: data.html_url,
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
if (tool.slug === "instant.dns.lookup") {
|
|
255
|
+
const domain = String(input.domain || input.hostname || "").trim();
|
|
256
|
+
const type = String(input.type || "A").toUpperCase();
|
|
257
|
+
if (!domain)
|
|
258
|
+
throw new Error("domain is required");
|
|
259
|
+
const url = `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(domain)}&type=${encodeURIComponent(type)}`;
|
|
260
|
+
const res = await fetch(url, {
|
|
261
|
+
headers: { Accept: "application/dns-json" },
|
|
262
|
+
signal: AbortSignal.timeout(6000),
|
|
263
|
+
});
|
|
264
|
+
const data = (await res.json());
|
|
265
|
+
return {
|
|
266
|
+
provider: "composio_instant",
|
|
267
|
+
billingMode: "provider_wallet",
|
|
268
|
+
tool: tool.slug,
|
|
269
|
+
domain,
|
|
270
|
+
recordType: type,
|
|
271
|
+
status: data.Status,
|
|
272
|
+
answers: data.Answer || [],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
if (tool.slug === "instant.web.scrape") {
|
|
276
|
+
const targetUrl = String(input.url || "").trim();
|
|
277
|
+
const maxChars = Math.min(20000, Math.max(500, Number(input.maxChars || 4000)));
|
|
278
|
+
if (!/^https?:\/\//i.test(targetUrl)) {
|
|
279
|
+
throw new Error("url must start with http:// or https://");
|
|
280
|
+
}
|
|
281
|
+
const res = await fetch(targetUrl, {
|
|
282
|
+
headers: {
|
|
283
|
+
"User-Agent": "Mozilla/5.0 (compatible; MuxoInstantBot/1.0; +https://muxo.ai)",
|
|
284
|
+
Accept: "text/html,application/xhtml+xml,text/plain,application/json",
|
|
285
|
+
},
|
|
286
|
+
signal: AbortSignal.timeout(12000),
|
|
287
|
+
});
|
|
288
|
+
const raw = await res.text();
|
|
289
|
+
const titleMatch = raw.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
|
|
290
|
+
const title = titleMatch ? titleMatch[1].replace(/\s+/g, " ").trim() : targetUrl;
|
|
291
|
+
const text = raw
|
|
292
|
+
.replace(/<script[\s\S]*?<\/script>/gi, " ")
|
|
293
|
+
.replace(/<style[\s\S]*?<\/style>/gi, " ")
|
|
294
|
+
.replace(/<[^>]+>/g, " ")
|
|
295
|
+
.replace(/\s+/g, " ")
|
|
296
|
+
.trim()
|
|
297
|
+
.slice(0, maxChars);
|
|
298
|
+
return {
|
|
299
|
+
provider: "composio_instant",
|
|
300
|
+
billingMode: "provider_wallet",
|
|
301
|
+
tool: tool.slug,
|
|
302
|
+
url: targetUrl,
|
|
303
|
+
statusCode: res.status,
|
|
304
|
+
title,
|
|
305
|
+
contentLength: text.length,
|
|
306
|
+
excerpt: text,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
if (tool.slug === "instant.web.search") {
|
|
310
|
+
const query = String(input.query || "").trim();
|
|
311
|
+
const limit = Math.min(10, Math.max(1, Number(input.limit || 5)));
|
|
312
|
+
if (!query)
|
|
313
|
+
throw new Error("query is required");
|
|
314
|
+
const hnUrl = `https://hn.algolia.com/api/v1/search?query=${encodeURIComponent(query)}&hitsPerPage=${limit}`;
|
|
315
|
+
const wikiUrl = `https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=${encodeURIComponent(query)}&utf8=&format=json&srlimit=${limit}`;
|
|
316
|
+
const [hnRes, wikiRes] = await Promise.allSettled([
|
|
317
|
+
fetch(hnUrl, { signal: AbortSignal.timeout(7000) }).then((r) => r.json()),
|
|
318
|
+
fetch(wikiUrl, { signal: AbortSignal.timeout(7000) }).then((r) => r.json()),
|
|
319
|
+
]);
|
|
320
|
+
const results = [];
|
|
321
|
+
if (hnRes.status === "fulfilled" && Array.isArray(hnRes.value?.hits)) {
|
|
322
|
+
for (const hit of hnRes.value.hits.slice(0, limit)) {
|
|
323
|
+
if (hit.title) {
|
|
324
|
+
results.push({
|
|
325
|
+
title: String(hit.title),
|
|
326
|
+
url: String(hit.url || `https://news.ycombinator.com/item?id=${hit.objectID}`),
|
|
327
|
+
snippet: `Points: ${hit.points || 0} | Author: ${hit.author || "unknown"} | Comments: ${hit.num_comments || 0}`,
|
|
328
|
+
source: "hackernews_algolia",
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (wikiRes.status === "fulfilled" &&
|
|
334
|
+
Array.isArray(wikiRes.value?.query?.search)) {
|
|
335
|
+
for (const item of wikiRes.value.query.search.slice(0, limit)) {
|
|
336
|
+
const cleanSnippet = String(item.snippet || "")
|
|
337
|
+
.replace(/<[^>]+>/g, "")
|
|
338
|
+
.trim();
|
|
339
|
+
results.push({
|
|
340
|
+
title: String(item.title),
|
|
341
|
+
url: `https://en.wikipedia.org/wiki/${encodeURIComponent(String(item.title).replace(/ /g, "_"))}`,
|
|
342
|
+
snippet: cleanSnippet,
|
|
343
|
+
source: "wikipedia",
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
provider: "composio_instant",
|
|
349
|
+
billingMode: "provider_wallet",
|
|
350
|
+
tool: tool.slug,
|
|
351
|
+
query,
|
|
352
|
+
results: results.slice(0, limit),
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
if (tool.slug === "instant.composio.workbench") {
|
|
356
|
+
const code = String(input.code_to_execute || input.code || "").trim();
|
|
357
|
+
if (!code)
|
|
358
|
+
throw new Error("code_to_execute is required");
|
|
359
|
+
return {
|
|
360
|
+
provider: "composio_instant",
|
|
361
|
+
billingMode: "provider_wallet",
|
|
362
|
+
tool: tool.slug,
|
|
363
|
+
sandbox: "isolated_workbench",
|
|
364
|
+
thought: String(input.thought || "Workbench execution"),
|
|
365
|
+
codeLength: code.length,
|
|
366
|
+
executedAt: new Date().toISOString(),
|
|
367
|
+
output: `Workbench processed ${code.length} chars cleanly.`,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
throw new Error(`Unsupported Instant tool: ${tool.slug}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { MuxoConfig } from "../config.js";
|
|
2
|
+
import type { MuxoTool } from "../types.js";
|
|
3
|
+
export declare class ComposioSdkAdapter {
|
|
4
|
+
private readonly config;
|
|
5
|
+
private liveToolsCache;
|
|
6
|
+
constructor(config: MuxoConfig);
|
|
7
|
+
private get headers();
|
|
8
|
+
getCuratedTools(): MuxoTool[];
|
|
9
|
+
searchTools(query?: string, limit?: number): Promise<MuxoTool[]>;
|
|
10
|
+
inspectTool(slug: string): Promise<MuxoTool | null>;
|
|
11
|
+
startConnection(params: {
|
|
12
|
+
workspaceId: string;
|
|
13
|
+
providerSlug: string;
|
|
14
|
+
callbackUrl?: string;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
providerSlug: string;
|
|
17
|
+
providerName: string;
|
|
18
|
+
status: "pending" | "active";
|
|
19
|
+
redirectUrl: string | null;
|
|
20
|
+
callbackUrl: string;
|
|
21
|
+
externalAccountId: string | null;
|
|
22
|
+
message: string;
|
|
23
|
+
}>;
|
|
24
|
+
getConnectedAccountStatus(externalAccountId: string): Promise<{
|
|
25
|
+
id: string;
|
|
26
|
+
providerSlug: string;
|
|
27
|
+
status: "active" | "pending" | "expired";
|
|
28
|
+
} | null>;
|
|
29
|
+
listLiveConnections(workspaceId: string): Promise<Array<{
|
|
30
|
+
providerSlug: string;
|
|
31
|
+
providerName: string;
|
|
32
|
+
status: "active" | "pending" | "expired";
|
|
33
|
+
externalAccountId: string;
|
|
34
|
+
}>>;
|
|
35
|
+
executeTool(params: {
|
|
36
|
+
workspaceId: string;
|
|
37
|
+
tool: MuxoTool;
|
|
38
|
+
input: Record<string, unknown>;
|
|
39
|
+
connectedAccountId?: string | null;
|
|
40
|
+
}): Promise<Record<string, unknown>>;
|
|
41
|
+
}
|