@synap-core/workspace-templates 0.11.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.
Files changed (249) hide show
  1. package/README.md +483 -0
  2. package/automations/bookmark-enrichment.automation.json +321 -0
  3. package/automations/github-pr-events.automation.json +505 -0
  4. package/automations/mail-feed.automation.json +86 -0
  5. package/automations/ship-a-change-checks-green.automation.json +106 -0
  6. package/automations/ship-a-change-checks-red.automation.json +106 -0
  7. package/automations/ship-a-change-deployed.automation.json +56 -0
  8. package/automations/ship-a-change-pr-merged.automation.json +110 -0
  9. package/automations/ship-a-change-pr-opened.automation.json +104 -0
  10. package/automations/url-bookmark-capture.automation.json +132 -0
  11. package/capabilities/agency-skills.capability.json +157 -0
  12. package/capabilities/apify.capability.json +265 -0
  13. package/capabilities/apollo.capability.json +120 -0
  14. package/capabilities/arch-backend.capability.json +97 -0
  15. package/capabilities/arch-client-intelligence.capability.json +401 -0
  16. package/capabilities/backblaze-b2.capability.json +205 -0
  17. package/capabilities/cal-com.capability.json +266 -0
  18. package/capabilities/canva.capability.json +274 -0
  19. package/capabilities/claude-code-routines.capability.json +172 -0
  20. package/capabilities/claude-managed-agents.capability.json +215 -0
  21. package/capabilities/client-comms-report.capability.json +246 -0
  22. package/capabilities/content-idea-to-production.capability.json +29 -0
  23. package/capabilities/datagouv.capability.json +315 -0
  24. package/capabilities/discord-bot.capability.json +157 -0
  25. package/capabilities/dropbox.capability.json +281 -0
  26. package/capabilities/exa.capability.json +109 -0
  27. package/capabilities/fal-ai.capability.json +83 -0
  28. package/capabilities/fal-media-lab.capability.json +158 -0
  29. package/capabilities/fireflies.capability.json +191 -0
  30. package/capabilities/freellmapi.capability.json +114 -0
  31. package/capabilities/generic-apikey.capability.json +92 -0
  32. package/capabilities/github-merge.capability.json +99 -0
  33. package/capabilities/github-read.capability.json +325 -0
  34. package/capabilities/governance-tighten-recommender.capability.json +81 -0
  35. package/capabilities/jev.capability.json +226 -0
  36. package/capabilities/lead-conversion-enrollment.capability.json +246 -0
  37. package/capabilities/mail-feed.capability.json +277 -0
  38. package/capabilities/mailgun.capability.json +52 -0
  39. package/capabilities/nango-google.capability.json +639 -0
  40. package/capabilities/notion.capability.json +417 -0
  41. package/capabilities/omniroute.capability.json +137 -0
  42. package/capabilities/posthog-analytics.capability.json +258 -0
  43. package/capabilities/postiz.capability.json +467 -0
  44. package/capabilities/proactive-digest.capability.json +190 -0
  45. package/capabilities/proton.capability.json +288 -0
  46. package/capabilities/replicate-rvm.capability.json +97 -0
  47. package/capabilities/research-methods.capability.json +57 -0
  48. package/capabilities/shopify.capability.json +395 -0
  49. package/capabilities/slack.capability.json +369 -0
  50. package/capabilities/stripe.capability.json +420 -0
  51. package/capabilities/telegram-bridge.capability.json +56 -0
  52. package/capabilities/treg.capability.json +102 -0
  53. package/capabilities/unipile-linkedin.capability.json +471 -0
  54. package/capabilities/vercel.capability.json +424 -0
  55. package/dist/define-CPS0n8BV.d.ts +1331 -0
  56. package/dist/index.d.ts +189 -900
  57. package/dist/index.js +24654 -21639
  58. package/dist/index.js.map +1 -1
  59. package/dist/wire.d.ts +222 -0
  60. package/dist/wire.js +77 -0
  61. package/dist/wire.js.map +1 -0
  62. package/package.json +41 -27
  63. package/packs/bookmark-views-pack.json +33 -0
  64. package/packs/crm-pack.json +76 -0
  65. package/packs/customer-profile.json +28 -0
  66. package/packs/deep-research.playbook.json +30 -0
  67. package/packs/event-views-pack.json +33 -0
  68. package/packs/habit-profile.json +27 -0
  69. package/packs/hr-pack.json +54 -0
  70. package/packs/invoice-profile.json +28 -0
  71. package/packs/knowledge-base-pack.json +56 -0
  72. package/packs/meeting-profile.json +29 -0
  73. package/packs/product-profile.json +30 -0
  74. package/packs/project-management-pack.json +49 -0
  75. package/packs/recipe-profile.json +29 -0
  76. package/packs/task-views-pack.json +39 -0
  77. package/retired.yaml +136 -0
  78. package/skills/app-factory-build-slice/SKILL.md +70 -0
  79. package/skills/app-factory-build-slice.catalog.json +17 -0
  80. package/skills/app-factory-design-canvas/SKILL.md +96 -0
  81. package/skills/app-factory-design-canvas.catalog.json +17 -0
  82. package/skills/app-factory-design-review/SKILL.md +99 -0
  83. package/skills/app-factory-design-review.catalog.json +18 -0
  84. package/skills/app-factory-research/SKILL.md +123 -0
  85. package/skills/app-factory-research.catalog.json +17 -0
  86. package/skills/bookmark-enrichment/SKILL.md +40 -0
  87. package/skills/carousel-format/carousel-format.skill.json +18 -0
  88. package/skills/collage-broll/collage-broll.skill.json +20 -0
  89. package/skills/content-taste/content-taste.skill.json +18 -0
  90. package/skills/creative-director/creative-director.skill.json +18 -0
  91. package/skills/design-critique/SKILL.md +135 -0
  92. package/skills/design-critique.catalog.json +12 -0
  93. package/skills/designing-with-real-components/SKILL.md +140 -0
  94. package/skills/designing-with-real-components.catalog.json +12 -0
  95. package/skills/edit-loop/edit-loop.skill.json +25 -0
  96. package/skills/facecam-edit/facecam-edit.skill.json +24 -0
  97. package/skills/mapping-the-server/SKILL.md +54 -0
  98. package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
  99. package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
  100. package/skills/open-design-edit/open-design-edit.skill.json +24 -0
  101. package/skills/reading-client-progress/SKILL.md +65 -0
  102. package/skills/routing-to-channels/SKILL.md +54 -0
  103. package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  104. package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  105. package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  106. package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  107. package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  108. package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  109. package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  110. package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  111. package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  112. package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  113. package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  114. package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  115. package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  116. package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  117. package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  118. package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  119. package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  120. package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  121. package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  122. package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  123. package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  124. package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  125. package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  126. package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  127. package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  128. package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  129. package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  130. package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  131. package/skills/video-direction/video-direction.skill.json +20 -0
  132. package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
  133. package/skills/video-toolbox/video-toolbox.skill.json +20 -0
  134. package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
  135. package/src/agency-os.yaml +122 -0
  136. package/src/agent-os-skill-slugs.test.ts +65 -0
  137. package/src/apify-social-reader.test.ts +317 -0
  138. package/src/base.template.test.ts +25 -19
  139. package/src/base.yaml +95 -39
  140. package/src/blockchain-ecosystem.yaml +1 -0
  141. package/src/brand-library.yaml +525 -14
  142. package/src/builder-dev-fold.template.test.ts +113 -0
  143. package/src/builder.yaml +798 -92
  144. package/src/business-model-catalog-description.test.ts +47 -0
  145. package/src/business-model-grp.template.test.ts +214 -0
  146. package/src/business-model.yaml +598 -0
  147. package/src/catalog-safety.test.ts +198 -0
  148. package/src/catalog.template-items.test.ts +75 -0
  149. package/src/catalog.ts +85 -2
  150. package/src/civic-france.yaml +102 -0
  151. package/src/concept-guard.test.ts +28 -8
  152. package/src/concept-guard.ts +2 -2
  153. package/src/content-creation.template.test.ts +52 -0
  154. package/src/content-creation.yaml +192 -0
  155. package/src/content-os.edit-loop.template.test.ts +210 -0
  156. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  157. package/src/content-os.template.test.ts +322 -0
  158. package/src/content-os.video-takes.template.test.ts +338 -0
  159. package/src/content-os.work-a-take.template.test.ts +125 -0
  160. package/src/content-os.yaml +1830 -39
  161. package/src/content-studio-retired.template.test.ts +82 -0
  162. package/src/corpus-flow-validity.test.ts +4 -5
  163. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  164. package/src/crm-build-plan.template.test.ts +128 -0
  165. package/src/crm-lists.template.test.ts +96 -0
  166. package/src/crm-messages-cadence.template.test.ts +164 -0
  167. package/src/crm-one-send-door.template.test.ts +65 -0
  168. package/src/crm.yaml +1456 -181
  169. package/src/decisions-wave.template.test.ts +186 -0
  170. package/src/define.ts +130 -17
  171. package/src/design-to-implementation.template.test.ts +94 -0
  172. package/src/dist-freshness.test.ts +97 -0
  173. package/src/domain-template-type.test.ts +75 -0
  174. package/src/ecosystem.yaml +27 -66
  175. package/src/enterprise-os.yaml +10 -134
  176. package/src/facecam-edit.audio-studio.test.ts +188 -0
  177. package/src/fal-generate-image.test.ts +200 -0
  178. package/src/fal-media-lab-pod-files.test.ts +180 -0
  179. package/src/finance.yaml +254 -1
  180. package/src/foundation.yaml +130 -28
  181. package/src/frame-host-modules.d.mts +6 -0
  182. package/src/frame-host-modules.mjs +58 -0
  183. package/src/generate.mjs +9 -3
  184. package/src/github-merge.test.ts +210 -0
  185. package/src/grants.yaml +57 -17
  186. package/src/hr.yaml +39 -6
  187. package/src/index.ts +36 -1
  188. package/src/intent.test.ts +161 -0
  189. package/src/internal-runbook.yaml +19 -1
  190. package/src/jev.test.ts +356 -0
  191. package/src/legal.yaml +33 -1
  192. package/src/life-os.yaml +65 -240
  193. package/src/lifecycle-coverage.test.ts +124 -0
  194. package/src/lifecycle-declarations.test.ts +252 -0
  195. package/src/lifecycle-presets.test.ts +468 -0
  196. package/src/lifecycle-presets.ts +494 -0
  197. package/src/lifecycle-stuck.test.ts +46 -0
  198. package/src/lifecycle-waits.parity.test.ts +319 -0
  199. package/src/marketing.yaml +108 -4
  200. package/src/meetings-knowledge.yaml +18 -0
  201. package/src/networking.yaml +23 -2
  202. package/src/operations.yaml +304 -4
  203. package/src/pipeline-views.template.test.ts +88 -0
  204. package/src/playbook-goal-placeholders.test.ts +57 -0
  205. package/src/postiz-contract.test.ts +134 -0
  206. package/src/presentation-declarations.test.ts +174 -0
  207. package/src/process-contract.validate.test.ts +352 -0
  208. package/src/project-management.yaml +39 -740
  209. package/src/publish-body.d.mts +29 -0
  210. package/src/publish-body.mjs +74 -0
  211. package/src/publish-body.test.ts +74 -0
  212. package/src/publish-official-lib.test.ts +176 -0
  213. package/src/replicate-rvm.test.ts +504 -0
  214. package/src/research-base.yaml +119 -20
  215. package/src/research-decision.yaml +60 -3
  216. package/src/reserved-profile-slugs.test.ts +83 -0
  217. package/src/retired-goal-kinds.test.ts +58 -0
  218. package/src/role-reference-and-step-domain.test.ts +192 -0
  219. package/src/seed-obligation.test.ts +176 -0
  220. package/src/send-message-maps.test.ts +227 -0
  221. package/src/shared-role-ssot.test.ts +42 -1
  222. package/src/ship-a-change.template.test.ts +177 -0
  223. package/src/skills.test.ts +170 -0
  224. package/src/social.yaml +85 -27
  225. package/src/space-packages.freshness.test.ts +97 -0
  226. package/src/space-packages.generated.ts +40 -0
  227. package/src/space-packages.test.ts +125 -0
  228. package/src/space-packages.ts +73 -0
  229. package/src/start.test.ts +188 -0
  230. package/src/task-intents.test.ts +293 -0
  231. package/src/templates.ts +21639 -21522
  232. package/src/types.ts +443 -60
  233. package/src/unipile-publish-post.test.ts +162 -0
  234. package/src/validate-flow.drift.test.ts +2 -3
  235. package/src/validate-flow.ts +32 -2
  236. package/src/validate-onboarding.test.ts +59 -0
  237. package/src/validate.test.ts +156 -3
  238. package/src/validate.ts +1384 -7
  239. package/src/wire-core.ts +231 -0
  240. package/src/wire.test.ts +159 -0
  241. package/src/wire.ts +107 -0
  242. package/src/__fixtures__/report-automation-flow.json +0 -393
  243. package/src/agent-fleet.yaml +0 -1645
  244. package/src/business-developer.template.test.ts +0 -351
  245. package/src/business-developer.yaml +0 -860
  246. package/src/content-studio.yaml +0 -361
  247. package/src/dev-dashboard.yaml +0 -990
  248. package/src/outreach-comms.yaml +0 -486
  249. package/src/the-arch.yaml +0 -201
@@ -0,0 +1,369 @@
1
+ {
2
+ "apiVersion": "synap/v1",
3
+ "kind": "capability",
4
+ "meta": {
5
+ "slug": "slack",
6
+ "name": "Slack — Channels, People & Messages",
7
+ "description": "Slack workspace operations through one Nango OAuth connection (Slack Web API): list channels and users, read a channel's message history, inspect a channel/user/workspace, and post a message as the connected user. List verbs default their limit. Connect your Slack account to use it.",
8
+ "tags": [
9
+ "capability"
10
+ ],
11
+ "isPublic": true,
12
+ "syncByDefault": true
13
+ },
14
+ "spec": {
15
+ "key": "slack",
16
+ "name": "Slack — Channels, People & Messages",
17
+ "description": "Slack workspace operations through ONE Nango OAuth connection (Slack Web API). List the workspace's channels and members, read a channel's message history, inspect a channel / member / workspace, and POST a message as the connected user. PRECONDITION: the 'slack' integration must be declared + configured on the pod's Nango with providerConfigKey 'slack' and the bot/user token scopes channels:read, groups:read, channels:history, users:read and chat:write (add users:read.email to return member emails; add im:read, mpim:read and im:history to LIST and READ direct messages; add im:write to POST a direct message; slack_team_info additionally needs team:read), and the acting user must connect their Slack account via Connectors; the dispatcher resolves the most-recent slack connection automatically. Paths are RELATIVE to the Nango slack integration's base URL (slack.com/api) — no baseUrlOverride, so no provider-proxy-host allowlist entry is needed; Nango injects the bearer token. Reads (list/get) are GETs with query parameters and auto-run; the one write (slack_send_message) is a POST with a JSON body and routes through the capability-execution gate (which may auto-run or propose depending on the actor). NOTE: the Slack Web API answers application errors with HTTP 200 and {ok:false,error}, so every shaped result carries ok/error — a null/empty list with ok:false is a real failure (e.g. missing_scope, channel_not_found), NOT an empty workspace. Response-field shaping is best-effort and confirmed against the live API at first run.",
18
+ "params": [],
19
+ "vault": [],
20
+ "tools": [
21
+ {
22
+ "name": "slack",
23
+ "kind": "provider",
24
+ "description": "Slack Web API access through Nango. credentialRef nango://slack resolves the user's Slack connection (Connection-Id + Provider-Config-Key) and proxies to the integration's base URL (slack.com/api); Nango injects the bearer token.",
25
+ "credentialRef": "nango://slack",
26
+ "executor": "is-agent",
27
+ "config": {
28
+ "providerConfigKey": "slack"
29
+ }
30
+ }
31
+ ],
32
+ "skills": [
33
+ {
34
+ "name": "slack_list_channels",
35
+ "intent": "list_records",
36
+ "kind": "declarative",
37
+ "scope": "pod",
38
+ "description": "Lists the workspace's channels (public + private by default; archived excluded). Args: { types?: string (default 'public_channel,private_channel'; add 'mpim'/'im' only with im:read/mpim:read), limit?: number (default 50, max 200), cursor?: string (from a prior nextCursor) }.",
39
+ "requires": [
40
+ "slack"
41
+ ],
42
+ "executionMode": "sync",
43
+ "timeoutSeconds": 60,
44
+ "parameters": {
45
+ "types": "string?",
46
+ "limit": "number?",
47
+ "cursor": "string?"
48
+ },
49
+ "providerSpec": {
50
+ "tool": "slack",
51
+ "method": "GET",
52
+ "pathTemplate": "/conversations.list",
53
+ "query": {
54
+ "types": "{{types}}",
55
+ "exclude_archived": "true",
56
+ "limit": "{{limit}}",
57
+ "cursor": "{{cursor}}"
58
+ },
59
+ "paramMapping": {
60
+ "types": {
61
+ "default": "public_channel,private_channel"
62
+ },
63
+ "limit": {
64
+ "default": 50,
65
+ "clampMin": 1,
66
+ "clampMax": 200
67
+ }
68
+ },
69
+ "responseShape": {
70
+ "collectionPath": "channels",
71
+ "collectionAs": "channels",
72
+ "item": {
73
+ "id": "id",
74
+ "name": "name",
75
+ "isPrivate": "is_private",
76
+ "isArchived": "is_archived",
77
+ "isMember": "is_member",
78
+ "numMembers": "num_members",
79
+ "topic": "topic.value",
80
+ "purpose": "purpose.value",
81
+ "created": "created"
82
+ },
83
+ "scalar": {
84
+ "ok": "ok",
85
+ "error": "error",
86
+ "count": "@count",
87
+ "nextCursor": "response_metadata.next_cursor"
88
+ }
89
+ }
90
+ }
91
+ },
92
+ {
93
+ "name": "slack_get_channel",
94
+ "intent": "fetch_record",
95
+ "kind": "declarative",
96
+ "scope": "pod",
97
+ "description": "Gets one channel's details (name, topic, purpose, member count, privacy/archive flags) by id. Args: { channel: string }.",
98
+ "requires": [
99
+ "slack"
100
+ ],
101
+ "executionMode": "sync",
102
+ "timeoutSeconds": 60,
103
+ "parameters": {
104
+ "channel": "string"
105
+ },
106
+ "providerSpec": {
107
+ "tool": "slack",
108
+ "method": "GET",
109
+ "pathTemplate": "/conversations.info",
110
+ "query": {
111
+ "channel": "{{channel}}",
112
+ "include_num_members": "true"
113
+ },
114
+ "paramMapping": {
115
+ "channel": {
116
+ "required": true
117
+ }
118
+ },
119
+ "responseShape": {
120
+ "scalar": {
121
+ "ok": "ok",
122
+ "error": "error",
123
+ "id": "channel.id",
124
+ "name": "channel.name",
125
+ "isPrivate": "channel.is_private",
126
+ "isArchived": "channel.is_archived",
127
+ "isMember": "channel.is_member",
128
+ "numMembers": "channel.num_members",
129
+ "topic": "channel.topic.value",
130
+ "purpose": "channel.purpose.value",
131
+ "created": "channel.created"
132
+ }
133
+ }
134
+ }
135
+ },
136
+ {
137
+ "name": "slack_list_users",
138
+ "intent": "list_records",
139
+ "kind": "declarative",
140
+ "scope": "pod",
141
+ "description": "Lists the workspace's members (id, handle, real name, display name, avatar, bot/deleted flags). Email is returned only with the users:read.email scope. Args: { limit?: number (default 50, max 200), cursor?: string (from a prior nextCursor) }.",
142
+ "requires": [
143
+ "slack"
144
+ ],
145
+ "executionMode": "sync",
146
+ "timeoutSeconds": 60,
147
+ "parameters": {
148
+ "limit": "number?",
149
+ "cursor": "string?"
150
+ },
151
+ "providerSpec": {
152
+ "tool": "slack",
153
+ "method": "GET",
154
+ "pathTemplate": "/users.list",
155
+ "query": {
156
+ "limit": "{{limit}}",
157
+ "cursor": "{{cursor}}"
158
+ },
159
+ "paramMapping": {
160
+ "limit": {
161
+ "default": 50,
162
+ "clampMin": 1,
163
+ "clampMax": 200
164
+ }
165
+ },
166
+ "responseShape": {
167
+ "collectionPath": "members",
168
+ "collectionAs": "users",
169
+ "item": {
170
+ "id": "id",
171
+ "name": "name",
172
+ "realName": "real_name",
173
+ "displayName": "profile.display_name",
174
+ "email": "profile.email",
175
+ "avatar": "profile.image_72",
176
+ "tz": "tz",
177
+ "isBot": "is_bot",
178
+ "deleted": "deleted"
179
+ },
180
+ "scalar": {
181
+ "ok": "ok",
182
+ "error": "error",
183
+ "count": "@count",
184
+ "nextCursor": "response_metadata.next_cursor"
185
+ }
186
+ }
187
+ }
188
+ },
189
+ {
190
+ "name": "slack_get_user",
191
+ "intent": "fetch_record",
192
+ "kind": "declarative",
193
+ "scope": "pod",
194
+ "description": "Gets one member's profile by id (handle, real name, display name, avatar, timezone, bot flag). Email is returned only with the users:read.email scope. Args: { user: string }.",
195
+ "requires": [
196
+ "slack"
197
+ ],
198
+ "executionMode": "sync",
199
+ "timeoutSeconds": 60,
200
+ "parameters": {
201
+ "user": "string"
202
+ },
203
+ "providerSpec": {
204
+ "tool": "slack",
205
+ "method": "GET",
206
+ "pathTemplate": "/users.info",
207
+ "query": {
208
+ "user": "{{user}}"
209
+ },
210
+ "paramMapping": {
211
+ "user": {
212
+ "required": true
213
+ }
214
+ },
215
+ "responseShape": {
216
+ "scalar": {
217
+ "ok": "ok",
218
+ "error": "error",
219
+ "id": "user.id",
220
+ "name": "user.name",
221
+ "realName": "user.real_name",
222
+ "displayName": "user.profile.display_name",
223
+ "email": "user.profile.email",
224
+ "avatar": "user.profile.image_72",
225
+ "tz": "user.tz",
226
+ "isBot": "user.is_bot"
227
+ }
228
+ }
229
+ }
230
+ },
231
+ {
232
+ "name": "slack_list_messages",
233
+ "intent": "list_records",
234
+ "kind": "declarative",
235
+ "scope": "pod",
236
+ "description": "Reads a channel's message history, newest first. Args: { channel: string, limit?: number (default 50, max 200), oldest?: string (Unix ts lower bound), latest?: string (Unix ts upper bound), cursor?: string (from a prior nextCursor) }.",
237
+ "requires": [
238
+ "slack"
239
+ ],
240
+ "executionMode": "sync",
241
+ "timeoutSeconds": 60,
242
+ "parameters": {
243
+ "channel": "string",
244
+ "limit": "number?",
245
+ "oldest": "string?",
246
+ "latest": "string?",
247
+ "cursor": "string?"
248
+ },
249
+ "providerSpec": {
250
+ "tool": "slack",
251
+ "method": "GET",
252
+ "pathTemplate": "/conversations.history",
253
+ "query": {
254
+ "channel": "{{channel}}",
255
+ "limit": "{{limit}}",
256
+ "oldest": "{{oldest}}",
257
+ "latest": "{{latest}}",
258
+ "cursor": "{{cursor}}"
259
+ },
260
+ "paramMapping": {
261
+ "channel": {
262
+ "required": true
263
+ },
264
+ "limit": {
265
+ "default": 50,
266
+ "clampMin": 1,
267
+ "clampMax": 200
268
+ }
269
+ },
270
+ "responseShape": {
271
+ "collectionPath": "messages",
272
+ "collectionAs": "messages",
273
+ "item": {
274
+ "ts": "ts",
275
+ "user": "user",
276
+ "text": "text",
277
+ "type": "type",
278
+ "threadTs": "thread_ts",
279
+ "replyCount": "reply_count"
280
+ },
281
+ "scalar": {
282
+ "ok": "ok",
283
+ "error": "error",
284
+ "channel": "{{channel}}",
285
+ "count": "@count",
286
+ "hasMore": "has_more",
287
+ "nextCursor": "response_metadata.next_cursor"
288
+ }
289
+ }
290
+ }
291
+ },
292
+ {
293
+ "name": "slack_team_info",
294
+ "intent": "fetch_record",
295
+ "kind": "declarative",
296
+ "scope": "pod",
297
+ "description": "Gets the connected workspace's identity (id, name, domain). Requires the team:read scope. Args: {}.",
298
+ "requires": [
299
+ "slack"
300
+ ],
301
+ "executionMode": "sync",
302
+ "timeoutSeconds": 60,
303
+ "parameters": {},
304
+ "providerSpec": {
305
+ "tool": "slack",
306
+ "method": "GET",
307
+ "pathTemplate": "/team.info",
308
+ "responseShape": {
309
+ "scalar": {
310
+ "ok": "ok",
311
+ "error": "error",
312
+ "id": "team.id",
313
+ "name": "team.name",
314
+ "domain": "team.domain"
315
+ }
316
+ }
317
+ }
318
+ },
319
+ {
320
+ "name": "slack_send_message",
321
+ "intent": "send_message",
322
+ "kind": "declarative",
323
+ "scope": "pod",
324
+ "description": "Posts a message to a channel (or a DM) as the connected user. Side-effecting write — routes through the capability-execution gate (may auto-run or propose). Args: { channel: string (channel id, or a member id for a DM), text: string }.",
325
+ "requires": [
326
+ "slack"
327
+ ],
328
+ "executionMode": "async",
329
+ "timeoutSeconds": 60,
330
+ "parameters": {
331
+ "channel": "string",
332
+ "text": "string"
333
+ },
334
+ "providerSpec": {
335
+ "tool": "slack",
336
+ "method": "POST",
337
+ "pathTemplate": "/chat.postMessage",
338
+ "body": {
339
+ "channel": "{{channel}}",
340
+ "text": "{{text}}"
341
+ },
342
+ "paramMapping": {
343
+ "channel": {
344
+ "required": true
345
+ },
346
+ "text": {
347
+ "required": true
348
+ }
349
+ },
350
+ "responseShape": {
351
+ "scalar": {
352
+ "ok": "ok",
353
+ "error": "error",
354
+ "channel": "channel",
355
+ "ts": "ts",
356
+ "text": "message.text"
357
+ }
358
+ }
359
+ }
360
+ }
361
+ ],
362
+ "provides": [
363
+ "fetch_record",
364
+ "list_records",
365
+ "send_message"
366
+ ]
367
+ },
368
+ "dependencies": []
369
+ }