From 66d3c0623088f7dd2fce6b18ec30742670c6a8af Mon Sep 17 00:00:00 2001 From: geoffsee <> Date: Fri, 23 May 2025 09:48:26 -0400 Subject: [PATCH] init --- .dockerignore | 10 + .env | 12 + .env.cerebras | 4 + .env.fireworks | 4 + .env.google | 4 + .env.groq | 4 + .env.openai | 4 + .gitignore | 12 + .toak-ignore | 3 + Cargo.lock | 1391 ++++++++++++++ Cargo.toml | 33 + Dockerfile | 88 + Local.Dockerfile | 88 + README.md | 13 + Remote.Dockerfile | 88 + assets/index.html | 62 + bun.lockb | Bin 0 -> 562032 bytes compose.yml | 32 + docs/tokens.md | 77 + fly.toml | 54 + gitleaks-report.json | 1 + package.json | 20 + packages/core/index.ts | 4 + packages/core/market/index.ts | 14 + packages/core/market/types.ts | 48 + packages/core/news/index.ts | 178 ++ packages/core/news/news.test.ts | 75 + packages/core/package.json | 9 + packages/core/portfolio/index.ts | 137 ++ packages/core/quotes/index.ts | 13 + packages/core/quotes/models.ts | 77 + packages/core/quotes/quote.test.ts | 17 + packages/core/quotes/types.ts | 71 + packages/core/types/index.ts | 69 + packages/genaiscript-rust-shim/.gitignore | 175 ++ packages/genaiscript-rust-shim/README.md | 15 + packages/genaiscript-rust-shim/bun.lockb | Bin 0 -> 3144 bytes .../genaiscript-rust-shim.ts | 61 + packages/genaiscript-rust-shim/index.ts | 2 + packages/genaiscript-rust-shim/package.json | 19 + packages/genaiscript-rust-shim/shim-types.ts | 70 + packages/genaiscript-rust-shim/tsconfig.json | 27 + packages/genaiscript/genaisrc/.gitignore | 4 + packages/genaiscript/genaisrc/_state/index.ts | 21 + packages/genaiscript/genaisrc/_state/news.ts | 11 + .../genaiscript/genaisrc/_state/quotes.ts | 7 + packages/genaiscript/genaisrc/agent.genai.mts | 24 + .../genaisrc/deep-research.genai.mts | 281 +++ .../genaisrc/finance-query.genai.mts | 80 + .../genaisrc/image-generator.genai.mts | 11 + .../genaisrc/incubator/firecrawl.genai.mts | 26 + .../genaisrc/news-search.genai.mts | 24 + .../genaisrc/tools/searxng.genai.mts | 18 + .../genaiscript/genaisrc/web-scrape.genai.mts | 88 + .../genaiscript/genaisrc/web-search.genai.mts | 28 + packages/genaiscript/package.json | 28 + packages/perigon/index.ts | 106 ++ packages/perigon/openapi.json | 1629 +++++++++++++++++ packages/perigon/package.json | 12 + packages/perigon/schemas.ts | 5 + packages/perigon/types.ts | 13 + searxng_tester.mts | 29 + src/agents/crypto_market.rs | 28 + src/agents/image_generator.rs | 10 + src/agents/mod.rs | 5 + src/agents/news.rs | 6 + src/agents/scrape.rs | 6 + src/agents/search.rs | 28 + src/config.rs | 30 + src/genaiscript.rs | 90 + src/handlers/error.rs | 17 + src/handlers/mod.rs | 7 + src/handlers/status.rs | 5 + src/handlers/stream.rs | 82 + src/handlers/ui.rs | 34 + src/handlers/webhooks.rs | 261 +++ src/main.rs | 43 + src/routes.rs | 105 ++ src/session_identify.rs | 55 + src/setup.rs | 10 + src/utils/base64.rs | 65 + src/utils/mod.rs | 2 + src/utils/utils.rs | 80 + tsconfig.json | 30 + 84 files changed, 6529 insertions(+) create mode 100644 .dockerignore create mode 100644 .env create mode 100644 .env.cerebras create mode 100644 .env.fireworks create mode 100644 .env.google create mode 100644 .env.groq create mode 100644 .env.openai create mode 100644 .gitignore create mode 100644 .toak-ignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 Dockerfile create mode 100644 Local.Dockerfile create mode 100644 README.md create mode 100644 Remote.Dockerfile create mode 100644 assets/index.html create mode 100755 bun.lockb create mode 100644 compose.yml create mode 100644 docs/tokens.md create mode 100644 fly.toml create mode 100644 gitleaks-report.json create mode 100644 package.json create mode 100644 packages/core/index.ts create mode 100644 packages/core/market/index.ts create mode 100644 packages/core/market/types.ts create mode 100644 packages/core/news/index.ts create mode 100644 packages/core/news/news.test.ts create mode 100644 packages/core/package.json create mode 100644 packages/core/portfolio/index.ts create mode 100644 packages/core/quotes/index.ts create mode 100644 packages/core/quotes/models.ts create mode 100644 packages/core/quotes/quote.test.ts create mode 100644 packages/core/quotes/types.ts create mode 100644 packages/core/types/index.ts create mode 100644 packages/genaiscript-rust-shim/.gitignore create mode 100644 packages/genaiscript-rust-shim/README.md create mode 100755 packages/genaiscript-rust-shim/bun.lockb create mode 100644 packages/genaiscript-rust-shim/genaiscript-rust-shim.ts create mode 100644 packages/genaiscript-rust-shim/index.ts create mode 100644 packages/genaiscript-rust-shim/package.json create mode 100644 packages/genaiscript-rust-shim/shim-types.ts create mode 100644 packages/genaiscript-rust-shim/tsconfig.json create mode 100644 packages/genaiscript/genaisrc/.gitignore create mode 100644 packages/genaiscript/genaisrc/_state/index.ts create mode 100644 packages/genaiscript/genaisrc/_state/news.ts create mode 100644 packages/genaiscript/genaisrc/_state/quotes.ts create mode 100644 packages/genaiscript/genaisrc/agent.genai.mts create mode 100644 packages/genaiscript/genaisrc/deep-research.genai.mts create mode 100644 packages/genaiscript/genaisrc/finance-query.genai.mts create mode 100644 packages/genaiscript/genaisrc/image-generator.genai.mts create mode 100644 packages/genaiscript/genaisrc/incubator/firecrawl.genai.mts create mode 100644 packages/genaiscript/genaisrc/news-search.genai.mts create mode 100644 packages/genaiscript/genaisrc/tools/searxng.genai.mts create mode 100644 packages/genaiscript/genaisrc/web-scrape.genai.mts create mode 100644 packages/genaiscript/genaisrc/web-search.genai.mts create mode 100644 packages/genaiscript/package.json create mode 100644 packages/perigon/index.ts create mode 100644 packages/perigon/openapi.json create mode 100644 packages/perigon/package.json create mode 100644 packages/perigon/schemas.ts create mode 100644 packages/perigon/types.ts create mode 100644 searxng_tester.mts create mode 100644 src/agents/crypto_market.rs create mode 100644 src/agents/image_generator.rs create mode 100644 src/agents/mod.rs create mode 100644 src/agents/news.rs create mode 100644 src/agents/scrape.rs create mode 100644 src/agents/search.rs create mode 100644 src/config.rs create mode 100644 src/genaiscript.rs create mode 100644 src/handlers/error.rs create mode 100644 src/handlers/mod.rs create mode 100644 src/handlers/status.rs create mode 100644 src/handlers/stream.rs create mode 100644 src/handlers/ui.rs create mode 100644 src/handlers/webhooks.rs create mode 100644 src/main.rs create mode 100644 src/routes.rs create mode 100644 src/session_identify.rs create mode 100644 src/setup.rs create mode 100644 src/utils/base64.rs create mode 100644 src/utils/mod.rs create mode 100644 src/utils/utils.rs create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5345600 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +* +!packages/genaiscript/genaisrc +!src +!Cargo.lock +!Cargo.toml +!package.json +!package-lock.json +!assets +!bun.lockb +!packages diff --git a/.env b/.env new file mode 100644 index 0000000..55d33a4 --- /dev/null +++ b/.env @@ -0,0 +1,12 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://api.openai.com/v1" +GENAISCRIPT_MODEL_LARGE="" +GENAISCRIPT_MODEL_SMALL="" +SEARXNG_API_BASE_URL="" +SEARXNG_PASSWORD= + +BING_SEARCH_API_KEY= +PERIGON_API_KEY= +TAVILY_API_KEY= +CCC_API_KEY= +HF_API_KEY= \ No newline at end of file diff --git a/.env.cerebras b/.env.cerebras new file mode 100644 index 0000000..706505e --- /dev/null +++ b/.env.cerebras @@ -0,0 +1,4 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://api.cerebras.ai/v1" +GENAISCRIPT_MODEL_LARGE="" +GENAISCRIPT_MODEL_SMALL="" \ No newline at end of file diff --git a/.env.fireworks b/.env.fireworks new file mode 100644 index 0000000..7d992a3 --- /dev/null +++ b/.env.fireworks @@ -0,0 +1,4 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://api.fireworks.ai/inference/v1" +GENAISCRIPT_MODEL_LARGE="" +GENAISCRIPT_MODEL_SMALL="" \ No newline at end of file diff --git a/.env.google b/.env.google new file mode 100644 index 0000000..72e3eeb --- /dev/null +++ b/.env.google @@ -0,0 +1,4 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://generativelanguage.googleapis.com/v1beta/openai" +GENAISCRIPT_MODEL_LARGE="" +GENAISCRIPT_MODEL_SMALL="" diff --git a/.env.groq b/.env.groq new file mode 100644 index 0000000..f7657e5 --- /dev/null +++ b/.env.groq @@ -0,0 +1,4 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://api.groq.com/openai/v1" +GENAISCRIPT_MODEL_LARGE="" +GENAISCRIPT_MODEL_SMALL="" \ No newline at end of file diff --git a/.env.openai b/.env.openai new file mode 100644 index 0000000..87c506f --- /dev/null +++ b/.env.openai @@ -0,0 +1,4 @@ +OPENAI_API_KEY="" +OPENAI_API_BASE="https://api.openai.com/v1" +GENAISCRIPT_MODEL_LARGE="gpt-4o" +GENAISCRIPT_MODEL_SMALL="gpt-4o-mini" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cdcc4c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/target +/node_modules/ +/.idea +prompt.md +todo +chrome +stream_store +data/ +web-agent-rs/ +./.env* +/.genaiscript/ +/packages/genaiscript/node_modules/ diff --git a/.toak-ignore b/.toak-ignore new file mode 100644 index 0000000..e70f0d6 --- /dev/null +++ b/.toak-ignore @@ -0,0 +1,3 @@ +package.json +genaisrc/genaiscript.d.ts +.toak-ignore \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f208495 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1391 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "multer", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "fips204" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9fb5a367b9846933e271a3c2a992930743f82ae5e8cb7faa780715a80fa0b15" +dependencies = [ + "rand_core", + "sha2", + "sha3", + "zeroize", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.166" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.7", + "smallvec", + "windows-targets", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rust-embed" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shell-escape" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sled" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" +dependencies = [ + "crc32fast", + "crossbeam-epoch", + "crossbeam-utils", + "fs2", + "fxhash", + "libc", + "log", + "parking_lot 0.11.2", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "syn" +version = "2.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot 0.12.3", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "http", + "http-body", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "web-agent-rs" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "base64", + "bytes", + "dotenv", + "fips204", + "futures", + "http", + "lazy_static", + "rust-embed", + "serde", + "serde_json", + "shell-escape", + "sled", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ddbb0e5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "web-agent-rs" +version = "0.1.0" +edition = "2021" + +[[bin]] +edition = "2021" +name = "agent-server" +path = "src/main.rs" + +[dependencies] +axum = { version = "0.7", features = ["multipart"] } +serde = { version = "1.0", features = ["derive"] } +tokio = { version = "1.0", features = ["full"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +http = "1.1.0" +tokio-stream = "0.1.16" +uuid = { version = "1.11.0", features = ["v4"] } +tokio-util = { version = "0.7", features = ["io"] } +serde_json = "1.0.133" +futures = "0.3.31" +dotenv = "0.15.0" +shell-escape = "0.1.5" +rust-embed = "8.5.0" +bytes = "1.8.0" +lazy_static = "1.5.0" +sled = "0.34.7" +tower-http = { version = "0.6.2", features = ["trace"] } +anyhow = "1.0.97" +base64 = "0.22.1" +fips204 = "0.4.6" + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ef133fc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,88 @@ +# Stage 1: Build the Rust agent-core binary +FROM rust:1.73-slim-bullseye as agent-server-builder + +WORKDIR /build-context + +# Install only the minimal required build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + pkg-config \ + musl-tools \ + && rm -rf /var/core/apt/lists/* + +# Build for musl to ensure static linking +RUN rustup target add aarch64-unknown-linux-musl + +# Copy only necessary files for building +COPY Cargo.toml Cargo.lock ./ +COPY src ./src +COPY assets ./assets + +# Build with musl target for static linking +RUN cargo build --release --target aarch64-unknown-linux-musl && \ + strip /build-context/target/aarch64-unknown-linux-musl/release/agent-core + +# Stage 2: Build Bun dependencies +FROM oven/bun:alpine as node-builder + +# Install system dependencies and node-gyp +RUN apk add --no-cache \ + ca-certificates \ + curl \ + unzip \ + git \ + python3 \ + py3-pip \ + build-base \ + pkgconf \ + cmake \ + nodejs \ + npm \ + bash \ + chromium \ + nss \ + freetype \ + freetype-dev \ + harfbuzz \ + ca-certificates \ + ttf-freefont \ + font-noto-emoji \ + nodejs \ + wqy-zenhei \ + && rm -rf /var/cache/* \ + && mkdir /var/cache/apk \ + && npm install -g node-gyp + +WORKDIR /app +# dep files +COPY packages packages +COPY package.json package-lock.json ./ +## Install deps +RUN bun install && bun --filter='./packages/genaiscript-rust-shim' run buildShim + + +FROM node:20-bookworm as app + +WORKDIR /app + +# Install playwright +ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/lib/chromium/chromium \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 +RUN npx -y playwright@1.49.1 install --with-deps chromium && npm install -g bun + + +COPY --from=node-builder /app/node_modules ./node_modules +COPY --from=node-builder /app/package.json . +COPY --from=agent-server-builder /build-context/target/aarch64-unknown-linux-musl/release/agent-server ./agent-server + +# Ensure the binary is executable +RUN chmod +x ./agent-core + +# copy agent source files +COPY packages/genaiscript-rust-shim/dist ./dist +COPY genaisrc ./genaisrc + +# Expose the required port +EXPOSE 3006 + +# Set the entrypoint to the Rust binary +ENTRYPOINT ["./agent-server"] diff --git a/Local.Dockerfile b/Local.Dockerfile new file mode 100644 index 0000000..ebd13e7 --- /dev/null +++ b/Local.Dockerfile @@ -0,0 +1,88 @@ +# Stage 1: Build the Rust agent-core binary +FROM rust:1-slim-bullseye as agent-server-builder + +WORKDIR /build-context + +# Install only the minimal required build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + pkg-config \ + musl-tools \ + && rm -rf /var/lib/apt/lists/* + +# Build for musl to ensure static linking +RUN rustup target add aarch64-unknown-linux-musl + +# Copy only necessary files for building +COPY Cargo.toml Cargo.lock ./ +COPY src ./src +COPY assets ./assets + +# Build with musl target for static linking +RUN cargo build --release --target aarch64-unknown-linux-musl && \ + strip /build-context/target/aarch64-unknown-linux-musl/release/agent-server + +# Stage 2: Build Bun dependencies +FROM oven/bun:alpine as node-builder + +# Install system dependencies and node-gyp +RUN apk add --no-cache \ + ca-certificates \ + curl \ + unzip \ + git \ + python3 \ + py3-pip \ + build-base \ + pkgconf \ + cmake \ + nodejs \ + npm \ + bash \ + chromium \ + nss \ + freetype \ + freetype-dev \ + harfbuzz \ + ca-certificates \ + ttf-freefont \ + font-noto-emoji \ + nodejs \ + wqy-zenhei \ + && rm -rf /var/cache/* \ + && mkdir /var/cache/apk \ + && npm install -g node-gyp + +WORKDIR /app +# dep files +COPY packages packages +COPY package.json package-lock.json bun.lockb ./ +## Install deps +RUN bun install + + +FROM node:20-bookworm as app + +WORKDIR /app + +# Install playwright +ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/lib/chromium/chromium \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 +RUN npx -y playwright@1.49.1 install --with-deps chromium && npm install -g bun + + +COPY --from=node-builder /app/node_modules ./node_modules +COPY --from=node-builder /app/package.json . +COPY --from=node-builder /app/packages ./packages +COPY --from=agent-server-builder /build-context/target/aarch64-unknown-linux-musl/release/agent-server ./agent-server + +# Ensure the binary is executable +RUN chmod +x ./agent-server + +# copy agent source files +COPY packages/genaiscript-rust-shim/dist ./dist + +# Expose the required port +EXPOSE 3006 + +# Set the entrypoint to the Rust binary +ENTRYPOINT ["./agent-server"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e8fae7a --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# web-agent-rs +Hacky genaiscript host for integration into conversational AI applications. + +### Disclaimer +This has not undergone a formal security assessment. You should do your own evaluation before using this. + +### How it works +1. A chat client specifies the URL to this host in their environment. +2. They send a request with their credentials to create a stream resource + + +## Docs +The [docs](./docs) folder is under construction \ No newline at end of file diff --git a/Remote.Dockerfile b/Remote.Dockerfile new file mode 100644 index 0000000..5a57a97 --- /dev/null +++ b/Remote.Dockerfile @@ -0,0 +1,88 @@ +# Stage 1: Build the Rust agent-server binary +FROM rust:1-slim-bullseye as agent-server-builder + +WORKDIR /build-context + +# Install only the minimal required build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + pkg-config \ + musl-tools \ + && rm -rf /var/lib/apt/lists/* + +# Build for musl to ensure static linking +RUN rustup target add x86_64-unknown-linux-musl + +# Copy only necessary files for building +COPY Cargo.toml Cargo.lock ./ +COPY src ./src +COPY assets ./assets + +# Build with musl target for static linking +RUN cargo build --release --target x86_64-unknown-linux-musl && \ + strip /build-context/target/x86_64-unknown-linux-musl/release/agent-server + +# Stage 2: Build Bun dependencies +FROM oven/bun:alpine as node-builder + +# Install system dependencies and node-gyp +RUN apk add --no-cache \ + ca-certificates \ + curl \ + unzip \ + git \ + python3 \ + py3-pip \ + build-base \ + pkgconf \ + cmake \ + nodejs \ + npm \ + bash \ + chromium \ + nss \ + freetype \ + freetype-dev \ + harfbuzz \ + ca-certificates \ + ttf-freefont \ + font-noto-emoji \ + nodejs \ + wqy-zenhei \ + && rm -rf /var/cache/* \ + && mkdir /var/cache/apk \ + && npm install -g node-gyp + +WORKDIR /app +# dep files +COPY packages packages +COPY package.json package-lock.json bun.lockb ./ +## Install deps +RUN bun install + + +FROM node:20-bookworm as app + +WORKDIR /app + +# Install playwright +ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/lib/chromium/chromium \ + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 +RUN npx -y playwright@1.49.1 install --with-deps chromium && npm install -g bun + + +COPY --from=node-builder /app/node_modules ./node_modules +COPY --from=node-builder /app/package.json . +COPY --from=node-builder /app/packages ./packages +COPY --from=agent-server-builder /build-context/target/x86_64-unknown-linux-musl/release/agent-server ./agent-server + +# Ensure the binary is executable +RUN chmod +x ./agent-server + +# copy agent source files +COPY packages/genaiscript-rust-shim/dist ./dist + +# Expose the required port +EXPOSE 3006 + +# Set the entrypoint to the Rust binary +ENTRYPOINT ["./agent-server"] diff --git a/assets/index.html b/assets/index.html new file mode 100644 index 0000000..1f04423 --- /dev/null +++ b/assets/index.html @@ -0,0 +1,62 @@ + + +
+ +CEVh^Ag`LasNOXCJ=h!z|i~sTj0ZShy=S~`!j)J
zyUA`$IoJu^nG?u`$qh+~%akVoMgIDAL)U{l7x>XXf`MXxPrEaI tFKztRwl#aPUO? nD-Mr@^bqQ
z8_e$^o pQ6KzkqUosB1elXWvFPEjY>XRL9PnJE;kDf7Vrp%L-g9Focw*GT}DP20djhghe@OGPY
zj@LZARDNRZ%?rI|hkiY?%PKuBoGTyt+~#RN!`v=E6ee}ei+i+FJ6x?*H}$*4=?_Oe
zTsipMpvhk2Cr+^sDc4$hcU1D;b!*<8j){@0jd*t3vYo}Q$ZbhZ2jtQ_YaNz G{s*InFHJR*kciV@Ug(G#r<0{{L+2ed(yst(>{5_VgBqA
z;nAuyHk@!T-*GRi*9XXU8L#+#;kmj+9V)hdYN;06VX^ibU!!W7_ydWDMyqrgc6Dv1
zFkeUhfo((T23|g-ar)ZNd~Rn01)mmuPY2v;7tsBg`-~O59-@jX+UbHj-Nv;P-fU0n
ze|YoQZL%M|^iTI(+kHr+(XC0sW#g_}w@}(^!y9xeeN`_SpF
zAfz?aFR{rmslQP=+%;yY{L{|52BHQ*g|H5>oM#JAJH|4ZUE>AzcE
z?cd+OkF}#@58(B?i+CJAU|~aUV*VZRHHgRFsSaNwpZ4$bFL))1{ZApj75P_p|GiE;
zU%x1^!Tyc(w0~beBVR;82bga`JfD9Q;QyQ_!ih)x>W<$b;(7kn@&YUIBl!5BZe
zYmocDCckR@z?vxtfcZ4y9X05`c>(R;pWoFTzn;XyKd&9R#{kE_ns{g8k;h9Z|4sM@
zrw(6VU$uVt_*d$G81e3s{v!rCiQ63_zB%#yxnHUOrUu$t9VGsF9&(C-{Vye+_Ye41
z>i;G2E)xGa`Q>`{Z(C3`|9sy-ssAA2@%e#2H!I~&5-
)w=0XDrEe`
zE@dt)m{YWs&mi|nyWiHK>V-2?3KU
EjbPJ2DX8oyhUx8D&m7LE(!Q)!1P%a^TBe
zTebV`-ZQD