diff --git a/deps/db-sync/scripts/start-weather-session.sh b/deps/db-sync/scripts/start-weather-session.sh index a15995449c..356949eb01 100755 --- a/deps/db-sync/scripts/start-weather-session.sh +++ b/deps/db-sync/scripts/start-weather-session.sh @@ -3,34 +3,20 @@ set -euo pipefail BASE_URL="${BASE_URL:-http://127.0.0.1:8787}" TOKEN="${TOKEN:-dev-token}" -SESSION_ID="${SESSION_ID:-weather}" +SESSION_ID="${SESSION_ID:-p2}" create_payload() { cat < {:id (:session-id body) + :source {:node-id (:node-id body) + :node-title (:node-title body)} + :intent {:content (:content body)} + :agent (:agent body)} + (some? attachments) (assoc-in [:intent :attachments] attachments))))) diff --git a/deps/db-sync/src/logseq/db_sync/worker/agent/runtime_provider.cljs b/deps/db-sync/src/logseq/db_sync/worker/agent/runtime_provider.cljs index f99980d685..1552af985c 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/agent/runtime_provider.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/agent/runtime_provider.cljs @@ -24,6 +24,22 @@ (defn- strip-trailing-slash [s] (string/replace (or s "") #"/+$" "")) +(defn- normalize-provider [value] + (when (string? value) + (let [normalized (-> value string/trim string/lower-case)] + (when-not (string/blank? normalized) normalized)))) + +(defn provider-kind [^js env] + (or (normalize-provider (env-str env "AGENT_RUNTIME_PROVIDER")) + "sprites")) + +(defn runtime-provider-kind [^js env runtime] + (or (normalize-provider (:provider runtime)) + (provider-kind env))) + +(defn fill-template [template sandbox-id] + (string/replace (or template "") "{sandbox_id}" (or sandbox-id ""))) + (defn- sanitize-name [name] (let [name (or name "task") sanitized (-> name diff --git a/deps/db-sync/src/logseq/db_sync/worker/handler/agent.cljs b/deps/db-sync/src/logseq/db_sync/worker/handler/agent.cljs index ebb944923b..ec8eecb04b 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/handler/agent.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/handler/agent.cljs @@ -2,6 +2,7 @@ (:require [lambdaisland.glogi :as log] [logseq.db-sync.common :as common] [logseq.db-sync.platform.core :as platform] + [logseq.db-sync.worker.agent.request :as agent-request] [logseq.db-sync.worker.auth :as auth] [logseq.db-sync.worker.http :as http] [logseq.db-sync.worker.routes.index :as routes] @@ -48,8 +49,7 @@ (http/bad-request "missing body") (let [body (js->clj result :keywordize-keys true) body (http/coerce-http-request :sessions/create body) - idempotency-key (.get (.-headers request) "idempotency-key") - session-id (or (:id body) idempotency-key)] + session-id (:session-id body)] (cond (nil? body) (http/bad-request "invalid body") @@ -61,7 +61,7 @@ (if-let [^js stub (session-stub env session-id)] (let [headers (base-headers request claims) _ (.set headers "x-stream-base" (.-origin url)) - task (assoc body :id session-id) + task (agent-request/normalize-session-create body) body-json (js/JSON.stringify (clj->js task)) do-url (str (.-origin url) "/__session__/init")] (forward-request stub do-url "POST" headers body-json)) diff --git a/deps/db-sync/test/logseq/db_sync/agent_request_test.cljs b/deps/db-sync/test/logseq/db_sync/agent_request_test.cljs new file mode 100644 index 0000000000..def727fccc --- /dev/null +++ b/deps/db-sync/test/logseq/db_sync/agent_request_test.cljs @@ -0,0 +1,35 @@ +(ns logseq.db-sync.agent-request-test + (:require [cljs.test :refer [deftest is testing]] + [logseq.db-sync.worker.agent.request :as request] + [logseq.db-sync.worker.http :as http])) + +(deftest sessions-create-coerce-test + (testing "accepts simplified sessions/create request" + (let [body {:session-id "sess-1" + :node-id "node-1" + :node-title "Title" + :content "Hello" + :attachments ["https://example.com/a.png"] + :agent "codex"} + coerced (http/coerce-http-request :sessions/create body)] + (is (= body coerced)))) + (testing "rejects missing required fields" + (is (nil? (http/coerce-http-request :sessions/create {:session-id "sess-1"}))))) + +(deftest normalize-session-create-test + (testing "normalizes simplified request into agent task" + (let [body {:session-id "sess-1" + :node-id "node-1" + :node-title "Title" + :content "Hello" + :attachments ["https://example.com/a.png" "https://example.com/b.png"] + :agent {:provider "codex"}} + normalized (request/normalize-session-create body)] + (is (= {:id "sess-1" + :source {:node-id "node-1" + :node-title "Title"} + :intent {:content "Hello" + :attachments ["https://example.com/a.png" + "https://example.com/b.png"]} + :agent {:provider "codex"}} + normalized))))) diff --git a/deps/db-sync/test/logseq/db_sync/test_runner.cljs b/deps/db-sync/test/logseq/db_sync/test_runner.cljs index 3bff7d2e99..36c7cc40d0 100644 --- a/deps/db-sync/test/logseq/db_sync/test_runner.cljs +++ b/deps/db-sync/test/logseq/db_sync/test_runner.cljs @@ -1,5 +1,6 @@ (ns logseq.db-sync.test-runner (:require [cljs.test :as ct] + [logseq.db-sync.agent-request-test] [logseq.db-sync.agent-runtime-provider-test] [logseq.db-sync.node-config-test] [logseq.db-sync.platform-test]