openvibers/openvibe.run Commits
openvibe-shared v4.108.0 (was v4.107.4) (#172)
Changes
@@@ -99,7 +99,7 @@ placed from the Fabric's offers and actually runs — the poller in `server/jobs(`bot.job.dispatch`, audience `openvibe.bot`, minted from `OV_OAUTH_CLIENT_ID`/`OV_OAUTH_CLIENT_SECRET` against`OV_NETWORK_INTERNAL_URL` and cached until 60 s before expiry) and mirrors its answer. Unset the client secret andthe bridge is off: `/api/ready` skips the `bot` check and every job stays `queued`.--- `openvibe-contracts` v0.106.0, `openvibe-sdk` v0.74.0 and `openvibe-shared` v4.107.4 (package.json).++- `openvibe-contracts` v0.106.0, `openvibe-sdk` v0.74.0 and `openvibe-shared` v4.108.0 (package.json).## Capabilities and routes@@@ -254,5 +254,5 @@ until Run has a product surface; the vhost below is installed then.<!-- versions:start -->- openvibe-contracts: v0.250.0- openvibe-sdk: v0.82.0--- openvibe-shared: v4.107.4++- openvibe-shared: v4.108.0<!-- versions:end -->@@@ -9,11 +9,11 @@"domain": "openvibe.run","contracts": "openvibe-contracts v0.250.0","sdk": "openvibe-sdk v0.82.0",-- "shared": "openvibe-shared v4.107.4",++ "shared": "openvibe-shared v4.108.0","packages": ["openvibe-contracts v0.250.0","openvibe-sdk v0.82.0",-- "openvibe-shared v4.107.4"++ "openvibe-shared v4.108.0"],"capabilities": ["run.job.submit",@@@ -17,7 +17,7 @@"iovalkey": "^0.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.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": {@@@ -1191,9 +1191,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",@@@ -28,7 +28,7 @@"iovalkey": "^0.4.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.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": {@@@ -14,23 +14,26 @@ const NODE_REPO = 'https://github.com/OpenVibers/OpenVibe.Node';const PAGES = ['/', '/updates', '/terms', '/privacy', '/dmca'];function sections(base) {-- return [-- { title: 'Pages', links: [-- { title: 'OpenVibe.Run', url: `${base}/`, note: 'what a job is, how it runs, and the API in brief' },++ return {++ main: [++ { title: 'Pages', links: [++ { title: 'OpenVibe.Run', url: `${base}/`, note: 'what a job is, how it runs, and the API in brief' },++ ] },++ ],++ optional: [{ title: 'What shipped', url: `${base}/updates`, note: 'every change deployed, newest first' },-- { title: 'Terms', url: `${base}/terms` },-- { title: 'Privacy', url: `${base}/privacy` },-- { title: 'DMCA', url: `${base}/dmca` },-- ] },-- { title: 'Docs', links: [++ { title: 'Terms', url: `${base}/terms`, html: true },++ { title: 'Privacy', url: `${base}/privacy`, html: true },++ { title: 'DMCA', url: `${base}/dmca`, html: true },{ title: 'OpenVibe.Run on GitHub', url: REPO, note: 'the source and the README: the job API, its states and its capabilities' },{ title: 'OpenVibe Node', url: NODE_REPO, note: 'pair your own machine to run jobs' },-- ] },-- ];++ ],++ };}function llmsTxt(config) {-- return seo.llmsTxt({ name: home.SITE_NAME, summary: home.DESCRIPTION, sections: sections(config.baseUrl) });++ const { main, optional } = sections(config.baseUrl);++ return seo.llmsTxt({ name: home.SITE_NAME, summary: home.DESCRIPTION, markdown: true, base: config.baseUrl, sections: main, optional });}function llmsFull(config) {@@@ -18,7 +18,9 @@ const KEY = require('crypto').randomBytes(16).toString('hex');assert.strictEqual(r.status, 200);assert.match(r.headers.get('content-type'), /^text\/plain/);assert.match(r.text, /^# OpenVibe\.Run\n/);++ assert.ok(r.text.includes('http://run.test/index.md'), 'home link points at its Markdown twin');assert.ok(r.text.includes('http://run.test/terms'));++ assert.ok(r.text.includes('\n## Optional\n'), 'llms.txt has an Optional section');assert.ok(!/\/api\/|\/internal\/|\/admin|\/jobs|\/stream/.test(r.text), 'no machine route is listed');});await check('/llms-full.txt answers 200 text/plain within maxBytes and carries the front page text', async () => {
@@ -99,7 +99,7 @@ placed from the Fabric's offers and actually runs — the poller in `server/jobs
@@ -99,7 +99,7 @@ placed from the Fabric's offers and actually runs — the poller in `server/jobs
(`bot.job.dispatch`, audience `openvibe.bot`, minted from `OV_OAUTH_CLIENT_ID`/`OV_OAUTH_CLIENT_SECRET` against
(`bot.job.dispatch`, audience `openvibe.bot`, minted from `OV_OAUTH_CLIENT_ID`/`OV_OAUTH_CLIENT_SECRET` against
`OV_NETWORK_INTERNAL_URL` and cached until 60 s before expiry) and mirrors its answer. Unset the client secret and
`OV_NETWORK_INTERNAL_URL` and cached until 60 s before expiry) and mirrors its answer. Unset the client secret and
the bridge is off: `/api/ready` skips the `bot` check and every job stays `queued`.
the bridge is off: `/api/ready` skips the `bot` check and every job stays `queued`.
-- `openvibe-contracts` v0.106.0, `openvibe-sdk` v0.74.0 and `openvibe-shared` v4.107.4 (package.json).
+- `openvibe-contracts` v0.106.0, `openvibe-sdk` v0.74.0 and `openvibe-shared` v4.108.0 (package.json).
## Capabilities and routes
## Capabilities and routes
@@ -254,5 +254,5 @@ until Run has a product surface; the vhost below is installed then.
@@ -254,5 +254,5 @@ until Run has a product surface; the vhost below is installed then.
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.250.0
- openvibe-contracts: v0.250.0
- openvibe-sdk: v0.82.0
- openvibe-sdk: v0.82.0
-- openvibe-shared: v4.107.4
+- openvibe-shared: v4.108.0
<!-- versions:end -->
<!-- versions:end -->
@@ -9,11 +9,11 @@
@@ -9,11 +9,11 @@
"domain": "openvibe.run",
"domain": "openvibe.run",
"contracts": "openvibe-contracts v0.250.0",
"contracts": "openvibe-contracts v0.250.0",
"sdk": "openvibe-sdk v0.82.0",
"sdk": "openvibe-sdk v0.82.0",
- "shared": "openvibe-shared v4.107.4",
+ "shared": "openvibe-shared v4.108.0",
"packages": [
"packages": [
"openvibe-contracts v0.250.0",
"openvibe-contracts v0.250.0",
"openvibe-sdk v0.82.0",
"openvibe-sdk v0.82.0",
- "openvibe-shared v4.107.4"
+ "openvibe-shared v4.108.0"
],
],
"capabilities": [
"capabilities": [
"run.job.submit",
"run.job.submit",
@@ -17,7 +17,7 @@
@@ -17,7 +17,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.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"
"pg": "^8.23.0"
},
},
"devDependencies": {
"devDependencies": {
@@ -1191,9 +1191,9 @@
@@ -1191,9 +1191,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"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",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
@@ -28,7 +28,7 @@
@@ -28,7 +28,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.250.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.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"
"pg": "^8.23.0"
},
},
"devDependencies": {
"devDependencies": {
@@ -14,23 +14,26 @@ const NODE_REPO = 'https://github.com/OpenVibers/OpenVibe.Node';
@@ -14,23 +14,26 @@ const NODE_REPO = 'https://github.com/OpenVibers/OpenVibe.Node';
const PAGES = ['/', '/updates', '/terms', '/privacy', '/dmca'];
const PAGES = ['/', '/updates', '/terms', '/privacy', '/dmca'];
function sections(base) {
function sections(base) {
- return [
- { title: 'Pages', links: [
- { title: 'OpenVibe.Run', url: `${base}/`, note: 'what a job is, how it runs, and the API in brief' },
+ return {
+ main: [
+ { title: 'Pages', links: [
+ { title: 'OpenVibe.Run', url: `${base}/`, note: 'what a job is, how it runs, and the API in brief' },
+ ] },
+ ],
+ optional: [
{ title: 'What shipped', url: `${base}/updates`, note: 'every change deployed, newest first' },
{ title: 'What shipped', url: `${base}/updates`, note: 'every change deployed, newest first' },
- { title: 'Terms', url: `${base}/terms` },
- { title: 'Privacy', url: `${base}/privacy` },
- { title: 'DMCA', url: `${base}/dmca` },
- ] },
- { title: 'Docs', links: [
+ { title: 'Terms', url: `${base}/terms`, html: true },
+ { title: 'Privacy', url: `${base}/privacy`, html: true },
+ { title: 'DMCA', url: `${base}/dmca`, html: true },
{ title: 'OpenVibe.Run on GitHub', url: REPO, note: 'the source and the README: the job API, its states and its capabilities' },
{ title: 'OpenVibe.Run on GitHub', url: REPO, note: 'the source and the README: the job API, its states and its capabilities' },
{ title: 'OpenVibe Node', url: NODE_REPO, note: 'pair your own machine to run jobs' },
{ title: 'OpenVibe Node', url: NODE_REPO, note: 'pair your own machine to run jobs' },
- ] },
- ];
+ ],
+ };
}
}
function llmsTxt(config) {
function llmsTxt(config) {
- return seo.llmsTxt({ name: home.SITE_NAME, summary: home.DESCRIPTION, sections: sections(config.baseUrl) });
+ const { main, optional } = sections(config.baseUrl);
+ return seo.llmsTxt({ name: home.SITE_NAME, summary: home.DESCRIPTION, markdown: true, base: config.baseUrl, sections: main, optional });
}
}
function llmsFull(config) {
function llmsFull(config) {
@@ -18,7 +18,9 @@ const KEY = require('crypto').randomBytes(16).toString('hex');
@@ -18,7 +18,9 @@ const KEY = require('crypto').randomBytes(16).toString('hex');
assert.strictEqual(r.status, 200);
assert.strictEqual(r.status, 200);
assert.match(r.headers.get('content-type'), /^text\/plain/);
assert.match(r.headers.get('content-type'), /^text\/plain/);
assert.match(r.text, /^# OpenVibe\.Run\n/);
assert.match(r.text, /^# OpenVibe\.Run\n/);
+ assert.ok(r.text.includes('http://run.test/index.md'), 'home link points at its Markdown twin');
assert.ok(r.text.includes('http://run.test/terms'));
assert.ok(r.text.includes('http://run.test/terms'));
+ assert.ok(r.text.includes('\n## Optional\n'), 'llms.txt has an Optional section');
assert.ok(!/\/api\/|\/internal\/|\/admin|\/jobs|\/stream/.test(r.text), 'no machine route is listed');
assert.ok(!/\/api\/|\/internal\/|\/admin|\/jobs|\/stream/.test(r.text), 'no machine route is listed');
});
});
await check('/llms-full.txt answers 200 text/plain within maxBytes and carries the front page text', async () => {
await check('/llms-full.txt answers 200 text/plain within maxBytes and carries the front page text', async () => {