openvibers/openvibe.search Commits

openvibe-shared v4.108.0 (was v4.107.4) (#215)

OP OpenVibers committed 10 days ago · 922eaadf01 · 6 files, +24 −20

* openvibe-shared v4.108.0 (was v4.107.4)

Opened by scripts/pin-bump.js in OpenVibers/OpenVibe.Shared after the v4.108.0 release.

* llms.txt links each page at its Markdown twin, with an ## Optional section (AGT-5)

* llms.txt: the JSON API stays a main section, not Optional (AGT-5 review)

Changes

ddiff --git a/README.md b/README.md
iindex e542493..438c5b9 100644
---- a/README.md
++++ b/README.md
@@@ -507,5 +507,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
- openvibe-contracts: v0.225.0
- openvibe-sdk: v0.82.0
--- openvibe-shared: v4.107.4
++- openvibe-shared: v4.108.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex f0a0a87..8667a4c 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -9,7 +9,7 @@
"domain": "search.openvibe.network (vhost in deploy/nginx; the service manifest records the search page and query API as public since 2026-09-23)",
"contracts": "openvibe-contracts v0.225.0",
"sdk": "openvibe-sdk v0.82.0",
-- "shared": "openvibe-shared v4.107.4",
++ "shared": "openvibe-shared v4.108.0",
"capabilities": [
"search.document.write",
"search.query.delegate",
ddiff --git a/package-lock.json b/package-lock.json
iindex e0f5a8d..a20c381 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -15,7 +15,7 @@
"express": "^4.21.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.225.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0"
},
"devDependencies": {
@@@ -1069,9 +1069,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.107.4",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
-- "integrity": "sha512-tThN0m3KMncEHVcBOvE+ysHjsZTlVIDLG1P+/i2Mulmxfc/AUpebAXhpWWrut50OChZ8o+HeePxsSrPI8mUQOQ==",
++ "version": "4.108.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
++ "integrity": "sha512-NPzwjxpzGIpFpIm4uw3+VwHfsxbJ2+cD9yuhRzSwolSwqv2kCmwaVtHJ0DA9gKO3K8PCBfIP3UpKzpuSbYEJ+g==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0",
ddiff --git a/package.json b/package.json
iindex 0780fdd..1defaab 100644
---- a/package.json
++++ b/package.json
@@@ -27,7 +27,7 @@
"express": "^4.21.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.225.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0"
},
"engines": {
ddiff --git a/server/web/page.js b/server/web/page.js
iindex 0aaac7d..2773e24 100644
---- a/server/web/page.js
++++ b/server/web/page.js
@@@ -126,25 +126,27 @@ function llmsTxt(origin) {
return seo.llmsTxt({
name: SITE_NAME,
summary: `The search service of the OpenVibe network: one permission-aware index over what the network's services have published. ${SITE_DESCRIPTION}`,
-- details: 'The index holds only what the services have sent so far (Alpha: it is young). Anonymous callers see public, published, indexable documents only; a browser with an ov_token cookie also gets that person\'s own restricted matches. Private, draft and deleted documents are never listed or returned, and a document that is removed or made private leaves the results at once. Result pages are noindex; this file lists pages and public endpoints only, never a person\'s saved searches or the owner API.',
++ details: 'The index holds only what the services have sent so far (Alpha: it is young). Anonymous callers see public, published, indexable documents only; a browser with an ov_token cookie also gets that person\'s own restricted matches. Private, draft and deleted documents are never listed or returned, and a document that is removed or made private leaves the results at once. Result pages are noindex; this file lists pages and public endpoints only, never a person\'s saved searches or the owner API. MCP server: POST https://search.openvibe.network/mcp (JSON-RPC 2.0): agents call openvibe_search and openvibe_search_providers.',
++ markdown: true,
++ base: origin,
sections: [
{ title: 'Pages', links: [
{ title: 'Search', url: `${origin}/`, note: 'the search page; ?q= and ?owner=/?type= search, results are noindex' },
-- { title: 'What shipped', url: `${origin}/updates`, note: "the site's update log" },
] },
-- { title: 'Machine-readable', links: [
++ // A JSON API is what an agent came for, not something to skip (AGT-5 review).
++ { title: 'API', links: [
{ title: 'Search API', url: `${origin}/api/v1/search?q=`, note: 'JSON results; anonymous = public documents only' },
-- { title: 'MCP endpoint', url: `${origin}/mcp`, note: 'Streamable HTTP MCP (JSON-RPC 2.0): agents call openvibe_search and openvibe_search_providers' },
{ title: 'Suggest API', url: `${origin}/api/v1/suggest?q=`, note: 'title suggestions (JSON)' },
-- { title: 'Sitemap', url: `${origin}/sitemap.xml` },
-- { title: 'robots.txt', url: `${origin}/robots.txt` },
-- { title: 'Release', url: `${origin}/release.json`, note: 'the deployed release manifest (JSON)' },
-- ] },
-- { title: 'The network', links: [
-- { title: 'OpenVibe.Network', url: 'https://openvibe.network/', note: 'accounts and the network directory' },
-- { title: 'Source', url: 'https://github.com/OpenVibers/OpenVibe.Search' },
] },
],
++ optional: [
++ { title: 'What shipped', url: `${origin}/updates`, note: "the site's update log" },
++ { title: 'Sitemap', url: `${origin}/sitemap.xml` },
++ { title: 'robots.txt', url: `${origin}/robots.txt` },
++ { title: 'Release', url: `${origin}/release.json`, note: 'the deployed release manifest (JSON)' },
++ { title: 'OpenVibe.Network', url: 'https://openvibe.network/', note: 'accounts and the network directory' },
++ { title: 'Source', url: 'https://github.com/OpenVibers/OpenVibe.Search' },
++ ],
});
}
ddiff --git a/test/discovery.test.js b/test/discovery.test.js
iindex bb516b1..dd6f9c2 100644
---- a/test/discovery.test.js
++++ b/test/discovery.test.js
@@@ -30,10 +30,12 @@ t('GET /llms.txt: what the site is, its public pages and its public endpoints, c
assert.match(r.headers.get('content-type'), /text\/plain/);
assert.strictEqual(r.headers.get('cache-control'), 'public, max-age=3600, stale-while-revalidate=3600');
assert.match(r.text, /^# OpenVibe\.Search/m);
-- assert.ok(r.text.includes(`- [Search](${origin()}/)`), 'the front page');
-- assert.ok(r.text.includes(`(${origin()}/updates)`), 'the update log');
++ assert.ok(r.text.includes(`- [Search](${origin()}/index.md)`), 'the front page');
++ assert.ok(r.text.includes(`(${origin()}/updates.md)`), 'the update log');
assert.ok(r.text.includes(`(${origin()}/api/v1/search?q=)`), 'the public query API');
assert.ok(r.text.includes(`(${origin()}/sitemap.xml)`));
++ assert.ok(r.text.includes('\n## Optional\n'), 'llms.txt has an Optional section');
++ assert.ok(r.text.includes('MCP server: POST https://search.openvibe.network/mcp (JSON-RPC 2.0)'), 'MCP endpoint is folded into the note');
// Nothing private or per-user: no saved searches, no owner API, no Events webhook.
assert.ok(!/saved-searches|\/api\/v1\/owners|\/internal\/events/.test(r.text));
});