@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.
Files changed (44) hide show
  1. package/dist/agent/AgentRunner.d.ts +1 -0
  2. package/dist/agent/AgentRunner.d.ts.map +1 -1
  3. package/dist/agent/AgentRunner.js +24 -1
  4. package/dist/agent/AgentRunner.js.map +1 -1
  5. package/dist/config/ConfigLoader.d.ts.map +1 -1
  6. package/dist/config/ConfigLoader.js +17 -3
  7. package/dist/config/ConfigLoader.js.map +1 -1
  8. package/dist/config/ConfigManager.d.ts.map +1 -1
  9. package/dist/config/ConfigManager.js +13 -2
  10. package/dist/config/ConfigManager.js.map +1 -1
  11. package/dist/config/ConfigSchema.d.ts +8 -2
  12. package/dist/config/ConfigSchema.d.ts.map +1 -1
  13. package/dist/config/ConfigSchema.js.map +1 -1
  14. package/dist/config/MarifoldOpenAICompatProvider.d.ts +1 -1
  15. package/dist/config/MarifoldOpenAICompatProvider.d.ts.map +1 -1
  16. package/dist/config/MarifoldOpenAICompatProvider.js +8 -6
  17. package/dist/config/MarifoldOpenAICompatProvider.js.map +1 -1
  18. package/dist/config/ProviderFactory.d.ts +6 -4
  19. package/dist/config/ProviderFactory.d.ts.map +1 -1
  20. package/dist/config/ProviderFactory.js +41 -6
  21. package/dist/config/ProviderFactory.js.map +1 -1
  22. package/dist/index.d.ts +3 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +6 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/runtime/MarifoldRuntime.d.ts +5 -3
  27. package/dist/runtime/MarifoldRuntime.d.ts.map +1 -1
  28. package/dist/runtime/MarifoldRuntime.js +103 -33
  29. package/dist/runtime/MarifoldRuntime.js.map +1 -1
  30. package/dist/runtime/MarifoldTypes.d.ts +1 -1
  31. package/dist/runtime/MarifoldTypes.d.ts.map +1 -1
  32. package/dist/runtime/NativeWebSearch.d.ts +9 -0
  33. package/dist/runtime/NativeWebSearch.d.ts.map +1 -0
  34. package/dist/runtime/NativeWebSearch.js +17 -0
  35. package/dist/runtime/NativeWebSearch.js.map +1 -0
  36. package/dist/search/OllamaSearchBackend.d.ts +22 -0
  37. package/dist/search/OllamaSearchBackend.d.ts.map +1 -0
  38. package/dist/search/OllamaSearchBackend.js +64 -0
  39. package/dist/search/OllamaSearchBackend.js.map +1 -0
  40. package/dist/search/createSearchBackend.d.ts +4 -3
  41. package/dist/search/createSearchBackend.d.ts.map +1 -1
  42. package/dist/search/createSearchBackend.js +13 -3
  43. package/dist/search/createSearchBackend.js.map +1 -1
  44. 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
- * Future tier-1 "native" model search (provider server-side web_search) resolves
12
- * in priest, not here marifold would simply skip registering its own
13
- * web_search tool for such a profile. See docs/roadmap.
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;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,aAAa,CAWlF"}
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
- * Future tier-1 "native" model search (provider server-side web_search) resolves
15
- * in priest, not here marifold would simply skip registering its own
16
- * web_search tool for such a profile. See docs/roadmap.
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;AAGtD;;;;;;;;;;;GAWG;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,OAAO,IAAI,qCAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC"}
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.64.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.1",
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",