@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,160 @@
1
+ /** Version 1 inspection wire contract. Keep Cloud's protocol.ts byte-identical. */
2
+ export const INSPECTION_VERSION = 1;
3
+ export const INSPECTION_AUDIENCE = "paperclip-customer-success/v1";
4
+ export const INSPECTION_PERMIT_TYPE = "paperclip-inspection+jwt";
5
+ export const INSPECTION_HEADER = "x-paperclip-cloud-inspection";
6
+ export const CHALLENGE_DOMAIN = "paperclip-customer-success-challenge/v1\n";
7
+ export const MAX_INSPECTION_BYTES = 1024 * 1024;
8
+ export const MAX_INSPECTION_ROWS = 100;
9
+ export const INSPECTION_RESOURCES = [
10
+ "companies",
11
+ "goals",
12
+ "users",
13
+ "memberships",
14
+ "permissions",
15
+ "agents",
16
+ "agentIdentities",
17
+ "agentInstructions",
18
+ "agentConfigRevisions",
19
+ "tasks",
20
+ "comments",
21
+ "documents",
22
+ "documentRevisions",
23
+ "taskDocuments",
24
+ "interactions",
25
+ "approvals",
26
+ "approvalComments",
27
+ "decisions",
28
+ "routines",
29
+ "routineTriggers",
30
+ "routineRuns",
31
+ "routineRevisions",
32
+ "routineDocuments",
33
+ "projects",
34
+ "projectWorkspaces",
35
+ "projectMemberships",
36
+ "skills",
37
+ "skillVersions",
38
+ "skillSources",
39
+ "runs",
40
+ "runEvents",
41
+ "traceMetadata",
42
+ "activity",
43
+ "costs",
44
+ "workProducts",
45
+ "artifacts",
46
+ "attachments",
47
+ "connections",
48
+ "connectionInstalls",
49
+ "connectionGrants",
50
+ "connectionGrantMembers",
51
+ "connectionCatalog",
52
+ "toolProfiles",
53
+ "toolProfileEntries",
54
+ "agentMemberships",
55
+ "agentCommentary",
56
+ "skillPolicies",
57
+ "projectGoals",
58
+ "labels",
59
+ "taskLabels",
60
+ "taskRelations",
61
+ "taskApprovals",
62
+ "documentMemberships",
63
+ "documentThreads",
64
+ "documentComments",
65
+ "threads",
66
+ ];
67
+ export function canonicalJson(value) {
68
+ if (value === null || typeof value === "string" || typeof value === "boolean")
69
+ return JSON.stringify(value);
70
+ if (typeof value === "number" && Number.isFinite(value))
71
+ return JSON.stringify(value);
72
+ if (Array.isArray(value))
73
+ return `[${value.map(canonicalJson).join(",")}]`;
74
+ if (value && typeof value === "object") {
75
+ const entries = Object.entries(value)
76
+ .filter(([, v]) => v !== undefined)
77
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
78
+ return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(",")}}`;
79
+ }
80
+ throw new Error("Invalid JSON value");
81
+ }
82
+ export function parseInspectionQuery(value) {
83
+ if (!value || typeof value !== "object" || Array.isArray(value))
84
+ throw new Error("Invalid inspection query");
85
+ const q = value;
86
+ const allowed = new Set([
87
+ "operation",
88
+ "resource",
89
+ "companyId",
90
+ "resourceId",
91
+ "parentId",
92
+ "path",
93
+ "versionId",
94
+ "limit",
95
+ "offset",
96
+ "range",
97
+ "context",
98
+ ]);
99
+ if (Object.keys(q).some((k) => !allowed.has(k)))
100
+ throw new Error("Unsupported inspection parameter");
101
+ if (![
102
+ "list",
103
+ "get",
104
+ "instructions.file",
105
+ "skills.file",
106
+ "runs.log",
107
+ "files.list",
108
+ "files.read",
109
+ "files.download",
110
+ "assets.content",
111
+ ].includes(q.operation))
112
+ throw new Error("Unsupported inspection operation");
113
+ for (const k of ["companyId", "resourceId", "parentId", "versionId"]) {
114
+ if (q[k] !== undefined && (typeof q[k] !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(q[k])))
115
+ throw new Error(`Invalid ${k}`);
116
+ }
117
+ if (q.resource !== undefined && !INSPECTION_RESOURCES.includes(q.resource))
118
+ throw new Error("Unsupported inspection resource");
119
+ if (q.operation === "get" && !q.resourceId)
120
+ throw new Error("resourceId required");
121
+ if (["get", "list"].includes(q.operation) && !q.resource)
122
+ throw new Error("resource required");
123
+ if (!(q.operation === "list" && q.resource === "companies") && !q.companyId)
124
+ throw new Error("companyId required");
125
+ if (!["get", "list"].includes(q.operation) && !q.resourceId)
126
+ throw new Error("resourceId required");
127
+ if (q.path !== undefined &&
128
+ (typeof q.path !== "string" || q.path.length > 1024 || q.path.includes("\0")))
129
+ throw new Error("Invalid path");
130
+ if (q.range !== undefined &&
131
+ !["files.download", "assets.content", "runs.log"].includes(q.operation))
132
+ throw new Error("This operation does not support byte ranges");
133
+ for (const k of ["limit", "offset"])
134
+ if (q[k] !== undefined &&
135
+ (!Number.isSafeInteger(q[k]) || q[k] < 0 || q[k] > (k === "limit" ? 100 : 1000000)))
136
+ throw new Error(`Invalid ${k}`);
137
+ if (q.range !== undefined &&
138
+ (!q.range ||
139
+ typeof q.range !== "object" ||
140
+ Array.isArray(q.range) ||
141
+ Object.keys(q.range).sort().join(",") !== "end,start" ||
142
+ !Number.isSafeInteger(q.range.start) ||
143
+ !Number.isSafeInteger(q.range.end) ||
144
+ q.range.start < 0 ||
145
+ q.range.end < q.range.start ||
146
+ q.range.end - q.range.start + 1 > MAX_INSPECTION_BYTES))
147
+ throw new Error("Invalid byte range");
148
+ if (q.context !== undefined) {
149
+ if (!q.context ||
150
+ typeof q.context !== "object" ||
151
+ Array.isArray(q.context) ||
152
+ Object.keys(q.context).some((k) => !["projectId", "workspaceId", "workspace"].includes(k)) ||
153
+ Object.values(q.context).some((v) => typeof v !== "string" || !/^[a-zA-Z0-9_-]{1,128}$/.test(v)) ||
154
+ (q.context.workspace !== undefined &&
155
+ !["auto", "execution", "project"].includes(q.context.workspace)))
156
+ throw new Error("Invalid file context");
157
+ }
158
+ return JSON.parse(canonicalJson(q));
159
+ }
160
+ //# sourceMappingURL=customer-success.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customer-success.js","sourceRoot":"","sources":["../src/customer-success.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { z } from "zod";
2
+ import type { AiManagedConnectionSummary } from "./ai-connections.js";
3
+ export declare const DECISION_MODELS: {
4
+ readonly openai: {
5
+ readonly id: "gpt-6-luna";
6
+ readonly name: "GPT-6 Luna";
7
+ };
8
+ readonly openrouter: {
9
+ readonly id: "typesafe/jev-1.13";
10
+ readonly name: "Jev 1.13";
11
+ };
12
+ };
13
+ export type DecisionProvider = keyof typeof DECISION_MODELS;
14
+ export declare const updateDecisionModelSchema: z.ZodObject<{
15
+ enabled: z.ZodBoolean;
16
+ connectionId: z.ZodNullable<z.ZodString>;
17
+ grantId: z.ZodNullable<z.ZodString>;
18
+ allowBackground: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.core.$strip>;
20
+ export type UpdateDecisionModel = z.infer<typeof updateDecisionModelSchema>;
21
+ export interface DecisionModelSettings extends UpdateDecisionModel {
22
+ allowBackground: boolean;
23
+ companyId: string;
24
+ provider: DecisionProvider | null;
25
+ model: string | null;
26
+ }
27
+ export type DecisionConnectionChoice = AiManagedConnectionSummary & {
28
+ decisionModel: string;
29
+ };
30
+ export type DecisionUnavailableReason = "not_configured" | "disabled" | "connection_unavailable" | "incompatible_connection" | "access_denied" | "responsible_user_missing" | "background_disabled" | "budget_blocked";
31
+ export type DecisionAvailability = {
32
+ available: true;
33
+ } | {
34
+ available: false;
35
+ reason: DecisionUnavailableReason;
36
+ };
37
+ export declare const decisionQuestionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
38
+ type: z.ZodLiteral<"boolean">;
39
+ instructions: z.ZodString;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ type: z.ZodLiteral<"choice">;
42
+ instructions: z.ZodString;
43
+ criteria: z.ZodRecord<z.ZodString, z.ZodString>;
44
+ }, z.core.$strip>, z.ZodObject<{
45
+ type: z.ZodLiteral<"score">;
46
+ instructions: z.ZodString;
47
+ criteria: z.ZodArray<z.ZodString>;
48
+ }, z.core.$strip>], "type">;
49
+ export declare const decisionRequestSchema: z.ZodObject<{
50
+ state: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>, z.ZodArray<z.ZodJSONSchema>]>;
51
+ questions: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
52
+ type: z.ZodLiteral<"boolean">;
53
+ instructions: z.ZodString;
54
+ }, z.core.$strip>, z.ZodObject<{
55
+ type: z.ZodLiteral<"choice">;
56
+ instructions: z.ZodString;
57
+ criteria: z.ZodRecord<z.ZodString, z.ZodString>;
58
+ }, z.core.$strip>, z.ZodObject<{
59
+ type: z.ZodLiteral<"score">;
60
+ instructions: z.ZodString;
61
+ criteria: z.ZodArray<z.ZodString>;
62
+ }, z.core.$strip>], "type">>;
63
+ }, z.core.$strip>;
64
+ export type DecisionRequest = z.infer<typeof decisionRequestSchema>;
65
+ export type DecisionAnswer = {
66
+ type: "boolean";
67
+ probability: number;
68
+ confidence?: number;
69
+ } | {
70
+ type: "choice";
71
+ choice: string;
72
+ probabilities?: Record<string, number>;
73
+ confidence?: number;
74
+ } | {
75
+ type: "score";
76
+ score: number;
77
+ probabilities?: Record<string, number>;
78
+ confidence?: number;
79
+ };
80
+ export interface DecisionUsage {
81
+ inputTokens: number | null;
82
+ outputTokens: number | null;
83
+ costCents: string | null;
84
+ costStatus: "reported" | "estimated" | "unpriced";
85
+ }
86
+ export type DecisionResult = {
87
+ status: "succeeded";
88
+ invocationId: string;
89
+ answers: Record<string, DecisionAnswer>;
90
+ usage: DecisionUsage;
91
+ } | {
92
+ status: "unavailable";
93
+ reason: DecisionUnavailableReason;
94
+ invocationId?: string;
95
+ } | {
96
+ status: "failed";
97
+ invocationId: string;
98
+ errorCode: string;
99
+ usage: DecisionUsage;
100
+ };
101
+ export interface DecisionHistoryEntry {
102
+ id: string;
103
+ feature: string;
104
+ actorType: string;
105
+ responsibleUserId: string | null;
106
+ userName: string | null;
107
+ issueId: string | null;
108
+ issueIdentifier: string | null;
109
+ agentId: string | null;
110
+ runId: string | null;
111
+ connectionId: string;
112
+ provider: string;
113
+ model: string;
114
+ status: string;
115
+ errorCode: string | null;
116
+ startedAt: string;
117
+ finishedAt: string | null;
118
+ durationMs: number | null;
119
+ inputTokens: number | null;
120
+ outputTokens: number | null;
121
+ costCents: string | null;
122
+ costStatus: string | null;
123
+ }
124
+ export declare const DECISION_TEST_REQUEST: DecisionRequest;
125
+ /** Native endpoints only; OpenRouter's official routing metadata is compatible. */
126
+ export declare function decisionProviderForConnection(metadata: {
127
+ provider: string;
128
+ method: string;
129
+ routing?: {
130
+ kind: string;
131
+ baseUrl?: string;
132
+ };
133
+ }): DecisionProvider | null;
134
+ //# sourceMappingURL=decision-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-models.d.ts","sourceRoot":"","sources":["../src/decision-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEtE,eAAO,MAAM,eAAe;aAC1B,MAAM;iBAAI,EAAE,EAAE,YAAY;iBAAE,IAAI,EAAE,YAAY;;aAC9C,UAAU;iBAAI,EAAE,EAAE,mBAAmB;iBAAE,IAAI,EAAE,UAAU;;CAC/C,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAC;AAC5D,eAAO,MAAM,yBAAyB;;;;;iBAOpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AACD,MAAM,MAAM,wBAAwB,GAAG,0BAA0B,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9F,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,UAAU,GAAG,wBAAwB,GAAG,yBAAyB,GAAG,eAAe,GAAG,0BAA0B,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AACvN,MAAM,MAAM,oBAAoB,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAEjH,eAAO,MAAM,sBAAsB;;;;;;;;;;;2BAIjC,CAAC;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAIhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/F;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAClG,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClF,UAAU,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;CACnD;AACD,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC5G;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AACxF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1G,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrG,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChG,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9G;AACD,eAAO,MAAM,qBAAqB,EAAE,eAOnC,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,gBAAgB,GAAG,IAAI,CAKnK"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ export const DECISION_MODELS = {
3
+ openai: { id: "gpt-6-luna", name: "GPT-6 Luna" },
4
+ openrouter: { id: "typesafe/jev-1.13", name: "Jev 1.13" },
5
+ };
6
+ export const updateDecisionModelSchema = z.object({
7
+ enabled: z.boolean(),
8
+ connectionId: z.string().uuid().nullable(),
9
+ grantId: z.string().uuid().nullable(),
10
+ allowBackground: z.boolean().optional(),
11
+ }).refine(v => Boolean(v.connectionId) === Boolean(v.grantId) && (!v.enabled || Boolean(v.connectionId)), {
12
+ message: "Select a connection before enabling decisions",
13
+ });
14
+ const instructions = z.string().trim().min(1).max(8000);
15
+ export const decisionQuestionSchema = z.discriminatedUnion("type", [
16
+ z.object({ type: z.literal("boolean"), instructions }),
17
+ z.object({ type: z.literal("choice"), instructions, criteria: z.record(z.string().min(1).max(100), z.string().min(1).max(2000)).refine(v => Object.keys(v).length >= 2 && Object.keys(v).length <= 20) }),
18
+ z.object({ type: z.literal("score"), instructions, criteria: z.array(z.string().min(1).max(2000)).min(2).max(20) }),
19
+ ]);
20
+ export const decisionRequestSchema = z.object({
21
+ state: z.union([z.string().min(1), z.record(z.string(), z.json()), z.array(z.json())]),
22
+ questions: z.record(z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,63}$/), decisionQuestionSchema)
23
+ .refine(v => Object.keys(v).length > 0 && Object.keys(v).length <= 20),
24
+ });
25
+ export const DECISION_TEST_REQUEST = {
26
+ state: "A customer reports being charged twice for an order. The product still works.",
27
+ questions: {
28
+ billing: { type: "boolean", instructions: "Is this a billing problem?" },
29
+ team: { type: "choice", instructions: "Which team should handle the request?", criteria: { billing: "Charges and payments", technical: "Product failures" } },
30
+ severity: { type: "score", instructions: "How severe is the product disruption?", criteria: ["Product works", "Some functionality is unavailable", "Product cannot be used"] },
31
+ },
32
+ };
33
+ /** Native endpoints only; OpenRouter's official routing metadata is compatible. */
34
+ export function decisionProviderForConnection(metadata) {
35
+ if (metadata.method !== "api_key")
36
+ return null;
37
+ if (metadata.provider === "openai" && !metadata.routing)
38
+ return "openai";
39
+ if (metadata.provider === "openrouter" && (!metadata.routing || (metadata.routing.kind === "openrouter" && !metadata.routing.baseUrl)))
40
+ return "openrouter";
41
+ return null;
42
+ }
43
+ //# sourceMappingURL=decision-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-models.js","sourceRoot":"","sources":["../src/decision-models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { AgentLifecycleState } from "./types/agent-lifecycle.js";
2
+ /** JSON responses for the operator-owned Dot invitation flow. Pairing capabilities are transient. */
3
+ export interface DotBinding {
4
+ id: string;
5
+ status: string;
6
+ connected: boolean;
7
+ subscriptionVerified: boolean;
8
+ hasPendingChallenge: boolean;
9
+ pairingExpiresAt: string | null;
10
+ challengeExpiresAt: string | null;
11
+ }
12
+ export interface DotInvitation {
13
+ agent: {
14
+ id: string;
15
+ name: string;
16
+ status: string;
17
+ };
18
+ approvalId: string | null;
19
+ binding: DotBinding | null;
20
+ }
21
+ export interface DotConnection {
22
+ enabled: boolean;
23
+ resourceUrl: string | null;
24
+ agentStatus: string;
25
+ agentLifecycleState: AgentLifecycleState;
26
+ canConfigureConnection: boolean;
27
+ binding: DotBinding | null;
28
+ }
29
+ export interface DotPairing {
30
+ bindingId: string;
31
+ pairingCode: string;
32
+ expiresAt: string;
33
+ }
34
+ //# sourceMappingURL=dot-invitations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dot-invitations.d.ts","sourceRoot":"","sources":["../src/dot-invitations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CAC5B;AACD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CAC5B;AACD,MAAM,WAAW,UAAU;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dot-invitations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dot-invitations.js","sourceRoot":"","sources":["../src/dot-invitations.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=easy-mcp-connectors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easy-mcp-connectors.test.d.ts","sourceRoot":"","sources":["../src/easy-mcp-connectors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import fs from "node:fs";
3
+ import { APP_DEFINITIONS } from "./app-definitions.generated.js";
4
+ import { appDefinitionSchema } from "./validators/app-definition.js";
5
+ const appBySlug = (slug) => {
6
+ const app = APP_DEFINITIONS.find((candidate) => candidate.slug === slug);
7
+ expect(app, "expected app definition for " + slug).toBeDefined();
8
+ return app;
9
+ };
10
+ const methodFor = (slug, key) => {
11
+ const method = appBySlug(slug).methods.find((candidate) => candidate.key === key);
12
+ expect(method, "expected method " + slug + "/" + key).toBeDefined();
13
+ return method;
14
+ };
15
+ const verifiedProviders = [
16
+ "airtable", "calendly", "exa", "firecrawl", "gsc-wizard", "linear",
17
+ "make", "parallel-search", "posthog", "tavily", "windsor-ai",
18
+ ];
19
+ const newProviders = ["calendly", "exa", "firecrawl", "gsc-wizard", "parallel-search", "tavily", "windsor-ai"];
20
+ describe("verified MCP connector definitions", () => {
21
+ it("keeps the 11 qualified providers on remote MCP methods", () => {
22
+ expect(new Set(verifiedProviders).size).toBe(11);
23
+ for (const slug of verifiedProviders) {
24
+ expect(appBySlug(slug).methods.some((method) => method.transport === "mcp_remote"), slug).toBe(true);
25
+ expect(appBySlug(slug).availability?.available, slug).not.toBe(false);
26
+ }
27
+ });
28
+ it("parses the seven newly added definitions against the shared schema", () => {
29
+ for (const slug of newProviders) {
30
+ const definition = appBySlug(slug);
31
+ expect(appDefinitionSchema.parse(definition)).toEqual(definition);
32
+ }
33
+ });
34
+ it("uses reviewed DCR registration for Airtable and retains the manual key method", () => {
35
+ expect(methodFor("airtable", "mcp-oauth")).toMatchObject({
36
+ transport: "mcp_remote", auth: "oauth", ownershipModes: ["dcr"], oauthClientRegistration: "dcr",
37
+ defaults: { serverUrl: "https://mcp.airtable.com/mcp" },
38
+ });
39
+ expect(methodFor("airtable", "mcp-pat")).toMatchObject({
40
+ transport: "mcp_remote", auth: "api_key", keyPlacement: { location: "header", name: "Authorization", prefix: "Bearer " },
41
+ });
42
+ });
43
+ it("keeps keyless search endpoints credential-free", () => {
44
+ for (const [slug, key, endpoint] of [
45
+ ["exa", "public-search", "https://mcp.exa.ai/mcp"],
46
+ ["parallel-search", "public-search", "https://search.parallel.ai/mcp"],
47
+ ]) {
48
+ const method = methodFor(slug, key);
49
+ expect(method).toMatchObject({ transport: "mcp_remote", auth: "none", defaults: { serverUrl: endpoint } });
50
+ expect(method.credentialFields).toBeUndefined();
51
+ expect(method.keyPlacement).toBeUndefined();
52
+ }
53
+ });
54
+ it("retains Tavily's reviewed MCP session initialization preference", () => {
55
+ const overridePath = new URL("../../../scripts/app-definition-overrides/tavily.json", import.meta.url);
56
+ const parsed = appDefinitionSchema.parse(JSON.parse(fs.readFileSync(overridePath, "utf8")));
57
+ expect(parsed.methods[0]?.defaults?.mcpSessionRequired).toBe(true);
58
+ const invalidTransport = structuredClone(parsed);
59
+ invalidTransport.methods[0].transport = "rest_api";
60
+ expect(appDefinitionSchema.safeParse(invalidTransport).success).toBe(false);
61
+ });
62
+ });
63
+ //# sourceMappingURL=easy-mcp-connectors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easy-mcp-connectors.test.js","sourceRoot":"","sources":["../src/easy-mcp-connectors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Tool-use guidance for external-agent onboarding and durable connection instructions. */
2
+ export declare const EXTERNAL_AGENT_TOOL_GUIDANCE = "When you receive a Paperclip assignment or message, use your own available tools, apps, plugins, skills, and capabilities to complete the requested work, then return the result to Paperclip. For example, use your existing Slack connection when the task calls for Slack. Paperclip's app catalog describes what this connection exposes; it is not a list of everything you can use in your own runtime. A missing Paperclip app connection does not make your own connection unavailable. Respect each tool's existing permissions, approvals, and the user's current instructions. Keep Paperclip data and actions within this connection's authorized company, agent, and task. Never use another Paperclip connection or identity to bypass a denial. Setup or test restrictions apply only to their stated scope; do not carry them into later requests unless the user explicitly says they continue.";
3
+ /** The assignment catalog constrains the Paperclip bridge, not the external runtime. */
4
+ export declare const DOT_AGENT_TOOL_GUIDANCE = "When you receive a Paperclip assignment or message, use your own available tools, apps, plugins, skills, and capabilities to complete the requested work, then return the result to Paperclip. For example, use your existing Slack connection when the task calls for Slack. Paperclip's app catalog describes what this connection exposes; it is not a list of everything you can use in your own runtime. A missing Paperclip app connection does not make your own connection unavailable. Respect each tool's existing permissions, approvals, and the user's current instructions. Keep Paperclip data and actions within this connection's authorized company, agent, and task. Never use another Paperclip connection or identity to bypass a denial. Setup or test restrictions apply only to their stated scope; do not carry them into later requests unless the user explicitly says they continue.\n\nUse the assignment catalog through paperclip_dot_tool for Paperclip operations. Use your native tools directly for the rest of the work; they do not need to appear in that catalog. Record useful results and deliverables on the task and follow the Paperclip completion instructions.";
5
+ //# sourceMappingURL=external-agent-guidance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-agent-guidance.d.ts","sourceRoot":"","sources":["../src/external-agent-guidance.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,eAAO,MAAM,4BAA4B,q3BAAq3B,CAAC;AAE/5B,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,kpCAAiU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Tool-use guidance for external-agent onboarding and durable connection instructions. */
2
+ export const EXTERNAL_AGENT_TOOL_GUIDANCE = `When you receive a Paperclip assignment or message, use your own available tools, apps, plugins, skills, and capabilities to complete the requested work, then return the result to Paperclip. For example, use your existing Slack connection when the task calls for Slack. Paperclip's app catalog describes what this connection exposes; it is not a list of everything you can use in your own runtime. A missing Paperclip app connection does not make your own connection unavailable. Respect each tool's existing permissions, approvals, and the user's current instructions. Keep Paperclip data and actions within this connection's authorized company, agent, and task. Never use another Paperclip connection or identity to bypass a denial. Setup or test restrictions apply only to their stated scope; do not carry them into later requests unless the user explicitly says they continue.`;
3
+ /** The assignment catalog constrains the Paperclip bridge, not the external runtime. */
4
+ export const DOT_AGENT_TOOL_GUIDANCE = `${EXTERNAL_AGENT_TOOL_GUIDANCE}\n\nUse the assignment catalog through paperclip_dot_tool for Paperclip operations. Use your native tools directly for the rest of the work; they do not need to appear in that catalog. Record useful results and deliverables on the task and follow the Paperclip completion instructions.`;
5
+ //# sourceMappingURL=external-agent-guidance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-agent-guidance.js","sourceRoot":"","sources":["../src/external-agent-guidance.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,CAAC,MAAM,4BAA4B,GAAG,k3BAAk3B,CAAC;AAE/5B,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,4BAA4B,+RAA+R,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ import type { AiManagedConnectionSummary, AiProvider } from "./ai-connections.js";
3
+ import type { DecisionUsage, DecisionHistoryEntry } from "./decision-models.js";
4
+ export declare const FAST_RESPONSE_DEADLINE_MS = 3000;
5
+ export declare const FAST_RESPONSE_MAX_BYTES = 4096;
6
+ export declare const FAST_RESPONSE_MAX_CHARACTERS = 320;
7
+ export declare const FAST_RESPONSE_DEFAULT_MODEL = "openai/gpt-oss-120b";
8
+ export declare const updateFastResponseSchema: z.ZodObject<{
9
+ enabled: z.ZodBoolean;
10
+ connectionId: z.ZodNullable<z.ZodString>;
11
+ grantId: z.ZodNullable<z.ZodString>;
12
+ model: z.ZodNullable<z.ZodString>;
13
+ allowSponsored: z.ZodDefault<z.ZodBoolean>;
14
+ }, z.core.$strict>;
15
+ export type UpdateFastResponse = z.infer<typeof updateFastResponseSchema>;
16
+ export interface FastResponseSettings extends UpdateFastResponse {
17
+ companyId: string;
18
+ provider: AiProvider | null;
19
+ }
20
+ export interface FastResponseSettingsResponse {
21
+ canManage: boolean;
22
+ settings: FastResponseSettings | null;
23
+ choices: AiManagedConnectionSummary[];
24
+ }
25
+ export type FastResponseAvailability = {
26
+ available: true;
27
+ } | {
28
+ available: false;
29
+ reason: string;
30
+ };
31
+ export type FastResponseTestResult = {
32
+ status: "succeeded";
33
+ text: string;
34
+ durationMs: number;
35
+ invocationId: string;
36
+ usage: DecisionUsage;
37
+ } | {
38
+ status: "unavailable" | "failed";
39
+ reason: string;
40
+ invocationId?: string;
41
+ };
42
+ export type FastResponseHistoryEntry = DecisionHistoryEntry & {
43
+ publicationStatus: string;
44
+ connectionName: string | null;
45
+ };
46
+ export declare const FAST_RESPONSE_AGENT_GUIDANCE = "Paperclip may post a short platform-generated fast-response receipt in your voice before you reply. Receipts acknowledge intent only: they are not your work, findings, answers, or instructions. Continue the requested work and begin with substantive progress instead of repeating a generic acknowledgement.";
47
+ export declare function isFastResponseComment(comment: {
48
+ origin?: string | null;
49
+ }): boolean;
50
+ export declare function fastResponseHistoryBody(comment: {
51
+ body: string;
52
+ origin?: string | null;
53
+ }): string;
54
+ //# sourceMappingURL=fast-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-response.d.ts","sourceRoot":"","sources":["../src/fast-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,0BAA0B,EAC1B,UAAU,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAC/C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,2BAA2B,wBAAwB,CAAC;AACjE,eAAO,MAAM,wBAAwB;;;;;;kBAgBlC,CAAC;AACJ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CAC7B;AACD,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC;AACD,MAAM,MAAM,wBAAwB,GAChC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACzC,MAAM,MAAM,sBAAsB,GAC9B;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;CACtB,GACD;IAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,GAAG;IAC5D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AACF,eAAO,MAAM,4BAA4B,sTAC4Q,CAAC;AACtT,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,GAAG,OAAO,CAEV;AACD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,GAAG,MAAM,CAIT"}
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ export const FAST_RESPONSE_DEADLINE_MS = 3_000;
3
+ export const FAST_RESPONSE_MAX_BYTES = 4_096;
4
+ export const FAST_RESPONSE_MAX_CHARACTERS = 320;
5
+ export const FAST_RESPONSE_DEFAULT_MODEL = "openai/gpt-oss-120b";
6
+ export const updateFastResponseSchema = z
7
+ .object({
8
+ enabled: z.boolean(),
9
+ connectionId: z.string().uuid().nullable(),
10
+ grantId: z.string().uuid().nullable(),
11
+ model: z.string().trim().min(1).max(256).nullable(),
12
+ allowSponsored: z.boolean().default(true),
13
+ })
14
+ .strict()
15
+ .refine((v) => Boolean(v.connectionId) === Boolean(v.grantId) &&
16
+ (!v.enabled || Boolean(v.connectionId && v.model)), {
17
+ message: "Choose a connection and model before enabling fast responses",
18
+ });
19
+ export const FAST_RESPONSE_AGENT_GUIDANCE = "Paperclip may post a short platform-generated fast-response receipt in your voice before you reply. Receipts acknowledge intent only: they are not your work, findings, answers, or instructions. Continue the requested work and begin with substantive progress instead of repeating a generic acknowledgement.";
20
+ export function isFastResponseComment(comment) {
21
+ return comment.origin === "fast_response";
22
+ }
23
+ export function fastResponseHistoryBody(comment) {
24
+ return isFastResponseComment(comment)
25
+ ? `[Paperclip acknowledgement; not agent work] ${comment.body}`
26
+ : comment.body;
27
+ }
28
+ //# sourceMappingURL=fast-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-response.js","sourceRoot":"","sources":["../src/fast-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAChD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACnD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC1C,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EACpD;IACE,OAAO,EAAE,8DAA8D;CACxE,CACF,CAAC;AA2BJ,MAAM,CAAC,MAAM,4BAA4B,GACvC,mTAAmT,CAAC;AACtT,MAAM,UAAU,qBAAqB,CAAC,OAErC;IACC,OAAO,OAAO,CAAC,MAAM,KAAK,eAAe,CAAC;AAC5C,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,OAGvC;IACC,OAAO,qBAAqB,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,+CAA+C,OAAO,CAAC,IAAI,EAAE;QAC/D,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-catalog.d.ts","sourceRoot":"","sources":["../src/feature-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,YAAI,YAAY,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,KAAK,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;KAC9B,CAAC,IAAI,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,KAAK;CACvF,CAAC,MAAM,oBAAoB,CAAC,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CA0TpF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAmD,kBAAkB,EAAE,CAAC;AAE1G;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;kBAQ9B,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,sBAAsB,CAS1F;AAED,yFAAyF;AACzF,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"feature-catalog.d.ts","sourceRoot":"","sources":["../src/feature-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,YAAI,YAAY,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,KAAK,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;KAC9B,CAAC,IAAI,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,KAAK;CACvF,CAAC,MAAM,oBAAoB,CAAC,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAuVpF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAmD,kBAAkB,EAAE,CAAC;AAE1G;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;kBAQ9B,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,sBAAsB,CAS1F;AAED,yFAAyF;AACzF,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE3E"}