doer-agent 0.1.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/README.md +153 -0
- package/dist/agent.js +1380 -0
- package/dist/apply-patch.js +260 -0
- package/dist/cli.js +2 -0
- package/dist/codex-cli.js +66 -0
- package/dist/playwright-mcp-call-cli.js +2 -0
- package/dist/playwright-mcp-call.js +103 -0
- package/dist/playwright-mcp-daemon.js +175 -0
- package/package.json +39 -0
- package/runtime/bin/apply_patch +5 -0
- package/runtime/bin/doer-mcp-proxy +39 -0
- package/runtime/bin/git-askpass.sh +6 -0
- package/runtime/bin/playwright-mcp-proxy-launcher.sh +15 -0
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# doer-agent
|
|
2
|
+
|
|
3
|
+
`agent/`는 doer의 리버스 폴링 에이전트를 위한 독립 실행 디렉토리입니다.
|
|
4
|
+
|
|
5
|
+
## 준비
|
|
6
|
+
|
|
7
|
+
- doer 서버가 실행 중이어야 합니다. (기본: `http://localhost:2020`)
|
|
8
|
+
- 아래 명령은 `agent/` 디렉토리 기준입니다.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 에이전트 실행 (고정 시크릿 + 리버스 폴링)
|
|
15
|
+
|
|
16
|
+
1. 로그인 세션에서 고정 시크릿 발급:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -X POST 'http://localhost:2020/api/users/<userId>/agent/secret' \
|
|
20
|
+
-H 'Content-Type: application/json' \
|
|
21
|
+
--cookie 'doer_session=<session-cookie>' \
|
|
22
|
+
-d '{"name":"my-laptop"}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
응답 예시:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"agent": { "id": "agent_...", "name": "my-laptop" },
|
|
30
|
+
"agentSecret": "<SECRET>"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
2. 에이전트 실행:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run start -- --server http://localhost:2020 --user-id <userId> --agent-secret <SECRET>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
환경변수 fallback도 지원합니다. CLI 인자가 있으면 그 값이 우선합니다.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
DOER_AGENT_SERVER=http://localhost:2020 DOER_AGENT_USER_ID=<userId> DOER_AGENT_SECRET=<SECRET> WORKSPACE=/absolute/path/to/workspace npm run start
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
3. 원격 Codex 실행 전송:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl -X POST 'http://localhost:2020/api/users/<userId>/agent/codex-tasks' \
|
|
51
|
+
-H 'Content-Type: application/json' \
|
|
52
|
+
--cookie 'doer_session=<session-cookie>' \
|
|
53
|
+
-d '{"agentId":"agent_...","prompt":"현재 작업 디렉토리와 파일 목록을 요약해줘"}'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Docker로 기본 실행
|
|
57
|
+
|
|
58
|
+
기본 실행은 퍼블릭 이미지 `cranix/doer-agent:latest`를 직접 사용합니다.
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
docker run --rm -it \
|
|
62
|
+
-v "${PWD}:/workspace" \
|
|
63
|
+
cranix/doer-agent:latest \
|
|
64
|
+
--server http://<doer-host>:2020 \
|
|
65
|
+
--user-id <userId> \
|
|
66
|
+
--agent-secret <SECRET>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
PowerShell:
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
docker run --rm -it `
|
|
73
|
+
-v "${PWD}:/workspace" `
|
|
74
|
+
cranix/doer-agent:latest `
|
|
75
|
+
--server http://<doer-host>:2020 `
|
|
76
|
+
--user-id <userId> `
|
|
77
|
+
--agent-secret <SECRET>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- 다른 이미지를 쓰려면 `cranix/doer-agent:latest` 부분만 원하는 태그로 바꾸면 됩니다.
|
|
81
|
+
- 기본 실행은 Docker socket을 마운트하지 않습니다.
|
|
82
|
+
- 따라서 컨테이너 내부의 중첩 `docker` 사용은 기본 실행 범위에 포함되지 않습니다.
|
|
83
|
+
|
|
84
|
+
## Agent 이미지 빌드/퍼블리시
|
|
85
|
+
|
|
86
|
+
배포용 agent 이미지는 `agent/` 디렉토리에서 `build`와 `publish` 스크립트로 분리해 사용합니다. 두 스크립트 모두 `.` 컨텍스트와 `./Dockerfile`을 기본값으로 사용하며, 기본 이미지 리포지토리는 `cranix/doer-agent`입니다.
|
|
87
|
+
|
|
88
|
+
로컬 빌드(load):
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
./scripts/build.sh
|
|
92
|
+
./scripts/build.sh --tag v1.2.3 --also-latest
|
|
93
|
+
./scripts/build.sh --image docker.io/example/doer-agent --platform linux/amd64
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
레지스트리 퍼블리시(push):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
./scripts/publish.sh
|
|
100
|
+
./scripts/publish.sh --tag v1.2.3
|
|
101
|
+
./scripts/publish.sh --image docker.io/example/doer-agent --tag v1.2.3
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`publish.sh`는 태그 기반 퍼블리시 시 `:<tag>`와 `:latest`를 함께 push합니다.
|
|
105
|
+
|
|
106
|
+
퍼블리시한 이미지는 직접 `docker run`으로 지정해 사용합니다.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
docker run --rm -it \
|
|
110
|
+
-v "${PWD}:/workspace" \
|
|
111
|
+
ghcr.io/example/doer-agent:v1.2.3 \
|
|
112
|
+
--server http://<doer-host>:2020 \
|
|
113
|
+
--user-id <userId> \
|
|
114
|
+
--agent-secret <SECRET>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Docker Compose로 개발 실행
|
|
118
|
+
|
|
119
|
+
개발 실행은 `agent/docker-compose.dev.yml` 기준으로 합니다. 이 파일은 로컬 이미지 `doer-agent:latest`를 빌드하고, `/workspace`와 `/var/run/docker.sock`를 함께 마운트합니다.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
export DOER_AGENT_SERVER=http://<doer-host>:2020
|
|
123
|
+
export DOER_AGENT_USER_ID=<userId>
|
|
124
|
+
export DOER_AGENT_SECRET=<SECRET>
|
|
125
|
+
# 선택: 다른 작업 디렉토리를 마운트하려면 지정
|
|
126
|
+
# export DOER_AGENT_WORKSPACE=/absolute/path/to/workspace
|
|
127
|
+
|
|
128
|
+
docker compose -f docker-compose.dev.yml up --build agent-dev
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
백그라운드 실행:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
docker compose -f docker-compose.dev.yml up --build -d agent-dev
|
|
135
|
+
docker compose -f docker-compose.dev.yml logs -f agent-dev
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
정리:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
docker compose -f docker-compose.dev.yml down
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- compose 파일은 `agent/` 디렉토리에서 실행하는 기준입니다.
|
|
145
|
+
- `DOER_AGENT_SERVER`, `DOER_AGENT_USER_ID`, `DOER_AGENT_SECRET`는 필수입니다.
|
|
146
|
+
- `DOER_AGENT_WORKSPACE`를 지정하지 않으면 기본값으로 저장소 루트(`..`)가 `/workspace`에 마운트됩니다.
|
|
147
|
+
|
|
148
|
+
## Windows 권장 사항
|
|
149
|
+
|
|
150
|
+
- Windows에서는 Docker Desktop의 `Linux containers` 모드가 필요합니다.
|
|
151
|
+
- 로컬 개발 환경은 Docker Desktop의 WSL2 백엔드를 권장합니다.
|
|
152
|
+
- Windows 네이티브 PowerShell보다 WSL2 셸에서 직접 `docker compose`를 실행하는 쪽이 더 직접적일 수 있습니다.
|
|
153
|
+
- PowerShell에서 `/var/run/docker.sock` 마운트 가능 여부는 Docker Desktop 설정과 실행 환경에 따라 다릅니다.
|