octo-server

command module
v1.8.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 4, 2026 License: Apache-2.0 Imports: 35 Imported by: 0

README ยถ

OCTO OCTO

OCTO โ€” the open workplace built for humans ร— AI agents.
Let Lobsters (OpenClaw-powered digital doubles) do the thinking and doing. You focus on taste.

๐Ÿ  OCTO Home ยท ๐Ÿš€ Quickstart ยท ๐Ÿ“ฆ Ecosystem ยท ๐Ÿค Contributing

License ็ฎ€ไฝ“ไธญๆ–‡


๐ŸŒ Read in: English ยท ็ฎ€ไฝ“ไธญๆ–‡

OCTO Server

The Go backend at the centre of OCTO โ€” REST + WebSocket APIs, Lobster agent orchestration, and the control plane for WuKongIM.

octo-server is the heart of the OCTO platform. It exposes REST + WebSocket APIs consumed by octo-web and octo-admin, orchestrates business logic and Lobster (AI agent) scheduling, and drives the WuKongIM IM core for real-time messaging.

๐ŸŒŸ Why OCTO Server

  • One anchor for the whole platform. Clients, adapters, matter, summary, and admin all meet at octo-server. Deploy and scale one backend; everything else speaks to it.
  • Lobster-orchestration first class. Routing, session, and tool-call execution for OpenClaw-powered digital doubles are built into the server, not bolted on. Agents are treated as first-class conversation participants.
  • Pluggable storage & IM. MySQL-compatible SQL migrations and object-storage adapters ship in the box; WuKongIM is driven over a thin control-plane boundary so the IM core remains swappable.

๐Ÿš€ Quickstart

git clone https://github.com/Mininglamp-OSS/octo-server.git
cd octo-server
go build -o octo-server .
./octo-server --config ./configs/tsdd.yaml

The default dev config expects a local WuKongIM instance and a MySQL-compatible database. See the bundled configs/tsdd.yaml template for the standalone-binary path, QUICKSTART.md for an end-to-end walkthrough, and BUILDING.md for cross-repo build notes.

For a one-command Docker Compose stack (server + admin + web + matter

  • smart-summary + WuKongIM + MySQL + Redis + MinIO + nginx), use the official OOTB deployment at Mininglamp-OSS/octo-deployment. The older docker/octo/ and docker/tsdd/ compose stacks that used to live in this repo have been retired in favour of that single source of truth.

๐Ÿ“ฆ Modules / Architecture

High-level layout:

Path Purpose
cmd/ Service entry points (octo-server, subcommands)
internal/api/ REST + WebSocket handlers โ€” conversation, user, group, file, org, webhook
internal/service/ Business logic โ€” access control, Lobster orchestration, IM fan-out
internal/repository/ SQL + cache repositories (MySQL, Redis)
internal/im/ Control-plane client for WuKongIM (channel / message / presence)
internal/agent/ Lobster routing, session store, tool-call execution
internal/adapter/ Adapter registration + dispatch surfaces
configs/ YAML config schema + dev / prod examples
migrations/ SQL schema migrations
docs/ Architecture notes, API reference, diagrams

What the server does each request:

  1. Authenticate โ€” token / cookie / DH-sealed WebSocket frame.
  2. Authorise โ€” org-aware RBAC, per-channel ACL, agent-identity gating.
  3. Execute โ€” run business logic, possibly spawning / resuming a Lobster agent session.
  4. Fan out โ€” enqueue IM message via WuKongIM, trigger adapters if the channel requires an external bridge.
  5. Respond โ€” unified JSON envelope (or WebSocket frame) with tracing + metrics tags.

๐Ÿ”— OCTO Ecosystem

graph TD
  subgraph Clients[Clients]
    Web[octo-web<br/>Web / PC]
    Android[octo-android<br/>Android]
    iOS[octo-ios<br/>iOS]
  end

  subgraph Core[Core Services]
    Server[octo-server<br/>Backend API]
    Matter[octo-matter<br/>Task / Todo]
    Summary[octo-smart-summary<br/>AI Summary]
    Admin[octo-admin<br/>Admin Console]
  end

  subgraph Shared[Shared Libraries & Integrations]
    Lib[octo-lib<br/>Core Go Library]
    Adapters[octo-adapters<br/>Third-party Adapters]
  end

  Web --> Server
  Android --> Server
  iOS --> Server
  Admin --> Server
  Server --> Matter
  Server --> Summary
  Server --> Adapters
  Server -.uses.-> Lib
  Matter -.uses.-> Lib
  Adapters -.uses.-> Lib
Repository Language Role
octo-server Go Backend API ยท business orchestration ยท Lobster agent scheduling
octo-matter Go Task / Todo / Matter micro-service
octo-smart-summary Go LLM-powered conversation summarisation
octo-web TypeScript / React Web & PC (Electron) client
octo-android Kotlin / Java Native Android client
octo-ios Swift / Objective-C Native iOS client
octo-admin TypeScript / React Admin console (tenant / org / user / channel management)
octo-lib Go Shared core library (protocol, crypto, storage, HTTP)
octo-adapters TypeScript / Python Third-party integrations (IM bridges, AI channels)

๐Ÿงญ Philosophy

OCTO ships under three shared principles that apply to every repository in this matrix:

  1. Local-first. Anything that can run on the user's own box โ€” chats, embeddings, agents โ€” should. Your data stays yours; cloud is a choice, not a requirement.
  2. Humans judge, AI thinks and acts. Humans focus on taste (what matters, what's right, what to ship). Lobster agents โ€” OpenClaw-powered digital doubles โ€” carry the thinking and execution load.
  3. Release-as-product. Every open-source cut is shipped as a self-contained product, not a code dump: one squash per release, Apache 2.0, no internal baggage, reproducible from this repo alone.

๐Ÿค Contributing

We love pull requests! Before you open one, please read:

For security issues please follow SECURITY.md instead of the public tracker.

๐Ÿ“„ License

Apache License 2.0 โ€” see LICENSE for the full text and NOTICE for third-party attributions.

๐Ÿ™ Acknowledgments

octo-server is a derivative work of:

See NOTICE for the exhaustive Go module license inventory and third-party attribution block.


Made with ๐Ÿ™ by OCTO Contributors ยท Mininglamp-OSS

Documentation ยถ

The Go Gopher

There is no documentation for this package.

Directories ยถ

Path Synopsis
modules
base/common
smsbao
smsbao
base/common/emailtmpl
Package emailtmpl renders outbound transactional email (subject + HTML + plaintext) from per-language templates embedded at build time.
Package emailtmpl renders outbound transactional email (subject + HTML + plaintext) from per-language templates embedded at build time.
base/common/msgtmpl
Package msgtmpl renders outbound IM / push message bodies from per-language template sets embedded at build time.
Package msgtmpl renders outbound IM / push message bodies from per-language template sets embedded at build time.
bot_api
Module-side composer that wires bot_api.groupService.GetMembers + bot_api.robotService.ExistRobot into the pkg/mentionrewrite.ExpandAisToBotUIDs callback shape.
Module-side composer that wires bot_api.groupService.GetMembers + bot_api.robotService.ExistRobot into the pkg/mentionrewrite.ExpandAisToBotUIDs callback shape.
bot_provision
Cross-service bot endpoints introduced by the fleet split (PR-A.2).
Cross-service bot endpoints introduced by the fleet split (PR-A.2).
botfather/cmdmenu
Package cmdmenu owns BotFather's own command menu โ€” the /newbot, /help, ...
Package cmdmenu owns BotFather's own command menu โ€” the /newbot, /help, ...
incomingwebhook
Module-side composer that wires (*IncomingWebhook).groupService.GetMembers + (*IncomingWebhook).robotService.ExistRobot into the pkg/mentionrewrite.ExpandAisToBotUIDs callback shape.
Module-side composer that wires (*IncomingWebhook).groupService.GetMembers + (*IncomingWebhook).robotService.ExistRobot into the pkg/mentionrewrite.ExpandAisToBotUIDs callback shape.
message
Package message โ€” POST /v1/sidebar/sync
Package message โ€” POST /v1/sidebar/sync
robot
modules/robot/ais_broadcast.go
modules/robot/ais_broadcast.go
sticker
Package sticker implements per-user custom sticker management.
Package sticker implements per-user custom sticker management.
pkg
accesslog
Package accesslog provides a gin access-log formatter that scrubs secrets embedded in request URL paths before they are written to logs.
Package accesslog provides a gin access-log formatter that scrubs secrets embedded in request URL paths before they are written to logs.
auth
Package auth carries the canonical representation of the value stored under the token cache key (TokenCachePrefix+token) and provides versioned encoding helpers.
Package auth carries the canonical representation of the value stored under the token cache key (TokenCachePrefix+token) and provides versioned encoding helpers.
db
errcode
Package errcode registers octo-server private business error codes.
Package errcode registers octo-server private business error codes.
i18n
Package i18n ๆไพ› octo-server ็š„ๅ›ฝ้™…ๅŒ– SDK ๅ…ฅๅฃใ€‚
Package i18n ๆไพ› octo-server ็š„ๅ›ฝ้™…ๅŒ– SDK ๅ…ฅๅฃใ€‚
i18n/cmd/octo-i18n-extract command
Command octo-i18n-extract is the source-of-truth AST extractor for the i18n message marker pipeline (D18 in `i18n ๆœ€็ปˆๆ–นๆกˆ.md` v7.1).
Command octo-i18n-extract is the source-of-truth AST extractor for the i18n message marker pipeline (D18 in `i18n ๆœ€็ปˆๆ–นๆกˆ.md` v7.1).
i18n/codes
Package codes ็ปดๆŠค i18n ้”™่ฏฏ็ ๆณจๅ†Œ่กจใ€‚
Package codes ็ปดๆŠค i18n ้”™่ฏฏ็ ๆณจๅ†Œ่กจใ€‚
log
mentionrewrite
Helper for Mininglamp-OSS/octo-server PR#145 follow-up (Jerry-Xin / lml2468 / yujiawei review): isolate the in-memory `payload` map from the wire-bytes representation so ExpandAisToBotUIDs can stamp expanded bot UIDs onto the bytes dispatched to WuKongIM WITHOUT polluting the in-memory payload the caller may still reference for persistence, listener fan-out, or downstream reminders.
Helper for Mininglamp-OSS/octo-server PR#145 follow-up (Jerry-Xin / lml2468 / yujiawei review): isolate the in-memory `payload` map from the wire-bytes representation so ExpandAisToBotUIDs can stamp expanded bot UIDs onto the bytes dispatched to WuKongIM WITHOUT polluting the in-memory payload the caller may still reference for persistence, listener fan-out, or downstream reminders.
metrics
Package metrics ๆ”ถ้›† dmwork ่ฟ›็จ‹็บง Prometheus ๆŒ‡ๆ ‡ใ€‚
Package metrics ๆ”ถ้›† dmwork ่ฟ›็จ‹็บง Prometheus ๆŒ‡ๆ ‡ใ€‚
obopayload
Package obopayload owns the reserved-namespace contract for the On-Behalf-Of (OBO) persona-clone fan-out path (YUJ-1166 / Mininglamp-OSS/octo-server#81).
Package obopayload owns the reserved-namespace contract for the On-Behalf-Of (OBO) persona-clone fan-out path (YUJ-1166 / Mininglamp-OSS/octo-server#81).
pushcache
Package pushcache centralizes the Redis cache-key scheme for offline push notification titles (group name / thread name) and the invalidation helpers that keep those caches fresh when the underlying name changes.
Package pushcache centralizes the Redis cache-key scheme for offline push notification titles (group name / thread name) and the invalidation helpers that keep those caches fresh when the underlying name changes.
reqid
Package reqid threads a per-request trace id through one HTTP request so the otherwise-separate slow logs (GIN access log, auth parser, group handler, group service) can be stitched back to a single request.
Package reqid threads a per-request trace id through one HTTP request so the otherwise-separate slow logs (GIN access log, auth parser, group handler, group service) can be stitched back to a single request.
richtext
Package richtext owns the server-side authoritative handling of RichText (ContentType=14) message payloads.
Package richtext owns the server-side authoritative handling of RichText (ContentType=14) message payloads.
searchbackend
Package searchbackend exposes the single, explicit OCTO_SEARCH_BACKEND three-state switch that governs every search surface in octo-server.
Package searchbackend exposes the single, explicit OCTO_SEARCH_BACKEND three-state switch that governs every search surface in octo-server.
stickersig
Package stickersig mints and verifies the short-lived "upload handle" that proves a custom-sticker object was produced by a specific user's content-validated upload.
Package stickersig mints and verifies the short-lived "upload handle" that proves a custom-sticker object was produced by a specific user's content-validated upload.
util
Package decimal implements an arbitrary precision fixed-point decimal.
Package decimal implements an arbitrary precision fixed-point decimal.
tools
lint-direct-error-response command
Command lint-direct-error-response is the D23 "no new direct error response" gate.
Command lint-direct-error-response is the D23 "no new direct error response" gate.
lint-personal-msgsendreq command
Command lint-personal-msgsendreq scans .go files under one or more roots and rejects direct config.MsgSendReq{} composite literals that explicitly set ChannelType to common.ChannelTypePerson (or its .Uint8() variant).
Command lint-personal-msgsendreq scans .go files under one or more roots and rejects direct config.MsgSendReq{} composite literals that explicitly set ChannelType to common.ChannelTypePerson (or its .Uint8() variant).
lint-unregistered-code command
Command lint-unregistered-code is the 0.10 #3 gate guarding httperr.ResponseErrorL against codes that bypass the pkg/i18n/codes registry.
Command lint-unregistered-code is the 0.10 #3 gate guarding httperr.ResponseErrorL against codes that bypass the pkg/i18n/codes registry.
migrate-rename command
Command migrate-rename rebuilds migration filenames as a single global timestamp-prefixed sequence so sql-migrate's numeric-prefix branch sorts them strictly by execution order rather than alphabetically.
Command migrate-rename rebuilds migration filenames as a single global timestamp-prefixed sequence so sql-migrate's numeric-prefix branch sorts them strictly by execution order rather than alphabetically.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL