@switchboard-mcp/core 0.1.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 (74) hide show
  1. package/README.md +9 -0
  2. package/dist/approvals/approval-requests.d.ts +151 -0
  3. package/dist/approvals/approval-requests.d.ts.map +1 -0
  4. package/dist/approvals/approval-requests.js +393 -0
  5. package/dist/approvals/approval-requests.js.map +1 -0
  6. package/dist/audit/audit-log.d.ts +45 -0
  7. package/dist/audit/audit-log.d.ts.map +1 -0
  8. package/dist/audit/audit-log.js +88 -0
  9. package/dist/audit/audit-log.js.map +1 -0
  10. package/dist/config/gitignore.d.ts +9 -0
  11. package/dist/config/gitignore.d.ts.map +1 -0
  12. package/dist/config/gitignore.js +90 -0
  13. package/dist/config/gitignore.js.map +1 -0
  14. package/dist/config/load-config.d.ts +28 -0
  15. package/dist/config/load-config.d.ts.map +1 -0
  16. package/dist/config/load-config.js +138 -0
  17. package/dist/config/load-config.js.map +1 -0
  18. package/dist/config/paths.d.ts +13 -0
  19. package/dist/config/paths.d.ts.map +1 -0
  20. package/dist/config/paths.js +38 -0
  21. package/dist/config/paths.js.map +1 -0
  22. package/dist/daemon/daemon-state.d.ts +44 -0
  23. package/dist/daemon/daemon-state.d.ts.map +1 -0
  24. package/dist/daemon/daemon-state.js +110 -0
  25. package/dist/daemon/daemon-state.js.map +1 -0
  26. package/dist/import/import-plan.d.ts +92 -0
  27. package/dist/import/import-plan.d.ts.map +1 -0
  28. package/dist/import/import-plan.js +677 -0
  29. package/dist/import/import-plan.js.map +1 -0
  30. package/dist/index.d.ts +18 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +18 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/install/client-config.d.ts +73 -0
  35. package/dist/install/client-config.d.ts.map +1 -0
  36. package/dist/install/client-config.js +514 -0
  37. package/dist/install/client-config.js.map +1 -0
  38. package/dist/mandates/mandates.d.ts +244 -0
  39. package/dist/mandates/mandates.d.ts.map +1 -0
  40. package/dist/mandates/mandates.js +690 -0
  41. package/dist/mandates/mandates.js.map +1 -0
  42. package/dist/namespaces/namespaces.d.ts +16 -0
  43. package/dist/namespaces/namespaces.d.ts.map +1 -0
  44. package/dist/namespaces/namespaces.js +49 -0
  45. package/dist/namespaces/namespaces.js.map +1 -0
  46. package/dist/onboarding/init-config.d.ts +19 -0
  47. package/dist/onboarding/init-config.d.ts.map +1 -0
  48. package/dist/onboarding/init-config.js +85 -0
  49. package/dist/onboarding/init-config.js.map +1 -0
  50. package/dist/providers/provider-add.d.ts +25 -0
  51. package/dist/providers/provider-add.d.ts.map +1 -0
  52. package/dist/providers/provider-add.js +179 -0
  53. package/dist/providers/provider-add.js.map +1 -0
  54. package/dist/providers/provider-templates.d.ts +96 -0
  55. package/dist/providers/provider-templates.d.ts.map +1 -0
  56. package/dist/providers/provider-templates.js +556 -0
  57. package/dist/providers/provider-templates.js.map +1 -0
  58. package/dist/scan/scan.d.ts +67 -0
  59. package/dist/scan/scan.d.ts.map +1 -0
  60. package/dist/scan/scan.js +389 -0
  61. package/dist/scan/scan.js.map +1 -0
  62. package/dist/schemas/config.d.ts +197 -0
  63. package/dist/schemas/config.d.ts.map +1 -0
  64. package/dist/schemas/config.js +133 -0
  65. package/dist/schemas/config.js.map +1 -0
  66. package/dist/secrets/secret-refs.d.ts +10 -0
  67. package/dist/secrets/secret-refs.d.ts.map +1 -0
  68. package/dist/secrets/secret-refs.js +32 -0
  69. package/dist/secrets/secret-refs.js.map +1 -0
  70. package/dist/secrets/secrets.d.ts +63 -0
  71. package/dist/secrets/secrets.d.ts.map +1 -0
  72. package/dist/secrets/secrets.js +301 -0
  73. package/dist/secrets/secrets.js.map +1 -0
  74. package/package.json +42 -0
@@ -0,0 +1,133 @@
1
+ import * as z from "zod";
2
+ import { validateSecretRef } from "../secrets/secret-refs.js";
3
+ export const environmentSchema = z.enum([
4
+ "local",
5
+ "development",
6
+ "staging",
7
+ "production",
8
+ "test",
9
+ "live",
10
+ "personal",
11
+ "client"
12
+ ]);
13
+ export const operatingModeSchema = z.enum([
14
+ "inspect",
15
+ "guarded",
16
+ "autopilot",
17
+ "unrestricted"
18
+ ]);
19
+ export const enforcementLevelSchema = z.enum([
20
+ "provider",
21
+ "switchboard",
22
+ "advisory"
23
+ ]);
24
+ export const secretRefEnvValueSchema = z.object({
25
+ secretRef: z.string().min(1).refine((value) => validateSecretRef(value).ok, {
26
+ message: "secretRef must use lowercase letters, numbers, '.', '_', '-', and '/'"
27
+ })
28
+ });
29
+ export const upstreamEnvValueSchema = z.union([
30
+ z.string(),
31
+ secretRefEnvValueSchema
32
+ ]);
33
+ export const upstreamEnvSchema = z.record(z.string(), upstreamEnvValueSchema);
34
+ export const stdioUpstreamSchema = z
35
+ .object({
36
+ type: z.literal("stdio"),
37
+ command: z.string().min(1, "stdio upstream command is required"),
38
+ args: z.array(z.string()).optional(),
39
+ cwd: z.string().min(1).optional(),
40
+ env: upstreamEnvSchema.optional()
41
+ })
42
+ .passthrough();
43
+ export const upstreamSchema = z
44
+ .object({
45
+ type: z.string().min(1),
46
+ command: z.string().optional(),
47
+ args: z.array(z.string()).optional(),
48
+ cwd: z.string().min(1).optional(),
49
+ env: upstreamEnvSchema.optional(),
50
+ url: z.string().url().optional()
51
+ })
52
+ .passthrough()
53
+ .superRefine((upstream, context) => {
54
+ if (upstream.type === "stdio" && !upstream.command) {
55
+ context.addIssue({
56
+ code: "custom",
57
+ path: ["command"],
58
+ message: "stdio upstream command is required"
59
+ });
60
+ }
61
+ });
62
+ export const profileSchema = z
63
+ .object({
64
+ provider: z.string().min(1, "profile.provider is required"),
65
+ account: z.string().optional(),
66
+ org: z.string().optional(),
67
+ project: z.string().optional(),
68
+ environment: environmentSchema.optional(),
69
+ namespace: z.string().min(1).optional(),
70
+ readOnly: z.boolean().default(false),
71
+ mode: operatingModeSchema.optional(),
72
+ enforcement: enforcementLevelSchema.optional(),
73
+ auth: z
74
+ .object({
75
+ ref: z.string().min(1),
76
+ type: z.string().min(1).optional()
77
+ })
78
+ .passthrough()
79
+ .optional(),
80
+ upstream: upstreamSchema.optional()
81
+ })
82
+ .passthrough();
83
+ export const workspaceSchema = z
84
+ .object({
85
+ paths: z.array(z.string()).default([]),
86
+ profiles: z.array(z.string()).default([]),
87
+ defaultEnvironment: environmentSchema.optional()
88
+ })
89
+ .passthrough();
90
+ export const policySchema = z
91
+ .object({
92
+ defaultMode: operatingModeSchema.optional(),
93
+ requireConfirmation: z.array(z.string()).default([]),
94
+ hideTools: z.array(z.string()).default([])
95
+ })
96
+ .passthrough();
97
+ export const switchboardConfigSchema = z
98
+ .object({
99
+ version: z.literal(1).default(1),
100
+ defaults: z.record(z.string(), z.unknown()).default({}),
101
+ profiles: z.record(z.string(), profileSchema).default({}),
102
+ workspaces: z.record(z.string(), workspaceSchema).default({}),
103
+ policies: z.record(z.string(), policySchema).default({})
104
+ })
105
+ .passthrough()
106
+ .superRefine((config, context) => {
107
+ for (const [profileName, profile] of Object.entries(config.profiles)) {
108
+ if (!canNormalizeNamespace(profileName)) {
109
+ context.addIssue({
110
+ code: "custom",
111
+ path: ["profiles", profileName],
112
+ message: "Profile names must contain at least one letter or number for namespace generation."
113
+ });
114
+ }
115
+ if (profile.namespace && !canNormalizeNamespace(profile.namespace)) {
116
+ context.addIssue({
117
+ code: "custom",
118
+ path: ["profiles", profileName, "namespace"],
119
+ message: "Profile namespace must contain at least one letter or number."
120
+ });
121
+ }
122
+ }
123
+ });
124
+ function canNormalizeNamespace(input) {
125
+ return (input
126
+ .normalize("NFKD")
127
+ .replace(/[\u0300-\u036f]/g, "")
128
+ .toLowerCase()
129
+ .replace(/[^a-z0-9]+/g, "_")
130
+ .replace(/^_+|_+$/g, "")
131
+ .replace(/_{2,}/g, "_").length > 0);
132
+ }
133
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface SecretRefValidation {
2
+ ok: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function isSecretRefValue(value: unknown): value is {
6
+ secretRef: string;
7
+ };
8
+ export declare function validateSecretRef(ref: string): SecretRefValidation;
9
+ export declare function assertValidSecretRef(ref: string): void;
10
+ //# sourceMappingURL=secret-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-refs.d.ts","sourceRoot":"","sources":["../../src/secrets/secret-refs.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAQ/E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAuBlE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKtD"}
@@ -0,0 +1,32 @@
1
+ const secretRefPattern = /^[a-z0-9](?:[a-z0-9._/-]*[a-z0-9])?$/;
2
+ export function isSecretRefValue(value) {
3
+ return (typeof value === "object" &&
4
+ value !== null &&
5
+ !Array.isArray(value) &&
6
+ "secretRef" in value &&
7
+ typeof value.secretRef === "string");
8
+ }
9
+ export function validateSecretRef(ref) {
10
+ const errors = [];
11
+ const trimmed = ref.trim();
12
+ if (trimmed.length === 0) {
13
+ errors.push("secretRef must not be empty");
14
+ }
15
+ if (trimmed !== ref) {
16
+ errors.push("secretRef must not include leading or trailing whitespace");
17
+ }
18
+ if (!secretRefPattern.test(ref)) {
19
+ errors.push("secretRef must use lowercase letters, numbers, '.', '_', '-', and '/'");
20
+ }
21
+ if (ref.includes("//")) {
22
+ errors.push("secretRef must not contain empty path segments");
23
+ }
24
+ return { ok: errors.length === 0, errors };
25
+ }
26
+ export function assertValidSecretRef(ref) {
27
+ const validation = validateSecretRef(ref);
28
+ if (!validation.ok) {
29
+ throw new Error(validation.errors.join("; "));
30
+ }
31
+ }
32
+ //# sourceMappingURL=secret-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-refs.js","sourceRoot":"","sources":["../../src/secrets/secret-refs.ts"],"names":[],"mappings":"AAKA,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEhE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,WAAW,IAAI,KAAK;QACpB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CACT,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { PathResolutionOptions } from "../config/paths.js";
2
+ import type { SwitchboardConfig, UpstreamEnvValue } from "../schemas/config.js";
3
+ export declare const switchboardSecretServiceName = "switchboard-mcp";
4
+ export interface SecretStore {
5
+ get(ref: string): Promise<string | null>;
6
+ set(ref: string, value: string): Promise<void>;
7
+ delete(ref: string): Promise<void>;
8
+ diagnose?(): Promise<Record<string, unknown>>;
9
+ }
10
+ export interface KeychainSecretStoreOptions {
11
+ serviceName?: string;
12
+ env?: NodeJS.ProcessEnv;
13
+ }
14
+ export declare const allowUnsafeSecretBackendsEnv = "SWITCHBOARD_ALLOW_UNSAFE_SECRET_BACKENDS";
15
+ export declare const crossKeychainBackendEnv = "TS_KEYRING_BACKEND";
16
+ export declare const defaultAllowedKeychainBackendIds: readonly ["native-macos", "native-windows", "native-linux"];
17
+ export declare const unsafeKeychainBackendIds: readonly ["macos", "windows", "secret-service", "file", "null"];
18
+ export interface KeychainBackendPolicyDiagnostic extends Record<string, unknown> {
19
+ ok: boolean;
20
+ allowedBackendIds: string[];
21
+ unsafeBackendsAllowed: boolean;
22
+ backend?: Record<string, unknown>;
23
+ message?: string;
24
+ }
25
+ export interface SecretRefUsage {
26
+ ref: string;
27
+ profileName: string;
28
+ envName: string;
29
+ path: string;
30
+ }
31
+ export interface MissingSecretRef {
32
+ ref: string;
33
+ usages: SecretRefUsage[];
34
+ status: "missing" | "error";
35
+ message: string;
36
+ }
37
+ export interface SecretIndexEntry {
38
+ ref: string;
39
+ updatedAt: string;
40
+ }
41
+ export interface SecretIndex {
42
+ version: 1;
43
+ refs: SecretIndexEntry[];
44
+ }
45
+ export interface SecretIndexOptions extends PathResolutionOptions {
46
+ path?: string;
47
+ }
48
+ export declare function createKeychainSecretStore(options?: KeychainSecretStoreOptions): SecretStore;
49
+ export declare function diagnoseKeychainBackendPolicy(options?: KeychainSecretStoreOptions): Promise<KeychainBackendPolicyDiagnostic>;
50
+ export declare function allowedKeychainBackendIds(options?: KeychainSecretStoreOptions): string[];
51
+ export declare function isAllowedKeychainBackendId(backendId: string, options?: KeychainSecretStoreOptions): boolean;
52
+ export declare function keychainAccountForSecretRef(ref: string): string;
53
+ export declare function createMemorySecretStore(initial?: Record<string, string>): SecretStore;
54
+ export declare function resolveSecretIndexPath(options?: SecretIndexOptions): string;
55
+ export declare function readSecretIndex(options?: SecretIndexOptions): Promise<SecretIndex>;
56
+ export declare function listSecretRefs(options?: SecretIndexOptions): Promise<SecretIndexEntry[]>;
57
+ export declare function rememberSecretRef(ref: string, options?: SecretIndexOptions): Promise<SecretIndex>;
58
+ export declare function forgetSecretRef(ref: string, options?: SecretIndexOptions): Promise<SecretIndex>;
59
+ export declare function collectSecretRefUsages(config: SwitchboardConfig): SecretRefUsage[];
60
+ export declare function findMissingSecretRefs(config: SwitchboardConfig, store: SecretStore): Promise<MissingSecretRef[]>;
61
+ export declare function resolveEnvSecretRefs(env: Record<string, UpstreamEnvValue>, store: SecretStore): Promise<Record<string, string>>;
62
+ export declare function removeSecretIndex(options?: SecretIndexOptions): Promise<void>;
63
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/secrets/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,301 @@
1
+ import { chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { deletePassword, diagnose as diagnoseKeychain, getPassword, initBackend, setPassword } from "cross-keychain";
5
+ import { assertValidSecretRef, isSecretRefValue, validateSecretRef } from "./secret-refs.js";
6
+ export const switchboardSecretServiceName = "switchboard-mcp";
7
+ export const allowUnsafeSecretBackendsEnv = "SWITCHBOARD_ALLOW_UNSAFE_SECRET_BACKENDS";
8
+ export const crossKeychainBackendEnv = "TS_KEYRING_BACKEND";
9
+ export const defaultAllowedKeychainBackendIds = [
10
+ "native-macos",
11
+ "native-windows",
12
+ "native-linux"
13
+ ];
14
+ export const unsafeKeychainBackendIds = [
15
+ "macos",
16
+ "windows",
17
+ "secret-service",
18
+ "file",
19
+ "null"
20
+ ];
21
+ export function createKeychainSecretStore(options = {}) {
22
+ const serviceName = options.serviceName ?? switchboardSecretServiceName;
23
+ const ensureBackend = createKeychainBackendInitializer(options);
24
+ return {
25
+ async get(ref) {
26
+ assertValidSecretRef(ref);
27
+ await ensureBackend();
28
+ return withSuppressedKeychainWarnings(() => getPassword(serviceName, keychainAccountForSecretRef(ref)));
29
+ },
30
+ async set(ref, value) {
31
+ assertValidSecretRef(ref);
32
+ await ensureBackend();
33
+ await withSuppressedKeychainWarnings(() => setPassword(serviceName, keychainAccountForSecretRef(ref), value));
34
+ },
35
+ async delete(ref) {
36
+ assertValidSecretRef(ref);
37
+ await ensureBackend();
38
+ await withSuppressedKeychainWarnings(() => deletePassword(serviceName, keychainAccountForSecretRef(ref)));
39
+ },
40
+ diagnose: () => diagnoseKeychainBackendPolicy(options)
41
+ };
42
+ }
43
+ export async function diagnoseKeychainBackendPolicy(options = {}) {
44
+ const allowedBackendIds = allowedKeychainBackendIds(options);
45
+ const unsafeBackendsAllowed = areUnsafeKeychainBackendsAllowed(options);
46
+ try {
47
+ await initializeKeychainBackend(options);
48
+ const backend = await withSuppressedKeychainWarnings(diagnoseKeychain);
49
+ return {
50
+ ok: true,
51
+ allowedBackendIds,
52
+ unsafeBackendsAllowed,
53
+ backend
54
+ };
55
+ }
56
+ catch (error) {
57
+ return {
58
+ ok: false,
59
+ allowedBackendIds,
60
+ unsafeBackendsAllowed,
61
+ message: messageFromUnknownError(error)
62
+ };
63
+ }
64
+ }
65
+ export function allowedKeychainBackendIds(options = {}) {
66
+ return areUnsafeKeychainBackendsAllowed(options)
67
+ ? [
68
+ ...defaultAllowedKeychainBackendIds,
69
+ ...unsafeKeychainBackendIds
70
+ ]
71
+ : [...defaultAllowedKeychainBackendIds];
72
+ }
73
+ export function isAllowedKeychainBackendId(backendId, options = {}) {
74
+ return allowedKeychainBackendIds(options).includes(backendId);
75
+ }
76
+ function createKeychainBackendInitializer(options) {
77
+ let initialized = false;
78
+ return async () => {
79
+ if (initialized) {
80
+ return;
81
+ }
82
+ await initializeKeychainBackend(options);
83
+ initialized = true;
84
+ };
85
+ }
86
+ async function initializeKeychainBackend(options) {
87
+ const allowedBackendIds = allowedKeychainBackendIds(options);
88
+ assertRequestedKeychainBackendAllowed(options, allowedBackendIds);
89
+ await withSuppressedKeychainWarnings(() => initBackend((backend) => allowedBackendIds.includes(backend.id)));
90
+ const backend = await withSuppressedKeychainWarnings(diagnoseKeychain);
91
+ const backendId = typeof backend.id === "string" ? backend.id : "unknown";
92
+ if (!allowedBackendIds.includes(backendId)) {
93
+ throw new Error([
94
+ `Switchboard refused keychain backend "${backendId}" for local secrets.`,
95
+ `Allowed backends: ${allowedBackendIds.join(", ")}.`,
96
+ `Set ${allowUnsafeSecretBackendsEnv}=1 only for tests or local demos that intentionally use unsafe fallback storage.`
97
+ ].join(" "));
98
+ }
99
+ }
100
+ function assertRequestedKeychainBackendAllowed(options, allowedBackendIds) {
101
+ const requestedBackend = (options.env ?? process.env)[crossKeychainBackendEnv];
102
+ if (requestedBackend && !allowedBackendIds.includes(requestedBackend)) {
103
+ throw new Error([
104
+ `Switchboard refused keychain backend "${requestedBackend}" requested by ${crossKeychainBackendEnv} for local secrets.`,
105
+ `Allowed backends: ${allowedBackendIds.join(", ")}.`,
106
+ `Set ${allowUnsafeSecretBackendsEnv}=1 only for tests or local demos that intentionally use unsafe fallback storage.`
107
+ ].join(" "));
108
+ }
109
+ }
110
+ function areUnsafeKeychainBackendsAllowed(options) {
111
+ const value = (options.env ?? process.env)[allowUnsafeSecretBackendsEnv];
112
+ return value === "1" || value === "true" || value === "yes";
113
+ }
114
+ export function keychainAccountForSecretRef(ref) {
115
+ assertValidSecretRef(ref);
116
+ return `switchboard_${Buffer.from(ref, "utf8").toString("base64url")}`;
117
+ }
118
+ async function withSuppressedKeychainWarnings(operation) {
119
+ const originalWarn = console.warn;
120
+ console.warn = () => { };
121
+ try {
122
+ return await operation();
123
+ }
124
+ finally {
125
+ console.warn = originalWarn;
126
+ }
127
+ }
128
+ function messageFromUnknownError(error) {
129
+ return error instanceof Error ? error.message : String(error);
130
+ }
131
+ export function createMemorySecretStore(initial = {}) {
132
+ const values = new Map(Object.entries(initial));
133
+ return {
134
+ async get(ref) {
135
+ assertValidSecretRef(ref);
136
+ return values.get(ref) ?? null;
137
+ },
138
+ async set(ref, value) {
139
+ assertValidSecretRef(ref);
140
+ values.set(ref, value);
141
+ },
142
+ async delete(ref) {
143
+ assertValidSecretRef(ref);
144
+ values.delete(ref);
145
+ },
146
+ async diagnose() {
147
+ return { backend: "memory", count: values.size };
148
+ }
149
+ };
150
+ }
151
+ export function resolveSecretIndexPath(options = {}) {
152
+ if (options.path) {
153
+ return options.path;
154
+ }
155
+ const env = options.env ?? process.env;
156
+ const home = options.homeDir ?? homedir();
157
+ const stateRoot = env.XDG_STATE_HOME
158
+ ? resolve(env.XDG_STATE_HOME)
159
+ : join(home, ".local", "state");
160
+ return join(stateRoot, "switchboard", "secrets", "index.json");
161
+ }
162
+ export async function readSecretIndex(options = {}) {
163
+ const path = resolveSecretIndexPath(options);
164
+ const raw = await readFile(path, "utf8").catch((error) => {
165
+ if (isNodeError(error, "ENOENT")) {
166
+ return "";
167
+ }
168
+ throw error;
169
+ });
170
+ if (raw.trim().length === 0) {
171
+ return { version: 1, refs: [] };
172
+ }
173
+ const parsed = JSON.parse(raw);
174
+ return {
175
+ version: 1,
176
+ refs: Array.isArray(parsed.refs)
177
+ ? parsed.refs
178
+ .filter((entry) => typeof entry?.ref === "string" &&
179
+ typeof entry.updatedAt === "string" &&
180
+ validateSecretRef(entry.ref).ok)
181
+ .sort((a, b) => a.ref.localeCompare(b.ref))
182
+ : []
183
+ };
184
+ }
185
+ export async function listSecretRefs(options = {}) {
186
+ return (await readSecretIndex(options)).refs;
187
+ }
188
+ export async function rememberSecretRef(ref, options = {}) {
189
+ assertValidSecretRef(ref);
190
+ const index = await readSecretIndex(options);
191
+ const updatedAt = new Date().toISOString();
192
+ const refs = [
193
+ ...index.refs.filter((entry) => entry.ref !== ref),
194
+ { ref, updatedAt }
195
+ ].sort((a, b) => a.ref.localeCompare(b.ref));
196
+ const next = { version: 1, refs };
197
+ await writeSecretIndex(next, options);
198
+ return next;
199
+ }
200
+ export async function forgetSecretRef(ref, options = {}) {
201
+ assertValidSecretRef(ref);
202
+ const index = await readSecretIndex(options);
203
+ const next = {
204
+ version: 1,
205
+ refs: index.refs.filter((entry) => entry.ref !== ref)
206
+ };
207
+ await writeSecretIndex(next, options);
208
+ return next;
209
+ }
210
+ export function collectSecretRefUsages(config) {
211
+ const usages = [];
212
+ for (const [profileName, profile] of Object.entries(config.profiles)) {
213
+ const env = profile.upstream?.env;
214
+ if (!env) {
215
+ continue;
216
+ }
217
+ for (const [envName, value] of Object.entries(env)) {
218
+ if (isSecretRefValue(value)) {
219
+ usages.push({
220
+ ref: value.secretRef,
221
+ profileName,
222
+ envName,
223
+ path: `profiles.${profileName}.upstream.env.${envName}.secretRef`
224
+ });
225
+ }
226
+ }
227
+ }
228
+ return usages;
229
+ }
230
+ export async function findMissingSecretRefs(config, store) {
231
+ const usagesByRef = new Map();
232
+ for (const usage of collectSecretRefUsages(config)) {
233
+ const usages = usagesByRef.get(usage.ref) ?? [];
234
+ usages.push(usage);
235
+ usagesByRef.set(usage.ref, usages);
236
+ }
237
+ const missing = [];
238
+ for (const [ref, usages] of usagesByRef) {
239
+ try {
240
+ if ((await store.get(ref)) === null) {
241
+ missing.push({
242
+ ref,
243
+ usages,
244
+ status: "missing",
245
+ message: `secretRef "${ref}" is not set`
246
+ });
247
+ }
248
+ }
249
+ catch (error) {
250
+ missing.push({
251
+ ref,
252
+ usages,
253
+ status: "error",
254
+ message: error instanceof Error ? error.message : String(error)
255
+ });
256
+ }
257
+ }
258
+ return missing.sort((a, b) => a.ref.localeCompare(b.ref));
259
+ }
260
+ export async function resolveEnvSecretRefs(env, store) {
261
+ const resolved = {};
262
+ for (const [key, value] of Object.entries(env)) {
263
+ if (typeof value === "string") {
264
+ resolved[key] = value;
265
+ continue;
266
+ }
267
+ if (isSecretRefValue(value)) {
268
+ const secret = await store.get(value.secretRef);
269
+ if (secret === null) {
270
+ throw new Error(`secretRef "${value.secretRef}" for env ${key} is not set`);
271
+ }
272
+ resolved[key] = secret;
273
+ }
274
+ }
275
+ return resolved;
276
+ }
277
+ async function writeSecretIndex(index, options) {
278
+ const path = resolveSecretIndexPath(options);
279
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
280
+ const tempPath = `${path}.${process.pid}.${Date.now()}.tmp`;
281
+ await writeFile(tempPath, `${JSON.stringify(index, null, 2)}\n`, {
282
+ mode: 0o600
283
+ });
284
+ await chmod(tempPath, 0o600);
285
+ await rename(tempPath, path);
286
+ await chmod(path, 0o600);
287
+ }
288
+ function isNodeError(error, code) {
289
+ return (typeof error === "object" &&
290
+ error !== null &&
291
+ "code" in error &&
292
+ error.code === code);
293
+ }
294
+ export async function removeSecretIndex(options = {}) {
295
+ await unlink(resolveSecretIndexPath(options)).catch((error) => {
296
+ if (!isNodeError(error, "ENOENT")) {
297
+ throw error;
298
+ }
299
+ });
300
+ }
301
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/secrets/secrets.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@switchboard-mcp/core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Core config, mandate, approval, provider-template, install, audit, and secret primitives for Switchboard.",
6
+ "license": "UNLICENSED",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/woverfield/switchboard.git",
13
+ "directory": "packages/core"
14
+ },
15
+ "homepage": "https://github.com/woverfield/switchboard#readme",
16
+ "bugs": {
17
+ "url": "https://github.com/woverfield/switchboard/issues"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "source": "./src/index.ts",
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "default": "./dist/index.js"
25
+ }
26
+ },
27
+ "types": "./dist/index.d.ts",
28
+ "files": [
29
+ "dist",
30
+ "!dist/**/*.test.*",
31
+ "README.md"
32
+ ],
33
+ "dependencies": {
34
+ "cross-keychain": "^1.1.0",
35
+ "yaml": "^2.8.2",
36
+ "zod": "^4.2.0"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -p tsconfig.json",
40
+ "typecheck": "tsc -p tsconfig.json --noEmit"
41
+ }
42
+ }