@kb-labs/marketplace-entry 2.16.0 → 2.18.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.
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/install.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function post(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/install.ts"],"names":[],"mappings":"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","file":"install.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../http.js';\n\ninterface InstallFlags {\n dev?: boolean;\n json?: boolean;\n}\n\ninterface InstallInput {\n argv?: string[];\n flags?: InstallFlags;\n}\n\ninterface InstalledEntry {\n id: string;\n version: string;\n primaryKind: string;\n}\n\ninterface InstallResultData {\n installed: InstalledEntry[];\n warnings: string[];\n}\n\nexport default defineCommand<unknown, InstallInput, InstallResultData>({\n id: 'marketplace:install',\n description: 'Install package(s) from marketplace',\n\n handler: {\n async execute(ctx: PluginContextV3, input: InstallInput): Promise<CommandResult<InstallResultData>> {\n const argv = input.argv ?? [];\n const flags = (input.flags ?? input) as InstallFlags;\n\n if (argv.length === 0) {\n ctx.ui?.error?.('Please specify at least one package to install');\n return { exitCode: 1, result: { installed: [], warnings: [] } };\n }\n\n const result = await post<InstallResultData>('/packages', {\n specs: argv,\n dev: Boolean(flags.dev),\n });\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n } else {\n ctx.ui?.success?.('Marketplace install completed', {\n sections: [\n {\n header: 'Installed',\n items: result.installed.map(p => `${p.id}@${p.version} (${p.primaryKind})`),\n },\n ...(result.warnings.length > 0\n ? [{ header: 'Warnings', items: result.warnings }]\n : []),\n ],\n });\n }\n\n return { exitCode: 0, result };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../src/http.ts","../../src/commands/install.ts"],"names":[],"mappings":"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","file":"install.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../http.js';\n\ninterface InstallFlags {\n dev?: boolean;\n json?: boolean;\n}\n\ninterface InstallInput {\n argv?: string[];\n flags?: InstallFlags;\n}\n\ninterface InstalledEntry {\n id: string;\n version: string;\n primaryKind: string;\n}\n\ninterface InstallResultData {\n installed: InstalledEntry[];\n warnings: string[];\n}\n\nexport default defineCommand<unknown, InstallInput, InstallResultData>({\n id: 'marketplace:install',\n description: 'Install package(s) from marketplace',\n\n handler: {\n async execute(ctx: PluginContextV3, input: InstallInput): Promise<CommandResult<InstallResultData>> {\n const argv = input.argv ?? [];\n const flags = (input.flags ?? input) as InstallFlags;\n\n if (argv.length === 0) {\n ctx.ui?.error?.('Please specify at least one package to install');\n return { exitCode: 1, result: { installed: [], warnings: [] } };\n }\n\n const result = await post<InstallResultData>('/packages', {\n specs: argv,\n dev: Boolean(flags.dev),\n });\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n } else {\n ctx.ui?.success?.('Marketplace install completed', {\n sections: [\n {\n header: 'Installed',\n items: result.installed.map(p => `${p.id}@${p.version} (${p.primaryKind})`),\n },\n ...(result.warnings.length > 0\n ? [{ header: 'Warnings', items: result.warnings }]\n : []),\n ],\n });\n }\n\n return { exitCode: 0, result };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/disable.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function patch(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/disable.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,IAAI,OAAA,CAAQ,IAAI,kBAAA,EAAoB;AAClC,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,kBAAkB,GAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,mBAAA;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AA4BA,eAAsB,KAAA,CAAmB,MAAc,IAAA,EAA2C;AAChG,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;AC7DA,IAAO,kBAAQ,aAAA,CAA4D;AAAA,EACzE,EAAA,EAAI,6BAAA;AAAA,EACJ,WAAA,EAAa,kBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoE;AACtG,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,6BAA6B,CAAA;AAC7C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,SAAA,EAAW,IAAG,EAAE;AAAA,MAClD;AACA,MAAA,MAAM,KAAA,CAAM,aAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC5E,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,CAAA;AACzC,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,WAAU,EAAE;AAAA,IAC9C;AAAA;AAEJ,CAAC","file":"disable.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { patch } from '../../http.js';\n\ninterface DisableInput { argv?: string[] }\n\nexport default defineCommand<unknown, DisableInput, { packageId: string }>({\n id: 'marketplace:plugins:disable',\n description: 'Disable a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: DisableInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a plugin to disable');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await patch(`/packages/${encodeURIComponent(packageId)}`, { enabled: false });\n ctx.ui?.success?.(`Disabled ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/disable.ts"],"names":[],"mappings":";;;AAMA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,MAAM,cAAA,GAAiB,OAAO,oBAAoB,CAAA;AAClD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,gBAAgB,CAAA,IAAK,mBAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AA4BA,eAAsB,KAAA,CAAmB,MAAc,IAAA,EAA2C;AAChG,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;AChEA,IAAO,kBAAQ,aAAA,CAA4D;AAAA,EACzE,EAAA,EAAI,6BAAA;AAAA,EACJ,WAAA,EAAa,kBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoE;AACtG,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,6BAA6B,CAAA;AAC7C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,SAAA,EAAW,IAAG,EAAE;AAAA,MAClD;AACA,MAAA,MAAM,KAAA,CAAM,aAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC5E,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,CAAA;AACzC,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,WAAU,EAAE;AAAA,IAC9C;AAAA;AAEJ,CAAC","file":"disable.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { patch } from '../../http.js';\n\ninterface DisableInput { argv?: string[] }\n\nexport default defineCommand<unknown, DisableInput, { packageId: string }>({\n id: 'marketplace:plugins:disable',\n description: 'Disable a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: DisableInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a plugin to disable');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await patch(`/packages/${encodeURIComponent(packageId)}`, { enabled: false });\n ctx.ui?.success?.(`Disabled ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/doctor.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function get(path, params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/doctor.ts"],"names":[],"mappings":"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","file":"doctor.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get } from '../../http.js';\n\ninterface DoctorFlags { json?: boolean }\ninterface DoctorInput { flags?: DoctorFlags }\n\ninterface DoctorIssue {\n severity: string;\n packageId: string;\n message: string;\n remediation?: string;\n}\n\ninterface DoctorResultData {\n ok: boolean;\n total: number;\n issues: DoctorIssue[];\n}\n\nexport default defineCommand<unknown, DoctorInput, DoctorResultData>({\n id: 'marketplace:plugins:doctor',\n description: 'Diagnose marketplace health',\n\n handler: {\n async execute(ctx: PluginContextV3, input: DoctorInput): Promise<CommandResult<DoctorResultData>> {\n const flags = (input.flags ?? input) as DoctorFlags;\n const report = await get<DoctorResultData>('/diagnostics');\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n } else if (report.issues.length === 0) {\n ctx.ui?.success?.(`All ${report.total} packages healthy`);\n } else {\n const errors = report.issues.filter(i => i.severity === 'error');\n ctx.ui?.warn?.('Marketplace Doctor', {\n sections: [\n { header: 'Summary', items: [`Total: ${report.total}`, `Issues: ${report.issues.length}`, `Errors: ${errors.length}`] },\n { header: 'Issues', items: report.issues.map(i => `${i.severity === 'error' ? '❌' : '⚠'} ${i.packageId}: ${i.message}`) },\n ],\n });\n }\n\n return { exitCode: report.ok ? 0 : 1, result: report };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/doctor.ts"],"names":[],"mappings":"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","file":"doctor.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get } from '../../http.js';\n\ninterface DoctorFlags { json?: boolean }\ninterface DoctorInput { flags?: DoctorFlags }\n\ninterface DoctorIssue {\n severity: string;\n packageId: string;\n message: string;\n remediation?: string;\n}\n\ninterface DoctorResultData {\n ok: boolean;\n total: number;\n issues: DoctorIssue[];\n}\n\nexport default defineCommand<unknown, DoctorInput, DoctorResultData>({\n id: 'marketplace:plugins:doctor',\n description: 'Diagnose marketplace health',\n\n handler: {\n async execute(ctx: PluginContextV3, input: DoctorInput): Promise<CommandResult<DoctorResultData>> {\n const flags = (input.flags ?? input) as DoctorFlags;\n const report = await get<DoctorResultData>('/diagnostics');\n\n if (flags.json) {\n ctx.ui?.json?.(report);\n } else if (report.issues.length === 0) {\n ctx.ui?.success?.(`All ${report.total} packages healthy`);\n } else {\n const errors = report.issues.filter(i => i.severity === 'error');\n ctx.ui?.warn?.('Marketplace Doctor', {\n sections: [\n { header: 'Summary', items: [`Total: ${report.total}`, `Issues: ${report.issues.length}`, `Errors: ${errors.length}`] },\n { header: 'Issues', items: report.issues.map(i => `${i.severity === 'error' ? '❌' : '⚠'} ${i.packageId}: ${i.message}`) },\n ],\n });\n }\n\n return { exitCode: report.ok ? 0 : 1, result: report };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/enable.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function patch(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/enable.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,IAAI,OAAA,CAAQ,IAAI,kBAAA,EAAoB;AAClC,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,kBAAkB,GAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,mBAAA;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AA4BA,eAAsB,KAAA,CAAmB,MAAc,IAAA,EAA2C;AAChG,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;AC7DA,IAAO,iBAAQ,aAAA,CAA2D;AAAA,EACxE,EAAA,EAAI,4BAAA;AAAA,EACJ,WAAA,EAAa,iBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAmE;AACrG,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,4BAA4B,CAAA;AAC5C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,SAAA,EAAW,IAAG,EAAE;AAAA,MAClD;AACA,MAAA,MAAM,KAAA,CAAM,aAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAC3E,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAA;AACxC,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,WAAU,EAAE;AAAA,IAC9C;AAAA;AAEJ,CAAC","file":"enable.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { patch } from '../../http.js';\n\ninterface EnableInput { argv?: string[] }\n\nexport default defineCommand<unknown, EnableInput, { packageId: string }>({\n id: 'marketplace:plugins:enable',\n description: 'Enable a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: EnableInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a plugin to enable');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await patch(`/packages/${encodeURIComponent(packageId)}`, { enabled: true });\n ctx.ui?.success?.(`Enabled ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/enable.ts"],"names":[],"mappings":";;;AAMA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,MAAM,cAAA,GAAiB,OAAO,oBAAoB,CAAA;AAClD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,gBAAgB,CAAA,IAAK,mBAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AA4BA,eAAsB,KAAA,CAAmB,MAAc,IAAA,EAA2C;AAChG,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;AChEA,IAAO,iBAAQ,aAAA,CAA2D;AAAA,EACxE,EAAA,EAAI,4BAAA;AAAA,EACJ,WAAA,EAAa,iBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAmE;AACrG,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,4BAA4B,CAAA;AAC5C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,SAAA,EAAW,IAAG,EAAE;AAAA,MAClD;AACA,MAAA,MAAM,KAAA,CAAM,aAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAC3E,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,QAAA,EAAW,SAAS,CAAA,CAAE,CAAA;AACxC,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,WAAU,EAAE;AAAA,IAC9C;AAAA;AAEJ,CAAC","file":"enable.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { patch } from '../../http.js';\n\ninterface EnableInput { argv?: string[] }\n\nexport default defineCommand<unknown, EnableInput, { packageId: string }>({\n id: 'marketplace:plugins:enable',\n description: 'Enable a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: EnableInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a plugin to enable');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await patch(`/packages/${encodeURIComponent(packageId)}`, { enabled: true });\n ctx.ui?.success?.(`Enabled ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/link.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function post(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/link.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,IAAI,OAAA,CAAQ,IAAI,kBAAA,EAAoB;AAClC,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,kBAAkB,GAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,mBAAA;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AAEA,eAAsB,IAAA,CAAkB,MAAc,IAAA,EAA2C;AAC/F,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;ACnCA,IAAO,eAAQ,aAAA,CAAkD;AAAA,EAC/D,EAAA,EAAI,0BAAA;AAAA,EACJ,WAAA,EAAa,qCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAA0D;AAC5F,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AACjC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,+BAA+B,CAAA;AAC/C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,EAAA,EAAI,IAAG,EAAE;AAAA,MAC3C;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAkC,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,KAAA,CAAA,EAAS,EAAE,IAAA,EAAM,UAAA,EAAY,CAAA;AAC/H,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,OAAA,EAAU,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AACvC,MAAA,OAAO,EAAE,UAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,IAAG,EAAE;AAAA,IAClD;AAAA;AAEJ,CAAC","file":"link.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../../http.js';\n\ninterface LinkInput { argv?: string[] }\n\nexport default defineCommand<unknown, LinkInput, { id: string }>({\n id: 'marketplace:plugins:link',\n description: 'Link a local plugin for development',\n\n handler: {\n async execute(ctx: PluginContextV3, input: LinkInput): Promise<CommandResult<{ id: string }>> {\n const pluginPath = input.argv?.[0];\n if (!pluginPath) {\n ctx.ui?.error?.('Specify a plugin path to link');\n return { exitCode: 1, result: { id: '' } };\n }\n // POST /packages first to install/register the local path, then link it\n const result = await post<{ ok: boolean; id: string }>(`/packages/${encodeURIComponent(pluginPath)}/link`, { path: pluginPath });\n ctx.ui?.success?.(`Linked ${result.id}`);\n return { exitCode: 0, result: { id: result.id } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/link.ts"],"names":[],"mappings":";;;AAMA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,MAAM,cAAA,GAAiB,OAAO,oBAAoB,CAAA;AAClD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,gBAAgB,CAAA,IAAK,mBAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AAEA,eAAsB,IAAA,CAAkB,MAAc,IAAA,EAA2C;AAC/F,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,EAAY,GAAG,IAAI,CAAA,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;ACtCA,IAAO,eAAQ,aAAA,CAAkD;AAAA,EAC/D,EAAA,EAAI,0BAAA;AAAA,EACJ,WAAA,EAAa,qCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAA0D;AAC5F,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA;AACjC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,+BAA+B,CAAA;AAC/C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,EAAE,EAAA,EAAI,IAAG,EAAE;AAAA,MAC3C;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAkC,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,KAAA,CAAA,EAAS,EAAE,IAAA,EAAM,UAAA,EAAY,CAAA;AAC/H,MAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,OAAA,EAAU,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AACvC,MAAA,OAAO,EAAE,UAAU,CAAA,EAAG,MAAA,EAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,IAAG,EAAE;AAAA,IAClD;AAAA;AAEJ,CAAC","file":"link.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../../http.js';\n\ninterface LinkInput { argv?: string[] }\n\nexport default defineCommand<unknown, LinkInput, { id: string }>({\n id: 'marketplace:plugins:link',\n description: 'Link a local plugin for development',\n\n handler: {\n async execute(ctx: PluginContextV3, input: LinkInput): Promise<CommandResult<{ id: string }>> {\n const pluginPath = input.argv?.[0];\n if (!pluginPath) {\n ctx.ui?.error?.('Specify a plugin path to link');\n return { exitCode: 1, result: { id: '' } };\n }\n // POST /packages first to install/register the local path, then link it\n const result = await post<{ ok: boolean; id: string }>(`/packages/${encodeURIComponent(pluginPath)}/link`, { path: pluginPath });\n ctx.ui?.success?.(`Linked ${result.id}`);\n return { exitCode: 0, result: { id: result.id } };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/list.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function get(path, params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/list.ts"],"names":[],"mappings":"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","file":"list.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get } from '../../http.js';\n\ninterface ListFlags { json?: boolean }\ninterface ListInput { argv?: string[]; flags?: ListFlags }\n\ninterface EntryRow {\n id: string;\n version: string;\n source: string;\n primaryKind: string;\n provides: string[];\n enabled: boolean;\n}\n\ninterface ListResultData {\n entries: EntryRow[];\n total: number;\n}\n\nexport default defineCommand<unknown, ListInput, ListResultData>({\n id: 'marketplace:plugins:list',\n description: 'List installed plugins',\n\n handler: {\n async execute(ctx: PluginContextV3, input: ListInput): Promise<CommandResult<ListResultData>> {\n const flags = (input.flags ?? input) as ListFlags;\n const data = await get<ListResultData>('/packages', { kind: 'plugin' });\n\n if (flags.json) {\n ctx.ui?.json?.(data);\n } else {\n const enabled = data.entries.filter(e => e.enabled !== false).length;\n const disabled = data.total - enabled;\n ctx.ui?.success?.(`${data.total} plugins (${enabled} enabled, ${disabled} disabled)`, {\n sections: [{\n header: 'Plugins',\n items: data.entries.map(e => {\n const icon = e.enabled !== false ? '✅' : '⏸';\n return `${icon} ${e.id} ${e.version} (${e.source})`;\n }),\n }],\n });\n }\n\n return { exitCode: 0, result: data };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/list.ts"],"names":[],"mappings":";;;AAMA,IAAM,mBAAA,GAAsB,uBAAA;AAC5B,IAAM,kBAAA,GAAqB,qBAAA;AAC3B,IAAM,gBAAA,GAAmB,GAAA;AAEzB,SAAS,UAAA,GAAqB;AAC5B,EAAA,MAAM,cAAA,GAAiB,OAAO,oBAAoB,CAAA;AAClD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,kBAAkB,CAAA,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,gBAAgB,CAAA,IAAK,mBAAA;AAC5C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA;AACxC;AAiFA,eAAsB,GAAA,CAAiB,MAAc,MAAA,EAA6C;AAChG,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,EAAG,YAAY,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC5C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAAC,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IAAE;AAAA,EAC3E;AACA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,gBAAgB,CAAA;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,CAAI,QAAA,IAAY,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,CAAA;AACrE,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,IAAI,MAAM,CAAA,YAAA,EAAe,IAAI,YAAY,GAAA,CAAI,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,CAAc,SAAS,YAAA,EAAc;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,gFAAA,CAA6E,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,GAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;;;ACpGA,IAAO,eAAQ,aAAA,CAAkD;AAAA,EAC/D,EAAA,EAAI,0BAAA;AAAA,EACJ,WAAA,EAAa,wBAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAA0D;AAC5F,MAAA,MAAM,KAAA,GAAS,MAAM,KAAA,IAAS,KAAA;AAC9B,MAAA,MAAM,OAAO,MAAM,GAAA,CAAoB,aAAa,EAAE,IAAA,EAAM,UAAU,CAAA;AAEtE,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,OAAO,IAAI,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,MAAM,OAAA,GAAU,KAAK,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,KAAY,KAAK,CAAA,CAAE,MAAA;AAC9D,QAAA,MAAM,QAAA,GAAW,KAAK,KAAA,GAAQ,OAAA;AAC9B,QAAA,GAAA,CAAI,EAAA,EAAI,UAAU,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,OAAO,CAAA,UAAA,EAAa,QAAQ,CAAA,UAAA,CAAA,EAAc;AAAA,UACpF,UAAU,CAAC;AAAA,YACT,MAAA,EAAQ,SAAA;AAAA,YACR,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK;AAC3B,cAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,KAAY,KAAA,GAAQ,QAAA,GAAM,QAAA;AACzC,cAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,IAAI,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAA,CAAA;AAAA,YAClD,CAAC;AAAA,WACF;AAAA,SACF,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,IACrC;AAAA;AAEJ,CAAC","file":"list.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get } from '../../http.js';\n\ninterface ListFlags { json?: boolean }\ninterface ListInput { argv?: string[]; flags?: ListFlags }\n\ninterface EntryRow {\n id: string;\n version: string;\n source: string;\n primaryKind: string;\n provides: string[];\n enabled: boolean;\n}\n\ninterface ListResultData {\n entries: EntryRow[];\n total: number;\n}\n\nexport default defineCommand<unknown, ListInput, ListResultData>({\n id: 'marketplace:plugins:list',\n description: 'List installed plugins',\n\n handler: {\n async execute(ctx: PluginContextV3, input: ListInput): Promise<CommandResult<ListResultData>> {\n const flags = (input.flags ?? input) as ListFlags;\n const data = await get<ListResultData>('/packages', { kind: 'plugin' });\n\n if (flags.json) {\n ctx.ui?.json?.(data);\n } else {\n const enabled = data.entries.filter(e => e.enabled !== false).length;\n const disabled = data.total - enabled;\n ctx.ui?.success?.(`${data.total} plugins (${enabled} enabled, ${disabled} disabled)`, {\n sections: [{\n header: 'Plugins',\n items: data.entries.map(e => {\n const icon = e.enabled !== false ? '✅' : '⏸';\n return `${icon} ${e.id} ${e.version} (${e.source})`;\n }),\n }],\n });\n }\n\n return { exitCode: 0, result: data };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/plugins/unlink.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function del(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/plugins/unlink.ts"],"names":[],"mappings":"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","file":"unlink.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { del } from '../../http.js';\n\ninterface UnlinkInput { argv?: string[] }\n\nexport default defineCommand<unknown, UnlinkInput, { packageId: string }>({\n id: 'marketplace:plugins:unlink',\n description: 'Unlink a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UnlinkInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a package ID to unlink');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await del(`/packages/${encodeURIComponent(packageId)}/link`);\n ctx.ui?.success?.(`Unlinked ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/http.ts","../../../src/commands/plugins/unlink.ts"],"names":[],"mappings":"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","file":"unlink.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { del } from '../../http.js';\n\ninterface UnlinkInput { argv?: string[] }\n\nexport default defineCommand<unknown, UnlinkInput, { packageId: string }>({\n id: 'marketplace:plugins:unlink',\n description: 'Unlink a plugin',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UnlinkInput): Promise<CommandResult<{ packageId: string }>> {\n const packageId = input.argv?.[0];\n if (!packageId) {\n ctx.ui?.error?.('Specify a package ID to unlink');\n return { exitCode: 1, result: { packageId: '' } };\n }\n await del(`/packages/${encodeURIComponent(packageId)}/link`);\n ctx.ui?.success?.(`Unlinked ${packageId}`);\n return { exitCode: 0, result: { packageId } };\n },\n },\n});\n"]}
@@ -1,18 +1,17 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
  import * as fs from 'fs/promises';
3
3
  import * as path from 'path';
4
4
 
5
5
  // src/commands/sync.ts
6
-
7
- // src/http.ts
8
6
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
9
7
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
10
8
  var FETCH_TIMEOUT_MS = 3e4;
11
9
  function getBaseUrl() {
12
- if (process.env.KB_MARKETPLACE_URL) {
13
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
10
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
11
+ if (marketplaceUrl) {
12
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
14
13
  }
15
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
14
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
16
15
  return `${gateway}${MARKETPLACE_PREFIX}`;
17
16
  }
18
17
  async function post(path2, body) {
@@ -52,7 +51,7 @@ var sync_default = defineCommand({
52
51
  ctx.ui?.error?.("No marketplace.sync.include in kb.config.json");
53
52
  return { exitCode: 1, result: { added: [], skipped: [], total: 0 } };
54
53
  }
55
- const isDev = (process.env.NODE_ENV ?? "development") === "development";
54
+ const isDev = (useEnv("NODE_ENV") ?? "development") === "development";
56
55
  const result = await post("/workspace/sync", {
57
56
  include: syncConfig.include,
58
57
  exclude: syncConfig.exclude,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/sync.ts"],"names":["path"],"mappings":"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","file":"sync.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../http.js';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\ninterface SyncFlags {\n 'auto-enable'?: boolean;\n json?: boolean;\n}\n\ninterface SyncInput {\n argv?: string[];\n flags?: SyncFlags;\n}\n\ninterface SyncEntry {\n id: string;\n primaryKind: string;\n version: string;\n}\n\ninterface SyncResultData {\n added: SyncEntry[];\n skipped: Array<{ id: string; reason: string }>;\n total: number;\n}\n\nexport default defineCommand<unknown, SyncInput, SyncResultData>({\n id: 'marketplace:sync',\n description: 'Sync workspace — scan for entities and populate lock',\n\n handler: {\n async execute(ctx: PluginContextV3, input: SyncInput): Promise<CommandResult<SyncResultData>> {\n const flags = (input.flags ?? input) as SyncFlags;\n const cwd = ctx.cwd ?? process.cwd();\n const syncConfig = await loadSyncConfig(cwd);\n\n if (!syncConfig.include?.length) {\n ctx.ui?.error?.('No marketplace.sync.include in kb.config.json');\n return { exitCode: 1, result: { added: [], skipped: [], total: 0 } };\n }\n\n const isDev = (process.env.NODE_ENV ?? 'development') === 'development';\n const result = await post<SyncResultData>('/workspace/sync', {\n include: syncConfig.include,\n exclude: syncConfig.exclude,\n autoEnable: flags['auto-enable'] !== undefined ? Boolean(flags['auto-enable']) : isDev,\n });\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n } else if (result.added.length === 0) {\n ctx.ui?.info?.(`Lock is up to date (${result.total} entries)`);\n } else {\n ctx.ui?.success?.(`Synced ${result.added.length} new entries (${result.total} total)`, {\n sections: [{\n header: 'Added',\n items: result.added.map(e => `+ ${e.id} (${e.primaryKind}) v${e.version}`),\n }],\n });\n }\n\n return { exitCode: 0, result };\n },\n },\n});\n\nasync function loadSyncConfig(cwd: string): Promise<{ include?: string[]; exclude?: string[] }> {\n for (const p of [path.join(cwd, '.kb', 'kb.config.json'), path.join(cwd, 'kb.config.json')]) {\n try {\n const raw = await fs.readFile(p, 'utf-8');\n return JSON.parse(raw)?.marketplace?.sync ?? {};\n } catch { continue; }\n }\n return {};\n}\n"]}
1
+ {"version":3,"sources":["../../src/http.ts","../../src/commands/sync.ts"],"names":["path","useEnv"],"mappings":"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","file":"sync.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, useEnv, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { post } from '../http.js';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\ninterface SyncFlags {\n 'auto-enable'?: boolean;\n json?: boolean;\n}\n\ninterface SyncInput {\n argv?: string[];\n flags?: SyncFlags;\n}\n\ninterface SyncEntry {\n id: string;\n primaryKind: string;\n version: string;\n}\n\ninterface SyncResultData {\n added: SyncEntry[];\n skipped: Array<{ id: string; reason: string }>;\n total: number;\n}\n\nexport default defineCommand<unknown, SyncInput, SyncResultData>({\n id: 'marketplace:sync',\n description: 'Sync workspace — scan for entities and populate lock',\n\n handler: {\n async execute(ctx: PluginContextV3, input: SyncInput): Promise<CommandResult<SyncResultData>> {\n const flags = (input.flags ?? input) as SyncFlags;\n const cwd = ctx.cwd ?? process.cwd();\n const syncConfig = await loadSyncConfig(cwd);\n\n if (!syncConfig.include?.length) {\n ctx.ui?.error?.('No marketplace.sync.include in kb.config.json');\n return { exitCode: 1, result: { added: [], skipped: [], total: 0 } };\n }\n\n const isDev = (useEnv('NODE_ENV') ?? 'development') === 'development';\n const result = await post<SyncResultData>('/workspace/sync', {\n include: syncConfig.include,\n exclude: syncConfig.exclude,\n autoEnable: flags['auto-enable'] !== undefined ? Boolean(flags['auto-enable']) : isDev,\n });\n\n if (flags.json) {\n ctx.ui?.json?.(result);\n } else if (result.added.length === 0) {\n ctx.ui?.info?.(`Lock is up to date (${result.total} entries)`);\n } else {\n ctx.ui?.success?.(`Synced ${result.added.length} new entries (${result.total} total)`, {\n sections: [{\n header: 'Added',\n items: result.added.map(e => `+ ${e.id} (${e.primaryKind}) v${e.version}`),\n }],\n });\n }\n\n return { exitCode: 0, result };\n },\n },\n});\n\nasync function loadSyncConfig(cwd: string): Promise<{ include?: string[]; exclude?: string[] }> {\n for (const p of [path.join(cwd, '.kb', 'kb.config.json'), path.join(cwd, 'kb.config.json')]) {\n try {\n const raw = await fs.readFile(p, 'utf-8');\n return JSON.parse(raw)?.marketplace?.sync ?? {};\n } catch { continue; }\n }\n return {};\n}\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/uninstall.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function del(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/uninstall.ts"],"names":[],"mappings":"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","file":"uninstall.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { del } from '../http.js';\n\ninterface UninstallInput {\n argv?: string[];\n}\n\nexport default defineCommand<unknown, UninstallInput, { removed: string[] }>({\n id: 'marketplace:uninstall',\n description: 'Uninstall package(s) from marketplace',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UninstallInput): Promise<CommandResult<{ removed: string[] }>> {\n const argv = input.argv ?? [];\n if (argv.length === 0) {\n ctx.ui?.error?.('Please specify at least one package to uninstall');\n return { exitCode: 1, result: { removed: [] } };\n }\n\n const result = await del<{ ok: boolean; removed: string[] }>('/packages', { packageIds: argv });\n\n ctx.ui?.success?.(`Removed: ${result.removed.join(', ')}`);\n return { exitCode: 0, result: { removed: result.removed } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../src/http.ts","../../src/commands/uninstall.ts"],"names":[],"mappings":"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","file":"uninstall.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { del } from '../http.js';\n\ninterface UninstallInput {\n argv?: string[];\n}\n\nexport default defineCommand<unknown, UninstallInput, { removed: string[] }>({\n id: 'marketplace:uninstall',\n description: 'Uninstall package(s) from marketplace',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UninstallInput): Promise<CommandResult<{ removed: string[] }>> {\n const argv = input.argv ?? [];\n if (argv.length === 0) {\n ctx.ui?.error?.('Please specify at least one package to uninstall');\n return { exitCode: 1, result: { removed: [] } };\n }\n\n const result = await del<{ ok: boolean; removed: string[] }>('/packages', { packageIds: argv });\n\n ctx.ui?.success?.(`Removed: ${result.removed.join(', ')}`);\n return { exitCode: 0, result: { removed: result.removed } };\n },\n },\n});\n"]}
@@ -1,16 +1,15 @@
1
- import { defineCommand } from '@kb-labs/sdk';
1
+ import { defineCommand, useEnv } from '@kb-labs/sdk';
2
2
 
3
3
  // src/commands/update.ts
4
-
5
- // src/http.ts
6
4
  var DEFAULT_GATEWAY_URL = "http://127.0.0.1:4000";
7
5
  var MARKETPLACE_PREFIX = "/api/v1/marketplace";
8
6
  var FETCH_TIMEOUT_MS = 3e4;
9
7
  function getBaseUrl() {
10
- if (process.env.KB_MARKETPLACE_URL) {
11
- return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;
8
+ const marketplaceUrl = useEnv("KB_MARKETPLACE_URL");
9
+ if (marketplaceUrl) {
10
+ return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;
12
11
  }
13
- const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;
12
+ const gateway = useEnv("KB_GATEWAY_URL") ?? DEFAULT_GATEWAY_URL;
14
13
  return `${gateway}${MARKETPLACE_PREFIX}`;
15
14
  }
16
15
  async function post(path, body) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/http.ts","../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/commands/update.ts"],"names":[],"mappings":"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","file":"update.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n if (process.env.KB_MARKETPLACE_URL) {\n return `${process.env.KB_MARKETPLACE_URL}${MARKETPLACE_PREFIX}`;\n }\n const gateway = process.env.KB_GATEWAY_URL ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get, post } from '../http.js';\n\ninterface UpdateInput {\n argv?: string[];\n flags?: { json?: boolean };\n}\n\ninterface PackageEntry {\n id: string;\n version: string;\n primaryKind: string;\n}\n\ninterface UpdateResultData {\n installed: PackageEntry[];\n warnings: string[];\n}\n\nexport default defineCommand<unknown, UpdateInput, UpdateResultData>({\n id: 'marketplace:update',\n description: 'Update marketplace package(s)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UpdateInput): Promise<CommandResult<UpdateResultData>> {\n const argv = input.argv ?? [];\n\n // If no args given, fetch all installed packages and update each\n let packageIds = argv;\n if (packageIds.length === 0) {\n const all = await get<{ entries: PackageEntry[] }>('/packages');\n packageIds = all.entries.map(e => e.id);\n }\n\n if (packageIds.length === 0) {\n ctx.ui?.info?.('Nothing to update');\n return { exitCode: 0, result: { installed: [], warnings: [] } };\n }\n\n const installed: PackageEntry[] = [];\n const warnings: string[] = [];\n\n for (const id of packageIds) {\n try {\n const result = await post<PackageEntry>(`/packages/${encodeURIComponent(id)}/update`, {});\n installed.push(result);\n } catch (err) {\n warnings.push(`${id}: ${(err as Error).message}`);\n }\n }\n\n if (installed.length === 0) {\n ctx.ui?.info?.('Nothing to update');\n } else {\n ctx.ui?.success?.('Update completed', {\n sections: [\n {\n header: 'Updated',\n items: installed.map(p => `${p.id}@${p.version} (${p.primaryKind})`),\n },\n ...(warnings.length > 0 ? [{ header: 'Warnings', items: warnings }] : []),\n ],\n });\n }\n\n return { exitCode: 0, result: { installed, warnings } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../src/http.ts","../../src/commands/update.ts"],"names":[],"mappings":"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","file":"update.js","sourcesContent":["/**\n * HTTP client for marketplace service via Gateway.\n */\n\nimport { useEnv } from '@kb-labs/sdk';\n\nconst DEFAULT_GATEWAY_URL = 'http://127.0.0.1:4000';\nconst MARKETPLACE_PREFIX = '/api/v1/marketplace';\nconst FETCH_TIMEOUT_MS = 30_000;\n\nfunction getBaseUrl(): string {\n const marketplaceUrl = useEnv('KB_MARKETPLACE_URL');\n if (marketplaceUrl) {\n return `${marketplaceUrl}${MARKETPLACE_PREFIX}`;\n }\n const gateway = useEnv('KB_GATEWAY_URL') ?? DEFAULT_GATEWAY_URL;\n return `${gateway}${MARKETPLACE_PREFIX}`;\n}\n\nexport async function post<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function patch<T = unknown>(path: string, body: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function del<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T> {\n const url = `${getBaseUrl()}${path}`;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: 'DELETE',\n headers: body ? { 'Content-Type': 'application/json' } : {},\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n if (res.status === 204) { return undefined as T; }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function get<T = unknown>(path: string, params?: Record<string, string>): Promise<T> {\n const url = new URL(`${getBaseUrl()}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {url.searchParams.set(k, v);}\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(url.toString(), { signal: controller.signal });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(`Marketplace ${path} failed (${res.status}): ${text}`);\n }\n return await res.json() as T;\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n throw new Error(`Marketplace ${path} timed out — is the marketplace service running? (kb-dev start marketplace)`);\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n}\n","import { defineCommand, type PluginContextV3, type CommandResult } from '@kb-labs/sdk';\nimport { get, post } from '../http.js';\n\ninterface UpdateInput {\n argv?: string[];\n flags?: { json?: boolean };\n}\n\ninterface PackageEntry {\n id: string;\n version: string;\n primaryKind: string;\n}\n\ninterface UpdateResultData {\n installed: PackageEntry[];\n warnings: string[];\n}\n\nexport default defineCommand<unknown, UpdateInput, UpdateResultData>({\n id: 'marketplace:update',\n description: 'Update marketplace package(s)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: UpdateInput): Promise<CommandResult<UpdateResultData>> {\n const argv = input.argv ?? [];\n\n // If no args given, fetch all installed packages and update each\n let packageIds = argv;\n if (packageIds.length === 0) {\n const all = await get<{ entries: PackageEntry[] }>('/packages');\n packageIds = all.entries.map(e => e.id);\n }\n\n if (packageIds.length === 0) {\n ctx.ui?.info?.('Nothing to update');\n return { exitCode: 0, result: { installed: [], warnings: [] } };\n }\n\n const installed: PackageEntry[] = [];\n const warnings: string[] = [];\n\n for (const id of packageIds) {\n try {\n const result = await post<PackageEntry>(`/packages/${encodeURIComponent(id)}/update`, {});\n installed.push(result);\n } catch (err) {\n warnings.push(`${id}: ${(err as Error).message}`);\n }\n }\n\n if (installed.length === 0) {\n ctx.ui?.info?.('Nothing to update');\n } else {\n ctx.ui?.success?.('Update completed', {\n sections: [\n {\n header: 'Updated',\n items: installed.map(p => `${p.id}@${p.version} (${p.primaryKind})`),\n },\n ...(warnings.length > 0 ? [{ header: 'Warnings', items: warnings }] : []),\n ],\n });\n }\n\n return { exitCode: 0, result: { installed, warnings } };\n },\n },\n});\n"]}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export { default as manifest } from './manifest.js';
2
+ import '@kb-labs/perm-presets';
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
+ import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';
2
+
1
3
  // src/manifest.ts
4
+ var pluginPermissions = combinePermissions().with(kbPlatformPreset).withEnv(["KB_MARKETPLACE_URL", "KB_GATEWAY_URL", "NODE_ENV"]).build();
2
5
  var manifest = {
3
6
  schema: "kb.plugin/3",
4
7
  id: "@kb-labs/marketplace",
@@ -27,7 +30,8 @@ var manifest = {
27
30
  { id: "unlink", group: "marketplace", subgroup: "plugins", describe: "Unlink a plugin", handler: "./commands/plugins/unlink.js#default" },
28
31
  { id: "doctor", group: "marketplace", subgroup: "plugins", describe: "Diagnose issues", handler: "./commands/plugins/doctor.js#default" }
29
32
  ]
30
- }
33
+ },
34
+ permissions: pluginPermissions
31
35
  };
32
36
 
33
37
  export { manifest };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/manifest.ts"],"names":[],"mappings":";AAMO,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,gEAAA;AAAA,IACb,IAAA,EAAM,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU;AAAA,GAC7C;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,iCAAA,EAAkC;AAAA,MACnE,EAAE,IAAA,EAAM,qBAAA,EAAuB,QAAA,EAAU,mBAAA;AAAoB,KAC/D;AAAA,IACA,QAAA,EAAU;AAAA;AAAA,MAER,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,eAAe,QAAA,EAAU,oBAAA,EAAsB,SAAS,+BAAA,EAAgC;AAAA,MAChH,EAAE,IAAI,WAAA,EAAa,KAAA,EAAO,eAAe,QAAA,EAAU,sBAAA,EAAwB,SAAS,iCAAA,EAAkC;AAAA,MACtH,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,eAAe,QAAA,EAAU,mBAAA,EAAqB,SAAS,8BAAA,EAA+B;AAAA,MAC7G,EAAE,IAAI,MAAA,EAAQ,KAAA,EAAO,eAAe,QAAA,EAAU,wBAAA,EAA0B,SAAS,4BAAA,EAA6B;AAAA;AAAA,MAE9G,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,wBAAA,EAA0B,OAAA,EAAS,oCAAA,EAAqC;AAAA,MAC3I,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,kBAAA,EAAoB,OAAA,EAAS,uCAAA,EAAwC;AAAA,MAC3I,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,qBAAA,EAAuB,OAAA,EAAS,oCAAA,EAAqC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA;AAAuC;AAC1I;AAEJ","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-cli/manifest\n * ManifestV3 for marketplace CLI plugin.\n * Declares commands with subgroups for nested routing.\n */\n\nexport const manifest = {\n schema: 'kb.plugin/3' as const,\n id: '@kb-labs/marketplace',\n version: '0.1.0',\n display: {\n name: 'Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n tags: ['marketplace', 'plugins', 'adapters'],\n },\n cli: {\n groupMeta: [\n { name: 'marketplace', describe: 'Marketplace management commands' },\n { name: 'marketplace/plugins', describe: 'Plugin management' },\n ],\n commands: [\n // Top-level: kb marketplace install\n { id: 'install', group: 'marketplace', describe: 'Install package(s)', handler: './commands/install.js#default' },\n { id: 'uninstall', group: 'marketplace', describe: 'Uninstall package(s)', handler: './commands/uninstall.js#default' },\n { id: 'update', group: 'marketplace', describe: 'Update package(s)', handler: './commands/update.js#default' },\n { id: 'sync', group: 'marketplace', describe: 'Sync workspace to lock', handler: './commands/sync.js#default' },\n // Subgroup: kb marketplace plugins list\n { id: 'list', group: 'marketplace', subgroup: 'plugins', describe: 'List installed plugins', handler: './commands/plugins/list.js#default' },\n { id: 'enable', group: 'marketplace', subgroup: 'plugins', describe: 'Enable a plugin', handler: './commands/plugins/enable.js#default' },\n { id: 'disable', group: 'marketplace', subgroup: 'plugins', describe: 'Disable a plugin', handler: './commands/plugins/disable.js#default' },\n { id: 'link', group: 'marketplace', subgroup: 'plugins', describe: 'Link a local plugin', handler: './commands/plugins/link.js#default' },\n { id: 'unlink', group: 'marketplace', subgroup: 'plugins', describe: 'Unlink a plugin', handler: './commands/plugins/unlink.js#default' },\n { id: 'doctor', group: 'marketplace', subgroup: 'plugins', describe: 'Diagnose issues', handler: './commands/plugins/doctor.js#default' },\n ],\n },\n};\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";;;AAQA,IAAM,iBAAA,GAAoB,kBAAA,EAAmB,CAC1C,IAAA,CAAK,gBAAgB,CAAA,CACrB,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAA,EAAkB,UAAU,CAAC,EAC5D,KAAA,EAAM;AAEF,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,gEAAA;AAAA,IACb,IAAA,EAAM,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU;AAAA,GAC7C;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,iCAAA,EAAkC;AAAA,MACnE,EAAE,IAAA,EAAM,qBAAA,EAAuB,QAAA,EAAU,mBAAA;AAAoB,KAC/D;AAAA,IACA,QAAA,EAAU;AAAA;AAAA,MAER,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,eAAe,QAAA,EAAU,oBAAA,EAAsB,SAAS,+BAAA,EAAgC;AAAA,MAChH,EAAE,IAAI,WAAA,EAAa,KAAA,EAAO,eAAe,QAAA,EAAU,sBAAA,EAAwB,SAAS,iCAAA,EAAkC;AAAA,MACtH,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,eAAe,QAAA,EAAU,mBAAA,EAAqB,SAAS,8BAAA,EAA+B;AAAA,MAC7G,EAAE,IAAI,MAAA,EAAQ,KAAA,EAAO,eAAe,QAAA,EAAU,wBAAA,EAA0B,SAAS,4BAAA,EAA6B;AAAA;AAAA,MAE9G,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,wBAAA,EAA0B,OAAA,EAAS,oCAAA,EAAqC;AAAA,MAC3I,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,kBAAA,EAAoB,OAAA,EAAS,uCAAA,EAAwC;AAAA,MAC3I,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,qBAAA,EAAuB,OAAA,EAAS,oCAAA,EAAqC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA;AAAuC;AAC1I,GACF;AAAA,EACA,WAAA,EAAa;AACf","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-cli/manifest\n * ManifestV3 for marketplace CLI plugin.\n * Declares commands with subgroups for nested routing.\n */\n\nimport { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL', 'NODE_ENV'])\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3' as const,\n id: '@kb-labs/marketplace',\n version: '0.1.0',\n display: {\n name: 'Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n tags: ['marketplace', 'plugins', 'adapters'],\n },\n cli: {\n groupMeta: [\n { name: 'marketplace', describe: 'Marketplace management commands' },\n { name: 'marketplace/plugins', describe: 'Plugin management' },\n ],\n commands: [\n // Top-level: kb marketplace install\n { id: 'install', group: 'marketplace', describe: 'Install package(s)', handler: './commands/install.js#default' },\n { id: 'uninstall', group: 'marketplace', describe: 'Uninstall package(s)', handler: './commands/uninstall.js#default' },\n { id: 'update', group: 'marketplace', describe: 'Update package(s)', handler: './commands/update.js#default' },\n { id: 'sync', group: 'marketplace', describe: 'Sync workspace to lock', handler: './commands/sync.js#default' },\n // Subgroup: kb marketplace plugins list\n { id: 'list', group: 'marketplace', subgroup: 'plugins', describe: 'List installed plugins', handler: './commands/plugins/list.js#default' },\n { id: 'enable', group: 'marketplace', subgroup: 'plugins', describe: 'Enable a plugin', handler: './commands/plugins/enable.js#default' },\n { id: 'disable', group: 'marketplace', subgroup: 'plugins', describe: 'Disable a plugin', handler: './commands/plugins/disable.js#default' },\n { id: 'link', group: 'marketplace', subgroup: 'plugins', describe: 'Link a local plugin', handler: './commands/plugins/link.js#default' },\n { id: 'unlink', group: 'marketplace', subgroup: 'plugins', describe: 'Unlink a plugin', handler: './commands/plugins/unlink.js#default' },\n { id: 'doctor', group: 'marketplace', subgroup: 'plugins', describe: 'Diagnose issues', handler: './commands/plugins/doctor.js#default' },\n ],\n },\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
@@ -1,3 +1,5 @@
1
+ import * as _kb_labs_perm_presets from '@kb-labs/perm-presets';
2
+
1
3
  /**
2
4
  * @module @kb-labs/marketplace-cli/manifest
3
5
  * ManifestV3 for marketplace CLI plugin.
@@ -31,6 +33,7 @@ declare const manifest: {
31
33
  handler: string;
32
34
  })[];
33
35
  };
36
+ permissions: _kb_labs_perm_presets.RuntimePermissionSpec;
34
37
  };
35
38
 
36
39
  export { manifest as default, manifest };
package/dist/manifest.js CHANGED
@@ -1,4 +1,7 @@
1
+ import { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';
2
+
1
3
  // src/manifest.ts
4
+ var pluginPermissions = combinePermissions().with(kbPlatformPreset).withEnv(["KB_MARKETPLACE_URL", "KB_GATEWAY_URL", "NODE_ENV"]).build();
2
5
  var manifest = {
3
6
  schema: "kb.plugin/3",
4
7
  id: "@kb-labs/marketplace",
@@ -27,7 +30,8 @@ var manifest = {
27
30
  { id: "unlink", group: "marketplace", subgroup: "plugins", describe: "Unlink a plugin", handler: "./commands/plugins/unlink.js#default" },
28
31
  { id: "doctor", group: "marketplace", subgroup: "plugins", describe: "Diagnose issues", handler: "./commands/plugins/doctor.js#default" }
29
32
  ]
30
- }
33
+ },
34
+ permissions: pluginPermissions
31
35
  };
32
36
  var manifest_default = manifest;
33
37
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/marketplace/entry/src/manifest.ts"],"names":[],"mappings":";AAMO,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,gEAAA;AAAA,IACb,IAAA,EAAM,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU;AAAA,GAC7C;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,iCAAA,EAAkC;AAAA,MACnE,EAAE,IAAA,EAAM,qBAAA,EAAuB,QAAA,EAAU,mBAAA;AAAoB,KAC/D;AAAA,IACA,QAAA,EAAU;AAAA;AAAA,MAER,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,eAAe,QAAA,EAAU,oBAAA,EAAsB,SAAS,+BAAA,EAAgC;AAAA,MAChH,EAAE,IAAI,WAAA,EAAa,KAAA,EAAO,eAAe,QAAA,EAAU,sBAAA,EAAwB,SAAS,iCAAA,EAAkC;AAAA,MACtH,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,eAAe,QAAA,EAAU,mBAAA,EAAqB,SAAS,8BAAA,EAA+B;AAAA,MAC7G,EAAE,IAAI,MAAA,EAAQ,KAAA,EAAO,eAAe,QAAA,EAAU,wBAAA,EAA0B,SAAS,4BAAA,EAA6B;AAAA;AAAA,MAE9G,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,wBAAA,EAA0B,OAAA,EAAS,oCAAA,EAAqC;AAAA,MAC3I,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,kBAAA,EAAoB,OAAA,EAAS,uCAAA,EAAwC;AAAA,MAC3I,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,qBAAA,EAAuB,OAAA,EAAS,oCAAA,EAAqC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA;AAAuC;AAC1I;AAEJ;AAEA,IAAO,gBAAA,GAAQ","file":"manifest.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-cli/manifest\n * ManifestV3 for marketplace CLI plugin.\n * Declares commands with subgroups for nested routing.\n */\n\nexport const manifest = {\n schema: 'kb.plugin/3' as const,\n id: '@kb-labs/marketplace',\n version: '0.1.0',\n display: {\n name: 'Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n tags: ['marketplace', 'plugins', 'adapters'],\n },\n cli: {\n groupMeta: [\n { name: 'marketplace', describe: 'Marketplace management commands' },\n { name: 'marketplace/plugins', describe: 'Plugin management' },\n ],\n commands: [\n // Top-level: kb marketplace install\n { id: 'install', group: 'marketplace', describe: 'Install package(s)', handler: './commands/install.js#default' },\n { id: 'uninstall', group: 'marketplace', describe: 'Uninstall package(s)', handler: './commands/uninstall.js#default' },\n { id: 'update', group: 'marketplace', describe: 'Update package(s)', handler: './commands/update.js#default' },\n { id: 'sync', group: 'marketplace', describe: 'Sync workspace to lock', handler: './commands/sync.js#default' },\n // Subgroup: kb marketplace plugins list\n { id: 'list', group: 'marketplace', subgroup: 'plugins', describe: 'List installed plugins', handler: './commands/plugins/list.js#default' },\n { id: 'enable', group: 'marketplace', subgroup: 'plugins', describe: 'Enable a plugin', handler: './commands/plugins/enable.js#default' },\n { id: 'disable', group: 'marketplace', subgroup: 'plugins', describe: 'Disable a plugin', handler: './commands/plugins/disable.js#default' },\n { id: 'link', group: 'marketplace', subgroup: 'plugins', describe: 'Link a local plugin', handler: './commands/plugins/link.js#default' },\n { id: 'unlink', group: 'marketplace', subgroup: 'plugins', describe: 'Unlink a plugin', handler: './commands/plugins/unlink.js#default' },\n { id: 'doctor', group: 'marketplace', subgroup: 'plugins', describe: 'Diagnose issues', handler: './commands/plugins/doctor.js#default' },\n ],\n },\n};\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";;;AAQA,IAAM,iBAAA,GAAoB,kBAAA,EAAmB,CAC1C,IAAA,CAAK,gBAAgB,CAAA,CACrB,OAAA,CAAQ,CAAC,oBAAA,EAAsB,gBAAA,EAAkB,UAAU,CAAC,EAC5D,KAAA,EAAM;AAEF,IAAM,QAAA,GAAW;AAAA,EACtB,MAAA,EAAQ,aAAA;AAAA,EACR,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,gEAAA;AAAA,IACb,IAAA,EAAM,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU;AAAA,GAC7C;AAAA,EACA,GAAA,EAAK;AAAA,IACH,SAAA,EAAW;AAAA,MACT,EAAE,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,iCAAA,EAAkC;AAAA,MACnE,EAAE,IAAA,EAAM,qBAAA,EAAuB,QAAA,EAAU,mBAAA;AAAoB,KAC/D;AAAA,IACA,QAAA,EAAU;AAAA;AAAA,MAER,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,eAAe,QAAA,EAAU,oBAAA,EAAsB,SAAS,+BAAA,EAAgC;AAAA,MAChH,EAAE,IAAI,WAAA,EAAa,KAAA,EAAO,eAAe,QAAA,EAAU,sBAAA,EAAwB,SAAS,iCAAA,EAAkC;AAAA,MACtH,EAAE,IAAI,QAAA,EAAU,KAAA,EAAO,eAAe,QAAA,EAAU,mBAAA,EAAqB,SAAS,8BAAA,EAA+B;AAAA,MAC7G,EAAE,IAAI,MAAA,EAAQ,KAAA,EAAO,eAAe,QAAA,EAAU,wBAAA,EAA0B,SAAS,4BAAA,EAA6B;AAAA;AAAA,MAE9G,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,wBAAA,EAA0B,OAAA,EAAS,oCAAA,EAAqC;AAAA,MAC3I,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,kBAAA,EAAoB,OAAA,EAAS,uCAAA,EAAwC;AAAA,MAC3I,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,qBAAA,EAAuB,OAAA,EAAS,oCAAA,EAAqC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA,EAAuC;AAAA,MACxI,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,SAAA,EAAW,QAAA,EAAU,iBAAA,EAAmB,OAAA,EAAS,sCAAA;AAAuC;AAC1I,GACF;AAAA,EACA,WAAA,EAAa;AACf;AAEA,IAAO,gBAAA,GAAQ","file":"manifest.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-cli/manifest\n * ManifestV3 for marketplace CLI plugin.\n * Declares commands with subgroups for nested routing.\n */\n\nimport { combinePermissions, kbPlatformPreset } from '@kb-labs/sdk';\n\nconst pluginPermissions = combinePermissions()\n .with(kbPlatformPreset)\n .withEnv(['KB_MARKETPLACE_URL', 'KB_GATEWAY_URL', 'NODE_ENV'])\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3' as const,\n id: '@kb-labs/marketplace',\n version: '0.1.0',\n display: {\n name: 'Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n tags: ['marketplace', 'plugins', 'adapters'],\n },\n cli: {\n groupMeta: [\n { name: 'marketplace', describe: 'Marketplace management commands' },\n { name: 'marketplace/plugins', describe: 'Plugin management' },\n ],\n commands: [\n // Top-level: kb marketplace install\n { id: 'install', group: 'marketplace', describe: 'Install package(s)', handler: './commands/install.js#default' },\n { id: 'uninstall', group: 'marketplace', describe: 'Uninstall package(s)', handler: './commands/uninstall.js#default' },\n { id: 'update', group: 'marketplace', describe: 'Update package(s)', handler: './commands/update.js#default' },\n { id: 'sync', group: 'marketplace', describe: 'Sync workspace to lock', handler: './commands/sync.js#default' },\n // Subgroup: kb marketplace plugins list\n { id: 'list', group: 'marketplace', subgroup: 'plugins', describe: 'List installed plugins', handler: './commands/plugins/list.js#default' },\n { id: 'enable', group: 'marketplace', subgroup: 'plugins', describe: 'Enable a plugin', handler: './commands/plugins/enable.js#default' },\n { id: 'disable', group: 'marketplace', subgroup: 'plugins', describe: 'Disable a plugin', handler: './commands/plugins/disable.js#default' },\n { id: 'link', group: 'marketplace', subgroup: 'plugins', describe: 'Link a local plugin', handler: './commands/plugins/link.js#default' },\n { id: 'unlink', group: 'marketplace', subgroup: 'plugins', describe: 'Unlink a plugin', handler: './commands/plugins/unlink.js#default' },\n { id: 'doctor', group: 'marketplace', subgroup: 'plugins', describe: 'Diagnose issues', handler: './commands/plugins/doctor.js#default' },\n ],\n },\n permissions: pluginPermissions,\n};\n\nexport default manifest;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "dependencies": {
3
- "@kb-labs/sdk": "2.16.0"
3
+ "@kb-labs/sdk": "2.17.0"
4
4
  },
5
5
  "description": "Marketplace CLI plugin — commands for managing plugins, adapters, and other marketplace entities",
6
6
  "devDependencies": {
@@ -8,7 +8,7 @@
8
8
  "tsup": "^8.5.0",
9
9
  "typescript": "^5",
10
10
  "vitest": "^3.2.4",
11
- "@kb-labs/devkit": "2.16.0"
11
+ "@kb-labs/devkit": "2.18.0"
12
12
  },
13
13
  "engines": {
14
14
  "node": ">=20.0.0",
@@ -34,7 +34,7 @@
34
34
  "sideEffects": false,
35
35
  "type": "module",
36
36
  "types": "./dist/index.d.ts",
37
- "version": "2.16.0",
37
+ "version": "2.18.0",
38
38
  "scripts": {
39
39
  "build": "tsup",
40
40
  "clean": "rimraf dist",