구성된 Mind를 애플리케이션에 포함합니다. Minds CLI로 설정한 후 메시징, 이벤트 및 Builder API 라우트를 위한 타입이 지정된 Node 클라이언트입니다.
@animocabrands/minds-client-lib는 Mind를 애플리케이션이나 제품에 래핑하고 임베드하는 방법입니다. 대부분의 빌더는 Minds CLI 로 시작해 Mind를 나열하고, 세부 정보를 확인하고, Cognition을 모니터링하고, Circle을 관리하고, Bazaar를 탐색한 다음, 출시할 준비가 되면 여기로 넘어옵니다. 이 라이브러리는 동일한 Builder API 를 TypeScript 타입과 함께 제공합니다: 메시징, waitForReply, SSE 이벤트, 그리고 터미널에서 이미 실행해 본 계정 라우트까지.
패키지를 프로젝트의 서버 측에 추가하세요. UI, 브랜딩, 사용자 흐름은 그대로 유지됩니다. 클라이언트는 타입이 지정된 HTTP와 api.build로의 스트리밍을 처리합니다. 계정 설정 을 완료하고, CLI로 Mind를 검증한 다음 아래 예제를 연결하거나, 구성이 완료되면 코딩 에이전트에게 전달하세요.
설치
**Node 22+**가 필요합니다.
npm install @animocabrands/minds-client-lib
인증
계정 및 메시징 라우트에 대해 Builder API 키를 전달합니다. 라이브러리는 인증된 라우트(≥0.1.2)에서 X-Api-Key만 보냅니다. **X-Access-Key**는 더 이상 사용되지 않으므로 사용하지 마세요. 환경 변수 이름은 MINDS_BUILDER_API_KEY로 유지됩니다.
import { BUILDER_API_KEY_ENV, BUILDER_API_KEY_HEADER, createMindsClient,} from "@animocabrands/minds-client-lib";const builderApiKey = process.env[BUILDER_API_KEY_ENV];if (!builderApiKey) throw new Error(`${BUILDER_API_KEY_ENV} is not set`);const client = createMindsClient({ builderApiKey });
createMindsClient({})는 공개 Bazaar 카탈로그(client.bazaar.*)에만 유효합니다. 키를 제공하지 않은 경우 인증 메서드는 생성 시점이 아니라 호출 시점에 missing_builder_api_key 코드와 함께 MindsApiError를 발생시킵니다.
Mind 생성
Mind 이름은 고유합니다. 이미 사용 중인 이름인지 먼저 checkMindName으로 확인하세요(공개 메서드, Builder API 키 불필요). 그다음 awakenMind를 호출합니다(키 필요).id는 생성할 미리 구성된 Mind 유형을 선택합니다. 패키지는 카탈로그를 내보내지 않습니다. 각 유형과 짧은 설명은 Minds CLI 에서 minds mind awaken --help를 실행하면 확인할 수 있습니다. 동일한 목록은 API 참조 에도 있습니다. 이름이 이미 사용 중이거나 id가 유효하지 않으면 awakenMind는 MindsApiError를 던집니다.예제는 sales Mind 이름 J-Belfort입니다. 이 펜을 팔아 보세요.
Mind별 Cognition 사용량과 잔액 조회는 CLI 명령과 동일하게 동작합니다. Mind는 대화할 때뿐만 아니라 추론하고, 도구를 실행하고, 자율 작업을 수행할 때도 Cognition을 소비합니다. 두 메서드 모두 mindId(UUID)와 선택적 AbortSignal을 받습니다.Cognition은 Mind의 추론, 도구 사용 및 자율 작업을 지원합니다. 시간에 따른 사용량 및 도구별 사용량을 보려면 getCognitionUsage 및 getCognitionUsageByTool을 사용하세요. 남은 Cognition 잔액을 보려면 getCognitionBalance를 사용하세요:
두 사용량 메서드는 서로 다른 간격 값을 허용합니다. getCognitionUsage는 1m, 5m, 15m, 1h, 1d, 1w, 1M을 허용하고, getCognitionUsageByTool은 hour, day, week, month만 허용합니다. 선택적 startTime과 endTime(ISO 날짜-시간)으로 두 메서드 모두 조회 기간을 제한할 수 있습니다.
Mind의 Circle은 협력자의 집합입니다 - 인간 및 다른 Mind. getCircle은 CircleMember[] 배열을 직접 반환하고, addCircleMembers와 removeCircleMembers는 이메일별 결과와 베스트 에포트 요약을 담은 CircleMutationResult 엔벨로프를 반환합니다:
인간 이메일은 어떤 주소든 가능하고, Mind 이메일은 @hellominds.ai로 끝납니다. listCirclesForAccount()는 listMinds()를 호출한 다음 각 Mind에 대해 병렬로 getCircle()을 호출하는 편의 기능입니다. 빈번한 호출 경로(hot paths) 대신 계정 전체 개요를 파악하는 데 사용하세요.
Bazaar 카탈로그
공개 Bazaar 카탈로그는 client.bazaar로 사용할 수 있으며 API 키가 필요하지 않습니다. ID 검색(skillId, appId)을 위해 Bazaar를 사용한 다음, 아래의 Mind 장착 메서드로 해당 ID를 장착하세요. 라우트 형태는 API 참조 의 Bazaar 및 Minds 태그에 있으며, CLI는 minds bazaar를 통해 동일한 카탈로그를 제공합니다.조회된 목록의 각 항목에는 플랫폼 전체에서 해당 항목을 장착한 Mind의 수를 나타내는 equippedCount가 포함될 수 있습니다. 이는 플랫폼 전체의 인기이며, Mind별 장착된 세트는 listEquippedSkills / listEquippedApps를 사용하세요.
await client.sendMessage({ alias: "main", messageText: "Hello" });const rows = await client.getHistory("main", { limit: 50 });// rows[0]이 최신. 마지막 fingerprint → 다음 더 오래된 페이지(통신상 `before`).const cursor = rows.at(-1)?.fingerprint;const older = await client.getHistory("main", { cursor, limit: 50 });
getHistory는 인간과 Mind의 전체 대화 기록을 **최신순(newest-first)**으로 반환합니다. 행에는 senderType(1 = 인간, 0 = Mind)이 사용됩니다. SDK cursor(및 더 이상 사용되지 않는 after)는 쿼리 before로 전송되어 배타적인 다음 더 오래된 페이지를 조회합니다. 동일한 senderType 필드가 subscribeEvents / eventsIterator / waitForReply의 SSE 이벤트에도 나타납니다.sendMessage에는 alias 및 messageText가 필요합니다. 선택적 attachments는 아웃바운드 객체를 허용하며, fileName 및 mimeType이 포함된 공개 HTTPS url을 선호합니다:
await client.sendMessage({ alias: "main", messageText: "Summarize this PDF in one sentence.", attachments: [ { url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", fileName: "dummy.pdf", mimeType: "application/pdf", extension: "pdf", }, ],});
이미지 URL은 동일한 형태(mimeType: "image/png" 등)를 사용합니다. getHistory, waitForReply 및 SSE 이벤트에 대한 Mind 회신에는 다음과 같은 인바운드 아티팩트가 포함될 수 있습니다:
// One attachment on a Mind reply (PDF; artifact body truncated){ artifactId: "7388b65d-144a-49ff-a4dc-cb7c23ded982", slug: "whale_watchtower_skill_artifact_1_0_5", logicalType: "document", mimeType: "application/pdf", extension: "pdf", artifact: "JVBERi0xLjQK...",}
아웃바운드 전송은 인라인 페이로드에 content를 사용하고, 인바운드 회신은 동일한 역할에 artifact를 사용합니다. slug 및 logicalType은 선택적 문자열이며, 값을 고정 열거형이 아닌 힌트로 취급합니다. 필드 세부 정보는 API 참조 를 확인하세요.getLatestHistoryFingerprint는 최신 메시지의 fingerprint를 반환합니다. 이를 waitForReply에 afterFingerprint로 전달하여 전송 후 도착한 회신만 수락하세요. 첫 번째 getHistory 페이지(커서 없음)는 이미 가장 최신 창입니다 - 더 최신 행을 기대하고 해당 fingerprint를 cursor로 전달하지 마세요.
for await (const event of client.eventsIterator({ alias: "main" })) { console.log(event.fingerprint, event.messageText);}
프로세스가 종료될 때 취소하려면 반복자 또는 구독 옵션에 signal을 전달하세요.
오류
실패한 HTTP 호출은 status, code, message가 포함된 MindsApiError를 발생시킵니다. builderApiKey 없이 인증 메서드를 호출하면 호출 시점에 missing_builder_api_key가 발생합니다. 401/403은 Builder API 키 누락 또는 폐기로 해석하세요. 429에는 재시도 안내가 포함될 수 있습니다.