diff --git a/electron-builder.mcp-resources.yml b/electron-builder.mcp-resources.yml index 3fe913e8..f6c36f14 100644 --- a/electron-builder.mcp-resources.yml +++ b/electron-builder.mcp-resources.yml @@ -22,6 +22,7 @@ extraResources: - '@agent-relay/cloud/**' - '@agent-relay/config/**' - '@agent-relay/harness-driver/**' + - '@agent-relay/harnesses/**' - '@agent-relay/sdk/**' - '@agent-relay/utils/**' - '@aws-crypto/crc32/**' @@ -66,6 +67,9 @@ extraResources: - '@aws-sdk/util-user-agent-node/**' - '@aws-sdk/xml-builder/**' - '@aws/lambda-invoke-store/**' + - '@clack/core/**' + - '@clack/prompts/**' + - '@clack/prompts/node_modules/is-unicode-supported/**' - '@hono/node-server/**' - '@isaacs/fs-minipass/**' - '@modelcontextprotocol/sdk/**' @@ -78,6 +82,21 @@ extraResources: - '@relaycast/sdk/node_modules/zod/**' - '@relaycast/types/**' - '@relaycast/types/node_modules/zod/**' + - '@relayfile/core/**' + - '@relayfile/sdk/**' + - '@relayflows/browser-primitive/**' + - '@relayflows/cli/**' + - '@relayflows/core/**' + - '@relayflows/core/node_modules/@relaycast/sdk/**' + - '@relayflows/core/node_modules/@relaycast/sdk/node_modules/zod/**' + - '@relayflows/core/node_modules/@relaycast/types/**' + - '@relayflows/core/node_modules/@relaycast/types/node_modules/zod/**' + - '@relayflows/github-primitive/**' + - '@relayflows/slack-primitive/**' + - '@sinclair/typebox/**' + - '@slack/logger/**' + - '@slack/types/**' + - '@slack/web-api/**' - '@smithy/config-resolver/**' - '@smithy/core/**' - '@smithy/credential-provider-imds/**' @@ -115,42 +134,24 @@ extraResources: - '@smithy/util-stream/**' - '@smithy/util-utf8/**' - '@smithy/util-waiter/**' + - '@types/node/**' + - '@types/retry/**' - '@xterm/headless/**' - 'accepts/**' - 'accepts/node_modules/mime-db/**' - 'accepts/node_modules/mime-types/**' + - 'agent-base/**' - 'agent-relay/**' - - 'agent-relay/node_modules/@esbuild/aix-ppc64/**' - - 'agent-relay/node_modules/@esbuild/android-arm/**' - - 'agent-relay/node_modules/@esbuild/android-arm64/**' - - 'agent-relay/node_modules/@esbuild/android-x64/**' - - 'agent-relay/node_modules/@esbuild/darwin-arm64/**' - - 'agent-relay/node_modules/@esbuild/darwin-x64/**' - - 'agent-relay/node_modules/@esbuild/freebsd-arm64/**' - - 'agent-relay/node_modules/@esbuild/freebsd-x64/**' - - 'agent-relay/node_modules/@esbuild/linux-arm/**' - - 'agent-relay/node_modules/@esbuild/linux-arm64/**' - - 'agent-relay/node_modules/@esbuild/linux-ia32/**' - - 'agent-relay/node_modules/@esbuild/linux-loong64/**' - - 'agent-relay/node_modules/@esbuild/linux-mips64el/**' - - 'agent-relay/node_modules/@esbuild/linux-ppc64/**' - - 'agent-relay/node_modules/@esbuild/linux-riscv64/**' - - 'agent-relay/node_modules/@esbuild/linux-s390x/**' - - 'agent-relay/node_modules/@esbuild/linux-x64/**' - - 'agent-relay/node_modules/@esbuild/netbsd-arm64/**' - - 'agent-relay/node_modules/@esbuild/netbsd-x64/**' - - 'agent-relay/node_modules/@esbuild/openbsd-arm64/**' - - 'agent-relay/node_modules/@esbuild/openbsd-x64/**' - - 'agent-relay/node_modules/@esbuild/openharmony-arm64/**' - - 'agent-relay/node_modules/@esbuild/sunos-x64/**' - - 'agent-relay/node_modules/@esbuild/win32-arm64/**' - - 'agent-relay/node_modules/@esbuild/win32-ia32/**' - - 'agent-relay/node_modules/@esbuild/win32-x64/**' - - 'agent-relay/node_modules/esbuild/**' + - 'agent-trajectories/**' - 'ajv-formats/**' - 'ajv-formats/node_modules/ajv/**' - 'ajv-formats/node_modules/json-schema-traverse/**' + - 'ansi-escapes/**' + - 'ansi-regex/**' + - 'ansi-styles/**' - 'asn1/**' + - 'asynckit/**' + - 'axios/**' - 'bcrypt-pbkdf/**' - 'body-parser/**' - 'body-parser/node_modules/iconv-lite/**' @@ -159,7 +160,13 @@ extraResources: - 'bytes/**' - 'call-bind-apply-helpers/**' - 'call-bound/**' + - 'chalk/**' - 'chownr/**' + - 'cli-cursor/**' + - 'cli-truncate/**' + - 'color-convert/**' + - 'color-name/**' + - 'combined-stream/**' - 'commander/**' - 'compare-versions/**' - 'content-disposition/**' @@ -172,16 +179,21 @@ extraResources: - 'cross-spawn/node_modules/isexe/**' - 'cross-spawn/node_modules/which/**' - 'debug/**' + - 'delayed-stream/**' - 'depd/**' - 'dotenv/**' - 'dunder-proto/**' - 'ee-first/**' + - 'emoji-regex/**' - 'encodeurl/**' + - 'environment/**' - 'es-define-property/**' - 'es-errors/**' - 'es-object-atoms/**' + - 'es-set-tostringtag/**' - 'escape-html/**' - 'etag/**' + - 'eventemitter3/**' - 'eventsource/**' - 'eventsource-parser/**' - 'express/**' @@ -193,26 +205,44 @@ extraResources: - 'fast-xml-builder/**' - 'fast-xml-parser/**' - 'finalhandler/**' + - 'follow-redirects/**' + - 'form-data/**' - 'forwarded/**' - 'fresh/**' - 'function-bind/**' + - 'get-east-asian-width/**' - 'get-intrinsic/**' - 'get-proto/**' - 'gopd/**' + - 'has-flag/**' - 'has-symbols/**' + - 'has-tostringtag/**' - 'hasown/**' - 'hono/**' - 'http-errors/**' + - 'https-proxy-agent/**' - 'ignore/**' - 'inherits/**' - 'ip-address/**' - 'ipaddr.js/**' + - 'is-electron/**' + - 'is-fullwidth-code-point/**' - 'is-promise/**' + - 'is-stream/**' - 'jose/**' - 'json-schema-typed/**' + - 'listr2/**' + - 'log-update/**' + - 'log-update/node_modules/ansi-styles/**' + - 'log-update/node_modules/slice-ansi/**' + - 'log-update/node_modules/string-width/**' + - 'log-update/node_modules/wrap-ansi/**' - 'math-intrinsics/**' - 'media-typer/**' - 'merge-descriptors/**' + - 'mime-db/**' + - 'mime-types/**' + - 'mimic-function/**' - 'minipass/**' - 'minizlib/**' - 'ms/**' @@ -222,18 +252,32 @@ extraResources: - 'object-inspect/**' - 'on-finished/**' - 'once/**' + - 'onetime/**' + - 'p-finally/**' + - 'p-queue/**' + - 'p-queue/node_modules/eventemitter3/**' + - 'p-retry/**' + - 'p-timeout/**' - 'parseurl/**' - 'path-expression-matcher/**' - 'path-key/**' - 'path-to-regexp/**' + - 'picocolors/**' - 'pkce-challenge/**' + - 'playwright/**' + - 'playwright-core/**' + - 'playwright/node_modules/fsevents/**' - 'posthog-node/**' - 'proxy-addr/**' + - 'proxy-from-env/**' - 'qs/**' - 'range-parser/**' - 'raw-body/**' - 'raw-body/node_modules/iconv-lite/**' - 'require-from-string/**' + - 'restore-cursor/**' + - 'retry/**' + - 'rfdc/**' - 'router/**' - 'safer-buffer/**' - 'send/**' @@ -247,9 +291,16 @@ extraResources: - 'side-channel-list/**' - 'side-channel-map/**' - 'side-channel-weakmap/**' + - 'signal-exit/**' + - 'sisteransi/**' + - 'slice-ansi/**' + - 'slice-ansi/node_modules/ansi-styles/**' - 'ssh2/**' - 'statuses/**' + - 'string-width/**' + - 'strip-ansi/**' - 'strnum/**' + - 'supports-color/**' - 'tar/**' - 'tar/node_modules/yallist/**' - 'toidentifier/**' @@ -259,10 +310,14 @@ extraResources: - 'type-is/node_modules/content-type/**' - 'type-is/node_modules/mime-db/**' - 'type-is/node_modules/mime-types/**' + - 'undici-types/**' - 'unpipe/**' - 'vary/**' + - 'wrap-ansi/**' + - 'wrap-ansi/node_modules/ansi-styles/**' - 'wrappy/**' - 'ws/**' - 'xml-naming/**' + - 'yaml/**' - 'zod/**' - 'zod-to-json-schema/**' diff --git a/package-lock.json b/package-lock.json index 9a88ba8b..045df1a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "@agent-relay/cloud": "^8.1.2", - "@agent-relay/harness-driver": "^8.1.2", - "@agent-relay/sdk": "^8.1.2", + "@agent-relay/cloud": "^8.3.0", + "@agent-relay/harness-driver": "^8.3.0", + "@agent-relay/sdk": "^8.3.0", "@agentworkforce/deploy": "^3.0.50", "@relayburn/sdk": "^3.2.0", "@relayfile/sdk": "^0.8.14", @@ -20,7 +20,7 @@ "@xterm/addon-webgl": "^0.18.0", "@xterm/xterm": "^5.5.0", "@xyflow/react": "^12.4.0", - "agent-relay": "^8.1.2", + "agent-relay": "^8.3.0", "agentworkforce": "^3.0.50", "ai-hist": "^0.2.3", "allotment": "^1.0.9", @@ -140,9 +140,9 @@ "integrity": "sha512-h6YkyIl0DZSIeVTqgPZGgN+E2I0COcF7XjljVKGzZGLUKzmBKhLROeyiy9efz/YIpApat3xjLZ4Ac20+EsydTA==" }, "node_modules/@agent-relay/broker-darwin-arm64": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/broker-darwin-arm64/-/broker-darwin-arm64-8.1.2.tgz", - "integrity": "sha512-zNJOPYqfoeedo9dxcXY8OCT/kOO6RMC/FQ4mb9jy0jvwaks8HRGRm4H7XE7TeW2oEW5LZ5QxF/Q8Err/dBbkQw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/broker-darwin-arm64/-/broker-darwin-arm64-8.3.0.tgz", + "integrity": "sha512-fSxhyxoERy9Nr25/5MsCiS2s8lrZcJOxlnnr2GLFlZXZNbhhgXELdhKVX+BBtGJQt5yPu7jR4MERzLaR7HrdCA==", "cpu": [ "arm64" ], @@ -153,9 +153,9 @@ ] }, "node_modules/@agent-relay/broker-darwin-x64": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/broker-darwin-x64/-/broker-darwin-x64-8.1.2.tgz", - "integrity": "sha512-ePkEFks2gwwIZb1409qExYRXc+JMnNck6eyrBmAY3GNUdoFao46QNzs3QwqKX11PsJcuaGbkZLxkZWrgReMCOw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/broker-darwin-x64/-/broker-darwin-x64-8.3.0.tgz", + "integrity": "sha512-amuVwc0FH0pvodWMgw4pzG1o1j5YqMbKUo2Q7PgKKmmImiTlQ3IIGw4wryqY+Bg+UIEd9He7OocrvgQxXhhv9g==", "cpu": [ "x64" ], @@ -166,9 +166,9 @@ ] }, "node_modules/@agent-relay/broker-linux-arm64": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/broker-linux-arm64/-/broker-linux-arm64-8.1.2.tgz", - "integrity": "sha512-/dEJ57innCtWQxi9jPFvlInf0G0oL436kk0OnZGCPIiA/fFOB5Iheg/r8dVzQWZoWkcD2TOUqUdFYomtICbIBg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/broker-linux-arm64/-/broker-linux-arm64-8.3.0.tgz", + "integrity": "sha512-BWeow8ye/twwI/gpA0jiwGCIkGUSu85ERtMFH4w+7wvQ7yUVcDAk9XPgRLwf7OwEWEsXrYhIZc7VzrZII1XRcQ==", "cpu": [ "arm64" ], @@ -179,9 +179,9 @@ ] }, "node_modules/@agent-relay/broker-linux-x64": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/broker-linux-x64/-/broker-linux-x64-8.1.2.tgz", - "integrity": "sha512-7bnYYkdt881ZwVIYbP4gf4L+WCfEig+PTQW/NJfbe+fo/KhVjctPyoEdONCrYS7Vrft9UgfhqvrTEwTdjgp2bw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/broker-linux-x64/-/broker-linux-x64-8.3.0.tgz", + "integrity": "sha512-omus3TBEDF8MdaARrb5rvyAp8Zmu3hNmYOEsJ1cw5fus5zI/8jFmKB/kWUeEb1PEmbJKc835yQTTAfczZdGh7Q==", "cpu": [ "x64" ], @@ -192,9 +192,9 @@ ] }, "node_modules/@agent-relay/broker-win32-x64": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/broker-win32-x64/-/broker-win32-x64-8.1.2.tgz", - "integrity": "sha512-XcvEz3D4aTcCV3jAGVZVOmzf2m/n/tWulXOFgF+2+YeSw0EPMzPQza5EXXu4sGR2/6xSyL0OlEkLmI1nQD6KHg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/broker-win32-x64/-/broker-win32-x64-8.3.0.tgz", + "integrity": "sha512-ulyLO7TfSI3iMmMODdCkx2c0b5H6YeHRkM8kGIAQGh+5/yJ2owRCkyYjt3eoB6R3M2BRjwcSKw9+vyyhWZBUrA==", "cpu": [ "x64" ], @@ -205,11 +205,11 @@ ] }, "node_modules/@agent-relay/cloud": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/cloud/-/cloud-8.1.2.tgz", - "integrity": "sha512-vOM/EP26aXy4oPSvGmwwj/0q9PPKaAJ/jhjXtvDfebn6jIIsqRckWulLaSmPl/lYkKsaAr/rK2ez+8cUX2sw6A==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/cloud/-/cloud-8.3.0.tgz", + "integrity": "sha512-eWX2YnVt+uZGWL0nzHN3fBbW5aD4yAw7opr7O7fJpYJVG0dySfyfoRhgajebNGo8ljZwSdn1ISZSGL4tA+xSWQ==", "dependencies": { - "@agent-relay/config": "8.1.2", + "@agent-relay/config": "8.3.0", "@aws-sdk/client-s3": "3.1020.0", "ignore": "^7.0.5", "tar": "^7.5.10" @@ -219,46 +219,56 @@ } }, "node_modules/@agent-relay/config": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/config/-/config-8.1.2.tgz", - "integrity": "sha512-lR5GTUsIuKBh0Wu2bz6qLd/a9Bkd855PLMExBN/0luLgUrzLRFIfdAV5jP0szeOvpmG2MTNkiI0K92/oTrma7w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/config/-/config-8.3.0.tgz", + "integrity": "sha512-uQKAz5NlK+tv6YHyPvOy4MP7Qe+TJ3NkjL1AcvySC/RNo49TifGRSqn4xHUCnbPNRzqmA7v/Ax8EtV8YaNmrzg==", "dependencies": { "zod": "^3.23.8", "zod-to-json-schema": "^3.23.1" } }, "node_modules/@agent-relay/harness-driver": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/harness-driver/-/harness-driver-8.1.2.tgz", - "integrity": "sha512-Fiy1OswaTOZoVRvLJlrggXLJibbLUKuP/1s4JQ+joflDo0DAGC8KK6I9Im+cvRVK8DdTDI3RVFppVcV3aO5Hug==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/harness-driver/-/harness-driver-8.3.0.tgz", + "integrity": "sha512-oxXcdMlaPqiKZsWJroFHHcSzlutsojSfkBh9WV3r2xL8QWocvA9Pq9m8gSC2Ja5Ilg9EtOIG7u/p7vbgxmH1BQ==", "license": "Apache-2.0", "dependencies": { - "@agent-relay/sdk": "8.1.2", + "@agent-relay/sdk": "8.3.0", "ws": "^8.18.3", "zod": "^3.23.8" }, "optionalDependencies": { - "@agent-relay/broker-darwin-arm64": "8.1.2", - "@agent-relay/broker-darwin-x64": "8.1.2", - "@agent-relay/broker-linux-arm64": "8.1.2", - "@agent-relay/broker-linux-x64": "8.1.2", - "@agent-relay/broker-win32-x64": "8.1.2" + "@agent-relay/broker-darwin-arm64": "8.3.0", + "@agent-relay/broker-darwin-x64": "8.3.0", + "@agent-relay/broker-linux-arm64": "8.3.0", + "@agent-relay/broker-linux-x64": "8.3.0", + "@agent-relay/broker-win32-x64": "8.3.0" + } + }, + "node_modules/@agent-relay/harnesses": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/harnesses/-/harnesses-8.3.0.tgz", + "integrity": "sha512-9MtRyVItUPS5/UolTDTZmyx0NOc5ZAJe6l2Xy1qsMS621pj1tM0rzPl/gK+2q4usmYyE3CkZ5WkQUeAvbvaifg==", + "license": "Apache-2.0", + "dependencies": { + "@agent-relay/harness-driver": "8.3.0", + "@agent-relay/sdk": "8.3.0" } }, "node_modules/@agent-relay/sdk": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/sdk/-/sdk-8.1.2.tgz", - "integrity": "sha512-a3JM/AtfXcL0Jg6E7GdFwnQjYiG6He0DNt/seC8Q5Uf5JAxOoRIH6JxIH7CNjJqcnfIjOlNJJbqHEeXgr4rJhg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/sdk/-/sdk-8.3.0.tgz", + "integrity": "sha512-AiY7TMvKhtIH7AlCL6XCyJY6b0Nu7Eh65cswP6bpckxG3pst/5XGZTbRvoyXbyniqcJzlM/oB/wuEyEQi4J7yw==", "dependencies": { "@relaycast/sdk": "^2.5.1" } }, "node_modules/@agent-relay/utils": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@agent-relay/utils/-/utils-8.1.2.tgz", - "integrity": "sha512-YdoL68u2SYfhuNEw12Ri8gZJ1fqGv2zF5Yv1Y5tYkK5UpO750UPgMB80OJdLCZKKaKvtVPVE7onWJ5P8+s/ESA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@agent-relay/utils/-/utils-8.3.0.tgz", + "integrity": "sha512-skkEuYfcEhSJEdN0lYQkrxNO/8EswA63o/QgDrDaulAezXmUZMeGPhjUy2SYROLZxohb5z+KDfRz0LsNeyaVfA==", "dependencies": { - "@agent-relay/config": "8.1.2", + "@agent-relay/config": "8.3.0", "compare-versions": "^6.1.1" } }, @@ -1406,6 +1416,42 @@ "node": ">=6.9.0" } }, + "node_modules/@clack/core": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", + "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", + "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "license": "MIT", + "dependencies": { + "@clack/core": "^0.3.3", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@daytona/api-client": { "version": "0.179.0", "resolved": "https://registry.npmjs.org/@daytona/api-client/-/api-client-0.179.0.tgz", @@ -4903,6 +4949,103 @@ "node": ">=18" } }, + "node_modules/@relayflows/browser-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@relayflows/browser-primitive/-/browser-primitive-1.0.1.tgz", + "integrity": "sha512-GHjIWI0i2SdgrE6cxn0xAJWUTwSxeYp4nm6whxSZ1an8DrF5kvGnyokuuaLRV86LGwiLo9hBmOyt+Ml5r7fbBA==", + "dependencies": { + "@agent-relay/sdk": "^8.2.0", + "playwright": "^1.51.1" + }, + "bin": { + "agent-relay-browser-mcp": "dist/mcp-server.js" + } + }, + "node_modules/@relayflows/cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@relayflows/cli/-/cli-1.0.1.tgz", + "integrity": "sha512-qc14FODCSP5jCs5GsWTYyJ8qPDtM3Ax4qF8nfPB7ixpoFRk+h3BnlklGSo3Aba5T5oxY+FDRnJzbl/olbwn6EA==", + "dependencies": { + "@relayflows/core": "1.0.1", + "commander": "^12.1.0" + }, + "bin": { + "relayflows": "dist/cli.js" + } + }, + "node_modules/@relayflows/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@relayflows/core/-/core-1.0.1.tgz", + "integrity": "sha512-AqlzwmiirwjmB96tZLQQApjNwHV10OemJPWoHj4YIWe9vR7cD9kT3UHaQ8qTFMrHlfbcM+qujErUBYwtKMM9Rg==", + "dependencies": { + "@agent-relay/cloud": "^8.2.0", + "@agent-relay/config": "^8.2.0", + "@agent-relay/harness-driver": "^8.2.0", + "@agent-relay/harnesses": "^8.2.0", + "@agent-relay/sdk": "^8.2.0", + "@relaycast/sdk": "^1.1.0", + "@relayfile/sdk": "^0.8.0", + "@relayflows/browser-primitive": "1.0.1", + "@relayflows/github-primitive": "1.0.1", + "@relayflows/slack-primitive": "1.0.1", + "@sinclair/typebox": "^0.34.48", + "agent-trajectories": "^0.6.0", + "chalk": "^4.1.2", + "ignore": "^7.0.5", + "listr2": "^10.2.1", + "strip-ansi": "^7.2.0", + "yaml": "^2.7.0", + "zod": "^3.23.8" + } + }, + "node_modules/@relayflows/core/node_modules/@relaycast/sdk": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@relaycast/sdk/-/sdk-1.2.0.tgz", + "integrity": "sha512-/tBN0Up1X+MMQzyyUq9jNSkoTuPtRWcfno3t5iO8PBCJkE9+b89RY+6SxcmII9+8EjlEgMb3xqYey414wDuwTQ==", + "dependencies": { + "@relaycast/types": "1.2.0", + "zod": "^4.3.6" + } + }, + "node_modules/@relayflows/core/node_modules/@relaycast/sdk/node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@relayflows/core/node_modules/@relaycast/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@relaycast/types/-/types-1.2.0.tgz", + "integrity": "sha512-ZgnK3VN6RkE2/P+eDRmcr6f4N66yTELT3PHk4ZjIKlmZBL0vgwCZCKC4ZxJrEkcaOPWP4bx3LpajSIKWke6kYA==", + "dependencies": { + "zod": "^4.3.6" + } + }, + "node_modules/@relayflows/core/node_modules/@relaycast/types/node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@relayflows/github-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@relayflows/github-primitive/-/github-primitive-1.0.1.tgz", + "integrity": "sha512-kWOXeZUiVrqooOYNGZaRExPU5tW4DlnG5eOvVKhjdQ71a0c8G+8AqC7GqYlXDeHyzjY89Owubg7ii1wakQdDUg==" + }, + "node_modules/@relayflows/slack-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@relayflows/slack-primitive/-/slack-primitive-1.0.1.tgz", + "integrity": "sha512-OWoj7CR8xRGhjmIL4hbkw9NQf8wCdEElfYApDWMt1N18U0646k1Uac8SQ2GB6bEVMS3YygI692D9SMvN8x7kbw==", + "dependencies": { + "@slack/web-api": "^7.16.0" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -5391,6 +5534,12 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, + "node_modules/@sinclair/typebox": { + "version": "0.34.49", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", + "license": "MIT" + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -5404,6 +5553,53 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@slack/logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.1.tgz", + "integrity": "sha512-6cmdPrV/RYfd2U0mDGiMK8S7OJqpCTm7enMLRR3edccsPX8j7zXTLnaEF4fhxxJJTAIOil6+qZrnUPTuaLvwrQ==", + "license": "MIT", + "dependencies": { + "@types/node": ">=18" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/types": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.21.1.tgz", + "integrity": "sha512-I8vmSjNYWsaxuWPx6dz4yeh0h7vRBWbgAMK14LEmblbZ404BtrPbXs6jDPx4cYgGf8msDGF4A9opLZBu21FViQ==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-7.16.0.tgz", + "integrity": "sha512-68SAV77uuGKuhyyaRytX8UijVnqSLsTSKslGXw17cjQYXn+jtNl7gbaEjHgC5x2rhCuFdahBrEC2VCLppbzReg==", + "license": "MIT", + "dependencies": { + "@slack/logger": "^4.0.1", + "@slack/types": "^2.21.0", + "@types/node": ">=18", + "@types/retry": "0.12.0", + "axios": "^1.16.0", + "eventemitter3": "^5.0.1", + "form-data": "^4.0.4", + "is-electron": "2.2.2", + "is-stream": "^2", + "p-queue": "^6", + "p-retry": "^4", + "retry": "^0.13.1" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, "node_modules/@smithy/config-resolver": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.5.3.tgz", @@ -6418,7 +6614,6 @@ "version": "24.12.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -6466,6 +6661,12 @@ "@types/node": "*" } }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -6719,488 +6920,48 @@ } }, "node_modules/agent-relay": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/agent-relay/-/agent-relay-8.1.2.tgz", - "integrity": "sha512-iUTMKPazxb7uViT+0uKFgjbR/jFL4PkA6naCYjGEOBXPItKtfBCf1RJuixIF4z2zD++twz/jI1erm7Mh28wf1w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/agent-relay/-/agent-relay-8.3.0.tgz", + "integrity": "sha512-AJnrfRbLkcOhV49HxPg8gI07yoP81roKhSBP5Vzj5OaWwAICRoxGplpfYJAyF6a1f3c+nW4fNSRFkmaNBEsvmQ==", "license": "Apache-2.0", - "dependencies": { - "@agent-relay/cloud": "8.1.2", - "@agent-relay/config": "8.1.2", - "@agent-relay/harness-driver": "8.1.2", - "@agent-relay/sdk": "8.1.2", - "@agent-relay/utils": "8.1.2", - "@modelcontextprotocol/sdk": "^1.0.0", - "@relaycast/sdk": "^2.5.1", - "@xterm/headless": "^6.0.0", - "commander": "^12.1.0", - "dotenv": "^17.2.3", - "esbuild": "^0.27.2", - "posthog-node": "^5.29.2", - "zod": "^3.23.8" - }, - "bin": { - "agent-relay": "dist/cli/index.js", - "relay": "dist/cli/index.js" - }, - "engines": { - "node": ">=20.9.0" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/agent-relay/node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@agent-relay/cloud": "8.3.0", + "@agent-relay/config": "8.3.0", + "@agent-relay/harness-driver": "8.3.0", + "@agent-relay/sdk": "8.3.0", + "@agent-relay/utils": "8.3.0", + "@modelcontextprotocol/sdk": "^1.0.0", + "@relaycast/sdk": "^2.5.1", + "@relayflows/cli": "^1.0.1", + "@xterm/headless": "^6.0.0", + "commander": "^12.1.0", + "dotenv": "^17.2.3", + "posthog-node": "^5.29.2", + "zod": "^3.23.8" + }, + "bin": { + "agent-relay": "dist/cli/index.js", + "relay": "dist/cli/index.js" + }, "engines": { - "node": ">=18" + "node": ">=20.9.0" } }, - "node_modules/agent-relay/node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "hasInstallScript": true, + "node_modules/agent-trajectories": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/agent-trajectories/-/agent-trajectories-0.6.1.tgz", + "integrity": "sha512-say+2qK1+g7Y2Kt5NphP/+NzPPKjVcemHbFFpK8kY1zK3/X+w+EhBagq2zEcEm5le/AMGdmIJyhHphzfmIgXuQ==", "license": "MIT", + "dependencies": { + "@clack/prompts": "^0.7.0", + "commander": "^12.0.0", + "zod": "^3.23.0" + }, "bin": { - "esbuild": "bin/esbuild" + "trail": "dist/cli/index.js" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "node": ">=20.0.0" } }, "node_modules/agentworkforce": { @@ -7313,6 +7074,21 @@ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -7993,7 +7769,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -8145,6 +7920,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -9176,6 +8967,12 @@ "node": ">= 4.0.0" } }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -9247,6 +9044,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -10110,7 +9919,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10590,6 +10398,12 @@ "node": ">= 0.10" } }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -10599,6 +10413,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -10638,6 +10467,18 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-unicode-supported": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", @@ -11090,6 +10931,22 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/listr2": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", + "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, "node_modules/lodash": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", @@ -11143,6 +11000,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -11867,6 +11805,15 @@ "node": ">=8" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -11883,6 +11830,53 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -12026,7 +12020,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -12050,6 +12043,50 @@ "node": ">=16.20.0" } }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", @@ -12555,6 +12592,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -12565,6 +12611,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -13013,6 +13065,40 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -13230,7 +13316,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -13525,7 +13610,6 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, "license": "MIT" }, "node_modules/unidiff": { @@ -13876,6 +13960,35 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index d4fa8358..b8d5aa58 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,9 @@ "personas:refresh": "npx --yes agentworkforce install @agentworkforce/persona-autonomous-actor --overwrite" }, "dependencies": { - "@agent-relay/cloud": "^8.1.2", - "@agent-relay/harness-driver": "^8.1.2", - "@agent-relay/sdk": "^8.1.2", + "@agent-relay/cloud": "^8.3.0", + "@agent-relay/harness-driver": "^8.3.0", + "@agent-relay/sdk": "^8.3.0", "@agentworkforce/deploy": "^3.0.50", "@relayburn/sdk": "^3.2.0", "@relayfile/sdk": "^0.8.14", @@ -36,7 +36,7 @@ "@xterm/addon-webgl": "^0.18.0", "@xterm/xterm": "^5.5.0", "@xyflow/react": "^12.4.0", - "agent-relay": "^8.1.2", + "agent-relay": "^8.3.0", "agentworkforce": "^3.0.50", "ai-hist": "^0.2.3", "allotment": "^1.0.9", diff --git a/src/main/broker.test.ts b/src/main/broker.test.ts index a2eb3d5b..640d9c08 100644 --- a/src/main/broker.test.ts +++ b/src/main/broker.test.ts @@ -16,6 +16,7 @@ type MockClient = { resizePty: ReturnType getPending: ReturnType spawnPty: ReturnType + spawnCli: ReturnType onEvent: ReturnType addListener: ReturnType connectEvents: ReturnType @@ -35,21 +36,28 @@ type MockClient = { const mock = vi.hoisted(() => { function createMockClient(agentNames: string[] = []): MockClient { + const agentRuntimes = new Map() const client: MockClient = { agentNames: [...agentNames], getSession: vi.fn(async () => ({})), - listAgents: vi.fn(async () => client.agentNames.map((name) => ({ name, runtime: 'pty', channels: [] }))), + listAgents: vi.fn(async () => client.agentNames.map((name) => ({ name, runtime: agentRuntimes.get(name) ?? 'pty', channels: [] }))), getInboundDeliveryMode: vi.fn(async () => 'passthrough'), spawnPty: vi.fn(async (input: { name: string }) => { + agentRuntimes.set(input.name, 'pty') client.agentNames.push(input.name) return { name: input.name, runtime: 'pty' } }), + spawnCli: vi.fn(async (input: { name: string }) => { + agentRuntimes.set(input.name, 'headless') + client.agentNames.push(input.name) + return { name: input.name, runtime: 'headless' } + }), setInboundDeliveryMode: vi.fn(async (_name: string, mode: string) => ({ mode, flushed: 0 })), snapshot: vi.fn(async () => ({ rows: 24, cols: 80, cursor: { x: 0, y: 0 }, screen: 'aGVsbG8=' })), resizePty: vi.fn(async () => undefined), getPending: vi.fn(async () => []), getStatus: vi.fn(async () => ({ - agents: client.agentNames.map((name) => ({ name, runtime: 'pty', channels: [] })), + agents: client.agentNames.map((name) => ({ name, runtime: agentRuntimes.get(name) ?? 'pty', channels: [] })), pending_delivery_count: 0 })), onEvent: vi.fn(() => () => undefined), @@ -590,6 +598,30 @@ describe('BrokerManager local + cloud coexistence', () => { await manager.shutdown() }) + it('skips PTY operations when attaching to a headless agent discovered from listAgents', async () => { + const manager = new BrokerManager() + const local = await startLocal(manager, ['headless-agent']) + local.listAgents.mockImplementation(async () => [ + { name: 'headless-agent', runtime: 'headless', channels: [] } + ]) + local.getPending.mockResolvedValueOnce([{ id: 'pending-1' }]) + + const result = await manager.attachTerminal(PROJECT_ID, { name: 'headless-agent', mode: 'drive', rows: 32, cols: 100 }) + + expect(result).toEqual({ + name: 'headless-agent', + mode: 'manual_flush', + previousMode: 'passthrough', + pending: 1, + runtime: 'headless' + }) + expect(local.setInboundDeliveryMode).toHaveBeenCalledWith('headless-agent', 'manual_flush') + expect(local.resizePty).not.toHaveBeenCalled() + expect(local.snapshot).not.toHaveBeenCalled() + + await manager.shutdown() + }) + it('detachCloudSandbox drops only the cloud session', async () => { const manager = new BrokerManager() const local = await startLocal(manager, ['local-agent']) diff --git a/src/main/broker.ts b/src/main/broker.ts index 4c247019..3a1d61cf 100644 --- a/src/main/broker.ts +++ b/src/main/broker.ts @@ -9,6 +9,7 @@ import { HarnessDriverClient as AgentRelayClient, type RuntimeSpawnOptions as AgentRelaySpawnOptions, type SpawnPtyInput, + type SpawnCliInput, type SendMessageInput, type BrokerEvent, type BrokerStatus, @@ -41,6 +42,12 @@ import { resolvePackageBin } from './mcp-command' +type KnownAgentRuntime = 'pty' | 'headless' + +function normalizeAgentRuntime(runtime: unknown): KnownAgentRuntime | undefined { + return runtime === 'pty' || runtime === 'headless' ? runtime : undefined +} + function isShellLikeCommand(cli: string): boolean { const normalized = basename(cli).toLowerCase() return ['shell', 'sh', 'bash', 'zsh', 'fish', 'nu', 'nushell', 'pwsh', 'powershell'].includes(normalized) @@ -322,6 +329,7 @@ export interface AttachTerminalResult { mode: InboundDeliveryMode previousMode?: InboundDeliveryMode pending: number + runtime?: 'pty' | 'headless' snapshot?: { rows: number cols: number @@ -1182,6 +1190,7 @@ export class BrokerManager { // so agent names are project-unique in practice — the set tracks which // session actually owns the worker so agent-scoped calls route correctly. private agentSessions = new Map>() + private agentRuntimes = new Map() private inputStreams = new Map() private inputStreamFallbacks = new Set() private inputStreamFallbackRetryAt = new Map() @@ -2037,12 +2046,16 @@ export class BrokerManager { if (event.kind === 'agent_spawned' && event.name) { this.rememberAgentSession(event.name, sessionKey) + if ('runtime' in event && (event.runtime === 'pty' || event.runtime === 'headless')) { + this.agentRuntimes.set(this.getAgentRuntimeKey(sessionKey, event.name), event.runtime) + } if (event.parent) { void this.handleSpawnedChildLineage(sessionKey, event) } } else if (event.kind === 'agent_exit' && event.name) { this.closeInputStream(this.getInputStreamKey(sessionKey, event.name), 1000, 'agent closed') this.forgetAgentSession(event.name, sessionKey) + this.agentRuntimes.delete(this.getAgentRuntimeKey(sessionKey, event.name)) void client.release(event.name, 'agent exit').catch((err) => { if (!isMissingAgentError(err)) { console.warn(`[broker] Failed to release exited agent ${event.name}:`, err) @@ -2051,6 +2064,7 @@ export class BrokerManager { } else if ((event.kind === 'agent_exited' || event.kind === 'agent_released') && event.name) { this.closeInputStream(this.getInputStreamKey(sessionKey, event.name), 1000, 'agent closed') this.forgetAgentSession(event.name, sessionKey) + this.agentRuntimes.delete(this.getAgentRuntimeKey(sessionKey, event.name)) } else if ('name' in event && typeof event.name === 'string') { this.rememberAgentSession(event.name, sessionKey) } else if ('from' in event && typeof event.from === 'string') { @@ -2184,6 +2198,12 @@ export class BrokerManager { this.agentSessions.set(name, sessionKeys) } + private rememberAgentRuntime(sessionKey: string, agent: Pick): void { + if (agent.runtime === 'pty' || agent.runtime === 'headless') { + this.agentRuntimes.set(this.getAgentRuntimeKey(sessionKey, agent.name), agent.runtime) + } + } + private forgetAgentSession(name: string, sessionKey: string): void { const sessionKeys = this.agentSessions.get(name) if (!sessionKeys) return @@ -2193,6 +2213,10 @@ export class BrokerManager { } } + private getAgentRuntimeKey(sessionKey: string, name: string): string { + return `${sessionKey}:${name}` + } + private getInputStreamKey(sessionKey: string, name: string): string { return `${sessionKey}:${name}` } @@ -2300,6 +2324,9 @@ export class BrokerManager { for (const key of Array.from(this.inputStreamReady)) { if (key.startsWith(prefix)) this.inputStreamReady.delete(key) } + for (const key of Array.from(this.agentRuntimes.keys())) { + if (key.startsWith(prefix)) this.agentRuntimes.delete(key) + } } async spawnAgent( @@ -2376,8 +2403,22 @@ export class BrokerManager { nextInput.cli ) } - const spawned = await session.client.spawnPty(nextInput) + // Claude and Codex expose structured output streams; run them headless + // so relay reads the app-server/stream-json channel instead of a PTY. + // worker_stream chunks still flow to broker:pty-chunk → xterm for V1. + const useHeadless = !shellSession && ['claude', 'codex'].includes(spawnCliLabel(nextInput.cli)) + const headlessClient = session.client as AgentRelayClient & { + spawnCli(input: SpawnCliInput): Promise<{ name: string; runtime: string }> + } + const spawned = useHeadless + ? await headlessClient.spawnCli({ ...nextInput, transport: 'headless' } as SpawnCliInput) + : await session.client.spawnPty(nextInput) const spawnedName = spawned.name || nextInput.name + const resolvedRuntime: 'pty' | 'headless' = + spawned.runtime === 'headless' || (useHeadless && !spawned.runtime) ? 'headless' : 'pty' + // Set immediately using the composite key so attachTerminal's lookup + // hits before the async agent_spawned event fires. + this.agentRuntimes.set(this.getAgentRuntimeKey(sessionKeyFor(session), spawnedName), resolvedRuntime) this.rememberAgentSession(spawnedName, sessionKeyFor(session)) const burnInput = { ...nextInput, name: spawnedName } const lineage = session.pearLineage.get(spawnedName) @@ -2393,12 +2434,7 @@ export class BrokerManager { ).catch((err) => { console.warn('[burn-spawn-hook] post-spawn burn stamp failed:', err) }) - return { - name: spawnedName, - runtime: typeof spawned.runtime === 'string' && spawned.runtime.trim() - ? spawned.runtime - : 'pty' - } + return { name: spawnedName, runtime: resolvedRuntime } } catch (err) { if (!isAgentNameConflict(err)) { throw buildSpawnFailureError(err, nextInput, session.cloudSandboxId ? 'cloud' : 'local') @@ -2536,7 +2572,11 @@ export class BrokerManager { while (Date.now() < deadline) { try { const agents = await session.client.listAgents() - if (agents.some((agent) => agent.name === name)) return true + const agent = agents.find((candidate) => candidate.name === name) + if (agent) { + this.rememberAgentRuntime(sessionKeyFor(session), agent) + return true + } } catch { // Transient broker errors during the wait are fine — keep polling // until the deadline; if the broker is genuinely down the downstream @@ -2568,8 +2608,11 @@ export class BrokerManager { while (Date.now() < deadline) { for (const candidate of candidates) { const agents = await candidate.client.listAgents().catch(() => null) - if (agents?.some((agent) => agent.name === name)) { - this.rememberAgentSession(name, sessionKeyFor(candidate)) + const agent = agents?.find((candidateAgent) => candidateAgent.name === name) + if (agent) { + const sessionKey = sessionKeyFor(candidate) + this.rememberAgentSession(name, sessionKey) + this.rememberAgentRuntime(sessionKey, agent) return { session: candidate, registered: true } } } @@ -2723,14 +2766,16 @@ export class BrokerManager { // session history first and can take 10+ seconds to register. const { session, registered } = await this.locateSessionForAgent(name, projectId) const client = session.client + const sessionKey = sessionKeyFor(session) // A re-attach (window reload, restart, tab re-open) is a fresh start for // this terminal — clear any stale HTTP-only fallback so the WS fast path // gets retried instead of being stuck on HTTP for the agent's lifetime. - this.resetInputStreamFallback(this.getInputStreamKey(sessionKeyFor(session), name)) + this.resetInputStreamFallback(this.getInputStreamKey(sessionKey, name)) if (!registered) { console.warn(`[broker] attachTerminal: ${name} did not appear in listAgents within wait window; falling through to per-call retry`) } const mode = toInboundDeliveryMode(input.mode) + const isHeadless = this.agentRuntimes.get(this.getAgentRuntimeKey(sessionKey, name)) === 'headless' let previousMode: InboundDeliveryMode | undefined try { @@ -2743,6 +2788,14 @@ export class BrokerManager { // queue mode while human terminal input continues to go through sendInput. await this.withAgentMissingRetry('setInboundDeliveryMode', name, () => client.setInboundDeliveryMode(name, mode)) + // Headless agents (app-server based) have no PTY — skip resize and snapshot. + if (isHeadless) { + const pending = mode === 'manual_flush' + ? await this.withAgentMissingRetry('getPending', name, () => client.getPending(name)).then((messages) => messages.length).catch(() => 0) + : 0 + return { name, mode, previousMode, pending, runtime: 'headless' } + } + let resizedBeforeSnapshot = false if (isPositiveInteger(input.rows) && isPositiveInteger(input.cols)) { try { @@ -3254,6 +3307,7 @@ export class BrokerManager { const sessionKey = sessionKeyFor(session) for (const agent of agents) { this.rememberAgentSession(agent.name, sessionKey) + this.rememberAgentRuntime(sessionKey, agent) } const brokerKind = session.cloudSandboxId ? ('cloud' as const) : ('local' as const) return Promise.all( diff --git a/src/renderer/src/components/terminal/TerminalPane.tsx b/src/renderer/src/components/terminal/TerminalPane.tsx index 7aa8a088..f7807870 100644 --- a/src/renderer/src/components/terminal/TerminalPane.tsx +++ b/src/renderer/src/components/terminal/TerminalPane.tsx @@ -1079,8 +1079,12 @@ export function TerminalPane(): React.ReactNode { return (
()(subscribeWithSelector((set, ge ...agent, cli: liveAgent.cli || agent.cli, model: liveAgent.model || agent.model, + runtime: liveAgent.runtime ?? agent.runtime, + sessionId: liveAgent.sessionId ?? agent.sessionId, status: 'running' as const, currentState, activity: activityFromCurrentState(currentState), @@ -592,6 +600,8 @@ export const useAgentStore = create()(subscribeWithSelector((set, ge name: liveAgent.name, cli: liveAgent.cli || 'unknown', model: liveAgent.model, + runtime: liveAgent.runtime, + sessionId: liveAgent.sessionId, status: 'running', activity: activityFromCurrentState(currentState), currentState, @@ -706,6 +716,7 @@ export const useAgentStore = create()(subscribeWithSelector((set, ge const channels = normalizeChannelList(event.channels) const existingAgent = state.agents.find((a) => matchesAgent(a, projectId, event.name!)) const existingChannels = existingAgent?.channels || [] + const runtime = normalizeAgentRuntime(event.runtime) const notices = channels ? channels .filter((channel) => !existingChannels.includes(channel)) @@ -721,6 +732,7 @@ export const useAgentStore = create()(subscribeWithSelector((set, ge ...a, cli: event.cli || a.cli, model: event.model || a.model, + runtime: runtime ?? a.runtime, status: 'running', activity: activityFromCurrentState(currentState), currentState, @@ -739,6 +751,7 @@ export const useAgentStore = create()(subscribeWithSelector((set, ge name: event.name!, cli: event.cli || 'unknown', model: event.model, + runtime, status: 'running', activity: activityFromCurrentState(currentState), currentState, diff --git a/src/shared/types/ipc.ts b/src/shared/types/ipc.ts index 19516bb9..1f554ac9 100644 --- a/src/shared/types/ipc.ts +++ b/src/shared/types/ipc.ts @@ -250,7 +250,8 @@ export interface BrokerEventStreamDiagnostic { export interface BrokerListAgent { name: string projectId: string - runtime?: string + runtime?: 'pty' | 'headless' + sessionId?: string cli?: string model?: string channels?: string[] @@ -369,6 +370,7 @@ export interface BrokerAttachTerminalResult { mode: InboundDeliveryMode previousMode?: InboundDeliveryMode pending: number + runtime?: 'pty' | 'headless' snapshot?: { rows: number cols: number