05/Documentation
Durable agent (실험적 기능)
휴대폰에 자체 durable agent를 표시합니다. 빠른 시작 가이드, collie durable attach 및 sources.json, 세 가지 동사, 토큰, Collie가 보관하는 파일 및 버전을 다룹니다
실험적 기능입니다. 와이어 프로토콜, SDK, 본 페이지는 향후 마이너 릴리스에서 변경되거나 해당 기능이 제거될 수 있습니다. 현재는 Collie 자체 예제만 이 와이어 프로토콜을 사용합니다. 종료에는 기능 유지 여부를 결정하는 기준이 설명되어 있습니다. 지속성 에이전트를 연결하지 않으면 Collie는 이전과 동일하게 표시되고 작동합니다.
Pi Durable이나 해당 와이어 프로토콜을 지원하는 프로그램으로 지속성 에이전트를 빌드한 경우 Collie를 통해 스마트폰에서 확인할 수 있습니다. UI 코드 없이도 승인 프롬프트, 기록, 채팅 뷰가 제공됩니다.
durable agent는 세션이 비롯될 수 있는 한 곳이며, 해당 에이전트의 각 대화는 하나의 세션입니다. 용어는 용어집에 정리되어 있습니다. Collie는 모델 키를 보유하지 않습니다. durable agent는 자체 API 키나 ChatGPT 로그인을 사용하며, Anthropic 구독은 서드파티 하네스를 통해 사용할 수 없습니다.
빠른 시작
열 줄짜리 durable agent, collie durable attach 하나, 그리고 휴대폰의 질문 카드 하나입니다.
이 머신에서 Collie 1.22.0 이상이 실행 중이어야 하며 휴대폰이 페어링되어 있어야 합니다 (설치).
durable agent는 Linux 또는 macOS에서 Node 22.19 이상 또는 Bun 1.4 이상으로 실행됩니다. durable agent의 폴더에 SDK를 설치하십시오:
npm install @colliepwa/durable-sdk@experimental
# or
bun add @colliepwa/durable-sdk@experimental패키지는 npm dist-tag experimental로 게시되며, latest로는 게시되지 않습니다. 또한 ADR 0104의 종료 방식을 따릅니다. 즉, durable wire가 제거되면 패키지가 지원 중단됩니다 (ADR 0105).
SDK의 Pi Durable 진입점은 Pi Durable 1.1.0 및 1.2.0에서 테스트되었습니다. Node 22.19는 Pi Durable 1.2.0의 최소 버전입니다.
이 durable agent를 hello.mjs에 저장하십시오. 열 줄짜리 코드입니다:
import { openCollie } from "@colliepwa/durable-sdk";
const socket = process.env.COLLIE_DURABLE_SOCKET ?? `${process.env.XDG_RUNTIME_DIR}/hello/app.sock`;
const collie = await openCollie({ socket, hostName: "hello", caps: { asks: true } });
const pane = collie.workspace("hello", { title: "Hello" }).tab("main", { title: "Questions" }).pane("deploy", { title: "Deploy", harness: "hello" });
collie.ready();
console.log(`listening ${collie.address}`);
const options = [{ id: "yes", label: "Yes" }, { id: "no", label: "No" }];
const answer = await pane.ask({ kind: "choice", toolCallId: "deploy-1", itemId: "deploy-1", title: "Deploy to staging?", options });
console.log(`answer: ${answer.optionIds[0]}`);
await collie.close();node hello.mjs 또는 bun hello.mjs 명령으로 실행하십시오. listening /run/user/1000/hello/app.sock을 출력하고 대기합니다. 동일한 durable agent가 Collie의 복제본에서는 examples/durable-member/hello.ts입니다.
Node에서는 먼저 한 줄을 더 출력합니다. Node는 durable agent의 소켓에 누가 연결하는지 읽을 수 없으므로, 현재 사용자의 모든 프로세스가 질문에 응답할 수 있습니다. Linux의 Bun은 이를 읽을 수 있으며, durable agent 자체나 durable agent가 시작한 프로세스의 응답을 거부합니다.
macOS에서는 Node로 실행하십시오. macOS의 Bun에는 callerCheck: "off"이 필요하지만, 이 durable agent는 이를 설정하지 않습니다. macOS에는 XDG_RUNTIME_DIR이 없으므로, 먼저 COLLIE_DURABLE_SOCKET을 절대 경로로 설정하십시오.
두 번째 터미널에서 이를 Collie에 연결한 다음, Collie가 새 항목을 읽을 수 있도록 재시작하십시오:
collie durable attach hello --socket /run/user/1000/hello/app.sock
collie restartdurable agent가 출력한 경로를 사용하십시오. 동일한 단계에서 재시작하려면 첫 번째 명령에 --restart을 추가하십시오. --restart 명령은 Collie 브리지를 재시작합니다. 몇 초 안에 휴대폰이 다시 연결되며, 터미널 세션은 계속 실행됩니다.
휴대폰에서 Collie를 엽니다. Durable agents 섹션에 Experimental 배지와 하나의 질문이 대기 중인 행인 hello이 표시됩니다. 행을 탭하십시오. durable agent의 대화 목록이 열리고, 여기서 Deploy 대화가 "Deploy to staging?"과 함께 대기합니다. 대화를 열고 Yes 또는 No를 탭하십시오. durable agent가 답변을 출력하고 종료됩니다.
자신만의 durable agent를 작성하려면 durable SDK 및 durable wire 문서를 읽으십시오.
durable agent 연결
각 durable agent는 sources.json의 한 항목이며, collie durable attach 명령이 이를 작성합니다.
collie durable attach desk --socket /run/user/1000/desk/app.sock
export EDGE_TOKEN=your-32-byte-random-token-here
collie durable attach edge --url https://edge.example.com --token-env EDGE_TOKEN
collie restartWindows에서는 HTTPS 형태만 사용할 수 있습니다. 프라이빗 소켓에는 Unix 사용자 ID가 필요하므로 attach --socket은 종료 코드 2와 함께 거부되며 --url 및 --token-env을 사용하도록 안내합니다.
sources.json은 .env 옆의 구성 폴더에 위치합니다. Herdr가 관리하는 설치 환경에서는 Herdr 플러그인 구성 폴더(~/.config/herdr/plugins/config/herdr.collie/)이고, 그렇지 않은 경우 ~/.config/collie/입니다. attach 명령은 작성한 경로를 출력합니다. 위의 두 명령은 다음 파일을 작성합니다:
[
{ "name": "desk", "kind": "durable", "socket": "/run/user/1000/desk/app.sock" },
{
"name": "edge",
"kind": "durable",
"url": "https://edge.example.com",
"token": "your-32-byte-random-token-here"
}
]| 필드 | 포함된 내용 |
|---|---|
name | 휴대폰에 표시되는 durable agent의 이름이자 로그 폴더의 이름입니다. 1~32자이며, 소문자, 숫자, 하이픈으로 구성되고 문자로 시작하거나 숫자로 시작해야 합니다. 파일 내에서 고유해야 합니다 |
kind | durable, 현재 유일한 종류 |
socket | 이 머신에 있는 durable agent의 프라이빗 Unix 소켓 절대 경로입니다. url과 함께 사용할 수 없습니다 |
url | TLS 뒤에 배포한 durable agent의 주소입니다. socket과 함께 사용할 수 없으며, 항상 token과 함께 사용해야 합니다 |
token | Collie가 url에 전송하는 베어러 토큰입니다. url(토큰)과 함께만 사용해야 합니다 |
브릿지는 시작할 때 파일을 읽으므로, 항목은 재시작 후에 적용됩니다. 터미널은 durable agent와 나란히 이전과 동일하게 보이고 작동합니다.
Collie는 파일 검사를 엄격하게 수행합니다. 조용히 건너뛴 durable agent는 절대 나타나지 않기 때문입니다.
- 테이블에 정의되지 않은 필드가 있으면 브릿지가 중지됩니다. 잘못된
kind, 규칙을 어긴 이름, 중복된 이름,socket와url이 둘 다 있거나 둘 다 없는 경우, 또는token가 없는url의 경우에도 마찬가지입니다. - 잘못된 파일이 있으면 시작 시 브릿지가 한 줄을 출력하고 중지됩니다. 해당 줄은
[bridge] FATAL:로 시작하며 항목과 필드 이름을 지정합니다.collie logs가 이를 표시합니다.attach및detach역시 읽을 수 없는 파일을 덮어쓰지 않으므로, 오타로 인해 다른 항목을 잃지 않습니다. - 파일은
0600모드로 유지됩니다.attach이(가) 해당 방식으로 파일을 작성합니다. 파일 권한이 더 넓게 설정되어 있으면, 브릿지는 시작 시 권한을 제한하고 로그에 이를 기록합니다. - 이름은 터미널 세션의 이름과 같을 수 없습니다. 대부분의 설치 환경에서는
default이며, durable 전용 인스턴스에서는default이(가) 자체 durable agent의 이름입니다. 브릿지는 시작 시 중지되고 해당 항목 이름을 표시합니다. - durable agent는 Herdr 세션보다 이름에 대한 우선권을 갖습니다. Herdr 세션의 이름이 durable agent의 이름과 같으면 전화기에는 durable agent가 표시되고 해당 Herdr 세션은 숨겨지며, 로그에 한 번 기록됩니다.
attach은(는) 아래 규칙에 따라 소켓 경로, URL, 토큰을 확인합니다. 직접 작성한 항목은 브릿지가 durable agent에 연결될 때 확인됩니다. 규칙을 위반하면 durable agent에 연결할 수 없음으로 표시되고 그 이유가 나타납니다.
durable agent에 연결하는 두 가지 방법
| 프라이빗 소켓 | 토큰이 포함된 https | |
|---|---|---|
| durable agent가 실행되는 위치 | 이 머신, 사용자 계정 | 배포한 모든 위치 |
| 외부 접근 차단 방식 | 소켓은 사용자 소유이며 모드는 0600입니다 | 토큰, 그리고 오직 토큰만 |
| 사용자의 휴대폰 역할을 할 수 있는 주체 | 해당 사용자의 모든 프로세스 | 토큰을 가진 모든 사용자 |
| Collie의 요청 빈도 | 휴대폰이 확인 중일 때는 1초마다, 그 외에는 3초마다 | 휴대폰이 확인 중일 때는 2초마다, 그 외에는 10초마다 |
소켓 전송은 Linux 및 macOS용입니다. Windows에서는 URL과 토큰을 사용하십시오. 소켓 경로는 절대 경로여야 하며 최대 103바이트여야 합니다. /tmp이 아닌 $XDG_RUNTIME_DIR 아래에 두십시오. Linux의 Collie 서비스는 비공개 /tmp 환경에서 실행됩니다.
소켓에는 토큰이 전달되지 않으므로 Collie는 전체 경로가 비공개인 경우에만 소켓에 연결합니다. 소켓은 본인 소유여야 하며 그룹이나 기타 권한이 없어야 합니다. 소켓 폴더는 0700 모드의 본인 소유여야 합니다. 경로의 어떤 부분도 심볼릭 링크가 아니어야 하며, /tmp과 같은 스티키 폴더를 제외하고는 상위 폴더를 그룹이나 기타 사용자가 쓸 수 없어야 합니다. SDK는 소켓 폴더가 없으면 0700 모드로 폴더를 생성합니다.
URL은 https://로 시작해야 합니다. 유일한 예외는 같은 머신에 있는 durable agent를 위한 포트가 포함된 http://127.0.0.1:<port> 또는 http://localhost:<port>입니다. Collie는 다른 http:// 주소를 거부합니다. 토큰이 암호화되지 않은 채 네트워크를 통과하기 때문입니다.
주의. https 환경에서는 토큰이 유일한 관문입니다. 토큰을 가진 사람은 누구나 모든 대화를 읽고 모든 질문에 답할 수 있으며, 호스트는 텍스트를 볼 수 있습니다. 이 방식으로 접근하는 durable agent는 Allow와 Deny만 제공해야 하며, 항상 허용을 제공해서는 안 됩니다.
durable agent 보안은(는) durable agent가 수행할 수 있는 작업과 Collie가 기록하는 내용을 지정합니다.
https를 통한 모든 폴링은 호스트가 요금을 청구할 수 있는 요청이며, "변경 사항 없음" 응답도 포함됩니다. 전화기가 열려 있지 않으면 유휴 폴링이 10초마다 실행되므로 Collie는 하루에 8,640번 요청합니다. 호스트 요금제에서 이를 허용하는지 확인하십시오.
URL 뒤의 durable agent는 Collie 와이어를 제공하고 bearer 토큰을 확인해야 합니다. 기본 Pi Durable 데모는 둘 다 수행하지 않으므로 Collie가 그대로 연결할 수 없습니다.
Collie는 호스팅된 durable agent를 폴링합니다. 전화기가 보고 있는 동안에는 2초마다, 그렇지 않으면 10초마다 요청합니다. 각 폴링은 최대 절전 모드의 Durable Object를 깨우므로, Collie가 보고 있는 동안 호스팅된 객체는 깨어 있는 상태를 유지합니다. 와이어에는 WebSocket이 없으므로 Durable Objects의 최대 절전 모드 및 WebSocket 기능은 여기서 도움이 되지 않습니다.
Cloudflare 예제는 보류 상태이며 릴리스의 일부가 아닙니다. experiments/durable-member-cloudflare/에 있습니다.
세 가지 동사
attach, detach, list은(는) sources.json을(를) 변경하거나 읽으며, 요청하지 않는 한 아무것도 재시작하지 않습니다.
collie durable attach <name> --socket <path> [--restart]
collie durable attach <name> --url <url> --token-env <VAR> [--restart]
collie durable detach <name> [--restart]
collie durable list| 동사 | 플래그 | 출력 내용 | 종료 코드 |
|---|---|---|---|
attach <name> | --socket <path>, 또는 --token-env <VAR>와 함께 --url <url> 사용. --restart. 플래그 값은 다음 단어로 지정하거나 = 뒤에 지정합니다. | added <name> in <path>, 또는 이미 존재하는 이름인 경우 updated <name> in <path> 사용. 그 다음 restart to apply: collie restart 및 휴대폰에서 열 URL이 출력됩니다. | 0 기록됨. 2 사용법 오류, 또는 규칙을 위반한 경로, URL, 토큰인 경우. 1 파일을 읽을 수 없는 경우. --restart 사용 시, 재시작 종료 코드 |
detach <name> | --restart | removed <name> from <path>, 그 다음 restart to apply: collie restart | 0 제거됨. 2 사용법 오류인 경우. 3 해당 이름의 durable agent가 없는 경우. 1 파일을 읽을 수 없는 경우. --restart 사용 시, 재시작 종료 코드 |
list | 없음 | durable agent당 한 줄: 이름, socket <path> 또는 url <url> (token set), 그리고 상태. 파일이 비어 있거나 없는 경우 no durable agents attached (<path>) | 0. 1 파일을 읽을 수 없는 경우 |
동사 없이 또는 알 수 없는 동사와 함께 collie durable 실행 시, 사용법을 출력하고 2 코드로 종료합니다. --restart 사용 시, attach 및 detach 명령은 collie restart와 동일하게 재시작을 실행합니다.
list 명령은 실행 중인 bridge에 각 항목을 조회하고 최대 3초 동안 대기합니다.
| 상태 | 의미 |
|---|---|
loaded | 실행 중인 bridge가 이 항목을 로드했습니다. durable agent의 응답이 아니라 bridge의 보고이므로 durable agent에 여전히 연결할 수 없을 수도 있습니다. collie doctor 명령은 durable agent에 직접 조회합니다. |
not loaded (restart to apply) | 연결하기 전에 bridge가 시작되었습니다. collie restart 명령을 실행하십시오. |
refused (<status>) | bridge가 상태 대신 이 HTTP 상태 코드로 응답했습니다. |
bridge not answering | 3초 이내 응답 없음: Collie가 중지되었거나 사용 중입니다. collie status 명령으로 실행 여부를 확인합니다. |
durable agent가 나타나지 않으면 collie doctor 명령을 실행하십시오. 실패한 검사 항목을 알려줍니다. 일반적인 세 가지 원인은 아직 로드되지 않은 항목(재시작), 프라이빗하지 않은 소켓(socket-not-private), 비정상 종료로 남겨진 오래된 소켓 파일(connection refused: 삭제하고 durable agent를 시작하십시오)입니다. durable agent 문제 해결 문서는 durable agent 관련 사례를 다룹니다. 문제 해결 문서는 Collie 전체를 다룹니다.
토큰
url 항목은 토큰을 포함하며, 이 토큰이 전체 게이트 역할을 합니다.
openssl rand -hex 32결과는 64개의 16진수 문자이며, 32바이트 하한값을 넘습니다.
위와 같이 토큰을 32바이트 이상의 무작위 바이트로 만들고 durable agent에 동일한 값을 부여하십시오. attach 명령은 --token-env 변수에서 이를 읽어오므로 명령줄이나 셸 기록에 남지 않습니다. attach 실행 시 해당 변수가 설정되어 있어야 합니다.
attach 명령은 값을 일반 텍스트로 sources.json 파일에 복사합니다. 따라서 이 파일은 토큰만큼 기밀입니다. Collie는 이 파일을 0600 모드로 유지하며, 설정 폴더를 백업하거나 동기화하면 토큰이 함께 포함됩니다. Collie는 모든 요청에 토큰을 전송하며, 토큰을 절대 출력하지 않습니다. list 실행 시 (token set) 형식으로 표시됩니다.
| 규칙 | |
|---|---|
| 토큰 | 공백 제거 후 32~4096바이트, 공백 없는 출력 가능한 ASCII |
| URL | https://, 또는 포트가 포함된 http://127.0.0.1:<port> 또는 http://localhost:<port>. 최대 2048바이트. 사용자 이름, 비밀번호, 쿼리, 프래그먼트는 제외합니다. durable agent의 기본 URL만 지정하십시오. /session/v1 경로는 Collie가 직접 추가합니다. |
토큰은 만료되지 않습니다. 토큰을 변경하려면 동일한 이름과 새 토큰으로 attach 명령을 다시 실행한 다음 재시작하십시오.
export EDGE_TOKEN=your-new-32-byte-random-token-here
collie durable attach edge --url https://edge.example.com --token-env EDGE_TOKEN
collie restartattach 명령은 updated edge 값을 출력합니다. Collie를 재시작하기 전에 durable agent에 새 토큰을 제공하십시오. 그렇지 않으면 휴대폰에 durable agent가 토큰을 거부했다는 메시지가 표시됩니다. durable agent는 교체 작업 중에 두 번째 토큰을 수락할 수 있으므로 양쪽 모두 차단되지 않습니다. 파킹된 Cloudflare 예제는 COLLIE_TOKEN 변수를 사용하며, 해당 변수가 설정된 동안에는 COLLIE_TOKEN_NEXT 변수도 사용합니다(ADR 0103). durable agent에 새 토큰을 COLLIE_TOKEN_NEXT 변수로 설정하고, attach 명령을 다시 실행한 뒤 Collie를 재시작한 다음, 값을 COLLIE_TOKEN 변수로 옮기고 COLLIE_TOKEN_NEXT 변수를 해제하십시오.
하나의 Collie에 단독으로 있는 durable agent
Windows 호스트나 호스팅된 durable agent와 같이 터미널이 없는 인스턴스는 해당 .env에서 하나의 durable agent를 구동할 수 있습니다.
# a durable agent on this machine, as you
COLLIE_MUX=durable
COLLIE_DURABLE_SOCKET=/run/user/1000/durable/session.sock
# or a durable agent you deployed behind TLS
COLLIE_MUX=durable
COLLIE_DURABLE_URL=https://durable-member.example.com
COLLIE_DURABLE_TOKEN=your-32-byte-random-token-here이러한 인스턴스는 해당 durable agent의 이름을 default로 지정하며, 그 durable agent가 기본 세션이 됩니다. sources.json의 항목은 다른 이름으로 그 옆에서 계속 실행됩니다.
.env | config.toml | 포함된 내용 |
|---|---|---|
COLLIE_MUX=durable | [mux] mux | 이 인스턴스를 durable 전용으로 설정합니다 |
COLLIE_DURABLE_SOCKET | [mux] durable_socket | durable agent의 비공개 소켓입니다. URL과 함께 사용하지 마십시오 |
COLLIE_DURABLE_URL | [mux] durable_url | TLS 뒤에 있는 durable agent의 주소입니다. 항상 토큰과 함께 사용하십시오 |
COLLIE_DURABLE_TOKEN | [mux] durable_token | URL의 베어러 토큰입니다. 이 토큰을 저장하는 파일의 모드는 0600이어야 합니다 |
소켓 또는 토큰이 포함된 URL 중 하나만 설정하고, 둘 다 설정하지 마십시오. 둘 다 설정하거나, 토큰 없는 URL을 설정하거나, URL 없는 토큰을 설정하면 구성 오류가 발생합니다. Collie가 시작되어 로그에 오류를 기록하고, durable agent를 해당 이유와 함께 연결할 수 없음으로 표시합니다.
이전 빌드는 durable 전용 인스턴스의 로그를 <state>/durable/에 직접 보관했습니다. 이 빌드를 처음 시작할 때 로그에 한 줄을 남기며 durable/default/로 한 번 이동합니다.
토큰을 변경하려면 새 토큰을 durable agent에 배포하고, .env에 설정한 다음, collie restart을 실행하십시오. durable 전용 인스턴스는 호스트 이름으로 crew에 참여하므로, 리드와 호스트를 공유할 때는 collie crew join <lead-address> --label durable으로 이름을 지정하십시오.
sources.json의 모든 durable agent를 잠시 끄려면 .env에 COLLIE_PROGRAMS=off을 설정하고 collie restart을 실행하십시오. 그러면 브릿지가 해당 파일을 무시하고, 한 줄의 로그를 기록하며, durable agent가 없는 설치본으로 실행되므로 휴대전화에 Durable agents 섹션이 표시되지 않습니다. collie doctor 및 collie durable list는 durable agent가 꺼져 있음을 나타냅니다. 파일은 그대로 유지됩니다. durable agent를 다시 활성화하려면 변수 설정을 해제하고 재시작하십시오. 이 변수는 위의 이전 환경 변수 형식에는 영향을 주지 않습니다.
Collie가 durable agent의 데이터를 보관하는 위치
durable agent는 대화 기록을 보관합니다. Collie는 캐시, 영수증, 푸시 메모리를 상태 폴더에 보관합니다.
상태 폴더는 ~/.local/state/collie/이며, 설정된 경우 COLLIE_STATE_DIR입니다. <program>는 sources.json에 지정된 이름이거나 default입니다. 각 durable agent의 폴더는 모드가 0700이고, 각 로그는 모드가 0600입니다.
| 파일 | 포함된 내용 | 보관 기간 |
|---|---|---|
durable/<program>/<id>.jsonl | 진행 중인 대화 하나의 Chat 사본이며, <id>는 base64url 형식의 대화 ID입니다 | 8 MiB를 초과하면 최신 메시지 2000개로 잘라냅니다. 모든 로그를 합쳐 256 MiB 미만으로 유지합니다. 가장 오래된 대화가 먼저 삭제되며 로그에 한 줄이 기록됩니다 |
durable/<program>/<id>.cursor.json | Collie가 읽기를 중단한 위치이며, 재시작 후 그 위치부터 계속 읽습니다 | 해당 로그의 보관 기간과 동일 |
answer-receipts.json | 휴대전화가 보낸 각 답변: 요청 ID, 답변한 대상 ID, 결과. 입력된 텍스트는 제외됩니다 | 1주일, 최대 최신 1000개. 전송 중인 답변은 최소 하루 동안 유지됩니다 |
control-receipts.json | 각 send, steer, stop, belt 작업: 요청 ID 및 결과. 텍스트는 다이제스트 형태로만 저장됩니다 | 위와 동일 |
starter-receipts.json | 각 시작 탭 및 해당 탭이 연 대화 | 위와 동일 |
durable-asks.json | 호스트, durable agent, 도구 호출별로 이미 푸시된 질문 목록이며, 재시작 시 중복 푸시되지 않도록 합니다 | 질문이 닫힌 후 1시간. 최대 2000개 |
캐시 덕분에 Chat이 빠르게 열리고 durable agent가 느린 동안에도 작동합니다. 닫힌 대화는 캐시가 아닌 durable agent에서 항상 읽습니다.
durable agent는 긴 대화의 최신 부분만 보관합니다. Collie가 대화를 읽기 전에 시작 부분을 삭제한 경우 Chat은 해당 위치에 한 줄을 표시합니다: "이전 메시지는 제외되었습니다. durable agent가 더 이상 보관하지 않습니다." 휴대전화에서 손실된 데이터는 없습니다. Collie가 해당 메시지를 가지고 있던 적이 없습니다.
스마트폰 표시 내용
대시보드의 Durable agents 섹션 및 각 durable agent의 대화 목록입니다.
각 durable agent는 Durable agents 섹션의 한 행으로 표시되며, 이름, Experimental 배지, 런타임, 로컬 실행 여부 또는 다른 곳에서의 실행 여부가 포함됩니다. 오른쪽에는 열린 대화 수와 사용자 응답 대기 중인 대화 수가 needs-you 색상으로 표시됩니다. 질문이 대기 중인 동안 이 섹션은 스페이스 위로 이동합니다. 시작 중이거나 연결할 수 없는 durable agent는 개수 대신 해당 상태를 표시합니다. 거부된 토큰과 거부된 유선 버전은 휴대전화에 별도의 문구로 표시되며, collie doctor에는 다른 모든 이유가 표시됩니다.
행을 탭하면 메시지 앱의 채팅 목록처럼 durable agent의 대화 목록이 열립니다. 사용자 응답 대기 항목이 먼저 표시되고, 그다음 다른 열린 대화가 표시되며, Closed 레이블 아래에 닫힌 대화가 표시됩니다. 열린 대화는 Chat에서 열리고, 닫힌 대화는 읽기 전용으로 열립니다. durable agent는 hello 메시지에서 수행할 수 있는 작업(asks, starters, send, steer, abort, rename, close, actions, history, reopen)을 알리며, 휴대전화는 안내된 기능에 대해서만 컨트롤을 표시합니다. durable agent에는 화면이 없으므로 Terminal 뷰와 입력된 키가 없습니다.
durable agent로 전송할 때 queued 레이블은 턴에 대한 Collie 자체의 해석입니다. Collie는 Pi의 수신함에서 대기 중인 항목을 표시하지 않습니다. 마감 시한까지 대기하는 작업은 waiting이 아닌 idle 또는 working으로 표시됩니다. 자세한 내용은 세션에 있습니다.
질문 카드에는 durable agent 이름이 표시되며, durable agent가 설정한 경우 남은 시간이 표시됩니다. durable agent 내에서 결정되었거나 시간이 초과된 질문은 채팅에 한 줄로 남습니다. 휴대폰에서의 Durable agent에서 각각의 그림을 확인할 수 있습니다.
브리지를 통한 Send 및 Ask
durable agent에는 화면이 없으므로 Collie는 화면을 읽지 않습니다. 대신 브리지가 자체 상태를 읽습니다. durable agent는 터미널 창과 동일한 Send 및 Ask를 받습니다.
- 상태. 턴은 해당 창 상태에서 가져옵니다. 질문은 가장 오래된 열린 ask에서 가져옵니다. durable agent에는 입력 상자가 없으므로 입력 상자는 항상 비어 있습니다. 휴대폰은 터미널 창과 동일한 형태로 각 창과 함께 이 상태를 수신합니다.
- 전송.
POST /api/send은(는) 휴대폰에서 요청 ID를 받습니다. 브리지는 요청을 디스크에 기록하고 대화를 잠급니다. 그런 다음 브리지는 읽은 턴에 대해 durable agent로 텍스트를 한 번 보냅니다. durable agent의 응답이 증거가 되며, 영수증에는 수신한 요청 ID가 명시됩니다. 턴이 진행되는 동안 durable agent는 해당 턴이 끝난 후를 위해 텍스트를 보관하며, 영수증에는queued이(가) 표시됩니다. - 결과. 전송은
sent, 이유와 함께refused, 또는unknown(으)로 끝납니다.unknown은(는) durable agent가 텍스트를 수신했다고 알리지 않았음을 의미합니다. 다시 보내기 전에 채팅을 읽으십시오. 전송은 durable agent가 대화에 이를 기록할 때effective상태가 됩니다. 해당user항목에는 해당 전송의 요청 ID가 명시됩니다. 질문이 열려 있는 동안에는 Collie가 읽을 수 없는 질문이더라도 일반 전송이 거부됩니다. 질문에 답하거나 Steer 또는 Stop을 사용하십시오. 확인 후 시작된 턴은 전송을 거부하며, durable agent에는 아무것도 도달하지 않습니다. - 질문.
POST /api/ask/<id>이(가) 답변합니다. ask ID는 일회용입니다. 답변에는 확인한 질문의 해시가 포함됩니다. 브리지는 이를 durable agent가 현재 나열한 질문과 비교합니다. 둘이 다르면 durable agent에는 아무것도 도달하지 않습니다. 응답에는 현재 상태의 질문이 표시됩니다. 답변은 고유한 ask ID를 통해 durable agent로 전송됩니다. 키는 전송되지 않습니다. 영수증에는channel: program이(가) 표시되고 해시가 유지됩니다. - 카드에 유지되는 항목. 일부 질문은 한 번의 탭에 맞지 않으므로 상태에는 Collie가 읽을 수 없는 질문(
modal: unreadable)으로 표시됩니다. 해당 질문의 전용 카드에서 답변합니다. - 텍스트 질문은 답변이 직접 입력하는 줄이므로 durable agent의 전용 카드에 남습니다. - 여러 항목 중 선택하는 질문은 답변이 둘 이상의 선택 항목이므로 durable agent의 전용 카드에 남습니다. - 양식 질문은 답변이 필드 세트이므로 durable agent의 전용 카드에 남습니다. - Always allow는 절대 계약 옵션이 아닙니다. 이 권한 부여는 이 질문 이후에도 지속됩니다. 따라서 durable agent의 카드는 먼저 두 번째 탭을 요구하며,/api/ask을(를) 통한 한 번의 탭으로 해당 탭을 건너뛰어서는 안 됩니다. - 카운터.
collie doctor은(는) 이러한 읽기 및 결과를program의 한 행에 집계합니다.
이 머신에서 휴대폰은 다음 경로를 사용합니다. 일반 전송은 /api/send을(를) 통과하고, 질문 카드 탭은 /api/ask을(를) 통과합니다. 작성기는 엄지손가락 위치에 durable agent의 단어로 결과를 알려줍니다. 질문이 전송을 차단하면 버튼이 해당 카드로 이동합니다. 창의 Recent sends 목록에는 각 영수증이 표시되며, 대기 중인 전송에는 대기 중 표시가 나타납니다. steer는 Send Protocol의 일부가 아니므로 Steer 및 Stop은 대화 자체의 경로에 유지됩니다. 크루 멤버의 durable agent는 모든 쓰기에 대해 대화 자체의 경로를 유지합니다. 각 경로는 텍스트가 durable agent에 도달하기 전에 턴을 확인합니다. 하나의 대화에 대한 모든 쓰기는 단일 잠금을 공유합니다. 전송이 실행되는 동안 Steer 및 카드 답변은 사용 중 상태로 거부됩니다. Stop은 최대 제한 시간까지 잠금을 기다리므로, 멈춘 전송이 Stop을 차단하지 않습니다.
버전
Collie와 durable agent는 hello 단계에서 와이어 버전을 합의하며, 현재 버전은 버전 1 하나뿐입니다.
Collie는 1..1을(를) 사용합니다. 버전 2가 출시되면 Collie는 그 이후 한 번의 마이너 릴리스 동안 버전 1을 수락하고, 그다음 마이너 릴리스에서 제거합니다. 현재는 수락할 이전 버전이 없습니다.
두 범위가 일치하지 않으면 Collie는 durable agent에서 더 이상 아무것도 읽지 않습니다. 로그에는 거부된 각 범위에 대해 [durable] The durable agent speaks wire v2, this Collie speaks v1. Update Collie, or the agent's SDK.과(와) 같은 한 줄이 기록됩니다. 휴대폰의 durable agent 홈에는 주의 상자에 동일한 문장이 표시되며, 대시보드의 행에는 Unreachable 대신 Version mismatch가 표시됩니다. collie doctor은(는) durable-hello 행에 두 범위를 모두 표시합니다: incompatible: the durable agent speaks 2..3, this Collie speaks 1..1. 또한 durable agent가 시작될 때마다 Collie는 자체 버전이 포함된 hello을(를) 한 번 전송하여 durable agent가 자체 측에서 불일치를 기록할 수 있도록 합니다. 더 오래된 쪽을 업데이트하십시오.
종료
이 기능은 이 저장소 외부의 사용자가 사용하는 경우에만 유지됩니다.
1.24.0 릴리스까지 두 가지 중 하나가 충족되어야 합니다. 와이어를 사용하는 공개 저장소가 존재하거나, durable agent에 대한 외부 이슈 또는 토론이 존재해야 합니다. 둘 다 충족되지 않으면 durable 코드는 릴리스에서 experiments/(으)로 이동하고 이 페이지는 삭제됩니다(ADR 0104). 삭제 시 sources.json 항목은 한 릴리스 동안 한 줄의 로그와 함께 무시되고, 소켓은 durable agent에 대해 계속 작동하며, npm 패키지는 삭제되지 않고 지원 중단됩니다(ADR 0105).