@mrciphersmith/keryx 0.2.18 → 0.2.19
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.
- package/dist/cli.js +58 -15
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -7837,6 +7837,12 @@ var init_gdgraph = __esm(() => {
|
|
|
7837
7837
|
});
|
|
7838
7838
|
|
|
7839
7839
|
// src/commands/providers.ts
|
|
7840
|
+
function isProviderPlatformSupported(provider, platform = process.platform) {
|
|
7841
|
+
if (provider.platforms === undefined || provider.platforms.length === 0) {
|
|
7842
|
+
return true;
|
|
7843
|
+
}
|
|
7844
|
+
return provider.platforms.includes(platform);
|
|
7845
|
+
}
|
|
7840
7846
|
function providerByName(name) {
|
|
7841
7847
|
return OPENAI_COMPAT_PROVIDERS.find((p) => p.name === name);
|
|
7842
7848
|
}
|
|
@@ -7881,7 +7887,7 @@ async function resolveModelsForPicker(fetchFn, provider, env = process.env, opts
|
|
|
7881
7887
|
return { models: [...provider.models], source: "fallback" };
|
|
7882
7888
|
}
|
|
7883
7889
|
const envKey = provider.envKey ?? compat.envKey;
|
|
7884
|
-
const raw = env[envKey];
|
|
7890
|
+
const raw = envKey === undefined ? undefined : env[envKey];
|
|
7885
7891
|
const apiKey = typeof raw === "string" && raw.length > 0 ? raw : undefined;
|
|
7886
7892
|
return fetchOpenAiCompatModelsDetailed(fetchFn, compat, apiKey, opts);
|
|
7887
7893
|
}
|
|
@@ -7956,6 +7962,16 @@ var init_providers = __esm(() => {
|
|
|
7956
7962
|
models: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant", "gpt-oss-120b"],
|
|
7957
7963
|
note: "free tier \xB7 fast"
|
|
7958
7964
|
},
|
|
7965
|
+
{
|
|
7966
|
+
name: "rapid-mlx",
|
|
7967
|
+
label: "Rapid-MLX (Local)",
|
|
7968
|
+
baseUrl: "http://127.0.0.1:8010",
|
|
7969
|
+
requiresApiKey: false,
|
|
7970
|
+
allowLoopback: true,
|
|
7971
|
+
platforms: ["darwin"],
|
|
7972
|
+
models: ["qwen3.5-9b-4bit"],
|
|
7973
|
+
note: "local \xB7 no key"
|
|
7974
|
+
},
|
|
7959
7975
|
{
|
|
7960
7976
|
name: "moonshot",
|
|
7961
7977
|
label: "Moonshot (Kimi)",
|
|
@@ -9642,18 +9658,21 @@ function makeProvider(name, _model, opts) {
|
|
|
9642
9658
|
}
|
|
9643
9659
|
const compat = providerByName(name);
|
|
9644
9660
|
if (compat !== undefined) {
|
|
9645
|
-
const
|
|
9646
|
-
|
|
9661
|
+
const needsKey = compat.requiresApiKey !== false;
|
|
9662
|
+
const apiKey = compat.envKey === undefined ? undefined : env[compat.envKey];
|
|
9663
|
+
if (needsKey && (apiKey === undefined || apiKey.length === 0)) {
|
|
9647
9664
|
return new FakeProvider([]);
|
|
9648
9665
|
}
|
|
9666
|
+
const grant = {
|
|
9667
|
+
network: true,
|
|
9668
|
+
baseUrl: opts.baseUrl ?? compat.baseUrl,
|
|
9669
|
+
...compat.allowLoopback === true ? { allowLoopback: true } : {},
|
|
9670
|
+
...compat.chatPath !== undefined ? { chatPath: compat.chatPath } : {},
|
|
9671
|
+
...apiKey !== undefined ? { apiKey } : {}
|
|
9672
|
+
};
|
|
9649
9673
|
return new OllamaProvider({
|
|
9650
9674
|
fetch: opts.fetch,
|
|
9651
|
-
grant
|
|
9652
|
-
network: true,
|
|
9653
|
-
baseUrl: opts.baseUrl ?? compat.baseUrl,
|
|
9654
|
-
apiKey,
|
|
9655
|
-
...compat.chatPath !== undefined ? { chatPath: compat.chatPath } : {}
|
|
9656
|
-
}
|
|
9675
|
+
grant
|
|
9657
9676
|
});
|
|
9658
9677
|
}
|
|
9659
9678
|
return new FakeProvider([]);
|
|
@@ -9770,13 +9789,22 @@ function hasCredential(provider, env) {
|
|
|
9770
9789
|
}
|
|
9771
9790
|
const compat = providerByName(provider);
|
|
9772
9791
|
if (compat) {
|
|
9792
|
+
if (compat.requiresApiKey === false) {
|
|
9793
|
+
return true;
|
|
9794
|
+
}
|
|
9795
|
+
if (compat.envKey === undefined) {
|
|
9796
|
+
return false;
|
|
9797
|
+
}
|
|
9773
9798
|
const key = env[compat.envKey];
|
|
9774
9799
|
return key !== undefined && key.length > 0;
|
|
9775
9800
|
}
|
|
9776
9801
|
return false;
|
|
9777
9802
|
}
|
|
9778
9803
|
function keyedProviderCandidates() {
|
|
9779
|
-
return [
|
|
9804
|
+
return [
|
|
9805
|
+
"anthropic",
|
|
9806
|
+
...OPENAI_COMPAT_PROVIDERS.filter((provider) => provider.requiresApiKey !== false).map((p) => p.name)
|
|
9807
|
+
];
|
|
9780
9808
|
}
|
|
9781
9809
|
function resolveAutoProvider(env, opts) {
|
|
9782
9810
|
if (opts?.preferSavedShell !== false) {
|
|
@@ -36455,6 +36483,9 @@ function projectPolicyTrusted(env) {
|
|
|
36455
36483
|
function buildDefaultMaskProviders(openaiCompat) {
|
|
36456
36484
|
const out = [];
|
|
36457
36485
|
for (const p of openaiCompat) {
|
|
36486
|
+
if (p.envKey === undefined) {
|
|
36487
|
+
continue;
|
|
36488
|
+
}
|
|
36458
36489
|
out.push({ envKey: p.envKey, baseUrl: p.baseUrl });
|
|
36459
36490
|
}
|
|
36460
36491
|
out.push({ envKey: "ANTHROPIC_API_KEY", baseUrl: "https://api.anthropic.com" });
|
|
@@ -37097,6 +37128,13 @@ function checkApproval(input2) {
|
|
|
37097
37128
|
}
|
|
37098
37129
|
|
|
37099
37130
|
// src/commands/harness.ts
|
|
37131
|
+
var HARNESS_PROVIDER_OPTIONS = [
|
|
37132
|
+
"fake",
|
|
37133
|
+
"anthropic",
|
|
37134
|
+
"ollama",
|
|
37135
|
+
...OPENAI_COMPAT_PROVIDERS.map((provider) => provider.name)
|
|
37136
|
+
];
|
|
37137
|
+
var HARNESS_PROVIDER_USAGE = `Usage: keryx harness run --provider <${HARNESS_PROVIDER_OPTIONS.join("|")}> --model <m> [--base-url <url>] "<prompt>"`;
|
|
37100
37138
|
function canonicalPath(p) {
|
|
37101
37139
|
try {
|
|
37102
37140
|
return realpathSync3(p);
|
|
@@ -37128,7 +37166,7 @@ function shellAllowProfile() {
|
|
|
37128
37166
|
return resolveLocalProfile("monitored-trusted-local");
|
|
37129
37167
|
}
|
|
37130
37168
|
var USAGE = [
|
|
37131
|
-
|
|
37169
|
+
HARNESS_PROVIDER_USAGE,
|
|
37132
37170
|
" keryx harness exec [--allow-env KEY]... [--max-runtime-ms N] [--allow-real-subprocess]",
|
|
37133
37171
|
" [--allowed-domains a,b] [--mask-env NAME@host] [--tls-terminate] [--mask-mode auto|manual|off] [--auto-mask]",
|
|
37134
37172
|
" -- <path> [args...]",
|
|
@@ -37204,7 +37242,7 @@ async function harnessCommand(args, deps) {
|
|
|
37204
37242
|
return;
|
|
37205
37243
|
}
|
|
37206
37244
|
const { provider, model, baseUrl, prompt, record } = parseArgs2(args);
|
|
37207
|
-
const validProviders = new Set(
|
|
37245
|
+
const validProviders = new Set(HARNESS_PROVIDER_OPTIONS);
|
|
37208
37246
|
if (!validProviders.has(provider) || prompt.length === 0) {
|
|
37209
37247
|
console.log(USAGE);
|
|
37210
37248
|
return;
|
|
@@ -44404,7 +44442,7 @@ init_shell_config();
|
|
|
44404
44442
|
// package.json
|
|
44405
44443
|
var package_default = {
|
|
44406
44444
|
name: "@mrciphersmith/keryx",
|
|
44407
|
-
version: "0.2.
|
|
44445
|
+
version: "0.2.19",
|
|
44408
44446
|
description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
44409
44447
|
private: false,
|
|
44410
44448
|
publishConfig: {
|
|
@@ -44527,6 +44565,7 @@ async function probeOllamaModels(deps, baseUrl) {
|
|
|
44527
44565
|
}
|
|
44528
44566
|
async function detectProviders(deps) {
|
|
44529
44567
|
const baseUrl = deps.baseUrl ?? DEFAULT_OLLAMA_BASE_URL;
|
|
44568
|
+
const platform = deps.platform ?? process.platform;
|
|
44530
44569
|
const detected = [];
|
|
44531
44570
|
const ollamaModels = await probeOllamaModels(deps, baseUrl);
|
|
44532
44571
|
if (ollamaModels !== undefined) {
|
|
@@ -44537,15 +44576,18 @@ async function detectProviders(deps) {
|
|
|
44537
44576
|
detected.push({ name: "anthropic", models: [...ANTHROPIC_MODELS] });
|
|
44538
44577
|
}
|
|
44539
44578
|
for (const p of OPENAI_COMPAT_PROVIDERS) {
|
|
44579
|
+
if (!isProviderPlatformSupported(p, platform)) {
|
|
44580
|
+
continue;
|
|
44581
|
+
}
|
|
44540
44582
|
detected.push({
|
|
44541
44583
|
name: p.name,
|
|
44542
44584
|
models: [...p.models],
|
|
44543
44585
|
baseUrl: p.baseUrl,
|
|
44544
|
-
envKey: p.envKey,
|
|
44545
44586
|
label: p.label,
|
|
44546
44587
|
...p.chatPath !== undefined ? { chatPath: p.chatPath } : {},
|
|
44547
44588
|
...p.modelsPath !== undefined ? { modelsPath: p.modelsPath } : {},
|
|
44548
|
-
...p.note !== undefined ? { note: p.note } : {}
|
|
44589
|
+
...p.note !== undefined ? { note: p.note } : {},
|
|
44590
|
+
...p.envKey !== undefined ? { envKey: p.envKey } : {}
|
|
44549
44591
|
});
|
|
44550
44592
|
}
|
|
44551
44593
|
detected.push({ name: "fake", models: [...FAKE_MODELS] });
|
|
@@ -44961,6 +45003,7 @@ function realSelectProviderModel(baseUrl) {
|
|
|
44961
45003
|
const detected = await detectProviders({
|
|
44962
45004
|
fetch: globalThis.fetch,
|
|
44963
45005
|
env: process.env,
|
|
45006
|
+
platform: process.platform,
|
|
44964
45007
|
...baseUrl !== undefined ? { baseUrl } : {}
|
|
44965
45008
|
});
|
|
44966
45009
|
const filtered = opts?.onlyProvider !== undefined ? detected.filter((d) => d.name === opts.onlyProvider) : detected;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrciphersmith/keryx",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.19",
|
|
4
4
|
"description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|