@synap-core/workspace-templates 0.12.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +483 -0
- package/automations/bookmark-enrichment.automation.json +321 -0
- package/automations/github-pr-events.automation.json +505 -0
- package/automations/mail-feed.automation.json +86 -0
- package/automations/ship-a-change-checks-green.automation.json +106 -0
- package/automations/ship-a-change-checks-red.automation.json +106 -0
- package/automations/ship-a-change-deployed.automation.json +56 -0
- package/automations/ship-a-change-pr-merged.automation.json +110 -0
- package/automations/ship-a-change-pr-opened.automation.json +104 -0
- package/automations/url-bookmark-capture.automation.json +132 -0
- package/capabilities/agency-skills.capability.json +157 -0
- package/capabilities/apify.capability.json +265 -0
- package/capabilities/apollo.capability.json +120 -0
- package/capabilities/arch-backend.capability.json +97 -0
- package/capabilities/arch-client-intelligence.capability.json +401 -0
- package/capabilities/backblaze-b2.capability.json +205 -0
- package/capabilities/cal-com.capability.json +266 -0
- package/capabilities/canva.capability.json +274 -0
- package/capabilities/claude-code-routines.capability.json +172 -0
- package/capabilities/claude-managed-agents.capability.json +215 -0
- package/capabilities/client-comms-report.capability.json +246 -0
- package/capabilities/content-idea-to-production.capability.json +29 -0
- package/capabilities/datagouv.capability.json +315 -0
- package/capabilities/discord-bot.capability.json +157 -0
- package/capabilities/dropbox.capability.json +281 -0
- package/capabilities/exa.capability.json +109 -0
- package/capabilities/fal-ai.capability.json +83 -0
- package/capabilities/fal-media-lab.capability.json +158 -0
- package/capabilities/fireflies.capability.json +191 -0
- package/capabilities/freellmapi.capability.json +114 -0
- package/capabilities/generic-apikey.capability.json +92 -0
- package/capabilities/github-merge.capability.json +99 -0
- package/capabilities/github-read.capability.json +325 -0
- package/capabilities/governance-tighten-recommender.capability.json +81 -0
- package/capabilities/jev.capability.json +226 -0
- package/capabilities/lead-conversion-enrollment.capability.json +246 -0
- package/capabilities/mail-feed.capability.json +277 -0
- package/capabilities/mailgun.capability.json +52 -0
- package/capabilities/nango-google.capability.json +639 -0
- package/capabilities/notion.capability.json +417 -0
- package/capabilities/omniroute.capability.json +137 -0
- package/capabilities/posthog-analytics.capability.json +258 -0
- package/capabilities/postiz.capability.json +467 -0
- package/capabilities/proactive-digest.capability.json +190 -0
- package/capabilities/proton.capability.json +288 -0
- package/capabilities/replicate-rvm.capability.json +97 -0
- package/capabilities/research-methods.capability.json +57 -0
- package/capabilities/shopify.capability.json +395 -0
- package/capabilities/slack.capability.json +369 -0
- package/capabilities/stripe.capability.json +420 -0
- package/capabilities/telegram-bridge.capability.json +56 -0
- package/capabilities/treg.capability.json +102 -0
- package/capabilities/unipile-linkedin.capability.json +471 -0
- package/capabilities/vercel.capability.json +424 -0
- package/dist/define-CPS0n8BV.d.ts +1331 -0
- package/dist/index.d.ts +174 -900
- package/dist/index.js +26148 -23931
- package/dist/index.js.map +1 -1
- package/dist/wire.d.ts +222 -0
- package/dist/wire.js +77 -0
- package/dist/wire.js.map +1 -0
- package/package.json +27 -4
- package/packs/bookmark-views-pack.json +33 -0
- package/packs/crm-pack.json +76 -0
- package/packs/customer-profile.json +28 -0
- package/packs/deep-research.playbook.json +30 -0
- package/packs/event-views-pack.json +33 -0
- package/packs/habit-profile.json +27 -0
- package/packs/hr-pack.json +54 -0
- package/packs/invoice-profile.json +28 -0
- package/packs/knowledge-base-pack.json +56 -0
- package/packs/meeting-profile.json +29 -0
- package/packs/product-profile.json +30 -0
- package/packs/project-management-pack.json +49 -0
- package/packs/recipe-profile.json +29 -0
- package/packs/task-views-pack.json +39 -0
- package/retired.yaml +136 -0
- package/skills/app-factory-build-slice/SKILL.md +70 -0
- package/skills/app-factory-build-slice.catalog.json +17 -0
- package/skills/app-factory-design-canvas/SKILL.md +96 -0
- package/skills/app-factory-design-canvas.catalog.json +17 -0
- package/skills/app-factory-design-review/SKILL.md +99 -0
- package/skills/app-factory-design-review.catalog.json +18 -0
- package/skills/app-factory-research/SKILL.md +123 -0
- package/skills/app-factory-research.catalog.json +17 -0
- package/skills/bookmark-enrichment/SKILL.md +40 -0
- package/skills/carousel-format/carousel-format.skill.json +18 -0
- package/skills/collage-broll/collage-broll.skill.json +20 -0
- package/skills/content-taste/content-taste.skill.json +18 -0
- package/skills/creative-director/creative-director.skill.json +18 -0
- package/skills/design-critique/SKILL.md +135 -0
- package/skills/design-critique.catalog.json +12 -0
- package/skills/designing-with-real-components/SKILL.md +140 -0
- package/skills/designing-with-real-components.catalog.json +12 -0
- package/skills/edit-loop/edit-loop.skill.json +25 -0
- package/skills/facecam-edit/facecam-edit.skill.json +24 -0
- package/skills/mapping-the-server/SKILL.md +54 -0
- package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
- package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
- package/skills/open-design-edit/open-design-edit.skill.json +24 -0
- package/skills/reading-client-progress/SKILL.md +65 -0
- package/skills/routing-to-channels/SKILL.md +54 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/skills/video-direction/video-direction.skill.json +20 -0
- package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
- package/skills/video-toolbox/video-toolbox.skill.json +20 -0
- package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
- package/src/agency-os.yaml +122 -0
- package/src/agent-os-skill-slugs.test.ts +65 -0
- package/src/apify-social-reader.test.ts +317 -0
- package/src/base.yaml +85 -39
- package/src/blockchain-ecosystem.yaml +1 -0
- package/src/brand-library.yaml +525 -14
- package/src/builder-dev-fold.template.test.ts +113 -0
- package/src/builder.yaml +779 -91
- package/src/business-model-catalog-description.test.ts +47 -0
- package/src/business-model-grp.template.test.ts +214 -0
- package/src/business-model.yaml +296 -49
- package/src/catalog-safety.test.ts +198 -0
- package/src/catalog.template-items.test.ts +75 -0
- package/src/catalog.ts +66 -2
- package/src/concept-guard.test.ts +28 -8
- package/src/concept-guard.ts +2 -2
- package/src/content-creation.template.test.ts +52 -0
- package/src/content-creation.yaml +192 -0
- package/src/content-os.edit-loop.template.test.ts +210 -0
- package/src/content-os.publish-due-posts.template.test.ts +261 -0
- package/src/content-os.template.test.ts +322 -0
- package/src/content-os.video-takes.template.test.ts +338 -0
- package/src/content-os.work-a-take.template.test.ts +125 -0
- package/src/content-os.yaml +1830 -39
- package/src/content-studio-retired.template.test.ts +82 -0
- package/src/corpus-flow-validity.test.ts +4 -5
- package/src/crm-absorbs-outreach.template.test.ts +117 -0
- package/src/crm-build-plan.template.test.ts +128 -0
- package/src/crm-lists.template.test.ts +96 -0
- package/src/crm-messages-cadence.template.test.ts +164 -0
- package/src/crm-one-send-door.template.test.ts +65 -0
- package/src/crm.yaml +1456 -181
- package/src/decisions-wave.template.test.ts +186 -0
- package/src/define.ts +130 -17
- package/src/design-to-implementation.template.test.ts +94 -0
- package/src/domain-template-type.test.ts +75 -0
- package/src/ecosystem.yaml +27 -66
- package/src/enterprise-os.yaml +10 -134
- package/src/facecam-edit.audio-studio.test.ts +188 -0
- package/src/fal-generate-image.test.ts +200 -0
- package/src/fal-media-lab-pod-files.test.ts +180 -0
- package/src/finance.yaml +254 -1
- package/src/foundation.yaml +78 -38
- package/src/frame-host-modules.d.mts +6 -0
- package/src/frame-host-modules.mjs +58 -0
- package/src/generate.mjs +9 -3
- package/src/github-merge.test.ts +210 -0
- package/src/grants.yaml +46 -17
- package/src/hr.yaml +39 -6
- package/src/index.ts +36 -1
- package/src/intent.test.ts +161 -0
- package/src/internal-runbook.yaml +19 -1
- package/src/jev.test.ts +356 -0
- package/src/legal.yaml +33 -1
- package/src/life-os.yaml +51 -240
- package/src/lifecycle-coverage.test.ts +124 -0
- package/src/lifecycle-declarations.test.ts +252 -0
- package/src/lifecycle-presets.test.ts +468 -0
- package/src/lifecycle-presets.ts +494 -0
- package/src/lifecycle-stuck.test.ts +46 -0
- package/src/lifecycle-waits.parity.test.ts +319 -0
- package/src/marketing.yaml +108 -4
- package/src/meetings-knowledge.yaml +18 -0
- package/src/networking.yaml +23 -2
- package/src/operations.yaml +304 -4
- package/src/pipeline-views.template.test.ts +88 -0
- package/src/playbook-goal-placeholders.test.ts +57 -0
- package/src/postiz-contract.test.ts +134 -0
- package/src/presentation-declarations.test.ts +174 -0
- package/src/process-contract.validate.test.ts +352 -0
- package/src/project-management.yaml +39 -740
- package/src/publish-body.d.mts +29 -0
- package/src/publish-body.mjs +74 -0
- package/src/publish-body.test.ts +74 -0
- package/src/publish-official-lib.test.ts +176 -0
- package/src/replicate-rvm.test.ts +504 -0
- package/src/research-base.yaml +119 -20
- package/src/research-decision.yaml +60 -3
- package/src/reserved-profile-slugs.test.ts +83 -0
- package/src/retired-goal-kinds.test.ts +58 -0
- package/src/role-reference-and-step-domain.test.ts +192 -0
- package/src/seed-obligation.test.ts +1 -6
- package/src/send-message-maps.test.ts +227 -0
- package/src/shared-role-ssot.test.ts +40 -2
- package/src/ship-a-change.template.test.ts +177 -0
- package/src/skills.test.ts +170 -0
- package/src/social.yaml +85 -27
- package/src/space-packages.freshness.test.ts +97 -0
- package/src/space-packages.generated.ts +40 -0
- package/src/space-packages.test.ts +125 -0
- package/src/space-packages.ts +73 -0
- package/src/start.test.ts +188 -0
- package/src/task-intents.test.ts +293 -0
- package/src/templates.ts +20851 -21496
- package/src/types.ts +443 -60
- package/src/unipile-publish-post.test.ts +162 -0
- package/src/validate-flow.drift.test.ts +2 -3
- package/src/validate-flow.ts +22 -2
- package/src/validate-onboarding.test.ts +59 -0
- package/src/validate.test.ts +71 -4
- package/src/validate.ts +1335 -7
- package/src/wire-core.ts +231 -0
- package/src/wire.test.ts +159 -0
- package/src/wire.ts +107 -0
- package/src/agent-fleet.yaml +0 -1645
- package/src/business-developer.template.test.ts +0 -351
- package/src/business-developer.yaml +0 -860
- package/src/content-studio.yaml +0 -361
- package/src/dev-dashboard.yaml +0 -990
- package/src/outreach-comms.yaml +0 -486
- package/src/the-arch.yaml +0 -201
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
{
|
|
2
|
+
"apiVersion": "synap/v1",
|
|
3
|
+
"kind": "capability",
|
|
4
|
+
"meta": {
|
|
5
|
+
"slug": "notion",
|
|
6
|
+
"name": "Notion — Workspace & Knowledge",
|
|
7
|
+
"description": "Notion workspace operations through one Nango OAuth connection (Notion REST API): search pages and databases, read/create pages, list and query databases, and read/append block children. Search and query default their page size (max 100). Connect your Notion account to use it.",
|
|
8
|
+
"tags": [
|
|
9
|
+
"capability"
|
|
10
|
+
],
|
|
11
|
+
"isPublic": true,
|
|
12
|
+
"syncByDefault": true
|
|
13
|
+
},
|
|
14
|
+
"spec": {
|
|
15
|
+
"key": "notion",
|
|
16
|
+
"name": "Notion — Workspace & Knowledge",
|
|
17
|
+
"description": "Notion workspace operations through ONE Nango OAuth connection (Notion REST API v1). Search the pages and databases a user has shared with the integration; read a page's properties, a database's schema, or a page/block's children; and create pages or append text blocks. PRECONDITION: the 'notion' integration must be declared + configured on the pod's Nango with base URL https://api.notion.com, and the acting user must connect their Notion account via Connectors; the dispatcher resolves the most-recent notion connection automatically. SCOPES: Notion OAuth is capability-based, not scope-string-based — at connect time the user picks which pages/databases to grant, and the integration receives read + insert + update content access to exactly those (Notion 'Read content' / 'Insert content' / 'Update content'). Paths are RELATIVE to the Nango notion integration's base URL (https://api.notion.com) — no baseUrlOverride, so no provider-proxy-host allowlist entry is needed. Every call sends the required header Notion-Version: 2022-06-28. READS (GET, POST /v1/search, POST .../query) return data inline and auto-run; WRITES (POST /v1/pages, PATCH /v1/blocks/{id}/children) are side-effecting and route through the capability-execution gate. CAVEATS: (1) the Notion REST API PINNED here is 2022-06-28 — newer Notion-Versions rename databases to 'data sources' and move query/retrieve to /v1/data_sources/{id}/query, so changing the header changes these paths; (2) the pod's declarative body interpolation emits every interpolated value as a JSON STRING, so a numeric body field (page_size on the POST endpoints) is sent as \"25\" — verify at first run and, if Notion rejects it, either hardcode the literal or move that verb to kind:'code'; (3) response-field shaping is best-effort and confirmed against the live API at first run.",
|
|
18
|
+
"params": [],
|
|
19
|
+
"vault": [],
|
|
20
|
+
"tools": [
|
|
21
|
+
{
|
|
22
|
+
"name": "notion",
|
|
23
|
+
"kind": "provider",
|
|
24
|
+
"description": "Notion REST API access through Nango. credentialRef nango://notion resolves the user's Notion OAuth connection (Connection-Id + Provider-Config-Key) and proxies to the integration's base URL (https://api.notion.com). Every call sends Notion-Version: 2022-06-28.",
|
|
25
|
+
"credentialRef": "nango://notion",
|
|
26
|
+
"executor": "is-agent",
|
|
27
|
+
"config": {
|
|
28
|
+
"providerConfigKey": "notion"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"skills": [
|
|
33
|
+
{
|
|
34
|
+
"name": "notion_search",
|
|
35
|
+
"intent": "search_external",
|
|
36
|
+
"kind": "declarative",
|
|
37
|
+
"scope": "pod",
|
|
38
|
+
"description": "Searches the user's Notion workspace by title across pages AND databases (most recently edited first). Returns raw page/database objects under `results`. Args: { query: string }. NOTE: page size is hardcoded to 25 in the request body (Notion accepts page_size as a number, but the declarative engine stringifies every interpolated value, so the param cannot be passed through). Use notion_query_database with its cursor for pagination.",
|
|
39
|
+
"requires": [
|
|
40
|
+
"notion"
|
|
41
|
+
],
|
|
42
|
+
"executionMode": "sync",
|
|
43
|
+
"timeoutSeconds": 60,
|
|
44
|
+
"parameters": {
|
|
45
|
+
"query": "string"
|
|
46
|
+
},
|
|
47
|
+
"providerSpec": {
|
|
48
|
+
"tool": "notion",
|
|
49
|
+
"method": "POST",
|
|
50
|
+
"pathTemplate": "/v1/search",
|
|
51
|
+
"headers": {
|
|
52
|
+
"Notion-Version": "2022-06-28"
|
|
53
|
+
},
|
|
54
|
+
"body": {
|
|
55
|
+
"query": "{{query}}",
|
|
56
|
+
"page_size": 25
|
|
57
|
+
},
|
|
58
|
+
"paramMapping": {
|
|
59
|
+
"query": {
|
|
60
|
+
"required": true
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"responseShape": {
|
|
64
|
+
"collectionPath": "results",
|
|
65
|
+
"collectionAs": "results",
|
|
66
|
+
"scalar": {
|
|
67
|
+
"count": "@count",
|
|
68
|
+
"nextCursor": "next_cursor",
|
|
69
|
+
"hasMore": "has_more"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "notion_get_page",
|
|
76
|
+
"intent": "fetch_record",
|
|
77
|
+
"kind": "declarative",
|
|
78
|
+
"scope": "pod",
|
|
79
|
+
"description": "Gets one page by id — its property values, parent, url and timestamps. Args: { pageId: string }.",
|
|
80
|
+
"requires": [
|
|
81
|
+
"notion"
|
|
82
|
+
],
|
|
83
|
+
"executionMode": "sync",
|
|
84
|
+
"timeoutSeconds": 60,
|
|
85
|
+
"parameters": {
|
|
86
|
+
"pageId": "string"
|
|
87
|
+
},
|
|
88
|
+
"providerSpec": {
|
|
89
|
+
"tool": "notion",
|
|
90
|
+
"method": "GET",
|
|
91
|
+
"pathTemplate": "/v1/pages/{{pageId}}",
|
|
92
|
+
"headers": {
|
|
93
|
+
"Notion-Version": "2022-06-28"
|
|
94
|
+
},
|
|
95
|
+
"paramMapping": {
|
|
96
|
+
"pageId": {
|
|
97
|
+
"required": true,
|
|
98
|
+
"encode": "uri"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"responseShape": {
|
|
102
|
+
"scalar": {
|
|
103
|
+
"id": "id",
|
|
104
|
+
"object": "object",
|
|
105
|
+
"url": "url",
|
|
106
|
+
"createdTime": "created_time",
|
|
107
|
+
"lastEdited": "last_edited_time",
|
|
108
|
+
"archived": "archived",
|
|
109
|
+
"parentType": "parent.type",
|
|
110
|
+
"properties": "properties"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "notion_create_page",
|
|
117
|
+
"intent": "manage_file",
|
|
118
|
+
"kind": "declarative",
|
|
119
|
+
"scope": "pod",
|
|
120
|
+
"description": "Creates a new page as a CHILD of a parent page, with the given title. Side-effecting write — routes through the capability-execution gate. Args: { parent: string (parent PAGE id), title: string }.",
|
|
121
|
+
"requires": [
|
|
122
|
+
"notion"
|
|
123
|
+
],
|
|
124
|
+
"executionMode": "sync",
|
|
125
|
+
"timeoutSeconds": 60,
|
|
126
|
+
"parameters": {
|
|
127
|
+
"parent": "string",
|
|
128
|
+
"title": "string"
|
|
129
|
+
},
|
|
130
|
+
"providerSpec": {
|
|
131
|
+
"tool": "notion",
|
|
132
|
+
"method": "POST",
|
|
133
|
+
"pathTemplate": "/v1/pages",
|
|
134
|
+
"headers": {
|
|
135
|
+
"Notion-Version": "2022-06-28"
|
|
136
|
+
},
|
|
137
|
+
"body": {
|
|
138
|
+
"parent": {
|
|
139
|
+
"page_id": "{{parent}}"
|
|
140
|
+
},
|
|
141
|
+
"properties": {
|
|
142
|
+
"title": {
|
|
143
|
+
"title": [
|
|
144
|
+
{
|
|
145
|
+
"type": "text",
|
|
146
|
+
"text": {
|
|
147
|
+
"content": "{{title}}"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"paramMapping": {
|
|
155
|
+
"parent": {
|
|
156
|
+
"required": true
|
|
157
|
+
},
|
|
158
|
+
"title": {
|
|
159
|
+
"required": true
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"responseShape": {
|
|
163
|
+
"scalar": {
|
|
164
|
+
"id": "id",
|
|
165
|
+
"object": "object",
|
|
166
|
+
"url": "url",
|
|
167
|
+
"createdTime": "created_time"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"name": "notion_list_databases",
|
|
174
|
+
"intent": "list_records",
|
|
175
|
+
"kind": "declarative",
|
|
176
|
+
"scope": "pod",
|
|
177
|
+
"description": "Lists the databases the user has granted access to, each with its title and url (search filtered to databases). Args: {}. NOTE: page size is hardcoded to 25 in the request body (Notion accepts page_size as a number, but the declarative engine stringifies every interpolated value, so the param cannot be passed through).",
|
|
178
|
+
"requires": [
|
|
179
|
+
"notion"
|
|
180
|
+
],
|
|
181
|
+
"executionMode": "sync",
|
|
182
|
+
"timeoutSeconds": 60,
|
|
183
|
+
"parameters": {},
|
|
184
|
+
"providerSpec": {
|
|
185
|
+
"tool": "notion",
|
|
186
|
+
"method": "POST",
|
|
187
|
+
"pathTemplate": "/v1/search",
|
|
188
|
+
"headers": {
|
|
189
|
+
"Notion-Version": "2022-06-28"
|
|
190
|
+
},
|
|
191
|
+
"body": {
|
|
192
|
+
"filter": {
|
|
193
|
+
"property": "object",
|
|
194
|
+
"value": "database"
|
|
195
|
+
},
|
|
196
|
+
"page_size": 25
|
|
197
|
+
},
|
|
198
|
+
"paramMapping": {},
|
|
199
|
+
"responseShape": {
|
|
200
|
+
"collectionPath": "results",
|
|
201
|
+
"collectionAs": "databases",
|
|
202
|
+
"item": {
|
|
203
|
+
"id": "id",
|
|
204
|
+
"title": "title.0.plain_text",
|
|
205
|
+
"url": "url",
|
|
206
|
+
"createdTime": "created_time",
|
|
207
|
+
"lastEdited": "last_edited_time"
|
|
208
|
+
},
|
|
209
|
+
"scalar": {
|
|
210
|
+
"count": "@count",
|
|
211
|
+
"nextCursor": "next_cursor",
|
|
212
|
+
"hasMore": "has_more"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"name": "notion_query_database",
|
|
219
|
+
"intent": "list_records",
|
|
220
|
+
"kind": "declarative",
|
|
221
|
+
"scope": "pod",
|
|
222
|
+
"description": "Queries a database and returns its rows (pages). Each row carries its raw `properties` so any column can be read (the title column's name varies per database). Args: { databaseId: string }. NOTE: page size is hardcoded to 25 in the request body (Notion accepts page_size as a number, but the declarative engine stringifies every interpolated value, so the param cannot be passed through). Use the response's nextCursor to page through results.",
|
|
223
|
+
"requires": [
|
|
224
|
+
"notion"
|
|
225
|
+
],
|
|
226
|
+
"executionMode": "sync",
|
|
227
|
+
"timeoutSeconds": 60,
|
|
228
|
+
"parameters": {
|
|
229
|
+
"databaseId": "string"
|
|
230
|
+
},
|
|
231
|
+
"providerSpec": {
|
|
232
|
+
"tool": "notion",
|
|
233
|
+
"method": "POST",
|
|
234
|
+
"pathTemplate": "/v1/databases/{{databaseId}}/query",
|
|
235
|
+
"headers": {
|
|
236
|
+
"Notion-Version": "2022-06-28"
|
|
237
|
+
},
|
|
238
|
+
"body": {
|
|
239
|
+
"page_size": 25
|
|
240
|
+
},
|
|
241
|
+
"paramMapping": {
|
|
242
|
+
"databaseId": {
|
|
243
|
+
"required": true,
|
|
244
|
+
"encode": "uri"
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"responseShape": {
|
|
248
|
+
"collectionPath": "results",
|
|
249
|
+
"collectionAs": "rows",
|
|
250
|
+
"item": {
|
|
251
|
+
"id": "id",
|
|
252
|
+
"url": "url",
|
|
253
|
+
"createdTime": "created_time",
|
|
254
|
+
"lastEdited": "last_edited_time",
|
|
255
|
+
"archived": "archived",
|
|
256
|
+
"properties": "properties"
|
|
257
|
+
},
|
|
258
|
+
"scalar": {
|
|
259
|
+
"count": "@count",
|
|
260
|
+
"nextCursor": "next_cursor",
|
|
261
|
+
"hasMore": "has_more",
|
|
262
|
+
"databaseId": "{{databaseId}}"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"name": "notion_get_database",
|
|
269
|
+
"intent": "fetch_record",
|
|
270
|
+
"kind": "declarative",
|
|
271
|
+
"scope": "pod",
|
|
272
|
+
"description": "Gets one database's metadata AND schema — `properties` holds the field definitions a row must supply. Args: { databaseId: string }.",
|
|
273
|
+
"requires": [
|
|
274
|
+
"notion"
|
|
275
|
+
],
|
|
276
|
+
"executionMode": "sync",
|
|
277
|
+
"timeoutSeconds": 60,
|
|
278
|
+
"parameters": {
|
|
279
|
+
"databaseId": "string"
|
|
280
|
+
},
|
|
281
|
+
"providerSpec": {
|
|
282
|
+
"tool": "notion",
|
|
283
|
+
"method": "GET",
|
|
284
|
+
"pathTemplate": "/v1/databases/{{databaseId}}",
|
|
285
|
+
"headers": {
|
|
286
|
+
"Notion-Version": "2022-06-28"
|
|
287
|
+
},
|
|
288
|
+
"paramMapping": {
|
|
289
|
+
"databaseId": {
|
|
290
|
+
"required": true,
|
|
291
|
+
"encode": "uri"
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"responseShape": {
|
|
295
|
+
"scalar": {
|
|
296
|
+
"id": "id",
|
|
297
|
+
"object": "object",
|
|
298
|
+
"title": "title.0.plain_text",
|
|
299
|
+
"url": "url",
|
|
300
|
+
"createdTime": "created_time",
|
|
301
|
+
"lastEdited": "last_edited_time",
|
|
302
|
+
"properties": "properties"
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"name": "notion_get_block_children",
|
|
309
|
+
"intent": "list_records",
|
|
310
|
+
"kind": "declarative",
|
|
311
|
+
"scope": "pod",
|
|
312
|
+
"description": "Lists the child blocks of a page or block (raw block objects — a block's text lives under its own type key, e.g. paragraph.rich_text[].plain_text). Args: { blockId: string (a page id or block id), page_size?: number (default 100, max 100) }.",
|
|
313
|
+
"requires": [
|
|
314
|
+
"notion"
|
|
315
|
+
],
|
|
316
|
+
"executionMode": "sync",
|
|
317
|
+
"timeoutSeconds": 60,
|
|
318
|
+
"parameters": {
|
|
319
|
+
"blockId": "string"
|
|
320
|
+
},
|
|
321
|
+
"providerSpec": {
|
|
322
|
+
"tool": "notion",
|
|
323
|
+
"method": "GET",
|
|
324
|
+
"pathTemplate": "/v1/blocks/{{blockId}}/children",
|
|
325
|
+
"headers": {
|
|
326
|
+
"Notion-Version": "2022-06-28"
|
|
327
|
+
},
|
|
328
|
+
"query": {
|
|
329
|
+
"page_size": 25
|
|
330
|
+
},
|
|
331
|
+
"paramMapping": {
|
|
332
|
+
"blockId": {
|
|
333
|
+
"required": true,
|
|
334
|
+
"encode": "uri"
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"responseShape": {
|
|
338
|
+
"collectionPath": "results",
|
|
339
|
+
"collectionAs": "blocks",
|
|
340
|
+
"scalar": {
|
|
341
|
+
"count": "@count",
|
|
342
|
+
"nextCursor": "next_cursor",
|
|
343
|
+
"hasMore": "has_more",
|
|
344
|
+
"blockId": "{{blockId}}"
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"name": "notion_append_block_children",
|
|
351
|
+
"intent": "manage_file",
|
|
352
|
+
"kind": "declarative",
|
|
353
|
+
"scope": "pod",
|
|
354
|
+
"description": "Appends a paragraph of text as a new child block under a page or block. Side-effecting write — routes through the capability-execution gate. Args: { blockId: string (parent page or block id), text: string }. NOTE: appends ONE paragraph block (a single rich-text run); richer block types need a code skill.",
|
|
355
|
+
"requires": [
|
|
356
|
+
"notion"
|
|
357
|
+
],
|
|
358
|
+
"executionMode": "sync",
|
|
359
|
+
"timeoutSeconds": 60,
|
|
360
|
+
"parameters": {
|
|
361
|
+
"blockId": "string",
|
|
362
|
+
"text": "string"
|
|
363
|
+
},
|
|
364
|
+
"providerSpec": {
|
|
365
|
+
"tool": "notion",
|
|
366
|
+
"method": "PATCH",
|
|
367
|
+
"pathTemplate": "/v1/blocks/{{blockId}}/children",
|
|
368
|
+
"headers": {
|
|
369
|
+
"Notion-Version": "2022-06-28"
|
|
370
|
+
},
|
|
371
|
+
"body": {
|
|
372
|
+
"children": [
|
|
373
|
+
{
|
|
374
|
+
"object": "block",
|
|
375
|
+
"type": "paragraph",
|
|
376
|
+
"paragraph": {
|
|
377
|
+
"rich_text": [
|
|
378
|
+
{
|
|
379
|
+
"type": "text",
|
|
380
|
+
"text": {
|
|
381
|
+
"content": "{{text}}"
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
]
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
]
|
|
388
|
+
},
|
|
389
|
+
"paramMapping": {
|
|
390
|
+
"blockId": {
|
|
391
|
+
"required": true,
|
|
392
|
+
"encode": "uri"
|
|
393
|
+
},
|
|
394
|
+
"text": {
|
|
395
|
+
"required": true
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
"responseShape": {
|
|
399
|
+
"collectionPath": "results",
|
|
400
|
+
"collectionAs": "blocks",
|
|
401
|
+
"scalar": {
|
|
402
|
+
"count": "@count",
|
|
403
|
+
"blockId": "{{blockId}}"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
],
|
|
409
|
+
"provides": [
|
|
410
|
+
"fetch_record",
|
|
411
|
+
"list_records",
|
|
412
|
+
"manage_file",
|
|
413
|
+
"search_external"
|
|
414
|
+
]
|
|
415
|
+
},
|
|
416
|
+
"dependencies": []
|
|
417
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
{
|
|
2
|
+
"apiVersion": "synap/v1",
|
|
3
|
+
"kind": "capability",
|
|
4
|
+
"meta": {
|
|
5
|
+
"slug": "omniroute",
|
|
6
|
+
"name": "OmniRoute — Sovereign Inference Gateway",
|
|
7
|
+
"description": "Connects a self-hosted OmniRoute gateway so agents can see its model catalog, routing decisions, per-provider health, cost and usage. Changing routing or flushing caches needs your approval. Needs a running OmniRoute instance (eve add omniroute) and an inference key from its dashboard.",
|
|
8
|
+
"tags": [
|
|
9
|
+
"capability"
|
|
10
|
+
],
|
|
11
|
+
"isPublic": true,
|
|
12
|
+
"syncByDefault": true
|
|
13
|
+
},
|
|
14
|
+
"spec": {
|
|
15
|
+
"key": "omniroute",
|
|
16
|
+
"name": "OmniRoute — Sovereign Inference Gateway",
|
|
17
|
+
"description": "Connects a self-hosted OmniRoute gateway (many upstream LLM providers behind one OpenAI-compatible /v1 endpoint, with its own dashboard) to this pod as a governed MCP server. Agents get live introspection — the model catalog, routing strategy, per-provider health, cost and usage — as INLINE read tools. Anything that CHANGES the gateway is a WRITE and goes through review. PRECONDITION: a running OmniRoute instance (`eve add omniroute`) and an inference key from its dashboard API Keys page.",
|
|
18
|
+
"params": [
|
|
19
|
+
{
|
|
20
|
+
"name": "baseUrl",
|
|
21
|
+
"label": "Gateway URL",
|
|
22
|
+
"type": "text",
|
|
23
|
+
"required": true,
|
|
24
|
+
"description": "Base URL of the OmniRoute gateway WITHOUT a trailing path, reachable from the intelligence service — e.g. https://omniroute.example.com. The MCP endpoint is <baseUrl>/api/mcp (note the /api prefix: /mcp does not exist)."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "apiKey",
|
|
28
|
+
"label": "Inference API key",
|
|
29
|
+
"type": "text",
|
|
30
|
+
"required": true,
|
|
31
|
+
"description": "An inference key (sk-…) from OmniRoute's dashboard → API Keys. Stored server-encrypted as a pod-wide shared key; used only as the MCP transport's Authorization header, never shown to agents. A plain inference key gets 403 on OmniRoute's management routes, so do not expect the write tools below to work unless the key carries manage/admin scope."
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"vault": [
|
|
35
|
+
{
|
|
36
|
+
"ref": "inferenceKey",
|
|
37
|
+
"name": "OmniRoute inference key",
|
|
38
|
+
"value": "{{apiKey}}",
|
|
39
|
+
"type": "api_key",
|
|
40
|
+
"podWide": true,
|
|
41
|
+
"description": "Service credential for the OmniRoute gateway's /api/mcp endpoint."
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"mcpServers": [
|
|
45
|
+
{
|
|
46
|
+
"slug": "omniroute",
|
|
47
|
+
"name": "OmniRoute",
|
|
48
|
+
"description": "Sovereign inference gateway introspection: model catalog, routing, provider health, cost and usage.",
|
|
49
|
+
"transport": "http",
|
|
50
|
+
"url": "{{baseUrl}}/api/mcp",
|
|
51
|
+
"enabled": true,
|
|
52
|
+
"auth": {
|
|
53
|
+
"credentialRef": "inferenceKey",
|
|
54
|
+
"header": "Authorization",
|
|
55
|
+
"prefix": "Bearer "
|
|
56
|
+
},
|
|
57
|
+
"toolPolicy": {
|
|
58
|
+
"default": "governed",
|
|
59
|
+
"inline": [
|
|
60
|
+
"omniroute_get_health",
|
|
61
|
+
"omniroute_list_models_catalog",
|
|
62
|
+
"omniroute_best_combo_for_task",
|
|
63
|
+
"omniroute_explain_route",
|
|
64
|
+
"omniroute_simulate_route",
|
|
65
|
+
"omniroute_get_provider_metrics",
|
|
66
|
+
"omniroute_get_combo_metrics",
|
|
67
|
+
"omniroute_cost_report",
|
|
68
|
+
"omniroute_cache_stats",
|
|
69
|
+
"omniroute_compression_status",
|
|
70
|
+
"omniroute_list_combos",
|
|
71
|
+
"omniroute_check_quota",
|
|
72
|
+
"omniroute_db_health_check"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"metadata": {
|
|
76
|
+
"provider": "omniroute",
|
|
77
|
+
"docs": "https://hub.docker.com/r/diegosouzapw/omniroute",
|
|
78
|
+
"note": "Allowlist of READS, default governed: a write tool added upstream is gated automatically rather than silently inline. Tool names are the real ones exposed by the gateway's MCP server, verified against the running image — this gateway uses an `omniroute_` prefix, unlike most MCP servers."
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"tools": [
|
|
83
|
+
{
|
|
84
|
+
"name": "omniroute_mcp",
|
|
85
|
+
"kind": "mcp",
|
|
86
|
+
"description": "Governed gateway to the OmniRoute MCP server. The pod routes an agent's call to a non-inline tool (set_routing_strategy, cache_flush, switch_combo) through this row, where the capability gate turns it into a proposal. Path = MCP tool name; body = tool arguments.",
|
|
87
|
+
"credentialRef": "mcp://omniroute",
|
|
88
|
+
"executor": "is-agent",
|
|
89
|
+
"config": {
|
|
90
|
+
"serverSlug": "omniroute"
|
|
91
|
+
},
|
|
92
|
+
"metadata": {
|
|
93
|
+
"provider": "omniroute",
|
|
94
|
+
"mcpTools": [
|
|
95
|
+
"omniroute_get_health",
|
|
96
|
+
"omniroute_list_models_catalog",
|
|
97
|
+
"omniroute_best_combo_for_task",
|
|
98
|
+
"omniroute_explain_route",
|
|
99
|
+
"omniroute_simulate_route",
|
|
100
|
+
"omniroute_get_provider_metrics",
|
|
101
|
+
"omniroute_get_combo_metrics",
|
|
102
|
+
"omniroute_cost_report",
|
|
103
|
+
"omniroute_cache_stats",
|
|
104
|
+
"omniroute_compression_status",
|
|
105
|
+
"omniroute_list_combos",
|
|
106
|
+
"omniroute_check_quota",
|
|
107
|
+
"omniroute_db_health_check",
|
|
108
|
+
"omniroute_set_routing_strategy",
|
|
109
|
+
"omniroute_cache_flush",
|
|
110
|
+
"omniroute_switch_combo"
|
|
111
|
+
],
|
|
112
|
+
"governedTools": [
|
|
113
|
+
"omniroute_set_routing_strategy",
|
|
114
|
+
"omniroute_cache_flush",
|
|
115
|
+
"omniroute_switch_combo",
|
|
116
|
+
"omniroute_set_budget_guard",
|
|
117
|
+
"omniroute_set_compression_engine",
|
|
118
|
+
"omniroute_set_resilience_profile",
|
|
119
|
+
"omniroute_create_combo",
|
|
120
|
+
"omniroute_sync_pricing"
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"skills": [
|
|
126
|
+
{
|
|
127
|
+
"name": "omniroute-gateway-advisor",
|
|
128
|
+
"kind": "instruction",
|
|
129
|
+
"scope": "pod",
|
|
130
|
+
"description": "When and how to use the OmniRoute gateway's MCP tools. Load when a model/provider choice depends on what the gateway can serve, a route behaves unexpectedly, or the user asks about inference cost or routing.",
|
|
131
|
+
"code": "# OmniRoute gateway\n\nOmniRoute fronts many upstream LLM providers behind one OpenAI-compatible `/v1` endpoint and exposes an MCP server for introspection and control. On this pod it is registered as a HIGH-PRIORITY provider (priority 1) because it is the operator's own gateway; FreeLLMAPI sits at 90 as a free last-resort lane.\n\n## Read tools (run immediately)\n\n| Tool | Use |\n|---|---|\n| `omniroute_get_health` | Is the gateway itself up and serving |\n| `omniroute_list_models_catalog` | Which models the gateway can serve, with context windows |\n| `omniroute_best_combo_for_task` | Which upstream combo suits a described task |\n| `omniroute_explain_route` | Why a request would route where it does |\n| `omniroute_simulate_route` | Dry-run a route decision without spending tokens |\n| `omniroute_get_provider_metrics` | Per-upstream health, cooldowns, error rates |\n| `omniroute_get_combo_metrics` | Per-combo latency and success |\n| `omniroute_cost_report` | What inference is costing, by model and route |\n| `omniroute_cache_stats` / `omniroute_compression_status` | Token savings |\n| `omniroute_check_quota` | Remaining quota on a provider |\n\n## Write tools (need the user's approval)\n\n`omniroute_set_routing_strategy`, `omniroute_switch_combo`, `omniroute_create_combo`, `omniroute_cache_flush`, `omniroute_set_budget_guard`, `omniroute_set_compression_engine`, `omniroute_set_resilience_profile`, `omniroute_sync_pricing`. Calling one files a proposal; it changes nothing until approved. Say what you proposed and why; do not retry it.\n\nNote: most write tools require the key to carry `manage` or `admin` scope. A plain inference key returns 403 on them — that is a credential problem, not a bug to route around.\n\n## Rules\n- Check `omniroute_get_provider_metrics` before blaming a model for a failure.\n- Prefer `omniroute_simulate_route` over a real request when the question is \"what would happen\".\n- Never claim a model is available without `omniroute_list_models_catalog` saying so.\n- Report numbers from `omniroute_cost_report` as measured, with the window."
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"provides": []
|
|
135
|
+
},
|
|
136
|
+
"dependencies": []
|
|
137
|
+
}
|