@knowzai/cli 0.2.0 → 0.4.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 (57) hide show
  1. package/assets/portable/releases.json +33 -0
  2. package/assets/selfhosted/.env.example +40 -0
  3. package/assets/selfhosted/docker-compose.mssql.yml +113 -0
  4. package/assets/selfhosted/docker-compose.yml +104 -0
  5. package/assets/selfhosted/lmstudio-azure-bridge.mjs +73 -0
  6. package/assets/selfhosted/releases.json +59 -0
  7. package/dist/.tsbuildinfo +1 -1
  8. package/dist/commands/down.d.ts +9 -0
  9. package/dist/commands/down.d.ts.map +1 -1
  10. package/dist/commands/down.js +16 -1
  11. package/dist/commands/down.js.map +1 -1
  12. package/dist/commands/up.d.ts +3 -27
  13. package/dist/commands/up.d.ts.map +1 -1
  14. package/dist/commands/up.js +25 -11
  15. package/dist/commands/up.js.map +1 -1
  16. package/dist/lib/platform-edition.d.ts +34 -0
  17. package/dist/lib/platform-edition.d.ts.map +1 -0
  18. package/dist/lib/platform-edition.js +47 -0
  19. package/dist/lib/platform-edition.js.map +1 -0
  20. package/dist/lib/platform-frontdoor-runtime.d.ts.map +1 -1
  21. package/dist/lib/platform-frontdoor-runtime.js +30 -10
  22. package/dist/lib/platform-frontdoor-runtime.js.map +1 -1
  23. package/dist/lib/platform-frontdoor.d.ts +10 -2
  24. package/dist/lib/platform-frontdoor.d.ts.map +1 -1
  25. package/dist/lib/platform-frontdoor.js +222 -122
  26. package/dist/lib/platform-frontdoor.js.map +1 -1
  27. package/dist/lib/platform-onboarding.d.ts +10 -0
  28. package/dist/lib/platform-onboarding.d.ts.map +1 -1
  29. package/dist/lib/platform-onboarding.js +21 -0
  30. package/dist/lib/platform-onboarding.js.map +1 -1
  31. package/dist/lib/platform-release-manifest.d.ts +1 -1
  32. package/dist/lib/platform-release-manifest.d.ts.map +1 -1
  33. package/dist/lib/platform-release-manifest.js.map +1 -1
  34. package/dist/lib/selfhosted-lifecycle.d.ts +96 -0
  35. package/dist/lib/selfhosted-lifecycle.d.ts.map +1 -0
  36. package/dist/lib/selfhosted-lifecycle.js +317 -0
  37. package/dist/lib/selfhosted-lifecycle.js.map +1 -0
  38. package/dist/lib/setup-console.d.ts +3 -0
  39. package/dist/lib/setup-console.d.ts.map +1 -1
  40. package/dist/lib/setup-console.js +35 -3
  41. package/dist/lib/setup-console.js.map +1 -1
  42. package/dist/lib/setup-page.d.ts.map +1 -1
  43. package/dist/lib/setup-page.js +34 -17
  44. package/dist/lib/setup-page.js.map +1 -1
  45. package/dist/lib/setup-plan.d.ts +2 -0
  46. package/dist/lib/setup-plan.d.ts.map +1 -1
  47. package/dist/lib/setup-plan.js +3 -1
  48. package/dist/lib/setup-plan.js.map +1 -1
  49. package/dist/lib/setup-server.d.ts.map +1 -1
  50. package/dist/lib/setup-server.js +20 -1
  51. package/dist/lib/setup-server.js.map +1 -1
  52. package/dist/lib/up-result.d.ts +46 -0
  53. package/dist/lib/up-result.d.ts.map +1 -0
  54. package/dist/lib/up-result.js +25 -0
  55. package/dist/lib/up-result.js.map +1 -0
  56. package/oclif.manifest.json +1814 -1800
  57. package/package.json +11 -10
@@ -1,5 +1,38 @@
1
1
  {
2
2
  "releases": [
3
+ {
4
+ "version": "0.44.1",
5
+ "flavors": [
6
+ "portable",
7
+ "portable-gcp"
8
+ ],
9
+ "releasedAt": "2026-09-04T05:26:59Z",
10
+ "minCliVersion": "0.3.0",
11
+ "notes": "Interview Studio v1, guest answer flow, honest knowledge dates. Supersedes v0.44.0 (web image build failed). Commercial grant required for portable pull.",
12
+ "digests": null
13
+ },
14
+ {
15
+ "version": "0.43.0",
16
+ "flavors": [
17
+ "portable",
18
+ "portable-gcp"
19
+ ],
20
+ "releasedAt": "2026-09-02T00:00:00Z",
21
+ "minCliVersion": "0.3.0",
22
+ "notes": "Commercial grant required for portable pull. Registration alone does not entitle image pulls.",
23
+ "digests": null
24
+ },
25
+ {
26
+ "version": "0.42.0",
27
+ "flavors": [
28
+ "portable",
29
+ "portable-gcp"
30
+ ],
31
+ "releasedAt": "2026-09-02T00:00:00Z",
32
+ "minCliVersion": "0.3.0",
33
+ "notes": "Commercial grant required for portable pull. Registration alone does not entitle image pulls.",
34
+ "digests": null
35
+ },
3
36
  {
4
37
  "version": "0.41.0",
5
38
  "flavors": [
@@ -0,0 +1,40 @@
1
+ # Knowz Self-Hosted pull kit — copied by `knowz up` into ~/.knowz/selfhosted/{name}/.env
2
+ # The CLI mints required secrets on first up. Do not bake passwords into images.
3
+
4
+ KNOWZ_SELFHOSTED_VERSION=0.15.1
5
+ API_PORT=5000
6
+ WEB_PORT=3000
7
+ MCP_PORT=3001
8
+ # Database host port (loopback only). `knowz up` derives API_PORT+10432 so a local Postgres or a
9
+ # second instance never collides; set it explicitly for hand-written .env files.
10
+ DB_PORT=5432
11
+
12
+ POSTGRES_PASSWORD=
13
+ SA_PASSWORD=
14
+ JWT_SECRET=
15
+ ADMIN_USERNAME=admin
16
+ ADMIN_PASSWORD=
17
+ # The CLI sets true only for a freshly generated first-boot password.
18
+ ADMIN_PASSWORD_REQUIRES_CHANGE=false
19
+ MCP_SERVICE_KEY=
20
+
21
+ # Optional: native OpenAI-compatible AI (LM Studio / Ollama / vLLM / OpenAI)
22
+ # For a model server on this host, the CLI rewrites localhost to host.docker.internal.
23
+ # OPENAI_COMPAT_ENDPOINT=http://host.docker.internal:1234/v1
24
+ # OPENAI_COMPAT_APIKEY=
25
+ # OPENAI_COMPAT_CHAT_MODEL=your-chat-model
26
+ # OPENAI_COMPAT_EMBEDDING_MODEL=your-embedding-model
27
+ # EMBEDDING_DIMENSIONS=768
28
+
29
+ # SQL-era public releases use an internal compatibility adapter automatically.
30
+ # These are derived by the CLI from the OpenAI-compatible values above; users
31
+ # do not need Azure credentials.
32
+ # AZURE_OPENAI_ENDPOINT=http://lmstudio-bridge:12345
33
+ # AZURE_OPENAI_APIKEY=local-compatible-adapter
34
+ # AZURE_OPENAI_DEPLOYMENT=your-chat-model
35
+ # AZURE_OPENAI_EMBEDDING=your-embedding-model
36
+
37
+ # Optional: AI via Knowz mothership (operator-supplied; never baked)
38
+ # KNOWZ_PLATFORM_ENABLED=true
39
+ # KNOWZ_PLATFORM_URL=https://api.knowz.io
40
+ # KNOWZ_PLATFORM_APIKEY=
@@ -0,0 +1,113 @@
1
+ # Knowz Self-Hosted — compatibility kit for SQL-era public releases.
2
+ # Selected automatically from releases.json; do not use for native Postgres images.
3
+ # The optional local adapter lets legacy Azure-shaped APIs consume the provider
4
+ # already tested as OpenAI-compatible by the guided setup UI.
5
+
6
+ services:
7
+ lmstudio-bridge:
8
+ image: node:20-alpine
9
+ command: ["node", "/app/lmstudio-azure-bridge.mjs"]
10
+ environment:
11
+ OPENAI_COMPAT_ENDPOINT: "${OPENAI_COMPAT_ENDPOINT:-http://host.docker.internal:1234/v1}"
12
+ OPENAI_COMPAT_APIKEY: "${OPENAI_COMPAT_APIKEY:-}"
13
+ PORT: "12345"
14
+ extra_hosts:
15
+ - "host.docker.internal:host-gateway"
16
+ volumes:
17
+ - ./lmstudio-azure-bridge.mjs:/app/lmstudio-azure-bridge.mjs:ro
18
+ healthcheck:
19
+ test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:12345/healthz"]
20
+ interval: 10s
21
+ timeout: 5s
22
+ retries: 5
23
+
24
+ db:
25
+ image: mcr.microsoft.com/mssql/server:2022-CU26-ubuntu-22.04
26
+ environment:
27
+ ACCEPT_EULA: "Y"
28
+ MSSQL_SA_PASSWORD: "${SA_PASSWORD:?SA_PASSWORD must be set in .env (>=12 chars, SQL Server complexity rules)}"
29
+ MSSQL_PID: "Express"
30
+ ports:
31
+ - "127.0.0.1:${DB_PORT:-1433}:1433"
32
+ volumes:
33
+ - knowz-db-data:/var/opt/mssql
34
+ healthcheck:
35
+ test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$${MSSQL_SA_PASSWORD}" -Q "SELECT 1" -C -b
36
+ interval: 10s
37
+ timeout: 5s
38
+ retries: 10
39
+ start_period: 30s
40
+
41
+ api:
42
+ image: ghcr.io/knowz-io/knowz-selfhosted-api:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
43
+ ports:
44
+ - "${API_PORT:-5000}:8080"
45
+ depends_on:
46
+ db:
47
+ condition: service_healthy
48
+ lmstudio-bridge:
49
+ condition: service_healthy
50
+ environment:
51
+ ConnectionStrings__McpDb: "Server=db,1433;Database=KnowzSelfHosted;User Id=sa;Password=${SA_PASSWORD:?SA_PASSWORD must be set};TrustServerCertificate=True;Encrypt=True"
52
+ Database__AutoMigrate: "true"
53
+ SelfHosted__JwtSecret: "${JWT_SECRET:?JWT_SECRET must be set in .env (>=32 chars)}"
54
+ SelfHosted__SuperAdminUsername: "${ADMIN_USERNAME:?ADMIN_USERNAME must be set in .env}"
55
+ SelfHosted__SuperAdminPassword: "${ADMIN_PASSWORD:?ADMIN_PASSWORD must be set in .env}"
56
+ SelfHosted__RequireSuperAdminPasswordChange: "${ADMIN_PASSWORD_REQUIRES_CHANGE:-false}"
57
+ SelfHosted__AllowedOrigins__0: "http://localhost:${WEB_PORT:-3000}"
58
+ SelfHosted__RateLimiting__Enabled: "true"
59
+ MCP__ServiceKey: "${MCP_SERVICE_KEY:?MCP_SERVICE_KEY must be set in .env}"
60
+ Storage__Provider: "LocalFileSystem"
61
+ Storage__Local__RootPath: "/data/files"
62
+ AzureOpenAI__Endpoint: "${AZURE_OPENAI_ENDPOINT:-}"
63
+ AzureOpenAI__ApiKey: "${AZURE_OPENAI_APIKEY:-}"
64
+ AzureOpenAI__DeploymentName: "${AZURE_OPENAI_DEPLOYMENT:-gpt-5.4}"
65
+ AzureOpenAI__EmbeddingDeploymentName: "${AZURE_OPENAI_EMBEDDING:-text-embedding-3-large}"
66
+ Embedding__ModelName: "${EMBEDDING_MODEL_NAME:-text-embedding-3-large}"
67
+ Embedding__Dimensions: "${EMBEDDING_DIMENSIONS:-3072}"
68
+ AzureAISearch__Endpoint: "${AZURE_SEARCH_ENDPOINT:-}"
69
+ AzureAISearch__ApiKey: "${AZURE_SEARCH_APIKEY:-}"
70
+ AzureAISearch__IndexName: "${AZURE_SEARCH_INDEX:-knowz-selfhosted}"
71
+ KnowzPlatform__Enabled: "${KNOWZ_PLATFORM_ENABLED:-false}"
72
+ KnowzPlatform__BaseUrl: "${KNOWZ_PLATFORM_URL:-}"
73
+ KnowzPlatform__ApiKey: "${KNOWZ_PLATFORM_APIKEY:-}"
74
+ volumes:
75
+ - knowz-file-storage:/data/files
76
+ healthcheck:
77
+ test: curl -f http://localhost:8080/healthz || exit 1
78
+ interval: 30s
79
+ timeout: 10s
80
+ retries: 5
81
+ start_period: 30s
82
+
83
+ web:
84
+ image: ghcr.io/knowz-io/knowz-selfhosted-web:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
85
+ ports:
86
+ - "${WEB_PORT:-3000}:8080"
87
+ depends_on:
88
+ api:
89
+ condition: service_started
90
+
91
+ mcp:
92
+ image: ghcr.io/knowz-io/knowz-selfhosted-mcp:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
93
+ ports:
94
+ - "${MCP_PORT:-3001}:8080"
95
+ depends_on:
96
+ api:
97
+ condition: service_healthy
98
+ environment:
99
+ Knowz__BaseUrl: "${MCP_API_URL:-http://api:8080}"
100
+ MCP__BackendMode: "${MCP_BACKEND_MODE:-selfhosted}"
101
+ MCP__ApiKeyValidationEndpoint: "${MCP_API_KEY_VALIDATION_ENDPOINT:-/api/vaults}"
102
+ MCP__ServiceKey: "${MCP_SERVICE_KEY:?MCP_SERVICE_KEY must be set in .env}"
103
+ Authentication__ValidateApiKey: "${MCP_VALIDATE_API_KEY:-true}"
104
+ healthcheck:
105
+ test: curl -f http://localhost:8080/.well-known/oauth-authorization-server || exit 1
106
+ interval: 30s
107
+ timeout: 10s
108
+ retries: 5
109
+ start_period: 15s
110
+
111
+ volumes:
112
+ knowz-db-data:
113
+ knowz-file-storage:
@@ -0,0 +1,104 @@
1
+ # Knowz Self-Hosted — pull-only kit for `knowz up` (public images).
2
+ # Canonical source: this file. The npm CLI copies it via sync-selfhosted-assets.mjs.
3
+ # Source-build remains selfhosted/docker-compose.yml (build: contexts).
4
+ #
5
+ # FAIL-CLOSED: POSTGRES_PASSWORD, JWT_SECRET, ADMIN_USERNAME, ADMIN_PASSWORD, MCP_SERVICE_KEY
6
+ # have no defaults. The CLI mints them into a 0600 .env on first up.
7
+ # Pin KNOWZ_SELFHOSTED_VERSION to a concrete semver — never `latest`.
8
+
9
+ services:
10
+ db:
11
+ image: pgvector/pgvector:pg16
12
+ environment:
13
+ POSTGRES_USER: knowz
14
+ POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set in .env}"
15
+ POSTGRES_DB: knowz_selfhosted
16
+ ports:
17
+ - "127.0.0.1:${DB_PORT:-5432}:5432"
18
+ volumes:
19
+ - knowz-db-data:/var/lib/postgresql/data
20
+ healthcheck:
21
+ test: ["CMD-SHELL", "pg_isready -U knowz -d knowz_selfhosted"]
22
+ interval: 5s
23
+ timeout: 5s
24
+ retries: 10
25
+ start_period: 10s
26
+
27
+ api:
28
+ image: ghcr.io/knowz-io/knowz-selfhosted-api:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
29
+ ports:
30
+ - "${API_PORT:-5000}:8080"
31
+ depends_on:
32
+ db:
33
+ condition: service_healthy
34
+ environment:
35
+ ConnectionStrings__McpDb: "Host=db;Port=5432;Database=knowz_selfhosted;Username=knowz;Password=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set}"
36
+ Database__AutoMigrate: "true"
37
+ SelfHosted__JwtSecret: "${JWT_SECRET:?JWT_SECRET must be set in .env (>=32 chars)}"
38
+ SelfHosted__SuperAdminUsername: "${ADMIN_USERNAME:?ADMIN_USERNAME must be set in .env}"
39
+ SelfHosted__SuperAdminPassword: "${ADMIN_PASSWORD:?ADMIN_PASSWORD must be set in .env}"
40
+ SelfHosted__RequireSuperAdminPasswordChange: "${ADMIN_PASSWORD_REQUIRES_CHANGE:-false}"
41
+ SelfHosted__AllowedOrigins__0: "http://localhost:${WEB_PORT:-3000}"
42
+ SelfHosted__RateLimiting__Enabled: "true"
43
+ MCP__ServiceKey: "${MCP_SERVICE_KEY:?MCP_SERVICE_KEY must be set in .env}"
44
+ Storage__Provider: "LocalFileSystem"
45
+ Storage__Local__RootPath: "/data/files"
46
+ OpenAiCompatible__Endpoint: "${OPENAI_COMPAT_ENDPOINT:-}"
47
+ OpenAiCompatible__ApiKey: "${OPENAI_COMPAT_APIKEY:-}"
48
+ OpenAiCompatible__ChatModel: "${OPENAI_COMPAT_CHAT_MODEL:-}"
49
+ OpenAiCompatible__EmbeddingModel: "${OPENAI_COMPAT_EMBEDDING_MODEL:-}"
50
+ OpenAiCompatible__EmbeddingDimensions: "${EMBEDDING_DIMENSIONS:-1536}"
51
+ AzureOpenAI__Endpoint: "${AZURE_OPENAI_ENDPOINT:-}"
52
+ AzureOpenAI__ApiKey: "${AZURE_OPENAI_APIKEY:-}"
53
+ AzureOpenAI__DeploymentName: "${AZURE_OPENAI_DEPLOYMENT:-gpt-5.4}"
54
+ AzureOpenAI__EmbeddingDeploymentName: "${AZURE_OPENAI_EMBEDDING:-text-embedding-3-small}"
55
+ Embedding__ModelName: "${EMBEDDING_MODEL_NAME:-text-embedding-3-small}"
56
+ Embedding__Dimensions: "${EMBEDDING_DIMENSIONS:-1536}"
57
+ AzureAISearch__Endpoint: "${AZURE_SEARCH_ENDPOINT:-}"
58
+ AzureAISearch__ApiKey: "${AZURE_SEARCH_APIKEY:-}"
59
+ AzureAISearch__IndexName: "${AZURE_SEARCH_INDEX:-knowz-selfhosted}"
60
+ KnowzPlatform__Enabled: "${KNOWZ_PLATFORM_ENABLED:-false}"
61
+ KnowzPlatform__BaseUrl: "${KNOWZ_PLATFORM_URL:-}"
62
+ KnowzPlatform__ApiKey: "${KNOWZ_PLATFORM_APIKEY:-}"
63
+ volumes:
64
+ - knowz-file-storage:/data/files
65
+ extra_hosts:
66
+ - "host.docker.internal:host-gateway"
67
+ healthcheck:
68
+ test: curl -f http://localhost:8080/healthz || exit 1
69
+ interval: 30s
70
+ timeout: 10s
71
+ retries: 5
72
+ start_period: 30s
73
+
74
+ web:
75
+ image: ghcr.io/knowz-io/knowz-selfhosted-web:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
76
+ ports:
77
+ - "${WEB_PORT:-3000}:8080"
78
+ depends_on:
79
+ api:
80
+ condition: service_started
81
+
82
+ mcp:
83
+ image: ghcr.io/knowz-io/knowz-selfhosted-mcp:${KNOWZ_SELFHOSTED_VERSION:?KNOWZ_SELFHOSTED_VERSION must be set}
84
+ ports:
85
+ - "${MCP_PORT:-3001}:8080"
86
+ depends_on:
87
+ api:
88
+ condition: service_healthy
89
+ environment:
90
+ Knowz__BaseUrl: "${MCP_API_URL:-http://api:8080}"
91
+ MCP__BackendMode: "${MCP_BACKEND_MODE:-selfhosted}"
92
+ MCP__ApiKeyValidationEndpoint: "${MCP_API_KEY_VALIDATION_ENDPOINT:-/api/vaults}"
93
+ MCP__ServiceKey: "${MCP_SERVICE_KEY:?MCP_SERVICE_KEY must be set in .env}"
94
+ Authentication__ValidateApiKey: "${MCP_VALIDATE_API_KEY:-true}"
95
+ healthcheck:
96
+ test: curl -f http://localhost:8080/.well-known/oauth-authorization-server || exit 1
97
+ interval: 30s
98
+ timeout: 10s
99
+ retries: 5
100
+ start_period: 15s
101
+
102
+ volumes:
103
+ knowz-db-data:
104
+ knowz-file-storage:
@@ -0,0 +1,73 @@
1
+ import http from 'node:http';
2
+ import { Readable } from 'node:stream';
3
+
4
+ const listenPort = Number(process.env.PORT || 12345);
5
+ const upstreamBase = (process.env.OPENAI_COMPAT_ENDPOINT || 'http://host.docker.internal:1234/v1')
6
+ .replace(/\/$/, '');
7
+ const upstreamApiKey = process.env.OPENAI_COMPAT_APIKEY || 'local-compatible-adapter';
8
+
9
+ function sendJson(response, statusCode, payload) {
10
+ response.writeHead(statusCode, { 'content-type': 'application/json' });
11
+ response.end(JSON.stringify(payload));
12
+ }
13
+
14
+ const server = http.createServer(async (request, response) => {
15
+ if (request.method === 'GET' && request.url === '/healthz') {
16
+ sendJson(response, 200, { status: 'healthy' });
17
+ return;
18
+ }
19
+
20
+ const route = request.url?.match(
21
+ /^\/openai\/deployments\/([^/]+)\/(chat\/completions|embeddings)(?:\?.*)?$/,
22
+ );
23
+ if (request.method !== 'POST' || !route) {
24
+ sendJson(response, 404, { error: { message: 'Unsupported compatibility route' } });
25
+ return;
26
+ }
27
+
28
+ const chunks = [];
29
+ for await (const chunk of request) chunks.push(chunk);
30
+
31
+ try {
32
+ const deployment = decodeURIComponent(route[1]);
33
+ const body = JSON.parse(Buffer.concat(chunks).toString('utf8'));
34
+ body.model = deployment;
35
+
36
+ const upstream = await fetch(`${upstreamBase}/${route[2]}`, {
37
+ method: 'POST',
38
+ headers: {
39
+ 'content-type': 'application/json',
40
+ accept: request.headers.accept || 'application/json',
41
+ authorization: `Bearer ${upstreamApiKey}`,
42
+ },
43
+ body: JSON.stringify(body),
44
+ });
45
+
46
+ if (route[2] === 'embeddings' && upstream.ok) {
47
+ const payload = await upstream.json();
48
+ for (const item of payload.data || []) {
49
+ if (!Array.isArray(item.embedding)) continue;
50
+ const packed = Buffer.allocUnsafe(item.embedding.length * 4);
51
+ item.embedding.forEach((value, index) => packed.writeFloatLE(value, index * 4));
52
+ item.embedding = packed.toString('base64');
53
+ }
54
+ response.writeHead(upstream.status, { 'content-type': 'application/json' });
55
+ response.end(JSON.stringify(payload));
56
+ return;
57
+ }
58
+
59
+ const headers = {};
60
+ for (const [key, value] of upstream.headers) {
61
+ if (key !== 'content-length' && key !== 'transfer-encoding') headers[key] = value;
62
+ }
63
+ response.writeHead(upstream.status, headers);
64
+ if (upstream.body) Readable.fromWeb(upstream.body).pipe(response);
65
+ else response.end();
66
+ } catch (error) {
67
+ sendJson(response, 502, {
68
+ error: { message: `OpenAI-compatible adapter request failed: ${error.message}` },
69
+ });
70
+ }
71
+ });
72
+
73
+ server.listen(listenPort, '0.0.0.0');
@@ -0,0 +1,59 @@
1
+ {
2
+ "releases": [
3
+ {
4
+ "version": "0.16.0",
5
+ "status": "complete",
6
+ "flavors": ["selfhosted"],
7
+ "releasedAt": "2026-09-04T05:28:39Z",
8
+ "minCliVersion": "0.4.0",
9
+ "notes": "Native PostgreSQL 16 + pgvector. Limited edition (honesty). MCP 26/36. Azure deploy not offered. File-sync uses PlatformConnection credentials.",
10
+ "digests": null,
11
+ "runtime": {
12
+ "database": "postgres",
13
+ "composeAsset": "docker-compose.yml"
14
+ }
15
+ },
16
+ {
17
+ "version": "0.15.1",
18
+ "status": "complete",
19
+ "flavors": ["selfhosted"],
20
+ "releasedAt": "2026-09-01T12:49:00Z",
21
+ "minCliVersion": null,
22
+ "notes": "User-role mothership connect/browse/pull. Anonymous GHCR triple.",
23
+ "digests": null,
24
+ "runtime": {
25
+ "database": "mssql",
26
+ "composeAsset": "docker-compose.mssql.yml",
27
+ "compatibleProviderAdapter": "lmstudio-azure-bridge.mjs"
28
+ }
29
+ },
30
+ {
31
+ "version": "0.15.0",
32
+ "status": "complete",
33
+ "flavors": ["selfhosted"],
34
+ "releasedAt": "2026-09-01T12:15:00Z",
35
+ "minCliVersion": null,
36
+ "notes": "Look/feel restyle, session decrypt, fail-closed compose, vite-only web image. First complete public GHCR triple since the split 0.14.x tags.",
37
+ "digests": null,
38
+ "runtime": {
39
+ "database": "mssql",
40
+ "composeAsset": "docker-compose.mssql.yml",
41
+ "compatibleProviderAdapter": "lmstudio-azure-bridge.mjs"
42
+ }
43
+ },
44
+ {
45
+ "version": "0.14.11",
46
+ "status": "incomplete",
47
+ "flavors": ["selfhosted"],
48
+ "releasedAt": "2026-05-28T00:00:00Z",
49
+ "minCliVersion": null,
50
+ "notes": "Incomplete GHCR set: api:0.14.11 exists; web/mcp 0.14.11 404 (web/mcp last published at 0.14.10). Do not pin.",
51
+ "digests": null,
52
+ "runtime": {
53
+ "database": "mssql",
54
+ "composeAsset": "docker-compose.mssql.yml",
55
+ "compatibleProviderAdapter": "lmstudio-azure-bridge.mjs"
56
+ }
57
+ }
58
+ ]
59
+ }