Show HN: 상담원이 음식 배달 주문을 할 수 있는 EAT 기술을 구축했습니다.

hackernews | | 📦 오픈소스
#ai 에이전트 #cli #command r #wolt #배달 서비스 #자동화
원문 출처: hackernews · Genesis Park에서 요약 및 분석

요약

해당 프로젝트는 AI 에이전트가 단일 명령어 인터페이스를 통해 주요 배달 앱의 메뉴를 검색하고 주문 및 결제까지 진행할 수 있도록 돕는 플러그 앤 플레이형 도구입니다. 현재 '볼트(Bolt)'는 기본 연동만 지원하는 반면, '월트(Wolt)'는 검색, 장바구니 추가 및 삭제, 최종 결제 기능이 완벽하게 구현되어 있으며 작업 결과는 JSON 형태로 출력됩니다. 이 오픈소스 소프트웨어는 AGPL-3.0 라이선스를 따르지만, 폐쇄적인 상업적 재배포나 유료 서비스 내장 시에는 별도의 상업용 라이선스 계약이 필수적으로 요구됩니다.

본문

EAT CLI is a plug-and-play skill that lets your AI agent browse menus, customize orders, and check out from major delivery services through a single command-line interface. Today, Wolt is fully implemented and Bolt is available as a stub integration. To install the EAT skill, tell your agent: install the eat skill from https://github.com/mvksims/eatcli/ This project uses dual licensing: - AGPL-3.0-only (open source) - Commercial license (separate written agreement) Commercial licensing is required for: - Closed-source redistribution. - Embedding in paid products. - SaaS/internal hosted use without AGPL source-sharing compliance. See LICENSE and COMMERCIAL_LICENSE.md . - Go (v1.18 or later) installed and configured in your system's PATH. - Install Go dependencies: go mod tidy - Install Playwright browser binaries: go run github.com/playwright-community/playwright-go/cmd/playwright install The application is configured via a config.yml file, which should be in the same directory. The file specifies success conditions, session directory, and runtime settings. Example config.yml : provider: "wolt" success_url_pattern: "https://wolt.com/en/discovery" success_selector: "[data-test-id='UserStatus.ProfileImage']" user_data_dir: "./profile/wolt" venue_base_url: "https://wolt.com/en/lva/riga" headless: false timeout_seconds: 600 venue_base_url controls geography-specific venue URL generation used by basket add , basket remove , and checkout . It is required and must include scheme + host (for example, https://wolt.com/en/lva/riga ). provider selects delivery service integration. Supported values: wolt (default): full implementation.bolt : stub provider (returns not-implemented errors for commands). The application is run with the following structure: go run main.go [options] [config.yml] [args...] isauth ,search ,basket , orcheckout .[options] are command-specific flags.[config.yml] is an optional path to your configuration file. It defaults toconfig.yml if not provided.[query] (forsearch command) is the search term(s).basket with no additional arguments returns current basket JSON.- For basket add andbasket remove , arguments are . - For checkout , argument is . Use this one-time sign-in command to create or refresh a reusable session in user_data_dir . Expected result: - On success, the command prints {"auth_status":"success"} and later commands can run without signing in again. - On failure, the command prints {"auth_status":"failed","error":"..."} and no usable session is saved. Final command output is a JSON object with auth status: - Success: {"auth_status":"success"} - Failure: {"auth_status":"failed","error":"..."} Auth launch respectsheadless fromconfig.yml . Options: --erase-data : Force deletion of existing session data before authenticating. Use this to start a fresh login session. Examples: go run main.go auth go run main.go auth --erase-data This command searches for items and returns a JSON summary including the keyword, total count, and a products list. Each product includes id , name , price , venue_id , and venue_slug . Example: go run main.go search selga go run main.go search peeled tomatoes Example output shape: { "keyword": "selga", "count": 2, "products": [ { "id": "a22bc220dd44c8f8daa8ef96", "name": "Selga šokolādes glazūrā 190g cepumi", "price": 289, "venue_id": "62430901d7678f5b344972e4", "venue_slug": "wolt-market-grizinkalna" } ] } This command returns your current basket as JSON. Expected result: - On success, it prints a normalized basket payload. - If there is no valid authenticated session, it returns an error asking you to run auth first. Output contains a baskets array. Each basket includes: id total venue_slug items (each item includesid ,count ,total ,image_url ,name ,is_available ,price ) Example: go run main.go basket This command adds an item to a specific venue basket, or increments quantity if the item is already there. Expected result: - On success, it prints the updated basket JSON. - If the session is not authenticated, it returns an error asking you to run auth . - If the venue/item input is invalid, it returns an error. Output uses the same baskets shape as basket . Example: go run main.go basket add wolt-market-grizinkalna 3135258a5f2ffa0c518ab4b8 This command removes a specific item from the selected venue basket and prints the resulting basket state as JSON. Expected result: - On success, the target item is removed from that venue basket and updated basket JSON is printed. - If the item is not present in that venue basket, it returns an error. - If the session is not authenticated, it returns an error asking you to run auth . Example: go run main.go basket remove wolt-market-grizinkalna 3135258a5f2ffa0c518ab4b8 This command attempts to place an order for a selected venue. Expected result: - On success, the order is submitted. - If checkout cannot be completed, the command returns an error payload with available provider error details. - If the session is not authentica

Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.

공유

관련 저널 읽기

전체 보기 →