@theoremjs/studio 0.0.0-stage → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +295 -2
- package/agreement.d.ts +14 -0
- package/agreement.js +80 -0
- package/asks.d.ts +47 -0
- package/asks.js +54 -0
- package/browser-connection.d.ts +49 -0
- package/browser-connection.js +215 -0
- package/browser-engine.d.ts +11 -0
- package/browser-engine.js +11 -0
- package/browser-execution.d.ts +6 -0
- package/browser-execution.js +18 -0
- package/browser-live.d.ts +4 -0
- package/browser-live.js +132 -0
- package/browser-transport.d.ts +33 -0
- package/browser-transport.js +229 -0
- package/browser.d.ts +4 -0
- package/browser.js +4 -0
- package/canonical.d.ts +10 -0
- package/canonical.js +25 -0
- package/compile-workspace.d.ts +28 -0
- package/compile-workspace.js +295 -0
- package/compile.d.ts +65 -0
- package/compile.js +1605 -0
- package/concierge-demo.d.ts +17 -0
- package/concierge-demo.js +1230 -0
- package/conversation-key.d.ts +5 -0
- package/conversation-key.js +10 -0
- package/decision-example-images.d.ts +30 -0
- package/decision-example-images.js +30 -0
- package/deno.json +3 -0
- package/draft.d.ts +407 -0
- package/draft.js +505 -0
- package/editors.d.ts +29 -0
- package/editors.js +51 -0
- package/example-embedding-files.d.ts +11 -0
- package/example-embedding-files.js +20 -0
- package/example.d.ts +36 -0
- package/example.js +357 -0
- package/guardrail-probe.d.ts +100 -0
- package/guardrail-probe.js +722 -0
- package/held-credentials.d.ts +28 -0
- package/held-credentials.js +87 -0
- package/installed.mjs +40 -0
- package/lent-keys.d.ts +122 -0
- package/lent-keys.js +47 -0
- package/line-diff.d.ts +15 -0
- package/line-diff.js +41 -0
- package/live-connection.d.ts +22 -0
- package/live-connection.js +27 -0
- package/live-session-bridge.d.ts +15 -0
- package/live-session-bridge.js +202 -0
- package/map-line.d.ts +19 -0
- package/map-line.js +42 -0
- package/map.d.ts +154 -0
- package/map.js +525 -0
- package/media-accept.d.ts +19 -0
- package/media-accept.js +65 -0
- package/mod.d.ts +39 -0
- package/mod.js +33 -0
- package/origins.d.ts +52 -0
- package/origins.js +165 -0
- package/package.json +85 -4
- package/page/assets/Banner-BISz3nXA.js +2 -0
- package/page/assets/BottomSheet-BwfBDtje.js +1 -0
- package/page/assets/Card-Lp-0P5eL.js +1 -0
- package/page/assets/CardWall-CBRLdDZW.js +1 -0
- package/page/assets/Center-nHS1JSux.js +1 -0
- package/page/assets/CheckboxInput-Cj5pk-KI.js +2 -0
- package/page/assets/CodeBlock-C7XJ4ioE.js +51 -0
- package/page/assets/CollapsibleGroup-N7_SOjbm.js +2 -0
- package/page/assets/ContextMenu-CBu9H-9H.js +2 -0
- package/page/assets/DateInput-BGrQ5tPC.js +1 -0
- package/page/assets/Dialog-DELWQo-v.js +1 -0
- package/page/assets/EmptyState-C8W4JKBZ.js +1 -0
- package/page/assets/HoverCard-D1Y1ltWQ.js +1 -0
- package/page/assets/Icon-JrysT8aU.js +3 -0
- package/page/assets/IconAlertTriangle-BqAEqqdU.js +1 -0
- package/page/assets/IconButton-DlOGzJIX.js +1 -0
- package/page/assets/IconEye-BB5aY-wQ.js +1 -0
- package/page/assets/IconFileText-6zOFKKrF.js +1 -0
- package/page/assets/IconSearch-BTx66a40.js +1 -0
- package/page/assets/IconShield-DDOh7Gr5.js +1 -0
- package/page/assets/ItemSwipeLayer-Ckn4X6h9.js +1 -0
- package/page/assets/PaneState-BvA2tLQg.js +1 -0
- package/page/assets/PaneState-eUzUkNE8.css +1 -0
- package/page/assets/ScrollableArea-Ckugdj1N.js +1 -0
- package/page/assets/Section-DJ97F7QE.js +1 -0
- package/page/assets/SegmentedControlItem-h-aaXzyS.js +1 -0
- package/page/assets/SidePanel-BL32abk8.js +1 -0
- package/page/assets/StackItem-CQviqAfM.js +1 -0
- package/page/assets/Text-bum6zWWx.js +2 -0
- package/page/assets/TimestampHoverCard-DQIG0RZF.js +1 -0
- package/page/assets/ToolResultCharts-CgshSv9Q.js +1 -0
- package/page/assets/Tooltip-BH9xiRMl.js +1 -0
- package/page/assets/TraceInspector-_yZiz05W.js +1 -0
- package/page/assets/TraceOverview-BPO-HIYK.js +57 -0
- package/page/assets/VStack-CkVMcNiK.js +1 -0
- package/page/assets/_virtual_studio-type-sources-ByxqQaOG.js +12936 -0
- package/page/assets/arrive-DvbqpeRS.js +1 -0
- package/page/assets/browser-engine-CYq9DQAM.js +9 -0
- package/page/assets/browser-transport-D-2jDYe7.js +47 -0
- package/page/assets/codicon-DF1abBS2.ttf +0 -0
- package/page/assets/compile-egress-BSxOdX4K.js +23 -0
- package/page/assets/container.stylex-BmOi-8DQ.js +1 -0
- package/page/assets/createReactComponent-CZwsv6DD.js +1 -0
- package/page/assets/decision-example-images-CZGr7YIT.js +1 -0
- package/page/assets/devWarning-DxuplmRl.js +1 -0
- package/page/assets/editor-DjpsE8to.css +1 -0
- package/page/assets/editor.api-Cd3ViPQa.js +908 -0
- package/page/assets/editor.worker-6GY8RhDc.js +1 -0
- package/page/assets/editor.worker-BmdWdrHZ.js +33 -0
- package/page/assets/editors-BJX_S59A.js +1 -0
- package/page/assets/egress-automata-B5ZGE1mT.js +1 -0
- package/page/assets/embedding-space-view-CfQBPDxD.js +140 -0
- package/page/assets/encode-files-Bc3HJyAh.js +1 -0
- package/page/assets/export-agent-C3yyzXH8.js +43 -0
- package/page/assets/figtree-latin-400-normal-BD4aNku5.woff +0 -0
- package/page/assets/figtree-latin-400-normal-g7Dtegnw.woff2 +0 -0
- package/page/assets/figtree-latin-500-normal-BWnGEVsr.woff2 +0 -0
- package/page/assets/figtree-latin-500-normal-B_yy1phn.woff +0 -0
- package/page/assets/figtree-latin-600-normal-BM_oTo4n.woff +0 -0
- package/page/assets/figtree-latin-600-normal-Cv_xCTDl.woff2 +0 -0
- package/page/assets/figtree-latin-700-normal-BCCt2T1q.woff +0 -0
- package/page/assets/figtree-latin-700-normal-th6qEP7c.woff2 +0 -0
- package/page/assets/focusOutline.stylex-BT0kfa4t.js +1 -0
- package/page/assets/focusableSelector-DXZeMU85.js +1 -0
- package/page/assets/groupStyles-C7Ter7zC.js +1 -0
- package/page/assets/guardrail-tester-Gut5xK4a.js +9 -0
- package/page/assets/host-patterns-C9RMP16Q.js +1 -0
- package/page/assets/index-CvvmFKgS.js +105 -0
- package/page/assets/index-DOaHlqBo.css +1 -0
- package/page/assets/isRtlElement-BG33-k_H.js +1 -0
- package/page/assets/labels-provider-4TIWDvsE.js +3 -0
- package/page/assets/lent-keys-C32ems-I.js +1 -0
- package/page/assets/live-ingress-lDUGPwth.js +1 -0
- package/page/assets/live-messages-CnkL4GWi.js +1 -0
- package/page/assets/mergeProps-ptS-gIMz.js +1 -0
- package/page/assets/padding.stylex-B76907Zf.js +1 -0
- package/page/assets/preload-helper-DpV6A1kQ.js +1 -0
- package/page/assets/reader-BOCCYaRp.js +7 -0
- package/page/assets/register-CDgivxvX.js +2 -0
- package/page/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/page/assets/schemas-BQ9Jydzb.js +56 -0
- package/page/assets/shaped-data-BcarWqd5.js +16 -0
- package/page/assets/sharedResizeObserver-4U9Xq5Oq.js +1 -0
- package/page/assets/stub-DhdcU_Ew.js +471 -0
- package/page/assets/studio-code-pane-C_SAbcOa.js +8 -0
- package/page/assets/studio-console-DZwlEsvr.js +3 -0
- package/page/assets/studio-decision-B0FnCAXA.js +1 -0
- package/page/assets/studio-embedding-CmA51HVo.js +2 -0
- package/page/assets/studio-host-console-By7hqu2l.js +2 -0
- package/page/assets/studio-live-BrcVQcyV.js +1 -0
- package/page/assets/studio-map-B_xSia-z.js +1 -0
- package/page/assets/studio-map-Bb06Tw1F.css +1 -0
- package/page/assets/studio-monaco-CbKf90i6.css +1 -0
- package/page/assets/studio-monaco-xfyfezQS.js +34 -0
- package/page/assets/studio-ts.worker-B-EXG4Sv.js +67741 -0
- package/page/assets/studio-ts.worker-BXtW3z-O.js +1 -0
- package/page/assets/studio-type-checker-BOvxudki.js +23 -0
- package/page/assets/themeProps-3IqahpCr.js +1 -0
- package/page/assets/tokens.stylex-DkHf0P9C.js +1 -0
- package/page/assets/tool-schema-idaOe2nI.js +18 -0
- package/page/assets/trace-patterns-DnYJa0nI.js +1 -0
- package/page/assets/trace-record-C3zNksA_.js +1 -0
- package/page/assets/trace-schema-9CdEyG6Q.js +1 -0
- package/page/assets/tree-DqyAMsbI.js +3 -0
- package/page/assets/turn-client-Du3Um3Mg.js +2 -0
- package/page/assets/types-BhfXQCLx.js +1 -0
- package/page/assets/typescript-20GgZ8PJ.js +1 -0
- package/page/assets/use-one-call-Hcs8YBp1.js +1 -0
- package/page/assets/useAdaptivePresentation-BzmPCddb.js +1 -0
- package/page/assets/useClipboard-BgGRxRMJ.js +1 -0
- package/page/assets/useContainerReveal-BFy8N_QU.js +1 -0
- package/page/assets/useDevWarning-Z9SoixOP.js +1 -0
- package/page/assets/useLayerDismissal-B_G7IWpC.js +1 -0
- package/page/assets/useMediaQuery-BCT0NUeZ.js +1 -0
- package/page/assets/useScrollLock-Dyf6PHJt.js +1 -0
- package/page/assets/useScrollableArea-0NzdiBCq.js +1 -0
- package/page/assets/useTooltip-CJM_xhLB.js +1 -0
- package/page/assets/workspace-DZALqEDX.js +1 -0
- package/page/assets/zip-DTcEfps6.js +1 -0
- package/page/index.html +90 -0
- package/page.mjs +49 -0
- package/people.d.ts +87 -0
- package/people.js +110 -0
- package/policy.d.ts +43 -0
- package/policy.js +102 -0
- package/ports.d.mts +32 -0
- package/ports.mjs +85 -0
- package/probe-battery.d.ts +13 -0
- package/probe-battery.js +404 -0
- package/providers.d.ts +149 -0
- package/providers.js +306 -0
- package/read-source.d.ts +48 -0
- package/read-source.js +1301 -0
- package/read-steps.d.ts +23 -0
- package/read-steps.js +2 -0
- package/reader.d.ts +11 -0
- package/reader.js +11 -0
- package/registrations.d.ts +83 -0
- package/registrations.js +1 -0
- package/requirements.d.ts +22 -0
- package/requirements.js +38 -0
- package/run-payload-core.d.ts +28 -0
- package/run-payload-core.js +123 -0
- package/run-payload.d.ts +32 -0
- package/run-payload.js +26 -0
- package/runtime-scope.d.ts +84 -0
- package/runtime-scope.js +308 -0
- package/runtime.d.ts +84 -0
- package/runtime.js +387 -0
- package/section-notes.d.ts +33 -0
- package/section-notes.js +38 -0
- package/serve-page.mjs +96 -0
- package/server/draft-decide.d.ts +72 -0
- package/server/draft-decide.js +111 -0
- package/server/draft-embedding.d.ts +3 -0
- package/server/draft-embedding.js +35 -0
- package/server/draft-handler.d.ts +82 -0
- package/server/draft-handler.js +213 -0
- package/server/draft-probe.d.ts +14 -0
- package/server/draft-probe.js +61 -0
- package/server/draft-replies.d.ts +22 -0
- package/server/draft-replies.js +46 -0
- package/server/edited-session.d.ts +28 -0
- package/server/edited-session.js +83 -0
- package/server/edits.d.ts +38 -0
- package/server/edits.js +195 -0
- package/server/handler.d.ts +133 -0
- package/server/handler.js +598 -0
- package/server/lent-draft.d.ts +19 -0
- package/server/lent-draft.js +23 -0
- package/server/live.d.ts +15 -0
- package/server/live.js +96 -0
- package/server/open-editor.d.ts +63 -0
- package/server/open-editor.js +115 -0
- package/server/origins.d.ts +18 -0
- package/server/origins.js +330 -0
- package/server/project-source.d.ts +208 -0
- package/server/project-source.js +1042 -0
- package/server/project.d.ts +22 -0
- package/server/project.js +56 -0
- package/server/run-traces.d.ts +20 -0
- package/server/run-traces.js +96 -0
- package/server/save-new.d.ts +29 -0
- package/server/save-new.js +514 -0
- package/server/save-plan.d.ts +46 -0
- package/server/save-plan.js +1134 -0
- package/server/save-remove.d.ts +21 -0
- package/server/save-remove.js +528 -0
- package/server/save-session.d.ts +96 -0
- package/server/save-session.js +418 -0
- package/server/save-wire.d.ts +235 -0
- package/server/save-wire.js +8 -0
- package/server/save.d.ts +52 -0
- package/server/save.js +209 -0
- package/server/serve.d.ts +23 -0
- package/server/serve.js +413 -0
- package/server/test-connection.d.ts +17 -0
- package/server/test-connection.js +362 -0
- package/server/test-key.d.ts +2 -0
- package/server/test-key.js +83 -0
- package/server/watch.d.ts +28 -0
- package/server/watch.js +93 -0
- package/server/zod-edit.d.ts +74 -0
- package/server/zod-edit.js +558 -0
- package/server.d.ts +8 -0
- package/server.js +8 -0
- package/setups.mjs +170 -0
- package/shared-carry.d.ts +114 -0
- package/shared-carry.js +523 -0
- package/shared-settings.d.ts +34 -0
- package/shared-settings.js +70 -0
- package/source.d.ts +75 -0
- package/source.js +414 -0
- package/start.mjs +169 -0
- package/stream-lines.d.ts +9 -0
- package/stream-lines.js +27 -0
- package/stub.d.ts +6 -0
- package/stub.js +33 -0
- package/surface.d.ts +53 -0
- package/surface.js +631 -0
- package/system-markup.d.ts +20 -0
- package/system-markup.js +51 -0
- package/tool-schema.d.ts +23 -0
- package/tool-schema.js +69 -0
- package/tools.d.ts +16 -0
- package/tools.js +91 -0
- package/traces.d.ts +24 -0
- package/traces.js +29 -0
- package/transport.d.ts +57 -0
- package/transport.js +187 -0
- package/tree.d.ts +32 -0
- package/tree.js +83 -0
- package/types.d.ts +62 -0
- package/types.js +6 -0
- package/ui/acting-as-button.d.ts +2 -0
- package/ui/acting-as-button.js +16 -0
- package/ui/add-provider.d.ts +13 -0
- package/ui/add-provider.js +20 -0
- package/ui/boot-mark.css +53 -0
- package/ui/boot-mark.d.ts +19 -0
- package/ui/boot-mark.js +128 -0
- package/ui/boot-paint.d.ts +8 -0
- package/ui/boot-paint.js +8 -0
- package/ui/brand-icons.d.ts +57 -0
- package/ui/brand-icons.js +148 -0
- package/ui/built/theme.css +830 -0
- package/ui/built/theme.css.d.ts +9 -0
- package/ui/built/theorem-studio.d.ts +13 -0
- package/ui/built/theorem-studio.js +705 -0
- package/ui/built/theorem-studio.variants.d.ts +28 -0
- package/ui/code/monaco-contributions.d.ts +45 -0
- package/ui/code/studio-code.d.ts +7 -0
- package/ui/code/studio-code.js +253 -0
- package/ui/code/studio-monaco.d.ts +44 -0
- package/ui/code/studio-monaco.js +48 -0
- package/ui/code/studio-ts.worker.d.ts +1 -0
- package/ui/code/studio-ts.worker.js +16 -0
- package/ui/code/studio-type-checker.d.ts +12 -0
- package/ui/code/studio-type-checker.js +308 -0
- package/ui/code/studio-type-sources.d.ts +26 -0
- package/ui/confirm-write.d.ts +12 -0
- package/ui/confirm-write.js +45 -0
- package/ui/diff-block.d.ts +21 -0
- package/ui/diff-block.js +17 -0
- package/ui/figtree.css +59 -0
- package/ui/file-place.d.ts +4 -0
- package/ui/file-place.js +26 -0
- package/ui/guardrail-tester.d.ts +18 -0
- package/ui/guardrail-tester.js +248 -0
- package/ui/inspector-context.d.ts +119 -0
- package/ui/inspector-context.js +84 -0
- package/ui/inspector.d.ts +247 -0
- package/ui/inspector.js +284 -0
- package/ui/lib/acting-as.d.ts +25 -0
- package/ui/lib/acting-as.js +90 -0
- package/ui/lib/boot-sequence.d.ts +32 -0
- package/ui/lib/boot-sequence.js +57 -0
- package/ui/lib/export-agent.d.ts +11 -0
- package/ui/lib/export-agent.js +335 -0
- package/ui/lib/facet-icons.d.ts +20 -0
- package/ui/lib/facet-icons.js +21 -0
- package/ui/lib/panel-motion.d.ts +8 -0
- package/ui/lib/panel-motion.js +74 -0
- package/ui/lib/project-address.d.ts +14 -0
- package/ui/lib/project-address.js +24 -0
- package/ui/lib/project-starting.d.ts +13 -0
- package/ui/lib/project-starting.js +30 -0
- package/ui/lib/project-traces.d.ts +17 -0
- package/ui/lib/project-traces.js +54 -0
- package/ui/lib/read-map.d.ts +30 -0
- package/ui/lib/read-map.js +173 -0
- package/ui/lib/read-progress.d.ts +14 -0
- package/ui/lib/read-progress.js +12 -0
- package/ui/lib/refusal-lines.d.ts +3 -0
- package/ui/lib/refusal-lines.js +8 -0
- package/ui/lib/studio-activity.d.ts +5 -0
- package/ui/lib/studio-activity.js +17 -0
- package/ui/lib/studio-console.d.ts +27 -0
- package/ui/lib/studio-console.js +9 -0
- package/ui/lib/studio-conversation.d.ts +20 -0
- package/ui/lib/studio-conversation.js +130 -0
- package/ui/lib/studio-examples.d.ts +31 -0
- package/ui/lib/studio-examples.js +25 -0
- package/ui/lib/studio-labels.d.ts +6 -0
- package/ui/lib/studio-labels.js +13 -0
- package/ui/lib/studio-map-kept.d.ts +17 -0
- package/ui/lib/studio-map-kept.js +48 -0
- package/ui/lib/studio-open.d.ts +22 -0
- package/ui/lib/studio-open.js +54 -0
- package/ui/lib/studio-page.d.ts +33 -0
- package/ui/lib/studio-page.js +121 -0
- package/ui/lib/studio-prefs.d.ts +26 -0
- package/ui/lib/studio-prefs.js +87 -0
- package/ui/lib/studio-project.d.ts +106 -0
- package/ui/lib/studio-project.js +177 -0
- package/ui/lib/studio-restore.d.ts +49 -0
- package/ui/lib/studio-restore.js +251 -0
- package/ui/lib/studio-run-open.d.ts +15 -0
- package/ui/lib/studio-run-open.js +16 -0
- package/ui/lib/studio-session.d.ts +34 -0
- package/ui/lib/studio-session.js +17 -0
- package/ui/lib/studio-settings.d.ts +15 -0
- package/ui/lib/studio-settings.js +48 -0
- package/ui/lib/studio-store.d.ts +64 -0
- package/ui/lib/studio-store.js +391 -0
- package/ui/lib/studio-watch.d.ts +12 -0
- package/ui/lib/studio-watch.js +27 -0
- package/ui/lib/tab-fills.d.ts +6 -0
- package/ui/lib/tab-fills.js +14 -0
- package/ui/lib/tool-credentials.d.ts +3 -0
- package/ui/lib/tool-credentials.js +23 -0
- package/ui/lib/tool-probe.d.ts +19 -0
- package/ui/lib/tool-probe.js +104 -0
- package/ui/lib/type-icons.d.ts +35 -0
- package/ui/lib/type-icons.js +38 -0
- package/ui/lib/when-idle.d.ts +5 -0
- package/ui/lib/when-idle.js +14 -0
- package/ui/lib/zip.d.ts +5 -0
- package/ui/lib/zip.js +8 -0
- package/ui/map-token.css +11 -0
- package/ui/map-token.d.ts +17 -0
- package/ui/map-token.js +29 -0
- package/ui/mcp-icon.d.ts +6 -0
- package/ui/mcp-icon.js +8 -0
- package/ui/motion.css +113 -0
- package/ui/pan.d.ts +32 -0
- package/ui/pan.js +90 -0
- package/ui/profile-editor.d.ts +33 -0
- package/ui/profile-editor.js +2638 -0
- package/ui/provider-editor.d.ts +15 -0
- package/ui/provider-editor.js +92 -0
- package/ui/read-map.css +48 -0
- package/ui/read-map.d.ts +7 -0
- package/ui/read-map.js +163 -0
- package/ui/refusal-detail.d.ts +4 -0
- package/ui/refusal-detail.js +21 -0
- package/ui/shared-change.d.ts +9 -0
- package/ui/shared-change.js +28 -0
- package/ui/shell-motion.css +121 -0
- package/ui/shell-motion.d.ts +73 -0
- package/ui/shell-motion.js +194 -0
- package/ui/studio-code-pane.d.ts +19 -0
- package/ui/studio-code-pane.js +44 -0
- package/ui/studio-compare.d.ts +80 -0
- package/ui/studio-compare.js +326 -0
- package/ui/studio-conflicts.d.ts +17 -0
- package/ui/studio-conflicts.js +87 -0
- package/ui/studio-connection.d.ts +64 -0
- package/ui/studio-connection.js +286 -0
- package/ui/studio-decision.d.ts +6 -0
- package/ui/studio-decision.js +49 -0
- package/ui/studio-embedding.d.ts +6 -0
- package/ui/studio-embedding.js +30 -0
- package/ui/studio-host-console.d.ts +6 -0
- package/ui/studio-host-console.js +17 -0
- package/ui/studio-host.d.ts +73 -0
- package/ui/studio-host.js +12 -0
- package/ui/studio-live.d.ts +17 -0
- package/ui/studio-live.js +26 -0
- package/ui/studio-map.css +273 -0
- package/ui/studio-map.d.ts +17 -0
- package/ui/studio-map.js +397 -0
- package/ui/studio-nav.d.ts +24 -0
- package/ui/studio-nav.js +17 -0
- package/ui/studio-no-project.d.ts +5 -0
- package/ui/studio-no-project.js +9 -0
- package/ui/studio-run.css +76 -0
- package/ui/studio-run.d.ts +14 -0
- package/ui/studio-run.js +119 -0
- package/ui/studio-runner.d.ts +45 -0
- package/ui/studio-runner.js +187 -0
- package/ui/studio-save.d.ts +49 -0
- package/ui/studio-save.js +307 -0
- package/ui/studio-screen.d.ts +61 -0
- package/ui/studio-screen.js +2078 -0
- package/ui/studio-settings.d.ts +31 -0
- package/ui/studio-settings.js +288 -0
- package/ui/studio-shell.css +27 -0
- package/ui/studio-shell.d.ts +43 -0
- package/ui/studio-shell.js +87 -0
- package/ui/studio-theme.d.ts +7 -0
- package/ui/studio-theme.js +94 -0
- package/ui/studio.css +427 -0
- package/ui/theorem-mark.css +84 -0
- package/ui/theorem-mark.d.ts +22 -0
- package/ui/theorem-mark.js +21 -0
- package/vite.d.mts +30 -0
- package/vite.mjs +277 -0
- package/workspace.d.ts +230 -0
- package/workspace.js +1054 -0
|
@@ -0,0 +1,1230 @@
|
|
|
1
|
+
import { ATTACHMENT_ACCEPT_MIMES, VOICE_ACCEPT_MIMES } from '@theoremjs/agents/schema';
|
|
2
|
+
const DEMO_ATTACHMENT_ACCEPT = ATTACHMENT_ACCEPT_MIMES.filter((mime) => mime === 'image/*' || mime === 'application/pdf' || mime.startsWith('text/'));
|
|
3
|
+
const DEMO_VOICE_ACCEPT = VOICE_ACCEPT_MIMES.filter((mime) => mime === 'audio/*');
|
|
4
|
+
// Nominatim and Wikipedia refuse requests that don't name their client.
|
|
5
|
+
const DEMO_CLIENT_HEADERS = `{
|
|
6
|
+
"User-Agent": "TheoremStudio/1.0 (travel demo; +https://github.com/masudl-hub/theoremai)"
|
|
7
|
+
}`;
|
|
8
|
+
const DISCOVER_LOADED = ['get_cat_fact', 'tell_joke', 'get_advice', 'random_dog_image'];
|
|
9
|
+
/** Sample inputs for HTTP demo tools (connection tests and smoke scripts). */
|
|
10
|
+
export const DEMO_HTTP_SAMPLE_INPUT = {
|
|
11
|
+
geocode_city: { name: 'Paris' },
|
|
12
|
+
search_places: { q: 'Paris', limit: 1 },
|
|
13
|
+
reverse_geocode: { lat: 48.85, lon: 2.35 },
|
|
14
|
+
get_weather: { latitude: 48.85, longitude: 2.35 },
|
|
15
|
+
get_sun_times: { lat: 48.85, lng: 2.35 },
|
|
16
|
+
convert_currency: { from: 'USD', to: 'EUR', amount: 100 },
|
|
17
|
+
wikipedia_summary: { title: 'Paris' },
|
|
18
|
+
archive_text_search: { q: 'mediatype:texts AND travel', rows: 1 },
|
|
19
|
+
lookup_postal_code: { country: 'us', postal: '90210' },
|
|
20
|
+
get_pokemon: { name: 'pikachu' },
|
|
21
|
+
read_repo_file: { owner: 'denoland', repo: 'std', path: 'README.md' },
|
|
22
|
+
lookup_package: { name: 'zod' },
|
|
23
|
+
get_cat_fact: {},
|
|
24
|
+
tell_joke: {},
|
|
25
|
+
get_advice: {},
|
|
26
|
+
random_dog_image: {},
|
|
27
|
+
};
|
|
28
|
+
export function demoHttpSampleInput(toolName) {
|
|
29
|
+
return DEMO_HTTP_SAMPLE_INPUT[toolName];
|
|
30
|
+
}
|
|
31
|
+
/** Comma-separated hosts for guardrails.egress allowlist in the demo graph. */
|
|
32
|
+
export const DEMO_ALLOWED_HOSTS = 'nominatim.openstreetmap.org, geocoding-api.open-meteo.com, api.open-meteo.com, api.frankfurter.dev, api.sunrise-sunset.org, api.zippopotam.us, en.wikipedia.org, archive.org, pokeapi.co, dog.ceo, api.adviceslip.com, catfact.ninja, official-joke-api.appspot.com, mcp.deepwiki.com, mcp.context7.com, learn.microsoft.com, docs.mcp.cloudflare.com, knowledge-mcp.global.api.aws, huggingface.co, mcp.docs.astro.build, mcp.exa.ai, raw.githubusercontent.com, registry.npmjs.org';
|
|
33
|
+
export const DEMO_CONCIERGE_SYSTEM = `Role: Elite, charismatic travel concierge.
|
|
34
|
+
|
|
35
|
+
Communication Standards:
|
|
36
|
+
- Readable Formatting: Use markdown where it helps the reader: short headings, bullet lists, bold for key names, and tables for side-by-side comparisons.
|
|
37
|
+
- Adaptive Pacing: Deliver high-signal, concise answers. Avoid overwhelming monologues; provide the immediate insight or recommendation first, then offer a natural next step.
|
|
38
|
+
|
|
39
|
+
Tool & Fact Grounding:
|
|
40
|
+
- Absolute Grounding: Ground all dynamic facts (weather, currency conversions, distances, geography, destination research) using available tools before answering. Never invent live data.
|
|
41
|
+
- Silent Execution: Never narrate tool calls, announce function names, or reference underlying APIs. Seamlessly integrate verified findings into your response.
|
|
42
|
+
- Complete Resolution: Execute multi-step tool chains silently to completion before delivering the synthesized answer.
|
|
43
|
+
|
|
44
|
+
Multimodal Understanding:
|
|
45
|
+
- Immediately extract actionable constraints (dates, flight times, locations, budgets) from provided images, documents, tickets, or audio, and weave them directly into your response.`;
|
|
46
|
+
export function demoInputsSpec() {
|
|
47
|
+
return {
|
|
48
|
+
text: true,
|
|
49
|
+
attachmentsAccept: DEMO_ATTACHMENT_ACCEPT,
|
|
50
|
+
voiceAccept: DEMO_VOICE_ACCEPT,
|
|
51
|
+
maxFiles: 5,
|
|
52
|
+
maxBytes: 10_485_760,
|
|
53
|
+
maxTurnBytes: 26_214_400,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const DEMO_TOOL_SPECS = [
|
|
57
|
+
// --- Geocoding & weather (free, no Google attribution) ---
|
|
58
|
+
{
|
|
59
|
+
id: 'tool-geocode-city',
|
|
60
|
+
data: {
|
|
61
|
+
toolName: 'geocode_city',
|
|
62
|
+
activity: 'Finding {name}',
|
|
63
|
+
activityPast: 'Found {results.0.name}',
|
|
64
|
+
request: 'find {name}',
|
|
65
|
+
toolType: 'http',
|
|
66
|
+
description: 'Resolve a city or place name to coordinates using the Open-Meteo geocoding API.',
|
|
67
|
+
category: 'demo',
|
|
68
|
+
access: 'read-only',
|
|
69
|
+
permission: 'auto',
|
|
70
|
+
loadTier: 'T0',
|
|
71
|
+
paths: ['*'],
|
|
72
|
+
endpoint: 'https://geocoding-api.open-meteo.com/v1/search?count=3',
|
|
73
|
+
method: 'GET',
|
|
74
|
+
queryParams: ['name'],
|
|
75
|
+
inputJson: `{
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"name": { "type": "string", "examples": ["Paris"], "description": "City or place name" }
|
|
79
|
+
},
|
|
80
|
+
"required": ["name"]
|
|
81
|
+
}`,
|
|
82
|
+
outputJson: `{
|
|
83
|
+
"type": "object",
|
|
84
|
+
"properties": {
|
|
85
|
+
"results": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": {
|
|
88
|
+
"type": "object",
|
|
89
|
+
"properties": {
|
|
90
|
+
"name": { "type": "string" },
|
|
91
|
+
"latitude": { "type": "number" },
|
|
92
|
+
"longitude": { "type": "number" },
|
|
93
|
+
"country_code": { "type": "string" }
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}`,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'tool-search-places',
|
|
103
|
+
data: {
|
|
104
|
+
toolName: 'search_places',
|
|
105
|
+
activity: 'Searching for {q}',
|
|
106
|
+
activityPast: 'Searched for {q}',
|
|
107
|
+
request: 'search for {q}',
|
|
108
|
+
toolType: 'http',
|
|
109
|
+
description: 'Search OpenStreetMap Nominatim for places (free alternative to paid maps APIs).',
|
|
110
|
+
category: 'demo',
|
|
111
|
+
access: 'read-only',
|
|
112
|
+
permission: 'auto',
|
|
113
|
+
loadTier: 'T0',
|
|
114
|
+
paths: ['*'],
|
|
115
|
+
endpoint: 'https://nominatim.openstreetmap.org/search?format=json&addressdetails=1',
|
|
116
|
+
method: 'GET',
|
|
117
|
+
headersJson: DEMO_CLIENT_HEADERS,
|
|
118
|
+
queryParams: ['q', 'limit'],
|
|
119
|
+
inputJson: `{
|
|
120
|
+
"type": "object",
|
|
121
|
+
"properties": {
|
|
122
|
+
"q": { "type": "string", "examples": ["Paris"], "description": "Place search query" },
|
|
123
|
+
"limit": { "type": "number", "examples": [5], "description": "Max results (1-5)" }
|
|
124
|
+
},
|
|
125
|
+
"required": ["q"]
|
|
126
|
+
}`,
|
|
127
|
+
outputJson: `{ "type": "array" }`,
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'tool-reverse-geocode',
|
|
132
|
+
data: {
|
|
133
|
+
toolName: 'reverse_geocode',
|
|
134
|
+
activity: 'Finding this spot',
|
|
135
|
+
activityPast: 'Found this spot',
|
|
136
|
+
request: 'find this spot',
|
|
137
|
+
toolType: 'http',
|
|
138
|
+
description: 'Reverse geocode coordinates to a place label via OpenStreetMap Nominatim.',
|
|
139
|
+
category: 'demo',
|
|
140
|
+
access: 'read-only',
|
|
141
|
+
permission: 'auto',
|
|
142
|
+
loadTier: 'T0',
|
|
143
|
+
paths: ['*'],
|
|
144
|
+
endpoint: 'https://nominatim.openstreetmap.org/reverse?format=json',
|
|
145
|
+
method: 'GET',
|
|
146
|
+
headersJson: DEMO_CLIENT_HEADERS,
|
|
147
|
+
queryParams: ['lat', 'lon'],
|
|
148
|
+
inputJson: `{
|
|
149
|
+
"type": "object",
|
|
150
|
+
"properties": {
|
|
151
|
+
"lat": { "type": "number", "examples": [48.85] },
|
|
152
|
+
"lon": { "type": "number", "examples": [2.35] }
|
|
153
|
+
},
|
|
154
|
+
"required": ["lat", "lon"]
|
|
155
|
+
}`,
|
|
156
|
+
outputJson: `{ "type": "object" }`,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
id: 'tool-get-weather',
|
|
161
|
+
data: {
|
|
162
|
+
toolName: 'get_weather',
|
|
163
|
+
activity: 'Checking the weather',
|
|
164
|
+
activityPast: 'Currently {current_weather.temperature}°C',
|
|
165
|
+
request: 'check the weather',
|
|
166
|
+
toolType: 'http',
|
|
167
|
+
description: 'Fetch current weather and a 7-day forecast (highs, lows, chance of rain) for coordinates via Open-Meteo.',
|
|
168
|
+
category: 'demo',
|
|
169
|
+
access: 'read-only',
|
|
170
|
+
permission: 'auto',
|
|
171
|
+
loadTier: 'T0',
|
|
172
|
+
paths: ['*'],
|
|
173
|
+
endpoint: 'https://api.open-meteo.com/v1/forecast?current_weather=true&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max&forecast_days=7&timezone=auto',
|
|
174
|
+
method: 'GET',
|
|
175
|
+
queryParams: ['latitude', 'longitude'],
|
|
176
|
+
inputJson: `{
|
|
177
|
+
"type": "object",
|
|
178
|
+
"properties": {
|
|
179
|
+
"latitude": { "type": "number", "examples": [48.85] },
|
|
180
|
+
"longitude": { "type": "number", "examples": [2.35] }
|
|
181
|
+
},
|
|
182
|
+
"required": ["latitude", "longitude"]
|
|
183
|
+
}`,
|
|
184
|
+
outputJson: `{
|
|
185
|
+
"type": "object",
|
|
186
|
+
"properties": {
|
|
187
|
+
"current_weather": {
|
|
188
|
+
"type": "object",
|
|
189
|
+
"properties": {
|
|
190
|
+
"temperature": { "type": "number" },
|
|
191
|
+
"windspeed": { "type": "number" },
|
|
192
|
+
"weathercode": { "type": "number" },
|
|
193
|
+
"time": { "type": "string" }
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}`,
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: 'tool-sun-times',
|
|
202
|
+
data: {
|
|
203
|
+
toolName: 'get_sun_times',
|
|
204
|
+
activity: 'Checking sunrise and sunset',
|
|
205
|
+
activityPast: 'Checked sunrise and sunset',
|
|
206
|
+
request: 'check sunrise and sunset',
|
|
207
|
+
toolType: 'http',
|
|
208
|
+
description: 'Sunrise, sunset, and day length for coordinates (sunrise-sunset.org).',
|
|
209
|
+
category: 'demo',
|
|
210
|
+
access: 'read-only',
|
|
211
|
+
permission: 'auto',
|
|
212
|
+
loadTier: 'T0',
|
|
213
|
+
paths: ['*'],
|
|
214
|
+
endpoint: 'https://api.sunrise-sunset.org/json',
|
|
215
|
+
method: 'GET',
|
|
216
|
+
queryParams: ['lat', 'lng'],
|
|
217
|
+
inputJson: `{
|
|
218
|
+
"type": "object",
|
|
219
|
+
"properties": {
|
|
220
|
+
"lat": { "type": "number", "examples": [48.85] },
|
|
221
|
+
"lng": { "type": "number", "examples": [2.35] }
|
|
222
|
+
},
|
|
223
|
+
"required": ["lat", "lng"]
|
|
224
|
+
}`,
|
|
225
|
+
outputJson: `{
|
|
226
|
+
"type": "object",
|
|
227
|
+
"properties": {
|
|
228
|
+
"results": { "type": "object" },
|
|
229
|
+
"status": { "type": "string" }
|
|
230
|
+
}
|
|
231
|
+
}`,
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
id: 'tool-convert-currency',
|
|
236
|
+
data: {
|
|
237
|
+
toolName: 'convert_currency',
|
|
238
|
+
activity: 'Converting {amount} {from} to {to}',
|
|
239
|
+
activityPast: 'Converted {amount} {from} to {to}',
|
|
240
|
+
request: 'convert {amount} {from} to {to}',
|
|
241
|
+
toolType: 'http',
|
|
242
|
+
description: 'Convert an amount between ISO currencies using ECB reference rates.',
|
|
243
|
+
category: 'demo',
|
|
244
|
+
access: 'read-only',
|
|
245
|
+
permission: 'auto',
|
|
246
|
+
loadTier: 'T0',
|
|
247
|
+
paths: ['*'],
|
|
248
|
+
endpoint: 'https://api.frankfurter.dev/v1/latest',
|
|
249
|
+
method: 'GET',
|
|
250
|
+
queryParams: ['from', 'to', 'amount'],
|
|
251
|
+
inputJson: `{
|
|
252
|
+
"type": "object",
|
|
253
|
+
"properties": {
|
|
254
|
+
"from": { "type": "string", "examples": ["USD"] },
|
|
255
|
+
"to": { "type": "string", "examples": ["EUR"] },
|
|
256
|
+
"amount": { "type": "number", "examples": [100] }
|
|
257
|
+
},
|
|
258
|
+
"required": ["from", "to", "amount"]
|
|
259
|
+
}`,
|
|
260
|
+
outputJson: `{
|
|
261
|
+
"type": "object",
|
|
262
|
+
"properties": {
|
|
263
|
+
"amount": { "type": "number" },
|
|
264
|
+
"base": { "type": "string" },
|
|
265
|
+
"rates": { "type": "object" }
|
|
266
|
+
}
|
|
267
|
+
}`,
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
id: 'tool-convert-units',
|
|
272
|
+
data: {
|
|
273
|
+
toolName: 'convert_units',
|
|
274
|
+
activity: 'Converting {value} {from} to {to}',
|
|
275
|
+
activityPast: '{value} {from} is {result} {to}',
|
|
276
|
+
request: 'convert {value} {from} to {to}',
|
|
277
|
+
toolType: 'function',
|
|
278
|
+
description: 'Convert temperature (c/f/k) or distance (km/mi) locally — no network call.',
|
|
279
|
+
category: 'demo',
|
|
280
|
+
access: 'read-only',
|
|
281
|
+
permission: 'auto',
|
|
282
|
+
loadTier: 'T0',
|
|
283
|
+
paths: ['*'],
|
|
284
|
+
inputJson: `{
|
|
285
|
+
"type": "object",
|
|
286
|
+
"properties": {
|
|
287
|
+
"value": { "type": "number", "description": "Amount to convert", "examples": [20] },
|
|
288
|
+
"from": { "type": "string", "enum": ["c", "f", "k", "km", "mi"], "description": "Unit to convert from" },
|
|
289
|
+
"to": { "type": "string", "enum": ["c", "f", "k", "km", "mi"], "description": "Unit to convert to", "examples": ["f"] }
|
|
290
|
+
},
|
|
291
|
+
"required": ["value", "from", "to"]
|
|
292
|
+
}`,
|
|
293
|
+
outputJson: `{
|
|
294
|
+
"type": "object",
|
|
295
|
+
"properties": {
|
|
296
|
+
"value": { "type": "number" },
|
|
297
|
+
"from": { "type": "string" },
|
|
298
|
+
"to": { "type": "string" },
|
|
299
|
+
"result": { "type": "number" }
|
|
300
|
+
},
|
|
301
|
+
"required": ["result"]
|
|
302
|
+
}`,
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
id: 'tool-haversine',
|
|
307
|
+
data: {
|
|
308
|
+
toolName: 'haversine_distance',
|
|
309
|
+
activity: 'Measuring the distance',
|
|
310
|
+
activityPast: '{km} km apart',
|
|
311
|
+
request: 'measure the distance',
|
|
312
|
+
toolType: 'function',
|
|
313
|
+
description: 'Great-circle distance between two lat/lon pairs in km and miles.',
|
|
314
|
+
category: 'demo',
|
|
315
|
+
access: 'read-only',
|
|
316
|
+
permission: 'auto',
|
|
317
|
+
loadTier: 'T0',
|
|
318
|
+
paths: ['*'],
|
|
319
|
+
inputJson: `{
|
|
320
|
+
"type": "object",
|
|
321
|
+
"properties": {
|
|
322
|
+
"lat1": { "type": "number", "minimum": -90, "maximum": 90, "description": "Start latitude", "examples": [48.85] },
|
|
323
|
+
"lon1": { "type": "number", "minimum": -180, "maximum": 180, "description": "Start longitude", "examples": [2.35] },
|
|
324
|
+
"lat2": { "type": "number", "minimum": -90, "maximum": 90, "description": "End latitude", "examples": [51.51] },
|
|
325
|
+
"lon2": { "type": "number", "minimum": -180, "maximum": 180, "description": "End longitude", "examples": [-0.13] }
|
|
326
|
+
},
|
|
327
|
+
"required": ["lat1", "lon1", "lat2", "lon2"]
|
|
328
|
+
}`,
|
|
329
|
+
outputJson: `{
|
|
330
|
+
"type": "object",
|
|
331
|
+
"properties": {
|
|
332
|
+
"km": { "type": "number" },
|
|
333
|
+
"mi": { "type": "number" }
|
|
334
|
+
},
|
|
335
|
+
"required": ["km", "mi"]
|
|
336
|
+
}`,
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
id: 'tool-wikipedia',
|
|
341
|
+
data: {
|
|
342
|
+
toolName: 'wikipedia_summary',
|
|
343
|
+
activity: 'Reading about {title}',
|
|
344
|
+
activityPast: 'Read about {title}',
|
|
345
|
+
request: 'read about {title}',
|
|
346
|
+
toolType: 'http',
|
|
347
|
+
description: 'Fetch the Wikipedia REST summary for a page title.',
|
|
348
|
+
category: 'demo',
|
|
349
|
+
access: 'read-only',
|
|
350
|
+
permission: 'auto',
|
|
351
|
+
loadTier: 'T0',
|
|
352
|
+
paths: ['*'],
|
|
353
|
+
endpoint: 'https://en.wikipedia.org/api/rest_v1/page/summary/{title}',
|
|
354
|
+
method: 'GET',
|
|
355
|
+
headersJson: DEMO_CLIENT_HEADERS,
|
|
356
|
+
pathParams: ['title'],
|
|
357
|
+
inputJson: `{
|
|
358
|
+
"type": "object",
|
|
359
|
+
"properties": {
|
|
360
|
+
"title": { "type": "string", "examples": ["Paris"], "description": "Wikipedia page title, e.g. Paris" }
|
|
361
|
+
},
|
|
362
|
+
"required": ["title"]
|
|
363
|
+
}`,
|
|
364
|
+
outputJson: `{
|
|
365
|
+
"type": "object",
|
|
366
|
+
"properties": {
|
|
367
|
+
"title": { "type": "string" },
|
|
368
|
+
"extract": { "type": "string" },
|
|
369
|
+
"description": { "type": "string" }
|
|
370
|
+
}
|
|
371
|
+
}`,
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: 'tool-archive-search',
|
|
376
|
+
data: {
|
|
377
|
+
toolName: 'archive_text_search',
|
|
378
|
+
activity: 'Searching the archive',
|
|
379
|
+
activityPast: 'Searched the archive',
|
|
380
|
+
request: 'search the archive',
|
|
381
|
+
toolType: 'http',
|
|
382
|
+
description: 'Search Internet Archive texts (books) by title or keywords.',
|
|
383
|
+
category: 'demo',
|
|
384
|
+
access: 'read-only',
|
|
385
|
+
permission: 'auto',
|
|
386
|
+
loadTier: 'T0',
|
|
387
|
+
paths: ['*'],
|
|
388
|
+
// Archive.org advanced search — Open Library TLS is unreachable from many networks.
|
|
389
|
+
endpoint: 'https://archive.org/advancedsearch.php?output=json&fl[]=identifier&fl[]=title&fl[]=creator',
|
|
390
|
+
method: 'GET',
|
|
391
|
+
queryParams: ['q', 'rows'],
|
|
392
|
+
inputJson: `{
|
|
393
|
+
"type": "object",
|
|
394
|
+
"properties": {
|
|
395
|
+
"q": { "type": "string", "examples": ["mediatype:texts AND travel"] },
|
|
396
|
+
"rows": { "type": "number", "examples": [1] }
|
|
397
|
+
},
|
|
398
|
+
"required": ["q"]
|
|
399
|
+
}`,
|
|
400
|
+
outputJson: `{ "type": "object" }`,
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
id: 'tool-postal',
|
|
405
|
+
data: {
|
|
406
|
+
toolName: 'lookup_postal_code',
|
|
407
|
+
activity: 'Looking up {postal}',
|
|
408
|
+
activityPast: 'Looked up {postal}',
|
|
409
|
+
request: 'look up {postal}',
|
|
410
|
+
toolType: 'http',
|
|
411
|
+
description: 'Look up place names for a postal code via Zippopotam (no API key).',
|
|
412
|
+
category: 'demo',
|
|
413
|
+
access: 'read-only',
|
|
414
|
+
permission: 'auto',
|
|
415
|
+
loadTier: 'T0',
|
|
416
|
+
paths: ['*'],
|
|
417
|
+
endpoint: 'https://api.zippopotam.us/{country}/{postal}',
|
|
418
|
+
method: 'GET',
|
|
419
|
+
pathParams: ['country', 'postal'],
|
|
420
|
+
inputJson: `{
|
|
421
|
+
"type": "object",
|
|
422
|
+
"properties": {
|
|
423
|
+
"country": { "type": "string", "examples": ["us"], "description": "ISO country code, e.g. us or fr" },
|
|
424
|
+
"postal": { "type": "string", "examples": ["90210"] }
|
|
425
|
+
},
|
|
426
|
+
"required": ["country", "postal"]
|
|
427
|
+
}`,
|
|
428
|
+
outputJson: `{ "type": "object" }`,
|
|
429
|
+
},
|
|
430
|
+
},
|
|
431
|
+
// --- MCP (DeepWiki — no Google Maps / grounding attribution) ---
|
|
432
|
+
{
|
|
433
|
+
id: 'tool-ask-deepwiki',
|
|
434
|
+
data: {
|
|
435
|
+
toolName: 'ask_repo_docs',
|
|
436
|
+
activity: 'Checking the docs',
|
|
437
|
+
activityPast: 'Checked the docs',
|
|
438
|
+
request: 'check the docs',
|
|
439
|
+
toolType: 'mcp',
|
|
440
|
+
description: 'Ask questions about a public GitHub repo via DeepWiki MCP (Streamable HTTP).',
|
|
441
|
+
category: 'demo',
|
|
442
|
+
access: 'read-only',
|
|
443
|
+
permission: 'auto',
|
|
444
|
+
loadTier: 'T0',
|
|
445
|
+
paths: ['*'],
|
|
446
|
+
serverUrl: 'https://mcp.deepwiki.com/mcp',
|
|
447
|
+
mcpToolName: 'ask_wiki_question',
|
|
448
|
+
inputJson: `{
|
|
449
|
+
"type": "object",
|
|
450
|
+
"properties": {
|
|
451
|
+
"repoName": { "type": "string", "description": "The GitHub repo, as owner/repo", "examples": ["sveltejs/kit"] },
|
|
452
|
+
"question": { "type": "string", "description": "What to ask about the repo", "maxLength": 2000, "examples": ["How does routing work?"] }
|
|
453
|
+
},
|
|
454
|
+
"required": ["repoName", "question"]
|
|
455
|
+
}`,
|
|
456
|
+
outputJson: `{
|
|
457
|
+
"type": "object",
|
|
458
|
+
"properties": { "result": { "type": "string", "description": "Answer text from DeepWiki" } },
|
|
459
|
+
"required": ["result"]
|
|
460
|
+
}`,
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
// --- MCP docs servers (Context7, Microsoft Learn, Cloudflare, AWS: public, keyless, read-only) ---
|
|
464
|
+
{
|
|
465
|
+
id: 'tool-context7-resolve',
|
|
466
|
+
data: {
|
|
467
|
+
toolName: 'find_library',
|
|
468
|
+
activity: 'Finding {libraryName}',
|
|
469
|
+
activityPast: 'Found {libraryName}',
|
|
470
|
+
request: 'find {libraryName}',
|
|
471
|
+
toolType: 'mcp',
|
|
472
|
+
description: "Find a library's Context7 ID by name. Call before read_library_docs unless the user gave an ID like /vercel/next.js.",
|
|
473
|
+
category: 'demo',
|
|
474
|
+
access: 'read-only',
|
|
475
|
+
permission: 'auto',
|
|
476
|
+
loadTier: 'T0',
|
|
477
|
+
paths: ['*'],
|
|
478
|
+
serverUrl: 'https://mcp.context7.com/mcp',
|
|
479
|
+
mcpToolName: 'resolve-library-id',
|
|
480
|
+
inputJson: `{
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"libraryName": { "type": "string", "description": "The library's official name", "maxLength": 100, "examples": ["Next.js"] },
|
|
484
|
+
"query": { "type": "string", "description": "What the user wants to do with it", "maxLength": 500, "examples": ["Set up middleware"] }
|
|
485
|
+
},
|
|
486
|
+
"required": ["libraryName", "query"]
|
|
487
|
+
}`,
|
|
488
|
+
outputJson: `{ "type": "string", "description": "Matching libraries and their Context7 IDs" }`,
|
|
489
|
+
},
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: 'tool-context7-docs',
|
|
493
|
+
data: {
|
|
494
|
+
toolName: 'read_library_docs',
|
|
495
|
+
activity: 'Reading the {libraryId} docs',
|
|
496
|
+
activityPast: 'Read the {libraryId} docs',
|
|
497
|
+
request: 'read the {libraryId} docs',
|
|
498
|
+
toolType: 'mcp',
|
|
499
|
+
description: 'Up-to-date docs and code examples for one library from Context7, for one topic per call.',
|
|
500
|
+
category: 'demo',
|
|
501
|
+
access: 'read-only',
|
|
502
|
+
permission: 'auto',
|
|
503
|
+
loadTier: 'T0',
|
|
504
|
+
paths: ['*'],
|
|
505
|
+
serverUrl: 'https://mcp.context7.com/mcp',
|
|
506
|
+
mcpToolName: 'query-docs',
|
|
507
|
+
inputJson: `{
|
|
508
|
+
"type": "object",
|
|
509
|
+
"properties": {
|
|
510
|
+
"libraryId": { "type": "string", "description": "A Context7 ID from find_library, like /vercel/next.js", "maxLength": 200, "examples": ["/reactjs/react.dev"] },
|
|
511
|
+
"query": { "type": "string", "description": "One topic to look up", "maxLength": 500, "examples": ["useEffect cleanup"] }
|
|
512
|
+
},
|
|
513
|
+
"required": ["libraryId", "query"]
|
|
514
|
+
}`,
|
|
515
|
+
outputJson: `{ "type": "string", "description": "Documentation excerpts and code examples" }`,
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
id: 'tool-microsoft-learn',
|
|
520
|
+
data: {
|
|
521
|
+
toolName: 'search_microsoft_docs',
|
|
522
|
+
activity: 'Searching Microsoft Learn for {query}',
|
|
523
|
+
activityPast: 'Found {results.0.title|nothing on Microsoft Learn}',
|
|
524
|
+
request: 'search Microsoft Learn for {query}',
|
|
525
|
+
toolType: 'mcp',
|
|
526
|
+
description: 'Search official Microsoft and Azure documentation on Microsoft Learn.',
|
|
527
|
+
category: 'demo',
|
|
528
|
+
access: 'read-only',
|
|
529
|
+
permission: 'auto',
|
|
530
|
+
loadTier: 'T0',
|
|
531
|
+
paths: ['*'],
|
|
532
|
+
serverUrl: 'https://learn.microsoft.com/api/mcp',
|
|
533
|
+
mcpToolName: 'microsoft_docs_search',
|
|
534
|
+
inputJson: `{
|
|
535
|
+
"type": "object",
|
|
536
|
+
"properties": {
|
|
537
|
+
"query": { "type": "string", "description": "A topic about a Microsoft or Azure product, service, or API", "maxLength": 500, "examples": ["Azure Functions timeout"] }
|
|
538
|
+
},
|
|
539
|
+
"required": ["query"]
|
|
540
|
+
}`,
|
|
541
|
+
outputJson: `{
|
|
542
|
+
"type": "object",
|
|
543
|
+
"properties": {
|
|
544
|
+
"results": {
|
|
545
|
+
"type": "array",
|
|
546
|
+
"items": {
|
|
547
|
+
"type": "object",
|
|
548
|
+
"properties": {
|
|
549
|
+
"title": { "type": "string" },
|
|
550
|
+
"content": { "type": ["string", "null"] },
|
|
551
|
+
"contentUrl": { "type": "string" }
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}`,
|
|
557
|
+
},
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
id: 'tool-cloudflare-docs',
|
|
561
|
+
data: {
|
|
562
|
+
toolName: 'search_cloudflare_docs',
|
|
563
|
+
activity: 'Searching Cloudflare docs for {query}',
|
|
564
|
+
activityPast: 'Found {results.0.title|nothing in the Cloudflare docs}',
|
|
565
|
+
request: 'search the Cloudflare docs for {query}',
|
|
566
|
+
toolType: 'mcp',
|
|
567
|
+
description: 'Search the Cloudflare developer documentation: Workers, R2, D1, Durable Objects, Zero Trust, and more.',
|
|
568
|
+
category: 'demo',
|
|
569
|
+
access: 'read-only',
|
|
570
|
+
permission: 'auto',
|
|
571
|
+
loadTier: 'T0',
|
|
572
|
+
paths: ['*'],
|
|
573
|
+
serverUrl: 'https://docs.mcp.cloudflare.com/mcp',
|
|
574
|
+
mcpToolName: 'search_cloudflare_documentation',
|
|
575
|
+
inputJson: `{
|
|
576
|
+
"type": "object",
|
|
577
|
+
"properties": {
|
|
578
|
+
"query": { "type": "string", "description": "What to look up in the Cloudflare docs", "maxLength": 500, "examples": ["Durable Objects alarms"] }
|
|
579
|
+
},
|
|
580
|
+
"required": ["query"]
|
|
581
|
+
}`,
|
|
582
|
+
outputJson: `{
|
|
583
|
+
"type": "object",
|
|
584
|
+
"properties": {
|
|
585
|
+
"results": {
|
|
586
|
+
"type": "array",
|
|
587
|
+
"items": {
|
|
588
|
+
"type": "object",
|
|
589
|
+
"properties": {
|
|
590
|
+
"title": { "type": "string" },
|
|
591
|
+
"url": { "type": "string" },
|
|
592
|
+
"text": { "type": "string" }
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
},
|
|
597
|
+
"required": ["results"]
|
|
598
|
+
}`,
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
id: 'tool-aws-regions',
|
|
603
|
+
data: {
|
|
604
|
+
toolName: 'list_aws_regions',
|
|
605
|
+
activity: 'Listing AWS regions',
|
|
606
|
+
activityPast: 'Listed {content.result.length} AWS regions',
|
|
607
|
+
request: 'list AWS regions',
|
|
608
|
+
toolType: 'mcp',
|
|
609
|
+
description: 'List every AWS region, with its code and name.',
|
|
610
|
+
category: 'demo',
|
|
611
|
+
access: 'read-only',
|
|
612
|
+
permission: 'auto',
|
|
613
|
+
loadTier: 'T0',
|
|
614
|
+
paths: ['*'],
|
|
615
|
+
serverUrl: 'https://knowledge-mcp.global.api.aws',
|
|
616
|
+
mcpToolName: 'aws___list_regions',
|
|
617
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
618
|
+
outputJson: `{
|
|
619
|
+
"type": "object",
|
|
620
|
+
"properties": {
|
|
621
|
+
"content": {
|
|
622
|
+
"type": "object",
|
|
623
|
+
"properties": {
|
|
624
|
+
"result": {
|
|
625
|
+
"type": "array",
|
|
626
|
+
"items": {
|
|
627
|
+
"type": "object",
|
|
628
|
+
"properties": {
|
|
629
|
+
"region_id": { "type": "string" },
|
|
630
|
+
"region_long_name": { "type": "string" }
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}`,
|
|
638
|
+
},
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
id: 'tool-aws-docs',
|
|
642
|
+
data: {
|
|
643
|
+
toolName: 'search_aws_docs',
|
|
644
|
+
activity: 'Searching AWS docs for {search_phrase}',
|
|
645
|
+
activityPast: 'Found {content.result.0.title|nothing in the AWS docs}',
|
|
646
|
+
request: 'search the AWS docs for {search_phrase}',
|
|
647
|
+
toolType: 'mcp',
|
|
648
|
+
description: 'Search AWS documentation, blogs, and guides. Each result carries the matching page text.',
|
|
649
|
+
category: 'demo',
|
|
650
|
+
access: 'read-only',
|
|
651
|
+
permission: 'auto',
|
|
652
|
+
loadTier: 'T0',
|
|
653
|
+
paths: ['*'],
|
|
654
|
+
serverUrl: 'https://knowledge-mcp.global.api.aws',
|
|
655
|
+
mcpToolName: 'aws___search_documentation',
|
|
656
|
+
inputJson: `{
|
|
657
|
+
"type": "object",
|
|
658
|
+
"properties": {
|
|
659
|
+
"search_phrase": { "type": "string", "description": "Keywords, with any error text verbatim", "maxLength": 500, "examples": ["Lambda cold start"] },
|
|
660
|
+
"limit": { "type": "integer", "description": "How many results", "minimum": 1, "maximum": 10 }
|
|
661
|
+
},
|
|
662
|
+
"required": ["search_phrase"]
|
|
663
|
+
}`,
|
|
664
|
+
outputJson: `{
|
|
665
|
+
"type": "object",
|
|
666
|
+
"properties": {
|
|
667
|
+
"content": {
|
|
668
|
+
"type": "object",
|
|
669
|
+
"properties": {
|
|
670
|
+
"result": {
|
|
671
|
+
"type": "array",
|
|
672
|
+
"items": {
|
|
673
|
+
"type": "object",
|
|
674
|
+
"properties": {
|
|
675
|
+
"title": { "type": "string" },
|
|
676
|
+
"url": { "type": "string" },
|
|
677
|
+
"context": { "type": "string" }
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}`,
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
id: 'tool-hugging-face',
|
|
689
|
+
data: {
|
|
690
|
+
toolName: 'search_hugging_face',
|
|
691
|
+
activity: 'Searching Hugging Face for {query}',
|
|
692
|
+
activityPast: 'Searched Hugging Face for {query}',
|
|
693
|
+
request: 'search Hugging Face for {query}',
|
|
694
|
+
toolType: 'mcp',
|
|
695
|
+
description: 'Search Hugging Face for models and datasets, with downloads, likes, task and a link for each.',
|
|
696
|
+
category: 'demo',
|
|
697
|
+
access: 'read-only',
|
|
698
|
+
permission: 'auto',
|
|
699
|
+
loadTier: 'T0',
|
|
700
|
+
paths: ['*'],
|
|
701
|
+
serverUrl: 'https://huggingface.co/mcp',
|
|
702
|
+
mcpToolName: 'hub_repo_search',
|
|
703
|
+
inputJson: `{
|
|
704
|
+
"type": "object",
|
|
705
|
+
"properties": {
|
|
706
|
+
"query": { "type": "string", "description": "A model, dataset, or task to look for", "maxLength": 200, "examples": ["speech recognition"] },
|
|
707
|
+
"limit": { "type": "integer", "description": "How many results", "minimum": 1, "maximum": 10 }
|
|
708
|
+
},
|
|
709
|
+
"required": ["query"]
|
|
710
|
+
}`,
|
|
711
|
+
outputJson: `{ "type": "string", "description": "Matching repositories, with their stats and links" }`,
|
|
712
|
+
},
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
id: 'tool-astro-docs',
|
|
716
|
+
data: {
|
|
717
|
+
toolName: 'search_astro_docs',
|
|
718
|
+
activity: 'Searching the Astro docs for {query}',
|
|
719
|
+
activityPast: 'Searched the Astro docs for {query}',
|
|
720
|
+
request: 'search the Astro docs for {query}',
|
|
721
|
+
toolType: 'mcp',
|
|
722
|
+
description: 'Search the official Astro web framework documentation.',
|
|
723
|
+
category: 'demo',
|
|
724
|
+
access: 'read-only',
|
|
725
|
+
permission: 'auto',
|
|
726
|
+
loadTier: 'T0',
|
|
727
|
+
paths: ['*'],
|
|
728
|
+
serverUrl: 'https://mcp.docs.astro.build/mcp',
|
|
729
|
+
mcpToolName: 'search_astro_docs',
|
|
730
|
+
inputJson: `{
|
|
731
|
+
"type": "object",
|
|
732
|
+
"properties": {
|
|
733
|
+
"query": { "type": "string", "description": "What to look up in the Astro docs", "maxLength": 500, "examples": ["content collections"] }
|
|
734
|
+
},
|
|
735
|
+
"required": ["query"]
|
|
736
|
+
}`,
|
|
737
|
+
outputJson: `{
|
|
738
|
+
"type": "object",
|
|
739
|
+
"properties": {
|
|
740
|
+
"search_results": {
|
|
741
|
+
"type": "array",
|
|
742
|
+
"items": {
|
|
743
|
+
"type": "object",
|
|
744
|
+
"properties": {
|
|
745
|
+
"title": { "type": "string" },
|
|
746
|
+
"source_url": { "type": "string" },
|
|
747
|
+
"content": { "type": "string" }
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
"required": ["search_results"]
|
|
753
|
+
}`,
|
|
754
|
+
},
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
id: 'tool-exa-search',
|
|
758
|
+
data: {
|
|
759
|
+
toolName: 'search_web',
|
|
760
|
+
activity: 'Searching the web for {query}',
|
|
761
|
+
activityPast: 'Searched the web for {query}',
|
|
762
|
+
request: 'search the web for {query}',
|
|
763
|
+
toolType: 'mcp',
|
|
764
|
+
description: 'Search the web with Exa for current information, news, people, or companies. Describe the page you want, not just keywords.',
|
|
765
|
+
category: 'demo',
|
|
766
|
+
access: 'read-only',
|
|
767
|
+
permission: 'auto',
|
|
768
|
+
loadTier: 'T0',
|
|
769
|
+
paths: ['*'],
|
|
770
|
+
serverUrl: 'https://mcp.exa.ai/mcp',
|
|
771
|
+
mcpToolName: 'web_search_exa',
|
|
772
|
+
inputJson: `{
|
|
773
|
+
"type": "object",
|
|
774
|
+
"properties": {
|
|
775
|
+
"query": { "type": "string", "description": "A description of the ideal page", "minLength": 1, "maxLength": 500, "examples": ["blog post comparing Cloudflare Workers and AWS Lambda cold starts"] },
|
|
776
|
+
"numResults": { "type": "integer", "description": "How many results", "minimum": 1, "maximum": 10 }
|
|
777
|
+
},
|
|
778
|
+
"required": ["query"]
|
|
779
|
+
}`,
|
|
780
|
+
outputJson: `{ "type": "string", "description": "Titles, links, and highlights from the top results" }`,
|
|
781
|
+
},
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
id: 'tool-discover-tools',
|
|
785
|
+
data: {
|
|
786
|
+
toolName: 'discover_tools',
|
|
787
|
+
toolType: 'function',
|
|
788
|
+
description: 'Discover bonus entertainment tools for this turn. Call before get_cat_fact, tell_joke, get_advice, or random_dog_image.',
|
|
789
|
+
category: 'demo',
|
|
790
|
+
access: 'read-only',
|
|
791
|
+
permission: 'auto',
|
|
792
|
+
loadTier: 'T0',
|
|
793
|
+
paths: ['*'],
|
|
794
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
795
|
+
outputJson: `{
|
|
796
|
+
"type": "object",
|
|
797
|
+
"properties": {
|
|
798
|
+
"loaded": { "type": "array", "items": { "type": "string" } }
|
|
799
|
+
},
|
|
800
|
+
"required": ["loaded"]
|
|
801
|
+
}`,
|
|
802
|
+
stubOutputJson: JSON.stringify({ loaded: [...DISCOVER_LOADED] }),
|
|
803
|
+
},
|
|
804
|
+
},
|
|
805
|
+
{
|
|
806
|
+
id: 'tool-weather-label',
|
|
807
|
+
data: {
|
|
808
|
+
toolName: 'weather_code_label',
|
|
809
|
+
activity: 'Reading the forecast',
|
|
810
|
+
activityPast: 'Forecast: {label}',
|
|
811
|
+
request: 'read the forecast',
|
|
812
|
+
toolType: 'function',
|
|
813
|
+
description: 'Translate an Open-Meteo WMO weathercode into a short label.',
|
|
814
|
+
category: 'demo',
|
|
815
|
+
access: 'read-only',
|
|
816
|
+
permission: 'auto',
|
|
817
|
+
loadTier: 'T0',
|
|
818
|
+
paths: ['*'],
|
|
819
|
+
inputJson: `{
|
|
820
|
+
"type": "object",
|
|
821
|
+
"properties": {
|
|
822
|
+
"weathercode": { "type": "integer", "description": "Open-Meteo WMO weather code", "examples": [2] }
|
|
823
|
+
},
|
|
824
|
+
"required": ["weathercode"]
|
|
825
|
+
}`,
|
|
826
|
+
outputJson: `{
|
|
827
|
+
"type": "object",
|
|
828
|
+
"properties": {
|
|
829
|
+
"weathercode": { "type": "number" },
|
|
830
|
+
"label": { "type": "string" }
|
|
831
|
+
},
|
|
832
|
+
"required": ["label"]
|
|
833
|
+
}`,
|
|
834
|
+
},
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
id: 'tool-plan-day',
|
|
838
|
+
data: {
|
|
839
|
+
toolName: 'plan_day',
|
|
840
|
+
activity: 'Planning a {focus} day in {destination}',
|
|
841
|
+
activityPast: 'Planned your day in {destination}',
|
|
842
|
+
request: 'plan a {focus} day in {destination}',
|
|
843
|
+
toolType: 'function',
|
|
844
|
+
description: 'Draft a simple day plan from destination context (studio stub).',
|
|
845
|
+
category: 'demo',
|
|
846
|
+
access: 'read-write',
|
|
847
|
+
permission: 'auto',
|
|
848
|
+
loadTier: 'T0',
|
|
849
|
+
paths: ['*'],
|
|
850
|
+
inputJson: `{
|
|
851
|
+
"type": "object",
|
|
852
|
+
"properties": {
|
|
853
|
+
"destination": { "type": "string", "description": "City or region", "examples": ["Paris"] },
|
|
854
|
+
"focus": { "type": "string", "description": "What the day centres on, e.g. food or museums", "examples": ["museums"] }
|
|
855
|
+
},
|
|
856
|
+
"required": ["destination"]
|
|
857
|
+
}`,
|
|
858
|
+
outputJson: `{
|
|
859
|
+
"type": "object",
|
|
860
|
+
"properties": {
|
|
861
|
+
"summary": { "type": "string" },
|
|
862
|
+
"stops": { "type": "array", "items": { "type": "string" } }
|
|
863
|
+
},
|
|
864
|
+
"required": ["summary", "stops"]
|
|
865
|
+
}`,
|
|
866
|
+
stubOutputJson: `{
|
|
867
|
+
"summary": "A balanced day mixing local culture, a weather-aware outdoor block, and an easy evening.",
|
|
868
|
+
"stops": [
|
|
869
|
+
"Morning: coffee near the main square",
|
|
870
|
+
"Midday: flagship museum or gallery",
|
|
871
|
+
"Afternoon: walkable neighborhood based on weather",
|
|
872
|
+
"Evening: casual dinner with a local specialty"
|
|
873
|
+
]
|
|
874
|
+
}`,
|
|
875
|
+
},
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
id: 'tool-trip-budget',
|
|
879
|
+
data: {
|
|
880
|
+
toolName: 'trip_budget_estimate',
|
|
881
|
+
activity: 'Estimating a {days}-day budget',
|
|
882
|
+
activityPast: 'About {total} {currency} for {days} days',
|
|
883
|
+
request: 'estimate a {days}-day budget',
|
|
884
|
+
toolType: 'function',
|
|
885
|
+
description: 'Estimate trip cost from days × per-diem (local math, no FX).',
|
|
886
|
+
category: 'demo',
|
|
887
|
+
access: 'read-only',
|
|
888
|
+
permission: 'auto',
|
|
889
|
+
loadTier: 'T0',
|
|
890
|
+
paths: ['*'],
|
|
891
|
+
inputJson: `{
|
|
892
|
+
"type": "object",
|
|
893
|
+
"properties": {
|
|
894
|
+
"days": { "type": "integer", "minimum": 1, "maximum": 30, "description": "Trip length in days", "examples": [5] },
|
|
895
|
+
"perDiem": { "type": "number", "minimum": 0, "description": "Daily budget", "examples": [150] },
|
|
896
|
+
"currency": { "type": "string", "description": "ISO currency code", "examples": ["EUR"] }
|
|
897
|
+
},
|
|
898
|
+
"required": ["days", "perDiem"]
|
|
899
|
+
}`,
|
|
900
|
+
outputJson: `{
|
|
901
|
+
"type": "object",
|
|
902
|
+
"properties": {
|
|
903
|
+
"days": { "type": "number" },
|
|
904
|
+
"perDiem": { "type": "number" },
|
|
905
|
+
"currency": { "type": "string" },
|
|
906
|
+
"total": { "type": "number" }
|
|
907
|
+
},
|
|
908
|
+
"required": ["total"]
|
|
909
|
+
}`,
|
|
910
|
+
},
|
|
911
|
+
},
|
|
912
|
+
{
|
|
913
|
+
id: 'tool-packing',
|
|
914
|
+
data: {
|
|
915
|
+
toolName: 'packing_suggestions',
|
|
916
|
+
activity: 'Packing for {activity}',
|
|
917
|
+
activityPast: 'Packed for {activity}',
|
|
918
|
+
request: 'pack for {activity}',
|
|
919
|
+
toolType: 'function',
|
|
920
|
+
description: 'Suggest a packing list from temperature and activity type.',
|
|
921
|
+
category: 'demo',
|
|
922
|
+
access: 'read-only',
|
|
923
|
+
permission: 'auto',
|
|
924
|
+
loadTier: 'T0',
|
|
925
|
+
paths: ['*'],
|
|
926
|
+
inputJson: `{
|
|
927
|
+
"type": "object",
|
|
928
|
+
"properties": {
|
|
929
|
+
"tempC": { "type": "number", "description": "Expected temperature in °C", "examples": [18] },
|
|
930
|
+
"activity": { "type": "string", "description": "What the trip is for, e.g. hiking or business", "examples": ["hiking"] }
|
|
931
|
+
},
|
|
932
|
+
"required": ["tempC"]
|
|
933
|
+
}`,
|
|
934
|
+
outputJson: `{
|
|
935
|
+
"type": "object",
|
|
936
|
+
"properties": {
|
|
937
|
+
"tempC": { "type": "number" },
|
|
938
|
+
"activity": { "type": "string" },
|
|
939
|
+
"items": { "type": "array", "items": { "type": "string" } }
|
|
940
|
+
},
|
|
941
|
+
"required": ["items"]
|
|
942
|
+
}`,
|
|
943
|
+
},
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
id: 'tool-get-pokemon',
|
|
947
|
+
data: {
|
|
948
|
+
toolName: 'get_pokemon',
|
|
949
|
+
activity: 'Looking up {name}',
|
|
950
|
+
activityPast: 'Found {name}',
|
|
951
|
+
request: 'look up {name}',
|
|
952
|
+
toolType: 'http',
|
|
953
|
+
description: 'Look up a Pokémon by name from the public PokéAPI.',
|
|
954
|
+
category: 'demo',
|
|
955
|
+
access: 'read-only',
|
|
956
|
+
permission: 'auto',
|
|
957
|
+
loadTier: 'T0',
|
|
958
|
+
paths: ['*'],
|
|
959
|
+
endpoint: 'https://pokeapi.co/api/v2/pokemon/{name}',
|
|
960
|
+
method: 'GET',
|
|
961
|
+
pathParams: ['name'],
|
|
962
|
+
inputJson: `{
|
|
963
|
+
"type": "object",
|
|
964
|
+
"properties": {
|
|
965
|
+
"name": { "type": "string", "examples": ["pikachu"] }
|
|
966
|
+
},
|
|
967
|
+
"required": ["name"]
|
|
968
|
+
}`,
|
|
969
|
+
outputJson: `{
|
|
970
|
+
"type": "object",
|
|
971
|
+
"properties": {
|
|
972
|
+
"name": { "type": "string" },
|
|
973
|
+
"height": { "type": "number" },
|
|
974
|
+
"weight": { "type": "number" }
|
|
975
|
+
}
|
|
976
|
+
}`,
|
|
977
|
+
},
|
|
978
|
+
},
|
|
979
|
+
// --- T2 entertainment (require discover_tools) ---
|
|
980
|
+
{
|
|
981
|
+
id: 'tool-cat-fact',
|
|
982
|
+
data: {
|
|
983
|
+
toolName: 'get_cat_fact',
|
|
984
|
+
activity: 'Finding a cat fact',
|
|
985
|
+
activityPast: 'Found a cat fact',
|
|
986
|
+
request: 'find a cat fact',
|
|
987
|
+
toolType: 'http',
|
|
988
|
+
description: 'Return a random cat fact (T2 — call discover_tools first).',
|
|
989
|
+
category: 'demo',
|
|
990
|
+
access: 'read-only',
|
|
991
|
+
permission: 'auto',
|
|
992
|
+
loadTier: 'T2',
|
|
993
|
+
paths: ['*'],
|
|
994
|
+
endpoint: 'https://catfact.ninja/fact?max_length=160',
|
|
995
|
+
method: 'GET',
|
|
996
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
997
|
+
outputJson: `{
|
|
998
|
+
"type": "object",
|
|
999
|
+
"properties": {
|
|
1000
|
+
"fact": { "type": "string" },
|
|
1001
|
+
"length": { "type": "number" }
|
|
1002
|
+
},
|
|
1003
|
+
"required": ["fact"]
|
|
1004
|
+
}`,
|
|
1005
|
+
},
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
id: 'tool-tell-joke',
|
|
1009
|
+
data: {
|
|
1010
|
+
toolName: 'tell_joke',
|
|
1011
|
+
activity: 'Thinking of a joke',
|
|
1012
|
+
activityPast: 'Found a joke',
|
|
1013
|
+
request: 'think of a joke',
|
|
1014
|
+
toolType: 'http',
|
|
1015
|
+
description: 'Tell a random joke (T2 — call discover_tools first).',
|
|
1016
|
+
category: 'demo',
|
|
1017
|
+
access: 'read-only',
|
|
1018
|
+
permission: 'auto',
|
|
1019
|
+
loadTier: 'T2',
|
|
1020
|
+
paths: ['*'],
|
|
1021
|
+
endpoint: 'https://official-joke-api.appspot.com/random_joke',
|
|
1022
|
+
method: 'GET',
|
|
1023
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
1024
|
+
outputJson: `{
|
|
1025
|
+
"type": "object",
|
|
1026
|
+
"properties": {
|
|
1027
|
+
"setup": { "type": "string" },
|
|
1028
|
+
"punchline": { "type": "string" }
|
|
1029
|
+
},
|
|
1030
|
+
"required": ["setup", "punchline"]
|
|
1031
|
+
}`,
|
|
1032
|
+
},
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
id: 'tool-advice',
|
|
1036
|
+
data: {
|
|
1037
|
+
toolName: 'get_advice',
|
|
1038
|
+
activity: 'Finding some advice',
|
|
1039
|
+
activityPast: 'Found some advice',
|
|
1040
|
+
request: 'find some advice',
|
|
1041
|
+
toolType: 'http',
|
|
1042
|
+
description: 'Random travel-style advice slip (T2 — call discover_tools first).',
|
|
1043
|
+
category: 'demo',
|
|
1044
|
+
access: 'read-only',
|
|
1045
|
+
permission: 'auto',
|
|
1046
|
+
loadTier: 'T2',
|
|
1047
|
+
paths: ['*'],
|
|
1048
|
+
endpoint: 'https://api.adviceslip.com/advice',
|
|
1049
|
+
method: 'GET',
|
|
1050
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
1051
|
+
outputJson: `{
|
|
1052
|
+
"type": "object",
|
|
1053
|
+
"properties": {
|
|
1054
|
+
"slip": {
|
|
1055
|
+
"type": "object",
|
|
1056
|
+
"properties": {
|
|
1057
|
+
"advice": { "type": "string" }
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}`,
|
|
1062
|
+
},
|
|
1063
|
+
},
|
|
1064
|
+
{
|
|
1065
|
+
id: 'tool-dog-image',
|
|
1066
|
+
data: {
|
|
1067
|
+
toolName: 'random_dog_image',
|
|
1068
|
+
activity: 'Fetching a dog',
|
|
1069
|
+
activityPast: 'Fetched a dog',
|
|
1070
|
+
request: 'fetch a dog',
|
|
1071
|
+
toolType: 'http',
|
|
1072
|
+
description: 'Random dog photo URL from dog.ceo (T2 — call discover_tools first).',
|
|
1073
|
+
category: 'demo',
|
|
1074
|
+
access: 'read-only',
|
|
1075
|
+
permission: 'auto',
|
|
1076
|
+
loadTier: 'T2',
|
|
1077
|
+
paths: ['*'],
|
|
1078
|
+
endpoint: 'https://dog.ceo/api/breeds/image/random',
|
|
1079
|
+
method: 'GET',
|
|
1080
|
+
inputJson: `{ "type": "object", "properties": {} }`,
|
|
1081
|
+
outputJson: `{
|
|
1082
|
+
"type": "object",
|
|
1083
|
+
"properties": {
|
|
1084
|
+
"message": { "type": "string" },
|
|
1085
|
+
"status": { "type": "string" }
|
|
1086
|
+
},
|
|
1087
|
+
"required": ["message"]
|
|
1088
|
+
}`,
|
|
1089
|
+
},
|
|
1090
|
+
},
|
|
1091
|
+
// --- Code (GitHub raw files and the npm registry; public, no key) ---
|
|
1092
|
+
{
|
|
1093
|
+
id: 'tool-read-repo-file',
|
|
1094
|
+
data: {
|
|
1095
|
+
toolName: 'read_repo_file',
|
|
1096
|
+
activity: 'Reading {path}',
|
|
1097
|
+
activityPast: 'Read {path}',
|
|
1098
|
+
request: 'read {path} in {owner}/{repo}',
|
|
1099
|
+
toolType: 'http',
|
|
1100
|
+
description: 'Read one text file from the default branch of a public GitHub repository, e.g. package.json or README.md.',
|
|
1101
|
+
category: 'demo',
|
|
1102
|
+
access: 'read-only',
|
|
1103
|
+
permission: 'auto',
|
|
1104
|
+
loadTier: 'T0',
|
|
1105
|
+
paths: ['*'],
|
|
1106
|
+
endpoint: 'https://raw.githubusercontent.com/{owner}/{repo}/HEAD/{path}',
|
|
1107
|
+
method: 'GET',
|
|
1108
|
+
pathParams: ['owner', 'repo', 'path'],
|
|
1109
|
+
inputJson: `{
|
|
1110
|
+
"type": "object",
|
|
1111
|
+
"properties": {
|
|
1112
|
+
"owner": { "type": "string", "examples": ["denoland"], "description": "The repository's owner" },
|
|
1113
|
+
"repo": { "type": "string", "examples": ["std"], "description": "The repository's name" },
|
|
1114
|
+
"path": { "type": "string", "examples": ["README.md"], "description": "The file's path from the repository root, e.g. src/index.ts" }
|
|
1115
|
+
},
|
|
1116
|
+
"required": ["owner", "repo", "path"]
|
|
1117
|
+
}`,
|
|
1118
|
+
outputJson: `{ "type": "string" }`,
|
|
1119
|
+
},
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
id: 'tool-lookup-package',
|
|
1123
|
+
data: {
|
|
1124
|
+
toolName: 'lookup_package',
|
|
1125
|
+
activity: 'Looking up {name}',
|
|
1126
|
+
activityPast: 'Looked up {name}',
|
|
1127
|
+
request: 'look up {name}',
|
|
1128
|
+
toolType: 'http',
|
|
1129
|
+
description: 'Look up the latest published version of an npm package: its version, description, licence, and dependencies.',
|
|
1130
|
+
category: 'demo',
|
|
1131
|
+
access: 'read-only',
|
|
1132
|
+
permission: 'auto',
|
|
1133
|
+
loadTier: 'T0',
|
|
1134
|
+
paths: ['*'],
|
|
1135
|
+
endpoint: 'https://registry.npmjs.org/{name}/latest',
|
|
1136
|
+
method: 'GET',
|
|
1137
|
+
pathParams: ['name'],
|
|
1138
|
+
inputJson: `{
|
|
1139
|
+
"type": "object",
|
|
1140
|
+
"properties": {
|
|
1141
|
+
"name": { "type": "string", "examples": ["zod"], "description": "The package name, e.g. zod or @scope/name" }
|
|
1142
|
+
},
|
|
1143
|
+
"required": ["name"]
|
|
1144
|
+
}`,
|
|
1145
|
+
outputJson: `{
|
|
1146
|
+
"type": "object",
|
|
1147
|
+
"properties": {
|
|
1148
|
+
"name": { "type": "string" },
|
|
1149
|
+
"version": { "type": "string" },
|
|
1150
|
+
"description": { "type": "string" },
|
|
1151
|
+
"license": { "type": "string" },
|
|
1152
|
+
"dependencies": { "type": "object" },
|
|
1153
|
+
"peerDependencies": { "type": "object" }
|
|
1154
|
+
},
|
|
1155
|
+
"required": ["name", "version"]
|
|
1156
|
+
}`,
|
|
1157
|
+
},
|
|
1158
|
+
},
|
|
1159
|
+
];
|
|
1160
|
+
/** The tools the travel concierge allows: places, weather, money, trip helpers, and research. */
|
|
1161
|
+
export const DEMO_CONCIERGE_TOOLS = [
|
|
1162
|
+
'geocode_city',
|
|
1163
|
+
'search_places',
|
|
1164
|
+
'reverse_geocode',
|
|
1165
|
+
'lookup_postal_code',
|
|
1166
|
+
'haversine_distance',
|
|
1167
|
+
'get_weather',
|
|
1168
|
+
'weather_code_label',
|
|
1169
|
+
'get_sun_times',
|
|
1170
|
+
'convert_currency',
|
|
1171
|
+
'convert_units',
|
|
1172
|
+
'plan_day',
|
|
1173
|
+
'trip_budget_estimate',
|
|
1174
|
+
'packing_suggestions',
|
|
1175
|
+
'search_web',
|
|
1176
|
+
'wikipedia_summary',
|
|
1177
|
+
'discover_tools',
|
|
1178
|
+
...DISCOVER_LOADED,
|
|
1179
|
+
];
|
|
1180
|
+
/** The tools the code architect allows: docs, repositories, packages, and research. */
|
|
1181
|
+
export const DEMO_ARCHITECT_TOOLS = [
|
|
1182
|
+
'ask_repo_docs',
|
|
1183
|
+
'read_repo_file',
|
|
1184
|
+
'lookup_package',
|
|
1185
|
+
'find_library',
|
|
1186
|
+
'read_library_docs',
|
|
1187
|
+
'search_microsoft_docs',
|
|
1188
|
+
'search_cloudflare_docs',
|
|
1189
|
+
'list_aws_regions',
|
|
1190
|
+
'search_aws_docs',
|
|
1191
|
+
'search_hugging_face',
|
|
1192
|
+
'search_astro_docs',
|
|
1193
|
+
'search_web',
|
|
1194
|
+
'wikipedia_summary',
|
|
1195
|
+
];
|
|
1196
|
+
/** The tools the tool console serves: one of each kind of result, and the two no agent allows. */
|
|
1197
|
+
export const DEMO_CONSOLE_TOOLS = [
|
|
1198
|
+
'get_weather',
|
|
1199
|
+
'search_places',
|
|
1200
|
+
'convert_currency',
|
|
1201
|
+
'ask_repo_docs',
|
|
1202
|
+
'random_dog_image',
|
|
1203
|
+
'get_pokemon',
|
|
1204
|
+
'archive_text_search',
|
|
1205
|
+
];
|
|
1206
|
+
export const DEMO_ARCHITECT_SYSTEM = `Role: Senior software architect who researches before advising.
|
|
1207
|
+
|
|
1208
|
+
Communication Standards:
|
|
1209
|
+
- Readable Formatting: Use markdown where it helps the reader: short headings, bullet lists, code blocks for code, and tables for side-by-side comparisons.
|
|
1210
|
+
- Answer First: Lead with the recommendation, then the reasons and the trade-offs. Name what you could not confirm.
|
|
1211
|
+
|
|
1212
|
+
Tool & Fact Grounding:
|
|
1213
|
+
- Absolute Grounding: Ground claims about a library, a repository, a package version, or a cloud service in the tools before answering. Never invent an API, a version, or a default.
|
|
1214
|
+
- Silent Execution: Never narrate tool calls or announce function names. Work findings into the answer.
|
|
1215
|
+
- Complete Resolution: Finish multi-step research before you answer.
|
|
1216
|
+
|
|
1217
|
+
Audio briefings:
|
|
1218
|
+
- When asked for a podcast, a briefing, or anything to listen to, write a short spoken script of what you found, in plain sentences with no markdown, and pass it to narrate. Then say in one line what the briefing covers.`;
|
|
1219
|
+
export const DEMO_LIVE_CONCIERGE_SYSTEM = `Role: Elite, charismatic travel concierge, on a call.
|
|
1220
|
+
|
|
1221
|
+
Speaking:
|
|
1222
|
+
- Speak in short, natural sentences. No lists, no markdown, no reading out of addresses, or codes unless asked.
|
|
1223
|
+
- Give the recommendation first, then offer one next step.
|
|
1224
|
+
|
|
1225
|
+
Tool & Fact Grounding:
|
|
1226
|
+
- Ground weather, currency, distances, and places in the tools before you answer. Never invent live data.
|
|
1227
|
+
- Never name a tool or say that you are calling one.`;
|
|
1228
|
+
export function demoToolSpecs() {
|
|
1229
|
+
return DEMO_TOOL_SPECS;
|
|
1230
|
+
}
|