chore(repo): ignore backups, handoffs and deploy state; drop stale leftovers (#96)

Backup copies, agent handoff folders, personal exports and the deploy
runtime state had been committed next to the real sources. Ignore those
patterns so they cannot be tracked again, and remove the leftovers that
still were: an npm lockfile beside the pnpm one, two Vite config backups,
two one-off screenshot scripts with a private address, and the deploy
state file that every deploy rewrites.


Claude-Session: https://claude.ai/code/session_01MRtGG9ARfqqhma3t85Ro2u

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
cynarAI 2026-10-02 21:43:02 +02:00 committed by GitHub
parent 9c9188e657
commit cd29fad674
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 8 additions and 3141 deletions

View File

@ -1,7 +0,0 @@
{
"previousSha": "HEAD",
"deployedSha": "is now at 2fe3dc5 feat(api): real onboarding scan — filesystem, Git repos, profile compilation",
"ref": "2fe3dc5971d55ca9604757bc79aae94feb9ec21d",
"status": "success",
"at": "2026-09-23T23:52:26Z"
}

8
.gitignore vendored
View File

@ -53,3 +53,11 @@ playwright-report-www
vendor/ vendor/
*.gguf *.gguf
*.onnx *.onnx
# Never track backups, agent handoffs, personal exports or deploy runtime state
*.bak
*.bak-*
.env.bak*
.claude-handoff*/
apple-notes*
.evo-deploy/

View File

@ -1,296 +0,0 @@
import { timingSafeEqual } from "node:crypto";
import type { ClientRequest, IncomingMessage } from "node:http";
import http from "node:http";
import https from "node:https";
import net from "node:net";
import path from "node:path";
import tls from "node:tls";
import { lingui } from "@lingui/vite-plugin";
import type { DesktopStackProbeResponse } from "@rakazo/contracts";
import {
safeScreenProxyResponseHeaders,
stripSensitiveHandshakeHeaders,
} from "@rakazo/core/node/screen-proxy-response";
import babel from "@rolldown/plugin-babel";
import tailwindcss from "@tailwindcss/vite";
import react from "@vitejs/plugin-react";
import type { PreviewServer, ViteDevServer } from "vite";
import { defineConfig, loadEnv } from "vite";
import { resolveScreenProxySecret } from "../../packages/core/src/secrets-guard.ts";
import {
resolveNovncTarget,
safeProxyHeaders,
watchScreenAuthorization,
} from "./src/screen-proxy.js";
const webPort = Number(process.env.WEB_PORT ?? 5173);
const DESKTOP_STACK_PROBE_PATH = "/.well-known/rakazo-desktop-stack";
const DESKTOP_STACK_TOKEN_HEADER = "x-rakazo-desktop-stack-token";
function equalStackToken(expected: string, supplied: string | string[] | undefined) {
if (expected === "" || typeof supplied !== "string") return false;
const expectedBytes = Buffer.from(expected);
const suppliedBytes = Buffer.from(supplied);
return (
expectedBytes.byteLength === suppliedBytes.byteLength &&
timingSafeEqual(expectedBytes, suppliedBytes)
);
}
function attachDesktopStackProbe(
server: ViteDevServer | PreviewServer,
token: string,
imageTag: string,
) {
server.middlewares.use((req, res, next) => {
if (req.url?.split("?", 1)[0] !== DESKTOP_STACK_PROBE_PATH) {
next();
return;
}
if (!equalStackToken(token, req.headers[DESKTOP_STACK_TOKEN_HEADER])) {
res.statusCode = 404;
res.end("Not found");
return;
}
const body: DesktopStackProbeResponse = { ok: true, imageTag };
res.statusCode = 200;
res.setHeader("cache-control", "no-store");
res.setHeader("content-type", "application/json; charset=utf-8");
res.end(JSON.stringify(body));
});
}
function attachNovncProxy(server: ViteDevServer | PreviewServer, secret: string, api: string) {
server.middlewares.use(async (req, res, next) => {
if (!req.url?.startsWith("/novnc/")) {
next();
return;
}
const target = await resolveNovncTarget(req.url, secret, api);
if (res.destroyed) return;
if (!target) {
res.statusCode = 403;
res.end("Invalid or expired screen capability");
return;
}
const headers = {
...safeProxyHeaders(req.headers),
host: `${target.hostname}:${target.port}`,
};
const transport = target.protocol === "https:" ? https : http;
let upstream: ClientRequest | undefined;
let retries = 0;
let retryPending = false;
let stopChecking: () => void = () => undefined;
const retryable = req.method === "GET";
const scheduleRetry = (incoming?: IncomingMessage) => {
if (!retryable || retryPending || retries >= 3 || res.destroyed) return false;
retryPending = true;
retries += 1;
const delayMs = 50 * retries;
const retry = () => {
setTimeout(() => {
retryPending = false;
if (!res.destroyed) requestUpstream();
}, delayMs);
};
if (incoming && !incoming.destroyed) {
incoming.once("close", retry);
incoming.destroy();
} else {
retry();
}
return true;
};
function requestUpstream() {
if (res.destroyed) return;
upstream = transport.request(
{
hostname: target.hostname,
port: target.port,
path: target.path,
method: req.method,
headers,
...(target.protocol === "https:" ? { servername: target.hostname } : {}),
},
(incoming) => {
if ((incoming.statusCode ?? 502) >= 500 && scheduleRetry(incoming)) {
return;
}
res.writeHead(
incoming.statusCode ?? 502,
safeScreenProxyResponseHeaders(incoming.headers),
);
incoming.pipe(res);
},
);
upstream.on("error", () => {
if (retryable && !res.headersSent && !res.destroyed && (retryPending || scheduleRetry())) {
return;
}
stopChecking();
if (res.headersSent) {
res.destroy();
return;
}
res.statusCode = 502;
res.end("Screen unavailable");
});
if (req.method === "GET" || req.readableEnded) upstream.end();
else req.pipe(upstream);
}
stopChecking = watchScreenAuthorization(
async () => Boolean(await resolveNovncTarget(req.url, secret, api)),
() => {
upstream?.destroy();
res.destroy();
},
);
res.once("close", () => {
stopChecking();
upstream?.destroy();
});
requestUpstream();
});
server.httpServer?.on("upgrade", async (req, socket, head) => {
if (!req.url?.startsWith("/novnc/")) return;
const target = await resolveNovncTarget(req.url, secret, api);
if (socket.destroyed) return;
if (!target) {
socket.destroy();
return;
}
const upstream =
target.protocol === "https:"
? tls.connect({ port: target.port, host: target.hostname, servername: target.hostname })
: net.connect(target.port, target.hostname);
const stopChecking = watchScreenAuthorization(
async () => Boolean(await resolveNovncTarget(req.url, secret, api)),
() => {
socket.destroy();
upstream.destroy();
},
);
socket.once("close", () => {
stopChecking();
upstream.destroy();
});
upstream.once("close", () => {
stopChecking();
socket.destroy();
});
upstream.once(target.protocol === "https:" ? "secureConnect" : "connect", () => {
const headerLines = [
`${req.method ?? "GET"} ${target.path} HTTP/1.1`,
`Host: ${target.hostname}:${target.port}`,
];
for (const [key, value] of Object.entries(safeProxyHeaders(req.headers))) {
headerLines.push(`${key}: ${Array.isArray(value) ? value.join(",") : value}`);
}
upstream.write(`${headerLines.join("\r\n")}\r\n\r\n`);
if (head.length) upstream.write(head);
socket.pipe(upstream);
const responseChunks: Buffer[] = [];
let responseSize = 0;
let responseTail = Buffer.alloc(0);
const forwardHandshake = (chunk: Buffer) => {
responseChunks.push(chunk);
responseSize += chunk.length;
if (responseSize > 64 * 1024) {
socket.destroy();
upstream.destroy();
return;
}
const boundarySearch = Buffer.concat([responseTail, chunk]);
if (boundarySearch.indexOf("\r\n\r\n") < 0) {
responseTail = Buffer.from(boundarySearch.subarray(-3));
return;
}
const responseHead = Buffer.concat(responseChunks, responseSize);
const safe = stripSensitiveHandshakeHeaders(responseHead);
if (!safe) {
socket.destroy();
upstream.destroy();
return;
}
upstream.off("data", forwardHandshake);
socket.write(safe);
upstream.pipe(socket);
};
upstream.on("data", forwardHandshake);
});
upstream.on("error", () => socket.destroy());
socket.on("error", () => upstream.destroy());
});
}
export default defineConfig(({ mode }) => {
const rootEnv = loadEnv(mode, path.resolve(import.meta.dirname, "../.."), "");
const api = process.env.API_PROXY_TARGET ?? rootEnv.API_PROXY_TARGET ?? "http://127.0.0.1:3100";
const previewHost = process.env.RAKAZO_HOST ?? rootEnv.RAKAZO_HOST ?? "localhost";
const screenProxySecret = () =>
resolveScreenProxySecret({
...process.env,
SCREEN_PROXY_SECRET: process.env.SCREEN_PROXY_SECRET ?? rootEnv.SCREEN_PROXY_SECRET,
SANDBOX_SUPERVISOR_TOKEN:
process.env.SANDBOX_SUPERVISOR_TOKEN ?? rootEnv.SANDBOX_SUPERVISOR_TOKEN,
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET ?? rootEnv.BETTER_AUTH_SECRET,
});
const performanceAssetDelayMs = Number(process.env.RAKAZO_PERFORMANCE_ASSET_DELAY_MS ?? 0);
const desktopStackToken =
process.env.RAKAZO_DESKTOP_STACK_TOKEN ?? rootEnv.RAKAZO_DESKTOP_STACK_TOKEN ?? "";
const imageTag = process.env.RAKAZO_IMAGE_TAG ?? rootEnv.RAKAZO_IMAGE_TAG ?? "edge";
return {
plugins: [
react(),
babel({ plugins: ["@lingui/babel-plugin-lingui-macro"] }),
lingui(),
tailwindcss(),
{
name: "rakazo-desktop-stack-probe",
configureServer: (server) => attachDesktopStackProbe(server, desktopStackToken, imageTag),
configurePreviewServer: (server) =>
attachDesktopStackProbe(server, desktopStackToken, imageTag),
},
{
name: "rakazo-performance-asset-delay",
configurePreviewServer(server) {
if (!Number.isFinite(performanceAssetDelayMs) || performanceAssetDelayMs <= 0) return;
server.middlewares.use((req, _res, next) => {
const pathname = req.url?.split("?", 1)[0] ?? "/";
if (["/api", "/rpc", "/novnc"].some((prefix) => pathname.startsWith(prefix))) {
next();
return;
}
setTimeout(next, performanceAssetDelayMs);
});
},
},
{
name: "rakazo-novnc-proxy",
configureServer: (server) => attachNovncProxy(server, screenProxySecret(), api),
configurePreviewServer: (server) => attachNovncProxy(server, screenProxySecret(), api),
},
],
server: {
host: "0.0.0.0",
port: webPort,
strictPort: true,
allowedHosts: true,
proxy: {
"/api": { target: api, changeOrigin: true },
"/rpc": { target: api, changeOrigin: true },
},
},
preview: {
host: "0.0.0.0",
port: Number(process.env.WEB_PORT ?? 5173),
allowedHosts: [previewHost],
proxy: {
"/api": { target: api, changeOrigin: true },
"/rpc": { target: api, changeOrigin: true },
},
},
};
});

View File

@ -1,296 +0,0 @@
import { timingSafeEqual } from "node:crypto";
import type { ClientRequest, IncomingMessage } from "node:http";
import http from "node:http";
import https from "node:https";
import net from "node:net";
import path from "node:path";
import tls from "node:tls";
import { lingui } from "@lingui/vite-plugin";
import type { DesktopStackProbeResponse } from "@rakazo/contracts";
import {
safeScreenProxyResponseHeaders,
stripSensitiveHandshakeHeaders,
} from "@rakazo/core/node/screen-proxy-response";
import babel from "@rolldown/plugin-babel";
import tailwindcss from "@tailwindcss/vite";
import react from "@vitejs/plugin-react";
import type { PreviewServer, ViteDevServer } from "vite";
import { defineConfig, loadEnv } from "vite";
import { resolveScreenProxySecret } from "../../packages/core/src/secrets-guard.ts";
import {
resolveNovncTarget,
safeProxyHeaders,
watchScreenAuthorization,
} from "./src/screen-proxy.js";
const webPort = Number(process.env.WEB_PORT ?? 5173);
const DESKTOP_STACK_PROBE_PATH = "/.well-known/rakazo-desktop-stack";
const DESKTOP_STACK_TOKEN_HEADER = "x-rakazo-desktop-stack-token";
function equalStackToken(expected: string, supplied: string | string[] | undefined) {
if (expected === "" || typeof supplied !== "string") return false;
const expectedBytes = Buffer.from(expected);
const suppliedBytes = Buffer.from(supplied);
return (
expectedBytes.byteLength === suppliedBytes.byteLength &&
timingSafeEqual(expectedBytes, suppliedBytes)
);
}
function attachDesktopStackProbe(
server: ViteDevServer | PreviewServer,
token: string,
imageTag: string,
) {
server.middlewares.use((req, res, next) => {
if (req.url?.split("?", 1)[0] !== DESKTOP_STACK_PROBE_PATH) {
next();
return;
}
if (!equalStackToken(token, req.headers[DESKTOP_STACK_TOKEN_HEADER])) {
res.statusCode = 404;
res.end("Not found");
return;
}
const body: DesktopStackProbeResponse = { ok: true, imageTag };
res.statusCode = 200;
res.setHeader("cache-control", "no-store");
res.setHeader("content-type", "application/json; charset=utf-8");
res.end(JSON.stringify(body));
});
}
function attachNovncProxy(server: ViteDevServer | PreviewServer, secret: string, api: string) {
server.middlewares.use(async (req, res, next) => {
if (!req.url?.startsWith("/novnc/")) {
next();
return;
}
const target = await resolveNovncTarget(req.url, secret, api);
if (res.destroyed) return;
if (!target) {
res.statusCode = 403;
res.end("Invalid or expired screen capability");
return;
}
const headers = {
...safeProxyHeaders(req.headers),
host: `${target.hostname}:${target.port}`,
};
const transport = target.protocol === "https:" ? https : http;
let upstream: ClientRequest | undefined;
let retries = 0;
let retryPending = false;
let stopChecking: () => void = () => undefined;
const retryable = req.method === "GET";
const scheduleRetry = (incoming?: IncomingMessage) => {
if (!retryable || retryPending || retries >= 3 || res.destroyed) return false;
retryPending = true;
retries += 1;
const delayMs = 50 * retries;
const retry = () => {
setTimeout(() => {
retryPending = false;
if (!res.destroyed) requestUpstream();
}, delayMs);
};
if (incoming && !incoming.destroyed) {
incoming.once("close", retry);
incoming.destroy();
} else {
retry();
}
return true;
};
function requestUpstream() {
if (res.destroyed) return;
upstream = transport.request(
{
hostname: target.hostname,
port: target.port,
path: target.path,
method: req.method,
headers,
...(target.protocol === "https:" ? { servername: target.hostname } : {}),
},
(incoming) => {
if ((incoming.statusCode ?? 502) >= 500 && scheduleRetry(incoming)) {
return;
}
res.writeHead(
incoming.statusCode ?? 502,
safeScreenProxyResponseHeaders(incoming.headers),
);
incoming.pipe(res);
},
);
upstream.on("error", () => {
if (retryable && !res.headersSent && !res.destroyed && (retryPending || scheduleRetry())) {
return;
}
stopChecking();
if (res.headersSent) {
res.destroy();
return;
}
res.statusCode = 502;
res.end("Screen unavailable");
});
if (req.method === "GET" || req.readableEnded) upstream.end();
else req.pipe(upstream);
}
stopChecking = watchScreenAuthorization(
async () => Boolean(await resolveNovncTarget(req.url, secret, api)),
() => {
upstream?.destroy();
res.destroy();
},
);
res.once("close", () => {
stopChecking();
upstream?.destroy();
});
requestUpstream();
});
server.httpServer?.on("upgrade", async (req, socket, head) => {
if (!req.url?.startsWith("/novnc/")) return;
const target = await resolveNovncTarget(req.url, secret, api);
if (socket.destroyed) return;
if (!target) {
socket.destroy();
return;
}
const upstream =
target.protocol === "https:"
? tls.connect({ port: target.port, host: target.hostname, servername: target.hostname })
: net.connect(target.port, target.hostname);
const stopChecking = watchScreenAuthorization(
async () => Boolean(await resolveNovncTarget(req.url, secret, api)),
() => {
socket.destroy();
upstream.destroy();
},
);
socket.once("close", () => {
stopChecking();
upstream.destroy();
});
upstream.once("close", () => {
stopChecking();
socket.destroy();
});
upstream.once(target.protocol === "https:" ? "secureConnect" : "connect", () => {
const headerLines = [
`${req.method ?? "GET"} ${target.path} HTTP/1.1`,
`Host: ${target.hostname}:${target.port}`,
];
for (const [key, value] of Object.entries(safeProxyHeaders(req.headers))) {
headerLines.push(`${key}: ${Array.isArray(value) ? value.join(",") : value}`);
}
upstream.write(`${headerLines.join("\r\n")}\r\n\r\n`);
if (head.length) upstream.write(head);
socket.pipe(upstream);
const responseChunks: Buffer[] = [];
let responseSize = 0;
let responseTail = Buffer.alloc(0);
const forwardHandshake = (chunk: Buffer) => {
responseChunks.push(chunk);
responseSize += chunk.length;
if (responseSize > 64 * 1024) {
socket.destroy();
upstream.destroy();
return;
}
const boundarySearch = Buffer.concat([responseTail, chunk]);
if (boundarySearch.indexOf("\r\n\r\n") < 0) {
responseTail = Buffer.from(boundarySearch.subarray(-3));
return;
}
const responseHead = Buffer.concat(responseChunks, responseSize);
const safe = stripSensitiveHandshakeHeaders(responseHead);
if (!safe) {
socket.destroy();
upstream.destroy();
return;
}
upstream.off("data", forwardHandshake);
socket.write(safe);
upstream.pipe(socket);
};
upstream.on("data", forwardHandshake);
});
upstream.on("error", () => socket.destroy());
socket.on("error", () => upstream.destroy());
});
}
export default defineConfig(({ mode }) => {
const rootEnv = loadEnv(mode, path.resolve(import.meta.dirname, "../.."), "");
const api = process.env.API_PROXY_TARGET ?? rootEnv.API_PROXY_TARGET ?? "http://127.0.0.1:3100";
const previewHost = process.env.RAKAZO_HOST ?? rootEnv.RAKAZO_HOST ?? "localhost";
const screenProxySecret = () =>
resolveScreenProxySecret({
...process.env,
SCREEN_PROXY_SECRET: process.env.SCREEN_PROXY_SECRET ?? rootEnv.SCREEN_PROXY_SECRET,
SANDBOX_SUPERVISOR_TOKEN:
process.env.SANDBOX_SUPERVISOR_TOKEN ?? rootEnv.SANDBOX_SUPERVISOR_TOKEN,
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET ?? rootEnv.BETTER_AUTH_SECRET,
});
const performanceAssetDelayMs = Number(process.env.RAKAZO_PERFORMANCE_ASSET_DELAY_MS ?? 0);
const desktopStackToken =
process.env.RAKAZO_DESKTOP_STACK_TOKEN ?? rootEnv.RAKAZO_DESKTOP_STACK_TOKEN ?? "";
const imageTag = process.env.RAKAZO_IMAGE_TAG ?? rootEnv.RAKAZO_IMAGE_TAG ?? "edge";
return {
plugins: [
react(),
babel({ plugins: ["@lingui/babel-plugin-lingui-macro"] }),
lingui(),
tailwindcss(),
{
name: "rakazo-desktop-stack-probe",
configureServer: (server) => attachDesktopStackProbe(server, desktopStackToken, imageTag),
configurePreviewServer: (server) =>
attachDesktopStackProbe(server, desktopStackToken, imageTag),
},
{
name: "rakazo-performance-asset-delay",
configurePreviewServer(server) {
if (!Number.isFinite(performanceAssetDelayMs) || performanceAssetDelayMs <= 0) return;
server.middlewares.use((req, _res, next) => {
const pathname = req.url?.split("?", 1)[0] ?? "/";
if (["/api", "/rpc", "/novnc"].some((prefix) => pathname.startsWith(prefix))) {
next();
return;
}
setTimeout(next, performanceAssetDelayMs);
});
},
},
{
name: "rakazo-novnc-proxy",
configureServer: (server) => attachNovncProxy(server, screenProxySecret(), api),
configurePreviewServer: (server) => attachNovncProxy(server, screenProxySecret(), api),
},
],
server: {
host: "0.0.0.0",
port: webPort,
strictPort: true,
allowedHosts: true,
proxy: {
"/api": { target: api, changeOrigin: true },
"/rpc": { target: api, changeOrigin: true },
},
},
preview: {
host: "0.0.0.0",
port: Number(process.env.WEB_PORT ?? 5173),
allowedHosts: [previewHost],
proxy: {
"/api": { target: api, changeOrigin: true },
"/rpc": { target: api, changeOrigin: true },
},
},
};
});

2500
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } });
await page.goto('http://100.114.51.16:5173/app', { waitUntil: 'networkidle', timeout: 30000 });
await page.waitForTimeout(5000);
await page.waitForSelector('[data-sidebar-group]', { timeout: 10000 }).catch(() => {});
await page.screenshot({ path: '/tmp/screenshot-sidebar.png', fullPage: false });
console.log('Screenshot saved');
const groups = await page.locator('[data-sidebar-group]').all();
console.log(`Found ${groups.length} sidebar groups`);
const titles = await page.locator('[data-sidebar-group] button[aria-label]').allTextContents();
console.log('Sidebar buttons:', titles.slice(0, 10));
await browser.close();
})();

View File

@ -1,21 +0,0 @@
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } });
// Capture console messages
page.on('console', msg => console.log(`CONSOLE: ${msg.type()} - ${msg.text()}`));
page.on('pageerror', err => console.log(`PAGE_ERROR: ${err.message}`));
await page.goto('http://100.114.51.16:5173/app', { waitUntil: 'networkidle', timeout: 30000 });
await page.waitForTimeout(5000);
await page.screenshot({ path: '/tmp/screenshot-sidebar.png', fullPage: false });
console.log('Screenshot saved');
const bodyText = await page.evaluate(() => document.body.innerText);
console.log('Body text:', bodyText.substring(0, 500));
await browser.close();
})();