"๋ค์ ๋จ๊ณ ์งํ" โ CEO ์์จ ๊ฒฐ์ โ hermes ๊ฒฉ์ฐจ ๋งคํธ๋ฆญ์ค ์์กด ๊ฐ์ฅ ํฐ ํญ๋ชฉ (OpenAI ํธํ API server) ์ฒ๋ฆฌ.
GET https://ceo.star365.site/v1/models (Bearer ์ธ์ฆ)POST https://ceo.star365.site/v1/chat/completions (Bearer ์ธ์ฆ, rate-limit 30/min)medical-lead / legal-lead / mlm-lead / commerce-leadmedia-lead / infra-lead / customer-lead / trading-lead| DC | ๊ฒฐ๊ณผ |
|---|---|
| G1 Bearer ๋๋ฝ โ 401 | โ |
| G2 /v1/models 8 ๋ชจ๋ธ ์ถ๋ ฅ | โ |
| G3 /v1/chat/completions infra-lead 11.7์ด ํ๊ตญ์ด ์๋ต | โ |
| G4 ์๋ชป๋ model โ 404 | โ |
| G5 cost_events ๋ก๊น (biller='openai-bridge') | โ |
| ์ธ๋ถ HTTPS commerce-lead E2E | โ 10.9์ด ์๋ต, ํ ํฐ/๋น์ฉ ์ ํ |
/opt/star365-ceo/server.mjs (+150 LOC) ๋ฐฑ์
.bak-openai-bridge-20260507requireBridgeKey ๋ฏธ๋ค์จ์ด (Bearer ๊ฒ์ฆ)bridgeRateLimit (30/min)GET /v1/models (DB์ 8 agent slug โ OpenAI ๋ชจ๋ธ ํ์)POST /v1/chat/completions (์ง์๋ณ system prompt + xAI ํธ์ถ + cost_events ๋ก๊น
)agents.metadata.slug 8๊ฑด ์ถ๊ฐ + partial unique index uq_agents_slug/etc/star365-worker.env์ OPENAI_BRIDGE_KEY (sk-paperclip-... ํ์)| ํญ๋ชฉ | ์ํ |
|---|---|
| OSV malware check | โ Phase 2 |
| ์์ฐ์ด cron UI | โ Phase 3 |
| Discord ๋ฉํฐ์ฑ๋ | โ Phase 4 |
| GitHub webhook | โ Phase 5 |
| Subagent ๊ฒฉ๋ฆฌ | โ Phase 5 |
| OSV install hook | โ Phase 5 |
| OpenAI ํธํ API server | โ Phase 6 |
| Skills Hub agentskills.io | ๐ข ๋ณด๋ฅ (์์ ๊ฐ์น, /learn ์ถฉ๋ถ) |
curl -X POST https://ceo.star365.site/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "commerce-lead",
"messages": [{"role": "user", "content": "๋งค์ถ ํฅ์ 3๊ฐ์ง ๋ฐฉ๋ฒ"}],
"max_tokens": 200
}'
OpenAI Python/Node SDK ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ:
from openai import OpenAI
client = OpenAI(base_url="https://ceo.star365.site/v1", api_key="sk-paperclip-...")
resp = client.chat.completions.create(
model="infra-lead",
messages=[{"role": "user", "content": "5์๋ฒ ๋ชจ๋ํฐ๋ง ํต์ฌ ์งํ"}]
)