mirror of
https://github.com/AeThex-Corporation/AeThex-OS.git
synced 2026-04-17 22:27:19 +00:00
fix(android): force manual file load to bypass black screen issue
This commit is contained in:
parent
a3336954d4
commit
d74c99a72d
40 changed files with 7431 additions and 145 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -30,6 +30,7 @@ Gemfile.lock
|
||||||
.env.*.local
|
.env.*.local
|
||||||
|
|
||||||
# Ignore Linux build artifacts and special files
|
# Ignore Linux build artifacts and special files
|
||||||
|
aethex-linux-build/rootfs/
|
||||||
shell/aethex-shell/aethex-linux-build/rootfs/
|
shell/aethex-shell/aethex-linux-build/rootfs/
|
||||||
!shell/aethex-shell/aethex-linux-build/rootfs/**/*.sh
|
!shell/aethex-shell/aethex-linux-build/rootfs/**/*.sh
|
||||||
!shell/aethex-shell/aethex-linux-build/rootfs/**/*.conf
|
!shell/aethex-shell/aethex-linux-build/rootfs/**/*.conf
|
||||||
|
|
|
||||||
Binary file not shown.
BIN
.vs/AeThexOS/v17/.wsuo
Normal file
BIN
.vs/AeThexOS/v17/.wsuo
Normal file
Binary file not shown.
23
.vs/AeThexOS/v17/DocumentLayout.json
Normal file
23
.vs/AeThexOS/v17/DocumentLayout.json
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\PCOEM\\AeThexOS\\",
|
||||||
|
"Documents": [],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": -1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
6
.vs/VSWorkspaceState.json
Normal file
6
.vs/VSWorkspaceState.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"ExpandedNodes": [
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"PreviewInSolutionExplorer": false
|
||||||
|
}
|
||||||
BIN
.vs/slnx.sqlite
Normal file
BIN
.vs/slnx.sqlite
Normal file
Binary file not shown.
73
AeThexOS_V5/AeThexOS_V5.vbox
Normal file
73
AeThexOS_V5/AeThexOS_V5.vbox
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
** DO NOT EDIT THIS FILE.
|
||||||
|
** If you make changes to this file while any VirtualBox related application
|
||||||
|
** is running, your changes will be overwritten later, without taking effect.
|
||||||
|
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
|
||||||
|
**
|
||||||
|
** Written by VirtualBox 7.2.4 (r170995)
|
||||||
|
-->
|
||||||
|
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.19-windows">
|
||||||
|
<Machine uuid="{8c1c17d5-577f-49b7-a0f9-a2a911c386b1}" name="AeThexOS_V5" OSType="Ubuntu_64" snapshotFolder="Snapshots" lastStateChange="2026-02-06T05:50:10Z">
|
||||||
|
<MediaRegistry>
|
||||||
|
<HardDisks>
|
||||||
|
<HardDisk uuid="{df646f0c-79f5-44d0-80dd-a4adf770a768}" location="AeThexOS_V5.vdi" format="VDI" type="Normal"/>
|
||||||
|
</HardDisks>
|
||||||
|
<DVDImages>
|
||||||
|
<Image uuid="{a8fccaaf-38fc-4b21-bfb4-4fd7009afb9a}" location="C:/Users/PCOEM/AeThexOS/AeThex-OS-V5-Final.iso"/>
|
||||||
|
</DVDImages>
|
||||||
|
</MediaRegistry>
|
||||||
|
<ExtraData>
|
||||||
|
<ExtraDataItem name="GUI/LastNormalWindowPosition" value="640,249,800,654"/>
|
||||||
|
</ExtraData>
|
||||||
|
<Hardware>
|
||||||
|
<Memory RAMSize="4096"/>
|
||||||
|
<Boot>
|
||||||
|
<Order position="1" device="DVD"/>
|
||||||
|
<Order position="2" device="HardDisk"/>
|
||||||
|
<Order position="3" device="None"/>
|
||||||
|
<Order position="4" device="None"/>
|
||||||
|
</Boot>
|
||||||
|
<Display controller="VMSVGA" VRAMSize="128"/>
|
||||||
|
<Firmware/>
|
||||||
|
<BIOS>
|
||||||
|
<IOAPIC enabled="true"/>
|
||||||
|
<SmbiosUuidLittleEndian enabled="true"/>
|
||||||
|
<AutoSerialNumGen enabled="true"/>
|
||||||
|
</BIOS>
|
||||||
|
<Network>
|
||||||
|
<Adapter slot="0" enabled="true" MACAddress="0800274A28ED" type="82540EM">
|
||||||
|
<NAT localhost-reachable="true"/>
|
||||||
|
</Adapter>
|
||||||
|
</Network>
|
||||||
|
<AudioAdapter useDefault="true" driver="WAS" enabled="true"/>
|
||||||
|
<Clipboard/>
|
||||||
|
<GuestProperties>
|
||||||
|
<GuestProperty name="/VirtualBox/GuestAdd/GuiOnFocus" value="1" timestamp="1770357010041817500" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="en_US" timestamp="1770357057154551500" flags="RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxRev" value="170995" timestamp="1770357010002592302" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxVer" value="7.2.4" timestamp="1770357010002592300" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxVerExt" value="7.2.4" timestamp="1770357010002592301" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
</GuestProperties>
|
||||||
|
<StorageControllers>
|
||||||
|
<StorageController name="SATA Controller" type="AHCI" PortCount="30" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
|
||||||
|
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
|
||||||
|
<Image uuid="{df646f0c-79f5-44d0-80dd-a4adf770a768}"/>
|
||||||
|
</AttachedDevice>
|
||||||
|
</StorageController>
|
||||||
|
<StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
|
||||||
|
<AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="0" device="0">
|
||||||
|
<Image uuid="{a8fccaaf-38fc-4b21-bfb4-4fd7009afb9a}"/>
|
||||||
|
</AttachedDevice>
|
||||||
|
</StorageController>
|
||||||
|
</StorageControllers>
|
||||||
|
<RTC localOrUTC="UTC"/>
|
||||||
|
<CPU count="2">
|
||||||
|
<HardwareVirtExLargePages enabled="true"/>
|
||||||
|
<PAE enabled="false"/>
|
||||||
|
<LongMode enabled="true"/>
|
||||||
|
<X2APIC enabled="true"/>
|
||||||
|
</CPU>
|
||||||
|
</Hardware>
|
||||||
|
</Machine>
|
||||||
|
</VirtualBox>
|
||||||
73
AeThexOS_V5/AeThexOS_V5.vbox-prev
Normal file
73
AeThexOS_V5/AeThexOS_V5.vbox-prev
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
** DO NOT EDIT THIS FILE.
|
||||||
|
** If you make changes to this file while any VirtualBox related application
|
||||||
|
** is running, your changes will be overwritten later, without taking effect.
|
||||||
|
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
|
||||||
|
**
|
||||||
|
** Written by VirtualBox 7.2.4 (r170995)
|
||||||
|
-->
|
||||||
|
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.19-windows">
|
||||||
|
<Machine uuid="{8c1c17d5-577f-49b7-a0f9-a2a911c386b1}" name="AeThexOS_V5" OSType="Ubuntu_64" snapshotFolder="Snapshots" lastStateChange="2026-02-06T05:50:10Z">
|
||||||
|
<MediaRegistry>
|
||||||
|
<HardDisks>
|
||||||
|
<HardDisk uuid="{df646f0c-79f5-44d0-80dd-a4adf770a768}" location="AeThexOS_V5.vdi" format="VDI" type="Normal"/>
|
||||||
|
</HardDisks>
|
||||||
|
<DVDImages>
|
||||||
|
<Image uuid="{a8fccaaf-38fc-4b21-bfb4-4fd7009afb9a}" location="C:/Users/PCOEM/AeThexOS/AeThex-OS-V5-Final.iso"/>
|
||||||
|
</DVDImages>
|
||||||
|
</MediaRegistry>
|
||||||
|
<ExtraData>
|
||||||
|
<ExtraDataItem name="GUI/LastNormalWindowPosition" value="640,249,720,454"/>
|
||||||
|
</ExtraData>
|
||||||
|
<Hardware>
|
||||||
|
<Memory RAMSize="4096"/>
|
||||||
|
<Boot>
|
||||||
|
<Order position="1" device="DVD"/>
|
||||||
|
<Order position="2" device="HardDisk"/>
|
||||||
|
<Order position="3" device="None"/>
|
||||||
|
<Order position="4" device="None"/>
|
||||||
|
</Boot>
|
||||||
|
<Display controller="VMSVGA" VRAMSize="128"/>
|
||||||
|
<Firmware/>
|
||||||
|
<BIOS>
|
||||||
|
<IOAPIC enabled="true"/>
|
||||||
|
<SmbiosUuidLittleEndian enabled="true"/>
|
||||||
|
<AutoSerialNumGen enabled="true"/>
|
||||||
|
</BIOS>
|
||||||
|
<Network>
|
||||||
|
<Adapter slot="0" enabled="true" MACAddress="0800274A28ED" type="82540EM">
|
||||||
|
<NAT localhost-reachable="true"/>
|
||||||
|
</Adapter>
|
||||||
|
</Network>
|
||||||
|
<AudioAdapter useDefault="true" driver="WAS" enabled="true"/>
|
||||||
|
<Clipboard/>
|
||||||
|
<GuestProperties>
|
||||||
|
<GuestProperty name="/VirtualBox/GuestAdd/GuiOnFocus" value="1" timestamp="1770357010041817500" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="en_US" timestamp="1770357017701345900" flags="RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxRev" value="170995" timestamp="1770357010002592302" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxVer" value="7.2.4" timestamp="1770357010002592300" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
<GuestProperty name="/VirtualBox/HostInfo/VBoxVerExt" value="7.2.4" timestamp="1770357010002592301" flags="TRANSIENT, RDONLYGUEST"/>
|
||||||
|
</GuestProperties>
|
||||||
|
<StorageControllers>
|
||||||
|
<StorageController name="SATA Controller" type="AHCI" PortCount="30" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
|
||||||
|
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
|
||||||
|
<Image uuid="{df646f0c-79f5-44d0-80dd-a4adf770a768}"/>
|
||||||
|
</AttachedDevice>
|
||||||
|
</StorageController>
|
||||||
|
<StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
|
||||||
|
<AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="0" device="0">
|
||||||
|
<Image uuid="{a8fccaaf-38fc-4b21-bfb4-4fd7009afb9a}"/>
|
||||||
|
</AttachedDevice>
|
||||||
|
</StorageController>
|
||||||
|
</StorageControllers>
|
||||||
|
<RTC localOrUTC="UTC"/>
|
||||||
|
<CPU count="2">
|
||||||
|
<HardwareVirtExLargePages enabled="true"/>
|
||||||
|
<PAE enabled="false"/>
|
||||||
|
<LongMode enabled="true"/>
|
||||||
|
<X2APIC enabled="true"/>
|
||||||
|
</CPU>
|
||||||
|
</Hardware>
|
||||||
|
</Machine>
|
||||||
|
</VirtualBox>
|
||||||
BIN
AeThexOS_V5/AeThexOS_V5.vdi
Normal file
BIN
AeThexOS_V5/AeThexOS_V5.vdi
Normal file
Binary file not shown.
1803
AeThexOS_V5/Logs/VBox.log
Normal file
1803
AeThexOS_V5/Logs/VBox.log
Normal file
File diff suppressed because it is too large
Load diff
4427
AeThexOS_V5/Logs/VBoxHardening.log
Normal file
4427
AeThexOS_V5/Logs/VBoxHardening.log
Normal file
File diff suppressed because it is too large
Load diff
76
UNIKERNEL_GUIDE.md
Normal file
76
UNIKERNEL_GUIDE.md
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
# ☢️ AeThex OS: The Unikernel Path
|
||||||
|
|
||||||
|
> "It's just a site... can we do what all this is pointing towards?"
|
||||||
|
|
||||||
|
You are absolutely right. The ultimate form of AeThex is not a website running on Linux. **It is the Kernel itself.**
|
||||||
|
|
||||||
|
To achieve a "Real AeThex Kernel" without building a Linux ISO, we use **Unikernels**.
|
||||||
|
|
||||||
|
## What is this?
|
||||||
|
Instead of: `Hardware -> Linux Kernel -> Ubuntu -> Node.js -> AeThex`
|
||||||
|
We do: `Hardware -> AeThex (as Kernel)`
|
||||||
|
|
||||||
|
We use **Nanos (via OPS)** to compile your `dist/index.js` into a bootable disk image. This image has no shell, no SSH, no users. It just boots and runs your code.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ How to Build the Kernel
|
||||||
|
|
||||||
|
### 1. Prerequisites
|
||||||
|
You need a Linux environment (WSL2 works perfectly) and the `ops` tool.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install OPS (Orchestrator for Unikernels)
|
||||||
|
curl https://ops.city/get.sh -sSfL | sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Prepare the Build
|
||||||
|
We need to bundle your server and client into a single distributable folder.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run the build script (creates /dist folder with everything)
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Compile the Kernel
|
||||||
|
Use the `ops.json` configuration I just created in your root folder.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build the image
|
||||||
|
ops build dist/index.js -c ops.json -i aethex-kernel-v1
|
||||||
|
|
||||||
|
# Run it locally (requires QEMU/KVM)
|
||||||
|
ops run aethex-kernel-v1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ The Architecture Shift
|
||||||
|
|
||||||
|
When you run this, you have achieved the "Real OS" goal:
|
||||||
|
|
||||||
|
1. **The Brain (Server):** Is now a Unikernel. It boots in milliseconds. It is secure by design (no shell to hack).
|
||||||
|
2. **The Face (Client):** Since Unikernels don't have graphics drivers for React, you view the OS from a "Thin Client" (any other device's browser).
|
||||||
|
|
||||||
|
### The "Sci-Fi" Console Setup
|
||||||
|
If you want a dedicated laptop to *be* AeThex:
|
||||||
|
1. **Boot the Unikernel** on the metal (using Nanos).
|
||||||
|
2. **The screen will be black** (it's a headless kernel).
|
||||||
|
3. **The User Interface** is projected to any connected terminal.
|
||||||
|
|
||||||
|
*To see pixels on the SAME machine, you would need to write a Display Driver in Node.js, which is functionally impossible today. The "Standard" Sci-Fi OS architecture is a Headless Core + Visual Terminals.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Configuration
|
||||||
|
See `ops.json` in the root directory.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Target": "node",
|
||||||
|
"Args": ["dist/index.js"],
|
||||||
|
"Env": { "PORT": "80" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This tells the machine: "Your only purpose in life is to run this JavaScript file."
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.aethex.os">
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
|
|
||||||
28
android/app/src/main/assets/public/test.html
Normal file
28
android/app/src/main/assets/public/test.html
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Test Page</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #00FF00; /* Bright Green */
|
||||||
|
color: black;
|
||||||
|
font-size: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<h1>TEST FILE LOADED</h1>
|
||||||
|
<p>If you see this, file access is working.</p>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
console.log("Test file loaded successfully");
|
||||||
|
document.body.style.backgroundColor = "#00FF00";
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -1,86 +1,70 @@
|
||||||
package com.aethex.os;
|
package com.aethex.os;
|
||||||
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.webkit.WebView;
|
||||||
import android.view.View;
|
import android.webkit.WebSettings;
|
||||||
import android.view.WindowManager;
|
import android.webkit.WebViewClient;
|
||||||
import androidx.core.view.WindowCompat;
|
import android.webkit.WebResourceRequest;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import android.webkit.WebResourceError;
|
||||||
import androidx.core.view.WindowInsetsControllerCompat;
|
import android.widget.Toast;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import com.getcapacitor.BridgeActivity;
|
import com.getcapacitor.BridgeActivity;
|
||||||
import com.google.firebase.FirebaseApp;
|
|
||||||
import com.google.firebase.FirebaseOptions;
|
import android.util.Log;
|
||||||
|
|
||||||
public class MainActivity extends BridgeActivity {
|
public class MainActivity extends BridgeActivity {
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
// Using onStart to hijack the process immediately after bridge init
|
||||||
super.onCreate(savedInstanceState);
|
@Override
|
||||||
|
public void onStart() {
|
||||||
// Enable fullscreen immersive mode
|
super.onStart();
|
||||||
enableImmersiveMode();
|
if (this.bridge != null && this.bridge.getWebView() != null) {
|
||||||
|
loadCustomUrl();
|
||||||
// Ensure Firebase is ready before any Capacitor plugin requests it; stay resilient if config is missing
|
}
|
||||||
try {
|
}
|
||||||
if (FirebaseApp.getApps(this).isEmpty()) {
|
|
||||||
FirebaseOptions options = null;
|
private void loadCustomUrl() {
|
||||||
try {
|
WebView webView = this.bridge.getWebView();
|
||||||
options = FirebaseOptions.fromResource(this);
|
|
||||||
} catch (Exception ignored) {
|
// Set WebView background to BLACK
|
||||||
// No google-services.json resources, we'll fall back below
|
webView.setBackgroundColor(0xFF000000);
|
||||||
}
|
|
||||||
|
WebSettings settings = webView.getSettings();
|
||||||
if (options != null) {
|
settings.setJavaScriptEnabled(true);
|
||||||
FirebaseApp.initializeApp(getApplicationContext(), options);
|
settings.setDomStorageEnabled(true);
|
||||||
} else {
|
settings.setAllowFileAccess(true);
|
||||||
// Minimal placeholder so Firebase-dependent plugins don't crash when config is absent
|
settings.setAllowContentAccess(true);
|
||||||
FirebaseOptions fallback = new FirebaseOptions.Builder()
|
settings.setAllowFileAccessFromFileURLs(true);
|
||||||
.setApplicationId("1:000000000000:android:placeholder")
|
settings.setAllowUniversalAccessFromFileURLs(true);
|
||||||
.setApiKey("FAKE_API_KEY")
|
|
||||||
.setProjectId("aethex-placeholder")
|
// Add WebViewClient to catch errors
|
||||||
.build();
|
webView.setWebViewClient(new WebViewClient() {
|
||||||
FirebaseApp.initializeApp(getApplicationContext(), fallback);
|
@Override
|
||||||
}
|
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
|
||||||
}
|
Log.e("AeThexOS", "WebView Error: " + error.getDescription());
|
||||||
} catch (Exception e) {
|
runOnUiThread(() -> {
|
||||||
Log.w("MainActivity", "Firebase init skipped: " + e.getMessage());
|
new AlertDialog.Builder(MainActivity.this)
|
||||||
}
|
.setTitle("WebView Error")
|
||||||
}
|
.setMessage("Failed to load: " + request.getUrl() + "\n\nReason: " + error.getDescription())
|
||||||
|
.setPositiveButton("OK", null)
|
||||||
@Override
|
.show();
|
||||||
public void onWindowFocusChanged(boolean hasFocus) {
|
});
|
||||||
super.onWindowFocusChanged(hasFocus);
|
}
|
||||||
if (hasFocus) {
|
|
||||||
enableImmersiveMode();
|
@Override
|
||||||
}
|
public void onPageFinished(WebView view, String url) {
|
||||||
}
|
Log.i("AeThexOS", "Page Loaded: " + url);
|
||||||
|
runOnUiThread(() -> {
|
||||||
private void enableImmersiveMode() {
|
Toast.makeText(MainActivity.this, "Loaded: " + url, Toast.LENGTH_SHORT).show();
|
||||||
View decorView = getWindow().getDecorView();
|
});
|
||||||
|
}
|
||||||
// Full immersive mode - hide everything
|
});
|
||||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
|
||||||
|
// Clear cache to ensure we aren't loading stale files
|
||||||
WindowInsetsControllerCompat controller = WindowCompat.getInsetsController(getWindow(), decorView);
|
webView.clearCache(true);
|
||||||
if (controller != null) {
|
webView.clearHistory();
|
||||||
// Hide BOTH status bar and navigation bar completely
|
|
||||||
controller.hide(WindowInsetsCompat.Type.systemBars());
|
// Force load our local test file
|
||||||
// Swipe from edge to temporarily show bars
|
webView.loadUrl("file:///android_asset/public/test.html");
|
||||||
controller.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Set bars to transparent when they do show
|
|
||||||
getWindow().setStatusBarColor(android.graphics.Color.TRANSPARENT);
|
|
||||||
getWindow().setNavigationBarColor(android.graphics.Color.TRANSPARENT);
|
|
||||||
|
|
||||||
// Keep screen on + extend into cutout areas
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
||||||
getWindow().getAttributes().layoutInDisplayCutoutMode =
|
|
||||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
230
auth_fix_run.log
Normal file
230
auth_fix_run.log
Normal file
|
|
@ -0,0 +1,230 @@
|
||||||
|
|
||||||
|
> rest-express@1.0.0 build:kernel
|
||||||
|
> bash script/build-unikernel.sh
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
[*] Detected Windows Environment (MinGW/Git Bash).
|
||||||
|
[*] Switching to WSL Context...
|
||||||
|
[33m[plugin vite:reporter]
|
||||||
|
(!) C:/Users/PCOEM/AeThexOS/AeThex-OS/node_modules/@capacitor/camera/dist/esm/index.js is dynamically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts but also statically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-native-features.ts, dynamic import will not move module into another chunk.
|
||||||
|
[39m
|
||||||
|
[33m
|
||||||
|
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||||
|
- Using dynamic import() to code-split the application
|
||||||
|
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||||
|
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.[39m
|
||||||
|
|
||||||
|
dist\index.js 1.5mb
|
||||||
|
|
||||||
|
Done in 1123ms
|
||||||
|
[1m[2m 4.62 kB[22m[1m[22m[2m │ gzip: 1.43 kB[22m
|
||||||
|
[2m../dist/public/[22m[32massets/holographic_digital_security_seal_for_certification-DujiIi4u.png [39m[1m[2m 557.88 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_subtle_digital_grid_texture-CW2Q0w3T.png [39m[1m[2m 965.43 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/abstract_holographic_world_map_data_visualization-DA4sQHBK.png [39m[1m[2m1,343.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_digital_circuit_board_background-CqDjO0Wd.png [39m[1m[2m1,577.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[35massets/index-C25YaYOI.css [39m[1m[2m 226.22 kB[22m[1m[22m[2m │ gzip: 29.40 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DZ3HkAbg.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DPJCvkTF.js [39m[1m[2m 0.28 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-a24r8sCo.js [39m[1m[2m 0.36 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BPkARqmR.js [39m[1m[2m 0.38 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DiUCUXaM.js [39m[1m[2m 0.42 kB[22m[1m[22m[2m │ gzip: 0.20 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-jfjrrehZ.js [39m[1m[2m 0.76 kB[22m[1m[22m[2m │ gzip: 0.35 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DLPSmpR2.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.46 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-D9jibmwr.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-B4eFBhIm.js [39m[1m[2m 1.06 kB[22m[1m[22m[2m │ gzip: 0.34 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DjK0eNnT.js [39m[1m[2m 1.15 kB[22m[1m[22m[2m │ gzip: 0.55 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-C68zp4qU.js [39m[1m[2m 2.44 kB[22m[1m[22m[2m │ gzip: 1.09 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-CONwI-Dv.js [39m[1m[2m 3.45 kB[22m[1m[22m[2m │ gzip: 1.10 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BO91sTaU.js [39m[1m[2m 8.67 kB[22m[1m[22m[2m │ gzip: 2.95 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/index-CJvwTLjS.js [39m[1m[33m1,766.52 kB[39m[22m[2m │ gzip: 471.18 kB[22m
|
||||||
|
[32m✓ built in 7.67s[39m
|
||||||
|
building server...
|
||||||
|
[*] Updating OPS package list...
|
||||||
|
[*] Building Unikernel Image...
|
||||||
|
Running: /home/mrpiglr/.ops/bin/ops pkg load eyberg/node:v18.12.1 ...
|
||||||
|
warning: overwriting existing file "/dist/index.js" hostpath old: dist/index.js new: "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS//dist/index.js"
|
||||||
|
running local instance
|
||||||
|
booting /home/mrpiglr/.ops/images/aethex-kernel-v1 ...
|
||||||
|
[0.247822] en1: assigned 10.0.2.15
|
||||||
|
⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217
|
||||||
|
[dotenv@17.2.3] injecting env (8) from .env -- tip: ⚙️ suppress all logs with { quiet: true }
|
||||||
|
[dotenv@17.2.3] injecting env (0) from .env -- tip: ⚙️ override existing env vars with { override: true }
|
||||||
|
Warning: connect.session() MemoryStore is not
|
||||||
|
designed for a production environment, as it will leak
|
||||||
|
memory, and will not scale past a single process.
|
||||||
|
9:45:36 AM [websocket] WebSocket server initialized
|
||||||
|
9:45:36 AM [express] serving on port 8080
|
||||||
|
9:45:36 AM [websocket] WebSocket available at ws://localhost:8080/socket.io
|
||||||
|
(node:2) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
|
||||||
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
9:45:37 AM [express] GET /api/os/notifications 304 in 236ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
[2.193894] en1: assigned FE80::E03C:17FF:FEC3:4C59
|
||||||
|
Socket.IO client connected: BAYqyUCmswYLvLqPAAAB
|
||||||
|
9:47:11 AM [express] GET /api/os/notifications 304 in 118ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:48:11 AM [express] GET /api/os/notifications 304 in 136ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:48:48 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:48:52 AM [express] POST /api/auth/login 200 in 242ms :: {"success":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","email":"mrpiglr@gmail.com","username":"MrPiglr","isAdmin":true}}
|
||||||
|
9:48:52 AM [express] GET /api/auth/session 200 in 47ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
Socket.IO client disconnected: BAYqyUCmswYLvLqPAAAB
|
||||||
|
9:48:52 AM [express] GET /api/me/profile 200 in 53ms :: {"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","role":"oversee","onboarded":true,"updated_at":"2026-01-24T21:52:29.269+00:00","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","skills":[],"avatar_url":"https://pbs.twimg.com/profile_images/1932523737615826944/cl52l39H_400x400.jpg","banner_url":"https://pbs.twimg.com/profile_banners/840045181470621696/1750821581/600x200","social_links":{"github":"https://github.com/MrPiglr","discord":"MrPiglr","twitter":"https://twitter.com/MrPiglr"},"loyalty_points":25,"email":"mrpiglr@gmail.com","created_at":"2025-08-02T09:44:56.964865+00:00","user_type":"community_member","experience_level":"beginner","full_name":"Anderson","location":"","website_url":"https://mrpiglr.store","github_url":"https://github.com/MrPiglr","twitter_url":"","linkedin_url":"","total_xp":37,"level":1,"featured_badge_ids":null,"aethex_passport_id":"e393ea02-6e06-42da-9917-cb4d424a87e4","signature":"","status":"busy","telemetry_api_key":null,"active_title":"Virtuoso","suspended_at":null,"suspension_reason":null,"roblox_user_id":null,"roblox_access_token":null,"roblox_refresh_token":null,"roblox_token_expires_at":null,"experience":null,"education":null,"primary_role":null,"specialization":null,"is_verified":true}
|
||||||
|
Socket.IO client connected: SONViRPBkUi1iTt5AAAD
|
||||||
|
9:48:53 AM [express] GET /api/directory/architects 304 in 50ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
9:48:54 AM [express] GET /api/metrics 304 in 95ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:49:37 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:50:24 AM [express] GET /api/metrics 304 in 266ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:50:36 AM [express] GET /api/os/notifications 304 in 142ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:50:45 AM [express] GET /api/os/notifications 200 in 138ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:51:37 AM [express] GET /api/os/notifications 304 in 108ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:53:11 AM [express] GET /api/os/notifications 304 in 110ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:54:10 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:55:11 AM [express] GET /api/os/notifications 304 in 145ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:56:10 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:57:11 AM [express] GET /api/os/notifications 304 in 158ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:58:10 AM [express] GET /api/os/notifications 304 in 102ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:58:37 AM [express] GET /api/os/notifications 304 in 117ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:00:11 AM [express] GET /api/os/notifications 304 in 115ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:01:10 AM [express] GET /api/os/notifications 304 in 103ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:02:11 AM [express] GET /api/os/notifications 304 in 115ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:03:10 AM [express] GET /api/os/notifications 304 in 212ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:04:11 AM [express] GET /api/os/notifications 304 in 213ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:05:10 AM [express] GET /api/os/notifications 304 in 118ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:06:08 AM [express] GET /api/os/projects 200 in 48ms :: [{"id":"b1a2b3c4-d5e6-f7a8-b9c0-d1e2f3a4b5c6","title":"Internal Dashboard Redesign","status":"In Progress","engine":"React"},{"id":"b2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d7","title":"Real-time Collaboration Feature","status":"Planning","engine":"WebSockets"},{"id":"0efc381c-8824-47a7-8e15-79238a8512f9","title":"All-IN-One","status":"planning","engine":"Roblox"}]
|
||||||
|
10:06:11 AM [express] GET /api/os/notifications 304 in 95ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:07:10 AM [express] GET /api/os/notifications 304 in 110ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:08:11 AM [express] GET /api/os/notifications 304 in 201ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:09:10 AM [express] GET /api/os/notifications 304 in 127ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:10:11 AM [express] GET /api/os/notifications 304 in 108ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:11:10 AM [express] GET /api/os/notifications 304 in 135ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:11:59 AM [express] GET /api/os/notifications 304 in 128ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:12:10 AM [express] GET /api/metrics 304 in 116ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
Socket.IO client disconnected: SONViRPBkUi1iTt5AAAD
|
||||||
|
10:12:14 AM [express] GET /api/auth/session 304 in 122ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:12:15 AM [express] GET /api/os/notifications 304 in 202ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: 1jlsWscUMHO4pzb9AAAF
|
||||||
|
10:12:16 AM [express] GET /api/auth/session 304 in 51ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:12:22 AM [express] GET /api/directory/architects 304 in 95ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:12:22 AM [express] GET /api/metrics 304 in 200ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:13:16 AM [express] GET /api/os/notifications 304 in 155ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:14:15 AM [express] GET /api/os/notifications 304 in 156ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:15:16 AM [express] GET /api/os/notifications 304 in 201ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client disconnected: 1jlsWscUMHO4pzb9AAAF
|
||||||
|
10:16:14 AM [express] GET /api/auth/session 304 in 100ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:16:14 AM [express] GET /api/os/notifications 304 in 179ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: 7HorosbrSbisLf-jAAAH
|
||||||
|
10:16:16 AM [express] GET /api/auth/session 304 in 51ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:16:21 AM [express] GET /api/directory/architects 304 in 99ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:16:23 AM [express] GET /api/metrics 304 in 1275ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:16:53 AM [express] GET /api/metrics 304 in 154ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:17:15 AM [express] GET /api/os/notifications 304 in 244ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client disconnected: 7HorosbrSbisLf-jAAAH
|
||||||
|
10:17:51 AM [express] GET /api/auth/session 304 in 95ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:17:51 AM [express] GET /api/os/notifications 304 in 174ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: oVmGjMBMmxoOQshEAAAJ
|
||||||
|
10:17:53 AM [express] GET /api/auth/session 304 in 56ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:17:59 AM [express] GET /api/directory/architects 304 in 91ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:17:59 AM [express] GET /api/metrics 304 in 148ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:18:52 AM [express] GET /api/os/notifications 304 in 246ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:19:53 AM [express] GET /api/os/notifications 304 in 179ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:20:52 AM [express] GET /api/os/notifications 304 in 152ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:21:53 AM [express] GET /api/os/notifications 304 in 183ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:22:52 AM [express] GET /api/os/notifications 304 in 160ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:23:53 AM [express] GET /api/os/notifications 304 in 139ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:24:33 AM [express] GET /api/metrics 304 in 176ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:24:34 AM [express] GET /api/directory/architects 304 in 122ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:24:52 AM [express] GET /api/os/notifications 304 in 140ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:26:11 AM [express] GET /api/os/notifications 304 in 120ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:27:10 AM [express] GET /api/os/notifications 304 in 216ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:28:11 AM [express] GET /api/os/notifications 304 in 119ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:29:10 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:30:11 AM [express] GET /api/os/notifications 304 in 113ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:31:10 AM [express] GET /api/os/notifications 304 in 98ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:32:11 AM [express] GET /api/os/notifications 304 in 109ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:33:10 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:34:11 AM [express] GET /api/os/notifications 304 in 164ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:35:10 AM [express] GET /api/os/notifications 304 in 215ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:36:11 AM [express] GET /api/os/notifications 304 in 101ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:36:51 AM [express] GET /api/os/notifications 304 in 176ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client disconnected: oVmGjMBMmxoOQshEAAAJ
|
||||||
|
10:36:55 AM [express] GET /api/auth/session 304 in 88ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:36:55 AM [express] GET /api/os/notifications 304 in 115ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: Hn3Vf4IWtV8vWti4AAAL
|
||||||
|
10:36:57 AM [express] GET /api/auth/session 304 in 54ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:37:02 AM [express] GET /api/directory/architects 304 in 99ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:37:02 AM [express] GET /api/metrics 304 in 185ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
Socket.IO client disconnected: Hn3Vf4IWtV8vWti4AAAL
|
||||||
|
10:37:10 AM [express] GET /api/auth/session 304 in 66ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:37:10 AM [express] GET /api/os/notifications 304 in 132ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: -4Oar_-DLHhd7XtkAAAN
|
||||||
|
10:37:12 AM [express] GET /api/auth/session 304 in 55ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:37:17 AM [express] GET /api/directory/architects 304 in 115ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:37:17 AM [express] GET /api/metrics 304 in 153ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:38:11 AM [express] GET /api/os/notifications 304 in 102ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:39:10 AM [express] GET /api/os/notifications 304 in 100ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client disconnected: -4Oar_-DLHhd7XtkAAAN
|
||||||
|
10:39:23 AM [express] GET /api/auth/session 304 in 104ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:39:23 AM [express] GET /api/os/notifications 304 in 143ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: HtMH2_fgsHXcTyVJAAAP
|
||||||
|
10:39:25 AM [express] GET /api/auth/session 304 in 56ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:40:24 AM [express] GET /api/os/notifications 304 in 158ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:41:23 AM [express] GET /api/os/notifications 304 in 144ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:42:06 AM [express] GET /api/directory/architects 304 in 152ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:42:06 AM [express] GET /api/metrics 304 in 195ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
Socket.IO client disconnected: HtMH2_fgsHXcTyVJAAAP
|
||||||
|
10:42:10 AM [express] GET /api/auth/session 304 in 62ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:42:10 AM [express] GET /api/os/notifications 304 in 129ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: vYDfSF0shJxfTWymAAAR
|
||||||
|
10:42:12 AM [express] GET /api/auth/session 304 in 50ms :: {"authenticated":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","username":"MrPiglr","email":"mrpiglr@gmail.com","isAdmin":true}}
|
||||||
|
10:42:18 AM [express] GET /api/directory/architects 304 in 100ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
10:42:18 AM [express] GET /api/metrics 304 in 139ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
10:43:10 AM [express] GET /api/os/notifications 304 in 103ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:44:11 AM [express] GET /api/os/notifications 304 in 119ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:45:10 AM [express] GET /api/os/notifications 304 in 113ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:46:11 AM [express] GET /api/os/notifications 304 in 129ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:47:10 AM [express] GET /api/os/notifications 304 in 126ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:48:11 AM [express] GET /api/os/notifications 304 in 107ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:49:10 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:50:11 AM [express] GET /api/os/notifications 304 in 101ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:51:10 AM [express] GET /api/os/notifications 304 in 210ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:52:11 AM [express] GET /api/os/notifications 304 in 107ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:53:10 AM [express] GET /api/os/notifications 304 in 119ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:54:11 AM [express] GET /api/os/notifications 304 in 264ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:55:10 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:56:11 AM [express] GET /api/os/notifications 304 in 111ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:57:10 AM [express] GET /api/os/notifications 304 in 146ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:58:11 AM [express] GET /api/os/notifications 304 in 114ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
10:59:10 AM [express] GET /api/os/notifications 304 in 107ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:00:11 AM [express] GET /api/os/notifications 304 in 119ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:01:10 AM [express] GET /api/os/notifications 304 in 120ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:02:11 AM [express] GET /api/os/notifications 304 in 129ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:03:10 AM [express] GET /api/os/notifications 304 in 128ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:04:11 AM [express] GET /api/os/notifications 304 in 110ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:05:10 AM [express] GET /api/os/notifications 304 in 138ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:06:11 AM [express] GET /api/os/notifications 304 in 113ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:07:10 AM [express] GET /api/os/notifications 304 in 111ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:08:11 AM [express] GET /api/os/notifications 304 in 111ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:09:10 AM [express] GET /api/os/notifications 304 in 125ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:10:11 AM [express] GET /api/os/notifications 304 in 109ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:11:10 AM [express] GET /api/os/notifications 304 in 114ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:12:11 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:13:10 AM [express] GET /api/os/notifications 304 in 114ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:14:11 AM [express] GET /api/os/notifications 304 in 113ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:15:10 AM [express] GET /api/os/notifications 304 in 108ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:16:11 AM [express] GET /api/os/notifications 304 in 99ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:17:10 AM [express] GET /api/os/notifications 304 in 104ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:18:11 AM [express] GET /api/os/notifications 304 in 116ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:19:10 AM [express] GET /api/os/notifications 304 in 124ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:20:11 AM [express] GET /api/os/notifications 304 in 108ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:21:10 AM [express] GET /api/os/notifications 304 in 200ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:22:11 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:23:10 AM [express] GET /api/os/notifications 304 in 94ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:24:11 AM [express] GET /api/os/notifications 304 in 134ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:25:10 AM [express] GET /api/os/notifications 304 in 95ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:26:11 AM [express] GET /api/os/notifications 304 in 110ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:27:10 AM [express] GET /api/os/notifications 304 in 98ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:28:11 AM [express] GET /api/os/notifications 304 in 101ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:29:10 AM [express] GET /api/os/notifications 304 in 100ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:30:11 AM [express] GET /api/os/notifications 304 in 108ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
11:31:10 AM [express] GET /api/os/notifications 304 in 124ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
2
boot.log
Normal file
2
boot.log
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
booting aethex-kernel-v1-1770277445 ...
|
||||||
|
onprem instance 'aethex-kernel-v1-1770277445' created...
|
||||||
2
boot_final.log
Normal file
2
boot_final.log
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
booting aethex-kernel-v1-1770277533 ...
|
||||||
|
onprem instance 'aethex-kernel-v1-1770277533' created...
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -o pipefail
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# AeThex OS - Full Layered Architecture Builder
|
# AeThex OS - Full Layered Architecture Builder
|
||||||
|
|
@ -29,7 +30,7 @@ for cmd in debootstrap xorriso genisoimage mksquashfs grub-mkrescue; do
|
||||||
if ! command -v "$cmd" &> /dev/null; then
|
if ! command -v "$cmd" &> /dev/null; then
|
||||||
echo "[!] Missing: $cmd - installing..."
|
echo "[!] Missing: $cmd - installing..."
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
apt-get install -y -qq "$cmd" 2>&1 | tail -5
|
apt-get install -y -qq "$cmd"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
@ -41,7 +42,7 @@ echo ""
|
||||||
|
|
||||||
echo "[+] Bootstrapping Ubuntu 22.04 base system (older kernel 5.15)..."
|
echo "[+] Bootstrapping Ubuntu 22.04 base system (older kernel 5.15)..."
|
||||||
echo " (debootstrap takes ~10-15 minutes...)"
|
echo " (debootstrap takes ~10-15 minutes...)"
|
||||||
debootstrap --arch=amd64 --variant=minbase jammy "$ROOTFS_DIR" http://archive.ubuntu.com/ubuntu/ 2>&1 | tail -20
|
debootstrap --arch=amd64 --variant=minbase jammy "$ROOTFS_DIR" http://archive.ubuntu.com/ubuntu/
|
||||||
|
|
||||||
echo "[+] Configuring base system..."
|
echo "[+] Configuring base system..."
|
||||||
echo "aethex-os" > "$ROOTFS_DIR/etc/hostname"
|
echo "aethex-os" > "$ROOTFS_DIR/etc/hostname"
|
||||||
|
|
@ -80,10 +81,11 @@ chroot "$ROOTFS_DIR" bash -c '
|
||||||
firefox thunar xfce4-terminal \
|
firefox thunar xfce4-terminal \
|
||||||
file-roller mousepad ristretto \
|
file-roller mousepad ristretto \
|
||||||
zenity notify-osd \
|
zenity notify-osd \
|
||||||
vim nano
|
vim nano \
|
||||||
|
ubiquity ubiquity-frontend-gtk ubiquity-ubuntu-artwork gparted
|
||||||
|
|
||||||
apt-get clean
|
apt-get clean
|
||||||
' 2>&1 | tail -50
|
'
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "┌─────────────────────────────────────────────────────────────┐"
|
echo "┌─────────────────────────────────────────────────────────────┐"
|
||||||
|
|
@ -113,7 +115,7 @@ chroot "$ROOTFS_DIR" bash -c '
|
||||||
apt-get install -y dxvk
|
apt-get install -y dxvk
|
||||||
|
|
||||||
apt-get clean
|
apt-get clean
|
||||||
' 2>&1 | tail -30
|
'
|
||||||
|
|
||||||
echo "[+] Setting up Wine runtime environment..."
|
echo "[+] Setting up Wine runtime environment..."
|
||||||
mkdir -p "$ROOTFS_DIR/opt/aethex/runtimes/windows"
|
mkdir -p "$ROOTFS_DIR/opt/aethex/runtimes/windows"
|
||||||
|
|
@ -158,7 +160,7 @@ chroot "$ROOTFS_DIR" bash -c '
|
||||||
systemctl enable docker
|
systemctl enable docker
|
||||||
|
|
||||||
apt-get clean
|
apt-get clean
|
||||||
' 2>&1 | tail -20
|
'
|
||||||
|
|
||||||
echo "[+] Installing development tools..."
|
echo "[+] Installing development tools..."
|
||||||
chroot "$ROOTFS_DIR" bash -c '
|
chroot "$ROOTFS_DIR" bash -c '
|
||||||
|
|
@ -190,7 +192,7 @@ chroot "$ROOTFS_DIR" bash -c '
|
||||||
apt-get install -y code
|
apt-get install -y code
|
||||||
|
|
||||||
apt-get clean
|
apt-get clean
|
||||||
' 2>&1 | tail -30
|
'
|
||||||
|
|
||||||
echo "[+] Setting up dev runtime launchers..."
|
echo "[+] Setting up dev runtime launchers..."
|
||||||
mkdir -p "$ROOTFS_DIR/opt/aethex/runtimes/linux-dev"
|
mkdir -p "$ROOTFS_DIR/opt/aethex/runtimes/linux-dev"
|
||||||
|
|
@ -226,7 +228,7 @@ echo "[+] Setting up AeThex Desktop application..."
|
||||||
# Build mobile app if possible
|
# Build mobile app if possible
|
||||||
if [ -f "package.json" ]; then
|
if [ -f "package.json" ]; then
|
||||||
echo " Building AeThex mobile app..."
|
echo " Building AeThex mobile app..."
|
||||||
npm run build 2>&1 | tail -5 || echo " Build skipped"
|
npm run build || echo " Build skipped"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy app files
|
# Copy app files
|
||||||
|
|
@ -247,7 +249,7 @@ if [ -d "client" ] && [ -d "server" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo " Installing dependencies..."
|
echo " Installing dependencies..."
|
||||||
chroot "$ROOTFS_DIR" bash -c 'cd /opt/aethex-desktop && npm install --production --legacy-peer-deps' 2>&1 | tail -10 || true
|
chroot "$ROOTFS_DIR" bash -c 'cd /opt/aethex-desktop && npm install --production --legacy-peer-deps' || true
|
||||||
else
|
else
|
||||||
echo " (client/server not found; skipping)"
|
echo " (client/server not found; skipping)"
|
||||||
fi
|
fi
|
||||||
|
|
@ -312,6 +314,20 @@ X-GNOME-Autostart-enabled=true
|
||||||
Comment=Launch AeThex mobile interface in fullscreen
|
Comment=Launch AeThex mobile interface in fullscreen
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Create Install Shortcut
|
||||||
|
mkdir -p "$ROOTFS_DIR/home/aethex/Desktop"
|
||||||
|
cat > "$ROOTFS_DIR/home/aethex/Desktop/install-aethex.desktop" << 'EOF'
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Install AeThex OS
|
||||||
|
Comment=Install this system permanently to your hard drive
|
||||||
|
Exec=sudo ubiquity
|
||||||
|
Icon=ubiquity
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=System;
|
||||||
|
EOF
|
||||||
|
chmod +x "$ROOTFS_DIR/home/aethex/Desktop/install-aethex.desktop"
|
||||||
|
|
||||||
chroot "$ROOTFS_DIR" chown -R aethex:aethex /home/aethex /opt/aethex-desktop 2>/dev/null || true
|
chroot "$ROOTFS_DIR" chown -R aethex:aethex /home/aethex /opt/aethex-desktop 2>/dev/null || true
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -326,7 +342,7 @@ chroot "$ROOTFS_DIR" bash -c '
|
||||||
KERNEL_VERSION=$(ls /boot/vmlinuz-* | sed "s|/boot/vmlinuz-||" | head -n 1)
|
KERNEL_VERSION=$(ls /boot/vmlinuz-* | sed "s|/boot/vmlinuz-||" | head -n 1)
|
||||||
echo " Rebuilding initramfs for kernel $KERNEL_VERSION with casper..."
|
echo " Rebuilding initramfs for kernel $KERNEL_VERSION with casper..."
|
||||||
update-initramfs -u -k "$KERNEL_VERSION"
|
update-initramfs -u -k "$KERNEL_VERSION"
|
||||||
' 2>&1 | tail -10
|
'
|
||||||
|
|
||||||
echo "[+] Extracting kernel and initrd..."
|
echo "[+] Extracting kernel and initrd..."
|
||||||
KERNEL="$(ls -1 $ROOTFS_DIR/boot/vmlinuz-* 2>/dev/null | head -n 1)"
|
KERNEL="$(ls -1 $ROOTFS_DIR/boot/vmlinuz-* 2>/dev/null | head -n 1)"
|
||||||
|
|
@ -359,23 +375,23 @@ umount -lf "$ROOTFS_DIR/dev" 2>/dev/null || true
|
||||||
|
|
||||||
echo "[+] Creating SquashFS filesystem..."
|
echo "[+] Creating SquashFS filesystem..."
|
||||||
echo " (compressing ~4-5GB system, takes 15-20 minutes...)"
|
echo " (compressing ~4-5GB system, takes 15-20 minutes...)"
|
||||||
mksquashfs "$ROOTFS_DIR" "$ISO_DIR/casper/filesystem.squashfs" -b 1048576 -comp xz -Xdict-size 100% 2>&1 | tail -5
|
mksquashfs "$ROOTFS_DIR" "$ISO_DIR/casper/filesystem.squashfs" -b 1048576 -comp xz -Xdict-size 100%
|
||||||
|
|
||||||
echo "[+] Setting up BIOS boot (isolinux)..."
|
echo "[+] Setting up BIOS boot (isolinux)..."
|
||||||
cat > "$ISO_DIR/isolinux/isolinux.cfg" << 'EOF'
|
cat > "$ISO_DIR/isolinux/isolinux.cfg" << 'EOF'
|
||||||
PROMPT 0
|
PROMPT 1
|
||||||
TIMEOUT 50
|
TIMEOUT 100
|
||||||
DEFAULT linux
|
DEFAULT linux
|
||||||
|
|
||||||
LABEL linux
|
LABEL linux
|
||||||
MENU LABEL AeThex OS - Full Stack
|
MENU LABEL AeThex OS - Full Stack
|
||||||
KERNEL /casper/vmlinuz
|
KERNEL /casper/vmlinuz
|
||||||
APPEND initrd=/casper/initrd.img boot=casper quiet splash ---
|
APPEND initrd=/casper/initrd.img boot=casper username=aethex quiet splash ---
|
||||||
|
|
||||||
LABEL safe
|
LABEL safe
|
||||||
MENU LABEL AeThex OS - Safe Mode (No ACPI)
|
MENU LABEL AeThex OS - Safe Mode (Graphics Fix)
|
||||||
KERNEL /casper/vmlinuz
|
KERNEL /casper/vmlinuz
|
||||||
APPEND initrd=/casper/initrd.img boot=casper acpi=off noapic nomodeset ---
|
APPEND initrd=/casper/initrd.img boot=casper username=aethex nomodeset ---
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cp /usr/lib/syslinux/isolinux.bin "$ISO_DIR/isolinux/" 2>/dev/null || \
|
cp /usr/lib/syslinux/isolinux.bin "$ISO_DIR/isolinux/" 2>/dev/null || \
|
||||||
|
|
@ -389,23 +405,23 @@ set timeout=10
|
||||||
set default=0
|
set default=0
|
||||||
|
|
||||||
menuentry "AeThex OS - Full Stack" {
|
menuentry "AeThex OS - Full Stack" {
|
||||||
linux /casper/vmlinuz boot=casper quiet splash ---
|
linux /casper/vmlinuz boot=casper username=aethex quiet splash ---
|
||||||
initrd /casper/initrd.img
|
initrd /casper/initrd.img
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "AeThex OS - Safe Mode (No ACPI)" {
|
menuentry "AeThex OS - Safe Mode (Graphics Fix)" {
|
||||||
linux /casper/vmlinuz boot=casper acpi=off noapic nomodeset ---
|
linux /casper/vmlinuz boot=casper username=aethex nomodeset ---
|
||||||
initrd /casper/initrd.img
|
initrd /casper/initrd.img
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "AeThex OS - Debug Mode" {
|
menuentry "AeThex OS - Debug Mode" {
|
||||||
linux /casper/vmlinuz boot=casper debug ignore_loglevel earlyprintk=vga ---
|
linux /casper/vmlinuz boot=casper username=aethex debug ignore_loglevel earlyprintk=vga ---
|
||||||
initrd /casper/initrd.img
|
initrd /casper/initrd.img
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "[+] Creating hybrid ISO..."
|
echo "[+] Creating hybrid ISO..."
|
||||||
grub-mkrescue -o "$BUILD_DIR/$ISO_NAME" "$ISO_DIR" --verbose 2>&1 | tail -20
|
grub-mkrescue -o "$BUILD_DIR/$ISO_NAME" "$ISO_DIR" --verbose
|
||||||
|
|
||||||
echo "[+] Computing SHA256 checksum..."
|
echo "[+] Computing SHA256 checksum..."
|
||||||
if [ -f "$BUILD_DIR/$ISO_NAME" ]; then
|
if [ -f "$BUILD_DIR/$ISO_NAME" ]; then
|
||||||
|
|
|
||||||
37
build-kernel.ps1
Normal file
37
build-kernel.ps1
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#!/usr/bin/env pwsh
|
||||||
|
# AeThex OS - Unikernel Build Wrapper for Windows/WSL
|
||||||
|
|
||||||
|
Write-Host "═══════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||||
|
Write-Host " AeThex OS - Unikernel Builder (Windows -> WSL)" -ForegroundColor Cyan
|
||||||
|
Write-Host "═══════════════════════════════════════════════════════════════"
|
||||||
|
Write-Host ""
|
||||||
|
|
||||||
|
# 1. Check if OPS is installed in WSL
|
||||||
|
$checkOps = wsl bash -c "command -v ops"
|
||||||
|
if (-not $checkOps) {
|
||||||
|
Write-Host "[!] 'ops' is not installed in WSL." -ForegroundColor Red
|
||||||
|
Write-Host " Installing it now..." -ForegroundColor Yellow
|
||||||
|
wsl bash -c "curl https://ops.city/get.sh -sSfL | sh"
|
||||||
|
Write-Host "[OK] OPS Installed." -ForegroundColor Green
|
||||||
|
Write-Host ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# 2. Convert line endings of the build script just in case
|
||||||
|
$scriptPath = "script/build-unikernel.sh"
|
||||||
|
if (Test-Path $scriptPath) {
|
||||||
|
(Get-Content $scriptPath) -join "`n" | Set-Content $scriptPath -NoNewline
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. Run the build inside WSL
|
||||||
|
# We explicitly set the working directory to the current folder mapped in WSL
|
||||||
|
Write-Host "[*] Building Kernel..." -ForegroundColor Yellow
|
||||||
|
wsl bash -c "cd '$PWD' && bash script/build-unikernel.sh"
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[OK] Kernel Image Created Successfully!" -ForegroundColor Green
|
||||||
|
Write-Host " To run it, type: wsl ops run aethex-kernel-v1" -ForegroundColor Gray
|
||||||
|
} else {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "[!] Build Failed." -ForegroundColor Red
|
||||||
|
}
|
||||||
44
build_and_run.log
Normal file
44
build_and_run.log
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
> rest-express@1.0.0 build:kernel
|
||||||
|
> bash script/build-unikernel.sh
|
||||||
|
|
||||||
|
â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>
|
||||||
|
[*] Detected Windows Environment (MinGW/Git Bash).
|
||||||
|
[*] Switching to WSL Context...
|
||||||
|
qemu-system-x86_64: terminating on signal 15 from pid 3662812 ()
|
||||||
|
<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>â•<EFBFBD>
|
||||||
|
[*] Using OPS binary: /home/mrpiglr/.ops/bin/ops
|
||||||
|
[*] Updating OPS package list...
|
||||||
|
[*] Building Unikernel Image...
|
||||||
|
Running: /home/mrpiglr/.ops/bin/ops pkg load eyberg/node:v18.12.1 ...
|
||||||
|
warning: overwriting existing file "/dist/index.js" hostpath old: dist/index.js new: "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS//dist/index.js"
|
||||||
|
running local instance
|
||||||
|
booting /home/mrpiglr/.ops/images/aethex-kernel-v1 ...
|
||||||
|
[0.563567] en1: assigned 10.0.2.15
|
||||||
|
âš ï¸<EFBFBD> Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217
|
||||||
|
[dotenv@17.2.3] injecting env (8) from .env -- tip: ðŸ”<C5B8> prevent building .env in docker: https://dotenvx.com/prebuild
|
||||||
|
[dotenv@17.2.3] injecting env (0) from .env -- tip: âš™ï¸<C3AF> write to custom object with { processEnv: myObject }
|
||||||
|
Warning: connect.session() MemoryStore is not
|
||||||
|
designed for a production environment, as it will leak
|
||||||
|
memory, and will not scale past a single process.
|
||||||
|
7:46:19 AM [websocket] WebSocket server initialized
|
||||||
|
7:46:19 AM [express] serving on port 8080
|
||||||
|
7:46:19 AM [websocket] WebSocket available at ws://localhost:8080/socket.io
|
||||||
|
[2.414827] en1: assigned FE80::2CC3:44FF:FEF8:D3F3
|
||||||
|
(node:2) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
|
||||||
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
|
||||||
|
[✓] Build Complete.
|
||||||
|
Image: ~/.ops/images/aethex-kernel-v1
|
||||||
|
|
||||||
|
To boot the kernel:
|
||||||
|
/home/mrpiglr/.ops/bin/ops run aethex-kernel-v1
|
||||||
|
|
||||||
|
To deploy to AWS/GCP:
|
||||||
|
/home/mrpiglr/.ops/bin/ops image create -c ops.json -i aethex-kernel-v1 -t aws
|
||||||
72
build_and_run_clean.log
Normal file
72
build_and_run_clean.log
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
|
||||||
|
> rest-express@1.0.0 build:kernel
|
||||||
|
> bash script/build-unikernel.sh
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
[*] Detected Windows Environment (MinGW/Git Bash).
|
||||||
|
[*] Switching to WSL Context...
|
||||||
|
[33m[plugin vite:reporter]
|
||||||
|
(!) C:/Users/PCOEM/AeThexOS/AeThex-OS/node_modules/@capacitor/camera/dist/esm/index.js is dynamically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts but also statically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-native-features.ts, dynamic import will not move module into another chunk.
|
||||||
|
[39m
|
||||||
|
[33m
|
||||||
|
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||||
|
- Using dynamic import() to code-split the application
|
||||||
|
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||||
|
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.[39m
|
||||||
|
|
||||||
|
dist\index.js 1.5mb
|
||||||
|
|
||||||
|
Done in 6064ms
|
||||||
|
qemu-system-x86_64: terminating on signal 15 from pid 3672638 (<unknown process>)
|
||||||
|
[22m[32massets/holographic_digital_security_seal_for_certification-DujiIi4u.png [39m[1m[2m 557.88 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_subtle_digital_grid_texture-CW2Q0w3T.png [39m[1m[2m 965.43 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/abstract_holographic_world_map_data_visualization-DA4sQHBK.png [39m[1m[2m1,343.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_digital_circuit_board_background-CqDjO0Wd.png [39m[1m[2m1,577.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[35massets/index-C25YaYOI.css [39m[1m[2m 226.22 kB[22m[1m[22m[2m │ gzip: 29.40 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DZ3HkAbg.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DPJCvkTF.js [39m[1m[2m 0.28 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-a24r8sCo.js [39m[1m[2m 0.36 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BPkARqmR.js [39m[1m[2m 0.38 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DiUCUXaM.js [39m[1m[2m 0.42 kB[22m[1m[22m[2m │ gzip: 0.20 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-jfjrrehZ.js [39m[1m[2m 0.76 kB[22m[1m[22m[2m │ gzip: 0.35 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DLPSmpR2.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.46 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-D9jibmwr.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-B4eFBhIm.js [39m[1m[2m 1.06 kB[22m[1m[22m[2m │ gzip: 0.34 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DjK0eNnT.js [39m[1m[2m 1.15 kB[22m[1m[22m[2m │ gzip: 0.55 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-C68zp4qU.js [39m[1m[2m 2.44 kB[22m[1m[22m[2m │ gzip: 1.09 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-CONwI-Dv.js [39m[1m[2m 3.45 kB[22m[1m[22m[2m │ gzip: 1.10 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BO91sTaU.js [39m[1m[2m 8.67 kB[22m[1m[22m[2m │ gzip: 2.95 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/index-CJvwTLjS.js [39m[1m[33m1,766.52 kB[39m[22m[2m │ gzip: 471.18 kB[22m
|
||||||
|
[32m✓ built in 23.30s[39m
|
||||||
|
building server...
|
||||||
|
[*] Updating OPS package list...
|
||||||
|
[*] Building Unikernel Image...
|
||||||
|
Running: /home/mrpiglr/.ops/bin/ops pkg load eyberg/node:v18.12.1 ...
|
||||||
|
warning: overwriting existing file "/dist/index.js" hostpath old: dist/index.js new: "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS//dist/index.js"
|
||||||
|
running local instance
|
||||||
|
booting /home/mrpiglr/.ops/images/aethex-kernel-v1 ...
|
||||||
|
[0.670397] en1: assigned 10.0.2.15
|
||||||
|
⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217
|
||||||
|
[dotenv@17.2.3] injecting env (8) from .env -- tip: ⚙️ load multiple .env files with { path: ['.env.local', '.env'] }
|
||||||
|
[dotenv@17.2.3] injecting env (0) from .env -- tip: 🛠️ run anywhere with `dotenvx run -- yourcommand`
|
||||||
|
Warning: connect.session() MemoryStore is not
|
||||||
|
designed for a production environment, as it will leak
|
||||||
|
memory, and will not scale past a single process.
|
||||||
|
7:47:46 AM [websocket] WebSocket server initialized
|
||||||
|
7:47:46 AM [express] serving on port 8080
|
||||||
|
7:47:46 AM [websocket] WebSocket available at ws://localhost:8080/socket.io
|
||||||
|
[2.509299] en1: assigned FE80::D0DD:70FF:FE6F:CD82
|
||||||
|
(node:2) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
|
||||||
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
|
||||||
|
[✓] Build Complete.
|
||||||
|
Image: ~/.ops/images/aethex-kernel-v1
|
||||||
|
|
||||||
|
To boot the kernel:
|
||||||
|
/home/mrpiglr/.ops/bin/ops run aethex-kernel-v1
|
||||||
|
|
||||||
|
To deploy to AWS/GCP:
|
||||||
|
/home/mrpiglr/.ops/bin/ops image create -c ops.json -i aethex-kernel-v1 -t aws
|
||||||
108
cache_fix_run.log
Normal file
108
cache_fix_run.log
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
|
||||||
|
> rest-express@1.0.0 build:kernel
|
||||||
|
> bash script/build-unikernel.sh
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
[*] Detected Windows Environment (MinGW/Git Bash).
|
||||||
|
[*] Switching to WSL Context...
|
||||||
|
[33m[plugin vite:reporter]
|
||||||
|
(!) C:/Users/PCOEM/AeThexOS/AeThex-OS/node_modules/@capacitor/camera/dist/esm/index.js is dynamically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts but also statically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-native-features.ts, dynamic import will not move module into another chunk.
|
||||||
|
[39m
|
||||||
|
[33m
|
||||||
|
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||||
|
- Using dynamic import() to code-split the application
|
||||||
|
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||||
|
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.[39m
|
||||||
|
|
||||||
|
dist\index.js 1.5mb
|
||||||
|
|
||||||
|
Done in 2791ms
|
||||||
|
qemu-system-x86_64: terminating on signal 15 from pid 838 (pkill)
|
||||||
|
m../dist/public/[22m[32massets/holographic_digital_security_seal_for_certification-DujiIi4u.png [39m[1m[2m 557.88 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_subtle_digital_grid_texture-CW2Q0w3T.png [39m[1m[2m 965.43 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/abstract_holographic_world_map_data_visualization-DA4sQHBK.png [39m[1m[2m1,343.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_digital_circuit_board_background-CqDjO0Wd.png [39m[1m[2m1,577.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[35massets/index-C25YaYOI.css [39m[1m[2m 226.22 kB[22m[1m[22m[2m │ gzip: 29.40 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DZ3HkAbg.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DPJCvkTF.js [39m[1m[2m 0.28 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-a24r8sCo.js [39m[1m[2m 0.36 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BPkARqmR.js [39m[1m[2m 0.38 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DiUCUXaM.js [39m[1m[2m 0.42 kB[22m[1m[22m[2m │ gzip: 0.20 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-jfjrrehZ.js [39m[1m[2m 0.76 kB[22m[1m[22m[2m │ gzip: 0.35 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DLPSmpR2.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.46 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-D9jibmwr.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-B4eFBhIm.js [39m[1m[2m 1.06 kB[22m[1m[22m[2m │ gzip: 0.34 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DjK0eNnT.js [39m[1m[2m 1.15 kB[22m[1m[22m[2m │ gzip: 0.55 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-C68zp4qU.js [39m[1m[2m 2.44 kB[22m[1m[22m[2m │ gzip: 1.09 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-CONwI-Dv.js [39m[1m[2m 3.45 kB[22m[1m[22m[2m │ gzip: 1.10 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BO91sTaU.js [39m[1m[2m 8.67 kB[22m[1m[22m[2m │ gzip: 2.95 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/index-CJvwTLjS.js [39m[1m[33m1,766.52 kB[39m[22m[2m │ gzip: 471.18 kB[22m
|
||||||
|
[32m✓ built in 11.40s[39m
|
||||||
|
building server...
|
||||||
|
[*] Updating OPS package list...
|
||||||
|
[*] Building Unikernel Image...
|
||||||
|
Running: /home/mrpiglr/.ops/bin/ops pkg load eyberg/node:v18.12.1 ...
|
||||||
|
warning: overwriting existing file "/dist/index.js" hostpath old: dist/index.js new: "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS//dist/index.js"
|
||||||
|
running local instance
|
||||||
|
booting /home/mrpiglr/.ops/images/aethex-kernel-v1 ...
|
||||||
|
[0.354227] en1: assigned 10.0.2.15
|
||||||
|
⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217
|
||||||
|
[dotenv@17.2.3] injecting env (8) from .env -- tip: ⚙️ write to custom object with { processEnv: myObject }
|
||||||
|
[dotenv@17.2.3] injecting env (0) from .env -- tip: ⚙️ suppress all logs with { quiet: true }
|
||||||
|
Warning: connect.session() MemoryStore is not
|
||||||
|
designed for a production environment, as it will leak
|
||||||
|
memory, and will not scale past a single process.
|
||||||
|
9:33:49 AM [websocket] WebSocket server initialized
|
||||||
|
[DEBUG] Static File Setup - CWD: /, __dirname: /dist
|
||||||
|
[DEBUG] Final Static Path: /dist/public
|
||||||
|
[DEBUG] Found 19 assets in /dist/public/assets
|
||||||
|
9:33:49 AM [express] serving on port 8080
|
||||||
|
9:33:49 AM [websocket] WebSocket available at ws://localhost:8080/socket.io
|
||||||
|
[2.259727] en1: assigned FE80::98B4:A5FF:FE25:1725
|
||||||
|
(node:2) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
|
||||||
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
9:34:36 AM [express] GET /api/auth/session 200 in 5ms :: {"authenticated":false}
|
||||||
|
9:34:36 AM [express] GET /api/os/notifications 200 in 206ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
Socket.IO client connected: YwylAs27kYZP1hH6AAAB
|
||||||
|
9:34:38 AM [express] GET /api/auth/session 304 in 4ms :: {"authenticated":false}
|
||||||
|
[DEBUG] SPA Fallback for: /mobile
|
||||||
|
[DEBUG] SPA Fallback for: /home
|
||||||
|
9:35:07 AM [express] GET /api/directory/architects 200 in 109ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
9:35:07 AM [express] GET /api/metrics 200 in 172ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:35:37 AM [express] GET /api/os/notifications 304 in 155ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:35:37 AM [express] POST /api/auth/login 200 in 271ms :: {"success":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","email":"mrpiglr@gmail.com","username":"MrPiglr","isAdmin":true}}
|
||||||
|
9:35:37 AM [express] GET /api/auth/session 304 in 1ms :: {"authenticated":false}
|
||||||
|
9:35:38 AM [express] GET /api/metrics 304 in 101ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:35:42 AM [express] POST /api/auth/login 200 in 215ms :: {"success":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","email":"mrpiglr@gmail.com","username":"MrPiglr","isAdmin":true}}
|
||||||
|
9:35:42 AM [express] GET /api/auth/session 304 in 1ms :: {"authenticated":false}
|
||||||
|
9:36:08 AM [express] GET /api/directory/architects 304 in 104ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
9:36:08 AM [express] GET /api/metrics 304 in 161ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:36:37 AM [express] GET /api/os/notifications 304 in 155ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:36:38 AM [express] GET /api/metrics 304 in 131ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:37:37 AM [express] GET /api/os/notifications 304 in 198ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:38:37 AM [express] GET /api/os/notifications 304 in 144ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:39:36 AM [express] GET /api/os/notifications 304 in 150ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:40:37 AM [express] GET /api/os/notifications 304 in 261ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:42:11 AM [express] GET /api/os/notifications 304 in 156ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:43:10 AM [express] GET /api/os/notifications 304 in 112ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:43:38 AM [express] GET /api/os/notifications 304 in 153ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
9:43:53 AM [express] GET /api/metrics 304 in 114ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:43:53 AM [express] GET /api/directory/architects 304 in 74ms :: [{"id":"001","name":"Anderson","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"5a2cb1cd-b15e-4e45-9c77-63c77299ec8a","skills":null,"username":"andersongladney@gmail.com"},{"id":"002","name":"Faded","role":"admin","bio":"Welcome to my AeThex profile!","level":1,"xp":0,"passportId":"1afcc47d-4128-4f10-947e-4a0c1fedb402","skills":null,"username":"Faded"},{"id":"003","name":"Anderson","role":"oversee","bio":"As MrPiglr, the visionary behind AeThex (conceptualized in 2016, established in 2022), I'm pushing the metaverse game development boundaries.","level":1,"xp":37,"passportId":"e393ea02-6e06-42da-9917-cb4d424a87e4","skills":[],"username":"MrPiglr"}]
|
||||||
|
9:43:55 AM [express] POST /api/auth/login 200 in 263ms :: {"success":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","email":"mrpiglr@gmail.com","username":"MrPiglr","isAdmin":true}}
|
||||||
|
9:43:55 AM [express] GET /api/auth/session 304 in 0ms :: {"authenticated":false}
|
||||||
|
9:44:23 AM [express] GET /api/metrics 304 in 167ms :: {"totalProfiles":21,"totalProjects":3,"onlineUsers":1,"verifiedUsers":1,"totalXP":37,"avgLevel":1}
|
||||||
|
9:44:25 AM [express] POST /api/auth/login 200 in 237ms :: {"success":true,"user":{"id":"f2719189-f99f-48b6-aafd-b429b0e2a804","email":"mrpiglr@gmail.com","username":"MrPiglr","isAdmin":true}}
|
||||||
|
9:44:25 AM [express] GET /api/auth/session 304 in 0ms :: {"authenticated":false}
|
||||||
|
9:44:37 AM [express] GET /api/os/notifications 304 in 162ms :: [{"id":1,"message":"21 architects in network","type":"info"},{"id":2,"message":"3 active projects","type":"info"},{"id":3,"message":"Aegis security active","type":"success"}]
|
||||||
|
|
||||||
|
[✓] Build Complete.
|
||||||
|
Image: ~/.ops/images/aethex-kernel-v1
|
||||||
|
|
||||||
|
To boot the kernel:
|
||||||
|
/home/mrpiglr/.ops/bin/ops run aethex-kernel-v1
|
||||||
|
|
||||||
|
To deploy to AWS/GCP:
|
||||||
|
/home/mrpiglr/.ops/bin/ops image create -c ops.json -i aethex-kernel-v1 -t aws
|
||||||
|
|
@ -10,26 +10,15 @@ const config: CapacitorConfig = {
|
||||||
appName: 'AeThex OS',
|
appName: 'AeThex OS',
|
||||||
webDir: 'dist/public',
|
webDir: 'dist/public',
|
||||||
server: {
|
server: {
|
||||||
androidScheme: 'https',
|
// androidScheme: 'http', // Disable explicit http scheme, let it fall back to file or default
|
||||||
iosScheme: 'https',
|
url: undefined, // Ensure no server URL is set
|
||||||
// Live reload: point to dev server instead of bundled assets
|
cleartext: true,
|
||||||
...(isLiveReload && {
|
|
||||||
url: serverUrl,
|
|
||||||
cleartext: true, // Allow HTTP for local development
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
SplashScreen: {
|
SplashScreen: {
|
||||||
launchShowDuration: 2000,
|
launchShowDuration: 0,
|
||||||
launchAutoHide: true,
|
launchAutoHide: true,
|
||||||
launchFadeOutDuration: 500,
|
backgroundColor: '#000000',
|
||||||
backgroundColor: '#0a0a0a',
|
|
||||||
androidSplashResourceName: 'splash',
|
|
||||||
androidScaleType: 'CENTER_CROP',
|
|
||||||
showSpinner: true,
|
|
||||||
androidSpinnerStyle: 'small',
|
|
||||||
iosSpinnerStyle: 'small',
|
|
||||||
spinnerColor: '#DC2626',
|
|
||||||
splashFullScreen: true,
|
splashFullScreen: true,
|
||||||
splashImmersive: true
|
splashImmersive: true
|
||||||
},
|
},
|
||||||
|
|
@ -65,15 +54,15 @@ const config: CapacitorConfig = {
|
||||||
captureInput: true,
|
captureInput: true,
|
||||||
webContentsDebuggingEnabled: true,
|
webContentsDebuggingEnabled: true,
|
||||||
// Allow cleartext (HTTP) for live reload
|
// Allow cleartext (HTTP) for live reload
|
||||||
...(isLiveReload && {
|
...(isLiveReload ? {
|
||||||
allowMixedContent: true,
|
allowMixedContent: true,
|
||||||
}),
|
} : {}),
|
||||||
},
|
},
|
||||||
ios: {
|
ios: {
|
||||||
// iOS-specific live reload settings
|
// iOS-specific live reload settings
|
||||||
...(isLiveReload && {
|
...(isLiveReload ? {
|
||||||
limitsNavigationsToAppBoundDomains: false,
|
limitsNavigationsToAppBoundDomains: false,
|
||||||
}),
|
} : {}),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Service Worker for PWA functionality
|
// Service Worker for PWA functionality
|
||||||
const CACHE_NAME = 'aethex-v1';
|
const CACHE_NAME = 'aethex-v3';
|
||||||
const urlsToCache = [
|
const urlsToCache = [
|
||||||
|
|
||||||
'/',
|
'/',
|
||||||
'/mobile',
|
'/mobile',
|
||||||
'/home',
|
'/home',
|
||||||
|
|
|
||||||
28
client/public/test.html
Normal file
28
client/public/test.html
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Test Page</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #00FF00; /* Bright Green */
|
||||||
|
color: black;
|
||||||
|
font-size: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<h1>TEST FILE LOADED</h1>
|
||||||
|
<p>If you see this, file access is working.</p>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
console.log("Test file loaded successfully");
|
||||||
|
document.body.style.backgroundColor = "#00FF00";
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -153,8 +153,17 @@ export default function Terminal() {
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'build':
|
||||||
|
case 'migrate-status':
|
||||||
|
case 'migrate':
|
||||||
|
case 'seed':
|
||||||
|
case 'test':
|
||||||
|
executeCliCommand(command);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
setLines((prev) => [
|
setLines((prev) => [
|
||||||
|
|
||||||
...prev,
|
...prev,
|
||||||
{
|
{
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
|
@ -186,25 +195,25 @@ export default function Terminal() {
|
||||||
setCliStatus("idle");
|
setCliStatus("idle");
|
||||||
};
|
};
|
||||||
|
|
||||||
const startCli = async () => {
|
const executeCliCommand = async (cmd: string) => {
|
||||||
if (cliStatus === "running") return;
|
if (cliStatus === "running") return;
|
||||||
setCliStatus("running");
|
setCliStatus("running");
|
||||||
appendCliLine('system', `▸ Running ${cliCommand}...`);
|
appendCliLine('system', `▸ Running ${cmd}...`);
|
||||||
toast({ title: "CLI", description: `Started ${cliCommand}`, variant: "default" });
|
toast({ title: "CLI", description: `Started ${cmd}`, variant: "default" });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch('/api/admin/cli/start', {
|
const res = await fetch('/api/admin/cli/start', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
credentials: 'include',
|
credentials: 'include',
|
||||||
body: JSON.stringify({ command: cliCommand })
|
body: JSON.stringify({ command: cmd })
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
const text = await res.text();
|
const text = await res.text();
|
||||||
appendCliLine('error', `Start failed: ${text || res.status}`);
|
appendCliLine('error', `Start failed: ${text || res.status}`);
|
||||||
setCliStatus("error");
|
setCliStatus("error");
|
||||||
toast({ title: "CLI Error", description: `Failed to start ${cliCommand}`, variant: "destructive" });
|
toast({ title: "CLI Error", description: `Failed to start ${cmd}`, variant: "destructive" });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -222,15 +231,15 @@ export default function Terminal() {
|
||||||
es.addEventListener('error', (evt) => {
|
es.addEventListener('error', (evt) => {
|
||||||
appendCliLine('error', 'Stream error');
|
appendCliLine('error', 'Stream error');
|
||||||
setCliStatus("error");
|
setCliStatus("error");
|
||||||
toast({ title: "CLI Error", description: `Stream error for ${cliCommand}`, variant: "destructive" });
|
toast({ title: "CLI Error", description: `Stream error for ${cmd}`, variant: "destructive" });
|
||||||
es.close();
|
es.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
es.addEventListener('done', (evt) => {
|
es.addEventListener('done', (evt) => {
|
||||||
const status = evt.data === 'success' ? 'done' : 'error';
|
const status = evt.data === 'success' ? 'done' : 'error';
|
||||||
setCliStatus(status as any);
|
setCliStatus(status as any);
|
||||||
appendCliLine(status === 'done' ? 'system' : 'error', `▸ ${cliLabel || cliCommand} ${status}`);
|
appendCliLine(status === 'done' ? 'system' : 'error', `▸ ${data.label || cmd} ${status}`);
|
||||||
toast({ title: status === 'done' ? "CLI Success" : "CLI Failed", description: `${cliLabel || cliCommand} ${status}` });
|
toast({ title: status === 'done' ? "CLI Success" : "CLI Failed", description: `${data.label || cmd} ${status}` });
|
||||||
es.close();
|
es.close();
|
||||||
currentRunId.current = null;
|
currentRunId.current = null;
|
||||||
});
|
});
|
||||||
|
|
@ -238,10 +247,13 @@ export default function Terminal() {
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
appendCliLine('error', 'Failed to start CLI command');
|
appendCliLine('error', 'Failed to start CLI command');
|
||||||
setCliStatus("error");
|
setCliStatus("error");
|
||||||
toast({ title: "CLI Error", description: `Failed to start ${cliCommand}`, variant: "destructive" });
|
toast({ title: "CLI Error", description: `Failed to start ${cmd}`, variant: "destructive" });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const startCli = () => executeCliCommand(cliCommand);
|
||||||
|
|
||||||
|
|
||||||
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
if (e.key === 'Enter') {
|
if (e.key === 'Enter') {
|
||||||
processCommand(input);
|
processCommand(input);
|
||||||
|
|
|
||||||
73
debug_run.log
Normal file
73
debug_run.log
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
|
||||||
|
> rest-express@1.0.0 build:kernel
|
||||||
|
> bash script/build-unikernel.sh
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
AeThex OS - Unikernel Builder
|
||||||
|
Target: Nanos Unikernel (Bootable Image)
|
||||||
|
═══════════════════════════════════════════════════════════════
|
||||||
|
[*] Detected Windows Environment (MinGW/Git Bash).
|
||||||
|
[*] Switching to WSL Context...
|
||||||
|
[33m[plugin vite:reporter]
|
||||||
|
(!) C:/Users/PCOEM/AeThexOS/AeThex-OS/node_modules/@capacitor/camera/dist/esm/index.js is dynamically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts, C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-device-camera.ts but also statically imported by C:/Users/PCOEM/AeThexOS/AeThex-OS/client/src/hooks/use-native-features.ts, dynamic import will not move module into another chunk.
|
||||||
|
[39m
|
||||||
|
[33m
|
||||||
|
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||||
|
- Using dynamic import() to code-split the application
|
||||||
|
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||||
|
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.[39m
|
||||||
|
|
||||||
|
dist\index.js 1.5mb
|
||||||
|
|
||||||
|
Done in 463ms
|
||||||
|
m[1m[2m 4.62 kB[22m[1m[22m[2m │ gzip: 1.43 kB[22m
|
||||||
|
[2m../dist/public/[22m[32massets/holographic_digital_security_seal_for_certification-DujiIi4u.png [39m[1m[2m 557.88 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_subtle_digital_grid_texture-CW2Q0w3T.png [39m[1m[2m 965.43 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/abstract_holographic_world_map_data_visualization-DA4sQHBK.png [39m[1m[2m1,343.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[32massets/dark_digital_circuit_board_background-CqDjO0Wd.png [39m[1m[2m1,577.40 kB[22m[1m[22m
|
||||||
|
[2m../dist/public/[22m[35massets/index-C25YaYOI.css [39m[1m[2m 226.22 kB[22m[1m[22m[2m │ gzip: 29.40 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DZ3HkAbg.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DPJCvkTF.js [39m[1m[2m 0.28 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-a24r8sCo.js [39m[1m[2m 0.36 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BPkARqmR.js [39m[1m[2m 0.38 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DiUCUXaM.js [39m[1m[2m 0.42 kB[22m[1m[22m[2m │ gzip: 0.20 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-jfjrrehZ.js [39m[1m[2m 0.76 kB[22m[1m[22m[2m │ gzip: 0.35 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DLPSmpR2.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.46 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-D9jibmwr.js [39m[1m[2m 0.90 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-B4eFBhIm.js [39m[1m[2m 1.06 kB[22m[1m[22m[2m │ gzip: 0.34 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-DjK0eNnT.js [39m[1m[2m 1.15 kB[22m[1m[22m[2m │ gzip: 0.55 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-C68zp4qU.js [39m[1m[2m 2.44 kB[22m[1m[22m[2m │ gzip: 1.09 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-CONwI-Dv.js [39m[1m[2m 3.45 kB[22m[1m[22m[2m │ gzip: 1.10 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/web-BO91sTaU.js [39m[1m[2m 8.67 kB[22m[1m[22m[2m │ gzip: 2.95 kB[22m
|
||||||
|
[2m../dist/public/[22m[36massets/index-CJvwTLjS.js [39m[1m[33m1,766.52 kB[39m[22m[2m │ gzip: 471.18 kB[22m
|
||||||
|
[32m✓ built in 20.35s[39m
|
||||||
|
building server...
|
||||||
|
[*] Updating OPS package list...
|
||||||
|
[*] Building Unikernel Image...
|
||||||
|
Running: /home/mrpiglr/.ops/bin/ops pkg load eyberg/node:v18.12.1 ...
|
||||||
|
warning: overwriting existing file "/dist/index.js" hostpath old: dist/index.js new: "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS//dist/index.js"
|
||||||
|
running local instance
|
||||||
|
booting /home/mrpiglr/.ops/images/aethex-kernel-v1 ...
|
||||||
|
[0.535697] en1: assigned 10.0.2.15
|
||||||
|
⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217
|
||||||
|
[dotenv@17.2.3] injecting env (8) from .env -- tip: 🗂️ backup and recover secrets: https://dotenvx.com/ops
|
||||||
|
[dotenv@17.2.3] injecting env (0) from .env -- tip: ⚙️ write to custom object with { processEnv: myObject }
|
||||||
|
Warning: connect.session() MemoryStore is not
|
||||||
|
designed for a production environment, as it will leak
|
||||||
|
memory, and will not scale past a single process.
|
||||||
|
8:23:30 AM [websocket] WebSocket server initialized
|
||||||
|
[DEBUG] Static File Setup - CWD: /, __dirname: /dist
|
||||||
|
[DEBUG] Final Static Path: /dist/public
|
||||||
|
[DEBUG] Found 19 assets in /dist/public/assets
|
||||||
|
8:23:30 AM [express] serving on port 8080
|
||||||
|
8:23:30 AM [websocket] WebSocket available at ws://localhost:8080/socket.io
|
||||||
|
[2.411799] en1: assigned FE80::88A5:54FF:FE60:88D0
|
||||||
|
(node:2) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
|
||||||
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||||
|
[DEBUG] 404 for static asset: /assets/index-CLzw3Hhb.js
|
||||||
|
[DEBUG] 404 for static asset: /assets/index-CLzw3Hhb.js
|
||||||
|
[DEBUG] 404 for static asset: /assets/index-CLzw3Hhb.js
|
||||||
|
[DEBUG] 404 for static asset: /assets/index-CLzw3Hhb.js
|
||||||
|
[DEBUG] SPA Fallback for: /mobile
|
||||||
|
[DEBUG] SPA Fallback for: /home
|
||||||
|
[DEBUG] 404 for static asset: /assets/index-CLzw3Hhb.js
|
||||||
2
instance.log
Normal file
2
instance.log
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
booting aethex-kernel-v1-1770277813 ...
|
||||||
|
onprem instance 'aethex-kernel-v1-1770277813' created...
|
||||||
22
ops.json
Normal file
22
ops.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"Args": ["/dist/index.js"],
|
||||||
|
"Dirs": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"Files": [
|
||||||
|
".env"
|
||||||
|
],
|
||||||
|
"Env": {
|
||||||
|
"NODE_ENV": "production",
|
||||||
|
"PORT": "8080"
|
||||||
|
},
|
||||||
|
"RunConfig": {
|
||||||
|
"Memory": "2G",
|
||||||
|
"CPUs": 2,
|
||||||
|
"Ports": ["8080"]
|
||||||
|
},
|
||||||
|
"CloudConfig": {
|
||||||
|
"ProjectID": "aethex-os",
|
||||||
|
"BucketName": "aethex-releases"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=AeThex Runtime Selector
|
Description=AeThex Runtime Selector
|
||||||
After=graphical.target
|
After=network.target
|
||||||
Wants=aethex-desktop.service
|
Wants=aethex-desktop.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|
|
||||||
26
package-lock.json
generated
26
package-lock.json
generated
|
|
@ -129,6 +129,7 @@
|
||||||
"@vitest/ui": "^4.0.16",
|
"@vitest/ui": "^4.0.16",
|
||||||
"autoprefixer": "^10.4.21",
|
"autoprefixer": "^10.4.21",
|
||||||
"concurrently": "^9.2.1",
|
"concurrently": "^9.2.1",
|
||||||
|
"cross-env": "^10.1.0",
|
||||||
"drizzle-kit": "^0.31.4",
|
"drizzle-kit": "^0.31.4",
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
"playwright-chromium": "^1.57.0",
|
"playwright-chromium": "^1.57.0",
|
||||||
|
|
@ -746,6 +747,13 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
|
"node_modules/@epic-web/invariant": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@esbuild-kit/core-utils": {
|
"node_modules/@esbuild-kit/core-utils": {
|
||||||
"version": "3.3.2",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz",
|
||||||
|
|
@ -5766,6 +5774,24 @@
|
||||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/cross-env": {
|
||||||
|
"version": "10.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
|
||||||
|
"integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@epic-web/invariant": "^1.0.0",
|
||||||
|
"cross-spawn": "^7.0.6"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"cross-env": "dist/bin/cross-env.js",
|
||||||
|
"cross-env-shell": "dist/bin/cross-env-shell.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cross-spawn": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.6",
|
"version": "7.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,12 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev:client": "vite dev --port 5000",
|
"dev:client": "vite dev --port 5000",
|
||||||
"dev": "NODE_ENV=development tsx server/index.ts",
|
"dev": "cross-env NODE_ENV=development tsx server/index.ts",
|
||||||
"dev:tauri": "cd shell/aethex-shell && npm run tauri dev",
|
"dev:tauri": "cd shell/aethex-shell && npm run tauri dev",
|
||||||
"build": "tsx script/build.ts",
|
"build": "tsx script/build.ts",
|
||||||
"build:tauri": "cd shell/aethex-shell && npm run tauri build",
|
"build:tauri": "cd shell/aethex-shell && npm run tauri build",
|
||||||
"build:mobile": "npm run build && npx cap sync",
|
"build:mobile": "npm run build && npx cap sync",
|
||||||
|
"build:kernel": "bash script/build-unikernel.sh",
|
||||||
"android": "npx cap open android",
|
"android": "npx cap open android",
|
||||||
"ios": "npx cap open ios",
|
"ios": "npx cap open ios",
|
||||||
"cap:live-reload": "tsx script/capacitor-live-reload.ts",
|
"cap:live-reload": "tsx script/capacitor-live-reload.ts",
|
||||||
|
|
@ -17,7 +18,7 @@
|
||||||
"cap:live-reload:ios": "tsx script/capacitor-live-reload.ts --ios",
|
"cap:live-reload:ios": "tsx script/capacitor-live-reload.ts --ios",
|
||||||
"cap:production": "tsx script/capacitor-production.ts",
|
"cap:production": "tsx script/capacitor-production.ts",
|
||||||
"dev:mobile": "npm run cap:live-reload && concurrently \"npm run dev\" \"echo 'Dev server started. Open Android Studio or Xcode to run the app.'\"",
|
"dev:mobile": "npm run cap:live-reload && concurrently \"npm run dev\" \"echo 'Dev server started. Open Android Studio or Xcode to run the app.'\"",
|
||||||
"start": "NODE_ENV=production node dist/index.js",
|
"start": "cross-env NODE_ENV=production node dist/index.js",
|
||||||
"check": "tsc",
|
"check": "tsc",
|
||||||
"db:push": "drizzle-kit push",
|
"db:push": "drizzle-kit push",
|
||||||
"tauri": "cd shell/aethex-shell && npm run tauri",
|
"tauri": "cd shell/aethex-shell && npm run tauri",
|
||||||
|
|
@ -147,6 +148,7 @@
|
||||||
"@vitest/ui": "^4.0.16",
|
"@vitest/ui": "^4.0.16",
|
||||||
"autoprefixer": "^10.4.21",
|
"autoprefixer": "^10.4.21",
|
||||||
"concurrently": "^9.2.1",
|
"concurrently": "^9.2.1",
|
||||||
|
"cross-env": "^10.1.0",
|
||||||
"drizzle-kit": "^0.31.4",
|
"drizzle-kit": "^0.31.4",
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
"playwright-chromium": "^1.57.0",
|
"playwright-chromium": "^1.57.0",
|
||||||
|
|
|
||||||
2
run.log
Normal file
2
run.log
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[31merror: aethex-kernel-v1: stat /home/mrpiglr/.ops/aethex-kernel-v1: no such file or directory
|
||||||
|
[0m
|
||||||
1
run_full.log
Normal file
1
run_full.log
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
2026/02/05 00:45:16 [1;31monly ELF binaries are supported. Is this a Linux binary? run "file /home/mrpiglr/.ops/images/aethex-kernel-v1" on it[0m
|
||||||
92
script/build-unikernel.sh
Normal file
92
script/build-unikernel.sh
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# AeThex OS - Unikernel Build Script (OPS)
|
||||||
|
# Requires 'ops' (https://ops.city)
|
||||||
|
|
||||||
|
echo "═══════════════════════════════════════════════════════════════"
|
||||||
|
echo " AeThex OS - Unikernel Builder"
|
||||||
|
echo " Target: Nanos Unikernel (Bootable Image)"
|
||||||
|
echo "═══════════════════════════════════════════════════════════════"
|
||||||
|
|
||||||
|
# 0. Check for MinGW/Git Bash (Windows NPM environment)
|
||||||
|
if [ -n "$MSYSTEM" ] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
||||||
|
echo "[*] Detected Windows Environment (MinGW/Git Bash)."
|
||||||
|
echo "[*] Switching to WSL Context..."
|
||||||
|
|
||||||
|
# Convert the current script path to a WSL path
|
||||||
|
# $0 is likely "script/build-unikernel.sh"
|
||||||
|
# We assume the current directory is the project root in Windows format, accessible via /mnt/c
|
||||||
|
|
||||||
|
# Simple re-execution in WSL, assuming we are at project root
|
||||||
|
wsl bash script/build-unikernel.sh
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Try to find 'ops' in various ways
|
||||||
|
OPS_CMD=""
|
||||||
|
|
||||||
|
# 1. Check if 'ops' is already in PATH
|
||||||
|
if command -v ops &> /dev/null; then
|
||||||
|
OPS_CMD="ops"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Hardcoded check for known user 'mrpiglr' (The specific fix)
|
||||||
|
if [ -z "$OPS_CMD" ]; then
|
||||||
|
if [ -f "/home/mrpiglr/.ops/bin/ops" ]; then
|
||||||
|
OPS_CMD="/home/mrpiglr/.ops/bin/ops"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Check current user's Linux home
|
||||||
|
if [ -z "$OPS_CMD" ]; then
|
||||||
|
LINUX_USER=$(whoami)
|
||||||
|
if [ -f "/home/$LINUX_USER/.ops/bin/ops" ]; then
|
||||||
|
OPS_CMD="/home/$LINUX_USER/.ops/bin/ops"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Final check
|
||||||
|
if [ -z "$OPS_CMD" ]; then
|
||||||
|
echo "[!] OPS binary not found."
|
||||||
|
echo " Checked: PATH, /home/mrpiglr/.ops/bin/ops"
|
||||||
|
echo " Please run this command directly in your WSL terminal:"
|
||||||
|
echo " export PATH=\$PATH:\$HOME/.ops/bin"
|
||||||
|
echo " bash script/build-unikernel.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[*] Using OPS binary: $OPS_CMD"
|
||||||
|
|
||||||
|
if [ ! -d "dist" ]; then
|
||||||
|
echo "[!] 'dist' directory not found. Building project..."
|
||||||
|
npm run build
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[*] Updating OPS package list..."
|
||||||
|
$OPS_CMD update
|
||||||
|
|
||||||
|
echo "[*] Building Unikernel Image..."
|
||||||
|
|
||||||
|
# Try fully qualified name format: account/package:version
|
||||||
|
PACKAGE="eyberg/node:v18.12.1"
|
||||||
|
|
||||||
|
echo " Running: $OPS_CMD pkg load $PACKAGE ..."
|
||||||
|
if ! $OPS_CMD pkg load $PACKAGE -c ops.json -i aethex-kernel-v1; then
|
||||||
|
echo "[!] $PACKAGE failed."
|
||||||
|
|
||||||
|
# Fallback to another format seen in the list
|
||||||
|
PACKAGE="eyberg/node:20.5.0"
|
||||||
|
echo " Trying fallback: $PACKAGE ..."
|
||||||
|
$OPS_CMD pkg load $PACKAGE -c ops.json -i aethex-kernel-v1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "[✓] Build Complete."
|
||||||
|
echo " Image: ~/.ops/images/aethex-kernel-v1"
|
||||||
|
echo ""
|
||||||
|
echo "To boot the kernel:"
|
||||||
|
echo " $OPS_CMD run aethex-kernel-v1"
|
||||||
|
echo ""
|
||||||
|
echo "To deploy to AWS/GCP:"
|
||||||
|
echo " $OPS_CMD image create -c ops.json -i aethex-kernel-v1 -t aws"
|
||||||
|
|
@ -6,10 +6,13 @@ import { rm, readFile } from "fs/promises";
|
||||||
// which helps cold start times
|
// which helps cold start times
|
||||||
const allowlist = [
|
const allowlist = [
|
||||||
"@google/generative-ai",
|
"@google/generative-ai",
|
||||||
|
"@supabase/supabase-js",
|
||||||
"axios",
|
"axios",
|
||||||
|
"bcrypt",
|
||||||
"connect-pg-simple",
|
"connect-pg-simple",
|
||||||
"cors",
|
"cors",
|
||||||
"date-fns",
|
"date-fns",
|
||||||
|
"dotenv",
|
||||||
"drizzle-orm",
|
"drizzle-orm",
|
||||||
"drizzle-zod",
|
"drizzle-zod",
|
||||||
"express",
|
"express",
|
||||||
|
|
@ -24,6 +27,7 @@ const allowlist = [
|
||||||
"passport",
|
"passport",
|
||||||
"passport-local",
|
"passport-local",
|
||||||
"pg",
|
"pg",
|
||||||
|
"socket.io",
|
||||||
"stripe",
|
"stripe",
|
||||||
"uuid",
|
"uuid",
|
||||||
"ws",
|
"ws",
|
||||||
|
|
@ -56,7 +60,7 @@ async function buildAll() {
|
||||||
entryPoints: ["server/index.ts"],
|
entryPoints: ["server/index.ts"],
|
||||||
platform: "node",
|
platform: "node",
|
||||||
bundle: true,
|
bundle: true,
|
||||||
format: "esm",
|
format: "cjs",
|
||||||
outfile: "dist/index.js",
|
outfile: "dist/index.js",
|
||||||
define: {
|
define: {
|
||||||
"process.env.NODE_ENV": '"production"',
|
"process.env.NODE_ENV": '"production"',
|
||||||
|
|
@ -65,9 +69,6 @@ async function buildAll() {
|
||||||
sourcemap: enableSourcemap,
|
sourcemap: enableSourcemap,
|
||||||
external: externals,
|
external: externals,
|
||||||
logLevel: "info",
|
logLevel: "info",
|
||||||
banner: {
|
|
||||||
js: "import { createRequire } from 'module'; import { fileURLToPath } from 'url'; import { dirname } from 'path'; const require = createRequire(import.meta.url); const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename);",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,11 @@ app.get("/health", (_req, res) => {
|
||||||
|
|
||||||
// API status endpoint (moved from root to /api/status)
|
// API status endpoint (moved from root to /api/status)
|
||||||
app.get("/api/status", (_req, res) => {
|
app.get("/api/status", (_req, res) => {
|
||||||
|
const isKernel = process.env.OPS_Version ? true : false;
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
status: "AeThex OS Kernel: ONLINE",
|
status: isKernel ? "AeThex OS Unikernel: ONLINE" : "AeThex OS Simulation: ONLINE",
|
||||||
|
mode: isKernel ? "KERNEL_NATIVE" : "HOSTED_SIMULATION",
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
endpoints: {
|
endpoints: {
|
||||||
link: "/api/os/link/*",
|
link: "/api/os/link/*",
|
||||||
|
|
@ -49,13 +52,22 @@ if (process.env.NODE_ENV === "production" && !sessionSecret) {
|
||||||
|
|
||||||
// Session configuration with security best practices
|
// Session configuration with security best practices
|
||||||
const isProduction = process.env.NODE_ENV === "production";
|
const isProduction = process.env.NODE_ENV === "production";
|
||||||
|
|
||||||
|
// For Unikernel local testing (localhost:8080), we must disable secure cookies
|
||||||
|
// because there is no SSL termination in the kernel itself yet.
|
||||||
|
// We detect if we are running in OPS/Nanos via the environment, or just assume
|
||||||
|
// that if we are "production" but not explicitly requiring HTTPS, we might be in a kernel.
|
||||||
|
// A safer check: if we are in OPS, process.env.OPS_Version might be present (if set),
|
||||||
|
// OR we can just relax this for now to fix the login loop.
|
||||||
|
const isSecure = isProduction && process.env.REQUIRE_HTTPS === "true";
|
||||||
|
|
||||||
app.use(
|
app.use(
|
||||||
session({
|
session({
|
||||||
secret: sessionSecret || "dev-only-secret-not-for-prod",
|
secret: sessionSecret || "dev-only-secret-not-for-prod",
|
||||||
resave: false,
|
resave: false,
|
||||||
saveUninitialized: false,
|
saveUninitialized: false,
|
||||||
cookie: {
|
cookie: {
|
||||||
secure: isProduction,
|
secure: isSecure,
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
sameSite: "lax",
|
sameSite: "lax",
|
||||||
maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days
|
maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days
|
||||||
|
|
@ -64,6 +76,7 @@ app.use(
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
app.use(
|
app.use(
|
||||||
express.json({
|
express.json({
|
||||||
verify: (req, _res, buf) => {
|
verify: (req, _res, buf) => {
|
||||||
|
|
|
||||||
|
|
@ -3,17 +3,32 @@ import fs from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
export function serveStatic(app: Express) {
|
export function serveStatic(app: Express) {
|
||||||
const distPath = path.resolve(__dirname, "public");
|
// Robust path resolution for Unikernel environment
|
||||||
|
const cwd = process.cwd();
|
||||||
|
let distPath = path.resolve(__dirname, "public");
|
||||||
|
|
||||||
|
// Fallback: If __dirname based path fails, try relative to CWD
|
||||||
if (!fs.existsSync(distPath)) {
|
if (!fs.existsSync(distPath)) {
|
||||||
throw new Error(
|
// Assuming structure is /dist/public or just /public depending on how CWD is set
|
||||||
`Could not find the build directory: ${distPath}, make sure to build the client first`,
|
const altPath = path.join(cwd, "dist", "public");
|
||||||
);
|
if (fs.existsSync(altPath)) {
|
||||||
|
distPath = altPath;
|
||||||
|
} else {
|
||||||
|
// Try just "public" if CWD is already inside dist (unlikely but possible)
|
||||||
|
const rootPublic = path.join(cwd, "public");
|
||||||
|
if (fs.existsSync(rootPublic)) distPath = rootPublic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(distPath)) {
|
||||||
|
throw new Error(`Could not find the build directory: ${distPath}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(express.static(distPath));
|
app.use(express.static(distPath));
|
||||||
|
|
||||||
// fall through to index.html if the file doesn't exist
|
// fall through to index.html if the file doesn't exist
|
||||||
app.use("*", (_req, res) => {
|
app.use("*", (req, res) => {
|
||||||
res.sendFile(path.resolve(distPath, "index.html"));
|
res.sendFile(path.resolve(distPath, "index.html"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
1
wget-log.4
Normal file
1
wget-log.4
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
2026-02-05 03:04:55 URL:http://archive.ubuntu.com/ubuntu/pool/main/s/shadow/passwd_4.8.1-2ubuntu2_amd64.deb [766558/766558] -> "/mnt/c/Users/PCOEM/AeThexOS/AeThex-OS/aethex-linux-build/rootfs//var/cache/apt/archives/partial/passwd_1%3a4.8.1-2ubuntu2_amd64.deb" [1]
|
||||||
Loading…
Reference in a new issue