@paperclipai/shared 2026.1001.0 → 2026.1002.0-beta.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 (261) hide show
  1. package/dist/.paperclip-build-complete +1 -1
  2. package/dist/ai-connections.d.ts.map +1 -1
  3. package/dist/ai-connections.js +7 -5
  4. package/dist/ai-connections.js.map +1 -1
  5. package/dist/app-definitions/airtable.json +10 -1
  6. package/dist/app-definitions/api-key-generic.json +2 -1
  7. package/dist/app-definitions/asana.json +9 -8
  8. package/dist/app-definitions/beehiiv.json +5 -1
  9. package/dist/app-definitions/bitly.json +2 -1
  10. package/dist/app-definitions/brex.json +23 -1
  11. package/dist/app-definitions/browser-use-cloud.json +53 -0
  12. package/dist/app-definitions/candid.json +6 -1
  13. package/dist/app-definitions/clickhouse.json +8 -1
  14. package/dist/app-definitions/cloudflare.json +7 -2
  15. package/dist/app-definitions/cloudinary.json +10 -1
  16. package/dist/app-definitions/coda.json +6 -2
  17. package/dist/app-definitions/cognee.json +71 -0
  18. package/dist/app-definitions/embat.json +7 -1
  19. package/dist/app-definitions/fireflies.json +83 -0
  20. package/dist/app-definitions/github-code-review-bot.json +57 -0
  21. package/dist/app-definitions/github.json +4 -43
  22. package/dist/app-definitions/google-calendar.json +0 -2
  23. package/dist/app-definitions/google-chat.json +6 -14
  24. package/dist/app-definitions/google-docs.json +0 -6
  25. package/dist/app-definitions/google-sheets.json +0 -6
  26. package/dist/app-definitions/google-slides.json +0 -6
  27. package/dist/app-definitions/honcho.json +57 -0
  28. package/dist/app-definitions/hugging-face.json +4 -1
  29. package/dist/app-definitions/kernel.json +6 -2
  30. package/dist/app-definitions/linear.json +2 -1
  31. package/dist/app-definitions/local-falcon.json +5 -1
  32. package/dist/app-definitions/manufact.json +7 -1
  33. package/dist/app-definitions/mem0.json +6 -5
  34. package/dist/app-definitions/miro.json +7 -1
  35. package/dist/app-definitions/mixpanel.json +27 -1
  36. package/dist/app-definitions/netlify.json +6 -1
  37. package/dist/app-definitions/notion.json +4 -1
  38. package/dist/app-definitions/oreilly.json +7 -2
  39. package/dist/app-definitions/pagerduty.json +4 -2
  40. package/dist/app-definitions/planetscale.json +12 -2
  41. package/dist/app-definitions/posthog.json +2 -1
  42. package/dist/app-definitions/postman.json +6 -3
  43. package/dist/app-definitions/razorpay.json +2 -1
  44. package/dist/app-definitions/resend.json +4 -1
  45. package/dist/app-definitions/sanity.json +6 -2
  46. package/dist/app-definitions/sentry.json +8 -1
  47. package/dist/app-definitions/similarweb.json +2 -1
  48. package/dist/app-definitions/slack.json +28 -1
  49. package/dist/app-definitions/stripe.json +6 -2
  50. package/dist/app-definitions/supabase.json +22 -4
  51. package/dist/app-definitions/supermemory.json +50 -0
  52. package/dist/app-definitions/ticktick.json +5 -1
  53. package/dist/app-definitions/todoist.json +4 -1
  54. package/dist/app-definitions/vercel.json +4 -1
  55. package/dist/app-definitions/wix.json +4 -1
  56. package/dist/app-definitions/youcom.json +7 -2
  57. package/dist/app-definitions/zep.json +49 -0
  58. package/dist/app-definitions-url.test.js +3 -2
  59. package/dist/app-definitions-url.test.js.map +1 -1
  60. package/dist/app-definitions.d.ts +5 -1
  61. package/dist/app-definitions.d.ts.map +1 -1
  62. package/dist/app-definitions.generated.d.ts.map +1 -1
  63. package/dist/app-definitions.generated.js +76 -69
  64. package/dist/app-definitions.generated.js.map +1 -1
  65. package/dist/app-definitions.js +18 -7
  66. package/dist/app-definitions.js.map +1 -1
  67. package/dist/app-definitions.test.js +97 -50
  68. package/dist/app-definitions.test.js.map +1 -1
  69. package/dist/browser-use.d.ts +107 -0
  70. package/dist/browser-use.d.ts.map +1 -0
  71. package/dist/browser-use.js +98 -0
  72. package/dist/browser-use.js.map +1 -0
  73. package/dist/composio-search-catalog.json +1589 -0
  74. package/dist/connection-intent-guidance.d.ts +2 -2
  75. package/dist/connection-intent-guidance.d.ts.map +1 -1
  76. package/dist/connection-intent-guidance.js +6 -20
  77. package/dist/connection-intent-guidance.js.map +1 -1
  78. package/dist/connection-intent-guidance.test.js +15 -54
  79. package/dist/connection-intent-guidance.test.js.map +1 -1
  80. package/dist/connection-routing.d.ts +33 -0
  81. package/dist/connection-routing.d.ts.map +1 -0
  82. package/dist/connection-routing.js +295 -0
  83. package/dist/connection-routing.js.map +1 -0
  84. package/dist/connection-routing.test.d.ts +2 -0
  85. package/dist/connection-routing.test.d.ts.map +1 -0
  86. package/dist/connection-routing.test.js +73 -0
  87. package/dist/connection-routing.test.js.map +1 -0
  88. package/dist/connection-search.d.ts +15 -0
  89. package/dist/connection-search.d.ts.map +1 -0
  90. package/dist/connection-search.js +75 -0
  91. package/dist/connection-search.js.map +1 -0
  92. package/dist/connection-search.test.d.ts +2 -0
  93. package/dist/connection-search.test.d.ts.map +1 -0
  94. package/dist/connection-search.test.js +37 -0
  95. package/dist/connection-search.test.js.map +1 -0
  96. package/dist/connection-setup-state.d.ts +32 -0
  97. package/dist/connection-setup-state.d.ts.map +1 -0
  98. package/dist/connection-setup-state.js +74 -0
  99. package/dist/connection-setup-state.js.map +1 -0
  100. package/dist/connection-setup-state.test.d.ts +2 -0
  101. package/dist/connection-setup-state.test.d.ts.map +1 -0
  102. package/dist/connection-setup-state.test.js +92 -0
  103. package/dist/connection-setup-state.test.js.map +1 -0
  104. package/dist/constants.d.ts +3 -3
  105. package/dist/constants.d.ts.map +1 -1
  106. package/dist/constants.js +3 -2
  107. package/dist/constants.js.map +1 -1
  108. package/dist/feature-catalog.d.ts.map +1 -1
  109. package/dist/feature-catalog.js +10 -3
  110. package/dist/feature-catalog.js.map +1 -1
  111. package/dist/github-skill-repository.d.ts +7 -0
  112. package/dist/github-skill-repository.d.ts.map +1 -0
  113. package/dist/github-skill-repository.js +29 -0
  114. package/dist/github-skill-repository.js.map +1 -0
  115. package/dist/google-workspace-connectors.js +9 -9
  116. package/dist/google-workspace-connectors.js.map +1 -1
  117. package/dist/heartbeat-inbox.d.ts +5 -0
  118. package/dist/heartbeat-inbox.d.ts.map +1 -0
  119. package/dist/heartbeat-inbox.js +10 -0
  120. package/dist/heartbeat-inbox.js.map +1 -0
  121. package/dist/index.d.ts +18 -3
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +16 -3
  124. package/dist/index.js.map +1 -1
  125. package/dist/memory-connectors.d.ts +5 -0
  126. package/dist/memory-connectors.d.ts.map +1 -0
  127. package/dist/memory-connectors.js +6 -0
  128. package/dist/memory-connectors.js.map +1 -0
  129. package/dist/memory-connectors.test.d.ts +2 -0
  130. package/dist/memory-connectors.test.d.ts.map +1 -0
  131. package/dist/memory-connectors.test.js +33 -0
  132. package/dist/memory-connectors.test.js.map +1 -0
  133. package/dist/remote-mcp-connectors.test.js +4 -4
  134. package/dist/remote-mcp-connectors.test.js.map +1 -1
  135. package/dist/self-serve-mcp-research.json +7 -2
  136. package/dist/settings-visibility-catalog-growth.test.d.ts +2 -0
  137. package/dist/settings-visibility-catalog-growth.test.d.ts.map +1 -0
  138. package/dist/settings-visibility-catalog-growth.test.js +15 -0
  139. package/dist/settings-visibility-catalog-growth.test.js.map +1 -0
  140. package/dist/settings-visibility.d.ts +17 -6
  141. package/dist/settings-visibility.d.ts.map +1 -1
  142. package/dist/settings-visibility.js +30 -5
  143. package/dist/settings-visibility.js.map +1 -1
  144. package/dist/settings-visibility.test.js +41 -0
  145. package/dist/settings-visibility.test.js.map +1 -1
  146. package/dist/slack-tools.d.ts +611 -0
  147. package/dist/slack-tools.d.ts.map +1 -0
  148. package/dist/slack-tools.js +167 -0
  149. package/dist/slack-tools.js.map +1 -0
  150. package/dist/telemetry/client.d.ts +7 -0
  151. package/dist/telemetry/client.d.ts.map +1 -1
  152. package/dist/telemetry/client.js +10 -1
  153. package/dist/telemetry/client.js.map +1 -1
  154. package/dist/telemetry/events.d.ts +25 -0
  155. package/dist/telemetry/events.d.ts.map +1 -1
  156. package/dist/telemetry/events.js +15 -0
  157. package/dist/telemetry/events.js.map +1 -1
  158. package/dist/telemetry/generated/paperclip-telemetry.d.ts +3 -0
  159. package/dist/telemetry/generated/paperclip-telemetry.d.ts.map +1 -1
  160. package/dist/telemetry/generated/paperclip-telemetry.js.map +1 -1
  161. package/dist/telemetry/index.d.ts +1 -1
  162. package/dist/telemetry/index.d.ts.map +1 -1
  163. package/dist/telemetry/index.js +1 -1
  164. package/dist/telemetry/index.js.map +1 -1
  165. package/dist/telemetry/proposed-connector-events.test.d.ts +2 -0
  166. package/dist/telemetry/proposed-connector-events.test.d.ts.map +1 -0
  167. package/dist/telemetry/proposed-connector-events.test.js +96 -0
  168. package/dist/telemetry/proposed-connector-events.test.js.map +1 -0
  169. package/dist/types/agent.d.ts +66 -0
  170. package/dist/types/agent.d.ts.map +1 -1
  171. package/dist/types/agent.js.map +1 -1
  172. package/dist/types/asset.d.ts +1 -0
  173. package/dist/types/asset.d.ts.map +1 -1
  174. package/dist/types/company-skill.d.ts +6 -0
  175. package/dist/types/company-skill.d.ts.map +1 -1
  176. package/dist/types/connection-intent.d.ts +21 -1
  177. package/dist/types/connection-intent.d.ts.map +1 -1
  178. package/dist/types/execution-continuation.d.ts +5 -0
  179. package/dist/types/execution-continuation.d.ts.map +1 -1
  180. package/dist/types/execution-projection.d.ts +2 -0
  181. package/dist/types/execution-projection.d.ts.map +1 -1
  182. package/dist/types/index.d.ts +3 -0
  183. package/dist/types/index.d.ts.map +1 -1
  184. package/dist/types/index.js +1 -0
  185. package/dist/types/index.js.map +1 -1
  186. package/dist/types/instance.d.ts +3 -2
  187. package/dist/types/instance.d.ts.map +1 -1
  188. package/dist/types/instance.js.map +1 -1
  189. package/dist/types/issue.d.ts +27 -1
  190. package/dist/types/issue.d.ts.map +1 -1
  191. package/dist/types/plugin.d.ts +7 -0
  192. package/dist/types/plugin.d.ts.map +1 -1
  193. package/dist/types/project.d.ts +5 -0
  194. package/dist/types/project.d.ts.map +1 -1
  195. package/dist/types/search.d.ts +1 -0
  196. package/dist/types/search.d.ts.map +1 -1
  197. package/dist/types/search.js.map +1 -1
  198. package/dist/types/skill-source.d.ts +135 -0
  199. package/dist/types/skill-source.d.ts.map +1 -0
  200. package/dist/types/skill-source.js +2 -0
  201. package/dist/types/skill-source.js.map +1 -0
  202. package/dist/types/tool-access.d.ts +6 -0
  203. package/dist/types/tool-access.d.ts.map +1 -1
  204. package/dist/types/tool-access.js.map +1 -1
  205. package/dist/validators/access.d.ts +1 -0
  206. package/dist/validators/access.d.ts.map +1 -1
  207. package/dist/validators/access.js +2 -0
  208. package/dist/validators/access.js.map +1 -1
  209. package/dist/validators/access.test.js +9 -0
  210. package/dist/validators/access.test.js.map +1 -1
  211. package/dist/validators/agent.d.ts +14 -1
  212. package/dist/validators/agent.d.ts.map +1 -1
  213. package/dist/validators/agent.js +17 -3
  214. package/dist/validators/agent.js.map +1 -1
  215. package/dist/validators/company-portability.d.ts +24 -0
  216. package/dist/validators/company-portability.d.ts.map +1 -1
  217. package/dist/validators/company-skill.d.ts +25 -0
  218. package/dist/validators/company-skill.d.ts.map +1 -1
  219. package/dist/validators/company-skill.js +6 -0
  220. package/dist/validators/company-skill.js.map +1 -1
  221. package/dist/validators/connection-intent.d.ts +3 -0
  222. package/dist/validators/connection-intent.d.ts.map +1 -1
  223. package/dist/validators/connection-intent.js +4 -1
  224. package/dist/validators/connection-intent.js.map +1 -1
  225. package/dist/validators/connection-intent.test.js +5 -0
  226. package/dist/validators/connection-intent.test.js.map +1 -1
  227. package/dist/validators/index.d.ts +3 -1
  228. package/dist/validators/index.d.ts.map +1 -1
  229. package/dist/validators/index.js +3 -1
  230. package/dist/validators/index.js.map +1 -1
  231. package/dist/validators/instance.d.ts +3 -2
  232. package/dist/validators/instance.d.ts.map +1 -1
  233. package/dist/validators/instance.js +3 -2
  234. package/dist/validators/instance.js.map +1 -1
  235. package/dist/validators/issue.d.ts +49 -4
  236. package/dist/validators/issue.d.ts.map +1 -1
  237. package/dist/validators/issue.js +47 -3
  238. package/dist/validators/issue.js.map +1 -1
  239. package/dist/validators/issue.test.js +10 -1
  240. package/dist/validators/issue.test.js.map +1 -1
  241. package/dist/validators/plugin.d.ts +12 -0
  242. package/dist/validators/plugin.d.ts.map +1 -1
  243. package/dist/validators/plugin.js +1 -0
  244. package/dist/validators/plugin.js.map +1 -1
  245. package/dist/validators/plugin.test.js +9 -0
  246. package/dist/validators/plugin.test.js.map +1 -1
  247. package/dist/validators/routine.d.ts +10 -0
  248. package/dist/validators/routine.d.ts.map +1 -1
  249. package/dist/validators/routine.test.js +2 -2
  250. package/dist/validators/routine.test.js.map +1 -1
  251. package/dist/validators/skill-source.d.ts +29 -0
  252. package/dist/validators/skill-source.d.ts.map +1 -0
  253. package/dist/validators/skill-source.js +26 -0
  254. package/dist/validators/skill-source.js.map +1 -0
  255. package/dist/validators/tool-access.d.ts +3 -0
  256. package/dist/validators/tool-access.d.ts.map +1 -1
  257. package/dist/workspace-restore.d.ts +8 -0
  258. package/dist/workspace-restore.d.ts.map +1 -0
  259. package/dist/workspace-restore.js +28 -0
  260. package/dist/workspace-restore.js.map +1 -0
  261. package/package.json +1 -1
@@ -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,25 +52,35 @@ 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.signOut"];
55
+ export declare const HIDEABLE_GENERAL_SECTIONS: readonly ["instance.general.deploymentStatus", "instance.general.censorUsernameInLogs", "instance.general.backupRetention", "instance.general.feedbackDataSharingPreference", "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"];
58
59
  export type HideableExperimentalSetting = `instance.experimental.${InstanceFeatureKey}`;
59
60
  /** The visibility key for an experimental toggle; every boolean flag is hideable. */
60
61
  export declare function experimentalSettingKey(key: InstanceFeatureKey): HideableExperimentalSetting;
61
- export type HideableSettingKey = HideableInstancePage | HideableCompanyPage | HideableCompanySection | HideableGeneralSection | HideableExperimentalSetting;
62
- /** Every key `PAPERCLIP_HIDDEN_SETTINGS` accepts. */
62
+ /** Workspace policy editors and selectors. UI-only; execution and APIs stay active. */
63
+ export declare const HIDEABLE_WORKSPACE_SECTIONS: readonly ["workspaces.isolation"];
64
+ export type HideableWorkspaceSection = (typeof HIDEABLE_WORKSPACE_SECTIONS)[number];
65
+ export type HideableSettingKey = HideableWorkspaceSection | HideableInstancePage | HideableCompanyPage | HideableCompanySection | HideableGeneralSection | HideableExperimentalSetting;
66
+ /** Concrete setting keys; the parser also accepts the experimental wildcard and exceptions. */
63
67
  export declare const HIDEABLE_SETTING_KEYS: readonly HideableSettingKey[];
64
68
  /** Stable 403 code for writes to operator-hidden settings. */
65
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.*";
66
72
  export interface ParsedHiddenSettings {
67
- /** Recognized keys, deduplicated, in input order. */
73
+ /** Concrete keys, deduplicated; wildcard-derived keys follow in catalog order. */
68
74
  hidden: HideableSettingKey[];
69
75
  /** Unrecognized entries, for the caller to warn about. */
70
76
  unknown: string[];
71
77
  }
72
- /** 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
+ */
73
84
  export declare function parseHiddenSettingsList(raw: string | undefined): ParsedHiddenSettings;
74
85
  export declare function hidesInstancePage(hidden: ReadonlySet<string>, page: HideableInstancePage): boolean;
75
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":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,YAClC,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,CACX,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,YACjC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,CACR,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,YACpC,wBAAwB,EACxB,2BAA2B,CACnB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,YACpC,mCAAmC,EACnC,uCAAuC,EACvC,oCAAoC,EACpC,kCAAkC,EAClC,gDAAgD,EAChD,0BAA0B,CAClB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,4EAGiB,CAAC;AAEvD,MAAM,MAAM,2BAA2B,GAAG,yBAAyB,kBAAkB,EAAE,CAAC;AAExF,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,GAAG,2BAA2B,CAE3F;AAED,MAAM,MAAM,kBAAkB,GAC1B,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,2BAA2B,CAAC;AAEhC,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAM9D,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,oCAAoC,8BAA8B,CAAC;AAEhF,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAiBrF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAET;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAET;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAET;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAET"}
1
+ {"version":3,"file":"settings-visibility.d.ts","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,YAClC,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,CACX,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,YACjC,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,CACR,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,YACpC,wBAAwB,EACxB,2BAA2B,CACnB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,YACpC,mCAAmC,EACnC,uCAAuC,EACvC,kCAAkC,EAClC,gDAAgD,EAChD,0BAA0B,CAClB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,4EAGiB,CAAC;AAEvD,MAAM,MAAM,2BAA2B,GAAG,yBAAyB,kBAAkB,EAAE,CAAC;AAExF,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,GAAG,2BAA2B,CAE3F;AAED,uFAAuF;AACvF,eAAO,MAAM,2BAA2B,YAAI,sBAAsB,CAAU,CAAC;AAC7E,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,2BAA2B,CAAC;AAEhC,+FAA+F;AAC/F,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAO9D,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,oCAAoC,8BAA8B,CAAC;AAEhF,oFAAoF;AACpF,eAAO,MAAM,8BAA8B,4BAA4B,CAAC;AAExE,MAAM,WAAW,oBAAoB;IACnC,kFAAkF;IAClF,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CA6BrF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAET;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAET;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAET;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAET"}
@@ -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.signOut",
@@ -81,8 +81,11 @@ export const UI_ONLY_GENERAL_SECTIONS = [
81
81
  export function experimentalSettingKey(key) {
82
82
  return `instance.experimental.${key}`;
83
83
  }
84
- /** Every key `PAPERCLIP_HIDDEN_SETTINGS` accepts. */
84
+ /** Workspace policy editors and selectors. UI-only; execution and APIs stay active. */
85
+ export const HIDEABLE_WORKSPACE_SECTIONS = ["workspaces.isolation"];
86
+ /** Concrete setting keys; the parser also accepts the experimental wildcard and exceptions. */
85
87
  export const HIDEABLE_SETTING_KEYS = [
88
+ ...HIDEABLE_WORKSPACE_SECTIONS,
86
89
  ...HIDEABLE_INSTANCE_PAGES,
87
90
  ...HIDEABLE_COMPANY_PAGES,
88
91
  ...HIDEABLE_COMPANY_SECTIONS,
@@ -91,7 +94,14 @@ export const HIDEABLE_SETTING_KEYS = [
91
94
  ];
92
95
  /** Stable 403 code for writes to operator-hidden settings. */
93
96
  export const SETTINGS_OPERATOR_MANAGED_ERROR_CODE = "settings_operator_managed";
94
- /** Parse a `PAPERCLIP_HIDDEN_SETTINGS`-style comma-separated list. */
97
+ /** Hide current and future experimental controls, with optional !key exceptions. */
98
+ export const EXPERIMENTAL_SETTINGS_WILDCARD = "instance.experimental.*";
99
+ /**
100
+ * Parse operator settings into concrete keys for both the UI and API.
101
+ * `instance.experimental.*` hides every catalog control except entries such as
102
+ * `!instance.experimental.enableEnvironments`. Exceptions only affect the
103
+ * wildcard; an explicit hidden key or hidden parent page always wins.
104
+ */
95
105
  export function parseHiddenSettingsList(raw) {
96
106
  const hidden = [];
97
107
  const unknown = [];
@@ -99,18 +109,33 @@ export function parseHiddenSettingsList(raw) {
99
109
  return { hidden, unknown };
100
110
  const known = new Set(HIDEABLE_SETTING_KEYS);
101
111
  const seen = new Set();
112
+ const exceptions = new Set();
113
+ let hideExperimental = false;
102
114
  for (const part of raw.split(",")) {
103
115
  const key = part.trim();
104
116
  if (!key || seen.has(key))
105
117
  continue;
106
118
  seen.add(key);
107
- if (known.has(key)) {
119
+ if (key === EXPERIMENTAL_SETTINGS_WILDCARD) {
120
+ hideExperimental = true;
121
+ }
122
+ else if (key.startsWith("!instance.experimental.") && known.has(key.slice(1))) {
123
+ exceptions.add(key.slice(1));
124
+ }
125
+ else if (known.has(key)) {
108
126
  hidden.push(key);
109
127
  }
110
128
  else {
111
129
  unknown.push(key);
112
130
  }
113
131
  }
132
+ if (hideExperimental) {
133
+ for (const feature of INSTANCE_FEATURE_KEYS) {
134
+ const key = experimentalSettingKey(feature);
135
+ if (!exceptions.has(key) && !seen.has(key))
136
+ hidden.push(key);
137
+ }
138
+ }
114
139
  return { hidden, unknown };
115
140
  }
116
141
  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":"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"}
@@ -31,6 +31,47 @@ 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
+ });
71
+ it("accepts workspace controls independently of experimental flags", () => {
72
+ expect(parseHiddenSettingsList("workspaces.isolation")).toEqual({ hidden: ["workspaces.isolation"], unknown: [] });
73
+ expect(hidesExperimentalSetting(new Set(["workspaces.isolation"]), "enableIsolatedWorkspaces")).toBe(false);
74
+ });
34
75
  it("returns nothing hidden for undefined or empty input", () => {
35
76
  expect(parseHiddenSettingsList(undefined)).toEqual({ hidden: [], unknown: [] });
36
77
  expect(parseHiddenSettingsList(" , ,")).toEqual({ hidden: [], unknown: [] });
@@ -1 +1 @@
1
- {"version":3,"file":"settings-visibility.test.js","sourceRoot":"","sources":["../src/settings-visibility.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-visibility.test.js","sourceRoot":"","sources":["../src/settings-visibility.test.ts"],"names":[],"mappings":"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"}