Skip to content
Open
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ qdrant_storage/
# 构建产物
bun.lock
packages/
.gitnexus
193 changes: 185 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,40 @@
# CLAUDE.md — claw-mesh

## 项目概述
FSC-Mesh 分布式 AI 编码集群的基础设施层。
三节点全互联: 中央(10.10.0.1) + 硅谷(10.10.0.2) + 东京(10.10.0.3)
CLAW-Mesh 分布式 AI 编码集群的基础设施层。
三节点 Tailscale 网络: Mac (100.114.56.105) + Windows (100.101.173.35) + 硅谷 (100.80.67.125)

## 架构
- **网络**: WireGuard 主 + SSH 容错热备 (环形互修)
- **网络**: Tailscale (主) + SSH 容错热备
- **消息**: Redis 7 Streams (XREADGROUP + XACK)
- **记忆**: MemoV (Git + Redis) + Pointer Memory (URI寻址)
- **记忆**: Git (xart: git.xart.top) + Redis + Pointer Memory (URI寻址)
- **执行**: Docker Agent 容器 (<200MB),1000 并发目标
- **治理**: 四层架构 (宪法→仲裁→汇总→执行)

## 节点配置
详见 `config/nodes.ts`:
- **mac-local** (100.114.56.105): M1 Pro 16GB, Claude API, 开发/架构/协调
- **windows** (100.101.173.35): R9 9950X 32GB + RTX 5070, GPU计算/大型编译
- **silicon-valley** (100.80.67.125): Xeon 2核2G, 豆包API, 测试/监控/批量任务

## 共享记忆系统
- **位置**: `.mem/` 目录(Git 子模块)
- **远程仓库**: https://git.xart.top/xiaoxiang/claw-mesh-mem (主)
- **备份仓库**: root@100.80.67.125:/root/.mem-central (硅谷节点)
- **同步方式**: `git pull/push` + cron 自动同步(每30分钟)
- **目录结构**:
- `.mem/shared/` - 跨节点共享文档和会话记录
- `.mem/agents/` - Agent 专属记忆
- `.mem/results/` - 执行结果
- `.mem/ontology/` - 知识图谱

## 技术约束
- 运行时: Bun (非 Node.js)
- 中央服务器 2核/2G — 代码必须内存敏感
- 硅谷服务器 2核/2G — 代码必须内存敏感
- Docker Agent 镜像 < 200MB
- 每任务 < 4000 tokens
- 每小时成本 < $0.50
- Worker 模型: MiniMax/Doubao (廉价优先)
- Worker 模型: 豆包 (Doubao Seed 2.0) 廉价优先

## 编码规范
- TypeScript strict mode
Expand All @@ -27,17 +44,177 @@ FSC-Mesh 分布式 AI 编码集群的基础设施层。
- 包管理: bun

## 关键路径
- `config/nodes.ts` — 三节点配置和任务路由
- `config/network.ts` — Tailscale 网络配置
- `.mem/` — 共享记忆系统(Git 子模块)
- `fsc/fsc-worker-daemon.ts` — Worker 守护进程
- `fsc/memov-sync-daemon.ts` — 记忆同步
- `memory/pointer.js` — Pointer Memory OS
- `memory/causal.js` — 故障诊断
- `memory/ontology.js` — 知识图谱
- `api/` — LLM 代理 + SSE + MCP
- `deploy/Dockerfile.agent` — Agent 容器镜像
- `config/wg0.conf.template` — WireGuard 模板

## 服务配置

### 三大核心服务

| 服务 | 端口 | 源码 | 功能 |
|------|------|------|------|
| fsc-monitor | 8080 | `mcp/fsc-monitor/src/index.ts` | 队列深度、Worker 负载、告警、Prometheus metrics |
| fsc-core | 8081 | `mcp/fsc-core/src/index.ts` | 批量任务调度 (batch_dispatch)、批次追踪 |
| memov-sync | — | `fsc/memov-sync-daemon.ts` | 事件驱动记忆同步、Git commit、rsync 节点同步 |

### Redis 配置
- **中心节点**: 硅谷 (100.80.67.125:6379)
- **配置文件**: `config/redis.ts`(集中管理,引用 `config/network.ts` 的 `getRedisMasterIp()`)
- **环境变量覆盖**: `REDIS_HOST`, `REDIS_PORT`, `REDIS_PASSWORD`
- **Redis Streams**:
- `fsc:tasks` — 任务队列
- `fsc:results` — 结果队列
- `fsc:dlq` — 死信队列
- `fsc:mem_events` — 记忆事件流 (memov-sync 消费)
- `fsc:memov:deadletter` — 记忆同步死信
- **Consumer Group**: `memov-sync` / `memov-{HOSTNAME}`

### 依赖差异
- fsc-monitor / fsc-core: 使用 `redis` (node-redis v4),直接硬编码 Redis 地址
- memov-sync-daemon: 使用 `ioredis`,从 `config/redis.ts` 导入配置

### 启动方式

**Mac (开发节点)**:
```bash
cd ~/workspace/claw-mesh
bun run mcp/fsc-monitor/src/index.ts # 端口 8080
bun run mcp/fsc-core/src/index.ts # 端口 8081
bun run fsc/memov-sync-daemon.ts # 记忆同步
```

**Windows 节点**:
```bat
cd C:\workspace\claw-mesh
C:\Users\Administrator\.bun\bin\bun.exe run mcp/fsc-monitor/src/index.ts
C:\Users\Administrator\.bun\bin\bun.exe run mcp/fsc-core/src/index.ts
C:\Users\Administrator\.bun\bin\bun.exe run fsc/memov-sync-daemon.ts
```
- 启动脚本: `C:\workspace\start-claw-all.bat`
- 计划任务: `schtasks /query /tn "CLAW-Mesh-All"` (开机自启)

### 健康检查
```bash
# fsc-monitor
curl http://localhost:8080/health
curl http://localhost:8080/metrics # Prometheus 格式

# fsc-core
curl http://localhost:8081/health

# 远程检查 (Windows)
curl http://100.101.173.35:8080/health
curl http://100.101.173.35:8081/health
```

## 不要做的事
- 不要删除 SSH 隧道配置 (容错需要)
- 不要用 express/koa,用 Bun.serve
- 不要在 Worker 层用昂贵模型 (Claude/GPT-4)
- 不要把原始日志传到中央节点 (只传聚合指标)
- 不要把原始日志传到硅谷节点 (只传聚合指标)
- 不要直接修改 .mem/ 目录的 Git 配置(已配置 xart 为主仓库)

<!-- gitnexus:start -->
# GitNexus — Code Intelligence

This project is indexed by GitNexus as **claw-mesh** (1077 symbols, 2124 relationships, 73 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.

> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.

## Always Do

- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user.
- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows.
- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits.
- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.
- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`.

## When Debugging

1. `gitnexus_query({query: "<error or symptom>"})` — find execution flows related to the issue
2. `gitnexus_context({name: "<suspect function>"})` — see all callers, callees, and process participation
3. `READ gitnexus://repo/claw-mesh/process/{processName}` — trace the full execution flow step by step
4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed

## When Refactoring

- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`.
- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code.
- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed.

## Never Do

- NEVER edit a function, class, or method without first running `gitnexus_impact` on it.
- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis.
- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph.
- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope.

## Tools Quick Reference

| Tool | When to use | Command |
|------|-------------|---------|
| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` |
| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` |
| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` |
| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` |
| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` |
| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` |

## Impact Risk Levels

| Depth | Meaning | Action |
|-------|---------|--------|
| d=1 | WILL BREAK — direct callers/importers | MUST update these |
| d=2 | LIKELY AFFECTED — indirect deps | Should test |
| d=3 | MAY NEED TESTING — transitive | Test if critical path |

## Resources

| Resource | Use for |
|----------|---------|
| `gitnexus://repo/claw-mesh/context` | Codebase overview, check index freshness |
| `gitnexus://repo/claw-mesh/clusters` | All functional areas |
| `gitnexus://repo/claw-mesh/processes` | All execution flows |
| `gitnexus://repo/claw-mesh/process/{name}` | Step-by-step execution trace |

## Self-Check Before Finishing

Before completing any code modification task, verify:
1. `gitnexus_impact` was run for all modified symbols
2. No HIGH/CRITICAL risk warnings were ignored
3. `gitnexus_detect_changes()` confirms changes match expected scope
4. All d=1 (WILL BREAK) dependents were updated

## Keeping the Index Fresh

After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it:

```bash
npx gitnexus analyze
```

If the index previously included embeddings, preserve them by adding `--embeddings`:

```bash
npx gitnexus analyze --embeddings
```

To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.**

> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`.

## CLI

- Re-index: `npx gitnexus analyze`
- Check freshness: `npx gitnexus status`
- Generate docs: `npx gitnexus wiki`

<!-- gitnexus:end -->
Loading