Skip to content

Commit 821dc31

Browse files
authored
Merge pull request #5 from Harzva/agent/add-pages-showcase
add GroupX Pages showcase and real run proof
2 parents 7dd1983 + c14930b commit 821dc31

15 files changed

Lines changed: 336 additions & 11 deletions

.github/workflows/pages.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Deploy GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- "site/**"
8+
- "docs/assets/showcase/**"
9+
- ".github/workflows/pages.yml"
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: read
14+
pages: write
15+
id-token: write
16+
17+
concurrency:
18+
group: pages
19+
cancel-in-progress: true
20+
21+
jobs:
22+
build:
23+
runs-on: ubuntu-latest
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v6
27+
- name: Configure Pages
28+
uses: actions/configure-pages@v5
29+
- name: Assemble static site
30+
run: |
31+
mkdir -p _site/assets
32+
cp -R site/. _site/
33+
cp docs/assets/showcase/architect-response.png _site/assets/
34+
cp docs/assets/showcase/builder-response.png _site/assets/
35+
cp docs/assets/showcase/reviewer-response.png _site/assets/
36+
touch _site/.nojekyll
37+
- name: Upload Pages artifact
38+
uses: actions/upload-pages-artifact@v4
39+
with:
40+
path: _site
41+
42+
deploy:
43+
environment:
44+
name: github-pages
45+
url: ${{ steps.deployment.outputs.page_url }}
46+
runs-on: ubuntu-latest
47+
needs: build
48+
steps:
49+
- name: Deploy to GitHub Pages
50+
id: deployment
51+
uses: actions/deploy-pages@v4

README.md

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,38 @@
11
<div align="center">
22

3-
# GroupX
3+
<img src="./docs/assets/showcase/groupx-orbit.png" width="280" alt="GroupX broker routing Codex, Grok, Kimi and Hermes CLI agents" />
44

5-
**把 Codex App Server、Grok ACP、Kimi ACP 和 Hermes ACP 放进同一个本地 Agent 房间。**
5+
# GroupX
66

7-
一个 Web UI,统一完成群聊路由、会话恢复、上下文压缩与本地记忆。
7+
**One room. Every CLI agent.**
88

9-
![npm](https://img.shields.io/npm/v/@susyimes/groupx?color=3370ff&label=npm)
10-
![Node](https://img.shields.io/badge/node-24.14.x-3c873a)
9+
把 Codex、Grok、Kimi 和 Hermes 放进同一个本地 Agent 房间:显式路由、共享时间线、会话恢复、上下文压缩与持久化记忆。
10+
11+
[![npm](https://img.shields.io/npm/v/@susyimes/groupx?color=6f8cff&label=npm)](https://www.npmjs.com/package/@susyimes/groupx)
12+
[![Pages](https://img.shields.io/badge/GitHub%20Pages-included-48e5c2)](https://susyimes.github.io/GroupX/)
13+
![Node](https://img.shields.io/badge/Node-24.14%2B-3c873a)
1114
![Tests](https://img.shields.io/badge/tests-506%20passing-0d9f6e)
12-
![Platform](https://img.shields.io/badge/platform-Windows%20%C2%B7%20macOS%20%C2%B7%20Linux-0078d6)
13-
![Transport](https://img.shields.io/badge/transport-structured-9440c9)
15+
![Platform](https://img.shields.io/badge/platform-Windows%20%C2%B7%20macOS%20%C2%B7%20Linux-4768d7)
16+
![Transport](https://img.shields.io/badge/transport-structured-b56cff)
1417

15-
<img src="./docs/assets/groupx-demo.gif" width="100%" alt="GroupX 本机实录:Codex 通过 groupx.ask 调用 Grok 和 Kimi 后汇总结论">
18+
[在线体验](https://susyimes.github.io/GroupX/) · [快速开始](#快速开始) · [配置](#agent-配置) · [协议](docs/PROTOCOL.md) · [设计决策](docs/DECISIONS.md)
1619

17-
<sub>本机实录:Codex App Server 通过 <code>groupx.ask</code> 调用 Grok ACP 与 Kimi ACP,并在真实 GroupX 房间中汇总结果;仅对本机工作目录做了隐私遮罩。</sub>
20+
<img src="./docs/assets/showcase/pages-home.png" width="100%" alt="GroupX GitHub Pages 首页" />
1821

1922
</div>
2023

24+
## 真实运行记录
25+
26+
下面三条回复来自 **2026-08-14 的同一次真实 GroupX 运行**:三个独立 Kimi ACP session 分别担任 Architect、Builder 与 Reviewer。图片只裁切公开演示问题和模型最终回复,不包含历史聊天、本机路径或凭据。
27+
28+
<p align="center">
29+
<img src="./docs/assets/showcase/architect-response.png" width="100%" alt="Architect 的真实 GroupX 回复" />
30+
<img src="./docs/assets/showcase/builder-response.png" width="100%" alt="Builder 的真实 GroupX 回复" />
31+
<img src="./docs/assets/showcase/reviewer-response.png" width="100%" alt="Reviewer 的真实 GroupX 回复" />
32+
</p>
33+
34+
> 角色名是 GroupX 的显示身份;本次公开捕获使用三个独立 Kimi ACP session。截图内容由真实模型回合生成并经 Broker 持久化,不是静态 mock 数据。
35+
2136
## GroupX 是什么
2237

2338
GroupX 是一个只监听本机 loopback 的多 Agent 群聊 Broker。用户从浏览器发送消息,Broker 把消息显式路由给一个或多个本地 CLI Agent,并把公共对话、Turn 状态、记忆与上下文摘要保存在本地 SQLite。
@@ -84,10 +99,10 @@ GroupX 是一个只监听本机 loopback 的多 Agent 群聊 Broker。用户从
8499

85100
```bash
86101
npm i -g @susyimes/groupx
87-
groupx start
102+
groupx init
88103
```
89104

90-
首次启动会打开 Agent 引导页。添加 Agent、填写工作目录和命令并保存后,页面会进入群聊。默认地址为 [http://127.0.0.1:4310/](http://127.0.0.1:4310/)
105+
`groupx init` 会打开 Agent 引导页。添加 Agent、填写工作目录和命令并保存后,页面会进入群聊。默认地址为 [http://127.0.0.1:4310/](http://127.0.0.1:4310/)
91106

92107
常用命令:
93108

@@ -228,3 +243,9 @@ npm run build
228243
- [Kimi ACP](https://www.kimi.com/code/docs/en/kimi-code-cli/reference/kimi-acp)
229244
- [Grok CLI](https://docs.x.ai/build/cli/reference)
230245
- [Hermes ACP](https://github.com/nousresearch/hermes-agent/blob/main/website/docs/user-guide/features/acp.md)
246+
247+
## 参与贡献
248+
249+
欢迎通过 Issue 或 Pull Request 改进 Adapter、协议兼容、Web UI 与文档。提交前请运行 `npm run typecheck && npm test && npm run build`
250+
251+
> 本仓库当前尚未声明开源许可证;在许可证补充前,请不要假设仓库内容可被任意复制或再分发。
54 KB
Loading
50.5 KB
Loading
235 KB
Loading
670 KB
Loading
47.6 KB
Loading

showcase.config.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"projectName": "GroupX",
3+
"root": ".",
4+
"type": "local-web",
5+
"installCommand": "npm install",
6+
"startCommand": null,
7+
"baseUrl": "http://127.0.0.1:4311",
8+
"outputDir": "docs/assets/showcase",
9+
"readme": "README.md",
10+
"waitMs": 1200,
11+
"timeoutMs": 60000,
12+
"disableAnimations": true,
13+
"viewports": {
14+
"desktop": { "width": 1280, "height": 720 },
15+
"mobile": { "width": 390, "height": 844 }
16+
},
17+
"screenshots": [
18+
{
19+
"id": "builder-response",
20+
"title": "Builder — real model response",
21+
"path": "/",
22+
"viewport": "desktop",
23+
"waitFor": "main.conversation-panel",
24+
"waitMs": 1500,
25+
"fullPage": false,
26+
"selector": "article.event-card.tone-grok:not([data-stream-key])",
27+
"steps": []
28+
},
29+
{
30+
"id": "reviewer-response",
31+
"title": "Reviewer — real model response",
32+
"path": "/",
33+
"viewport": "desktop",
34+
"waitFor": "main.conversation-panel",
35+
"waitMs": 1200,
36+
"fullPage": false,
37+
"selector": "article.event-card.tone-kimi:not([data-stream-key])",
38+
"steps": []
39+
},
40+
{
41+
"id": "architect-response",
42+
"title": "Architect — real model response",
43+
"path": "/",
44+
"viewport": "desktop",
45+
"waitFor": "main.conversation-panel",
46+
"waitMs": 1200,
47+
"fullPage": false,
48+
"selector": "article.event-card.tone-codex:not([data-stream-key])",
49+
"steps": []
50+
}
51+
],
52+
"hero": {
53+
"file": "real-conversation.png",
54+
"title": "Three agents. One room. Real responses.",
55+
"subtitle": "A real GroupX run with three independent Kimi ACP sessions acting as Architect, Builder, and Reviewer.",
56+
"images": ["builder-response", "reviewer-response", "architect-response"]
57+
}
58+
}

site.showcase.config.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"projectName": "GroupX Pages",
3+
"root": ".",
4+
"type": "static-html",
5+
"installCommand": null,
6+
"startCommand": null,
7+
"baseUrl": "http://127.0.0.1:4178",
8+
"outputDir": "docs/assets/showcase",
9+
"readme": "README.md",
10+
"waitMs": 800,
11+
"timeoutMs": 30000,
12+
"disableAnimations": true,
13+
"viewports": {
14+
"desktop": { "width": 1280, "height": 720 }
15+
},
16+
"screenshots": [
17+
{
18+
"id": "groupx-orbit",
19+
"title": "GroupX broker and CLI agents",
20+
"path": "/",
21+
"viewport": "desktop",
22+
"waitFor": ".orbit",
23+
"waitMs": 500,
24+
"fullPage": false,
25+
"selector": ".orbit",
26+
"steps": []
27+
},
28+
{
29+
"id": "pages-home",
30+
"title": "GroupX GitHub Pages home",
31+
"path": "/",
32+
"viewport": "desktop",
33+
"waitFor": ".hero",
34+
"waitMs": 500,
35+
"fullPage": false,
36+
"selector": null,
37+
"steps": []
38+
}
39+
]
40+
}

site/app.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const personas = [...document.querySelectorAll("[data-agent]")];
2+
const responses = [...document.querySelectorAll("[data-response]")];
3+
4+
for (const persona of personas) {
5+
persona.addEventListener("click", () => {
6+
const selected = persona.dataset.agent;
7+
for (const item of personas) item.classList.toggle("active", item === persona);
8+
for (const response of responses) {
9+
response.classList.toggle("active", response.dataset.response === selected);
10+
}
11+
});
12+
}
13+
14+
document.querySelector("#copy-install")?.addEventListener("click", async (event) => {
15+
await navigator.clipboard.writeText("npm i -g @susyimes/groupx");
16+
const button = event.currentTarget;
17+
button.textContent = "已复制";
18+
setTimeout(() => { button.textContent = "复制"; }, 1600);
19+
});

0 commit comments

Comments
 (0)