@marifold/core 0.64.0 → 0.65.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/dist/agent/AgentRunner.d.ts +1 -0
- package/dist/agent/AgentRunner.d.ts.map +1 -1
- package/dist/agent/AgentRunner.js +24 -1
- package/dist/agent/AgentRunner.js.map +1 -1
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +17 -3
- package/dist/config/ConfigLoader.js.map +1 -1
- package/dist/config/ConfigManager.d.ts.map +1 -1
- package/dist/config/ConfigManager.js +13 -2
- package/dist/config/ConfigManager.js.map +1 -1
- package/dist/config/ConfigSchema.d.ts +8 -2
- package/dist/config/ConfigSchema.d.ts.map +1 -1
- package/dist/config/ConfigSchema.js.map +1 -1
- package/dist/config/MarifoldOpenAICompatProvider.d.ts +1 -1
- package/dist/config/MarifoldOpenAICompatProvider.d.ts.map +1 -1
- package/dist/config/MarifoldOpenAICompatProvider.js +8 -6
- package/dist/config/MarifoldOpenAICompatProvider.js.map +1 -1
- package/dist/config/ProviderFactory.d.ts +6 -4
- package/dist/config/ProviderFactory.d.ts.map +1 -1
- package/dist/config/ProviderFactory.js +41 -6
- package/dist/config/ProviderFactory.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/runtime/MarifoldRuntime.d.ts +5 -3
- package/dist/runtime/MarifoldRuntime.d.ts.map +1 -1
- package/dist/runtime/MarifoldRuntime.js +103 -33
- package/dist/runtime/MarifoldRuntime.js.map +1 -1
- package/dist/runtime/MarifoldTypes.d.ts +1 -1
- package/dist/runtime/MarifoldTypes.d.ts.map +1 -1
- package/dist/runtime/NativeWebSearch.d.ts +9 -0
- package/dist/runtime/NativeWebSearch.d.ts.map +1 -0
- package/dist/runtime/NativeWebSearch.js +17 -0
- package/dist/runtime/NativeWebSearch.js.map +1 -0
- package/dist/search/OllamaSearchBackend.d.ts +22 -0
- package/dist/search/OllamaSearchBackend.d.ts.map +1 -0
- package/dist/search/OllamaSearchBackend.js +64 -0
- package/dist/search/OllamaSearchBackend.js.map +1 -0
- package/dist/search/createSearchBackend.d.ts +4 -3
- package/dist/search/createSearchBackend.d.ts.map +1 -1
- package/dist/search/createSearchBackend.js +13 -3
- package/dist/search/createSearchBackend.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OllamaSearchBackend = void 0;
|
|
4
|
+
const proxy_1 = require("../util/proxy");
|
|
5
|
+
const OLLAMA_WEB_SEARCH_URL = 'https://ollama.com/api/web_search';
|
|
6
|
+
const DEFAULT_API_KEY_ENV = 'OLLAMA_API_KEY';
|
|
7
|
+
const DEFAULT_MAX_RESULTS = 5;
|
|
8
|
+
const MAX_RESULTS = 10;
|
|
9
|
+
/** Caller-executed Ollama Cloud search. This is deliberately a Marifold
|
|
10
|
+
* fallback backend rather than a local-model capability: queries leave the
|
|
11
|
+
* machine for ollama.com and require an account API key. */
|
|
12
|
+
class OllamaSearchBackend {
|
|
13
|
+
apiKey;
|
|
14
|
+
apiKeyEnv;
|
|
15
|
+
proxy;
|
|
16
|
+
maxResults;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.apiKeyEnv = options.apiKeyEnv || DEFAULT_API_KEY_ENV;
|
|
19
|
+
this.apiKey = options.apiKey ?? process.env[this.apiKeyEnv];
|
|
20
|
+
this.proxy = options.proxy || process.env.HTTPS_PROXY || process.env.https_proxy || undefined;
|
|
21
|
+
this.maxResults = options.maxResults ?? DEFAULT_MAX_RESULTS;
|
|
22
|
+
}
|
|
23
|
+
async search(query, maxResults = this.maxResults) {
|
|
24
|
+
if (!this.apiKey) {
|
|
25
|
+
throw new Error(`Ollama web search requires an API key in ${this.apiKeyEnv} or web_search.api_key.`);
|
|
26
|
+
}
|
|
27
|
+
const limit = Math.min(MAX_RESULTS, Math.max(1, maxResults));
|
|
28
|
+
const init = {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: {
|
|
31
|
+
authorization: `Bearer ${this.apiKey}`,
|
|
32
|
+
'content-type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({ query, max_results: limit }),
|
|
35
|
+
};
|
|
36
|
+
const dispatcher = (0, proxy_1.proxyDispatcher)(this.proxy);
|
|
37
|
+
if (dispatcher) {
|
|
38
|
+
init.dispatcher = dispatcher;
|
|
39
|
+
}
|
|
40
|
+
const response = await fetch(OLLAMA_WEB_SEARCH_URL, init);
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const detail = await safeText(response);
|
|
43
|
+
throw new Error(`Ollama web search failed: HTTP ${response.status}${detail ? ` — ${detail}` : ''}`);
|
|
44
|
+
}
|
|
45
|
+
const payload = await response.json();
|
|
46
|
+
return (payload.results ?? [])
|
|
47
|
+
.slice(0, limit)
|
|
48
|
+
.map(result => ({
|
|
49
|
+
title: (result.title ?? '').trim(),
|
|
50
|
+
url: result.url ?? '',
|
|
51
|
+
snippet: (result.content ?? '').trim(),
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.OllamaSearchBackend = OllamaSearchBackend;
|
|
56
|
+
async function safeText(response) {
|
|
57
|
+
try {
|
|
58
|
+
return (await response.text()).slice(0, 200);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return '';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=OllamaSearchBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OllamaSearchBackend.js","sourceRoot":"","sources":["../../src/search/OllamaSearchBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,12 @@ import { SearchBackend } from './SearchBackend';
|
|
|
6
6
|
* Priority is a config-time selection of ONE backend (not a runtime retry
|
|
7
7
|
* cascade):
|
|
8
8
|
* - `firecrawl` → FirecrawlBackend (BYOK; AI-ready scraped results)
|
|
9
|
+
* - `ollama` → OllamaSearchBackend (BYOK; Ollama Cloud search)
|
|
9
10
|
* - else → DuckDuckGoBackend (keyless best-effort floor)
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Provider-hosted model search resolves separately through the provider/model
|
|
13
|
+
* capability matrix; Marifold skips registering this caller-executed tool
|
|
14
|
+
* while that native path is active.
|
|
14
15
|
*/
|
|
15
16
|
export declare function createSearchBackend(config: MarifoldWebSearchConfig): SearchBackend;
|
|
16
17
|
//# sourceMappingURL=createSearchBackend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSearchBackend.d.ts","sourceRoot":"","sources":["../../src/search/createSearchBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createSearchBackend.d.ts","sourceRoot":"","sources":["../../src/search/createSearchBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,aAAa,CAmBlF"}
|
|
@@ -3,17 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSearchBackend = createSearchBackend;
|
|
4
4
|
const DuckDuckGoBackend_1 = require("./DuckDuckGoBackend");
|
|
5
5
|
const FirecrawlBackend_1 = require("./FirecrawlBackend");
|
|
6
|
+
const OllamaSearchBackend_1 = require("./OllamaSearchBackend");
|
|
6
7
|
/**
|
|
7
8
|
* Select the active web-search backend from the resolved [web_search] config.
|
|
8
9
|
*
|
|
9
10
|
* Priority is a config-time selection of ONE backend (not a runtime retry
|
|
10
11
|
* cascade):
|
|
11
12
|
* - `firecrawl` → FirecrawlBackend (BYOK; AI-ready scraped results)
|
|
13
|
+
* - `ollama` → OllamaSearchBackend (BYOK; Ollama Cloud search)
|
|
12
14
|
* - else → DuckDuckGoBackend (keyless best-effort floor)
|
|
13
15
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* Provider-hosted model search resolves separately through the provider/model
|
|
17
|
+
* capability matrix; Marifold skips registering this caller-executed tool
|
|
18
|
+
* while that native path is active.
|
|
17
19
|
*/
|
|
18
20
|
function createSearchBackend(config) {
|
|
19
21
|
if (config.provider === 'firecrawl') {
|
|
@@ -25,6 +27,14 @@ function createSearchBackend(config) {
|
|
|
25
27
|
maxResults: config.maxResults,
|
|
26
28
|
});
|
|
27
29
|
}
|
|
30
|
+
if (config.provider === 'ollama') {
|
|
31
|
+
return new OllamaSearchBackend_1.OllamaSearchBackend({
|
|
32
|
+
apiKey: config.apiKey,
|
|
33
|
+
apiKeyEnv: config.apiKeyEnv,
|
|
34
|
+
proxy: config.proxy,
|
|
35
|
+
maxResults: config.maxResults,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
28
38
|
return new DuckDuckGoBackend_1.DuckDuckGoBackend({ proxy: config.proxy });
|
|
29
39
|
}
|
|
30
40
|
//# sourceMappingURL=createSearchBackend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSearchBackend.js","sourceRoot":"","sources":["../../src/search/createSearchBackend.ts"],"names":[],"mappings":";;;AACA,2DAAwD;AACxD,yDAAsD;
|
|
1
|
+
{"version":3,"file":"createSearchBackend.js","sourceRoot":"","sources":["../../src/search/createSearchBackend.ts"],"names":[],"mappings":";;;AACA,2DAAwD;AACxD,yDAAsD;AACtD,+DAA4D;AAG5D;;;;;;;;;;;;GAYG;AACH,6BAAoC,MAA+B;IACjE,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,IAAI,mCAAgB,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,IAAI,yCAAmB,CAAC;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,qCAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marifold/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.65.0",
|
|
4
4
|
"description": "Core runtime for Marifold",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@priest-ai/core": "^3.0
|
|
11
|
+
"@priest-ai/core": "^3.1.0",
|
|
12
12
|
"better-sqlite3": "^13.0.1",
|
|
13
13
|
"croner": "^10.0.1",
|
|
14
14
|
"duck-duck-scrape": "^2.2.7",
|