@plurnk/plurnk-providers 0.40.0 → 1.0.1

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 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAM7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAChD,CAAC;AAYF,eAAO,MAAM,QAAQ,aAAmB,eAAe,KAAQ,OAAO,CAAC,SAAS,CAyB/E,CAAC"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAM7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAChD,CAAC;AAGF,eAAO,MAAM,QAAQ,aAAmB,eAAe,KAAQ,OAAO,CAAC,SAAS,CAyB/E,CAAC"}
package/dist/discover.js CHANGED
@@ -1,16 +1,6 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
- // OFF (unset/empty/"0") → every installed provider is trusted (no regression).
4
- // ON (any value) → `@plurnk/*` always trusted, plus a comma-separated allowlist
5
- // of additionally-trusted package names ("1" = on with zero third-party).
6
- const isTrusted = (packageName, env) => {
7
- const gate = env.PLURNK_PLUGINS_TRUSTED_ONLY;
8
- if (gate === undefined || gate === "" || gate === "0")
9
- return true;
10
- if (packageName.startsWith("@plurnk/"))
11
- return true;
12
- return gate.split(",").map((s) => s.trim()).includes(packageName);
13
- };
3
+ import Meta from "@plurnk/plurnk-meta";
14
4
  export const discover = async (options = {}) => {
15
5
  const dirs = options.packageDirs ?? await defaultPackageDirs(options.cwd ?? process.cwd());
16
6
  const env = options.env ?? process.env;
@@ -21,7 +11,7 @@ export const discover = async (options = {}) => {
21
11
  const info = await readProviderInfo(dir);
22
12
  if (info === null)
23
13
  continue;
24
- if (!isTrusted(info.packageName, env)) {
14
+ if (!Meta.isTrusted(info.packageName, env)) {
25
15
  skipped.set(info.name, info.packageName); // declined — not a collision candidate
26
16
  continue;
27
17
  }
@@ -39,33 +29,8 @@ export const discover = async (options = {}) => {
39
29
  // Enumerate every installed package directory — scoped and unscoped — under
40
30
  // `<cwd>/node_modules`. Unreadable node_modules (e.g. nothing installed) → [].
41
31
  const defaultPackageDirs = async (cwd) => {
42
- const nm = path.join(cwd, "node_modules");
43
- let entries;
44
- try {
45
- entries = await fs.readdir(nm, { withFileTypes: true });
46
- }
47
- catch {
48
- return [];
49
- }
50
- const dirs = [];
51
- for (const entry of entries) {
52
- if (!entry.isDirectory() || entry.name === ".bin" || entry.name === ".cache")
53
- continue;
54
- if (entry.name.startsWith("@")) {
55
- const scopeDir = path.join(nm, entry.name);
56
- try {
57
- const scoped = await fs.readdir(scopeDir, { withFileTypes: true });
58
- for (const s of scoped)
59
- if (s.isDirectory())
60
- dirs.push(path.join(scopeDir, s.name));
61
- }
62
- catch { /* unreadable scope dir — skip */ }
63
- }
64
- else {
65
- dirs.push(path.join(nm, entry.name));
66
- }
67
- }
68
- return dirs;
32
+ const nm = Meta.nearestNodeModules(cwd) ?? path.join(path.resolve(cwd), "node_modules");
33
+ return (await Meta.packageDirs(nm)).map((c) => c.dir).toSorted();
69
34
  };
70
35
  const readProviderInfo = async (dir) => {
71
36
  let raw;
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,58 +1,57 @@
1
1
  {
2
- "name": "@plurnk/plurnk-providers",
3
- "version": "0.40.0",
4
- "description": "Framework + contract for plurnk LLM transports: built-in standard OpenAI-compatible providers plus scope-agnostic discovery of first-party and third-party provider packages.",
5
- "keywords": [
6
- "plurnk",
7
- "llm",
8
- "provider",
9
- "tokenizer"
10
- ],
11
- "homepage": "https://github.com/plurnk/plurnk-providers#readme",
12
- "bugs": {
13
- "url": "https://github.com/plurnk/plurnk-providers/issues"
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "git+https://github.com/plurnk/plurnk-providers.git"
18
- },
19
- "engines": {
20
- "node": ">=26"
21
- },
22
- "license": "MIT",
23
- "author": "@wikitopian",
24
- "type": "module",
25
- "publishConfig": {
26
- "access": "public"
27
- },
28
- "exports": {
29
- ".": {
30
- "types": "./dist/index.d.ts",
31
- "default": "./dist/index.js"
2
+ "name": "@plurnk/plurnk-providers",
3
+ "version": "1.0.1",
4
+ "description": "Framework + contract for plurnk LLM transports: built-in standard OpenAI-compatible providers plus scope-agnostic discovery of first-party and third-party provider packages.",
5
+ "keywords": [
6
+ "plurnk",
7
+ "llm",
8
+ "provider",
9
+ "tokenizer"
10
+ ],
11
+ "homepage": "https://github.com/plurnk/plurnk-providers#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/plurnk/plurnk-providers/issues"
32
14
  },
33
- "./package.json": "./package.json"
34
- },
35
- "files": [
36
- "dist/**/*",
37
- "README.md",
38
- "SPEC.md",
39
- ".env.defaults"
40
- ],
41
- "scripts": {
42
- "test:lint": "tsc --noEmit",
43
- "test:unit": "node --test src/**/*.test.ts",
44
- "test": "npm run test:lint && npm run test:unit",
45
- "build:dist": "tsc -p tsconfig.build.json",
46
- "build": "npm run build:dist",
47
- "prepare": "npm run build"
48
- },
49
- "devDependencies": {
50
- "@types/node": "^26.0.0",
51
- "typescript": "^7.0.2"
52
- },
53
- "dependencies": {
54
- "@plurnk/gbnf": "0.1.1",
55
- "@plurnk/plurnk-aliases": "0.1.0",
56
- "@plurnk/plurnk-models": "0.2.0"
57
- }
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/plurnk/plurnk-providers.git"
18
+ },
19
+ "engines": {
20
+ "node": ">=26"
21
+ },
22
+ "license": "MIT",
23
+ "author": "@wikitopian",
24
+ "type": "module",
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "plurnk-dev": "./src/index.ts",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./package.json": "./package.json"
35
+ },
36
+ "files": [
37
+ "dist/**/*",
38
+ "README.md",
39
+ "SPEC.md",
40
+ ".env.defaults"
41
+ ],
42
+ "scripts": {
43
+ "test:lint": "tsc --noEmit",
44
+ "test:unit": "node --conditions=plurnk-dev --test src/**/*.test.ts",
45
+ "test": "npm run test:lint && npm run test:unit",
46
+ "build:dist": "tsc -p tsconfig.build.json",
47
+ "build": "npm run build:dist",
48
+ "prepack": "npm run build"
49
+ },
50
+ "dependencies": {
51
+ "@plurnk/gbnf": "1.0.1",
52
+ "@plurnk/plurnk-aliases": "1.0.1",
53
+ "@plurnk/plurnk-models": "1.0.1",
54
+ "@plurnk/plurnk-providers-ollama": "1.0.1",
55
+ "@plurnk/plurnk-meta": "1.0.1"
56
+ }
58
57
  }
@@ -1,6 +0,0 @@
1
- export type TokenizerFamily = "heuristic" | "cl100k" | "llama";
2
- export type CountTokens = (text: string) => number;
3
- export declare const tokenizerFor: (family: TokenizerFamily) => CountTokens;
4
- export declare const parseTokenizerFamily: (raw: string | undefined, fallback: TokenizerFamily, envName: string, label: string) => TokenizerFamily;
5
- export declare const tokenizerByPublisher: (model: string, table: ReadonlyMap<string, TokenizerFamily>, index?: number) => TokenizerFamily;
6
- //# sourceMappingURL=tokenizers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizers.d.ts","sourceRoot":"","sources":["../src/tokenizers.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAYnD,eAAO,MAAM,YAAY,GAAI,QAAQ,eAAe,KAAG,WAAiC,CAAC;AAKzF,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,GAAG,SAAS,EAAE,UAAU,eAAe,EAAE,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,eAKzH,CAAC;AAMF,eAAO,MAAM,oBAAoB,GAC7B,OAAO,MAAM,EACb,OAAO,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EAC3C,cAAS,KACV,eAGF,CAAC"}
@@ -1,40 +0,0 @@
1
- // Tokenizer strategies shared by every provider's countTokens(). Centralizes
2
- // the gpt-tokenizer / llama-tokenizer-js deps (each sibling pulled them in
3
- // separately) and the per-publisher dispatch maps that openrouter and
4
- // cloudflare had independently re-invented.
5
- //
6
- // countTokens is synchronous by contract (SPEC §2), so only client-side
7
- // tokenizers qualify. "heuristic" (chars/4) is the safe default for any
8
- // upstream whose tokenizer we can't run locally.
9
- import { encode as encodeCl100k } from "gpt-tokenizer/encoding/cl100k_base";
10
- import llamaTokenizer from "llama-tokenizer-js";
11
- // chars/2 is a deliberate UPPER BOUND, not an estimate: real agentic text runs
12
- // ~2.9 chars/token (gemma SP-256k) to ~3.2 (deepseek BPE-128k), so /4 silently
13
- // UNDERcounted 20-27% — the dangerous direction for window math. A fallback may
14
- // overcount (refuse a too-big prompt safely) but must never undercount.
15
- const heuristic = (text) => (text.length === 0 ? 0 : Math.ceil(text.length / 2));
16
- const cl100k = (text) => (text.length === 0 ? 0 : encodeCl100k(text).length);
17
- const llama = (text) => (text.length === 0 ? 0 : llamaTokenizer.encode(text).length);
18
- const STRATEGIES = Object.freeze({ heuristic, cl100k, llama });
19
- export const tokenizerFor = (family) => STRATEGIES[family];
20
- // Parse an operator-declared tokenizer override (e.g. OPENAI_TOKENIZER).
21
- // Accepts a legacy "cl100k_base" spelling for back-compat with the openai
22
- // sibling's existing env contract.
23
- export const parseTokenizerFamily = (raw, fallback, envName, label) => {
24
- if (raw === undefined || raw.length === 0)
25
- return fallback;
26
- if (raw === "cl100k_base")
27
- return "cl100k";
28
- if (raw === "heuristic" || raw === "cl100k" || raw === "llama")
29
- return raw;
30
- throw new Error(`${label} provider: ${envName} must be one of "heuristic", "cl100k", "llama" (got "${raw}")`);
31
- };
32
- // Dispatch a tokenizer family from a model id's publisher segment. Relay
33
- // providers (openrouter, cloudflare) route across many upstream families, so
34
- // the family is read from the id prefix. `index` selects which "/"-segment
35
- // holds the publisher (0 for "anthropic/claude…", 1 for "@cf/meta/llama…").
36
- export const tokenizerByPublisher = (model, table, index = 0) => {
37
- const publisher = model.split("/")[index];
38
- return publisher !== undefined ? table.get(publisher) ?? "heuristic" : "heuristic";
39
- };
40
- //# sourceMappingURL=tokenizers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizers.js","sourceRoot":"","sources":["../src/tokenizers.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,sEAAsE;AACtE,4CAA4C;AAC5C,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,iDAAiD;AAEjD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAMhD,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,wEAAwE;AACxE,MAAM,SAAS,GAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9F,MAAM,MAAM,GAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1F,MAAM,KAAK,GAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAElG,MAAM,UAAU,GAAmD,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAE/G,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAuB,EAAe,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAEzF,yEAAyE;AACzE,0EAA0E;AAC1E,mCAAmC;AACnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAuB,EAAE,QAAyB,EAAE,OAAe,EAAE,KAAa,EAAmB,EAAE;IACxI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,GAAG,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC;IAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,OAAO,wDAAwD,GAAG,IAAI,CAAC,CAAC;AAClH,CAAC,CAAC;AAEF,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,KAAa,EACb,KAA2C,EAC3C,KAAK,GAAG,CAAC,EACM,EAAE;IACjB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;AACvF,CAAC,CAAC"}