@runtypelabs/cli 2.33.2 → 2.33.4
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/index.js +487 -471
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -15351,7 +15351,7 @@ var recordCollectionSchemaSchema = external_exports.strictObject({
|
|
|
15351
15351
|
additionalProperties: external_exports.boolean().optional()
|
|
15352
15352
|
}).superRefine((schema, ctx) => addSemanticIssues(schema, ctx));
|
|
15353
15353
|
|
|
15354
|
-
// ../shared/dist/chunk-
|
|
15354
|
+
// ../shared/dist/chunk-M7MDPQ5F.mjs
|
|
15355
15355
|
var MCPServerCategory = {
|
|
15356
15356
|
COMMUNICATION: "communication",
|
|
15357
15357
|
PRODUCTIVITY: "productivity",
|
|
@@ -15600,6 +15600,449 @@ function separateToolIds(toolIds) {
|
|
|
15600
15600
|
function isDataConnectionToolId(toolId) {
|
|
15601
15601
|
return toolId.startsWith("dc:");
|
|
15602
15602
|
}
|
|
15603
|
+
var SURFACE_TYPE_METADATA = {
|
|
15604
|
+
chat: {
|
|
15605
|
+
description: "Website widget, support bots, conversational interfaces. Uses Persona and can optionally accept WebMCP page tools discovered from document.modelContext.",
|
|
15606
|
+
useCases: [
|
|
15607
|
+
"customer support",
|
|
15608
|
+
"onboarding",
|
|
15609
|
+
"internal tools",
|
|
15610
|
+
"FAQ bots",
|
|
15611
|
+
"page-aware assistants"
|
|
15612
|
+
],
|
|
15613
|
+
examples: [
|
|
15614
|
+
"Support chatbot",
|
|
15615
|
+
"Sales assistant widget",
|
|
15616
|
+
"Internal help desk",
|
|
15617
|
+
"Storefront assistant with browser-side cart/search tools"
|
|
15618
|
+
],
|
|
15619
|
+
traits: {
|
|
15620
|
+
streaming: "required",
|
|
15621
|
+
messagesMutable: false,
|
|
15622
|
+
deliveryModel: "real_time",
|
|
15623
|
+
mediaSupport: "images",
|
|
15624
|
+
textMediaDelivery: "inline_html",
|
|
15625
|
+
interactiveUI: "generative",
|
|
15626
|
+
inboundMediaSupport: true,
|
|
15627
|
+
consumerType: "human",
|
|
15628
|
+
approvalAnswerable: true,
|
|
15629
|
+
reasoningVisibility: "pass_through",
|
|
15630
|
+
markdownDialect: "mdx",
|
|
15631
|
+
threadModel: "flat",
|
|
15632
|
+
senderIdentity: "anonymous",
|
|
15633
|
+
maxResponseLength: null,
|
|
15634
|
+
executionHint: null
|
|
15635
|
+
},
|
|
15636
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15637
|
+
},
|
|
15638
|
+
api: {
|
|
15639
|
+
description: "Programmatic HTTP endpoints for backend integrations",
|
|
15640
|
+
useCases: ["backend automation", "third-party integrations", "data pipelines"],
|
|
15641
|
+
examples: ["REST API for data processing", "Webhook consumer", "Integration endpoint"],
|
|
15642
|
+
traits: {
|
|
15643
|
+
streaming: "optional",
|
|
15644
|
+
messagesMutable: false,
|
|
15645
|
+
deliveryModel: "sync",
|
|
15646
|
+
mediaSupport: "none",
|
|
15647
|
+
textMediaDelivery: "none",
|
|
15648
|
+
interactiveUI: "none",
|
|
15649
|
+
inboundMediaSupport: true,
|
|
15650
|
+
consumerType: "machine",
|
|
15651
|
+
approvalAnswerable: true,
|
|
15652
|
+
reasoningVisibility: "pass_through",
|
|
15653
|
+
markdownDialect: "none",
|
|
15654
|
+
threadModel: "flat",
|
|
15655
|
+
senderIdentity: "authenticated",
|
|
15656
|
+
maxResponseLength: null,
|
|
15657
|
+
executionHint: null
|
|
15658
|
+
},
|
|
15659
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15660
|
+
},
|
|
15661
|
+
mcp: {
|
|
15662
|
+
description: "AI assistant integration (Cursor, Claude Code, etc.)",
|
|
15663
|
+
useCases: ["developer tools", "AI-powered workflows", "code assistants"],
|
|
15664
|
+
examples: ["Code review tool for Cursor", "Documentation assistant", "Database query tool"],
|
|
15665
|
+
traits: {
|
|
15666
|
+
streaming: "optional",
|
|
15667
|
+
messagesMutable: false,
|
|
15668
|
+
deliveryModel: "sync",
|
|
15669
|
+
mediaSupport: "none",
|
|
15670
|
+
textMediaDelivery: "none",
|
|
15671
|
+
interactiveUI: "none",
|
|
15672
|
+
inboundMediaSupport: false,
|
|
15673
|
+
consumerType: "agent",
|
|
15674
|
+
approvalAnswerable: true,
|
|
15675
|
+
reasoningVisibility: "pass_through",
|
|
15676
|
+
markdownDialect: "none",
|
|
15677
|
+
threadModel: "flat",
|
|
15678
|
+
senderIdentity: "authenticated",
|
|
15679
|
+
maxResponseLength: null,
|
|
15680
|
+
executionHint: null
|
|
15681
|
+
},
|
|
15682
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15683
|
+
},
|
|
15684
|
+
email: {
|
|
15685
|
+
description: "Email-triggered processing and automated responses",
|
|
15686
|
+
useCases: ["email automation", "support ticket creation", "document processing"],
|
|
15687
|
+
examples: ["Auto-reply support agent", "Invoice processor", "Email-to-task converter"],
|
|
15688
|
+
traits: {
|
|
15689
|
+
streaming: "none",
|
|
15690
|
+
messagesMutable: false,
|
|
15691
|
+
deliveryModel: "async",
|
|
15692
|
+
// Email delivers no native attachments — the adapter ignores
|
|
15693
|
+
// OutboundMessage.media; images only render via inline HTML <img>.
|
|
15694
|
+
mediaSupport: "images",
|
|
15695
|
+
textMediaDelivery: "inline_html",
|
|
15696
|
+
interactiveUI: "none",
|
|
15697
|
+
inboundMediaSupport: true,
|
|
15698
|
+
consumerType: "human",
|
|
15699
|
+
approvalAnswerable: false,
|
|
15700
|
+
reasoningVisibility: "always_strip",
|
|
15701
|
+
markdownDialect: "html",
|
|
15702
|
+
threadModel: "reply_chain",
|
|
15703
|
+
senderIdentity: "verified",
|
|
15704
|
+
maxResponseLength: null,
|
|
15705
|
+
executionHint: "You are responding via email. Write in a professional, organized tone. Use clear paragraphs. Avoid bullet-point overload \u2014 prefer flowing prose where appropriate. Do not include reasoning traces, tool call narration, or internal process details in your response."
|
|
15706
|
+
},
|
|
15707
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15708
|
+
},
|
|
15709
|
+
webhook: {
|
|
15710
|
+
description: "Event-driven processing from third-party services. Accepts JSON and form-encoded (application/x-www-form-urlencoded) payloads. Payloads are never treated as a Runtype envelope; the full parsed body is sent under `payload` in the execution message. Parsed top-level fields are also spread into flow inputs so `{{field}}` template variables resolve in prompt and api-call step bodies; optional `behavior.inputMapping` renames or deep-picks fields by dot path. Optional `behavior.response` returns a static HTTP body (e.g. empty TwiML) for providers that require specific ACK shapes \u2014 when set, the flow fires async.",
|
|
15711
|
+
useCases: ["event processing", "data sync", "notifications"],
|
|
15712
|
+
examples: [
|
|
15713
|
+
"Stripe payment handler",
|
|
15714
|
+
"GitHub event processor",
|
|
15715
|
+
"Twilio inbound SMS (empty TwiML ACK, no reply)",
|
|
15716
|
+
"Shopify order webhook (204 ACK)"
|
|
15717
|
+
],
|
|
15718
|
+
traits: {
|
|
15719
|
+
streaming: "none",
|
|
15720
|
+
messagesMutable: false,
|
|
15721
|
+
deliveryModel: "sync",
|
|
15722
|
+
mediaSupport: "none",
|
|
15723
|
+
textMediaDelivery: "none",
|
|
15724
|
+
interactiveUI: "none",
|
|
15725
|
+
inboundMediaSupport: false,
|
|
15726
|
+
consumerType: "machine",
|
|
15727
|
+
approvalAnswerable: false,
|
|
15728
|
+
reasoningVisibility: "pass_through",
|
|
15729
|
+
markdownDialect: "none",
|
|
15730
|
+
threadModel: "flat",
|
|
15731
|
+
senderIdentity: "authenticated",
|
|
15732
|
+
maxResponseLength: null,
|
|
15733
|
+
executionHint: null
|
|
15734
|
+
},
|
|
15735
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15736
|
+
},
|
|
15737
|
+
// @snake-case-ok: matches FPO schema surface type enum
|
|
15738
|
+
mcp_code: {
|
|
15739
|
+
description: "Code Mode MCP server for programmatic AI agent access",
|
|
15740
|
+
useCases: ["advanced agent integrations", "custom automation scripts"],
|
|
15741
|
+
examples: ["Programmatic flow executor", "Batch processing agent"],
|
|
15742
|
+
traits: {
|
|
15743
|
+
streaming: "optional",
|
|
15744
|
+
messagesMutable: false,
|
|
15745
|
+
deliveryModel: "sync",
|
|
15746
|
+
mediaSupport: "none",
|
|
15747
|
+
textMediaDelivery: "none",
|
|
15748
|
+
interactiveUI: "none",
|
|
15749
|
+
inboundMediaSupport: false,
|
|
15750
|
+
consumerType: "agent",
|
|
15751
|
+
approvalAnswerable: true,
|
|
15752
|
+
reasoningVisibility: "pass_through",
|
|
15753
|
+
markdownDialect: "none",
|
|
15754
|
+
threadModel: "flat",
|
|
15755
|
+
senderIdentity: "authenticated",
|
|
15756
|
+
maxResponseLength: null,
|
|
15757
|
+
executionHint: null
|
|
15758
|
+
},
|
|
15759
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15760
|
+
},
|
|
15761
|
+
slack: {
|
|
15762
|
+
description: "Slack bot integration for team collaboration",
|
|
15763
|
+
useCases: ["team notifications", "internal tools", "workflow automation"],
|
|
15764
|
+
examples: ["Support bot in Slack", "Daily standup summarizer", "Alert channel manager"],
|
|
15765
|
+
traits: {
|
|
15766
|
+
streaming: "optional",
|
|
15767
|
+
messagesMutable: true,
|
|
15768
|
+
deliveryModel: "real_time",
|
|
15769
|
+
mediaSupport: "rich",
|
|
15770
|
+
textMediaDelivery: "link",
|
|
15771
|
+
interactiveUI: "forms",
|
|
15772
|
+
inboundMediaSupport: true,
|
|
15773
|
+
consumerType: "human",
|
|
15774
|
+
approvalAnswerable: false,
|
|
15775
|
+
reasoningVisibility: "always_strip",
|
|
15776
|
+
markdownDialect: "mrkdwn",
|
|
15777
|
+
threadModel: "threaded",
|
|
15778
|
+
senderIdentity: "authenticated",
|
|
15779
|
+
maxResponseLength: 4e3,
|
|
15780
|
+
executionHint: "You are responding in Slack. Be concise and direct \u2014 Slack messages should be scannable. Avoid lengthy prose. Do not include reasoning traces or tool call narration."
|
|
15781
|
+
},
|
|
15782
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15783
|
+
},
|
|
15784
|
+
schedule: {
|
|
15785
|
+
description: "Optional management/presentation surface for scheduled jobs; executable cron or one-time triggers live in top-level schedules[] or Schedule records",
|
|
15786
|
+
useCases: [
|
|
15787
|
+
"schedule management UI",
|
|
15788
|
+
"scheduled report overview",
|
|
15789
|
+
"periodic monitoring dashboard"
|
|
15790
|
+
],
|
|
15791
|
+
examples: [
|
|
15792
|
+
"Daily report schedule manager",
|
|
15793
|
+
"Weekly data sync overview",
|
|
15794
|
+
"Hourly health check monitor"
|
|
15795
|
+
],
|
|
15796
|
+
traits: {
|
|
15797
|
+
streaming: "none",
|
|
15798
|
+
messagesMutable: false,
|
|
15799
|
+
deliveryModel: "async",
|
|
15800
|
+
mediaSupport: "none",
|
|
15801
|
+
textMediaDelivery: "none",
|
|
15802
|
+
interactiveUI: "none",
|
|
15803
|
+
inboundMediaSupport: false,
|
|
15804
|
+
consumerType: "machine",
|
|
15805
|
+
approvalAnswerable: false,
|
|
15806
|
+
reasoningVisibility: "always_strip",
|
|
15807
|
+
markdownDialect: "none",
|
|
15808
|
+
threadModel: "flat",
|
|
15809
|
+
senderIdentity: "authenticated",
|
|
15810
|
+
maxResponseLength: null,
|
|
15811
|
+
executionHint: null
|
|
15812
|
+
},
|
|
15813
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
15814
|
+
},
|
|
15815
|
+
sms: {
|
|
15816
|
+
description: "SMS messaging for mobile-first interactions",
|
|
15817
|
+
useCases: ["SMS support", "appointment reminders", "two-way texting"],
|
|
15818
|
+
examples: ["SMS support agent", "Appointment reminder bot", "Survey collector"],
|
|
15819
|
+
traits: {
|
|
15820
|
+
streaming: "none",
|
|
15821
|
+
messagesMutable: false,
|
|
15822
|
+
deliveryModel: "async",
|
|
15823
|
+
mediaSupport: "none",
|
|
15824
|
+
textMediaDelivery: "none",
|
|
15825
|
+
interactiveUI: "none",
|
|
15826
|
+
inboundMediaSupport: false,
|
|
15827
|
+
consumerType: "human",
|
|
15828
|
+
approvalAnswerable: false,
|
|
15829
|
+
reasoningVisibility: "always_strip",
|
|
15830
|
+
markdownDialect: "none",
|
|
15831
|
+
threadModel: "flat",
|
|
15832
|
+
senderIdentity: "verified",
|
|
15833
|
+
maxResponseLength: 160,
|
|
15834
|
+
executionHint: "You are responding via SMS. Be extremely brief \u2014 ideally one or two short sentences. Plain text only, no markdown, no lists. Get straight to the point. Do not include reasoning traces or process narration."
|
|
15835
|
+
}
|
|
15836
|
+
},
|
|
15837
|
+
imessage: {
|
|
15838
|
+
description: "iMessage messaging via Sendblue for Apple ecosystem interactions",
|
|
15839
|
+
useCases: ["customer support", "appointment reminders", "rich messaging", "two-way texting"],
|
|
15840
|
+
examples: ["iMessage support agent", "Appointment reminder bot", "Rich media messaging bot"],
|
|
15841
|
+
traits: {
|
|
15842
|
+
streaming: "none",
|
|
15843
|
+
messagesMutable: false,
|
|
15844
|
+
deliveryModel: "async",
|
|
15845
|
+
mediaSupport: "images",
|
|
15846
|
+
textMediaDelivery: "link",
|
|
15847
|
+
interactiveUI: "none",
|
|
15848
|
+
inboundMediaSupport: true,
|
|
15849
|
+
consumerType: "human",
|
|
15850
|
+
approvalAnswerable: false,
|
|
15851
|
+
reasoningVisibility: "always_strip",
|
|
15852
|
+
markdownDialect: "none",
|
|
15853
|
+
threadModel: "flat",
|
|
15854
|
+
senderIdentity: "verified",
|
|
15855
|
+
// ~4 short bubbles' worth of headroom. The adapter splits on paragraph
|
|
15856
|
+
// boundaries before sending; this cap signals to the model that long is
|
|
15857
|
+
// wrong without imposing a hard truncate that would clip mid-thought.
|
|
15858
|
+
maxResponseLength: 1200,
|
|
15859
|
+
executionHint: [
|
|
15860
|
+
"You are responding via iMessage. Hard rules:",
|
|
15861
|
+
"- Plain text only. No markdown \u2014 no **bold**, no # headings, no - bullets, no `code`, no > quotes, no fenced code blocks.",
|
|
15862
|
+
"- 1\u20133 sentences per reply, under 300 characters total when possible.",
|
|
15863
|
+
"- Texting tone: conversational, lowercase is fine, contractions welcome.",
|
|
15864
|
+
'- No greetings ("Hi!", "Hey there!") and no closings ("Let me know!", "Hope this helps!").',
|
|
15865
|
+
`- No AI disclaimers ("As an AI...", "I cannot...", "I'd be happy to help").`,
|
|
15866
|
+
"- One emoji max, only when it fits naturally.",
|
|
15867
|
+
"- For multi-part replies, separate logical chunks with a blank line \u2014 each chunk becomes its own bubble.",
|
|
15868
|
+
"- Do not include reasoning traces or process narration."
|
|
15869
|
+
].join("\n")
|
|
15870
|
+
}
|
|
15871
|
+
},
|
|
15872
|
+
discord: {
|
|
15873
|
+
description: "Discord bot for community engagement",
|
|
15874
|
+
useCases: ["community support", "moderation", "server management"],
|
|
15875
|
+
examples: ["Community FAQ bot", "Moderation assistant", "Welcome bot"],
|
|
15876
|
+
traits: {
|
|
15877
|
+
streaming: "optional",
|
|
15878
|
+
messagesMutable: true,
|
|
15879
|
+
deliveryModel: "real_time",
|
|
15880
|
+
mediaSupport: "rich",
|
|
15881
|
+
textMediaDelivery: "link",
|
|
15882
|
+
interactiveUI: "buttons",
|
|
15883
|
+
inboundMediaSupport: true,
|
|
15884
|
+
consumerType: "human",
|
|
15885
|
+
approvalAnswerable: false,
|
|
15886
|
+
reasoningVisibility: "always_strip",
|
|
15887
|
+
markdownDialect: "markdown",
|
|
15888
|
+
threadModel: "threaded",
|
|
15889
|
+
senderIdentity: "authenticated",
|
|
15890
|
+
maxResponseLength: null,
|
|
15891
|
+
executionHint: "You are responding in a Discord server. Keep your tone friendly and community-appropriate. Markdown formatting is supported. Be concise. Do not include reasoning traces or tool call narration."
|
|
15892
|
+
}
|
|
15893
|
+
},
|
|
15894
|
+
whatsapp: {
|
|
15895
|
+
description: "WhatsApp Business integration for customer communication",
|
|
15896
|
+
useCases: ["customer support", "order updates", "appointment scheduling"],
|
|
15897
|
+
examples: ["WhatsApp support bot", "Order tracking assistant", "Booking agent"],
|
|
15898
|
+
traits: {
|
|
15899
|
+
streaming: "none",
|
|
15900
|
+
messagesMutable: false,
|
|
15901
|
+
deliveryModel: "async",
|
|
15902
|
+
mediaSupport: "rich",
|
|
15903
|
+
textMediaDelivery: "link",
|
|
15904
|
+
interactiveUI: "buttons",
|
|
15905
|
+
inboundMediaSupport: true,
|
|
15906
|
+
consumerType: "human",
|
|
15907
|
+
approvalAnswerable: false,
|
|
15908
|
+
reasoningVisibility: "always_strip",
|
|
15909
|
+
markdownDialect: "none",
|
|
15910
|
+
threadModel: "flat",
|
|
15911
|
+
senderIdentity: "verified",
|
|
15912
|
+
maxResponseLength: 1024,
|
|
15913
|
+
executionHint: "You are responding via WhatsApp. Keep responses concise and conversational \u2014 WhatsApp is a messaging app, not email. Plain text works best. Avoid lengthy explanations. Do not include reasoning traces or process narration."
|
|
15914
|
+
}
|
|
15915
|
+
},
|
|
15916
|
+
telegram: {
|
|
15917
|
+
description: "Telegram bot for messaging-based interactions",
|
|
15918
|
+
useCases: ["customer support", "notifications", "group management"],
|
|
15919
|
+
examples: ["Telegram support bot", "News alert bot", "Group admin assistant"],
|
|
15920
|
+
traits: {
|
|
15921
|
+
streaming: "none",
|
|
15922
|
+
messagesMutable: true,
|
|
15923
|
+
deliveryModel: "real_time",
|
|
15924
|
+
mediaSupport: "rich",
|
|
15925
|
+
textMediaDelivery: "native",
|
|
15926
|
+
interactiveUI: "buttons",
|
|
15927
|
+
inboundMediaSupport: true,
|
|
15928
|
+
consumerType: "human",
|
|
15929
|
+
approvalAnswerable: false,
|
|
15930
|
+
reasoningVisibility: "always_strip",
|
|
15931
|
+
markdownDialect: "html",
|
|
15932
|
+
threadModel: "flat",
|
|
15933
|
+
senderIdentity: "authenticated",
|
|
15934
|
+
maxResponseLength: 4096,
|
|
15935
|
+
executionHint: "You are responding via Telegram. Be clear and concise. Keep messages focused and avoid unnecessary verbosity. Do not include reasoning traces or tool call narration."
|
|
15936
|
+
}
|
|
15937
|
+
},
|
|
15938
|
+
messaging: {
|
|
15939
|
+
description: "Generic messaging surface for multi-channel delivery",
|
|
15940
|
+
useCases: ["multi-channel support", "unified messaging", "channel-agnostic bots"],
|
|
15941
|
+
examples: ["Multi-channel support bot", "Unified messaging gateway", "Channel router"],
|
|
15942
|
+
traits: {
|
|
15943
|
+
streaming: "optional",
|
|
15944
|
+
messagesMutable: false,
|
|
15945
|
+
deliveryModel: "real_time",
|
|
15946
|
+
mediaSupport: "images",
|
|
15947
|
+
textMediaDelivery: "link",
|
|
15948
|
+
interactiveUI: "none",
|
|
15949
|
+
inboundMediaSupport: false,
|
|
15950
|
+
consumerType: "human",
|
|
15951
|
+
approvalAnswerable: false,
|
|
15952
|
+
reasoningVisibility: "always_strip",
|
|
15953
|
+
markdownDialect: "none",
|
|
15954
|
+
threadModel: "flat",
|
|
15955
|
+
senderIdentity: "anonymous",
|
|
15956
|
+
maxResponseLength: null,
|
|
15957
|
+
executionHint: "You are responding via a messaging surface. Be clear and concise. Plain text is safest \u2014 avoid complex formatting. Do not include reasoning traces or tool call narration in your response."
|
|
15958
|
+
}
|
|
15959
|
+
},
|
|
15960
|
+
a2a: {
|
|
15961
|
+
description: "Agent-to-agent communication protocol",
|
|
15962
|
+
useCases: ["multi-agent workflows", "agent orchestration", "distributed processing"],
|
|
15963
|
+
examples: ["Agent coordinator", "Distributed pipeline", "Multi-agent research system"],
|
|
15964
|
+
traits: {
|
|
15965
|
+
streaming: "optional",
|
|
15966
|
+
messagesMutable: false,
|
|
15967
|
+
deliveryModel: "sync",
|
|
15968
|
+
mediaSupport: "none",
|
|
15969
|
+
textMediaDelivery: "none",
|
|
15970
|
+
interactiveUI: "none",
|
|
15971
|
+
inboundMediaSupport: false,
|
|
15972
|
+
consumerType: "agent",
|
|
15973
|
+
approvalAnswerable: true,
|
|
15974
|
+
reasoningVisibility: "pass_through",
|
|
15975
|
+
markdownDialect: "none",
|
|
15976
|
+
threadModel: "flat",
|
|
15977
|
+
senderIdentity: "authenticated",
|
|
15978
|
+
maxResponseLength: null,
|
|
15979
|
+
executionHint: null
|
|
15980
|
+
}
|
|
15981
|
+
},
|
|
15982
|
+
// @snake-case-ok: surface type identifier
|
|
15983
|
+
chrome_extension: {
|
|
15984
|
+
description: "Downloadable Manifest V3 Chrome extension embedding the agent in the browser side panel, with packaged browser tools (read page, fill forms, navigate tabs) executed locally via the WebMCP client-tool loop.",
|
|
15985
|
+
useCases: [
|
|
15986
|
+
"browser copilots",
|
|
15987
|
+
"page-aware assistants",
|
|
15988
|
+
"form filling and data extraction",
|
|
15989
|
+
"internal browser tooling"
|
|
15990
|
+
],
|
|
15991
|
+
examples: [
|
|
15992
|
+
"CRM sidekick that reads and updates records on the page",
|
|
15993
|
+
"Research assistant that summarizes and compares open tabs",
|
|
15994
|
+
"Support agent that drafts replies inside a ticketing UI"
|
|
15995
|
+
],
|
|
15996
|
+
traits: {
|
|
15997
|
+
streaming: "required",
|
|
15998
|
+
messagesMutable: false,
|
|
15999
|
+
deliveryModel: "real_time",
|
|
16000
|
+
mediaSupport: "images",
|
|
16001
|
+
textMediaDelivery: "inline_html",
|
|
16002
|
+
interactiveUI: "generative",
|
|
16003
|
+
inboundMediaSupport: true,
|
|
16004
|
+
consumerType: "human",
|
|
16005
|
+
approvalAnswerable: true,
|
|
16006
|
+
reasoningVisibility: "pass_through",
|
|
16007
|
+
markdownDialect: "mdx",
|
|
16008
|
+
threadModel: "flat",
|
|
16009
|
+
senderIdentity: "anonymous",
|
|
16010
|
+
maxResponseLength: null,
|
|
16011
|
+
executionHint: "You are running inside a Chrome extension side panel. You may have browser tools (chrome:*) to read the current page, interact with forms, and manage tabs \u2014 use them when the user asks about or wants to act on the page they are viewing. Mutating actions (clicking, filling, navigating) ask the user for confirmation before running."
|
|
16012
|
+
},
|
|
16013
|
+
behaviorTypeRef: "runtype://types/surface-configs"
|
|
16014
|
+
},
|
|
16015
|
+
"ag-ui": {
|
|
16016
|
+
description: "AG-UI protocol endpoint (agent-to-user event stream over SSE)",
|
|
16017
|
+
useCases: ["custom agent frontends", "CopilotKit / AG-UI clients", "embedded agent UIs"],
|
|
16018
|
+
examples: ["CopilotKit app", "Custom React agent UI", "AG-UI dojo client"],
|
|
16019
|
+
// Staging-test phase (`enable-ag-ui-surface` flag): keep the type out of
|
|
16020
|
+
// agent-facing catalogs until GA. Runtime trait lookups still resolve.
|
|
16021
|
+
hiddenFromCatalog: true,
|
|
16022
|
+
traits: {
|
|
16023
|
+
streaming: "required",
|
|
16024
|
+
messagesMutable: false,
|
|
16025
|
+
deliveryModel: "real_time",
|
|
16026
|
+
mediaSupport: "none",
|
|
16027
|
+
textMediaDelivery: "none",
|
|
16028
|
+
interactiveUI: "none",
|
|
16029
|
+
inboundMediaSupport: false,
|
|
16030
|
+
consumerType: "machine",
|
|
16031
|
+
approvalAnswerable: true,
|
|
16032
|
+
reasoningVisibility: "pass_through",
|
|
16033
|
+
markdownDialect: "markdown",
|
|
16034
|
+
threadModel: "flat",
|
|
16035
|
+
senderIdentity: "authenticated",
|
|
16036
|
+
maxResponseLength: null,
|
|
16037
|
+
executionHint: null
|
|
16038
|
+
}
|
|
16039
|
+
}
|
|
16040
|
+
};
|
|
16041
|
+
var EMAIL_HTML_CAPABILITY_HINT = [
|
|
16042
|
+
"## Channel capabilities",
|
|
16043
|
+
'- Formatting: author the reply as an HTML email body. Write well-formed HTML and put all styling in inline `style="..."` attributes (no `<style>` blocks, no external CSS). Use semantic tags freely: `<p>`, `<h1>`-`<h3>`, `<ul>`/`<ol>`/`<li>`, `<table>`, `<a>`, `<strong>`/`<em>`, `<blockquote>`, `<img>`. Do NOT emit `<script>`, `<iframe>`, `<head>`, `<body>`, or `<html>` wrappers: Runtype wraps your body in the email document and strips any active or unsafe content before sending.',
|
|
16044
|
+
'- Images: embed an image with `<img src="https://..." alt="...">` and it renders inline in the email. (Some clients ask the recipient to load remote images.)'
|
|
16045
|
+
].join("\n");
|
|
15603
16046
|
var ORTHOGONAL_PLATFORM_TOOLS = [
|
|
15604
16047
|
{
|
|
15605
16048
|
"id": "orthogonal:agentmail:create_draft",
|
|
@@ -32594,451 +33037,8 @@ var GRANOLA_INTEGRATION = {
|
|
|
32594
33037
|
}
|
|
32595
33038
|
]
|
|
32596
33039
|
};
|
|
32597
|
-
var SURFACE_TYPE_METADATA = {
|
|
32598
|
-
chat: {
|
|
32599
|
-
description: "Website widget, support bots, conversational interfaces. Uses Persona and can optionally accept WebMCP page tools discovered from document.modelContext.",
|
|
32600
|
-
useCases: [
|
|
32601
|
-
"customer support",
|
|
32602
|
-
"onboarding",
|
|
32603
|
-
"internal tools",
|
|
32604
|
-
"FAQ bots",
|
|
32605
|
-
"page-aware assistants"
|
|
32606
|
-
],
|
|
32607
|
-
examples: [
|
|
32608
|
-
"Support chatbot",
|
|
32609
|
-
"Sales assistant widget",
|
|
32610
|
-
"Internal help desk",
|
|
32611
|
-
"Storefront assistant with browser-side cart/search tools"
|
|
32612
|
-
],
|
|
32613
|
-
traits: {
|
|
32614
|
-
streaming: "required",
|
|
32615
|
-
messagesMutable: false,
|
|
32616
|
-
deliveryModel: "real_time",
|
|
32617
|
-
mediaSupport: "images",
|
|
32618
|
-
textMediaDelivery: "inline_html",
|
|
32619
|
-
interactiveUI: "generative",
|
|
32620
|
-
inboundMediaSupport: true,
|
|
32621
|
-
consumerType: "human",
|
|
32622
|
-
approvalAnswerable: true,
|
|
32623
|
-
reasoningVisibility: "pass_through",
|
|
32624
|
-
markdownDialect: "mdx",
|
|
32625
|
-
threadModel: "flat",
|
|
32626
|
-
senderIdentity: "anonymous",
|
|
32627
|
-
maxResponseLength: null,
|
|
32628
|
-
executionHint: null
|
|
32629
|
-
},
|
|
32630
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32631
|
-
},
|
|
32632
|
-
api: {
|
|
32633
|
-
description: "Programmatic HTTP endpoints for backend integrations",
|
|
32634
|
-
useCases: ["backend automation", "third-party integrations", "data pipelines"],
|
|
32635
|
-
examples: ["REST API for data processing", "Webhook consumer", "Integration endpoint"],
|
|
32636
|
-
traits: {
|
|
32637
|
-
streaming: "optional",
|
|
32638
|
-
messagesMutable: false,
|
|
32639
|
-
deliveryModel: "sync",
|
|
32640
|
-
mediaSupport: "none",
|
|
32641
|
-
textMediaDelivery: "none",
|
|
32642
|
-
interactiveUI: "none",
|
|
32643
|
-
inboundMediaSupport: true,
|
|
32644
|
-
consumerType: "machine",
|
|
32645
|
-
approvalAnswerable: true,
|
|
32646
|
-
reasoningVisibility: "pass_through",
|
|
32647
|
-
markdownDialect: "none",
|
|
32648
|
-
threadModel: "flat",
|
|
32649
|
-
senderIdentity: "authenticated",
|
|
32650
|
-
maxResponseLength: null,
|
|
32651
|
-
executionHint: null
|
|
32652
|
-
},
|
|
32653
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32654
|
-
},
|
|
32655
|
-
mcp: {
|
|
32656
|
-
description: "AI assistant integration (Cursor, Claude Code, etc.)",
|
|
32657
|
-
useCases: ["developer tools", "AI-powered workflows", "code assistants"],
|
|
32658
|
-
examples: ["Code review tool for Cursor", "Documentation assistant", "Database query tool"],
|
|
32659
|
-
traits: {
|
|
32660
|
-
streaming: "optional",
|
|
32661
|
-
messagesMutable: false,
|
|
32662
|
-
deliveryModel: "sync",
|
|
32663
|
-
mediaSupport: "none",
|
|
32664
|
-
textMediaDelivery: "none",
|
|
32665
|
-
interactiveUI: "none",
|
|
32666
|
-
inboundMediaSupport: false,
|
|
32667
|
-
consumerType: "agent",
|
|
32668
|
-
approvalAnswerable: true,
|
|
32669
|
-
reasoningVisibility: "pass_through",
|
|
32670
|
-
markdownDialect: "none",
|
|
32671
|
-
threadModel: "flat",
|
|
32672
|
-
senderIdentity: "authenticated",
|
|
32673
|
-
maxResponseLength: null,
|
|
32674
|
-
executionHint: null
|
|
32675
|
-
},
|
|
32676
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32677
|
-
},
|
|
32678
|
-
email: {
|
|
32679
|
-
description: "Email-triggered processing and automated responses",
|
|
32680
|
-
useCases: ["email automation", "support ticket creation", "document processing"],
|
|
32681
|
-
examples: ["Auto-reply support agent", "Invoice processor", "Email-to-task converter"],
|
|
32682
|
-
traits: {
|
|
32683
|
-
streaming: "none",
|
|
32684
|
-
messagesMutable: false,
|
|
32685
|
-
deliveryModel: "async",
|
|
32686
|
-
// Email delivers no native attachments — the adapter ignores
|
|
32687
|
-
// OutboundMessage.media; images only render via inline HTML <img>.
|
|
32688
|
-
mediaSupport: "images",
|
|
32689
|
-
textMediaDelivery: "inline_html",
|
|
32690
|
-
interactiveUI: "none",
|
|
32691
|
-
inboundMediaSupport: true,
|
|
32692
|
-
consumerType: "human",
|
|
32693
|
-
approvalAnswerable: false,
|
|
32694
|
-
reasoningVisibility: "always_strip",
|
|
32695
|
-
markdownDialect: "html",
|
|
32696
|
-
threadModel: "reply_chain",
|
|
32697
|
-
senderIdentity: "verified",
|
|
32698
|
-
maxResponseLength: null,
|
|
32699
|
-
executionHint: "You are responding via email. Write in a professional, organized tone. Use clear paragraphs. Avoid bullet-point overload \u2014 prefer flowing prose where appropriate. Do not include reasoning traces, tool call narration, or internal process details in your response."
|
|
32700
|
-
},
|
|
32701
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32702
|
-
},
|
|
32703
|
-
webhook: {
|
|
32704
|
-
description: "Event-driven processing from third-party services. Accepts JSON and form-encoded (application/x-www-form-urlencoded) payloads. Payloads are never treated as a Runtype envelope; the full parsed body is sent under `payload` in the execution message. Parsed top-level fields are also spread into flow inputs so `{{field}}` template variables resolve in prompt and api-call step bodies; optional `behavior.inputMapping` renames or deep-picks fields by dot path. Optional `behavior.response` returns a static HTTP body (e.g. empty TwiML) for providers that require specific ACK shapes \u2014 when set, the flow fires async.",
|
|
32705
|
-
useCases: ["event processing", "data sync", "notifications"],
|
|
32706
|
-
examples: [
|
|
32707
|
-
"Stripe payment handler",
|
|
32708
|
-
"GitHub event processor",
|
|
32709
|
-
"Twilio inbound SMS (empty TwiML ACK, no reply)",
|
|
32710
|
-
"Shopify order webhook (204 ACK)"
|
|
32711
|
-
],
|
|
32712
|
-
traits: {
|
|
32713
|
-
streaming: "none",
|
|
32714
|
-
messagesMutable: false,
|
|
32715
|
-
deliveryModel: "sync",
|
|
32716
|
-
mediaSupport: "none",
|
|
32717
|
-
textMediaDelivery: "none",
|
|
32718
|
-
interactiveUI: "none",
|
|
32719
|
-
inboundMediaSupport: false,
|
|
32720
|
-
consumerType: "machine",
|
|
32721
|
-
approvalAnswerable: false,
|
|
32722
|
-
reasoningVisibility: "pass_through",
|
|
32723
|
-
markdownDialect: "none",
|
|
32724
|
-
threadModel: "flat",
|
|
32725
|
-
senderIdentity: "authenticated",
|
|
32726
|
-
maxResponseLength: null,
|
|
32727
|
-
executionHint: null
|
|
32728
|
-
},
|
|
32729
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32730
|
-
},
|
|
32731
|
-
// @snake-case-ok: matches FPO schema surface type enum
|
|
32732
|
-
mcp_code: {
|
|
32733
|
-
description: "Code Mode MCP server for programmatic AI agent access",
|
|
32734
|
-
useCases: ["advanced agent integrations", "custom automation scripts"],
|
|
32735
|
-
examples: ["Programmatic flow executor", "Batch processing agent"],
|
|
32736
|
-
traits: {
|
|
32737
|
-
streaming: "optional",
|
|
32738
|
-
messagesMutable: false,
|
|
32739
|
-
deliveryModel: "sync",
|
|
32740
|
-
mediaSupport: "none",
|
|
32741
|
-
textMediaDelivery: "none",
|
|
32742
|
-
interactiveUI: "none",
|
|
32743
|
-
inboundMediaSupport: false,
|
|
32744
|
-
consumerType: "agent",
|
|
32745
|
-
approvalAnswerable: true,
|
|
32746
|
-
reasoningVisibility: "pass_through",
|
|
32747
|
-
markdownDialect: "none",
|
|
32748
|
-
threadModel: "flat",
|
|
32749
|
-
senderIdentity: "authenticated",
|
|
32750
|
-
maxResponseLength: null,
|
|
32751
|
-
executionHint: null
|
|
32752
|
-
},
|
|
32753
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32754
|
-
},
|
|
32755
|
-
slack: {
|
|
32756
|
-
description: "Slack bot integration for team collaboration",
|
|
32757
|
-
useCases: ["team notifications", "internal tools", "workflow automation"],
|
|
32758
|
-
examples: ["Support bot in Slack", "Daily standup summarizer", "Alert channel manager"],
|
|
32759
|
-
traits: {
|
|
32760
|
-
streaming: "optional",
|
|
32761
|
-
messagesMutable: true,
|
|
32762
|
-
deliveryModel: "real_time",
|
|
32763
|
-
mediaSupport: "rich",
|
|
32764
|
-
textMediaDelivery: "link",
|
|
32765
|
-
interactiveUI: "forms",
|
|
32766
|
-
inboundMediaSupport: true,
|
|
32767
|
-
consumerType: "human",
|
|
32768
|
-
approvalAnswerable: false,
|
|
32769
|
-
reasoningVisibility: "always_strip",
|
|
32770
|
-
markdownDialect: "mrkdwn",
|
|
32771
|
-
threadModel: "threaded",
|
|
32772
|
-
senderIdentity: "authenticated",
|
|
32773
|
-
maxResponseLength: 4e3,
|
|
32774
|
-
executionHint: "You are responding in Slack. Be concise and direct \u2014 Slack messages should be scannable. Avoid lengthy prose. Do not include reasoning traces or tool call narration."
|
|
32775
|
-
},
|
|
32776
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32777
|
-
},
|
|
32778
|
-
schedule: {
|
|
32779
|
-
description: "Optional management/presentation surface for scheduled jobs; executable cron or one-time triggers live in top-level schedules[] or Schedule records",
|
|
32780
|
-
useCases: [
|
|
32781
|
-
"schedule management UI",
|
|
32782
|
-
"scheduled report overview",
|
|
32783
|
-
"periodic monitoring dashboard"
|
|
32784
|
-
],
|
|
32785
|
-
examples: [
|
|
32786
|
-
"Daily report schedule manager",
|
|
32787
|
-
"Weekly data sync overview",
|
|
32788
|
-
"Hourly health check monitor"
|
|
32789
|
-
],
|
|
32790
|
-
traits: {
|
|
32791
|
-
streaming: "none",
|
|
32792
|
-
messagesMutable: false,
|
|
32793
|
-
deliveryModel: "async",
|
|
32794
|
-
mediaSupport: "none",
|
|
32795
|
-
textMediaDelivery: "none",
|
|
32796
|
-
interactiveUI: "none",
|
|
32797
|
-
inboundMediaSupport: false,
|
|
32798
|
-
consumerType: "machine",
|
|
32799
|
-
approvalAnswerable: false,
|
|
32800
|
-
reasoningVisibility: "always_strip",
|
|
32801
|
-
markdownDialect: "none",
|
|
32802
|
-
threadModel: "flat",
|
|
32803
|
-
senderIdentity: "authenticated",
|
|
32804
|
-
maxResponseLength: null,
|
|
32805
|
-
executionHint: null
|
|
32806
|
-
},
|
|
32807
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
32808
|
-
},
|
|
32809
|
-
sms: {
|
|
32810
|
-
description: "SMS messaging for mobile-first interactions",
|
|
32811
|
-
useCases: ["SMS support", "appointment reminders", "two-way texting"],
|
|
32812
|
-
examples: ["SMS support agent", "Appointment reminder bot", "Survey collector"],
|
|
32813
|
-
traits: {
|
|
32814
|
-
streaming: "none",
|
|
32815
|
-
messagesMutable: false,
|
|
32816
|
-
deliveryModel: "async",
|
|
32817
|
-
mediaSupport: "none",
|
|
32818
|
-
textMediaDelivery: "none",
|
|
32819
|
-
interactiveUI: "none",
|
|
32820
|
-
inboundMediaSupport: false,
|
|
32821
|
-
consumerType: "human",
|
|
32822
|
-
approvalAnswerable: false,
|
|
32823
|
-
reasoningVisibility: "always_strip",
|
|
32824
|
-
markdownDialect: "none",
|
|
32825
|
-
threadModel: "flat",
|
|
32826
|
-
senderIdentity: "verified",
|
|
32827
|
-
maxResponseLength: 160,
|
|
32828
|
-
executionHint: "You are responding via SMS. Be extremely brief \u2014 ideally one or two short sentences. Plain text only, no markdown, no lists. Get straight to the point. Do not include reasoning traces or process narration."
|
|
32829
|
-
}
|
|
32830
|
-
},
|
|
32831
|
-
imessage: {
|
|
32832
|
-
description: "iMessage messaging via Sendblue for Apple ecosystem interactions",
|
|
32833
|
-
useCases: ["customer support", "appointment reminders", "rich messaging", "two-way texting"],
|
|
32834
|
-
examples: ["iMessage support agent", "Appointment reminder bot", "Rich media messaging bot"],
|
|
32835
|
-
traits: {
|
|
32836
|
-
streaming: "none",
|
|
32837
|
-
messagesMutable: false,
|
|
32838
|
-
deliveryModel: "async",
|
|
32839
|
-
mediaSupport: "images",
|
|
32840
|
-
textMediaDelivery: "link",
|
|
32841
|
-
interactiveUI: "none",
|
|
32842
|
-
inboundMediaSupport: true,
|
|
32843
|
-
consumerType: "human",
|
|
32844
|
-
approvalAnswerable: false,
|
|
32845
|
-
reasoningVisibility: "always_strip",
|
|
32846
|
-
markdownDialect: "none",
|
|
32847
|
-
threadModel: "flat",
|
|
32848
|
-
senderIdentity: "verified",
|
|
32849
|
-
// ~4 short bubbles' worth of headroom. The adapter splits on paragraph
|
|
32850
|
-
// boundaries before sending; this cap signals to the model that long is
|
|
32851
|
-
// wrong without imposing a hard truncate that would clip mid-thought.
|
|
32852
|
-
maxResponseLength: 1200,
|
|
32853
|
-
executionHint: [
|
|
32854
|
-
"You are responding via iMessage. Hard rules:",
|
|
32855
|
-
"- Plain text only. No markdown \u2014 no **bold**, no # headings, no - bullets, no `code`, no > quotes, no fenced code blocks.",
|
|
32856
|
-
"- 1\u20133 sentences per reply, under 300 characters total when possible.",
|
|
32857
|
-
"- Texting tone: conversational, lowercase is fine, contractions welcome.",
|
|
32858
|
-
'- No greetings ("Hi!", "Hey there!") and no closings ("Let me know!", "Hope this helps!").',
|
|
32859
|
-
`- No AI disclaimers ("As an AI...", "I cannot...", "I'd be happy to help").`,
|
|
32860
|
-
"- One emoji max, only when it fits naturally.",
|
|
32861
|
-
"- For multi-part replies, separate logical chunks with a blank line \u2014 each chunk becomes its own bubble.",
|
|
32862
|
-
"- Do not include reasoning traces or process narration."
|
|
32863
|
-
].join("\n")
|
|
32864
|
-
}
|
|
32865
|
-
},
|
|
32866
|
-
discord: {
|
|
32867
|
-
description: "Discord bot for community engagement",
|
|
32868
|
-
useCases: ["community support", "moderation", "server management"],
|
|
32869
|
-
examples: ["Community FAQ bot", "Moderation assistant", "Welcome bot"],
|
|
32870
|
-
traits: {
|
|
32871
|
-
streaming: "optional",
|
|
32872
|
-
messagesMutable: true,
|
|
32873
|
-
deliveryModel: "real_time",
|
|
32874
|
-
mediaSupport: "rich",
|
|
32875
|
-
textMediaDelivery: "link",
|
|
32876
|
-
interactiveUI: "buttons",
|
|
32877
|
-
inboundMediaSupport: true,
|
|
32878
|
-
consumerType: "human",
|
|
32879
|
-
approvalAnswerable: false,
|
|
32880
|
-
reasoningVisibility: "always_strip",
|
|
32881
|
-
markdownDialect: "markdown",
|
|
32882
|
-
threadModel: "threaded",
|
|
32883
|
-
senderIdentity: "authenticated",
|
|
32884
|
-
maxResponseLength: null,
|
|
32885
|
-
executionHint: "You are responding in a Discord server. Keep your tone friendly and community-appropriate. Markdown formatting is supported. Be concise. Do not include reasoning traces or tool call narration."
|
|
32886
|
-
}
|
|
32887
|
-
},
|
|
32888
|
-
whatsapp: {
|
|
32889
|
-
description: "WhatsApp Business integration for customer communication",
|
|
32890
|
-
useCases: ["customer support", "order updates", "appointment scheduling"],
|
|
32891
|
-
examples: ["WhatsApp support bot", "Order tracking assistant", "Booking agent"],
|
|
32892
|
-
traits: {
|
|
32893
|
-
streaming: "none",
|
|
32894
|
-
messagesMutable: false,
|
|
32895
|
-
deliveryModel: "async",
|
|
32896
|
-
mediaSupport: "rich",
|
|
32897
|
-
textMediaDelivery: "link",
|
|
32898
|
-
interactiveUI: "buttons",
|
|
32899
|
-
inboundMediaSupport: true,
|
|
32900
|
-
consumerType: "human",
|
|
32901
|
-
approvalAnswerable: false,
|
|
32902
|
-
reasoningVisibility: "always_strip",
|
|
32903
|
-
markdownDialect: "none",
|
|
32904
|
-
threadModel: "flat",
|
|
32905
|
-
senderIdentity: "verified",
|
|
32906
|
-
maxResponseLength: 1024,
|
|
32907
|
-
executionHint: "You are responding via WhatsApp. Keep responses concise and conversational \u2014 WhatsApp is a messaging app, not email. Plain text works best. Avoid lengthy explanations. Do not include reasoning traces or process narration."
|
|
32908
|
-
}
|
|
32909
|
-
},
|
|
32910
|
-
telegram: {
|
|
32911
|
-
description: "Telegram bot for messaging-based interactions",
|
|
32912
|
-
useCases: ["customer support", "notifications", "group management"],
|
|
32913
|
-
examples: ["Telegram support bot", "News alert bot", "Group admin assistant"],
|
|
32914
|
-
traits: {
|
|
32915
|
-
streaming: "none",
|
|
32916
|
-
messagesMutable: true,
|
|
32917
|
-
deliveryModel: "real_time",
|
|
32918
|
-
mediaSupport: "rich",
|
|
32919
|
-
textMediaDelivery: "native",
|
|
32920
|
-
interactiveUI: "buttons",
|
|
32921
|
-
inboundMediaSupport: true,
|
|
32922
|
-
consumerType: "human",
|
|
32923
|
-
approvalAnswerable: false,
|
|
32924
|
-
reasoningVisibility: "always_strip",
|
|
32925
|
-
markdownDialect: "html",
|
|
32926
|
-
threadModel: "flat",
|
|
32927
|
-
senderIdentity: "authenticated",
|
|
32928
|
-
maxResponseLength: 4096,
|
|
32929
|
-
executionHint: "You are responding via Telegram. Be clear and concise. Keep messages focused and avoid unnecessary verbosity. Do not include reasoning traces or tool call narration."
|
|
32930
|
-
}
|
|
32931
|
-
},
|
|
32932
|
-
messaging: {
|
|
32933
|
-
description: "Generic messaging surface for multi-channel delivery",
|
|
32934
|
-
useCases: ["multi-channel support", "unified messaging", "channel-agnostic bots"],
|
|
32935
|
-
examples: ["Multi-channel support bot", "Unified messaging gateway", "Channel router"],
|
|
32936
|
-
traits: {
|
|
32937
|
-
streaming: "optional",
|
|
32938
|
-
messagesMutable: false,
|
|
32939
|
-
deliveryModel: "real_time",
|
|
32940
|
-
mediaSupport: "images",
|
|
32941
|
-
textMediaDelivery: "link",
|
|
32942
|
-
interactiveUI: "none",
|
|
32943
|
-
inboundMediaSupport: false,
|
|
32944
|
-
consumerType: "human",
|
|
32945
|
-
approvalAnswerable: false,
|
|
32946
|
-
reasoningVisibility: "always_strip",
|
|
32947
|
-
markdownDialect: "none",
|
|
32948
|
-
threadModel: "flat",
|
|
32949
|
-
senderIdentity: "anonymous",
|
|
32950
|
-
maxResponseLength: null,
|
|
32951
|
-
executionHint: "You are responding via a messaging surface. Be clear and concise. Plain text is safest \u2014 avoid complex formatting. Do not include reasoning traces or tool call narration in your response."
|
|
32952
|
-
}
|
|
32953
|
-
},
|
|
32954
|
-
a2a: {
|
|
32955
|
-
description: "Agent-to-agent communication protocol",
|
|
32956
|
-
useCases: ["multi-agent workflows", "agent orchestration", "distributed processing"],
|
|
32957
|
-
examples: ["Agent coordinator", "Distributed pipeline", "Multi-agent research system"],
|
|
32958
|
-
traits: {
|
|
32959
|
-
streaming: "optional",
|
|
32960
|
-
messagesMutable: false,
|
|
32961
|
-
deliveryModel: "sync",
|
|
32962
|
-
mediaSupport: "none",
|
|
32963
|
-
textMediaDelivery: "none",
|
|
32964
|
-
interactiveUI: "none",
|
|
32965
|
-
inboundMediaSupport: false,
|
|
32966
|
-
consumerType: "agent",
|
|
32967
|
-
approvalAnswerable: true,
|
|
32968
|
-
reasoningVisibility: "pass_through",
|
|
32969
|
-
markdownDialect: "none",
|
|
32970
|
-
threadModel: "flat",
|
|
32971
|
-
senderIdentity: "authenticated",
|
|
32972
|
-
maxResponseLength: null,
|
|
32973
|
-
executionHint: null
|
|
32974
|
-
}
|
|
32975
|
-
},
|
|
32976
|
-
// @snake-case-ok: surface type identifier
|
|
32977
|
-
chrome_extension: {
|
|
32978
|
-
description: "Downloadable Manifest V3 Chrome extension embedding the agent in the browser side panel, with packaged browser tools (read page, fill forms, navigate tabs) executed locally via the WebMCP client-tool loop.",
|
|
32979
|
-
useCases: [
|
|
32980
|
-
"browser copilots",
|
|
32981
|
-
"page-aware assistants",
|
|
32982
|
-
"form filling and data extraction",
|
|
32983
|
-
"internal browser tooling"
|
|
32984
|
-
],
|
|
32985
|
-
examples: [
|
|
32986
|
-
"CRM sidekick that reads and updates records on the page",
|
|
32987
|
-
"Research assistant that summarizes and compares open tabs",
|
|
32988
|
-
"Support agent that drafts replies inside a ticketing UI"
|
|
32989
|
-
],
|
|
32990
|
-
traits: {
|
|
32991
|
-
streaming: "required",
|
|
32992
|
-
messagesMutable: false,
|
|
32993
|
-
deliveryModel: "real_time",
|
|
32994
|
-
mediaSupport: "images",
|
|
32995
|
-
textMediaDelivery: "inline_html",
|
|
32996
|
-
interactiveUI: "generative",
|
|
32997
|
-
inboundMediaSupport: true,
|
|
32998
|
-
consumerType: "human",
|
|
32999
|
-
approvalAnswerable: true,
|
|
33000
|
-
reasoningVisibility: "pass_through",
|
|
33001
|
-
markdownDialect: "mdx",
|
|
33002
|
-
threadModel: "flat",
|
|
33003
|
-
senderIdentity: "anonymous",
|
|
33004
|
-
maxResponseLength: null,
|
|
33005
|
-
executionHint: "You are running inside a Chrome extension side panel. You may have browser tools (chrome:*) to read the current page, interact with forms, and manage tabs \u2014 use them when the user asks about or wants to act on the page they are viewing. Mutating actions (clicking, filling, navigating) ask the user for confirmation before running."
|
|
33006
|
-
},
|
|
33007
|
-
behaviorTypeRef: "runtype://types/surface-configs"
|
|
33008
|
-
},
|
|
33009
|
-
"ag-ui": {
|
|
33010
|
-
description: "AG-UI protocol endpoint (agent-to-user event stream over SSE)",
|
|
33011
|
-
useCases: ["custom agent frontends", "CopilotKit / AG-UI clients", "embedded agent UIs"],
|
|
33012
|
-
examples: ["CopilotKit app", "Custom React agent UI", "AG-UI dojo client"],
|
|
33013
|
-
// Staging-test phase (`enable-ag-ui-surface` flag): keep the type out of
|
|
33014
|
-
// agent-facing catalogs until GA. Runtime trait lookups still resolve.
|
|
33015
|
-
hiddenFromCatalog: true,
|
|
33016
|
-
traits: {
|
|
33017
|
-
streaming: "required",
|
|
33018
|
-
messagesMutable: false,
|
|
33019
|
-
deliveryModel: "real_time",
|
|
33020
|
-
mediaSupport: "none",
|
|
33021
|
-
textMediaDelivery: "none",
|
|
33022
|
-
interactiveUI: "none",
|
|
33023
|
-
inboundMediaSupport: false,
|
|
33024
|
-
consumerType: "machine",
|
|
33025
|
-
approvalAnswerable: true,
|
|
33026
|
-
reasoningVisibility: "pass_through",
|
|
33027
|
-
markdownDialect: "markdown",
|
|
33028
|
-
threadModel: "flat",
|
|
33029
|
-
senderIdentity: "authenticated",
|
|
33030
|
-
maxResponseLength: null,
|
|
33031
|
-
executionHint: null
|
|
33032
|
-
}
|
|
33033
|
-
}
|
|
33034
|
-
};
|
|
33035
|
-
var EMAIL_HTML_CAPABILITY_HINT = [
|
|
33036
|
-
"## Channel capabilities",
|
|
33037
|
-
'- Formatting: author the reply as an HTML email body. Write well-formed HTML and put all styling in inline `style="..."` attributes (no `<style>` blocks, no external CSS). Use semantic tags freely: `<p>`, `<h1>`-`<h3>`, `<ul>`/`<ol>`/`<li>`, `<table>`, `<a>`, `<strong>`/`<em>`, `<blockquote>`, `<img>`. Do NOT emit `<script>`, `<iframe>`, `<head>`, `<body>`, or `<html>` wrappers: Runtype wraps your body in the email document and strips any active or unsafe content before sending.',
|
|
33038
|
-
'- Images: embed an image with `<img src="https://..." alt="...">` and it renders inline in the email. (Some clients ask the recipient to load remote images.)'
|
|
33039
|
-
].join("\n");
|
|
33040
33040
|
|
|
33041
|
-
// ../shared/dist/chunk-
|
|
33041
|
+
// ../shared/dist/chunk-ZS5WVN6Q.mjs
|
|
33042
33042
|
var DEFAULT_MODELS_FOR_NEW_ACCOUNTS = [
|
|
33043
33043
|
// Mixlayer models
|
|
33044
33044
|
{
|
|
@@ -40272,7 +40272,14 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
|
|
|
40272
40272
|
// independent branches that each claimed their own suffix, plus the
|
|
40273
40273
|
// vendored-export re-fold pass. No bit changes with this bump; it exists so
|
|
40274
40274
|
// the combined base carries one unambiguous version.
|
|
40275
|
-
|
|
40275
|
+
// Bumped 2026-08-08.1: graduates `transformDataMcpServers` (#6013) — the
|
|
40276
|
+
// flow-lane MCP discovery pre-pass now walks `transform-data` steps and binds
|
|
40277
|
+
// each declared server's discovered tools as sandbox callables under legacy's
|
|
40278
|
+
// `{canonicalServerId}_{toolName}` identifier. The bit re-folds on
|
|
40279
|
+
// `vendored-export` (it rides the same host `CodeModeExecutor` seam as
|
|
40280
|
+
// `transformDataCodeModeTools`) — see {@link VENDORED_EXPORT_REFOLDS}.
|
|
40281
|
+
// Rollback lever: revert the bit to `true` (plus its test).
|
|
40282
|
+
version: "2026-08-08.1",
|
|
40276
40283
|
unsupportedStepTypes: ["wait-until", "crawl"],
|
|
40277
40284
|
unsupportedFeatures: {
|
|
40278
40285
|
approvalSteps: true,
|
|
@@ -40317,17 +40324,20 @@ var API_INPROCESS_CAPABILITY_MATRIX = {
|
|
|
40317
40324
|
// classes the runtime flow lane still cannot faithfully run.
|
|
40318
40325
|
// SUPPORTED as of 2026-08-06 (#6013): a `transform-data` step whose
|
|
40319
40326
|
// `config.tools` carries a runtime tool pool binds those tools through the
|
|
40320
|
-
// host `CodeModeExecutor` (`workerLoaderExecuteTransformWithTools`).
|
|
40321
|
-
// `mcpServers`-only case STAYS folded via the narrow
|
|
40322
|
-
// `transformDataMcpServers` bit below (the runtime has no MCP discovery on
|
|
40323
|
-
// transform steps, so an MCP tool pool would silently lose its tools).
|
|
40327
|
+
// host `CodeModeExecutor` (`workerLoaderExecuteTransformWithTools`).
|
|
40324
40328
|
// Rollback lever: revert this bit to `true` (plus its test).
|
|
40325
40329
|
transformDataCodeModeTools: false,
|
|
40326
|
-
//
|
|
40327
|
-
// `
|
|
40328
|
-
// and
|
|
40329
|
-
//
|
|
40330
|
-
|
|
40330
|
+
// SUPPORTED as of 2026-08-08 (#6013): the runtime flow lane's MCP discovery
|
|
40331
|
+
// pre-pass now walks `transform-data` steps alongside prompt steps
|
|
40332
|
+
// (`flow-engine.ts`) and merges each declared server's discovered tools into
|
|
40333
|
+
// the step's `config.tools.runtimeTools` — projected under LEGACY's
|
|
40334
|
+
// `{canonicalServerId}_{toolName}` code-step callable name and
|
|
40335
|
+
// `config.customServer` dispatch shape (`transformMcpPoolToolsForServer` in
|
|
40336
|
+
// `code-mode-executor.ts`), so authored scripts keep naming the same
|
|
40337
|
+
// callable. The `hasTransformDataCodeModeTools` FACT stays computed for
|
|
40338
|
+
// decision attribution but no longer folds.
|
|
40339
|
+
// Rollback lever: revert this bit to `true` (plus its test).
|
|
40340
|
+
transformDataMcpServers: false,
|
|
40331
40341
|
unsupportedTransformExecution: true,
|
|
40332
40342
|
// #6023 leg 1 (2026-08-05): a custom runtime tool requesting code_mode / a
|
|
40333
40343
|
// non-JS language / a container-backed sandbox provider has no runtime-lane
|
|
@@ -40417,7 +40427,10 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
|
|
|
40417
40427
|
// VENDORED_EXPORT_REFOLDS) — api-inprocess supports managed fetch methods
|
|
40418
40428
|
// only because the api host wires `ManagedFetchExecutor`; no export bundle
|
|
40419
40429
|
// does, so a firecrawl/massive fetch-url step fails as-shipped.
|
|
40420
|
-
|
|
40430
|
+
// Bumped 2026-08-08.1: `transformDataMcpServers` graduated on the base and
|
|
40431
|
+
// becomes the fourth documented re-fold here — the discovered tools still
|
|
40432
|
+
// need the host `CodeModeExecutor` to be bound as sandbox callables.
|
|
40433
|
+
version: "2026-08-08.1",
|
|
40421
40434
|
unsupportedStepTypes: [
|
|
40422
40435
|
// ── Carried over from api-inprocess: durable-host-only step types. A
|
|
40423
40436
|
// self-contained container has no durable host (BYOC §3.3 / S0 — the
|
|
@@ -40535,9 +40548,10 @@ var VENDORED_EXPORT_CAPABILITY_MATRIX = {
|
|
|
40535
40548
|
// code-with-tools fulfillment in the standard export — then flip to false and
|
|
40536
40549
|
// drop from {@link VENDORED_EXPORT_REFOLDS}.
|
|
40537
40550
|
transformDataCodeModeTools: true,
|
|
40538
|
-
//
|
|
40539
|
-
//
|
|
40540
|
-
//
|
|
40551
|
+
// VENDORED RE-FOLD (as of 2026-08-08.1, when the base graduated): a
|
|
40552
|
+
// transform step's DISCOVERED MCP tools are bound through the same host
|
|
40553
|
+
// `CodeModeExecutor` seam as the sibling bit above — discovery itself is
|
|
40554
|
+
// portable, the BINDING is not. Same graduation lever.
|
|
40541
40555
|
transformDataMcpServers: true,
|
|
40542
40556
|
unsupportedTransformExecution: true,
|
|
40543
40557
|
// api-inprocess fold (G5); carried over.
|
|
@@ -47607,8 +47621,9 @@ authCommand.command("whoami").description("Display current user information").op
|
|
|
47607
47621
|
}
|
|
47608
47622
|
const usage = billingInfo.usage;
|
|
47609
47623
|
if (usage) {
|
|
47610
|
-
const
|
|
47611
|
-
|
|
47624
|
+
const used = usage.executionsToday ?? usage.executionsThisMonth;
|
|
47625
|
+
const value = usage.executionsThisMonthAvailable === false || typeof used !== "number" ? "unavailable" : used.toLocaleString();
|
|
47626
|
+
fields.push({ label: "Executions today", value });
|
|
47612
47627
|
}
|
|
47613
47628
|
}
|
|
47614
47629
|
setResultNode(React.createElement(EntityCard, { fields }));
|
|
@@ -68562,8 +68577,8 @@ import { execFileSync } from "child_process";
|
|
|
68562
68577
|
// src/lib/persona-init.ts
|
|
68563
68578
|
init_credential_store();
|
|
68564
68579
|
|
|
68565
|
-
// ../../node_modules/.pnpm/@runtypelabs+persona@4.
|
|
68566
|
-
var S = "4.
|
|
68580
|
+
// ../../node_modules/.pnpm/@runtypelabs+persona@4.17.0/node_modules/@runtypelabs/persona/dist/codegen.js
|
|
68581
|
+
var S = "4.17.0";
|
|
68567
68582
|
var x = S;
|
|
68568
68583
|
function $(e) {
|
|
68569
68584
|
return e?.cdnBase?.trim().replace(/\/+$/, "").replace(/[\\'"<>`]/g, (r) => `%${r.charCodeAt(0).toString(16).toUpperCase().padStart(2, "0")}`) || `https://cdn.jsdelivr.net/npm/@runtypelabs/persona@${x}/dist`;
|
|
@@ -70533,6 +70548,13 @@ import React24 from "react";
|
|
|
70533
70548
|
import { render as render24 } from "ink";
|
|
70534
70549
|
import { useState as useState41, useEffect as useEffect35 } from "react";
|
|
70535
70550
|
import open5 from "open";
|
|
70551
|
+
function formatExecutionsToday(usage) {
|
|
70552
|
+
if (usage.executionsThisMonthAvailable === false) {
|
|
70553
|
+
return "unavailable";
|
|
70554
|
+
}
|
|
70555
|
+
const used = usage.executionsToday ?? usage.executionsThisMonth;
|
|
70556
|
+
return typeof used === "number" ? used.toLocaleString() : "unavailable";
|
|
70557
|
+
}
|
|
70536
70558
|
var billingCommand = new Command26("billing").description("View billing and subscription info");
|
|
70537
70559
|
billingCommand.command("status").description("Show current plan and usage").option("--json", "Output as JSON").option("--tty", "Force TTY mode").option("--no-tty", "Force non-TTY mode").action(async (options) => {
|
|
70538
70560
|
const apiKey = await ensureAuth();
|
|
@@ -70552,11 +70574,8 @@ billingCommand.command("status").description("Show current plan and usage").opti
|
|
|
70552
70574
|
]);
|
|
70553
70575
|
if (data.usage) {
|
|
70554
70576
|
console.log();
|
|
70555
|
-
const limit = data.usage.executionsLimit;
|
|
70556
|
-
const used = data.usage.executionsUsed ?? 0;
|
|
70557
|
-
const limitStr = limit ? `/${limit}` : "";
|
|
70558
70577
|
printDetail("Usage", [
|
|
70559
|
-
{ label: "Executions", value:
|
|
70578
|
+
{ label: "Executions today", value: formatExecutionsToday(data.usage) }
|
|
70560
70579
|
]);
|
|
70561
70580
|
}
|
|
70562
70581
|
if (data.limits) {
|
|
@@ -70592,10 +70611,7 @@ billingCommand.command("status").description("Show current plan and usage").opti
|
|
|
70592
70611
|
{ label: "Period end", value: data.currentPeriodEnd }
|
|
70593
70612
|
];
|
|
70594
70613
|
if (data.usage) {
|
|
70595
|
-
|
|
70596
|
-
const used = data.usage.executionsUsed ?? 0;
|
|
70597
|
-
const limitStr = limit ? `/${limit}` : "";
|
|
70598
|
-
fields.push({ label: "Executions", value: `${used}${limitStr}` });
|
|
70614
|
+
fields.push({ label: "Executions today", value: formatExecutionsToday(data.usage) });
|
|
70599
70615
|
}
|
|
70600
70616
|
if (data.limits) {
|
|
70601
70617
|
if (data.limits.dailyLimit) fields.push({ label: "Daily limit", value: data.limits.dailyLimit });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runtypelabs/cli",
|
|
3
|
-
"version": "2.33.
|
|
3
|
+
"version": "2.33.4",
|
|
4
4
|
"description": "Command-line interface for Runtype AI platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"react": "^19.2.8",
|
|
27
27
|
"rosie-skills": "0.8.1",
|
|
28
28
|
"yaml": "^2.9.0",
|
|
29
|
-
"@runtypelabs/
|
|
30
|
-
"@runtypelabs/
|
|
31
|
-
"@runtypelabs/
|
|
29
|
+
"@runtypelabs/sdk": "6.6.3",
|
|
30
|
+
"@runtypelabs/terminal-animations": "0.2.3",
|
|
31
|
+
"@runtypelabs/ink-components": "0.3.6"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@modelcontextprotocol/server": "2.0.0",
|
|
35
|
-
"@runtypelabs/persona": "4.
|
|
35
|
+
"@runtypelabs/persona": "4.17.0",
|
|
36
36
|
"@types/express": "^5.0.6",
|
|
37
37
|
"@types/micromatch": "^4.0.9",
|
|
38
38
|
"@types/node": "^25.3.3",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"tsx": "^4.7.1",
|
|
44
44
|
"typescript": "^6.0.3",
|
|
45
45
|
"vitest": "^4.1.0",
|
|
46
|
-
"@runtypelabs/shared": "3.
|
|
46
|
+
"@runtypelabs/shared": "3.18.0"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=22.12.0"
|