Compare commits

...

10 Commits

Author SHA1 Message Date
Ruben Fiszel
deff6f39d7 all 2025-02-26 17:07:41 +01:00
Ruben Fiszel
389fd1d18b all 2025-02-26 13:56:51 +01:00
Ruben Fiszel
318b654106 chore(main): release 1.471.1 (#5389)
* chore(main): release 1.471.1

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2025-02-26 13:07:47 +01:00
Guilhem
731299ee14 fix(frontend) load primary schedule args in detail trigger page (#5388)
* load primary schedule args in detail trigger page

* nit
2025-02-26 12:54:31 +01:00
Ruben Fiszel
dde3c5bef3 fix compile issue 2025-02-26 12:51:11 +01:00
Ruben Fiszel
3ada264c4a fix: update to rust 1.86.0 2025-02-26 11:34:28 +01:00
Ruben Fiszel
e2cd8dbdf0 chore(main): release 1.471.0 (#5385)
* chore(main): release 1.471.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2025-02-26 11:06:07 +01:00
HugoCasa
487d84bd7f feat: add support for claude sonnet 3.7 thinking (#5387)
* feat: add support for claude sonnet 3.7 thinking

* non streaming as well
2025-02-26 10:49:05 +01:00
Ruben Fiszel
82d37d6ace further reactivity for apps improvements 2025-02-26 10:23:15 +01:00
Guilhem
a85ebfbbf4 fix(frontend): improve pagination handling and filter refreshes (#5378)
* fix pagination handling and filter refreshes

* wip

* fix window navigation
2025-02-26 09:42:00 +01:00
32 changed files with 285 additions and 205 deletions

View File

@@ -16,7 +16,7 @@ jobs:
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache-workspaces: backend
toolchain: 1.83.0
toolchain: 1.85.0
- uses: Swatinem/rust-cache@v2
with:
workspaces: backend
@@ -40,7 +40,7 @@ jobs:
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache-workspaces: backend
toolchain: 1.83.0
toolchain: 1.85.0
- uses: Swatinem/rust-cache@v2
with:
workspaces: backend
@@ -77,7 +77,7 @@ jobs:
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache-workspaces: backend
toolchain: 1.83.0
toolchain: 1.85.0
- uses: Swatinem/rust-cache@v2
with:
workspaces: backend
@@ -117,7 +117,7 @@ jobs:
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache-workspaces: backend
toolchain: 1.83.0
toolchain: 1.85.0
- uses: Swatinem/rust-cache@v2
with:
workspaces: backend

View File

@@ -51,7 +51,7 @@ jobs:
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache-workspaces: backend
toolchain: 1.83.0
toolchain: 1.86.0
- uses: Swatinem/rust-cache@v2
with:
workspaces: backend

View File

@@ -1,5 +1,24 @@
# Changelog
## [1.471.1](https://github.com/windmill-labs/windmill/compare/v1.471.0...v1.471.1) (2025-02-26)
### Bug Fixes
* update to rust 1.86.0 ([3ada264](https://github.com/windmill-labs/windmill/commit/3ada264c4ad49f666c3a053eb48c7df294bf085b))
## [1.471.0](https://github.com/windmill-labs/windmill/compare/v1.470.1...v1.471.0) (2025-02-26)
### Features
* add support for claude sonnet 3.7 thinking ([#5387](https://github.com/windmill-labs/windmill/issues/5387)) ([487d84b](https://github.com/windmill-labs/windmill/commit/487d84bd7fdc39a2401df4108fca6183189cf38a))
### Bug Fixes
* **frontend:** improve pagination handling and filter refreshes ([#5378](https://github.com/windmill-labs/windmill/issues/5378)) ([a85ebfb](https://github.com/windmill-labs/windmill/commit/a85ebfbbf48590812c0931ad93179c322f819849))
## [1.470.1](https://github.com/windmill-labs/windmill/compare/v1.470.0...v1.470.1) (2025-02-26)

View File

@@ -1,5 +1,5 @@
ARG DEBIAN_IMAGE=debian:bookworm-slim
ARG RUST_IMAGE=rust:1.83-slim-bookworm
ARG RUST_IMAGE=rust:1.85-slim-bookworm
FROM ${RUST_IMAGE} AS rust_base

126
backend/Cargo.lock generated
View File

@@ -834,7 +834,7 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -1231,9 +1231,9 @@ dependencies = [
[[package]]
name = "base64ct"
version = "1.6.0"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
checksum = "c103cbbedac994e292597ab79342dbd5b306a362045095db54917d92a9fdfd92"
[[package]]
name = "better_scoped_tls"
@@ -2699,7 +2699,7 @@ dependencies = [
"tokio",
"tokio-util",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
"xz2",
"zstd",
]
@@ -2799,7 +2799,7 @@ dependencies = [
"regex",
"sha2 0.10.8",
"unicode-segmentation",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -2966,7 +2966,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
dependencies = [
"serde",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -3022,7 +3022,7 @@ dependencies = [
"deno_error",
"thiserror 2.0.11",
"tokio",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -3235,7 +3235,7 @@ dependencies = [
"spki",
"thiserror 2.0.11",
"tokio",
"uuid 1.14.0",
"uuid 1.15.0",
"x25519-dalek",
]
@@ -3413,7 +3413,7 @@ dependencies = [
"pin-project",
"rand 0.8.5",
"tokio",
"uuid 1.14.0",
"uuid 1.15.0",
"winapi",
"windows-sys 0.59.0",
]
@@ -3869,7 +3869,7 @@ dependencies = [
"tokio",
"tokio-metrics",
"twox-hash 1.6.3",
"uuid 1.14.0",
"uuid 1.15.0",
"which 6.0.3",
"winapi",
"windows-sys 0.59.0",
@@ -3989,7 +3989,7 @@ dependencies = [
"serde",
"thiserror 2.0.11",
"tokio",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -4081,7 +4081,7 @@ dependencies = [
"num-bigint",
"prost",
"serde",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -4107,7 +4107,7 @@ dependencies = [
"tokio",
"tokio-util",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -4131,7 +4131,7 @@ dependencies = [
"thiserror 2.0.11",
"tokio",
"tokio-stream",
"uuid 1.14.0",
"uuid 1.15.0",
"v8_valueserializer",
]
@@ -7336,7 +7336,7 @@ dependencies = [
"smallvec",
"tagptr",
"thiserror 1.0.69",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -7473,7 +7473,7 @@ dependencies = [
"sha2 0.10.8",
"subprocess",
"thiserror 1.0.69",
"uuid 1.14.0",
"uuid 1.15.0",
"zstd",
]
@@ -8710,7 +8710,7 @@ dependencies = [
"postgres-protocol 0.6.8",
"serde",
"serde_json",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -9664,7 +9664,7 @@ dependencies = [
"rkyv_derive",
"seahash",
"tinyvec",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -10131,7 +10131,7 @@ dependencies = [
"serde",
"thiserror 1.0.69",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -10169,7 +10169,7 @@ dependencies = [
"schemars_derive",
"serde",
"serde_json",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -11011,7 +11011,7 @@ dependencies = [
"tokio-stream",
"tracing",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
"webpki-roots",
]
@@ -11095,7 +11095,7 @@ dependencies = [
"stringprep",
"thiserror 2.0.11",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
"whoami",
]
@@ -11136,7 +11136,7 @@ dependencies = [
"stringprep",
"thiserror 2.0.11",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
"whoami",
]
@@ -11162,7 +11162,7 @@ dependencies = [
"sqlx-core",
"tracing",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -11837,7 +11837,7 @@ dependencies = [
"tempfile",
"thiserror 1.0.69",
"time",
"uuid 1.14.0",
"uuid 1.15.0",
"winapi",
]
@@ -12073,7 +12073,7 @@ dependencies = [
"tokio-rustls 0.24.1",
"tokio-util",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
@@ -12935,7 +12935,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab82fc73182c29b02e2926a6df32f2241dbadb5cfc111fd595515b3598f46bb3"
dependencies = [
"rand 0.9.0",
"uuid 1.14.0",
"uuid 1.15.0",
"web-time",
]
@@ -13227,9 +13227,9 @@ dependencies = [
[[package]]
name = "uuid"
version = "1.14.0"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d59ca99a559661b96bf898d8fce28ed87935fd2bea9f05983c1464dd6c71b1"
checksum = "bd8dcafa1ca14750d8d7a05aa05988c17aab20886e1f3ae33a40223c58d92ef7"
dependencies = [
"getrandom 0.3.1",
"serde",
@@ -13691,7 +13691,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windmill"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"axum",
@@ -13720,7 +13720,7 @@ dependencies = [
"tokio",
"tracing",
"url",
"uuid 1.14.0",
"uuid 1.15.0",
"v8",
"windmill-api",
"windmill-api-client",
@@ -13734,7 +13734,7 @@ dependencies = [
[[package]]
name = "windmill-api"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"argon2",
@@ -13817,7 +13817,7 @@ dependencies = [
"ulid",
"url",
"urlencoding",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-audit",
"windmill-common",
"windmill-git-sync",
@@ -13830,7 +13830,7 @@ dependencies = [
[[package]]
name = "windmill-api-client"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"base64 0.22.1",
"chrono",
@@ -13843,12 +13843,12 @@ dependencies = [
"serde",
"serde_json",
"syn 1.0.109",
"uuid 1.14.0",
"uuid 1.15.0",
]
[[package]]
name = "windmill-audit"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"chrono",
"serde",
@@ -13861,21 +13861,21 @@ dependencies = [
[[package]]
name = "windmill-autoscaling"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"serde",
"serde_json",
"sqlx",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-common",
"windmill-queue",
]
[[package]]
name = "windmill-common"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"async-stream",
@@ -13928,27 +13928,27 @@ dependencies = [
"tracing-loki",
"tracing-opentelemetry",
"tracing-subscriber",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-macros",
]
[[package]]
name = "windmill-git-sync"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"regex",
"serde",
"serde_json",
"sqlx",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-common",
"windmill-queue",
]
[[package]]
name = "windmill-indexer"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"bytes",
@@ -13965,13 +13965,13 @@ dependencies = [
"tokio",
"tokio-tar",
"tracing",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-common",
]
[[package]]
name = "windmill-macros"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"itertools 0.14.0",
"lazy_static",
@@ -13983,7 +13983,7 @@ dependencies = [
[[package]]
name = "windmill-parser"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"convert_case 0.6.0",
"serde",
@@ -13992,7 +13992,7 @@ dependencies = [
[[package]]
name = "windmill-parser-bash"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"lazy_static",
@@ -14004,7 +14004,7 @@ dependencies = [
[[package]]
name = "windmill-parser-csharp"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"serde_json",
@@ -14016,7 +14016,7 @@ dependencies = [
[[package]]
name = "windmill-parser-go"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"gosyn",
@@ -14028,7 +14028,7 @@ dependencies = [
[[package]]
name = "windmill-parser-graphql"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"lazy_static",
@@ -14040,7 +14040,7 @@ dependencies = [
[[package]]
name = "windmill-parser-php"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"itertools 0.14.0",
@@ -14051,7 +14051,7 @@ dependencies = [
[[package]]
name = "windmill-parser-py"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"itertools 0.14.0",
@@ -14062,7 +14062,7 @@ dependencies = [
[[package]]
name = "windmill-parser-py-imports"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"async-recursion",
@@ -14082,7 +14082,7 @@ dependencies = [
[[package]]
name = "windmill-parser-rust"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"convert_case 0.6.0",
@@ -14099,7 +14099,7 @@ dependencies = [
[[package]]
name = "windmill-parser-sql"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"lazy_static",
@@ -14111,7 +14111,7 @@ dependencies = [
[[package]]
name = "windmill-parser-ts"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"lazy_static",
@@ -14129,7 +14129,7 @@ dependencies = [
[[package]]
name = "windmill-parser-wasm"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"getrandom 0.2.15",
@@ -14151,7 +14151,7 @@ dependencies = [
[[package]]
name = "windmill-parser-yaml"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"serde_json",
@@ -14161,7 +14161,7 @@ dependencies = [
[[package]]
name = "windmill-queue"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"async-recursion",
@@ -14187,14 +14187,14 @@ dependencies = [
"tokio",
"tracing",
"ulid",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-audit",
"windmill-common",
]
[[package]]
name = "windmill-sql-datatype-parser-wasm"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"wasm-bindgen",
"wasm-bindgen-test",
@@ -14204,7 +14204,7 @@ dependencies = [
[[package]]
name = "windmill-worker"
version = "1.470.1"
version = "1.471.1"
dependencies = [
"anyhow",
"async-recursion",
@@ -14265,7 +14265,7 @@ dependencies = [
"tokio-util",
"tracing",
"urlencoding",
"uuid 1.14.0",
"uuid 1.15.0",
"windmill-audit",
"windmill-common",
"windmill-git-sync",

View File

@@ -1,6 +1,6 @@
[package]
name = "windmill"
version = "1.470.1"
version = "1.471.1"
authors.workspace = true
edition.workspace = true
@@ -30,7 +30,7 @@ members = [
]
[workspace.package]
version = "1.470.1"
version = "1.471.1"
authors = ["Ruben Fiszel <ruben@windmill.dev>"]
edition = "2021"
@@ -173,7 +173,7 @@ serde_json = { version = "^1", features = ["preserve_order", "raw_value"] }
uuid = { version = "^1", features = ["serde", "v4"] }
thiserror = "^2"
anyhow = "^1"
chrono = { version = "0.4.35", features = ["serde"] }
chrono = { version = "=0.4.39", features = ["serde"] }
chrono-tz = "^0.10.1"
tracing = "^0"
tracing-subscriber = { version = "^0", features = ["env-filter", "json"] }

View File

@@ -1,3 +1,4 @@
#[allow(dead_code)]
use serde_json::json;
use wasm_bindgen_test::wasm_bindgen_test;
use windmill_parser::{Arg, MainArgSignature, ObjectProperty, Typ};

View File

@@ -800,10 +800,20 @@ Windmill Community Edition {GIT_VERSION}
reload_instance_python_version_setting(&db).await
},
NPM_CONFIG_REGISTRY_SETTING => {
reload_npm_config_registry_setting(&db).await
if worker_mode {
tracing::info!("NPM config registry setting changed, restarting");
send_delayed_killpill(&tx, 5, "npm config registry setting change").await;
} else {
reload_npm_config_registry_setting(&db).await
}
},
BUNFIG_INSTALL_SCOPES_SETTING => {
reload_bunfig_install_scopes_setting(&db).await
if worker_mode {
tracing::info!("Bunfig install scopes setting changed, restarting");
send_delayed_killpill(&tx, 5, "bunfig install scopes setting change").await;
} else {
reload_bunfig_install_scopes_setting(&db).await
}
},
NUGET_CONFIG_SETTING => {
reload_nuget_config_setting(&db).await

View File

@@ -1,7 +1,7 @@
openapi: "3.0.3"
info:
version: 1.470.1
version: 1.471.1
title: Windmill API
contact:

View File

@@ -107,13 +107,13 @@ pub async fn gen_bun_lockfile(
raw_deps: Option<String>,
npm_mode: bool,
occupancy_metrics: &mut Option<&mut OccupancyMetrics>,
has_bunfig: bool,
) -> Result<Option<String>> {
let common_bun_proc_envs: HashMap<String, String> = get_common_bun_proc_envs(None).await;
let mut empty_deps = false;
if let Some(raw_deps) = raw_deps {
gen_bunfig(job_dir).await?;
write_file(job_dir, "package.json", raw_deps.as_str())?;
} else {
let _ = write_file(
@@ -137,8 +137,6 @@ pub async fn gen_bun_lockfile(
),
)?;
gen_bunfig(job_dir).await?;
let mut child_cmd = Command::new(&*BUN_PATH);
child_cmd
.current_dir(job_dir)
@@ -192,6 +190,7 @@ pub async fn gen_bun_lockfile(
common_bun_proc_envs,
npm_mode,
occupancy_metrics,
has_bunfig,
)
.await?;
} else {
@@ -231,7 +230,7 @@ pub async fn gen_bun_lockfile(
}
}
async fn gen_bunfig(job_dir: &str) -> Result<()> {
pub async fn gen_bunfig(job_dir: &str) -> Result<bool> {
let registry = NPM_CONFIG_REGISTRY.read().await.clone();
let bunfig_install_scopes = BUNFIG_INSTALL_SCOPES.read().await.clone();
if registry.is_some() || bunfig_install_scopes.is_some() {
@@ -263,9 +262,11 @@ registry = {}
.unwrap_or("".to_string())
);
tracing::debug!("Writing following bunfig.toml: {bunfig_toml}");
let _ = write_file(&job_dir, "bunfig.toml", &bunfig_toml)?;
write_file(&job_dir, "bunfig.toml", &bunfig_toml)?;
Ok(true)
} else {
Ok(false)
}
Ok(())
}
pub async fn install_bun_lockfile(
@@ -279,6 +280,7 @@ pub async fn install_bun_lockfile(
common_bun_proc_envs: HashMap<String, String>,
npm_mode: bool,
occupancy_metrics: &mut Option<&mut OccupancyMetrics>,
has_bunfig: bool,
) -> Result<()> {
let mut child_cmd = Command::new(if npm_mode { &*NPM_PATH } else { &*BUN_PATH });
child_cmd
@@ -799,6 +801,7 @@ pub async fn handle_bun_job(
shared_mount: &str,
new_args: &mut Option<HashMap<String, Box<RawValue>>>,
occupancy_metrics: &mut OccupancyMetrics,
has_bunfig: bool,
) -> error::Result<Box<RawValue>> {
let mut annotation = windmill_common::worker::TypeScriptAnnotations::parse(inner_content);
@@ -891,6 +894,7 @@ pub async fn handle_bun_job(
common_bun_proc_envs.clone(),
annotation.npm,
&mut Some(occupancy_metrics),
has_bunfig,
)
.await?;
}
@@ -913,6 +917,7 @@ pub async fn handle_bun_job(
None,
annotation.npm,
&mut Some(occupancy_metrics),
has_bunfig,
)
.await?;
@@ -1545,6 +1550,7 @@ pub async fn start_worker(
common_bun_proc_envs.clone(),
annotation.npm,
&mut None,
has_bunfig,
)
.await?;
tracing::info!("dedicated worker requirements installed: {reqs}");
@@ -1566,6 +1572,7 @@ pub async fn start_worker(
None,
annotation.npm,
&mut None,
has_bunfig,
)
.await?;
}

View File

@@ -822,13 +822,18 @@ pub async fn run_worker(
.expect("could not create initial worker dir");
if !*DISABLE_NSJAIL {
let _ = write_file(
write_file(
&worker_dir,
"download_deps.py.sh",
INCLUDE_DEPS_PY_SH_CONTENT,
);
)
.map_err(|e| anyhow::anyhow!("Failed to write download_deps.py.sh: {e}"))?;
}
let has_bunfig = crate::bun_executor::gen_bunfig(&worker_dir)
.await
.map_err(|e| anyhow::anyhow!("Failed to generate bunfig: {e}"))?;
let mut last_ping = Instant::now() - Duration::from_secs(NUM_SECS_PING + 1);
update_ping(hostname, &worker_name, ip, db).await;
@@ -2723,6 +2728,7 @@ mount {{
&shared_mount,
new_args,
occupancy_metrics,
has_bunfig,
)
.await
}

View File

@@ -2,7 +2,7 @@ import { sleep } from "https://deno.land/x/sleep@v1.2.1/mod.ts";
import * as windmill from "https://deno.land/x/windmill@v1.174.0/mod.ts";
import * as api from "https://deno.land/x/windmill@v1.174.0/windmill-api/index.ts";
export const VERSION = "v1.470.1";
export const VERSION = "v1.471.1";
export async function login(email: string, password: string): Promise<string> {
return await windmill.UserService.login({

View File

@@ -62,7 +62,7 @@ export {
// }
// });
export const VERSION = "1.470.1";
export const VERSION = "1.471.1";
const command = new Command()
.name("wmill")

View File

@@ -1,15 +1,15 @@
{
"name": "windmill-components",
"version": "1.470.1",
"version": "1.471.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "windmill-components",
"version": "1.470.1",
"version": "1.471.1",
"license": "AGPL-3.0",
"dependencies": {
"@anthropic-ai/sdk": "^0.32.1",
"@anthropic-ai/sdk": "^0.37.0",
"@aws-crypto/sha256-js": "^4.0.0",
"@codingame/monaco-vscode-configuration-service-override": "~11.1.2",
"@codingame/monaco-vscode-standalone-css-language-features": "~11.1.2",
@@ -185,9 +185,9 @@
}
},
"node_modules/@anthropic-ai/sdk": {
"version": "0.32.1",
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.32.1.tgz",
"integrity": "sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==",
"version": "0.37.0",
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.37.0.tgz",
"integrity": "sha512-tHjX2YbkUBwEgg0JZU3EFSSAQPoK4qQR/NFYa8Vtzd5UAyXzZksCw2In69Rml4R/TyHPBfRYaLK35XiOe33pjw==",
"license": "MIT",
"dependencies": {
"@types/node": "^18.11.18",

View File

@@ -1,6 +1,6 @@
{
"name": "windmill-components",
"version": "1.470.1",
"version": "1.471.1",
"scripts": {
"dev": "vite dev",
"build": "vite build",
@@ -84,7 +84,7 @@
},
"type": "module",
"dependencies": {
"@anthropic-ai/sdk": "^0.32.1",
"@anthropic-ai/sdk": "^0.37.0",
"@aws-crypto/sha256-js": "^4.0.0",
"@codingame/monaco-vscode-configuration-service-override": "~11.1.2",
"@codingame/monaco-vscode-standalone-css-language-features": "~11.1.2",
@@ -120,8 +120,8 @@
"minimatch": "^10.0.1",
"monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~11.1.2",
"monaco-editor-wrapper": "6.1.1",
"monaco-languageclient": "9.1.1",
"monaco-graphql": "^1.6.0",
"monaco-languageclient": "9.1.1",
"monaco-vim": "^0.4.1",
"ol": "^7.4.0",
"openai": "^4.57.2",

View File

@@ -29,6 +29,7 @@
let initialPrimarySchedule: Writable<ScheduleTrigger | false | undefined> = writable(undefined)
async function updateSchedules(forceRefresh: boolean) {
const loadPrimarySchedule = true
loadSchedules(
forceRefresh,
path,
@@ -37,7 +38,8 @@
primarySchedule,
initialPrimarySchedule,
$workspaceStore ?? '',
triggersCount
triggersCount,
loadPrimarySchedule
)
}

View File

@@ -144,15 +144,24 @@
runnable && runnable.type === 'runnableByName' ? runnable.inlineScript?.refreshOn ?? [] : []
function refreshIfAutoRefresh(src: 'arg changed' | 'static changed') {
// console.log(
// 'refreshIfAutoRefresh',
// src,
// id,
// iterContext ? $iterContext : undefined,
// $rowContext ? $rowContext : undefined,
// firstRefresh
// )
if (firstRefresh) {
firstRefresh = false
if (
src == 'arg changed' &&
args == undefined &&
result != undefined &&
Object.keys(runnableInputValues ?? {}).length == 0 &&
Object.keys(extraQueryParams ?? {}).length == 0
) {
// console.debug(`Skipping refreshing ${id} because ${_src} (first)`)
console.log('skipping refresh because first refresh')
return
}
}

View File

@@ -2,7 +2,7 @@
import { getContext, onMount } from 'svelte'
import type { AppInput } from '../../inputType'
import type { Output } from '../../rx'
import type { AppViewerContext } from '../../types'
import type { AppViewerContext, ListContext } from '../../types'
import { isScriptByNameDefined, isScriptByPathDefined } from '../../utils'
import NonRunnableComponent from './NonRunnableComponent.svelte'
import RunnableComponent from './RunnableComponent.svelte'
@@ -98,6 +98,8 @@
const { staticExporter, initialized, noBackend, componentControl, runnableComponents } =
getContext<AppViewerContext>('AppViewerContext')
const iterContext = getContext<ListContext>('ListWrapperContext')
const rowContext = getContext<ListContext>('RowWrapperContext')
if (noBackend && componentInput?.type == 'runnable') {
result = componentInput?.['value']
@@ -113,18 +115,24 @@
}
})
const fullId = id + (extraKey ?? '')
if (!(initializing && componentInput?.type === 'runnable' && isRunnableDefined(componentInput))) {
initializing = false
} else {
if (
(initializing == undefined || initializing == true) &&
Object.keys($initialized?.runnableInitialized ?? {}).includes(id)
Object.keys($initialized?.runnableInitialized ?? {}).includes(fullId)
) {
initializing = false
}
if (result == undefined && !initializing) {
result = $initialized.runnableInitialized?.[id]
if (
result == undefined &&
!initializing &&
iterContext == undefined &&
rowContext == undefined
) {
result = $initialized.runnableInitialized?.[fullId]
}
}
@@ -294,11 +302,11 @@
on:argsChanged
on:resultSet={(e) => {
const res = e.detail
if ($initialized?.runnableInitialized?.[id] === undefined) {
if ($initialized?.runnableInitialized?.[fullId] === undefined) {
console.log('resultSet', id)
$initialized.runnableInitialized = {
...($initialized.runnableInitialized ?? {}),
[id]: res
[fullId]: res
}
}

View File

@@ -16,7 +16,7 @@
import { userStore, workspaceStore } from '$lib/stores'
import { Loader2, RefreshCcw } from 'lucide-svelte'
import { onDestroy } from 'svelte'
import { onDestroy, tick } from 'svelte'
import AutoComplete from 'simple-svelte-autocomplete'
import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte'
import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte'
@@ -24,10 +24,12 @@
let usernames: string[]
let resources: string[]
let loading: boolean = false
let page: number | undefined = undefined
export let logs: AuditLog[] = []
export let username: string = 'all'
export let pageIndex: number | undefined = 0
export let pageIndex: number | undefined = 1
export let hasMore: boolean = false
export let before: string | undefined = undefined
export let after: string | undefined = undefined
export let perPage: number | undefined = 100
@@ -77,6 +79,7 @@
actionKind,
allWorkspaces: scope === 'all_workspaces'
})
hasMore = logs.length > 0 && logs.length === perPage
loading = false
}
@@ -109,33 +112,19 @@
.sort()
}
$: {
if ($workspaceStore && refresh) {
loadUsers()
loadResources()
loadLogs(username, pageIndex, perPage, before, after, operation, resource, actionKind, scope)
}
$: $workspaceStore && refresh && refreshLogs()
let initialLoad = true
function refreshLogs() {
loadUsers()
loadResources()
loadLogs(username, page, perPage, before, after, operation, resource, actionKind, scope)
tick().then(() => {
initialLoad = false
})
}
function updateQueryParams({
username,
perPage,
before,
after,
operation,
resource,
actionKind,
scope
}: {
username?: string | undefined
perPage?: number | undefined
before?: string | undefined
after?: string | undefined
operation?: string | undefined
resource?: string | undefined
actionKind?: ActionKind | undefined | 'all'
scope?: undefined | 'all_workspaces' | 'instance'
}) {
function updateLogs() {
const queryParams: string[] = []
function addQueryParam(key: string, value: string | number | undefined | null) {
@@ -145,7 +134,7 @@
}
addQueryParam('username', username)
addQueryParam('page', 0)
addQueryParam('page', page)
addQueryParam('perPage', perPage)
addQueryParam('before', before)
addQueryParam('after', after)
@@ -158,45 +147,31 @@
}
const query = '?' + queryParams.join('&')
goto(query)
loadLogs(username, page, perPage, before, after, operation, resource, actionKind, scope)
}
function updateQueryParams() {
if (initialLoad) {
return
}
page = 1
pageIndex = 1
updateLogs()
}
function updatePageQueryParams(pageIndex?: number | undefined) {
const queryParams: string[] = []
function addQueryParam(key: string, value: string | number | undefined | null) {
if (value !== undefined && value !== null && value !== '' && value !== 'all') {
queryParams.push(`${key}=${encodeURIComponent(value)}`)
}
if (initialLoad) {
return
}
addQueryParam('username', username)
addQueryParam('page', pageIndex)
addQueryParam('perPage', perPage)
addQueryParam('before', before)
addQueryParam('after', after)
addQueryParam('operation', operation)
addQueryParam('resource', resource)
addQueryParam('actionKind', actionKind)
if (scope && $workspaceStore == 'admins') {
addQueryParam('scope', scope)
addQueryParam('workspace', 'admins')
}
const query = '?' + queryParams.join('&')
goto(query)
page = pageIndex
updateLogs()
}
$: updateQueryParams({
username,
perPage,
before,
after,
operation,
resource,
actionKind,
scope
})
// observe all the variables that should trigger an update
$: username, perPage, before, after, operation, resource, actionKind, scope, updateQueryParams()
// observe the pageIndex variable that should trigger an update
$: updatePageQueryParams(pageIndex)
window.addEventListener('popstate', handlePopState)

View File

@@ -13,6 +13,7 @@
export let logs: AuditLog[] = []
export let pageIndex: number | undefined = 1
export let perPage: number | undefined = 100
export let hasMore: boolean = true
export let actionKind: string | undefined = undefined
export let operation: string | undefined = undefined
export let selectedId: number | undefined = undefined
@@ -69,8 +70,8 @@
paginated
rounded={false}
size="sm"
{hasMore}
bind:perPage
shouldHidePagination={logs?.length === 0}
>
<Head>
<Cell first head>ID</Cell>

View File

@@ -412,20 +412,29 @@
</ToggleButtonGroup>
<div class="min-w-0">
{#if $copilotInfo.ai_models.length > 1}
<select
bind:value={$copilotSessionModel}
class="!text-xs !pr-5 !bg-[right_center] overflow-ellipsis text-right !border-none !shadow-none"
>
{#each $copilotInfo.ai_models as model}
<option value={model} class="pr-4">{model}</option>
{/each}
</select>
{:else if $copilotInfo.ai_models.length === 1}
<div class="text-xs whitespace-nowrap overflow-hidden overflow-ellipsis">
{$copilotInfo.ai_models[0]}
</div>
{/if}
<TooltipV2>
{#if $copilotInfo.ai_models.length > 1}
<select
bind:value={$copilotSessionModel}
class="!text-xs !pr-5 !bg-[right_center] overflow-ellipsis text-right !border-none !shadow-none"
>
{#each $copilotInfo.ai_models as model}
<option value={model} class="pr-4">{model}</option>
{/each}
</select>
{:else if $copilotInfo.ai_models.length === 1}
<div class="text-xs whitespace-nowrap overflow-hidden overflow-ellipsis">
{$copilotInfo.ai_models[0]}
</div>
{/if}
<svelte:fragment slot="text">
<span class="text-xs"
>{$copilotInfo.ai_models.length > 1
? $copilotSessionModel
: $copilotInfo.ai_models[0]}</span
>
</svelte:fragment>
</TooltipV2>
</div>
</div>
<div class="flex w-96 items-start">

View File

@@ -35,7 +35,12 @@ export const SUPPORTED_LANGUAGES = new Set(Object.keys(GEN_CONFIG.prompts))
// need at least one model for each provider except customai
export const AI_DEFAULT_MODELS: Record<AIProvider, string[]> = {
openai: ['gpt-4o', 'gpt-4o-mini'],
anthropic: ['claude-3-5-sonnet-latest', 'claude-3-5-haiku-latest'],
anthropic: [
'claude-3-7-sonnet-latest',
'claude-3-7-sonnet-latest/thinking',
'claude-3-5-haiku-latest',
'claude-3-5-sonnet-latest'
],
mistral: ['codestral-latest'],
deepseek: ['deepseek-chat', 'deepseek-reasoner'],
googleai: ['gemini-1.5-pro', 'gemini-2.0-flash', 'gemini-1.5-flash'],
@@ -196,7 +201,6 @@ namespace MistralAI {
export namespace AnthropicAI {
export const config: MessageCreateParams = {
temperature: 0,
max_tokens: 8192,
model: '',
messages: []
@@ -224,8 +228,6 @@ export namespace AnthropicAI {
if (part.type == 'content_block_delta') {
if (part.delta.type == 'text_delta') {
response = part.delta.text
} else {
response = part.delta.partial_json
}
}
return response
@@ -507,7 +509,18 @@ export async function getNonStreamingCompletion(
{
...AnthropicAI.config,
system,
model,
...(model.endsWith('/thinking')
? {
thinking: {
type: 'enabled',
budget_tokens: 1024
},
model: model.slice(0, -9)
}
: {
model,
temperature: 0
}),
messages: anthropicMessages,
stream: false
},
@@ -601,7 +614,18 @@ export async function getCompletion(
const completion = await anthropicClient.messages.create(
{
...AnthropicAI.config,
model,
...(model.endsWith('/thinking')
? {
thinking: {
type: 'enabled',
budget_tokens: 1024
},
model: model.slice(0, -9)
}
: {
model,
temperature: 0
}),
system,
messages: anthropicMessages,
stream: true

View File

@@ -5,7 +5,7 @@ import { get } from 'svelte/store'
import { sendUserToast } from '$lib/utils'
// Load the schedule of a flow given its path and the workspace
export async function loadFlowSchedule(path: string, workspace: string): Promise<ScheduleTrigger> {
export async function loadSchedule(path: string, workspace: string): Promise<ScheduleTrigger> {
const existsSchedule = await ScheduleService.existsSchedule({
workspace,
path
@@ -37,16 +37,15 @@ export async function loadSchedules(
primarySchedule: Writable<ScheduleTrigger | false | undefined>,
initialPrimarySchedule: Writable<ScheduleTrigger | false | undefined>,
workspace: string,
triggersCount: Writable<TriggersCount | undefined>
triggersCount: Writable<TriggersCount | undefined>,
loadPrimarySchedule: boolean = false
) {
console.log('loading schedules for path', path)
if (!path || path == '') {
schedules.set([])
primarySchedule.update((ps) => (ps === undefined ? false : ps))
initialPrimarySchedule.set(structuredClone(get(primarySchedule)))
return
}
console.log('loading schedules for path', path)
try {
const allSchedules = await ScheduleService.listSchedules({
workspace,
@@ -54,15 +53,20 @@ export async function loadSchedules(
isFlow
})
const primary = allSchedules.find((s) => s.path == path)
let remotePrimarySchedule: ScheduleTrigger | false | undefined = primary
? {
summary: primary.summary,
args: primary.args ?? {},
cron: primary.schedule,
timezone: primary.timezone,
enabled: primary.enabled
}
: false
let remotePrimarySchedule: ScheduleTrigger | false | undefined = undefined
if (loadPrimarySchedule && primary) {
remotePrimarySchedule = await loadSchedule(path, workspace)
} else {
remotePrimarySchedule = primary
? {
summary: primary.summary,
args: primary.args ?? {},
cron: primary.schedule,
timezone: primary.timezone,
enabled: primary.enabled
}
: false
}
primarySchedule.update((ps) => (ps === undefined || forceRefresh ? remotePrimarySchedule : ps))
initialPrimarySchedule.set(structuredClone(remotePrimarySchedule))

View File

@@ -18,6 +18,7 @@
let username: string = $page.url.searchParams.get('username') ?? 'all'
let pageIndex: number | undefined = Number($page.url.searchParams.get('page')) || 0
let before: string | undefined = $page.url.searchParams.get('before') ?? undefined
let hasMore: boolean = false
let after: string | undefined = $page.url.searchParams.get('after') ?? undefined
let perPage: number | undefined = Number($page.url.searchParams.get('perPage')) || 100
let operation: string = $page.url.searchParams.get('operation') ?? 'all'
@@ -61,6 +62,7 @@
bind:pageIndex
bind:perPage
bind:scope
bind:hasMore
/>
</div>
<div class="2xl:hidden">
@@ -75,6 +77,7 @@
bind:operation
bind:resource
bind:scope
bind:hasMore
/>
</svelte:fragment>
</AuditLogMobileFilters>
@@ -100,6 +103,7 @@
bind:operation
bind:usernameFilter={username}
bind:resourceFilter={resource}
bind:hasMore
on:select={(e) => {
selectedId = e.detail
}}
@@ -114,6 +118,7 @@
<div class="md:hidden">
<AuditLogsTable
{logs}
bind:hasMore
bind:pageIndex
bind:perPage
bind:actionKind

View File

@@ -4,8 +4,8 @@ verify_ssl = true
name = "pypi"
[packages]
wmill = ">=1.470.1"
wmill_pg = ">=1.470.1"
wmill = ">=1.471.1"
wmill_pg = ">=1.471.1"
sendgrid = "*"
mysql-connector-python = "*"
pymongo = "*"

View File

@@ -1,7 +1,7 @@
openapi: "3.0.3"
info:
version: 1.470.1
version: 1.471.1
title: OpenFlow Spec
contact:
name: Ruben Fiszel

View File

@@ -12,7 +12,7 @@
RootModule = 'WindmillClient.psm1'
# Version number of this module.
ModuleVersion = '1.470.1'
ModuleVersion = '1.471.1'
# Supported PSEditions
# CompatiblePSEditions = @()

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "wmill"
version = "1.470.1"
version = "1.471.1"
description = "A client library for accessing Windmill server wrapping the Windmill client API"
license = "Apache-2.0"
homepage = "https://windmill.dev"

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "wmill-pg"
version = "1.470.1"
version = "1.471.1"
description = "An extension client for the wmill client library focused on pg"
license = "Apache-2.0"
homepage = "https://windmill.dev"

View File

@@ -1,6 +1,6 @@
{
"name": "@windmill/windmill",
"version": "1.470.1",
"version": "1.471.1",
"exports": "./src/index.ts",
"publish": {
"exclude": ["!src", "./s3Types.ts", "./client.ts"]

View File

@@ -1,7 +1,7 @@
{
"name": "windmill-client",
"description": "Windmill SDK client for browsers and Node.js",
"version": "1.470.1",
"version": "1.471.1",
"author": "Ruben Fiszel",
"license": "Apache 2.0",
"devDependencies": {

View File

@@ -1 +1 @@
1.470.1
1.471.1