@muxoai/platform 1.4.3 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/store.d.ts CHANGED
@@ -178,7 +178,10 @@ export declare class MuxoStore {
178
178
  category: "llm" | "supplier";
179
179
  envVarName: string;
180
180
  };
181
- setByokKey(workspaceId: string, providerInput: string, secretKey: string): ByokKeyRecord;
181
+ setByokKey(workspaceId: string, providerInput: string, secretKey: string, options?: {
182
+ mcpGatewayUrl?: string | null;
183
+ }): ByokKeyRecord;
184
+ getByokMcpGatewayUrl(workspaceId: string): string | null;
182
185
  getByokKey(workspaceId: string, providerInput: string): string | null;
183
186
  deleteByokKey(workspaceId: string, providerInput: string): boolean;
184
187
  listByokKeys(workspaceId: string): ByokKeyRecord[];
package/dist/store.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { DatabaseSync } from "node:sqlite";
2
2
  import crypto from "node:crypto";
3
+ import { normalizeComposioByokGatewayUrl } from "./composio-catalog.js";
3
4
  export const BYOK_PROVIDER_CATALOG = {
4
5
  openai: { category: "llm", envVarName: "OPENAI_API_KEY", label: "OpenAI (GPT-4o / o3-mini)" },
5
6
  anthropic: { category: "llm", envVarName: "ANTHROPIC_API_KEY", label: "Anthropic (Claude 3.7 Sonnet)" },
@@ -1204,7 +1205,7 @@ export class MuxoStore {
1204
1205
  envVarName,
1205
1206
  };
1206
1207
  }
1207
- setByokKey(workspaceId, providerInput, secretKey) {
1208
+ setByokKey(workspaceId, providerInput, secretKey, options) {
1208
1209
  const trimmed = secretKey.trim();
1209
1210
  if (!trimmed) {
1210
1211
  throw new Error("BYOK secretKey must not be empty");
@@ -1214,7 +1215,17 @@ export class MuxoStore {
1214
1215
  const keyPreview = trimmed.length <= 8
1215
1216
  ? `${trimmed.slice(0, 2)}***`
1216
1217
  : `${trimmed.slice(0, 6)}...${trimmed.slice(-4)}`;
1217
- const encryptedHex = this.encryptSecrets(workspaceId, { [envVarName]: trimmed });
1218
+ if (options?.mcpGatewayUrl && provider !== "composio") {
1219
+ throw new Error("MCP gateway URLs are only supported for Composio BYOK.");
1220
+ }
1221
+ const cleanGatewayUrl = options?.mcpGatewayUrl
1222
+ ? normalizeComposioByokGatewayUrl(options.mcpGatewayUrl)
1223
+ : provider === "composio" ? this.getByokMcpGatewayUrl(workspaceId) || "" : "";
1224
+ const secretPayload = {
1225
+ [envVarName]: trimmed,
1226
+ ...(cleanGatewayUrl ? { COMPOSIO_MCP_GATEWAY_URL: cleanGatewayUrl } : {}),
1227
+ };
1228
+ const encryptedHex = this.encryptSecrets(workspaceId, secretPayload);
1218
1229
  this.db
1219
1230
  .prepare(`INSERT INTO byok_keys (
1220
1231
  workspace_id, provider, category, env_var_name, key_preview, encrypted_secret_hex, updated_at
@@ -1233,9 +1244,19 @@ export class MuxoStore {
1233
1244
  envVarName,
1234
1245
  keyPreview,
1235
1246
  configured: true,
1247
+ ...(cleanGatewayUrl ? { mcpGatewayUrl: cleanGatewayUrl } : {}),
1236
1248
  updatedAt: now,
1237
1249
  };
1238
1250
  }
1251
+ getByokMcpGatewayUrl(workspaceId) {
1252
+ const row = this.db
1253
+ .prepare("SELECT encrypted_secret_hex FROM byok_keys WHERE workspace_id = ? AND provider = 'composio'")
1254
+ .get(workspaceId);
1255
+ if (!row)
1256
+ return null;
1257
+ const dec = this.decryptSecrets(workspaceId, row.encrypted_secret_hex);
1258
+ return dec.COMPOSIO_MCP_GATEWAY_URL || null;
1259
+ }
1239
1260
  getByokKey(workspaceId, providerInput) {
1240
1261
  const { provider, envVarName } = this.normalizeByokProvider(providerInput);
1241
1262
  const row = this.db
@@ -1255,11 +1276,23 @@ export class MuxoStore {
1255
1276
  }
1256
1277
  listByokKeys(workspaceId) {
1257
1278
  const rows = this.db
1258
- .prepare("SELECT provider, category, env_var_name, key_preview, updated_at FROM byok_keys WHERE workspace_id = ? ORDER BY updated_at DESC")
1279
+ .prepare("SELECT provider, category, env_var_name, key_preview, encrypted_secret_hex, updated_at FROM byok_keys WHERE workspace_id = ? ORDER BY updated_at DESC")
1259
1280
  .all(workspaceId);
1260
1281
  const configuredMap = new Map();
1261
1282
  for (const r of rows) {
1262
1283
  const p = String(r.provider);
1284
+ let mcpGatewayUrl;
1285
+ if (p === "composio" && r.encrypted_secret_hex) {
1286
+ try {
1287
+ const dec = this.decryptSecrets(workspaceId, String(r.encrypted_secret_hex));
1288
+ if (dec.COMPOSIO_MCP_GATEWAY_URL) {
1289
+ mcpGatewayUrl = dec.COMPOSIO_MCP_GATEWAY_URL;
1290
+ }
1291
+ }
1292
+ catch {
1293
+ // ignore
1294
+ }
1295
+ }
1263
1296
  configuredMap.set(p, {
1264
1297
  provider: p,
1265
1298
  providerSlug: p,
@@ -1267,6 +1300,7 @@ export class MuxoStore {
1267
1300
  envVarName: String(r.env_var_name),
1268
1301
  keyPreview: String(r.key_preview),
1269
1302
  configured: true,
1303
+ ...(mcpGatewayUrl ? { mcpGatewayUrl } : {}),
1270
1304
  updatedAt: String(r.updated_at),
1271
1305
  });
1272
1306
  }
package/dist/types.d.ts CHANGED
@@ -184,6 +184,7 @@ export interface MuxoTool {
184
184
  llmContextUrl?: string;
185
185
  providerUrl?: string;
186
186
  metadata?: Record<string, unknown>;
187
+ domainSkill?: Record<string, unknown>;
187
188
  }
188
189
  export type ToolDescriptor = MuxoTool;
189
190
  export interface ConnectionRecord {
@@ -441,6 +442,7 @@ export interface ByokKeyRecord {
441
442
  category: "llm" | "supplier";
442
443
  envVarName: string;
443
444
  keyPreview: string;
445
+ mcpGatewayUrl?: string | null;
444
446
  configured: boolean;
445
447
  updatedAt: string;
446
448
  }
@@ -499,6 +501,29 @@ export interface HumanHandoffDescriptor {
499
501
  oauthRedirectUrl: string | null;
500
502
  consoleUrl: string;
501
503
  }
504
+ export interface ApprovalImpactPreview {
505
+ whatChanges: string;
506
+ whoIsAffected: string;
507
+ targetEntity: string;
508
+ estimatedCostUsd: number;
509
+ creditCost: number;
510
+ fundingMode: "muxo_funded" | "byok";
511
+ costDisplay: string;
512
+ triggeredRule: string;
513
+ reversibility: "reversible" | "compensatable_saga" | "irreversible";
514
+ recoveryBehavior: string;
515
+ }
516
+ export interface BusinessReceiptSummary {
517
+ whatChanged: string;
518
+ whoAuthorized: string;
519
+ whatSucceeded: string;
520
+ whatRemainsUnresolved: string[];
521
+ costUsd: number;
522
+ creditsCharged: number;
523
+ fundingMode: "muxo_funded" | "byok";
524
+ costDisplay: string;
525
+ reconciliationStatus: "verified_complete" | "failed_zero_charge" | "cancelled" | "needs_reconciliation";
526
+ }
502
527
  export interface ActionPlan {
503
528
  id: string;
504
529
  workspaceId: string;
@@ -510,6 +535,9 @@ export interface ActionPlan {
510
535
  input: Record<string, unknown>;
511
536
  reason: string;
512
537
  creditCost: number;
538
+ estimatedCostUsd?: number;
539
+ changePreview?: ApprovalImpactPreview;
540
+ idempotencyKey?: string;
513
541
  approvalStatus: "auto_approved" | "pending_approval" | "approved" | "rejected" | "executed";
514
542
  approvedBy: string | null;
515
543
  approvedAt: string | null;
@@ -548,6 +576,9 @@ export interface ExecutionRun {
548
576
  errorMessage?: string | null;
549
577
  actionsMetered: number;
550
578
  creditsMetered: number;
579
+ estimatedCostUsd?: number;
580
+ idempotentReplay?: boolean;
581
+ reconciliationStatus?: "verified_complete" | "failed_zero_charge" | "cancelled" | "needs_reconciliation";
551
582
  durationMs: number | null;
552
583
  receiptId: string | null;
553
584
  startedAt: string;
@@ -586,6 +617,8 @@ export interface ExecutionReceipt {
586
617
  status: "succeeded" | "failed" | "cancelled";
587
618
  actionsMetered: number;
588
619
  creditsMetered: number;
620
+ estimatedCostUsd?: number;
621
+ businessSummary?: BusinessReceiptSummary;
589
622
  inputHash: string;
590
623
  outputHash: string;
591
624
  prevReceiptHash: string;
@@ -2003,9 +2003,12 @@ async function loadByokKeys() {
2003
2003
  async function saveByokKeyFromUi() {
2004
2004
  var provider = byId('byok-provider-select').value;
2005
2005
  var secretKey = byId('byok-key-input').value.trim();
2006
+ var gwInput = byId('byok-gateway-input');
2007
+ var mcpGatewayUrl = provider === 'composio' && gwInput && gwInput.value ? gwInput.value.trim() : undefined;
2006
2008
  if (!secretKey) { showToast('Paste a key first'); byId('byok-key-input').focus(); return; }
2007
- await post('/api/v1/byok', { provider: provider, secretKey: secretKey, apiKey: secretKey });
2009
+ await post('/api/v1/byok', { provider: provider, secretKey: secretKey, apiKey: secretKey, mcpGatewayUrl: mcpGatewayUrl });
2008
2010
  byId('byok-key-input').value = '';
2011
+ if (gwInput) gwInput.value = '';
2009
2012
  showToast('Saved your ' + provider + ' key. It is encrypted in your vault.');
2010
2013
  await loadByokKeys();
2011
2014
  }
@@ -2365,6 +2368,13 @@ function init() {
2365
2368
  onSubmit('policy-form', savePolicy);
2366
2369
  onSubmit('scan-form', scanContextFromUi);
2367
2370
  onSubmit('byok-form', saveByokKeyFromUi);
2371
+ var byokSelect = byId('byok-provider-select');
2372
+ if (byokSelect) {
2373
+ byokSelect.addEventListener('change', function () {
2374
+ var gwField = byId('byok-gateway-field');
2375
+ if (gwField) gwField.hidden = byokSelect.value !== 'composio';
2376
+ });
2377
+ }
2368
2378
  onSubmit('join-workspace-form', joinWorkspaceFromForm);
2369
2379
  onSubmit('create-workspace-form', createWorkspaceFromForm);
2370
2380
  onSubmit('team-onboard-form', onboardTeamFromForm);
@@ -2753,7 +2763,7 @@ export function renderConsoleHtml() {
2753
2763
  <option value="anthropic">Anthropic (plain-English routing)</option>
2754
2764
  <option value="openrouter">OpenRouter (plain-English routing)</option>
2755
2765
  <option value="gemini">Google Gemini (plain-English routing)</option>
2756
- <option value="composio">Apps and instant tools (0 credits)</option>
2766
+ <option value="composio">Apps, MCP Gateway &amp; instant tools (0 credits)</option>
2757
2767
  <option value="stripe">Cloud infrastructure (0 credits)</option>
2758
2768
  <option value="supermemory">Workspace memory</option>
2759
2769
  <option value="firecrawl">Firecrawl (scrape and crawl)</option>
@@ -2761,6 +2771,7 @@ export function renderConsoleHtml() {
2761
2771
  </select>
2762
2772
  </label>
2763
2773
  <label class="field"><span>Key</span><input id="byok-key-input" type="password" placeholder="Paste the key" autocomplete="off" /></label>
2774
+ <label class="field" id="byok-gateway-field" hidden><span>MCP Gateway URL (optional)</span><input id="byok-gateway-input" type="url" placeholder="https://connect.composio.dev/mcp" autocomplete="off" /></label>
2764
2775
  <button class="btn btn-primary" type="submit" style="min-height:40px">Save key</button>
2765
2776
  </form>
2766
2777
  <div class="table-wrap">
@@ -3312,17 +3323,17 @@ export function renderOAuthConsentHtml(opts) {
3312
3323
  </html>`;
3313
3324
  }
3314
3325
  const approvalCss = `
3315
- .approval-facts{display:grid;gap:8px;margin:18px 0 0;padding:0;list-style:none;text-align:left;font-size:14px}
3316
- .approval-facts li{display:flex;justify-content:space-between;gap:14px;padding:9px 12px;border:1px solid var(--color-border);border-radius:10px;background:var(--color-bg)}
3326
+ .approval-facts{display:grid;gap:6px;margin:12px 0 0;padding:0;list-style:none;text-align:left;font-size:13px}
3327
+ .approval-facts li{display:flex;justify-content:space-between;gap:12px;padding:6px 10px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-bg)}
3317
3328
  .approval-facts .k{color:var(--color-muted);flex:none}
3318
3329
  .approval-facts .v{color:var(--color-text);font-weight:500;text-align:right;overflow-wrap:anywhere}
3319
- .approval-input{margin:14px 0 0;padding:12px;border:1px solid var(--color-border);border-radius:10px;background:var(--color-bg);font-family:var(--font-mono);font-size:12px;text-align:left;white-space:pre-wrap;overflow-wrap:anywhere;max-height:180px;overflow:auto}
3330
+ .approval-input{margin:10px 0 0;padding:10px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-bg);font-family:var(--font-mono);font-size:12px;text-align:left;white-space:pre-wrap;overflow-wrap:anywhere;max-height:110px;overflow:auto}
3320
3331
  .approval-risk{display:inline-block;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;text-transform:capitalize}
3321
3332
  .approval-risk[data-tone="ok"]{background:var(--color-ok-bg);color:var(--color-ok)}
3322
3333
  .approval-risk[data-tone="warn"]{background:var(--color-warn-bg);color:var(--color-warn)}
3323
3334
  .approval-risk[data-tone="strict"]{background:var(--color-danger-bg);color:var(--color-danger)}
3324
- .approval-note{margin-top:14px;color:var(--color-muted);font-size:13px}
3325
- .approval-done{margin-top:18px;text-align:left;font-size:14px}
3335
+ .approval-note{margin-top:10px;color:var(--color-muted);font-size:13px}
3336
+ .approval-done{margin-top:14px;text-align:left;font-size:14px}
3326
3337
  `;
3327
3338
  const approvalScript = String.raw `
3328
3339
  (function () {
@@ -3356,10 +3367,17 @@ const approvalScript = String.raw `
3356
3367
  function renderPlan() {
3357
3368
  show('approval-loading', false);
3358
3369
  show('approval-review', true);
3370
+ var preview = plan.changePreview || {};
3371
+ var credits = plan.creditCost != null ? plan.creditCost : 0;
3372
+ var usd = plan.estimatedCostUsd != null ? Number(plan.estimatedCostUsd).toFixed(2) : (credits * 0.01).toFixed(2);
3359
3373
  byId('approval-tool').textContent = plan.toolSlug || '';
3360
3374
  byId('approval-risk').textContent = plan.riskLevel + ' risk';
3361
3375
  byId('approval-risk').setAttribute('data-tone', riskTone(plan.riskLevel));
3362
- byId('approval-cost').textContent = String(plan.creditCost != null ? plan.creditCost : 0) + ' credits';
3376
+ byId('approval-what-changes').textContent = preview.whatChanges || plan.reason || ('Execute ' + (plan.toolSlug || 'action'));
3377
+ byId('approval-affected').textContent = preview.whoIsAffected || preview.targetEntity || 'Workspace integration';
3378
+ byId('approval-cost').textContent = preview.costDisplay || ('$' + usd + ' USD (' + credits + ' credits)');
3379
+ byId('approval-rule').textContent = preview.triggeredRule || (plan.decisionRecord && plan.decisionRecord.matchedRule) || 'Workspace approval policy';
3380
+ byId('approval-recovery').textContent = preview.recoveryBehavior || 'Execute-once idempotency; 0 credits charged on failure.';
3363
3381
  byId('approval-reason').textContent = plan.reason || '—';
3364
3382
  byId('approval-input').textContent = JSON.stringify(plan.input || {}, null, 2);
3365
3383
  var already = plan.approvalStatus === 'approved' || plan.approvalStatus === 'auto_approved';
@@ -3377,7 +3395,11 @@ const approvalScript = String.raw `
3377
3395
  show('approval-done', true);
3378
3396
  var html = '<p>' + esc(message) + '</p>';
3379
3397
  if (result && result.run) {
3398
+ var bs = (result.receipt && result.receipt.businessSummary) || {};
3380
3399
  html += '<ul class="approval-facts">'
3400
+ + (bs.whatChanged ? '<li><span class="k">What changed</span><span class="v">' + esc(bs.whatChanged) + '</span></li>' : '')
3401
+ + (bs.whoAuthorized ? '<li><span class="k">Authorized by</span><span class="v">' + esc(bs.whoAuthorized) + '</span></li>' : '')
3402
+ + (bs.costDisplay ? '<li><span class="k">Cost</span><span class="v">' + esc(bs.costDisplay) + '</span></li>' : '')
3381
3403
  + '<li><span class="k">Run</span><span class="v">' + esc(result.run.id) + ' · ' + esc(result.run.status) + '</span></li>'
3382
3404
  + (result.receipt ? '<li><span class="k">Receipt</span><span class="v">' + esc(result.receipt.id) + '</span></li>' : '')
3383
3405
  + '</ul>';
@@ -3542,8 +3564,12 @@ export function renderApprovalPageHtml(opts) {
3542
3564
  <div id="approval-review" hidden>
3543
3565
  <ul class="approval-facts">
3544
3566
  <li><span class="k">Action</span><span class="v" id="approval-tool"></span></li>
3567
+ <li><span class="k">What changes</span><span class="v" id="approval-what-changes"></span></li>
3568
+ <li><span class="k">Who is affected</span><span class="v" id="approval-affected"></span></li>
3545
3569
  <li><span class="k">Risk</span><span class="v"><span id="approval-risk" class="approval-risk" data-tone="warn"></span></span></li>
3546
- <li><span class="k">Cost</span><span class="v" id="approval-cost"></span></li>
3570
+ <li><span class="k">Estimated cost</span><span class="v" id="approval-cost"></span></li>
3571
+ <li><span class="k">Triggered rule</span><span class="v" id="approval-rule"></span></li>
3572
+ <li><span class="k">Recovery &amp; safety</span><span class="v" id="approval-recovery"></span></li>
3547
3573
  <li><span class="k">Reason</span><span class="v" id="approval-reason"></span></li>
3548
3574
  </ul>
3549
3575
  <pre id="approval-input" class="approval-input" aria-label="Tool input"></pre>
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const MUXO_VERSION = "1.4.3";
1
+ export declare const MUXO_VERSION = "1.4.5";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const MUXO_VERSION = "1.4.3";
1
+ export const MUXO_VERSION = "1.4.5";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muxoai/platform",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "Muxo — Unified Execution, Provisioning & Governance Platform over Composio, Stripe Projects, Microsoft Agent Governance & Supermemory",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muxo",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "Governed agent execution across 1,000+ Connected Apps (managed OAuth handoff), Instant Tools (search, scrape, crawl, SEO audit), live Cloud Infrastructure provisioning, Workspace Memory recall, and verifiable audit records.",
5
5
  "author": {
6
6
  "name": "Muxo AI LLC",
@@ -8,7 +8,7 @@
8
8
  "url": "https://muxo.ai"
9
9
  },
10
10
  "homepage": "https://muxo.ai",
11
- "repository": "https://github.com/muxo-ai/muxo",
11
+ "repository": "https://github.com/Muxoai/muxo3",
12
12
  "license": "MIT",
13
13
  "skills": "./skills/",
14
14
  "hooks": "./hooks/hooks.json",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muxo",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "Your agent decides what to do — Muxo governs, provisions, remembers, and executes it. Unified access to 1,000+ Connected Apps (managed OAuth handoff), Instant Tools (search, scrape, crawl, SEO audit), live Cloud Infrastructure provisioning (Postgres, Redis, SQLite, Storage), Workspace Memory recall, and verifiable audit records.",
5
5
  "author": {
6
6
  "name": "Muxo AI LLC",
@@ -8,7 +8,7 @@
8
8
  "url": "https://muxo.ai"
9
9
  },
10
10
  "homepage": "https://muxo.ai",
11
- "repository": "https://github.com/muxo-ai/muxo",
11
+ "repository": "https://github.com/Muxoai/muxo3",
12
12
  "license": "MIT",
13
13
  "keywords": [
14
14
  "muxo",
@@ -33,7 +33,7 @@
33
33
  "com.openai": {
34
34
  "onboardingSkill": "./skills/setup/SKILL.md",
35
35
  "publication": {
36
- "release_notes": "Muxo v1.4.3: Unified governed execution across 1,000+ Connected Apps, Instant web/SEO tools, 94 Stripe Projects Cloud Infrastructure services, MCP 2026-07-28 compliance, and Workspace Memory."
36
+ "release_notes": "Muxo v1.4.5: Unified governed execution across 1,000+ Connected Apps, Instant web/SEO tools, 94 Stripe Projects Cloud Infrastructure services, MCP 2026-07-28 compliance, and Workspace Memory."
37
37
  }
38
38
  }
39
39
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muxo",
3
3
  "description": "Your agent decides what to do — Muxo governs, provisions, remembers, and executes it. Connect and operate 1,000+ external apps via managed OAuth, zero-auth Instant Tools (web search, scrape, crawl, SEO audit, remote workbench), live Cloud Infrastructure provisioning (Stripe Projects), and Workspace Memory from Cursor.",
4
- "version": "1.4.3",
4
+ "version": "1.4.5",
5
5
  "mcpServers": "../mcp.json",
6
6
  "skills": "../skills/",
7
7
  "author": {
@@ -10,7 +10,7 @@
10
10
  "url": "https://muxo.ai"
11
11
  },
12
12
  "homepage": "https://muxo.ai",
13
- "repository": "https://github.com/muxo-ai/muxo",
13
+ "repository": "https://github.com/Muxoai/muxo3",
14
14
  "license": "MIT",
15
15
  "keywords": [
16
16
  "muxo",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "muxo",
4
- "version": "1.4.3",
4
+ "version": "1.4.5",
5
5
  "description": "Your agent decides what to do — Muxo governs, provisions, remembers, and executes it. Unified access to 1,000+ Connected Apps (managed OAuth handoff), Instant Tools (search, scrape, crawl, SEO audit), live Cloud Infrastructure provisioning (Postgres, Redis, SQLite, Storage), Workspace Memory recall, and verifiable audit records.",
6
6
  "author": {
7
7
  "name": "Muxo AI LLC",
@@ -9,7 +9,7 @@
9
9
  "url": "https://muxo.ai"
10
10
  },
11
11
  "homepage": "https://muxo.ai",
12
- "repository": "https://github.com/muxo-ai/muxo",
12
+ "repository": "https://github.com/Muxoai/muxo3",
13
13
  "license": "MIT",
14
14
  "keywords": [
15
15
  "muxo",
@@ -109,7 +109,7 @@
109
109
  "commerce_description": "This plugin does not sell retail products or process consumer checkout inside ChatGPT."
110
110
  },
111
111
  "publication": {
112
- "release_notes": "Muxo v1.4.3: Unified governed execution across 1,000+ Connected Apps, Instant web/SEO tools, 94 Stripe Projects Cloud Infrastructure services, MCP 2026-07-28 compliance, and Workspace Memory."
112
+ "release_notes": "Muxo v1.4.5: Unified governed execution across 1,000+ Connected Apps, Instant web/SEO tools, 94 Stripe Projects Cloud Infrastructure services, MCP 2026-07-28 compliance, and Workspace Memory."
113
113
  }
114
114
  }
115
115
  }
@@ -138,9 +138,19 @@ Users can operate every Muxo pillar in plain English through `POST /api/v1/do` (
138
138
 
139
139
  ### Context, MCP Resources & Prompts
140
140
  - **Inspect**: "Show my workspace context", "Explain current run context", or call `get_run_context({ query: "..." })` — returns credits, learned defaults, active guardrails, `llmPolicyBrief`, provisioned resources, and a ready-to-use `llmSystemPrompt` block.
141
- - **MCP Resources (`resources/read`)**: `muxo://policy/brief`, `muxo://governance/policy`, `muxo://context`, `muxo://memory/graph`.
142
- - **MCP Prompts (`prompts/get`)**: `context`, `policy_guardrails` (accepts optional `tool_slug`), `governed_execution`, `security_audit`.
143
- - REST equivalent: `GET/POST /api/v1/context`.
141
+ - **Plain-English OSS & Commercial Intent Router on `get_run_context` & `POST /api/v1/do`**: Pass any plain-English prompt to `get_run_context({ prompt: "..." })` or `POST /api/v1/do` (`{"prompt": "..."}`) without memorizing sub-action enums, workflow IDs, or playbook slugs:
142
+ - **Turnkey & Custom Saga Playbooks**: `"Run the fullstack cloud bootstrap playbook"`, `"List playbooks"`, or `"Create playbook daily-seo-slack that runs instant.seo.audit and app.slack.send_message"` (`POST /api/v1/playbooks`, `POST /api/v1/playbooks/:slug/run`).
143
+ - **Temporal Workflow Saga Rollback, Signals & History (`"latest"` supported)**: `"Rollback the latest workflow because staging healthcheck failed"`, `"Signal workflow latest human.approval.granted"`, `"Show Temporal history for latest workflow"` (`POST /api/v1/workflows/latest/rollback`, `/signal`, `/history`).
144
+ - **Graphiti Time-Travel & Multi-Hop BFS Memory Graph**: `"Show my knowledge graph as of 2026-10-20T00:00:00Z within 2 hops of workspace"` (`GET /api/v1/memory/graph?as_of=...&focal_entity=...&max_hops=2`).
145
+ - **AWS Cedar 4.0 & OPA Rego v1 Policy-as-Code**: `"Compile our guardrails to AWS Cedar"` or `"Evaluate Cedar policy for resource.turso.database with DROP TABLE users"` (`GET /api/v1/governance/cedar`, `POST /api/v1/governance/cedar/evaluate`).
146
+ - **OpenTelemetry GenAI 1.29.0 & Langfuse Traces**: `"Export OpenTelemetry traces and Langfuse batch"` (`GET /api/v1/telemetry/otlp`).
147
+ - **FinOps & Commercial Engineering ROI**: `"What is our ROI and how many engineering hours have we saved?"` (`GET /api/v1/analytics/roi`).
148
+ - **One-Shot Agent Harness Configurator & Presets**: `"Configure harness preset strict-production and only allow emails to @muxo.ai"` (`GET/POST /api/v1/harness/configure`, `get_run_context({ action: "configure_harness", preset: "strict-production", harness: "claude_code" })`).
149
+ - **MCP Resources (`resources/read`)**: `muxo://policy/brief`, `muxo://governance/policy`, `muxo://context`, `muxo://memory/graph`, `muxo://harness/config`, `muxo://playbooks`, `muxo://skills`, `muxo://skills/{skillSlug}`.
150
+ - **MCP Prompts (`prompts/get`)**: `context`, `policy_guardrails` (accepts optional `tool_slug`), `governed_execution`, `security_audit`, `harness_setup`, `commercial_playbook`.
151
+ - **Governed Domain & Workflow Skills Catalog (`muxo://skills/{skillSlug}`)**:
152
+ - Read domain playbooks & parameter pitfalls via MCP (`resources/read` on `muxo://skills/github-automation`, `muxo://skills/supabase-provisioning`, `muxo://skills/changelog-generator`, or `skills/get` on `skill://muxo/<slug>/SKILL.md`), REST (`GET /api/v1/skills`, `GET /api/v1/skills/:slug`, `GET /skills/:slug/SKILL.md`), or CLI (`muxo skills list`, `muxo skills show <slug>`, `muxo skills install <slug> --all-curated`).
153
+ - REST equivalent: `GET/POST /api/v1/context`, `GET/POST /api/v1/harness/configure`, `GET/POST /api/v1/playbooks`, `GET /api/v1/skills`.
144
154
 
145
155
  ### Receipts
146
156
  - **Explain / verify**: "Explain my latest receipt", "Verify receipt rcpt_...", "Show recent receipts" — returns the tamper-proof receipt with signature status and a plain-English explanation of action, cost, and funding mode.