noumen 0.5.0 → 0.8.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.
- package/README.md +237 -93
- package/dist/a2a/index.d.ts +5 -7
- package/dist/a2a/index.js +3 -4
- package/dist/a2a/index.js.map +1 -1
- package/dist/acp/index.d.ts +5 -7
- package/dist/acp/index.js +0 -1
- package/dist/acp/index.js.map +1 -1
- package/dist/{agent-C3eDRsxs.d.ts → agent-D0gl-qYi.d.ts} +259 -31
- package/dist/{chunk-WPCYGZOE.js → chunk-5HY4IYNT.js} +2062 -2545
- package/dist/chunk-5HY4IYNT.js.map +1 -0
- package/dist/chunk-BC5BLWBC.js +21 -0
- package/dist/chunk-BC5BLWBC.js.map +1 -0
- package/dist/{chunk-XZN4QZLK.js → chunk-CX4BL6PC.js} +25 -15
- package/dist/chunk-CX4BL6PC.js.map +1 -0
- package/dist/{chunk-5GEX6ZSB.js → chunk-HQISH4D7.js} +60 -1
- package/dist/chunk-HQISH4D7.js.map +1 -0
- package/dist/{chunk-Y45R3PQL.js → chunk-NUCJXOUV.js} +32 -18
- package/dist/{chunk-Y45R3PQL.js.map → chunk-NUCJXOUV.js.map} +1 -1
- package/dist/chunk-OPFFLQZL.js +40 -0
- package/dist/chunk-OPFFLQZL.js.map +1 -0
- package/dist/chunk-PDEAJ272.js +660 -0
- package/dist/chunk-PDEAJ272.js.map +1 -0
- package/dist/chunk-PKHLGGEC.js +115 -0
- package/dist/chunk-PKHLGGEC.js.map +1 -0
- package/dist/chunk-XQTNXRE7.js +176 -0
- package/dist/chunk-XQTNXRE7.js.map +1 -0
- package/dist/chunk-XZPAA5TO.js +817 -0
- package/dist/chunk-XZPAA5TO.js.map +1 -0
- package/dist/cli/index.js +77 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.js +0 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client-JJFLE6RT.js +9 -0
- package/dist/{computer-BPdxSo6X.d.ts → computer-DzMR92tK.d.ts} +1 -1
- package/dist/docker.d.ts +2 -2
- package/dist/docker.js +0 -1
- package/dist/docker.js.map +1 -1
- package/dist/e2b.d.ts +2 -2
- package/dist/e2b.js +0 -1
- package/dist/e2b.js.map +1 -1
- package/dist/freestyle.d.ts +2 -2
- package/dist/freestyle.js +0 -1
- package/dist/freestyle.js.map +1 -1
- package/dist/{headless-FFU2DESQ.js → headless-25DU4MJQ.js} +1 -3
- package/dist/{headless-FFU2DESQ.js.map → headless-25DU4MJQ.js.map} +1 -1
- package/dist/{history-snip-64GYP4ZL.js → history-snip-HAWNAYKY.js} +1 -2
- package/dist/index.d.ts +358 -72
- package/dist/index.js +68 -55
- package/dist/jsonrpc/index.js +0 -1
- package/dist/local.d.ts +168 -0
- package/dist/local.js +40 -0
- package/dist/local.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -5
- package/dist/lsp/index.js +0 -1
- package/dist/{lsp-PS3BWIHC.js → lsp-3APWNKB2.js} +1 -2
- package/dist/{manager-DLXK63XC.js → manager-Z5EQ7YYV.js} +1 -2
- package/dist/mcp/index.d.ts +16 -8
- package/dist/mcp/index.js +5 -6
- package/dist/mcp/index.js.map +1 -1
- package/dist/{mcp-auth-AEI2R4ZC.js → mcp-auth-NOIQPF7W.js} +1 -2
- package/dist/{provider-factory-KI7OZUY3.js → provider-factory-KNBSHXJ6.js} +3 -3
- package/dist/{render-GRN4ZSSW.js → render-4VEODRK7.js} +1 -2
- package/dist/{resolve-GDSHNMG6.js → resolve-AGQZFMKD.js} +3 -3
- package/dist/sandbox-DAqQo0Tj.d.ts +49 -0
- package/dist/sandbox-index-ODNREIFA.js +32 -0
- package/dist/sandbox-index-ODNREIFA.js.map +1 -0
- package/dist/server/index.d.ts +18 -7
- package/dist/server/index.js +9 -5
- package/dist/server/index.js.map +1 -1
- package/dist/{server-Cu9gv1dk.d.ts → server-DFXdlqyX.d.ts} +1 -1
- package/dist/{spinner-OJNR6NFO.js → spinner-72JEISPK.js} +1 -2
- package/dist/sprites.d.ts +2 -2
- package/dist/sprites.js +0 -1
- package/dist/sprites.js.map +1 -1
- package/dist/ssh.d.ts +2 -2
- package/dist/ssh.js +0 -1
- package/dist/ssh.js.map +1 -1
- package/dist/{types-BA87bHPV.d.ts → types-BX4ALqoN.d.ts} +76 -4
- package/dist/{types-LrU4LRmX.d.ts → types-DLZNyF5t.d.ts} +164 -2
- package/dist/unsandboxed.d.ts +59 -0
- package/dist/unsandboxed.js +32 -0
- package/dist/unsandboxed.js.map +1 -0
- package/dist/{uuid-RVN2T26F.js → uuid-CVTNAPEB.js} +1 -2
- package/dist/{zod-7YXKWYMC.js → zod-VKURGPRT.js} +1 -2
- package/package.json +35 -50
- package/dist/cache-DsRqxx6v.d.ts +0 -38
- package/dist/chunk-5GEX6ZSB.js.map +0 -1
- package/dist/chunk-CS6WNDCF.js +0 -171
- package/dist/chunk-CS6WNDCF.js.map +0 -1
- package/dist/chunk-DGUM43GV.js +0 -11
- package/dist/chunk-EKOGVTBT.js +0 -472
- package/dist/chunk-EKOGVTBT.js.map +0 -1
- package/dist/chunk-HEQQQGK5.js +0 -131
- package/dist/chunk-HEQQQGK5.js.map +0 -1
- package/dist/chunk-L3L3FG5T.js +0 -16
- package/dist/chunk-L3L3FG5T.js.map +0 -1
- package/dist/chunk-WPCYGZOE.js.map +0 -1
- package/dist/chunk-WTLK2ZAR.js +0 -94
- package/dist/chunk-WTLK2ZAR.js.map +0 -1
- package/dist/chunk-XZN4QZLK.js.map +0 -1
- package/dist/client-CRRO2376.js +0 -10
- package/dist/providers/anthropic.d.ts +0 -19
- package/dist/providers/anthropic.js +0 -35
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/bedrock.d.ts +0 -39
- package/dist/providers/bedrock.js +0 -56
- package/dist/providers/bedrock.js.map +0 -1
- package/dist/providers/gemini.d.ts +0 -17
- package/dist/providers/gemini.js +0 -262
- package/dist/providers/gemini.js.map +0 -1
- package/dist/providers/ollama.d.ts +0 -13
- package/dist/providers/ollama.js +0 -20
- package/dist/providers/ollama.js.map +0 -1
- package/dist/providers/openai.d.ts +0 -21
- package/dist/providers/openai.js +0 -9
- package/dist/providers/openrouter.d.ts +0 -16
- package/dist/providers/openrouter.js +0 -24
- package/dist/providers/openrouter.js.map +0 -1
- package/dist/providers/vertex.d.ts +0 -42
- package/dist/providers/vertex.js +0 -67
- package/dist/providers/vertex.js.map +0 -1
- package/dist/sandbox-9qeMTNrD.d.ts +0 -126
- package/dist/types-CD0rUKKT.d.ts +0 -109
- package/dist/uuid-RVN2T26F.js.map +0 -1
- package/dist/zod-7YXKWYMC.js.map +0 -1
- /package/dist/{chunk-DGUM43GV.js.map → client-JJFLE6RT.js.map} +0 -0
- /package/dist/{client-CRRO2376.js.map → history-snip-HAWNAYKY.js.map} +0 -0
- /package/dist/{history-snip-64GYP4ZL.js.map → lsp-3APWNKB2.js.map} +0 -0
- /package/dist/{lsp-PS3BWIHC.js.map → manager-Z5EQ7YYV.js.map} +0 -0
- /package/dist/{manager-DLXK63XC.js.map → mcp-auth-NOIQPF7W.js.map} +0 -0
- /package/dist/{mcp-auth-AEI2R4ZC.js.map → provider-factory-KNBSHXJ6.js.map} +0 -0
- /package/dist/{provider-factory-KI7OZUY3.js.map → render-4VEODRK7.js.map} +0 -0
- /package/dist/{providers/openai.js.map → resolve-AGQZFMKD.js.map} +0 -0
- /package/dist/{render-GRN4ZSSW.js.map → spinner-72JEISPK.js.map} +0 -0
- /package/dist/{resolve-GDSHNMG6.js.map → uuid-CVTNAPEB.js.map} +0 -0
- /package/dist/{spinner-OJNR6NFO.js.map → zod-VKURGPRT.js.map} +0 -0
package/dist/chunk-WTLK2ZAR.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// src/providers/resolve.ts
|
|
2
|
-
var ENV_KEY_MAP = {
|
|
3
|
-
openai: "OPENAI_API_KEY",
|
|
4
|
-
anthropic: "ANTHROPIC_API_KEY",
|
|
5
|
-
gemini: "GEMINI_API_KEY",
|
|
6
|
-
openrouter: "OPENROUTER_API_KEY"
|
|
7
|
-
};
|
|
8
|
-
var DEFAULT_MODELS = {
|
|
9
|
-
openai: "gpt-5.4",
|
|
10
|
-
anthropic: "claude-opus-4.6",
|
|
11
|
-
gemini: "gemini-2.5-flash",
|
|
12
|
-
openrouter: "anthropic/claude-opus-4.6",
|
|
13
|
-
bedrock: "us.anthropic.claude-opus-4.6-v1:0",
|
|
14
|
-
vertex: "claude-opus-4.6",
|
|
15
|
-
ollama: "qwen2.5-coder:32b"
|
|
16
|
-
};
|
|
17
|
-
var SUPPORTED_PROVIDERS = Object.keys(DEFAULT_MODELS);
|
|
18
|
-
function getProviderEnvKey(name) {
|
|
19
|
-
const envVar = ENV_KEY_MAP[name];
|
|
20
|
-
return envVar ? process.env[envVar] : void 0;
|
|
21
|
-
}
|
|
22
|
-
async function resolveProvider(input, opts) {
|
|
23
|
-
if (typeof input !== "string") return input;
|
|
24
|
-
const name = input;
|
|
25
|
-
if (!SUPPORTED_PROVIDERS.includes(name)) {
|
|
26
|
-
throw new Error(
|
|
27
|
-
`Unknown provider "${name}". Supported: ${SUPPORTED_PROVIDERS.join(", ")}`
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
const key = opts?.apiKey ?? getProviderEnvKey(name) ?? process.env.NOUMEN_API_KEY;
|
|
31
|
-
switch (name) {
|
|
32
|
-
case "openai": {
|
|
33
|
-
if (!key) throw new Error("OpenAI requires an API key. Set OPENAI_API_KEY or pass apiKey.");
|
|
34
|
-
const { OpenAIProvider } = await import("./providers/openai.js");
|
|
35
|
-
return new OpenAIProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL });
|
|
36
|
-
}
|
|
37
|
-
case "anthropic": {
|
|
38
|
-
if (!key) throw new Error("Anthropic requires an API key. Set ANTHROPIC_API_KEY or pass apiKey.");
|
|
39
|
-
const { AnthropicProvider } = await import("./providers/anthropic.js");
|
|
40
|
-
return new AnthropicProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL, cacheControl: { enabled: true } });
|
|
41
|
-
}
|
|
42
|
-
case "gemini": {
|
|
43
|
-
if (!key) throw new Error("Gemini requires an API key. Set GEMINI_API_KEY or pass apiKey.");
|
|
44
|
-
const { GeminiProvider } = await import("./providers/gemini.js");
|
|
45
|
-
return new GeminiProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL });
|
|
46
|
-
}
|
|
47
|
-
case "openrouter": {
|
|
48
|
-
if (!key) throw new Error("OpenRouter requires an API key. Set OPENROUTER_API_KEY or pass apiKey.");
|
|
49
|
-
const { OpenRouterProvider } = await import("./providers/openrouter.js");
|
|
50
|
-
return new OpenRouterProvider({ apiKey: key, model: opts?.model, appName: "noumen" });
|
|
51
|
-
}
|
|
52
|
-
case "bedrock": {
|
|
53
|
-
const { BedrockAnthropicProvider } = await import("./providers/bedrock.js");
|
|
54
|
-
return new BedrockAnthropicProvider({ model: opts?.model, baseURL: opts?.baseURL });
|
|
55
|
-
}
|
|
56
|
-
case "vertex": {
|
|
57
|
-
const { VertexAnthropicProvider } = await import("./providers/vertex.js");
|
|
58
|
-
return new VertexAnthropicProvider({ model: opts?.model, baseURL: opts?.baseURL });
|
|
59
|
-
}
|
|
60
|
-
case "ollama": {
|
|
61
|
-
const { OllamaProvider } = await import("./providers/ollama.js");
|
|
62
|
-
const base = opts?.baseURL ?? (process.env.OLLAMA_HOST ? `${process.env.OLLAMA_HOST.replace(/\/+$/, "")}/v1` : void 0);
|
|
63
|
-
return new OllamaProvider({ model: opts?.model, baseURL: base });
|
|
64
|
-
}
|
|
65
|
-
default:
|
|
66
|
-
throw new Error(`Unhandled provider: ${name}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
async function detectProvider() {
|
|
70
|
-
if (process.env.ANTHROPIC_API_KEY) return "anthropic";
|
|
71
|
-
if (process.env.OPENAI_API_KEY) return "openai";
|
|
72
|
-
if (process.env.GEMINI_API_KEY) return "gemini";
|
|
73
|
-
if (process.env.OPENROUTER_API_KEY) return "openrouter";
|
|
74
|
-
if (process.env.AWS_ACCESS_KEY_ID || process.env.AWS_PROFILE) return "bedrock";
|
|
75
|
-
if (process.env.GOOGLE_APPLICATION_CREDENTIALS || process.env.GCLOUD_PROJECT) return "vertex";
|
|
76
|
-
if (process.env.OLLAMA_HOST) return "ollama";
|
|
77
|
-
try {
|
|
78
|
-
const host = process.env.OLLAMA_HOST ?? "http://localhost:11434";
|
|
79
|
-
const res = await fetch(`${host.replace(/\/+$/, "")}/api/tags`, {
|
|
80
|
-
signal: AbortSignal.timeout(500)
|
|
81
|
-
});
|
|
82
|
-
if (res.ok) return "ollama";
|
|
83
|
-
} catch {
|
|
84
|
-
}
|
|
85
|
-
return void 0;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export {
|
|
89
|
-
DEFAULT_MODELS,
|
|
90
|
-
SUPPORTED_PROVIDERS,
|
|
91
|
-
resolveProvider,
|
|
92
|
-
detectProvider
|
|
93
|
-
};
|
|
94
|
-
//# sourceMappingURL=chunk-WTLK2ZAR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/resolve.ts"],"sourcesContent":["import type { AIProvider } from \"./types.js\";\n\nexport type ProviderName =\n | \"openai\"\n | \"anthropic\"\n | \"gemini\"\n | \"openrouter\"\n | \"bedrock\"\n | \"vertex\"\n | \"ollama\";\n\nconst ENV_KEY_MAP: Record<string, string> = {\n openai: \"OPENAI_API_KEY\",\n anthropic: \"ANTHROPIC_API_KEY\",\n gemini: \"GEMINI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n};\n\nexport const DEFAULT_MODELS: Record<string, string> = {\n openai: \"gpt-5.4\",\n anthropic: \"claude-opus-4.6\",\n gemini: \"gemini-2.5-flash\",\n openrouter: \"anthropic/claude-opus-4.6\",\n bedrock: \"us.anthropic.claude-opus-4.6-v1:0\",\n vertex: \"claude-opus-4.6\",\n ollama: \"qwen2.5-coder:32b\",\n};\n\nexport const SUPPORTED_PROVIDERS: ProviderName[] = Object.keys(DEFAULT_MODELS) as ProviderName[];\n\nfunction getProviderEnvKey(name: string): string | undefined {\n const envVar = ENV_KEY_MAP[name];\n return envVar ? process.env[envVar] : undefined;\n}\n\nexport interface ResolveProviderOptions {\n apiKey?: string;\n model?: string;\n baseURL?: string;\n}\n\n/**\n * Resolve a provider from a name string or pass through an AIProvider instance.\n * API key resolution order:\n * 1. Explicit apiKey option\n * 2. Provider-specific env var (OPENAI_API_KEY, etc.)\n * 3. NOUMEN_API_KEY generic env var\n */\nexport async function resolveProvider(\n input: AIProvider | ProviderName,\n opts?: ResolveProviderOptions,\n): Promise<AIProvider> {\n if (typeof input !== \"string\") return input;\n\n const name = input;\n if (!SUPPORTED_PROVIDERS.includes(name)) {\n throw new Error(\n `Unknown provider \"${name}\". Supported: ${SUPPORTED_PROVIDERS.join(\", \")}`,\n );\n }\n\n const key =\n opts?.apiKey ??\n getProviderEnvKey(name) ??\n process.env.NOUMEN_API_KEY;\n\n switch (name) {\n case \"openai\": {\n if (!key) throw new Error(\"OpenAI requires an API key. Set OPENAI_API_KEY or pass apiKey.\");\n const { OpenAIProvider } = await import(\"./openai.js\");\n return new OpenAIProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL });\n }\n case \"anthropic\": {\n if (!key) throw new Error(\"Anthropic requires an API key. Set ANTHROPIC_API_KEY or pass apiKey.\");\n const { AnthropicProvider } = await import(\"./anthropic.js\");\n return new AnthropicProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL, cacheControl: { enabled: true } });\n }\n case \"gemini\": {\n if (!key) throw new Error(\"Gemini requires an API key. Set GEMINI_API_KEY or pass apiKey.\");\n const { GeminiProvider } = await import(\"./gemini.js\");\n return new GeminiProvider({ apiKey: key, model: opts?.model, baseURL: opts?.baseURL });\n }\n case \"openrouter\": {\n if (!key) throw new Error(\"OpenRouter requires an API key. Set OPENROUTER_API_KEY or pass apiKey.\");\n const { OpenRouterProvider } = await import(\"./openrouter.js\");\n return new OpenRouterProvider({ apiKey: key, model: opts?.model, appName: \"noumen\" });\n }\n case \"bedrock\": {\n const { BedrockAnthropicProvider } = await import(\"./bedrock.js\");\n return new BedrockAnthropicProvider({ model: opts?.model, baseURL: opts?.baseURL });\n }\n case \"vertex\": {\n const { VertexAnthropicProvider } = await import(\"./vertex.js\");\n return new VertexAnthropicProvider({ model: opts?.model, baseURL: opts?.baseURL });\n }\n case \"ollama\": {\n const { OllamaProvider } = await import(\"./ollama.js\");\n const base = opts?.baseURL ?? (process.env.OLLAMA_HOST\n ? `${process.env.OLLAMA_HOST.replace(/\\/+$/, \"\")}/v1`\n : undefined);\n return new OllamaProvider({ model: opts?.model, baseURL: base });\n }\n default:\n throw new Error(`Unhandled provider: ${name}`);\n }\n}\n\n/**\n * Auto-detect provider from available environment variables.\n */\nexport async function detectProvider(): Promise<ProviderName | undefined> {\n if (process.env.ANTHROPIC_API_KEY) return \"anthropic\";\n if (process.env.OPENAI_API_KEY) return \"openai\";\n if (process.env.GEMINI_API_KEY) return \"gemini\";\n if (process.env.OPENROUTER_API_KEY) return \"openrouter\";\n if (process.env.AWS_ACCESS_KEY_ID || process.env.AWS_PROFILE) return \"bedrock\";\n if (process.env.GOOGLE_APPLICATION_CREDENTIALS || process.env.GCLOUD_PROJECT) return \"vertex\";\n if (process.env.OLLAMA_HOST) return \"ollama\";\n\n try {\n const host = process.env.OLLAMA_HOST ?? \"http://localhost:11434\";\n const res = await fetch(`${host.replace(/\\/+$/, \"\")}/api/tags`, {\n signal: AbortSignal.timeout(500),\n });\n if (res.ok) return \"ollama\";\n } catch { /* not running */ }\n\n return undefined;\n}\n"],"mappings":"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","names":[]}
|