# v0.4.38 (2026-05-13)
## Features - Add DeepSeek TUI as CLI tool in dashboard (#1088) ## Fixes - Fix broken Docker image in v0.4.36/v0.4.37 (#1096, #1097) ## Improvements - Clean Docker tags + clearer pulls badge
This commit is contained in:
parent
eaccb19f59
commit
58df17aa91
6 changed files with 22 additions and 20 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
|
@ -1,3 +1,14 @@
|
||||||
|
# v0.4.38 (2026-05-13)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Add DeepSeek TUI as CLI tool in dashboard (#1088)
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
- Fix broken Docker image in v0.4.36/v0.4.37 (#1096, #1097)
|
||||||
|
|
||||||
|
## Improvements
|
||||||
|
- Clean Docker tags + clearer pulls badge
|
||||||
|
|
||||||
# v0.4.37 (2026-05-13)
|
# v0.4.37 (2026-05-13)
|
||||||
|
|
||||||
## Improvements
|
## Improvements
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ COPY --from=builder /app/open-sse ./open-sse
|
||||||
COPY --from=builder /app/src/mitm ./src/mitm
|
COPY --from=builder /app/src/mitm ./src/mitm
|
||||||
# Standalone node_modules may omit deps only required by the MITM child process.
|
# Standalone node_modules may omit deps only required by the MITM child process.
|
||||||
COPY --from=builder /app/node_modules/node-forge ./node_modules/node-forge
|
COPY --from=builder /app/node_modules/node-forge ./node_modules/node-forge
|
||||||
|
# Ensure `next` is available at runtime in case tracing did not include it.
|
||||||
|
COPY --from=builder /app/node_modules/next ./node_modules/next
|
||||||
|
|
||||||
RUN mkdir -p /app/data && chown -R node:node /app && \
|
RUN mkdir -p /app/data && chown -R node:node /app && \
|
||||||
mkdir -p /app/data-home && chown node:node /app/data-home && \
|
mkdir -p /app/data-home && chown node:node /app/data-home && \
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "9router",
|
"name": "9router",
|
||||||
"version": "0.4.37",
|
"version": "0.4.38",
|
||||||
"description": "9Router CLI - Start and manage 9Router server",
|
"description": "9Router CLI - Start and manage 9Router server",
|
||||||
"bin": {
|
"bin": {
|
||||||
"9router": "./cli.js"
|
"9router": "./cli.js"
|
||||||
|
|
|
||||||
|
|
@ -111,23 +111,15 @@ if (fs.existsSync(cliAppDir)) {
|
||||||
console.log("✅ Cleaned\n");
|
console.log("✅ Cleaned\n");
|
||||||
|
|
||||||
// Step 3: Copy Next.js standalone build to app/cli/app.
|
// Step 3: Copy Next.js standalone build to app/cli/app.
|
||||||
// With outputFileTracingRoot = workspace root, Next places app files under
|
// With outputFileTracingRoot = projectRoot, server.js + node_modules live flat under .next/standalone/.
|
||||||
// .next/standalone/app/ and traced node_modules under .next/standalone/node_modules/.
|
|
||||||
console.log("3️⃣ Copying Next.js standalone build to app/cli/app...");
|
console.log("3️⃣ Copying Next.js standalone build to app/cli/app...");
|
||||||
const standaloneRoot = path.join(appDir, ".next", "standalone");
|
const standaloneRoot = path.join(appDir, ".next", "standalone");
|
||||||
const standaloneApp = path.join(standaloneRoot, "app");
|
if (!fs.existsSync(path.join(standaloneRoot, "server.js"))) {
|
||||||
if (!fs.existsSync(standaloneApp)) {
|
console.error("❌ Next.js standalone build not found at .next/standalone/server.js");
|
||||||
console.error("❌ Next.js standalone build not found at .next/standalone/app");
|
|
||||||
console.error("Make sure output: 'standalone' is set in next.config.js");
|
console.error("Make sure output: 'standalone' is set in next.config.js");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
copyRecursive(standaloneApp, cliAppDir);
|
copyRecursive(standaloneRoot, cliAppDir);
|
||||||
|
|
||||||
// Copy traced node_modules from standalone root into CLI bundle
|
|
||||||
const standaloneNodeModules = path.join(standaloneRoot, "node_modules");
|
|
||||||
if (fs.existsSync(standaloneNodeModules)) {
|
|
||||||
copyRecursive(standaloneNodeModules, path.join(cliAppDir, "node_modules"));
|
|
||||||
}
|
|
||||||
console.log("✅ Copied standalone build\n");
|
console.log("✅ Copied standalone build\n");
|
||||||
|
|
||||||
// Step 3b: Ensure sql.js (pure JS fallback) bundled in app/cli/app/node_modules.
|
// Step 3b: Ensure sql.js (pure JS fallback) bundled in app/cli/app/node_modules.
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,16 @@
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import { dirname, join } from "node:path";
|
import { dirname } from "node:path";
|
||||||
|
|
||||||
const projectRoot = dirname(fileURLToPath(import.meta.url));
|
const projectRoot = dirname(fileURLToPath(import.meta.url));
|
||||||
// Workspace root (one level up from app/) — where npm hoists deps.
|
|
||||||
// Next.js tracing must scan from here to find "next", "react", etc.
|
|
||||||
const workspaceRoot = join(projectRoot, "..");
|
|
||||||
|
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
output: "standalone",
|
output: "standalone",
|
||||||
serverExternalPackages: ["better-sqlite3", "sql.js", "node:sqlite", "bun:sqlite"],
|
serverExternalPackages: ["better-sqlite3", "sql.js", "node:sqlite", "bun:sqlite"],
|
||||||
turbopack: {
|
turbopack: {
|
||||||
root: workspaceRoot
|
root: projectRoot
|
||||||
},
|
},
|
||||||
outputFileTracingRoot: workspaceRoot,
|
outputFileTracingRoot: projectRoot,
|
||||||
outputFileTracingExcludes: {
|
outputFileTracingExcludes: {
|
||||||
"*": ["./gitbook/**/*"]
|
"*": ["./gitbook/**/*"]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "9router-app",
|
"name": "9router-app",
|
||||||
"version": "0.4.37",
|
"version": "0.4.38",
|
||||||
"description": "9Router web dashboard",
|
"description": "9Router web dashboard",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue