memtrails 0.4.2 → 0.4.3
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/CHANGELOG.md +6 -0
- package/dist/core/qdrant-process.js +9 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ versions follow [Semantic Versioning](https://semver.org/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.4.3] — 2026-11-05
|
|
9
|
+
|
|
10
|
+
- Fixes: the first start no longer fails with "Qdrant exited (101) while starting" where the system has no CA
|
|
11
|
+
certificates, as in the official slim Node image. Qdrant will not start without them, though it makes no outside
|
|
12
|
+
call here: it now gets the host's `SSL_CERT_FILE`, or the certificates the library carries. All three languages.
|
|
13
|
+
|
|
8
14
|
## [0.4.2] — 2026-11-05
|
|
9
15
|
|
|
10
16
|
- Fixes: the first start no longer fails when run as root (as in most containers) with "is not this user's alone":
|
|
@@ -4,6 +4,7 @@ import { chmodSync, closeSync, mkdirSync, openSync, readFileSync, renameSync, rm
|
|
|
4
4
|
import { createServer } from 'node:net';
|
|
5
5
|
import { uptime } from 'node:os';
|
|
6
6
|
import { join, resolve } from 'node:path';
|
|
7
|
+
import { rootCertificates } from 'node:tls';
|
|
7
8
|
/** A port the OS says is free on loopback. */
|
|
8
9
|
async function freePort() {
|
|
9
10
|
return new Promise((resolve, reject) => {
|
|
@@ -95,13 +96,15 @@ function commandOf(pid) {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
/** What Qdrant gets of the environment: what a process needs to run and the key. None of the host's secrets, and none
|
|
98
|
-
* of its QDRANT__* variables — they override the config (QDRANT__SERVICE__HOST=0.0.0.0 would open it to the network).
|
|
99
|
-
|
|
99
|
+
* of its QDRANT__* variables — they override the config (QDRANT__SERVICE__HOST=0.0.0.0 would open it to the network).
|
|
100
|
+
* Qdrant does not start without CA certificates, though it makes no outside call here, and a slim container has none:
|
|
101
|
+
* it gets the host's SSL_CERT_FILE, or `caFile`. */
|
|
102
|
+
function childEnv(apiKey, caFile) {
|
|
100
103
|
const env = {};
|
|
101
104
|
for (const k of ['PATH', 'HOME', 'TMPDIR', 'TEMP', 'TMP', 'SystemRoot', 'USERPROFILE'])
|
|
102
105
|
if (process.env[k] !== undefined)
|
|
103
106
|
env[k] = process.env[k];
|
|
104
|
-
return { ...env, QDRANT__SERVICE__API_KEY: apiKey, QDRANT__TELEMETRY_DISABLED: 'true' };
|
|
107
|
+
return { ...env, SSL_CERT_FILE: process.env.SSL_CERT_FILE || caFile, QDRANT__SERVICE__API_KEY: apiKey, QDRANT__TELEMETRY_DISABLED: 'true' };
|
|
105
108
|
}
|
|
106
109
|
/** Every Qdrant this process started and has not seen exit: stopped when the host exits without `close()` (an 'exit'
|
|
107
110
|
* handler can only send the signal; a host killed outright leaves its Qdrant to the next start's reapLeftover). */
|
|
@@ -156,13 +159,15 @@ export class QdrantProcess {
|
|
|
156
159
|
const apiKey = randomBytes(24).toString('hex');
|
|
157
160
|
const config = join(this.opts.dir, 'config.yaml');
|
|
158
161
|
writeFileSync(config, qdrantConfig(this.opts.dir, port), { mode: 0o600 });
|
|
162
|
+
const caFile = join(this.opts.dir, 'ca.pem');
|
|
163
|
+
writeFileSync(caFile, `${rootCertificates.join('\n')}\n`, { mode: 0o600 }); // the ones Node carries
|
|
159
164
|
const fd = openLog(this.opts.dir);
|
|
160
165
|
let child;
|
|
161
166
|
try {
|
|
162
167
|
child = spawn(this.opts.binary, ['--config-path', config, '--disable-telemetry'], {
|
|
163
168
|
cwd: this.opts.dir,
|
|
164
169
|
stdio: ['ignore', fd, fd],
|
|
165
|
-
env: childEnv(apiKey),
|
|
170
|
+
env: childEnv(apiKey, caFile),
|
|
166
171
|
});
|
|
167
172
|
}
|
|
168
173
|
finally {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memtrails",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Retrieval and exploration for any text — e-mail, chat, notes, documents, news, commits, conversations. Searchable at once, on your own machine, in any language; optional consolidation into typed knowledge with a language model.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"retrieval",
|