@skillsmith/mcp-server 0.4.10 → 0.4.12

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 (72) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/__tests__/tool-dispatch.envelope.test.d.ts +12 -0
  4. package/dist/src/__tests__/tool-dispatch.envelope.test.d.ts.map +1 -0
  5. package/dist/src/__tests__/tool-dispatch.envelope.test.js +205 -0
  6. package/dist/src/__tests__/tool-dispatch.envelope.test.js.map +1 -0
  7. package/dist/src/index.js +10 -1
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/middleware/license.d.ts +6 -6
  10. package/dist/src/middleware/license.d.ts.map +1 -1
  11. package/dist/src/middleware/license.js +11 -8
  12. package/dist/src/middleware/license.js.map +1 -1
  13. package/dist/src/tool-dispatch.d.ts.map +1 -1
  14. package/dist/src/tool-dispatch.js +58 -19
  15. package/dist/src/tool-dispatch.js.map +1 -1
  16. package/dist/src/tools/audit-tools.d.ts +6 -6
  17. package/dist/src/tools/install.d.ts +9 -3
  18. package/dist/src/tools/install.d.ts.map +1 -1
  19. package/dist/src/tools/install.js +52 -11
  20. package/dist/src/tools/install.js.map +1 -1
  21. package/dist/src/tools/install.test.d.ts +17 -0
  22. package/dist/src/tools/install.test.d.ts.map +1 -0
  23. package/dist/src/tools/install.test.js +237 -0
  24. package/dist/src/tools/install.test.js.map +1 -0
  25. package/dist/src/tools/integration-tools.d.ts +8 -8
  26. package/dist/src/tools/rbac-tools.d.ts +4 -4
  27. package/dist/src/tools/recommend.types.d.ts +3 -3
  28. package/dist/src/tools/registry-tools.d.ts +2 -2
  29. package/dist/src/tools/registry-tools.d.ts.map +1 -1
  30. package/dist/src/tools/registry-tools.js +42 -4
  31. package/dist/src/tools/registry-tools.js.map +1 -1
  32. package/dist/src/tools/skill-diff.d.ts +2 -2
  33. package/dist/src/tools/sso-tools.d.ts +2 -2
  34. package/dist/src/tools/suggest.d.ts +4 -4
  35. package/dist/src/tools/team-resolver.d.ts +29 -0
  36. package/dist/src/tools/team-resolver.d.ts.map +1 -0
  37. package/dist/src/tools/team-resolver.js +46 -0
  38. package/dist/src/tools/team-resolver.js.map +1 -0
  39. package/dist/src/tools/team-resolver.test.d.ts +6 -0
  40. package/dist/src/tools/team-resolver.test.d.ts.map +1 -0
  41. package/dist/src/tools/team-resolver.test.js +73 -0
  42. package/dist/src/tools/team-resolver.test.js.map +1 -0
  43. package/dist/src/tools/team-workspace.d.ts +18 -4
  44. package/dist/src/tools/team-workspace.d.ts.map +1 -1
  45. package/dist/src/tools/team-workspace.js +149 -75
  46. package/dist/src/tools/team-workspace.js.map +1 -1
  47. package/dist/src/tools/team-workspace.live.d.ts +34 -0
  48. package/dist/src/tools/team-workspace.live.d.ts.map +1 -0
  49. package/dist/src/tools/team-workspace.live.js +182 -0
  50. package/dist/src/tools/team-workspace.live.js.map +1 -0
  51. package/dist/src/tools/team-workspace.live.test.d.ts +10 -0
  52. package/dist/src/tools/team-workspace.live.test.d.ts.map +1 -0
  53. package/dist/src/tools/team-workspace.live.test.js +177 -0
  54. package/dist/src/tools/team-workspace.live.test.js.map +1 -0
  55. package/dist/src/tools/team-workspace.stub.d.ts.map +1 -1
  56. package/dist/src/tools/team-workspace.stub.js +3 -1
  57. package/dist/src/tools/team-workspace.stub.js.map +1 -1
  58. package/dist/src/tools/team-workspace.test.d.ts +1 -0
  59. package/dist/src/tools/team-workspace.test.d.ts.map +1 -1
  60. package/dist/src/tools/team-workspace.test.js +43 -1
  61. package/dist/src/tools/team-workspace.test.js.map +1 -1
  62. package/dist/src/tools/uninstall.d.ts +1 -1
  63. package/dist/src/validation.d.ts +64 -0
  64. package/dist/src/validation.d.ts.map +1 -0
  65. package/dist/src/validation.js +73 -0
  66. package/dist/src/validation.js.map +1 -0
  67. package/dist/src/validation.test.d.ts +6 -0
  68. package/dist/src/validation.test.d.ts.map +1 -0
  69. package/dist/src/validation.test.js +102 -0
  70. package/dist/src/validation.test.js.map +1 -0
  71. package/package.json +2 -2
  72. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"registry-tools.js","sourceRoot":"","sources":["../../../src/tools/registry-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-tools.js","sourceRoot":"","sources":["../../../src/tools/registry-tools.ts"],"names":[],"mappings":"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"}
@@ -22,21 +22,21 @@ export declare const skillDiffInputSchema: z.ZodObject<{
22
22
  hasLocalModifications: z.ZodDefault<z.ZodBoolean>;
23
23
  trustTier: z.ZodDefault<z.ZodEnum<["verified", "community", "experimental"]>>;
24
24
  }, "strip", z.ZodTypeAny, {
25
- trustTier: "verified" | "community" | "experimental";
26
25
  skillId: string;
27
26
  oldContent: string;
28
27
  newContent: string;
29
28
  hasLocalModifications: boolean;
29
+ trustTier: "verified" | "community" | "experimental";
30
30
  oldRiskScore?: number | undefined;
31
31
  newRiskScore?: number | undefined;
32
32
  }, {
33
33
  skillId: string;
34
34
  oldContent: string;
35
35
  newContent: string;
36
- trustTier?: "verified" | "community" | "experimental" | undefined;
37
36
  oldRiskScore?: number | undefined;
38
37
  newRiskScore?: number | undefined;
39
38
  hasLocalModifications?: boolean | undefined;
39
+ trustTier?: "verified" | "community" | "experimental" | undefined;
40
40
  }>;
41
41
  export type SkillDiffInput = z.infer<typeof skillDiffInputSchema>;
42
42
  /** Structured section-level diff response */
@@ -20,12 +20,12 @@ export declare const configureSsoInputSchema: z.ZodObject<{
20
20
  idpEntityId: z.ZodOptional<z.ZodString>;
21
21
  protocol: z.ZodDefault<z.ZodOptional<z.ZodEnum<["saml", "oidc"]>>>;
22
22
  }, "strip", z.ZodTypeAny, {
23
- action: "test" | "set" | "remove";
23
+ action: "test" | "remove" | "set";
24
24
  protocol: "saml" | "oidc";
25
25
  idpMetadataUrl?: string | undefined;
26
26
  idpEntityId?: string | undefined;
27
27
  }, {
28
- action: "test" | "set" | "remove";
28
+ action: "test" | "remove" | "set";
29
29
  idpMetadataUrl?: string | undefined;
30
30
  idpEntityId?: string | undefined;
31
31
  protocol?: "saml" | "oidc" | undefined;
@@ -45,20 +45,20 @@ export declare const suggestInputSchema: z.ZodObject<{
45
45
  /** Session identifier (optional, for informational purposes) */
46
46
  session_id: z.ZodDefault<z.ZodString>;
47
47
  }, "strip", z.ZodTypeAny, {
48
- installed_skills: string[];
49
- limit: number;
50
48
  project_path: string;
51
49
  recent_commands: string[];
50
+ installed_skills: string[];
51
+ limit: number;
52
52
  session_id: string;
53
53
  current_file?: string | undefined;
54
54
  error_message?: string | undefined;
55
55
  }, {
56
56
  project_path: string;
57
- installed_skills?: string[] | undefined;
58
- limit?: number | undefined;
59
57
  current_file?: string | undefined;
60
58
  recent_commands?: string[] | undefined;
61
59
  error_message?: string | undefined;
60
+ installed_skills?: string[] | undefined;
61
+ limit?: number | undefined;
62
62
  session_id?: string | undefined;
63
63
  }>;
64
64
  /**
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview Shared license-key → team_id resolver
3
+ * @module @skillsmith/mcp-server/tools/team-resolver
4
+ * @see SMI-4292: Wave 5A — Team workspaces foundation (finding C3)
5
+ *
6
+ * Unified team resolution for MCP tools. Both team-workspace.ts and
7
+ * registry-tools.ts call `resolveLicenseTeamId` so they share one auth
8
+ * path (no split auth resolution).
9
+ *
10
+ * License key source, in order:
11
+ * 1. explicit `licenseKey` argument (from `ToolContext` or tool input)
12
+ * 2. `process.env.SKILLSMITH_LICENSE_KEY`
13
+ *
14
+ * Calls the `resolve_team_from_license` RPC (migration 071) using an
15
+ * anon-key Supabase client (RPC is SECURITY DEFINER). Returns null if
16
+ * the key is missing, invalid, expired, or not attached to a team.
17
+ */
18
+ /**
19
+ * Extract the license key from an optional explicit value or the environment.
20
+ */
21
+ export declare function readLicenseKey(explicit?: string): string | null;
22
+ /**
23
+ * Resolve a license key to a team_id via `resolve_team_from_license` RPC.
24
+ *
25
+ * @param licenseKey - optional explicit license key; falls back to env
26
+ * @returns resolved team_id, or null if Supabase is not configured / key invalid
27
+ */
28
+ export declare function resolveLicenseTeamId(licenseKey?: string): Promise<string | null>;
29
+ //# sourceMappingURL=team-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-resolver.d.ts","sourceRoot":"","sources":["../../../src/tools/team-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAatF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Shared license-key → team_id resolver
3
+ * @module @skillsmith/mcp-server/tools/team-resolver
4
+ * @see SMI-4292: Wave 5A — Team workspaces foundation (finding C3)
5
+ *
6
+ * Unified team resolution for MCP tools. Both team-workspace.ts and
7
+ * registry-tools.ts call `resolveLicenseTeamId` so they share one auth
8
+ * path (no split auth resolution).
9
+ *
10
+ * License key source, in order:
11
+ * 1. explicit `licenseKey` argument (from `ToolContext` or tool input)
12
+ * 2. `process.env.SKILLSMITH_LICENSE_KEY`
13
+ *
14
+ * Calls the `resolve_team_from_license` RPC (migration 071) using an
15
+ * anon-key Supabase client (RPC is SECURITY DEFINER). Returns null if
16
+ * the key is missing, invalid, expired, or not attached to a team.
17
+ */
18
+ import { getSupabaseClient, isSupabaseConfigured } from '../supabase-client.js';
19
+ /**
20
+ * Extract the license key from an optional explicit value or the environment.
21
+ */
22
+ export function readLicenseKey(explicit) {
23
+ const raw = explicit ?? process.env.SKILLSMITH_LICENSE_KEY ?? '';
24
+ return raw.length > 0 ? raw : null;
25
+ }
26
+ /**
27
+ * Resolve a license key to a team_id via `resolve_team_from_license` RPC.
28
+ *
29
+ * @param licenseKey - optional explicit license key; falls back to env
30
+ * @returns resolved team_id, or null if Supabase is not configured / key invalid
31
+ */
32
+ export async function resolveLicenseTeamId(licenseKey) {
33
+ if (!isSupabaseConfigured())
34
+ return null;
35
+ const key = readLicenseKey(licenseKey);
36
+ if (!key)
37
+ return null;
38
+ const client = (await getSupabaseClient());
39
+ const { data, error } = await client.rpc('resolve_team_from_license', {
40
+ p_license_key: key,
41
+ });
42
+ if (error || !data)
43
+ return null;
44
+ return data;
45
+ }
46
+ //# sourceMappingURL=team-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-resolver.js","sourceRoot":"","sources":["../../../src/tools/team-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAc/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,MAAM,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAA;IAChE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAmB;IAC5D,IAAI,CAAC,oBAAoB,EAAE;QAAE,OAAO,IAAI,CAAA;IAExC,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,MAAM,GAAG,CAAC,MAAM,iBAAiB,EAAE,CAA0B,CAAA;IACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAS,2BAA2B,EAAE;QAC5E,aAAa,EAAE,GAAG;KACnB,CAAC,CAAA;IAEF,IAAI,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAC/B,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Unit tests for shared team-resolver helper
3
+ * @see SMI-4292: Wave 5A — Team workspaces foundation (finding C3)
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=team-resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/tools/team-resolver.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Unit tests for shared team-resolver helper
3
+ * @see SMI-4292: Wave 5A — Team workspaces foundation (finding C3)
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
6
+ import { readLicenseKey, resolveLicenseTeamId } from './team-resolver.js';
7
+ // Mock the supabase-client module BEFORE the import is resolved
8
+ const rpcMock = vi.fn();
9
+ vi.mock('../supabase-client.js', () => ({
10
+ isSupabaseConfigured: vi.fn(() => true),
11
+ getSupabaseClient: vi.fn(async () => ({ rpc: rpcMock })),
12
+ }));
13
+ describe('readLicenseKey', () => {
14
+ const origEnv = process.env.SKILLSMITH_LICENSE_KEY;
15
+ afterEach(() => {
16
+ if (origEnv === undefined) {
17
+ delete process.env.SKILLSMITH_LICENSE_KEY;
18
+ }
19
+ else {
20
+ process.env.SKILLSMITH_LICENSE_KEY = origEnv;
21
+ }
22
+ });
23
+ it('prefers an explicit value over env', () => {
24
+ process.env.SKILLSMITH_LICENSE_KEY = 'env_key';
25
+ expect(readLicenseKey('arg_key')).toBe('arg_key');
26
+ });
27
+ it('falls back to env when no explicit value', () => {
28
+ process.env.SKILLSMITH_LICENSE_KEY = 'env_key';
29
+ expect(readLicenseKey()).toBe('env_key');
30
+ });
31
+ it('returns null when both sources are empty', () => {
32
+ delete process.env.SKILLSMITH_LICENSE_KEY;
33
+ expect(readLicenseKey()).toBeNull();
34
+ expect(readLicenseKey('')).toBeNull();
35
+ });
36
+ });
37
+ describe('resolveLicenseTeamId', () => {
38
+ beforeEach(() => {
39
+ rpcMock.mockReset();
40
+ });
41
+ it('returns null when Supabase is not configured', async () => {
42
+ const { isSupabaseConfigured } = await import('../supabase-client.js');
43
+ vi.mocked(isSupabaseConfigured).mockReturnValueOnce(false);
44
+ const result = await resolveLicenseTeamId('sk_live_something');
45
+ expect(result).toBeNull();
46
+ expect(rpcMock).not.toHaveBeenCalled();
47
+ });
48
+ it('returns null when no license key is available', async () => {
49
+ delete process.env.SKILLSMITH_LICENSE_KEY;
50
+ const result = await resolveLicenseTeamId();
51
+ expect(result).toBeNull();
52
+ expect(rpcMock).not.toHaveBeenCalled();
53
+ });
54
+ it('returns null when RPC returns an error', async () => {
55
+ rpcMock.mockResolvedValueOnce({ data: null, error: { message: 'nope' } });
56
+ const result = await resolveLicenseTeamId('sk_live_TEST');
57
+ expect(result).toBeNull();
58
+ });
59
+ it('returns team_id when RPC resolves a team', async () => {
60
+ rpcMock.mockResolvedValueOnce({ data: 'team_abc', error: null });
61
+ const result = await resolveLicenseTeamId('sk_live_TEST');
62
+ expect(result).toBe('team_abc');
63
+ expect(rpcMock).toHaveBeenCalledWith('resolve_team_from_license', {
64
+ p_license_key: 'sk_live_TEST',
65
+ });
66
+ });
67
+ it('returns null when RPC data is null (no matching team)', async () => {
68
+ rpcMock.mockResolvedValueOnce({ data: null, error: null });
69
+ const result = await resolveLicenseTeamId('sk_live_TEST');
70
+ expect(result).toBeNull();
71
+ });
72
+ });
73
+ //# sourceMappingURL=team-resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-resolver.test.js","sourceRoot":"","sources":["../../../src/tools/team-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -19,12 +19,12 @@ export declare const teamWorkspaceInputSchema: z.ZodObject<{
19
19
  description: z.ZodOptional<z.ZodString>;
20
20
  workspaceId: z.ZodOptional<z.ZodString>;
21
21
  }, "strip", z.ZodTypeAny, {
22
- action: "create" | "list" | "get" | "delete";
22
+ action: "get" | "create" | "list" | "delete";
23
23
  name?: string | undefined;
24
24
  description?: string | undefined;
25
25
  workspaceId?: string | undefined;
26
26
  }, {
27
- action: "create" | "list" | "get" | "delete";
27
+ action: "get" | "create" | "list" | "delete";
28
28
  name?: string | undefined;
29
29
  description?: string | undefined;
30
30
  workspaceId?: string | undefined;
@@ -35,11 +35,11 @@ export declare const shareSkillInputSchema: z.ZodObject<{
35
35
  workspaceId: z.ZodString;
36
36
  skillId: z.ZodOptional<z.ZodString>;
37
37
  }, "strip", z.ZodTypeAny, {
38
- action: "list" | "add" | "remove";
38
+ action: "remove" | "list" | "add";
39
39
  workspaceId: string;
40
40
  skillId?: string | undefined;
41
41
  }, {
42
- action: "list" | "add" | "remove";
42
+ action: "remove" | "list" | "add";
43
43
  workspaceId: string;
44
44
  skillId?: string | undefined;
45
45
  }>;
@@ -135,6 +135,20 @@ export declare const shareSkillToolSchema: {
135
135
  required: string[];
136
136
  };
137
137
  };
138
+ /**
139
+ * TeamWorkspaceService — registry-mediated workspace CRUD.
140
+ *
141
+ * **Invariant (SMI-4312)**: every method MUST treat `teamId` as the
142
+ * authoritative scoping key. Implementations that hit a SQL backend
143
+ * MUST either (a) include an explicit `team_id = <teamId>` filter in
144
+ * the query, or (b) assert the target workspace belongs to `teamId`
145
+ * before performing `workspace_skills` operations. The live Supabase
146
+ * implementation uses the service-role client, which bypasses RLS —
147
+ * tenant isolation is enforced here, not by the database.
148
+ *
149
+ * @see packages/mcp-server/src/tools/team-workspace.live.ts
150
+ * @see docs/internal/adr/116-mcp-server-service-role-for-team-scoped-tools.md
151
+ */
138
152
  export interface TeamWorkspaceService {
139
153
  resolveTeamId(licenseKey: string): Promise<string>;
140
154
  createWorkspace(teamId: string, name: string, description?: string): Promise<Workspace>;
@@ -1 +1 @@
1
- {"version":3,"file":"team-workspace.d.ts","sourceRoot":"","sources":["../../../src/tools/team-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team-workspace.d.ts","sourceRoot":"","sources":["../../../src/tools/team-workspace.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@
13
13
  import { z } from 'zod';
14
14
  import { isSupabaseConfigured } from '../supabase-client.js';
15
15
  import { createStubService } from './team-workspace.stub.js';
16
+ import { createLiveService } from './team-workspace.live.js';
17
+ import { readLicenseKey } from './team-resolver.js';
16
18
  // Re-export stub factory for external consumers and tests
17
19
  export { createStubService } from './team-workspace.stub.js';
18
20
  // ============================================================================
@@ -124,8 +126,14 @@ export function checkSharingPolicy(skillId, policy) {
124
126
  }
125
127
  return null;
126
128
  }
127
- // Module-level singleton (swapped when Supabase RPCs are ready)
128
- let service = createStubService();
129
+ /**
130
+ * Module-level singleton. Picks the live Supabase-backed service when
131
+ * SUPABASE_URL + SUPABASE_ANON_KEY are configured; otherwise falls back
132
+ * to the in-memory stub (useful for tests and unauthenticated env).
133
+ */
134
+ let service = isSupabaseConfigured()
135
+ ? createLiveService()
136
+ : createStubService();
129
137
  /** Replace the workspace service implementation (for testing or Supabase swap) */
130
138
  export function setTeamWorkspaceService(svc) {
131
139
  service = svc;
@@ -145,50 +153,80 @@ export function getTeamWorkspaceService() {
145
153
  */
146
154
  export async function executeTeamWorkspace(input, _context) {
147
155
  const dataSource = isSupabaseConfigured() ? 'live' : 'stub';
148
- // TODO: Extract license key from context/env and resolve team_id via Supabase
149
- const licenseKey = process.env.SKILLSMITH_LICENSE_KEY ?? '';
150
- const teamId = await service.resolveTeamId(licenseKey);
151
- switch (input.action) {
152
- case 'create': {
153
- if (!input.name) {
154
- return { success: false, dataSource, error: 'Name is required for workspace creation.' };
156
+ // SMI-4292: License key resolution order explicit env, then anon fallback.
157
+ // In live mode, missing/invalid keys surface as typed errors (not stub data).
158
+ const licenseKey = readLicenseKey();
159
+ if (dataSource === 'live' && !licenseKey) {
160
+ return {
161
+ success: false,
162
+ dataSource,
163
+ error: 'SKILLSMITH_LICENSE_KEY is required for team workspace operations. ' +
164
+ 'Set it in your MCP server config — shell exports do not reach MCP subprocesses.',
165
+ };
166
+ }
167
+ let teamId;
168
+ try {
169
+ teamId = await service.resolveTeamId(licenseKey ?? '');
170
+ }
171
+ catch (err) {
172
+ return {
173
+ success: false,
174
+ dataSource,
175
+ error: err instanceof Error ? err.message : 'Failed to resolve team from license key.',
176
+ };
177
+ }
178
+ // SMI-4312: Wrap service calls so missing service-role config or other
179
+ // live-mode errors surface as typed {success:false} results.
180
+ try {
181
+ switch (input.action) {
182
+ case 'create': {
183
+ if (!input.name) {
184
+ return { success: false, dataSource, error: 'Name is required for workspace creation.' };
185
+ }
186
+ const ws = await service.createWorkspace(teamId, input.name, input.description);
187
+ return {
188
+ success: true,
189
+ dataSource,
190
+ workspace: ws,
191
+ message: `Workspace "${ws.name}" created.`,
192
+ };
155
193
  }
156
- const ws = await service.createWorkspace(teamId, input.name, input.description);
157
- return {
158
- success: true,
159
- dataSource,
160
- workspace: ws,
161
- message: `Workspace "${ws.name}" created.`,
162
- };
163
- }
164
- case 'list': {
165
- const list = await service.listWorkspaces(teamId);
166
- return {
167
- success: true,
168
- dataSource,
169
- workspaces: list,
170
- message: `Found ${list.length} workspace(s).`,
171
- };
172
- }
173
- case 'get': {
174
- if (!input.workspaceId) {
175
- return { success: false, dataSource, error: 'workspaceId is required for get.' };
194
+ case 'list': {
195
+ const list = await service.listWorkspaces(teamId);
196
+ return {
197
+ success: true,
198
+ dataSource,
199
+ workspaces: list,
200
+ message: `Found ${list.length} workspace(s).`,
201
+ };
176
202
  }
177
- const ws = await service.getWorkspace(teamId, input.workspaceId);
178
- if (!ws)
179
- return { success: false, dataSource, error: 'Workspace not found.' };
180
- return { success: true, dataSource, workspace: ws };
181
- }
182
- case 'delete': {
183
- if (!input.workspaceId) {
184
- return { success: false, dataSource, error: 'workspaceId is required for delete.' };
203
+ case 'get': {
204
+ if (!input.workspaceId) {
205
+ return { success: false, dataSource, error: 'workspaceId is required for get.' };
206
+ }
207
+ const ws = await service.getWorkspace(teamId, input.workspaceId);
208
+ if (!ws)
209
+ return { success: false, dataSource, error: 'Workspace not found.' };
210
+ return { success: true, dataSource, workspace: ws };
211
+ }
212
+ case 'delete': {
213
+ if (!input.workspaceId) {
214
+ return { success: false, dataSource, error: 'workspaceId is required for delete.' };
215
+ }
216
+ const deleted = await service.deleteWorkspace(teamId, input.workspaceId);
217
+ if (!deleted)
218
+ return { success: false, dataSource, error: 'Workspace not found.' };
219
+ return { success: true, dataSource, message: 'Workspace deleted.' };
185
220
  }
186
- const deleted = await service.deleteWorkspace(teamId, input.workspaceId);
187
- if (!deleted)
188
- return { success: false, dataSource, error: 'Workspace not found.' };
189
- return { success: true, dataSource, message: 'Workspace deleted.' };
190
221
  }
191
222
  }
223
+ catch (err) {
224
+ return {
225
+ success: false,
226
+ dataSource,
227
+ error: err instanceof Error ? err.message : 'Workspace operation failed.',
228
+ };
229
+ }
192
230
  }
193
231
  /**
194
232
  * Execute a share_skill operation.
@@ -200,44 +238,80 @@ export async function executeTeamWorkspace(input, _context) {
200
238
  */
201
239
  export async function executeShareSkill(input, _context) {
202
240
  const dataSource = isSupabaseConfigured() ? 'live' : 'stub';
203
- const licenseKey = process.env.SKILLSMITH_LICENSE_KEY ?? '';
204
- const teamId = await service.resolveTeamId(licenseKey);
205
- switch (input.action) {
206
- case 'add': {
207
- if (!input.skillId) {
208
- return { success: false, dataSource, error: 'skillId is required for add.' };
241
+ const licenseKey = readLicenseKey();
242
+ if (dataSource === 'live' && !licenseKey) {
243
+ return {
244
+ success: false,
245
+ dataSource,
246
+ error: 'SKILLSMITH_LICENSE_KEY is required for skill-sharing operations. ' +
247
+ 'Set it in your MCP server config — shell exports do not reach MCP subprocesses.',
248
+ };
249
+ }
250
+ let teamId;
251
+ try {
252
+ teamId = await service.resolveTeamId(licenseKey ?? '');
253
+ }
254
+ catch (err) {
255
+ return {
256
+ success: false,
257
+ dataSource,
258
+ error: err instanceof Error ? err.message : 'Failed to resolve team from license key.',
259
+ };
260
+ }
261
+ // SMI-4312: All service calls wrapped so thrown tenant-isolation errors
262
+ // (e.g. cross-team workspace access) surface as typed {success:false} results
263
+ // instead of propagating as unhandled exceptions.
264
+ try {
265
+ switch (input.action) {
266
+ case 'add': {
267
+ if (!input.skillId) {
268
+ return { success: false, dataSource, error: 'skillId is required for add.' };
269
+ }
270
+ // SMI-3898: Check sharing policy before adding
271
+ const settings = await service.getWorkspaceSettings(teamId, input.workspaceId);
272
+ const policyError = checkSharingPolicy(input.skillId, settings.sharing);
273
+ if (policyError) {
274
+ return { success: false, dataSource, error: policyError };
275
+ }
276
+ const skill = await service.addSkill(teamId, input.workspaceId, input.skillId);
277
+ return {
278
+ success: true,
279
+ dataSource,
280
+ skills: [skill],
281
+ message: `Skill "${input.skillId}" shared to workspace.`,
282
+ };
209
283
  }
210
- // SMI-3898: Check sharing policy before adding
211
- const settings = await service.getWorkspaceSettings(teamId, input.workspaceId);
212
- const policyError = checkSharingPolicy(input.skillId, settings.sharing);
213
- if (policyError) {
214
- return { success: false, dataSource, error: policyError };
284
+ case 'remove': {
285
+ if (!input.skillId) {
286
+ return { success: false, dataSource, error: 'skillId is required for remove.' };
287
+ }
288
+ const removed = await service.removeSkill(teamId, input.workspaceId, input.skillId);
289
+ if (!removed) {
290
+ return { success: false, dataSource, error: 'Skill not found in workspace.' };
291
+ }
292
+ return {
293
+ success: true,
294
+ dataSource,
295
+ message: `Skill "${input.skillId}" removed from workspace.`,
296
+ };
215
297
  }
216
- const skill = await service.addSkill(teamId, input.workspaceId, input.skillId);
217
- return {
218
- success: true,
219
- dataSource,
220
- skills: [skill],
221
- message: `Skill "${input.skillId}" shared to workspace.`,
222
- };
223
- }
224
- case 'remove': {
225
- if (!input.skillId) {
226
- return { success: false, dataSource, error: 'skillId is required for remove.' };
298
+ case 'list': {
299
+ const list = await service.listSkills(teamId, input.workspaceId);
300
+ return {
301
+ success: true,
302
+ dataSource,
303
+ skills: list,
304
+ message: `${list.length} shared skill(s).`,
305
+ };
227
306
  }
228
- const removed = await service.removeSkill(teamId, input.workspaceId, input.skillId);
229
- if (!removed)
230
- return { success: false, dataSource, error: 'Skill not found in workspace.' };
231
- return {
232
- success: true,
233
- dataSource,
234
- message: `Skill "${input.skillId}" removed from workspace.`,
235
- };
236
- }
237
- case 'list': {
238
- const list = await service.listSkills(teamId, input.workspaceId);
239
- return { success: true, dataSource, skills: list, message: `${list.length} shared skill(s).` };
240
307
  }
241
308
  }
309
+ catch (err) {
310
+ return {
311
+ success: false,
312
+ dataSource,
313
+ error: err instanceof Error ? err.message : 'Share skill operation failed.',
314
+ };
315
+ }
242
316
  }
243
317
  //# sourceMappingURL=team-workspace.js.map