Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion images/chromium-headful/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ RUN set -eux; \
make -j$(nproc); \
make install;

FROM ghcr.io/m1k1o/neko/chromium:3.0.6 AS neko
FROM ghcr.io/onkernel/neko/base:3.0.6-v1.0 AS neko
FROM docker.io/ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
Expand Down
1 change: 0 additions & 1 deletion images/chromium-headful/client/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
<meta name="msapplication-TileColor" content="#19bd9c">
<meta name="theme-color" content="#19bd9c">
<style> /* weird iOS bug, if this is not set right here, video just does not start */ .video-container { width: 100%; height: 100%; } </style>
<style>textarea { cursor: none !important; }</style>
</head>
<body>
<noscript>
Expand Down
2 changes: 1 addition & 1 deletion images/chromium-headful/client/src/components/connect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@
}

// KERNEL: auto-login
this.$accessor.login({ displayname: 'dummy', password: 'dummy' })
this.$accessor.login({ displayname: 'kernel', password: 'admin' })
this.autoPassword = null
}

Expand Down
7 changes: 6 additions & 1 deletion images/chromium-headful/client/src/neko/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,12 @@ export class NekoClient extends BaseClient implements EventEmitter<NekoEvents> {

if (heartbeat_interval > 0) {
if (this._ws_heartbeat) clearInterval(this._ws_heartbeat)
this._ws_heartbeat = window.setInterval(() => this.sendMessage(EVENT.CLIENT.HEARTBEAT), heartbeat_interval * 1000)
this._ws_heartbeat = window.setInterval(() => {
this.emit('debug', `sending client/heartbeat`)
this.sendMessage(EVENT.CLIENT.HEARTBEAT)
this.emit('debug', `sending chat/message`)
this.sendMessage(EVENT.CHAT.MESSAGE, { content: `heartbeat/fake [${Date.now()}]` })
Comment on lines +155 to +156
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@raiden-staging - just for context what's the motivation of this additional message type?

I thought we would be sufficient with just the heartbeat + server side response you added!

Copy link
Contributor

@raiden-staging raiden-staging Aug 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

( @Sayan- @rgarcia )

  • event.CLIENT_HEARTBEAT triggers new event.SYSTEM_HEARTBEAT reply from neko, but doesn't show up on websockets trace. will fix on neko/ws handler + new neko build in few.
  • event.CHAT_MESSAGE → reply is handling keepalive for now.
  • unikernel deployment seems to work well so cleanup for the above incoming 🧹✨

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incredible - thank you again for digging into this issue!

}, heartbeat_interval * 1000)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Heartbeat Debug Code Spamming Chat Messages

Accidentally committed debug code in the heartbeat interval sends fake chat messages with content "heartbeat/fake [timestamp]" and debug emits every heartbeat. This spams the chat interface, disrupting the user experience.

Fix in Cursor Fix in Web

}
}

Expand Down
29 changes: 27 additions & 2 deletions images/chromium-headful/neko.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,32 @@ desktop:
screen: "1024x768@60"

member:
provider: "noauth"
provider: multiuser
multiuser:
admin_password: "admin"
admin_profile:
name: "" # if empty, the login username is used
is_admin: true
can_login: true
can_connect: true
can_watch: true
can_host: true
can_share_media: true
can_access_clipboard: true
sends_inactive_cursor: true
can_see_inactive_cursors: true
user_password: "neko"
user_profile:
name: "" # if empty, the login username is used
is_admin: false
can_login: true
can_connect: true
can_watch: true
can_host: true
can_share_media: true
can_access_clipboard: true
sends_inactive_cursor: true
can_see_inactive_cursors: false

session:
merciful_reconnect: true
Expand All @@ -18,7 +43,7 @@ plugins:
enabled: false

chat:
enabled: false
enabled: true

filetransfer:
enabled: false
Loading