@tickernelz/paperclip-pro-shared 2026.1011.2 → 2026.1012.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 (291) hide show
  1. package/dist/.paperclip-build-complete +1 -1
  2. package/dist/accounting.d.ts +178 -0
  3. package/dist/accounting.d.ts.map +1 -0
  4. package/dist/accounting.js +68 -0
  5. package/dist/accounting.js.map +1 -0
  6. package/dist/agent-appearance.d.ts +6 -1
  7. package/dist/agent-appearance.d.ts.map +1 -1
  8. package/dist/agent-appearance.js +8 -2
  9. package/dist/agent-appearance.js.map +1 -1
  10. package/dist/agent-appearance.test.js +11 -0
  11. package/dist/agent-appearance.test.js.map +1 -1
  12. package/dist/agent-avatar-upload.d.ts +8 -0
  13. package/dist/agent-avatar-upload.d.ts.map +1 -0
  14. package/dist/agent-avatar-upload.js +9 -0
  15. package/dist/agent-avatar-upload.js.map +1 -0
  16. package/dist/agent-commentary.test.d.ts +2 -0
  17. package/dist/agent-commentary.test.d.ts.map +1 -0
  18. package/dist/agent-commentary.test.js +18 -0
  19. package/dist/agent-commentary.test.js.map +1 -0
  20. package/dist/ai-connection-router.d.ts +29 -20
  21. package/dist/ai-connection-router.d.ts.map +1 -1
  22. package/dist/ai-connections.d.ts +67 -5
  23. package/dist/ai-connections.d.ts.map +1 -1
  24. package/dist/ai-connections.js +25 -17
  25. package/dist/ai-connections.js.map +1 -1
  26. package/dist/ai-provider-routing.d.ts +42 -0
  27. package/dist/ai-provider-routing.d.ts.map +1 -0
  28. package/dist/ai-provider-routing.js +125 -0
  29. package/dist/ai-provider-routing.js.map +1 -0
  30. package/dist/app-definitions/airtable.json +39 -0
  31. package/dist/app-definitions/anthropic.json +3 -0
  32. package/dist/app-definitions/bedrock.json +53 -0
  33. package/dist/app-definitions/bitly.json +17 -12
  34. package/dist/app-definitions/calendly.json +46 -0
  35. package/dist/app-definitions/chat-completions-api.json +53 -0
  36. package/dist/app-definitions/clickup.json +53 -0
  37. package/dist/app-definitions/context7.json +13 -5
  38. package/dist/app-definitions/enterpret.json +92 -0
  39. package/dist/app-definitions/exa.json +34 -0
  40. package/dist/app-definitions/firecrawl.json +93 -0
  41. package/dist/app-definitions/gauge.json +94 -0
  42. package/dist/app-definitions/github-code-review-bot.json +1 -1
  43. package/dist/app-definitions/google.json +55 -0
  44. package/dist/app-definitions/gsc-wizard.json +78 -0
  45. package/dist/app-definitions/hugging-face.json +22 -0
  46. package/dist/app-definitions/klaviyo.json +59 -0
  47. package/dist/app-definitions/linear.json +45 -2
  48. package/dist/app-definitions/local.json +53 -0
  49. package/dist/app-definitions/make.json +53 -1
  50. package/dist/app-definitions/messages-api.json +53 -0
  51. package/dist/app-definitions/monday.json +46 -0
  52. package/dist/app-definitions/openai.json +3 -0
  53. package/dist/app-definitions/openrouter.json +3 -0
  54. package/dist/app-definitions/parallel-search.json +35 -0
  55. package/dist/app-definitions/resend.json +3 -3
  56. package/dist/app-definitions/responses-api.json +53 -0
  57. package/dist/app-definitions/sentry.json +1 -1
  58. package/dist/app-definitions/superagent.json +57 -0
  59. package/dist/app-definitions/tavily.json +47 -0
  60. package/dist/app-definitions/telem.json +144 -0
  61. package/dist/app-definitions/windsor-ai.json +80 -0
  62. package/dist/app-definitions/xai.json +3 -0
  63. package/dist/app-definitions-url.test.js +11 -1
  64. package/dist/app-definitions-url.test.js.map +1 -1
  65. package/dist/app-definitions.d.ts.map +1 -1
  66. package/dist/app-definitions.generated.d.ts.map +1 -1
  67. package/dist/app-definitions.generated.js +81 -61
  68. package/dist/app-definitions.generated.js.map +1 -1
  69. package/dist/app-definitions.js +20 -11
  70. package/dist/app-definitions.js.map +1 -1
  71. package/dist/app-definitions.test.js +261 -14
  72. package/dist/app-definitions.test.js.map +1 -1
  73. package/dist/connection-instructions.test.js +1 -0
  74. package/dist/connection-instructions.test.js.map +1 -1
  75. package/dist/connection-routing.d.ts +3 -1
  76. package/dist/connection-routing.d.ts.map +1 -1
  77. package/dist/connection-routing.js +13 -0
  78. package/dist/connection-routing.js.map +1 -1
  79. package/dist/constants.d.ts +3 -3
  80. package/dist/constants.d.ts.map +1 -1
  81. package/dist/constants.js +3 -2
  82. package/dist/constants.js.map +1 -1
  83. package/dist/customer-success.d.ts +58 -0
  84. package/dist/customer-success.d.ts.map +1 -0
  85. package/dist/customer-success.js +160 -0
  86. package/dist/customer-success.js.map +1 -0
  87. package/dist/decision-models.d.ts +134 -0
  88. package/dist/decision-models.d.ts.map +1 -0
  89. package/dist/decision-models.js +43 -0
  90. package/dist/decision-models.js.map +1 -0
  91. package/dist/dot-invitations.d.ts +34 -0
  92. package/dist/dot-invitations.d.ts.map +1 -0
  93. package/dist/dot-invitations.js +2 -0
  94. package/dist/dot-invitations.js.map +1 -0
  95. package/dist/easy-mcp-connectors.test.d.ts +2 -0
  96. package/dist/easy-mcp-connectors.test.d.ts.map +1 -0
  97. package/dist/easy-mcp-connectors.test.js +63 -0
  98. package/dist/easy-mcp-connectors.test.js.map +1 -0
  99. package/dist/external-agent-guidance.d.ts +5 -0
  100. package/dist/external-agent-guidance.d.ts.map +1 -0
  101. package/dist/external-agent-guidance.js +5 -0
  102. package/dist/external-agent-guidance.js.map +1 -0
  103. package/dist/fast-response.d.ts +54 -0
  104. package/dist/fast-response.d.ts.map +1 -0
  105. package/dist/fast-response.js +28 -0
  106. package/dist/fast-response.js.map +1 -0
  107. package/dist/feature-catalog.d.ts.map +1 -1
  108. package/dist/feature-catalog.js +29 -1
  109. package/dist/feature-catalog.js.map +1 -1
  110. package/dist/index.d.ts +24 -4
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +20 -3
  113. package/dist/index.js.map +1 -1
  114. package/dist/mcp-setup.d.ts +17 -0
  115. package/dist/mcp-setup.d.ts.map +1 -0
  116. package/dist/mcp-setup.js +59 -0
  117. package/dist/mcp-setup.js.map +1 -0
  118. package/dist/money.d.ts +20 -0
  119. package/dist/money.d.ts.map +1 -0
  120. package/dist/money.js +58 -0
  121. package/dist/money.js.map +1 -0
  122. package/dist/openwa-tools.d.ts +1 -0
  123. package/dist/openwa-tools.d.ts.map +1 -1
  124. package/dist/openwa-tools.js +8 -7
  125. package/dist/openwa-tools.js.map +1 -1
  126. package/dist/primary-agent.d.ts +12 -0
  127. package/dist/primary-agent.d.ts.map +1 -0
  128. package/dist/primary-agent.js +5 -0
  129. package/dist/primary-agent.js.map +1 -0
  130. package/dist/public-mcp.d.ts +69 -0
  131. package/dist/public-mcp.d.ts.map +1 -0
  132. package/dist/public-mcp.js +12 -0
  133. package/dist/public-mcp.js.map +1 -0
  134. package/dist/self-serve-mcp-research.json +18 -4
  135. package/dist/slack-app-manifest.d.ts +128 -0
  136. package/dist/slack-app-manifest.d.ts.map +1 -0
  137. package/dist/slack-app-manifest.js +88 -0
  138. package/dist/slack-app-manifest.js.map +1 -0
  139. package/dist/slack-app-manifest.test.d.ts +2 -0
  140. package/dist/slack-app-manifest.test.d.ts.map +1 -0
  141. package/dist/slack-app-manifest.test.js +44 -0
  142. package/dist/slack-app-manifest.test.js.map +1 -0
  143. package/dist/slack-tools.js +2 -2
  144. package/dist/slack-tools.js.map +1 -1
  145. package/dist/subscriptions.d.ts +104 -0
  146. package/dist/subscriptions.d.ts.map +1 -0
  147. package/dist/subscriptions.js +40 -0
  148. package/dist/subscriptions.js.map +1 -0
  149. package/dist/types/agent-lifecycle.d.ts +27 -0
  150. package/dist/types/agent-lifecycle.d.ts.map +1 -0
  151. package/dist/types/agent-lifecycle.js +6 -0
  152. package/dist/types/agent-lifecycle.js.map +1 -0
  153. package/dist/types/agent.d.ts +11 -0
  154. package/dist/types/agent.d.ts.map +1 -1
  155. package/dist/types/agent.js.map +1 -1
  156. package/dist/types/app-definition.d.ts +6 -2
  157. package/dist/types/app-definition.d.ts.map +1 -1
  158. package/dist/types/budget.d.ts +10 -1
  159. package/dist/types/budget.d.ts.map +1 -1
  160. package/dist/types/chat-channels.d.ts +31 -2
  161. package/dist/types/chat-channels.d.ts.map +1 -1
  162. package/dist/types/chat-channels.js +1 -0
  163. package/dist/types/chat-channels.js.map +1 -1
  164. package/dist/types/chat-github.d.ts +26 -1
  165. package/dist/types/chat-github.d.ts.map +1 -1
  166. package/dist/types/chat-github.js +2 -0
  167. package/dist/types/chat-github.js.map +1 -1
  168. package/dist/types/connection-intent.d.ts +3 -1
  169. package/dist/types/connection-intent.d.ts.map +1 -1
  170. package/dist/types/cost.d.ts +53 -3
  171. package/dist/types/cost.d.ts.map +1 -1
  172. package/dist/types/execution-projection.d.ts +2 -0
  173. package/dist/types/execution-projection.d.ts.map +1 -1
  174. package/dist/types/execution-projection.js.map +1 -1
  175. package/dist/types/finance.d.ts +35 -0
  176. package/dist/types/finance.d.ts.map +1 -1
  177. package/dist/types/github-app-setup.d.ts +55 -0
  178. package/dist/types/github-app-setup.d.ts.map +1 -0
  179. package/dist/types/github-app-setup.js +2 -0
  180. package/dist/types/github-app-setup.js.map +1 -0
  181. package/dist/types/heartbeat.d.ts +6 -0
  182. package/dist/types/heartbeat.d.ts.map +1 -1
  183. package/dist/types/index.d.ts +7 -6
  184. package/dist/types/index.d.ts.map +1 -1
  185. package/dist/types/index.js +2 -1
  186. package/dist/types/index.js.map +1 -1
  187. package/dist/types/instance.d.ts +25 -0
  188. package/dist/types/instance.d.ts.map +1 -1
  189. package/dist/types/instance.js +5 -0
  190. package/dist/types/instance.js.map +1 -1
  191. package/dist/types/issue.d.ts +72 -2
  192. package/dist/types/issue.d.ts.map +1 -1
  193. package/dist/types/plugin.d.ts +2 -0
  194. package/dist/types/plugin.d.ts.map +1 -1
  195. package/dist/types/project.d.ts +20 -0
  196. package/dist/types/project.d.ts.map +1 -1
  197. package/dist/types/quota.d.ts +4 -0
  198. package/dist/types/quota.d.ts.map +1 -1
  199. package/dist/types/tool-access.d.ts +16 -1
  200. package/dist/types/tool-access.d.ts.map +1 -1
  201. package/dist/types/tool-access.js.map +1 -1
  202. package/dist/types/user-profile.d.ts +1 -1
  203. package/dist/types/user-profile.d.ts.map +1 -1
  204. package/dist/types/voice-sessions.d.ts +103 -0
  205. package/dist/types/voice-sessions.d.ts.map +1 -0
  206. package/dist/types/voice-sessions.js +5 -0
  207. package/dist/types/voice-sessions.js.map +1 -0
  208. package/dist/validators/adapter-auth-session.d.ts +0 -2
  209. package/dist/validators/adapter-auth-session.d.ts.map +1 -1
  210. package/dist/validators/agent-commentary.d.ts +25 -0
  211. package/dist/validators/agent-commentary.d.ts.map +1 -0
  212. package/dist/validators/agent-commentary.js +12 -0
  213. package/dist/validators/agent-commentary.js.map +1 -0
  214. package/dist/validators/agent.d.ts +19 -5
  215. package/dist/validators/agent.d.ts.map +1 -1
  216. package/dist/validators/agent.js +3 -3
  217. package/dist/validators/agent.js.map +1 -1
  218. package/dist/validators/agent.test.d.ts +2 -0
  219. package/dist/validators/agent.test.d.ts.map +1 -0
  220. package/dist/validators/agent.test.js +27 -0
  221. package/dist/validators/agent.test.js.map +1 -0
  222. package/dist/validators/app-definition.d.ts +92 -0
  223. package/dist/validators/app-definition.d.ts.map +1 -1
  224. package/dist/validators/app-definition.js +8 -5
  225. package/dist/validators/app-definition.js.map +1 -1
  226. package/dist/validators/budget.d.ts +10 -5
  227. package/dist/validators/budget.d.ts.map +1 -1
  228. package/dist/validators/budget.js +9 -6
  229. package/dist/validators/budget.js.map +1 -1
  230. package/dist/validators/chat-channels.d.ts +26 -5
  231. package/dist/validators/chat-channels.d.ts.map +1 -1
  232. package/dist/validators/chat-channels.js +20 -6
  233. package/dist/validators/chat-channels.js.map +1 -1
  234. package/dist/validators/chat-github.d.ts +16 -6
  235. package/dist/validators/chat-github.d.ts.map +1 -1
  236. package/dist/validators/chat-github.js +4 -1
  237. package/dist/validators/chat-github.js.map +1 -1
  238. package/dist/validators/claude-setup-token-session.d.ts +0 -2
  239. package/dist/validators/claude-setup-token-session.d.ts.map +1 -1
  240. package/dist/validators/company-portability.d.ts +2 -0
  241. package/dist/validators/company-portability.d.ts.map +1 -1
  242. package/dist/validators/company-skill.js +1 -1
  243. package/dist/validators/company-skill.js.map +1 -1
  244. package/dist/validators/cost.d.ts +176 -6
  245. package/dist/validators/cost.d.ts.map +1 -1
  246. package/dist/validators/cost.js +17 -6
  247. package/dist/validators/cost.js.map +1 -1
  248. package/dist/validators/finance.d.ts +7 -4
  249. package/dist/validators/finance.d.ts.map +1 -1
  250. package/dist/validators/finance.js +4 -2
  251. package/dist/validators/finance.js.map +1 -1
  252. package/dist/validators/index.d.ts +5 -4
  253. package/dist/validators/index.d.ts.map +1 -1
  254. package/dist/validators/index.js +5 -4
  255. package/dist/validators/index.js.map +1 -1
  256. package/dist/validators/instance.d.ts +28 -0
  257. package/dist/validators/instance.d.ts.map +1 -1
  258. package/dist/validators/instance.js +32 -2
  259. package/dist/validators/instance.js.map +1 -1
  260. package/dist/validators/instance.test.js +35 -1
  261. package/dist/validators/instance.test.js.map +1 -1
  262. package/dist/validators/issue.d.ts +40 -3
  263. package/dist/validators/issue.d.ts.map +1 -1
  264. package/dist/validators/issue.js +23 -3
  265. package/dist/validators/issue.js.map +1 -1
  266. package/dist/validators/issue.test.js +60 -1
  267. package/dist/validators/issue.test.js.map +1 -1
  268. package/dist/validators/plugin.d.ts +2 -0
  269. package/dist/validators/plugin.d.ts.map +1 -1
  270. package/dist/validators/plugin.js +4 -0
  271. package/dist/validators/plugin.js.map +1 -1
  272. package/dist/validators/plugin.test.js +5 -0
  273. package/dist/validators/plugin.test.js.map +1 -1
  274. package/dist/validators/project.d.ts +16 -0
  275. package/dist/validators/project.d.ts.map +1 -1
  276. package/dist/validators/project.js +5 -0
  277. package/dist/validators/project.js.map +1 -1
  278. package/dist/validators/status-card.js +2 -2
  279. package/dist/validators/status-card.js.map +1 -1
  280. package/dist/validators/text.d.ts.map +1 -1
  281. package/dist/validators/text.js +5 -0
  282. package/dist/validators/text.js.map +1 -1
  283. package/dist/validators/tool-access.d.ts +9 -0
  284. package/dist/validators/tool-access.d.ts.map +1 -1
  285. package/dist/validators/tool-access.js +4 -1
  286. package/dist/validators/tool-access.js.map +1 -1
  287. package/dist/validators/voice-sessions.d.ts +27 -0
  288. package/dist/validators/voice-sessions.d.ts.map +1 -0
  289. package/dist/validators/voice-sessions.js +16 -0
  290. package/dist/validators/voice-sessions.js.map +1 -0
  291. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ export declare const DOT_RUNNER_MCP_PATH = "/mcp/runner";
3
+ export declare const DOT_RUNNER_MCP_SCOPES: readonly ["paperclip:agent", "offline_access"];
4
+ export declare const PUBLIC_MCP_PATH = "/mcp/paperclip";
5
+ export declare const PUBLIC_MCP_SCOPES: readonly ["paperclip:read", "paperclip:write", "paperclip:configure", "offline_access"];
6
+ export declare const mcpConsentSchema: z.ZodObject<{
7
+ decision: z.ZodEnum<{
8
+ approve: "approve";
9
+ deny: "deny";
10
+ }>;
11
+ companyId: z.ZodOptional<z.ZodString>;
12
+ allowWrites: z.ZodDefault<z.ZodBoolean>;
13
+ allowConfiguration: z.ZodDefault<z.ZodBoolean>;
14
+ }, z.core.$strict>;
15
+ export interface McpConnectionRequest {
16
+ id: string;
17
+ clientName: string;
18
+ redirectOrigin: string;
19
+ clientOrigin?: string | null;
20
+ agentConnection?: boolean;
21
+ requestedWrite: boolean;
22
+ requestedConfigure?: boolean;
23
+ offlineAccess: boolean;
24
+ requiresSignIn: boolean;
25
+ /** Fixed by the authorization request; null permits direct-instance selection. */
26
+ requestedCompanyId: string | null;
27
+ companies: Array<{
28
+ id: string;
29
+ name: string;
30
+ logoUrl: string | null;
31
+ canWrite: boolean;
32
+ }>;
33
+ setupUrl: string | null;
34
+ }
35
+ export interface McpConnectionSetup {
36
+ enabled: boolean;
37
+ serverUrl: string;
38
+ invitationUrl: string;
39
+ invitation: string;
40
+ }
41
+ export interface McpConnection {
42
+ id: string;
43
+ companyId: string;
44
+ clientName: string;
45
+ companyName: string;
46
+ /** The signed-in person who authorized this connection; absent on older servers. */
47
+ user?: {
48
+ name: string;
49
+ image: string | null;
50
+ } | null;
51
+ scopes: string[];
52
+ createdAt: string;
53
+ revokedAt: string | null;
54
+ }
55
+ /** Code-scoped details shown before activating an operator-approved Dot agent. */
56
+ export interface McpDotPairingPreview {
57
+ company: {
58
+ id: string;
59
+ name: string;
60
+ };
61
+ agent: {
62
+ id: string;
63
+ name: string;
64
+ };
65
+ permissions: string;
66
+ accessDuration: string;
67
+ pairingExpiresAt: string;
68
+ }
69
+ //# sourceMappingURL=public-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-mcp.d.ts","sourceRoot":"","sources":["../src/public-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AACjD,eAAO,MAAM,qBAAqB,YAAI,iBAAiB,EAAE,gBAAgB,CAAU,CAAC;AACpF,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,iBAAiB,YAAI,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,CAAU,CAAC;AACzH,eAAO,MAAM,gBAAgB;;;;;;;;kBAKlB,CAAC;AAEZ,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACrD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ export const DOT_RUNNER_MCP_PATH = "/mcp/runner";
3
+ export const DOT_RUNNER_MCP_SCOPES = ["paperclip:agent", "offline_access"];
4
+ export const PUBLIC_MCP_PATH = "/mcp/paperclip";
5
+ export const PUBLIC_MCP_SCOPES = ["paperclip:read", "paperclip:write", "paperclip:configure", "offline_access"];
6
+ export const mcpConsentSchema = z.object({
7
+ decision: z.enum(["approve", "deny"]),
8
+ companyId: z.string().uuid().optional(),
9
+ allowWrites: z.boolean().default(false),
10
+ allowConfiguration: z.boolean().default(false),
11
+ }).strict();
12
+ //# sourceMappingURL=public-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-mcp.js","sourceRoot":"","sources":["../src/public-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAU,CAAC;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,CAAU,CAAC;AACzH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACvC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC/C,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -5,12 +5,12 @@
5
5
  { "slug": "jira", "name": "Jira", "wave": 1, "status": "self_serve", "docsUrl": "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/", "serverUrl": "https://mcp.atlassian.com/v1/mcp/authv2", "authMode": "dcr_cimd", "prerequisite": "An active Jira or Confluence site; tenant policy may require an administrator to approve the client.", "riskTier": "S3" },
6
6
  { "slug": "airtable", "name": "Airtable", "wave": 1, "status": "self_serve", "docsUrl": "https://support.airtable.com/articles/9897799762-using-the-airtable-mcp-server", "serverUrl": "https://mcp.airtable.com/mcp", "authMode": "dcr", "prerequisite": "An Airtable account; enterprise administrators may need to allowlist the client.", "riskTier": "S3" },
7
7
  { "slug": "beehiiv", "name": "beehiiv", "wave": 1, "status": "self_serve", "docsUrl": "https://www.beehiiv.com/features/mcp/getting-started", "serverUrl": "https://mcp.beehiiv.com/mcp", "authMode": "dcr", "prerequisite": "A beehiiv account; the subscription plan controls available write capabilities.", "riskTier": "S3" },
8
- { "slug": "bitly", "name": "Bitly", "wave": 1, "status": "self_serve", "docsUrl": "https://dev.bitly.com/bitly-mcp/overview/quickstart/", "serverUrl": "https://api-ssl.bitly.com/v4/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Bitly account with either browser authorization or an API token.", "riskTier": "S2" },
8
+ { "slug": "bitly", "name": "Bitly", "wave": 1, "status": "self_serve", "docsUrl": "https://dev.bitly.com/bitly-mcp/overview/quickstart/", "serverUrl": "https://api-ssl.bitly.com/v4/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Bitly account. OAuth mcp.all or a personal API token grants the account-authorized MCP catalog, including publishing, domain management, and permanent deletion; review each action before enabling it.", "riskTier": "S4", "verifiedAt": "2026-10-09", "browserOnboarding": "completed-oauth", "liveRead": "passed: bitly_get_user through UI Test; reload and catalog refresh persisted 56 actions, zero selected agents, writes Off", "liveWrite": "not-run", "blocker": null },
9
9
  { "slug": "candid", "name": "Candid", "wave": 1, "status": "self_serve", "docsUrl": "https://learning.candid.org/getting-started-with-the-candid-mcp-connector/375441", "serverUrl": "https://mcp.candid.org/mcp", "authMode": "dcr", "prerequisite": "A Candid account with access to the MCP connector.", "riskTier": "S2" },
10
10
  { "slug": "cloudflare", "name": "Cloudflare", "wave": 1, "status": "self_serve", "docsUrl": "https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/", "serverUrl": "https://mcp.cloudflare.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Cloudflare account with access to the resources being connected.", "riskTier": "S3" },
11
11
  { "slug": "cloudinary", "name": "Cloudinary", "wave": 1, "status": "self_serve", "docsUrl": "https://cloudinary.com/documentation/cloudinary_llm_mcp", "serverUrl": "https://asset-management.mcp.cloudinary.com/mcp", "authMode": "dcr", "prerequisite": "A Cloudinary account; authorization is limited by the signed-in user's roles.", "riskTier": "S3" },
12
12
  { "slug": "coda", "name": "Coda", "wave": 1, "status": "self_serve", "docsUrl": "https://help.coda.io/hc/en-us/articles/44722769665549-Security-recommendations-for-the-Coda-MCP", "serverUrl": "https://coda.io/apis/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Coda account; the hosted MCP service is currently beta.", "riskTier": "S3" },
13
- { "slug": "hugging-face", "name": "Hugging Face", "wave": 1, "status": "self_serve", "docsUrl": "https://huggingface.co/docs/hub/agents-mcp", "serverUrl": "https://huggingface.co/mcp?login&gradio=none", "authMode": "dcr_cimd", "prerequisite": "A Hugging Face account.", "riskTier": "S2" },
13
+ { "slug": "hugging-face", "name": "Hugging Face", "wave": 2, "status": "self_serve", "docsUrl": "https://huggingface.co/docs/hub/agents-mcp", "serverUrl": "https://huggingface.co/mcp", "authMode": "public", "prerequisite": "No account, OAuth grant, or API key is needed for anonymous public Hub lookup. Hugging Face says anonymous requests are rate-limited.", "riskTier": "S1", "verifiedAt": "2026-10-09", "browserOnboarding": "completed-public-no-auth", "liveRead": "passed in Paperclip UI: hf_fs search hf://docs MCP --limit 3 returned public documentation; repeated after reload (0.7s, 0.8s). UI discovery showed 4 Read / 0 Write and no agents can use the connection.", "liveWrite": "not-applicable", "blocker": null },
14
14
  { "slug": "kernel", "name": "Kernel", "wave": 1, "status": "self_serve", "docsUrl": "https://www.kernel.sh/docs/reference/mcp-server/", "serverUrl": "https://mcp.onkernel.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Kernel account with either browser authorization or an API key.", "riskTier": "S3" },
15
15
  { "slug": "local-falcon", "name": "Local Falcon", "wave": 1, "status": "self_serve", "docsUrl": "https://docs.localfalcon.com/", "serverUrl": "https://mcp.localfalcon.com", "authMode": "dcr", "prerequisite": "A Local Falcon account with MCP access.", "riskTier": "S2" },
16
16
  { "slug": "make", "name": "Make", "wave": 1, "status": "self_serve", "docsUrl": "https://developers.make.com/mcp-server", "serverUrl": "https://mcp.make.com", "authMode": "dcr", "prerequisite": "A Make account and access to the scenarios exposed to MCP.", "riskTier": "S3" },
@@ -21,7 +21,7 @@
21
21
  { "slug": "oreilly", "name": "O'Reilly", "wave": 1, "status": "self_serve", "docsUrl": "https://learning.oreilly.com/apidocs/mcp/content/", "serverUrl": "https://api.oreilly.com/api/content-discovery/v1/mcp/", "authMode": "dcr_or_api_key", "prerequisite": "An O'Reilly Learning subscription with MCP or API access.", "riskTier": "S2" },
22
22
  { "slug": "planetscale", "name": "PlanetScale", "wave": 1, "status": "self_serve", "docsUrl": "https://planetscale.com/docs/connect/mcp", "serverUrl": "https://mcp.pscale.dev/mcp/planetscale", "authMode": "dcr", "prerequisite": "A PlanetScale account; database and branch access are chosen during authorization.", "riskTier": "S4" },
23
23
  { "slug": "posthog", "name": "PostHog", "wave": 1, "status": "self_serve", "docsUrl": "https://posthog.com/docs/model-context-protocol", "serverUrl": "https://mcp.posthog.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A PostHog account; personal API keys and optional organization or project pinning are supported as alternatives and advanced controls.", "riskTier": "S3" },
24
- { "slug": "resend", "name": "Resend", "wave": 1, "status": "self_serve", "docsUrl": "https://resend.com/changelog/remote-mcp-server", "serverUrl": "https://mcp.resend.com/mcp", "authMode": "dcr", "prerequisite": "A Resend account with access to the relevant domains.", "riskTier": "S3" },
24
+ { "slug": "resend", "name": "Resend", "wave": 2, "status": "self_serve", "docsUrl": "https://resend.com/changelog/remote-mcp-server", "serverUrl": "https://mcp.resend.com/mcp", "authMode": "dcr", "prerequisite": "A Resend team account. OAuth full_access grants broad resource read/write/delete and sending capability; review the discovered actions and configure Paperclip access before use.", "riskTier": "S4", "verifiedAt": "2026-10-09", "browserOnboarding": "completed-oauth", "liveRead": "passed: List Domains succeeded twice via the Paperclip Permissions Test dialog as Connector Tester; each returned one entry. No provider-returned domain content is retained here.", "liveWrite": "not-run", "blocker": null, "evidenceLimit": "The live test used Paperclip's synthetic Connector Tester, not a real agent runtime. Final reloaded Paperclip policy showed all 55 Read and 77 Write actions Off, Just me, and Just agents I pick with zero selected. No provider write, delete, or email send occurred. OAuth scope full_access remains provider-wide; disabling Paperclip actions does not narrow the granted provider token." },
25
25
  { "slug": "sentry", "name": "Sentry", "wave": 1, "status": "self_serve", "docsUrl": "https://mcp.sentry.dev/.well-known/oauth-authorization-server", "serverUrl": "https://mcp.sentry.dev/mcp", "authMode": "dcr_cimd", "prerequisite": "A Sentry account with access to the relevant organizations and projects.", "riskTier": "S3" },
26
26
  { "slug": "ticktick", "name": "TickTick", "wave": 1, "status": "self_serve", "docsUrl": "https://help.ticktick.com/articles/7438129581631995904", "serverUrl": "https://mcp.ticktick.com", "authMode": "dcr", "prerequisite": "A TickTick account with MCP access.", "riskTier": "S3" },
27
27
  { "slug": "todoist", "name": "Todoist", "wave": 1, "status": "self_serve", "docsUrl": "https://developer.todoist.com/", "serverUrl": "https://ai.todoist.net/mcp", "authMode": "dcr", "prerequisite": "A Todoist account.", "riskTier": "S3" },
@@ -54,6 +54,20 @@
54
54
  { "slug": "zep", "name": "Zep", "wave": 3, "status": "self_serve", "docsUrl": "https://help.getzep.com/memory-mcp-server", "serverUrl": "https://api.getzep.com/mcp", "authMode": "dcr_cimd", "prerequisite": "A Zep project with Memory MCP enabled, available MCP seats, and Google Workspace or enterprise OIDC configured by its administrator. Project API keys do not authenticate Memory MCP.", "riskTier": "S3" },
55
55
  { "slug": "supermemory", "name": "Supermemory", "wave": 3, "status": "self_serve", "docsUrl": "https://supermemory.ai/docs/supermemory-mcp/mcp", "serverUrl": "https://mcp.supermemory.ai/mcp", "authMode": "dcr", "prerequisite": "Sign in to Supermemory and select the spaces this connection may access. The hosted MCP uses OAuth, not a developer API key.", "riskTier": "S3" },
56
56
  { "slug": "honcho", "name": "Honcho", "wave": 3, "status": "self_serve", "docsUrl": "https://honcho.dev/docs/v3/guides/integrations/mcp", "serverUrl": "https://mcp.honcho.dev", "authMode": "api_key", "prerequisite": "An API key from the Honcho dashboard. Memory is stored in your Honcho account; select workspace and peer identifiers when calling tools.", "riskTier": "S3" },
57
- { "slug": "neon", "name": "Neon", "wave": 4, "status": "self_serve", "docsUrl": "https://neon.com/docs/ai/neon-mcp-server", "serverUrl": "https://mcp.neon.tech/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Neon account. The hosted server grants broad project and database management, so use a development project and review write actions before connecting production data.", "riskTier": "S4" }
57
+ { "slug": "neon", "name": "Neon", "wave": 4, "status": "self_serve", "docsUrl": "https://neon.com/docs/ai/neon-mcp-server", "serverUrl": "https://mcp.neon.tech/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Neon account. The hosted server grants broad project and database management, so use a development project and review write actions before connecting production data.", "riskTier": "S4" },
58
+ { "slug": "superagent", "name": "Superagent", "wave": 4, "status": "self_serve", "docsUrl": "https://www.superagent.sh/docs/mcp", "serverUrl": "https://www.superagent.sh/mcp", "authMode": "api_key", "prerequisite": "Superagent report and triage tools consume organization credits, and deleting a finding is permanent. Set those actions to Ask first before agents run unattended.", "riskTier": "S4" },
59
+ { "slug": "telem", "name": "Telem.AI", "wave": 4, "status": "self_serve", "docsUrl": "https://docs.telem.ai", "serverUrl": "https://mcp.telem.ai/mcp", "authMode": "api_key", "prerequisite": "A Telem API key. Create one in the Telem console at app.telem.ai.", "riskTier": "S2" },
60
+ { "slug": "gauge", "name": "Gauge", "wave": 4, "status": "self_serve", "docsUrl": "https://docs.withgauge.com/help/mcp", "serverUrl": "https://app.withgauge.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Gauge account. Each connection reaches one Gauge organization: sign-in uses the organization chosen during consent, and an API key uses the organization that created it.", "riskTier": "S3" },
61
+ { "slug": "tavily", "name": "Tavily", "wave": 2, "status": "self_serve", "docsUrl": "https://docs.tavily.com/documentation/mcp", "serverUrl": "https://mcp.tavily.com/mcp", "authMode": "dcr", "prerequisite": "OAuth uses the Tavily API key selected by account settings. Name a key `mcp_auth_default` to select it explicitly; otherwise Tavily uses the personal default key or first available key.", "riskTier": "S2", "verifiedAt": "2026-10-08" },
62
+ { "slug": "calendly", "name": "Calendly", "wave": 2, "status": "self_serve", "docsUrl": "https://developer.calendly.com/docs/mcp/calendly-mcp-server", "serverUrl": "https://mcp.calendly.com", "authMode": "dcr", "prerequisite": "Connect with a Calendly account that has the desired scheduling permissions.", "riskTier": "S3", "verifiedAt": "2026-10-08" },
63
+ { "slug": "exa", "name": "Exa", "wave": 3, "status": "self_serve", "docsUrl": "https://exa.ai/docs/get-started/exa-mcp", "serverUrl": "https://mcp.exa.ai/mcp", "authMode": "public", "prerequisite": "The public MCP route provides web search and page fetching. Keep citations with results. Account-authenticated Agent and advanced tools are not included in this method.", "riskTier": "S3", "verifiedAt": "2026-10-08" },
64
+ { "slug": "firecrawl", "name": "Firecrawl", "wave": 3, "status": "self_serve", "docsUrl": "https://docs.firecrawl.dev/mcp-server", "serverUrl": "https://mcp.firecrawl.dev/v2/mcp-oauth", "authMode": "dcr_or_api_key", "prerequisite": "Sign in and choose the Firecrawl team whose usage should apply. This route exposes the account-authorized tool surface; review paid jobs and action policies before execution.", "riskTier": "S4", "verifiedAt": "2026-10-08" },
65
+ { "slug": "parallel-search", "name": "Parallel Search", "wave": 3, "status": "self_serve", "docsUrl": "https://docs.parallel.ai/integrations/mcp/search-mcp", "serverUrl": "https://search.parallel.ai/mcp", "authMode": "public", "prerequisite": "The public route exposes web_search and web_fetch. Keep source URLs, excerpts, and retrieval context in the result; this is separate from Parallel Task MCP.", "riskTier": "S3", "verifiedAt": "2026-10-08" },
66
+ { "slug": "windsor-ai", "name": "Windsor.ai", "wave": 3, "status": "self_serve", "docsUrl": "https://mcp.windsor.ai/", "serverUrl": "https://mcp.windsor.ai/", "authMode": "dcr_or_api_key", "prerequisite": "Connect Windsor.ai, then verify which advertising, analytics, CRM, or warehouse sources are linked. Keep source account and metric definitions with results. Review any action that changes campaigns, budgets, posts, or listings.", "riskTier": "S4", "verifiedAt": "2026-10-08" },
67
+ { "slug": "gsc-wizard", "name": "GSC Wizard", "wave": 3, "status": "self_serve", "docsUrl": "https://www.gscwizard.com/claude-search-console-mcp.html", "serverUrl": "https://mcp.gscwizard.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "Connect the GSC Wizard account and its authorized properties. Check site identity and date bounds before querying; review any URL submission or property-changing action separately.", "riskTier": "S3", "verifiedAt": "2026-10-08" },
68
+ { "slug": "clickup", "name": "ClickUp", "wave": 1, "status": "self_serve", "docsUrl": "https://developer.clickup.com/docs/connect-an-ai-assistant-to-clickups-mcp-server", "serverUrl": "https://mcp.clickup.com/mcp", "authMode": "dcr", "prerequisite": "Sign in to a ClickUp account and select only the intended workspace. Actions remain bounded by the signed-in user’s ClickUp permissions; MCP calls may be subject to workspace-plan rate limits.", "riskTier": "S4", "verifiedAt": "2026-10-09", "browserOnboarding": "blocked-login", "liveRead": "not-run", "blocker": "Fresh and retained Google sign-in both returned to the blank ClickUp login form with Password required" },
69
+ { "slug": "klaviyo", "name": "Klaviyo", "wave": 2, "status": "self_serve", "docsUrl": "https://developers.klaviyo.com/en/docs/connect_to_the_klaviyo_mcp_server", "serverUrl": "https://mcp.klaviyo.com/mcp?toolsets=campaigns:read,campaigns:write,metrics:read,segments:read", "authMode": "dcr", "prerequisite": "Hosted MCP requires a Klaviyo Owner, Admin, or Manager role. The server's toolsets parameter selects campaign read/write, metrics read, and segment read catalog families; exact authenticated actions still need review.", "riskTier": "S4", "verifiedAt": "2026-10-09", "browserOnboarding": "pending-client-approval", "liveRead": "not-run", "blocker": "Initial client authorization awaits user approval; account and scopes not yet enumerated" },
70
+ { "slug": "monday", "name": "monday.com", "wave": 2, "status": "blocked", "docsUrl": "https://developer.monday.com/api-reference/docs/integrate-with-monday-mcp", "serverUrl": "https://mcp.monday.com/mcp", "authMode": "provider_approval", "prerequisite": "Provider DCR rejects the Paperclip HTTPS callback with HTTP 400: redirect_uris are not allowed. Contact monday.com to allowlist the callback before OAuth setup; account-admin approval may also be needed.", "riskTier": "S4", "verifiedAt": "2026-10-09", "browserOnboarding": "blocked-callback-allowlist", "liveRead": "not-run", "blocker": "Provider callback allowlisting required" },
71
+ { "slug": "context7", "name": "Context7", "wave": 2, "status": "self_serve", "docsUrl": "https://context7.com/docs/api-guide", "serverUrl": "https://mcp.context7.com/mcp", "authMode": "public", "prerequisite": "No account or API key is required for anonymous remote MCP use; the official docs state anonymous requests have low rate limits. An optional API key raises limits and supports private repositories, but this curated method does not request or store one.", "riskTier": "S1", "verifiedAt": "2026-10-09", "browserOnboarding": "completed-public-no-auth", "liveRead": "passed: resolve-library-id and query-docs returned React public documentation; repeat query passed after reload with 0 agents selected", "liveWrite": "not-applicable", "blocker": null }
58
72
  ]
59
73
  }
@@ -0,0 +1,128 @@
1
+ import { z } from "zod";
2
+ import type { SlackAppConfiguration } from "./types/chat-channels.js";
3
+ export declare const SLACK_CHAT_BOT_SCOPES: readonly ["app_mentions:read", "assistant:write", "channels:history", "channels:read", "chat:write", "commands", "files:read", "files:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "reactions:read", "reactions:write", "users:read"];
4
+ export declare function defaultSlackAppConfiguration(agentName: string): SlackAppConfiguration;
5
+ export declare function buildSlackAppManifest(input: {
6
+ app: SlackAppConfiguration;
7
+ agentName: string;
8
+ webhookUrl: string;
9
+ redirectUri?: string;
10
+ }): {
11
+ display_information: {
12
+ name: string;
13
+ };
14
+ features: {
15
+ app_home: {
16
+ home_tab_enabled: boolean;
17
+ messages_tab_enabled: boolean;
18
+ messages_tab_read_only_enabled: boolean;
19
+ };
20
+ agent_view: {
21
+ agent_description: string;
22
+ };
23
+ bot_user: {
24
+ display_name: string;
25
+ };
26
+ slash_commands: {
27
+ command: string;
28
+ description: string;
29
+ usage_hint: string;
30
+ should_escape: boolean;
31
+ url: string;
32
+ }[];
33
+ };
34
+ oauth_config: {
35
+ scopes: {
36
+ bot: ("app_mentions:read" | "assistant:write" | "bookmarks:read" | "bookmarks:write" | "canvases:read" | "canvases:write" | "channels:history" | "channels:manage" | "channels:read" | "channels:write.topic" | "chat:write" | "commands" | "emoji:read" | "files:read" | "files:write" | "groups:history" | "groups:read" | "groups:write" | "groups:write.topic" | "im:history" | "im:read" | "im:write" | "lists:read" | "lists:write" | "mpim:history" | "mpim:read" | "pins:read" | "pins:write" | "reactions:read" | "reactions:write" | "users:read")[];
37
+ };
38
+ redirect_urls?: string[] | undefined;
39
+ };
40
+ settings: {
41
+ org_deploy_enabled: boolean;
42
+ socket_mode_enabled: boolean;
43
+ token_rotation_enabled: boolean;
44
+ event_subscriptions: {
45
+ request_url: string;
46
+ bot_events: string[];
47
+ };
48
+ interactivity: {
49
+ is_enabled: boolean;
50
+ request_url: string;
51
+ };
52
+ };
53
+ };
54
+ export declare const slackRegistrationSchema: z.ZodObject<{
55
+ requestId: z.ZodString;
56
+ credentials: z.ZodObject<{
57
+ configurationToken: z.ZodString;
58
+ }, z.core.$strict>;
59
+ confirmedNoAppCreated: z.ZodOptional<z.ZodBoolean>;
60
+ }, z.core.$strict>;
61
+ export type SlackRegistrationInput = z.infer<typeof slackRegistrationSchema>;
62
+ export declare const slackRegistrationStatusSchema: z.ZodEnum<{
63
+ configured: "configured";
64
+ creating: "creating";
65
+ credentials_saved: "credentials_saved";
66
+ failed: "failed";
67
+ install: "install";
68
+ removed: "removed";
69
+ uncertain: "uncertain";
70
+ }>;
71
+ export type SlackRegistrationStatus = z.infer<typeof slackRegistrationStatusSchema>;
72
+ export declare const slackRegistrationStateSchema: z.ZodObject<{
73
+ status: z.ZodEnum<{
74
+ configured: "configured";
75
+ creating: "creating";
76
+ credentials_saved: "credentials_saved";
77
+ failed: "failed";
78
+ install: "install";
79
+ removed: "removed";
80
+ uncertain: "uncertain";
81
+ }>;
82
+ appId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
83
+ managementUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
84
+ errorCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
85
+ }, z.core.$strict>;
86
+ export type SlackRegistrationState = z.infer<typeof slackRegistrationStateSchema>;
87
+ export declare const slackAvatarStateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
88
+ status: z.ZodLiteral<"pending">;
89
+ }, z.core.$strict>, z.ZodObject<{
90
+ status: z.ZodLiteral<"uploaded">;
91
+ uploadedAt: z.ZodString;
92
+ }, z.core.$strict>, z.ZodObject<{
93
+ status: z.ZodLiteral<"failed">;
94
+ errorCode: z.ZodLiteral<"slack_avatar_upload_failed">;
95
+ }, z.core.$strict>], "status">;
96
+ export type SlackAvatarState = z.infer<typeof slackAvatarStateSchema>;
97
+ export declare const slackAccountStateSchema: z.ZodObject<{
98
+ externalUserId: z.ZodString;
99
+ paperclipUserId: z.ZodString;
100
+ status: z.ZodEnum<{
101
+ linked: "linked";
102
+ pending: "pending";
103
+ }>;
104
+ welcomeStatus: z.ZodEnum<{
105
+ failed: "failed";
106
+ pending: "pending";
107
+ sending: "sending";
108
+ sent: "sent";
109
+ uncertain: "uncertain";
110
+ }>;
111
+ verificationStatus: z.ZodOptional<z.ZodEnum<{
112
+ failed: "failed";
113
+ pending: "pending";
114
+ sending: "sending";
115
+ sent: "sent";
116
+ uncertain: "uncertain";
117
+ }>>;
118
+ dmChannelId: z.ZodOptional<z.ZodString>;
119
+ }, z.core.$strict>;
120
+ export type SlackAccountState = z.infer<typeof slackAccountStateSchema>;
121
+ export declare const slackInstallAuthorizationSchema: z.ZodObject<{
122
+ authorizationUrl: z.ZodString;
123
+ expiresAt: z.ZodString;
124
+ }, z.core.$strip>;
125
+ export type SlackInstallAuthorization = z.infer<typeof slackInstallAuthorizationSchema>;
126
+ export declare const slackSetupActionSchema: z.ZodObject<{}, z.core.$strict>;
127
+ export declare function slackRegistrationErrorMessage(code: string): string;
128
+ //# sourceMappingURL=slack-app-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-app-manifest.d.ts","sourceRoot":"","sources":["../src/slack-app-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,eAAO,MAAM,qBAAqB,YAChC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAC3E,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EACvE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EACnE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,CACzC,CAAC;AAEX,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,GAAG,EAAE,qBAAqB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;QAE0B,IAAI;;;;YAEb,gBAAgB;YAAS,oBAAoB;YAAQ,8BAA8B;;;YACjF,iBAAiB;;;YACnB,YAAY;;;;;;;;;;;;YAKd,GAAG;;;;;QAIb,kBAAkB;QAAS,mBAAmB;QAAS,sBAAsB;QAC7E,mBAAmB;YACjB,WAAW;YACX,UAAU;;QAKZ,aAAa;YAAI,UAAU;YAAQ,WAAW;;;EAGnD;AAED,eAAO,MAAM,uBAAuB;;;;;;kBAIzB,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC7E,eAAO,MAAM,6BAA6B;;;;;;;;EAAuG,CAAC;AAClJ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;kBAK9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,eAAO,MAAM,sBAAsB;;;;;;;;8BAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;kBAOzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,eAAO,MAAM,+BAA+B;;;iBAAqF,CAAC;AAClI,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,eAAO,MAAM,sBAAsB,iCAAwB,CAAC;AAE5D,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBlE"}
@@ -0,0 +1,88 @@
1
+ import { z } from "zod";
2
+ import { SLACK_BOT_TOOL_SCOPES } from "./slack-tools.js";
3
+ export const SLACK_CHAT_BOT_SCOPES = [
4
+ "app_mentions:read", "assistant:write", "channels:history", "channels:read",
5
+ "chat:write", "commands", "files:read", "files:write", "groups:history",
6
+ "groups:read", "im:history", "im:read", "mpim:history", "mpim:read",
7
+ "reactions:read", "reactions:write", "users:read",
8
+ ];
9
+ export function defaultSlackAppConfiguration(agentName) {
10
+ const botName = agentName.normalize("NFKD").toLowerCase()
11
+ .replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 24) || "paperclip-agent";
12
+ return { appName: `${botName}-paperclip`, botName, command: `/${botName.replace(/[._]+/g, "-")}` };
13
+ }
14
+ export function buildSlackAppManifest(input) {
15
+ return {
16
+ display_information: { name: input.app.appName },
17
+ features: {
18
+ app_home: { home_tab_enabled: false, messages_tab_enabled: true, messages_tab_read_only_enabled: false },
19
+ agent_view: { agent_description: "Work with a Paperclip agent in a task-backed conversation." },
20
+ bot_user: { display_name: input.app.botName },
21
+ slash_commands: [{ command: input.app.command, description: `Start or manage work with ${input.agentName}`,
22
+ usage_hint: "status | new | close | <task>", should_escape: false, url: input.webhookUrl }],
23
+ },
24
+ oauth_config: {
25
+ scopes: { bot: [...SLACK_CHAT_BOT_SCOPES, ...SLACK_BOT_TOOL_SCOPES] },
26
+ ...(input.redirectUri ? { redirect_urls: [input.redirectUri] } : {}),
27
+ },
28
+ settings: {
29
+ org_deploy_enabled: false, socket_mode_enabled: false, token_rotation_enabled: false,
30
+ event_subscriptions: {
31
+ request_url: input.webhookUrl,
32
+ bot_events: ["agent_session_stopped", "app_mention", "message.channels", "message.groups", "message.im", "message.mpim",
33
+ "member_joined_channel", "member_left_channel", "channel_left", "group_left", "reaction_added", "reaction_removed",
34
+ "channel_archive", "group_archive", "channel_unarchive", "group_unarchive", "channel_deleted", "channel_rename",
35
+ "group_rename", "app_uninstalled", "tokens_revoked"],
36
+ },
37
+ interactivity: { is_enabled: true, request_url: input.webhookUrl },
38
+ },
39
+ };
40
+ }
41
+ export const slackRegistrationSchema = z.object({
42
+ requestId: z.string().uuid(),
43
+ credentials: z.object({ configurationToken: z.string().trim().min(1).max(4096) }).strict(),
44
+ confirmedNoAppCreated: z.boolean().optional(),
45
+ }).strict();
46
+ export const slackRegistrationStatusSchema = z.enum(["creating", "uncertain", "failed", "install", "credentials_saved", "configured", "removed"]);
47
+ export const slackRegistrationStateSchema = z.object({
48
+ status: slackRegistrationStatusSchema,
49
+ appId: z.string().nullable().optional(),
50
+ managementUrl: z.string().url().nullable().optional(),
51
+ errorCode: z.string().nullable().optional(),
52
+ }).strict();
53
+ export const slackAvatarStateSchema = z.discriminatedUnion("status", [
54
+ z.object({ status: z.literal("pending") }).strict(),
55
+ z.object({ status: z.literal("uploaded"), uploadedAt: z.string().datetime() }).strict(),
56
+ z.object({ status: z.literal("failed"), errorCode: z.literal("slack_avatar_upload_failed") }).strict(),
57
+ ]);
58
+ export const slackAccountStateSchema = z.object({
59
+ externalUserId: z.string().regex(/^[UW][A-Z0-9]+$/),
60
+ paperclipUserId: z.string().min(1),
61
+ status: z.enum(["pending", "linked"]),
62
+ welcomeStatus: z.enum(["pending", "sending", "sent", "failed", "uncertain"]),
63
+ verificationStatus: z.enum(["pending", "sending", "sent", "failed", "uncertain"]).optional(),
64
+ dmChannelId: z.string().regex(/^D[A-Z0-9]+$/).optional(),
65
+ }).strict();
66
+ export const slackInstallAuthorizationSchema = z.object({ authorizationUrl: z.string().url(), expiresAt: z.string().datetime() });
67
+ export const slackSetupActionSchema = z.object({}).strict();
68
+ export function slackRegistrationErrorMessage(code) {
69
+ const messages = {
70
+ slack_configuration_token_invalid: "Slack rejected the app configuration access token. Generate a new access token and try again.",
71
+ slack_manifest_invalid: "Slack rejected this app configuration. Check the app details or use manual setup.",
72
+ slack_manifest_update_pending: "Your Slack app is saved, but its event settings still need to be applied. Enter an app configuration access token to retry configuring the same app.",
73
+ slack_setup_rate_limited: "Slack is limiting setup requests. Wait a minute and try again.",
74
+ slack_setup_permission_denied: "Slack requires permission to create or install this app. Ask your workspace administrator.",
75
+ slack_creation_uncertain: "Slack may have created the app. Check your Slack app settings before trying again, or connect the existing app manually.",
76
+ slack_install_declined: "Installation was not approved. You can install the same app when you are ready.",
77
+ slack_install_expired: "Slack authorization expired. Install the same app again to continue.",
78
+ slack_install_failed: "Slack installation could not be completed. Authorize the same app again.",
79
+ slack_install_identity_mismatch: "Slack returned a different app, workspace, or bot. Install the app created for this connection.",
80
+ slack_install_scopes_missing: "Slack did not grant all required bot permissions. Install the app again and approve its requested permissions.",
81
+ slack_bot_already_connected: "This Slack bot is already connected to Paperclip. Resume its existing connection or use a different app.",
82
+ slack_configuration_incomplete: "The app is installed, but Paperclip could not finish connecting it. Retry connecting the saved installation.",
83
+ slack_install_account_missing: "Slack did not identify your account. Authorize the same app again to connect your Slack account.",
84
+ slack_install_account_conflict: "This Slack account already has an existing link. Manage account links in connection settings, or authorize with your own Slack account.",
85
+ };
86
+ return messages[code] ?? "Slack setup could not be completed. Resume setup and try again.";
87
+ }
88
+ //# sourceMappingURL=slack-app-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-app-manifest.js","sourceRoot":"","sources":["../src/slack-app-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=slack-app-manifest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-app-manifest.test.d.ts","sourceRoot":"","sources":["../src/slack-app-manifest.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildSlackAppManifest, defaultSlackAppConfiguration, slackRegistrationSchema, slackAccountStateSchema } from "./slack-app-manifest.js";
3
+ import { createChatEndpointSchema, slackAppConfigurationSchema } from "./validators/chat-channels.js";
4
+ describe("Slack app manifest", () => {
5
+ it("preserves older account setup state and validates optional verification delivery state", () => {
6
+ const account = { externalUserId: "UINSTALLER", paperclipUserId: "board-user", status: "linked", welcomeStatus: "sent" };
7
+ expect(slackAccountStateSchema.safeParse(account).success).toBe(true);
8
+ for (const verificationStatus of ["pending", "sending", "sent", "failed", "uncertain"]) {
9
+ expect(slackAccountStateSchema.safeParse({ ...account, verificationStatus }).success).toBe(true);
10
+ }
11
+ expect(slackAccountStateSchema.safeParse({ ...account, verificationStatus: "delivered" }).success).toBe(false);
12
+ });
13
+ it("uses readable, valid agent defaults and accepts them atomically with a new Slack draft", () => {
14
+ expect(defaultSlackAppConfiguration("Maya")).toEqual({ appName: "maya-paperclip", botName: "maya", command: "/maya" });
15
+ for (const name of ["Research Lead", "Áda Lovelace", "A.B_C", "", "Very long agent name that needs truncating"]) {
16
+ expect(slackAppConfigurationSchema.safeParse(defaultSlackAppConfiguration(name)).success).toBe(true);
17
+ }
18
+ const request = { provider: "slack", assignedAgentId: "12345678-1234-4123-8123-123456789abc", slackApp: defaultSlackAppConfiguration("Maya") };
19
+ expect(createChatEndpointSchema.safeParse(request).success).toBe(true);
20
+ expect(createChatEndpointSchema.safeParse({ ...request, provider: "discord" }).success).toBe(false);
21
+ });
22
+ const input = { app: { appName: 'Research "Ops"', botName: "research-ops", command: "/research" }, agentName: "Maya", webhookUrl: "https://ingress.example/api/chat-webhooks/public/slack" };
23
+ it("uses identical manual and automatic configuration except the OAuth redirect", () => {
24
+ const manual = buildSlackAppManifest(input);
25
+ const automatic = buildSlackAppManifest({ ...input, redirectUri: "https://board.example/api/chat-slack/oauth/callback" });
26
+ expect(automatic).toEqual({ ...manual, oauth_config: { ...manual.oauth_config, redirect_urls: ["https://board.example/api/chat-slack/oauth/callback"] } });
27
+ expect(manual.features.bot_user.display_name).toBe("research-ops");
28
+ expect(manual.features.slash_commands[0]).toMatchObject({ command: "/research", url: input.webhookUrl, should_escape: false });
29
+ expect(manual.settings.event_subscriptions.request_url).toBe(input.webhookUrl);
30
+ expect(manual.settings.interactivity).toEqual({ is_enabled: true, request_url: input.webhookUrl });
31
+ expect(manual.settings.socket_mode_enabled).toBe(false);
32
+ // The reviewed provider permissions/events stay pinned across both creation paths.
33
+ expect(manual.oauth_config.scopes.bot).toMatchSnapshot();
34
+ expect(manual.settings.event_subscriptions.bot_events).toMatchSnapshot();
35
+ });
36
+ it("rejects arbitrary manifests, scopes, callback destinations, and refresh tokens", () => {
37
+ const request = { requestId: "12345678-1234-4123-8123-123456789abc", credentials: { configurationToken: "temporary" } };
38
+ expect(slackRegistrationSchema.safeParse(request).success).toBe(true);
39
+ for (const key of ["manifest", "scopes", "callbackUri", "configurationRefreshToken", "avatarUrl"])
40
+ expect(slackRegistrationSchema.safeParse({ ...request, [key]: "untrusted" }).success).toBe(false);
41
+ expect(slackRegistrationSchema.safeParse({ ...request, credentials: { ...request.credentials, refreshToken: "untrusted" } }).success).toBe(false);
42
+ });
43
+ });
44
+ //# sourceMappingURL=slack-app-manifest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-app-manifest.test.js","sourceRoot":"","sources":["../src/slack-app-manifest.test.ts"],"names":[],"mappings":"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"}
@@ -86,10 +86,10 @@ export const SLACK_TOOLS = [
86
86
  .describe("Maximum matches per channel in bounded-history mode")
87
87
  .optional(),
88
88
  }),
89
- tool("post_message", "chat.postMessage", ["chat:write"], "write", "Send a requested message or thread reply as the bot in an allowed destination. Preserve the same idempotency key and arguments on retries. Delivery is separate from the final reply.", { channel, text, thread_ts: timestamp.optional(), ...write }),
89
+ tool("post_message", "chat.postMessage", ["chat:write"], "write", "Send an explicitly requested message or thread reply as the bot in an allowed destination. Paperclip delivers the normal final reply to the current chat automatically; do not post a second copy here. Preserve the same idempotency key and arguments on retries; inspect slack_delivery for queued or uncertain operations.", { channel, text, thread_ts: timestamp.optional(), ...write }),
90
90
  tool("update_message", "chat.update", ["chat:write"], "write", "Edit a message authored by this bot.", { ...message, text, ...write }),
91
91
  tool("delete_message", "chat.delete", ["chat:write"], "approval", "Delete this bot's message after approval.", { ...message, ...write }),
92
- tool("upload_file", "files.completeUploadExternal", ["files:write"], "write", "Upload a task attachment to an allowed Slack destination. Use a Paperclip attachment ID, never a local path or arbitrary URL.", {
92
+ tool("upload_file", "files.completeUploadExternal", ["files:write"], "write", "Upload an existing task attachment to an explicitly requested allowed Slack destination. Use a Paperclip attachment ID, never a local path or arbitrary URL. For a file requested in the current chat, use its external-chat file-delivery contract instead of uploading a second copy.", {
93
93
  channel,
94
94
  attachmentId: z.string().uuid(),
95
95
  title: text.optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"slack-tools.js","sourceRoot":"","sources":["../src/slack-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-tools.js","sourceRoot":"","sources":["../src/slack-tools.ts"],"names":[],"mappings":"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"}