@opentabs-dev/opentabs-plugin-npm 0.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15010 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +46 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/npm-api.d.ts +9 -0
  9. package/dist/npm-api.d.ts.map +1 -0
  10. package/dist/npm-api.js +67 -0
  11. package/dist/npm-api.js.map +1 -0
  12. package/dist/tools/get-current-user.d.ts +7 -0
  13. package/dist/tools/get-current-user.d.ts.map +1 -0
  14. package/dist/tools/get-current-user.js +28 -0
  15. package/dist/tools/get-current-user.js.map +1 -0
  16. package/dist/tools/get-organization.d.ts +20 -0
  17. package/dist/tools/get-organization.d.ts.map +1 -0
  18. package/dist/tools/get-organization.js +31 -0
  19. package/dist/tools/get-organization.js.map +1 -0
  20. package/dist/tools/get-package-dependencies.d.ts +16 -0
  21. package/dist/tools/get-package-dependencies.d.ts.map +1 -0
  22. package/dist/tools/get-package-dependencies.js +32 -0
  23. package/dist/tools/get-package-dependencies.js.map +1 -0
  24. package/dist/tools/get-package-dependents.d.ts +10 -0
  25. package/dist/tools/get-package-dependents.d.ts.map +1 -0
  26. package/dist/tools/get-package-dependents.js +28 -0
  27. package/dist/tools/get-package-dependents.js.map +1 -0
  28. package/dist/tools/get-package-downloads.d.ts +11 -0
  29. package/dist/tools/get-package-downloads.d.ts.map +1 -0
  30. package/dist/tools/get-package-downloads.js +27 -0
  31. package/dist/tools/get-package-downloads.js.map +1 -0
  32. package/dist/tools/get-package-readme.d.ts +9 -0
  33. package/dist/tools/get-package-readme.d.ts.map +1 -0
  34. package/dist/tools/get-package-readme.js +35 -0
  35. package/dist/tools/get-package-readme.js.map +1 -0
  36. package/dist/tools/get-package-version.d.ts +37 -0
  37. package/dist/tools/get-package-version.d.ts.map +1 -0
  38. package/dist/tools/get-package-version.js +30 -0
  39. package/dist/tools/get-package-version.js.map +1 -0
  40. package/dist/tools/get-package-versions.d.ts +12 -0
  41. package/dist/tools/get-package-versions.d.ts.map +1 -0
  42. package/dist/tools/get-package-versions.js +33 -0
  43. package/dist/tools/get-package-versions.js.map +1 -0
  44. package/dist/tools/get-package.d.ts +28 -0
  45. package/dist/tools/get-package.d.ts.map +1 -0
  46. package/dist/tools/get-package.js +23 -0
  47. package/dist/tools/get-package.js.map +1 -0
  48. package/dist/tools/get-user-packages.d.ts +14 -0
  49. package/dist/tools/get-user-packages.d.ts.map +1 -0
  50. package/dist/tools/get-user-packages.js +31 -0
  51. package/dist/tools/get-user-packages.js.map +1 -0
  52. package/dist/tools/get-user-profile.d.ts +12 -0
  53. package/dist/tools/get-user-profile.d.ts.map +1 -0
  54. package/dist/tools/get-user-profile.js +23 -0
  55. package/dist/tools/get-user-profile.js.map +1 -0
  56. package/dist/tools/list-tokens.d.ts +10 -0
  57. package/dist/tools/list-tokens.d.ts.map +1 -0
  58. package/dist/tools/list-tokens.js +24 -0
  59. package/dist/tools/list-tokens.js.map +1 -0
  60. package/dist/tools/list-user-packages.d.ts +13 -0
  61. package/dist/tools/list-user-packages.d.ts.map +1 -0
  62. package/dist/tools/list-user-packages.js +31 -0
  63. package/dist/tools/list-user-packages.js.map +1 -0
  64. package/dist/tools/schemas.d.ts +355 -0
  65. package/dist/tools/schemas.d.ts.map +1 -0
  66. package/dist/tools/schemas.js +195 -0
  67. package/dist/tools/schemas.js.map +1 -0
  68. package/dist/tools/search-packages.d.ts +26 -0
  69. package/dist/tools/search-packages.d.ts.map +1 -0
  70. package/dist/tools/search-packages.js +31 -0
  71. package/dist/tools/search-packages.js.map +1 -0
  72. package/dist/tools.json +1197 -0
  73. package/package.json +53 -0
@@ -0,0 +1,14 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
3
+ declare class NpmPlugin extends OpenTabsPlugin {
4
+ readonly name = "npm";
5
+ readonly description = "OpenTabs plugin for npm registry";
6
+ readonly displayName = "npm";
7
+ readonly urlPatterns: string[];
8
+ readonly homepage = "https://www.npmjs.com";
9
+ readonly tools: ToolDefinition[];
10
+ isReady(): Promise<boolean>;
11
+ }
12
+ declare const _default: NpmPlugin;
13
+ export default _default;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAkB/D,cAAM,SAAU,SAAQ,cAAc;IACpC,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,WAAW,sCAAsC;IAC1D,SAAkB,WAAW,SAAS;IACtC,QAAQ,CAAC,WAAW,WAA2B;IAC/C,SAAkB,QAAQ,2BAA2B;IAErD,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAe9B;IAEI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAIlC;;AAED,wBAA+B"}
package/dist/index.js ADDED
@@ -0,0 +1,46 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import { isAuthenticated, waitForAuth } from './npm-api.js';
3
+ import { get_current_user } from './tools/get-current-user.js';
4
+ import { search_packages } from './tools/search-packages.js';
5
+ import { get_package } from './tools/get-package.js';
6
+ import { get_package_version } from './tools/get-package-version.js';
7
+ import { get_package_readme } from './tools/get-package-readme.js';
8
+ import { get_package_downloads } from './tools/get-package-downloads.js';
9
+ import { get_package_dependents } from './tools/get-package-dependents.js';
10
+ import { get_package_versions } from './tools/get-package-versions.js';
11
+ import { get_package_dependencies } from './tools/get-package-dependencies.js';
12
+ import { get_user_profile } from './tools/get-user-profile.js';
13
+ import { get_user_packages } from './tools/get-user-packages.js';
14
+ import { get_organization } from './tools/get-organization.js';
15
+ import { list_user_packages } from './tools/list-user-packages.js';
16
+ import { list_tokens } from './tools/list-tokens.js';
17
+ class NpmPlugin extends OpenTabsPlugin {
18
+ name = 'npm';
19
+ description = 'OpenTabs plugin for npm registry';
20
+ displayName = 'npm';
21
+ urlPatterns = ['*://www.npmjs.com/*'];
22
+ homepage = 'https://www.npmjs.com';
23
+ tools = [
24
+ get_current_user,
25
+ search_packages,
26
+ get_package,
27
+ get_package_version,
28
+ get_package_readme,
29
+ get_package_downloads,
30
+ get_package_dependents,
31
+ get_package_versions,
32
+ get_package_dependencies,
33
+ get_user_profile,
34
+ get_user_packages,
35
+ get_organization,
36
+ list_user_packages,
37
+ list_tokens,
38
+ ];
39
+ async isReady() {
40
+ if (isAuthenticated())
41
+ return true;
42
+ return waitForAuth();
43
+ }
44
+ }
45
+ export default new NpmPlugin();
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,SAAU,SAAQ,cAAc;IAC3B,IAAI,GAAG,KAAK,CAAC;IACb,WAAW,GAAG,kCAAkC,CAAC;IACxC,WAAW,GAAG,KAAK,CAAC;IAC7B,WAAW,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC7B,QAAQ,GAAG,uBAAuB,CAAC;IAE5C,KAAK,GAAqB;QACjC,gBAAgB;QAChB,eAAe;QACf,WAAW;QACX,mBAAmB;QACnB,kBAAkB;QAClB,qBAAqB;QACrB,sBAAsB;QACtB,oBAAoB;QACpB,wBAAwB;QACxB,gBAAgB;QAChB,iBAAiB;QACjB,gBAAgB;QAChB,kBAAkB;QAClB,WAAW;KACZ,CAAC;IAEF,KAAK,CAAC,OAAO;QACX,IAAI,eAAe,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;CACF;AAED,eAAe,IAAI,SAAS,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const isAuthenticated: () => boolean;
2
+ export declare const waitForAuth: () => Promise<boolean>;
3
+ export declare const getUsername: () => string;
4
+ export declare const spiferack: <T>(path: string, options?: {
5
+ method?: string;
6
+ body?: unknown;
7
+ query?: Record<string, string | number | boolean | undefined>;
8
+ }) => Promise<T>;
9
+ //# sourceMappingURL=npm-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-api.d.ts","sourceRoot":"","sources":["../src/npm-api.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,eAAe,QAAO,OAA6B,CAAC;AAEjE,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,OAAO,CAUnD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC;AAKF,eAAO,MAAM,SAAS,GAAU,CAAC,EAC/B,MAAM,MAAM,EACZ,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC1D,KACL,OAAO,CAAC,CAAC,CAoCX,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { ToolError, fetchFromPage, getPageGlobal, getAuthCache, setAuthCache, clearAuthCache, waitUntil, buildQueryString, httpStatusToToolError, } from '@opentabs-dev/plugin-sdk';
2
+ const getAuth = () => {
3
+ const cached = getAuthCache('npm');
4
+ if (cached)
5
+ return cached;
6
+ const username = getPageGlobal('__context__.context.user.name');
7
+ const csrftoken = getPageGlobal('__context__.context.csrftoken');
8
+ if (!username || !csrftoken)
9
+ return null;
10
+ const auth = { username, csrftoken };
11
+ setAuthCache('npm', auth);
12
+ return auth;
13
+ };
14
+ export const isAuthenticated = () => getAuth() !== null;
15
+ export const waitForAuth = async () => {
16
+ try {
17
+ await waitUntil(() => isAuthenticated(), {
18
+ interval: 500,
19
+ timeout: 5000,
20
+ });
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ };
27
+ export const getUsername = () => {
28
+ const auth = getAuth();
29
+ if (!auth)
30
+ throw ToolError.auth('Not authenticated — please log in to npm.');
31
+ return auth.username;
32
+ };
33
+ // --- Spiferack API ---
34
+ // The npmjs.com website returns JSON for any page when the `x-spiferack: 1` header is set.
35
+ export const spiferack = async (path, options = {}) => {
36
+ const qs = options.query ? buildQueryString(options.query) : '';
37
+ const url = qs ? `${path}?${qs}` : path;
38
+ const headers = {
39
+ 'x-spiferack': '1',
40
+ };
41
+ const method = options.method ?? 'GET';
42
+ if (method !== 'GET') {
43
+ const auth = getAuth();
44
+ if (!auth)
45
+ throw ToolError.auth('Not authenticated — please log in to npm.');
46
+ headers['x-csrf-token'] = auth.csrftoken;
47
+ }
48
+ if (options.body) {
49
+ headers['Content-Type'] = 'application/json';
50
+ }
51
+ const response = await fetchFromPage(url, {
52
+ method,
53
+ headers,
54
+ body: options.body ? JSON.stringify(options.body) : undefined,
55
+ });
56
+ if (!response.ok) {
57
+ // Clear auth cache on 401/403 in case CSRF rotated
58
+ if (response.status === 401 || response.status === 403) {
59
+ clearAuthCache('npm');
60
+ }
61
+ throw httpStatusToToolError(response, `npm API error on ${method} ${path}`);
62
+ }
63
+ if (response.status === 204)
64
+ return {};
65
+ return (await response.json());
66
+ };
67
+ //# sourceMappingURL=npm-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-api.js","sourceRoot":"","sources":["../src/npm-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const get_current_user: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
3
+ username: z.ZodString;
4
+ avatar_url: z.ZodString;
5
+ email_verified: z.ZodBoolean;
6
+ }, z.core.$strip>>;
7
+ //# sourceMappingURL=get-current-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-user.d.ts","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;kBAuB3B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { defineTool, getPageGlobal } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { getUsername } from '../npm-api.js';
4
+ export const get_current_user = defineTool({
5
+ name: 'get_current_user',
6
+ displayName: 'Get Current User',
7
+ description: 'Get the profile of the currently authenticated npm user including username and avatar.',
8
+ summary: 'Get the authenticated npm user profile',
9
+ icon: 'user',
10
+ group: 'Account',
11
+ input: z.object({}),
12
+ output: z.object({
13
+ username: z.string().describe('npm username'),
14
+ avatar_url: z.string().describe('Avatar URL'),
15
+ email_verified: z.boolean().describe('Whether email is verified'),
16
+ }),
17
+ handle: async () => {
18
+ const username = getUsername();
19
+ const avatarLarge = getPageGlobal('__context__.context.user.avatars.large');
20
+ const emailVerified = getPageGlobal('__context__.context.userEmailVerified');
21
+ return {
22
+ username,
23
+ avatar_url: avatarLarge ? `https://www.npmjs.com${avatarLarge}` : '',
24
+ email_verified: emailVerified ?? false,
25
+ };
26
+ },
27
+ });
28
+ //# sourceMappingURL=get-current-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-user.js","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,wFAAwF;IACrG,OAAO,EAAE,wCAAwC;IACjD,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAClE,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,wCAAwC,CAAuB,CAAC;QAClG,MAAM,aAAa,GAAG,aAAa,CAAC,uCAAuC,CAAwB,CAAC;QACpG,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;YACpE,cAAc,EAAE,aAAa,IAAI,KAAK;SACvC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const get_organization: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ page: z.ZodOptional<z.ZodNumber>;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ organization: z.ZodObject<{
7
+ name: z.ZodString;
8
+ description: z.ZodString;
9
+ created: z.ZodString;
10
+ packages_count: z.ZodNumber;
11
+ tfa_enforced: z.ZodBoolean;
12
+ }, z.core.$strip>;
13
+ packages: z.ZodArray<z.ZodObject<{
14
+ name: z.ZodString;
15
+ version: z.ZodString;
16
+ description: z.ZodString;
17
+ date: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ }, z.core.$strip>>;
20
+ //# sourceMappingURL=get-organization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-organization.d.ts","sourceRoot":"","sources":["../../src/tools/get-organization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;kBA0B3B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { organizationSchema, mapOrganization, userPackageSchema, mapUserPackage } from './schemas.js';
5
+ export const get_organization = defineTool({
6
+ name: 'get_organization',
7
+ displayName: 'Get Organization',
8
+ description: 'Get information about an npm organization including name, description, creation date, packages, and 2FA enforcement.',
9
+ summary: 'Get npm organization details',
10
+ icon: 'building-2',
11
+ group: 'Organizations',
12
+ input: z.object({
13
+ name: z.string().describe('Organization name (e.g., "babel")'),
14
+ page: z.number().int().min(0).optional().describe('Page number for packages pagination (default 0)'),
15
+ }),
16
+ output: z.object({
17
+ organization: organizationSchema,
18
+ packages: z.array(userPackageSchema).describe('Organization packages'),
19
+ }),
20
+ handle: async (params) => {
21
+ const page = params.page ?? 0;
22
+ const data = await spiferack(`/org/${params.name}`, {
23
+ query: { page },
24
+ });
25
+ return {
26
+ organization: mapOrganization(data),
27
+ packages: (data.packages?.objects ?? []).map(mapUserPackage),
28
+ };
29
+ },
30
+ });
31
+ //# sourceMappingURL=get-organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-organization.js","sourceRoot":"","sources":["../../src/tools/get-organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAOtG,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,sHAAsH;IACxH,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;KACrG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,YAAY,EAAE,kBAAkB;QAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACvE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAc,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE;YAC/D,KAAK,EAAE,EAAE,IAAI,EAAE;SAChB,CAAC,CAAC;QACH,OAAO;YACL,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC;YACnC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;SAC7D,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_dependencies: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ name: z.ZodString;
6
+ version: z.ZodString;
7
+ dependencies: z.ZodArray<z.ZodObject<{
8
+ name: z.ZodString;
9
+ version: z.ZodString;
10
+ }, z.core.$strip>>;
11
+ dev_dependencies: z.ZodArray<z.ZodObject<{
12
+ name: z.ZodString;
13
+ version: z.ZodString;
14
+ }, z.core.$strip>>;
15
+ }, z.core.$strip>>;
16
+ //# sourceMappingURL=get-package-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;kBA0BnC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { dependencySchema, mapDependencies } from './schemas.js';
5
+ export const get_package_dependencies = defineTool({
6
+ name: 'get_package_dependencies',
7
+ displayName: 'Get Package Dependencies',
8
+ description: 'Get the runtime and development dependencies of the latest version of an npm package.',
9
+ summary: 'Get dependencies of a package',
10
+ icon: 'network',
11
+ group: 'Packages',
12
+ input: z.object({
13
+ name: z.string().describe('Package name (e.g., "express")'),
14
+ }),
15
+ output: z.object({
16
+ name: z.string().describe('Package name'),
17
+ version: z.string().describe('Version the dependencies are for'),
18
+ dependencies: z.array(dependencySchema).describe('Runtime dependencies'),
19
+ dev_dependencies: z.array(dependencySchema).describe('Development dependencies'),
20
+ }),
21
+ handle: async (params) => {
22
+ const data = await spiferack(`/package/${params.name}`);
23
+ const pv = data.packageVersion;
24
+ return {
25
+ name: pv?.name ?? params.name,
26
+ version: pv?.version ?? '',
27
+ dependencies: mapDependencies(pv?.dependencies),
28
+ dev_dependencies: mapDependencies(pv?.devDependencies),
29
+ };
30
+ },
31
+ });
32
+ //# sourceMappingURL=get-package-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-dependencies.js","sourceRoot":"","sources":["../../src/tools/get-package-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAWjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC;IACjD,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,uFAAuF;IACpG,OAAO,EAAE,+BAA+B;IACxC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC5D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAChE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACjF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAe,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI;YAC7B,OAAO,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE;YAC1B,YAAY,EAAE,eAAe,CAAC,EAAE,EAAE,YAAY,CAAC;YAC/C,gBAAgB,EAAE,eAAe,CAAC,EAAE,EAAE,eAAe,CAAC;SACvD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_dependents: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ count: z.ZodString;
6
+ dependents: z.ZodArray<z.ZodObject<{
7
+ name: z.ZodString;
8
+ }, z.core.$strip>>;
9
+ }, z.core.$strip>>;
10
+ //# sourceMappingURL=get-package-dependents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-dependents.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-dependents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;kBAuBjC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { dependentSchema } from './schemas.js';
5
+ export const get_package_dependents = defineTool({
6
+ name: 'get_package_dependents',
7
+ displayName: 'Get Package Dependents',
8
+ description: 'Get packages that depend on this package. Returns the total count and a sample list of dependent package names.',
9
+ summary: 'Get packages depending on a package',
10
+ icon: 'git-fork',
11
+ group: 'Packages',
12
+ input: z.object({
13
+ name: z.string().describe('Package name (e.g., "express")'),
14
+ }),
15
+ output: z.object({
16
+ count: z.string().describe('Total number of dependent packages'),
17
+ dependents: z.array(dependentSchema).describe('Sample of dependent package names'),
18
+ }),
19
+ handle: async (params) => {
20
+ const data = await spiferack(`/package/${params.name}`);
21
+ const deps = data.dependents;
22
+ return {
23
+ count: deps?.dependentsCount ?? '0',
24
+ dependents: (deps?.dependentsTruncated ?? []).map(name => ({ name })),
25
+ };
26
+ },
27
+ });
28
+ //# sourceMappingURL=get-package-dependents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-dependents.js","sourceRoot":"","sources":["../../src/tools/get-package-dependents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC/C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EACT,iHAAiH;IACnH,OAAO,EAAE,qCAAqC;IAC9C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC5D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAChE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAqB,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,IAAI,EAAE,eAAe,IAAI,GAAG;YACnC,UAAU,EAAE,CAAC,IAAI,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACtE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_downloads: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ name: z.ZodString;
6
+ downloads: z.ZodArray<z.ZodObject<{
7
+ downloads: z.ZodNumber;
8
+ label: z.ZodString;
9
+ }, z.core.$strip>>;
10
+ }, z.core.$strip>>;
11
+ //# sourceMappingURL=get-package-downloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-downloads.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-downloads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,qBAAqB;;;;;;;;kBAsBhC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { downloadStatSchema, mapDownloadStat } from './schemas.js';
5
+ export const get_package_downloads = defineTool({
6
+ name: 'get_package_downloads',
7
+ displayName: 'Get Package Downloads',
8
+ description: 'Get weekly download statistics for an npm package over the past year. Returns an array of weekly download counts.',
9
+ summary: 'Get download stats for a package',
10
+ icon: 'download',
11
+ group: 'Packages',
12
+ input: z.object({
13
+ name: z.string().describe('Package name (e.g., "express")'),
14
+ }),
15
+ output: z.object({
16
+ name: z.string().describe('Package name'),
17
+ downloads: z.array(downloadStatSchema).describe('Weekly download counts for the past year'),
18
+ }),
19
+ handle: async (params) => {
20
+ const data = await spiferack(`/package/${params.name}`);
21
+ return {
22
+ name: params.name,
23
+ downloads: (data.downloads ?? []).map(mapDownloadStat),
24
+ };
25
+ },
26
+ });
27
+ //# sourceMappingURL=get-package-downloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-downloads.js","sourceRoot":"","sources":["../../src/tools/get-package-downloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAOnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,uBAAuB;IACpC,WAAW,EACT,mHAAmH;IACrH,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC5D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAC5F,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAoB,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACvD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_readme: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ name: z.ZodString;
6
+ version: z.ZodString;
7
+ readme: z.ZodString;
8
+ }, z.core.$strip>>;
9
+ //# sourceMappingURL=get-package-readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-readme.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-readme.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,kBAAkB;;;;;;kBAuB7B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ const extractReadme = (readme) => {
5
+ if (!readme)
6
+ return '';
7
+ if (typeof readme === 'string')
8
+ return readme;
9
+ return readme.data ?? '';
10
+ };
11
+ export const get_package_readme = defineTool({
12
+ name: 'get_package_readme',
13
+ displayName: 'Get Package README',
14
+ description: 'Get the README content of an npm package. Returns the full README as rendered on the package page.',
15
+ summary: 'Get the README of a package',
16
+ icon: 'file-text',
17
+ group: 'Packages',
18
+ input: z.object({
19
+ name: z.string().describe('Package name (e.g., "express")'),
20
+ }),
21
+ output: z.object({
22
+ name: z.string().describe('Package name'),
23
+ version: z.string().describe('Version the README belongs to'),
24
+ readme: z.string().describe('README content (HTML)'),
25
+ }),
26
+ handle: async (params) => {
27
+ const data = await spiferack(`/package/${params.name}`);
28
+ return {
29
+ name: data.packageVersion?.name ?? params.name,
30
+ version: data.packageVersion?.version ?? '',
31
+ readme: extractReadme(data.readme),
32
+ };
33
+ },
34
+ });
35
+ //# sourceMappingURL=get-package-readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-readme.js","sourceRoot":"","sources":["../../src/tools/get-package-readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO1C,MAAM,aAAa,GAAG,CAAC,MAA8C,EAAU,EAAE;IAC/E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,oGAAoG;IACjH,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC5D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAiB,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI;YAC9C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE;YAC3C,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;SACnC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_version: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ version: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ package: z.ZodObject<{
7
+ name: z.ZodString;
8
+ version: z.ZodString;
9
+ description: z.ZodString;
10
+ license: z.ZodString;
11
+ homepage: z.ZodString;
12
+ repository_url: z.ZodString;
13
+ bugs_url: z.ZodString;
14
+ keywords: z.ZodArray<z.ZodString>;
15
+ author_name: z.ZodString;
16
+ maintainers: z.ZodArray<z.ZodObject<{
17
+ name: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ dist_tags: z.ZodRecord<z.ZodString, z.ZodString>;
20
+ last_publish_time: z.ZodString;
21
+ last_publish_maintainer: z.ZodString;
22
+ typescript_support: z.ZodString;
23
+ is_starred: z.ZodBoolean;
24
+ dependents_count: z.ZodString;
25
+ funding_url: z.ZodString;
26
+ has_provenance: z.ZodBoolean;
27
+ }, z.core.$strip>;
28
+ dependencies: z.ZodArray<z.ZodObject<{
29
+ name: z.ZodString;
30
+ version: z.ZodString;
31
+ }, z.core.$strip>>;
32
+ dev_dependencies: z.ZodArray<z.ZodObject<{
33
+ name: z.ZodString;
34
+ version: z.ZodString;
35
+ }, z.core.$strip>>;
36
+ }, z.core.$strip>>;
37
+ //# sourceMappingURL=get-package-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-version.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyB9B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { packageSchema, mapPackage, dependencySchema, mapDependencies } from './schemas.js';
5
+ export const get_package_version = defineTool({
6
+ name: 'get_package_version',
7
+ displayName: 'Get Package Version',
8
+ description: 'Get detailed information about a specific version of an npm package, including dependencies and dev dependencies for that version.',
9
+ summary: 'Get details for a specific package version',
10
+ icon: 'tag',
11
+ group: 'Packages',
12
+ input: z.object({
13
+ name: z.string().describe('Package name (e.g., "express")'),
14
+ version: z.string().describe('Version number (e.g., "5.2.1")'),
15
+ }),
16
+ output: z.object({
17
+ package: packageSchema,
18
+ dependencies: z.array(dependencySchema).describe('Runtime dependencies'),
19
+ dev_dependencies: z.array(dependencySchema).describe('Development dependencies'),
20
+ }),
21
+ handle: async (params) => {
22
+ const data = await spiferack(`/package/${params.name}/v/${params.version}`);
23
+ return {
24
+ package: mapPackage(data),
25
+ dependencies: mapDependencies(data.packageVersion?.dependencies),
26
+ dev_dependencies: mapDependencies(data.packageVersion?.devDependencies),
27
+ };
28
+ },
29
+ });
30
+ //# sourceMappingURL=get-package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-version.js","sourceRoot":"","sources":["../../src/tools/get-package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;IAC5C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EACT,oIAAoI;IACtI,OAAO,EAAE,4CAA4C;IACrD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC/D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACjF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAiB,YAAY,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC;YACzB,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC;YAChE,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const get_package_versions: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ name: z.ZodString;
6
+ dist_tags: z.ZodRecord<z.ZodString, z.ZodString>;
7
+ versions: z.ZodArray<z.ZodObject<{
8
+ version: z.ZodString;
9
+ deprecated: z.ZodString;
10
+ }, z.core.$strip>>;
11
+ }, z.core.$strip>>;
12
+ //# sourceMappingURL=get-package-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-versions.d.ts","sourceRoot":"","sources":["../../src/tools/get-package-versions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,oBAAoB;;;;;;;;;kBA4B/B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { spiferack } from '../npm-api.js';
4
+ import { versionInfoSchema } from './schemas.js';
5
+ export const get_package_versions = defineTool({
6
+ name: 'get_package_versions',
7
+ displayName: 'Get Package Versions',
8
+ description: 'Get all published versions of an npm package with deprecation status and dist-tags. Uses the versions tab for full data.',
9
+ summary: 'List all versions of a package',
10
+ icon: 'list-ordered',
11
+ group: 'Packages',
12
+ input: z.object({
13
+ name: z.string().describe('Package name (e.g., "express")'),
14
+ }),
15
+ output: z.object({
16
+ name: z.string().describe('Package name'),
17
+ dist_tags: z.record(z.string(), z.string()).describe('Dist-tags mapping'),
18
+ versions: z.array(versionInfoSchema).describe('All published versions (newest first)'),
19
+ }),
20
+ handle: async (params) => {
21
+ const data = await spiferack(`/package/${params.name}`, { query: { activeTab: 'versions' } });
22
+ const packumentVersions = data.packument?.versions ?? [];
23
+ return {
24
+ name: params.name,
25
+ dist_tags: data.capsule?.['dist-tags'] ?? data.packument?.['dist-tags'] ?? {},
26
+ versions: packumentVersions.map(v => ({
27
+ version: v.version ?? '',
28
+ deprecated: v.deprecated ?? '',
29
+ })),
30
+ };
31
+ },
32
+ });
33
+ //# sourceMappingURL=get-package-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-versions.js","sourceRoot":"","sources":["../../src/tools/get-package-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAgBjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,sBAAsB;IACnC,WAAW,EACT,0HAA0H;IAC5H,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC5D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACzE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACvF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAmB,YAAY,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAChH,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;YAC7E,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;gBACxB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;aAC/B,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}