@tickernelz/paperclip-pro-mcp-server 2026.925.0 → 2026.925.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/README.md CHANGED
@@ -14,9 +14,29 @@ The server reads its configuration from environment variables:
14
14
  - `PAPERCLIP_COMPANY_ID` - optional default company for company-scoped tools
15
15
  - `PAPERCLIP_AGENT_ID` - optional default agent for checkout helpers
16
16
  - `PAPERCLIP_RUN_ID` - optional run id forwarded on mutating requests
17
+ - `PAPERCLIP_MCP_TOOLSETS` - comma-separated toolsets to register: `core` (default), `extended`, or `all`
18
+ - `PAPERCLIP_AGENT_ROLE` - caller role; management roles (`ceo`, `board`) also see board-authority tools
17
19
 
18
20
  Inside an active heartbeat, Paperclip also injects `PAPERCLIP_RUNTIME_TOOLS_*` variables. They enable the run-scoped `connections_search` and `connection_request` tools and expire with the run.
19
21
 
22
+ ## Toolsets and authority
23
+
24
+ The tool surface is generated from the server's OpenAPI registry, so it tracks the API. Two independent filters decide what a client sees:
25
+
26
+ - **Toolset.** `core` is the default: the curated hand-written tools plus the everyday generated ones (61 tools, ~94 KB of `tools/list` JSON). `extended` adds the rest of the generated surface (all toolsets, management role: 715 tools, ~537 KB). Select with `PAPERCLIP_MCP_TOOLSETS=core,extended` or `--toolsets core,extended`; the CLI flag wins, an empty or unknown value falls back to `core`.
27
+ - **Authority.** Every generated tool carries `authority`: `agent` for routes an ordinary agent key can call, `board` for routes whose handler asserts board authority (the deciding guard and its `file:line` are recorded in `src/generated/api-tools.json`). Board-authority tools are registered only when the caller has a management role, taken from `PAPERCLIP_AGENT_ROLE` or, when that is unset, from `GET /api/agents/me` at startup.
28
+
29
+ Instance-admin, auth/setup/cli-auth, protocol/websocket and credential-reveal routes are excluded for everyone; `src/generated/excluded-operations.json` records each excluded operation with its reason and guard evidence.
30
+
31
+ ## Regenerating the tool set
32
+
33
+ ```sh
34
+ pnpm generate:mcp-tools # rewrites src/generated/*.json from server/src/routes/openapi.ts
35
+ pnpm check:mcp-tools # fails when the checked-in files are stale (CI Policy lane)
36
+ ```
37
+
38
+ Names, descriptions, toolsets and annotations are refined in `src/tool-overrides.ts`, which also holds the reviewed allow/deny lists and the routes already covered by a curated tool.
39
+
20
40
  ## Usage
21
41
 
22
42
  ```sh
@@ -30,61 +50,23 @@ pnpm --filter @tickernelz/paperclip-pro-mcp-server build
30
50
  node packages/mcp-server/dist/stdio.js
31
51
  ```
32
52
 
53
+ ## Server-hosted endpoint
54
+
55
+ The Paperclip server hosts the same tool surface at `POST /api/mcp/paperclip`, so a run does not have to spawn this package as a child process. It is stateless streamable HTTP: one endpoint, JSON responses, no `Mcp-Session-Id`, `GET` and `DELETE` answer `405`.
56
+
57
+ - Authentication is the REST API's: `Authorization: Bearer <run agent key>` plus `X-Paperclip-Run-Id`. Only agent actors are accepted; a board actor gets `403`, a missing credential `401`.
58
+ - `companyId` and `agentId` come from the authenticated agent, never from a request header, and board-authority tools are exposed only when that agent's `agentAuthorityCapabilities` include company-level authority.
59
+ - Toolsets come from `?toolsets=core,extended`; absent, empty or unknown values fall back to `core`.
60
+ - Each `tools/call` re-enters the REST API over the server's own loopback address with the caller's bearer token, so every route guard, record rule and audit hook runs exactly as it does for a direct API call.
61
+
62
+ Tool definitions are built once per process and per (toolset, authority) variant; the `tools/list` payload is memoized with them.
63
+
33
64
  ## Tool Surface
34
65
 
35
- Run-scoped connection tools:
36
-
37
- - `connections_search`
38
- - `connection_request`
39
-
40
- Read tools:
41
-
42
- - `paperclipMe`
43
- - `paperclipInboxLite`
44
- - `paperclipListAgents`
45
- - `paperclipGetAgent`
46
- - `paperclipListIssues`
47
- - `paperclipGetIssue`
48
- - `paperclipGetHeartbeatContext`
49
- - `paperclipListComments`
50
- - `paperclipGetComment`
51
- - `paperclipListIssueApprovals`
52
- - `paperclipListDocuments`
53
- - `paperclipGetDocument`
54
- - `paperclipListDocumentRevisions`
55
- - `paperclipListProjects`
56
- - `paperclipGetProject`
57
- - `paperclipGetIssueWorkspaceRuntime`
58
- - `paperclipWaitForIssueWorkspaceService`
59
- - `paperclipListGoals`
60
- - `paperclipGetGoal`
61
- - `paperclipListApprovals`
62
- - `paperclipGetApproval`
63
- - `paperclipGetApprovalIssues`
64
- - `paperclipListApprovalComments`
65
-
66
- Write tools:
67
-
68
- - `paperclipCreateIssue`
69
- - `paperclipUpdateIssue`
70
- - `paperclipCheckoutIssue`
71
- - `paperclipReleaseIssue`
72
- - `paperclipAddComment`
73
- - `paperclipSuggestTasks`
74
- - `paperclipAskUserQuestions`
75
- - `paperclipRequestConfirmation`
76
- - `paperclipUpsertIssueDocument`
77
- - `paperclipRestoreIssueDocumentRevision`
78
- - `paperclipControlIssueWorkspaceServices`
79
- - `paperclipCreateApproval`
80
- - `paperclipLinkIssueApproval`
81
- - `paperclipUnlinkIssueApproval`
82
- - `paperclipApprovalDecision`
83
- - `paperclipAddApprovalComment`
84
-
85
- Escape hatch:
86
-
87
- - `paperclipApiRequest`
66
+ Curated tools keep their names and behaviour: the run-scoped `connections_search` and `connection_request`, the issue/comment/document/approval/workspace helpers (`paperclipMe`, `paperclipInboxLite`, `paperclipListIssues`, `paperclipCheckoutIssue`, `paperclipGetHeartbeatContext`, `paperclipUpdateIssue`, `paperclipAddComment`, `paperclipUpsertIssueDocument`, `paperclipGetIssueWorkspaceRuntime`, `paperclipApprovalDecision`, and the rest), and the `paperclipApiRequest` escape hatch.
67
+
68
+ Everything else is generated from the OpenAPI registry into `src/generated/api-tools.json`, one tool per operation, with a zod input schema built from its path parameters, query parameters and JSON body, `companyId` filled from `PAPERCLIP_COMPANY_ID` when the route is company-scoped, and MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`).
88
69
 
89
70
  `paperclipApiRequest` is limited to paths under `/api` and JSON bodies. It is
90
- meant for endpoints that do not yet have a dedicated MCP tool.
71
+ meant for endpoints that have no dedicated MCP tool, including the credential
72
+ routes that are deliberately kept off the generated surface.
@@ -0,0 +1,22 @@
1
+ import type { PaperclipApiClient } from "./client.js";
2
+ import { type JsonSchemaObject } from "./lean-schema.js";
3
+ import type { ToolsetName } from "./tool-overrides.js";
4
+ import { type ToolAnnotations, type ToolDefinition } from "./tools.js";
5
+ export { PaperclipApiClient } from "./client.js";
6
+ export { hasManagementAuthority, parseToolsets } from "./config.js";
7
+ export type { ToolsetName } from "./tool-overrides.js";
8
+ export type { ToolDefinition } from "./tools.js";
9
+ export type ToolListing = {
10
+ tools: Array<{
11
+ name: string;
12
+ description: string;
13
+ inputSchema: JsonSchemaObject;
14
+ annotations?: ToolAnnotations;
15
+ }>;
16
+ };
17
+ /** Tool definitions bound to one caller, sharing schema and listing work per variant. */
18
+ export declare function paperclipToolCatalog(client: PaperclipApiClient, toolsets: ReadonlyArray<ToolsetName>, management: boolean): {
19
+ definitions: ToolDefinition[];
20
+ listing: ToolListing;
21
+ };
22
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,gBAAgB,CAAC;QAC9B,WAAW,CAAC,EAAE,eAAe,CAAC;KAC/B,CAAC,CAAC;CACJ,CAAC;AAIF,yFAAyF;AACzF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,EACpC,UAAU,EAAE,OAAO,GAClB;IAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAuBzD"}
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { bindGeneratedTools, prepareGeneratedTools } from "./generated-tools.js";
3
+ import { leanJsonSchema } from "./lean-schema.js";
4
+ import { createToolDefinitions } from "./tools.js";
5
+ export { PaperclipApiClient } from "./client.js";
6
+ export { hasManagementAuthority, parseToolsets } from "./config.js";
7
+ const listings = new Map();
8
+ /** Tool definitions bound to one caller, sharing schema and listing work per variant. */
9
+ export function paperclipToolCatalog(client, toolsets, management) {
10
+ const curated = createToolDefinitions(client);
11
+ const curatedNames = new Set(curated.map((tool) => tool.name));
12
+ const generated = bindGeneratedTools(prepareGeneratedTools(toolsets, management), client).filter((tool) => !curatedNames.has(tool.name));
13
+ const definitions = [...curated, ...generated];
14
+ const key = `${[...toolsets].sort().join(",")}|${management ? "management" : "agent"}`;
15
+ let listing = listings.get(key);
16
+ if (!listing) {
17
+ listing = {
18
+ tools: definitions.map((tool) => ({
19
+ name: tool.name,
20
+ description: tool.description,
21
+ inputSchema: leanJsonSchema(z.toJSONSchema(tool.schema, { target: "draft-7", io: "input" })),
22
+ ...(tool.annotations ? { annotations: tool.annotations } : {}),
23
+ })),
24
+ };
25
+ listings.set(key, listing);
26
+ }
27
+ return { definitions, listing };
28
+ }
29
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAA6C,MAAM,YAAY,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAapE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEhD,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAClC,MAA0B,EAC1B,QAAoC,EACpC,UAAmB;IAEnB,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAC9F,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACvF,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG;YACR,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,cAAc,CACzB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAC5C;gBACrB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;SACJ,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,10 +1,18 @@
1
+ import type { ToolsetName } from "./tool-overrides.js";
1
2
  export interface PaperclipMcpConfig {
2
3
  apiUrl: string;
3
4
  apiKey: string;
4
5
  companyId: string | null;
5
6
  agentId: string | null;
6
7
  runId: string | null;
8
+ toolsets: ToolsetName[];
9
+ agentRole: string | null;
7
10
  }
11
+ export declare const MANAGEMENT_ROLES: Record<string, true>;
12
+ export declare function hasManagementAuthority(role: string | null | undefined): boolean;
13
+ export declare const TOOLSET_NAMES: ToolsetName[];
14
+ export declare function parseToolsets(requested: string | null | undefined): ToolsetName[];
15
+ export declare function resolveToolsets(env?: NodeJS.ProcessEnv, argv?: string[]): ToolsetName[];
8
16
  export declare function normalizeApiUrl(apiUrl: string): string;
9
17
  export declare function readConfigFromEnv(env?: NodeJS.ProcessEnv): PaperclipMcpConfig;
10
18
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAUD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAiB1F"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAA8B,CAAC;AAEjF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EAAyB,CAAC;AAEjE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CAQjF;AAED,wBAAgB,eAAe,CAC7B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,MAAM,EAA0B,GACrC,WAAW,EAAE,CAaf;AAUD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAmB1F"}
package/dist/config.js CHANGED
@@ -1,3 +1,31 @@
1
+ export const MANAGEMENT_ROLES = { ceo: true, board: true };
2
+ export function hasManagementAuthority(role) {
3
+ return typeof role === "string" && MANAGEMENT_ROLES[role.trim().toLowerCase()] === true;
4
+ }
5
+ export const TOOLSET_NAMES = ["core", "extended"];
6
+ export function parseToolsets(requested) {
7
+ const requestedNames = (requested ?? "")
8
+ .split(",")
9
+ .map((entry) => entry.trim().toLowerCase())
10
+ .filter(Boolean);
11
+ if (requestedNames.includes("all"))
12
+ return [...TOOLSET_NAMES];
13
+ const selected = TOOLSET_NAMES.filter((name) => requestedNames.includes(name));
14
+ return selected.length > 0 ? selected : ["core"];
15
+ }
16
+ export function resolveToolsets(env = process.env, argv = process.argv.slice(2)) {
17
+ const flagIndex = argv.indexOf("--toolsets");
18
+ const inline = argv.find((entry) => entry.startsWith("--toolsets="));
19
+ const requested = (flagIndex >= 0 ? argv[flagIndex + 1] : undefined) ??
20
+ inline?.slice("--toolsets=".length) ??
21
+ env.PAPERCLIP_MCP_TOOLSETS;
22
+ for (const name of (requested ?? "").split(",").map((entry) => entry.trim().toLowerCase())) {
23
+ if (name && name !== "all" && !TOOLSET_NAMES.includes(name)) {
24
+ console.error(`Ignoring unknown Paperclip MCP toolset "${name}"`);
25
+ }
26
+ }
27
+ return parseToolsets(requested);
28
+ }
1
29
  function nonEmpty(value) {
2
30
  return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
3
31
  }
@@ -23,6 +51,8 @@ export function readConfigFromEnv(env = process.env) {
23
51
  companyId: nonEmpty(env.PAPERCLIP_COMPANY_ID),
24
52
  agentId: nonEmpty(env.PAPERCLIP_AGENT_ID),
25
53
  runId: nonEmpty(env.PAPERCLIP_RUN_ID),
54
+ toolsets: resolveToolsets(env),
55
+ agentRole: nonEmpty(env.PAPERCLIP_AGENT_ROLE),
26
56
  };
27
57
  }
28
58
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;QAC/B,MAAM;QACN,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7C,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACzC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACtC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}