openvibers/openvibe.tools Commits
openvibe-shared v4.113.0 (was v4.112.1) (#215)
Changes
@@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usagereadings)- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))--- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.112.1, pinned++- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.113.0, pinnedby release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path## Capabilities@@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when<!-- versions:start -->- openvibe-contracts: v0.289.1- openvibe-sdk: v0.82.0--- openvibe-shared: v4.112.1++- openvibe-shared: v4.113.0<!-- versions:end -->@@@ -18,7 +18,7 @@"domain": "openvibe.tools and *.openvibe.tools","contracts": "openvibe-contracts v0.289.1 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)","sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",-- "shared": "openvibe-shared v4.112.1 (each app's package.json; the root package.json pins none)",++ "shared": "openvibe-shared v4.113.0 (each app's package.json; the root package.json pins none)","capabilities": ["tools.job.create","tools.job.read",@@@ -25,7 +25,7 @@"multer": "^1.4.5-lts.1","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","uuid": "^11.1.0"}}@@@ -24,7 +24,7 @@"multer": "^1.4.5-lts.1","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","pdf-lib": "^1.17.1","sharp": "^0.33.5","uuid": "^11.1.0"@@@ -20,6 +20,6 @@"express-rate-limit": "^7.1.5","helmet": "^7.1.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.112.1"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0"}}@@@ -23,7 +23,7 @@"jsonwebtoken": "^9.0.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","bwip-js": "4.11.4","zxing-wasm": "3.1.5"}@@@ -24,7 +24,7 @@"multer": "^1.4.5-lts.1","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","sharp": "^0.33.5","to-ico": "^1.1.5","uuid": "^11.1.0"@@@ -15,7 +15,7 @@"pg": "^8.23.0","@electric-sql/pglite": "^0.5.8","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","cheerio": "^1.0.0-rc.12","cookie-parser": "^1.4.7","cors": "^2.8.5",@@@ -20,7 +20,7 @@"express-rate-limit": "^7.1.5","dotenv": "^16.3.1","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.112.1"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0"},"license": "MIT"}@@@ -21,7 +21,7 @@"pg": "^8.23.0","@electric-sql/pglite": "^0.5.8","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.112.1",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0","jsonwebtoken": "^9.0.2","uuid": "^11.1.0"}nnew file mode 100644@@@ -0,0 +1,21 @@++-- phase: expand++-- The bot API counters of openvibe-shared 4.113.0 (2026-11-06): AnalyticsTrackerPg's option++-- countBotApiAtIngest writes a bot's API call into analytics_bot_api_hourly/daily instead of a raw++-- analytics_events row, and aggregate() adds those hits to the hour's/day's rollup. The option is off++-- in the tools apps, but aggregate() reads both tables, so they exist from now on.++--++-- The DDL is analyticsSchema() from openvibe-shared/analytics/pg.js, copied verbatim like 0002.++CREATE TABLE IF NOT EXISTS analytics_bot_api_hourly (++ id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,++ service text NOT NULL, hour text NOT NULL,++ endpoint_group text NOT NULL, status_class text NOT NULL, bot_family text NOT NULL,++ hits bigint NOT NULL DEFAULT 0,++ UNIQUE (service, hour, endpoint_group, status_class, bot_family)++);++CREATE TABLE IF NOT EXISTS analytics_bot_api_daily (++ id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,++ service text NOT NULL, date text NOT NULL,++ endpoint_group text NOT NULL, status_class text NOT NULL, bot_family text NOT NULL,++ hits bigint NOT NULL DEFAULT 0,++ UNIQUE (service, date, endpoint_group, status_class, bot_family)++);
@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).
@@ -31,7 +31,7 @@ offline against the Network's public key (JWKS).
OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usage
OpenVibe.Search (tool documents), OpenVibe.Community (the paste hand-over), OpenVibe.Billing (job usage
readings)
readings)
- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))
- host programs some tools need (ffmpeg, yt-dlp, qpdf, poppler, libheif; [Host packages](#host-packages-some-tools-need))
-- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.112.1, pinned
+- in each app: `openvibe-contracts` v0.92.0 (img, audio, docs, gateway), `openvibe-sdk` v0.12.0 and `openvibe-shared` v4.113.0, pinned
by release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path
by release tarball, and `apps/_shared` (openvibe-tools-shared) by relative path
## Capabilities
## Capabilities
@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when
@@ -642,5 +642,5 @@ counters and salt use Valkey through `VALKEY_URL`, with process-local state when
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.289.1
- openvibe-contracts: v0.289.1
- openvibe-sdk: v0.82.0
- openvibe-sdk: v0.82.0
-- openvibe-shared: v4.112.1
+- openvibe-shared: v4.113.0
<!-- versions:end -->
<!-- versions:end -->
@@ -18,7 +18,7 @@
@@ -18,7 +18,7 @@
"domain": "openvibe.tools and *.openvibe.tools",
"domain": "openvibe.tools and *.openvibe.tools",
"contracts": "openvibe-contracts v0.289.1 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)",
"contracts": "openvibe-contracts v0.289.1 (the gateway, img, audio and docs apps' package.json; the root package.json pins none)",
"sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",
"sdk": "openvibe-sdk v0.82.0 (the gateway's package.json; the other apps are still on v0.67.0)",
- "shared": "openvibe-shared v4.112.1 (each app's package.json; the root package.json pins none)",
+ "shared": "openvibe-shared v4.113.0 (each app's package.json; the root package.json pins none)",
"capabilities": [
"capabilities": [
"tools.job.create",
"tools.job.create",
"tools.job.read",
"tools.job.read",
@@ -25,7 +25,7 @@
@@ -25,7 +25,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
}
}
}
}
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"pdf-lib": "^1.17.1",
"pdf-lib": "^1.17.1",
"sharp": "^0.33.5",
"sharp": "^0.33.5",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
@@ -20,6 +20,6 @@
@@ -20,6 +20,6 @@
"express-rate-limit": "^7.1.5",
"express-rate-limit": "^7.1.5",
"helmet": "^7.1.0",
"helmet": "^7.1.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.112.1"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0"
}
}
}
}
@@ -23,7 +23,7 @@
@@ -23,7 +23,7 @@
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"bwip-js": "4.11.4",
"bwip-js": "4.11.4",
"zxing-wasm": "3.1.5"
"zxing-wasm": "3.1.5"
}
}
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.289.1",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"sharp": "^0.33.5",
"sharp": "^0.33.5",
"to-ico": "^1.1.5",
"to-ico": "^1.1.5",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
@@ -15,7 +15,7 @@
@@ -15,7 +15,7 @@
"pg": "^8.23.0",
"pg": "^8.23.0",
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"cheerio": "^1.0.0-rc.12",
"cheerio": "^1.0.0-rc.12",
"cookie-parser": "^1.4.7",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"cors": "^2.8.5",
@@ -20,7 +20,7 @@
@@ -20,7 +20,7 @@
"express-rate-limit": "^7.1.5",
"express-rate-limit": "^7.1.5",
"dotenv": "^16.3.1",
"dotenv": "^16.3.1",
"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.112.1"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0"
},
},
"license": "MIT"
"license": "MIT"
}
}
@@ -21,7 +21,7 @@
@@ -21,7 +21,7 @@
"pg": "^8.23.0",
"pg": "^8.23.0",
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"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.112.1",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.113.0",
"jsonwebtoken": "^9.0.2",
"jsonwebtoken": "^9.0.2",
"uuid": "^11.1.0"
"uuid": "^11.1.0"
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+-- phase: expand
+-- The bot API counters of openvibe-shared 4.113.0 (2026-11-06): AnalyticsTrackerPg's option
+-- countBotApiAtIngest writes a bot's API call into analytics_bot_api_hourly/daily instead of a raw
+-- analytics_events row, and aggregate() adds those hits to the hour's/day's rollup. The option is off
+-- in the tools apps, but aggregate() reads both tables, so they exist from now on.
+--
+-- The DDL is analyticsSchema() from openvibe-shared/analytics/pg.js, copied verbatim like 0002.
+CREATE TABLE IF NOT EXISTS analytics_bot_api_hourly (
+ id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+ service text NOT NULL, hour text NOT NULL,
+ endpoint_group text NOT NULL, status_class text NOT NULL, bot_family text NOT NULL,
+ hits bigint NOT NULL DEFAULT 0,
+ UNIQUE (service, hour, endpoint_group, status_class, bot_family)
+);
+CREATE TABLE IF NOT EXISTS analytics_bot_api_daily (
+ id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+ service text NOT NULL, date text NOT NULL,
+ endpoint_group text NOT NULL, status_class text NOT NULL, bot_family text NOT NULL,
+ hits bigint NOT NULL DEFAULT 0,
+ UNIQUE (service, date, endpoint_group, status_class, bot_family)
+);