@tickernelz/paperclip-pro-shared 2026.1006.0 → 2026.1006.2

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 (302) hide show
  1. package/dist/.paperclip-build-complete +1 -1
  2. package/dist/aggregator-app-catalog.d.ts +26 -0
  3. package/dist/aggregator-app-catalog.d.ts.map +1 -0
  4. package/dist/aggregator-app-catalog.js +72 -0
  5. package/dist/aggregator-app-catalog.js.map +1 -0
  6. package/dist/aggregator-app-catalog.test.d.ts +2 -0
  7. package/dist/aggregator-app-catalog.test.d.ts.map +1 -0
  8. package/dist/aggregator-app-catalog.test.js +45 -0
  9. package/dist/aggregator-app-catalog.test.js.map +1 -0
  10. package/dist/aggregator-apps.d.ts +41 -0
  11. package/dist/aggregator-apps.d.ts.map +1 -0
  12. package/dist/aggregator-apps.js +34 -0
  13. package/dist/aggregator-apps.js.map +1 -0
  14. package/dist/ai-connection-router.d.ts +352 -0
  15. package/dist/ai-connection-router.d.ts.map +1 -0
  16. package/dist/ai-connection-router.js +55 -0
  17. package/dist/ai-connection-router.js.map +1 -0
  18. package/dist/ai-connection-usage.d.ts +48 -0
  19. package/dist/ai-connection-usage.d.ts.map +1 -0
  20. package/dist/ai-connection-usage.js +6 -0
  21. package/dist/ai-connection-usage.js.map +1 -0
  22. package/dist/ai-connections.d.ts +7 -0
  23. package/dist/ai-connections.d.ts.map +1 -1
  24. package/dist/ai-connections.js +7 -5
  25. package/dist/ai-connections.js.map +1 -1
  26. package/dist/app-definitions/agentmail.json +1 -1
  27. package/dist/app-definitions/airtable.json +10 -1
  28. package/dist/app-definitions/api-key-generic.json +2 -1
  29. package/dist/app-definitions/asana.json +37 -6
  30. package/dist/app-definitions/beehiiv.json +5 -1
  31. package/dist/app-definitions/bitly.json +2 -1
  32. package/dist/app-definitions/brex.json +23 -1
  33. package/dist/app-definitions/browser-use-cloud.json +53 -0
  34. package/dist/app-definitions/candid.json +6 -1
  35. package/dist/app-definitions/clickhouse.json +8 -1
  36. package/dist/app-definitions/cloudflare.json +7 -2
  37. package/dist/app-definitions/cloudinary.json +10 -1
  38. package/dist/app-definitions/coda.json +6 -2
  39. package/dist/app-definitions/cognee.json +76 -0
  40. package/dist/app-definitions/embat.json +7 -1
  41. package/dist/app-definitions/fireflies.json +2 -1
  42. package/dist/app-definitions/github-code-review-bot.json +57 -0
  43. package/dist/app-definitions/github.json +4 -43
  44. package/dist/app-definitions/google-calendar.json +0 -2
  45. package/dist/app-definitions/google-docs.json +0 -6
  46. package/dist/app-definitions/google-sheets.json +0 -6
  47. package/dist/app-definitions/google-slides.json +0 -6
  48. package/dist/app-definitions/honcho.json +73 -0
  49. package/dist/app-definitions/hugging-face.json +4 -1
  50. package/dist/app-definitions/kernel.json +6 -2
  51. package/dist/app-definitions/linear.json +2 -1
  52. package/dist/app-definitions/local-falcon.json +5 -1
  53. package/dist/app-definitions/manufact.json +7 -1
  54. package/dist/app-definitions/mem0.json +12 -6
  55. package/dist/app-definitions/miro.json +7 -1
  56. package/dist/app-definitions/mixpanel.json +27 -1
  57. package/dist/app-definitions/neon.json +155 -0
  58. package/dist/app-definitions/netlify.json +6 -1
  59. package/dist/app-definitions/notion.json +4 -1
  60. package/dist/app-definitions/oreilly.json +7 -2
  61. package/dist/app-definitions/pagerduty.json +4 -2
  62. package/dist/app-definitions/planetscale.json +12 -2
  63. package/dist/app-definitions/posthog.json +2 -1
  64. package/dist/app-definitions/postman.json +6 -3
  65. package/dist/app-definitions/razorpay.json +2 -1
  66. package/dist/app-definitions/resend.json +4 -1
  67. package/dist/app-definitions/sanity.json +6 -2
  68. package/dist/app-definitions/sentry.json +8 -1
  69. package/dist/app-definitions/similarweb.json +2 -1
  70. package/dist/app-definitions/slack.json +28 -1
  71. package/dist/app-definitions/stripe.json +6 -2
  72. package/dist/app-definitions/supabase.json +22 -4
  73. package/dist/app-definitions/supermemory.json +55 -0
  74. package/dist/app-definitions/ticktick.json +5 -1
  75. package/dist/app-definitions/todoist.json +4 -1
  76. package/dist/app-definitions/vercel.json +4 -1
  77. package/dist/app-definitions/wix.json +4 -1
  78. package/dist/app-definitions/youcom.json +7 -2
  79. package/dist/app-definitions/zep.json +54 -0
  80. package/dist/app-definitions-url.test.js +4 -2
  81. package/dist/app-definitions-url.test.js.map +1 -1
  82. package/dist/app-definitions.d.ts +5 -1
  83. package/dist/app-definitions.d.ts.map +1 -1
  84. package/dist/app-definitions.generated.d.ts.map +1 -1
  85. package/dist/app-definitions.generated.js +78 -71
  86. package/dist/app-definitions.generated.js.map +1 -1
  87. package/dist/app-definitions.js +18 -7
  88. package/dist/app-definitions.js.map +1 -1
  89. package/dist/app-definitions.test.js +173 -46
  90. package/dist/app-definitions.test.js.map +1 -1
  91. package/dist/arcade-app-catalog.json +1602 -0
  92. package/dist/asana-connectors.d.ts +7 -0
  93. package/dist/asana-connectors.d.ts.map +1 -0
  94. package/dist/asana-connectors.js +8 -0
  95. package/dist/asana-connectors.js.map +1 -0
  96. package/dist/browser-use.d.ts +107 -0
  97. package/dist/browser-use.d.ts.map +1 -0
  98. package/dist/browser-use.js +98 -0
  99. package/dist/browser-use.js.map +1 -0
  100. package/dist/composio-app-setup.d.ts +65 -0
  101. package/dist/composio-app-setup.d.ts.map +1 -0
  102. package/dist/composio-app-setup.js +17 -0
  103. package/dist/composio-app-setup.js.map +1 -0
  104. package/dist/composio-search-catalog.json +1589 -0
  105. package/dist/connection-instructions.d.ts +34 -0
  106. package/dist/connection-instructions.d.ts.map +1 -0
  107. package/dist/connection-instructions.js +48 -0
  108. package/dist/connection-instructions.js.map +1 -0
  109. package/dist/connection-instructions.test.d.ts +2 -0
  110. package/dist/connection-instructions.test.d.ts.map +1 -0
  111. package/dist/connection-instructions.test.js +84 -0
  112. package/dist/connection-instructions.test.js.map +1 -0
  113. package/dist/connection-intent-guidance.d.ts +2 -2
  114. package/dist/connection-intent-guidance.d.ts.map +1 -1
  115. package/dist/connection-intent-guidance.js +7 -20
  116. package/dist/connection-intent-guidance.js.map +1 -1
  117. package/dist/connection-intent-guidance.test.js +15 -54
  118. package/dist/connection-intent-guidance.test.js.map +1 -1
  119. package/dist/connection-routing.d.ts +33 -0
  120. package/dist/connection-routing.d.ts.map +1 -0
  121. package/dist/connection-routing.js +309 -0
  122. package/dist/connection-routing.js.map +1 -0
  123. package/dist/connection-routing.test.d.ts +2 -0
  124. package/dist/connection-routing.test.d.ts.map +1 -0
  125. package/dist/connection-routing.test.js +73 -0
  126. package/dist/connection-routing.test.js.map +1 -0
  127. package/dist/connection-search.d.ts +15 -0
  128. package/dist/connection-search.d.ts.map +1 -0
  129. package/dist/connection-search.js +75 -0
  130. package/dist/connection-search.js.map +1 -0
  131. package/dist/connection-search.test.d.ts +2 -0
  132. package/dist/connection-search.test.d.ts.map +1 -0
  133. package/dist/connection-search.test.js +37 -0
  134. package/dist/connection-search.test.js.map +1 -0
  135. package/dist/connection-setup-state.d.ts +32 -0
  136. package/dist/connection-setup-state.d.ts.map +1 -0
  137. package/dist/connection-setup-state.js +74 -0
  138. package/dist/connection-setup-state.js.map +1 -0
  139. package/dist/connection-setup-state.test.d.ts +2 -0
  140. package/dist/connection-setup-state.test.d.ts.map +1 -0
  141. package/dist/connection-setup-state.test.js +92 -0
  142. package/dist/connection-setup-state.test.js.map +1 -0
  143. package/dist/constants.d.ts +2 -2
  144. package/dist/constants.d.ts.map +1 -1
  145. package/dist/constants.js +2 -1
  146. package/dist/constants.js.map +1 -1
  147. package/dist/feature-catalog.d.ts.map +1 -1
  148. package/dist/feature-catalog.js +24 -5
  149. package/dist/feature-catalog.js.map +1 -1
  150. package/dist/github-skill-repository.d.ts +7 -0
  151. package/dist/github-skill-repository.d.ts.map +1 -0
  152. package/dist/github-skill-repository.js +29 -0
  153. package/dist/github-skill-repository.js.map +1 -0
  154. package/dist/google-workspace-connectors.js +7 -7
  155. package/dist/google-workspace-connectors.js.map +1 -1
  156. package/dist/heartbeat-inbox.d.ts +5 -0
  157. package/dist/heartbeat-inbox.d.ts.map +1 -0
  158. package/dist/heartbeat-inbox.js +10 -0
  159. package/dist/heartbeat-inbox.js.map +1 -0
  160. package/dist/index.d.ts +26 -4
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +23 -3
  163. package/dist/index.js.map +1 -1
  164. package/dist/issue-thread-interactions.test.js +53 -0
  165. package/dist/issue-thread-interactions.test.js.map +1 -1
  166. package/dist/memory-connectors.d.ts +5 -0
  167. package/dist/memory-connectors.d.ts.map +1 -0
  168. package/dist/memory-connectors.js +6 -0
  169. package/dist/memory-connectors.js.map +1 -0
  170. package/dist/memory-connectors.test.d.ts +2 -0
  171. package/dist/memory-connectors.test.d.ts.map +1 -0
  172. package/dist/memory-connectors.test.js +33 -0
  173. package/dist/memory-connectors.test.js.map +1 -0
  174. package/dist/question-set.d.ts +4 -0
  175. package/dist/question-set.d.ts.map +1 -0
  176. package/dist/question-set.js +48 -0
  177. package/dist/question-set.js.map +1 -0
  178. package/dist/remote-mcp-connectors.test.js +4 -4
  179. package/dist/remote-mcp-connectors.test.js.map +1 -1
  180. package/dist/self-serve-mcp-research.json +7 -2
  181. package/dist/settings-visibility-catalog-growth.test.d.ts +2 -0
  182. package/dist/settings-visibility-catalog-growth.test.d.ts.map +1 -0
  183. package/dist/settings-visibility-catalog-growth.test.js +15 -0
  184. package/dist/settings-visibility-catalog-growth.test.js.map +1 -0
  185. package/dist/settings-visibility.d.ts +13 -5
  186. package/dist/settings-visibility.d.ts.map +1 -1
  187. package/dist/settings-visibility.js +27 -5
  188. package/dist/settings-visibility.js.map +1 -1
  189. package/dist/settings-visibility.test.js +37 -0
  190. package/dist/settings-visibility.test.js.map +1 -1
  191. package/dist/slack-tools.d.ts +57 -3
  192. package/dist/slack-tools.d.ts.map +1 -1
  193. package/dist/slack-tools.js +25 -4
  194. package/dist/slack-tools.js.map +1 -1
  195. package/dist/telemetry/generated/paperclip-telemetry.d.ts +3 -0
  196. package/dist/telemetry/generated/paperclip-telemetry.d.ts.map +1 -1
  197. package/dist/telemetry/generated/paperclip-telemetry.js.map +1 -1
  198. package/dist/types/agent.d.ts +67 -1
  199. package/dist/types/agent.d.ts.map +1 -1
  200. package/dist/types/agent.js.map +1 -1
  201. package/dist/types/app-definition.d.ts +5 -0
  202. package/dist/types/app-definition.d.ts.map +1 -1
  203. package/dist/types/asset.d.ts +1 -0
  204. package/dist/types/asset.d.ts.map +1 -1
  205. package/dist/types/company-skill.d.ts +6 -0
  206. package/dist/types/company-skill.d.ts.map +1 -1
  207. package/dist/types/connection-intent.d.ts +27 -1
  208. package/dist/types/connection-intent.d.ts.map +1 -1
  209. package/dist/types/email.d.ts +13 -0
  210. package/dist/types/email.d.ts.map +1 -1
  211. package/dist/types/execution-continuation.d.ts +5 -0
  212. package/dist/types/execution-continuation.d.ts.map +1 -1
  213. package/dist/types/execution-projection.d.ts +9 -0
  214. package/dist/types/execution-projection.d.ts.map +1 -1
  215. package/dist/types/execution-projection.js.map +1 -1
  216. package/dist/types/index.d.ts +4 -1
  217. package/dist/types/index.d.ts.map +1 -1
  218. package/dist/types/index.js +1 -0
  219. package/dist/types/index.js.map +1 -1
  220. package/dist/types/instance.d.ts +6 -2
  221. package/dist/types/instance.d.ts.map +1 -1
  222. package/dist/types/instance.js.map +1 -1
  223. package/dist/types/issue.d.ts +39 -2
  224. package/dist/types/issue.d.ts.map +1 -1
  225. package/dist/types/plugin.d.ts +12 -0
  226. package/dist/types/plugin.d.ts.map +1 -1
  227. package/dist/types/project.d.ts +16 -0
  228. package/dist/types/project.d.ts.map +1 -1
  229. package/dist/types/skill-source.d.ts +135 -0
  230. package/dist/types/skill-source.d.ts.map +1 -0
  231. package/dist/types/skill-source.js +2 -0
  232. package/dist/types/skill-source.js.map +1 -0
  233. package/dist/types/tool-access.d.ts +3 -0
  234. package/dist/types/tool-access.d.ts.map +1 -1
  235. package/dist/types/tool-access.js.map +1 -1
  236. package/dist/validators/agent.d.ts +38 -11
  237. package/dist/validators/agent.d.ts.map +1 -1
  238. package/dist/validators/agent.js +15 -4
  239. package/dist/validators/agent.js.map +1 -1
  240. package/dist/validators/app-definition.d.ts +19 -0
  241. package/dist/validators/app-definition.d.ts.map +1 -1
  242. package/dist/validators/app-definition.js +13 -2
  243. package/dist/validators/app-definition.js.map +1 -1
  244. package/dist/validators/artifact.d.ts +1 -0
  245. package/dist/validators/artifact.d.ts.map +1 -1
  246. package/dist/validators/artifact.js +2 -0
  247. package/dist/validators/artifact.js.map +1 -1
  248. package/dist/validators/company-portability.d.ts +24 -0
  249. package/dist/validators/company-portability.d.ts.map +1 -1
  250. package/dist/validators/company-skill.d.ts +27 -0
  251. package/dist/validators/company-skill.d.ts.map +1 -1
  252. package/dist/validators/company-skill.js +8 -0
  253. package/dist/validators/company-skill.js.map +1 -1
  254. package/dist/validators/connection-intent.d.ts +5 -0
  255. package/dist/validators/connection-intent.d.ts.map +1 -1
  256. package/dist/validators/connection-intent.js +6 -1
  257. package/dist/validators/connection-intent.js.map +1 -1
  258. package/dist/validators/connection-intent.test.js +22 -0
  259. package/dist/validators/connection-intent.test.js.map +1 -1
  260. package/dist/validators/email.d.ts +5 -0
  261. package/dist/validators/email.d.ts.map +1 -1
  262. package/dist/validators/email.js +4 -0
  263. package/dist/validators/email.js.map +1 -1
  264. package/dist/validators/index.d.ts +4 -2
  265. package/dist/validators/index.d.ts.map +1 -1
  266. package/dist/validators/index.js +4 -2
  267. package/dist/validators/index.js.map +1 -1
  268. package/dist/validators/instance.d.ts +9 -2
  269. package/dist/validators/instance.d.ts.map +1 -1
  270. package/dist/validators/instance.js +5 -2
  271. package/dist/validators/instance.js.map +1 -1
  272. package/dist/validators/issue.d.ts +274 -7
  273. package/dist/validators/issue.d.ts.map +1 -1
  274. package/dist/validators/issue.js +81 -10
  275. package/dist/validators/issue.js.map +1 -1
  276. package/dist/validators/issue.test.js +10 -1
  277. package/dist/validators/issue.test.js.map +1 -1
  278. package/dist/validators/plugin.d.ts +11 -0
  279. package/dist/validators/plugin.d.ts.map +1 -1
  280. package/dist/validators/plugin.js +5 -0
  281. package/dist/validators/plugin.js.map +1 -1
  282. package/dist/validators/plugin.test.js +14 -0
  283. package/dist/validators/plugin.test.js.map +1 -1
  284. package/dist/validators/project.d.ts +4 -0
  285. package/dist/validators/project.d.ts.map +1 -1
  286. package/dist/validators/project.js +4 -0
  287. package/dist/validators/project.js.map +1 -1
  288. package/dist/validators/skill-source.d.ts +29 -0
  289. package/dist/validators/skill-source.d.ts.map +1 -0
  290. package/dist/validators/skill-source.js +26 -0
  291. package/dist/validators/skill-source.js.map +1 -0
  292. package/dist/validators/tool-access.d.ts +35 -0
  293. package/dist/validators/tool-access.d.ts.map +1 -1
  294. package/dist/validators/tool-access.js +4 -0
  295. package/dist/validators/tool-access.js.map +1 -1
  296. package/dist/workspace-restore.d.ts +8 -0
  297. package/dist/workspace-restore.d.ts.map +1 -0
  298. package/dist/workspace-restore.js +28 -0
  299. package/dist/workspace-restore.js.map +1 -0
  300. package/dist/worktree-port-registry.test.js +162 -31
  301. package/dist/worktree-port-registry.test.js.map +1 -1
  302. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ /** Setup rollout only: hiding the catalog does not revoke existing connections. */
2
+ export const MEMORY_CONNECTOR_IDS = ["mem0", "zep", "supermemory", "cognee", "honcho"];
3
+ export function isMemoryConnectorId(value) {
4
+ return typeof value === "string" && MEMORY_CONNECTOR_IDS.includes(value);
5
+ }
6
+ //# sourceMappingURL=memory-connectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-connectors.js","sourceRoot":"","sources":["../src/memory-connectors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEhG,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,oBAA0C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory-connectors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-connectors.test.d.ts","sourceRoot":"","sources":["../src/memory-connectors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { MEMORY_CONNECTOR_IDS, isMemoryConnectorId } from "./memory-connectors.js";
3
+ import { getConnectableAppDefinition, credentialConfigPath } from "./app-definitions.js";
4
+ import { INSTANCE_FEATURE_CATALOG } from "./feature-catalog.js";
5
+ import { instanceExperimentalSettingsSchema, patchInstanceExperimentalSettingsSchema } from "./validators/instance.js";
6
+ describe("experimental memory connectors", () => {
7
+ it("defaults off and preserves patch semantics", () => {
8
+ expect(instanceExperimentalSettingsSchema.parse({}).enableMemoryConnectors).toBe(false);
9
+ expect(patchInstanceExperimentalSettingsSchema.parse({})).not.toHaveProperty("enableMemoryConnectors");
10
+ expect(patchInstanceExperimentalSettingsSchema.parse({ enableMemoryConnectors: true })).toEqual({ enableMemoryConnectors: true });
11
+ expect(INSTANCE_FEATURE_CATALOG.enableMemoryConnectors).toMatchObject({ tier: "managed", selfHostedDefault: false, cloudDefault: false });
12
+ expect(isMemoryConnectorId("notion")).toBe(false);
13
+ });
14
+ it.each(MEMORY_CONNECTOR_IDS)("has a supported, branded %s setup method", (slug) => {
15
+ const app = getConnectableAppDefinition(slug);
16
+ expect(app).toBeDefined();
17
+ expect(app.branding.logoUrl).toMatch(new RegExp(`/brands/apps/${slug}\\.`));
18
+ expect(app.methods).toHaveLength(1);
19
+ expect(app.methods[0].transport).toBe(slug === "cognee" ? "local_stdio" : "mcp_remote");
20
+ });
21
+ it("uses provider-documented auth and endpoint paths", () => {
22
+ const method = (slug) => getConnectableAppDefinition(slug).methods[0];
23
+ expect(method("mem0")).toMatchObject({ auth: "api_key", defaults: { serverUrl: "https://mcp.mem0.ai/mcp/" }, keyPlacement: { location: "header", name: "Authorization", prefix: "Bearer " } });
24
+ expect(method("honcho")).toMatchObject({ auth: "api_key", defaults: { serverUrl: "https://mcp.honcho.dev" }, keyPlacement: { location: "header", name: "Authorization", prefix: "Bearer " } });
25
+ expect(method("zep")).toMatchObject({ auth: "oauth", grantKinds: ["user"], ownershipModes: ["dcr"], defaults: { serverUrl: "https://api.getzep.com/mcp", scopesHint: ["graph:read", "graph:write"] } });
26
+ expect(method("supermemory")).toMatchObject({ auth: "oauth", grantKinds: ["user"], defaults: { serverUrl: "https://mcp.supermemory.ai/mcp" } });
27
+ const cognee = method("cognee");
28
+ expect(cognee.defaults).toEqual({ templateKey: "paperclip.cognee-cloud" });
29
+ expect(cognee.credentialFields.map(field => credentialConfigPath(field, cognee))).toEqual(["env.COGNEE_BASE_URL", "env.COGNEE_API_KEY"]);
30
+ expect(credentialConfigPath(method("mem0").credentialFields[0], method("mem0"))).toBe("credentials.authorization");
31
+ });
32
+ });
33
+ //# sourceMappingURL=memory-connectors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-connectors.test.js","sourceRoot":"","sources":["../src/memory-connectors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AskUserQuestionsPayload, PaperclipQuestionSetPayload } from "./types/issue.js";
2
+ /** Project a complete canonical form into the legacy storage/answer contract. */
3
+ export declare function questionSetToAskUserQuestionsPayload(questionSet: PaperclipQuestionSetPayload): AskUserQuestionsPayload;
4
+ //# sourceMappingURL=question-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-set.d.ts","sourceRoot":"","sources":["../src/question-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAS7F,iFAAiF;AACjF,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,2BAA2B,GACvC,uBAAuB,CAsCzB"}
@@ -0,0 +1,48 @@
1
+ function syntheticOptionId(existing, preferred) {
2
+ const ids = new Set(existing);
3
+ let candidate = preferred;
4
+ for (let suffix = 2; ids.has(candidate); suffix += 1)
5
+ candidate = `${preferred}_${suffix}`;
6
+ return candidate;
7
+ }
8
+ /** Project a complete canonical form into the legacy storage/answer contract. */
9
+ export function questionSetToAskUserQuestionsPayload(questionSet) {
10
+ return {
11
+ version: 1,
12
+ ...(questionSet.title ? { title: questionSet.title.slice(0, 240) } : {}),
13
+ ...(questionSet.submitLabel ? { submitLabel: questionSet.submitLabel.slice(0, 120) } : {}),
14
+ questionSet,
15
+ questions: questionSet.questions.map((question) => {
16
+ const options = (question.options ?? []).map(({ id, label, description }) => ({
17
+ id, label, ...(description !== undefined ? { description } : {}),
18
+ }));
19
+ const freeTextOption = question.answerMode === "text"
20
+ ? {
21
+ id: "paperclip_text_answer",
22
+ label: question.header || "Type an answer",
23
+ ...(question.textValidation?.inputType
24
+ ? { description: `Expected ${question.textValidation.inputType} input` } : {}),
25
+ freeText: true,
26
+ }
27
+ : question.customAnswer?.enabled
28
+ ? {
29
+ id: syntheticOptionId(options.map((option) => option.id), "paperclip_custom_answer"),
30
+ label: question.customAnswer.label || "Other",
31
+ ...(question.customAnswer.placeholder !== undefined
32
+ ? { description: question.customAnswer.placeholder } : {}),
33
+ freeText: true,
34
+ }
35
+ : null;
36
+ return {
37
+ id: question.id,
38
+ prompt: question.prompt,
39
+ ...((question.helpText || question.header) ? { helpText: question.helpText ?? question.header } : {}),
40
+ selectionMode: question.answerMode === "multi_select" ? "multi" : "single",
41
+ required: question.required,
42
+ allowOther: freeTextOption !== null,
43
+ options: freeTextOption ? [...options, freeTextOption] : options,
44
+ };
45
+ }),
46
+ };
47
+ }
48
+ //# sourceMappingURL=question-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-set.js","sourceRoot":"","sources":["../src/question-set.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,11 @@ import { connectToolAppSchema, finishToolAppSchema } from "./validators/tool-acc
5
5
  import { instanceExperimentalSettingsSchema, patchInstanceExperimentalSettingsSchema } from "./validators/instance.js";
6
6
  import { INSTANCE_FEATURE_CATALOG } from "./feature-catalog.js";
7
7
  describe("independent remote MCP connectors", () => {
8
- it("requires an explicit MCP aggregators opt-in for self-hosted and managed instances", () => {
9
- expect(instanceExperimentalSettingsSchema.parse({}).enableMcpAggregators).toBe(false);
10
- expect(patchInstanceExperimentalSettingsSchema.parse({ enableMcpAggregators: true })).toEqual({ enableMcpAggregators: true });
8
+ it("defaults the retired compatibility setting on and accepts older configs", () => {
9
+ expect(instanceExperimentalSettingsSchema.parse({}).enableMcpAggregators).toBe(true);
10
+ expect(patchInstanceExperimentalSettingsSchema.parse({ enableMcpAggregators: false })).toEqual({ enableMcpAggregators: false });
11
11
  expect(patchInstanceExperimentalSettingsSchema.parse({})).not.toHaveProperty("enableMcpAggregators");
12
- expect(INSTANCE_FEATURE_CATALOG.enableMcpAggregators).toMatchObject({ tier: "managed", cloudDefault: false, selfHostedDefault: false });
12
+ expect(INSTANCE_FEATURE_CATALOG.enableMcpAggregators).toMatchObject({ tier: "managed", cloudDefault: true, selfHostedDefault: true });
13
13
  });
14
14
  for (const [provider, methodKey] of Object.entries(REMOTE_MCP_CONNECTOR_METHODS)) {
15
15
  it(`${provider} has its own catalog and accepts URL plus explicit credentials`, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"remote-mcp-connectors.test.js","sourceRoot":"","sources":["../src/remote-mcp-connectors.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-mcp-connectors.test.js","sourceRoot":"","sources":["../src/remote-mcp-connectors.test.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,8 @@
38
38
  { "slug": "stripe", "name": "Stripe", "wave": 2, "status": "self_serve", "docsUrl": "https://docs.stripe.com/mcp", "serverUrl": "https://mcp.stripe.com", "authMode": "dcr_or_api_key", "prerequisite": "A Stripe account; the server is public preview and payment actions require explicit approval.", "riskTier": "S4" },
39
39
  { "slug": "supabase", "name": "Supabase", "wave": 2, "status": "self_serve", "docsUrl": "https://supabase.com/docs/guides/ai-tools/mcp", "serverUrl": "https://mcp.supabase.com/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Supabase account; use a development project and review write actions before connecting production data.", "riskTier": "S4" },
40
40
  { "slug": "ticket-tailor", "name": "Ticket Tailor", "wave": 2, "status": "self_serve", "docsUrl": "https://developers.tickettailor.com/docs/mcp/authentication/", "serverUrl": "https://mcp.tickettailor.ai/mcp", "authMode": "dcr", "prerequisite": "A Ticket Tailor account; the provider may request an API key during its hosted authorization prompt.", "riskTier": "S3" },
41
- { "slug": "asana", "name": "Asana", "wave": 3, "status": "self_serve", "docsUrl": "https://developers.asana.com/docs/integrating-with-asanas-mcp-server", "serverUrl": "https://mcp.asana.com/v2/mcp", "authMode": "customer_oauth", "prerequisite": "Create an Asana MCP OAuth app and register Paperclip's callback URI; DCR is not supported.", "riskTier": "S3" },
41
+ { "slug": "asana", "name": "Asana", "wave": 3, "status": "self_serve", "docsUrl": "https://developers.asana.com/docs/integrating-with-asanas-mcp-server", "serverUrl": "https://mcp.asana.com/v2/mcp", "authMode": "dcr", "prerequisite": "An active Asana account. Re-verified 2026-09-28: mcp.asana.com advertises a registration endpoint and issues clients for http://localhost callbacks, so a local Paperclip registers its own OAuth client. Asana refuses non-localhost redirect URIs, so a hosted deployment still registers an app in Asana's developer console.", "riskTier": "S3" },
42
+ { "slug": "linear", "name": "Linear", "wave": 3, "status": "self_serve", "docsUrl": "https://linear.app/docs/mcp", "serverUrl": "https://mcp.linear.app/mcp", "authMode": "dcr_cimd", "prerequisite": "An active Linear workspace. Verified 2026-09-28: mcp.linear.app advertises a registration endpoint and client-ID metadata documents, so Paperclip registers its own OAuth client.", "riskTier": "S2" },
42
43
  { "slug": "box", "name": "Box", "wave": 3, "status": "self_serve", "docsUrl": "https://support.box.com/hc/en-us/articles/43847256139923-Managing-Box-MCP-Servers", "serverUrl": "https://mcp.box.com", "authMode": "customer_oauth", "prerequisite": "A Box administrator creates the OAuth integration and enables AI access.", "riskTier": "S3" },
43
44
  { "slug": "mem0", "name": "Mem0", "wave": 3, "status": "self_serve", "docsUrl": "https://docs.mem0.ai/platform/mem0-mcp", "serverUrl": "https://mcp.mem0.ai/mcp/", "authMode": "api_key", "prerequisite": "A Mem0 API key; the live server currently requires the slash-normalized endpoint.", "riskTier": "S3" },
44
45
  { "slug": "pagerduty", "name": "PagerDuty", "wave": 3, "status": "self_serve", "docsUrl": "https://support.pagerduty.com/main/docs/pagerduty-mcp-server", "serverUrl": "https://mcp.pagerduty.com/mcp", "authMode": "api_key", "prerequisite": "A PagerDuty API token; choose the regional endpoint that hosts the account.", "riskTier": "S4" },
@@ -49,6 +50,10 @@
49
50
  { "slug": "fireflies", "name": "Fireflies", "wave": 4, "status": "self_serve", "docsUrl": "https://docs.fireflies.ai/getting-started/mcp-configuration", "serverUrl": "https://api.fireflies.ai/mcp", "authMode": "dcr_or_api_key", "prerequisite": "A Fireflies account with access to the meetings you want to use. API keys are available in Settings → Developer Settings.", "riskTier": "S3" },
50
51
  { "slug": "g2", "name": "G2", "wave": "blocked", "status": "blocked", "docsUrl": "https://documentation.g2.com/docs/g2-mcp-server", "serverUrl": "https://mcp.g2.com/mcp", "authMode": "provider_approval", "prerequisite": "G2 must enable cross-application token introspection before an independently registered client can work.", "riskTier": "S3" },
51
52
  { "slug": "vercel", "name": "Vercel", "wave": "blocked", "status": "blocked", "docsUrl": "https://vercel.com/docs/agent-resources/vercel-mcp", "serverUrl": "https://mcp.vercel.com", "authMode": "provider_approval", "prerequisite": "Vercel currently reviews and approves MCP clients.", "riskTier": "S3" },
52
- { "slug": "zomato", "name": "Zomato", "wave": "blocked", "status": "blocked", "docsUrl": "https://github.com/Zomato/mcp-server-manifest", "serverUrl": "https://mcp-server.zomato.com/mcp", "authMode": "provider_approval", "prerequisite": "Zomato currently limits third-party clients and requires redirect-URI allowlisting.", "riskTier": "S3" }
53
+ { "slug": "zomato", "name": "Zomato", "wave": "blocked", "status": "blocked", "docsUrl": "https://github.com/Zomato/mcp-server-manifest", "serverUrl": "https://mcp-server.zomato.com/mcp", "authMode": "provider_approval", "prerequisite": "Zomato currently limits third-party clients and requires redirect-URI allowlisting.", "riskTier": "S3" },
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
+ { "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
+ { "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" }
53
58
  ]
54
59
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settings-visibility-catalog-growth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-visibility-catalog-growth.test.d.ts","sourceRoot":"","sources":["../src/settings-visibility-catalog-growth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { expect, it, vi } from "vitest";
2
+ // Model a future Core release without changing the operator's policy.
3
+ vi.mock("./feature-catalog.js", async (importOriginal) => {
4
+ const catalog = await importOriginal();
5
+ return { ...catalog, INSTANCE_FEATURE_KEYS: [...catalog.INSTANCE_FEATURE_KEYS, "enableFutureFeature"] };
6
+ });
7
+ import { parseHiddenSettingsList } from "./settings-visibility.js";
8
+ it("hides an added catalog feature without an operator configuration change", () => {
9
+ const parsed = parseHiddenSettingsList("instance.plugins,instance.experimental.*,!instance.experimental.enableEnvironments");
10
+ expect(parsed.unknown).toEqual([]);
11
+ expect(parsed.hidden).toContain("instance.experimental.enableFutureFeature");
12
+ expect(parsed.hidden).toContain("instance.plugins");
13
+ expect(parsed.hidden).not.toContain("instance.experimental.enableEnvironments");
14
+ });
15
+ //# sourceMappingURL=settings-visibility-catalog-growth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-visibility-catalog-growth.test.js","sourceRoot":"","sources":["../src/settings-visibility-catalog-growth.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAExC,sEAAsE;AACtE,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACvD,MAAM,OAAO,GAAG,MAAM,cAAc,EAAyC,CAAC;IAC9E,OAAO,EAAE,GAAG,OAAO,EAAE,qBAAqB,EAAE,CAAC,GAAG,OAAO,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,EAAE,CAAC;AAC1G,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACjF,MAAM,MAAM,GAAG,uBAAuB,CAAC,oFAAoF,CAAC,CAAC;IAC7H,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;IAC7E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC"}
@@ -5,7 +5,8 @@ import { type InstanceFeatureKey } from "./feature-catalog.js";
5
5
  * A hosting operator (a managed cloud, an internal shared server) can hide
6
6
  * settings surfaces that do not apply to their deployment by setting the
7
7
  * `PAPERCLIP_HIDDEN_SETTINGS` environment variable to a comma-separated
8
- * list of keys from this registry. Hiding a surface removes it from the UI
8
+ * list of keys from this registry. An experimental wildcard with named
9
+ * exceptions can also hide future controls automatically. Hiding a surface removes it from the UI
9
10
  * (nav, routes, page sections). Surfaces backed by instance-level mutation
10
11
  * routes are also floored with a 403 carrying
11
12
  * `SETTINGS_OPERATOR_MANAGED_ERROR_CODE`: the Access, Plugins, and Adapters
@@ -51,7 +52,7 @@ export type HideableCompanySection = (typeof HIDEABLE_COMPANY_SECTIONS)[number];
51
52
  * (their suffix names a general-settings field) also floor writes to that
52
53
  * field; `deploymentStatus` and `signOut` are read-only UI with no field.
53
54
  */
54
- export declare const HIDEABLE_GENERAL_SECTIONS: readonly ["instance.general.deploymentStatus", "instance.general.censorUsernameInLogs", "instance.general.keyboardShortcuts", "instance.general.backupRetention", "instance.general.feedbackDataSharingPreference", "instance.general.speechToText", "instance.general.signOut"];
55
+ export declare const HIDEABLE_GENERAL_SECTIONS: readonly ["instance.general.deploymentStatus", "instance.general.censorUsernameInLogs", "instance.general.backupRetention", "instance.general.feedbackDataSharingPreference", "instance.general.speechToText", "instance.general.signOut"];
55
56
  export type HideableGeneralSection = (typeof HIDEABLE_GENERAL_SECTIONS)[number];
56
57
  /** General sections that are informational UI only, with no settings field. */
57
58
  export declare const UI_ONLY_GENERAL_SECTIONS: readonly ["instance.general.deploymentStatus", "instance.general.signOut"];
@@ -62,17 +63,24 @@ export declare function experimentalSettingKey(key: InstanceFeatureKey): Hideabl
62
63
  export declare const HIDEABLE_WORKSPACE_SECTIONS: readonly ["workspaces.isolation"];
63
64
  export type HideableWorkspaceSection = (typeof HIDEABLE_WORKSPACE_SECTIONS)[number];
64
65
  export type HideableSettingKey = HideableWorkspaceSection | HideableInstancePage | HideableCompanyPage | HideableCompanySection | HideableGeneralSection | HideableExperimentalSetting;
65
- /** Every key `PAPERCLIP_HIDDEN_SETTINGS` accepts. */
66
+ /** Concrete setting keys; the parser also accepts the experimental wildcard and exceptions. */
66
67
  export declare const HIDEABLE_SETTING_KEYS: readonly HideableSettingKey[];
67
68
  /** Stable 403 code for writes to operator-hidden settings. */
68
69
  export declare const SETTINGS_OPERATOR_MANAGED_ERROR_CODE = "settings_operator_managed";
70
+ /** Hide current and future experimental controls, with optional !key exceptions. */
71
+ export declare const EXPERIMENTAL_SETTINGS_WILDCARD = "instance.experimental.*";
69
72
  export interface ParsedHiddenSettings {
70
- /** Recognized keys, deduplicated, in input order. */
73
+ /** Concrete keys, deduplicated; wildcard-derived keys follow in catalog order. */
71
74
  hidden: HideableSettingKey[];
72
75
  /** Unrecognized entries, for the caller to warn about. */
73
76
  unknown: string[];
74
77
  }
75
- /** Parse a `PAPERCLIP_HIDDEN_SETTINGS`-style comma-separated list. */
78
+ /**
79
+ * Parse operator settings into concrete keys for both the UI and API.
80
+ * `instance.experimental.*` hides every catalog control except entries such as
81
+ * `!instance.experimental.enableEnvironments`. Exceptions only affect the
82
+ * wildcard; an explicit hidden key or hidden parent page always wins.
83
+ */
76
84
  export declare function parseHiddenSettingsList(raw: string | undefined): ParsedHiddenSettings;
77
85
  export declare function hidesInstancePage(hidden: ReadonlySet<string>, page: HideableInstancePage): boolean;
78
86
  export declare function hidesCompanyPage(hidden: ReadonlySet<string>, page: HideableCompanyPage): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-visibility.d.ts","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-visibility.d.ts","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@ import { INSTANCE_FEATURE_KEYS } from "./feature-catalog.js";
5
5
  * A hosting operator (a managed cloud, an internal shared server) can hide
6
6
  * settings surfaces that do not apply to their deployment by setting the
7
7
  * `PAPERCLIP_HIDDEN_SETTINGS` environment variable to a comma-separated
8
- * list of keys from this registry. Hiding a surface removes it from the UI
8
+ * list of keys from this registry. An experimental wildcard with named
9
+ * exceptions can also hide future controls automatically. Hiding a surface removes it from the UI
9
10
  * (nav, routes, page sections). Surfaces backed by instance-level mutation
10
11
  * routes are also floored with a 403 carrying
11
12
  * `SETTINGS_OPERATOR_MANAGED_ERROR_CODE`: the Access, Plugins, and Adapters
@@ -67,7 +68,6 @@ export const HIDEABLE_COMPANY_SECTIONS = [
67
68
  export const HIDEABLE_GENERAL_SECTIONS = [
68
69
  "instance.general.deploymentStatus",
69
70
  "instance.general.censorUsernameInLogs",
70
- "instance.general.keyboardShortcuts",
71
71
  "instance.general.backupRetention",
72
72
  "instance.general.feedbackDataSharingPreference",
73
73
  "instance.general.speechToText",
@@ -84,7 +84,7 @@ export function experimentalSettingKey(key) {
84
84
  }
85
85
  /** Workspace policy editors and selectors. UI-only; execution and APIs stay active. */
86
86
  export const HIDEABLE_WORKSPACE_SECTIONS = ["workspaces.isolation"];
87
- /** Every key `PAPERCLIP_HIDDEN_SETTINGS` accepts. */
87
+ /** Concrete setting keys; the parser also accepts the experimental wildcard and exceptions. */
88
88
  export const HIDEABLE_SETTING_KEYS = [
89
89
  ...HIDEABLE_WORKSPACE_SECTIONS,
90
90
  ...HIDEABLE_INSTANCE_PAGES,
@@ -95,7 +95,14 @@ export const HIDEABLE_SETTING_KEYS = [
95
95
  ];
96
96
  /** Stable 403 code for writes to operator-hidden settings. */
97
97
  export const SETTINGS_OPERATOR_MANAGED_ERROR_CODE = "settings_operator_managed";
98
- /** Parse a `PAPERCLIP_HIDDEN_SETTINGS`-style comma-separated list. */
98
+ /** Hide current and future experimental controls, with optional !key exceptions. */
99
+ export const EXPERIMENTAL_SETTINGS_WILDCARD = "instance.experimental.*";
100
+ /**
101
+ * Parse operator settings into concrete keys for both the UI and API.
102
+ * `instance.experimental.*` hides every catalog control except entries such as
103
+ * `!instance.experimental.enableEnvironments`. Exceptions only affect the
104
+ * wildcard; an explicit hidden key or hidden parent page always wins.
105
+ */
99
106
  export function parseHiddenSettingsList(raw) {
100
107
  const hidden = [];
101
108
  const unknown = [];
@@ -103,18 +110,33 @@ export function parseHiddenSettingsList(raw) {
103
110
  return { hidden, unknown };
104
111
  const known = new Set(HIDEABLE_SETTING_KEYS);
105
112
  const seen = new Set();
113
+ const exceptions = new Set();
114
+ let hideExperimental = false;
106
115
  for (const part of raw.split(",")) {
107
116
  const key = part.trim();
108
117
  if (!key || seen.has(key))
109
118
  continue;
110
119
  seen.add(key);
111
- if (known.has(key)) {
120
+ if (key === EXPERIMENTAL_SETTINGS_WILDCARD) {
121
+ hideExperimental = true;
122
+ }
123
+ else if (key.startsWith("!instance.experimental.") && known.has(key.slice(1))) {
124
+ exceptions.add(key.slice(1));
125
+ }
126
+ else if (known.has(key)) {
112
127
  hidden.push(key);
113
128
  }
114
129
  else {
115
130
  unknown.push(key);
116
131
  }
117
132
  }
133
+ if (hideExperimental) {
134
+ for (const feature of INSTANCE_FEATURE_KEYS) {
135
+ const key = experimentalSettingKey(feature);
136
+ if (!exceptions.has(key) && !seen.has(key))
137
+ hidden.push(key);
138
+ }
139
+ }
118
140
  return { hidden, unknown };
119
141
  }
120
142
  export function hidesInstancePage(hidden, page) {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-visibility.js","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-visibility.js","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,sBAAsB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,kBAAkB;IAClB,uBAAuB;IACvB,iBAAiB;IACjB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;CACX,CAAC;AAIX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;CACR,CAAC;AAIX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,2BAA2B;CACnB,CAAC;AAIX;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,mCAAmC;IACnC,uCAAuC;IACvC,kCAAkC;IAClC,gDAAgD;IAChD,+BAA+B;IAC/B,0BAA0B;CAClB,CAAC;AAIX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,mCAAmC;IACnC,0BAA0B;CAC0B,CAAC;AAIvD,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,GAAuB;IAC5D,OAAO,yBAAyB,GAAG,EAAE,CAAC;AACxC,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,sBAAsB,CAAU,CAAC;AAW7E,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAkC;IAClE,GAAG,2BAA2B;IAC9B,GAAG,uBAAuB;IAC1B,GAAG,sBAAsB;IACzB,GAAG,yBAAyB;IAC5B,GAAG,yBAAyB;IAC5B,GAAG,qBAAqB,CAAC,GAAG,CAAC,sBAAsB,CAAC;CACrD,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oCAAoC,GAAG,2BAA2B,CAAC;AAEhF,oFAAoF;AACpF,MAAM,CAAC,MAAM,8BAA8B,GAAG,yBAAyB,CAAC;AASxE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAuB;IAC7D,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,KAAK,8BAA8B,EAAE,CAAC;YAC3C,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAyB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA2B,EAC3B,IAA0B;IAE1B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAA2B,EAC3B,IAAyB;IAEzB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA2B,EAC3B,OAA+B;IAE/B,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA2B,EAC3B,OAA+B;IAE/B,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA2B,EAC3B,GAAuB;IAEvB,OAAO,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC"}
@@ -31,6 +31,43 @@ describe("hideable setting keys", () => {
31
31
  });
32
32
  });
33
33
  describe("parseHiddenSettingsList", () => {
34
+ it("expands the experimental wildcard into concrete keys without hiding the page", () => {
35
+ const parsed = parseHiddenSettingsList("instance.experimental.*");
36
+ expect(parsed).toEqual({ hidden: INSTANCE_FEATURE_KEYS.map(experimentalSettingKey), unknown: [] });
37
+ expect(parsed.hidden).not.toContain("instance.experimental");
38
+ });
39
+ it("allows only named exceptions, independent of order or duplicates", () => {
40
+ const exception = "!instance.experimental.enableEnvironments";
41
+ for (const raw of [`instance.experimental.*, ${exception}, ${exception}`, `${exception},instance.experimental.*`]) {
42
+ const parsed = parseHiddenSettingsList(raw);
43
+ expect(parsed).toEqual({
44
+ hidden: INSTANCE_FEATURE_KEYS.filter((key) => key !== "enableEnvironments").map(experimentalSettingKey),
45
+ unknown: [],
46
+ });
47
+ }
48
+ });
49
+ it("keeps explicit hides and parent page restrictions stronger than exceptions", () => {
50
+ for (const restriction of ["instance.experimental.enableEnvironments", "instance.experimental"]) {
51
+ for (const raw of [
52
+ `instance.experimental.*,!instance.experimental.enableEnvironments,${restriction}`,
53
+ `${restriction},!instance.experimental.enableEnvironments,instance.experimental.*`,
54
+ ]) {
55
+ const { hidden } = parseHiddenSettingsList(raw);
56
+ expect(hidesExperimentalSetting(new Set(hidden), "enableEnvironments")).toBe(true);
57
+ expect(new Set(hidden).size).toBe(hidden.length);
58
+ }
59
+ }
60
+ });
61
+ it("ignores unknown or out-of-scope exceptions without opening any controls", () => {
62
+ const parsed = parseHiddenSettingsList("instance.experimental.*,!instance.experimental.enableTypo,!instance.plugins,!instance.experimental,!instance.experimental.*");
63
+ expect(parsed.hidden).toEqual(INSTANCE_FEATURE_KEYS.map(experimentalSettingKey));
64
+ expect(parsed.unknown).toEqual(["!instance.experimental.enableTypo", "!instance.plugins", "!instance.experimental", "!instance.experimental.*"]);
65
+ });
66
+ it("does not use exceptions to override individual restrictions without a wildcard", () => {
67
+ expect(parseHiddenSettingsList("!instance.experimental.enableEnvironments").hidden).toEqual([]);
68
+ expect(parseHiddenSettingsList("instance.experimental.enableEnvironments,!instance.experimental.enableEnvironments").hidden)
69
+ .toEqual(["instance.experimental.enableEnvironments"]);
70
+ });
34
71
  it("accepts workspace controls independently of experimental flags", () => {
35
72
  expect(parseHiddenSettingsList("workspaces.isolation")).toEqual({ hidden: ["workspaces.isolation"], unknown: [] });
36
73
  expect(hidesExperimentalSetting(new Set(["workspaces.isolation"]), "enableIsolatedWorkspaces")).toBe(false);
@@ -1 +1 @@
1
- {"version":3,"file":"settings-visibility.test.js","sourceRoot":"","sources":["../src/settings-visibility.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAC/C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAClD,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC;YACrC,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB;YAChB,gBAAgB;SACjB,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;YAC1C,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,wBAAwB,CAAC,CAAC;QACzD,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAClC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnH,MAAM,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,uBAAuB,CACpC,8HAA8H,CAC/H,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YAC5B,kBAAkB;YAClB,kCAAkC;YAClC,0CAA0C;SAC3C,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,uBAAuB,CACrB,iGAAiG,CAClG,CAAC,MAAM,CACT,CAAC;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,KAAK,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;YAC5C,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxF,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpF,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"settings-visibility.test.js","sourceRoot":"","sources":["../src/settings-visibility.test.ts"],"names":[],"mappings":"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"}