@ubiquity-os/plugin-sdk 3.1.2 → 3.1.4

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.
@@ -0,0 +1,59 @@
1
+ type OpenRouterError = {
2
+ error: {
3
+ message: string;
4
+ code: number;
5
+ metadata?: {
6
+ provider_name: string;
7
+ raw: unknown;
8
+ } | {
9
+ reasons: string[];
10
+ flagged_input: string;
11
+ provider_name: string;
12
+ model_slug: string;
13
+ };
14
+ };
15
+ };
16
+ type OpenRouterModel = {
17
+ id: string;
18
+ name: string;
19
+ created: number;
20
+ description: string;
21
+ context_length: number;
22
+ architecture: {
23
+ modality: string;
24
+ tokenizer: string;
25
+ instruct_type?: string;
26
+ };
27
+ top_provider: {
28
+ context_length: number;
29
+ /** `null` means it's the same as the context_length */
30
+ max_completion_tokens: number | null;
31
+ is_moderated: boolean;
32
+ };
33
+ pricing: {
34
+ prompt: string;
35
+ completion: string;
36
+ image: string;
37
+ request: string;
38
+ input_cache_read: string;
39
+ input_cache_write: string;
40
+ web_search: string;
41
+ internal_reasoning: string;
42
+ };
43
+ per_request_limits?: Record<string, unknown>;
44
+ };
45
+ declare function getOpenRouterModels(): Promise<OpenRouterModel[]>;
46
+ declare function getOpenRouterModelTokenLimits(modelId: string): Promise<{
47
+ contextLength: number;
48
+ maxCompletionTokens: number;
49
+ } | null>;
50
+
51
+ interface RetryOptions {
52
+ maxRetries: number;
53
+ onError?: (error: unknown) => Promise<void> | void;
54
+ /** Return `false` to stop retrying, `true` to automatically delay the next retry, or a number to set the delay before the next retry */
55
+ isErrorRetryable?: (error: unknown) => Promise<boolean | number> | boolean | number;
56
+ }
57
+ declare function retry<T>(fn: () => Promise<T>, options: RetryOptions): Promise<T>;
58
+
59
+ export { type OpenRouterError, type OpenRouterModel, getOpenRouterModelTokenLimits, getOpenRouterModels, retry };
@@ -0,0 +1,59 @@
1
+ type OpenRouterError = {
2
+ error: {
3
+ message: string;
4
+ code: number;
5
+ metadata?: {
6
+ provider_name: string;
7
+ raw: unknown;
8
+ } | {
9
+ reasons: string[];
10
+ flagged_input: string;
11
+ provider_name: string;
12
+ model_slug: string;
13
+ };
14
+ };
15
+ };
16
+ type OpenRouterModel = {
17
+ id: string;
18
+ name: string;
19
+ created: number;
20
+ description: string;
21
+ context_length: number;
22
+ architecture: {
23
+ modality: string;
24
+ tokenizer: string;
25
+ instruct_type?: string;
26
+ };
27
+ top_provider: {
28
+ context_length: number;
29
+ /** `null` means it's the same as the context_length */
30
+ max_completion_tokens: number | null;
31
+ is_moderated: boolean;
32
+ };
33
+ pricing: {
34
+ prompt: string;
35
+ completion: string;
36
+ image: string;
37
+ request: string;
38
+ input_cache_read: string;
39
+ input_cache_write: string;
40
+ web_search: string;
41
+ internal_reasoning: string;
42
+ };
43
+ per_request_limits?: Record<string, unknown>;
44
+ };
45
+ declare function getOpenRouterModels(): Promise<OpenRouterModel[]>;
46
+ declare function getOpenRouterModelTokenLimits(modelId: string): Promise<{
47
+ contextLength: number;
48
+ maxCompletionTokens: number;
49
+ } | null>;
50
+
51
+ interface RetryOptions {
52
+ maxRetries: number;
53
+ onError?: (error: unknown) => Promise<void> | void;
54
+ /** Return `false` to stop retrying, `true` to automatically delay the next retry, or a number to set the delay before the next retry */
55
+ isErrorRetryable?: (error: unknown) => Promise<boolean | number> | boolean | number;
56
+ }
57
+ declare function retry<T>(fn: () => Promise<T>, options: RetryOptions): Promise<T>;
58
+
59
+ export { type OpenRouterError, type OpenRouterModel, getOpenRouterModelTokenLimits, getOpenRouterModels, retry };
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/helpers/index.ts
21
+ var helpers_exports = {};
22
+ __export(helpers_exports, {
23
+ getOpenRouterModelTokenLimits: () => getOpenRouterModelTokenLimits,
24
+ getOpenRouterModels: () => getOpenRouterModels,
25
+ retry: () => retry
26
+ });
27
+ module.exports = __toCommonJS(helpers_exports);
28
+
29
+ // src/helpers/openrouter.ts
30
+ async function getOpenRouterModels() {
31
+ const response = await fetch("https://openrouter.ai/api/v1/models");
32
+ if (!response.ok) {
33
+ throw new Error("Failed to fetch models");
34
+ }
35
+ const result = await response.json();
36
+ return result.data;
37
+ }
38
+ async function getOpenRouterModelTokenLimits(modelId) {
39
+ const models = await getOpenRouterModels();
40
+ const model = models.find((m) => m.id === modelId);
41
+ if (!model) {
42
+ return null;
43
+ }
44
+ return {
45
+ contextLength: model.context_length,
46
+ maxCompletionTokens: model.top_provider.max_completion_tokens || model.context_length
47
+ };
48
+ }
49
+
50
+ // src/helpers/retry.ts
51
+ function sleep(ms) {
52
+ return new Promise((resolve) => setTimeout(resolve, ms));
53
+ }
54
+ async function retry(fn, options) {
55
+ let delay = 1e3;
56
+ let lastError = null;
57
+ for (let i = 0; i < options.maxRetries + 1; i++) {
58
+ try {
59
+ return await fn();
60
+ } catch (err) {
61
+ lastError = err;
62
+ if (options.onError) {
63
+ await options.onError(err);
64
+ }
65
+ let shouldRetry;
66
+ if (options.isErrorRetryable) {
67
+ shouldRetry = await options.isErrorRetryable(err);
68
+ }
69
+ if (shouldRetry === false) {
70
+ throw lastError;
71
+ } else if (typeof shouldRetry === "number" && Number.isFinite(shouldRetry)) {
72
+ await sleep(shouldRetry);
73
+ } else {
74
+ await sleep(delay);
75
+ delay *= 2;
76
+ }
77
+ }
78
+ }
79
+ throw lastError;
80
+ }
81
+ // Annotate the CommonJS export names for ESM import in node:
82
+ 0 && (module.exports = {
83
+ getOpenRouterModelTokenLimits,
84
+ getOpenRouterModels,
85
+ retry
86
+ });
@@ -0,0 +1,57 @@
1
+ // src/helpers/openrouter.ts
2
+ async function getOpenRouterModels() {
3
+ const response = await fetch("https://openrouter.ai/api/v1/models");
4
+ if (!response.ok) {
5
+ throw new Error("Failed to fetch models");
6
+ }
7
+ const result = await response.json();
8
+ return result.data;
9
+ }
10
+ async function getOpenRouterModelTokenLimits(modelId) {
11
+ const models = await getOpenRouterModels();
12
+ const model = models.find((m) => m.id === modelId);
13
+ if (!model) {
14
+ return null;
15
+ }
16
+ return {
17
+ contextLength: model.context_length,
18
+ maxCompletionTokens: model.top_provider.max_completion_tokens || model.context_length
19
+ };
20
+ }
21
+
22
+ // src/helpers/retry.ts
23
+ function sleep(ms) {
24
+ return new Promise((resolve) => setTimeout(resolve, ms));
25
+ }
26
+ async function retry(fn, options) {
27
+ let delay = 1e3;
28
+ let lastError = null;
29
+ for (let i = 0; i < options.maxRetries + 1; i++) {
30
+ try {
31
+ return await fn();
32
+ } catch (err) {
33
+ lastError = err;
34
+ if (options.onError) {
35
+ await options.onError(err);
36
+ }
37
+ let shouldRetry;
38
+ if (options.isErrorRetryable) {
39
+ shouldRetry = await options.isErrorRetryable(err);
40
+ }
41
+ if (shouldRetry === false) {
42
+ throw lastError;
43
+ } else if (typeof shouldRetry === "number" && Number.isFinite(shouldRetry)) {
44
+ await sleep(shouldRetry);
45
+ } else {
46
+ await sleep(delay);
47
+ delay *= 2;
48
+ }
49
+ }
50
+ }
51
+ throw lastError;
52
+ }
53
+ export {
54
+ getOpenRouterModelTokenLimits,
55
+ getOpenRouterModels,
56
+ retry
57
+ };
package/dist/index.d.mts CHANGED
@@ -132,4 +132,4 @@ declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unkn
132
132
 
133
133
  declare function createActionsPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, options?: Options): Promise<void>;
134
134
 
135
- export { CommentHandler, type Context, createActionsPlugin, createPlugin };
135
+ export { CommentHandler, type Context, type Options, createActionsPlugin, createPlugin };
package/dist/index.d.ts CHANGED
@@ -132,4 +132,4 @@ declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unkn
132
132
 
133
133
  declare function createActionsPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, options?: Options): Promise<void>;
134
134
 
135
- export { CommentHandler, type Context, createActionsPlugin, createPlugin };
135
+ export { CommentHandler, type Context, type Options, createActionsPlugin, createPlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubiquity-os/plugin-sdk",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
4
4
  "description": "SDK for plugin support.",
5
5
  "author": "Ubiquity DAO",
6
6
  "license": "MIT",
@@ -24,6 +24,9 @@
24
24
  ],
25
25
  "octokit": [
26
26
  "dist/octokit.d.ts"
27
+ ],
28
+ "helpers": [
29
+ "dist/helpers.d.ts"
27
30
  ]
28
31
  }
29
32
  },
@@ -52,6 +55,11 @@
52
55
  "types": "./dist/octokit.d.ts",
53
56
  "import": "./dist/octokit.mjs",
54
57
  "require": "./dist/octokit.js"
58
+ },
59
+ "./helpers": {
60
+ "types": "./dist/helpers.d.ts",
61
+ "import": "./dist/helpers.mjs",
62
+ "require": "./dist/helpers.js"
55
63
  }
56
64
  },
57
65
  "files": [