@agentunion/kite 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/kite/checklists/feature-checklist.md +496 -0
- package/.claude/skills/kite/references/event-patterns.md +180 -0
- package/.claude/skills/kite/references/health-check.md +202 -0
- package/.claude/skills/kite/references/http-service.md +199 -0
- package/.claude/skills/kite/references/module-md-spec.md +172 -0
- package/.claude/skills/kite/references/multi-connection.md +147 -0
- package/.claude/skills/kite/references/rpc-patterns.md +199 -0
- package/.claude/skills/kite/references/shutdown-sequence.md +146 -0
- package/.claude/skills/kite/references/stdin-protocol.md +147 -0
- package/.claude/skills/kite/references/test-center-integration.md +178 -0
- package/.claude/skills/kite/references/ws-lifecycle.md +301 -0
- package/.claude/skills/kite/skill.md +272 -0
- package/.claude/skills/kite/templates/go/README.md +20 -0
- package/.claude/skills/kite/templates/node/entry.js +134 -0
- package/.claude/skills/kite/templates/node/module.md +16 -0
- package/.claude/skills/kite/templates/node/server.js +351 -0
- package/.claude/skills/kite/templates/node/server_http.js +90 -0
- package/.claude/skills/kite/templates/python/entry.py +425 -0
- package/.claude/skills/kite/templates/python/module.md +26 -0
- package/.claude/skills/kite/templates/python/server.py +447 -0
- package/.claude/skills/kite/templates/python/server_http.py +433 -0
- package/CHANGELOG.md +102 -0
- package/cli.js +78 -5
- package/core/dependency_checker.py +250 -0
- package/core/env_checker.py +586 -0
- package/dependencies_lock.json +128 -0
- package/docs/05-/347/237/255/344/277/241/350/256/244/350/257/201/344/270/216/347/224/250/346/210/267/344/277/241/346/201/257/346/216/245/345/217/243/346/226/207/346/241/243.md +507 -0
- package/docs/ACP/345/215/217/350/256/256/345/205/274/345/256/271/346/226/271/346/241/210.md +138 -0
- package/docs/CI/344/270/216AI/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/346/226/271/346/241/210.md +75 -0
- package/docs/CLI/345/274/200/345/217/221/350/256/241/345/210/222.md +595 -0
- package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237-/346/212/200/346/234/257/350/257/204/344/274/260.md +535 -0
- package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237/350/256/276/350/256/241.md +631 -0
- package/docs/Evol-App/344/275/277/347/224/250KernelClient/346/224/271/351/200/240/345/256/214/346/210/220.md +342 -0
- package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/346/246/202/350/246/201.md +604 -0
- package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241.md +1708 -0
- package/docs/Evol/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md +1154 -0
- package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-Evol/346/250/241/345/235/227/345/256/236/346/226/275/346/214/207/345/215/227.md +403 -0
- package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-/345/244/226/351/203/250/346/250/241/345/235/227/346/216/245/345/205/245/346/214/207/345/215/227.md +468 -0
- package/docs/HTTP-RPC/350/277/201/347/247/273/345/210/260WebSocket/350/256/241/345/210/222.md +318 -0
- package/docs/INDEX.md +388 -0
- package/docs/KITE_DOCS_GUIDE.md +33 -0
- package/docs/Kernel-Client-Kite-Token/346/224/257/346/214/201/345/256/236/346/226/275/345/256/214/346/210/220.md +330 -0
- package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266-/346/255/243/347/241/256/345/256/236/347/216/260.md +235 -0
- package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266/345/256/236/346/226/275/346/200/273/347/273/223.md +204 -0
- package/docs/Kite/345/256/211/350/243/205/351/227/256/351/242/230/350/247/243/345/206/263/346/226/271/346/241/210.md +362 -0
- package/docs/Kite/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241-/347/273/210/346/236/201/347/233/256/346/240/207.md +721 -0
- package/docs/Kite/346/216/247/345/210/266/345/217/260/347/273/237/344/270/200WebSocket/346/224/271/351/200/240/346/226/271/346/241/210.md +821 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/01-/346/241/206/346/236/266/345/256/232/344/275/215.md +12 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/02-/346/240/270/345/277/203/346/246/202/345/277/265.md +341 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/03-/347/263/273/347/273/237/346/236/266/346/236/204.md +257 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/04-/346/250/241/345/235/227/350/247/204/350/214/203.md +263 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213-/346/226/260/347/211/210.md +267 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213.md +149 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/06-/347/233/256/345/275/225/347/273/223/346/236/204.md +231 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/07-/346/225/260/346/215/256/346/250/241/345/236/213.md +68 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/08-/346/211/251/345/261/225/346/200/247.md +34 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/09-/344/270/216/345/205/267/344/275/223/345/272/224/347/224/250/347/232/204/345/205/263/347/263/273.md +22 -0
- package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/README.md +46 -0
- package/docs/Kite/347/263/273/347/273/237/345/220/257/345/212/250/346/265/201/347/250/213.md +567 -0
- package/docs/Launcher/345/220/257/345/212/250/345/231/250/346/226/207/346/241/243.md +745 -0
- package/docs/Polyglot/350/277/220/350/241/214/346/227/266/344/270/216Clawdbot/345/205/274/345/256/271/346/200/247/350/256/276/350/256/241.md +321 -0
- package/docs/Redis/344/270/216/346/250/241/345/235/227/345/244/232/345/256/236/344/276/213/346/226/271/346/241/210.md +438 -0
- package/docs/Relay-Kite-Token/350/256/244/350/257/201/345/256/236/346/226/275/345/256/214/346/210/220.md +178 -0
- package/docs/Relay-Token/346/235/203/351/231/220/351/205/215/347/275/256/351/252/214/350/257/201.md +113 -0
- package/docs/Watchdog/345/201/245/345/272/267/346/243/200/346/237/245/344/270/216WebSocket-Ping/346/234/272/345/210/266/345/210/206/346/236/220.md +367 -0
- package/docs/Watchdog/350/265/204/346/272/220/347/233/221/346/216/247/347/255/226/347/225/245.md +92 -0
- package/docs/WebSocket/346/216/245/346/224/266/345/276/252/347/216/257/346/255/273/351/224/201/351/230/262/350/214/203/350/247/204/350/214/203.md +357 -0
- package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/344/270/216/351/207/215/350/277/236/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +531 -0
- package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/346/226/271/346/241/210.md +169 -0
- package/docs/WebSocket/351/207/215/350/277/236/346/234/272/345/210/266/346/265/213/350/257/225/346/212/245/345/221/212.md +169 -0
- package/docs/WebSocket/351/207/215/350/277/236/351/200/200/351/201/277/346/234/272/345/210/266/346/226/271/346/241/210.md +394 -0
- package/docs/Web/346/250/241/345/235/227/344/270/216Evol/346/250/241/345/235/227/351/207/215/346/236/204/345/210/206/346/236/220.md +521 -0
- package/docs/audit-api-guide.md +68 -0
- package/docs/audit-module-design.md +315 -0
- package/docs/audit-module-implementation-summary.md +149 -0
- package/docs/llm-context-design.md +52 -0
- package/docs/llm-test-enhancement-plan.md +970 -0
- package/docs/logs-api-guide.md +42 -0
- package/docs/npm/345/214/205Python/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +302 -0
- package/docs/npm/345/217/221/345/270/203/344/270/216CLI/344/275/277/347/224/250/346/214/207/345/215/227.md +245 -0
- package/docs/stdio/344/270/216/347/253/257/345/217/243/345/217/221/347/216/260/351/207/215/346/236/204.md +480 -0
- package/docs/web/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/350/256/276/350/256/241/346/226/271/346/241/210.md +449 -0
- package/docs//344/272/213/344/273/266/345/244/204/347/220/206/346/234/272/345/210/266.md +388 -0
- package/docs//344/272/213/344/273/266/345/244/204/347/220/206/350/247/204/350/214/203.md +113 -0
- package/docs//344/272/213/344/273/266/350/256/242/351/230/205/351/200/232/351/205/215/347/254/246/350/247/204/350/214/203.md +256 -0
- package/docs//344/272/213/344/273/266/351/230/237/345/210/227/345/274/271/346/200/247/347/256/241/347/220/206.md +449 -0
- package/docs//344/272/244/344/272/222/345/274/217/347/273/210/347/253/257/346/216/247/345/210/266/346/226/271/346/241/210.md +301 -0
- package/docs//344/273/243/347/220/206/345/220/257/345/212/250/345/231/250/344/270/216/345/256/271/345/231/250/345/214/226.md +140 -0
- package/docs//344/273/243/347/240/201/347/273/237/350/256/241/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +217 -0
- package/docs//344/274/230/351/233/205/351/200/200/345/207/272/350/247/204/350/214/203.md +362 -0
- package/docs//344/276/235/350/265/226/347/256/241/347/220/206/350/257/264/346/230/216.md +141 -0
- package/docs//344/277/256/345/244/215/346/235/203/351/231/220/351/227/256/351/242/230-evol-RPC/346/235/203/351/231/220.md +268 -0
- package/docs//345/210/240/351/231/244kernel-client-example/345/256/214/346/210/220.md +309 -0
- package/docs//345/210/240/351/231/244ws-management/345/256/214/346/210/220.md +418 -0
- package/docs//345/220/257/345/212/250/344/274/230/345/214/226/346/226/271/346/241/210.md +522 -0
- package/docs//345/220/257/345/212/250/344/276/235/350/265/226/344/270/216/346/216/222/345/272/217.md +105 -0
- package/docs//345/256/211/350/243/205/350/204/232/346/234/254/345/274/200/345/217/221/346/226/207/346/241/243.md +643 -0
- package/docs//345/256/214/346/225/264/345/220/257/345/212/250/346/265/201/347/250/213/350/256/276/350/256/241.md +452 -0
- package/docs//345/256/236/347/216/260/350/247/204/345/210/222.md +195 -0
- package/docs//345/277/203/350/267/263/346/234/272/345/210/266/351/207/215/346/236/204/346/200/273/347/273/223.md +166 -0
- package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210-/345/256/211/345/205/250/345/256/241/346/237/245.md +176 -0
- package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210.md +908 -0
- package/docs//346/226/207/346/241/243/346/233/264/346/226/260/346/270/205/345/215/225.md +83 -0
- package/docs//346/227/245/345/277/227/344/270/216/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +829 -0
- package/docs//346/227/245/345/277/227/350/260/203/350/257/225/345/256/236/346/210/230/346/214/207/345/215/227.md +25 -0
- package/docs//346/236/266/346/236/204/345/200/237/351/211/264/346/214/207/345/215/227.md +977 -0
- package/docs//346/236/266/346/236/204/346/224/271/351/200/240-/345/256/214/346/210/220/346/200/273/347/273/223.md +440 -0
- package/docs//346/236/266/346/236/204/347/216/260/347/212/266/344/270/216/347/273/210/346/236/201/347/233/256/346/240/207/345/257/271/346/257/224/345/210/206/346/236/220.md +508 -0
- package/docs//346/250/241/345/235/227/345/244/232/350/277/236/346/216/245/346/216/247/345/210/266/347/255/226/347/225/245.md +220 -0
- package/docs//346/250/241/345/235/227/345/256/211/350/243/205/346/234/272/345/210/266/350/256/276/350/256/241.md +500 -0
- package/docs//346/250/241/345/235/227/345/274/200/345/217/221/346/214/207/345/215/227.md +1824 -0
- package/docs//346/250/241/345/235/227/347/203/255/346/233/264/346/226/260.md +89 -0
- package/docs//346/250/241/345/235/227/350/277/234/347/250/213/351/203/250/347/275/262/345/274/200/345/217/221/350/247/204/350/214/203.md +460 -0
- package/docs//346/250/241/345/235/227/351/200/200/345/207/272/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +303 -0
- package/docs//346/250/241/345/235/227/351/205/215/347/275/256/345/212/240/350/275/275/344/270/216/347/203/255/351/207/215/350/275/275/350/247/204/350/214/203.md +369 -0
- package/docs//346/265/213/350/257/225/344/270/255/345/277/203/346/267/273/345/212/240/346/250/241/345/235/227/346/265/213/350/257/225/346/214/207/345/215/227.md +147 -0
- package/docs//347/211/210/346/234/254/351/224/201/345/256/232/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +331 -0
- package/docs//347/216/257/345/242/203/345/217/230/351/207/217/344/270/216/350/277/220/350/241/214/346/227/266/347/233/256/345/275/225/350/256/276/350/256/241.md +499 -0
- package/docs//347/216/257/345/242/203/347/256/241/347/220/206/345/256/214/346/225/264/346/226/271/346/241/210.md +334 -0
- package/docs//350/231/232/346/213/237/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/345/256/214/346/225/264/350/256/276/350/256/241.md +1496 -0
- package/docs//350/231/232/346/213/237/347/216/257/345/242/203/345/267/245/344/275/234/345/216/237/347/220/206.md +163 -0
- package/docs//350/256/241/345/210/222/347/256/241/347/220/206/345/231/250/344/275/277/347/224/250/346/214/207/345/215/227.md +196 -0
- package/docs//350/256/244/350/257/201/346/250/241/345/235/227/344/270/216Gateway/350/256/276/350/256/241/346/226/271/346/241/210.md +765 -0
- package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/346/227/247/347/211/210.md +1117 -0
- package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241.md +451 -0
- package/docs//351/207/215/346/236/204/346/234/272/345/210/266/346/270/205/345/215/225.md +192 -0
- package/docs//351/223/276/350/267/257/350/277/275/350/270/252/346/226/271/346/241/210.md +242 -0
- package/docs//351/231/215/347/272/247/347/255/226/347/225/245/350/256/276/350/256/241/346/226/271/346/241/210.md +618 -0
- package/extensions/agents/assistant/entry.py +113 -14
- package/extensions/agents/assistant/module.md +27 -22
- package/extensions/agents/assistant/server.py +308 -106
- package/extensions/channels/acp_channel/entry.py +114 -16
- package/extensions/channels/acp_channel/module.md +4 -0
- package/extensions/channels/acp_channel/server.py +412 -105
- package/extensions/channels/phone_channel/__init__.py +1 -0
- package/extensions/channels/phone_channel/entry.py +503 -0
- package/extensions/channels/phone_channel/module.md +31 -0
- package/extensions/channels/phone_channel/server.py +686 -0
- package/extensions/event_hub_bench/entry.py +55 -12
- package/extensions/event_hub_bench/module.md +27 -27
- package/extensions/services/audit/README.md +134 -0
- package/extensions/services/audit/collector.py +73 -0
- package/extensions/services/audit/entry.py +444 -0
- package/extensions/services/audit/module.md +66 -0
- package/extensions/services/audit/query_audit.py +111 -0
- package/extensions/services/audit/routes/__init__.py +1 -0
- package/extensions/services/audit/routes/routes_audit.py +113 -0
- package/extensions/services/audit/schemas/__init__.py +5 -0
- package/extensions/services/audit/schemas/audit_event.py +92 -0
- package/extensions/services/audit/server.py +542 -0
- package/extensions/services/audit/storage.py +95 -0
- package/extensions/services/auth/entry.py +1054 -0
- package/extensions/services/auth/module.md +31 -0
- package/extensions/services/auth/token_store.py +185 -0
- package/extensions/services/auth/verifiers/evol_account.py +101 -0
- package/extensions/services/auth/verifiers/kite_token.py +38 -0
- package/extensions/services/auth/verifiers/pairing_code.py +71 -0
- package/extensions/services/backup/entry.py +505 -201
- package/extensions/services/backup/module.md +4 -2
- package/extensions/services/dataclaw/api/__init__.py +0 -0
- package/extensions/services/dataclaw/api/admin.py +367 -0
- package/extensions/services/dataclaw/api/copyright.py +175 -0
- package/extensions/services/dataclaw/api/credits.py +177 -0
- package/extensions/services/dataclaw/api/data.py +179 -0
- package/extensions/services/dataclaw/api/demands.py +269 -0
- package/extensions/services/dataclaw/api/feeds.py +262 -0
- package/extensions/services/dataclaw/api/identity.py +505 -0
- package/extensions/services/dataclaw/api/notifications.py +104 -0
- package/extensions/services/dataclaw/api/reviews.py +138 -0
- package/extensions/services/dataclaw/api/search.py +153 -0
- package/extensions/services/dataclaw/api/subscriptions.py +157 -0
- package/extensions/services/dataclaw/config.json5 +96 -0
- package/extensions/services/dataclaw/core/__init__.py +0 -0
- package/extensions/services/dataclaw/core/auth.py +95 -0
- package/extensions/services/dataclaw/core/config.py +50 -0
- package/extensions/services/dataclaw/core/database.py +70 -0
- package/extensions/services/dataclaw/entry.py +416 -0
- package/extensions/services/dataclaw/gofeed/351/241/271/347/233/256/346/211/200/346/234/211/346/235/203/350/275/254/347/247/273/346/265/201/347/250/213/350/257/264/346/230/216.md +309 -0
- package/extensions/services/dataclaw/migrate.py +283 -0
- package/extensions/services/dataclaw/models/__init__.py +0 -0
- package/extensions/services/dataclaw/module.md +49 -0
- package/extensions/services/dataclaw/requirements.txt +18 -0
- package/extensions/services/dataclaw/server.py +759 -0
- package/extensions/services/dataclaw/services/__init__.py +0 -0
- package/extensions/services/dataclaw/services/agent_service.py +132 -0
- package/extensions/services/dataclaw/services/credit_service.py +235 -0
- package/extensions/services/dataclaw/services/email_service.py +140 -0
- package/extensions/services/dataclaw/services/feed_service.py +259 -0
- package/extensions/services/dataclaw/services/notification_service.py +209 -0
- package/extensions/services/dataclaw/services/oauth_service.py +275 -0
- package/extensions/services/dataclaw/services/pricing.py +102 -0
- package/extensions/services/dataclaw/services/quality.py +79 -0
- package/extensions/services/dataclaw/services/reputation.py +142 -0
- package/extensions/services/dataclaw/services/sms_service.py +174 -0
- package/extensions/services/dataclaw/static/css/common.css +853 -0
- package/extensions/services/dataclaw/static/css/themes/blue.css +42 -0
- package/extensions/services/dataclaw/static/css/themes/dark.css +42 -0
- package/extensions/services/dataclaw/static/css/themes/light.css +35 -0
- package/extensions/services/dataclaw/static/js/api.js +103 -0
- package/extensions/services/dataclaw/static/js/common.js +321 -0
- package/extensions/services/dataclaw/static/js/i18n.js +95 -0
- package/extensions/services/dataclaw/static/js/pages/admin.js +152 -0
- package/extensions/services/dataclaw/static/js/pages/dashboard.js +82 -0
- package/extensions/services/dataclaw/static/js/pages/feed-detail.js +180 -0
- package/extensions/services/dataclaw/static/js/pages/feed-manage.js +158 -0
- package/extensions/services/dataclaw/static/js/theme.js +46 -0
- package/extensions/services/dataclaw/static/locales/en-US.json +464 -0
- package/extensions/services/dataclaw/static/locales/ja-JP.json +464 -0
- package/extensions/services/dataclaw/static/locales/zh-CN.json +464 -0
- package/extensions/services/dataclaw/templates/admin/index.html +90 -0
- package/extensions/services/dataclaw/templates/base.html +136 -0
- package/extensions/services/dataclaw/templates/credits/balance.html +106 -0
- package/extensions/services/dataclaw/templates/credits/deposit.html +164 -0
- package/extensions/services/dataclaw/templates/credits/history.html +90 -0
- package/extensions/services/dataclaw/templates/dashboard.html +52 -0
- package/extensions/services/dataclaw/templates/demands/create.html +78 -0
- package/extensions/services/dataclaw/templates/demands/detail.html +136 -0
- package/extensions/services/dataclaw/templates/demands/list.html +94 -0
- package/extensions/services/dataclaw/templates/feeds/create.html +95 -0
- package/extensions/services/dataclaw/templates/feeds/detail.html +110 -0
- package/extensions/services/dataclaw/templates/feeds/list.html +110 -0
- package/extensions/services/dataclaw/templates/feeds/manage.html +88 -0
- package/extensions/services/dataclaw/templates/index.html +185 -0
- package/extensions/services/dataclaw/templates/login.html +246 -0
- package/extensions/services/dataclaw/templates/register.html +164 -0
- package/extensions/services/dataclaw/templates/settings/notifications.html +96 -0
- package/extensions/services/dataclaw/templates/settings/profile.html +167 -0
- package/extensions/services/dataclaw/templates/subscriptions/list.html +64 -0
- package/extensions/services/dataclaw/tests/__init__.py +0 -0
- package/extensions/services/dataclaw/tests/conftest.py +68 -0
- package/extensions/services/dataclaw/tests/integration/__init__.py +0 -0
- package/extensions/services/dataclaw/tests/integration/test_workflows.py +239 -0
- package/extensions/services/dataclaw/tests/unit/__init__.py +0 -0
- package/extensions/services/dataclaw/tests/unit/test_admin.py +70 -0
- package/extensions/services/dataclaw/tests/unit/test_copyright.py +63 -0
- package/extensions/services/dataclaw/tests/unit/test_credits.py +80 -0
- package/extensions/services/dataclaw/tests/unit/test_data.py +98 -0
- package/extensions/services/dataclaw/tests/unit/test_demands.py +106 -0
- package/extensions/services/dataclaw/tests/unit/test_feeds.py +98 -0
- package/extensions/services/dataclaw/tests/unit/test_identity.py +88 -0
- package/extensions/services/dataclaw/tests/unit/test_notifications.py +36 -0
- package/extensions/services/dataclaw/tests/unit/test_reviews.py +68 -0
- package/extensions/services/dataclaw/tests/unit/test_search.py +64 -0
- package/extensions/services/dataclaw/tests/unit/test_subscriptions.py +65 -0
- package/extensions/services/dataclaw/tests/unit/test_system.py +106 -0
- package/extensions/services/dataclaw/utils/__init__.py +0 -0
- package/extensions/services/dataclaw/utils/crypto.py +38 -0
- package/extensions/services/dataclaw/utils/id_generator.py +52 -0
- package/extensions/services/dataclaw/ws/__init__.py +0 -0
- package/extensions/services/dataclaw/ws/handler.py +163 -0
- package/extensions/services/dataclaw//345/215/217/350/256/2561-/351/241/271/347/233/256/346/235/241/344/273/266/346/216/210/346/235/203/344/270/216/350/202/241/346/235/203/345/257/271/344/273/267/345/215/217/350/256/256.md +243 -0
- package/extensions/services/dataclaw//345/215/217/350/256/2562-/351/241/271/347/233/256/350/264/255/344/271/260/346/235/203/344/270/216/345/244/226/345/214/205/345/247/224/346/211/230/345/274/200/345/217/221/345/215/217/350/256/256.md +434 -0
- package/extensions/services/evol/__init__.py +1 -0
- package/extensions/services/evol/async_http.py +551 -0
- package/extensions/services/evol/auth_manager.py +602 -0
- package/extensions/services/evol/config.json5 +16 -0
- package/extensions/services/evol/config_loader.py +117 -0
- package/extensions/services/evol/entry.py +568 -0
- package/extensions/services/evol/evol_api.py +969 -0
- package/extensions/services/evol/evol_config.json5 +29 -0
- package/extensions/services/evol/mfa_totp.py +77 -0
- package/extensions/services/evol/migrate_tokens.py +122 -0
- package/extensions/services/evol/module.md +150 -0
- package/extensions/services/evol/nonce_pool.py +113 -0
- package/extensions/services/evol/oauth_manager.py +223 -0
- package/extensions/services/evol/pairing.py +251 -0
- package/extensions/services/evol/pairing_codes.jsonl +2 -0
- package/extensions/services/evol/relay.py +1031 -0
- package/extensions/services/evol/relay_config.json5 +85 -0
- package/extensions/services/evol/routes/__init__.py +1 -0
- package/extensions/services/evol/routes/routes_llm.py +231 -0
- package/extensions/services/evol/routes/routes_rpc.py +90 -0
- package/extensions/services/evol/routes/routes_test.py +68 -0
- package/extensions/services/evol/server.py +2426 -0
- package/extensions/services/evol/static/assets/CommissionView-Cs_ys6Gm.js +1 -0
- package/extensions/services/evol/static/assets/CommissionView-DACet_Oo.css +1 -0
- package/extensions/services/evol/static/assets/IframePage-DbO11U9G.js +1 -0
- package/extensions/services/evol/static/assets/IframePage-c572lT8i.css +1 -0
- package/extensions/services/evol/static/assets/TeamDetailView-DULrGD7k.css +1 -0
- package/extensions/services/evol/static/assets/TeamDetailView-gy_MBEqG.js +139 -0
- package/extensions/services/evol/static/assets/element-plus-Bd7pZkkM.js +63 -0
- package/extensions/services/evol/static/assets/index-CmMONKzG.css +1 -0
- package/extensions/services/evol/static/assets/index-D44bBe__.js +2 -0
- package/extensions/services/evol/static/assets/vue-vendor-DtF-__I4.js +29 -0
- package/extensions/services/evol/static/index.html +16 -0
- package/extensions/services/evol/static/logo.png +0 -0
- package/extensions/services/evol/stats_manager.py +243 -0
- package/extensions/services/evol/web/README.md +89 -0
- package/extensions/services/evol/web/build.bat +44 -0
- package/extensions/services/evol/web/index.html +13 -0
- package/extensions/services/evol/web/package-lock.json +1718 -0
- package/extensions/services/evol/web/package.json +26 -0
- package/extensions/services/evol/web/public/logo.png +0 -0
- package/extensions/services/evol/web/src/App.vue +7 -0
- package/extensions/services/evol/web/src/components/layout/AppHeader.vue +202 -0
- package/extensions/services/evol/web/src/components/layout/AppLayout.vue +61 -0
- package/extensions/services/evol/web/src/components/layout/AppSidebar.vue +115 -0
- package/extensions/services/evol/web/src/components/login/LoginPage.vue +271 -0
- package/extensions/services/evol/web/src/components/team/AddMemberModal.vue +181 -0
- package/extensions/services/evol/web/src/components/team/GroupTreeNode.vue +156 -0
- package/extensions/services/evol/web/src/components/team/TeamAlertConfig.vue +221 -0
- package/extensions/services/evol/web/src/components/team/TeamBillModal.vue +165 -0
- package/extensions/services/evol/web/src/components/team/TeamMembersAndGroups.vue +499 -0
- package/extensions/services/evol/web/src/components/team/TeamStatsPanel.vue +907 -0
- package/extensions/services/evol/web/src/components/team/TreeNode.vue +331 -0
- package/extensions/services/evol/web/src/components/team/stats/StatsExportProgress.vue +44 -0
- package/extensions/services/evol/web/src/components/team/stats/StatsHeader.vue +89 -0
- package/extensions/services/evol/web/src/components/team/stats/StatsMemberDetail.vue +415 -0
- package/extensions/services/evol/web/src/components/team/stats/StatsSummary.vue +42 -0
- package/extensions/services/evol/web/src/components/team/stats/helpers.ts +195 -0
- package/extensions/services/evol/web/src/components/team/stats/stats.css +741 -0
- package/extensions/services/evol/web/src/components/team/stats/useStatsApi.ts +114 -0
- package/extensions/services/evol/web/src/components/team/stats/useStatsCharts.ts +242 -0
- package/extensions/services/evol/web/src/components/team/stats/useStatsExport.ts +232 -0
- package/extensions/services/evol/web/src/composables/useFormatters.ts +42 -0
- package/extensions/services/evol/web/src/composables/useTheme.ts +52 -0
- package/extensions/services/evol/web/src/env.d.ts +7 -0
- package/extensions/services/evol/web/src/i18n/en.ts +361 -0
- package/extensions/services/evol/web/src/i18n/index.ts +36 -0
- package/extensions/services/evol/web/src/i18n/zh.ts +379 -0
- package/extensions/services/evol/web/src/main.ts +21 -0
- package/extensions/services/evol/web/src/router/index.ts +81 -0
- package/extensions/services/evol/web/src/services/kernel-client.ts +406 -0
- package/extensions/services/evol/web/src/stores/auth.ts +189 -0
- package/extensions/services/evol/web/src/stores/connection.ts +134 -0
- package/extensions/services/evol/web/src/stores/pages.ts +79 -0
- package/extensions/services/evol/web/src/styles/base.css +213 -0
- package/extensions/services/evol/web/src/styles/variables.css +138 -0
- package/extensions/services/evol/web/src/types/rpc.ts +35 -0
- package/extensions/services/evol/web/src/types/token.ts +87 -0
- package/extensions/services/evol/web/src/views/AccountView.vue +1532 -0
- package/extensions/services/evol/web/src/views/AiServiceView.vue +219 -0
- package/extensions/services/evol/web/src/views/CommissionView.vue +1220 -0
- package/extensions/services/evol/web/src/views/CreditsView.vue +131 -0
- package/extensions/services/evol/web/src/views/EndpointView.vue +163 -0
- package/extensions/services/evol/web/src/views/IframePage.vue +120 -0
- package/extensions/services/evol/web/src/views/TeamDetailView.vue +473 -0
- package/extensions/services/evol/web/src/views/TeamView.vue +332 -0
- package/extensions/services/evol/web/tsconfig.json +31 -0
- package/extensions/services/evol/web/tsconfig.node.json +10 -0
- package/extensions/services/evol/web/vite.config.ts +49 -0
- package/extensions/services/evolmem/__init__.py +0 -0
- package/extensions/services/evolmem/entry.py +387 -0
- package/extensions/services/evolmem/hooks/__init__.py +0 -0
- package/extensions/services/evolmem/hooks/assistant_stop.py +228 -0
- package/extensions/services/evolmem/hooks/common.py +76 -0
- package/extensions/services/evolmem/hooks/pre_tool_use.py +56 -0
- package/extensions/services/evolmem/hooks/session_end.py +133 -0
- package/extensions/services/evolmem/hooks/session_start.py +229 -0
- package/extensions/services/evolmem/hooks/user_prompt.py +122 -0
- package/extensions/services/evolmem/module.md +48 -0
- package/extensions/services/evolmem/prompts/00-server-info.md +28 -0
- package/extensions/services/evolmem/prompts/01-behavior.md +46 -0
- package/extensions/services/evolmem/prompts/02-summary-format.md +112 -0
- package/extensions/services/evolmem/prompts/03-file-query.md +92 -0
- package/extensions/services/evolmem/prompts/04-topic-stats.md +11 -0
- package/extensions/services/evolmem/prompts/05-recent-topics.md +84 -0
- package/extensions/services/evolmem/scripts/__init__.py +0 -0
- package/extensions/services/evolmem/scripts/extract_keywords.py +40 -0
- package/extensions/services/evolmem/scripts/search_topics.py +91 -0
- package/extensions/services/evolmem/server.py +641 -0
- package/extensions/services/gateway/entry.py +964 -0
- package/extensions/services/gateway/module.md +29 -0
- package/extensions/services/gateway/nonce_pool.py +65 -0
- package/extensions/services/gateway/relay.py +133 -0
- package/extensions/services/gateway/ws_server.py +285 -0
- package/extensions/services/kite_console/auth_manager.py +603 -0
- package/extensions/services/kite_console/config.json5 +19 -0
- package/extensions/services/kite_console/config_loader.py +117 -0
- package/extensions/services/kite_console/entry.py +528 -0
- package/extensions/services/kite_console/evol_api.py +179 -0
- package/extensions/services/kite_console/evol_config.json5 +29 -0
- package/extensions/services/kite_console/mfa_totp.py +77 -0
- package/extensions/services/kite_console/migrate_tokens.py +122 -0
- package/extensions/services/kite_console/module.md +37 -0
- package/extensions/services/kite_console/nonce_pool.py +113 -0
- package/extensions/services/kite_console/oauth_manager.py +223 -0
- package/extensions/services/kite_console/pairing.py +280 -0
- package/extensions/services/kite_console/pairing_codes.jsonl +2 -0
- package/extensions/services/kite_console/relay.py +1350 -0
- package/extensions/services/kite_console/relay_config.json5 +96 -0
- package/extensions/services/kite_console/routes/__init__.py +1 -0
- package/extensions/services/kite_console/routes/routes_llm.py +231 -0
- package/extensions/services/kite_console/routes/routes_proxy.py +115 -0
- package/extensions/services/kite_console/routes/routes_rpc.py +89 -0
- package/extensions/services/kite_console/routes/routes_test.py +68 -0
- package/extensions/services/kite_console/server.py +1742 -0
- package/extensions/services/kite_console/static/css/style.css +1854 -0
- package/extensions/services/kite_console/static/index.html +1524 -0
- package/extensions/services/kite_console/static/js/dialog.js +292 -0
- package/extensions/services/kite_console/static/js/evol-app.js +7740 -0
- package/extensions/services/kite_console/static/js/evol-app.js.backup +2777 -0
- package/extensions/services/kite_console/static/js/kernel-client.js +560 -0
- package/extensions/services/kite_console/static/js/kernel-client.js.backup +434 -0
- package/extensions/services/kite_console/static/js/registry-tests.js +592 -0
- package/extensions/services/kite_console/static/js/tests/ARCHITECTURE.md +67 -0
- package/extensions/services/kite_console/static/js/tests/README.md +140 -0
- package/extensions/services/kite_console/static/js/tests/index.js +161 -0
- package/extensions/services/kite_console/static/js/tests/integration/auth.js +120 -0
- package/extensions/services/kite_console/static/js/tests/integration/channel-interaction.js +188 -0
- package/extensions/services/kite_console/static/js/tests/integration/elastic-connection.js +115 -0
- package/extensions/services/kite_console/static/js/tests/integration/full-workflow.js +43 -0
- package/extensions/services/kite_console/static/js/tests/integration/multi-instance.js +304 -0
- package/extensions/services/kite_console/static/js/tests/integration/nested-rpc.js +266 -0
- package/extensions/services/kite_console/static/js/tests/integration/pingpong.js +25 -0
- package/extensions/services/kite_console/static/js/tests/integration/redis.js +227 -0
- package/extensions/services/kite_console/static/js/tests/integration/registry-core.js +52 -0
- package/extensions/services/kite_console/static/js/tests/integration/remote-deploy.js +85 -0
- package/extensions/services/kite_console/static/js/tests/integration/require-init.js +96 -0
- package/extensions/services/kite_console/static/js/tests/integration/scaling-control.js +193 -0
- package/extensions/services/kite_console/static/js/tests/integration/trace.js +109 -0
- package/extensions/services/kite_console/static/js/tests/modules/acp_channel.js +339 -0
- package/extensions/services/kite_console/static/js/tests/modules/auth.js +96 -0
- package/extensions/services/kite_console/static/js/tests/modules/backup.js +49 -0
- package/extensions/services/kite_console/static/js/tests/modules/gateway.js +41 -0
- package/extensions/services/kite_console/static/js/tests/modules/kernel.js +90 -0
- package/extensions/services/kite_console/static/js/tests/modules/launcher.js +75 -0
- package/extensions/services/kite_console/static/js/tests/modules/multi_instance.js +129 -0
- package/extensions/services/kite_console/static/js/tests/modules/phone_channel.js +364 -0
- package/extensions/services/kite_console/static/js/tests/modules/redis.js +178 -0
- package/extensions/services/kite_console/static/js/tests/modules/watchdog.js +60 -0
- package/extensions/services/kite_console/static/js/tests/modules/web.js +70 -0
- package/extensions/services/kite_console/static/js/tests/test-runner.js +123 -0
- package/extensions/services/kite_console/static/js/virtual-list.js +200 -0
- package/extensions/services/kite_console/static/pairing.html +248 -0
- package/extensions/services/kite_console/static/test_kernel_client_token.html +352 -0
- package/extensions/services/kite_console/static/test_registry.html +262 -0
- package/extensions/services/kite_console/static/test_relay.html +462 -0
- package/extensions/services/kite_console/stats_manager.py +247 -0
- package/extensions/services/logs/README.md +215 -0
- package/extensions/services/logs/api_logger.py +37 -0
- package/extensions/services/logs/baseline.py +121 -0
- package/extensions/services/logs/cleaner.py +76 -0
- package/extensions/services/logs/entry.py +449 -0
- package/extensions/services/logs/formatter.py +129 -0
- package/extensions/services/logs/module.md +38 -0
- package/extensions/services/logs/quick_diagnostic.py +128 -0
- package/extensions/services/logs/routes/__init__.py +1 -0
- package/extensions/services/logs/routes/routes_logs.py +218 -0
- package/extensions/services/logs/routes/routes_logs.py.backup +173 -0
- package/extensions/services/logs/scanner.py +100 -0
- package/extensions/services/logs/searcher.py +263 -0
- package/extensions/services/logs/server.py +553 -0
- package/extensions/services/logs.zip +0 -0
- package/extensions/services/model_service/config.json5 +30 -0
- package/extensions/services/model_service/entry.py +633 -162
- package/extensions/services/model_service/module.md +11 -2
- package/extensions/services/proxy/.claude/settings.local.json +13 -0
- package/extensions/services/proxy/__init__.py +0 -0
- package/extensions/services/proxy/agentcp/LICENCE +178 -0
- package/extensions/services/proxy/agentcp/README copy.md +85 -0
- package/extensions/services/proxy/agentcp/README.md +260 -0
- package/extensions/services/proxy/agentcp/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/agent.py +4 -0
- package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
- package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
- package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
- package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
- package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
- package/extensions/services/proxy/agentcp/base/client.py +112 -0
- package/extensions/services/proxy/agentcp/base/env.py +34 -0
- package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
- package/extensions/services/proxy/agentcp/base/log.py +98 -0
- package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
- package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
- package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
- package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/context/context.py +73 -0
- package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
- package/extensions/services/proxy/agentcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
- package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
- package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
- package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
- package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
- package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/hcp.py +299 -0
- package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
- package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
- package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
- package/extensions/services/proxy/agentcp/llm_server.py +172 -0
- package/extensions/services/proxy/agentcp/mermaid.py +210 -0
- package/extensions/services/proxy/agentcp/message.py +149 -0
- package/extensions/services/proxy/agentcp/metrics.py +256 -0
- package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
- package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
- package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
- package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
- package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
- package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
- package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
- package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
- package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
- package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
- package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
- package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
- package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
- package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
- package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/requirements.txt +7 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
- package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
- package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
- package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
- package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
- package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
- package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
- package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
- package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
- package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
- package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
- package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
- package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
- package/extensions/services/proxy/agentcp/workflow.py +203 -0
- package/extensions/services/proxy/aid_manager.py +419 -0
- package/extensions/services/proxy/auth_bridge.py +182 -0
- package/extensions/services/proxy/config_store.py +79 -0
- package/extensions/services/proxy/entry.py +528 -0
- package/extensions/services/proxy/evol/__init__.py +1 -0
- package/extensions/services/proxy/evol/config.py +37 -0
- package/extensions/services/proxy/evol/http/__init__.py +1 -0
- package/extensions/services/proxy/evol/http/async_http.py +551 -0
- package/extensions/services/proxy/evol/log.py +28 -0
- package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
- package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
- package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +96 -0
- package/extensions/services/proxy/evol/presenter/configPresenter.py +234 -0
- package/extensions/services/proxy/evol/presenter/userPresenter.py +71 -0
- package/extensions/services/proxy/evol/server/__init__.py +1 -0
- package/extensions/services/proxy/evol/server/claude_proxy_async.py +3434 -0
- package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
- package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
- package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
- package/extensions/services/proxy/evol/version.py +24 -0
- package/extensions/services/proxy/module.md +151 -0
- package/extensions/services/proxy/server.py +952 -0
- package/extensions/services/redis/ALIGNMENT_CHECKLIST.md +121 -0
- package/extensions/services/redis/ALIGNMENT_STATUS.md +548 -0
- package/extensions/services/redis/config.json5 +8 -0
- package/extensions/services/redis/entry.py +1509 -0
- package/extensions/services/redis/entry.py.backup +405 -0
- package/extensions/services/redis/module.md +48 -0
- package/extensions/services/redis/redis_builtin.py +332 -0
- package/extensions/services/redis/redis_external.py +164 -0
- package/extensions/services/testUi/entry.py +446 -0
- package/extensions/services/testUi/module.md +18 -0
- package/extensions/services/testUi/ui/cards.html +131 -0
- package/extensions/services/testUi/ui/index.html +22 -0
- package/extensions/services/testUi/ui/particles.html +143 -0
- package/extensions/services/watchdog/entry.py +1258 -767
- package/extensions/services/watchdog/module.md +3 -0
- package/extensions/services/watchdog/monitor.py +483 -75
- package/extensions/services/web/auth_manager.py +602 -0
- package/extensions/services/web/config.json5 +11 -0
- package/extensions/services/web/entry.py +598 -478
- package/extensions/services/web/mfa_totp.py +77 -0
- package/extensions/services/web/module.md +17 -14
- package/extensions/services/web/nonce_pool.py +113 -0
- package/extensions/services/web/oauth_manager.py +223 -0
- package/extensions/services/web/pairing.py +3 -2
- package/extensions/services/web/pairing_codes.jsonl +1 -0
- package/extensions/services/web/relay.py +442 -63
- package/extensions/services/web/relay_config.json5 +1 -2
- package/extensions/services/web/routes/routes_rpc.py +6 -6
- package/extensions/services/web/server.py +380 -181
- package/extensions/services/web/static/index.html +1752 -1738
- package/extensions/services/web/static/js/app.js +32 -0
- package/extensions/services/web/static/js/kernel-client.js +48 -9
- package/extensions/services/web/static/js/token-manager.js +10 -10
- package/extensions/services/web/vendor/bluetooth/audio.py +1 -1
- package/extensions/services/web/vendor/config.py +2 -2
- package/extensions/services/web/vendor/storage/identity.py +1 -1
- package/kernel/entry.py +77 -23
- package/kernel/event_hub.py +1122 -74
- package/kernel/module.md +26 -1
- package/kernel/registry_store.py +209 -36
- package/kernel/rpc_router.py +1400 -465
- package/kernel/server.py +1084 -108
- package/kite_cli/builders/__init__.py +4 -0
- package/kite_cli/builders/base.py +67 -0
- package/kite_cli/builders/custom.py +31 -0
- package/kite_cli/builders/detector.py +56 -0
- package/kite_cli/builders/go.py +34 -0
- package/kite_cli/builders/gradle.py +41 -0
- package/kite_cli/builders/maven.py +36 -0
- package/kite_cli/builders/npm.py +44 -0
- package/kite_cli/builders/python.py +37 -0
- package/kite_cli/commands/BUILD_GUIDE.md +109 -0
- package/kite_cli/commands/build.py +142 -0
- package/kite_cli/commands/check.py +60 -0
- package/kite_cli/commands/config.py +156 -0
- package/kite_cli/commands/deps.py +58 -0
- package/kite_cli/commands/deps_install.py +67 -0
- package/kite_cli/commands/disable.py +162 -0
- package/kite_cli/commands/enable.py +162 -0
- package/kite_cli/commands/env_check.py +45 -0
- package/kite_cli/commands/export.py +96 -0
- package/kite_cli/commands/import_cmd.py +110 -0
- package/kite_cli/commands/install.py +50 -23
- package/kite_cli/commands/install_skill.py +107 -0
- package/kite_cli/commands/list.py +128 -31
- package/kite_cli/commands/outdated.py +202 -0
- package/kite_cli/commands/prepare.py +49 -0
- package/kite_cli/commands/search.py +33 -17
- package/kite_cli/commands/update.py +115 -2
- package/kite_cli/commands/venv_setup.py +56 -0
- package/kite_cli/commands/why.py +48 -0
- package/kite_cli/core/config_manager.py +145 -0
- package/kite_cli/core/downloader.py +32 -2
- package/kite_cli/main.py +179 -5
- package/kite_cli/utils/colors.py +153 -0
- package/kite_cli/utils/dependency_graph.py +209 -0
- package/kite_cli/utils/process.py +55 -0
- package/kite_cli/utils/progress.py +207 -0
- package/kite_cli/utils/table.py +101 -0
- package/launcher/count_lines.py +192 -43
- package/launcher/entry.py +4543 -2517
- package/launcher/logging_setup.py +54 -1
- package/launcher/module.md +37 -2
- package/launcher/module_scanner.py +103 -20
- package/launcher/process_manager.py +355 -76
- package/main.py +10 -1
- package/package.json +11 -1
- package/python_version.json +4 -0
- package/requirements.txt +41 -0
- package/scripts/auto-fix-deps.py +128 -0
- package/scripts/env-manager.js +351 -0
- package/scripts/final-test.js +78 -0
- package/scripts/python-env.js +79 -0
- package/scripts/scan_dependencies.py +461 -0
- package/scripts/setup-python-env.js +700 -0
- package/scripts/test-alluser.js +48 -0
- package/scripts/test-different-version.js +86 -0
- package/scripts/test-direct.js +63 -0
- package/scripts/test-extract-installer.js +28 -0
- package/scripts/test-install-log.js +54 -0
- package/scripts/test-installer.js +39 -0
- package/scripts/test-integration.js +250 -0
- package/scripts/test-real-install.js +210 -0
- package/scripts/test-targetdir.js +49 -0
- package/scripts/test-venv-real.js +47 -0
- package/scripts/test-venv-simple.js +57 -0
- package/scripts/test-wait.js +49 -0
- package/scripts/test-with-log.js +63 -0
- package/extensions/services/web/config.yaml +0 -149
|
@@ -0,0 +1,977 @@
|
|
|
1
|
+
# 架构借鉴指南
|
|
2
|
+
|
|
3
|
+
> 本文档基于 Kite 与两个参考项目(龙虾 clawdbot、CoPaw)的机制层面对比,列出 Kite 需要深入探讨和改进的架构点。每一条都是独立议题,可在单独会话中展开讨论。
|
|
4
|
+
>
|
|
5
|
+
> **讨论方法**:指定要讨论的条目编号(如 P0-1),先深入阅读该条目列出的三个项目的源码文件,分析各自的设计取舍,然后为 Kite 给出具体的修改方案。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 项目路径与源码导航
|
|
10
|
+
|
|
11
|
+
### Kite(本项目)
|
|
12
|
+
|
|
13
|
+
- 路径:`C:/Users/agentcp/AppData/Roaming/Evol/default/workspace/openclaw-acp-channel/ai-phone-agent/Kite`
|
|
14
|
+
- 设计文档:`docs/`(查阅方法见 `docs/KITE_DOCS_GUIDE.md`)
|
|
15
|
+
|
|
16
|
+
| 组件 | 文件 | 关键内容 |
|
|
17
|
+
|------|------|---------|
|
|
18
|
+
| 入口 | `main.py` | token 生成(`secrets.token_hex(32)`)、环境变量设置、启动 Launcher |
|
|
19
|
+
| Launcher | `core/launcher/entry.py` | `class Launcher`:11 步启动序列、模块监控、API 线程、Event Hub 连接 |
|
|
20
|
+
| 进程管理 | `core/launcher/process_manager.py` | `class ProcessManager`:start_module / stop / cleanup_leftovers / write_stdin / close_stdio |
|
|
21
|
+
| 模块扫描 | `core/launcher/module_scanner.py` | `class ModuleScanner`:module.md 发现、`_parse_frontmatter()` YAML 解析、`class ModuleInfo` |
|
|
22
|
+
| Registry 入口 | `core/registry/entry.py` | stdin 读 token → 启动 FastAPI → stdout 输出端口 |
|
|
23
|
+
| Registry 存储 | `core/registry/store.py` | `class RegistryStore`:内存模块表、token 验证、lookup glob 查询、get 点路径读取 |
|
|
24
|
+
| Event Hub 入口 | `core/event_hub/entry.py` | stdin 读 token + launcher_ws_token → 启动 WS 服务 → stdout 输出 ws_endpoint |
|
|
25
|
+
| Event Hub 核心 | `core/event_hub/hub.py` | `class EventHub`:WS 路由、NATS 匹配、`class EventDedup` 去重、订阅管理 |
|
|
26
|
+
| Python 模块示例 | `test_modules/hello/entry.py` | 最小 Python 模块:stdin 读 boot_info、读环境变量 |
|
|
27
|
+
| Node.js 模块示例 | `test_modules/hello_node/entry.js` | 完整 Node.js 模块:readline 读 boot_info → HTTP 注册 → WS 连接 → module.ready |
|
|
28
|
+
|
|
29
|
+
### 龙虾(clawdbot)
|
|
30
|
+
|
|
31
|
+
- 路径:`C:/Users/agentcp/AppData/Roaming/evol/default/workspace/clawdbot`
|
|
32
|
+
- 语言:TypeScript/Node.js(ESM)
|
|
33
|
+
- 架构:单进程 Gateway + 插件系统,WebSocket 控制面
|
|
34
|
+
|
|
35
|
+
| 机制 | 文件(相对于项目根) | 关键内容 |
|
|
36
|
+
|------|---------------------|---------|
|
|
37
|
+
| 插件注册表 | `src/plugins/registry.ts` | 插件记录管理、8 种注册类型(Tool/Hook/Channel/Provider/Gateway Method/HTTP Route/CLI/Service) |
|
|
38
|
+
| 插件加载器 | `src/plugins/loader.ts` | jiti 动态加载、3 路发现(bundled/workspace/node_modules) |
|
|
39
|
+
| 插件类型定义 | `src/plugins/types.ts` | `ClawdbotPluginApi` 接口定义(registerTool/registerHook/registerChannel 等) |
|
|
40
|
+
| 插件清单 | `src/plugins/manifest.ts` | clawdbot.plugin.json 加载与验证 |
|
|
41
|
+
| Schema 校验 | `src/plugins/schema-validator.ts` | AJV 实例 + 缓存,`validateJsonSchemaValue()` |
|
|
42
|
+
| Zod 配置 Schema | `src/config/zod-schema.ts` | `ClawdbotSchema` 全配置 Zod 定义 + `toJSONSchema()` 导出 |
|
|
43
|
+
| 配置加载 | `src/config/io.ts` | `createConfigIO()`、`loadConfig()`、JSON5 解析、读写快照 |
|
|
44
|
+
| 配置验证修复 | `src/config/validation.ts` | `validateConfigObject()`、带插件的扩展验证 |
|
|
45
|
+
| RPC 协议 Schema | `src/gateway/protocol/schema/protocol-schemas.ts` | TypeBox 定义所有 request/response schema(50+ 方法) |
|
|
46
|
+
| 错误码 | `src/gateway/protocol/schema/error-codes.ts` | `ErrorCodes` 枚举 + `errorShape()` 工厂(NOT_LINKED/NOT_PAIRED/AGENT_TIMEOUT/INVALID_REQUEST/UNAVAILABLE) |
|
|
47
|
+
| 认证 | `src/gateway/auth.ts` | `ResolvedGatewayAuth`(token/password/tailscale)、timing-safe 比较 |
|
|
48
|
+
| 设备配对 | `src/infra/device-pairing.ts` | 配对请求、DeviceAuthToken(publicKey/role/scopes) |
|
|
49
|
+
| DM 策略 | `src/agents/pi-tools.policy.ts` | DM 历史限制、工具访问策略 |
|
|
50
|
+
| 健康检查 | `src/gateway/server-methods/health.ts` | Gateway RPC health 方法(agent/channel/device 状态) |
|
|
51
|
+
| 健康命令 | `src/commands/health.ts` | CLI health 子命令 |
|
|
52
|
+
| 生命周期钩子 | `src/hooks/internal-hooks.ts` | `InternalHookEvent` 类型、`registerInternalHook()`、`triggerInternalHook()` |
|
|
53
|
+
| 优雅关闭 | `src/gateway/server-close.ts` | `createGatewayCloseHandler()`:按序停止 channel/cron/heartbeat/browser/plugins/bonjour/tailscale |
|
|
54
|
+
| 进程管理 | `src/process/spawn-utils.ts` | `spawnWithFallback()` 多策略降级 |
|
|
55
|
+
| 子进程桥接 | `src/process/child-process-bridge.ts` | `attachChildProcessBridge()` 信号转发(SIGTERM/SIGINT/SIGHUP) |
|
|
56
|
+
| CLI 构建 | `src/cli/program/build-program.ts` | `buildProgram()` Commander.js 实例 |
|
|
57
|
+
| CLI 命令注册 | `src/cli/program/command-registry.ts` | `registerProgramCommands()`、命令路由 |
|
|
58
|
+
| 路由解析 | `src/routing/resolve-route.ts` | `resolveAgentRoute()`:channel/peer → agentId 映射 |
|
|
59
|
+
| 路由绑定 | `src/routing/bindings.ts` | `listBindings()`、channel-account-agent 绑定 |
|
|
60
|
+
| Agent 运行时 | `src/agents/pi-embedded-runner.ts` | `runEmbeddedPiAgent()`:Pi Agent 执行入口、session 管理、工具分割 |
|
|
61
|
+
| Agent 工具注册 | `src/agents/clawdbot-tools.ts` | `createClawdbotTools()`:50+ 参数的工具工厂(sessions/browser/messaging/cron/image 等) |
|
|
62
|
+
| 思维模式 | `src/auto-reply/thinking.ts` | `ThinkLevel` 类型(off/minimal/low/medium/high/xhigh)、provider/model 兼容性映射 |
|
|
63
|
+
| Session 管理 | `src/sessions/session-key-utils.ts` | session key 解析(agent/subagent/ACP)、线程父会话解析、key 规范化 |
|
|
64
|
+
| Session 模型覆盖 | `src/sessions/model-overrides.ts` | `applyModelOverrideToSessionEntry()`:per-session provider/model 覆盖 |
|
|
65
|
+
| 内存管理 | `src/memory/manager.ts` | `MemoryIndexManager`:embeddings + sqlite-vec 向量搜索 + BM25 混合搜索 |
|
|
66
|
+
| 混合搜索 | `src/memory/hybrid.ts` | BM25 关键词 + 向量相似度混合排序 |
|
|
67
|
+
| Provider failover | `src/agents/failover-error.ts` | `FailoverError`:reason 分类(billing/rate_limit/auth/timeout)+ HTTP 状态映射 |
|
|
68
|
+
| Auth profile | `src/agents/auth-profiles/session-override.ts` | auth profile 选择、fallback 逻辑、session 级 provider 切换 |
|
|
69
|
+
| Daemon 服务 | `src/daemon/service.ts` | 统一 daemon 抽象:systemd (Linux) + launchd (macOS) + Task Scheduler (Windows) |
|
|
70
|
+
| systemd 集成 | `src/daemon/systemd.ts` | Linux systemd unit 安装/卸载/启用/重启 |
|
|
71
|
+
| launchd 集成 | `src/daemon/launchd.ts` | macOS launchd plist 管理 |
|
|
72
|
+
| 结构化日志 | `src/logging/logger.ts` | tslog 集成、文件轮转(24h)、subsystem 命名空间、外部 transport |
|
|
73
|
+
| 日志配置 | `src/logging/config.ts` | 日志级别从环境变量/配置文件解析 |
|
|
74
|
+
| Cron 调度 | `src/cron/service.ts` | cron 任务增删改查、内存状态 + 持久化、任务执行 API |
|
|
75
|
+
| Cron 隔离执行 | `src/cron/isolated-agent.ts` | cron 任务隔离 agent 调用、delivery target 解析、heartbeat |
|
|
76
|
+
| Web UI 入口 | `ui/src/main.ts` | Lit Web Components 入口、样式初始化 |
|
|
77
|
+
| Web UI 主组件 | `ui/src/ui/app.ts` | dashboard 主组件:Gateway 连接、chat/cron/config/sessions/channels 管理 |
|
|
78
|
+
| 引导向导 | `src/wizard/onboarding.ts` | onboarding 流程编排:auth → model → channel → skills → hooks → config |
|
|
79
|
+
| 媒体理解 | `src/media-understanding/index.ts` | 图像/视频/音频转录 providers(Anthropic/OpenAI/Google/Deepgram/Groq/Minimax) |
|
|
80
|
+
| 测试配置 | `vitest.config.ts` | Vitest 配置:coverage 70%、forks pool、120s timeout、878+ 测试文件 |
|
|
81
|
+
|
|
82
|
+
### CoPaw
|
|
83
|
+
|
|
84
|
+
- 路径:`C:/Users/agentcp/AppData/Roaming/evol/default/workspace/CoPaw-main`
|
|
85
|
+
- 语言:Python
|
|
86
|
+
- 架构:单进程 FastAPI + AgentScope,全异步
|
|
87
|
+
|
|
88
|
+
| 机制 | 文件(相对于项目根) | 关键内容 |
|
|
89
|
+
|------|---------------------|---------|
|
|
90
|
+
| Channel 基类 | `src/copaw/app/channels/base.py` | `BaseChannel` ABC:async request/response 接口 |
|
|
91
|
+
| Channel 注册表 | `src/copaw/app/channels/registry.py` | 内置 channel 注册 + `~/.copaw/custom_channels/` 自动发现 |
|
|
92
|
+
| Channel 管理器 | `src/copaw/app/channels/manager.py` | `ChannelManager`:生命周期管理、消息队列、`from_config()` 工厂 |
|
|
93
|
+
| 配置模型 | `src/copaw/config/config.py` | Pydantic 模型:`Config`、`ChannelConfig`、`AgentsConfig`、`MCPConfig` |
|
|
94
|
+
| 配置工具 | `src/copaw/config/utils.py` | `load_config()`、`get_config_path()`、配置持久化 |
|
|
95
|
+
| 配置监视器 | `src/copaw/config/watcher.py` | `ConfigWatcher`:2s 轮询 mtime + hash → 触发 channel 重载 |
|
|
96
|
+
| Skill 管理器 | `src/copaw/agents/skills_manager.py` | `sync_skills_to_working_dir()`、SKILL.md frontmatter 解析 |
|
|
97
|
+
| Provider 注册表 | `src/copaw/providers/registry.py` | `PROVIDERS` 字典:内置 provider 定义 + 自定义 provider 加载 |
|
|
98
|
+
| Provider 数据模型 | `src/copaw/providers/models.py` | Pydantic:`ModelInfo`、`ProviderDefinition`、`CustomProviderData` |
|
|
99
|
+
| MCP 客户端管理 | `src/copaw/app/mcp/manager.py` | `MCPClientManager`:生命周期管理、lock-based atomic swap 热重载 |
|
|
100
|
+
| MCP 配置监视 | `src/copaw/app/mcp/watcher.py` | `MCPConfigWatcher`:独立轮询 MCP 配置段变更 |
|
|
101
|
+
| Agent 实现 | `src/copaw/agents/react_agent.py` | `CoPawAgent`(extends `ReActAgent`):工具 + 技能 + 记忆 |
|
|
102
|
+
| 模型工厂 | `src/copaw/agents/model_factory.py` | `create_model_and_formatter()`:按 provider 创建 LLM 实例 |
|
|
103
|
+
| 查询处理器 | `src/copaw/app/runner/runner.py` | `AgentRunner`:query_handler 创建 agent → 运行 → 管理 session |
|
|
104
|
+
| Cron 管理器 | `src/copaw/app/crons/manager.py` | APScheduler `AsyncIOScheduler` + CronTrigger/IntervalTrigger |
|
|
105
|
+
| App 生命周期 | `src/copaw/app/_app.py` | FastAPI lifespan:按序初始化 Runner → MCP → Channel → Cron → Watcher |
|
|
106
|
+
| CLI 入口 | `src/copaw/cli/main.py` | Click CLI:app/channels/chats/clean/cron/env/init/models/skills |
|
|
107
|
+
| 错误转储 | `src/copaw/app/runner/query_error_dump.py` | `write_query_error_dump()`:traceback + 请求 + agent 状态写入 temp JSON |
|
|
108
|
+
| 内存实现 | `src/copaw/agents/memory/copaw_memory.py` | `CoPawInMemoryMemory`:扩展 InMemoryMemory,支持 mark 过滤 + summary 前置 |
|
|
109
|
+
| 内存管理器 | `src/copaw/agents/memory/memory_manager.py` | 继承 ReMeFs:消息压缩/摘要、语义搜索、token 感知截断、70% 阈值自动压缩 |
|
|
110
|
+
| Markdown 管理 | `src/copaw/agents/memory/agent_md_manager.py` | `AgentMdManager`:working/memory 目录的 md 文件读写、元数据追踪 |
|
|
111
|
+
| 初始化命令 | `src/copaw/cli/init_cmd.py` | 交互式初始化:channels/env/providers/skills 配置 + 安全警告 + HEARTBEAT.md 创建 |
|
|
112
|
+
| 日志工具 | `src/copaw/utils/logging.py` | `ColorFormatter`:ANSI 着色、Windows 兼容、`LOG_NAMESPACE = "copaw"` |
|
|
113
|
+
| Console 布局 | `console/src/layouts/MainLayout/index.tsx` | Ant Design Layout + 侧边栏 + 路由(chat/channels/sessions/cron/skills/mcp/models 等) |
|
|
114
|
+
| Console API | `console/src/api/index.ts` | 聚合 12 个 API 模块(channel/cron/chat/session/env/provider/skill/agent/workspace/mcp 等) |
|
|
115
|
+
| Console Chat | `console/src/pages/Chat/index.tsx` | `AgentScopeRuntimeWebUI` 集成、model 配置提示、options panel |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 优先级说明
|
|
120
|
+
|
|
121
|
+
- **P0(地基级)** — 不补会在后续开发中持续产生问题,越晚补代价越高
|
|
122
|
+
- **P1(骨架级)** — 影响日常可用性和开发效率,在功能铺开前需要到位
|
|
123
|
+
- **P2(肌肉级)** — 提升开发体验和运维能力,可在功能开发中渐进完善
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## P0-1:Module SDK
|
|
128
|
+
|
|
129
|
+
### 现状
|
|
130
|
+
|
|
131
|
+
每个模块都要手写:stdin 读取 boot_info → 启动 HTTP 服务 → POST 注册 Registry → 连接 Event Hub WebSocket → 发送 module.ready → 启动 heartbeat 定时器 → 退出时 deregister。这套流程约 80-120 行样板代码,且容易实现不一致(如忘记 heartbeat、readline 用法错误导致 Node.js 死锁等)。
|
|
132
|
+
|
|
133
|
+
### 需要阅读的源码
|
|
134
|
+
|
|
135
|
+
**Kite — 看「模块要手写什么」**:
|
|
136
|
+
- `test_modules/hello_node/entry.js` — 完整 Node.js 模块实现(stdin readline → HTTP → Registry 注册 → Event Hub WS → module.ready → heartbeat),这就是当前需要 SDK 封装的全部样板代码
|
|
137
|
+
- `test_modules/hello/entry.py` — 最小 Python 模块(只读 boot_info,未完整实现 8 步协议)
|
|
138
|
+
- `core/launcher/process_manager.py` — Launcher 侧如何向模块 stdin 写 boot_info、管理 stdio 生命周期
|
|
139
|
+
|
|
140
|
+
**龙虾 — 看「Plugin API 注入模式」**:
|
|
141
|
+
- `src/plugins/types.ts` — `ClawdbotPluginApi` 接口定义:插件拿到的 API 对象有哪些方法(registerTool / registerHook / registerChannel / registerProvider / registerGatewayMethod / registerHttpRoute / registerService / registerCliCommand)
|
|
142
|
+
- `src/plugins/registry.ts` — API 对象如何创建、注册信息如何存储
|
|
143
|
+
- `src/plugins/loader.ts` — 插件如何被发现和加载,API 对象何时注入
|
|
144
|
+
|
|
145
|
+
**CoPaw — 看「基类继承模式」**:
|
|
146
|
+
- `src/copaw/app/channels/base.py` — `BaseChannel` ABC:开发者只需继承并实现抽象方法,框架负责生命周期
|
|
147
|
+
- `src/copaw/app/channels/manager.py` — `ChannelManager` 如何管理 channel 实例的 start/stop
|
|
148
|
+
- `src/copaw/app/_app.py` — lifespan 中如何编排所有组件的初始化顺序
|
|
149
|
+
|
|
150
|
+
### 要解决的问题
|
|
151
|
+
|
|
152
|
+
1. Python SDK 和 Node.js SDK 应该封装到什么程度?是薄封装(只封装协议),还是厚封装(提供完整的 app 框架如 FastAPI 实例)?
|
|
153
|
+
2. SDK 是否应该内置 HTTP 服务器?还是只提供注册/事件客户端,让模块自己选 HTTP 框架?
|
|
154
|
+
3. 如何处理 SDK 版本与框架版本的兼容性?
|
|
155
|
+
4. 二进制模块(Go/Rust)怎么办?是提供静态库还是只维护协议文档?
|
|
156
|
+
|
|
157
|
+
### Kite 相关文档
|
|
158
|
+
|
|
159
|
+
- 已有规划:[Polyglot L49-63](Polyglot运行时与Clawdbot兼容性设计.md)
|
|
160
|
+
- 模块入口协议:[04-模块规范 L67-164](Kite框架设计/04-模块规范.md)
|
|
161
|
+
- 实现规划 SDK 部分:[实现规划 L10-31](实现规划.md)
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## P0-2:module.md Schema 校验
|
|
166
|
+
|
|
167
|
+
### 现状
|
|
168
|
+
|
|
169
|
+
`ModuleScanner` 解析 module.md 的 YAML frontmatter 后直接使用,没有校验必填字段、类型、枚举值、值范围。一个拼写错误(如 `staet: enabled`)不会报错,只会在运行时产生诡异行为。
|
|
170
|
+
|
|
171
|
+
### 需要阅读的源码
|
|
172
|
+
|
|
173
|
+
**Kite — 看「当前解析逻辑有多脆弱」**:
|
|
174
|
+
- `core/launcher/module_scanner.py` — `_parse_frontmatter()` 解析 YAML 后直接赋值给 `ModuleInfo`,无任何校验;`ModuleInfo` dataclass 定义了 12 个字段但没有验证逻辑
|
|
175
|
+
- `core/registry/store.py` — `register_module()` 接收注册 payload 后直接存储,也无 schema 校验
|
|
176
|
+
|
|
177
|
+
**龙虾 — 看「AJV schema 校验机制」**:
|
|
178
|
+
- `src/plugins/schema-validator.ts` — AJV 实例配置、schema 缓存、`validateJsonSchemaValue()` 验证函数
|
|
179
|
+
- `src/plugins/manifest.ts` — 插件清单 `clawdbot.plugin.json` 的加载和验证流程
|
|
180
|
+
- `src/config/zod-schema.ts` — Zod schema 如何定义嵌套配置结构(对比:如果 Kite 用 JSON Schema,这是另一种思路)
|
|
181
|
+
- `src/gateway/protocol/schema/protocol-schemas.ts` — TypeBox 定义 RPC 消息 schema(看它如何用 schema 校验运行时数据)
|
|
182
|
+
|
|
183
|
+
**CoPaw — 看「Pydantic 模型校验模式」**:
|
|
184
|
+
- `src/copaw/config/config.py` — Pydantic `Config` 模型:字段类型、默认值、嵌套模型、可选字段如何定义
|
|
185
|
+
- `src/copaw/config/utils.py` — `load_config()` 如何用 Pydantic 做加载时校验
|
|
186
|
+
- `src/copaw/providers/models.py` — `ProviderDefinition` Pydantic 模型:看更复杂的嵌套 schema 定义
|
|
187
|
+
|
|
188
|
+
### 要解决的问题
|
|
189
|
+
|
|
190
|
+
1. 用什么做校验?Python 侧可选 Pydantic / jsonschema / cerberus;Node.js 侧可选 AJV / Zod。还是统一用 JSON Schema 定义,各语言各自用对应库?
|
|
191
|
+
2. 校验在什么时机执行?扫描时?注册时?两者都要?
|
|
192
|
+
3. 校验失败的策略:跳过该模块继续启动(降级),还是直接报错退出?
|
|
193
|
+
4. 如何处理模块自定义的 metadata 字段——是放任自由还是要求模块声明 schema?
|
|
194
|
+
|
|
195
|
+
### Kite 相关文档
|
|
196
|
+
|
|
197
|
+
- 模块发现:[Launcher L159-281](Launcher启动器文档.md)
|
|
198
|
+
- module.md 字段:[04-模块规范 L25-65](Kite框架设计/04-模块规范.md)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## P0-3:集中配置系统
|
|
203
|
+
|
|
204
|
+
### 现状
|
|
205
|
+
|
|
206
|
+
Kite 的配置散落在三处:环境变量(`KITE_*`)、各模块的 `module.md`、运行时由各模块自行管理。没有一个统一的全局配置文件来控制框架级别的行为(如默认 heartbeat 间隔、TTL 超时、日志级别、启用的模块列表等)。
|
|
207
|
+
|
|
208
|
+
### 需要阅读的源码
|
|
209
|
+
|
|
210
|
+
**Kite — 看「配置散落在哪里」**:
|
|
211
|
+
- `main.py` — 环境变量 `KITE_*` 的默认值设置(KITE_PROJECT/KITE_WORKSPACE/KITE_DATA/KITE_ENV 等)
|
|
212
|
+
- `core/launcher/entry.py` — Launcher 里硬编码的配置值(heartbeat 30s、monitor 1s、ready timeout 等),搜索 `30`、`timeout`、`TTL` 看散落的配置点
|
|
213
|
+
- `core/registry/store.py` — Registry 里硬编码的 TTL 60s、心跳超时等
|
|
214
|
+
- `core/launcher/module_scanner.py` — 模块发现路径配置(`discovery` 字段在 Launcher 自己的 module.md 里)
|
|
215
|
+
|
|
216
|
+
**龙虾 — 看「集中配置全家桶」**:
|
|
217
|
+
- `src/config/zod-schema.ts` — 完整的 Zod schema:所有配置段(agent/channels/gateway/hooks/cron/models 等),看它如何组织大型配置结构
|
|
218
|
+
- `src/config/io.ts` — `createConfigIO()`:JSON5 解析、读写快照、文件路径解析
|
|
219
|
+
- `src/config/validation.ts` — `validateConfigObject()`:配置修复/doctor 逻辑
|
|
220
|
+
- 参考项目根目录下的 `~/.clawdbot/clawdbot.json` 实际配置文件结构(可在代码中搜索 default 值了解结构)
|
|
221
|
+
|
|
222
|
+
**CoPaw — 看「Pydantic 配置 + 热重载」**:
|
|
223
|
+
- `src/copaw/config/config.py` — Pydantic `Config` 根模型:channels / mcp / agents / last_api 等顶级配置段
|
|
224
|
+
- `src/copaw/config/utils.py` — `load_config()` / `save_config()`:JSON ↔ Pydantic 双向转换
|
|
225
|
+
- `src/copaw/config/watcher.py` — `ConfigWatcher`:2s 轮询 mtime + hash,检测变更触发重载
|
|
226
|
+
|
|
227
|
+
### 要解决的问题
|
|
228
|
+
|
|
229
|
+
1. 配置文件格式:YAML(与 module.md 一致)、JSON5(人类友好)、TOML?
|
|
230
|
+
2. 配置文件位置:`KITE_WORKSPACE/kite.yaml`?`KITE_DATA/config.yaml`?
|
|
231
|
+
3. 与环境变量的优先级关系:环境变量 > 配置文件 > 默认值?
|
|
232
|
+
4. 配置的作用域:全局配置 vs 模块级配置 vs 实例级配置,如何分层?
|
|
233
|
+
5. 模块自定义配置放哪里?集中配置的子节点(如 `modules.webchat.port`)?还是模块自己的 `config.yaml`?
|
|
234
|
+
6. 是否需要配置变更事件(`config.changed`)通知各模块?
|
|
235
|
+
|
|
236
|
+
### Kite 相关文档
|
|
237
|
+
|
|
238
|
+
- 当前环境变量设计:[环境变量与运行时目录设计](环境变量与运行时目录设计.md)
|
|
239
|
+
- 目录结构:[06-目录结构](Kite框架设计/06-目录结构.md)
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## P0-4:Agent 推理运行时
|
|
244
|
+
|
|
245
|
+
### 现状
|
|
246
|
+
|
|
247
|
+
Kite 自身定位为"事件驱动多 Agent 运行时",设计文档中有 Agent 概念(02-核心概念 L221-251)和会话生命周期(05-核心流程 L94-127),但框架层面没有提供任何 Agent 推理执行的基础设施——如何调用 LLM、如何执行 ReAct 循环、如何管理工具调用链、如何处理流式输出。目前 Agent 模块需要从零实现全部推理逻辑。
|
|
248
|
+
|
|
249
|
+
### 需要阅读的源码
|
|
250
|
+
|
|
251
|
+
**Kite — 看「当前对 Agent 执行的规划」**:
|
|
252
|
+
- `docs/Kite框架设计/02-核心概念.md` L221-251 — Agent 概念定义:执行单元、类型(conversation/group/post/planner)、单实例多会话异步协程模型
|
|
253
|
+
- `docs/Kite框架设计/03-系统架构.md` L166-181 — Model Service 设计:独立进程提供 LLM 调用能力、支持多 API(OpenAI/Claude/Gemini)、流式输出
|
|
254
|
+
- `docs/Kite框架设计/05-核心流程.md` L74-92 — 工具调用流程:LLM 输出 tool_call → Agent 拦截 → Registry 查询 → 权限校验 → 执行
|
|
255
|
+
- `docs/Kite框架设计/05-核心流程.md` L94-127 — 会话生命周期:事件触发 → Kernel 创建会话 → 启动 Agent → 对话循环 → 会话结束
|
|
256
|
+
|
|
257
|
+
**龙虾 — 看「完整 Agent 执行栈」**(最值得学习):
|
|
258
|
+
- `src/agents/pi-embedded-runner.ts` — Pi Agent 运行时入口:`runEmbeddedPiAgent()` 非阻塞 RPC 执行、session 管理、工具分割
|
|
259
|
+
- `src/agents/clawdbot-tools.ts` — `createClawdbotTools()` 工厂:50+ 参数,注册 sessions/browser/messaging/cron/image 等工具
|
|
260
|
+
- `src/auto-reply/thinking.ts` — 5 级思维模式(off/minimal/low/medium/high/xhigh),按 provider/model 兼容性映射
|
|
261
|
+
- `src/agents/failover-error.ts` — `FailoverError` 类:故障分类(billing/rate_limit/auth/timeout)+ auth profile 轮换实现模型故障转移
|
|
262
|
+
|
|
263
|
+
**CoPaw — 看「ReAct 循环模式」**:
|
|
264
|
+
- `src/copaw/agents/react_agent.py` — `CoPawAgent`(extends `ReActAgent`):最多 50 轮推理循环、内置工具注册、动态 skill 加载、系统命令处理(/compact /new /clear)
|
|
265
|
+
- `src/copaw/agents/model_factory.py` — `create_model_and_formatter()`:按 provider 创建 LLM 实例,支持文件块扩展的 Formatter
|
|
266
|
+
- `src/copaw/app/runner/runner.py` — `AgentRunner`:query_handler 创建 agent → 加载 session → 运行 → 流式回复 → 保存 session
|
|
267
|
+
|
|
268
|
+
### 要解决的问题
|
|
269
|
+
|
|
270
|
+
1. Kite 应该在框架层提供 Agent 执行基础设施,还是完全交给模块自行实现?
|
|
271
|
+
- 方案 A:框架提供 Agent SDK(含 ReAct 循环、工具调度、LLM 调用抽象),模块只需定义 system prompt + 工具集
|
|
272
|
+
- 方案 B:框架只提供 Model Service(LLM 调用抽象),推理循环由各 Agent 模块自行实现
|
|
273
|
+
- 方案 C:保持现状,Agent 模块自带推理逻辑(如引入 AgentScope 或 LangChain 作为依赖)
|
|
274
|
+
2. 工具调用是否应该跨进程?当 Agent 模块调用另一个模块的工具时,经过 Registry 查询 → HTTP 调用的延迟是否可接受?还是需要 RPC 优化(与 P1-3 关联)?
|
|
275
|
+
3. 流式输出如何跨进程传递?LLM → Agent 模块 → Channel 模块,每一跳的流式协议是什么?
|
|
276
|
+
4. 思维模式(thinking level)是否应该作为框架级概念?还是各 Agent 模块自行实现?
|
|
277
|
+
5. 模型故障转移是否应该在 Model Service 层统一处理?还是各 Agent 自行管理 API Key 轮换?
|
|
278
|
+
|
|
279
|
+
### Kite 相关文档
|
|
280
|
+
|
|
281
|
+
- Agent 概念:[02-核心概念 L221-251](Kite框架设计/02-核心概念.md)
|
|
282
|
+
- Model Service:[03-系统架构 L166-181](Kite框架设计/03-系统架构.md)
|
|
283
|
+
- 工具调用流程:[05-核心流程 L74-92](Kite框架设计/05-核心流程.md)
|
|
284
|
+
- 会话生命周期:[05-核心流程 L94-127](Kite框架设计/05-核心流程.md)
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## P0-5:Session 会话管理
|
|
289
|
+
|
|
290
|
+
### 现状
|
|
291
|
+
|
|
292
|
+
Kite 设计文档定义了完整的 Session 数据模型(07-数据模型 L3-23)和生命周期流程(05-核心流程 L94-127),但框架层面没有 Session 管理的实现。两个参考项目都有成熟的 Session 系统——龙虾的 session 隔离(main + per-group + Docker 沙箱)尤其值得学习,因为 Kite 的多进程架构天然适合进程级 session 隔离。
|
|
293
|
+
|
|
294
|
+
### 需要阅读的源码
|
|
295
|
+
|
|
296
|
+
**Kite — 看「已有的 Session 设计」**:
|
|
297
|
+
- `docs/Kite框架设计/02-核心概念.md` L168-220 — Session 概念:session key 规则(`{agent}:peer:{peer_identity}` / `{agent}:group:{group_identity}`)、参与者、方向、来源、状态
|
|
298
|
+
- `docs/Kite框架设计/07-数据模型.md` L3-23 — Session JSON 结构:session_id / session_key / agent_id / peer_id / peer_kind / channel / direction / source / mode / status
|
|
299
|
+
- `docs/Kite框架设计/05-核心流程.md` L94-127 — 会话生命周期:事件触发 → Kernel 创建 → Agent 启动 → 对话循环 → 结束 → 后处理
|
|
300
|
+
|
|
301
|
+
**龙虾 — 看「Session 隔离与沙箱」**(最值得学习):
|
|
302
|
+
- `src/sessions/session-key-utils.ts` — session key 解析:agent / subagent / ACP 三种 key 类型、线程父会话解析、规范化逻辑
|
|
303
|
+
- `src/sessions/model-overrides.ts` — `applyModelOverrideToSessionEntry()`:per-session 的 provider/model 覆盖,支持运行时切换模型
|
|
304
|
+
- `src/sessions/send-policy.ts` — 消息发送策略:per-session 的消息路由和投递配置
|
|
305
|
+
- `src/routing/resolve-route.ts` — `resolveAgentRoute()`:channel/peer → agentId 的路由映射,决定消息进入哪个 session
|
|
306
|
+
|
|
307
|
+
**CoPaw — 看「session 持久化与恢复」**:
|
|
308
|
+
- `src/copaw/app/runner/runner.py` — `AgentRunner`:query_handler 创建 agent 时加载 session state → 运行 → 保存 session state,JSON 文件持久化
|
|
309
|
+
- `src/copaw/agents/react_agent.py` — `CoPawAgent` 的 session 相关逻辑:系统命令 `/new`(新建 session)、`/history`(查看历史)
|
|
310
|
+
|
|
311
|
+
### 要解决的问题
|
|
312
|
+
|
|
313
|
+
1. Session 管理应该在哪个组件中实现?Kernel 模块(设计文档中的规划)?还是作为框架基础设施(如 Registry 的扩展)?
|
|
314
|
+
2. Session state 的持久化方式:文件系统(CoPaw 方式,简单)?SQLite(更适合查询)?通过 Event Hub 广播让各模块自行持久化?
|
|
315
|
+
3. Session 与模块进程的关系:
|
|
316
|
+
- 一个 Agent 模块进程处理多个 session(Kite 设计文档中的方案——协程并发)?
|
|
317
|
+
- 每个 session 启动独立进程(类似龙虾的 Docker 沙箱,利用 Kite 的多进程优势)?
|
|
318
|
+
4. 消息历史的存储:集中存储(所有 session 的消息统一管理)?还是 per-session 文件(`messages.jsonl`,Kite 设计文档中的方案)?
|
|
319
|
+
5. Session key 的设计:Kite 设计文档的 `{agent}:{channel}:peer:{peer}` 与龙虾的 `main` / per-group 模型,哪种更适合 Kite 的多 Agent 场景?
|
|
320
|
+
6. 跨 Channel 的 session 连续性——同一个用户从钉钉切到微信,是否应该延续同一个 session?如果是,session key 中是否不应包含 channel?
|
|
321
|
+
|
|
322
|
+
### Kite 相关文档
|
|
323
|
+
|
|
324
|
+
- Session 概念:[02-核心概念 L168-220](Kite框架设计/02-核心概念.md)
|
|
325
|
+
- Session 数据模型:[07-数据模型 L3-23](Kite框架设计/07-数据模型.md)
|
|
326
|
+
- 会话生命周期:[05-核心流程 L94-127](Kite框架设计/05-核心流程.md)
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## P1-1:模块间权限控制
|
|
331
|
+
|
|
332
|
+
### 现状
|
|
333
|
+
|
|
334
|
+
当前只要持有有效 token,任何模块就能调用 Registry 的所有 API、连接 Event Hub 发布/订阅任何事件、调用任何其他模块的工具。没有"模块 A 能否调用模块 B 的工具 X"这样的访问控制。
|
|
335
|
+
|
|
336
|
+
### 需要阅读的源码
|
|
337
|
+
|
|
338
|
+
**Kite — 看「当前认证只到什么程度」**:
|
|
339
|
+
- `core/registry/store.py` — `verify_token()` 方法:只检查 token 是否存在于 token_map,不检查该 token 对应的模块是否有权限执行请求的操作
|
|
340
|
+
- `core/event_hub/hub.py` — WS 连接认证:调用 Registry `/verify` 验证 token,但不限制订阅/发布的事件范围
|
|
341
|
+
- `core/launcher/entry.py` — `_register_module_tokens()`:所有 module token 同等权力
|
|
342
|
+
|
|
343
|
+
**龙虾 — 看「多层权限模型」**:
|
|
344
|
+
- `src/agents/pi-tools.policy.ts` — DM 策略和工具访问策略的实现逻辑
|
|
345
|
+
- `src/infra/device-pairing.ts` — 设备配对:token 附带 role 和 scopes,不同设备有不同权限
|
|
346
|
+
- `src/gateway/auth.ts` — Gateway 认证:token/password/tailscale 三种方式,`ResolvedGatewayAuth` 结构体含权限信息
|
|
347
|
+
|
|
348
|
+
**CoPaw — 对比参考(无权限模型,但有启用/禁用控制)**:
|
|
349
|
+
- `src/copaw/agents/skills_manager.py` — Skill 的启用/禁用机制:`list_available_skills()` + `sync_skills_to_working_dir()`
|
|
350
|
+
|
|
351
|
+
### 要解决的问题
|
|
352
|
+
|
|
353
|
+
1. 权限控制的粒度:模块级(A 能否调用 B)?工具级(A 能否调用 B.tool_x)?事件级(A 能否订阅 event_y)?
|
|
354
|
+
2. 权限定义在哪里?集中配置(如 `kite.yaml` 的 `permissions` 段)?还是各模块的 `module.md` 声明自己暴露给谁?
|
|
355
|
+
3. Registry 是否要承担权限检查的职责?还是单独一个权限服务?
|
|
356
|
+
4. 如何处理核心模块与扩展模块的权限差异——核心模块是否默认 full access?
|
|
357
|
+
5. 与已有的工具权限体系(五级 switches + check_permission)如何衔接?
|
|
358
|
+
|
|
359
|
+
### Kite 相关文档
|
|
360
|
+
|
|
361
|
+
- 当前认证设计:[注册中心设计 L519-690](注册中心设计.md)
|
|
362
|
+
- 工具权限模型:[02-核心概念 L252-315](Kite框架设计/02-核心概念.md)
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## P1-2:配置热重载
|
|
367
|
+
|
|
368
|
+
### 现状
|
|
369
|
+
|
|
370
|
+
修改任何配置(环境变量、module.md、未来的集中配置文件)都需要重启整个框架。对于一个多进程系统来说,全重启代价高(11 步启动序列,所有模块重新初始化)。
|
|
371
|
+
|
|
372
|
+
### 需要阅读的源码
|
|
373
|
+
|
|
374
|
+
**Kite — 看「当前重启代价」**:
|
|
375
|
+
- `core/launcher/entry.py` — `_async_main()` 的 11 步启动序列,理解全重启的代价
|
|
376
|
+
- 已有设计文档 `docs/模块热更新.md` — 7 步热更新流程(重启单个模块进程),与配置热重载的区别
|
|
377
|
+
|
|
378
|
+
**龙虾 — 看「配置变更事件机制」**:
|
|
379
|
+
- `src/hooks/internal-hooks.ts` — `InternalHookEvent` 定义,包含 config reload 事件的触发机制
|
|
380
|
+
- `src/gateway/server-close.ts` — 优雅关闭中各子系统的停止顺序(理解部分重载需要停哪些、保留哪些)
|
|
381
|
+
|
|
382
|
+
**CoPaw — 看「文件轮询 + 原子替换热重载」**(最值得学习):
|
|
383
|
+
- `src/copaw/config/watcher.py` — `ConfigWatcher` 完整实现:轮询间隔、mtime 检测、hash 比对、变更分段(只重载 channels 段变更)
|
|
384
|
+
- `src/copaw/app/channels/manager.py` — `ChannelManager` 如何响应配置变更:stop 旧 channel → 创建新实例 → start
|
|
385
|
+
- `src/copaw/app/mcp/manager.py` — `MCPClientManager` 热重载:lock-based atomic swap(connect new outside lock → swap inside lock)
|
|
386
|
+
- `src/copaw/app/mcp/watcher.py` — `MCPConfigWatcher`:独立于主 ConfigWatcher,专门监视 MCP 配置段
|
|
387
|
+
|
|
388
|
+
### 要解决的问题
|
|
389
|
+
|
|
390
|
+
1. 哪些配置应该支持热重载?哪些必须重启?(如 token 相关的肯定要重启,日志级别应该能热改)
|
|
391
|
+
2. 变更检测机制:文件轮询(CoPaw 方式)?文件系统 watch(inotify/FSEvents/ReadDirectoryChanges)?API 触发?
|
|
392
|
+
3. 变更通知机制:Event Hub 事件(`config.changed`)?Registry 推送?Launcher 通知?
|
|
393
|
+
4. 模块侧如何响应?强制要求实现 `on_config_changed` 回调?还是各模块自己订阅事件?
|
|
394
|
+
5. 与已有的模块热更新文档的关系——热更新是重启模块进程,热重载是不重启进程更新配置,两者如何协作?
|
|
395
|
+
|
|
396
|
+
### Kite 相关文档
|
|
397
|
+
|
|
398
|
+
- 已有热更新设计:[模块热更新](模块热更新.md)
|
|
399
|
+
- Launcher API(restart 端点):[Launcher L359-480](Launcher启动器文档.md)
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## P1-3:标准化 RPC 协议
|
|
404
|
+
|
|
405
|
+
### 现状
|
|
406
|
+
|
|
407
|
+
模块间的请求-响应通信没有统一协议。每个模块自己定义 REST API(路径、参数、响应格式各异),调用方需要知道对方的具体 API 设计。Event Hub 只处理单向事件广播,不支持请求-响应模式。
|
|
408
|
+
|
|
409
|
+
### 需要阅读的源码
|
|
410
|
+
|
|
411
|
+
**Kite — 看「当前模块间怎么互调」**:
|
|
412
|
+
- `core/registry/store.py` — `lookup()` 和 `get_by_path()` 方法:调用方如何通过 Registry 发现目标模块的 API 端点
|
|
413
|
+
- `core/event_hub/hub.py` — 当前事件协议只有 `event` / `subscribe` / `unsubscribe`,没有 request/response
|
|
414
|
+
- `test_modules/hello_node/entry.js` — 看模块如何通过 HTTP 调用 Registry API(`fetch` + 自定义路径 + 自定义格式)
|
|
415
|
+
|
|
416
|
+
**龙虾 — 看「完整 RPC 协议」**(最值得学习):
|
|
417
|
+
- `src/gateway/protocol/schema/protocol-schemas.ts` — 所有 RPC 方法的 TypeBox schema 定义(50+ 方法),理解统一协议的结构:`{id, method, params} → {id, result|error}`
|
|
418
|
+
- `src/gateway/protocol/schema/error-codes.ts` — 协议级错误码枚举和 `errorShape()` 工厂函数
|
|
419
|
+
- `src/plugins/schema-validator.ts` — AJV 如何在运行时校验每条 RPC 消息
|
|
420
|
+
|
|
421
|
+
**CoPaw — 对比参考(无 RPC,看单进程如何避开这个问题)**:
|
|
422
|
+
- `src/copaw/app/runner/runner.py` — 所有组件在同一进程,直接函数调用,不需要 RPC
|
|
423
|
+
|
|
424
|
+
### 要解决的问题
|
|
425
|
+
|
|
426
|
+
1. 在现有架构上加 RPC,走什么通道?
|
|
427
|
+
- 方案 A:Event Hub 扩展——加 `request`/`response` 消息类型,Hub 负责路由回复
|
|
428
|
+
- 方案 B:独立 RPC 层——新的通信通道(如 gRPC、JSON-RPC over HTTP)
|
|
429
|
+
- 方案 C:保持 HTTP 直调,但统一格式和错误码
|
|
430
|
+
2. 请求路由:调用方是直接知道目标模块地址(通过 Registry 查询),还是通过中间层路由?
|
|
431
|
+
3. 超时和重试策略:框架统一管还是调用方自己管?
|
|
432
|
+
4. 是否需要双向流式 RPC(如 LLM 流式输出)?如果需要,HTTP 不够用,需要 WebSocket 或 SSE。
|
|
433
|
+
5. 与现有 Registry `lookup` → HTTP POST 模式如何兼容/迁移?
|
|
434
|
+
|
|
435
|
+
### Kite 相关文档
|
|
436
|
+
|
|
437
|
+
- 当前工具调用流程:[05-核心流程 L74-92](Kite框架设计/05-核心流程.md)
|
|
438
|
+
- Registry lookup API:[注册中心设计 L153-317](注册中心设计.md)
|
|
439
|
+
- Event Hub 协议:[事件中心设计 L29-95](事件中心设计.md)
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## P1-4:长期记忆系统
|
|
444
|
+
|
|
445
|
+
### 现状
|
|
446
|
+
|
|
447
|
+
Kite 设计文档中没有专门的记忆/上下文管理设计。Agent 模块需要自行处理对话历史的存储、检索、压缩和语义搜索。对于个人助手场景,长期记忆是核心能力——用户期望 Agent 记住之前的对话内容和个人偏好。两个参考项目用了截然不同的方案,都值得借鉴。
|
|
448
|
+
|
|
449
|
+
### 需要阅读的源码
|
|
450
|
+
|
|
451
|
+
**Kite — 看「当前没有记忆基础设施」**:
|
|
452
|
+
- `docs/Kite框架设计/02-核心概念.md` — 搜索"记忆"、"memory"、"上下文":概念层面未定义记忆模型
|
|
453
|
+
- `docs/Kite框架设计/07-数据模型.md` L3-23 — Session 数据模型只有 `summary` 字段,没有完整的记忆结构
|
|
454
|
+
|
|
455
|
+
**龙虾 — 看「向量搜索 + BM25 混合检索」**(最值得学习):
|
|
456
|
+
- `src/memory/manager.ts` — `MemoryIndexManager`:embeddings 生成 + sqlite-vec 向量存储 + BM25 关键词搜索 + 文件同步,支持 OpenAI/Gemini 两种 embedding provider
|
|
457
|
+
- `src/memory/hybrid.ts` — 混合搜索实现:BM25 关键词 + 向量相似度结果合并排序
|
|
458
|
+
|
|
459
|
+
**CoPaw — 看「语义搜索 + token 感知压缩」**:
|
|
460
|
+
- `src/copaw/agents/memory/copaw_memory.py` — `CoPawInMemoryMemory`:扩展 InMemoryMemory,支持 mark 过滤和 summary 前置
|
|
461
|
+
- `src/copaw/agents/memory/memory_manager.py` — 继承 ReMeFs(reme-ai):语义搜索、消息压缩/摘要、token 感知截断、70% 上下文阈值触发自动压缩、保留最近 3 条消息
|
|
462
|
+
- `src/copaw/agents/memory/agent_md_manager.py` — `AgentMdManager`:working/memory 目录 markdown 文件管理,元数据追踪(创建/修改时间)
|
|
463
|
+
|
|
464
|
+
### 要解决的问题
|
|
465
|
+
|
|
466
|
+
1. 记忆应该作为框架基础设施(如独立的 Memory Service 模块),还是作为 Agent SDK 的一部分?
|
|
467
|
+
- 方案 A:独立 Memory Service 模块——提供 embedding + 向量存储 + 检索 API,所有 Agent 共享
|
|
468
|
+
- 方案 B:Agent SDK 内置——每个 Agent 模块自带记忆管理逻辑
|
|
469
|
+
- 方案 C:混合——框架提供 embedding/存储基础设施,Agent SDK 提供上下文管理策略
|
|
470
|
+
2. 存储后端选择:sqlite-vec(龙虾方案,嵌入式)?外部向量数据库(Milvus/Qdrant)?纯文件系统(CoPaw 方案)?
|
|
471
|
+
3. 上下文压缩策略:token 阈值触发自动摘要(CoPaw 方案)?滑动窗口?还是让 Agent 自行管理?
|
|
472
|
+
4. 跨 session 的记忆共享——不同 session 中获取的用户偏好是否应该全局可访问?
|
|
473
|
+
5. 记忆的持久化与隐私——用户能否查看/删除/导出自己的记忆数据?
|
|
474
|
+
|
|
475
|
+
### Kite 相关文档
|
|
476
|
+
|
|
477
|
+
- Session 数据模型:[07-数据模型 L3-23](Kite框架设计/07-数据模型.md)
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## P1-5:Model Provider 抽象层
|
|
482
|
+
|
|
483
|
+
### 现状
|
|
484
|
+
|
|
485
|
+
Kite 设计文档中有 Model Service 的概念(03-系统架构 L166-181),规划了独立进程提供 LLM 调用能力,但没有讨论 Provider 抽象、API Key 管理、模型故障转移、本地模型支持等实现细节。两个参考项目都有成熟的 Provider 系统,设计取舍各有不同。
|
|
486
|
+
|
|
487
|
+
### 需要阅读的源码
|
|
488
|
+
|
|
489
|
+
**Kite — 看「当前 Model Service 的规划」**:
|
|
490
|
+
- `docs/Kite框架设计/03-系统架构.md` L166-181 — Model Service:支持多 LLM API(OpenAI/Claude/Gemini)、function calling、流式输出、配置管理
|
|
491
|
+
|
|
492
|
+
**龙虾 — 看「Auth Profile 轮换 + 故障转移」**(最值得学习):
|
|
493
|
+
- `src/agents/failover-error.ts` — `FailoverError` 类:故障 reason 分类(billing/rate_limit/auth/timeout/server_error)、HTTP 状态码映射、决定是否触发 failover
|
|
494
|
+
- `src/agents/auth-profiles/session-override.ts` — auth profile 选择逻辑:last-good 优先、round-robin 降级、cooldown 机制(失败后冷却),session 级 provider 覆盖
|
|
495
|
+
- `src/providers/github-copilot-auth.ts` — GitHub Copilot OAuth 集成(看非标准 provider 如何接入)
|
|
496
|
+
- `src/providers/qwen-portal-oauth.ts` — Qwen OAuth 集成
|
|
497
|
+
|
|
498
|
+
**CoPaw — 看「Provider Registry + 本地模型」**:
|
|
499
|
+
- `src/copaw/providers/registry.py` — `PROVIDERS` 字典 + `_CHAT_MODEL_MAP`:6 个内置 provider(modelscope/dashscope/aliyun/ollama/llamacpp/mlx),自定义 provider 验证规则
|
|
500
|
+
- `src/copaw/providers/models.py` — Pydantic 模型:`ProviderDefinition`(id/name/default_base_url/api_key_prefix/models)、`ResolvedModelConfig`(运行时配置)、`CustomProviderData`(用户自定义 provider)
|
|
501
|
+
- `src/copaw/providers/store.py` — `get_active_llm_config()` / `set_active_llm()`:活跃模型切换、per-provider 模型增删、config.json 持久化
|
|
502
|
+
|
|
503
|
+
### 要解决的问题
|
|
504
|
+
|
|
505
|
+
1. Model Service 是独立模块还是框架内置?
|
|
506
|
+
- 独立模块:灵活,可替换,但增加进程间通信开销(每次 LLM 调用走 HTTP)
|
|
507
|
+
- 框架内置:低延迟,但不符合 Kite 的"万物皆模块"哲学
|
|
508
|
+
2. Provider 抽象的接口设计:参考 OpenAI 兼容接口(CoPaw 方案)?还是定义自己的抽象层(龙虾方案)?
|
|
509
|
+
3. API Key 管理:集中配置(config 文件)?环境变量?还是 per-provider 独立管理?
|
|
510
|
+
4. 故障转移策略:是否在 Model Service 层统一处理(透明 failover)?还是返回错误让 Agent 自行决定?
|
|
511
|
+
5. 本地模型支持(llama.cpp / MLX / Ollama):是否作为特殊 provider 集成?还是作为独立模块?
|
|
512
|
+
6. 流式输出的跨进程传递:Model Service → Agent 模块的流式通道用什么协议(SSE / WebSocket / chunked HTTP)?
|
|
513
|
+
|
|
514
|
+
### Kite 相关文档
|
|
515
|
+
|
|
516
|
+
- Model Service:[03-系统架构 L166-181](Kite框架设计/03-系统架构.md)
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## P1-6:消息路由与 Channel 抽象
|
|
521
|
+
|
|
522
|
+
### 现状
|
|
523
|
+
|
|
524
|
+
Kite 设计文档定义了 Channel 概念(02-核心概念 L128-135)——消息传输媒介,提供事件和工具——但没有讨论消息内容的标准化(不同 channel 的消息格式各异)、消息如何路由到正确的 Agent/Session、以及多 Channel 消息的统一处理。这对计划中的 clawdbot-bridge 模块尤其关键。
|
|
525
|
+
|
|
526
|
+
### 需要阅读的源码
|
|
527
|
+
|
|
528
|
+
**Kite — 看「当前 Channel 的规划」**:
|
|
529
|
+
- `docs/Kite框架设计/02-核心概念.md` L128-135 — Channel 概念:消息传输媒介、提供事件(消息到达、连接变化)和工具(发送消息、建立连接)
|
|
530
|
+
- `docs/Kite框架设计/08-扩展性.md` — 如何添加新 Channel
|
|
531
|
+
|
|
532
|
+
**龙虾 — 看「消息路由 + 统一消息格式」**(最值得学习):
|
|
533
|
+
- `src/routing/resolve-route.ts` — `resolveAgentRoute()`:channel + peer → agentId 映射,消息路由到正确的 Agent
|
|
534
|
+
- `src/routing/bindings.ts` — `listBindings()`:channel-account-agent 三方绑定,决定消息流向
|
|
535
|
+
- `src/channels/` — 共享 channel 逻辑:routing/allowlists/内容标准化
|
|
536
|
+
|
|
537
|
+
**CoPaw — 看「BaseChannel + content_parts 标准化」**:
|
|
538
|
+
- `src/copaw/app/channels/base.py` — `BaseChannel` ABC:native payload → `content_parts`(`TextContent` / `ImageContent` / `FileContent`)标准化,时间 debounce,消息合并
|
|
539
|
+
- `src/copaw/app/channels/registry.py` — Channel 注册表:内置 + `~/.copaw/custom_channels/` 自动发现
|
|
540
|
+
- `src/copaw/app/channels/manager.py` — `ChannelManager`:per-channel 消息队列、异步 consumer loop、热重载
|
|
541
|
+
|
|
542
|
+
### 要解决的问题
|
|
543
|
+
|
|
544
|
+
1. 消息内容标准化:是否定义统一的消息格式(如 CoPaw 的 `content_parts`)?还是让 Channel 模块和 Agent 模块自行协商?
|
|
545
|
+
2. 消息路由规则:Channel → Agent 的映射如何定义?
|
|
546
|
+
- 固定映射(配置文件中绑定 channel → agent)?
|
|
547
|
+
- 动态路由(如龙虾的 route resolver,按 channel + peer 动态解析)?
|
|
548
|
+
- 事件驱动(Channel 发 `channel.message.received` 事件,由 Kernel 路由)?
|
|
549
|
+
3. clawdbot-bridge 的消息协议:bridge 模块收到 10+ channel 的消息后,如何转换为 Kite 标准事件?事件 payload 的 schema 是什么?
|
|
550
|
+
4. 多媒体消息的处理:图片/音频/视频/文件在不同 channel 中的表示差异很大,如何统一?
|
|
551
|
+
5. 消息回复的路由:Agent 回复后,如何知道应该通过哪个 Channel 发送?如果用户从钉钉发消息但已切换到 QQ,回复发到哪里?
|
|
552
|
+
|
|
553
|
+
### Kite 相关文档
|
|
554
|
+
|
|
555
|
+
- Channel 概念:[02-核心概念 L128-135](Kite框架设计/02-核心概念.md)
|
|
556
|
+
- 扩展新 Channel:[08-扩展性](Kite框架设计/08-扩展性.md)
|
|
557
|
+
- Clawdbot 兼容性设计:[Polyglot运行时与Clawdbot兼容性设计](Polyglot运行时与Clawdbot兼容性设计.md)
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## P1-7:Daemon 后台常驻
|
|
562
|
+
|
|
563
|
+
### 现状
|
|
564
|
+
|
|
565
|
+
Kite 目前只能前台运行(`python main.py` 或 `kite` 命令),关闭终端后框架停止。对于个人助手场景,"always-on"是基本需求——用户希望 Agent 在后台持续运行,开机自启,不需要手动管理进程。
|
|
566
|
+
|
|
567
|
+
### 需要阅读的源码
|
|
568
|
+
|
|
569
|
+
**Kite — 看「当前的进程管理能力」**:
|
|
570
|
+
- `core/launcher/entry.py` — Launcher 的 monitor 循环:1s 检查子进程存活、heartbeat 续约——这些机制已存在,但 Launcher 自己没有 daemon 化
|
|
571
|
+
- `core/launcher/process_manager.py` — `cleanup_leftovers()`:遗留进程清理——说明框架已考虑异常退出的情况
|
|
572
|
+
|
|
573
|
+
**龙虾 — 看「完整的 daemon 支持」**(最值得学习):
|
|
574
|
+
- `src/daemon/service.ts` — 统一 daemon 抽象:`installDaemon()` / `uninstallDaemon()` / `restartDaemon()` 跨平台接口
|
|
575
|
+
- `src/daemon/systemd.ts` — Linux:systemd unit 文件生成、`systemctl enable/start/stop/restart`
|
|
576
|
+
- `src/daemon/launchd.ts` — macOS:launchd plist 生成和管理
|
|
577
|
+
- `src/wizard/onboarding.ts` — onboarding 流程中 `--install-daemon` 选项,首次使用即可设置自启
|
|
578
|
+
|
|
579
|
+
**CoPaw — 对比参考(无 daemon,但有 Docker 部署)**:
|
|
580
|
+
- `deploy/Dockerfile` — 多阶段 Docker 构建作为替代方案
|
|
581
|
+
- `deploy/config/supervisord.conf.template` — supervisord 进程管理(容器内)
|
|
582
|
+
|
|
583
|
+
### 要解决的问题
|
|
584
|
+
|
|
585
|
+
1. Daemon 化的实现方式:
|
|
586
|
+
- 方案 A:systemd (Linux) + launchd (macOS) + Windows Service(龙虾方案,原生集成)
|
|
587
|
+
- 方案 B:跨平台进程管理器(如 PM2 for Node.js、Supervisor for Python)
|
|
588
|
+
- 方案 C:Docker 容器化部署(CoPaw 方案,但需要用户安装 Docker)
|
|
589
|
+
2. daemon 与 Launcher 的关系:daemon 管理的是 Launcher 进程本身,Launcher 再管理所有模块进程?还是 daemon 直接管理所有进程?
|
|
590
|
+
3. 日志管理:daemon 模式下日志写到哪里?`journalctl`(systemd)?自定义日志文件?与 P2-4 结构化日志的关系?
|
|
591
|
+
4. CLI 集成:`kite install-daemon` / `kite uninstall-daemon` / `kite daemon status`
|
|
592
|
+
5. 自动更新:daemon 模式下如何优雅地更新框架版本?stop → update → start 的自动化?
|
|
593
|
+
|
|
594
|
+
### Kite 相关文档
|
|
595
|
+
|
|
596
|
+
- 当前 CLI:[npm发布与CLI使用指南](npm发布与CLI使用指南.md)
|
|
597
|
+
- 进程管理:Launcher 进程监控已有基础,需扩展到 Launcher 自身的 daemon 化
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
## P2-1:扩展点分类与注册语义
|
|
602
|
+
|
|
603
|
+
### 现状
|
|
604
|
+
|
|
605
|
+
Kite 的 Registry 注册 payload 是一个扁平的字典,tools / hooks / events_publish / events_subscribe 都塞在同一个对象里。模块注册时没有明确的"我是 Channel"、"我是 Agent"、"我是 Service"的语义区分——虽然 `module.md` 有 `type` 字段(infrastructure/channel/agent/service/kernel),但 Registry 不利用这个信息做差异化处理。
|
|
606
|
+
|
|
607
|
+
### 需要阅读的源码
|
|
608
|
+
|
|
609
|
+
**Kite — 看「当前注册是什么结构」**:
|
|
610
|
+
- `core/registry/store.py` — `register_module()` 接收的 payload 结构:扁平字典,tools/hooks/events 混在一起
|
|
611
|
+
- `core/launcher/module_scanner.py` — `ModuleInfo` 的 `type` 字段(infrastructure/channel/agent/service/kernel)在扫描后如何使用(几乎没使用)
|
|
612
|
+
|
|
613
|
+
**龙虾 — 看「8 种注册类型如何实现」**(最值得学习):
|
|
614
|
+
- `src/plugins/types.ts` — `ClawdbotPluginApi` 的 8 个 register 方法,每种类型有独立的参数签名和语义
|
|
615
|
+
- `src/plugins/registry.ts` — 不同类型的注册信息如何分别存储和管理
|
|
616
|
+
- `src/plugins/loader.ts` — 插件加载后如何按类型分发到不同的注册路径
|
|
617
|
+
|
|
618
|
+
**CoPaw — 看「三种注册表各自独立」**:
|
|
619
|
+
- `src/copaw/app/channels/registry.py` — Channel 注册表:`get_channel_registry()` 返回 `dict[str, type[BaseChannel]]`
|
|
620
|
+
- `src/copaw/providers/registry.py` — Provider 注册表:`PROVIDERS` 字典 + 自定义 provider 动态加载
|
|
621
|
+
- `src/copaw/agents/skills_manager.py` — Skill 发现:扫描目录 + 解析 SKILL.md frontmatter
|
|
622
|
+
|
|
623
|
+
### 要解决的问题
|
|
624
|
+
|
|
625
|
+
1. 是否需要在 Registry 层面区分模块类型?还是保持当前的"万物皆模块"哲学,只在约定层面区分?
|
|
626
|
+
2. 如果区分,哪些类型需要特殊处理?Channel 需要消息路由,Agent 需要会话管理,Service 只需健康检查——这些差异是否应该在框架层体现?
|
|
627
|
+
3. 注册 payload 是否需要重构?当前的扁平字典 vs 按类型分区(`{channel: {...}, tools: {...}, hooks: {...}}`)?
|
|
628
|
+
4. 是否引入"能力声明"机制——模块声明自己提供哪些能力(`capabilities: [messaging, tool_hosting, llm_serving]`),让其他模块按能力发现而不是按名称发现?
|
|
629
|
+
|
|
630
|
+
### Kite 相关文档
|
|
631
|
+
|
|
632
|
+
- 当前注册 payload:[注册中心设计 L53-151](注册中心设计.md)
|
|
633
|
+
- 模块类型定义:[04-模块规范 L25-65](Kite框架设计/04-模块规范.md)
|
|
634
|
+
- 扩展性说明:[08-扩展性](Kite框架设计/08-扩展性.md)
|
|
635
|
+
|
|
636
|
+
---
|
|
637
|
+
|
|
638
|
+
## P2-2:统一错误码体系
|
|
639
|
+
|
|
640
|
+
### 现状
|
|
641
|
+
|
|
642
|
+
Kite 各模块的错误处理各自为政:Registry 返回 HTTP 状态码 + 简单 `detail` 字符串,Event Hub 返回 `{type: "error", message: "..."}`,Launcher 在控制台打印日志。没有统一的错误码、错误分类、错误格式。
|
|
643
|
+
|
|
644
|
+
### 需要阅读的源码
|
|
645
|
+
|
|
646
|
+
**Kite — 看「当前错误格式有多碎片化」**:
|
|
647
|
+
- `core/registry/store.py` — 搜索 `HTTPException` 或 `raise`:看 Registry 的错误返回格式
|
|
648
|
+
- `core/event_hub/hub.py` — 搜索 `"error"`:看 Event Hub 的 WS 错误消息格式
|
|
649
|
+
- `core/launcher/entry.py` — 搜索 `print` 或 `log`:看 Launcher 的日志格式
|
|
650
|
+
|
|
651
|
+
**龙虾 — 看「统一错误码体系」**(最值得学习):
|
|
652
|
+
- `src/gateway/protocol/schema/error-codes.ts` — `ErrorCodes` 枚举定义:每个错误码有 code 字符串 + 描述;`errorShape()` 工厂函数生成统一的 `{code, message, data?}` 结构
|
|
653
|
+
- `src/gateway/protocol/schema/protocol-schemas.ts` — RPC 响应 schema 中错误部分的统一定义
|
|
654
|
+
|
|
655
|
+
**CoPaw — 看「错误转储模式」**:
|
|
656
|
+
- `src/copaw/app/runner/query_error_dump.py` — `write_query_error_dump()`:错误发生时保存完整上下文(traceback + request + agent state)到 temp JSON 文件,方便调试
|
|
657
|
+
|
|
658
|
+
### 要解决的问题
|
|
659
|
+
|
|
660
|
+
1. 错误码的作用范围:仅框架内部通信?还是也暴露给最终用户(如 Web UI 展示)?
|
|
661
|
+
2. 错误码的编号方案:数字码(如 HTTP 1xx-5xx)?字符串码(如 `MODULE_NOT_FOUND`)?带前缀的命名空间码(如 `REGISTRY.AUTH_FAILED`)?
|
|
662
|
+
3. 错误响应的统一格式:`{code, message, data?, module?, timestamp?}`?
|
|
663
|
+
4. 是否需要错误链(cause chain)——当模块 A 调用模块 B 失败时,A 返回的错误是否应包含 B 的原始错误?
|
|
664
|
+
5. 日志格式是否也需要统一?结构化日志(JSON)vs 人类可读日志?
|
|
665
|
+
|
|
666
|
+
### Kite 相关文档
|
|
667
|
+
|
|
668
|
+
- 当前 Registry 错误处理:[注册中心设计 L153-317](注册中心设计.md)
|
|
669
|
+
- Event Hub 错误格式:[事件中心设计 L29-95](事件中心设计.md)
|
|
670
|
+
- Launcher 错误处理:[Launcher L551-564](Launcher启动器文档.md)
|
|
671
|
+
|
|
672
|
+
---
|
|
673
|
+
|
|
674
|
+
## P2-3:CLI 运维工具增强
|
|
675
|
+
|
|
676
|
+
### 现状
|
|
677
|
+
|
|
678
|
+
Kite 的 CLI 目前只有 `python main.py`(启动)和 `kite`(npm 全局命令,功能等同)。没有运维子命令来查看系统状态、管理模块、查看日志。运维操作只能通过 Launcher 的 HTTP API 手动调用。
|
|
679
|
+
|
|
680
|
+
### 需要阅读的源码
|
|
681
|
+
|
|
682
|
+
**Kite — 看「当前 CLI 和 API 能力」**:
|
|
683
|
+
- `cli.js` — 当前 npm CLI 实现:只是启动 `python main.py` 的薄包装
|
|
684
|
+
- `core/launcher/entry.py` — Launcher API 端点定义(搜索 `@app.get` / `@app.post`):GET /launcher/modules、POST .../start、POST .../stop、POST .../restart、POST /launcher/rescan、PUT .../state
|
|
685
|
+
|
|
686
|
+
**龙虾 — 看「丰富的 CLI 子命令」**(最值得学习):
|
|
687
|
+
- `src/cli/program/build-program.ts` — Commander.js 程序构建:看它如何组织子命令
|
|
688
|
+
- `src/cli/program/command-registry.ts` — 命令注册机制:`registerProgramCommands()` 如何分发到各 register.*.ts
|
|
689
|
+
- `src/commands/health.ts` — `health` 子命令实现:多探针健康检查,了解 CLI 如何调用 Gateway API
|
|
690
|
+
|
|
691
|
+
**CoPaw — 看「Click CLI 组织方式」**:
|
|
692
|
+
- `src/copaw/cli/main.py` — Click 主入口:lazy-loaded 命令分组,看它如何组织 10+ 子命令
|
|
693
|
+
- 各子命令文件在 `src/copaw/cli/` 下(app_cmd.py / channels_cmd.py / config_cmd.py / cron_cmd.py / env_cmd.py / init_cmd.py / providers_cmd.py / skills_cmd.py 等)
|
|
694
|
+
|
|
695
|
+
### 要解决的问题
|
|
696
|
+
|
|
697
|
+
1. 最小可用的 CLI 子命令集:
|
|
698
|
+
- `kite start` — 启动(已有)
|
|
699
|
+
- `kite status` — 显示所有模块状态(调 Launcher API)
|
|
700
|
+
- `kite logs <module>` — 查看模块日志(需要日志持久化)
|
|
701
|
+
- `kite stop <module>` / `kite restart <module>` — 管理模块
|
|
702
|
+
- `kite config get/set` — 读写配置(需要先有集中配置系统)
|
|
703
|
+
- 还需要什么?
|
|
704
|
+
2. CLI 的实现语言:Python(argparse/click)?Node.js(commander)?还是两套都要(跟 SDK 对应)?
|
|
705
|
+
3. CLI 与 Launcher API 的关系:CLI 是 API 的薄客户端?还是直接操作文件/进程?
|
|
706
|
+
4. 是否需要交互式模式(如龙虾的 `chat` 子命令)?
|
|
707
|
+
5. 是否需要 `kite init`(初始化工作区)和 `kite doctor`(诊断修复)?
|
|
708
|
+
|
|
709
|
+
### Kite 相关文档
|
|
710
|
+
|
|
711
|
+
- 当前 CLI:[npm发布与CLI使用指南](npm发布与CLI使用指南.md)
|
|
712
|
+
- Launcher API:[Launcher L359-480](Launcher启动器文档.md)
|
|
713
|
+
|
|
714
|
+
---
|
|
715
|
+
|
|
716
|
+
## P2-4:结构化日志系统
|
|
717
|
+
|
|
718
|
+
### 现状
|
|
719
|
+
|
|
720
|
+
Kite 各模块通过 stdout 输出日志,Launcher 在启动阶段捕获 stdout 消息(包含结构化 `{"kite": ...}` 和普通日志),但 `module.ready` 后就关闭 stdio。此后模块的日志无处可去——没有统一的日志收集、格式化、持久化、查询机制。多进程架构下这个问题比单进程更严重。
|
|
721
|
+
|
|
722
|
+
### 需要阅读的源码
|
|
723
|
+
|
|
724
|
+
**Kite — 看「当前日志怎么处理」**:
|
|
725
|
+
- `core/launcher/process_manager.py` — `_handle_stdout()` / `close_stdio()`:stdout 回调在 module.ready 后关闭,之后日志丢失
|
|
726
|
+
- `core/launcher/entry.py` — Launcher 自己用 `print()` 输出日志,无结构化格式
|
|
727
|
+
|
|
728
|
+
**龙虾 — 看「完整的结构化日志」**(最值得学习):
|
|
729
|
+
- `src/logging/logger.ts` — tslog 集成:subsystem 命名空间(如 `gateway.auth`、`channel.telegram`)、文件轮转(24h)、外部 transport attachment
|
|
730
|
+
- `src/logging/config.ts` — 日志配置从环境变量/config 文件解析,支持按 subsystem 设置不同级别
|
|
731
|
+
- `src/logging/console.ts` — Console 输出样式化和捕获
|
|
732
|
+
|
|
733
|
+
**CoPaw — 看「简单但实用的日志」**:
|
|
734
|
+
- `src/copaw/utils/logging.py` — `ColorFormatter`:ANSI 着色、Windows 兼容(ctypes 启用 VT processing)、`LOG_NAMESPACE = "copaw"` 统一前缀
|
|
735
|
+
|
|
736
|
+
### 要解决的问题
|
|
737
|
+
|
|
738
|
+
1. 多进程日志汇聚方案:
|
|
739
|
+
- 方案 A:各模块写本地日志文件,Launcher/CLI 聚合查询
|
|
740
|
+
- 方案 B:通过 Event Hub 广播日志事件(`log.*`),由专门的日志收集模块持久化
|
|
741
|
+
- 方案 C:保持 stdout,但 module.ready 后不关闭 stdio(需改变 Launcher 的 stdio 生命周期管理)
|
|
742
|
+
2. 日志格式:JSON 结构化(机器友好)?人类可读(开发调试友好)?两者兼顾(如 tslog 的双输出)?
|
|
743
|
+
3. 日志级别的动态调整:是否支持运行时通过 API 或配置修改某个模块的日志级别?(与 P1-2 配置热重载关联)
|
|
744
|
+
4. 日志持久化:轮转策略(按时间/大小)?保留期限?是否需要日志搜索/查询能力?
|
|
745
|
+
5. 与 CLI 的集成:`kite logs <module>` 的实现——实时 tail(如 `docker logs -f`)还是历史查询?
|
|
746
|
+
|
|
747
|
+
### Kite 相关文档
|
|
748
|
+
|
|
749
|
+
- 当前 stdio 管理:Launcher process_manager 的 stdout 回调机制
|
|
750
|
+
- Launcher 日志:[Launcher L551-564](Launcher启动器文档.md)
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
## P2-5:测试策略
|
|
755
|
+
|
|
756
|
+
### 现状
|
|
757
|
+
|
|
758
|
+
Kite 目前只有两个手动验证模块(`test_modules/hello` 和 `test_modules/hello_node`),没有自动化测试框架、单元测试、集成测试或 CI 流水线。多进程架构的测试比单进程更复杂——需要测试模块发现、进程启动、Registry 注册、Event Hub 通信等跨进程交互。
|
|
759
|
+
|
|
760
|
+
### 需要阅读的源码
|
|
761
|
+
|
|
762
|
+
**Kite — 看「当前的验证手段」**:
|
|
763
|
+
- `test_modules/hello/entry.py` — 最小 Python 模块:只验证 boot_info 读取和环境变量
|
|
764
|
+
- `test_modules/hello_node/entry.js` — 完整 Node.js 模块:验证完整的 8 步协议(stdin → HTTP → Registry → Event Hub → module.ready)
|
|
765
|
+
|
|
766
|
+
**龙虾 — 看「完整的测试体系」**(最值得学习):
|
|
767
|
+
- `vitest.config.ts` — 测试配置:120s 超时(Windows 180s)、forks pool(进程隔离)、max workers 3-16、coverage 70% 阈值
|
|
768
|
+
- 测试文件组织:`*.test.ts`(单元测试,colocated)、`*.e2e.test.ts`(端到端)、`*.live.test.ts`(真实 API)
|
|
769
|
+
- 覆盖率排除:CLI 入口 / daemon / macOS 特定 / channel 集成 / TUI / Gateway 等难以自动化测试的部分
|
|
770
|
+
- `package.json` 测试命令:`test` / `test:coverage` / `test:e2e` / `test:live` / `test:docker:*`
|
|
771
|
+
|
|
772
|
+
**CoPaw — 对比参考(测试较少但有配置)**:
|
|
773
|
+
- `pyproject.toml` 测试配置:pytest + pytest-asyncio(asyncio_mode = "auto")、`slow` marker、pytest-cov
|
|
774
|
+
|
|
775
|
+
### 要解决的问题
|
|
776
|
+
|
|
777
|
+
1. 测试框架选择:Python 侧用 pytest(与现有生态一致)?Node.js 测试模块用 vitest/jest?
|
|
778
|
+
2. 多进程测试策略:
|
|
779
|
+
- 单元测试:各模块独立测试(mock Registry/Event Hub 接口)
|
|
780
|
+
- 集成测试:启动真实的 Launcher + Registry + Event Hub,测试模块间通信
|
|
781
|
+
- 端到端测试:完整启动框架,验证从消息到回复的全链路
|
|
782
|
+
3. 测试中的 Registry/Event Hub 如何处理?
|
|
783
|
+
- 方案 A:提供 mock/stub 版本(轻量,快速)
|
|
784
|
+
- 方案 B:每个测试启动真实的 Registry + Event Hub 实例(真实,但慢)
|
|
785
|
+
4. 覆盖率目标:核心模块(Registry/Event Hub/Launcher)要求高覆盖率,扩展模块可以较低?
|
|
786
|
+
5. CI 流水线:GitHub Actions 配置,何时运行哪些测试(push 跑单元,PR 跑集成,release 跑端到端)?
|
|
787
|
+
|
|
788
|
+
### Kite 相关文档
|
|
789
|
+
|
|
790
|
+
- 测试模块:`test_modules/hello/` 和 `test_modules/hello_node/`(当前仅有的测试资产)
|
|
791
|
+
|
|
792
|
+
---
|
|
793
|
+
|
|
794
|
+
## P2-6:Web UI 管理控制台
|
|
795
|
+
|
|
796
|
+
### 现状
|
|
797
|
+
|
|
798
|
+
Kite 的运维操作只能通过 Launcher HTTP API 或未来的 CLI 命令。没有可视化界面来查看模块状态、管理配置、监控事件、查看日志。对于多模块系统,Web UI 比 CLI 更直观——能同时展示所有模块的状态、实时事件流、依赖关系图等。
|
|
799
|
+
|
|
800
|
+
### 需要阅读的源码
|
|
801
|
+
|
|
802
|
+
**Kite — 看「已有的 API 端点」**:
|
|
803
|
+
- `core/launcher/entry.py` — Launcher API:GET /launcher/modules、POST .../start|stop|restart、POST /launcher/rescan、PUT .../state——这些 API 可以直接作为 Web UI 的后端
|
|
804
|
+
|
|
805
|
+
**龙虾 — 看「Lit Web Components 控制台」**:
|
|
806
|
+
- `ui/src/main.ts` — Web UI 入口:Lit 初始化、样式加载
|
|
807
|
+
- `ui/src/ui/app.ts` — 主组件:Gateway WebSocket 连接、chat/cron/config/sessions/channels/device pairing 管理面板
|
|
808
|
+
|
|
809
|
+
**CoPaw — 看「React + Ant Design 全功能控制台」**(最值得学习):
|
|
810
|
+
- `console/src/layouts/MainLayout/index.tsx` — Ant Design Layout:侧边栏导航、11 个页面路由(chat/channels/sessions/cron-jobs/skills/mcp/workspace/agents/models/environments/agent-config)
|
|
811
|
+
- `console/src/api/index.ts` — 聚合 12 个 API 模块:channel/cron/chat/session/env/provider/skill/agent/workspace/localModel/ollamaModel/mcp
|
|
812
|
+
- `console/src/pages/Chat/index.tsx` — Chat 页面:`AgentScopeRuntimeWebUI` 集成、实时对话
|
|
813
|
+
|
|
814
|
+
### 要解决的问题
|
|
815
|
+
|
|
816
|
+
1. 技术选型:
|
|
817
|
+
- Lit Web Components(龙虾方案,轻量,无构建依赖)?
|
|
818
|
+
- React + Ant Design(CoPaw 方案,生态丰富,开发快)?
|
|
819
|
+
- 纯 HTML + HTMX(最简单,无前端构建)?
|
|
820
|
+
2. 部署方式:Web UI 由哪个模块 serve?Launcher 直接 serve 静态文件?还是独立的 Web UI 模块?
|
|
821
|
+
3. 最小可用功能集:
|
|
822
|
+
- 模块列表 + 三层状态展示(config/desired/actual)
|
|
823
|
+
- 模块 start/stop/restart 操作
|
|
824
|
+
- 实时事件流(连接 Event Hub WebSocket)
|
|
825
|
+
- 日志查看(与 P2-4 关联)
|
|
826
|
+
4. 是否需要 Chat UI?如果 Kite 承载了 Agent 模块,是否需要内置聊天界面?还是交给前端应用?
|
|
827
|
+
5. 认证保护:Web UI 是否需要登录?localhost 访问是否可以免认证?
|
|
828
|
+
|
|
829
|
+
### Kite 相关文档
|
|
830
|
+
|
|
831
|
+
- Launcher API(Web UI 后端基础):[Launcher L359-480](Launcher启动器文档.md)
|
|
832
|
+
|
|
833
|
+
---
|
|
834
|
+
|
|
835
|
+
## P2-7:初始化引导向导
|
|
836
|
+
|
|
837
|
+
### 现状
|
|
838
|
+
|
|
839
|
+
Kite 的 `cli.js` 首次运行时会自动安装框架到 `~/.kite/versions/`,但没有交互式初始化向导来引导用户完成工作区配置、模块启用、API Key 设置等首次使用步骤。用户需要手动了解环境变量和模块结构才能开始使用。
|
|
840
|
+
|
|
841
|
+
### 需要阅读的源码
|
|
842
|
+
|
|
843
|
+
**Kite — 看「当前的首次运行流程」**:
|
|
844
|
+
- `cli.js` — npm CLI:首次运行复制框架到 `~/.kite/versions/{version}/`,创建 modules/data/workspace/repo 目录,但无交互式配置
|
|
845
|
+
|
|
846
|
+
**龙虾 — 看「完整的 onboarding 向导」**(最值得学习):
|
|
847
|
+
- `src/wizard/onboarding.ts` — onboarding 流程编排:auth 选择 → model 配置 → channel 设置 → skills → hooks → config 最终确认
|
|
848
|
+
- `src/wizard/session.ts` — wizard 状态管理:跨步骤的配置收集和验证
|
|
849
|
+
|
|
850
|
+
**CoPaw — 看「交互式 init 命令」**:
|
|
851
|
+
- `src/copaw/cli/init_cmd.py` — `copaw init`:`configure_channels_interactive()` / `configure_env_interactive()` / `configure_providers_interactive()` / `configure_skills_interactive()`,包含安全警告说明 CoPaw 的能力范围
|
|
852
|
+
|
|
853
|
+
### 要解决的问题
|
|
854
|
+
|
|
855
|
+
1. 向导应该覆盖哪些配置步骤?
|
|
856
|
+
- 工作区目录确认
|
|
857
|
+
- 模块发现路径配置
|
|
858
|
+
- API Key 设置(LLM provider)
|
|
859
|
+
- 默认 Agent 和 Channel 选择
|
|
860
|
+
- daemon 安装(与 P1-7 关联)
|
|
861
|
+
2. 实现方式:交互式 CLI(questionary/inquirer)?Web 页面(启动临时 HTTP 服务)?
|
|
862
|
+
3. `--defaults` 非交互模式:是否支持跳过所有提示,使用默认值快速启动?
|
|
863
|
+
4. 配置验证(doctor):`kite doctor` 命令检查环境、依赖、配置完整性(与 P2-3 CLI 关联)
|
|
864
|
+
5. 向导完成后是否自动启动框架?
|
|
865
|
+
|
|
866
|
+
### Kite 相关文档
|
|
867
|
+
|
|
868
|
+
- 当前 CLI:[npm发布与CLI使用指南](npm发布与CLI使用指南.md)
|
|
869
|
+
- 环境变量:[环境变量与运行时目录设计](环境变量与运行时目录设计.md)
|
|
870
|
+
|
|
871
|
+
---
|
|
872
|
+
|
|
873
|
+
## P2-8:Cron 定时任务
|
|
874
|
+
|
|
875
|
+
### 现状
|
|
876
|
+
|
|
877
|
+
Kite 设计文档中有 Task 概念(02-核心概念 L317-333)和 Task System(03-系统架构 L182-207),但更偏向"任务队列"而非"定时调度"。个人助手场景中定时任务是核心能力——每日摘要、定时提醒、周期性数据收集等都依赖 cron 调度。
|
|
878
|
+
|
|
879
|
+
### 需要阅读的源码
|
|
880
|
+
|
|
881
|
+
**Kite — 看「当前 Task System 的设计」**:
|
|
882
|
+
- `docs/Kite框架设计/02-核心概念.md` L317-333 — Task 概念:task_id / type / goal / status / priority / parent_task_id / created_by / assigned_to
|
|
883
|
+
- `docs/Kite框架设计/03-系统架构.md` L182-207 — Task System:独立进程、注册任务接口(create/query/claim/submit/delete)
|
|
884
|
+
- `docs/Kite框架设计/05-核心流程.md` L129-155 — 任务执行流程:创建 → 排队 → Kernel 启动 planner Agent → 执行 → 完成
|
|
885
|
+
|
|
886
|
+
**龙虾 — 看「Cron 服务 + 隔离执行」**:
|
|
887
|
+
- `src/cron/service.ts` — cron 调度服务:add/update/remove/list/run API、内存状态 + 持久化、cron 表达式解析
|
|
888
|
+
- `src/cron/isolated-agent.ts` — cron 任务隔离 agent 调用:delivery target 解析(发送到哪个 channel)、heartbeat 防超时
|
|
889
|
+
|
|
890
|
+
**CoPaw — 看「APScheduler 集成」**:
|
|
891
|
+
- `src/copaw/app/crons/manager.py` — APScheduler `AsyncIOScheduler`:CronTrigger(cron 表达式)+ IntervalTrigger(间隔触发),JSON 文件持久化 jobs
|
|
892
|
+
|
|
893
|
+
### 要解决的问题
|
|
894
|
+
|
|
895
|
+
1. 定时调度是 Task System 的一部分(trigger 类型扩展 `scheduled`),还是独立的 Cron 模块?
|
|
896
|
+
- Task System 已规划了 `created_by` 字段,scheduled trigger 可以是一种 task 创建来源
|
|
897
|
+
- 独立 Cron 模块更简单,职责清晰
|
|
898
|
+
2. cron 表达式解析:用成熟库(Python APScheduler / Node.js node-cron)?还是自行实现?
|
|
899
|
+
3. 任务持久化:重启后 cron 任务是否自动恢复?持久化到哪里(集中配置文件 / 独立 jobs.json / SQLite)?
|
|
900
|
+
4. 任务执行上下文:cron 触发时,是否需要创建新 session?执行结果发送到哪个 channel?
|
|
901
|
+
5. 错误处理:cron 任务执行失败时的重试策略和通知机制?
|
|
902
|
+
|
|
903
|
+
### Kite 相关文档
|
|
904
|
+
|
|
905
|
+
- Task 概念:[02-核心概念 L317-333](Kite框架设计/02-核心概念.md)
|
|
906
|
+
- Task System:[03-系统架构 L182-207](Kite框架设计/03-系统架构.md)
|
|
907
|
+
- 任务执行流程:[05-核心流程 L129-155](Kite框架设计/05-核心流程.md)
|
|
908
|
+
|
|
909
|
+
---
|
|
910
|
+
|
|
911
|
+
## 附录:Kite 现有优势(对标确认)
|
|
912
|
+
|
|
913
|
+
以下是 Kite 在对比中表现出的设计优势,应在后续改进中**保持**而非削弱:
|
|
914
|
+
|
|
915
|
+
| 优势 | 说明 | 对比 |
|
|
916
|
+
|------|------|------|
|
|
917
|
+
| **多进程隔离** | 每模块独立进程,崩溃不扩散 | 龙虾/CoPaw 都是单进程,一个插件/channel 出问题可能拖垮全局 |
|
|
918
|
+
| **stdin token 传递** | token 不出现在环境变量、命令行、文件系统 | 龙虾 token 持久化在 device-auth.json;CoPaw 无认证 |
|
|
919
|
+
| **Token 不持久化** | 每次启动重新生成,泄露窗口极小 | 龙虾的 device token 长期有效 |
|
|
920
|
+
| **NATS 风格事件匹配** | `*` 和 `>` 通配符,灵活的订阅模式 | 龙虾只有具名事件;CoPaw 无事件总线 |
|
|
921
|
+
| **事件去重 + Outbox** | 1h 滑动窗口去重 + 断连持久化重发 | 龙虾/CoPaw 均无此机制 |
|
|
922
|
+
| **遗留进程清理** | processes.json + PID/cmdline 双重验证后清理 | 龙虾/CoPaw 均无此机制 |
|
|
923
|
+
| **跨平台进程管理** | Win/Linux/Mac 各有策略且多级降级 | 龙虾依赖 Node.js 抽象;CoPaw 无子进程 |
|
|
924
|
+
| **语言无关协议** | JSON + HTTP + WebSocket,任何语言都能接入 | 龙虾绑定 Node.js 生态;CoPaw 绑定 Python |
|
|
925
|
+
| **模块生命周期事件** | starting → ready → started → stopped 完整链 | 龙虾有但较简单;CoPaw 只有 start/stop |
|
|
926
|
+
| **三层状态模型** | config × desired × actual,状态可追溯 | 龙虾/CoPaw 只有 enabled/disabled |
|
|
927
|
+
| **多语言模块混编** | Python + Node.js + Binary(Go/Rust)同时运行,IPC 协议语言无关 | 龙虾只能用 TypeScript;CoPaw 只能用 Python |
|
|
928
|
+
| **版本共存** | `~/.kite/versions/{version}/` 多版本并存,`kite --use 1.0.6` 按需切换 | 龙虾/CoPaw 只能安装一个版本 |
|
|
929
|
+
| **依赖拓扑排序** | 模块按 `depends_on` 声明自动计算启动顺序 | 龙虾/CoPaw 均无模块依赖管理 |
|
|
930
|
+
|
|
931
|
+
---
|
|
932
|
+
|
|
933
|
+
## 讨论索引
|
|
934
|
+
|
|
935
|
+
逐条探讨时,建议按以下顺序(依赖关系从上到下):
|
|
936
|
+
|
|
937
|
+
```
|
|
938
|
+
P0-3 集中配置系统 ← 很多后续改进的基础
|
|
939
|
+
↓
|
|
940
|
+
P0-2 module.md Schema 校验 ← 模块加载的安全网
|
|
941
|
+
↓
|
|
942
|
+
P0-1 Module SDK ← 依赖配置系统和校验来定义 SDK 接口
|
|
943
|
+
↓
|
|
944
|
+
P0-4 Agent 推理运行时 ← 依赖 SDK 定义 Agent 执行模型
|
|
945
|
+
↓
|
|
946
|
+
P0-5 Session 会话管理 ← 依赖 Agent 运行时和配置系统
|
|
947
|
+
↓
|
|
948
|
+
P1-2 配置热重载 ← 依赖集中配置系统
|
|
949
|
+
↓
|
|
950
|
+
P1-1 模块间权限控制 ← 依赖 Registry 和配置系统
|
|
951
|
+
↓
|
|
952
|
+
P1-3 标准化 RPC 协议 ← 可能影响 SDK 设计
|
|
953
|
+
↓
|
|
954
|
+
P1-4 长期记忆系统 ← 依赖 Agent 运行时和 Session 管理
|
|
955
|
+
↓
|
|
956
|
+
P1-5 Model Provider 抽象层 ← 依赖配置系统和 RPC 协议
|
|
957
|
+
↓
|
|
958
|
+
P1-6 消息路由与 Channel 抽象 ← 依赖 SDK、RPC、Session 管理
|
|
959
|
+
↓
|
|
960
|
+
P1-7 Daemon 后台常驻 ← 依赖 CLI 和配置系统
|
|
961
|
+
↓
|
|
962
|
+
P2-1 扩展点分类 ← 依赖 RPC 和 Registry 改进
|
|
963
|
+
↓
|
|
964
|
+
P2-2 统一错误码 ← 贯穿所有通信层
|
|
965
|
+
↓
|
|
966
|
+
P2-3 CLI 运维工具 ← 依赖 API 和配置系统完善
|
|
967
|
+
↓
|
|
968
|
+
P2-4 结构化日志系统 ← 依赖进程管理和配置系统
|
|
969
|
+
↓
|
|
970
|
+
P2-5 测试策略 ← 依赖 SDK 和核心模块稳定
|
|
971
|
+
↓
|
|
972
|
+
P2-6 Web UI 管理控制台 ← 依赖 API 和日志系统
|
|
973
|
+
↓
|
|
974
|
+
P2-7 初始化引导向导 ← 依赖 CLI 和配置系统
|
|
975
|
+
↓
|
|
976
|
+
P2-8 Cron 定时任务 ← 依赖 Agent 运行时和 Session 管理
|
|
977
|
+
```
|