Skip to content

Instantly share code, notes, and snippets.

@drewstone
Created March 15, 2025 19:49
Show Gist options
  • Select an option

  • Save drewstone/491ba2e497e35ac119d0a82f5ce070ce to your computer and use it in GitHub Desktop.

Select an option

Save drewstone/491ba2e497e35ac119d0a82f5ce070ce to your computer and use it in GitHub Desktop.
cargo t test_deploy_agent_tee -- --nocapture
Compiling coinbase-agent-kit-blueprint v0.1.0 (/Users/drew/webb/coinbase-agent-kit-blueprint)
Finished `test` profile [unoptimized + debuginfo] target(s) in 5.36s
Running unittests src/lib.rs (target/debug/deps/coinbase_agent_kit_blueprint-28e0891cfb14f1ad)
running 1 test
[21:49:02.867] Starting TEE agent deployment test
[21:49:02.868] Creating agent with TEE enabled
INFO gadget: Creating agent with ID: 13e5e695-8ec6-4f25-a896-337b15161363
INFO gadget: Template files copied successfully to agent directory
INFO gadget: Created agent directory: /var/folders/wk/qcfly3h940s4cfmlpxbyf21w0000gn/T/.tmphXdQxg/13e5e695-8ec6-4f25-a896-337b15161363
INFO gadget: Created environment configuration
INFO gadget: Registered agent 13e5e695-8ec6-4f25-a896-337b15161363 with ports HTTP:3000, WS:3001
INFO gadget: Initializing TeeDeployer for public key retrieval
INFO gadget: Discovering available TEEPods...
πŸ” Discovering available TEEPods...
Requesting TEEPods from: https://cloud-api.phala.network/api/v1/teepods/available
βœ… TEEPod discovered: ID 2 with image dstack-0.3.5
INFO gadget: Requesting encryption public key with VM Config: Object {
"advanced_features": Object {
"docker_config": Object {
"password": String(""),
"registry": Null,
"username": String(""),
},
"kms": Bool(true),
"listed": Bool(true),
"public_logs": Bool(true),
"public_sys_info": Bool(true),
"tproxy": Bool(true),
},
"compose_manifest": Object {
"docker_compose_file": String("version: '3.8'\nservices:\n agent:\n build:\n context: .\n dockerfile: Dockerfile\n container_name: ${CONTAINER_NAME:-coinbase-agent}\n ports:\n - ${PORT:-3000}:3000\n - ${WEBSOCKET_PORT:-3001}:3001\n environment:\n - AGENT_MODE=${AGENT_MODE:-http}\n - CDP_API_KEY_NAME=${CDP_API_KEY_NAME}\n - CDP_API_KEY_PRIVATE_KEY=${CDP_API_KEY_PRIVATE_KEY}\n - LOG_LEVEL=${LOG_LEVEL:-debug}\n - MODEL=${MODEL:-gpt-4o-mini}\n - NODE_ENV=${NODE_ENV:-development}\n - OPENAI_API_KEY=${OPENAI_API_KEY}\n - PORT=${PORT:-3000}\n - WEBSOCKET_PORT=${WEBSOCKET_PORT:-3001}\n - WEBSOCKET_URL=${WEBSOCKET_URL}\n volumes:\n - ./.env:/app/.env:ro\n command: sh -c \"yarn install && yarn dev\"\n restart: unless-stopped\n healthcheck:\n test:\n - CMD\n - curl\n - -f\n - http://localhost:${PORT:-3000}/health\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 10s\n"),
"features": Array [
String("kms"),
String("tproxy-net"),
],
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
},
"disk_size": Number(10),
"image": String("dstack-0.3.5"),
"memory": Number(2048),
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
"teepod_id": Number(2),
"vcpu": Number(2),
}
INFO gadget: Successfully obtained TEE public key
[21:49:04.033] Created agent with ID: 13e5e695-8ec6-4f25-a896-337b15161363
[21:49:04.033] Preparing encrypted environment variables
Encrypting environment variables
[21:49:04.037] Deploying agent to TEE with encrypted environment
INFO gadget: Deploying agent to TEE with normalized Docker compose YAML
INFO gadget: Initializing TeeDeployer for deployment
INFO gadget: Discovering available TEEPods...
πŸ” Discovering available TEEPods...
Requesting TEEPods from: https://cloud-api.phala.network/api/v1/teepods/available
βœ… TEEPod discovered: ID 2 with image dstack-0.3.5
INFO gadget: Creating VM configuration from Docker Compose
INFO gadget: Deploying agent to TEE with VM configuration: Object {
"advanced_features": Object {
"docker_config": Object {
"password": String(""),
"registry": Null,
"username": String(""),
},
"kms": Bool(true),
"listed": Bool(true),
"public_logs": Bool(true),
"public_sys_info": Bool(true),
"tproxy": Bool(true),
},
"compose_manifest": Object {
"docker_compose_file": String("version: '3.8'\nservices:\n agent:\n build:\n context: .\n dockerfile: Dockerfile\n container_name: ${CONTAINER_NAME:-coinbase-agent}\n ports:\n - ${PORT:-3000}:3000\n - ${WEBSOCKET_PORT:-3001}:3001\n environment:\n - AGENT_MODE=${AGENT_MODE:-http}\n - CDP_API_KEY_NAME=${CDP_API_KEY_NAME}\n - CDP_API_KEY_PRIVATE_KEY=${CDP_API_KEY_PRIVATE_KEY}\n - LOG_LEVEL=${LOG_LEVEL:-debug}\n - MODEL=${MODEL:-gpt-4o-mini}\n - NODE_ENV=${NODE_ENV:-development}\n - OPENAI_API_KEY=${OPENAI_API_KEY}\n - PORT=${PORT:-3000}\n - WEBSOCKET_PORT=${WEBSOCKET_PORT:-3001}\n - WEBSOCKET_URL=${WEBSOCKET_URL}\n volumes:\n - ./.env:/app/.env:ro\n command: sh -c \"yarn install && yarn dev\"\n restart: unless-stopped\n healthcheck:\n test:\n - CMD\n - curl\n - -f\n - http://localhost:${PORT:-3000}/health\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 10s\n"),
"features": Array [
String("kms"),
String("tproxy-net"),
],
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
},
"disk_size": Number(10),
"image": String("dstack-0.3.5"),
"memory": Number(2048),
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
"teepod_id": Number(2),
"vcpu": Number(2),
}
INFO gadget: Requesting encryption public key...
INFO gadget: Deploying agent to TEE with encrypted environment variables
request_body: {
"advanced_features": Object {
"docker_config": Object {
"password": String(""),
"registry": Null,
"username": String(""),
},
"kms": Bool(true),
"listed": Bool(true),
"public_logs": Bool(true),
"public_sys_info": Bool(true),
"tproxy": Bool(true),
},
"app_env_encrypt_pubkey": String("b96a45c8f88b32cc53e07af476e09743782c76c55717eb26212a819d6ad7ee6a"),
"app_id_salt": String("ce4dc6cd-c870-4cfd-ba8d-c9ab07a20f65"),
"compose_manifest": Object {
"docker_compose_file": String("version: '3.8'\nservices:\n agent:\n build:\n context: .\n dockerfile: Dockerfile\n container_name: ${CONTAINER_NAME:-coinbase-agent}\n ports:\n - ${PORT:-3000}:3000\n - ${WEBSOCKET_PORT:-3001}:3001\n environment:\n - AGENT_MODE=${AGENT_MODE:-http}\n - CDP_API_KEY_NAME=${CDP_API_KEY_NAME}\n - CDP_API_KEY_PRIVATE_KEY=${CDP_API_KEY_PRIVATE_KEY}\n - LOG_LEVEL=${LOG_LEVEL:-debug}\n - MODEL=${MODEL:-gpt-4o-mini}\n - NODE_ENV=${NODE_ENV:-development}\n - OPENAI_API_KEY=${OPENAI_API_KEY}\n - PORT=${PORT:-3000}\n - WEBSOCKET_PORT=${WEBSOCKET_PORT:-3001}\n - WEBSOCKET_URL=${WEBSOCKET_URL}\n volumes:\n - ./.env:/app/.env:ro\n command: sh -c \"yarn install && yarn dev\"\n restart: unless-stopped\n healthcheck:\n test:\n - CMD\n - curl\n - -f\n - http://localhost:${PORT:-3000}/health\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 10s\n"),
"features": Array [
String("kms"),
String("tproxy-net"),
],
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
},
"disk_size": Number(10),
"encrypted_env": String("9b5d54a78c9864af1ce0695907bec13d2a31faccd91a8209dd4e6531362c846ca3b60bbff14a2258c26560210267f314b847376f6676eecbad678060ad81c9912beae243481a3d8037356ddd9d866255a00b90c50bb1941d729c5a22f957d4910fe151415216c8b9cf095c3cd2d9c532806f321eb1ba37b890823b4515f35c575b04a2394c826982afd074831d25b387ab64af5332dc04078c97b03e34c05b2236a06b72276dcfd9245aa65c5f74026bea32c9aafa1fd4077cee08bb7e53a9fa16a7013fa9c66766473a10f106b41005fca06a7c448dfcc4666dfef8002203a2171b36063f7dc925da5db042200b1669ad6c058a6ace8e328d3e99933b5cf6a213c93efb6fb7852a7a5a4e2284605e7de477a1cb46b69e9956d1e4defc5724ffce44c6754fa1eac5ce9dce2c41110cbe2c57064ccc678724558781866c31d7d11717dfc394e1e7286c98469b2cb1edd85f1bfe32ef16076edbeaceaaba3960d6308b2aa98c0956de21b7ff49536858304adb056d4bb6e144f37cfedad0cfddee0a2599e43fb8d6bd38f80e2fff405f2b0ce4fcd7e12b898a0b8622069b9b037eee22bf681c99ae93448490f648eb1a15c37454e2bef30b1f43ad0063c961a65a5f224243717ced3c19dd4f5bf2c9dbe74a9ffb6e1587912032458f3d1416584ef716531e86d03296685daabba2f567a42603d597faaa36ae0c7449d98a6493c475e4bd7e0aceb79839ed43d9ceadd8c47ffed6253514edb2f3903965c831cbc019be0d6ffd629e528a6888e4f13f3334f436413e98239c71c2c44795ce43ecd56473f18969f68f76a6e311dc8903ab06937abfd77fdbb500fa5a8bf729383ed32b805056aafc2b67f6105a2963edfe819c2f62fa1c7b59939f9533492d57b6052044ba9ae87284b557775fd93fc08956f222e964aafb5b4ad6a64b57d61449fc1d869638062f31a7b3a22618acfd32e1840b783432e9a4727bd0fb6bb588f737408520b5bbc48e563bc606cc12506082e44486ea79795646682d489f08d8a671b5671db1c854747d3ac34bad462abd0904d4f71c5b717f86a64c3ff0cbd1683e46795b3f6c00c9837864538b8b07be76b970c1b34f5da128ce64e01cc08d17e9b624d5297f1fbd3e910931f613f41aa6efde598335d5c81f605ed07ee1483ca6ce751ffc5e32683812f4a83587421d119674b5b2833f8bbbd31e4a2c93eab6753166bb4f5a3e03c2c9647d8049c297583ab94742b4f1d0df4936eec53102e062b35b6a4009b3ba3951f0c92ff5694f8beb6fcc5746885529ac51ca3d00c71701e33673781a6381acba0360ef67c076e7ef6ed67d56a1ce53fe3597f8e7ff2556e03c4f995c38b2507c862a48fc5fccebf2108d8fffa642b434235d583b37413dbfe918d35f23034d693f54071bd78c74871c1df2aaec495606d0a47c94a57fa8d90a6c7f29770506b24be3b841008889b9"),
"image": String("dstack-0.3.5"),
"memory": Number(2048),
"name": String("coinbase-agent-13e5e695-8ec6-4f25-a896-337b15161363"),
"teepod_id": Number(2),
"vcpu": Number(2),
}
INFO gadget: TEE deployment completed. Deployment: DeploymentResponse {
id: 3089,
status: "creating",
details: None,
}
[21:49:05.454] Successfully deployed agent to TEE: AgentDeploymentResult { agent_id: "13e5e695-8ec6-4f25-a896-337b15161363", tee_pubkey: Some("b96a45c8f88b32cc53e07af476e09743782c76c55717eb26212a819d6ad7ee6a"), tee_app_id: Some("dda90c4286c951db4854587e50bd091fc09f7201") }
INFO gadget: Health check attempt 1 of 30 for http://localhost:3000
INFO gadget: Sending health check request to: http://localhost:3000/health
WARN gadget: Connection error during health check: error sending request for url (http://localhost:3000/health): error trying to connect: tcp connect error: Connection refused (os error 61)
WARN gadget: Health check attempt 1 failed: Connection error during health check: error sending request for url (http://localhost:3000/health): error trying to connect: tcp connect error: Connection refused (os error 61)
INFO gadget: Waiting 1s before next attempt
^C
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment