@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.
- package/dist/.paperclip-build-complete +1 -1
- package/dist/aggregator-app-catalog.d.ts +26 -0
- package/dist/aggregator-app-catalog.d.ts.map +1 -0
- package/dist/aggregator-app-catalog.js +72 -0
- package/dist/aggregator-app-catalog.js.map +1 -0
- package/dist/aggregator-app-catalog.test.d.ts +2 -0
- package/dist/aggregator-app-catalog.test.d.ts.map +1 -0
- package/dist/aggregator-app-catalog.test.js +45 -0
- package/dist/aggregator-app-catalog.test.js.map +1 -0
- package/dist/aggregator-apps.d.ts +41 -0
- package/dist/aggregator-apps.d.ts.map +1 -0
- package/dist/aggregator-apps.js +34 -0
- package/dist/aggregator-apps.js.map +1 -0
- package/dist/ai-connection-router.d.ts +352 -0
- package/dist/ai-connection-router.d.ts.map +1 -0
- package/dist/ai-connection-router.js +55 -0
- package/dist/ai-connection-router.js.map +1 -0
- package/dist/ai-connection-usage.d.ts +48 -0
- package/dist/ai-connection-usage.d.ts.map +1 -0
- package/dist/ai-connection-usage.js +6 -0
- package/dist/ai-connection-usage.js.map +1 -0
- package/dist/ai-connections.d.ts +7 -0
- package/dist/ai-connections.d.ts.map +1 -1
- package/dist/ai-connections.js +7 -5
- package/dist/ai-connections.js.map +1 -1
- package/dist/app-definitions/agentmail.json +1 -1
- package/dist/app-definitions/airtable.json +10 -1
- package/dist/app-definitions/api-key-generic.json +2 -1
- package/dist/app-definitions/asana.json +37 -6
- package/dist/app-definitions/beehiiv.json +5 -1
- package/dist/app-definitions/bitly.json +2 -1
- package/dist/app-definitions/brex.json +23 -1
- package/dist/app-definitions/browser-use-cloud.json +53 -0
- package/dist/app-definitions/candid.json +6 -1
- package/dist/app-definitions/clickhouse.json +8 -1
- package/dist/app-definitions/cloudflare.json +7 -2
- package/dist/app-definitions/cloudinary.json +10 -1
- package/dist/app-definitions/coda.json +6 -2
- package/dist/app-definitions/cognee.json +76 -0
- package/dist/app-definitions/embat.json +7 -1
- package/dist/app-definitions/fireflies.json +2 -1
- package/dist/app-definitions/github-code-review-bot.json +57 -0
- package/dist/app-definitions/github.json +4 -43
- package/dist/app-definitions/google-calendar.json +0 -2
- package/dist/app-definitions/google-docs.json +0 -6
- package/dist/app-definitions/google-sheets.json +0 -6
- package/dist/app-definitions/google-slides.json +0 -6
- package/dist/app-definitions/honcho.json +73 -0
- package/dist/app-definitions/hugging-face.json +4 -1
- package/dist/app-definitions/kernel.json +6 -2
- package/dist/app-definitions/linear.json +2 -1
- package/dist/app-definitions/local-falcon.json +5 -1
- package/dist/app-definitions/manufact.json +7 -1
- package/dist/app-definitions/mem0.json +12 -6
- package/dist/app-definitions/miro.json +7 -1
- package/dist/app-definitions/mixpanel.json +27 -1
- package/dist/app-definitions/neon.json +155 -0
- package/dist/app-definitions/netlify.json +6 -1
- package/dist/app-definitions/notion.json +4 -1
- package/dist/app-definitions/oreilly.json +7 -2
- package/dist/app-definitions/pagerduty.json +4 -2
- package/dist/app-definitions/planetscale.json +12 -2
- package/dist/app-definitions/posthog.json +2 -1
- package/dist/app-definitions/postman.json +6 -3
- package/dist/app-definitions/razorpay.json +2 -1
- package/dist/app-definitions/resend.json +4 -1
- package/dist/app-definitions/sanity.json +6 -2
- package/dist/app-definitions/sentry.json +8 -1
- package/dist/app-definitions/similarweb.json +2 -1
- package/dist/app-definitions/slack.json +28 -1
- package/dist/app-definitions/stripe.json +6 -2
- package/dist/app-definitions/supabase.json +22 -4
- package/dist/app-definitions/supermemory.json +55 -0
- package/dist/app-definitions/ticktick.json +5 -1
- package/dist/app-definitions/todoist.json +4 -1
- package/dist/app-definitions/vercel.json +4 -1
- package/dist/app-definitions/wix.json +4 -1
- package/dist/app-definitions/youcom.json +7 -2
- package/dist/app-definitions/zep.json +54 -0
- package/dist/app-definitions-url.test.js +4 -2
- package/dist/app-definitions-url.test.js.map +1 -1
- package/dist/app-definitions.d.ts +5 -1
- package/dist/app-definitions.d.ts.map +1 -1
- package/dist/app-definitions.generated.d.ts.map +1 -1
- package/dist/app-definitions.generated.js +78 -71
- package/dist/app-definitions.generated.js.map +1 -1
- package/dist/app-definitions.js +18 -7
- package/dist/app-definitions.js.map +1 -1
- package/dist/app-definitions.test.js +173 -46
- package/dist/app-definitions.test.js.map +1 -1
- package/dist/arcade-app-catalog.json +1602 -0
- package/dist/asana-connectors.d.ts +7 -0
- package/dist/asana-connectors.d.ts.map +1 -0
- package/dist/asana-connectors.js +8 -0
- package/dist/asana-connectors.js.map +1 -0
- package/dist/browser-use.d.ts +107 -0
- package/dist/browser-use.d.ts.map +1 -0
- package/dist/browser-use.js +98 -0
- package/dist/browser-use.js.map +1 -0
- package/dist/composio-app-setup.d.ts +65 -0
- package/dist/composio-app-setup.d.ts.map +1 -0
- package/dist/composio-app-setup.js +17 -0
- package/dist/composio-app-setup.js.map +1 -0
- package/dist/composio-search-catalog.json +1589 -0
- package/dist/connection-instructions.d.ts +34 -0
- package/dist/connection-instructions.d.ts.map +1 -0
- package/dist/connection-instructions.js +48 -0
- package/dist/connection-instructions.js.map +1 -0
- package/dist/connection-instructions.test.d.ts +2 -0
- package/dist/connection-instructions.test.d.ts.map +1 -0
- package/dist/connection-instructions.test.js +84 -0
- package/dist/connection-instructions.test.js.map +1 -0
- package/dist/connection-intent-guidance.d.ts +2 -2
- package/dist/connection-intent-guidance.d.ts.map +1 -1
- package/dist/connection-intent-guidance.js +7 -20
- package/dist/connection-intent-guidance.js.map +1 -1
- package/dist/connection-intent-guidance.test.js +15 -54
- package/dist/connection-intent-guidance.test.js.map +1 -1
- package/dist/connection-routing.d.ts +33 -0
- package/dist/connection-routing.d.ts.map +1 -0
- package/dist/connection-routing.js +309 -0
- package/dist/connection-routing.js.map +1 -0
- package/dist/connection-routing.test.d.ts +2 -0
- package/dist/connection-routing.test.d.ts.map +1 -0
- package/dist/connection-routing.test.js +73 -0
- package/dist/connection-routing.test.js.map +1 -0
- package/dist/connection-search.d.ts +15 -0
- package/dist/connection-search.d.ts.map +1 -0
- package/dist/connection-search.js +75 -0
- package/dist/connection-search.js.map +1 -0
- package/dist/connection-search.test.d.ts +2 -0
- package/dist/connection-search.test.d.ts.map +1 -0
- package/dist/connection-search.test.js +37 -0
- package/dist/connection-search.test.js.map +1 -0
- package/dist/connection-setup-state.d.ts +32 -0
- package/dist/connection-setup-state.d.ts.map +1 -0
- package/dist/connection-setup-state.js +74 -0
- package/dist/connection-setup-state.js.map +1 -0
- package/dist/connection-setup-state.test.d.ts +2 -0
- package/dist/connection-setup-state.test.d.ts.map +1 -0
- package/dist/connection-setup-state.test.js +92 -0
- package/dist/connection-setup-state.test.js.map +1 -0
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/feature-catalog.d.ts.map +1 -1
- package/dist/feature-catalog.js +24 -5
- package/dist/feature-catalog.js.map +1 -1
- package/dist/github-skill-repository.d.ts +7 -0
- package/dist/github-skill-repository.d.ts.map +1 -0
- package/dist/github-skill-repository.js +29 -0
- package/dist/github-skill-repository.js.map +1 -0
- package/dist/google-workspace-connectors.js +7 -7
- package/dist/google-workspace-connectors.js.map +1 -1
- package/dist/heartbeat-inbox.d.ts +5 -0
- package/dist/heartbeat-inbox.d.ts.map +1 -0
- package/dist/heartbeat-inbox.js +10 -0
- package/dist/heartbeat-inbox.js.map +1 -0
- package/dist/index.d.ts +26 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -3
- package/dist/index.js.map +1 -1
- package/dist/issue-thread-interactions.test.js +53 -0
- package/dist/issue-thread-interactions.test.js.map +1 -1
- package/dist/memory-connectors.d.ts +5 -0
- package/dist/memory-connectors.d.ts.map +1 -0
- package/dist/memory-connectors.js +6 -0
- package/dist/memory-connectors.js.map +1 -0
- package/dist/memory-connectors.test.d.ts +2 -0
- package/dist/memory-connectors.test.d.ts.map +1 -0
- package/dist/memory-connectors.test.js +33 -0
- package/dist/memory-connectors.test.js.map +1 -0
- package/dist/question-set.d.ts +4 -0
- package/dist/question-set.d.ts.map +1 -0
- package/dist/question-set.js +48 -0
- package/dist/question-set.js.map +1 -0
- package/dist/remote-mcp-connectors.test.js +4 -4
- package/dist/remote-mcp-connectors.test.js.map +1 -1
- package/dist/self-serve-mcp-research.json +7 -2
- package/dist/settings-visibility-catalog-growth.test.d.ts +2 -0
- package/dist/settings-visibility-catalog-growth.test.d.ts.map +1 -0
- package/dist/settings-visibility-catalog-growth.test.js +15 -0
- package/dist/settings-visibility-catalog-growth.test.js.map +1 -0
- package/dist/settings-visibility.d.ts +13 -5
- package/dist/settings-visibility.d.ts.map +1 -1
- package/dist/settings-visibility.js +27 -5
- package/dist/settings-visibility.js.map +1 -1
- package/dist/settings-visibility.test.js +37 -0
- package/dist/settings-visibility.test.js.map +1 -1
- package/dist/slack-tools.d.ts +57 -3
- package/dist/slack-tools.d.ts.map +1 -1
- package/dist/slack-tools.js +25 -4
- package/dist/slack-tools.js.map +1 -1
- package/dist/telemetry/generated/paperclip-telemetry.d.ts +3 -0
- package/dist/telemetry/generated/paperclip-telemetry.d.ts.map +1 -1
- package/dist/telemetry/generated/paperclip-telemetry.js.map +1 -1
- package/dist/types/agent.d.ts +67 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/app-definition.d.ts +5 -0
- package/dist/types/app-definition.d.ts.map +1 -1
- package/dist/types/asset.d.ts +1 -0
- package/dist/types/asset.d.ts.map +1 -1
- package/dist/types/company-skill.d.ts +6 -0
- package/dist/types/company-skill.d.ts.map +1 -1
- package/dist/types/connection-intent.d.ts +27 -1
- package/dist/types/connection-intent.d.ts.map +1 -1
- package/dist/types/email.d.ts +13 -0
- package/dist/types/email.d.ts.map +1 -1
- package/dist/types/execution-continuation.d.ts +5 -0
- package/dist/types/execution-continuation.d.ts.map +1 -1
- package/dist/types/execution-projection.d.ts +9 -0
- package/dist/types/execution-projection.d.ts.map +1 -1
- package/dist/types/execution-projection.js.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/instance.d.ts +6 -2
- package/dist/types/instance.d.ts.map +1 -1
- package/dist/types/instance.js.map +1 -1
- package/dist/types/issue.d.ts +39 -2
- package/dist/types/issue.d.ts.map +1 -1
- package/dist/types/plugin.d.ts +12 -0
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/project.d.ts +16 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/skill-source.d.ts +135 -0
- package/dist/types/skill-source.d.ts.map +1 -0
- package/dist/types/skill-source.js +2 -0
- package/dist/types/skill-source.js.map +1 -0
- package/dist/types/tool-access.d.ts +3 -0
- package/dist/types/tool-access.d.ts.map +1 -1
- package/dist/types/tool-access.js.map +1 -1
- package/dist/validators/agent.d.ts +38 -11
- package/dist/validators/agent.d.ts.map +1 -1
- package/dist/validators/agent.js +15 -4
- package/dist/validators/agent.js.map +1 -1
- package/dist/validators/app-definition.d.ts +19 -0
- package/dist/validators/app-definition.d.ts.map +1 -1
- package/dist/validators/app-definition.js +13 -2
- package/dist/validators/app-definition.js.map +1 -1
- package/dist/validators/artifact.d.ts +1 -0
- package/dist/validators/artifact.d.ts.map +1 -1
- package/dist/validators/artifact.js +2 -0
- package/dist/validators/artifact.js.map +1 -1
- package/dist/validators/company-portability.d.ts +24 -0
- package/dist/validators/company-portability.d.ts.map +1 -1
- package/dist/validators/company-skill.d.ts +27 -0
- package/dist/validators/company-skill.d.ts.map +1 -1
- package/dist/validators/company-skill.js +8 -0
- package/dist/validators/company-skill.js.map +1 -1
- package/dist/validators/connection-intent.d.ts +5 -0
- package/dist/validators/connection-intent.d.ts.map +1 -1
- package/dist/validators/connection-intent.js +6 -1
- package/dist/validators/connection-intent.js.map +1 -1
- package/dist/validators/connection-intent.test.js +22 -0
- package/dist/validators/connection-intent.test.js.map +1 -1
- package/dist/validators/email.d.ts +5 -0
- package/dist/validators/email.d.ts.map +1 -1
- package/dist/validators/email.js +4 -0
- package/dist/validators/email.js.map +1 -1
- package/dist/validators/index.d.ts +4 -2
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +4 -2
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/instance.d.ts +9 -2
- package/dist/validators/instance.d.ts.map +1 -1
- package/dist/validators/instance.js +5 -2
- package/dist/validators/instance.js.map +1 -1
- package/dist/validators/issue.d.ts +274 -7
- package/dist/validators/issue.d.ts.map +1 -1
- package/dist/validators/issue.js +81 -10
- package/dist/validators/issue.js.map +1 -1
- package/dist/validators/issue.test.js +10 -1
- package/dist/validators/issue.test.js.map +1 -1
- package/dist/validators/plugin.d.ts +11 -0
- package/dist/validators/plugin.d.ts.map +1 -1
- package/dist/validators/plugin.js +5 -0
- package/dist/validators/plugin.js.map +1 -1
- package/dist/validators/plugin.test.js +14 -0
- package/dist/validators/plugin.test.js.map +1 -1
- package/dist/validators/project.d.ts +4 -0
- package/dist/validators/project.d.ts.map +1 -1
- package/dist/validators/project.js +4 -0
- package/dist/validators/project.js.map +1 -1
- package/dist/validators/skill-source.d.ts +29 -0
- package/dist/validators/skill-source.d.ts.map +1 -0
- package/dist/validators/skill-source.js +26 -0
- package/dist/validators/skill-source.js.map +1 -0
- package/dist/validators/tool-access.d.ts +35 -0
- package/dist/validators/tool-access.d.ts.map +1 -1
- package/dist/validators/tool-access.js +4 -0
- package/dist/validators/tool-access.js.map +1 -1
- package/dist/workspace-restore.d.ts +8 -0
- package/dist/workspace-restore.d.ts.map +1 -0
- package/dist/workspace-restore.js +28 -0
- package/dist/workspace-restore.js.map +1 -0
- package/dist/worktree-port-registry.test.js +162 -31
- package/dist/worktree-port-registry.test.js.map +1 -1
- 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 @@
|
|
|
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("
|
|
9
|
-
expect(instanceExperimentalSettingsSchema.parse({}).enableMcpAggregators).toBe(
|
|
10
|
-
expect(patchInstanceExperimentalSettingsSchema.parse({ enableMcpAggregators:
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,kCAAkC,EAAE,uCAAuC,EAAE,MAAM,0BAA0B,CAAC;AACvH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,
|
|
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": "
|
|
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 @@
|
|
|
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.
|
|
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.
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEtF
|
|
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.
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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 (
|
|
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":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,sBAAsB,CAAC;AAEtF
|
|
1
|
+
{"version":3,"file":"settings-visibility.js","sourceRoot":"","sources":["../src/settings-visibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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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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"}
|