@synap-core/workspace-templates 0.12.0 → 0.24.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 (237) hide show
  1. package/README.md +509 -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 +1496 -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 +494 -0
  54. package/capabilities/vercel.capability.json +424 -0
  55. package/dist/define-DqoItRiR.d.ts +1370 -0
  56. package/dist/index.d.ts +174 -900
  57. package/dist/index.js +26447 -24075
  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 +27 -4
  63. package/retired.yaml +136 -0
  64. package/skills/app-factory-build-slice/SKILL.md +70 -0
  65. package/skills/app-factory-build-slice.catalog.json +17 -0
  66. package/skills/app-factory-design-canvas/SKILL.md +96 -0
  67. package/skills/app-factory-design-canvas.catalog.json +17 -0
  68. package/skills/app-factory-design-review/SKILL.md +105 -0
  69. package/skills/app-factory-design-review.catalog.json +18 -0
  70. package/skills/app-factory-research/SKILL.md +123 -0
  71. package/skills/app-factory-research.catalog.json +17 -0
  72. package/skills/bookmark-enrichment/SKILL.md +40 -0
  73. package/skills/carousel-format/carousel-format.skill.json +18 -0
  74. package/skills/collage-broll/collage-broll.skill.json +20 -0
  75. package/skills/content-taste/content-taste.skill.json +18 -0
  76. package/skills/creative-director/creative-director.skill.json +18 -0
  77. package/skills/design-critique/SKILL.md +138 -0
  78. package/skills/design-critique.catalog.json +12 -0
  79. package/skills/designing-with-real-components/SKILL.md +140 -0
  80. package/skills/designing-with-real-components.catalog.json +12 -0
  81. package/skills/edit-loop/edit-loop.skill.json +25 -0
  82. package/skills/facecam-edit/facecam-edit.skill.json +24 -0
  83. package/skills/mapping-the-server/SKILL.md +54 -0
  84. package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
  85. package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
  86. package/skills/open-design-edit/open-design-edit.skill.json +24 -0
  87. package/skills/reading-client-progress/SKILL.md +65 -0
  88. package/skills/routing-to-channels/SKILL.md +54 -0
  89. package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  90. package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  91. package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  92. package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  93. package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  94. package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  95. package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  96. package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  97. package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  98. package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  99. package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  100. package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  101. package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  102. package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  103. package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  104. package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  105. package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  106. package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  107. package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  108. package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  109. package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  110. package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  111. package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  112. package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  113. package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  114. package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  115. package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  116. package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  117. package/skills/video-direction/video-direction.skill.json +20 -0
  118. package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
  119. package/skills/video-toolbox/video-toolbox.skill.json +20 -0
  120. package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
  121. package/src/agency-os.yaml +122 -0
  122. package/src/agent-os-skill-slugs.test.ts +65 -0
  123. package/src/apify-social-reader.test.ts +317 -0
  124. package/src/base.yaml +85 -39
  125. package/src/blockchain-ecosystem.yaml +1 -0
  126. package/src/brand-library.yaml +525 -14
  127. package/src/builder-dev-fold.template.test.ts +113 -0
  128. package/src/builder.yaml +779 -91
  129. package/src/business-model-catalog-description.test.ts +47 -0
  130. package/src/business-model-grp.template.test.ts +214 -0
  131. package/src/business-model.yaml +296 -49
  132. package/src/catalog-safety.test.ts +198 -0
  133. package/src/catalog.template-items.test.ts +75 -0
  134. package/src/catalog.ts +66 -2
  135. package/src/concept-guard.test.ts +28 -8
  136. package/src/concept-guard.ts +2 -2
  137. package/src/content-creation.template.test.ts +52 -0
  138. package/src/content-creation.yaml +192 -0
  139. package/src/content-os.edit-loop.template.test.ts +210 -0
  140. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  141. package/src/content-os.template.test.ts +349 -0
  142. package/src/content-os.video-takes.template.test.ts +338 -0
  143. package/src/content-os.work-a-take.template.test.ts +125 -0
  144. package/src/content-os.yaml +1873 -39
  145. package/src/content-studio-retired.template.test.ts +82 -0
  146. package/src/corpus-flow-validity.test.ts +4 -5
  147. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  148. package/src/crm-build-plan.template.test.ts +128 -0
  149. package/src/crm-lists.template.test.ts +96 -0
  150. package/src/crm-messages-cadence.template.test.ts +246 -0
  151. package/src/crm-one-send-door.template.test.ts +65 -0
  152. package/src/crm.yaml +1563 -181
  153. package/src/decisions-wave.template.test.ts +186 -0
  154. package/src/define.ts +146 -17
  155. package/src/design-to-implementation.template.test.ts +94 -0
  156. package/src/domain-template-type.test.ts +75 -0
  157. package/src/ecosystem.yaml +27 -66
  158. package/src/enterprise-os.yaml +10 -134
  159. package/src/facecam-edit.audio-studio.test.ts +188 -0
  160. package/src/fal-generate-image.test.ts +200 -0
  161. package/src/fal-media-lab-pod-files.test.ts +180 -0
  162. package/src/finance.yaml +254 -1
  163. package/src/foundation.yaml +78 -38
  164. package/src/frame-host-modules.d.mts +6 -0
  165. package/src/frame-host-modules.mjs +58 -0
  166. package/src/generate.mjs +9 -3
  167. package/src/github-merge.test.ts +210 -0
  168. package/src/grants.yaml +46 -17
  169. package/src/hr.yaml +39 -6
  170. package/src/index.ts +36 -1
  171. package/src/intent.test.ts +161 -0
  172. package/src/internal-runbook.yaml +19 -1
  173. package/src/jev.test.ts +356 -0
  174. package/src/legal.yaml +33 -1
  175. package/src/life-os.yaml +51 -240
  176. package/src/lifecycle-coverage.test.ts +124 -0
  177. package/src/lifecycle-declarations.test.ts +252 -0
  178. package/src/lifecycle-presets.test.ts +468 -0
  179. package/src/lifecycle-presets.ts +494 -0
  180. package/src/lifecycle-stuck.test.ts +46 -0
  181. package/src/lifecycle-waits.parity.test.ts +319 -0
  182. package/src/marketing.yaml +108 -4
  183. package/src/meetings-knowledge.yaml +18 -0
  184. package/src/networking.yaml +23 -2
  185. package/src/operations.yaml +304 -4
  186. package/src/pipeline-views.template.test.ts +88 -0
  187. package/src/playbook-goal-placeholders.test.ts +57 -0
  188. package/src/postiz-contract.test.ts +134 -0
  189. package/src/presentation-declarations.test.ts +174 -0
  190. package/src/process-contract.validate.test.ts +352 -0
  191. package/src/project-management.yaml +39 -740
  192. package/src/publish-body.d.mts +29 -0
  193. package/src/publish-body.mjs +74 -0
  194. package/src/publish-body.test.ts +74 -0
  195. package/src/publish-official-lib.test.ts +176 -0
  196. package/src/replicate-rvm.test.ts +504 -0
  197. package/src/research-base.yaml +119 -20
  198. package/src/research-decision.yaml +60 -3
  199. package/src/reserved-profile-slugs.test.ts +81 -0
  200. package/src/retired-goal-kinds.test.ts +52 -0
  201. package/src/role-reference-and-step-domain.test.ts +192 -0
  202. package/src/seed-obligation.test.ts +1 -6
  203. package/src/send-message-maps.test.ts +227 -0
  204. package/src/shared-role-ssot.test.ts +40 -2
  205. package/src/ship-a-change.template.test.ts +177 -0
  206. package/src/skills.test.ts +170 -0
  207. package/src/social.yaml +85 -27
  208. package/src/space-packages.freshness.test.ts +97 -0
  209. package/src/space-packages.generated.ts +40 -0
  210. package/src/space-packages.test.ts +125 -0
  211. package/src/space-packages.ts +73 -0
  212. package/src/start.test.ts +188 -0
  213. package/src/stripe-capability.test.ts +192 -0
  214. package/src/task-intents.test.ts +293 -0
  215. package/src/template-documents.test.ts +158 -0
  216. package/src/templates.ts +20907 -21464
  217. package/src/types.ts +475 -61
  218. package/src/unipile-linkedin-find-profile.test.ts +183 -0
  219. package/src/unipile-publish-post.test.ts +162 -0
  220. package/src/validate-flow.drift.test.ts +2 -3
  221. package/src/validate-flow.ts +22 -2
  222. package/src/validate-onboarding.test.ts +59 -0
  223. package/src/validate.test.ts +71 -4
  224. package/src/validate.ts +1416 -7
  225. package/src/wire-core.ts +231 -0
  226. package/src/wire.test.ts +159 -0
  227. package/src/wire.ts +107 -0
  228. package/views/bookmark-views-pack.view.json +39 -0
  229. package/views/event-views-pack.view.json +45 -0
  230. package/views/task-views-pack.view.json +53 -0
  231. package/src/agent-fleet.yaml +0 -1645
  232. package/src/business-developer.template.test.ts +0 -351
  233. package/src/business-developer.yaml +0 -860
  234. package/src/content-studio.yaml +0 -361
  235. package/src/dev-dashboard.yaml +0 -990
  236. package/src/outreach-comms.yaml +0 -486
  237. 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
+ }