Skip to content

Commit 5681190

Browse files
committed
Merge remote-tracking branch 'origin/main' into release/v0.1.12
2 parents 46d4238 + 7a03c2b commit 5681190

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1046
-281
lines changed
Lines changed: 103 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,123 @@
11
name: Feishu Pull Request Notification
22

33
on:
4-
pull_request:
4+
pull_request_target:
55
types: [opened]
66

7-
permissions:
8-
contents: read
7+
permissions: {}
98

109
jobs:
1110
notify:
1211
name: Notify Feishu
12+
if: ${{ github.event.pull_request.head.repo.fork }}
1313
runs-on: ubuntu-latest
1414
steps:
15-
- name: Create GitHub App token
16-
id: app-token
17-
uses: actions/create-github-app-token@v1
18-
with:
19-
app-id: ${{ secrets.NEXU_PAL_APP_ID }}
20-
private-key: ${{ secrets.NEXU_PAL_PRIVATE_KEY_PEM }}
21-
22-
- uses: actions/checkout@v4
23-
with:
24-
sparse-checkout: scripts
25-
2615
- name: Send Feishu notification
2716
env:
2817
WEBHOOK_URL: ${{ secrets.NOTIFY_PR_FEISHU_WEBHOOK }}
29-
EVENT_TYPE: pull_request
30-
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
31-
GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
3218
TITLE: ${{ github.event.pull_request.title }}
3319
URL: ${{ github.event.pull_request.html_url }}
3420
NUMBER: ${{ github.event.pull_request.number }}
3521
AUTHOR: ${{ github.event.pull_request.user.login }}
36-
BODY: ${{ github.event.pull_request.body }}
3722
LABELS_OR_CATEGORY: ${{ join(github.event.pull_request.labels.*.name, ', ') }}
3823
REPO: ${{ github.repository }}
39-
run: node scripts/notify/feishu-notify.mjs
24+
run: |
25+
node <<'EOF'
26+
const webhookUrl = process.env.WEBHOOK_URL;
27+
const title = process.env.TITLE ?? "";
28+
const url = process.env.URL ?? "";
29+
const number = process.env.NUMBER ?? "";
30+
const author = process.env.AUTHOR ?? "";
31+
const labelsOrCategory = process.env.LABELS_OR_CATEGORY || "none";
32+
const repo = process.env.REPO ?? "";
33+
34+
function truncate(value, maxLength) {
35+
return value.length > maxLength
36+
? `${value.slice(0, maxLength)}...`
37+
: value;
38+
}
39+
40+
function sanitizeText(value) {
41+
return truncate(
42+
value
43+
.replace(/[\r\n\t]+/g, " ")
44+
.replace(/[\\`*_{}\[\]()#+\-.!|<>~]/g, "\\$&")
45+
.replace(/@/g, "@")
46+
.trim(),
47+
200,
48+
);
49+
}
50+
51+
if (!webhookUrl) {
52+
console.error("WEBHOOK_URL is required");
53+
process.exit(1);
54+
}
55+
56+
if (!author) {
57+
console.error("AUTHOR is required");
58+
process.exit(1);
59+
}
60+
61+
if (author === "sentry[bot]") {
62+
console.log(
63+
`Skipping Feishu notification for internal-equivalent author: ${author}`,
64+
);
65+
process.exit(0);
66+
}
67+
68+
const safeTitle = sanitizeText(title) || "(untitled PR)";
69+
const safeAuthor = sanitizeText(author);
70+
const safeLabels = sanitizeText(labelsOrCategory) || "none";
71+
const safeRepo = sanitizeText(repo) || "unknown repo";
72+
73+
let safeUrl = url;
74+
try {
75+
const parsedUrl = new URL(url);
76+
if (parsedUrl.protocol !== "https:" || parsedUrl.hostname !== "github.com") {
77+
throw new Error("Only https://github.com URLs are allowed");
78+
}
79+
safeUrl = parsedUrl.toString();
80+
} catch (error) {
81+
console.error(`Invalid pull request URL: ${error}`);
82+
process.exit(1);
83+
}
84+
85+
const payload = {
86+
msg_type: "interactive",
87+
card: {
88+
schema: "2.0",
89+
header: {
90+
title: {
91+
tag: "plain_text",
92+
content: `[${safeRepo}] New Pull Request #${number}: ${safeTitle}`,
93+
},
94+
template: "purple",
95+
},
96+
body: {
97+
direction: "vertical",
98+
elements: [
99+
{ tag: "markdown", content: `**Author:** ${safeAuthor}` },
100+
{ tag: "markdown", content: `**Labels:** ${safeLabels}` },
101+
{
102+
tag: "button",
103+
text: { tag: "plain_text", content: "View Pull Request" },
104+
url: safeUrl,
105+
type: "primary",
106+
},
107+
],
108+
},
109+
},
110+
};
111+
112+
const response = await fetch(webhookUrl, {
113+
method: "POST",
114+
headers: { "Content-Type": "application/json" },
115+
body: JSON.stringify(payload),
116+
});
117+
118+
if (!response.ok) {
119+
const text = await response.text();
120+
console.error(`Webhook request failed (${response.status}): ${text}`);
121+
process.exit(1);
122+
}
123+
EOF

README.ja.md

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<h1 align="center">nexu</h1>
66

77
<p align="center">
8-
<strong>最もシンプルなオープンソース OpenClaw 🦞 デスクトップクライアント — WeChat &amp; Feishu 対応</strong>
8+
<strong>AI Agent を WeChat、Feishu、Slack などの IM で直接動かせるオープンソースのデスクトップクライアント</strong>
99
</p>
1010

1111
<p align="center">
@@ -30,9 +30,7 @@
3030

3131
> 🦞 **WeChat × OpenClaw を最もスムーズに接続**:スキャンして即接続、すぐ使える。
3232
>
33-
> 🖥 **対応プラットフォーム**:macOS(Apple Silicon)· macOS(Intel)· Windows — [ダウンロード](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf)
34-
>
35-
> 🎉 **ベータ特典**:ベータ期間中、Gemini などのトップモデルが **無料** でご利用いただけます。[今すぐダウンロード →](https://nexu.io)
33+
> 🖥 **対応プラットフォーム**:macOS(Apple Silicon)· macOS(Intel)· Windows — [ダウンロード](https://nexu.io)
3634
3735
---
3836

@@ -129,7 +127,7 @@ nexu は **ワンパーソンカンパニー** と小規模チーム向け —
129127

130128
> *「クライアントが Feishu で 40 ページの契約書を送ってくる。Agent に転送する — 10 分後にはリスク要約、要注意条項、修正案の提案が届く。半日かかっていたのが、コーヒーブレイクで済む。」*
131129
132-
契約レビュー、規制調査、レポート作成、クライアント Q&amp;A — ドメイン知識を Agent のスキルに変換。
130+
契約レビュー、規制調査、レポート作成、クライアント Q&A — ドメイン知識を Agent のスキルに変換。
133131

134132
### 🏪 地域ビジネス / 小売
135133

@@ -155,13 +153,11 @@ nexu は **ワンパーソンカンパニー** と小規模チーム向け —
155153

156154
### インストール
157155

158-
**ビルド済みクライアント(推奨)**
159-
160156
| プラットフォーム | ダウンロード |
161157
|------------------|-------------|
162-
| 🍎 macOS(Apple Silicon) | [公式サイト](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
163-
| 🍎 macOS(Intel) | [ダウンロード](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf) |
164-
| 🪟 Windows | [ダウンロード](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf) |
158+
| 🍎 macOS(Apple Silicon) | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
159+
| 🍎 macOS(Intel) | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
160+
| 🪟 Windows | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
165161

166162
### 初回起動
167163

@@ -181,7 +177,6 @@ nexu アカウントでサインインすれば対応モデルにすぐアクセ
181177
```text
182178
nexu/
183179
├── apps/
184-
│ ├── api/ # Backend API
185180
│ ├── web/ # Web frontend
186181
│ ├── desktop/ # Desktop client (Electron)
187182
│ └── controller/ # Controller service
@@ -194,18 +189,18 @@ nexu/
194189
### コマンド
195190

196191
```bash
197-
pnpm run dev # Dev stack with hot reload
198-
pnpm run dev:desktop # Desktop client
199-
pnpm run build # Production build
200-
pnpm run lint
192+
pnpm dev start # フル開発スタック起動(ホットリロード)
193+
pnpm dev stop # 開発スタック停止
194+
pnpm build # プロダクションビルド
195+
pnpm lint
201196
pnpm test
202197
```
203198

204199
---
205200

206201
## 🤝 コントリビュート
207202

208-
コントリビュート歓迎!英語の完全ガイドはリポジトリルートの [CONTRIBUTING.md](CONTRIBUTING.md) にあります(PR 作成時に GitHub が表示します)。同じ内容が [docs.nexu.io — Contributing](https://docs.nexu.io/guide/contributing) にも掲載されています。**中文:** [docs.nexu.io (zh)](https://docs.nexu.io/zh/guide/contributing) · [docs/zh/guide/contributing.md](docs/zh/guide/contributing.md)
203+
コントリビュート歓迎!詳細ガイドはリポジトリルートの [CONTRIBUTING.md](CONTRIBUTING.md)、または [docs.nexu.io — Contributing](https://docs.nexu.io/guide/contributing) をご覧ください
209204

210205
1. 🍴 このリポジトリをフォーク
211206
2. 🌿 フィーチャーブランチを作成(`git checkout -b feature/amazing-feature`
@@ -250,9 +245,9 @@ A: WeChat 8.0.7 の OpenClaw プラグインに対応しています。接続を
250245

251246
| チャンネル | 用途 |
252247
|---------|-------------|
253-
| 💡 [**Discussions**](https://github.com/nexu-io/nexu/discussions) | 質問、アイデアの提案、ユースケースの共有など。**Q&amp;A** カテゴリでトラブルシューティング、**Ideas** で機能ブレスト。 |
248+
| 💡 [**Discussions**](https://github.com/nexu-io/nexu/discussions) | 質問、アイデアの提案、ユースケースの共有など。**Q&A** カテゴリでトラブルシューティング、**Ideas** で機能ブレスト。 |
254249
| 🐛 [**Issues**](https://github.com/nexu-io/nexu/issues) | バグ報告や機能リクエスト。Issue テンプレートをご利用ください。 |
255-
| 📋 [**Roadmap &amp; RFCs**](https://github.com/nexu-io/nexu/discussions/categories/rfc-roadmap) | 今後の計画をフォローし、設計ディスカッションに参加。 |
250+
| 📋 [**Roadmap & RFCs**](https://github.com/nexu-io/nexu/discussions/categories/rfc-roadmap) | 今後の計画をフォローし、設計ディスカッションに参加。 |
256251
| 📧 [**[email protected]**](mailto:[email protected]) | プライベートなお問い合わせ、パートナーシップなど。 |
257252

258253
### コミュニティグループに参加する

README.ko.md

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<h1 align="center">nexu</h1>
66

77
<p align="center">
8-
<strong>가장 간단한 오픈소스 OpenClaw 🦞 데스크톱 클라이언트 — WeChat &amp; Feishu 지원</strong>
8+
<strong>AI Agent를 WeChat, Feishu, Slack 등의 IM에서 직접 실행하는 오픈소스 데스크톱 클라이언트</strong>
99
</p>
1010

1111
<p align="center">
@@ -30,9 +30,7 @@
3030

3131
> 🦞 **WeChat × OpenClaw을 가장 매끄럽게 연결**: 스캔하고 바로 연결, 즉시 사용 가능.
3232
>
33-
> 🖥 **지원 플랫폼**: macOS (Apple Silicon) · macOS (Intel) · Windows — [다운로드](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf)
34-
>
35-
> 🎉 **베타 혜택**: 베타 기간 동안 Gemini 등 최상위 모델을 **무료로** 사용할 수 있습니다. [지금 다운로드 →](https://nexu.io)
33+
> 🖥 **지원 플랫폼**: macOS (Apple Silicon) · macOS (Intel) · Windows — [다운로드](https://nexu.io)
3634
3735
---
3836

@@ -155,13 +153,11 @@ nexu는 **1인 기업**과 소규모 팀을 위해 만들어졌습니다 — 한
155153

156154
### 설치
157155

158-
**빌드된 클라이언트 (권장)**
159-
160156
| 플랫폼 | 다운로드 |
161157
|--------|----------|
162-
| 🍎 macOS (Apple Silicon) | [공식 사이트](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
163-
| 🍎 macOS (Intel) | [다운로드](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf) |
164-
| 🪟 Windows | [다운로드](https://powerformer.feishu.cn/wiki/IWQZwt1qSiExq7kfioWcI1qVnFf) |
158+
| 🍎 macOS (Apple Silicon) | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
159+
| 🍎 macOS (Intel) | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
160+
| 🪟 Windows | [nexu.io](https://nexu.io) · [Releases](https://github.com/nexu-io/nexu/releases) |
165161

166162
### 첫 실행
167163

@@ -181,7 +177,6 @@ nexu 계정으로 로그인하면 지원 모델에 즉시 액세스할 수 있
181177
```text
182178
nexu/
183179
├── apps/
184-
│ ├── api/ # Backend API
185180
│ ├── web/ # Web frontend
186181
│ ├── desktop/ # Desktop client (Electron)
187182
│ └── controller/ # Controller service
@@ -194,18 +189,18 @@ nexu/
194189
### 명령어
195190

196191
```bash
197-
pnpm run dev # Dev stack with hot reload
198-
pnpm run dev:desktop # Desktop client
199-
pnpm run build # Production build
200-
pnpm run lint
192+
pnpm dev start # 전체 로컬 스택 시작 (핫 리로드)
193+
pnpm dev stop # 로컬 스택 중지
194+
pnpm build # 프로덕션 빌드
195+
pnpm lint
201196
pnpm test
202197
```
203198

204199
---
205200

206201
## 🤝 기여하기
207202

208-
기여를 환영합니다! 영문 전체 가이드는 저장소 루트의 [CONTRIBUTING.md](CONTRIBUTING.md)에 있습니다 (PR 작성 시 GitHub에 표시됨). 동일한 내용이 [docs.nexu.io — Contributing](https://docs.nexu.io/guide/contributing)에도 게시되어 있습니다. **중문:** [docs.nexu.io (zh)](https://docs.nexu.io/zh/guide/contributing) · [docs/zh/guide/contributing.md](docs/zh/guide/contributing.md).
203+
기여를 환영합니다! 자세한 가이드는 저장소 루트의 [CONTRIBUTING.md](CONTRIBUTING.md) 또는 [docs.nexu.io — Contributing](https://docs.nexu.io/guide/contributing)을 참고하세요.
209204

210205
1. 🍴 이 저장소를 포크
211206
2. 🌿 기능 브랜치 생성 (`git checkout -b feature/amazing-feature`)

0 commit comments

Comments
 (0)