From bf7cc9cecdb932a6910c310b117de4ef4e333573 Mon Sep 17 00:00:00 2001 From: randd1024 Date: Mon, 2 Nov 2026 04:05:39 +0000 Subject: [PATCH 1/9] fix(harness): align FIFO storage with canonical home (#220) --- crates/ccteam-core/src/paths.rs | 2 +- crates/ccteam-harness/src/tmux_backend/fifo_relay.rs | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/ccteam-core/src/paths.rs b/crates/ccteam-core/src/paths.rs index a3fbbd24..0cb2dc12 100644 --- a/crates/ccteam-core/src/paths.rs +++ b/crates/ccteam-core/src/paths.rs @@ -263,7 +263,7 @@ impl CcteamPaths { .join(crate::pending_inject::PENDING_INJECT_FILE) } - /// `~/.ccteam/pty/` — V0.3.2 F56 directory holding FIFO files used + /// `~/.ccteam/state/pty/` — V0.3.2 F56 directory holding FIFO files used /// by the web layer's `tmux pipe-pane` relay (one FIFO per active /// `` or `-` subscription). Files are created / /// unlinked at runtime by `ccteam_web::routes::pty_ws`. diff --git a/crates/ccteam-harness/src/tmux_backend/fifo_relay.rs b/crates/ccteam-harness/src/tmux_backend/fifo_relay.rs index d8e42952..95cf427e 100644 --- a/crates/ccteam-harness/src/tmux_backend/fifo_relay.rs +++ b/crates/ccteam-harness/src/tmux_backend/fifo_relay.rs @@ -21,7 +21,7 @@ //! //! `ccteam-core` depends on `ccteam-harness` (tmux_ops moved here in W1), so //! mux MUST NOT depend on core — that would cycle. The FIFO directory -//! (`~/.ccteam/pty`, honoring `CCTEAM_HOME`) is therefore resolved by a +//! (`~/.ccteam/state/pty`, honoring `CCTEAM_HOME`) is therefore resolved by a //! small local helper that mirrors `CcteamPaths::pty_dir` rather than //! importing it. //! @@ -48,7 +48,7 @@ use crate::MuxSessionId; /// this surfaces as a `MuxEvent::OutputDropped` on the stream. pub const BROADCAST_CAPACITY: usize = 256; -/// Resolve `~/.ccteam/pty` honoring `CCTEAM_HOME`, mirroring +/// Resolve `~/.ccteam/state/pty` honoring `CCTEAM_HOME`, mirroring /// `ccteam_core::CcteamPaths::pty_dir` without taking the dependency /// (which would create a cargo cycle). Falls back to `$TMPDIR` / `/tmp` /// when neither `CCTEAM_HOME` nor `$HOME` is set (tests / sandboxes). @@ -62,7 +62,9 @@ fn pty_dir() -> PathBuf { } else { PathBuf::from("/tmp").join(".ccteam") }; - root.join("pty") + // Keep the leaf-crate resolver aligned with CcteamPaths::pty_dir. + // The canonical home stores runtime FIFOs under state/, not at root. + root.join("state").join("pty") } /// Registry of live `tmux pipe-pane` relays keyed by `MuxSessionId`. From 5d1484a27c9425bdc14a130ddbca4c765741b13c Mon Sep 17 00:00:00 2001 From: randd1024 Date: Mon, 2 Nov 2026 04:05:39 +0000 Subject: [PATCH 2/9] feat(web): add right file workspace and HTML previews (#219) Preserve Context in a shared toolbar, add virtualized project browsing and source tabs, and serve scoped sandboxed HTML previews. Tracks docs-local/issues/#219. Repair default browser fixtures against the current login, Ops layout, and fetch SSE contracts after reproducing their failures on clean origin/dev (docs-local/issues/#221). --- Makefile | 7 +- crates/ccteam-web/src/auth.rs | 13 + crates/ccteam-web/src/routes/files.rs | 608 ++++++++++++++ crates/ccteam-web/src/routes/mod.rs | 1 + crates/ccteam-web/src/routes/openapi.rs | 4 + crates/ccteam-web/src/state.rs | 2 + crates/ccteam-web/tests/files_test.rs | 332 ++++++++ crates/ccteam-web/tests/openapi_test.rs | 7 + crates/ccteam-web/web/package-lock.json | 776 ++++++++++++++++++ crates/ccteam-web/web/package.json | 7 + crates/ccteam-web/web/playwright.config.ts | 9 +- .../web/src/components/FileWorkspace.tsx | 644 +++++++++++++++ .../web/src/components/Markdown.tsx | 32 +- .../web/src/components/fileWorkspace.css | 255 ++++++ crates/ccteam-web/web/src/index.css | 2 +- .../ccteam-web/web/src/lib/filesApi.test.ts | 58 ++ crates/ccteam-web/web/src/lib/filesApi.ts | 117 +++ crates/ccteam-web/web/src/lib/i18n.ts | 42 + .../ccteam-web/web/src/lib/markdown.test.ts | 26 +- crates/ccteam-web/web/src/lib/markdown.ts | 26 +- .../web/src/pages/SessionView.steps.test.tsx | 7 + .../web/src/pages/SessionView.test.tsx | 2 +- .../ccteam-web/web/src/pages/SessionView.tsx | 493 +++++++++-- .../web/tests/file-preview-browser.mjs | 31 + crates/ccteam-web/web/tests/v032-spa.spec.ts | 345 +++++++- .../ccteam-web/web/tests/v090-agents.spec.ts | 55 +- docs/usage-cn.md | 6 + docs/usage.md | 6 + 28 files changed, 3728 insertions(+), 185 deletions(-) create mode 100644 crates/ccteam-web/src/routes/files.rs create mode 100644 crates/ccteam-web/tests/files_test.rs create mode 100644 crates/ccteam-web/web/src/components/FileWorkspace.tsx create mode 100644 crates/ccteam-web/web/src/components/fileWorkspace.css create mode 100644 crates/ccteam-web/web/src/lib/filesApi.test.ts create mode 100644 crates/ccteam-web/web/src/lib/filesApi.ts create mode 100644 crates/ccteam-web/web/tests/file-preview-browser.mjs diff --git a/Makefile b/Makefile index 568789ef..8cc493ef 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ WIPE_DIRS := state run cache DAEMON_LOG := $(CCTEAM_HOME)/daemon.log .DEFAULT_GOAL := help -.PHONY: help build release clean fmt fmt-check clippy check test test-web perf-gate \ +.PHONY: help build release clean fmt fmt-check clippy check test test-web test-files-browser perf-gate \ web web-deps web-check gate \ install install-binary next-steps uninstall reinstall require-cli require-node \ config init start stop status doctor \ @@ -182,6 +182,11 @@ test-baseline: require-node test-web: require-node cargo test -p ccteam-web +# #219 — real browser verification against the tempdir-backed file API. +test-files-browser: require-node + cargo test -p ccteam-web --test files_test preview_runs_relative_modules_and_css_inside_an_opaque_browser_sandbox -- --ignored + cd $(WEB_DIR) && npm test -- --grep 'file workspace|mobile Files' + # Explicit, release-profile performance contract. The integration target # returns immediately unless CCTEAM_PERF_GATE=1, so ordinary test targets never # generate the large fixture or start its in-process server. diff --git a/crates/ccteam-web/src/auth.rs b/crates/ccteam-web/src/auth.rs index 05e0b8bd..0e5eea6d 100644 --- a/crates/ccteam-web/src/auth.rs +++ b/crates/ccteam-web/src/auth.rs @@ -609,6 +609,19 @@ pub async fn auth_layer( next: Next, ) -> Response { let auth = app.auth.clone(); + if let Some(identity) = + crate::routes::files::preview_identity(&app, req.method(), req.uri().path()) + { + let Some(identity) = identity else { + return ( + StatusCode::UNAUTHORIZED, + "Preview expired; reopen it from Files", + ) + .into_response(); + }; + req.extensions_mut().insert(identity); + return next.run(req).await; + } if !auth.enabled { // Loopback / --no-auth: the local operator IS the owner → admin identity. req.extensions_mut().insert(Identity::admin()); diff --git a/crates/ccteam-web/src/routes/files.rs b/crates/ccteam-web/src/routes/files.rs new file mode 100644 index 00000000..45b1dee9 --- /dev/null +++ b/crates/ccteam-web/src/routes/files.rs @@ -0,0 +1,608 @@ +//! #219: project-contained, read-only files and sandboxed HTML previews. +//! Preview capabilities carry the minting identity, never a web bearer. Even +//! cookieless requests from an opaque sandbox pass the ordinary project ACL. + +use std::{ + collections::HashMap, + io::Read, + path::{Component, Path as FsPath, PathBuf}, + sync::Mutex, + time::{Duration, Instant}, +}; + +use axum::{ + extract::{Path, Query, State}, + http::{header, HeaderValue, Method, StatusCode}, + response::{IntoResponse, Response}, + Extension, Json, +}; +use rand::RngCore; +use serde::{Deserialize, Serialize}; +use utoipa::ToSchema; + +use crate::{auth::Identity, state::AppState}; + +const MAX_PATHS: usize = 20_000; +const MAX_TEXT: u64 = 2 * 1024 * 1024; +const MAX_ASSET: u64 = 16 * 1024 * 1024; +const PREVIEW_TTL: Duration = Duration::from_secs(3600); +const PREVIEW_CSP: &str = "sandbox allow-scripts; default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' http: https: data: blob:; style-src 'unsafe-inline' http: https: data:; img-src http: https: data: blob:; font-src http: https: data:; media-src http: https: data: blob:; connect-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'"; + +struct PreviewGrant { + slug: String, + directory: PathBuf, + identity: Identity, + expires: Instant, +} + +#[derive(Default)] +pub(crate) struct PreviewRegistry(Mutex>); + +impl PreviewRegistry { + fn mint( + &self, + slug: String, + identity: Identity, + directory: PathBuf, + ) -> Result { + let mut grants = self.0.lock().unwrap_or_else(|e| e.into_inner()); + grants.retain(|_, grant| grant.expires > Instant::now()); + if grants.len() >= 1024 { + return Err(StatusCode::TOO_MANY_REQUESTS); + } + let mut random = [0u8; 24]; + rand::thread_rng().fill_bytes(&mut random); + let token: String = random.iter().map(|b| format!("{b:02x}")).collect(); + grants.insert( + token.clone(), + PreviewGrant { + slug, + directory, + identity, + expires: Instant::now() + PREVIEW_TTL, + }, + ); + Ok(token) + } + + fn principal(&self, slug: &str, token: &str) -> Option { + let grants = self.0.lock().unwrap_or_else(|e| e.into_inner()); + let grant = grants.get(token)?; + (grant.slug == slug && grant.expires > Instant::now()).then(|| grant.identity.clone()) + } + + fn directory(&self, slug: &str, token: &str) -> Option { + let grants = self.0.lock().unwrap_or_else(|e| e.into_inner()); + let grant = grants.get(token)?; + (grant.slug == slug && grant.expires > Instant::now()).then(|| grant.directory.clone()) + } +} + +/// Only preview-resource GET/HEADs can authenticate with this capability. +/// Normal cookies must not override it (including after a login switch). +pub(crate) fn preview_identity( + app: &AppState, + method: &Method, + path: &str, +) -> Option> { + let rest = path.strip_prefix("/api/v1/projects/")?; + let (slug, rest) = rest.split_once('/')?; + let rest = rest.strip_prefix("files/preview/")?; + let (ticket, _) = rest.split_once('/')?; + Some(if method == Method::GET || method == Method::HEAD { + app.file_previews.principal(slug, ticket) + } else { + None + }) +} + +#[derive(Debug, Serialize, ToSchema)] +pub struct FileTree { + pub root: String, + pub paths: Vec, + pub truncated: bool, + pub git_status: HashMap, +} + +#[derive(Debug, Deserialize)] +pub(crate) struct FileQuery { + path: String, +} + +#[derive(Debug, Serialize, ToSchema)] +pub struct FileContent { + pub path: String, + pub size: u64, + pub content: Option, + pub binary: bool, +} + +#[derive(Debug, Deserialize, ToSchema)] +pub struct PreviewRequest { + pub path: String, +} + +#[derive(Debug, Serialize, ToSchema)] +pub struct PreviewLink { + pub url: String, + pub expires_in: u64, +} + +fn error(status: StatusCode, message: impl Into) -> Response { + (status, Json(serde_json::json!({"error": message.into()}))).into_response() +} + +fn private_component(name: &str) -> bool { + let name = name.to_ascii_lowercase(); + matches!( + name.as_str(), + ".git" + | ".ccteam" + | ".ssh" + | ".aws" + | ".gnupg" + | "node_modules" + | "target" + | ".next" + | ".venv" + | "__pycache__" + ) || name == ".env" + || (name.starts_with(".env.") + && !name.ends_with(".example") + && !name.ends_with(".sample") + && !name.ends_with(".template")) + || name.ends_with(".pem") + || name.ends_with(".key") + || matches!(name.as_str(), "id_rsa" | "id_ed25519" | "credentials.json") +} + +fn safe_relative(path: &FsPath) -> bool { + !path.as_os_str().is_empty() + && path.components().all(|c| match c { + Component::Normal(name) => name + .to_str() + .is_some_and(|s| !private_component(s) && !s.contains('\\')), + _ => false, + }) +} + +fn project_root(app: &AppState, slug: &str) -> Result { + if !app.paths.project_state(slug).exists() { + return Err((StatusCode::NOT_FOUND, "Project not found")); + } + let config = ccteam_core::config::load(&app.paths.root).map_err(|_| { + ( + StatusCode::SERVICE_UNAVAILABLE, + "Project catalog is unreadable", + ) + })?; + if config + .projects + .iter() + .any(|p| p.slug == slug && p.host != "local") + { + return Err(( + StatusCode::NOT_IMPLEMENTED, + "File browsing is not yet supported for remote projects", + )); + } + app.paths + .project_dir(slug) + .canonicalize() + .map_err(|_| (StatusCode::NOT_FOUND, "Project directory not found")) +} + +fn resolve(root: &FsPath, relative: &str) -> Result { + if !safe_relative(FsPath::new(relative)) { + return Err(StatusCode::FORBIDDEN); + } + let path = root + .join(relative) + .canonicalize() + .map_err(|_| StatusCode::NOT_FOUND)?; + let inside = path.strip_prefix(root).map_err(|_| StatusCode::FORBIDDEN)?; + if !safe_relative(inside) { + return Err(StatusCode::FORBIDDEN); + } + Ok(path) +} + +fn read_bounded(path: &FsPath, max: u64) -> Result, StatusCode> { + // Check before opening: opening a FIFO can block before File::metadata. + if !std::fs::metadata(path).is_ok_and(|meta| meta.is_file()) { + return Err(StatusCode::NOT_FOUND); + } + let mut options = std::fs::OpenOptions::new(); + options.read(true); + #[cfg(unix)] + { + use std::os::unix::fs::OpenOptionsExt; + options.custom_flags(libc::O_NONBLOCK); + } + let file = options.open(path).map_err(|_| StatusCode::NOT_FOUND)?; + let meta = file.metadata().map_err(|_| StatusCode::NOT_FOUND)?; + if !meta.is_file() { + return Err(StatusCode::NOT_FOUND); + } + if meta.len() > max { + return Err(StatusCode::PAYLOAD_TOO_LARGE); + } + let mut bytes = Vec::new(); + file.take(max + 1) + .read_to_end(&mut bytes) + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + if bytes.len() as u64 > max { + return Err(StatusCode::PAYLOAD_TOO_LARGE); + } + Ok(bytes) +} + +fn walk(root: &FsPath) -> std::io::Result<(Vec, bool)> { + let mut paths = Vec::new(); + let mut pending = vec![root.to_path_buf()]; + let mut visited = 0; + while let Some(dir) = pending.pop() { + let entries = match std::fs::read_dir(dir) { + Ok(e) => e, + Err(_) => continue, + }; + for entry in entries { + visited += 1; + if visited > MAX_PATHS { + paths.sort(); + return Ok((paths, true)); + } + let entry = entry?; + let kind = entry.file_type()?; + // Never traverse symlinks: cycles and out-of-project targets must + // not make listing unbounded or reveal private path names. + if kind.is_symlink() || (!kind.is_dir() && !kind.is_file()) { + continue; + } + let path = entry.path(); + let Ok(relative) = path.strip_prefix(root) else { + continue; + }; + if !safe_relative(relative) { + continue; + } + let Some(relative) = relative.to_str() else { + continue; + }; + let mut name = relative.replace('\\', "/"); + if kind.is_dir() { + name.push('/'); + pending.push(path); + } + paths.push(name); + } + } + paths.sort(); + Ok((paths, false)) +} + +async fn git_status(root: &FsPath) -> HashMap { + use tokio::io::AsyncReadExt; + let mut command = tokio::process::Command::new("git"); + command + .args(["--no-optional-locks", "-c", "core.fsmonitor=false", "-C"]) + .arg(root) + .args(["status", "--porcelain=v1", "-z", "--untracked-files=normal"]) + .kill_on_drop(true) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::null()); + let read_status = async move { + let mut child = command.spawn().ok()?; + let stdout = child.stdout.take()?; + let mut output = Vec::new(); + stdout + .take(2 * 1024 * 1024 + 1) + .read_to_end(&mut output) + .await + .ok()?; + if output.len() > 2 * 1024 * 1024 { + return None; + } + child.wait().await.ok()?.success().then_some(output) + }; + let Ok(Some(output)) = tokio::time::timeout(Duration::from_secs(3), read_status).await else { + return HashMap::new(); + }; + let mut result = HashMap::new(); + let mut entries = output.split(|b| *b == 0); + while let Some(entry) = entries.next() { + let Ok(entry) = std::str::from_utf8(entry) else { + continue; + }; + if entry.len() < 4 { + continue; + } + let code = &entry[..2]; + let path = &entry[3..]; + if code.contains('R') || code.contains('C') { + entries.next(); + } + if !safe_relative(FsPath::new(path)) { + continue; + } + let status = if code == "??" { + "untracked" + } else if code.contains('U') { + "modified" + } else if code.contains('R') { + "renamed" + } else if code.contains('D') { + "deleted" + } else if code.contains('A') { + "added" + } else { + "modified" + }; + result.insert(path.to_string(), status.to_string()); + } + result +} + +#[utoipa::path(get, path = "/api/v1/projects/{slug}/files", tag = "projects", + params(("slug" = String, Path)), responses((status = 200, body = FileTree, description = "Bounded project file tree"), (status = 501, description = "Remote project")))] +pub(crate) async fn handle_files( + State(app): State, + Path(slug): Path, +) -> Response { + let root = match project_root(&app, &slug) { + Ok(p) => p, + Err((s, message)) => return error(s, message), + }; + let walk_root = root.clone(); + let paths = tokio::task::spawn_blocking(move || walk(&walk_root)); + let status = git_status(&root).await; + match paths.await { + Ok(Ok((paths, truncated))) => Json(FileTree { + root: root.to_string_lossy().into_owned(), + paths, + truncated, + git_status: status, + }) + .into_response(), + _ => error( + StatusCode::INTERNAL_SERVER_ERROR, + "Could not list project files", + ), + } +} + +#[utoipa::path(get, path = "/api/v1/projects/{slug}/file", tag = "projects", + params(("slug" = String, Path), ("path" = String, Query)), responses((status = 200, body = FileContent, description = "UTF-8 source or binary metadata"), (status = 413, description = "File exceeds 2 MiB")))] +pub(crate) async fn handle_file( + State(app): State, + Path(slug): Path, + Query(query): Query, +) -> Response { + let root = match project_root(&app, &slug) { + Ok(p) => p, + Err((s, message)) => return error(s, message), + }; + let path = match resolve(&root, &query.path) { + Ok(p) => p, + Err(s) => return error(s, "File is unavailable or outside the browsable project"), + }; + let result = tokio::task::spawn_blocking(move || read_bounded(&path, MAX_TEXT)).await; + match result { + Ok(Ok(bytes)) => { + let size = bytes.len() as u64; + let content = if bytes.contains(&0) { + None + } else { + String::from_utf8(bytes).ok() + }; + Json(FileContent { + path: query.path, + size, + binary: content.is_none(), + content, + }) + .into_response() + } + Ok(Err(s)) => error(s, "File is unavailable or exceeds the 2 MiB source limit"), + Err(_) => error(StatusCode::INTERNAL_SERVER_ERROR, "Could not read file"), + } +} + +#[utoipa::path(post, path = "/api/v1/projects/{slug}/files/preview", tag = "projects", + params(("slug" = String, Path)), request_body = PreviewRequest, + responses((status = 200, body = PreviewLink, description = "One-hour read-only preview capability")))] +pub(crate) async fn handle_mint_preview( + State(app): State, + Path(slug): Path, + Extension(identity): Extension, + Json(body): Json, +) -> Response { + let root = match project_root(&app, &slug) { + Ok(p) => p, + Err((s, message)) => return error(s, message), + }; + let path = match resolve(&root, &body.path) { + Ok(path) + if path.is_file() + && matches!( + path.extension() + .and_then(|e| e.to_str()) + .map(str::to_ascii_lowercase) + .as_deref(), + Some("html" | "htm") + ) => + { + path + } + _ => return error(StatusCode::NOT_FOUND, "HTML preview file not found"), + }; + let directory = path.parent().unwrap_or(&root).to_path_buf(); + let ticket = match app.file_previews.mint(slug.clone(), identity, directory) { + Ok(t) => t, + Err(s) => return error(s, "Too many open previews"), + }; + // URL path encoding is required for spaces, #, ?, Unicode, and filenames + // that might otherwise escape the capability's project resource route. + let encoded = body + .path + .split('/') + .map(|part| { + part.bytes() + .map(|b| { + if b.is_ascii_alphanumeric() || b"-._~".contains(&b) { + (b as char).to_string() + } else { + format!("%{b:02X}") + } + }) + .collect::() + }) + .collect::>() + .join("/"); + Json(PreviewLink { + url: format!("/api/v1/projects/{slug}/files/preview/{ticket}/{encoded}"), + expires_in: PREVIEW_TTL.as_secs(), + }) + .into_response() +} + +#[utoipa::path(get, path = "/api/v1/projects/{slug}/files/preview/{ticket}/{*path}", tag = "projects", + params(("slug" = String, Path), ("ticket" = String, Path), ("path" = String, Path)), + responses((status = 200, description = "Sandboxed preview or relative asset")))] +pub(crate) async fn handle_preview( + State(app): State, + Path((slug, ticket, relative)): Path<(String, String, String)>, +) -> Response { + let root = match project_root(&app, &slug) { + Ok(p) => p, + Err((s, message)) => return error(s, message), + }; + let path = match resolve(&root, &relative) { + Ok(p) => p, + Err(s) => return error(s, "Preview resource unavailable"), + }; + let Some(directory) = app.file_previews.directory(&slug, &ticket) else { + return error(StatusCode::UNAUTHORIZED, "Preview expired"); + }; + // A page (and any third-party script it includes) can read its ticket. + // It grants only web assets below that page's directory, never arbitrary + // Rust, Markdown, configuration or other project source. + let extension = path + .extension() + .and_then(|e| e.to_str()) + .unwrap_or("") + .to_ascii_lowercase(); + if !path.starts_with(directory) + || !matches!( + extension.as_str(), + "html" + | "htm" + | "css" + | "js" + | "mjs" + | "json" + | "png" + | "jpg" + | "jpeg" + | "gif" + | "webp" + | "svg" + | "ico" + | "woff" + | "woff2" + | "ttf" + | "otf" + | "wasm" + | "mp4" + | "webm" + | "mp3" + | "ogg" + ) + { + return error( + StatusCode::FORBIDDEN, + "Resource is outside this HTML preview's asset scope", + ); + } + let mime = mime_guess::from_path(&path) + .first_or_octet_stream() + .to_string(); + let result = tokio::task::spawn_blocking(move || read_bounded(&path, MAX_ASSET)).await; + let mut response = match result { + Ok(Ok(bytes)) => ( + [(header::CONTENT_TYPE, format!("{mime}; charset=utf-8"))], + bytes, + ) + .into_response(), + Ok(Err(s)) => error(s, "Preview resource unavailable or exceeds 16 MiB"), + Err(_) => error(StatusCode::INTERNAL_SERVER_ERROR, "Could not read preview"), + }; + let headers = response.headers_mut(); + headers.insert( + header::CONTENT_SECURITY_POLICY, + HeaderValue::from_static(PREVIEW_CSP), + ); + headers.insert(header::CACHE_CONTROL, HeaderValue::from_static("no-store")); + headers.insert( + header::REFERRER_POLICY, + HeaderValue::from_static("no-referrer"), + ); + headers.insert( + header::X_CONTENT_TYPE_OPTIONS, + HeaderValue::from_static("nosniff"), + ); + // Opaque sandbox module scripts use CORS without cookies. The random + // resource path is their ONLY credential; no global API CORS is opened. + headers.insert( + header::ACCESS_CONTROL_ALLOW_ORIGIN, + HeaderValue::from_static("*"), + ); + response +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn paths_reject_private_and_traversal_including_symlink_targets() { + let dir = tempfile::tempdir().unwrap(); + std::fs::write(dir.path().join("good.rs"), "source").unwrap(); + std::fs::write(dir.path().join(".env"), "secret").unwrap(); + assert!(resolve(dir.path(), "good.rs").is_ok()); + for path in [ + "../good.rs", + "/etc/passwd", + ".env", + "foo/../good.rs", + "foo\\bar", + ] { + assert!(resolve(dir.path(), path).is_err(), "{path}"); + } + #[cfg(unix)] + { + std::os::unix::fs::symlink(dir.path().join(".env"), dir.path().join("alias.txt")) + .unwrap(); + assert_eq!( + resolve(dir.path(), "alias.txt").unwrap_err(), + StatusCode::FORBIDDEN + ); + } + } + + #[test] + fn expired_and_cross_project_preview_capabilities_fail_closed() { + let registry = PreviewRegistry::default(); + let token = registry + .mint( + "one".into(), + Identity::admin(), + PathBuf::from("/project/web"), + ) + .unwrap(); + assert!(registry.principal("one", &token).is_some()); + assert!(registry.principal("two", &token).is_none()); + registry.0.lock().unwrap().get_mut(&token).unwrap().expires = Instant::now(); + assert!(registry.principal("one", &token).is_none()); + } +} diff --git a/crates/ccteam-web/src/routes/mod.rs b/crates/ccteam-web/src/routes/mod.rs index c6c6d5d0..0dfa649d 100644 --- a/crates/ccteam-web/src/routes/mod.rs +++ b/crates/ccteam-web/src/routes/mod.rs @@ -40,6 +40,7 @@ pub mod enroll; pub mod evolution; // 2026-09-01 — `GET /api/v1/projects/{slug}/flow-runs`: the run-level envelope // of `ccteam flow run`, folded back out of the project ledger. +pub mod files; pub mod flow_runs; pub mod health; pub mod hosts; diff --git a/crates/ccteam-web/src/routes/openapi.rs b/crates/ccteam-web/src/routes/openapi.rs index 295ae161..2612bf31 100644 --- a/crates/ccteam-web/src/routes/openapi.rs +++ b/crates/ccteam-web/src/routes/openapi.rs @@ -278,6 +278,10 @@ fn build_api_v1() -> OpenApiRouter { .routes(routes!(super::sessions_api::handle_session_status)) .routes(routes!(super::sessions_api::handle_session_context)) .routes(routes!(super::sessions_api::handle_session_turn)) + .routes(routes!(super::files::handle_files)) + .routes(routes!(super::files::handle_file)) + .routes(routes!(super::files::handle_mint_preview)) + .routes(routes!(super::files::handle_preview)) .routes(routes!(super::sessions_api::handle_session_step)) .routes(routes!( super::sessions_api::handle_list_scheduled, diff --git a/crates/ccteam-web/src/state.rs b/crates/ccteam-web/src/state.rs index a5f0fbb5..f2c3a608 100644 --- a/crates/ccteam-web/src/state.rs +++ b/crates/ccteam-web/src/state.rs @@ -132,6 +132,7 @@ pub struct AppState { /// Coalesces concurrent daemon-wide status aggregations. The completed /// result is never retained after its in-flight computation finishes. pub(crate) status_singleflight: crate::routes::status::StatusSingleflight, + pub(crate) file_previews: Arc, } /// v0.8.8 F4 — state of an in-flight Telegram `chat_id` long-poll capture @@ -208,6 +209,7 @@ impl AppState { ), vendor_quotas: Arc::new(crate::routes::vendor_quota::VendorQuotaService::default()), status_singleflight: crate::routes::status::StatusSingleflight::default(), + file_previews: Arc::new(crate::routes::files::PreviewRegistry::default()), } } diff --git a/crates/ccteam-web/tests/files_test.rs b/crates/ccteam-web/tests/files_test.rs new file mode 100644 index 00000000..ed828b4f --- /dev/null +++ b/crates/ccteam-web/tests/files_test.rs @@ -0,0 +1,332 @@ +use std::net::SocketAddr; + +use ccteam_core::{CcteamPaths, ProjectState}; +use ccteam_web::{router_with_state, AppState, AuthState}; +use serde_json::{json, Value}; +use tempfile::TempDir; + +const TOKEN: &str = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"; + +#[tokio::test] +async fn ownership_changes_revoke_previews_and_remote_projects_never_read_local_files() { + use ccteam_core::{ + config::{self, CcteamConfig, ProjectEntry}, + tenants::TenantRegistry, + }; + let (_tmp, paths, addr, client) = fixture().await; + let mut registry = TenantRegistry::default(); + let alice = registry.add("alice"); + let alice_token = alice.web_token.clone(); + registry.save(&paths.users_dir()).unwrap(); + let root = format!("http://{addr}/api/v1/projects/demo"); + assert_eq!( + client + .get(format!("{root}/files")) + .bearer_auth(format!("ccteam:{alice_token}")) + .send() + .await + .unwrap() + .status(), + 404 + ); + let mut state = ProjectState::load(&paths.project_state("demo")).unwrap(); + state.owner = Some(format!("user:{}", alice.id)); + state.save(&paths.project_state("demo")).unwrap(); + let preview: Value = client + .post(format!("{root}/files/preview")) + .bearer_auth(format!("ccteam:{alice_token}")) + .json(&json!({"path":"web/index.html"})) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + let url = format!("http://{addr}{}", preview["url"].as_str().unwrap()); + assert_eq!(client.get(&url).send().await.unwrap().status(), 200); + state.owner = Some("user:web-api".into()); + state.save(&paths.project_state("demo")).unwrap(); + assert_eq!(client.get(url).send().await.unwrap().status(), 404); + let config = CcteamConfig { + projects: vec![ProjectEntry { + slug: "demo".into(), + path: paths.project_dir("demo"), + host: "satellite".into(), + remote_slug: Some("demo".into()), + remote_path: None, + team: "dev".into(), + installed_at: chrono::Utc::now(), + }], + ..Default::default() + }; + config::save(&paths.root, &config).unwrap(); + assert_eq!( + client + .get(format!("{root}/file?path=web/index.html")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .status(), + 501 + ); + std::fs::write(config::config_path(&paths.root), "projects: [not valid").unwrap(); + assert_eq!( + client + .get(format!("{root}/files")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .status(), + 503 + ); +} + +async fn fixture() -> (TempDir, CcteamPaths, SocketAddr, reqwest::Client) { + let tmp = TempDir::new().unwrap(); + let paths = CcteamPaths { + root: tmp.path().join("home"), + projects_root: tmp.path().join("projects"), + }; + for slug in ["demo", "other"] { + ProjectState::initial(slug.to_string()) + .save(&paths.project_state(slug)) + .unwrap(); + } + let root = paths.project_dir("demo"); + std::fs::create_dir_all(root.join("web/assets")).unwrap(); + std::fs::write(root.join("web/index.html"), "

Hello

dot").unwrap(); + std::fs::write(root.join("web/assets/style.css"), "h1 { color: red }").unwrap(); + std::fs::write( + root.join("web/assets/app.js"), + "import { loaded } from './helper.js'; document.body.dataset.loaded = loaded", + ) + .unwrap(); + std::fs::write( + root.join("web/assets/helper.js"), + "export const loaded = 'yes'", + ) + .unwrap(); + std::fs::write(root.join("web/assets/dot.svg"), "").unwrap(); + std::fs::write(root.join(".env"), "PRIVATE_TOKEN=secret").unwrap(); + std::fs::create_dir(root.join("node_modules")).unwrap(); + std::fs::write(root.join("node_modules/huge.js"), "ignored").unwrap(); + std::fs::write(root.join("binary.bin"), b"a\0b").unwrap(); + std::fs::write(root.join("web/private.rs"), "server-only source").unwrap(); + std::fs::write(root.join("outside.html"), "outside preview directory").unwrap(); + std::fs::write(root.join("large.txt"), vec![b'a'; 2 * 1024 * 1024 + 1]).unwrap(); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let addr = listener.local_addr().unwrap(); + let app = router_with_state(AppState::with_auth( + paths.clone(), + AuthState::enabled(TOKEN.into()), + )); + tokio::spawn(async move { + axum::serve(listener, app).await.unwrap(); + }); + ( + tmp, + paths, + addr, + reqwest::Client::builder().no_proxy().build().unwrap(), + ) +} + +#[tokio::test] +async fn bounded_read_only_files_hide_internal_paths_and_reject_escapes() { + let (_tmp, paths, addr, client) = fixture().await; + let base = format!("http://{addr}/api/v1/projects/demo"); + assert_eq!( + client + .get(format!("{base}/files")) + .send() + .await + .unwrap() + .status(), + 401 + ); + let response: Value = client + .get(format!("{base}/files")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + let names = response["paths"].as_array().unwrap(); + assert!(names.contains(&json!("web/index.html"))); + assert!(!names.iter().any(|p| p.as_str().unwrap().contains(".env") + || p.as_str().unwrap().contains("node_modules") + || p.as_str().unwrap().contains(".ccteam"))); + for (path, status) in [ + ("web/index.html", 200), + ("../secret", 403), + (".env", 403), + ("node_modules/huge.js", 403), + ("large.txt", 413), + ] { + let response = client + .get(format!("{base}/file")) + .query(&[("path", path)]) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap(); + assert_eq!(response.status(), status, "{path}"); + } + let binary: Value = client + .get(format!("{base}/file?path=binary.bin")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + assert_eq!(binary["binary"], true); + assert!(binary["content"].is_null()); + #[cfg(unix)] + { + nix::unistd::mkfifo( + &paths.project_dir("demo").join("pipe.txt"), + nix::sys::stat::Mode::S_IRUSR, + ) + .unwrap(); + let response = tokio::time::timeout( + std::time::Duration::from_secs(2), + client + .get(format!("{base}/file?path=pipe.txt")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send(), + ) + .await + .expect("FIFO must not hang") + .unwrap(); + assert_eq!(response.status(), 404); + } + #[cfg(unix)] + { + std::os::unix::fs::symlink("/etc/passwd", paths.project_dir("demo").join("escape.txt")) + .unwrap(); + assert_eq!( + client + .get(format!("{base}/file?path=escape.txt")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .status(), + 403 + ); + } +} + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +#[ignore = "Chromium integration: make test-files-browser"] +async fn preview_runs_relative_modules_and_css_inside_an_opaque_browser_sandbox() { + let (_tmp, _paths, addr, client) = fixture().await; + let link: Value = client + .post(format!("http://{addr}/api/v1/projects/demo/files/preview")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .json(&json!({"path":"web/index.html"})) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + let script = + std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("web/tests/file-preview-browser.mjs"); + let status = tokio::process::Command::new("node") + .arg(script) + .arg(format!("http://{addr}")) + .arg(link["url"].as_str().unwrap()) + .status() + .await + .unwrap(); + assert!(status.success(), "Chromium preview verification failed"); +} + +#[tokio::test] +async fn preview_capability_loads_relative_assets_without_login_and_cannot_cross_projects() { + let (_tmp, _paths, addr, client) = fixture().await; + let base = format!("http://{addr}"); + let link: Value = client + .post(format!("{base}/api/v1/projects/demo/files/preview")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .json(&json!({"path":"web/index.html"})) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + let url = link["url"].as_str().unwrap(); + let response = client.get(format!("{base}{url}")).send().await.unwrap(); + assert_eq!(response.status(), 200); + let csp = response.headers()["content-security-policy"] + .to_str() + .unwrap(); + assert!(csp.contains("sandbox allow-scripts")); + assert!(!csp.contains("allow-same-origin")); + assert_eq!(response.headers()["referrer-policy"], "no-referrer"); + assert!(response.headers().get("set-cookie").is_none()); + let asset = url.replace("index.html", "assets/app.js"); + let response = client + .get(format!("{base}{asset}")) + .header("Origin", "null") + .send() + .await + .unwrap(); + assert_eq!(response.status(), 200); + assert_eq!(response.headers()["access-control-allow-origin"], "*"); + assert!(response.text().await.unwrap().contains("dataset.loaded")); + let wrong_project = url.replace("/projects/demo/", "/projects/other/"); + assert_eq!( + client + .get(format!("{base}{wrong_project}")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .send() + .await + .unwrap() + .status(), + 401 + ); + let private = url.replace("web/index.html", ".env"); + assert_eq!( + client + .get(format!("{base}{private}")) + .send() + .await + .unwrap() + .status(), + 403 + ); + for path in [ + url.replace("web/index.html", "outside.html"), + url.replace("index.html", "private.rs"), + ] { + assert_eq!( + client + .get(format!("{base}{path}")) + .send() + .await + .unwrap() + .status(), + 403 + ); + } + assert_eq!( + client + .get(format!( + "{base}/api/v1/projects/demo/files/preview/bad/web/index.html" + )) + .send() + .await + .unwrap() + .status(), + 401 + ); +} diff --git a/crates/ccteam-web/tests/openapi_test.rs b/crates/ccteam-web/tests/openapi_test.rs index 280d6141..86884bb0 100644 --- a/crates/ccteam-web/tests/openapi_test.rs +++ b/crates/ccteam-web/tests/openapi_test.rs @@ -136,6 +136,13 @@ fn expected_operations() -> BTreeSet<(&'static str, &'static str)> { ("PUT", "/api/v1/projects/{slug}/roles/{role}"), // v0.9.11 TEAM-2 — division-of-labor charter (routing.md) ("GET", "/api/v1/projects/{slug}/routing"), + ("GET", "/api/v1/projects/{slug}/files"), + ("GET", "/api/v1/projects/{slug}/file"), + ("POST", "/api/v1/projects/{slug}/files/preview"), + ( + "GET", + "/api/v1/projects/{slug}/files/preview/{ticket}/{*path}", + ), ("PUT", "/api/v1/projects/{slug}/routing"), // composer attachments — project uploads + installed-skill picker ("POST", "/api/v1/projects/{slug}/uploads"), diff --git a/crates/ccteam-web/web/package-lock.json b/crates/ccteam-web/web/package-lock.json index cd11f233..a313073f 100644 --- a/crates/ccteam-web/web/package-lock.json +++ b/crates/ccteam-web/web/package-lock.json @@ -8,8 +8,14 @@ "name": "ccteam-web", "version": "0.3.2", "dependencies": { + "@codemirror/language-data": "6.5.2", + "@codemirror/search": "6.7.2", + "@codemirror/state": "6.7.6", + "@codemirror/view": "6.43.15", + "@pierre/trees": "1.0.0-beta.6", "@tailwindcss/vite": "^4.2.2", "@tanstack/react-table": "^8.21.3", + "@uiw/react-codemirror": "4.25.12", "@wterm/core": "^0.1.8", "@wterm/dom": "^0.1.8", "@wterm/react": "^0.1.8", @@ -22,6 +28,7 @@ "react": "^19.2.4", "react-diff-viewer-continued": "^4.2.2", "react-dom": "^19.2.4", + "react-resizable-panels": "4.16.1", "react-router-dom": "^7.14.2", "remark-gfm": "^4.0.1", "shiki": "^4.0.2", @@ -317,6 +324,426 @@ "specificity": "bin/cli.js" } }, + "node_modules/@codemirror/autocomplete": { + "version": "6.20.4", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.4.tgz", + "integrity": "sha512-yF8RhOf2SXlg00+qtupzLhrglcas61boqaONiNcbPIebHCpJocpqTBA6dyrtUrQO47hqyTdeob/3XnYilT7TaQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.11.1.tgz", + "integrity": "sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.7.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-angular": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz", + "integrity": "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.3" + } + }, + "node_modules/@codemirror/lang-cpp": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz", + "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/cpp": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", + "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.1.7" + } + }, + "node_modules/@codemirror/lang-go": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-go/-/lang-go-6.0.1.tgz", + "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/go": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.12.tgz", + "integrity": "sha512-pw2ReWKUqSkbvh76RAT4NYxiogRu+PWkR2ukAwO9uOgrm8uipkzjtKKtNpyeAQwHOqxEeSvAXZ6vr3AfyB9y/w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.12" + } + }, + "node_modules/@codemirror/lang-java": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.2.tgz", + "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/java": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz", + "integrity": "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-jinja": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.1.tgz", + "integrity": "sha512-P5kyHLObzjtbGj16h+hyvZTxJhSjBEeSx4wMjbnAf3b0uwTy2+F0zGjMZL4PQOm/mh2eGZ5xUDVZXgwP783Nsw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-less": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-less/-/lang-less-6.0.2.tgz", + "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-liquid": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-liquid/-/lang-liquid-6.3.3.tgz", + "integrity": "sha512-U9EnyzWuAx1TX3MZSKDXydKH734n1Aogk/ijKdW+jdIwmbf9zSPQYOIKggC/b2PTRjQb7ddvMktmxnfTLuv/SQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-markdown": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.2.tgz", + "integrity": "sha512-AwBOdkWYuA//WcM0xO5PfHPUcmz/O2i5o0Nsg1U69SII/loCJlFI1Romd9xp2HYb1kYJRGZotyqRghuHH5n8Kw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.7.1", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.3.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/markdown": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-php": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-php/-/lang-php-6.0.2.tgz", + "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/php": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-python": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.2.1.tgz", + "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.3.2", + "@codemirror/language": "^6.8.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/python": "^1.1.4" + } + }, + "node_modules/@codemirror/lang-rust": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz", + "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/rust": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sass": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz", + "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/sass": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sql": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz", + "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-vue": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz", + "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-wast": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz", + "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-yaml": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.3.tgz", + "integrity": "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.0.0", + "@lezer/yaml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.13.1.tgz", + "integrity": "sha512-zfvU2r3TyylQLMj/te+5CnQ0rSqZi8B1oTCBbQkagcLW4Xc6imab6qN+pEJhsuNOLaJqiRyBXp9UhWA1DhVvDw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/streamparser": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/language-data": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz", + "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-angular": "^0.1.0", + "@codemirror/lang-cpp": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-go": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-java": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/lang-jinja": "^6.0.0", + "@codemirror/lang-json": "^6.0.0", + "@codemirror/lang-less": "^6.0.0", + "@codemirror/lang-liquid": "^6.0.0", + "@codemirror/lang-markdown": "^6.0.0", + "@codemirror/lang-php": "^6.0.0", + "@codemirror/lang-python": "^6.0.0", + "@codemirror/lang-rust": "^6.0.0", + "@codemirror/lang-sass": "^6.0.0", + "@codemirror/lang-sql": "^6.0.0", + "@codemirror/lang-vue": "^0.1.1", + "@codemirror/lang-wast": "^6.0.0", + "@codemirror/lang-xml": "^6.0.0", + "@codemirror/lang-yaml": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/legacy-modes": "^6.4.0" + } + }, + "node_modules/@codemirror/legacy-modes": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.5.tgz", + "integrity": "sha512-9ltT214oMb3Y1w5eAZMSigzrjzZnMI2Wa3Feq73rU/i4C56MkwrpfswfQYOr28C5pXr6dWwspNTMyeHXlzWMxg==", + "license": "MIT", + "dependencies": { + "@codemirror/streamparser": "^6.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.7.tgz", + "integrity": "sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.42.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.7.2.tgz", + "integrity": "sha512-gUYkYhT2+n/+VGZ+8EzE5WFkYZUZYm1VOKDudIsNqh42uRVQJ0a6Yss9sdKT3MeOYfuL1N6AZA57oza0Oyr0LA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.37.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.7.6", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.7.6.tgz", + "integrity": "sha512-kAz+AncRtKuIknedxT1bq4XwXv4UowhbkHU1myPrtVb/jZtImWuV5BXzv5vK6i3kYACsdiZiQKFQQ5Mq7elW8w==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/streamparser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/streamparser/-/streamparser-6.0.0.tgz", + "integrity": "sha512-JTFPF6xrfjt0mnfGPgzcLiMwYmvIyNaoizp8BYzv8FE8KrT6GBGDZ190rtt+O7Wke3gG/MFHyiY9YGNeimof4w==", + "license": "MIT" + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz", + "integrity": "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.43.15", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.15.tgz", + "integrity": "sha512-HHsfpqFeHyXLs983pSRe38Xajs0vFWZQ2BuX0m7Ki8w3jZ5iD8cuR3lBz2/5/X53Dhf32SBHKh6rtSTB6tKeGw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.7.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/@csstools/color-helpers": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", @@ -808,6 +1235,189 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lezer/common": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.5.tgz", + "integrity": "sha512-Pw7PVCndruF1pb3ebCxpSVpkMHSDjwRCLcTRw+RizUKco5QbWylwq2g4lnG/RYN7yTTQDXE9F77MwtkAyphrjg==", + "license": "MIT" + }, + "node_modules/@lezer/cpp": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.6.tgz", + "integrity": "sha512-vh9gWWJOXFVY8HBHK3Twzq8MgwG2iN4GSyzBP9sCGTe37P15x2R14VaBQk0VA0ezTRN1KHYBBsHhvpGZ2Xy/pA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/css": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.9.tgz", + "integrity": "sha512-ZmzgvTOBdJWGIsY/ItAfN7UW8DV802oZG+jeG6E508SwEzz5YhuAajptpWPICvIyqYAD2+VjMdOS40GgGkyEOQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/go": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/go/-/go-1.0.1.tgz", + "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.5.tgz", + "integrity": "sha512-O1GMVKgtf5YspFaRzpmqkVgMtIk2HG9uMAbH6wdAIdNh3TVzCsch/+cRi+6l2//UGDKe6NB9BW3cvuR5ezMQ0w==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", + "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/java": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.1.5.tgz", + "integrity": "sha512-JppTd1iKHpeNlLYw/Zl8JX7zSY5HqAzK4zZ05lpn8l8Sk7Fo5KAKiDiMiezKoT5lfeC2xZf8HeKp1tSctj4G6Q==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.6.tgz", + "integrity": "sha512-sEvOqpl4vJQca0NugSQK02vQPbc5KrvoojnYGoqqFgFO0MtcYhwGiHKVEB+LuXYJnfyXo4QPA8ztbrEa4Fw5NA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.12.tgz", + "integrity": "sha512-On9HU4oMMiHPMkQDgoTnGahjgG5n/MkN38CgG77sMraKLL+3JBbeQNi1FcCXV9QRqwF9/BUXP3caHyJC1fBOTQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/markdown": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.8.1.tgz", + "integrity": "sha512-M5YmEcKWO4mJ45Y1hECwqyu8cLv25EiXOK554PVOvDOWOP0olwelHHQUWr9sjF+d1bENVhy0nfJ8E57XZUTiXg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@lezer/php": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lezer/php/-/php-1.0.6.tgz", + "integrity": "sha512-QJ2xNXPmsm/Z3IpThq8fnJrEIVpxhsIoj6GZBW0JYEd/l9zxpJZW216X4fzqQY4vgpdGIumypvI4uQjd4tnYtw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.1.0" + } + }, + "node_modules/@lezer/python": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.19.tgz", + "integrity": "sha512-MhQIURHRytsNzP/YXnqpYKW6la6voAH3kyplTOOiCdjyFY6cWWGFVmYVdHIPrElqSDf4iCDktQCockB9FxuhzQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/rust": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.3.tgz", + "integrity": "sha512-XxErOjZzQ7yJt1agUT4fu9qQvESZ3acgoxpPaPTPOiUx+duCjaVAtZGFIgphkHxlN05djdVAIOy/wItShMEjqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/sass": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lezer/sass/-/sass-1.1.0.tgz", + "integrity": "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", + "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/yaml": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.4.tgz", + "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.4.tgz", + "integrity": "sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==", + "license": "MIT" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", @@ -834,6 +1444,51 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@pierre/theming": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pierre/theming/-/theming-1.0.0.tgz", + "integrity": "sha512-WsdrnhKfjeyXGDikZmN9pkpeZ5S/cl6EE72feiSc0tlynT1tMYqXqouhuv/foK+PY9OEnebOAVRQn3+rAstR8g==", + "license": "apache-2.0", + "peerDependencies": { + "@pierre/theme": "^1.1.0", + "@shikijs/themes": "^3.0.0 || ^4.0.0", + "react": "^18.3.1 || ^19.0.0", + "react-dom": "^18.3.1 || ^19.0.0", + "shiki": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@pierre/theme": { + "optional": true + }, + "@shikijs/themes": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "shiki": { + "optional": true + } + } + }, + "node_modules/@pierre/trees": { + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@pierre/trees/-/trees-1.0.0-beta.6.tgz", + "integrity": "sha512-zxeuSFM9TveM7b5XofweJALCtm/tGYV9HZzdbf7Uf+kBxIlUyz24/EHaGRjB0dsmmfDQl2ETz7AWwJ15lhSnpw==", + "license": "apache-2.0", + "dependencies": { + "@pierre/theming": "1.0.0", + "preact": "11.0.0-beta.0", + "preact-render-to-string": "6.6.5" + }, + "peerDependencies": { + "react": "^18.3.1 || ^19.0.0", + "react-dom": "^18.3.1 || ^19.0.0" + } + }, "node_modules/@playwright/test": { "version": "1.60.0", "dev": true, @@ -2235,6 +2890,59 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@uiw/codemirror-extensions-basic-setup": { + "version": "4.25.12", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.25.12.tgz", + "integrity": "sha512-wR5lz7jbVcBGyiiLEObAmDikcc39KNqrrd4bdUhav85WZu48ttgnSf1YV+grHuMsj5l/WCw6u+r9ZuSfURJgiA==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/autocomplete": ">=6.0.0", + "@codemirror/commands": ">=6.0.0", + "@codemirror/language": ">=6.0.0", + "@codemirror/lint": ">=6.0.0", + "@codemirror/search": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@uiw/react-codemirror": { + "version": "4.25.12", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.25.12.tgz", + "integrity": "sha512-RE0Gj/QesD7/JWPnJREG8Kq8brGv2NAH17iUECcBrLkqXzzEAgsj/4Qqvz/OlK8XWKmzlsenLRkObT9H+gYQ0w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.25.12", + "codemirror": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.11.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/theme-one-dark": ">=6.0.0", + "@codemirror/view": ">=6.0.0", + "codemirror": ">=6.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.1", "license": "ISC" @@ -2658,6 +3366,21 @@ "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/codemirror": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz", + "integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -2717,6 +3440,12 @@ "node": ">=10" } }, + "node_modules/crelt": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.7.tgz", + "integrity": "sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "dev": true, @@ -4834,6 +5563,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-11.0.0-beta.0.tgz", + "integrity": "sha512-IcODoASASYwJ9kxz7+MJeiJhvLriwSb4y4mHIyxdgaRZp6kPUud7xytrk/6GZw8U3y6EFJaRb5wi9SrEK+8+lg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.6.5.tgz", + "integrity": "sha512-O6MHzYNIKYaiSX3bOw0gGZfEbOmlIDtDfWwN1JJdc/T3ihzRT6tGGSEWE088dWrEDGa1u7101q+6fzQnO9XCPA==", + "license": "MIT", + "peerDependencies": { + "preact": ">=10 || >= 11.0.0-0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -4941,6 +5689,22 @@ } } }, + "node_modules/react-resizable-panels": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.16.1.tgz", + "integrity": "sha512-XI02YTQxqwVAzSJCvaQ6Ze7ubwyjVRCyihu835q7wx5a1NAJXt0rnvv3TdWxGklrQD1G+IrLJMMjlFUmbCLABg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.2.6 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-router": { "version": "7.15.0", "license": "MIT", @@ -5254,6 +6018,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-mod": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.4.tgz", + "integrity": "sha512-XXWIQt633/EpAFx8aZDOTjBzrCaGmhvEQlQo6MVPfa2OzO2cWo+4hV9h+6UkHYlXGfy+ODXKUdP7Pthmcu5ATw==", + "license": "MIT" + }, "node_modules/stylis": { "version": "4.2.0", "license": "MIT" @@ -5838,6 +6608,12 @@ } } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", diff --git a/crates/ccteam-web/web/package.json b/crates/ccteam-web/web/package.json index e8d064ab..8d6b4465 100644 --- a/crates/ccteam-web/web/package.json +++ b/crates/ccteam-web/web/package.json @@ -13,8 +13,14 @@ "test:unit": "vitest run" }, "dependencies": { + "@codemirror/language-data": "6.5.2", + "@codemirror/search": "6.7.2", + "@codemirror/state": "6.7.6", + "@codemirror/view": "6.43.15", + "@pierre/trees": "1.0.0-beta.6", "@tailwindcss/vite": "^4.2.2", "@tanstack/react-table": "^8.21.3", + "@uiw/react-codemirror": "4.25.12", "@wterm/core": "^0.1.8", "@wterm/dom": "^0.1.8", "@wterm/react": "^0.1.8", @@ -27,6 +33,7 @@ "react": "^19.2.4", "react-diff-viewer-continued": "^4.2.2", "react-dom": "^19.2.4", + "react-resizable-panels": "4.16.1", "react-router-dom": "^7.14.2", "remark-gfm": "^4.0.1", "shiki": "^4.0.2", diff --git a/crates/ccteam-web/web/playwright.config.ts b/crates/ccteam-web/web/playwright.config.ts index 2b27259f..3782d352 100644 --- a/crates/ccteam-web/web/playwright.config.ts +++ b/crates/ccteam-web/web/playwright.config.ts @@ -1,5 +1,8 @@ import { defineConfig } from "@playwright/test"; +// Parallel checkouts must never silently test another checkout's server. +const previewPort = Number(process.env.CCTEAM_WEB_TEST_PORT ?? 4173); + export default defineConfig({ testDir: "./tests", // V0.3.2 F59 keeps only ccteam-owned SPA smoke in the default @@ -11,7 +14,7 @@ export default defineConfig({ timeout: 30000, retries: process.env.CI ? 1 : 0, use: { - baseURL: "http://localhost:4173", + baseURL: `http://127.0.0.1:${previewPort}`, headless: true, screenshot: "only-on-failure", }, @@ -20,8 +23,8 @@ export default defineConfig({ // `npx` on PATH (only `node`/`npm`; observed in this wave's sandbox) since // `vite` is already a devDependency, so `node_modules/.bin/vite` always // resolves post-install without depending on the npx shim at all. - command: "node_modules/.bin/vite preview --port 4173", - port: 4173, + command: `node_modules/.bin/vite preview --host 127.0.0.1 --port ${previewPort} --strictPort`, + port: previewPort, reuseExistingServer: !process.env.CI, }, reporter: process.env.CI ? [["html", { open: "never" }], ["github"]] : "list", diff --git a/crates/ccteam-web/web/src/components/FileWorkspace.tsx b/crates/ccteam-web/web/src/components/FileWorkspace.tsx new file mode 100644 index 00000000..b84bef0d --- /dev/null +++ b/crates/ccteam-web/web/src/components/FileWorkspace.tsx @@ -0,0 +1,644 @@ +import { + useCallback, + useEffect, + useMemo, + useRef, + useState, + type CSSProperties, +} from "react"; +import { FileTree, useFileTree } from "@pierre/trees/react"; +import { Group, Panel, Separator } from "react-resizable-panels"; +import CodeMirror, { type ReactCodeMirrorRef } from "@uiw/react-codemirror"; +import { languages } from "@codemirror/language-data"; +import type { Extension } from "@codemirror/state"; +import { EditorView } from "@codemirror/view"; +import { + ExternalLink, + Files, + FolderTree, + Maximize2, + Minimize2, + Pin, + RefreshCw, + X, +} from "lucide-react"; +import { + getProjectFile, + getProjectFiles, + mintFilePreview, + openFileTab, + projectRelativePath, + type FileTab, + type FileTarget, + type ProjectFile, + type ProjectFiles, +} from "../lib/filesApi"; +import { makeT, type Lang } from "../lib/i18n"; +const READER_THEME = EditorView.theme({ + "&": { fontSize: "12px" }, + ".cm-scroller": { + fontFamily: "var(--font-mono)", + lineHeight: "1.6", + overflow: "auto", + }, +}); + +export interface FileWorkspaceProps { + project: string; + lang: Lang; + onClose: () => void; + target?: FileTarget | null; + refreshKey?: string | number | null; + focusOnMount?: boolean; + visible?: boolean; +} + +function readExpanded(project: string): string[] { + try { + const stored: unknown = JSON.parse( + localStorage.getItem(`ccteam.files.expanded.${project}`) ?? "[]", + ); + return Array.isArray(stored) + ? stored + .filter((path): path is string => typeof path === "string") + .slice(0, 20_000) + : []; + } catch { + return []; + } +} + +function ProjectTree({ + data, + project, + active, + open, +}: { + data: ProjectFiles; + project: string; + active: string | null; + open: (path: string, pin?: boolean) => void; +}) { + const openRef = useRef(open); + useEffect(() => { + openRef.current = open; + }, [open]); + const { model } = useFileTree({ + paths: data.paths, + icons: "complete", + search: true, + density: "compact", + stickyFolders: true, + flattenEmptyDirectories: true, + initialExpansion: "closed", + initialExpandedPaths: readExpanded(project), + gitStatus: Object.entries(data.git_status).map(([path, status]) => ({ + path, + status, + })), + onSelectionChange: (selected) => { + const path = selected.at(-1); + if ( + path && + !path.endsWith("/") && + model.getItem(path)?.isDirectory() === false + ) + openRef.current(path); + }, + }); + useEffect(() => { + model.resetPaths(data.paths, { + initialExpandedPaths: readExpanded(project), + }); + model.setGitStatus( + Object.entries(data.git_status).map(([path, status]) => ({ + path, + status, + })), + ); + }, [data, model, project]); + useEffect(() => { + const directories = data.paths + .filter((p) => p.endsWith("/")) + .map((p) => p.slice(0, -1)); + let timer: ReturnType | undefined; + let previous = JSON.stringify(readExpanded(project).sort()); + const persist = () => { + const expanded = directories + .filter((path) => { + const item = model.getItem(path); + return item && "isExpanded" in item && item.isExpanded(); + }) + .sort(); + const next = JSON.stringify(expanded); + if (next === previous) return; + previous = next; + try { + localStorage.setItem(`ccteam.files.expanded.${project}`, next); + } catch { + /* storage optional */ + } + }; + const unsubscribe = model.subscribe(() => { + clearTimeout(timer); + timer = setTimeout(persist, 200); + }); + return () => { + clearTimeout(timer); + unsubscribe(); + persist(); + }; + }, [data.paths, model, project]); + useEffect(() => { + if (!active) return; + const parts = active.split("/"); + for (let count = 1; count < parts.length; count++) { + const parent = model.getItem(parts.slice(0, count).join("/")); + if (parent && "expand" in parent) parent.expand(); + } + if (!model.getSelectedPaths().includes(active)) + model.getItem(active)?.select(); + model.scrollToPath(active, { focus: false, offset: "nearest" }); + }, [active, data, model]); + const style = { + height: "100%", + width: "100%", + "--trees-bg-override": "var(--bg-side)", + "--trees-fg-override": "var(--text)", + "--trees-selected-bg-override": "var(--bg-soft)", + "--trees-border-color-override": "var(--border-soft)", + } as CSSProperties; + return ( + { + const path = model.getFocusedPath(); + if (path && model.getItem(path)?.isDirectory() === false) + openRef.current(path, true); + }} + /> + ); +} + +export default function FileWorkspace({ + project, + lang, + onClose, + target, + refreshKey, + focusOnMount, + visible = true, +}: FileWorkspaceProps) { + const t = makeT(lang); + const [tree, setTree] = useState(null); + const [treeError, setTreeError] = useState(null); + const [tabs, setTabs] = useState([]); + const [active, setActive] = useState(null); + const [file, setFile] = useState(null); + const [fileFailure, setFileFailure] = useState<{ + path: string; + message: string; + } | null>(null); + const [loading, setLoading] = useState(true); + const [revision, setRevision] = useState(0); + const [mode, setMode] = useState<"source" | "preview">("source"); + const [preview, setPreview] = useState<{ path: string; url: string } | null>( + null, + ); + const [previewFailure, setPreviewFailure] = useState<{ + path: string; + message: string; + } | null>(null); + const [treeVisible, setTreeVisible] = useState(true); + const [expanded, setExpanded] = useState(false); + const [extensions, setExtensions] = useState([]); + const [copied, setCopied] = useState(false); + const [appliedTarget, setAppliedTarget] = useState(null); + const panelRef = useRef(null); + const editorRef = useRef(null); + const scrollCleanup = useRef<(() => void) | null>(null); + const appliedNavigation = useRef(null); + const scrollPositions = useRef(new Map()); + const isHtml = /\.html?$/i.test(active ?? ""); + const readerExtensions = useMemo( + () => [...extensions, READER_THEME], + [extensions], + ); + + const open = useCallback( + (path: string, pin = false) => { + setTabs((old) => openFileTab(old, path, pin)); + setActive(path); + if (active !== path) + setMode(/\.html?$/i.test(path) ? "preview" : "source"); + }, + [active], + ); + + useEffect(() => { + const controller = new AbortController(); + getProjectFiles(project, controller.signal) + .then((data) => { + setTree(data); + setTreeError(null); + setLoading(false); + }) + .catch((e: Error) => { + if (!controller.signal.aborted) { + setTreeError(e.message); + setLoading(false); + } + }); + return () => controller.abort(); + }, [project, revision, refreshKey]); + + if (target && tree && target !== appliedTarget) { + const relative = projectRelativePath(tree.root, target.path); + setAppliedTarget(target); + if (relative) { + setTabs((old) => openFileTab(old, relative, true)); + setActive(relative); + setMode( + !target.line && /\.html?$/i.test(relative) ? "preview" : "source", + ); + } + } + + useEffect(() => { + if (focusOnMount && visible) panelRef.current?.focus(); + }, [focusOnMount, visible]); + + useEffect(() => { + if (!active) return; + const controller = new AbortController(); + getProjectFile(project, active, controller.signal) + .then((data) => { + setFile(data); + setFileFailure(null); + }) + .catch((e: Error) => { + if (!controller.signal.aborted) + setFileFailure({ path: active, message: e.message }); + }); + const language = languages.find((l) => + l.extensions.includes(active.split(".").at(-1) ?? ""), + ); + void Promise.resolve(language?.load()) + .then((support) => { + if (!controller.signal.aborted) setExtensions(support ? [support] : []); + }) + .catch(() => { + if (!controller.signal.aborted) setExtensions([]); + }); + return () => controller.abort(); + }, [project, active, revision, refreshKey]); + + useEffect(() => { + if (!visible || !active || !/\.html?$/i.test(active) || mode !== "preview") + return; + const controller = new AbortController(); + mintFilePreview(project, active, controller.signal) + .then((data) => { + setPreview({ path: active, url: data.url }); + setPreviewFailure(null); + }) + .catch((e: Error) => { + if (!controller.signal.aborted) + setPreviewFailure({ path: active, message: e.message }); + }); + return () => controller.abort(); + }, [project, active, mode, revision, refreshKey, visible]); + + // Only render responses for the selected path. A previous file's content + // must never flash while the next request is in flight. + const current = file?.path === active ? file : null; + const applyNavigation = useCallback( + (view: EditorView) => { + if ( + !appliedTarget?.line || + !tree || + !active || + appliedNavigation.current === appliedTarget || + projectRelativePath(tree.root, appliedTarget.path) !== active + ) + return false; + const pos = view.state.doc.line( + Math.min(appliedTarget.line, view.state.doc.lines), + ).from; + view.dispatch({ + selection: { anchor: pos }, + effects: EditorView.scrollIntoView(pos, { y: "center" }), + }); + appliedNavigation.current = appliedTarget; + return true; + }, + [active, appliedTarget, tree], + ); + useEffect(() => { + const view = editorRef.current?.view; + if (view && current) applyNavigation(view); + }, [applyNavigation, current]); + useEffect(() => () => scrollCleanup.current?.(), []); + useEffect(() => { + if (!active || mode !== "source") { + scrollCleanup.current?.(); + scrollCleanup.current = null; + } + }, [active, mode]); + const refresh = () => { + setLoading(true); + setRevision((v) => v + 1); + }; + const closeTab = (path: string) => { + const next = tabs.filter((tab) => tab.path !== path); + setTabs(next); + if (active === path) { + const last = next.at(-1); + setActive(last?.path ?? null); + setMode(/\.html?$/i.test(last?.path ?? "") ? "preview" : "source"); + } + }; + const freshPreview = preview?.path === active ? preview.url : null; + const previewError = + previewFailure?.path === active ? previewFailure.message : null; + const fileError = fileFailure?.path === active ? fileFailure.message : null; + + return ( + <> + + {t("filesTitle")} + + {project} + + + + + + {treeError ? ( +
+ {treeError} + +
+ ) : null} + {tree?.truncated ? ( +
{t("filesTruncated")}
+ ) : null} + + {treeVisible ? ( + <> + +
+ {tree ? ( + + ) : ( +
+ {loading ? t("filesLoading") : t("filesEmpty")} +
+ )} +
+
+ + + ) : null} + +
+
+ {tabs.map((tab) => ( +
+ + +
+ ))} +
+ {active ? ( + <> +
+ {active} + + +
+ {isHtml ? ( +
+ + + {freshPreview ? ( + + + {t("filesNewTab")} + + ) : null} +
+ ) : null} + {mode === "preview" && isHtml ? ( + previewError ? ( +
+ {previewError} +
+ ) : freshPreview && visible ? ( + `); + const frame = page.frameLocator("iframe"); + await frame.locator("body[data-loaded=yes]").waitFor(); + assert.equal(await frame.locator("img").evaluate((el) => el.complete && el.naturalWidth === 3), true); + assert.equal(await frame.locator("h1").evaluate((el) => getComputedStyle(el).color), "rgb(255, 0, 0)"); + assert.equal(await frame.locator("body").evaluate(() => { + try { return parent.document.body ? "leaked" : "bad"; } catch { return "isolated"; } + }), "isolated"); + assert.equal(await frame.locator("body").evaluate(() => { + try { return localStorage.getItem("preview-parent-secret"); } catch { return "isolated"; } + }), "isolated"); + const direct = await browser.newPage(); + await direct.goto(`${base}${path}`); + await direct.locator("body[data-loaded=yes]").waitFor(); + assert.equal(await direct.evaluate(() => { + try { document.cookie = "preview=unsafe"; return "leaked"; } catch { return "isolated"; } + }), "isolated"); + console.log("Chromium: relative module + stylesheet, iframe and standalone isolation passed"); +} finally { + await browser.close(); +} diff --git a/crates/ccteam-web/web/tests/v032-spa.spec.ts b/crates/ccteam-web/web/tests/v032-spa.spec.ts index 78c1e778..06b6a99d 100644 --- a/crates/ccteam-web/web/tests/v032-spa.spec.ts +++ b/crates/ccteam-web/web/tests/v032-spa.spec.ts @@ -161,7 +161,10 @@ async function mockCcteamApi(page: Page): Promise { route.fulfill({ status: 200, json: { wire_token: null } }), ); await page.route("**/api/v1/me", (route) => - route.fulfill({ status: 200, json: { id: "admin", handle: "owner", is_admin: true } }), + route.fulfill({ + status: 200, + json: { id: "admin", handle: "owner", is_admin: true }, + }), ); await page.route("**/api/v1/status", (route) => route.fulfill({ status: 200, json: statusSnapshot }), @@ -171,7 +174,13 @@ async function mockCcteamApi(page: Page): Promise { status: 200, json: { hosts: [ - { host: "local", hostname: "dev01", is_local: true, agent_count: 5, agents_ready: 5 }, + { + host: "local", + hostname: "dev01", + is_local: true, + agent_count: 5, + agents_ready: 5, + }, ], }, }), @@ -181,7 +190,8 @@ async function mockCcteamApi(page: Page): Promise { status: 200, json: { token: "e2e-join-token", - command: "ccteam host join --daemon --token e2e-join-token", + command: + "ccteam host join --daemon --token e2e-join-token", }, }), ); @@ -285,12 +295,18 @@ async function mockCcteamApi(page: Page): Promise { ); await page.route("**/api/v1/projects", (route) => { if (route.request().method() === "POST") { - return route.fulfill({ status: 201, json: { slug: "new-proj", path: "/tmp/new-proj" } }); + return route.fulfill({ + status: 201, + json: { slug: "new-proj", path: "/tmp/new-proj" }, + }); } return route.fulfill({ status: 200, json: dashboardRows }); }); await page.route("**/api/v1/projects/dev-team/roles", (route) => - route.fulfill({ status: 200, json: [{ role: "cto", description: "默认管家", model: "" }] }), + route.fulfill({ + status: 200, + json: [{ role: "cto", description: "默认管家", model: "" }], + }), ); await page.route("**/api/v1/projects/dev-team/sessions", (route) => { if (route.request().method() === "POST") { @@ -315,12 +331,20 @@ async function mockCcteamApi(page: Page): Promise { await page.route("**/api/v1/sessions/*/status", (route) => route.fulfill({ status: 200, - json: { sid: "s1", model: null, effort: null, context: null, status_line: null }, + json: { + sid: "s1", + model: null, + effort: null, + context: null, + status_line: null, + }, }), ); async function captureJson( - route: Parameters[1] extends (route: infer R) => unknown ? R : never, + route: Parameters[1] extends (route: infer R) => unknown + ? R + : never, ) { const req = route.request(); captured.push({ @@ -363,21 +387,29 @@ test("desktop shell: sidebar groups sessions by project and opens a sid conversa await expect(page.getByText("hi from history")).toBeVisible(); }); -test("conversation posts a turn; sidebar hover-stop stops the session", async ({ page }) => { +test("conversation posts a turn; sidebar hover-stop stops the session", async ({ + page, +}) => { const captured = await mockCcteamApi(page); await page.goto("/app/chat/s/s1"); await page.getByTestId("composer-textarea").fill("ship gate note"); await page.getByTestId("composer-send").click(); await expect - .poll(() => captured.some((r) => r.url.endsWith("/api/v1/sessions/s1/turn"))) + .poll(() => + captured.some((r) => r.url.endsWith("/api/v1/sessions/s1/turn")), + ) .toBe(true); // The sidebar row's hover stop (prototype `.srow .stop`) → POST /stop. await page.getByText("评审登录页").first().hover(); - await page.getByRole("button", { name: "停止(状态保留,可 resume) s1", exact: true }).click(); + await page + .getByRole("button", { name: "停止(状态保留,可 resume) s1", exact: true }) + .click(); await expect - .poll(() => captured.some((r) => r.url.endsWith("/api/v1/sessions/s1/stop"))) + .poll(() => + captured.some((r) => r.url.endsWith("/api/v1/sessions/s1/stop")), + ) .toBe(true); expect(captured).toEqual( @@ -409,11 +441,15 @@ test("home lazy-create: first message POSTs session without a host override, the await expect .poll(() => captured.some( - (r) => r.url.endsWith("/api/v1/projects/dev-team/sessions") && r.method === "POST", + (r) => + r.url.endsWith("/api/v1/projects/dev-team/sessions") && + r.method === "POST", ), ) .toBe(true); - const create = captured.find((r) => r.url.endsWith("/projects/dev-team/sessions")); + const create = captured.find((r) => + r.url.endsWith("/projects/dev-team/sessions"), + ); expect(create?.body).toMatchObject({ vendor: "claude", protocol: "stream-json", @@ -423,7 +459,9 @@ test("home lazy-create: first message POSTs session without a host override, the // The first message rides as the new session's first turn → Conversation. await expect - .poll(() => captured.some((r) => r.url.endsWith("/api/v1/sessions/s2/turn"))) + .poll(() => + captured.some((r) => r.url.endsWith("/api/v1/sessions/s2/turn")), + ) .toBe(true); const turn = captured.find((r) => r.url.endsWith("/api/v1/sessions/s2/turn")); expect(turn?.body).toEqual({ text: "修复登录页布局" }); @@ -440,19 +478,30 @@ test("Pi picker keeps role, uses provider/model-id, and exposes strict-HITL trad await page.getByRole("button", { name: /cto/ }).click(); await page.getByTestId("model-btn").click(); - await page.getByRole("button", { name: /anthropic\/claude-opus-4-6/ }).click(); - await expect(page.getByTestId("model-btn")).toContainText("Pi · anthropic/claude-opus-4-6"); + await page + .getByRole("button", { name: /anthropic\/claude-opus-4-6/ }) + .click(); + await expect(page.getByTestId("model-btn")).toContainText( + "Pi · anthropic/claude-opus-4-6", + ); await page.getByTestId("model-btn").click(); await page.getByRole("button", { name: "xhigh", exact: true }).click(); await page.getByTestId("hitl-toggle").click(); await expect(page.getByTestId("pi-hitl-tradeoff")).toContainText("用户扩展"); - await expect(page.getByTestId("pi-hitl-tradeoff")).toContainText("技能、上下文文件和提示词模板不受影响"); + await expect(page.getByTestId("pi-hitl-tradeoff")).toContainText( + "技能、上下文文件和提示词模板不受影响", + ); await page.getByTestId("composer-textarea").fill("验证 Pi 配方"); await page.getByTestId("home-send").click(); await expect - .poll(() => captured.find((request) => request.url.endsWith("/projects/dev-team/sessions"))?.body) + .poll( + () => + captured.find((request) => + request.url.endsWith("/projects/dev-team/sessions"), + )?.body, + ) .toMatchObject({ role: "cto", vendor: "pi", @@ -479,13 +528,7 @@ test("工作流 and 设置 render as set-nav views; ops merges Status + Hosts re await expect(page.getByTestId("status-view")).toBeVisible(); await expect(page.getByTestId("hosts-view")).toBeVisible(); await expect(page.getByText(/1 .*live/).first()).toBeVisible(); - await expect - .poll(() => - page - .getByTestId("ops-view") - .evaluate((node) => getComputedStyle(node).gridTemplateColumns.split(" ").length), - ) - .toBe(2); + await expect(page.getByTestId("ops-view")).toHaveCSS("flex-direction", "column"); // Both legacy settings and flat routes canonicalize to the merged tab. await page.goto("/app/settings/hosts"); @@ -496,13 +539,8 @@ test("工作流 and 设置 render as set-nav views; ops merges Status + Hosts re await expect(page).toHaveURL(/\/app\/settings\/ops$/); await page.setViewportSize({ width: 390, height: 844 }); - await expect - .poll(() => - page - .getByTestId("ops-view") - .evaluate((node) => getComputedStyle(node).gridTemplateColumns.split(" ").length), - ) - .toBe(1); + await expect(page.getByTestId("ops-view")).toHaveCSS("flex-direction", "column"); + await expect.poll(() => page.getByTestId("ops-view").evaluate((node) => node.getBoundingClientRect().right)).toBeLessThanOrEqual(391); }); test("mobile ≤820px: sidebar is a drawer behind the hamburger with a backdrop", async ({ @@ -523,11 +561,15 @@ test("mobile ≤820px: sidebar is a drawer behind the hamburger with a backdrop" await expect(page.getByTestId("side-backdrop")).toBeVisible(); // Backdrop click closes it again. - await page.getByTestId("side-backdrop").click({ position: { x: 350, y: 400 } }); + await page + .getByTestId("side-backdrop") + .click({ position: { x: 350, y: 400 } }); await expect(sidebar).not.toBeInViewport(); }); -test("401 after auth-required bootstrap shows the token entry flow", async ({ page }) => { +test("401 after auth-required bootstrap shows the token entry flow", async ({ + page, +}) => { await page.route("**/api/v1/auth/token", (route) => route.fulfill({ status: 200, json: { wire_token: "ccteam:deadbeef" } }), ); @@ -537,12 +579,14 @@ test("401 after auth-required bootstrap shows the token entry flow", async ({ pa await page.route("**/api/v1/me", (route) => route.fulfill({ status: 401, json: { error: "auth required" } }), ); - await page.route("**/sse/**", (route) => route.fulfill({ status: 200, body: "\n" })); + await page.route("**/sse/**", (route) => + route.fulfill({ status: 200, body: "\n" }), + ); await page.goto("/app/"); - await expect(page.getByLabel("Token or URL")).toBeVisible(); - await page.getByLabel("Token or URL").fill("abc123"); - await page.getByRole("button", { name: "Connect" }).click(); + await expect(page.getByLabel("访问令牌")).toBeVisible(); + await page.getByLabel("访问令牌").fill("abc123"); + await page.getByRole("button", { name: "登录", exact: true }).click(); await expect(page).toHaveURL(/\/\?token=ccteam%3Aabc123$/); }); @@ -557,8 +601,229 @@ test("fresh unauthenticated load surfaces the token entry page, not a wedged she await page.route("**/api/**", (route) => route.fulfill({ status: 401, body: "auth required" }), ); - await page.route("**/sse/**", (route) => route.fulfill({ status: 200, body: "\n" })); + await page.route("**/sse/**", (route) => + route.fulfill({ status: 200, body: "\n" }), + ); await page.goto("/app/"); - await expect(page.getByLabel("Token or URL")).toBeVisible(); + await expect(page.getByLabel("访问令牌")).toBeVisible(); +}); + +test("file workspace preserves Context, refreshes paths, and previews HTML", async ({ + page, +}) => { + await mockCcteamApi(page); + const paths = ["index.html", "README.md", "src/", "src/lib.rs"]; + await page.route("**/api/v1/projects/dev-team/files", (route) => + route.fulfill({ + json: { + root: "/repo", + paths, + git_status: { "README.md": "modified" }, + truncated: false, + }, + }), + ); + await page.route("**/api/v1/projects/dev-team/file?*", (route) => { + const path = new URL(route.request().url()).searchParams.get("path"); + return route.fulfill({ + json: { + path, + content: + path === "README.md" + ? "# Project\nRead me" + : "

Hello preview

", + size: 30, + binary: false, + }, + }); + }); + await page.route("**/api/v1/projects/dev-team/files/preview", (route) => + route.fulfill({ + json: { + url: "/api/v1/projects/dev-team/files/preview/test/index.html", + expires_in: 3600, + }, + }), + ); + await page.route("**/files/preview/test/index.html", (route) => + route.fulfill({ + contentType: "text/html", + headers: { "content-security-policy": "sandbox allow-scripts" }, + body: "

Hello preview

", + }), + ); + await page.route("**/api/v1/sessions/s1/context", (route) => + route.fulfill({ json: { sid: "s1", live: false, breakdown: null } }), + ); + await page.goto("/app/chat/s/s1"); + await page.getByTestId("files-toggle").click(); + await expect(page.getByTestId("ctx-toggle")).toBeVisible(); + await page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "index.html", exact: true }) + .click(); + await expect( + page + .frameLocator("iframe.files-preview") + .getByRole("heading", { name: "Hello preview" }), + ).toBeVisible(); + await page + .frameLocator("iframe.files-preview") + .getByRole("button", { name: "Click me" }) + .click(); + await expect( + page + .frameLocator("iframe.files-preview") + .getByRole("button", { name: "Clicked" }), + ).toBeVisible(); + await page.getByTestId("ctx-toggle").click(); + await expect(page.getByTestId("context-panel")).toBeVisible(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await page.getByTestId("files-toggle").click(); + await expect(page.getByRole("tab", { name: "index.html" })).toBeVisible(); + await page.getByRole("button", { name: /^(源码|Source)$/ }).click(); + await expect(page.locator(".cm-content")).toContainText("Hello preview"); + paths.push("new.txt"); + await page.getByRole("button", { name: /刷新文件|Refresh files/ }).click(); + await expect( + page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "new.txt", exact: true }), + ).toBeVisible(); + await expect(page.locator("iframe.files-preview")).toHaveCount(0); + await expect(page.locator(".cm-content")).toContainText("Hello preview"); + await page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "README.md", exact: true }) + .dblclick(); + await expect(page.locator(".cm-content")).toContainText("Read me"); + await page.keyboard.press("Escape"); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await expect(page.getByTestId("files-toggle")).toBeFocused(); +}); + +test("mobile Files drawer accepts clicks above its backdrop", async ({ + page, +}) => { + await mockCcteamApi(page); + await page.setViewportSize({ width: 390, height: 844 }); + await page.route("**/api/v1/projects/dev-team/files", (route) => + route.fulfill({ + json: { + root: "/repo", + paths: ["README.md"], + git_status: {}, + truncated: false, + }, + }), + ); + await page.route("**/api/v1/projects/dev-team/file?*", (route) => + route.fulfill({ + json: { + path: "README.md", + content: "Mobile source", + size: 13, + binary: false, + }, + }), + ); + await page.goto("/app/chat/s/s1"); + await page.getByTestId("files-toggle").click(); + await page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "README.md", exact: true }) + .click(); + await expect(page.locator(".cm-content")).toContainText("Mobile source"); + await page + .getByRole("button", { name: /关闭文件面板|Close file panel/ }) + .last() + .click(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); +}); + +test("file workspace follows repeated line links into the same file", async ({ + page, +}) => { + await mockCcteamApi(page); + await page.route("**/api/v1/sessions/s1", (route) => + route.fulfill({ + json: { + sid: "s1", + events: [ + { + turn_id: "links", + role: "reviewer", + user: "inspect", + assistant: + "[Lower](/repo/src/lib.rs:130) [Upper](/repo/src/lib.rs:10)", + }, + ], + }, + }), + ); + await page.route("**/api/v1/projects/dev-team/files", (route) => + route.fulfill({ + json: { + root: "/repo", + paths: ["other.txt", "src/", "src/lib.rs"], + git_status: {}, + truncated: false, + }, + }), + ); + await page.route("**/api/v1/projects/dev-team/file?*", (route) => { + const path = new URL(route.request().url()).searchParams.get("path"); + return route.fulfill({ + json: { + path, + content: + path === "other.txt" + ? "Other file" + : Array.from({ length: 160 }, (_, i) => `// line ${i + 1}`).join( + "\n", + ), + size: 2000, + binary: false, + }, + }); + }); + await page.goto("/app/chat/s/s1"); + await page.getByRole("link", { name: "Lower", exact: true }).click(); + await expect(page.locator(".cm-content")).toBeVisible(); + await expect( + page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "lib.rs", exact: true }), + ).toBeVisible(); + await expect + .poll(() => page.locator(".cm-scroller").evaluate((el) => el.scrollTop)) + .toBeGreaterThan(1000); + await page.getByRole("link", { name: "Upper", exact: true }).click(); + await expect + .poll(() => page.locator(".cm-scroller").evaluate((el) => el.scrollTop)) + .toBeLessThan(500); + await expect( + page.getByRole("tab", { name: "lib.rs", exact: true }), + ).toHaveCount(1); + await page.locator(".cm-scroller").hover(); + await page.mouse.wheel(0, 64); + await expect + .poll(() => page.locator(".cm-scroller").evaluate((el) => el.scrollTop)) + .toBeGreaterThan(20); + const readingPosition = await page + .locator(".cm-scroller") + .evaluate((el) => el.scrollTop); + await page + .getByTestId("project-file-tree") + .getByRole("treeitem", { name: "other.txt", exact: true }) + .click(); + await expect(page.locator(".cm-content")).toContainText("Other file"); + await page.getByRole("tab", { name: "lib.rs", exact: true }).click(); + await expect + .poll(() => page.locator(".cm-scroller").evaluate((el) => el.scrollTop)) + .toBeGreaterThan(readingPosition - 5); + await expect + .poll(() => page.locator(".cm-scroller").evaluate((el) => el.scrollTop)) + .toBeLessThan(readingPosition + 5); }); diff --git a/crates/ccteam-web/web/tests/v090-agents.spec.ts b/crates/ccteam-web/web/tests/v090-agents.spec.ts index f4ce5851..709b74d9 100644 --- a/crates/ccteam-web/web/tests/v090-agents.spec.ts +++ b/crates/ccteam-web/web/tests/v090-agents.spec.ts @@ -43,38 +43,19 @@ const agentsGraph = { async function mockAgentsApi(page: Page): Promise { await page.addInitScript(() => { - class MockEventSource extends EventTarget { - static CONNECTING = 0; - static OPEN = 1; - static CLOSED = 2; - - readonly url: string; - readonly withCredentials = false; - readyState = MockEventSource.CONNECTING; - onopen: ((event: Event) => void) | null = null; - onmessage: ((event: MessageEvent) => void) | null = null; - onerror: ((event: Event) => void) | null = null; - - constructor(url: string | URL) { - super(); - this.url = String(url); - const bag = (window as unknown as { __agentsEventSources: MockEventSource[] }); - bag.__agentsEventSources = bag.__agentsEventSources || []; - bag.__agentsEventSources.push(this); - queueMicrotask(() => { - this.readyState = MockEventSource.OPEN; - const event = new Event("open"); - this.onopen?.(event); - this.dispatchEvent(event); - }); - } - - close() { - this.readyState = MockEventSource.CLOSED; - } - } - (window as unknown as { EventSource: typeof EventSource }).EventSource = - MockEventSource as unknown as typeof EventSource; + const originalFetch = window.fetch.bind(window); + window.fetch = (input, init) => { + const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url; + if (!url.includes("/api/v1/agents/events")) return originalFetch(input, init); + const body = new ReadableStream({ + start(controller) { + const bag = window as unknown as { __pushAgentsEvent?: (payload: Record) => void }; + bag.__pushAgentsEvent = (payload) => controller.enqueue(new TextEncoder().encode(`event: delegation\ndata: ${JSON.stringify(payload)}\n\n`)); + init?.signal?.addEventListener("abort", () => controller.close(), { once: true }); + }, + }); + return Promise.resolve(new Response(body, { headers: { "content-type": "text/event-stream" } })); + }; }); await page.route("**/api/**", (route) => @@ -92,15 +73,11 @@ async function mockAgentsApi(page: Page): Promise { ); } -/** Dispatch a named SSE frame into the `/api/v1/agents/events` mock - * EventSource instance the page created (there is exactly one — AgentsView - * opens it once on mount). */ +/** Exercise the actual fetch-backed SSE reader, after its stream is ready. */ async function pushAgentsEvent(page: Page, payload: Record): Promise { + await expect.poll(() => page.evaluate(() => typeof (window as unknown as { __pushAgentsEvent?: unknown }).__pushAgentsEvent)).toBe("function"); await page.evaluate((p) => { - const bag = window as unknown as { __agentsEventSources?: EventTarget[] }; - const sources = bag.__agentsEventSources ?? []; - const es = sources.find((s) => (s as unknown as { url: string }).url.includes("/agents/events")); - es?.dispatchEvent(new MessageEvent("delegation", { data: JSON.stringify(p) })); + (window as unknown as { __pushAgentsEvent: (payload: Record) => void }).__pushAgentsEvent(p); }, payload); } diff --git a/docs/usage-cn.md b/docs/usage-cn.md index 11be7dcb..b557b7c3 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -209,6 +209,12 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> ### Status / 成本 +会话右上角的工具栏统一排列「文件」和「上下文」,点击切换右侧工作区;原有 `model · ctx` 入口仍可直接打开上下文。桌面可拖动聊天与工作区之间的分隔线调整宽度,手机以抽屉展示,Esc 关闭并返回入口。 + +「文件」支持目录搜索、键盘导航、文件图标和 Git 状态。单击临时预览,双击或点固定按钮保留标签;切换到上下文再回来仍保留已打开文件与阅读位置。聊天中的本地文件链接可直接打开源码并定位行号。点刷新可重新读取目录、源码与预览,turn 结束也会刷新。 + +HTML/HTM 默认打开交互预览,可切换「源码」或在新标签页打开。预览支持 HTML 所在目录及子目录中的相对 CSS、JS/ES module、图片和字体;资源链接一小时有效,过期后刷新。预览沙箱与控制台的 DOM、登录状态和存储隔离,不能调用控制台 API,也不会启动 React/Vite 构建或开发服务器。目前仅支持本地主机项目,远程项目明确显示未支持。内部状态、依赖目录和常见密钥文件不列出;目录最多 20,000 项,源码最多 2 MiB,单个预览资源最多 16 MiB。 + - **Status** 页:daemon 健康、会话 live/idle 数、每条会话的成本、今日成本/预算(也是顶栏成本药丸的来源)。 - **上下文侧栏**:在 web 控制台点会话头部的 `model · ctx` 标签(或右上角的侧栏按钮),右侧打开侧栏(切换会话时保持打开),显示上下文窗口由什么组成:system prompt、工具、memory 文件(每个 `CLAUDE.md` / 记忆文件按路径列出)、skills、MCP 工具与说明、自定义 agent,以及对话本身按工具(调用 vs 结果 token)和附件类型的拆分,外加上一次请求的缓存读 / 缓存写 / 未缓存输入。harness 延迟加载(未载入)的工具单独列出,因为它们不占窗口。数字是 harness 自己的账(Claude `/context` 的数据),不是让模型去估:在线会话每次打开和点「刷新」都现查,turn 结束时侧栏自动刷新(所以 `/compact` 后立刻看得到变化);已释放的会话显示最后一个 turn 结束时的快照并标出时间。目前只支持 Claude stream-json 会话,其他 harness 仍只显示 ctx 百分比。REST:`GET /api/v1/sessions/{sid}/context`。 - 成本按 vendor 分别记账。Claude/Codex/Grok 有价表时用表计价;**OpenCode 只认自报 USD**(无上报或 0 显示「—」,绝不套用他家价表);**DSH 会上报原始 token,但暂时没有 USD 价表**。 diff --git a/docs/usage.md b/docs/usage.md index 99c5e7ba..e902286f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -215,6 +215,12 @@ One daemon can serve multiple users on one machine. This is **soft isolation** u ### Status and Cost +The session's top-right toolbar groups **Files** and **Context** in one right workspace; the `model · ctx` chip still opens Context directly. Drag the divider to resize the desktop workspace. On phones it opens as a drawer; Escape closes it and returns focus to its toolbar button. + +Files offers path search, keyboard navigation, file icons, and Git status. Click for a temporary preview; double-click or pin to keep a tab. Switching to Context and back preserves open files and reading positions. Local file links in chat open source at the referenced line. Refresh reloads the directory, source, and preview; turn completion also refreshes them. + +HTML/HTM files open as interactive previews, with Source and Open in new tab controls. Relative CSS, JavaScript/ES modules, images, and fonts are served from the HTML file's directory and its descendants. Preview links expire after one hour; refresh to renew. Browser sandboxes isolate previews from the console DOM, login, and storage. They cannot call console APIs or start React/Vite builds or development servers. File browsing currently supports local projects; remote projects report that it is unsupported. Internal state, dependency directories, and common secret files are excluded. Limits: 20,000 tree entries, 2 MiB source files, and 16 MiB per preview asset. + - **Status** shows daemon health, live/idle session counts, per-session cost, and today's total cost / budget. The top-bar cost pill uses the same data. - **Per-reply status line.** Every reply a session produces carries a compact status line built once by the daemon from the same data — `→ cct/s42 (reviewer) · codex · gpt-5.6-sol · turn 7 · ctx 19% · $0.42` (project/sid, role, vendor + observed model, context-window usage with `⚠` from 85%, completed turns, cumulative cost — or `12.3k tok` when the vendor has no price table; a field the vendor does not report is simply omitted, never shown as a placeholder). It is attached once per vendor turn, on the turn's final message only (a Codex turn that streams several messages gets exactly one), so it never repeats — and when a long turn's text was already delivered mid-turn, that one status line arrives on its own as the turn's closing receipt. IM chats get it as the last line of the reply; the web console shows it as a muted footer under the turn's last assistant message and keeps the header model/ctx chips in sync from it. Agent-facing surfaces get numbers, not prose: `agent_read` transcripts and roster rows, and inline `agent` results, carry `context_pct` (plus the existing `cost_usd` / `tokens_total` / `model`), and each child→parent completion notification opens with one header line — `s12 done · codex · turn 7 · ctx 19%` — so a parent can decide between reusing a child and spawning a fresh one without another call; interim notes carry nothing extra. - **Context sidebar.** Click a session's `model · ctx` chip (or the sidebar button at the top right) in the web console to open a right-hand sidebar — it stays open as you switch sessions — that shows what the context window is made of: system prompt, tools, memory files (each `CLAUDE.md` / memory file by path), skills, MCP tools and instructions, custom agents, and the conversation itself split by tool (call vs result tokens) and by attachment type, plus the last request's cache read / cache write / uncached input. Tool schemas the harness has deferred (not loaded) are listed apart, because they do not occupy the window. The numbers are the harness's own accounting (Claude's `/context` data), not a model's guess: a live session is asked on every open and on **Refresh**, and the sidebar refreshes itself when a turn ends (so a `/compact` shows up at once); a released session shows the snapshot taken at the end of its last turn, with its time. Claude stream-json sessions only for now; other harnesses keep the ctx % alone. REST: `GET /api/v1/sessions/{sid}/context`. From 6866f13d1ee6feb60a0b46e00aa05ae520b58e9b Mon Sep 17 00:00:00 2001 From: randd1024 Date: Mon, 2 Nov 2026 06:52:44 +0000 Subject: [PATCH 3/9] feat(web): preview Markdown documents and standalone pages (#222) Render bounded UTF-8 Markdown with GFM tables, tasks, code, heading anchors and scoped relative assets. Share existing source/preview/new-tab controls, preserve HTML capability scope, and disable active Markdown content in iframe and standalone responses. Tracks docs-local/issues/#222; header redesign remains a review-only mockup pending owner confirmation. --- Cargo.lock | 19 ++ crates/ccteam-web/Cargo.toml | 1 + crates/ccteam-web/src/routes/files.rs | 281 ++++++++++++++---- crates/ccteam-web/tests/files_test.rs | 68 +++++ .../web/src/components/FileWorkspace.tsx | 20 +- .../ccteam-web/web/src/lib/filesApi.test.ts | 19 +- crates/ccteam-web/web/src/lib/filesApi.ts | 4 + .../web/tests/file-preview-browser.mjs | 20 +- crates/ccteam-web/web/tests/v032-spa.spec.ts | 93 +++++- docs/usage-cn.md | 2 + docs/usage.md | 2 + 11 files changed, 463 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 676608dc..21ab26fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -592,6 +592,7 @@ dependencies = [ "nix 0.29.0", "notify", "portable-pty", + "pulldown-cmark", "rand 0.8.6", "reqwest", "rust-embed", @@ -2253,6 +2254,24 @@ dependencies = [ "psl-types", ] +[[package]] +name = "pulldown-cmark" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db2be46835f013dd3f4fa7f5f7402c537787b54ebb6fe2b94bbdd7e2669bb7b" +dependencies = [ + "bitflags 2.11.1", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + [[package]] name = "quinn" version = "0.11.9" diff --git a/crates/ccteam-web/Cargo.toml b/crates/ccteam-web/Cargo.toml index cc58429a..20896029 100644 --- a/crates/ccteam-web/Cargo.toml +++ b/crates/ccteam-web/Cargo.toml @@ -148,6 +148,7 @@ futures-util = "0.3" # `fs` is required for `nix::sys::stat::Mode` + `nix::unistd::mkfifo` # (F56 uses these to create the FIFO under `~/.ccteam/pty/`). nix = { version = "0.29", default-features = false, features = ["signal", "fs"] } +pulldown-cmark = { version = "0.13.6", default-features = false, features = ["html"] } [dev-dependencies] tempfile = "3" diff --git a/crates/ccteam-web/src/routes/files.rs b/crates/ccteam-web/src/routes/files.rs index 45b1dee9..d77f5a10 100644 --- a/crates/ccteam-web/src/routes/files.rs +++ b/crates/ccteam-web/src/routes/files.rs @@ -3,7 +3,7 @@ //! cookieless requests from an opaque sandbox pass the ordinary project ACL. use std::{ - collections::HashMap, + collections::{HashMap, HashSet}, io::Read, path::{Component, Path as FsPath, PathBuf}, sync::Mutex, @@ -28,9 +28,26 @@ const MAX_ASSET: u64 = 16 * 1024 * 1024; const PREVIEW_TTL: Duration = Duration::from_secs(3600); const PREVIEW_CSP: &str = "sandbox allow-scripts; default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval' http: https: data: blob:; style-src 'unsafe-inline' http: https: data:; img-src http: https: data: blob:; font-src http: https: data:; media-src http: https: data: blob:; connect-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'"; +const MARKDOWN_CSP: &str = "sandbox; default-src 'none'; script-src 'none'; style-src 'unsafe-inline'; img-src http: https:; connect-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'"; + +#[derive(Clone, Copy, PartialEq, Eq)] +enum PreviewKind { + Html, + Markdown, +} + +fn preview_kind(path: &FsPath) -> Option { + match path.extension()?.to_str()?.to_ascii_lowercase().as_str() { + "html" | "htm" => Some(PreviewKind::Html), + "md" | "markdown" => Some(PreviewKind::Markdown), + _ => None, + } +} + struct PreviewGrant { slug: String, directory: PathBuf, + kind: PreviewKind, identity: Identity, expires: Instant, } @@ -44,6 +61,7 @@ impl PreviewRegistry { slug: String, identity: Identity, directory: PathBuf, + kind: PreviewKind, ) -> Result { let mut grants = self.0.lock().unwrap_or_else(|e| e.into_inner()); grants.retain(|_, grant| grant.expires > Instant::now()); @@ -58,6 +76,7 @@ impl PreviewRegistry { PreviewGrant { slug, directory, + kind, identity, expires: Instant::now() + PREVIEW_TTL, }, @@ -71,10 +90,11 @@ impl PreviewRegistry { (grant.slug == slug && grant.expires > Instant::now()).then(|| grant.identity.clone()) } - fn directory(&self, slug: &str, token: &str) -> Option { + fn scope(&self, slug: &str, token: &str) -> Option<(PathBuf, PreviewKind)> { let grants = self.0.lock().unwrap_or_else(|e| e.into_inner()); let grant = grants.get(token)?; - (grant.slug == slug && grant.expires > Instant::now()).then(|| grant.directory.clone()) + (grant.slug == slug && grant.expires > Instant::now()) + .then(|| (grant.directory.clone(), grant.kind)) } } @@ -422,22 +442,15 @@ pub(crate) async fn handle_mint_preview( Err((s, message)) => return error(s, message), }; let path = match resolve(&root, &body.path) { - Ok(path) - if path.is_file() - && matches!( - path.extension() - .and_then(|e| e.to_str()) - .map(str::to_ascii_lowercase) - .as_deref(), - Some("html" | "htm") - ) => - { - path - } - _ => return error(StatusCode::NOT_FOUND, "HTML preview file not found"), + Ok(path) if path.is_file() && preview_kind(&path).is_some() => path, + _ => return error(StatusCode::NOT_FOUND, "Preview document not found"), }; + let kind = preview_kind(&path).expect("preview kind checked above"); let directory = path.parent().unwrap_or(&root).to_path_buf(); - let ticket = match app.file_previews.mint(slug.clone(), identity, directory) { + let ticket = match app + .file_previews + .mint(slug.clone(), identity, directory, kind) + { Ok(t) => t, Err(s) => return error(s, "Too many open previews"), }; @@ -481,66 +494,93 @@ pub(crate) async fn handle_preview( Ok(p) => p, Err(s) => return error(s, "Preview resource unavailable"), }; - let Some(directory) = app.file_previews.directory(&slug, &ticket) else { + let Some((directory, grant_kind)) = app.file_previews.scope(&slug, &ticket) else { return error(StatusCode::UNAUTHORIZED, "Preview expired"); }; // A page (and any third-party script it includes) can read its ticket. // It grants only web assets below that page's directory, never arbitrary - // Rust, Markdown, configuration or other project source. + // Rust, configuration or other project source. Markdown grants additionally + // allow rendered Markdown links; HTML grants retain their web-assets scope. let extension = path .extension() .and_then(|e| e.to_str()) .unwrap_or("") .to_ascii_lowercase(); + let markdown = preview_kind(&path) == Some(PreviewKind::Markdown); if !path.starts_with(directory) - || !matches!( - extension.as_str(), - "html" - | "htm" - | "css" - | "js" - | "mjs" - | "json" - | "png" - | "jpg" - | "jpeg" - | "gif" - | "webp" - | "svg" - | "ico" - | "woff" - | "woff2" - | "ttf" - | "otf" - | "wasm" - | "mp4" - | "webm" - | "mp3" - | "ogg" - ) + || (markdown && grant_kind != PreviewKind::Markdown) + || !(markdown + || matches!( + extension.as_str(), + "html" + | "htm" + | "css" + | "js" + | "mjs" + | "json" + | "png" + | "jpg" + | "jpeg" + | "gif" + | "webp" + | "svg" + | "ico" + | "woff" + | "woff2" + | "ttf" + | "otf" + | "wasm" + | "mp4" + | "webm" + | "mp3" + | "ogg" + )) { return error( StatusCode::FORBIDDEN, - "Resource is outside this HTML preview's asset scope", + "Resource is outside this document preview's asset scope", ); } - let mime = mime_guess::from_path(&path) - .first_or_octet_stream() - .to_string(); - let result = tokio::task::spawn_blocking(move || read_bounded(&path, MAX_ASSET)).await; + let mime = if markdown { + "text/html".to_string() + } else { + mime_guess::from_path(&path) + .first_or_octet_stream() + .to_string() + }; + let result = tokio::task::spawn_blocking(move || { + let bytes = read_bounded(&path, if markdown { MAX_TEXT } else { MAX_ASSET })?; + if !markdown { + return Ok(bytes); + } + let source = std::str::from_utf8(&bytes).map_err(|_| StatusCode::UNPROCESSABLE_ENTITY)?; + Ok(render_markdown_document( + source, + &path.file_name().unwrap_or_default().to_string_lossy(), + ) + .into_bytes()) + }) + .await; let mut response = match result { Ok(Ok(bytes)) => ( [(header::CONTENT_TYPE, format!("{mime}; charset=utf-8"))], bytes, ) .into_response(), - Ok(Err(s)) => error(s, "Preview resource unavailable or exceeds 16 MiB"), + Ok(Err(s)) => error( + s, + if markdown { + "Markdown preview unavailable: expected UTF-8 text up to 2 MiB" + } else { + "Preview resource unavailable or exceeds 16 MiB" + }, + ), Err(_) => error(StatusCode::INTERNAL_SERVER_ERROR, "Could not read preview"), }; let headers = response.headers_mut(); headers.insert( header::CONTENT_SECURITY_POLICY, - HeaderValue::from_static(PREVIEW_CSP), + HeaderValue::from_static(if markdown { MARKDOWN_CSP } else { PREVIEW_CSP }), ); headers.insert(header::CACHE_CONTROL, HeaderValue::from_static("no-store")); headers.insert( @@ -560,10 +600,148 @@ pub(crate) async fn handle_preview( response } +fn markdown_url_is_safe(url: &str) -> bool { + let normalized: String = url + .chars() + .filter(|c| !c.is_whitespace() && !c.is_control()) + .collect(); + if normalized.contains('\\') { + return false; + } + let first_segment = normalized.split(['/', '#', '?']).next().unwrap_or_default(); + match first_segment.split_once(':') { + Some((scheme, _)) => matches!( + scheme.to_ascii_lowercase().as_str(), + "http" | "https" | "mailto" | "tel" + ), + None => true, + } +} + +fn escape_html(text: &str) -> String { + text.replace('&', "&") + .replace('<', "<") + .replace('>', ">") + .replace('"', """) + .replace('\'', "'") +} + +/// Filter Markdown parser events before rendering: raw HTML stays visible as +/// text, links retain a small protocol set, and no scripts are enabled. The +/// response-level sandbox also holds when the document is opened separately. +fn render_markdown_document(source: &str, title: &str) -> String { + use pulldown_cmark::{html, Event, Options, Parser, Tag, TagEnd}; + let options = Options::ENABLE_TABLES + | Options::ENABLE_TASKLISTS + | Options::ENABLE_STRIKETHROUGH + | Options::ENABLE_FOOTNOTES + | Options::ENABLE_GFM; + let mut events: Vec<_> = Parser::new_ext(source, options) + .map(|event| match event { + Event::Html(html) | Event::InlineHtml(html) => Event::Text(html), + Event::Start(mut tag) => { + if let Tag::Link { dest_url, .. } | Tag::Image { dest_url, .. } = &mut tag { + if !markdown_url_is_safe(dest_url) { + *dest_url = "#".into(); + } + } + Event::Start(tag) + } + other => other, + }) + .collect(); + let mut heading_counts = HashMap::::new(); + let mut used_heading_ids = HashSet::new(); + for index in 0..events.len() { + if !matches!(events[index], Event::Start(Tag::Heading { .. })) { + continue; + } + let text: String = events[index + 1..] + .iter() + .take_while(|e| !matches!(e, Event::End(TagEnd::Heading(_)))) + .filter_map(|e| match e { + Event::Text(s) | Event::Code(s) => Some(s.as_ref()), + _ => None, + }) + .collect(); + let slug: String = text + .chars() + .flat_map(char::to_lowercase) + .filter_map(|c| { + if c.is_alphanumeric() || matches!(c, '-' | '_') { + Some(c) + } else if c.is_whitespace() { + Some('-') + } else { + None + } + }) + .collect(); + let base = if slug.trim_matches('-').is_empty() { + "section" + } else { + slug.trim_matches('-') + }; + let count = heading_counts.entry(base.to_string()).or_default(); + let mut id = if *count == 0 { + base.to_string() + } else { + format!("{base}-{count}") + }; + while !used_heading_ids.insert(id.clone()) { + *count += 1; + id = format!("{base}-{count}"); + } + *count += 1; + if let Event::Start(Tag::Heading { id: heading_id, .. }) = &mut events[index] { + *heading_id = Some(id.into()); + } + } + let mut body = String::new(); + html::push_html(&mut body, events.into_iter()); + format!("{}
{body}
", escape_html(title)) +} + +const MARKDOWN_STYLE: &str = r#" +:root{color-scheme:light dark;--bg:#fff;--fg:#24292f;--muted:#57606a;--border:#d0d7de;--soft:#f6f8fa;--link:#0969da} +@media(prefers-color-scheme:dark){:root{--bg:#111318;--fg:#e6edf3;--muted:#9da7b3;--border:#30363d;--soft:#1c2129;--link:#79b8ff}} +*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.75 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;overflow-wrap:anywhere} +main{max-width:960px;margin:auto;padding:clamp(20px,4vw,48px)}h1,h2,h3,h4,h5,h6{line-height:1.3;margin:1.5em 0 .65em;scroll-margin-top:20px}h1{font-size:2em}h2{font-size:1.5em;border-bottom:1px solid var(--border);padding-bottom:.3em}main>:first-child{margin-top:0} +p,ul,ol,pre,blockquote,table{margin:0 0 1em}li>p{margin:.3em 0}a{color:var(--link);text-underline-offset:3px}a:hover{text-decoration-thickness:2px}img{max-width:100%;height:auto}blockquote{margin-left:0;border-left:3px solid var(--border);padding:0 1em;color:var(--muted)} +code{font: .88em/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;background:var(--soft);padding:.15em .35em;border-radius:4px}pre{overflow:auto;padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--soft)}pre code{padding:0;background:none;white-space:pre} +table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}th,td{padding:7px 12px;border:1px solid var(--border)}th{background:var(--soft);text-align:left}input[type=checkbox]{margin-right:.5em;accent-color:var(--link)}hr{border:0;border-top:1px solid var(--border);margin:1.5em 0} +"#; + #[cfg(test)] mod tests { use super::*; + #[test] + fn markdown_escapes_html_titles_and_unsafe_urls_and_assigns_unique_anchors() { + let html = render_markdown_document("# Same\n\n# Same\n\n# Same-1\n\n[x](javascript:alert%281%29)\n\n\n", "<&>.md"); + assert!(html.contains("<&>.md")); + for id in ["same", "same-1", "same-1-1"] { + assert_eq!(html.matches(&format!("id=\"{id}\"")).count(), 1); + } + assert!(!html.contains("parent.document.body.textContent='unsafe'\n\n[bad](javascript:alert(1))").unwrap(); + std::fs::write( + paths.project_dir("demo").join("web/next.markdown"), + "# Next document", + ) + .unwrap(); + let response = client + .post(format!("http://{addr}/api/v1/projects/demo/files/preview")) + .bearer_auth(format!("ccteam:{TOKEN}")) + .json(&json!({"path":"web/README.md"})) + .send() + .await + .unwrap(); + assert_eq!( + response.status(), + 200, + "Markdown must share the preview flow" + ); + let link: Value = response.json().await.unwrap(); + let url = link["url"].as_str().unwrap(); + let response = client + .get(format!("http://{addr}{url}")) + .send() + .await + .unwrap(); + assert_eq!(response.status(), 200); + assert!(response.headers()["content-type"] + .to_str() + .unwrap() + .starts_with("text/html")); + assert!(!response.headers()["content-security-policy"] + .to_str() + .unwrap() + .contains("allow-scripts")); + let html = response.text().await.unwrap(); + assert!(html.contains("") && html.contains("type=\"checkbox\"")); + assert!(html.contains("language-rust") && html.contains("assets/dot.svg")); + assert!(!html.contains("
- {isHtml ? ( + {canPreview ? (
+ {data?.session ? : null} {error ? (
@@ -215,6 +218,41 @@ export function ContextPanel({ sid, lang, onClose, refreshKey, focusOnMount = fa ); } +/** The context response includes authoritative per-sid facts, even after + * release. The shell's capped history rows are not a session detail source. */ +export function SessionFacts({ session, model, lang }: { session: SessionView; model?: string | null; lang: Lang }) { + const t = makeT(lang); + const [now, setNow] = useState(() => Date.now()); + useEffect(() => { + const timer = window.setInterval(() => setNow(Date.now()), 60_000); + return () => window.clearInterval(timer); + }, []); + const activity: Record = { working: t("ctxWorking"), idle: t("ctxIdle"), stale: t("ctxStale"), stuck: t("ctxStuck"), detached: t("ctxDetached") }; + const residency: Record = { resident: t("ctxResident"), released: t("ctxReleased"), stopped: t("ctxStopped"), detached: t("ctxDetached"), external: t("ctxExternal") }; + const lastActive = session.last_active ? new Date(session.last_active) : null; + const validDate = lastActive && Number.isFinite(lastActive.getTime()); + return ( +
+

{t("ctxSessionStatus")}

+
+
{t("ctxSessionId")}
{session.sid}
+
{t("project")}
{session.project}
+
{t("ctxActivity")}
{session.waiting_approval ? t("ctxWaitingApproval") : activity[session.status] ?? session.status}
+ {session.residency ? <>
{t("ctxResidency")}
{residency[session.residency] ?? session.residency}
: null} +
Harness
{session.vendor}
+
{t("model")}
{session.model || model || "—"}
+
{t("host")}
{session.host || "local"}
+ {session.role ? <>
Role
{session.role}
: null} +
{t("parentSession")}
{session.parent_sid || t("noParent")}
+
{t("depth")}
{session.delegation_depth ?? "—"}
+
{t("ctxSessionCost")}
{session.cost_usd != null ? `$${session.cost_usd.toFixed(4)}` : t("ctxUnpriced")}
+ {session.tokens_total != null ? <>
{t("ctxTotalTokens")}
{formatTokensExact(session.tokens_total)}
: null} +
{t("ctxLastActive")}
{validDate ? : "—"}
+
+
+ ); +} + function Breakdown({ breakdown, live, @@ -238,6 +276,7 @@ function Breakdown({ <>
+ {breakdown.vendor === "codex" ?

{t("ctxCodexScope")}

: null} {rows.length > 0 ? (

{t("ctxCategories")}

@@ -270,7 +309,7 @@ function Breakdown({
) : null} {breakdown.messages ? : null} - {breakdown.last_request ? : null} + {breakdown.last_request ? : null} ); } @@ -293,7 +332,7 @@ function Header({ const captured = breakdown.captured_at ? new Date(breakdown.captured_at) : null; const capturedText = captured && !Number.isNaN(captured.getTime()) ? captured.toLocaleString(locale) : null; - const age = live ? null : relativeTime(breakdown.captured_at, fetchedAt, lang); + const age = live && breakdown.vendor !== "codex" ? null : relativeTime(breakdown.captured_at, fetchedAt, lang); return (
{breakdown.model ? ( @@ -310,8 +349,8 @@ function Header({ {pct !== null ? ` · ${formatPct(pct)}` : ""} {live ? ( - - {t("ctxLive")} + + {t(breakdown.vendor === "codex" ? "ctxReported" : "ctxLive")}{age ? ` · ${age}` : ""} ) : ( +

{t("ctxLastRequest")}

+
+
{t("ctxInputTotal")}
{formatTokensExact(input)}
+
{t("ctxCachedSubset")}
{formatTokensExact(last.cache_read_tokens)}
+ {(last.cache_creation_tokens ?? 0) > 0 ? <>
{t("ctxCacheWrite")}
{formatTokensExact(last.cache_creation_tokens)}
: null} +
{t("ctxOutput")}
{formatTokensExact(last.output_tokens)}
+ {last.reasoning_output_tokens != null ? <>
{t("ctxReasoningSubset")}
{formatTokensExact(last.reasoning_output_tokens)}
: null} + {ratio !== null ? <>
{t("ctxCacheHit")}
{formatPct(ratio * 100)}
: null} +
+ ; + } return (

{t("ctxLastRequest")}

diff --git a/crates/ccteam-web/web/src/components/fileWorkspace.css b/crates/ccteam-web/web/src/components/fileWorkspace.css index 19aafb58..84ed7891 100644 --- a/crates/ccteam-web/web/src/components/fileWorkspace.css +++ b/crates/ccteam-web/web/src/components/fileWorkspace.css @@ -3,10 +3,12 @@ display: flex; align-items: center; gap: 3px; - margin-left: 4px; - padding-left: 8px; - border-left: 1px solid var(--border-soft); + margin-left: auto; + flex: none; } +.right-panel-tools .icon-btn.sm { width: auto; height: 32px; min-height: 32px; gap: 6px; padding: 6px 8px; font-size: 12px; white-space: nowrap; } +.right-panel-tools .panel-context-pct { font: 11px var(--font-mono); color: var(--text-muted); } +@media (pointer: coarse) { .right-panel-tools .icon-btn.sm { height: 44px; min-height: 44px; } } .right-panel-tools .on { color: var(--text); background: var(--bg-soft); diff --git a/crates/ccteam-web/web/src/index.css b/crates/ccteam-web/web/src/index.css index 143fd293..8e408765 100644 --- a/crates/ccteam-web/web/src/index.css +++ b/crates/ccteam-web/web/src/index.css @@ -662,14 +662,25 @@ html.dark .dot.off { background: #4b4e57; } display: flex; align-items: center; gap: 12px; padding: 13px 24px; border-bottom: 1px solid var(--border-soft); flex-wrap: wrap; } -.conv-head .title { font-size: 15px; font-weight: 600; } +.conv-head .title { font-size: 15px; font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 40%; } +.conv-head .session-model { font-size: 12px; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 30%; } +.conv-head .session-role { flex: none; max-width: 20%; overflow: hidden; text-overflow: ellipsis; } /* The rename pencil stays out of the way until the header is hovered (it is still keyboard-reachable and announced — only the paint is conditional). */ .conv-head .rename-title { opacity: 0; transition: opacity .12s; margin-left: -6px; } .conv-head:hover .rename-title, .conv-head .rename-title:focus-visible { opacity: 1; } .conv-head .rename-input { font-size: 15px; font-weight: 600; min-width: 220px; } +@media (max-width: 820px) { + .conv-head .session-model { display: none; } + .conv-head .title { max-width: min(40%, 180px); } + .conv-head .rename-input { min-width: 0; width: 140px; } +} .conv-head .meta { display: flex; align-items: center; gap: 8px; } +.reply-footer { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; } +.reply-footer .turn-status { min-width: 0; overflow-wrap: anywhere; } +.reply-copy { flex: none; color: var(--text-faint); } +.reply-copy-feedback { font-size: 11px; color: var(--text-muted); } .tabs { display: flex; gap: 2px; margin-left: auto; background: var(--bg-soft); border-radius: 9px; padding: 3px; } .tab { padding: 4.5px 16px; border-radius: 7px; font-size: 13px; color: var(--text-muted); background: none; border: none; } .tab.active { background: var(--bg-card); color: var(--text); box-shadow: 0 1px 2px rgba(16,24,40,.08); } @@ -1503,6 +1514,7 @@ html.dark { padding: 9px 10px 9px 16px; border-bottom: 1px solid var(--border-soft); } .ctx-head .ctx-title { font-size: 13px; font-weight: 600; margin-right: auto; } +@media (max-width: 820px) { .ctx-head { padding-left: 60px; } } .ctx-body { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 16px 22px; display: flex; flex-direction: column; gap: 16px; font-size: 12.5px; @@ -1515,6 +1527,10 @@ html.dark { .ctx-toggle.on { background: var(--bg-soft); color: var(--text); } /* header line: model · used / window · live|snapshot */ .ctx-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; } +.ctx-session { padding-bottom: 16px; border-bottom: 1px solid var(--border-soft); } +.ctx-facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 7px 16px; margin: 0; } +.ctx-facts dt { color: var(--text-muted); } +.ctx-facts dd { margin: 0; overflow-wrap: anywhere; } .ctx-usage { font: 12px var(--font-mono); color: var(--text-muted); white-space: nowrap; } .ctx-badge { font-size: 10.5px; padding: 1px 7px; border-radius: 999px; diff --git a/crates/ccteam-web/web/src/lib/contextApi.ts b/crates/ccteam-web/web/src/lib/contextApi.ts index ee6706d9..ed7e7391 100644 --- a/crates/ccteam-web/web/src/lib/contextApi.ts +++ b/crates/ccteam-web/web/src/lib/contextApi.ts @@ -6,7 +6,7 @@ // cost. The gateway asks the harness when the session is resident (`live: // true`); otherwise it serves the snapshot persisted at the end of the last // turn (`live: false`, dated by `captured_at`). `breakdown: null` = this -// harness offers no breakdown and no snapshot exists (non-Claude harnesses, +// harness offers no breakdown and no snapshot exists (unsupported harnesses, // terminal-protocol or remote-host sessions, or a session that has not // finished a turn since the feature shipped) — a fact to explain, not an // error. @@ -16,6 +16,7 @@ import { httpError } from "./httpError"; import { sessionUrl } from "./sessionsApi"; +import type { SessionView } from "./sessionsApi"; /** `used` occupies the window; `deferred` = tool schemas NOT loaded (never * counted — list them apart, muted); `buffer` = reserved for auto-compaction; @@ -70,6 +71,8 @@ export interface ContextLastRequest { output_tokens?: number | null; cache_creation_tokens?: number | null; cache_read_tokens?: number | null; + /** Codex: a subset of output_tokens, never added to the total again. */ + reasoning_output_tokens?: number | null; } export interface ContextBreakdown { @@ -90,6 +93,8 @@ export interface SessionContextResponse { sid: string; live: boolean; breakdown: ContextBreakdown | null; + /** Current per-sid facts; includes released/stopped sessions. */ + session?: SessionView | null; } export function sessionContextUrl(sid: string): string { diff --git a/crates/ccteam-web/web/src/lib/contextBreakdown.ts b/crates/ccteam-web/web/src/lib/contextBreakdown.ts index 8aa937f2..4cadf9eb 100644 --- a/crates/ccteam-web/web/src/lib/contextBreakdown.ts +++ b/crates/ccteam-web/web/src/lib/contextBreakdown.ts @@ -85,6 +85,7 @@ const CATEGORY_LABEL_ZH: Record = { messages: "消息", autocompact_buffer: "自动压缩预留", free_space: "剩余空间", + context_total: "已用上下文", }; export function categoryLabel(category: Pick, lang: Lang): string { diff --git a/crates/ccteam-web/web/src/lib/i18n.ts b/crates/ccteam-web/web/src/lib/i18n.ts index 3a81d543..ea218f87 100644 --- a/crates/ccteam-web/web/src/lib/i18n.ts +++ b/crates/ccteam-web/web/src/lib/i18n.ts @@ -110,6 +110,27 @@ export const I18N: Record> = { retry: "重试", // Context panel (per-session right sidebar — what the window is made of). ctxPanelTitle: "上下文", + replyCopyMarkdown: "复制回复 Markdown", + replyCopied: "已复制", + ctxSessionStatus: "会话状态", + ctxSessionId: "会话 ID", + ctxActivity: "当前状态", + ctxResidency: "运行状态", + ctxWorking: "执行中", + ctxIdle: "空闲", + ctxStale: "长时间无活动", + ctxStuck: "可能阻塞", + ctxResident: "进程已驻留", + ctxReleased: "已释放,下条消息恢复", + ctxStopped: "已停止", + ctxDetached: "已分离", + ctxExternal: "外部会话", + ctxWaitingApproval: "等待批准", + ctxSessionCost: "本会话累计成本", + ctxUnpriced: "尚未计价", + ctxTotalTokens: "累计 tokens", + ctxLastActive: "最后活动", + ctxCodexScope: "Codex 提供窗口总量和最近一次请求统计,尚未提供工具、Skills、记忆文件等分类明细。窗口占用取最近请求,不是累计 tokens。", ctxOpen: "查看上下文构成", ctxClosePanel: "关闭上下文面板", ctxRefresh: "刷新", @@ -117,6 +138,7 @@ export const I18N: Record> = { ctxLoading: "加载中…", ctxLoadFailed: "上下文加载失败", ctxLive: "实时", + ctxReported: "最近上报", ctxSnapshot: "快照", ctxCapturedAt: "采集于", ctxModel: "模型", @@ -124,7 +146,7 @@ export const I18N: Record> = { ctxBarLabel: "上下文窗口构成", ctxAutoCompactAt: "自动压缩阈值", ctxNoBreakdown: "这个会话还没有上下文构成数据。", - ctxNoBreakdownWhy: "只有 Claude harness 的 stream-json 本机会话会上报构成;其他 harness、terminal 协议和远程主机上的会话没有这项数据。会话还需要在本功能上线后完成一个 turn,这里才会出现快照。", + ctxNoBreakdownWhy: "本机 Claude stream-json 提供分类构成,Codex app-server 提供窗口总量和请求统计。收到 harness 的用量数据后才可展示;其他 harness 或远程会话可能不提供。", ctxCategories: "构成", ctxColName: "类别", ctxColTokens: "tokens", @@ -148,6 +170,9 @@ export const I18N: Record> = { ctxAttachments: "按附件类型", ctxColType: "类型", ctxLastRequest: "最近一次请求", + ctxInputTotal: "输入总量", + ctxCachedSubset: "其中缓存命中", + ctxReasoningSubset: "其中推理输出", ctxCacheHit: "缓存命中", ctxCacheRead: "缓存读", ctxCacheWrite: "缓存写", @@ -523,6 +548,27 @@ export const I18N: Record> = { retry: "Retry", // Context panel (per-session right sidebar — what the window is made of). ctxPanelTitle: "Context", + replyCopyMarkdown: "Copy reply as Markdown", + replyCopied: "Copied", + ctxSessionStatus: "Session status", + ctxSessionId: "Session ID", + ctxActivity: "Activity", + ctxResidency: "Execution", + ctxWorking: "Working", + ctxIdle: "Idle", + ctxStale: "No recent activity", + ctxStuck: "Possibly stuck", + ctxResident: "Process resident", + ctxReleased: "Released; resumes on next message", + ctxStopped: "Stopped", + ctxDetached: "Detached", + ctxExternal: "External session", + ctxWaitingApproval: "Waiting for approval", + ctxSessionCost: "Session cost to date", + ctxUnpriced: "Not priced yet", + ctxTotalTokens: "Total tokens", + ctxLastActive: "Last active", + ctxCodexScope: "Codex reports window totals and last-request usage, without per-tool, skill or memory-file categories. Window occupancy uses the latest request, not cumulative tokens.", ctxOpen: "Show context breakdown", ctxClosePanel: "Close context panel", ctxRefresh: "Refresh", @@ -530,6 +576,7 @@ export const I18N: Record> = { ctxLoading: "Loading…", ctxLoadFailed: "Context load failed", ctxLive: "live", + ctxReported: "Reported", ctxSnapshot: "snapshot", ctxCapturedAt: "captured", ctxModel: "model", @@ -537,7 +584,7 @@ export const I18N: Record> = { ctxBarLabel: "Context window composition", ctxAutoCompactAt: "auto-compact at", ctxNoBreakdown: "No context breakdown for this session yet.", - ctxNoBreakdownWhy: "Only Claude stream-json sessions on this host report a breakdown; other harnesses, terminal-protocol sessions and sessions on remote hosts do not. A session also has to finish one turn after this feature shipped before a snapshot appears here.", + ctxNoBreakdownWhy: "Local Claude stream-json reports categories; Codex app-server reports window totals and request usage. Data appears after the harness reports usage; other harnesses and remote sessions may not provide it.", ctxCategories: "Breakdown", ctxColName: "Category", ctxColTokens: "tokens", @@ -561,6 +608,9 @@ export const I18N: Record> = { ctxAttachments: "By attachment type", ctxColType: "Type", ctxLastRequest: "Last request", + ctxInputTotal: "Total input", + ctxCachedSubset: "Of which cached", + ctxReasoningSubset: "Of which reasoning", ctxCacheHit: "cache hit", ctxCacheRead: "cache read", ctxCacheWrite: "cache write", diff --git a/crates/ccteam-web/web/src/lib/sessionsApi.ts b/crates/ccteam-web/web/src/lib/sessionsApi.ts index 983a5852..c94b449a 100644 --- a/crates/ccteam-web/web/src/lib/sessionsApi.ts +++ b/crates/ccteam-web/web/src/lib/sessionsApi.ts @@ -59,6 +59,10 @@ export interface SessionView { turn_count?: number; /** v0.8.22 P1 — accrued priced cost (USD); `null` when nothing priced yet. */ cost_usd?: number | null; + tokens_total?: number | null; + model?: string | null; + parent_sid?: string | null; + delegation_depth?: number; /** v0.8.23 review §1.3-D item 9 — true when a HITL approval is currently * outstanding for this session (`PendingInteractions::pending_for_sid`). * Drives the "等待批准" attention badge + the rail/history sort. Optional diff --git a/crates/ccteam-web/web/src/pages/SessionView.test.tsx b/crates/ccteam-web/web/src/pages/SessionView.test.tsx index b5bb32c9..65149823 100644 --- a/crates/ccteam-web/web/src/pages/SessionView.test.tsx +++ b/crates/ccteam-web/web/src/pages/SessionView.test.tsx @@ -93,12 +93,8 @@ describe("SessionView mount-empty invariant (key={sid} remount)", () => { // The prototype conv chrome is present… expect(html).toContain('data-testid="conversation-view"'); expect(html).toContain("Enter 发送"); // conv composer placeholder - expect(html).toContain(">s9<"); // sid chip - expect(html).toContain(">demo<"); // project chip - // Vendor chip is an icon-only mark (no text label) with data-vendor. - expect(html).toContain('class="chip claude vendor-chip"'); - expect(html).toContain('data-vendor="claude"'); - expect(html).toContain('aria-label="claude"'); + expect(html).not.toContain('class="chip sid"'); + expect(html).toContain('data-testid="session-model"'); // …but there are NO transcript bubbles: rows seeded empty and the // SSE/history seeds can't run under SSR. expect(html).not.toContain('class="msg user'); @@ -145,11 +141,13 @@ describe("SessionView mount-empty invariant (key={sid} remount)", () => { expect(html).not.toContain('src="blob:'); }); - it("hides the terminal tab for a stream-json session (no pane) and shows it for claude terminal", () => { + it("never offers the retired chat/terminal switch for any protocol", () => { const streamJson = render({ ...SESSION, protocol: "stream-json" }); expect(streamJson).not.toContain('data-testid="terminal-tab"'); const terminal = render({ ...SESSION, protocol: "terminal" }); - expect(terminal).toContain('data-testid="terminal-tab"'); + expect(terminal).not.toContain('data-testid="terminal-tab"'); + expect(terminal).not.toContain('class="tabs"'); + expect(terminal).not.toContain('class="cost-pill"'); // codex never gets a terminal tab. const codex = render({ ...SESSION, vendor: "codex", protocol: "stream-json" }); expect(codex).not.toContain('data-testid="terminal-tab"'); @@ -171,18 +169,22 @@ describe("SessionView mount-empty invariant (key={sid} remount)", () => { permission_mode: "hitl", protocol: "stream-json", }); - expect(html).toContain('data-vendor="pi"'); + expect(html).toContain('data-testid="session-model"'); + expect(html).toContain('title="pi"'); expect(html).toContain('data-testid="session-role"'); expect(html).toContain("reviewer"); expect(html).toContain('data-testid="pi-hitl-tradeoff"'); }); - it("shows the @host chip only for a remote session", () => { + it("keeps host and identity details out of the header, and omits an empty role", () => { const strip = (h: string) => h.replace(//g, ""); const local = render({ ...SESSION, host: "local" }); expect(strip(local)).not.toContain("@ local"); const remote = render({ ...SESSION, host: "dev04" }); - expect(strip(remote)).toContain("@ dev04"); + expect(strip(remote)).not.toContain("@ dev04"); + const roleless = render({ ...SESSION, role: "" }); + expect(roleless).not.toContain('data-testid="session-role"'); + expect(roleless.split('class="conv-head"')[1]?.split('class="conv-body')[0]).not.toContain("无 role"); }); }); @@ -211,7 +213,7 @@ describe("context panel entry points + docked memory", () => { expect(html).not.toContain('data-testid="ctx-chip"'); }); - it("the `model · ctx N%` chip is a labelled button into the panel once a status is known", () => { + it("renders a passive model and puts context percent on the single context toggle", () => { vi.spyOn(globalThis.localStorage, "getItem").mockImplementation((k) => k === rowsKeyFor("s9") ? JSON.stringify([ @@ -229,11 +231,9 @@ describe("context panel entry points + docked memory", () => { : null, ); const html = strip(render()); - expect(html).toMatch( - /]*class="chip chip-btn"[^>]*data-testid="ctx-chip"[^>]*aria-label="查看上下文构成 · claude-sonnet-5-5"[^>]*aria-pressed="false"/, - ); - expect(html).toContain("claude-sonnet-5-5 · ctx 25%"); - expect(html).not.toContain('title="model · context window"'); + expect(html).toMatch(/]*data-testid="session-model"[^>]*>claude-sonnet-5-5<\/span>/); + expect(html).not.toContain('data-testid="ctx-chip"'); + expect(html).toMatch(/data-testid="ctx-toggle"[^>]*>[\s\S]*?上下文<\/span>25%<\/span>/); }); it("restores a remembered-open panel on mount (per-browser layout memory)", () => { @@ -334,7 +334,10 @@ function collectElementText(value: unknown): string[] { if (!value || typeof value !== "object") return []; const props = (value as { props?: Record }).props; if (!props) return []; - const ownContent = typeof props.content === "string" ? [props.content] : []; + // Only Markdown renders its content prop. A clipboard action also receives + // that source, but must not count as another visible copy of the response. + const type = (value as { type?: { name?: string } }).type; + const ownContent = type?.name === "Markdown" && typeof props.content === "string" ? [props.content] : []; return [...ownContent, ...collectElementText(props.children)]; } diff --git a/crates/ccteam-web/web/src/pages/SessionView.tsx b/crates/ccteam-web/web/src/pages/SessionView.tsx index 872e2204..e6bdff09 100644 --- a/crates/ccteam-web/web/src/pages/SessionView.tsx +++ b/crates/ccteam-web/web/src/pages/SessionView.tsx @@ -3,8 +3,8 @@ // on every switch, so all per-sid state resets atomically; the v0.8.9 // structural guarantee is unchanged). // -// Skin = prototype: conv-head (status dot · title · meta chips · Chat|终端 -// tabs · cost pill) + chat-scroll message stream (user right-aligned soft +// Chrome: status/title/model + a shared right-panel toolbar; session details +// live in Context. The chat stream uses user right-aligned soft // bubble 14/14/4/14, agent left with NO fill + full Markdown rendering, // streaming cursor while a turn is in flight) + the same composer as Home // (sans ctx-bar). @@ -12,9 +12,7 @@ // Data spine unchanged (红线 §1.6-7): localStorage seed → getHistory mirror → // live SSE fold; drafts persist per-sid; IME composition guard; Stop // interrupts the running turn (session kept); HITL approvals resolve through -// the gateway pending machinery (never a fake turn). The terminal tab renders -// ONLY for a claude session that owns a pane (protocol ≠ stream-json) — the -// byte-exact `ccteam-pty.v1` relay via TerminalView. +// the gateway pending machinery (never a fake turn). import { lazy, @@ -30,6 +28,8 @@ import { Group, Panel, Separator, type Layout } from "react-resizable-panels"; import { ArrowDown, Clock, + Check, + Copy, FolderTree, PanelRightClose, PanelRightOpen, @@ -41,12 +41,10 @@ import { ContextPanel } from "../components/ContextPanel"; import type { FileTarget } from "../lib/filesApi"; import "../components/fileWorkspace.css"; import { InlineRename } from "../components/InlineRename"; +import { copyText } from "../lib/clipboard"; import type { TurnAttachment } from "../lib/attachmentsApi"; -import CostPill from "../components/CostPill"; import { Markdown } from "../components/Markdown"; import { StepInspector } from "../components/StepInspector"; -import { TerminalView } from "../components/TerminalView"; -import { VendorChip } from "../components/VendorChip"; import { foldSessionLiveness, isTurnBoundary, @@ -89,7 +87,6 @@ import { stepIcon, type TranscriptRow, } from "./chatTranscript"; -import { railSessionLabel } from "./railHelpers"; import { contextPct, formatElapsed, formatTurnStatus } from "../lib/statusLine"; import { isNarrowViewport, @@ -194,6 +191,25 @@ export function RowTime({ ts, lang }: { ts?: string; lang: Lang }) { ); } +export function ReplyCopyButton({ content, lang }: { content: string; lang: Lang }) { + const t = makeT(lang); + const [result, setResult] = useState<"idle" | "copied" | "failed">("idle"); + useEffect(() => { + if (result !== "copied") return; + const timer = window.setTimeout(() => setResult("idle"), 2000); + return () => window.clearTimeout(timer); + }, [result]); + if (!content) return null; + const label = result === "copied" ? t("replyCopied") : t("replyCopyMarkdown"); + return <> + + {result === "copied" ? t("replyCopied") : result === "failed" ? t("copyFailed") : ""} + ; +} + function OutboundAttachments({ project, attachments, @@ -247,7 +263,6 @@ export default function SessionView({ onRename?: (sid: string, title: string) => void | Promise; }) { const t = makeT(lang); - const [view, setView] = useState<"chat" | "terminal">("chat"); // Inline title edit in the header. `pendingTitle` is the optimistic value // shown only WHILE the shell's rename is in flight — without it the header // visibly snaps back to the old title for a beat after Enter. It is cleared @@ -292,6 +307,7 @@ export default function SessionView({ const [statusModel, setStatusModel] = useState(null); const [statusEffort, setStatusEffort] = useState(null); const [ctxPct, setCtxPct] = useState(null); + const [contextRefreshEpoch, setContextRefreshEpoch] = useState(0); // ---- context panel (the right sidebar) ------------------------------------ // Docked/closed is a per-browser LAYOUT preference: it survives this @@ -401,6 +417,9 @@ export default function SessionView({ const latestTurnEndId = [...events] .reverse() .find((event) => isTurnBoundary(event))?.id; + const latestContextChangeId = [...events].reverse().find((event) => + isTurnBoundary(event) || event.kind === "session_lifecycle" || !!event.options?.length, + )?.id; // The SSE buffer survives reconnects. Keep both the fold cursor and a live // view of its current length so an authoritative history reseed can install @@ -578,7 +597,7 @@ export default function SessionView({ .reverse() .find((event) => event.kind === "answer" && event.status)?.status; const displayStatusModel = - latestEventStatus?.model ?? latestTurnStatus?.model ?? statusModel; + latestEventStatus?.model ?? latestTurnStatus?.model ?? statusModel ?? session?.model; const displayCtxPct = latestEventStatus ? contextPct(latestEventStatus.context) : latestTurnStatus @@ -691,7 +710,9 @@ export default function SessionView({ current.map((r) => (r.id === row.id ? { ...r, resolved: true } : r)), ); pushRow({ kind: "user", content: `→ ${option.label}` }); - apiResolveApproval(sid, row.token, option.id).catch((e) => { + apiResolveApproval(sid, row.token, option.id).then(() => { + setContextRefreshEpoch((epoch) => epoch + 1); + }).catch((e) => { setRows((current) => current.map((r) => (r.id === row.id ? { ...r, resolved: false } : r)), ); @@ -718,12 +739,6 @@ export default function SessionView({ }); }, [sid, pushRow]); - // Terminal tab: only a claude session that owns a pane (protocol ≠ - // stream-json). A stream-json session has NO pane → the tab does not exist. - const isStreamJson = session?.protocol === "stream-json"; - const canTerminal = session?.vendor === "claude" && !isStreamJson; - const showTerminal = view === "terminal" && canTerminal; - // Auto-scroll only when already near the bottom; 「回到最新」 appears when // the reader scrolled up (a streaming reply never yanks them down). const scrollRef = useRef(null); @@ -744,10 +759,10 @@ export default function SessionView({ setShowJump(false); }, []); useLayoutEffect(() => { - if (!showTerminal && atBottomRef.current && scrollRef.current) { + if (atBottomRef.current && scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } - }, [rows, showTerminal]); + }, [rows]); // conv-head status dot: busy amber › SESSION RESIDENCY. The base is the // rail's REST `session.residency`; this sid's live `session_lifecycle` @@ -769,7 +784,7 @@ export default function SessionView({ // red connection dot next to the status dot. const connLost = gatewayUnavailable || lastError !== null; - const serverTitle = session ? railSessionLabel(session) : sid; + const serverTitle = session?.title || session?.role || sid; const title = pendingTitle ?? serverTitle; const vendor = session?.vendor ?? "claude"; @@ -842,60 +857,10 @@ export default function SessionView({ ) : null} -
- {sid} - {session ? {session.project} : null} - {session ? ( - - {session.role || t("noRole")} - - ) : null} - - {session?.host && session.host !== "local" ? ( - @ {session.host} - ) : null} - {displayStatusModel ? ( - // The `model · ctx N%` chip IS the entry point into the context - // panel — the affordance sits on the number it explains. - - ) : null} -
-
- - {canTerminal ? ( - - ) : null} -
- - {/* Always-present toggle (the chip above needs a reported status; this - one is the way in before the first turn and for every harness — - the panel itself explains when there is nothing to show). */} + {session?.role ? {session.role} : null} + + {displayStatusModel ?? vendor} +
+ {t("filesTitle")}
@@ -952,15 +920,6 @@ export default function SessionView({ }} > - {showTerminal && session?.project ? ( -
- -
- ) : ( <>
!!part) .join(" · "); return ( - +
+ {row.ts ? ` · ${tail}` : tail} - + + +
); })()}
@@ -1305,7 +1265,6 @@ export default function SessionView({
- )}
{activePanel || filesVisited ? ( <> @@ -1319,9 +1278,10 @@ export default function SessionView({ {ctxOpen ? ( ) : null} diff --git a/crates/ccteam-web/web/tests/v032-spa.spec.ts b/crates/ccteam-web/web/tests/v032-spa.spec.ts index fbc30f28..d9b5364c 100644 --- a/crates/ccteam-web/web/tests/v032-spa.spec.ts +++ b/crates/ccteam-web/web/tests/v032-spa.spec.ts @@ -49,6 +49,71 @@ const sessionHistory = { ], }; +for (const width of [1360, 390, 320]) { + test(`compact header, current context and Markdown reply copy at ${width}px`, async ({ page }, testInfo) => { + await mockCcteamApi(page); + await page.setViewportSize({ width, height: 1000 }); + await page.addInitScript(() => { + Object.defineProperty(navigator, "clipboard", { configurable: true, value: { + writeText: async (value: string) => { (window as typeof window & { copiedReply?: string }).copiedReply = value; }, + } }); + }); + const raw = "## Answer\n\n**Keep Markdown** and [the link](https://example.com).\n\n```ts\nconst answer = 42;\n```\n\n| A | B |\n| - | - |\n| 1 | 2 |"; + const facts = { ...sessionRows[0], role: "", vendor: "codex", title: "一个很长的会话标题用于验证窄屏省略与工具栏布局", model: "gpt-test", host: "satellite-1", residency: "released", status: "idle", parent_sid: "s1497", delegation_depth: 2, cost_usd: 716.425, tokens_total: 9000000, last_active: "2026-11-01T22:00:00Z" }; + // The shell is deliberately stale/wrong: Context must use its own sid + // response, including for the history-only path after a release. + await page.route("**/api/v1/projects/dev-team/sessions", route => route.fulfill({ json: [] })); + await page.route("**/api/v1/projects/dev-team/sessions/history", route => route.fulfill({ json: [{...facts,slug:"dev-team",host:"local",parent_sid:null,delegation_depth:0}] })); + await page.route("**/api/v1/sessions/s1", route => route.fulfill({ json: { sid:"s1",events:[ + {turn_id:"t1",ts:"2026-11-02T01:00:00Z",role:"",user:"first",assistant:raw}, + {turn_id:"t2",ts:"2026-11-02T02:00:00Z",role:"",user:"second",assistant:"Second **response**"}, + ] } })); + await page.route("**/api/v1/sessions/s1/status", route => route.fulfill({ json: {sid:"s1",model:"gpt-test",context:{used_tokens:8000,window_tokens:100000,pct:8},status_line:null} })); + let refreshes = 0; + await page.route("**/api/v1/sessions/s1/context", route => { + refreshes += 1; + return route.fulfill({ json: {sid:"s1",live:false,session:{...facts,cost_usd:716.425+refreshes-1},breakdown:{vendor:"codex",model:"gpt-test",captured_at:"2026-11-02T01:00:00Z",used_tokens:8000,window_tokens:100000,categories:[{id:"context_total",name:"Used context",tokens:8000,kind:"used"},{id:"free_space",name:"Free space",tokens:92000,kind:"free"}],last_request:{input_tokens:6000,cache_read_tokens:1000,cache_creation_tokens:0,output_tokens:1000,reasoning_output_tokens:200}}} }); + }); + await page.goto("/app/chat/s/s1"); + const head = page.locator(".conv-head"); + await expect(head.locator(".tabs")).toHaveCount(0); + await expect(head.locator(".cost-pill")).toHaveCount(0); + await expect(head.getByTestId("session-role")).toHaveCount(0); + await expect(head).not.toContainText("无 role"); + await expect(page.getByTestId("ctx-toggle")).toContainText("8%"); + await expect(page.getByTestId("files-toggle")).toBeVisible(); + await expect(page.getByTestId("ctx-toggle")).toBeVisible(); + expect(await head.evaluate(node => node.scrollWidth <= node.clientWidth)).toBe(true); + expect(await page.getByTestId("ctx-toggle").evaluate(node => node.getBoundingClientRect().height)).toBeLessThanOrEqual(44); + expect(await page.locator(".right-panel-tools").evaluate(node => node.getBoundingClientRect().width)).toBeGreaterThan(150); + const copies = page.getByTestId("reply-copy"); + await expect(copies).toHaveCount(2); + await copies.first().click(); + expect(await page.evaluate(() => (window as typeof window & { copiedReply?: string }).copiedReply)).toBe(raw); + await expect(page.locator(".reply-copy-feedback").first()).toHaveText(/已复制|Copied/); + await copies.last().click(); + expect(await page.evaluate(() => (window as typeof window & { copiedReply?: string }).copiedReply)).toBe("Second **response**"); + await page.evaluate(() => { + Object.defineProperty(navigator, "clipboard", {configurable:true,value:{writeText:async()=>{throw Error("denied");}}}); + document.execCommand = () => false; + }); + await copies.last().click(); + await expect(page.locator(".reply-copy-feedback").last()).toHaveText(/复制失败|Copy failed/); + await page.getByTestId("ctx-toggle").click(); + const status = page.getByTestId("ctx-session-status"); + await expect(status).toContainText("satellite-1"); + await expect(status).toContainText("s1497"); + await expect(status).toContainText("$716.4250"); + await expect(page.getByTestId("ctx-codex-scope")).toBeVisible(); + await expect(page.getByTestId("ctx-last-request")).toContainText("200"); + await page.getByTestId("ctx-refresh").click(); + await expect(status).toContainText("$717.4250"); + await page.screenshot({path:testInfo.outputPath(`context-${width}.png`),fullPage:true}); + await page.getByTestId("ctx-close").click(); + await expect(page.getByTestId("ctx-toggle")).toBeFocused(); + }); +} + const statusSnapshot = { daemon_healthy: true, sessions_live: 1, diff --git a/docs/dsh-plugin-cn.md b/docs/dsh-plugin-cn.md index 442a90b9..5e3985ed 100644 --- a/docs/dsh-plugin-cn.md +++ b/docs/dsh-plugin-cn.md @@ -195,7 +195,7 @@ home、一个 daemon。规则如下: harness 双字母格、标题、`harness · 模型 · 时间`、状态点和累计成本;委派出 的子会话缩进在父会话下面。状态点先说活动(daemon 的判定:动画 = 工作中、 绿 = 空闲、琥珀 = 停滞、红 = 卡住);空闲会话再显示常驻状态——空心圈表示 - 进程已在 harness 的 prompt-cache TTL 到期后被释放、下条消息按 sid 自动恢复, + 进程已在设定的空闲窗口(默认 250 分钟)后被释放、下条消息按 sid 自动恢复, 灰点(附「已停止」)表示你停掉了它;悬停行会解释当前状态。项目头可折叠并 显示该项目的总成本;悬停项目头会出现 **⋯**(新建会话、复制 slug、仅展开此 项目、折叠全部)和 **+**(打开新建会话页并预选该项目)——与 DSH 自己的 diff --git a/docs/dsh-plugin.md b/docs/dsh-plugin.md index 22ade3a5..fd92c025 100644 --- a/docs/dsh-plugin.md +++ b/docs/dsh-plugin.md @@ -250,7 +250,7 @@ to it, and the details sheet slides over the conversation. parent. The dot is the daemon’s activity verdict first (animated = working, green = idle, amber = stale, red = stuck); a settled session then shows its residency — a hollow ring means the daemon released its process after the - harness’s prompt-cache TTL and it resumes by sid on the next message, a + configured idle window (250 minutes by default) and it resumes by sid on the next message, a dimmed disc (with a “stopped” caption) means you stopped it. Hovering a row explains the state. Project headers fold and show the project’s total cost; hovering one reveals **⋯** (new session, copy slug, expand only this diff --git a/docs/usage-cn.md b/docs/usage-cn.md index dd6fecd1..7d5a5b92 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -209,7 +209,9 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> ### Status / 成本 -会话右上角的工具栏统一排列「文件」和「上下文」,点击切换右侧工作区;原有 `model · ctx` 入口仍可直接打开上下文。桌面可拖动聊天与工作区之间的分隔线调整宽度,手机以抽屉展示,Esc 关闭并返回入口。 +会话顶部显示状态、标题、非空 role 和模型文字;右上角统一排列「文件」和「上下文」,上下文按钮附带窗口使用百分比,点击切换右侧工作区。双击标题或点重命名按钮可改名。桌面可拖动聊天与工作区之间的分隔线调整宽度,手机以抽屉展示,Esc 关闭并返回入口。 + +每条助手文本回复的 footer 都有复制按钮,复制该条回复的原始 Markdown(保留代码块、表格和链接,不含状态 footer 或工具过程),并显示成功或失败反馈。 「文件」支持目录搜索、键盘导航、文件图标和 Git 状态。单击临时预览,双击或点固定按钮保留标签;切换到上下文再回来仍保留已打开文件与阅读位置。聊天中的本地文件链接可直接打开源码并定位行号。点刷新可重新读取目录、源码与预览,turn 结束也会刷新。 @@ -217,8 +219,9 @@ Markdown (`.md` / `.markdown`) 默认显示排版预览,支持标题锚点、 HTML/HTM 默认打开交互预览,可切换「源码」或在新标签页打开。预览支持 HTML 所在目录及子目录中的相对 CSS、JS/ES module、图片和字体;资源链接一小时有效,过期后刷新。预览沙箱与控制台的 DOM、登录状态和存储隔离,不能调用控制台 API,也不会启动 React/Vite 构建或开发服务器。目前仅支持本地主机项目,远程项目明确显示未支持。内部状态、依赖目录和常见密钥文件不列出;目录最多 20,000 项,源码最多 2 MiB,单个预览资源最多 16 MiB。 -- **Status** 页:daemon 健康、会话 live/idle 数、每条会话的成本、今日成本/预算(也是顶栏成本药丸的来源)。 -- **上下文侧栏**:在 web 控制台点会话头部的 `model · ctx` 标签(或右上角的侧栏按钮),右侧打开侧栏(切换会话时保持打开),显示上下文窗口由什么组成:system prompt、工具、memory 文件(每个 `CLAUDE.md` / 记忆文件按路径列出)、skills、MCP 工具与说明、自定义 agent,以及对话本身按工具(调用 vs 结果 token)和附件类型的拆分,外加上一次请求的缓存读 / 缓存写 / 未缓存输入。harness 延迟加载(未载入)的工具单独列出,因为它们不占窗口。数字是 harness 自己的账(Claude `/context` 的数据),不是让模型去估:在线会话每次打开和点「刷新」都现查,turn 结束时侧栏自动刷新(所以 `/compact` 后立刻看得到变化);已释放的会话显示最后一个 turn 结束时的快照并标出时间。目前只支持 Claude stream-json 会话,其他 harness 仍只显示 ctx 百分比。REST:`GET /api/v1/sessions/{sid}/context`。 +- **Status** 页:daemon 健康、会话 live/idle 数、每条会话的成本、今日成本/预算。 +- **上下文侧栏**:顶部整理当前会话的活动与运行状态、ID/项目、harness/模型/主机、父会话和委派深度、本会话累计成本、累计 tokens、最后活动时间。尚未计价与 $0 区分显示,累计 tokens 不等于窗口占用。即使 harness 不提供上下文分析,也可查看会话状态。 +- **厂商上下文分析**:Claude stream-json 显示 system prompt、工具、memory 文件(按路径)、skills、MCP 工具与说明、自定义 agent,以及消息按工具调用/结果和附件类型的拆分;延迟加载工具单独列出,不计入窗口。Codex app-server 显示已用/剩余窗口、最近一次请求的输入、缓存命中、输出及其中推理 tokens;Codex 未提供分类明细和压缩阈值,面板不会补估。数字来自 harness 官方接口,不调用模型估算。每次打开、手动刷新和 turn 结束时更新;Codex 读取最近的用量事件,采集时间不会因打开面板而改变。释放后显示最后一次 turn 结束的快照及时间。REST:`GET /api/v1/sessions/{sid}/context`。 - 成本按 vendor 分别记账。Claude/Codex/Grok 有价表时用表计价;**OpenCode 只认自报 USD**(无上报或 0 显示「—」,绝不套用他家价表);**DSH 会上报原始 token,但暂时没有 USD 价表**。 ### 标准资源 API(给集成方) @@ -594,7 +597,7 @@ ccteam host rm --daemon http://daemon-host:7331 --web-token Date: Mon, 2 Nov 2026 10:43:42 +0000 Subject: [PATCH 5/9] fix(dsh): use native plugin contracts and preset resolution (#225) --- crates/ccteam-harness/src/adapter.rs | 7 +- .../execution/dsh_acp/assets/ccteam-ui.tgz | Bin 253523 -> 265672 bytes .../src/execution/dsh_acp/handshake.rs | 20 +- .../src/execution/dsh_acp/materialize.rs | 76 +- .../src/execution/dsh_acp/mod.rs | 75 +- crates/ccteam-harness/tests/dsh_acp_test.rs | 35 +- crates/ccteam-web/src/dsh_web.rs | 243 +- crates/ccteam-web/src/routes/sessions_api.rs | 7 +- docs/dsh-plugin-cn.md | 22 +- docs/dsh-plugin.md | 23 +- docs/usage-cn.md | 2 +- docs/usage.md | 2 +- dsh-plugins/ccteam-ui/README.md | 5 +- .../ccteam-ui/build/client-externals.ts | 10 +- dsh-plugins/ccteam-ui/package-lock.json | 7860 +++++++++-------- dsh-plugins/ccteam-ui/package.json | 76 +- dsh-plugins/ccteam-ui/src/bff.ts | 8 +- dsh-plugins/ccteam-ui/src/client/Chat.tsx | 40 +- dsh-plugins/ccteam-ui/src/client/Composer.tsx | 22 +- dsh-plugins/ccteam-ui/src/client/Details.tsx | 10 +- .../ccteam-ui/src/client/EnginePanel.tsx | 28 +- .../ccteam-ui/src/client/EntryButton.tsx | 4 +- dsh-plugins/ccteam-ui/src/client/Hero.tsx | 20 +- dsh-plugins/ccteam-ui/src/client/Pickers.tsx | Bin 2936 -> 2946 bytes .../ccteam-ui/src/client/TeamColumn.tsx | 32 +- .../ccteam-ui/src/client/Workbench.tsx | 34 +- dsh-plugins/ccteam-ui/src/client/index.tsx | 39 +- dsh-plugins/ccteam-ui/src/client/locales.ts | 12 +- .../src/client/settings/EngineSection.tsx | 12 +- .../src/client/settings/SettingsCard.tsx | 4 +- .../ccteam-ui/src/client/settings/form.ts | 67 +- dsh-plugins/ccteam-ui/src/client/slots.ts | 15 +- dsh-plugins/ccteam-ui/src/credentials.ts | 3 +- dsh-plugins/ccteam-ui/src/index.ts | 137 +- dsh-plugins/ccteam-ui/src/settings.ts | 100 +- dsh-plugins/ccteam-ui/src/tools.ts | 58 +- dsh-plugins/ccteam-ui/src/transport.ts | 285 +- .../ccteam-ui/tests/client-apply.test.ts | 59 +- .../ccteam-ui/tests/client-chat.test.tsx | 24 +- .../ccteam-ui/tests/client-engine-ui.test.tsx | 26 +- .../ccteam-ui/tests/client-settings.test.ts | 154 +- .../ccteam-ui/tests/host-apply.test.ts | 14 +- .../ccteam-ui/tests/host-build.test.ts | 9 +- .../ccteam-ui/tests/host-cordis-fakes.ts | 7 + .../ccteam-ui/tests/host-engine-bff.test.ts | 26 +- .../ccteam-ui/tests/host-settings.test.ts | 338 +- .../ccteam-ui/tests/host-transport.test.ts | 32 +- dsh-plugins/pack-assets.sh | 7 +- 48 files changed, 5229 insertions(+), 4860 deletions(-) diff --git a/crates/ccteam-harness/src/adapter.rs b/crates/ccteam-harness/src/adapter.rs index 11304871..c834b73c 100644 --- a/crates/ccteam-harness/src/adapter.rs +++ b/crates/ccteam-harness/src/adapter.rs @@ -1891,12 +1891,11 @@ pub struct SpawnCtx { /// spawn with a message naming stream-json instead of ignoring the pick. pub effort: Option, /// Explicit vendor session-mode token for this thread. `None` = the - /// ccteam default for that vendor. Same verbatim-ride contract as + /// vendor default. Same verbatim-ride contract as /// `effort`: an adapter with no mode axis REFUSES a non-empty value /// (`spawn_pick_refused`) instead of quietly ignoring it. Today only DSH - /// consumes it — its agent presets `standard` | `ptc`/`code` | `minimal` - /// | `creator`/`cordis` pick the toolset; unset ccteam-hires default to - /// `standard`. + /// consumes it as a native agent-preset id; DSH owns the roster and default. + /// ccteam's `creator` product label selects the native `cordis` preset. pub mode: Option, /// v0.8.7 W2 (DB.1) — per-session permission posture. `Skip` (default) /// keeps today's `--dangerously-skip-permissions` spawn; `Hitl` drops diff --git a/crates/ccteam-harness/src/execution/dsh_acp/assets/ccteam-ui.tgz b/crates/ccteam-harness/src/execution/dsh_acp/assets/ccteam-ui.tgz index 70d83063b77dc57d590b0f46b95c4308b2d847b5..bdd243a04cd4526f7499841737d6c8962233a26a 100644 GIT binary patch literal 265672 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 mOcQ9;6Uvp#w!RdUIe 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

=(@GYj4IwlM(ht8S+pE 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 z�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

@`8H7v*ds%pG?c@=jl}a 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 E0C$Jv^#A|> diff --git a/crates/ccteam-harness/src/execution/dsh_acp/handshake.rs b/crates/ccteam-harness/src/execution/dsh_acp/handshake.rs index f5825a1e..f8d88c1a 100644 --- a/crates/ccteam-harness/src/execution/dsh_acp/handshake.rs +++ b/crates/ccteam-harness/src/execution/dsh_acp/handshake.rs @@ -29,8 +29,7 @@ pub struct CcteamSessionMeta { pub bearer: String, pub mcp_url: String, pub approval_mode: &'static str, - /// DSH agent-preset id for `session/new` ONLY (`standard` | `code` | - /// `minimal` | `cordis`). Never sent on `session/load`: the stored preset + /// DSH agent-preset id for `session/new` ONLY (a native preset id). Never sent on `session/load`: the stored preset /// in the vendor's own session data is authoritative on resume. pub agent_preset: Option, } @@ -74,6 +73,7 @@ impl CcteamSessionMeta { pub struct DshAgentOptions { pub provider: Option, pub model: Option, + pub reasoning_effort: Option, } impl DshAgentOptions { @@ -82,6 +82,7 @@ impl DshAgentOptions { return Self { provider: None, model: None, + reasoning_effort: None, }; }; if let Some((provider, model)) = model.split_once('/') { @@ -91,17 +92,27 @@ impl DshAgentOptions { return Self { provider: Some(provider.to_string()), model: Some(model.to_string()), + reasoning_effort: None, }; } } Self { provider: None, model: Some(model.to_string()), + reasoning_effort: None, } } + pub fn with_reasoning_effort(mut self, effort: Option<&str>) -> Self { + self.reasoning_effort = effort + .map(str::trim) + .filter(|value| !value.is_empty()) + .map(str::to_string); + self + } + fn to_json(&self) -> Option { - if self.provider.is_none() && self.model.is_none() { + if self.provider.is_none() && self.model.is_none() && self.reasoning_effort.is_none() { return None; } let mut out = serde_json::Map::new(); @@ -111,6 +122,9 @@ impl DshAgentOptions { if let Some(model) = &self.model { out.insert("model".to_string(), json!(model)); } + if let Some(effort) = &self.reasoning_effort { + out.insert("reasoningEffort".to_string(), json!(effort)); + } Some(Value::Object(out)) } diff --git a/crates/ccteam-harness/src/execution/dsh_acp/materialize.rs b/crates/ccteam-harness/src/execution/dsh_acp/materialize.rs index eb4836a6..8f0da3df 100644 --- a/crates/ccteam-harness/src/execution/dsh_acp/materialize.rs +++ b/crates/ccteam-harness/src/execution/dsh_acp/materialize.rs @@ -1134,7 +1134,13 @@ fn merged_profile_patch_yaml( // inserted the row, and an empty override would say nothing. let mut ours: Vec<(&PluginAsset, serde_yaml::Mapping)> = Vec::new(); if !spec.config.is_empty() { - ours.push((&UI_PLUGIN, flat_config(spec.config.entries()))); + let mut config = flat_config(spec.config.entries()); + // Engine ownership is explicit; credentials can also be entered by a human. + config.insert( + serde_yaml::Value::String("engineManaged".into()), + serde_yaml::Value::Bool(true), + ); + ours.push((&UI_PLUGIN, config)); } // Rows naming a former ccteam package ccteam itself wrote are pruned // whatever their id; every other row survives byte-for-byte. @@ -1185,10 +1191,22 @@ fn merged_profile_patch_yaml( serde_yaml::Value::String("name".to_string()), serde_yaml::Value::String(plugin.bundle.to_string()), ); - row.insert( - serde_yaml::Value::String("config".to_string()), - serde_yaml::Value::Mapping(config), - ); + // Native live settings share this row with our wiring. Preserve + // preferences and credentials this registration did not supply. + let key = serde_yaml::Value::String("config".to_string()); + let mut merged = match row.get(&key) { + None | Some(serde_yaml::Value::Null) => Mapping::new(), + Some(serde_yaml::Value::Mapping(existing)) => existing.clone(), + Some(_) => { + return Err(HarnessError::SpawnFailed(format!( + "DSH profile patch {} row `{}` config must be a mapping", + path.display(), + plugin.row_id + ))) + } + }; + merged.extend(config); + row.insert(key, serde_yaml::Value::Mapping(merged)); } None => { let mut row = serde_yaml::Mapping::new(); @@ -1659,6 +1677,54 @@ mod tests { ); } + #[test] + fn registration_preserves_native_live_settings_for_owned_and_operator_profiles() { + for policy in [ManifestPolicy::Owned, ManifestPolicy::MergeOnly] { + let root = tempfile::tempdir().unwrap(); + let home = tempfile::tempdir().unwrap(); + let mut spec = wired_web(); + spec.manifest = policy; + let out = materialize_profile_in(root.path(), home.path(), spec).unwrap(); + let path = out.profile_dir.join("cordis.patch.yml"); + let mut patch = read_patch(&out.profile_dir); + let config = patch.as_sequence_mut().unwrap()[0]["config"] + .as_mapping_mut() + .unwrap(); + for (key, value) in [ + ("autoStart", serde_yaml::Value::Bool(false)), + ( + "enginePath", + serde_yaml::Value::String("/opt/ccteam".into()), + ), + ( + "defaultProject", + serde_yaml::Value::String("my-project".into()), + ), + ( + "enrollment", + serde_yaml::Value::String("ccteam-enroll:saved:secret".into()), + ), + ] { + config.insert(serde_yaml::Value::String(key.into()), value); + } + fs::write(&path, serde_yaml::to_string(&patch).unwrap()).unwrap(); + spec.config.enrollment = None; + spec.config.daemon_url = Some("http://127.0.0.1:9999"); + materialize_profile_in(root.path(), home.path(), spec).unwrap(); + let patch = read_patch(&out.profile_dir); + let config = &ccteam_row(&patch)["config"]; + assert_eq!(config["autoStart"], serde_yaml::Value::Bool(false)); + assert_eq!(config["enginePath"].as_str(), Some("/opt/ccteam")); + assert_eq!(config["defaultProject"].as_str(), Some("my-project")); + assert_eq!( + config["enrollment"].as_str(), + Some("ccteam-enroll:saved:secret") + ); + assert_eq!(config["daemonUrl"].as_str(), Some("http://127.0.0.1:9999")); + assert_eq!(config["engineManaged"], serde_yaml::Value::Bool(true)); + } + } + #[test] fn web_profile_row_carries_flat_config_and_never_a_duplicate_insert() { let root = tempfile::tempdir().unwrap(); diff --git a/crates/ccteam-harness/src/execution/dsh_acp/mod.rs b/crates/ccteam-harness/src/execution/dsh_acp/mod.rs index c1c552ec..d404c064 100644 --- a/crates/ccteam-harness/src/execution/dsh_acp/mod.rs +++ b/crates/ccteam-harness/src/execution/dsh_acp/mod.rs @@ -75,27 +75,13 @@ struct LiveSession { _dispatcher: tokio::task::JoinHandle<()>, } -/// Resolve the ccteam `mode` axis to a DSH agent-preset id. The vendor's -/// shipped presets are `standard` | `code` (displayed "PTC") | `minimal` | -/// `cordis` (displayed "creator"); ccteam accepts both spellings and an unset -/// mode defaults a hire to `standard` (owner decree, matching DSH's own web -/// default). Presets pick the TOOLSET: a session created without one has no -/// bash/read/write at all in the web runtime. -pub fn mode_agent_preset(mode: Option<&str>) -> Result { - let token = mode - .map(str::trim) - .filter(|m| !m.is_empty()) - .unwrap_or("standard"); - match token.to_ascii_lowercase().as_str() { - "ptc" | "code" => Ok("code".to_string()), - "standard" => Ok("standard".to_string()), - "minimal" => Ok("minimal".to_string()), - "creator" | "cordis" => Ok("cordis".to_string()), - other => Err(HarnessError::SpawnFailed(format!( - "unknown DSH session mode `{other}`: accepts standard | ptc (code) | minimal | \ - creator (cordis); omit it for the ccteam default (standard)" - ))), - } +/// Pass native preset ids through so new DSH presets need no engine release. +/// An absent mode leaves the vendor's configured default authoritative. +/// `creator` is ccteam's product label for DSH's `cordis` preset. +pub fn mode_agent_preset(mode: Option<&str>) -> Option { + mode.map(str::trim) + .filter(|mode| !mode.is_empty()) + .map(|mode| if mode == "creator" { "cordis" } else { mode }.to_string()) } /// Per-process singleton holding live DSH ACP sessions keyed by DSH session id. @@ -438,29 +424,18 @@ impl HarnessAdapter for DshAcpAdapter { "DSH sessions are roleless-only; ccteam does not inject role prompts".into(), )); } - if let Some(effort) = ctx - .effort - .as_deref() - .map(str::trim) - .filter(|e| !e.is_empty()) - { - return Err(crate::execution::acp::spawn_pick_refused( - "effort", - effort, - "DSH ACP has no reasoning-effort axis", - )); - } - let mcp = Self::session_mcp_endpoint(ctx)?; let cwd = project_cwd(ctx)?; let inbound = Self::inbound_policy(ctx.permission_mode); - let agent_options = DshAgentOptions::new(ctx.model_id.as_deref()); + let agent_options = DshAgentOptions::new(ctx.model_id.as_deref()) + .with_reasoning_effort(ctx.effort.as_deref()); // `session/load` carries the identity WITHOUT a preset (the stored one // is authoritative); `session/new` — fresh or as the failed-load - // fallback — carries the resolved mode, ccteam-defaulting to PTC. - let agent_preset = mode_agent_preset(ctx.mode.as_deref())?; + // fallback — carries an explicitly requested native preset. + let agent_preset = mode_agent_preset(ctx.mode.as_deref()); let meta = CcteamSessionMeta::new(&ctx.sid, &mcp, ctx.permission_mode); - let new_meta = meta.clone().with_agent_preset(agent_preset); + let mut new_meta = meta.clone(); + new_meta.agent_preset = agent_preset; // The runtime is per identity, so the socket and the DSH home are too. // `CCTEAM_DSH_SOCKET` (test-only) names a socket a fake already serves @@ -743,18 +718,18 @@ mod tests { } #[test] - fn mode_tokens_resolve_to_vendor_preset_ids() { - assert_eq!(mode_agent_preset(None).unwrap(), "standard"); - assert_eq!(mode_agent_preset(Some("")).unwrap(), "standard"); - assert_eq!(mode_agent_preset(Some("ptc")).unwrap(), "code"); - assert_eq!(mode_agent_preset(Some("PTC")).unwrap(), "code"); - assert_eq!(mode_agent_preset(Some("code")).unwrap(), "code"); - assert_eq!(mode_agent_preset(Some("standard")).unwrap(), "standard"); - assert_eq!(mode_agent_preset(Some("minimal")).unwrap(), "minimal"); - assert_eq!(mode_agent_preset(Some("creator")).unwrap(), "cordis"); - assert_eq!(mode_agent_preset(Some("cordis")).unwrap(), "cordis"); - let err = mode_agent_preset(Some("turbo")).unwrap_err().to_string(); - assert!(err.contains("turbo") && err.contains("standard"), "{err}"); + fn mode_tokens_defer_defaults_and_native_preset_validation_to_dsh() { + assert_eq!(mode_agent_preset(None), None); + assert_eq!(mode_agent_preset(Some(" ")), None); + assert_eq!(mode_agent_preset(Some(" ptc ")).as_deref(), Some("ptc")); + assert_eq!( + mode_agent_preset(Some("creator")).as_deref(), + Some("cordis") + ); + assert_eq!( + mode_agent_preset(Some("custom-preset")).as_deref(), + Some("custom-preset") + ); } #[test] diff --git a/crates/ccteam-harness/tests/dsh_acp_test.rs b/crates/ccteam-harness/tests/dsh_acp_test.rs index b770d986..963e1b37 100644 --- a/crates/ccteam-harness/tests/dsh_acp_test.rs +++ b/crates/ccteam-harness/tests/dsh_acp_test.rs @@ -1440,8 +1440,6 @@ async fn session_new_carries_the_per_session_ccteam_identity() { "bearer": "ccteam-sid:s-meta:seKret1234", "mcpUrl": "http://127.0.0.1:65535/mcp", "approvalMode": "skip", - // Unset mode = the ccteam default: `standard` (the vendor's own). - "agentPreset": "standard", })), "session/new must install this hire's ccteam identity: {params}" ); @@ -1527,22 +1525,37 @@ async fn mode_axis_picks_the_agent_preset_on_session_new() { ); adapter.close_thread(&handle).await.unwrap(); - let mut bad = spawn_ctx_with_model(&tmp, "s-mode-bad"); - bad.mode = Some("turbo".to_string()); - let err = adapter + let mut custom = spawn_ctx_with_model(&tmp, "s-mode-custom"); + custom.mode = Some("custom-preset".to_string()); + custom.effort = Some("high".to_string()); + let handle = adapter .start_thread( &AgentSpecBrief { role: String::new(), }, - &bad, + &custom, ) .await - .expect_err("unknown mode must refuse the spawn"); - let text = err.to_string(); - assert!( - text.contains("turbo") && text.contains("ptc"), - "the refusal names the token and the valid set: {text}" + .expect("DSH owns native preset validation"); + let records = read_dump(&dump); + let params = &records + .iter() + .rev() + .find(|record| record["method"] == "session/new") + .unwrap()["params"]; + assert_eq!( + params + .pointer("/_meta/ccteam/agentPreset") + .and_then(Value::as_str), + Some("custom-preset") + ); + assert_eq!( + params + .pointer("/agentOptions/reasoningEffort") + .and_then(Value::as_str), + Some("high") ); + adapter.close_thread(&handle).await.unwrap(); } /// hitl vs skip is a per-session posture on a runtime that serves both. diff --git a/crates/ccteam-web/src/dsh_web.rs b/crates/ccteam-web/src/dsh_web.rs index b0132f02..2b0f5b6f 100644 --- a/crates/ccteam-web/src/dsh_web.rs +++ b/crates/ccteam-web/src/dsh_web.rs @@ -416,7 +416,6 @@ async fn proxy_http( ) -> Response { let (parts, body) = req.into_parts(); let port = target.port; - let plugin_bundle = is_plugin_bundle_path(parts.uri.path()); let upstream = format!( "http://127.0.0.1:{port}{}", parts @@ -430,7 +429,7 @@ async fn proxy_http( builder = builder.headers(headers); builder = builder.body(reqwest::Body::wrap_stream(body.into_data_stream())); match builder.send().await { - Ok(resp) => response_from_reqwest(resp, plugin_bundle).await, + Ok(resp) => response_from_reqwest(resp).await, Err(err) => ( StatusCode::BAD_GATEWAY, Json(serde_json::json!({ "error": err.to_string() })), @@ -457,48 +456,10 @@ async fn proxy_http( const CRYPTO_RANDOM_UUID_POLYFILL: &str = r#""#; /// Declares that the page owns its Host, through DSH's own transport hook. -/// -/// DSH keeps its **privileged surface** — the settings document (every -/// Settings page: General, Models, Plugin configuration), and the deliverables -/// file actions — reachable only from "the operator's own machine". The client -/// decides that from the page authority (`dsh-client-connection`: -/// `isLoopback = transport.ownsHost || page hostname is loopback`), and a -/// non-loopback page gets every settings scope in `memory` mode: the describe -/// mirror never asks the Host, so the Plugin configuration tab renders nothing -/// at all — not the cards, not even the "no settings" line — while the same -/// instance opened from `127.0.0.1` shows everything. Real-machine v0.10.4: a -/// LAN browser on ccteam web → DSH saw an empty tab and had nowhere to paste a -/// REST token. -/// -/// Through the companion port that stand-in is ccteam's authenticated -/// identity: the page reaches an instance that belongs to that identity alone -/// (the operator's own `~/.dsh`, or the tenant's isolated home), after ccteam -/// auth, and the server-side Host/Origin fence is already satisfied by the -/// loopback rewrite in [`proxy_request_headers`]. `__DSH_TRANSPORT__.ownsHost` -/// is the hook DSH documents for exactly this ("a shell that assembles its -/// own transport"); the companion port is that shell. -/// -/// Version-safe by construction, because the two published shapes of the hook -/// differ and a served page carries the global for both: -/// - DSH ≤ 0.1.1-rc.2 has no `ownsHost` and reads -/// `transport?.createApiClient() ?? new WebApiClient()` — a global WITHOUT -/// `createApiClient` aborts the whole boot ("transport?.createApiClient is -/// not a function", real-machine), so the declaration ships a -/// `createApiClient` that answers `undefined` and lets the default carrier -/// through. On those versions the flag is simply not read: settings stay -/// loopback-only there (a `127.0.0.1` tunnel is the way in), nothing else -/// changes. -/// - DSH after rc.2 reads `ownsHost`, ignores `createApiClient`, and takes -/// `fetch` / `openStream` / `loadBundle` from the global only when present — -/// none are, so HTTP + WebSocket + HTTP bundles stay the defaults. -/// -/// An existing global (a shell that brought its own transport) is left alone -/// except for the missing flag. Consequence to know once the flag is read: -/// deliverables actions then act on the daemon host — the workspace machine. -/// For DSH ≤ 0.1.1-rc.2, whose client never reads the flag, the companion -/// port back-ports that read into the served client-connection bundle -/// (`backport_owns_host`), so the declaration is effective on every version. -const DSH_TRANSPORT_OWNS_HOST: &str = r#""#; +/// The authenticated companion page owns its per-identity Host. Use DSH's +/// public transport hook before browser modules initialize; vendor bundles +/// remain opaque and stream through unchanged across DSH releases. +const DSH_TRANSPORT_OWNS_HOST: &str = r#""#; /// Splice the companion head scripts in as the first thing inside `` so /// they run before the boot script and every client plugin module. Returns @@ -518,33 +479,6 @@ fn inject_polyfill(html: &str) -> Option { Some(out) } -/// The one line DSH ≤ 0.1.1-rc.2 decides `isLoopback` on: page hostname -/// alone. Upstream added the `__DSH_TRANSPORT__.ownsHost` read after rc.2 -/// shipped, and the client-connection bundle is served verbatim -/// (`/plugins//client.js`), so the companion port back-ports exactly that -/// read: the rc.2 line gains the same branch newer DSH evaluates natively. -/// Anything else — another version, a minified build — passes through -/// byte-for-byte, which is also how this retires: the first DSH release that -/// reads the flag itself no longer carries the line. -const RC2_IS_LOOPBACK_LINE: &str = - "isLoopback: pageLocation === void 0 || isLoopbackHostname(pageLocation.hostname),"; -const RC2_IS_LOOPBACK_OWNS_HOST: &str = "isLoopback: pageLocation === void 0 || \ - globalThis.__DSH_TRANSPORT__?.ownsHost === true || \ - isLoopbackHostname(pageLocation.hostname),"; - -fn backport_owns_host(bundle: &str) -> Option { - bundle - .contains(RC2_IS_LOOPBACK_LINE) - .then(|| bundle.replacen(RC2_IS_LOOPBACK_LINE, RC2_IS_LOOPBACK_OWNS_HOST, 1)) -} - -/// `/plugins//client.js` — DSH client-modules' bundle route (the rev rides -/// the query string, which is not part of the path). -fn is_plugin_bundle_path(path: &str) -> bool { - path.strip_prefix("/plugins/") - .is_some_and(|rest| !rest.starts_with('/') && rest.ends_with("/client.js")) -} - fn content_type_starts_with(headers: &HeaderMap, prefixes: &[&str]) -> bool { headers .get(header::CONTENT_TYPE) @@ -559,53 +493,20 @@ fn is_html_response(headers: &HeaderMap) -> bool { content_type_starts_with(headers, &["text/html"]) } -fn is_javascript_response(headers: &HeaderMap) -> bool { - content_type_starts_with(headers, &["text/javascript", "application/javascript"]) -} - -/// What the companion port splices into a buffered upstream body. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum Splice { - /// The document: head scripts (secure-context polyfill + `ownsHost`). - Html, - /// A plugin client bundle: the rc.2 `ownsHost` back-port. - PluginBundle, -} - -fn splice_for(headers: &HeaderMap, plugin_bundle: bool) -> Option { - if is_html_response(headers) { - Some(Splice::Html) - } else if plugin_bundle && is_javascript_response(headers) { - Some(Splice::PluginBundle) - } else { - None - } -} - -async fn response_from_reqwest(resp: reqwest::Response, plugin_bundle: bool) -> Response { +async fn response_from_reqwest(resp: reqwest::Response) -> Response { let status = resp.status(); let headers = resp.headers().clone(); - // HTML (small) and plugin client bundles (a few hundred KB, browser-cached - // per rev) are buffered so their splice can be applied; everything else — - // assets, RPC payloads, downloads — keeps streaming untouched. - // `accept-encoding` is stripped on the way out (see - // `should_strip_request_header`), so the body here is always identity and - // splicing can never corrupt a compressed stream. - if let Some(splice) = splice_for(&headers, plugin_bundle) { + // Only HTML needs the public transport declaration. Scripts, downloads, + // and RPC streams remain opaque, including their original headers. + if is_html_response(&headers) { match resp.bytes().await { Ok(bytes) => { let body = match std::str::from_utf8(&bytes) { - Ok(text) => { - let patched = match splice { - Splice::Html => inject_polyfill(text), - Splice::PluginBundle => backport_owns_host(text), - }; - match patched { - Some(patched) => Body::from(patched), - None => Body::from(bytes), - } - } + Ok(text) => match inject_polyfill(text) { + Some(patched) => Body::from(patched), + None => Body::from(bytes), + }, // Not UTF-8 → not something to splice; pass it through. Err(_) => Body::from(bytes), }; @@ -940,10 +841,6 @@ mod tests { assert!(!patched.contains("fetch:")); assert!(!patched.contains("openStream")); assert!(patched.contains("t.ownsHost===undefined")); - // DSH ≤ 0.1.1-rc.2 calls `transport?.createApiClient()` unconditionally - // and `??`-falls through to its default carrier on `undefined`; a - // global without it aborts the boot. - assert!(patched.contains("createApiClient:function(){return undefined}")); } #[test] @@ -952,80 +849,66 @@ mod tests { assert!(inject_polyfill("plain text").is_none()); } - #[test] - fn rc2_connection_bundle_gains_the_owns_host_branch() { - let bundle = format!( - "\t\t\tconst handle = {{\n\t\t\t\tapi,\n\t\t\t\t{RC2_IS_LOOPBACK_LINE}\n\t\t\t\thostDescription: {{}}\n" + async fn proxy_fixture(content_type: &'static str, body: &'static [u8]) -> Response { + let app = axum::Router::new().route( + "/", + axum::routing::get( + move || async move { ([(header::CONTENT_TYPE, content_type)], body) }, + ), ); - let patched = backport_owns_host(&bundle).expect("the rc.2 line is back-ported"); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let address = listener.local_addr().unwrap(); + let server = tokio::spawn(async move { axum::serve(listener, app).await.unwrap() }); + let response = reqwest::get(format!("http://{address}/")).await.unwrap(); + let output = response_from_reqwest(response).await; + // The proxied stream must be consumed before its source server stops. + let (parts, body) = output.into_parts(); + let bytes = axum::body::to_bytes(body, usize::MAX).await.unwrap(); + server.abort(); + Response::from_parts(parts, Body::from(bytes)) + } + + #[tokio::test] + async fn vendor_javascript_is_forwarded_byte_for_byte() { + let bundle = + b"isLoopback: pageLocation === void 0 || isLoopbackHostname(pageLocation.hostname),"; + let response = proxy_fixture("text/javascript", bundle).await; assert_eq!( - patched - .matches("__DSH_TRANSPORT__?.ownsHost === true") - .count(), - 1, - "exactly one ownsHost read is added" - ); - assert!( - !patched.contains(RC2_IS_LOOPBACK_LINE), - "the hostname-only line is replaced, not duplicated" + response.headers()[header::CONTENT_LENGTH], + bundle.len().to_string() ); - assert!( - patched.contains("isLoopbackHostname(pageLocation.hostname),"), - "the hostname read stays as the fallback" + assert_eq!( + axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap() + .as_ref(), + bundle ); - let (before, after) = bundle.split_once(RC2_IS_LOOPBACK_LINE).unwrap(); - assert!(patched.starts_with(before) && patched.ends_with(after)); } - #[test] - fn other_bundles_pass_through_untouched() { - for js in [ - "", - "export const x = 1;", - // The post-rc.2 shape already reads the flag: nothing to back-port. - "isLoopback: transport?.ownsHost === true || isLoopbackHostname(pageLocation.hostname),", - ] { - assert!(backport_owns_host(js).is_none(), "{js:?}"); - } + #[tokio::test] + async fn html_proxy_declares_native_transport_without_stale_length() { + let response = proxy_fixture("text/html", b"").await; + assert!(!response.headers().contains_key(header::CONTENT_LENGTH)); + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + assert!(std::str::from_utf8(&body) + .unwrap() + .contains("ownsHost:true")); } - #[test] - fn only_plugin_bundle_paths_are_back_port_candidates() { - assert!(is_plugin_bundle_path( - "/plugins/@deepseek-ai/dsh-client-connection/client.js" - )); - assert!(is_plugin_bundle_path("/plugins/x/client.js")); - for path in [ - "/", - "/plugins", - "/plugins/", - "/plugins/client.js", - "/plugins//client.js", - "/assets/index-abc.js", - "/ccteam/api/tree", - ] { - assert!(!is_plugin_bundle_path(path), "{path}"); - } - let js = |ct: &str| { - let mut h = HeaderMap::new(); - h.insert(header::CONTENT_TYPE, ct.parse().unwrap()); - h - }; - assert_eq!( - splice_for(&js("text/javascript; charset=utf-8"), true), - Some(Splice::PluginBundle) - ); - assert_eq!( - splice_for(&js("application/javascript"), true), - Some(Splice::PluginBundle) - ); + #[tokio::test] + async fn non_utf8_assets_are_forwarded_without_text_decoding() { + let bytes = b"\x00\xff\xfe\x80"; + let response = proxy_fixture("application/octet-stream", bytes).await; assert_eq!( - splice_for(&js("text/javascript"), false), - None, - "a JS asset off the bundle route streams through" + axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap() + .as_ref(), + bytes ); - assert_eq!(splice_for(&js("text/html"), true), Some(Splice::Html)); - assert_eq!(splice_for(&js("application/json"), true), None); } #[test] diff --git a/crates/ccteam-web/src/routes/sessions_api.rs b/crates/ccteam-web/src/routes/sessions_api.rs index d3598b58..a3656213 100644 --- a/crates/ccteam-web/src/routes/sessions_api.rs +++ b/crates/ccteam-web/src/routes/sessions_api.rs @@ -357,10 +357,9 @@ pub struct CreateSessionForm { #[serde(default)] pub effort: Option, /// Explicit vendor session-mode token, forwarded verbatim and validated - /// by the vendor adapter. DSH only today: its agent preset — `standard` | - /// `ptc` (alias `code`) | `minimal` | `creator` (alias `cordis`); - /// omitted → DSH hires default to `standard`. Other vendors refuse a non-empty - /// mode. + /// by the vendor adapter. DSH accepts native agent-preset ids and resolves + /// its own default when omitted; `creator` selects `cordis`. Other vendors + /// refuse a non-empty mode. #[serde(default)] pub mode: Option, } diff --git a/docs/dsh-plugin-cn.md b/docs/dsh-plugin-cn.md index 5e3985ed..d26b634a 100644 --- a/docs/dsh-plugin-cn.md +++ b/docs/dsh-plugin-cn.md @@ -118,7 +118,7 @@ home、一个 daemon。规则如下: ## 4. 「引擎」段、首屏与横幅 -**设置卡。** DSH **设置 → 插件 → 插件配置 → ccteam-ui** 卡的最上面就是「引擎」段: +**设置卡。** DSH **设置 → ccteam-ui** 卡的最上面就是「引擎」段: - **状态** —— 一个状态点加下列之一:「正在读取引擎状态…」·「运行中」(本插件起的)· 「已挂靠」(别处起的;提示行「由 CLI/其他入口启动,插件已接管显示」)·「启动中」· @@ -148,8 +148,8 @@ home、一个 daemon。规则如下: 停止的进程。」 **工作台内。** 头部有一个「引擎:<状态>」状态点;点它在工作台内打开同一个引擎面板 -(DSH 没给插件跳到设置页的入口,所以面板末尾写着「引擎设置在 DSH 设置 → 插件 → -插件配置 → ccteam-ui」);**Esc** 关闭。首次使用时工作台闸在引擎上: +(DSH 没给插件跳到设置页的入口,所以面板末尾写着「引擎设置在 DSH 设置 → +ccteam-ui」);**Esc** 关闭。首次使用时工作台闸在引擎上: - **「ccteam 引擎未运行」** —— 附原因(「引擎已安装,但 daemon 没有运行。」或 「还没有安装引擎;启动时会从插件自带的平台包安装。」)和一个「启动引擎」按钮。 @@ -165,11 +165,9 @@ home、一个 daemon。规则如下: ## 5. 配置三个面 -连接设置在同一张卡上。DSH 只对它认为是「操作者本机」的浏览器显示这一页:手起 -的 `dsh web` 请从 `127.0.0.1` 打开,或经 ccteam 的 DSH 页访问(ccteam 会声明 -该页拥有其 Host,见 usage.md → DSH Web;对 0.1.1-rc.2 及更早版本,ccteam 把这 -处读取回填进下发的客户端 bundle);从局域网地址直接打开原生 `dsh web`,这一页 -会是空白。 +同一张卡配置所有连接。设置直接写入 DSH 原生 profile 配置并实时生效。 +凭据保持只写,界面仅读取 Host 提供的「是否已配置」元数据;重新注册插件 +会保留已保存的用户偏好和未被本次注册指定的凭据。 | 字段 | 是什么 | 什么时候填 | |---|---|---| @@ -236,7 +234,7 @@ harness 的目录里选**模型**和 **effort**(留空即 harness 默认), **Esc** 先离开文本框,再关闭详情,整页时先停靠回去,最后关闭窗格。工作台关闭时,ccteam 按钮会显示自上次打开以来完成的回合数;打开后徽标清零。 -工作台需要 DSH 0.1.0-rc.7 起提供的原生侧栏底部座位与 overlay 座位。 +工作台通过 DSH 公共 slot 挂接侧栏入口、overlay 和独立设置页。 ## 7. 排查问题 @@ -251,13 +249,15 @@ harness 的目录里选**模型**和 **effort**(留空即 harness 默认), | **启动时报 `duplicate loader entry id`** | 同一个插件被插入了两次(常见于 registry 和 bundle patch 都有,或手改了 `cordis.patch.yml`)。只保留一条,删除重复项。ccteam 自己的注册绝不会在你装的那份旁边再加一条。 | | **`cordis.patch.yml` 被重新排版 / 注释没了** | ccteam 第一次向你手管的 profile 注册时会把 patch 文件重新序列化:格式被规范化,YAML 注释不保留(`serde_yaml` 没有保注释的往返)。之后只要内容不变 ccteam 就不再重写该文件——重复注册字节完全一致——且每次写入都是原子的(临时文件 + rename,权限 0600)。备注请放在 patch 文件之外。 | | **`ccteam doctor` 报 `plugin_version_mismatch`** | 你自己 `dsh plugin add` 的那份与这个 ccteam 内嵌的版本不一致。ccteam 不动它;执行 `dsh plugin --profile web update @ccteam/ccteam-ui`。 | -| **侧栏里没有 ccteam 按钮** | 插件需要 DSH 0.1.0-rc.7 或更新(原生侧栏底部座位与 overlay 座位)。升级 DSH 后,到 设置 → 插件 → 插件列表 确认 `ccteam-ui` 为 Enabled。 | +| **侧栏里没有 ccteam 按钮** | 插件需要 DSH 0.2.2-alpha.2 或更新(原生侧栏底部座位与 overlay 座位)。升级 DSH 后,到 设置 → 插件 → 插件列表 确认 `ccteam-ui` 为 Enabled。 | | **局域网明文 HTTP 异常** | 参阅 [usage.md](usage.md) 的“Access and security”安全上下文说明。 | | **DSH 里人手打的 turn 不在 ccteam 账本里** | 这是设计如此:DSH 自己页面里的输入属于 harness 原生对话;ccteam 只记录自己路由的 turn,完整对话仍保存在 DSH 中。 | ## 8. 版本与更新 -需要 **DSH 0.1.0-rc.7 或更高版本**。 +当前插件使用 **DSH 0.2.2-alpha.2** 提供的原生 Config/forms 与公共 slot。 +DSH 与 ccteam 无须版本锁步;会话 preset 和未指定时的默认值由 DSH 自己解析, +新增 preset 不需要 ccteam 更新。DSH 如果破坏插件 API,仍需要适配该 API。 **版本锁步。** 每个插件发布都钉死它一起发布的引擎版本(`package.json` 里的 `ccteam.engine`,与它依赖的 `@ccteam/engine-*` 版本相同)。没有 daemon 在跑 diff --git a/docs/dsh-plugin.md b/docs/dsh-plugin.md index fd92c025..4230d8b4 100644 --- a/docs/dsh-plugin.md +++ b/docs/dsh-plugin.md @@ -144,7 +144,7 @@ same OS user all share one home and one daemon. The rules: ## 4. The Engine section, the first screen and the banner -**Settings card.** DSH **Settings → Plugins → Plugin configuration → +**Settings card.** DSH **Settings → ccteam-ui** opens with the **Engine** section: - **State** — a dot and one of: *Reading engine state…* · **Running** @@ -187,7 +187,7 @@ engine is not on this machine; there is nothing here to start or stop.* **Inside the workbench.** The header carries an **Engine: ** dot; clicking it opens the same engine panel inside the workbench (DSH gives a plugin no way to jump to its settings page, so the panel ends with *Engine -settings: DSH Settings → Plugins → Plugin configuration → ccteam-ui*); **Esc** +settings: DSH Settings → ccteam-ui*); **Esc** closes it. On first use the workbench is gated on the engine: - **The ccteam engine is not running** — with the reason (*The engine is @@ -211,12 +211,10 @@ closes it. On first use the workbench is gated on the engine: ## 5. Configure the faces -The same card holds the connection settings. DSH shows this tab only to a -browser it considers the operator's own machine: open a hand-started -`dsh web` from `127.0.0.1`, or go through ccteam's DSH page, which declares -the page owns its Host (see usage.md → DSH Web; on 0.1.1-rc.2 and earlier -ccteam back-ports that read into the served client bundle); a native -`dsh web` opened over a LAN address leaves the tab empty. +The same card holds the connection settings. DSH persists live preferences +in the profile's native configuration. Credentials remain write-only; the +card reads only the Host's configured-state metadata. Registering the plugin +again preserves preferences and credentials already saved in that profile. | Field | What it is | When you fill it | |---|---|---| @@ -308,7 +306,7 @@ completion count for turns finished since the last open; opening it clears the badge. The workbench needs the native sidebar-footer and overlay seats DSH ships -since 0.1.0-rc.7. +through its public plugin slots. ## 7. Troubleshooting @@ -323,13 +321,16 @@ since 0.1.0-rc.7. | **`duplicate loader entry id` at boot** | The plugin was inserted twice (for example, registry plus bundle patch, or a hand-edited `cordis.patch.yml`). Keep exactly one entry and remove the duplicate. ccteam's own registration never adds a second entry next to one you installed. | | **`cordis.patch.yml` came back reformatted or without its comments** | The first time ccteam registers into a profile you manage by hand, it re-serializes the patch file: formatting is normalized and YAML comments are not preserved (`serde_yaml` has no comment-preserving round-trip). After that ccteam never rewrites the file unless its content changes — a repeated registration is byte-identical — and every write is atomic (temp file + rename, mode 0600). Keep notes outside the patch file. | | **`ccteam doctor` warns `plugin_version_mismatch`** | Your own `dsh plugin add` copy differs from the version this ccteam embeds. ccteam leaves it alone; run `dsh plugin --profile web update @ccteam/ccteam-ui`. | -| **No ccteam button in the sidebar** | The plugin needs DSH 0.1.0-rc.7 or newer (the native sidebar footer and overlay seats). Update DSH; then check Settings → Plugins → Plugin list shows `ccteam-ui` as Enabled. | +| **No ccteam button in the sidebar** | The plugin needs DSH 0.2.2-alpha.2 or newer (the native sidebar footer and overlay seats). Update DSH; then check Settings → Plugins → Plugin list shows `ccteam-ui` as Enabled. | | **Plain-HTTP LAN problems** | See [usage.md](usage.md) → “Access and security” for the DSH Web security-context note. | | **Human DSH turns missing from ccteam** | Expected: turns typed in DSH’s own UI remain harness-native. ccteam’s ledger and transcript contain only turns ccteam routed; DSH keeps the complete conversation. | ## 8. Versions and updates -Use **DSH 0.1.0-rc.7 or newer**. +The plugin uses the native Config/forms and public slots provided by +**DSH 0.2.2-alpha.2**. DSH and ccteam versions are independent: DSH resolves +its own presets and default, so adding a preset needs no ccteam update. +Breaking changes to DSH's plugin APIs still require adapting those APIs. **Version lockstep.** Each plugin release pins the engine version it was published with (`ccteam.engine` in its `package.json`, equal to the diff --git a/docs/usage-cn.md b/docs/usage-cn.md index 7d5a5b92..3f0e7d2d 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -154,7 +154,7 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> - **模型密钥**:在 DSH 原生 **Settings → Models** 里配置自己的 provider。同身份的所有 DSH 会话——你在这页打开的和在 ccteam 里雇出来的——都跑在同一个运行时、用同一份配置,改一次全体生效。ccteam 只逐字节复制和 hash 这些 DSH 配置文件,不解析 vendor YAML。 - **账本**:DSH Web 里原生跑的 turn 不是 ccteam session,不会在 ccteam 账本里伪装成 `$0` 或其它值;同一条规则在雇出来的会话里同样成立——你从 DSH 侧直接输入的 turn 是 vendor 原生 turn,ccteam 的 transcript 与账本只记 ccteam 路由的部分,完整对话以 DSH 家为准。从 DSH 通过 ccteam 插件委派出去的工作照常入账。 - **局域网明文 HTTP**:DSH Web 是按 loopback 源写的,浏览器只在安全上下文里给它 `crypto.randomUUID` 等 API;把 UI 搬离 loopback 的是 ccteam,所以伴生监听会在它下发的 HTML 里补回这一个 API(真 `crypto.getRandomValues` 生成的 UUID v4),浏览器自带时则不介入。走 HTTPS 或在 daemon 本机打开都不需要这些。 -- **局域网浏览器改设置**:DSH 把设置文档(所有 Settings 页,含「插件配置」)当作「操作者本机」才可触及的特权面,而且由客户端按页面地址判断——原生 `dsh web` 从局域网地址打开时,「插件配置」页一片空白、设置只读。经伴生监听访问时这个「本机」就是你的 ccteam 身份:实例只属于你,页面已经过 ccteam 鉴权,所以伴生监听用 DSH 自己的传输钩子(`__DSH_TRANSPORT__.ownsHost`)声明「本页拥有其 Host」,任何浏览器都能改设置。DSH 从 0.1.1-rc.2 之后的版本才原生读这个钩子(已在 DSH main 上);对 rc.2 及更早版本(客户端只按页面主机名判断),伴生监听把这一处读取回填进它下发的 client-connection bundle(精确到行的改写,其它版本上零操作),所以 rc.2 上同样任何浏览器都能改设置。一个连带后果:DSH 的产出文件动作会作用在 daemon 所在机器(即工作区机器)上。 +- **局域网浏览器改设置**:通过 ccteam 鉴权的伴生页面使用 DSH 官方 `__DSH_TRANSPORT__.ownsHost` 钩子声明拥有该身份的 Host。设置由 DSH 原生配置表单处理,厂商 JavaScript 原样转发;文件动作作用在 daemon 所在的工作区机器上。 - **信任边界**:租户 DSH Web 是同一 OS 用户下的软隔离。DSH agent 能跑 shell,用户自装 DSH 插件也是任意 npm 代码,信任级等同这个系统账号。同一个 OS 用户下的配置可见性只是便利边界,不是硬安全边界。 - **局域网明文访问**:DSH Web 是按 loopback 源写的 —— 浏览器只在安全上下文里给它 `crypto.randomUUID`,而它用这个 API 生成**每一个** RPC 请求 id;换成局域网地址 + 明文 HTTP,这个 API 就没了。把界面搬离 loopback 的是 ccteam,所以伴生监听会在下发的 HTML 里补回这一个 API(用 `crypto.getRandomValues` 实现的标准 v4 UUID,不降随机强度);浏览器本来就提供时它自动让位。用 HTTPS 访问控制台、或直接在 daemon 本机打开,都不需要这层补丁。 diff --git a/docs/usage.md b/docs/usage.md index 1c0ea875..b9a5fc32 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -155,7 +155,7 @@ An identity runs **one** DSH runtime, and ccteam is its second client: sessions - **Ledger:** native DSH Web turns are not ccteam sessions, so they do not show up as `$0` or any other fake value in the ccteam ledger. The same rule holds inside a hired session: turns you type into it from the DSH side are vendor-native — ccteam's transcript and ledger record only the turns ccteam routed, and the DSH home keeps the complete conversation. Work delegated from DSH through the ccteam plugin is recorded normally. - **Trust boundary:** tenant DSH Web is same-OS-user isolation. DSH agents can run shell commands, and self-installed DSH plugins are arbitrary npm code with the same trust level as that OS account. Sharing one OS user means config visibility is a convenience boundary, not a hard security boundary. - **Plain-HTTP LAN access:** DSH Web is written for a loopback origin, where browsers grant it secure-context APIs — it mints every RPC id with `crypto.randomUUID`, which browsers withhold from plain HTTP on a LAN address. Because ccteam is what moves the UI off loopback, the companion listener restores that one API (a real `crypto.getRandomValues`-backed UUID v4) in the HTML it serves, and stays out of the way when the browser already provides it. Serving the console over HTTPS or opening it on the daemon host needs none of this. -- **Settings from a LAN browser:** DSH treats its settings document (every Settings page, including Plugin configuration) as a privileged surface for the operator's own machine, and its client decides that from the page address — a native `dsh web` opened over a LAN address shows an empty Plugin configuration tab and keeps settings read-only. Through the companion listener that stand-in is your ccteam identity: the instance is yours alone and ccteam already authenticated the page, so the listener declares the page owns its Host through DSH's own transport hook (`__DSH_TRANSPORT__.ownsHost`) and settings work from any browser. DSH reads that hook natively from the release after 0.1.1-rc.2 (it is on DSH main); for rc.2 and earlier, whose client decides from the page hostname alone, the listener back-ports that one read into the client-connection bundle it serves (an exact-line rewrite that is a no-op on any other version), so settings work from any browser on rc.2 as well. One consequence: DSH's deliverable file actions then act on the daemon host — the workspace machine. +- **Settings from a LAN browser:** the authenticated companion page declares ownership of its per-identity Host through DSH's public `__DSH_TRANSPORT__.ownsHost` hook. DSH handles settings through its native configuration forms; vendor JavaScript is forwarded unchanged. File actions act on the daemon host — the workspace machine. When running ccteam behind HTTPS, proxy the DSH companion listener as well as the main web listener. DSH Web has no base-path support, so use a second HTTPS port or subdomain; proxying only `:7331` leaves the iframe on plain HTTP and browsers block it as mixed content. diff --git a/dsh-plugins/ccteam-ui/README.md b/dsh-plugins/ccteam-ui/README.md index 317e93c9..c04aa71d 100644 --- a/dsh-plugins/ccteam-ui/README.md +++ b/dsh-plugins/ccteam-ui/README.md @@ -12,7 +12,7 @@ faces, and every DSH profile that installs it gets all three: Built the way a DSH client plugin is built: `dsh.client` in package.json names the packages it composes against, the client half contributes its seats through `ctx.slots.inject(...) → ctx.slots.register(...)` -(`sidebar.footer.action`, `shell.overlay`, `settings.plugin.item`), copy goes +(`sidebar.footer.action`, `shell.overlay`, `settings.section`), copy goes through `ctx.locale`, business state reaches components as framework-bound selector hooks, and stylesheets are lightningcss CSS Modules under the preset's `[hash]_[local]` pattern. @@ -30,8 +30,7 @@ the rest. ## Install (hand-started DSH) 1. `dsh plugin --profile web add @ccteam/ccteam-ui` -2. Restart `dsh web`, hard-refresh, then open DSH Settings → Plugins → - **ccteam-ui** and fill in one card: the daemon URL, your personal REST +2. Restart `dsh web`, hard-refresh, then open DSH Settings → **ccteam-ui** and fill in one card: the daemon URL, your personal REST token (ccteam web console → Settings → Account) for the workbench, and the enrollment credential (Settings → Access) for the agent's tools. 3. Look for the ccteam button at the bottom of the sidebar. diff --git a/dsh-plugins/ccteam-ui/build/client-externals.ts b/dsh-plugins/ccteam-ui/build/client-externals.ts index a97eacb7..4148d77e 100644 --- a/dsh-plugins/ccteam-ui/build/client-externals.ts +++ b/dsh-plugins/ccteam-ui/build/client-externals.ts @@ -1,11 +1,9 @@ /** * The DSH client-bundle module table — build-time only, never shipped. * - * Verbatim from references/deepseek-harness/packages/client/web/src/platform.ts - * (`PLATFORM_MODULES` lines 8-12 + `PRELOADED_CLIENT_EXTERNALS` lines 15-17). - * These are the only specifiers the browser loader's injected `require` can - * answer; everything else must be bundled inline or it throws at - * materialization (system.ts:174-187). + * Only shared platform libraries this bundle actually imports are external. + * Cross-plugin services are accessed through Cordis and imported as types, + * so adding vendor plugins never requires another loader-table entry here. * * MATCHING IS EXACT STRING EQUALITY, never prefix. `react` being external does * not make `react/jsx-runtime` external — it is listed separately because it @@ -21,8 +19,6 @@ export const CLIENT_EXTERNALS: ReadonlySet = new Set([ '@deepseek-ai/cordis', '@deepseek-ai/dsh-client-ui-slots', '@deepseek-ai/dsh-client-ui-primitives', - // The `/client` subpath is part of the specifier; the loader strips it to key the row. - '@deepseek-ai/dsh-client-runtime/client', ]) /** Vendored libraries carry no shared identity, so inlining them is correct. */ diff --git a/dsh-plugins/ccteam-ui/package-lock.json b/dsh-plugins/ccteam-ui/package-lock.json index 20ef2e88..f008bf85 100644 --- a/dsh-plugins/ccteam-ui/package-lock.json +++ b/dsh-plugins/ccteam-ui/package-lock.json @@ -11,24 +11,64 @@ "@deepseek-ai/schemastery" ], "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "3.18.6-alpha.1" }, "devDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-layout": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-primitives": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-sidebar": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-slots": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-theme": "0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "0.1.1-rc.2", + "@deepseek-ai/cordis": "4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-account-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-gateway": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-job-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-remote-access": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-remotes": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-session-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-settings-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-terminal-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-workspace-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-workspace-files": "0.2.2-alpha.2", + "@deepseek-ai/dsh-attachment": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-file-upload": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-locale": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-product-analytics": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-shortcuts": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-store": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-conversation": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-layout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-primitives": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-sidebar": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-slots": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-theme": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-trajectory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-alpha.2", + "@deepseek-ai/dsh-command-feedback": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-cordis-host-runner": "0.2.2-alpha.2", + "@deepseek-ai/dsh-file-reference": "0.2.2-alpha.2", + "@deepseek-ai/dsh-goal": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-plugin-inventory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-webserver": "0.2.2-alpha.2", + "@deepseek-ai/dsh-message-feedback": "0.2.2-alpha.2", + "@deepseek-ai/dsh-office-to-pdf": "0.2.2-alpha.2", + "@deepseek-ai/dsh-permission-presets": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-manager": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-market": "0.2.2-alpha.2", + "@deepseek-ai/dsh-schedule": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-reference": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subagent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-questions": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-code-language": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-file-drag": "0.2.2-alpha.2", "@types/node": "^22.13.0", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", @@ -48,37 +88,85 @@ } }, "node_modules/@ccteam/engine-darwin-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@ccteam/engine-darwin-arm64/-/engine-darwin-arm64-0.13.0.tgz", + "integrity": "sha512-WUaINXpLbSuP/98VSg4kQUqM4aa9VJhjGkzhkN6MrYbQDpbQ1DlkNt5VXERli4bKX8fd0ivnJhTa5iiNG/3SQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, - "version": "0.13.0" + "os": [ + "darwin" + ], + "bin": { + "ccteam": "bin/ccteam" + } }, "node_modules/@ccteam/engine-darwin-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@ccteam/engine-darwin-x64/-/engine-darwin-x64-0.13.0.tgz", + "integrity": "sha512-55w+mNVycpNzzomyz+9zc0wGG2pRn32CWaTRZFCP0m1eXEuTOzvSKkssgZeTE/8JkcnkHg7c9jYeJ9GACVnMVQ==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, - "version": "0.13.0" + "os": [ + "darwin" + ], + "bin": { + "ccteam": "bin/ccteam" + } }, "node_modules/@ccteam/engine-linux-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@ccteam/engine-linux-arm64/-/engine-linux-arm64-0.13.0.tgz", + "integrity": "sha512-X/SgY1HcjuhqcuN0fmimyNptqtM38YXc3scQtpD0oizsqNZOwVKabzkpAZiQetei/YLmQDIXXqHFh3rvxawdlw==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, - "version": "0.13.0" + "os": [ + "linux" + ], + "bin": { + "ccteam": "bin/ccteam" + } }, "node_modules/@ccteam/engine-linux-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@ccteam/engine-linux-x64/-/engine-linux-x64-0.13.0.tgz", + "integrity": "sha512-4ejuO81Q21tx7slO4forvj2/YRkKUM915ZL9ydlFCNnc+QZcwqBpRA4UZx3yJdpIlbchI8twEecw22qsdyitsQ==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, - "version": "0.13.0" + "os": [ + "linux" + ], + "bin": { + "ccteam": "bin/ccteam" + } }, "node_modules/@deepseek-ai/cordis": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis/-/cordis-4.0.1.tgz", - "integrity": "sha512-YBdskTU2Po1kru3GgcUWUbkTsPMA9LkSQDAY8rBkFJeajdgcQad3QPJZE26JyK99Xb6HaASvoXg2DSUTeN/0Nw==", + "version": "4.0.6-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis/-/cordis-4.0.6-alpha.1.tgz", + "integrity": "sha512-GgUFYPkAERAhjq/H7ASM9G2tWu07bY6XOD/q16jUXqsj/arawh0EIZKB+PjTXLjC7vgG3XptSvJ/8dZkkIWsfQ==", "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/cosmokit": "^1.8.2", + "@deepseek-ai/cosmokit": "~1.8.7-alpha.1", "@standard-schema/spec": "^1.1.0" }, "bin": { "cordis": "bin.js" }, "peerDependencies": { - "@deepseek-ai/cordis-plugin-include": "^1.0.6", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2" + "@deepseek-ai/cordis-plugin-include": "~1.0.11-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-include": { @@ -89,35 +177,47 @@ } } }, + "node_modules/@deepseek-ai/cordis-plugin-group": { + "version": "1.0.6-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-group/-/cordis-plugin-group-1.0.6-alpha.1.tgz", + "integrity": "sha512-7Pi3rbKv2dTRwI+JI2EJQPJ3bhX5rfBww0tZJ1NT+KZHDef8SL23aISVQ80WSub83ltu4O5sLM3wJf9uf1CWhw==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1" + } + }, "node_modules/@deepseek-ai/cordis-plugin-include": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-include/-/cordis-plugin-include-1.0.6.tgz", - "integrity": "sha512-i1VXrZCbv6tk/iUgedCNjrxxArbWT3IvRZGB5sdqJ3ectnihivXXQbRZ8JJ73DSmAPvlMGmrbtjFAfm10yvXRg==", + "version": "1.0.11-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-include/-/cordis-plugin-include-1.0.11-alpha.1.tgz", + "integrity": "sha512-sw7+Wn84GxxeH58+nSNp9UplMxqY3uhjNN7Bs3Q87twLAaLgmYMN+Nk7ryE6riX1N85K+Ao0H8Z5OOH4euCAMg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@deepseek-ai/cosmokit": "^1.8.2", + "@deepseek-ai/cosmokit": "~1.8.7-alpha.1", "js-yaml": "^4.1.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1" } }, "node_modules/@deepseek-ai/cordis-plugin-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-loader/-/cordis-plugin-loader-1.0.2.tgz", - "integrity": "sha512-RIW9hoVyhYDWdCI9BsvtZccPde1ECLC4OAxupwowGTak78vwVTVdb3HezTSOK1Y1/Ax3Ru0LA1pYOB04CnTxIQ==", + "version": "1.0.7-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-loader/-/cordis-plugin-loader-1.0.7-alpha.1.tgz", + "integrity": "sha512-Xbx+LkoUjShfFZTwzG2CY5/Uw1lkuf7sXcj1Y39G1sRjye/FAVn/JoZ5E7pPW2oU70Zt/n/4beV+OROKkMvuiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/cosmokit": "^1.8.2" + "@deepseek-ai/cosmokit": "~1.8.7-alpha.1", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "node-addon-require-builtin": "^0.1.4" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "node-addon-require-builtin": "^0.1.9" }, "peerDependenciesMeta": { "node-addon-require-builtin": { @@ -126,1835 +226,2075 @@ } }, "node_modules/@deepseek-ai/cosmokit": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cosmokit/-/cosmokit-1.8.2.tgz", - "integrity": "sha512-muBOKtSrUKU5m/xpq8ZXWL6hQ/jgd4PhU2PqH97bcxIiLEJfNwZOGQEx4t/aS/GgxRAR+ra9pMHPMtTHU4sqqA==", + "version": "1.8.7-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/cosmokit/-/cosmokit-1.8.7-alpha.1.tgz", + "integrity": "sha512-+R+9sx+SJbkyeidV3s+fvgsqCMZAfx2Z00YCQNhc5RsTen1SnvIYWM8neQah/1SxjlsXRo9jxX9U58Wk68JjvA==", "inBundle": true, "license": "MIT" }, "node_modules/@deepseek-ai/dsh-agent": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.1-rc.2.tgz", - "integrity": "sha512-cC7lnJe7JgPFcreNXxcxLMxQd78LnpVO9ZXROjZsGRQN1zGH6i/DduI892F1am85IfzzO+XTxMwwUHmfwamb0g==", + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.2.2-alpha.2.tgz", + "integrity": "sha512-e1seyUG26WYUAFX7tJJzhtg1aBwqIR7sFijt8S9DujS9alXwEdOZAYpJG531qqRGZSlM+XNT6z5AeH5KSjqdsA==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-workspace": { + "optional": true + } } }, "node_modules/@deepseek-ai/dsh-agent-default-model": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.1.1-rc.2.tgz", - "integrity": "sha512-Pv+4p20Eol7Ds/n0OS0vjtChCWfFTJAMThxugXcEcLKEJ9WAtpI4mzWfLgjmeVXnwD2yvp6HlLKDrrQV9PIkww==", + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.2.2-alpha.2.tgz", + "integrity": "sha512-Rq697rRmylANtB50EIro/ga09UfKNnidL0blZUfHtLHQTaO7MZ7Lfx015l+Yr7L3p7LkuMnIdwUqhj4c//CE4Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/dsh-config-editor": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-agent-presets": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-presets/-/dsh-agent-presets-0.1.1-rc.2.tgz", - "integrity": "sha512-88r3jkrbdwTgcP3MZLIUX458Ecu8JcLmZa7PtPszwf33yFoWlZvZmgjyn5ETHV55plNQ8gKMRm9a0RwzGGmzCw==", + "node_modules/@deepseek-ai/dsh-agent-preset-registry": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-preset-registry/-/dsh-agent-preset-registry-0.2.2-alpha.2.tgz", + "integrity": "sha512-rH2xDF1BsrCn8QgVqylZuqwnTPbxzUMzlLUT/oIfjatc/2q2n1cv2IJlnEjNMGltHCKoeuIe9n1L7J6vV3++/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "js-yaml": "^4.1.0" + "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "js-yaml": "^4.3.2", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-include": "^1.0.6", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-atomic-write": "^0.1.1-rc.2", - "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-include": "~1.0.11-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-api-gateway": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.1.1-rc.2.tgz", - "integrity": "sha512-i/e/Ecg1QCjMePUFHBfjRQU3NbDV0IdORwQbQD6RpiirzyvAIm4vvZgmW/FfgkO2XYJHHIVjo3i1i0YaHPcQag==", + "node_modules/@deepseek-ai/dsh-anonymous-user-id": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-anonymous-user-id/-/dsh-anonymous-user-id-0.2.2-alpha.2.tgz", + "integrity": "sha512-ZB9mucpGuTseJyPj9O5T6rtDEYGkPaEdk8UuYu1KlrvojA+2FynWZPAkjwSbmp8dn+OzbOECzbO7ptEpZZThQA==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-home-paths": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-api-remotes": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.1.1-rc.2.tgz", - "integrity": "sha512-mtmMxA0TZwTjy46E2DF0kmsPCXVq6RBhrwEHWXBaRzc0DLjnYqmJODrZ0X+XwXOkwFZtDxWSv/uheiIsXf8now==", + "node_modules/@deepseek-ai/dsh-api-account-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-account-controller/-/dsh-api-account-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-aXMpmdMfuTZOgr5EfQc/hhY77M1jYKevLHohSdxO1UAEV4UJSH6zq/X0HcAtZXe60W0Ee+vbEG6mgh+gRt83NQ==", "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.2", - "@deepseek-ai/dsh-api-gateway": "^0.1.1-rc.2", - "@deepseek-ai/dsh-commands": "^0.1.1-rc.2", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.2", - "@deepseek-ai/dsh-credentials": "^0.1.1-rc.2", - "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.2", - "@deepseek-ai/dsh-goal": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-message-feedback": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-reference": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-deepseek-account": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-atomic-write": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.1.1-rc.2.tgz", - "integrity": "sha512-QqNSF0+Ddn6qWY480dlilwEy6FLv3JKEWx1UQgoNJrxD4y54SDRzqBQB9yDXWKOoOGyC+05TN6/Px10GNIzMWA==", + "node_modules/@deepseek-ai/dsh-api-gateway": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.2.2-alpha.2.tgz", + "integrity": "sha512-5Wlz+8ejElX5t8zSc7cHeGk9eCDGAQApHaeJXwzycfkbAngglVoUVCdrp6xqmKqBRS45IUZHLh6IShiU/o1Xqw==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "ws": "^8.21.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-attachment": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.1-rc.2.tgz", - "integrity": "sha512-rCYAt8QsawP1yfDCU7XxNwYT/XWvyFsxYrkwhLLkdfW83QVD0CQHizSkTQE7RFX74nKUD1z3sTLfnLr7xneArw==", + "node_modules/@deepseek-ai/dsh-api-job-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-job-controller/-/dsh-api-job-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-S3JISeL5bRMh78RwsxMBsap1K866QFaHSBViQ5P1BpOeDY5g0WOW0d/qv8jvonoTsBaE4jFXwhDxH2kB3MO5MQ==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-brand": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.1-rc.2.tgz", - "integrity": "sha512-8vXsAXoUdzKAgvd/E9DgyT6HKmR6ZM4rtJ3fs/XoJ6n2kBk4tWil8Lv+jxCMWJeMOnTJF55gu2+NWQ3ECFPtJw==", + "node_modules/@deepseek-ai/dsh-api-remote-access": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remote-access/-/dsh-api-remote-access-0.2.2-alpha.2.tgz", + "integrity": "sha512-lbGVtqzr/tHdJCoEDv/uEi9NvfEQlzbtcdGqevh1XI7PMNyrIiGsxtMRwApou4o5XFdeFSDpvcNyy3k6AReu/Q==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-client-connection": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.1.1-rc.2.tgz", - "integrity": "sha512-YX2WLA/aZdDQsien4Zo7IHTEfYVJ+4QhRXbgA6BrRUM23NSP/+V3K00dQYyQVsF3ZwocE5uyvlZvbYeg1Iz4ug==", + "node_modules/@deepseek-ai/dsh-api-remotes": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.2.2-alpha.2.tgz", + "integrity": "sha512-RbSs2jnIf9KMN3jZLqQlSQbZlJhKfxPtULy91ANlzKCC8fQxMGLRhrgHIJVGA6o32jmF6GL5hzGKDkHQCjzvdA==", "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "ws": "^8.21.0" + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.1-rc.2", - "@deepseek-ai/dsh-commands": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-tools": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-client-locale": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.1.1-rc.2.tgz", - "integrity": "sha512-AMoR4FwMPLmt6WlYd4m0PCoxXj4qqMhpElBQZSc3r3NyGCZIuleU8tCG1xphGtr/w9mA1Y0kUX7Ftdmf7yV4FQ==", + "node_modules/@deepseek-ai/dsh-api-session-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-session-controller/-/dsh-api-session-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-6mQ+oaQNnB/DrM+EtS7/sZVF8lA4o0ej8aaXKzBXHpOHj1BFVdeuasfNg+0Cu/bHiiu1yGJjptJXSvBFh+bOIg==", "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "mime-types": "^3.0.2", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-agent-default-model": "0.2.2-alpha.2", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-gateway": "0.2.2-alpha.2", + "@deepseek-ai/dsh-attachment": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-file-upload": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-credentials": "0.2.2-alpha.2", + "@deepseek-ai/dsh-file-reference": "0.2.2-alpha.2", + "@deepseek-ai/dsh-fs": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-native-command": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection-cache": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-query": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-title": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-skill": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subagent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-time": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-workspace-path": "0.2.2-alpha.2", + "@deepseek-ai/dsh-working-directory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-session-persistence": { + "optional": true + }, + "@deepseek-ai/dsh-session-projection-cache": { + "optional": true + }, + "@deepseek-ai/dsh-settings": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-client-runtime": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-runtime/-/dsh-client-runtime-0.1.1-rc.2.tgz", - "integrity": "sha512-o1FH7Rlns0Xaxh4SBOWZ1wpa0ViGw6DXWNm5NFpsBTGYD94RGdIrud3QxgrfzmQKLzu33gvS8JL/IjqbzWyYsg==", + "node_modules/@deepseek-ai/dsh-api-settings-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-settings-controller/-/dsh-api-settings-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-lnVsenDv2M3nF6wPXop33enjzw+FF1lqKJhMZjQkjaW3Z7CQdzh+NB5DjkCnP8QUpz6YdrbDmezu1/VXM093rQ==", "dev": true, "license": "MIT", "dependencies": { - "immer": "^10.1.1", - "zustand": "~4.4.7" + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-attachment": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-commands": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm-retry": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-title": "^0.1.1-rc.2", - "@deepseek-ai/dsh-tools": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-credentials": "0.2.2-alpha.2", + "@deepseek-ai/dsh-native-command": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-client-ui-layout": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.1.1-rc.2.tgz", - "integrity": "sha512-y7xSQyQYGuahLyJcSXpB+JbH1F5lGEc3L9K8cjLy5vd/L9N6gLFLWyeGdlGxxM4jxRt1+rAHDDZ/zl7b8GC5zQ==", + "node_modules/@deepseek-ai/dsh-api-terminal-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-terminal-controller/-/dsh-api-terminal-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-aZp9Ts8NqWoA4qYvBVRyon5wEllDOpaJV7bAZwIsqzM/K7KPpuE33EJ1IghCTU+MXPMaldL7/ovufDJesYCTyA==", "dev": true, "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" - } - }, - "node_modules/@deepseek-ai/dsh-client-ui-primitives": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-primitives/-/dsh-client-ui-primitives-0.1.1-rc.2.tgz", - "integrity": "sha512-vCWEha1yhY//26j/LppHC/xZrU6MOuw6lcI4bJr5L7ppbY8h7GAR24ozBr+4ESMtQ5OmsvqGnsa/Kj5ZjSLfEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/langs": "^4.3.1", - "@types/mdast": "^4.0.4", - "anser": "^2.3.5", - "clsx": "^2.0.0", - "katex": "^0.16.47", - "mdast-util-from-markdown": "^2.0.3", - "mdast-util-gfm": "^3.1.0", - "mdast-util-math": "^3.0.0", - "micromark-core-commonmark": "^2.0.3", - "micromark-extension-gfm": "^3.0.0", - "micromark-extension-math": "^3.1.0", - "micromark-factory-space": "^2.0.1", - "micromark-util-character": "^2.1.1", - "micromark-util-classify-character": "^2.0.1", - "micromark-util-sanitize-uri": "^2.0.1", - "micromark-util-symbol": "^2.0.1", - "micromark-util-types": "^2.0.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "shiki": "^4.3.1" + "dependencies": { + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-lazy-require": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "@xterm/addon-serialize": "^0.14.0", + "@xterm/headless": "^6.0.0", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-client-ui-settings": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.1.1-rc.2.tgz", - "integrity": "sha512-WqEQkyjW467leTJoA31BgqM+nALI3JnrvN1IXDhJuKd8E9nXhTLJcRgDrovEUkh2cjbHF8g8gQJ5Qafg9PzJiQ==", + "node_modules/@deepseek-ai/dsh-api-workspace-controller": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-workspace-controller/-/dsh-api-workspace-controller-0.2.2-alpha.2.tgz", + "integrity": "sha512-rEjrd/O7MLlvnWVnwCPuX8GLXFlpVjVpVfG6k36Oy88aK7m6m3Tl6xwsO8JpBip37JI1w6XBcyLTVdMrExHVZg==", "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-native-command": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-api-gateway": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-directory-picker": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-storage-domain": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-client-ui-settings-plugins": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.1.1-rc.2.tgz", - "integrity": "sha512-NspsecIb4YdvE54jmaGBW/MjFyuu/MwUjQeM/I9iAgMOpLO+jOsoCOT4M8Su1Nfy1bxokgks9XcBJOcNGjN4Vg==", + "node_modules/@deepseek-ai/dsh-api-workspace-files": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-workspace-files/-/dsh-api-workspace-files-0.2.2-alpha.2.tgz", + "integrity": "sha512-yyEyOAI+1H+IROx0f+1VsUxBBuUV+jOn2vMntxH5asEDdxp80sjJwgOmbVcOE4LLT5IifgqjqKhNQfeFAyWl3w==", "dev": true, "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/dsh-deque": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-client-ui-sidebar": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.1.1-rc.2.tgz", - "integrity": "sha512-UCilyaNPwMO54JYtpCW5leLL+ecwtoRd4sHNVNG94aPQAqZOrqH+hqrBBsuolDJ9d0cKG9K5Mtew0fPz/hByZA==", + "node_modules/@deepseek-ai/dsh-app-boot": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-app-boot/-/dsh-app-boot-0.2.2-alpha.2.tgz", + "integrity": "sha512-GyQFybO4zW5M7n4PRFduRkqSX/T4RTPf5g6a73CKjxw/sl1w+VTSVwPvTMHWjnRgnc4wjQZ4TaS/1XPJ9gD6NQ==", "dev": true, "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/dsh-atomic-write": "0.2.2-alpha.2", + "@deepseek-ai/dsh-official-bundles": "0.2.2-alpha.2", + "@deepseek-ai/dsh-package-manifest": "0.2.2-alpha.2", + "@eslint-community/regexpp": "^4.12.2", + "ajv": "^8.20.0", + "js-yaml": "^4.3.2", + "node-addon-require-builtin": "^0.1.9", + "resolve.exports": "^2.0.3", + "semver": "^7.8.5" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-layout": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-group": "~1.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-include": "~1.0.11-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-home-paths": "0.2.2-alpha.2", + "@deepseek-ai/dsh-launch-environment": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-client-ui-slots": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-slots/-/dsh-client-ui-slots-0.1.1-rc.2.tgz", - "integrity": "sha512-6uBi+Wq+dH1Q8RaJpbK66TjzPlkcSNDWvNZgQXw45RRQCi1gnm/gxFOyJcSQvgqk4pvm2/h/aIvaM/Pa5PRFCA==", + "node_modules/@deepseek-ai/dsh-atomic-write": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.2.2-alpha.2.tgz", + "integrity": "sha512-HbWIFGHYO1FMa60iXJiaLC0Lg9yr4pm3g+9kfaJ1kmZk2fOZyVRyn09xvC3j9zVczQXHx4zmPGgbRoRxyZV1Ug==", "dev": true, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-client-ui-theme": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.1-rc.2.tgz", - "integrity": "sha512-gRKI92D+EZtOy7UBkRfNvyL4e/3HikZ7exQSfgGpLEJ278/aXMvStNbL5ZgWVC41+MSZsBUk3dZAfbXNjelz2g==", + "node_modules/@deepseek-ai/dsh-attachment": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.2.2-alpha.2.tgz", + "integrity": "sha512-fl0hnNBtHHYpxN+X0WnR/+aGFq0tOWDQMImyDhJX4CA60OIlgReSPAn+VPrHtKkqK3h5t/4g2yMcsukX/0kehg==", "dev": true, "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "clsx": "^2.0.0" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-code-runtime": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.1-rc.2.tgz", - "integrity": "sha512-SgFresqH5UABzRQZ7tOfqzOLMHF7089VeH+mfcwNQH5peOavgEKrAGOYz/9RnISH0XmMrj/x177t8gfO8Uvo/w==", + "node_modules/@deepseek-ai/dsh-brand": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.2.2-alpha.2.tgz", + "integrity": "sha512-VFHjxHZbfQRjaQHC9fO6oSeCZcHQeA54nThij/WB2Q6Qv8VBdJkitbVzYNLr54gmVDxQXfdK/yYJzHAQade6lg==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-commands": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.1-rc.2.tgz", - "integrity": "sha512-BOIe4Sht9rmMv1a6b3GWjWBbeWr7PtHlAy41vgpaymvUUuzOapOIA648ZMGCI/crRIt72Umev2FHtSwCNSbYZg==", + "node_modules/@deepseek-ai/dsh-chunked-list": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-chunked-list/-/dsh-chunked-list-0.2.2-alpha.2.tgz", + "integrity": "sha512-b1mtmylbH9V1VrbUMFRQFoiSZIlB4DETouFVGntc5PJ68lTr1fzmC3ACziUR+eBs5lX10oiq6FluOZJY7Ww8mQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-attachment": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-compaction": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.1-rc.2.tgz", - "integrity": "sha512-LV5GAIx7GO8DCRivnN2bmLmuucsYDG+ifG18BaXBqsVKdrzmaIu5o+CBxQAI2bX1N6mfBenLxmvCnROkyumLTg==", + "node_modules/@deepseek-ai/dsh-client-connection": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.2.2-alpha.2.tgz", + "integrity": "sha512-FRazdhNDkp2j3jiykqMouOJlv26wg+BEMNOTw/Ex3QO0BHeTv0GKeo8uwVXZQZoA/kIsmUP8zRf75ZfbEeGaiA==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-credentials": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-commands": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-cordis-host-runner": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.1.1-rc.2.tgz", - "integrity": "sha512-+AQGegPy+gdtcjTTPxDDYwAFUn6BB1J/MFFbmpPr+WIqJoDyVsuCDe8Rr8mCJmxs12CmTZXXSOE03LW203W8fA==", + "node_modules/@deepseek-ai/dsh-client-file-upload": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-file-upload/-/dsh-client-file-upload-0.2.2-alpha.2.tgz", + "integrity": "sha512-eGfzr6IOsQwz9qTlPos6U33+J18J4+sruchW+Ff4Y/YQcIYHVkS+wYLrpp9N4boda2QpOix8bqGCuxluQUszuQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-tools": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-credentials": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.1-rc.2.tgz", - "integrity": "sha512-aeVBaH07rox7NuSNbSqbz8g0eNb2IIhNbrZngj/VxUsr/TR9TXOq7lm1CL6SBUDlstGw3vNWeXyhim/DmA5iSQ==", + "node_modules/@deepseek-ai/dsh-client-locale": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.2.2-alpha.2.tgz", + "integrity": "sha512-BsRQyLBnNbq6npmxyKWx3PyyaaddJygdDegJyQGGzgOpl6RjklWM2GcP80QMdOURjLbyxmrMuK2iukgSD+3Pog==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-file-reference": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-file-reference/-/dsh-file-reference-0.1.1-rc.2.tgz", - "integrity": "sha512-8Pd4SNHhV6OlbwfV5K4qmFb709I0Z68qgaUQJ7zM4BTjClNe1/dktQnETtWPfqbPTx/2sNKXM1rz4WXuROrIfQ==", + "node_modules/@deepseek-ai/dsh-client-product-analytics": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-product-analytics/-/dsh-client-product-analytics-0.2.2-alpha.2.tgz", + "integrity": "sha512-epjzLORSEXnSejcRnMu7V1eHZ/OZBnbakrKw+GyshvL9zIew9YXme5i6qf4+SxBgQVrLco7lwdWoxZm5E35mVg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-goal": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal/-/dsh-goal-0.1.1-rc.2.tgz", - "integrity": "sha512-lSHTh4vfS6eRb9to/y+bjRf2+0QkNpY3tHJ29HMTewR9fJYZsEVVu4Hc+GPhPEjF7RpiD35/sKx+akijtDasyg==", + "node_modules/@deepseek-ai/dsh-client-shortcuts": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-shortcuts/-/dsh-client-shortcuts-0.2.2-alpha.2.tgz", + "integrity": "sha512-Uq3gPJIlryEoKinbnzXTc3Q5tD4Yk+cZpoDU8zHpgLvJ3G3mb78GaWzcP6b6e4Wb/BNu2ZVJ7+ULe0/z6AJt0A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/dsh-util-crypto": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-home-paths": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.1-rc.2.tgz", - "integrity": "sha512-lGsP7sbnu20AiRAb+gxYiKx9oa9r1D/8Fr6BwWHXpaPx6ZE4Qg0+ybh5SZVfGQ+XhLcQisu3nwWemEjtTJGiig==", + "node_modules/@deepseek-ai/dsh-client-store": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-store/-/dsh-client-store-0.2.2-alpha.2.tgz", + "integrity": "sha512-vGeI3ewFYtO3tUUmT0nd8SmcuDuMSJkj3G5MS1ovZRLgowMzqtUqii0GsYmOKLe6R/edIYdhvdVU6sahCZ2JXA==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-host-apiproxy": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-apiproxy/-/dsh-host-apiproxy-0.1.1-rc.2.tgz", - "integrity": "sha512-dplRnGGXXsQYFQ1KMHymAM0iaxuE9Z153JHYcGEgOwXNkS3HA20gSi3yMt6fz+zi/cMHYXvY1JQhS54BTc761A==", + "node_modules/@deepseek-ai/dsh-client-ui-conversation": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-conversation/-/dsh-client-ui-conversation-0.2.2-alpha.2.tgz", + "integrity": "sha512-EbQDWf1ASJ3cBlU1s+kb+Uk7vv5J+9U6EjA5/t87pEUbd/sZZmGeo5UjGa8vO52a9R1GQxLQrsuG+VsrqnWgfw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-agent-default-model": "^0.1.1-rc.2", - "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2", - "@deepseek-ai/dsh-attachment": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-commands": "^0.1.1-rc.2", - "@deepseek-ai/dsh-credentials": "^0.1.1-rc.2", - "@deepseek-ai/dsh-goal": "^0.1.1-rc.2", - "@deepseek-ai/dsh-host-directory-picker": "^0.1.1-rc.2", - "@deepseek-ai/dsh-jobs": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-native-command": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-query": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-title": "^0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "^0.1.1-rc.2", - "@deepseek-ai/dsh-skill": "^0.1.1-rc.2", - "@deepseek-ai/dsh-subagent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-tools": "^0.1.1-rc.2", - "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.2", - "@deepseek-ai/dsh-user-questions": "^0.1.1-rc.2", - "@deepseek-ai/dsh-workspace": "^0.1.1-rc.2", - "@deepseek-ai/schemastery": "^3.18.1", - "fflate": "^0.8.2", - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.2", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-host-directory-picker": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.1.1-rc.2.tgz", - "integrity": "sha512-m3puwS+bvJQ1eASdpEEwlQqKa9znhBSgtoSSI0GZN5VMynZVl7E31HMltENz3QC2Nd+C3bh7vNjrJFtumUDsLQ==", + "node_modules/@deepseek-ai/dsh-client-ui-layout": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.2.2-alpha.2.tgz", + "integrity": "sha512-Dpi64wlOe1Dpz2Mr0QplpFkT0A58XWARyEOwD38FQ4AdsVJFNxnP6QQQN9itOfTwtQjQNoRD4UFNxfwhcEIEVA==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-host-plugin-inventory": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.1.1-rc.2.tgz", - "integrity": "sha512-Hud9ezW0bexWfhX7C+c5rdUDX1xzbEGDzj1lGQyj/QxdrxHYHjGrJq3tLRyvN6K4FSmEdG2IBKdQGCOLVrIthA==", + "node_modules/@deepseek-ai/dsh-client-ui-plugin-manager": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-plugin-manager/-/dsh-client-ui-plugin-manager-0.2.2-alpha.2.tgz", + "integrity": "sha512-Znf2d50YRywaGc/3DfG406tHnut4L2nDpE5faNfvx9u/APrvlD9djycDG1jGLxTMmZkuUeV+2I8tKPWBJhhLyQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-host-webserver": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.1.1-rc.2.tgz", - "integrity": "sha512-t9MrjC65QHiiWhG9V8UZxgfE/aWYhJHHrIM0kbTvtXxg4tLGIKo/upHp7iiag65F3HTkVLrH/DUyPMi4v2ZA7g==", + "node_modules/@deepseek-ai/dsh-client-ui-primitives": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-primitives/-/dsh-client-ui-primitives-0.2.2-alpha.2.tgz", + "integrity": "sha512-hjf2/KLaAUxDrAhdnr2QQj6TZKFNi/O2UUqrZtRCBxwFfcRzRPBiXq9ayK4qFxllDDL0ZnjvDoqTUMd86ipCKQ==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-invariants": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.1-rc.2.tgz", - "integrity": "sha512-l+1Om/EDFyMjhgSuEx2WDLLA2fia/+ga9mBTCoT/MMslsnWaK5G0/lWwbwlTBSaJ6OfmYc3DuBgox8DbgIGHRQ==", + "node_modules/@deepseek-ai/dsh-client-ui-renderer": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-renderer/-/dsh-client-ui-renderer-0.2.2-alpha.2.tgz", + "integrity": "sha512-aEqbZxnzudASF7C2mK6a6uNkDoSpfHYwJPNnYfOBqYCjHxVf/o7kHbt2F5AWkeHiqlcFc5W0JCs3Qg4m2oIiJg==", "dev": true, "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-jobs": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.1-rc.2.tgz", - "integrity": "sha512-SXvDJMvcUrGrlzIyE7j8/lI4Pj1nDe/UOR8C05Zagp+/0R8p46n6KylySvZdPAFENV5t8WX3Fw3eOaS4No0+wQ==", + "node_modules/@deepseek-ai/dsh-client-ui-session": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-session/-/dsh-client-ui-session-0.2.2-alpha.2.tgz", + "integrity": "sha512-IRz9khJrVIy5VwZz7yZDioJ1f59rp+w0FQuGXbHNMUuI8Hz1B0T0TFyLxSRXHQ5makFfuVshkmel4Rqrq7pgAw==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-llm": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.1-rc.2.tgz", - "integrity": "sha512-ASJfjIdZbIXvLwi3rGo+eZb/GxMVV/WO5/XVD3B96mT8EIzrlw3+nMR6/CvmJVzcycKQ2XN0wj7jD6TasPRySA==", + "node_modules/@deepseek-ai/dsh-client-ui-settings": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.2.2-alpha.2.tgz", + "integrity": "sha512-tJ3OKD2gwVzvgztrC9INFa12uXZOAJ84yDnnVYPH0oxrs38r//kAPLGL2LfCObuYu85CdU+al/ohJ+h530YkMw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-timeout": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-llm-retry": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-retry/-/dsh-llm-retry-0.1.1-rc.2.tgz", - "integrity": "sha512-a13Fpmn8HFy8LCjl6gljaNPxcVjO/R+/uMPDl0QLjwQcHWVyGW38ZA8jP5iRuFgdyNNXpyxLWuZXi/0VOH00tA==", + "node_modules/@deepseek-ai/dsh-client-ui-settings-plugins": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.2.2-alpha.2.tgz", + "integrity": "sha512-IP3pbtkxAgqAR/PPiDGMpimt9iLjyGjwqcMb37HlHJKVk4vNVrRBpCT07+5ghrXC+kDxa/BM+v8CqBhZcejuUg==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-timeout": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-message-feedback": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.1-rc.2.tgz", - "integrity": "sha512-GzxDiNvyUVs/bbbm+Hr3MfuU3wM8ErRF5z9XadnSGPYZvipZDAMrvrS5v6JgOUaZt6ApBpEMJ4xVgIel1VnGYQ==", + "node_modules/@deepseek-ai/dsh-client-ui-sidebar": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.2.2-alpha.2.tgz", + "integrity": "sha512-gtb8rkbMZijfCfvYZRSOunxjxhBf+QrGJUifq7hQREbfpLAhYG/d/LPyMKWY8vjmpTkVomg86fnBvqS39TEw2A==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-native-command": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.1.1-rc.2.tgz", - "integrity": "sha512-GIknPrwU7vZOUQ2o/ES7Z0uUhUrZGp/yigKP+RXEu41VI9tcybiXQAA8CEdDFmNQ11R2wfYQhr3WO5vy35akWg==", + "node_modules/@deepseek-ai/dsh-client-ui-slots": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-slots/-/dsh-client-ui-slots-0.2.2-alpha.2.tgz", + "integrity": "sha512-OOl2LZXuoR2hXr4WHdl8dFnp2eONepBaphhnQLYSd+EAvtOKoh2xA7Uj1NvESgyYAzRzkYgJEzbNl6an/K47hQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-output-retention": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.1.1-rc.2.tgz", - "integrity": "sha512-tCni+bTEp/FWokfz3fqn4p6SzHn6pkY6H3HkS9UY5PHrztUE1ESUQUp41kIVtwUhRmJU7yissqjxe6kLDB6t2Q==", + "node_modules/@deepseek-ai/dsh-client-ui-theme": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.2.2-alpha.2.tgz", + "integrity": "sha512-YC4gr3nDvR9zLJ251RZOvX4zFAvDkcbbtIuVrnxEyqdMOuT4j0NRIl0ey7TGxoVJB0jFV2JP3TqUZDdF9RewBw==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-scope": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.1-rc.2.tgz", - "integrity": "sha512-Xy3ejL6dwVSluZL7XOWy76ya4pCw1uHwxodDK4O9XiQUiUV4FBXnt0aNJUtMeAFN0c1YujxxCmRniMvuuNn1Nw==", + "node_modules/@deepseek-ai/dsh-client-ui-trajectory": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-trajectory/-/dsh-client-ui-trajectory-0.2.2-alpha.2.tgz", + "integrity": "sha512-4TzJdQ9yYGcKZaKjzEeT4gJvjk83vIxxQj+9Ul5kvWficgiYQRsVxSWC0/ZhdETaN+iCSCLddxLOQZ4gIJO9oQ==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-session": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.1-rc.2.tgz", - "integrity": "sha512-4/cv6X9HPhm47eyRhCu/WZwzrtJKegk5J+0xaxcZ9i8S0smdxP57tqy8a0jkSshLQn7BzMFxneQrlYExrLrDhQ==", + "node_modules/@deepseek-ai/dsh-client-ui-workspace": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workspace/-/dsh-client-ui-workspace-0.2.2-alpha.2.tgz", + "integrity": "sha512-pxgHISg0wp+ZnLvtRj/SGyKxZxpoGUpQqqpp6qof3y/yUFQBqEU9KLNn9xEwG4SMcobQPW6tZO9gvI0yyHgbGw==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-session-persistence": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.1-rc.2.tgz", - "integrity": "sha512-dxdYxRfmK5jWtiFFabqRNb/jGGjkXyF2djI7O8IIKmDVjhQiv170zpvhbAhRUuqClEdseCtbQpLBrRm2blzt3g==", + "node_modules/@deepseek-ai/dsh-command-feedback": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-feedback/-/dsh-command-feedback-0.2.2-alpha.2.tgz", + "integrity": "sha512-4NAp6oQGawuxMk1qQ/xZqiV1OG/WQFlwHPIVAhNCoLtARVwJ6jOMNWh9UKbVqRdFM5sfa5tp/qz46wbFiP1bfw==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "zod": "4.4.3" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-timeout": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-anonymous-user-id": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-session-projection": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.1-rc.2.tgz", - "integrity": "sha512-SNaOrjRS4RMXocna6uL33TeS/uhcQ7jDJtJZ1HyDPL06mXUdAgje2MVt8OZCh6dH95xIiqpQQm+KjzeiQnhYSQ==", + "node_modules/@deepseek-ai/dsh-commands": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.2.2-alpha.2.tgz", + "integrity": "sha512-342a/wwaS5QqZqRsl3QGM/WCPIWeYfNBY0lTwrMZs0B+TQOKhPmo34665YeK29CRy7BPnYoG/PQWN2XdT2iLxw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/dsh-util-crypto": "0.2.2-alpha.2", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-attachment": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-compaction": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.2.2-alpha.2.tgz", + "integrity": "sha512-g1dl/75jkyp/ob1RYwwupNeIacZ17d/jVRqovDLjAQbKxHykeeOSkVGhEQzzEgwEFpvGiSHbZ0hmKwGqHA7RzQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-session-projection-cache": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection-cache/-/dsh-session-projection-cache-0.1.1-rc.2.tgz", - "integrity": "sha512-UvCRpIb+LoQI/nCLof17xc2P2KuZoucU3VuzfAukfsF3dYZAy5OP7jrCRdVZIvjRfvFUd7G+awdS9sWbnjcolg==", + "node_modules/@deepseek-ai/dsh-compaction-image-offload": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-image-offload/-/dsh-compaction-image-offload-0.2.2-alpha.2.tgz", + "integrity": "sha512-z3A0fZsjRSE33YuNNdqK3VW7/CeTG4q/NMDstX7BxXkqq++V84HGIBWZTnAhTfsv8tDwA+B3IilntwddO1NTPA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-compaction": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-session-query": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.1.1-rc.2.tgz", - "integrity": "sha512-QxQFRg/KnrZnYiO7fNtTJVTakuGs9ZFRkGGgYuNPzSz1pRqiohGNE/JZzBtq+HMv38RRTRZrM4aIOUV8OgqoXQ==", + "node_modules/@deepseek-ai/dsh-config-editor": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-config-editor/-/dsh-config-editor-0.2.2-alpha.2.tgz", + "integrity": "sha512-15xhR6IlrQ4BT1N+oT639zPj9QCepsPUOMA+KHmYlOoSs84qYEeI3Uj/UcNFQ6P5L9DJTzfy0BtN7cXeUoo7lg==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@deepseek-ai/dsh-atomic-write": "0.2.2-alpha.2", + "js-yaml": "^4.3.2", + "yaml": "^2.8.1" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-title": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-include": "~1.0.11-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2", + "@deepseek-ai/dsh-hmr": "0.2.2-alpha.2" }, "peerDependenciesMeta": { - "@deepseek-ai/dsh-session-persistence": { + "@deepseek-ai/dsh-hmr": { "optional": true } } }, - "node_modules/@deepseek-ai/dsh-session-reference": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.1.1-rc.2.tgz", - "integrity": "sha512-c9mz19ndxjVxSnXEhmJwGDjyKG4oNmu4Sfneix8OUJ+mAr3jIgb/QZZ8rYEc8Bi+Dd1z7Wr90IeWOBF0nolU3A==", + "node_modules/@deepseek-ai/dsh-cordis-host-runner": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.2.2-alpha.2.tgz", + "integrity": "sha512-hQ+M8uPj3e/F1wiKaf79PekYBx5KhOULvOo5As/J5h+lcdNeXfxzlRPFnBVURXYQURqB8TGdE+P2NNQMV2+Z1w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-compaction": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-output-retention": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-query": "^0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-session-title": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.1.1-rc.2.tgz", - "integrity": "sha512-qHv+9nE6J/piHsWwckmbJBS1sJjunCWsv00arhsgjW1XMLCHxG6QOB+U48P4EBZjve798Tz8AQIlWZy+9T8XmA==", + "node_modules/@deepseek-ai/dsh-credentials": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.2.2-alpha.2.tgz", + "integrity": "sha512-2CBJncX9FvDNfXQOkaA4p/FoliK/6clNzsfQ9oB73f4s9d5NWYC2EARY8iB4BBn8KMtz6XDRC5d9vnDjIhtY5Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-settings": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.1-rc.2.tgz", - "integrity": "sha512-iGdKEt91Im3gE7xA9CzRfTJsPcFcxDeDOCLhAjzbpjEv7TAjx/EoYP7lPtiy+QmOjKSKy206SEtAKol9PXWbOw==", + "node_modules/@deepseek-ai/dsh-deepseek-account": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-deepseek-account/-/dsh-deepseek-account-0.2.2-alpha.2.tgz", + "integrity": "sha512-BrGqyT93u8xABjSkaHx68MwFcs/NHa/WVOQ2XzG/HzRSBcD72/eUd44epF2xXHMdRUObG0CEGS641rdNOG78bg==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-agent": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-skill": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.1-rc.2.tgz", - "integrity": "sha512-FACjlOqdsWX+0RtSs3RWrdY0QQEpPJrBfvxUbWSh7E8UyCM8dKdIbsQnuXIjsAgC7GgYp7lyFDSCMovQ3ARp8g==", + "node_modules/@deepseek-ai/dsh-deque": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-deque/-/dsh-deque-0.2.2-alpha.2.tgz", + "integrity": "sha512-NAEPdkznqy+i3s9tWaWB2krOTf/ac8LsNkUc6vISk00JkM4PL7onHut0VfiT8wNpqnVp8jVsFIC5AVFzpK2zVA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-storage": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage/-/dsh-storage-0.1.1-rc.2.tgz", - "integrity": "sha512-ptJ1ss8spF+Y2VXjsMV37Qh1+hviYWZylDvXtfEBXjLbPi/BP3dktT4B6OMIAD1rRN+0A4HdTqJBgLk7Gp1rig==", + "node_modules/@deepseek-ai/dsh-file-reference": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-file-reference/-/dsh-file-reference-0.2.2-alpha.2.tgz", + "integrity": "sha512-PaOshyp4OA4beOWSTFSb+85P/nFPG4xvwALucl98TRZjycNLsihotJi7rt6/LfrIwtiGRrqd/tS2FiSEyHtkuQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-storage-domain": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.1.1-rc.2.tgz", - "integrity": "sha512-9/3OuaZpxf9NZWhrARpgZ7UBa03pPaTIiDBw+SfESfwVk42NNLVCQgvnEbrWoNwdtzmv0aYCEV23sKwwlQ0LBA==", + "node_modules/@deepseek-ai/dsh-fs": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.2.2-alpha.2.tgz", + "integrity": "sha512-tKUWRUxlpBrFJT0eGRVUPCJDALizVyHwhT+a+otBnTOYZXjeqYI2uLzp3mqZn2n5uRg3f5ctA9mDOr+klRGS4A==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-storage": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-subagent": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.1.1-rc.2.tgz", - "integrity": "sha512-CNa0WuFCR69TMnBKYQInz49/olDSaVHiYkDTyTuDh7YW7Y80/f/HjQe5G0fQaqZMLla3IUSXCIPl5EssWmjcQw==", + "node_modules/@deepseek-ai/dsh-goal": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal/-/dsh-goal-0.2.2-alpha.2.tgz", + "integrity": "sha512-Z94O0czxrmXqckUTUOPuN9j4WbO+9T1umkKEi9u1dErG3D5EeIU4xkc/XcjPGFoUSUZ90Bl1wIxb40WnLoupDQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-jobs": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.2", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.1-rc.2", - "@deepseek-ai/dsh-tools": "^0.1.1-rc.2", - "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.2" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-agent-presets": { - "optional": true - }, - "@deepseek-ai/dsh-jobs": { - "optional": true - }, - "@deepseek-ai/dsh-sandbox": { - "optional": true - }, - "@deepseek-ai/dsh-sandbox-policy": { - "optional": true - }, - "@deepseek-ai/dsh-session-persistence": { - "optional": true - }, - "@deepseek-ai/dsh-session-projection": { - "optional": true - }, - "@deepseek-ai/dsh-session-projection-cache": { - "optional": true - }, - "@deepseek-ai/dsh-user-approval": { - "optional": true - } + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@deepseek-ai/dsh-system-prompt": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.1-rc.2.tgz", - "integrity": "sha512-on4hjAlYI5uX9q7Sf95YkMMBVe6heywtA/H50ksrIMUub8U2B98hO9iQpHhjwIO1F1vu+5pLcPvRr6yUGGmtXQ==", + "node_modules/@deepseek-ai/dsh-home-paths": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.2.2-alpha.2.tgz", + "integrity": "sha512-Csxrpp2CFmdPWG3UYGsrGmE11GYpo/iuQuPHg/8ydPfykvhjC4F3BM6WSmYlrBrSE9SKEXVNyY32E2Ec3dHklg==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-timeout": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.1-rc.2.tgz", - "integrity": "sha512-RrouVgU3G5gXr9zHhpThkMG6YKdcRJzXXdPm1dq3ioBxbvxlfMSfNY4tN8lWMJxLyGtvWkPra0HQX+YWxvdOOA==", + "node_modules/@deepseek-ai/dsh-host-directory-picker": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.2.2-alpha.2.tgz", + "integrity": "sha512-mfBRpjoPHntENP/sIzNL6GiOzV2eYAYi9l2a5UKPJkyVN+bX8RypLg23lDgDHgpUV7BQBPsMdYnbPKx14dnCmg==", "dev": true, "license": "MIT", "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-tools": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.1-rc.2.tgz", - "integrity": "sha512-0GGL4D55MwYDepzZMOI3L0ycu5b2qr96GL0Y7snwhAnpK2Di61rbX3fJE+PB3ZrovGX0csIRdt9n3iJZDVtDrw==", + "node_modules/@deepseek-ai/dsh-host-plugin-inventory": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.2.2-alpha.2.tgz", + "integrity": "sha512-W5EXgxL3GoEQvJTiQdBluQqdMB/FmXvR6v1SlY6Ecf67b+PRYscnW7d4G8updtdb8fsuVmtxpEySisk6bIVCxg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-code-runtime": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2", - "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.2" - } + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-agent-preset-registry": { + "optional": true + } + } }, - "node_modules/@deepseek-ai/dsh-typert-protocol": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.1-rc.2.tgz", - "integrity": "sha512-lxBssDc5Pz1qBE5kuIyaArA7AvIPq9rpaVclylodiSzVJe95e2xruBg73tflyjtd8y00toet+DLgQ6tSSsq6Kw==", + "node_modules/@deepseek-ai/dsh-host-webserver": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.2.2-alpha.2.tgz", + "integrity": "sha512-RYRAkfXjxgjDreg1WN1sHUI8Nvkl/3NAUfFueUW7LpOVFcBLjs1pLEAGOXmC31+oGJtl69MiM99qD+3IvK4LZA==", "dev": true, "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "compression": "^1.8.1", + "ipaddr.js": "^2.5.0", + "negotiator": "^1.1.0" + }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-typert-registry": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.1.1-rc.2.tgz", - "integrity": "sha512-ATZu3i7UId+ktsWW3pUFm5Hi1fVsRXFmByATVPp2RlxH1zjxXnauVW6k70ZwU/4FOsphRzo65SXOlAXA+natYg==", + "node_modules/@deepseek-ai/dsh-http-proxy": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-http-proxy/-/dsh-http-proxy-0.2.2-alpha.2.tgz", + "integrity": "sha512-u+tO+aEtoKPWzdjmCxWiTRvw7C/HO3Fwfc+oJDUvNpEjgBLJ7TBKV16upxAo05A03zYQRhpqJhpgaAav/Rhg3w==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2", - "zod": "^4.4.3" + "undici": "8.11.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-user-approval": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.1-rc.2.tgz", - "integrity": "sha512-SdsO4Rs+NeJFoertkVilXBACREOLfkKPJJznYKqDhJxeRo38RJ56dtj0Xd0/6rERmsQiMck4Bwdrzg1ubUqPNA==", + "node_modules/@deepseek-ai/dsh-launch-environment": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.2.2-alpha.2.tgz", + "integrity": "sha512-T6LWWiZyirehZ4UrNTJPYEdtXcQWF5EMhx6hwFhI7/RTuVIY3mgKhq42fyIQrB5x5s5J83MdVfCeoGqQgcPVYA==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2", - "@deepseek-ai/dsh-scope": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-user-questions": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.1.1-rc.2.tgz", - "integrity": "sha512-9lYoB7qCFE+Vvgwjny3MnRfS7QUefOspj4KpE3b30DAAJfxwrU4hRtLCHOKxyurF01qrkoEBBpXn4H5ilXYTKg==", + "node_modules/@deepseek-ai/dsh-lazy-require": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-lazy-require/-/dsh-lazy-require-0.2.2-alpha.2.tgz", + "integrity": "sha512-x7ubwhKH5L4WuyiuFT+ZzQnfH0EXzOvewwW5oRjgz4MjAU08jjHI68vHCVZZCtYNQCL9QbK8e6zVVUzHgXYvqw==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-llm": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/dsh-workspace": { - "version": "0.1.1-rc.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.1.1-rc.2.tgz", - "integrity": "sha512-jBUob4H5TZAiExq9YNVCglKAFmAKMtd1UbyqFfnZZ1Owm+3c3NbAXY947MHiD6NwCwFEW1y7FjrFj66UQvG90A==", + "node_modules/@deepseek-ai/dsh-llm": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.2.2-alpha.2.tgz", + "integrity": "sha512-AwlZx8DW4e0xg/xB/YzvORSHKKQWMyhJgFXT4J9+5QV3x3BI2M35kHxRD4LoBQ2wRO1tImgaCgA4tH1haMw6IQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-crypto": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session": "^0.1.1-rc.2", - "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.2", - "@deepseek-ai/dsh-storage": "^0.1.1-rc.2", - "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.2" + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@deepseek-ai/schemastery": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/schemastery/-/schemastery-3.18.1.tgz", - "integrity": "sha512-Qn0FCSwCQnpnj6SB31I6i2sIKgKWnkbJM8O0EU91Gv2UsYVvtZTl6IA0sCwk2e2MZf5S8w5hpq9QkeVvK9qwxg==", - "inBundle": true, + "node_modules/@deepseek-ai/dsh-message-feedback": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.2.2-alpha.2.tgz", + "integrity": "sha512-uEL1pPAcvjOAeBjYhb6ohAJM3eOaPxMuzB5PrX03RSSBt8/+DoBKKPBsElcRdFh/Fj7KTsA6QfYO60tMlRMM0g==", + "dev": true, "license": "MIT", "dependencies": { - "@deepseek-ai/cosmokit": "^1.8.2", - "@standard-schema/spec": "^1.1.0" + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-command-feedback": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", - "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@deepseek-ai/dsh-native-command": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.2.2-alpha.2.tgz", + "integrity": "sha512-7jHBQEZtHZ/IpePxlA2KQo9pQyi861H7XbSywJRO6JQ8IOqMZmOaDSHt+8cdCXk/GKDxACz7k+IHQAgS0iklrw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", - "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", - "cpu": [ - "arm" - ], + "node_modules/@deepseek-ai/dsh-office-to-pdf": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-office-to-pdf/-/dsh-office-to-pdf-0.2.2-alpha.2.tgz", + "integrity": "sha512-ljvzZMwpX8TRQnc0U/7Q2w/5U9t73tF8TpNw9SVcDL0sJ06LdyVo1pFVn4JNN+iBYhJ2/VMRsgr3PQnhMYEdtg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/libreoffice-kit": "^0.1.5", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", - "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-official-bundles": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-official-bundles/-/dsh-official-bundles-0.2.2-alpha.2.tgz", + "integrity": "sha512-1ZzPosfWZqq3gjySzmHCV4msx8znD1JmZx1Xc9nHFCqkimRFfLsiA2VdvZXgXenlfmamBg2y+HXPCRmhoEtmRg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-package-manifest": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", - "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-output-retention": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.2.2-alpha.2.tgz", + "integrity": "sha512-KVg52DOp2ajDdMGZDaEUooLONfSHc8jUGyG/H2kYj1/vl3lD5BXHocNTXO3RAROfitXR9IYnS2rD7q7TRUiygw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", - "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-package-manifest": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-package-manifest/-/dsh-package-manifest-0.2.2-alpha.2.tgz", + "integrity": "sha512-3+FJWR/YptEzUAYPjNJb9P90xX6+MPMT3KmHtQScNuJNi+6gWLw2b/0/xjHGfG11hZyIB9AqSgY1dUIb25x6mA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", - "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-permission-presets": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-permission-presets/-/dsh-permission-presets-0.2.2-alpha.2.tgz", + "integrity": "sha512-WNoCifSMSBoLMP4PKChGUM3zmelLPURLMbzLuT2kp+X8q6ZRdSFbvD9oZ5BEeFMZbudVehgP00J378uScT336Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox-policy": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-shell": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-approval": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", - "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-plugin-detail": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plugin-detail/-/dsh-plugin-detail-0.2.2-alpha.2.tgz", + "integrity": "sha512-ueiDl/jwznp4Tk7qS8izSO9H14bGAHPMZ5ctK9NLcxdkpy+8s1352VvMF8zhbhL4PMTYOeKiJl6wv+P1yMDIIg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", - "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-plugin-manager": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plugin-manager/-/dsh-plugin-manager-0.2.2-alpha.2.tgz", + "integrity": "sha512-ImHMhwoCmfr7DMoEHx96qNJ7+QnAZSCIp3x9J8asRQH5d6+FmBo9bS7WyA36VPP6gNvDT4gNi7n7ZrP/RuCgUg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2", + "@deepseek-ai/dsh-atomic-write": "0.2.2-alpha.2", + "@deepseek-ai/dsh-official-bundles": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-detail": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "execa": "^10.0.1", + "hosted-git-info": "^9.0.3", + "semver": "^7.8.5", + "yaml": "^2.9.0", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-hmr": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-plugin-inventory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox-policy": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-approval": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-hmr": { + "optional": true + }, + "@deepseek-ai/dsh-user-approval": { + "optional": true + } } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", - "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", - "cpu": [ - "arm" - ], + "node_modules/@deepseek-ai/dsh-plugin-market": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plugin-market/-/dsh-plugin-market-0.2.2-alpha.2.tgz", + "integrity": "sha512-PnXMMYWzAK3vwf+GVDFwM0/F+fF4/Sc0Bis72ZG7q/eYos/PMfnrV7j/YF2l9/tE0lPQeE3WB35JOLPGB8u+wg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-app-boot": "0.2.2-alpha.2", + "@deepseek-ai/dsh-atomic-write": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-package-manifest": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-detail": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-market-index": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "execa": "^10.0.1", + "hosted-git-info": "^9.0.3", + "minisearch": "^7.2.0", + "semver": "^7.8.5", + "zod": "^4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/dsh-plugin-manager": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-settings": { + "optional": true + } } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", - "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-plugin-market-index": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plugin-market-index/-/dsh-plugin-market-index-0.2.2-alpha.2.tgz", + "integrity": "sha512-tHV3qjDDzi7kG2P2YevqI43B3MUNfkTrNfHwd+l8Ei5YIcb+bSRH5kdAXJsEj/0QZOpewPfYQTAyLvwoApkYAA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-package-manifest": "0.2.2-alpha.2", + "semver": "^7.8.5" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", - "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", - "cpu": [ - "ia32" - ], + "node_modules/@deepseek-ai/dsh-sandbox": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.2.2-alpha.2.tgz", + "integrity": "sha512-GXgvCmabIQlnk55kn2Hs4eHGf9o2Nh62VumASxJ3AeYtHq6dE/cr15BvJXG5HqAQy0ZH++gby4fnkTSRiKEfTg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", - "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", - "cpu": [ - "loong64" - ], + "node_modules/@deepseek-ai/dsh-sandbox-policy": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.2.2-alpha.2.tgz", + "integrity": "sha512-R7cwz/S6n1cWJYJvEgo+u3xRGBFeoLn0YopF/1uytftjKBuPslila3UtesPzussPT3kYWiWMGGvzrdJeTtPuWw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", - "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", - "cpu": [ - "mips64el" - ], + "node_modules/@deepseek-ai/dsh-schedule": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-schedule/-/dsh-schedule-0.2.2-alpha.2.tgz", + "integrity": "sha512-Ai44565k7u48YIdGYj4veTm3XCHBw4Zk6K2lDI7RHdgRv6yjJF812lXaXEJ93slkB24BpAD3e7nKoPRWqOGZ+Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "@js-temporal/polyfill": "0.5.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-session-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-storage-domain": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subagent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-time": "0.2.2-alpha.2", + "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", - "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@deepseek-ai/dsh-scope": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.2.2-alpha.2.tgz", + "integrity": "sha512-BiniiKjbLL7bRzzqCcq2ldVqi6ZnFKOTWhCvooyl/r2CDhstZfV6x2Z1hxSe4z/Gi5Vk7/sRjpPrO30bGBEYfw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", - "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", - "cpu": [ - "riscv64" - ], + "node_modules/@deepseek-ai/dsh-session": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.2.2-alpha.2.tgz", + "integrity": "sha512-EvZBQIcxQCdz1gdUCgbUJMqTXSGQlnQpCYnogkNHyiuya7JWL8ye8ieqLBHRtqWarjSWxJWFtfHuun8EL81+jA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", - "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", - "cpu": [ - "s390x" - ], + "node_modules/@deepseek-ai/dsh-session-format": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format/-/dsh-session-format-0.2.2-alpha.2.tgz", + "integrity": "sha512-FrWdmAzGOxBvhv4udF2EyBkwduOBhdQuz0DmMXBVo6HcTttYs7pmQ1Y2vWW05XDArO4XQvOUy7o3kb8kw89jZQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", - "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-session-format-catalog": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format-catalog/-/dsh-session-format-catalog-0.2.2-alpha.2.tgz", + "integrity": "sha512-iyK9iV6I83WP6TFYJ/9CqfCmDRQcI9GwGX81kFsNNlDr62NicGAvRW3ydH5FePncXZ0Z2fyWJZNiER0JCuOVcw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-compaction-image-offload": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v0-to-v1": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v1-to-v2": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v2-to-v3": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v3-to-v4": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", - "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-session-format-v0-to-v1": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format-v0-to-v1/-/dsh-session-format-v0-to-v1-0.2.2-alpha.2.tgz", + "integrity": "sha512-EEH0QxS/YNzGjYpXt3rsM76i0fd6FzKhB6gg5pSsSPeNEWAgAOtExfYjJb8SmV7gIYL1t0YvuMCVV4dnmSdDGA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-session-format": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-time": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", - "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-session-format-v1-to-v2": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format-v1-to-v2/-/dsh-session-format-v1-to-v2-0.2.2-alpha.2.tgz", + "integrity": "sha512-6yVd/C6Wgkdu5qLGO8Uzm8J8D1dBnelPizCZ+NDUFHPwBnCZEGfx+WblbAViqGdbydaNZm877Jw83LAPP5rKEA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v0-to-v1": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", - "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-session-format-v2-to-v3": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format-v2-to-v3/-/dsh-session-format-v2-to-v3-0.2.2-alpha.2.tgz", + "integrity": "sha512-syohrFOOw0yKuXunrJV2jwtjQhUw+9PbvQs4Kss4CgWBgovEOCjlFVOQKKxWVN6dzKjHEBEjYPNA6gbLjoRNTg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-session-format": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v0-to-v1": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v1-to-v2": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", - "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-session-format-v3-to-v4": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-format-v3-to-v4/-/dsh-session-format-v3-to-v4-0.2.2-alpha.2.tgz", + "integrity": "sha512-T7ilntgBIj7w5xsSDEyQexsq4kYJNk4CMxjQFCulzhvozYSA2oekhphHjmxv7tCtApVTGuG7DZ0hg+IFzs4UWw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-session-format": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-format-v2-to-v3": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", - "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-session-persistence": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.2.2-alpha.2.tgz", + "integrity": "sha512-+Cwfcx9O/7c6mVgfDdUbSATypG4Po2DsPAqUatJnwS1aBe9+srNZBTviTzq+0GQ1Jb2eq0eD1C9q9gzIZ2KNLQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-timeout": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", - "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-session-projection": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.2.2-alpha.2.tgz", + "integrity": "sha512-RdVHzNU+UtS+pLc/PIF99/Eu34Epr2kKv1GhO2ir1Btqlk0FV2/8ZCeVhZIpiEug2e4AoaZwX1Cnuq4Liy86YQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", - "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-session-query": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.2.2-alpha.2.tgz", + "integrity": "sha512-TgwkXBuKQ05N2nr+k09wjMdptwLQqKg0pM9DTQbXjC1qmt5OICsvQCHXkxjd6yCb1IFgD4+Z3tUqt6rj4AKjJA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-session-format-catalog": "0.2.2-alpha.2" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection-cache": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-title": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tool-todo": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-session-persistence": { + "optional": true + }, + "@deepseek-ai/dsh-session-projection": { + "optional": true + }, + "@deepseek-ai/dsh-session-projection-cache": { + "optional": true + } } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", - "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", - "cpu": [ - "ia32" - ], + "node_modules/@deepseek-ai/dsh-session-reference": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.2.2-alpha.2.tgz", + "integrity": "sha512-Hae3MQgU5u31ow9pGSaA+qH8gV2PMYqPrr4USVSf22pnAqVvijD7WsGuW8hChcnSJUDN0RPF7q5XNpecsyN8kg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-compaction": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-output-retention": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection-cache": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-query": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-title": "0.2.2-alpha.2", + "@deepseek-ai/dsh-spill": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subagent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-session-projection-cache": { + "optional": true + }, + "@deepseek-ai/dsh-spill": { + "optional": true + } } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", - "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-session-title": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.2.2-alpha.2.tgz", + "integrity": "sha512-RNZ4rh6v30eIB00XbmKi5ZNxLKEowj01ox+rX36gB90lNNQc5v9kZV+Gsr8fvVR0bBZ5fOkJpUBJx3aIp3lrww==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/dsh-settings": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.2.2-alpha.2.tgz", + "integrity": "sha512-t1ZxV83EJa2xDO7Wlr+ZNEb3O7HnYh859dDxARHlaQX7yoVM2YGm89SYpa6qzh2X9+0/ZUl2q5DqsZRCNxbnIg==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^22.20 || ^24.12 || >=25" + "dependencies": { + "@deepseek-ai/cordis-plugin-loader": "~1.0.7-alpha.1", + "@deepseek-ai/cosmokit": "~1.8.7-alpha.1", + "@deepseek-ai/dsh-config-editor": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "yaml": "^2.8.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" } }, - "node_modules/@oxc-project/types": { - "version": "0.147.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.147.0.tgz", - "integrity": "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==", + "node_modules/@deepseek-ai/dsh-shell": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.2.2-alpha.2.tgz", + "integrity": "sha512-71p5Zd+T6lSLfz96BFZobMKz9UMd03zkLo/0lZXIn7gVNmZoN55uHO4ubX2t+H9fh5e7xVOqEz/7uvchW08f+A==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subprocess": "0.2.2-alpha.2" } }, - "node_modules/@quansync/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", + "node_modules/@deepseek-ai/dsh-skill": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.2.2-alpha.2.tgz", + "integrity": "sha512-UPbD0hXdNJw4dI+b95C2YFAhoZNDCcODveM9VlrEpeKx0wTZN4UHy6LmsdbVTXoKGWIxk5MXdWOCYB/Nce36Hw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "quansync": "^1.0.0" + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" }, - "funding": { - "url": "https://github.com/sponsors/sxzz" + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2" } }, - "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.6.tgz", - "integrity": "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==", - "cpu": [ - "arm" - ], + "node_modules/@deepseek-ai/dsh-storage": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage/-/dsh-storage-0.2.2-alpha.2.tgz", + "integrity": "sha512-B78oLpjgKQfKRFQp5NZSq4rk4iZ26xlrnFzSRJ3DBMP9hezUMqemxG0JCyp1l2TmuWm3UyIt4tkOqfW1djq1sw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.6.tgz", - "integrity": "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==", - "cpu": [ - "arm64" - ], + "node_modules/@deepseek-ai/dsh-storage-domain": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.2.2-alpha.2.tgz", + "integrity": "sha512-/K07UMUrqShfZfCAkjoQHf4KDBSxRGcgTYSuZ+nE7mA0peeuyI1UGSQafqZV46gbXaK5xgHN58j7BasyuXMtuw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-storage": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-subagent": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.2.2-alpha.2.tgz", + "integrity": "sha512-9owXbZytsbuNUy4ktKeIjTY2MnLSCg0XY6/l/+wn/96K5bIqnVt/ef1ExHDuz/nQAYtdQYucvz2oF6lG24WXoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-chunked-list": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-attachment": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-permission-presets": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2", + "@deepseek-ai/dsh-sandbox-policy": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-query": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-approval": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-time": "0.2.2-alpha.2", + "@deepseek-ai/dsh-working-directory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-workspace": "0.2.2-alpha.2" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-agent-preset-registry": { + "optional": true + }, + "@deepseek-ai/dsh-permission-presets": { + "optional": true + }, + "@deepseek-ai/dsh-sandbox": { + "optional": true + }, + "@deepseek-ai/dsh-sandbox-policy": { + "optional": true + }, + "@deepseek-ai/dsh-session-persistence": { + "optional": true + }, + "@deepseek-ai/dsh-session-query": { + "optional": true + }, + "@deepseek-ai/dsh-user-approval": { + "optional": true + }, + "@deepseek-ai/dsh-workspace": { + "optional": true + } + } + }, + "node_modules/@deepseek-ai/dsh-subprocess": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.2.2-alpha.2.tgz", + "integrity": "sha512-rZHXZaeZWwKz6mFPVeuBL3vDgNrWrVppyBHdFR+CeOSmPvLi0tbjXZctuhWPCSLfn2kLZGFGPnRFimMdsjVWBQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-http-proxy": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-system-prompt": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.2.2-alpha.2.tgz", + "integrity": "sha512-mB6uW6yam2zETmCBwivB+WuziY/UJtARPxi7S7VC+kJGk3VuoJkyoiEH7XwrpVzncFVHqy6QdIRPD3Baey2qOA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-timeout": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.2.2-alpha.2.tgz", + "integrity": "sha512-Rn5+DsqeUpytiSIOiN8Rdw6vAvMBG8CZTG8W2l0zXstHt0w0UiFQxv6UI21uFHjWL2fUVPvP6KLamv+nE72nmw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-tool-todo": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-todo/-/dsh-tool-todo-0.2.2-alpha.2.tgz", + "integrity": "sha512-iy3bxvhtKhiEfsH7Mflah/tgGi7R8i1oEFbz6HSC1sAD6yh99hSVcyEuTLmdNXB58sSG0zRwK6EozIDzenUiWg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-tools": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.2.2-alpha.2.tgz", + "integrity": "sha512-2KXvznBB1R8rUpfdOmmmufeo65t3hqXDBjq7qSLCfM4RHibQz8WL692WBcTWznGnoMVWifIPXDfUas3SjJdNSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-values": "0.2.2-alpha.2", + "@deepseek-ai/schemastery": "~3.18.6-alpha.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-approval": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-typert-protocol": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.2.2-alpha.2.tgz", + "integrity": "sha512-jFA+ub/v6jBwhmrdZtcVHKV6taJ731O2fzC9PXdIVOnOQ9bYds1kIdYsbhgBL7YFd40xWwV/LlJnE5L52v0jFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "zod": "^4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-typert-registry": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.2.2-alpha.2.tgz", + "integrity": "sha512-Hfxy8A6Hlg/GZ0fZBPNwoeO/byREszZtKWKdYst3kjYDyFBRpb5ZxErellcz70ny5JMlCmAcD6O+9GNmswn/jg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-user-approval": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.2.2-alpha.2.tgz", + "integrity": "sha512-Jvvd67q5CHkPUZsIdspvMHKNRi4wsxNjVH5DJVTBgEXKl1hq8YwspzoPquTlunN5dpp26/+QPHHouWr7IHB0/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-user-questions": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.2.2-alpha.2.tgz", + "integrity": "sha512-yuzHmo2+rj+LfyfO/OMoQyYMj62wrpQxhyuQ2CpB4t7lvDBsv2u2pgsb/pU5IfBAkyMvTHImqUfR7QeK+pHsDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-scope": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-util-code-language": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-code-language/-/dsh-util-code-language-0.2.2-alpha.2.tgz", + "integrity": "sha512-bBEWlXMrD6mnd6vDiTzr0SfPLKEy43gtqUO3r2ryezsjyRWL+ldxkoEJkV6R/6Yb7fBtUTm9H4s9t/Vc/R9I4g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-util-crypto": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-crypto/-/dsh-util-crypto-0.2.2-alpha.2.tgz", + "integrity": "sha512-Hmx7FvW7ok8iSEuaw4kQK/RWsHZnL6MFeyiOin46hfV9imA+pfZFT48/wrkUWwBzuuvpw0O1MwiLD3shqtb6lA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-util-file-drag": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-file-drag/-/dsh-util-file-drag-0.2.2-alpha.2.tgz", + "integrity": "sha512-UsGdKPpVD7uDzBhsrDVl7kwsVHWIRK1JFsxU3WpsD4QG9/jUOn0JW7tzO4I8mk8yq40AiREP1G4h/nEuymSTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime": "^4.1.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-util-time": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-time/-/dsh-util-time-0.2.2-alpha.2.tgz", + "integrity": "sha512-0BOeUcq781L6zU+F2V/g3WYXThfpYxD6cLiOQm1K8a/EjvM32AjfOMzHq6sUrbWpdSuOknbOzevNu9caaVIrkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@js-temporal/polyfill": "0.5.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-util-values": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-values/-/dsh-util-values-0.2.2-alpha.2.tgz", + "integrity": "sha512-g5Qrz9cEENcnNEzXjiR+saN0aV4G/8w3FP57wlew+SwZPm3bW5K2cj3iA4Rjg5BS3FGZvnqS95RMOPrxNdulig==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-util-workspace-path": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-util-workspace-path/-/dsh-util-workspace-path-0.2.2-alpha.2.tgz", + "integrity": "sha512-KYEFURE/FoZj3RexcCNvZLNdG1f61aCIRZq1CCpZ+Ye58C7lyOmxkxEWG4JxnfIvh+uGgN9R1ny1SzYRp6CZCQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1" + } + }, + "node_modules/@deepseek-ai/dsh-working-directory": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-working-directory/-/dsh-working-directory-0.2.2-alpha.2.tgz", + "integrity": "sha512-rfBjLmOfn6dLErN/3Bh8iwFkQRwzPc+Jqwbjyc7kxshu9Hnkuk9rsSPf4HznZehhZN4sU13qx3/S6EZbnrwsJQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@deepseek-ai/schemastery": "~3.18.6-alpha.1", + "zod": "^4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-fs": "0.2.2-alpha.2", + "@deepseek-ai/dsh-llm": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-projection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-system-prompt": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/dsh-workspace": { + "version": "0.2.2-alpha.2", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.2.2-alpha.2.tgz", + "integrity": "sha512-LRonx7FMJO9fVVaErTs4upKNxwb/SW0c8jG9m+/Jr5pu4NVHqu+KrnXvZiNqyM385sLqGfI6W56B+9e5jSCJsA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@deepseek-ai/dsh-brand": "0.2.2-alpha.2", + "zod": "4.4.3" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "~4.0.6-alpha.1", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2", + "@deepseek-ai/dsh-storage": "0.2.2-alpha.2", + "@deepseek-ai/dsh-storage-domain": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2" + } + }, + "node_modules/@deepseek-ai/libreoffice-kit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit/-/libreoffice-kit-0.1.5.tgz", + "integrity": "sha512-H12xtUsAyl70zFeQ5pk5GGRc3N1+6zn+DVAcqwlguI6EvqopBGP3xkUmePU7g5f6ydYlDZLWedHT9lTSL7zLxA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "fflate": "0.8.2", + "fontkit": "2.0.4", + "koffi": "3.1.1", + "saxes": "6.0.0" + }, + "bin": { + "dsoffice": "lib/cli.js" + }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" + }, + "optionalDependencies": { + "@deepseek-ai/libreoffice-kit-darwin-arm64": "0.1.5", + "@deepseek-ai/libreoffice-kit-darwin-x64": "0.1.5", + "@deepseek-ai/libreoffice-kit-wasm": "0.1.5", + "@deepseek-ai/libreoffice-kit-win32-arm64": "0.1.5", + "@deepseek-ai/libreoffice-kit-win32-x64": "0.1.5" } }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.6.tgz", - "integrity": "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==", + "node_modules/@deepseek-ai/libreoffice-kit-darwin-arm64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-darwin-arm64/-/libreoffice-kit-darwin-arm64-0.1.5.tgz", + "integrity": "sha512-SjeXmyaTevEq2TxK7reb1rhCrQZ4QOXmXt/qEwfQD5Fx3odU0ILx2uiXN+nphSCQ95LFCzrElHGgv2c7a824yg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" } }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.6.tgz", - "integrity": "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==", + "node_modules/@deepseek-ai/libreoffice-kit-darwin-x64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-darwin-x64/-/libreoffice-kit-darwin-x64-0.1.5.tgz", + "integrity": "sha512-vuz2tTpH1Edk75+DISwg/TXdQ3BNSNSHoVnWVqxqbGMgrrK9trLOw2+0X7mjT1naGO00Zc1qkyQ4if3kx5XjqQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" } }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.6.tgz", - "integrity": "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==", - "cpu": [ - "x64" - ], + "node_modules/@deepseek-ai/libreoffice-kit-wasm": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-wasm/-/libreoffice-kit-wasm-0.1.5.tgz", + "integrity": "sha512-V+pu5xJsKhVD4AU1xbFlMWY91svK9ZIC2JsNOph9kWp/arF/KQcuytt76bcbozJqPbE8o0n04lyh0m3QW5RYSA==", "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "freebsd" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" } }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.6.tgz", - "integrity": "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==", + "node_modules/@deepseek-ai/libreoffice-kit-win32-arm64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-win32-arm64/-/libreoffice-kit-win32-arm64-0.1.5.tgz", + "integrity": "sha512-Av3aFfNLaVxfffu0JXP5mqfmsCU3gQtlUH9UD+zdXl8ON06ukVAmu7LqNyuKAz/68WoOMTQ+YBlVQukgDRKd/A==", "cpu": [ - "arm" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" } }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.6.tgz", - "integrity": "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==", + "node_modules/@deepseek-ai/libreoffice-kit-win32-x64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-win32-x64/-/libreoffice-kit-win32-x64-0.1.5.tgz", + "integrity": "sha512-uKuDGZdofxuW4iRmUh8b3+XWU28JeOCYMTAONzo7tEHIq00DV2cARcgUYiTP7gUH49tH4A/RyPMOVEBzK7qjjw==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=22.19.0" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.6.tgz", - "integrity": "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==", + "node_modules/@deepseek-ai/schemastery": { + "version": "3.18.6-alpha.1", + "resolved": "https://registry.npmjs.org/@deepseek-ai/schemastery/-/schemastery-3.18.6-alpha.1.tgz", + "integrity": "sha512-ID5DKpWa0BnrcNdZ3ofWkhOoRLQ3MsFr1FdRVHBiALeE9egaCm4QatuCvQK0Cd/haRBcEvefacz2JEYYMFAEnw==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@deepseek-ai/cosmokit": "~1.8.7-alpha.1", + "@standard-schema/spec": "^1.1.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "aix" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.6.tgz", - "integrity": "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==", + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ - "ppc64" + "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.6.tgz", - "integrity": "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==", + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ - "s390x" + "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.6.tgz", - "integrity": "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==", + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.6.tgz", - "integrity": "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.6.tgz", - "integrity": "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openharmony" + "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.6.tgz", - "integrity": "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -1962,16 +2302,16 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.6.tgz", - "integrity": "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -1979,23 +2319,16 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=18" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.0.tgz", - "integrity": "sha512-70TeIFezKKy65LgAVyQh+w94/gjWhvPWaLaGGeMEgVrPkQhuj/M5bAYYZzIFUj9Y69oHyTm5Um/R6gcLh4A8JA==", + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -2003,13 +2336,16 @@ "license": "MIT", "optional": true, "os": [ - "android" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.0.tgz", - "integrity": "sha512-YC86tYIHK6M1IV+wbzO+Bxk8RCBr6ZyWYgWxUCzaZD8mc8rrFoIJDNzDrkHBYRc/wKdrsIXmm6/F7NzrAO+OrA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -2017,290 +2353,335 @@ "license": "MIT", "optional": true, "os": [ - "android" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.0.tgz", - "integrity": "sha512-oI+ECtUcli0y0fi4xpW82GdPIXdTkI8G8DSjG2LRuw09fPAGykaWYH/hXxiKuTxiAjiPSTIIuYUqof5Z2hShWw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.0.tgz", - "integrity": "sha512-NwV+1s7TiKrMe4owHyKB/dTLD7ZJD0YEBEhIz+hvav1Cu1GReJjF+rsdNwjzENQeIAbE/CoNiaAc5Vz2h5DPAA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ - "x64" + "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.0.tgz", - "integrity": "sha512-tWtHBTu5gOPK4u4Urtk4qAHW3zZ9rQAmbssO8gp7ELvGTGI3aCiq6NqyTQ0PCIg7KbHJF2UkGDDs77YZGxfjCA==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ - "arm64" + "mips64el" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.0.tgz", - "integrity": "sha512-2qPoJiwTvtHQ27NnYvTnsgk8laXWYuVmNESG8WFZBcEPKLfZ3I27qBJarjVRQtwGeYyRfq5ZowHXih9lm2BItw==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.0.tgz", - "integrity": "sha512-FQwsTRvLNuHoTdICABJQfbPUSEueISGmnpT06tXTMpfprf5NiKLSXKA0A+w45wJnCmZAnzgqBwbt6ARFuyOi5w==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ - "arm" + "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.0.tgz", - "integrity": "sha512-BBVTXziw8mY1a4ZbWME9tZyfzqXCDPqaC7Z3heQ29p5dkvXzwL0NwelO8zLa8c3RBKvl3YTuSnBgsBhYBtwjIw==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ - "arm" + "s390x" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.0.tgz", - "integrity": "sha512-w2Iyy9+RqKwx3d9qWMKsJg0FfRBsY0/pXNv0mCQ3ueRvJI6+QAScfD4nrMlzFLs2HNVW6Ew+mtZfDl9b7Ew5/Q==", + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.0.tgz", - "integrity": "sha512-YK++KtrFRHYE0P6/RtYEAy9t8F37znP+K03RrIuLPYOL6SVlObRumf/0OE4V/h63xL9DwkWbNssZfmA9hawuDA==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.0.tgz", - "integrity": "sha512-aBfOG6fP7YkkPmTqPwufRJeFyz7WPpECv9XNbnsk9+vg7rxdih0lbtEel7jcRng4LZrrmU3FfitCFyEj4BWDWg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ - "loong64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.0.tgz", - "integrity": "sha512-LGaHEOeHNAag9VuS1Crs5DFg4RrU9MPi2nVnNJk9DTePx/B6RRYKVmrIXt2h7YOJlwjaFJ6lwtFDliZxScTLrQ==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ - "loong64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.0.tgz", - "integrity": "sha512-jClvk+J0FC3b7Udvegiw5/4hErbHtmsNsQgENnKXDWtNCJXsJYZH5WURvu7imDOO38xYml24eeh5x3A04ppwCw==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ - "ppc64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.0.tgz", - "integrity": "sha512-0OJlaGK+8+B777Ql5okIpD7ua5Ro9+VB9Ve0OKa28OQJZ1RbuUBVNHK/e3pr4BROqsyPl1JrPO1ZxJseCNffcA==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openharmony" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.0.tgz", - "integrity": "sha512-Ygsx+HoNH7afwi1bTIXbnTvVnsO+zurPLSYxybV1hHFVU72OWOCl6v05ql/z0hkpAPx+DK7Kn9Bi7MayCcjLTA==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ - "riscv64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "sunos" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.0.tgz", - "integrity": "sha512-pDQxtMGb+OvG3fLwR2OkZlSd47hW+kWg4BYMG/++sR6RqorQccwPTDsxda5hPwiIeIErAnCF9ma3SAU06bdQtQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ - "riscv64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.0.tgz", - "integrity": "sha512-0BnUG9mS8I4SSHr3XsxVhuCMEiu+rX61xxZF5vujso4LaiAGFZFxvDjg6Xn6tLPNTUAfuCvQYas4LMQMVsKRSQ==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ - "s390x" + "ia32" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.0.tgz", - "integrity": "sha512-Adu/VttB1dpPNW+FEacrZ+xVm9tFty84+RrFzsqlFaPxoJB+9XXyDGtp5dCOoBwGBIEVH0To7lExFXEx0BIF4A==", + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.0.tgz", - "integrity": "sha512-NQ3bDvjUbFKmP23671xUlXtKmqVsUBd6M4PQCvbmNtOy06hnQIdKHy8oG/6S3R/S6He1JgPk6A5VT+prAJMYEw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@js-temporal/polyfill": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", + "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "jsbi": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@koromix/koffi-darwin-arm64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.1.1.tgz", + "integrity": "sha512-+Dl0zQDh1Wb55AWOn9hp7K30qgkODvrvN+ZNkFOh81Q0oFX/rpJQtocgjAuYk2zFAcajSeVDumkcHMPwnKSXzA==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.0.tgz", - "integrity": "sha512-u2eDAl4+0aFvA13GxlGBtTI3SS3sdgwgtV0HyjZ0QaQVCgNE+jqNGey+GtxWiq+wxr/UycAx/OnfJzApCFamvA==", + "node_modules/@koromix/koffi-darwin-x64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.1.1.tgz", + "integrity": "sha512-cDFAKn1qdZBFLrp7dAc9QUDw3l4xAhTJbOdPWWb0LxssVicUdHcRCLZGrDsmPW2tpH6LGNNeLgqRpAoD2Mo8iA==", "cpu": [ "x64" ], @@ -2308,13 +2689,16 @@ "license": "MIT", "optional": true, "os": [ - "openbsd" - ] + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.0.tgz", - "integrity": "sha512-XvRb5vfW3wAZQ+ZUG21AnHHDKtNcw99eigzEhjr//NZ3u7SoBaPP0seSc7FgP7p1epAEdAoZckMW9WY/+4w70w==", + "node_modules/@koromix/koffi-freebsd-arm64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.1.1.tgz", + "integrity": "sha512-zaP7FJISI/scQW9Wa5QicY3a09WmtKBWSbmC+5nfCqPzwWe7Hx2so74Er7mPsDfCiMMR0Ya+evKbJQDkfyXicg==", "cpu": [ "arm64" ], @@ -2322,478 +2706,447 @@ "license": "MIT", "optional": true, "os": [ - "openharmony" - ] + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.0.tgz", - "integrity": "sha512-iZPmniy4kNBf5yo2RezbkYNNK5HPbXE9+g+twnbqSng7dtLEJy1SKoxiE/ni4FDacjyuZpEeb9U054N4EoKHYw==", + "node_modules/@koromix/koffi-freebsd-ia32": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.1.1.tgz", + "integrity": "sha512-7GejVb688TLM8rbjfc0oezJrATxZc0dn801xWEDJekN2DgmRXu7HquGqWQ6z3NeSq7ZxEggz4T3xtlbCysQapA==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.0.tgz", - "integrity": "sha512-mFBBd+LF37fnE8JnYUOH+imj0aPFPK30vpar4ehJkgnLj9sZn8ZxiRENmLtgIwxK7TC8klF6N57fxdNBwQoqOA==", + "node_modules/@koromix/koffi-freebsd-x64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.1.1.tgz", + "integrity": "sha512-XLiCFP9OFCyOoGTjAimtDKLhzhfo34WcP1ShVWxRzNCWDGjfz8BYjwd69cp/cDSUXZbxamqs4+/6vmkePq9wxA==", "cpu": [ - "ia32" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.0.tgz", - "integrity": "sha512-ujeqEY3B+zbGn3Z4Q03cUBG/LGWnBJncVT36WER31LcOsQk9+1dmINKKtvmmfChUvRbK1G0R8OhMWFgHgaZtAw==", + "node_modules/@koromix/koffi-linux-arm64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.1.1.tgz", + "integrity": "sha512-HA9xINK7G4dRAkpfnBWD9VfuyIBgW1SuK+KPHjksUwRMOnhgqP8J/JqgrAzdzcDiefGBkqEacIP776OUwz7knQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.0.tgz", - "integrity": "sha512-hncn90N4sOky0L2LKE5oESKLbxCPeVo4eLA2LSMoDzM+879ml4WSr+Rr4DWknNIVVvS1Hirkc9hx02W6YxS8rQ==", + "node_modules/@koromix/koffi-linux-ia32": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.1.1.tgz", + "integrity": "sha512-jG7IFytmP8K5Qtbx0ro0ZeuX3JjSsLxmYhq+nmXDdrtOAlxIsWGynuiDLS6Jk3vOchVii2m6Y2f/L3GLG2fG5A==", "cpu": [ - "x64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/@shikijs/core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz", - "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==", + "node_modules/@koromix/koffi-linux-loong64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.1.1.tgz", + "integrity": "sha512-CIsT1cNnih8FuU52Me/IVlJBpH28SQfoDeYPctJswgJzaARktusF7m4MUbtR1PBDjuquCVM4/vFyNdOzfPonvA==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/primitive": "4.4.3", - "@shikijs/types": "4.4.3", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5", - "hast-util-to-html": "^9.0.5" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/engine-javascript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz", - "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==", + "node_modules/@koromix/koffi-linux-riscv64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.1.1.tgz", + "integrity": "sha512-9D6RmqeKsSvs3U6jILJU9PcAjMwKKyn7yLxNBb5k6z9PCoUoGJ3/BrhXAX0qjrLLwEiIpP/hS/40RuXvH8Lc3Q==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.3", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.6" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz", - "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==", + "node_modules/@koromix/koffi-linux-x64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.1.1.tgz", + "integrity": "sha512-pyTcX5fePeYbt7TZAwRby69wdlRx3PT+g15ra5IYdat/Pgh3qAKEYeZ+uu7WpPGOy43p/oSRqqZoa2kORzozlA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.3", - "@shikijs/vscode-textmate": "^10.0.2" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/langs": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", - "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", + "node_modules/@koromix/koffi-openbsd-ia32": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.1.1.tgz", + "integrity": "sha512-iPnPzvG2HOfdzaiG1drdkt86sAqmTPDv9mAf+5gL7mRzkeeQC88EVGboRy7eXwdXn7R+v0ntA3iQxdHrBn6yXw==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.3" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/primitive": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz", - "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==", + "node_modules/@koromix/koffi-openbsd-x64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.1.1.tgz", + "integrity": "sha512-/Xqc3R0SVoMCYjMPZnJ9bULtRo364+dKmnQhfDrI83tSpxUHRw7HRNf12vBeL+hPgKxSBjtMpWfQ/ZIyVyLFag==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.3", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/themes": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", - "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", + "node_modules/@koromix/koffi-win32-arm64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.1.1.tgz", + "integrity": "sha512-JhqHauEwQvdcWUERxrV5HH/DT9W7hY1A1eU6/o8tB+yck+D3kt5elpRDBt9KjpW6h+vHPy3V0sjDvO0CXyabTA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.3" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/types": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", - "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", + "node_modules/@koromix/koffi-win32-ia32": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.1.1.tgz", + "integrity": "sha512-ZRuyYmlGS/rCc966qqs0qREXDW4FRdul7rDF1VgSWHbVmdc196PUgUT+blq/GjZgTwqzeEXtMRgM+cU8krHjvA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" - }, - "engines": { - "node": ">=20" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "inBundle": true, - "license": "MIT" - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "node_modules/@koromix/koffi-win32-x64": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.1.1.tgz", + "integrity": "sha512-KqHPmvj6QILhNyI/To8QSihHsijeVGIYYPBOUnXEpcnH2LuLbargY4Hd6dDeTN3Z90uUUxN+1FWz1UnhVzFOiA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@types/ms": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" } }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "node_modules/@oxc-project/types": { + "version": "0.156.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.156.0.tgz", + "integrity": "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "*" + "funding": { + "url": "https://github.com/sponsors/oxc-project" } }, - "node_modules/@types/katex": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", - "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "node_modules/@quansync/fs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.1.0.tgz", + "integrity": "sha512-qAPG/t3HqML1TlN7sY/pTbEjzFVAKsMjNNMGheyDosro+kT4iw2KCUoHcVdmliwWjorm4elZbgNQyU2eD97eDg==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "*" + "quansync": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.20.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", - "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.16.tgz", + "integrity": "sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.31", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", - "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.16.tgz", + "integrity": "sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.16.tgz", + "integrity": "sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitest/expect": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", - "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.16.tgz", + "integrity": "sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.7", - "@vitest/utils": "3.2.7", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@vitest/mocker": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", - "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.16.tgz", + "integrity": "sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.7", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", - "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.16.tgz", + "integrity": "sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@vitest/runner": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", - "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.16.tgz", + "integrity": "sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.7", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@vitest/snapshot": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", - "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.7", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", - "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", - "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.7", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@yuku-codegen/binding-android-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.8.7.tgz", - "integrity": "sha512-C/0zV5IhgVdYhGJTwrY0v8dknxlhiKwtVJkMUaexu9/QvRmzlV4vfU3hZlUSgqc2BxQHntL1mCVbDq8j0FRFDw==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.16.tgz", + "integrity": "sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-codegen/binding-darwin-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.8.7.tgz", - "integrity": "sha512-/u+REDMI4a0/lsJXTM4c53/w31OGZLOReZIyg62uhgLs0kc8NHsj/nOcxTdlQjq5gi0zhdkccD9LaLTXcdzPvw==", - "cpu": [ - "arm64" + "libc": [ + "musl" ], - "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-darwin-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.8.7.tgz", - "integrity": "sha512-sMMzFOwCo4WXR+/6zIBThOocSC50iIIZZdfiIDbaLvj0Ax/rWt/iavyfEAqajyvzydLyCqR/ZItdLWSRlu1umw==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.16.tgz", + "integrity": "sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==", "cpu": [ - "x64" + "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-freebsd-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.8.7.tgz", - "integrity": "sha512-MpdpKXix9P+Y1rKgjvcNeNtGjXeL1CmttNhYINrWls8kRpm4xM/oBGTmn6w7to8lAlwj5jm8q03dQPl5mRv4Qw==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.16.tgz", + "integrity": "sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==", "cpu": [ - "x64" + "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.7.tgz", - "integrity": "sha512-rr1srFLlPAmC1vtxfc9C1YLDe3iH09YjfSeeIidBqKhzx1MATjOAq4mjlRUOnhr/L27MotWIYOFKwVsd5JZFOg==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.16.tgz", + "integrity": "sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==", "cpu": [ - "arm" + "x64" ], "dev": true, "libc": [ @@ -2803,14 +3156,17 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.7.tgz", - "integrity": "sha512-eAufXh8qBRpiSO6ueaMDL+yyoXIGLhpUce72YbcACtZU2qhExwBIJyEtQf5kH2Ki0X2aqkSjSfog4OPtKXan3Q==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.16.tgz", + "integrity": "sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==", "cpu": [ - "arm" + "x64" ], "dev": true, "libc": [ @@ -2820,80 +3176,87 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.7.tgz", - "integrity": "sha512-gw4w6wPoHObBrdIC4duVWLmJOvpdE25j5D7yrM5mACNlK4klRz/lv8hK+ssQk9EJHBgZjSaqZIJVFgqNYbfv7A==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.16.tgz", + "integrity": "sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm64-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.7.tgz", - "integrity": "sha512-L68N6Y4XkqcIaKo3Ra88JEvBEH4AHff44A4INcrxeVWZ8CZtu2tCpfVxe3hR8qQQMcvBSQlDn24KpkCKEhVvfA==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.16.tgz", + "integrity": "sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-x64-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.7.tgz", - "integrity": "sha512-dzyAbltJmf3Cqlb8HcFuYIf5Yn0fl1vTr3XJ9HiVNNvOlhqPSArOqtw9vI1p6/VTXTjrMLXlU+s+/kNHiIy/Cw==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.16.tgz", + "integrity": "sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==", "cpu": [ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@yuku-codegen/binding-linux-x64-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.7.tgz", - "integrity": "sha512-Otw4MH3404q0Bbvl+YTdW9aoUV5vXmUw8260bWvt1XlaoIX/ceSgI4ygheRDMfBPoHt6FDayQaO9OLVUZAgkFA==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.67.4.tgz", + "integrity": "sha512-/v/pUAPOcwp+r1Hjjdg0cBV1TE89CzGKrKh2FgkIQw2QBcIMmVPOCSfuOZStCn4Xh/98HXfo/ht6ztcssctPNg==", "cpu": [ - "x64" + "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ] }, - "node_modules/@yuku-codegen/binding-win32-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.8.7.tgz", - "integrity": "sha512-qo/jyrzryiBuKEsFiuWaBCBe3tRMynQ0qFWFgOEjcCMQeZfBm+wKiVEUEFXXLc7bh8YezguAWp0Mtnhq4ARNyA==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.67.4.tgz", + "integrity": "sha512-6tmmB/P52Vt167FXXEw5auiEUgTtZz7aqUgWHqYXToIUE0HFDY6fTdAyeekjjsNk6O/8dtpSKtClxSj1mMneKQ==", "cpu": [ "arm64" ], @@ -2901,13 +3264,13 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "android" ] }, - "node_modules/@yuku-codegen/binding-win32-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.8.7.tgz", - "integrity": "sha512-D5lDsVDx6m00E6bWySlWdH72Ca4TPSaphDqB6QjU6MpuNLIJqoGoatYyq2rOmBE8Zv/kunot/o58KGL03P3eiA==", + "node_modules/@rollup/rollup-android-x64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-x64/-/rollup-android-x64-4.67.4.tgz", + "integrity": "sha512-8Z9Q4RmotVmuL4llOvqX814JNiOK1oqoBv+glG5KbpRfUiypqzz2/fxIzK4Pq129l4dT5a8Gszmpc0/XPYoFuQ==", "cpu": [ "x64" ], @@ -2915,13 +3278,13 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "android" ] }, - "node_modules/@yuku-parser/binding-android-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.8.7.tgz", - "integrity": "sha512-eGKYiUDX7Y0V7tDTmg+JTVnXnjMqfXXsorZ+EDf5kxwchQ3Or1HS14MzI2fw+jFhHR85fCWt+mtX33Yao73hIQ==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.67.4.tgz", + "integrity": "sha512-pnq6hssxTtwuRAl6Kdi/+IDY+b1IhkUetjhUkdLAAJCssjfqtL2Oqy/FXJVJFtAWOu1oRlArIvf0Yk1O92x2HQ==", "cpu": [ "arm64" ], @@ -2929,15 +3292,15 @@ "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ] }, - "node_modules/@yuku-parser/binding-darwin-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.8.7.tgz", - "integrity": "sha512-Re0RHelKLnjEURulY2/KxW+Ngb8zuNA4BRZuMwgGQNzVumT6u4U2N2hc01oeYVNVof0i7GrXE4UCNBgbpRRnjQ==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.67.4.tgz", + "integrity": "sha512-BeIrGZvHMVdJg/N+ohZfFywG/gF41684YhDj2wBvouj7m9ziP1tZDUNwzXRiDY+3WIKngaC4hiUBqVtBPGP5og==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -2946,24 +3309,24 @@ "darwin" ] }, - "node_modules/@yuku-parser/binding-darwin-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.8.7.tgz", - "integrity": "sha512-Hn8DROtQkjlA1ACbPgj4a7eP9IuVOI504oiTwpkWPbpaDWD9KdmnVYCqW+1LfenNK/g7O9NhWGpXEdaCNX7lIA==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.67.4.tgz", + "integrity": "sha512-fRFX/oqNg/g780DKoS8RIfYcZD59Ru5O/bSeK1N7gQljBFrTxJY/q5EX4eMs5SrJf32VgVBVVYCdfPpzAwPPnQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ] }, - "node_modules/@yuku-parser/binding-freebsd-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.8.7.tgz", - "integrity": "sha512-bAP2OV8wRuzplX/jYxv9+vvqQT8JxyNphI8fLfXGL054Xs+4/J5u33cIm3y4rxY8rdoLmmdiJs2Tq7r7lrDRfA==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.67.4.tgz", + "integrity": "sha512-bSrBRopG1q+0RuOsW0NtYTtIODlvNA3T3ebx5WnQVdSxWIoXFmj+rZdHUHdSLgFdZ5M6VGmekYE7r4RMGQXjfg==", "cpu": [ "x64" ], @@ -2974,10 +3337,10 @@ "freebsd" ] }, - "node_modules/@yuku-parser/binding-linux-arm-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.7.tgz", - "integrity": "sha512-kTYwJQQgmZeAWdDIWabiReIZMpmfLueIj1tCmjStUtFGhR1Z0qwxonKVfUC4N7h/VhGGzLZ//7O1kgt1QKqgCg==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.67.4.tgz", + "integrity": "sha512-L8IvdrJVtl65g1ozwDSyjGPG+FmibhCdFUwmqTItJLw0S3+Oj4QzFs7rfgTUiK7rsPjkCLdG1/GApFxoynXFJQ==", "cpu": [ "arm" ], @@ -2991,10 +3354,10 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-linux-arm-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.7.tgz", - "integrity": "sha512-uL4jE8HPT2BLlxAXyD10LqgPuXa9eDa0BKpCdSANmzIJghq/2eZo3/gQNtaxPZMupWoxjYzSad9IXrwu7aYPXQ==", + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.67.4.tgz", + "integrity": "sha512-h7PcoQOzC31jshNpQ48J0akB9tsghjkSjSl5AZ6XsVGTxVsln7t7C4SQyw62tNVSaz2SeHgk4VT2ELbL17BSHQ==", "cpu": [ "arm" ], @@ -3008,10 +3371,10 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-linux-arm64-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.7.tgz", - "integrity": "sha512-3gVN4pWSKZmXiNX7cU164dR9MPvesCHnlH6nPfpK+yQsCuYphjKKplcb4SnZBrhiqmXbgb2HR0c2TS0IZUPhgA==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.67.4.tgz", + "integrity": "sha512-KSPuOBNHoOl7AsVjeY1KZci8+0up0U4TFAHU5IzBYN8P+Z6cB9DZq28+JQycZW7f6WLLa/tSzhV7Rdy95bVi+g==", "cpu": [ "arm64" ], @@ -3025,10 +3388,10 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-linux-arm64-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.7.tgz", - "integrity": "sha512-S0mwfEjoLpxzXeZw802Wa4RaELsQiPtWqG6INcy8j4GtvNFtl4LCX3eGO1XLn9pyLAISLzTRyU3zUCBUPin8lg==", + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.67.4.tgz", + "integrity": "sha512-0E/mKmVk1PlQeQYygIwQm0jlwjANTzGSiNBMPrFx+rdFGFj/2Axh4p6XwcrystQIqXZVudTaGsdbDpzYgJ4wSA==", "cpu": [ "arm64" ], @@ -3042,12 +3405,12 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-linux-x64-gnu": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.7.tgz", - "integrity": "sha512-lnbWdPmerE5D1uH1G4IEZKnPzCrWCStRGrtgpSIe1RibAo5bZIjDbbbPYXmMHCEh4F+x/JaJpElh26a3r+BPbg==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.67.4.tgz", + "integrity": "sha512-Fvw7dOSc2Sa9UOipRZVI0zOgdLCzsjVyD/6JuHXzUHTXFu7mMgmeX/0/bCVBIut1dz+nWz3pV4WpS/Qg0XVnxw==", "cpu": [ - "x64" + "loong64" ], "dev": true, "libc": [ @@ -3059,12 +3422,12 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-linux-x64-musl": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.7.tgz", - "integrity": "sha512-769uwndMvMzUvATWbAcEvyLHKA+DzhHSCl/obBUrRdYfRo26yxui6S8y3z7uJ+Naup7UKrDxrpK7OnQkxkl9KQ==", + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.67.4.tgz", + "integrity": "sha512-jzxbVHaE7V3F+P0wEK7UydQtvv7Twfdtx58jI5/3VRx1jJxyrn+qFwfXmqjVFxPhBl+zjaRs+ZJMFJw7vdHaQA==", "cpu": [ - "x64" + "loong64" ], "dev": true, "libc": [ @@ -3076,1784 +3439,2184 @@ "linux" ] }, - "node_modules/@yuku-parser/binding-win32-arm64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.8.7.tgz", - "integrity": "sha512-mEB/9PlaAkisJ6KWGz0zvywXoU6+80dTlR2LwS7s/jcXXoU6fm2+sitBZXtqu3+Q4DcDgPxM45uWMCzPs0TSRw==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.67.4.tgz", + "integrity": "sha512-fhtrzp9p4GjEJVaigaap9g6X9nP6xgJtKiLLXSDgpE18HXufA5aqfltGn+KAqMtVZReJZfOrXm//y5YSA9BWbA==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ] }, - "node_modules/@yuku-parser/binding-win32-x64": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.8.7.tgz", - "integrity": "sha512-8vNB2DP0ou61nGb8tc/qfi41gfyDXz1MHr2zqL3nR+cJ6CEbiuWV/l/a/vv151gCgiZLLAyGkQGENpozdg716w==", + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.67.4.tgz", + "integrity": "sha512-uynaF7IUHwAckV0S+yC1f5esy9gB+aqCBsPH5BOck32TYdCuAn2lVG5tvUcFnEsrviGEmRZxE1NHSOieUPYJEg==", "cpu": [ - "x64" + "ppc64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ] }, - "node_modules/@yuku-toolchain/types": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.7.tgz", - "integrity": "sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.67.4.tgz", + "integrity": "sha512-uaqRFdfb8eIa2bVHN/FE3ndCvR0zV2xv0AwjCfxrqSu6l6fp/54VhjfhslKlf2RIik9L1jwlt4E56PeVX6tQtQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT" + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/anser": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.5.tgz", - "integrity": "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==", + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.67.4.tgz", + "integrity": "sha512-JZRow7kmxUDEASnxHuVG5itTm+nTXi9BQUABcVUnUEngC+OPwMrpx1uJ9hIA/v+IcAEBL52ktCSPXk5OJn9Jqg==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT" + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/ansis": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", - "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.67.4.tgz", + "integrity": "sha512-rdrh4e+Lq9fCNKoDPaCqeHXbQCe7yl77Ukl45tlSClwYdZ1gpFGZz1XLJdYtY++FRlfL5aHvb6/0n3GDW/Nxsw==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - } + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.67.4.tgz", + "integrity": "sha512-wL7MS4r0fYcxluF3ne2plofHZiB/LsqNCnyaUlyiKpAJLb6agPSFz7DEFCfkonWAZXMrLwCmC08b2ZEnEdJkog==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Python-2.0", - "peer": true + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.67.4.tgz", + "integrity": "sha512-4H0XHfd2VufGjX7NjUyeue78sD0bRIoKSGjGqO+F5nSvL6jN48NAU7esdmtFEYxZXwObLtt3MJ/kHS0jASMW3g==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "engines": { - "node": ">=12" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.67.4.tgz", + "integrity": "sha512-osRHQbE55pZpCLetpMsFmhkapyZnAUH73qRKMh+npi3boUom6u6hdaTTPSxlInXxwJHsn9r2uDhdz0V7Yoxx2A==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=20.19.0" - } + "optional": true, + "os": [ + "openbsd" + ] }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.67.4.tgz", + "integrity": "sha512-95+exYEyOwrZePsE0czi4q7X5lxKPa21+lmyAZlwbYENITQ0Unk4HAQAFp/p+KhXBHBx9mUABXRYjOC5A1wY3Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "optional": true, + "os": [ + "openharmony" + ] }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.67.4.tgz", + "integrity": "sha512-FOXOcKhNQpO4Po+Ynan6IbtM67SrXZbgpRJWVYwz53CT5veI7sVzDwVBmWS65N5Imv+wK3SVhIPAl+C5DXXNCg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.67.4.tgz", + "integrity": "sha512-cklKh0gJOkAZQcWziQa3hrjxZKN+PCHZ7SPTyGJDAiBVr05ZXlEjGFCG7zFJMaVibxsmzAe1FimN4u/HBns9+Q==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.67.4.tgz", + "integrity": "sha512-AegwxJPc9bvUp8fQtlsUHkFMOMkGylWU7glyL+YD4vwG+QaYoGXYLSsQoeTD7kvoLZrVlMWNVhTg1dedY5C1VQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.67.4.tgz", + "integrity": "sha512-RJZnrwTWj7Iq2ooBwoGbDdC65tDwYawneGcAfFMJqVUrRZMcskka6nTkBpXR/47G7kzn3EW2qupExnaBy11vwg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/check-error": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } + "license": "MIT" }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" } }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@types/estree": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz", + "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.5.tgz", + "integrity": "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "undici-types": "~6.21.0" } }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "dev": true, "license": "MIT" }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/@types/react": { + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", "dev": true, "license": "MIT", "dependencies": { - "dequal": "^2.0.0" + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://opencollective.com/vitest" } }, - "node_modules/dts-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-3.0.0.tgz", - "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==", + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", "dev": true, "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" }, "funding": { - "url": "https://github.com/sponsors/sxzz" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "oxc-resolver": ">=11.0.0" + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "peerDependenciesMeta": { - "oxc-resolver": { + "msw": { + "optional": true + }, + "vite": { "optional": true } } }, - "node_modules/empathic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", - "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", - "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.2", - "@esbuild/android-arm": "0.28.2", - "@esbuild/android-arm64": "0.28.2", - "@esbuild/android-x64": "0.28.2", - "@esbuild/darwin-arm64": "0.28.2", - "@esbuild/darwin-x64": "0.28.2", - "@esbuild/freebsd-arm64": "0.28.2", - "@esbuild/freebsd-x64": "0.28.2", - "@esbuild/linux-arm": "0.28.2", - "@esbuild/linux-arm64": "0.28.2", - "@esbuild/linux-ia32": "0.28.2", - "@esbuild/linux-loong64": "0.28.2", - "@esbuild/linux-mips64el": "0.28.2", - "@esbuild/linux-ppc64": "0.28.2", - "@esbuild/linux-riscv64": "0.28.2", - "@esbuild/linux-s390x": "0.28.2", - "@esbuild/linux-x64": "0.28.2", - "@esbuild/netbsd-arm64": "0.28.2", - "@esbuild/netbsd-x64": "0.28.2", - "@esbuild/openbsd-arm64": "0.28.2", - "@esbuild/openbsd-x64": "0.28.2", - "@esbuild/openharmony-arm64": "0.28.2", - "@esbuild/sunos-x64": "0.28.2", - "@esbuild/win32-arm64": "0.28.2", - "@esbuild/win32-ia32": "0.28.2", - "@esbuild/win32-x64": "0.28.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "tinyrainbow": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", - "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fflate": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", - "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/get-tsconfig": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.5.tgz", - "integrity": "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==", + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "engines": { - "node": ">=20.20.0" + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://opencollective.com/vitest" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" + "tinyspy": "^4.0.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/vitest" } }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/vitest" } }, - "node_modules/hookable": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", - "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "node_modules/@xterm/addon-serialize": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0.tgz", + "integrity": "sha512-uteyTU1EkrQa2Ux6P/uFl2fzmXI46jy5uoQMKEOM0fKTyiW7cSn0WrFenHm5vO5uEXX/GpwW/FgILvv3r0WbkA==", "dev": true, "license": "MIT" }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/immer": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", - "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-without-cache": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", - "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", - "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/katex": { - "version": "0.16.47", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", - "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", + "node_modules/@xterm/headless": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-6.0.0.tgz", + "integrity": "sha512-5Yj1QINYCyzrZtf8OFIHi47iQtI+0qYFPHmouEfG8dHNxbZ9Tb9YGSuLcsEwj9Z+OL75GJqPyJbyoFer80a2Hw==", "dev": true, - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } + "workspaces": [ + "addons/*" + ] }, - "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "node_modules/@yuku-codegen/binding-android-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.8.7.tgz", + "integrity": "sha512-C/0zV5IhgVdYhGJTwrY0v8dknxlhiKwtVJkMUaexu9/QvRmzlV4vfU3hZlUSgqc2BxQHntL1mCVbDq8j0FRFDw==", "cpu": [ "arm64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "node_modules/@yuku-codegen/binding-darwin-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.8.7.tgz", + "integrity": "sha512-/u+REDMI4a0/lsJXTM4c53/w31OGZLOReZIyg62uhgLs0kc8NHsj/nOcxTdlQjq5gi0zhdkccD9LaLTXcdzPvw==", "cpu": [ "arm64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "node_modules/@yuku-codegen/binding-darwin-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.8.7.tgz", + "integrity": "sha512-sMMzFOwCo4WXR+/6zIBThOocSC50iIIZZdfiIDbaLvj0Ax/rWt/iavyfEAqajyvzydLyCqR/ZItdLWSRlu1umw==", "cpu": [ "x64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "node_modules/@yuku-codegen/binding-freebsd-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.8.7.tgz", + "integrity": "sha512-MpdpKXix9P+Y1rKgjvcNeNtGjXeL1CmttNhYINrWls8kRpm4xM/oBGTmn6w7to8lAlwj5jm8q03dQPl5mRv4Qw==", "cpu": [ "x64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "node_modules/@yuku-codegen/binding-linux-arm-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.7.tgz", + "integrity": "sha512-rr1srFLlPAmC1vtxfc9C1YLDe3iH09YjfSeeIidBqKhzx1MATjOAq4mjlRUOnhr/L27MotWIYOFKwVsd5JZFOg==", "cpu": [ "arm" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, - "license": "MPL-2.0", + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-arm-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.7.tgz", + "integrity": "sha512-eAufXh8qBRpiSO6ueaMDL+yyoXIGLhpUce72YbcACtZU2qhExwBIJyEtQf5kH2Ki0X2aqkSjSfog4OPtKXan3Q==", + "cpu": [ + "arm" ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.7.tgz", + "integrity": "sha512-gw4w6wPoHObBrdIC4duVWLmJOvpdE25j5D7yrM5mACNlK4klRz/lv8hK+ssQk9EJHBgZjSaqZIJVFgqNYbfv7A==", "cpu": [ "arm64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "libc": [ "glibc" ], - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "node_modules/@yuku-codegen/binding-linux-arm64-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.7.tgz", + "integrity": "sha512-L68N6Y4XkqcIaKo3Ra88JEvBEH4AHff44A4INcrxeVWZ8CZtu2tCpfVxe3hR8qQQMcvBSQlDn24KpkCKEhVvfA==", "cpu": [ "arm64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "libc": [ "musl" ], - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "node_modules/@yuku-codegen/binding-linux-x64-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.7.tgz", + "integrity": "sha512-dzyAbltJmf3Cqlb8HcFuYIf5Yn0fl1vTr3XJ9HiVNNvOlhqPSArOqtw9vI1p6/VTXTjrMLXlU+s+/kNHiIy/Cw==", "cpu": [ "x64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "libc": [ "glibc" ], - "license": "MPL-2.0", + "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + ] }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "node_modules/@yuku-codegen/binding-linux-x64-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.7.tgz", + "integrity": "sha512-Otw4MH3404q0Bbvl+YTdW9aoUV5vXmUw8260bWvt1XlaoIX/ceSgI4ygheRDMfBPoHt6FDayQaO9OLVUZAgkFA==", "cpu": [ "x64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "libc": [ "musl" ], - "license": "MPL-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-win32-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.8.7.tgz", + "integrity": "sha512-qo/jyrzryiBuKEsFiuWaBCBe3tRMynQ0qFWFgOEjcCMQeZfBm+wKiVEUEFXXLc7bh8YezguAWp0Mtnhq4ARNyA==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@yuku-codegen/binding-win32-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.8.7.tgz", + "integrity": "sha512-D5lDsVDx6m00E6bWySlWdH72Ca4TPSaphDqB6QjU6MpuNLIJqoGoatYyq2rOmBE8Zv/kunot/o58KGL03P3eiA==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@yuku-parser/binding-android-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.8.7.tgz", + "integrity": "sha512-eGKYiUDX7Y0V7tDTmg+JTVnXnjMqfXXsorZ+EDf5kxwchQ3Or1HS14MzI2fw+jFhHR85fCWt+mtX33Yao73hIQ==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@yuku-parser/binding-darwin-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.8.7.tgz", + "integrity": "sha512-Re0RHelKLnjEURulY2/KxW+Ngb8zuNA4BRZuMwgGQNzVumT6u4U2N2hc01oeYVNVof0i7GrXE4UCNBgbpRRnjQ==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@yuku-parser/binding-darwin-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.8.7.tgz", + "integrity": "sha512-Hn8DROtQkjlA1ACbPgj4a7eP9IuVOI504oiTwpkWPbpaDWD9KdmnVYCqW+1LfenNK/g7O9NhWGpXEdaCNX7lIA==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@yuku-parser/binding-freebsd-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.8.7.tgz", + "integrity": "sha512-bAP2OV8wRuzplX/jYxv9+vvqQT8JxyNphI8fLfXGL054Xs+4/J5u33cIm3y4rxY8rdoLmmdiJs2Tq7r7lrDRfA==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@yuku-parser/binding-linux-arm-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.7.tgz", + "integrity": "sha512-kTYwJQQgmZeAWdDIWabiReIZMpmfLueIj1tCmjStUtFGhR1Z0qwxonKVfUC4N7h/VhGGzLZ//7O1kgt1QKqgCg==", + "cpu": [ + "arm" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-parser/binding-linux-arm-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.7.tgz", + "integrity": "sha512-uL4jE8HPT2BLlxAXyD10LqgPuXa9eDa0BKpCdSANmzIJghq/2eZo3/gQNtaxPZMupWoxjYzSad9IXrwu7aYPXQ==", + "cpu": [ + "arm" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-parser/binding-linux-arm64-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.7.tgz", + "integrity": "sha512-3gVN4pWSKZmXiNX7cU164dR9MPvesCHnlH6nPfpK+yQsCuYphjKKplcb4SnZBrhiqmXbgb2HR0c2TS0IZUPhgA==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-parser/binding-linux-arm64-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.7.tgz", + "integrity": "sha512-S0mwfEjoLpxzXeZw802Wa4RaELsQiPtWqG6INcy8j4GtvNFtl4LCX3eGO1XLn9pyLAISLzTRyU3zUCBUPin8lg==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-parser/binding-linux-x64-gnu": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.7.tgz", + "integrity": "sha512-lnbWdPmerE5D1uH1G4IEZKnPzCrWCStRGrtgpSIe1RibAo5bZIjDbbbPYXmMHCEh4F+x/JaJpElh26a3r+BPbg==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-parser/binding-linux-x64-musl": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.7.tgz", + "integrity": "sha512-769uwndMvMzUvATWbAcEvyLHKA+DzhHSCl/obBUrRdYfRo26yxui6S8y3z7uJ+Naup7UKrDxrpK7OnQkxkl9KQ==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@yuku-parser/binding-win32-arm64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.8.7.tgz", + "integrity": "sha512-mEB/9PlaAkisJ6KWGz0zvywXoU6+80dTlR2LwS7s/jcXXoU6fm2+sitBZXtqu3+Q4DcDgPxM45uWMCzPs0TSRw==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@yuku-parser/binding-win32-x64": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.8.7.tgz", + "integrity": "sha512-8vNB2DP0ou61nGb8tc/qfi41gfyDXz1MHr2zqL3nR+cJ6CEbiuWV/l/a/vv151gCgiZLLAyGkQGENpozdg716w==", + "cpu": [ + "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@yuku-toolchain/types": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.7.tgz", + "integrity": "sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansis": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.5.0.tgz", + "integrity": "sha512-KwIVkfFfJSSzBmZhDGuTmkhWqTdyB5oNVzzznBJbBZ5bZtHiqSrcugRF0RKJKT4Ss3d7ZrcjnlFVDlQNmtWfWw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 12.0.0" + "node": ">=14" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cac/-/cac-7.1.0.tgz", + "integrity": "sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "destroy": "1.2.0", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/dts-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-3.0.0.tgz", + "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "oxc-resolver": ">=11.0.0" + }, + "peerDependenciesMeta": { + "oxc-resolver": { + "optional": true + } + } + }, + "node_modules/empathic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.1.0.tgz", + "integrity": "sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-10.2.1.tgz", + "integrity": "sha512-/Bofl3ZBh2Q4/PG0W63qFzP5vDAypi8Zc90UWTBzaDNIYiX7apPOd0N6L8hG8CojUdq4V51adu8BObP+iVsSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "figures": "^6.1.0", + "get-stream": "^9.0.1", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.3.1", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "which-command": "^0.1.0", + "yoctocolors": "^2.2.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz", + "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" } }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MPL-2.0", + "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.5.tgz", + "integrity": "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==", "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "resolve-pkg-maps": "^1.0.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "node_modules/hookable": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.2.tgz", + "integrity": "sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==", "dev": true, "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "node_modules/import-without-cache": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.1.tgz", + "integrity": "sha512-vXoV9PjKHEednCUu01e98TkImxy67e3BJXbTIOmIq4Hyzw3IAwYRcuPkfeTzJzwyyts4kjuA73x+pWJLc4f86A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "engines": { + "node": "^22.18.0 || >=24.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "node_modules/ipaddr.js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", + "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 10" } }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-gfm-footnote": { + "node_modules/is-unicode-supported": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "argparse": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "node_modules/jsbi": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", + "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", "dev": true, + "license": "Apache-2.0" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/koffi": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.1.1.tgz", + "integrity": "sha512-mRX6AMeeKCxSOeOopqAcLAl5jcNvge7NAG8l7rF/8gGJATI0tdHFYjteIdE0mGOtWdsrJOij+PjnP8Q9c1gwgA==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://liberapay.com/Koromix" + }, + "optionalDependencies": { + "@koromix/koffi-darwin-arm64": "3.1.1", + "@koromix/koffi-darwin-x64": "3.1.1", + "@koromix/koffi-freebsd-arm64": "3.1.1", + "@koromix/koffi-freebsd-ia32": "3.1.1", + "@koromix/koffi-freebsd-x64": "3.1.1", + "@koromix/koffi-linux-arm64": "3.1.1", + "@koromix/koffi-linux-ia32": "3.1.1", + "@koromix/koffi-linux-loong64": "3.1.1", + "@koromix/koffi-linux-riscv64": "3.1.1", + "@koromix/koffi-linux-x64": "3.1.1", + "@koromix/koffi-openbsd-ia32": "3.1.1", + "@koromix/koffi-openbsd-x64": "3.1.1", + "@koromix/koffi-win32-arm64": "3.1.1", + "@koromix/koffi-win32-ia32": "3.1.1", + "@koromix/koffi-win32-x64": "3.1.1" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", "dev": true, - "license": "MIT", + "license": "MPL-2.0", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" } }, - "node_modules/mdast-util-math": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", - "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "longest-streak": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.1.0", - "unist-util-remove-position": "^5.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "libc": [ + "glibc" ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" } }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "node_modules/mime": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.2.tgz", + "integrity": "sha512-ikRzZ2RwbUVDyL9SsU0f2Phcmav4yq5r8faH5ZZKHtOZrMBLnrQOrj0uvqZ5R1uQnj+RO7Wcklw/lAf81mP9LQ==", "dev": true, "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "https://github.com/sponsors/broofa" ], "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" } }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } + "license": "MIT" }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "node_modules/node-addon-native-custom-loader": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-native-custom-loader/-/node-addon-native-custom-loader-0.1.9.tgz", + "integrity": "sha512-Zh87aubSc1UF8CzZsRws1KtSwXiPDH0tbcg8V/2OA8Tcq9yGJRESFcEOC5NGLFama5IGfC3aJhubZbrj9Un2qA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "node_modules/node-addon-require-builtin": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin/-/node-addon-require-builtin-0.1.9.tgz", + "integrity": "sha512-BCxXCMZDs/VLLh64SwKNw/me7Qx1I7Be4qxWwYVRRm8tJoOB8fL7qg6CmXhSXeUqsKt72t8RaKCX4EN+5nocVg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "node-addon-require-builtin-darwin-arm64": "0.1.9", + "node-addon-require-builtin-darwin-x64": "0.1.9", + "node-addon-require-builtin-linux-arm64-gnu": "0.1.9", + "node-addon-require-builtin-linux-arm64-musl": "0.1.9", + "node-addon-require-builtin-linux-x64-gnu": "0.1.9", + "node-addon-require-builtin-linux-x64-musl": "0.1.9", + "node-addon-require-builtin-win32-arm64-msvc": "0.1.9", + "node-addon-require-builtin-win32-ia32-msvc": "0.1.9", + "node-addon-require-builtin-win32-x64-msvc": "0.1.9" + } + }, + "node_modules/node-addon-require-builtin-darwin-arm64": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-darwin-arm64/-/node-addon-require-builtin-darwin-arm64-0.1.9.tgz", + "integrity": "sha512-n45xEILQVOLZ2hVhzRXesTMYS4odHquyI/B/IkPMPUCONa8PjNfBag6lYBH4wDrhgpLNNBwMsUD8d8O/13QPPA==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "node_modules/node-addon-require-builtin-darwin-x64": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-darwin-x64/-/node-addon-require-builtin-darwin-x64-0.1.9.tgz", + "integrity": "sha512-Sm4Liqh1uo9zgJB2F/pACPPZdHu+fj9Qniyr1Q99dDQB0v71VgZgkAgv3K0/E1iPQBlZq9rakFkY7MGUIfWc0A==", + "cpu": [ + "x64" ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "license": "MIT" + "dependencies": { + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" + } }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "node_modules/node-addon-require-builtin-linux-arm64-gnu": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-arm64-gnu/-/node-addon-require-builtin-linux-arm64-gnu-0.1.9.tgz", + "integrity": "sha512-ToU4wGtOD/069i2y4fJ3cjDJiiWtcjSQTZMf0YKlotb5BmTM7FjhR3X1aub8J/YjlOwl6665J/XAYuvCaDO5sA==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "libc": [ + "glibc" ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "dependencies": { - "micromark-util-symbol": "^2.0.0" + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "node_modules/node-addon-require-builtin-linux-arm64-musl": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-arm64-musl/-/node-addon-require-builtin-linux-arm64-musl-0.1.9.tgz", + "integrity": "sha512-85Z5Avp++wfa9iiTIH8LC/r6qvlC/CiwpifiwIz0gYQ9PzajTSkz06gX7YDqf1oUqWYxU9uwNEOmo7mktHOOfA==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "libc": [ + "musl" ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "dependencies": { - "micromark-util-types": "^2.0.0" + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "node_modules/node-addon-require-builtin-linux-x64-gnu": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-x64-gnu/-/node-addon-require-builtin-linux-x64-gnu-0.1.9.tgz", + "integrity": "sha512-fh3K3/JvBfSYwU8vEOpp4Wdp4N/jX0EnZYq5GsaftlQin1FVqgve/yDNoh+asxBMOQyHOG8F4dXlV1WCierrfg==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "libc": [ + "glibc" ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "node_modules/node-addon-require-builtin-linux-x64-musl": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-x64-musl/-/node-addon-require-builtin-linux-x64-musl-0.1.9.tgz", + "integrity": "sha512-B6fu/5xmbRxnifM7nWz0IESkYnUl8dwFZmRDMsxdhzv2nb+EtBRFAXg4lf73qhX3yoZD4SnWJILBQMlIAwBCzw==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "libc": [ + "musl" ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" } }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "node_modules/node-addon-require-builtin-win32-arm64-msvc": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-arm64-msvc/-/node-addon-require-builtin-win32-arm64-msvc-0.1.9.tgz", + "integrity": "sha512-FOQuzNe8B1BANu886rJgdbQuRxPGUQmewkykw87wSr32U0ibQ3AWGuUM/Gh7LG4RekjFaifj7gEI/tq2+6GU6g==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "MIT" + "dependencies": { + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" + } }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "node_modules/node-addon-require-builtin-win32-ia32-msvc": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-ia32-msvc/-/node-addon-require-builtin-win32-ia32-msvc-0.1.9.tgz", + "integrity": "sha512-N29P0kmIBT6hnkNNFYzxn+o9ydT6OYZe9RFAi8dSxV1rNSul1FlxtuKWYe8w2sQpbQGYuGDEtpOwdeFtq2iFTg==", + "cpu": [ + "ia32" + ], "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "MIT" + "dependencies": { + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20 <23" + } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/node-addon-require-builtin-win32-x64-msvc": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-x64-msvc/-/node-addon-require-builtin-win32-x64-msvc-0.1.9.tgz", + "integrity": "sha512-+i6N4A7m7txjbw8pDYESdWXiKO9EEVq0SzTzwPS0WZuV4F1MzQnaDJwJJnO7T6zAc0BvqHXBOkpharCrUjFhbQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "dependencies": { + "node-addon-native-custom-loader": "0.1.9" + }, + "engines": { + "node": ">=20" + } }, - "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -4864,23 +5627,47 @@ "node": ">=12.20.0" } }, - "node_modules/oniguruma-parser": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", - "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "dev": true, "license": "MIT" }, - "node_modules/oniguruma-to-es": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", - "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, "license": "MIT", - "dependencies": { - "oniguruma-parser": "^0.12.2", - "regex": "^6.1.0", - "regex-recursion": "^6.0.2" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pathe": { @@ -4921,9 +5708,9 @@ } }, "node_modules/postcss": { - "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", "dev": true, "funding": [ { @@ -4941,23 +5728,28 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.17", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "node_modules/pretty-ms": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.1.tgz", + "integrity": "sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==", "dev": true, "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/quansync": { @@ -5004,33 +5796,16 @@ "react": "^18.3.1" } }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -5041,14 +5816,31 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve.exports": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.4.tgz", + "integrity": "sha512-zepuGL0ulf+nt+XaFrlKeaiTJeyPFPLLY62+ncq1/VTHBdt3HsfXOH60priZ6tnXQozdGcDeIF5JVTanvIcYWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", + "dev": true, + "license": "MIT" + }, "node_modules/rolldown": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.6.tgz", - "integrity": "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.16.tgz", + "integrity": "sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.147.0", + "@oxc-project/types": "=0.156.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -5058,21 +5850,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.6", - "@rolldown/binding-android-arm64": "1.2.6", - "@rolldown/binding-darwin-arm64": "1.2.6", - "@rolldown/binding-darwin-x64": "1.2.6", - "@rolldown/binding-freebsd-x64": "1.2.6", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", - "@rolldown/binding-linux-arm64-gnu": "1.2.6", - "@rolldown/binding-linux-arm64-musl": "1.2.6", - "@rolldown/binding-linux-ppc64-gnu": "1.2.6", - "@rolldown/binding-linux-s390x-gnu": "1.2.6", - "@rolldown/binding-linux-x64-gnu": "1.2.6", - "@rolldown/binding-linux-x64-musl": "1.2.6", - "@rolldown/binding-openharmony-arm64": "1.2.6", - "@rolldown/binding-win32-arm64-msvc": "1.2.6", - "@rolldown/binding-win32-x64-msvc": "1.2.6" + "@rolldown/binding-android-arm-eabi": "1.2.16", + "@rolldown/binding-android-arm64": "1.2.16", + "@rolldown/binding-darwin-arm64": "1.2.16", + "@rolldown/binding-darwin-x64": "1.2.16", + "@rolldown/binding-freebsd-x64": "1.2.16", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.16", + "@rolldown/binding-linux-arm64-gnu": "1.2.16", + "@rolldown/binding-linux-arm64-musl": "1.2.16", + "@rolldown/binding-linux-ppc64-gnu": "1.2.16", + "@rolldown/binding-linux-s390x-gnu": "1.2.16", + "@rolldown/binding-linux-x64-gnu": "1.2.16", + "@rolldown/binding-linux-x64-musl": "1.2.16", + "@rolldown/binding-openharmony-arm64": "1.2.16", + "@rolldown/binding-win32-arm64-msvc": "1.2.16", + "@rolldown/binding-win32-x64-msvc": "1.2.16" } }, "node_modules/rolldown-plugin-dts": { @@ -5118,13 +5910,13 @@ } }, "node_modules/rollup": { - "version": "4.63.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.0.tgz", - "integrity": "sha512-T5vnZ2y4QqC3/4P+w2+JO+Q/OVdnPsv4XcSYJYMEn0R9/jjl5AgLwO9LAZMzP2lN71O6pypn91rB7lDstUkfrQ==", + "version": "4.67.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.67.4.tgz", + "integrity": "sha512-Lsv3oKcz5jgOQJej/p7nfwbVEdAbDT+z6OPf/SCdI+nF+q2ENp0pTKT35ZwXAmH8g45mfrIiJeEyAqKYSYoL9Q==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.9" + "@types/estree": "^1.0.10" }, "bin": { "rollup": "dist/bin/rollup" @@ -5135,34 +5927,69 @@ }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.0", - "@rollup/rollup-android-arm64": "4.63.0", - "@rollup/rollup-darwin-arm64": "4.63.0", - "@rollup/rollup-darwin-x64": "4.63.0", - "@rollup/rollup-freebsd-arm64": "4.63.0", - "@rollup/rollup-freebsd-x64": "4.63.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.0", - "@rollup/rollup-linux-arm-musleabihf": "4.63.0", - "@rollup/rollup-linux-arm64-gnu": "4.63.0", - "@rollup/rollup-linux-arm64-musl": "4.63.0", - "@rollup/rollup-linux-loong64-gnu": "4.63.0", - "@rollup/rollup-linux-loong64-musl": "4.63.0", - "@rollup/rollup-linux-ppc64-gnu": "4.63.0", - "@rollup/rollup-linux-ppc64-musl": "4.63.0", - "@rollup/rollup-linux-riscv64-gnu": "4.63.0", - "@rollup/rollup-linux-riscv64-musl": "4.63.0", - "@rollup/rollup-linux-s390x-gnu": "4.63.0", - "@rollup/rollup-linux-x64-gnu": "4.63.0", - "@rollup/rollup-linux-x64-musl": "4.63.0", - "@rollup/rollup-openbsd-x64": "4.63.0", - "@rollup/rollup-openharmony-arm64": "4.63.0", - "@rollup/rollup-win32-arm64-msvc": "4.63.0", - "@rollup/rollup-win32-ia32-msvc": "4.63.0", - "@rollup/rollup-win32-x64-gnu": "4.63.0", - "@rollup/rollup-win32-x64-msvc": "4.63.0", + "@rollup/rollup-android-arm-eabi": "4.67.4", + "@rollup/rollup-android-arm64": "4.67.4", + "@rollup/rollup-android-x64": "4.67.4", + "@rollup/rollup-darwin-arm64": "4.67.4", + "@rollup/rollup-darwin-x64": "4.67.4", + "@rollup/rollup-freebsd-arm64": "4.67.4", + "@rollup/rollup-freebsd-x64": "4.67.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.67.4", + "@rollup/rollup-linux-arm-musleabihf": "4.67.4", + "@rollup/rollup-linux-arm64-gnu": "4.67.4", + "@rollup/rollup-linux-arm64-musl": "4.67.4", + "@rollup/rollup-linux-loong64-gnu": "4.67.4", + "@rollup/rollup-linux-loong64-musl": "4.67.4", + "@rollup/rollup-linux-ppc64-gnu": "4.67.4", + "@rollup/rollup-linux-ppc64-musl": "4.67.4", + "@rollup/rollup-linux-riscv64-gnu": "4.67.4", + "@rollup/rollup-linux-riscv64-musl": "4.67.4", + "@rollup/rollup-linux-s390x-gnu": "4.67.4", + "@rollup/rollup-linux-x64-gnu": "4.67.4", + "@rollup/rollup-linux-x64-musl": "4.67.4", + "@rollup/rollup-openbsd-x64": "4.67.4", + "@rollup/rollup-openharmony-arm64": "4.67.4", + "@rollup/rollup-win32-arm64-msvc": "4.67.4", + "@rollup/rollup-win32-ia32-msvc": "4.67.4", + "@rollup/rollup-win32-x64-gnu": "4.67.4", + "@rollup/rollup-win32-x64-msvc": "4.67.4", "fsevents": "~2.3.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -5173,24 +6000,17 @@ "loose-envify": "^1.1.0" } }, - "node_modules/shiki": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz", - "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==", + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "4.4.3", - "@shikijs/engine-javascript": "4.4.3", - "@shikijs/engine-oniguruma": "4.4.3", - "@shikijs/langs": "4.4.3", - "@shikijs/themes": "4.4.3", - "@shikijs/types": "4.4.3", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=20" + "node": ">=10" } }, "node_modules/siginfo": { @@ -5200,25 +6020,27 @@ "dev": true, "license": "ISC" }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, "node_modules/stackback": { @@ -5235,19 +6057,17 @@ "dev": true, "license": "MIT" }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-literal": { @@ -5270,6 +6090,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true, + "license": "MIT" + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -5278,9 +6105,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", "dev": true, "license": "MIT", "engines": { @@ -5325,9 +6152,9 @@ } }, "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.6.tgz", + "integrity": "sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==", "dev": true, "license": "MIT", "engines": { @@ -5344,17 +6171,6 @@ "tree-kill": "cli.js" } }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/tsdown": { "version": "0.22.14", "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.22.14.tgz", @@ -5428,6 +6244,13 @@ } } }, + "node_modules/tslib": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.9.1.tgz", + "integrity": "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA==", + "dev": true, + "license": "0BSD" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -5456,6 +6279,17 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/undici": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", + "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=22.19.0" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -5463,102 +6297,49 @@ "dev": true, "license": "MIT" }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" } }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" } }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">= 0.8" } }, "node_modules/verkit": { @@ -5574,40 +6355,10 @@ "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vite": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.7.tgz", + "integrity": "sha512-AHEzTORMbi7/7aXp7w7KZ5+DCUdSeLsJz0grY8xHpc9DHdYb0vQu6DqJfm2tOw3gDExNgPgnJTXxM6syYFHaCA==", "dev": true, "license": "MIT", "dependencies": { @@ -5712,6 +6463,31 @@ "node": ">=8" } }, + "node_modules/vite-node/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/vitest": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", @@ -5785,6 +6561,31 @@ } } }, + "node_modules/vitest/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/vitest/node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -5792,6 +6593,22 @@ "dev": true, "license": "MIT" }, + "node_modules/which-command": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/which-command/-/which-command-0.1.0.tgz", + "integrity": "sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==", + "dev": true, + "license": "MIT", + "bin": { + "which-command": "cli.js" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/which-command?sponsor=1" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -5810,9 +6627,9 @@ } }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.22.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.1.tgz", + "integrity": "sha512-oyL6OPYme/CmiFvNuGzeoxCJ4nOrZE2O1FwM9MWM1AsGri6nLXB2pg+lNA8aLeXMSav0J6eIVS1j6vUPzUtK9g==", "dev": true, "license": "MIT", "engines": { @@ -5831,6 +6648,42 @@ } } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yuku-ast": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.8.7.tgz", @@ -5896,50 +6749,9 @@ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } - }, - "node_modules/zustand": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.7.tgz", - "integrity": "sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "use-sync-external-store": "1.2.0" - }, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "@types/react": ">=16.8", - "immer": ">=9.0", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/dsh-plugins/ccteam-ui/package.json b/dsh-plugins/ccteam-ui/package.json index 75d20b1b..b8048bd8 100644 --- a/dsh-plugins/ccteam-ui/package.json +++ b/dsh-plugins/ccteam-ui/package.json @@ -28,12 +28,12 @@ "client": { "platform": "web", "inject": [ - "@deepseek-ai/dsh-client-runtime", "@deepseek-ai/dsh-client-locale", "@deepseek-ai/dsh-client-ui-layout", "@deepseek-ai/dsh-client-ui-sidebar", "@deepseek-ai/dsh-client-ui-settings", - "@deepseek-ai/dsh-client-ui-settings-plugins" + "@deepseek-ai/dsh-client-ui-renderer", + "@deepseek-ai/dsh-client-ui-workspace" ] } }, @@ -46,7 +46,7 @@ "lint:scan": "bash scripts/no-persona-scan.sh" }, "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "3.18.6-alpha.1" }, "optionalDependencies": { "@ccteam/engine-darwin-arm64": "0.13.0", @@ -58,21 +58,61 @@ "@deepseek-ai/schemastery" ], "devDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-runtime": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-layout": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-primitives": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-sidebar": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-slots": "0.1.1-rc.2", - "@deepseek-ai/dsh-client-ui-theme": "0.1.1-rc.2", - "@deepseek-ai/dsh-invariants": "0.1.1-rc.2", - "@deepseek-ai/dsh-settings": "0.1.1-rc.2", - "@deepseek-ai/dsh-typert-protocol": "0.1.1-rc.2", + "@deepseek-ai/cordis": "4.0.6-alpha.1", + "@deepseek-ai/dsh-agent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-account-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-gateway": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-job-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-remote-access": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-remotes": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-session-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-settings-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-terminal-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-workspace-controller": "0.2.2-alpha.2", + "@deepseek-ai/dsh-api-workspace-files": "0.2.2-alpha.2", + "@deepseek-ai/dsh-attachment": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-connection": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-file-upload": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-locale": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-product-analytics": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-shortcuts": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-store": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-conversation": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-layout": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-primitives": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-renderer": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-sidebar": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-slots": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-theme": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-trajectory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-client-ui-workspace": "0.2.2-alpha.2", + "@deepseek-ai/dsh-command-feedback": "0.2.2-alpha.2", + "@deepseek-ai/dsh-commands": "0.2.2-alpha.2", + "@deepseek-ai/dsh-cordis-host-runner": "0.2.2-alpha.2", + "@deepseek-ai/dsh-file-reference": "0.2.2-alpha.2", + "@deepseek-ai/dsh-goal": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-plugin-inventory": "0.2.2-alpha.2", + "@deepseek-ai/dsh-host-webserver": "0.2.2-alpha.2", + "@deepseek-ai/dsh-message-feedback": "0.2.2-alpha.2", + "@deepseek-ai/dsh-office-to-pdf": "0.2.2-alpha.2", + "@deepseek-ai/dsh-permission-presets": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-manager": "0.2.2-alpha.2", + "@deepseek-ai/dsh-plugin-market": "0.2.2-alpha.2", + "@deepseek-ai/dsh-schedule": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session": "0.2.2-alpha.2", + "@deepseek-ai/dsh-session-reference": "0.2.2-alpha.2", + "@deepseek-ai/dsh-settings": "0.2.2-alpha.2", + "@deepseek-ai/dsh-subagent": "0.2.2-alpha.2", + "@deepseek-ai/dsh-tools": "0.2.2-alpha.2", + "@deepseek-ai/dsh-typert-protocol": "0.2.2-alpha.2", + "@deepseek-ai/dsh-user-questions": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-code-language": "0.2.2-alpha.2", + "@deepseek-ai/dsh-util-file-drag": "0.2.2-alpha.2", "@types/node": "^22.13.0", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", diff --git a/dsh-plugins/ccteam-ui/src/bff.ts b/dsh-plugins/ccteam-ui/src/bff.ts index d2b822c0..917e774e 100644 --- a/dsh-plugins/ccteam-ui/src/bff.ts +++ b/dsh-plugins/ccteam-ui/src/bff.ts @@ -142,13 +142,7 @@ export interface BffOptions { sleep?: (ms: number, signal: AbortSignal) => Promise } -export interface WebServerLike { - register(route: { - kind: 'exact' | 'prefix' - path: string - handler: (req: IncomingMessage, res: ServerResponse) => void | Promise - }): () => void -} +export type WebServerLike = Pick export interface BffContext { webServer: WebServerLike diff --git a/dsh-plugins/ccteam-ui/src/client/Chat.tsx b/dsh-plugins/ccteam-ui/src/client/Chat.tsx index b3216884..4113b5c3 100644 --- a/dsh-plugins/ccteam-ui/src/client/Chat.tsx +++ b/dsh-plugins/ccteam-ui/src/client/Chat.tsx @@ -11,15 +11,15 @@ import { useEffect, useRef, useState } from 'react' import clsx from 'clsx' import { Button, - IconApiOutline14, - IconChevronDownOutline14, - IconCodeOutline16, - IconEditOutline16, - IconGlobeOutline14, - IconLoadingOutline16, - IconPaperclipOutline16, - IconSparkle16, - IconThinkOutline16, + IconApiOutlineRegular, + IconChevronDownOutlineRegular, + IconCodeOutlineRegular, + IconEditOutlineRegular, + IconGlobeOutlineRegular, + IconLoadingOutlineRegular, + IconPaperclipOutlineRegular, + IconSparkleRegular, + IconThinkOutlineRegular, MarkdownText, Menu, StateDot, @@ -124,7 +124,7 @@ function ModelSwitch({ node, chat, models, t, onSwitch }: { {node.vendor} {currentModel !== null && · {currentModel}} {currentEffort !== null && · {currentEffort}} - + )} /> @@ -134,18 +134,18 @@ function ModelSwitch({ node, chat, models, t, onSwitch }: { function StepIcon({ kind }: { kind: string }) { switch (kind) { case 'command_exec': - return + return case 'file_change': - return + return case 'web_search': - return + return case 'thinking': - return + return case 'tool_call': case 'tool_result': - return + return default: - return + return } } @@ -169,7 +169,7 @@ function Steps({ steps, selected, t, onSelect }: { steps: Step[]; selected: stri {step.summary} {step.status === 'completed' ? - : } + : } ))} @@ -192,7 +192,7 @@ function Attachments({ attachments }: { attachments: AttachmentRef[] | undefined rel="noreferrer" onClick={attachment.url === undefined ? event => event.preventDefault() : undefined} > - + {attachment.name} ) @@ -209,7 +209,7 @@ function ChoiceCard({ row, t, onResolve }: { const chosen = row.resolved === undefined ? undefined : row.options.find(o => o.id === row.resolved) return (

- {row.content !== '' &&
} + {row.content !== '' &&
} {chosen !== undefined ?
{t('chat.choice.resolved', { label: chosen.label })}
: ( @@ -282,7 +282,7 @@ function Row({ row, selectedStep, t, onSelectStep, onResolve }: { return (
- {row.content !== '' &&
} + {row.content !== '' &&
}
) diff --git a/dsh-plugins/ccteam-ui/src/client/Composer.tsx b/dsh-plugins/ccteam-ui/src/client/Composer.tsx index 99307103..ae06fdcb 100644 --- a/dsh-plugins/ccteam-ui/src/client/Composer.tsx +++ b/dsh-plugins/ccteam-ui/src/client/Composer.tsx @@ -10,11 +10,11 @@ import { useEffect, useRef, useState } from 'react' import type { ChangeEvent, KeyboardEvent, ReactNode } from 'react' import clsx from 'clsx' import { - IconCloseFill14, - IconLoadingOutline16, - IconPaperclipOutline16, - IconSendOutline16, - IconStopFill16, + IconCloseFillRegular, + IconLoadingOutlineRegular, + IconPaperclipOutlineRegular, + IconSendOutlineRegular, + IconStopFillRegular, Menu, } from '@deepseek-ai/dsh-client-ui-primitives' import type { MenuEntry } from '@deepseek-ai/dsh-client-ui-primitives' @@ -185,8 +185,8 @@ export function Composer(props: ComposerProps) { {props.attachments.map(attachment => ( {attachment.uploading === true - ? - : } + ? + : } {attachment.error !== undefined ? t('chat.attach.failed', { kind: attachment.error }) @@ -201,7 +201,7 @@ export function Composer(props: ComposerProps) { props.onRemoveAttachment?.(attachment.key) }} > - + )} @@ -234,7 +234,7 @@ export function Composer(props: ComposerProps) { fileRef.current?.click() }} > - + )} @@ -251,7 +251,7 @@ export function Composer(props: ComposerProps) { title={t('chat.stop')} onClick={onStop} > - + ) : ( @@ -263,7 +263,7 @@ export function Composer(props: ComposerProps) { disabled={!canSend} onClick={submit} > - {busy === true ? : } + {busy === true ? : } )}
diff --git a/dsh-plugins/ccteam-ui/src/client/Details.tsx b/dsh-plugins/ccteam-ui/src/client/Details.tsx index d4c197a1..bfcdab53 100644 --- a/dsh-plugins/ccteam-ui/src/client/Details.tsx +++ b/dsh-plugins/ccteam-ui/src/client/Details.tsx @@ -8,9 +8,9 @@ import { useEffect, useState } from 'react' import { Button, - IconCheckOutline14, - IconCloseOutline16, - IconCopyOutline16, + IconCheckOutlineRegular, + IconCloseOutlineRegular, + IconCopyOutlineRegular, Input, StateDot, writeClipboard, @@ -145,7 +145,7 @@ export function Details(props: DetailsProps) {
{step !== undefined ? t('details.step') : t('details.title')}
@@ -294,7 +294,7 @@ export function Details(props: DetailsProps) { ) @@ -118,7 +118,7 @@ export function EnginePanel({ t, status, pending, error, mode, onStart, onOpenSe
- {busy || status === null ? : } + {busy || status === null ? : } {title}
{reason !== null &&

{reason}

} @@ -139,7 +139,7 @@ export function EnginePanel({ t, status, pending, error, mode, onStart, onOpenSe
@@ -250,7 +250,7 @@ export function ProjectPanel({ t, busy, error, useWorkspaces, onCreate }: Projec
- + {t('firstrun.project.title')}

{t('firstrun.project.body')}

@@ -303,7 +303,7 @@ export function ProjectPanel({ t, busy, error, useWorkspaces, onCreate }: Projec size="md" type="button" disabled={busy} - icon={busy ? : undefined} + icon={busy ? : undefined} onClick={submit} > {busy ? t('firstrun.project.adding') : t('firstrun.project.add')} diff --git a/dsh-plugins/ccteam-ui/src/client/EntryButton.tsx b/dsh-plugins/ccteam-ui/src/client/EntryButton.tsx index 610eea92..4cfe1eff 100644 --- a/dsh-plugins/ccteam-ui/src/client/EntryButton.tsx +++ b/dsh-plugins/ccteam-ui/src/client/EntryButton.tsx @@ -7,7 +7,7 @@ * ccteam is not reachable; toggles the workbench through the one store. */ import clsx from 'clsx' -import { IconBranchOutline16, Tooltip } from '@deepseek-ai/dsh-client-ui-primitives' +import { IconBranchOutlineRegular, Tooltip } from '@deepseek-ai/dsh-client-ui-primitives' import type { EntryButtonProps } from './slots.js' import css from './workbench.module.css' @@ -34,7 +34,7 @@ export function EntryButton({ wide, useConsole, dispatch, t }: EntryButtonProps) dispatch({ type: 'toggle_panel' }) }} > - + {wide && {t('entry.title')}} {badge > 0 ? ( diff --git a/dsh-plugins/ccteam-ui/src/client/Hero.tsx b/dsh-plugins/ccteam-ui/src/client/Hero.tsx index a4dc26bd..222d854a 100644 --- a/dsh-plugins/ccteam-ui/src/client/Hero.tsx +++ b/dsh-plugins/ccteam-ui/src/client/Hero.tsx @@ -8,11 +8,11 @@ */ import { useState } from 'react' import { - IconAgentPresetOutline16, - IconBranchOutline16, - IconFolderOpen16, - IconSparkle16, - IconUserOutline16, + IconAgentPresetOutlineRegular, + IconBranchOutlineRegular, + IconFolderOpenRegular, + IconSparkleRegular, + IconUserOutlineRegular, } from '@deepseek-ai/dsh-client-ui-primitives' import type { ModelsCatalog, ProjectInfo, SpawnRequest, VendorAvailability } from '../shared/contract.js' import { titleFromTask } from './format.js' @@ -112,13 +112,13 @@ export function Hero(props: HeroProps) {
- + {t('hero.title')}
{noProjects ? t('hero.noProjects.body') : t('hero.subtitle')}
} + icon={} label={t('spawn.project')} value={draft.project} placeholder={noProjects ? t('hero.noProjects.title') : '…'} @@ -129,7 +129,7 @@ export function Hero(props: HeroProps) { }} /> } + icon={} label={t('spawn.vendor')} value={draft.vendor} placeholder="…" @@ -140,7 +140,7 @@ export function Hero(props: HeroProps) { }} /> } + icon={} label={t('spawn.role')} value={draft.role} placeholder={t('spawn.role.none')} @@ -168,7 +168,7 @@ export function Hero(props: HeroProps) { trailing={( <> } + icon={} label={t('spawn.model')} value={draft.model} placeholder={t('spawn.model.default')} diff --git a/dsh-plugins/ccteam-ui/src/client/Pickers.tsx b/dsh-plugins/ccteam-ui/src/client/Pickers.tsx index 3758acb5a4fb98126ed142f3270b101c4ee527e7..0b8575b28771e56c02a9c1341b1491a57865dd5f 100644 GIT binary patch delta 46 wcmew%)+D~cfsr>THN7+^u}DY3H#M(xazCT_=6c4(oa|8H$#R@xldZVz0DEZ, disabled: !canSpawn }, + { id: 'new', label: t('project.new'), icon: , disabled: !canSpawn }, { id: 'copy', label: t('project.copySlug') }, { type: 'separator', id: 'sep-1' }, { id: 'solo', label: t('project.solo') }, @@ -161,7 +161,7 @@ function ProjectHead({ slug, collapsed, total, count, canSpawn, t, onToggle, onA onClick={onToggle} > {slug} {total !== null && {total}} @@ -193,7 +193,7 @@ function ProjectHead({ slug, collapsed, total, count, canSpawn, t, onToggle, onA setMenuOpen(previous => !previous) }} > - + )} /> @@ -207,7 +207,7 @@ function ProjectHead({ slug, collapsed, total, count, canSpawn, t, onToggle, onA onAction('new') }} > - +
@@ -295,7 +295,7 @@ function SessionRow({ node, depth, active, activity, now, t, renaming, onSelect, }} onKeyDown={onRowKey} > - {depth > 0 && } + {depth > 0 && } {renaming @@ -358,7 +358,7 @@ function SessionRow({ node, depth, active, activity, now, t, renaming, onSelect, event.stopPropagation() }} > - + )} /> @@ -425,14 +425,14 @@ export function TeamColumn(props: TeamColumnProps) { variant="outline" size="md" className={css.newBtn} - icon={} + icon={} disabled={!props.canSpawn} onClick={props.onNew} > {t('tree.spawn')} @@ -461,7 +461,7 @@ export function TeamColumn(props: TeamColumnProps) {
{props.graphError !== null && graph === null && (
- +
{t('tree.error')}
diff --git a/dsh-plugins/ccteam-ui/src/client/Workbench.tsx b/dsh-plugins/ccteam-ui/src/client/Workbench.tsx index eac0473e..e165cac2 100644 --- a/dsh-plugins/ccteam-ui/src/client/Workbench.tsx +++ b/dsh-plugins/ccteam-ui/src/client/Workbench.tsx @@ -22,14 +22,14 @@ import { useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import { Button, - IconBranchOutline16, - IconChevronLeftOutline14, - IconCloseOutline16, - IconFullscreenOutline16, - IconInspectOutline12, - IconPanelLeftOutline16, - IconPlusOutline16, - IconWarningOutline16, + IconBranchOutlineRegular, + IconChevronLeftOutlineRegular, + IconCloseOutlineRegular, + IconFullscreenOutlineRegular, + IconInspectOutlineRegular, + IconPanelLeftOutlineRegular, + IconPlusOutlineRegular, + IconWarningOutlineRegular, StateDot, Tooltip, writeClipboard, @@ -131,7 +131,7 @@ function StateScreen({ state, dispatch, api, t }: { state: ConsoleState; dispatc if (phase === 'unconfigured') { return (
- +
{t('states.unconfigured.title')}
  1. {t('states.unconfigured.step1')}
  2. @@ -153,7 +153,7 @@ function StateScreen({ state, dispatch, api, t }: { state: ConsoleState; dispatc } return (
    - +
    {t('states.unreachable.title')}
    {t('states.unreachable.body')}
    @@ -647,7 +647,7 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'clear_selection' }) }} > - + ) @@ -663,12 +663,12 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'toggle_team' }) }} > - + )} - + {t('panel.title')} @@ -728,7 +728,7 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'select_new' }) }} > - + @@ -741,7 +741,7 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'toggle_details' }) }} > - + @@ -754,7 +754,7 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'toggle_mode' }) }} > - + @@ -766,7 +766,7 @@ export function Workbench({ useConsole, useWorkspaces, dispatch, api, t }: Workb dispatch({ type: 'close_panel' }) }} > - +
    diff --git a/dsh-plugins/ccteam-ui/src/client/index.tsx b/dsh-plugins/ccteam-ui/src/client/index.tsx index b8089ad3..70902c9f 100644 --- a/dsh-plugins/ccteam-ui/src/client/index.tsx +++ b/dsh-plugins/ccteam-ui/src/client/index.tsx @@ -18,7 +18,7 @@ * Seats: * 1. `sidebar.footer.action` — the entry button beside DSH's Settings trigger * 2. `shell.overlay` — the workbench (team tree / conversation / details) - * 3. `settings.plugin.item` — the ccteam settings card + * 3. `settings.section` — the ccteam settings card * * All network traffic goes through the host BFF (src/shared/contract.ts). */ @@ -38,7 +38,7 @@ import { CCTEAM_CARD, SettingsCardController } from './settings/form.js' export const name = 'ccteam-ui' /** Services required by this plugin (cordis fiber inject). */ -export const inject = ['slots', 'locale', 'settingsScope'] +export const inject = ['slots', 'locale'] function browserStorage(): StorageLike | undefined { try { @@ -52,7 +52,7 @@ function browserStorage(): StorageLike | undefined { /** * Plugin body: wire the store/api/stream and contribute the three seats. - * @param ctx - client cordis context (slots + locale + settingsScope services injected). + * @param ctx - client cordis context (slots and locale). */ export function apply(ctx: CcteamClientContext): void { ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ccteam-ui: dictionaries') @@ -137,21 +137,20 @@ export function apply(ctx: CcteamClientContext): void { inject: face, }, Workbench)) - // One card for the one ccteam settings namespace — every face of this plugin - // is configured from it. The configurable-plugins tab dispatches by namespace - // and renders nothing for one the Host does not serve, so the card is inert - // wherever the host half did not load. - const card = new SettingsCardController( - ctx.settingsScope.bind({ namespace: CCTEAM_CARD.namespace }), - CCTEAM_CARD, - ) - ctx.slots.inject('settings.plugin.item', () => ctx.slots.register({ - name: 'settings.plugin.item', - key: card.spec.namespace, - locale: NS, - // The card face plus the workbench store (its engine slice), the write - // path, and the BFF client — the 「引擎」 section is one seat of the same - // state the workbench header and first-run panel read. - inject: () => ({ ...card.inject(), hooks: { card, console: store }, dispatch: store.dispatch, api }), - }, SettingsCard)) + // Optional settings follow the native served-namespace and slot lifetimes. + ctx.inject(['configForms'], ctx => { + const card = new SettingsCardController( + ctx.configForms.get(CCTEAM_CARD.namespace), CCTEAM_CARD, ctx.configForms.describe(), + ) + ctx.effect(() => () => card.dispose(), 'ccteam-ui: settings form') + ctx.effect(() => ctx.configForms.whileServed([CCTEAM_CARD.namespace], () => + ctx.slots.inject('settings.section', () => ctx.slots.register({ + name: 'settings.section', + id: card.spec.namespace, + label: () => ctx.locale.bind(NS)('settings.card.title'), + locale: NS, + inject: () => ({ ...card.inject(), hooks: { card, console: store }, dispatch: store.dispatch, api }), + }, SettingsCard)), + ), 'ccteam-ui: settings section') + }) } diff --git a/dsh-plugins/ccteam-ui/src/client/locales.ts b/dsh-plugins/ccteam-ui/src/client/locales.ts index b8d4f5d8..ed8fe4d1 100644 --- a/dsh-plugins/ccteam-ui/src/client/locales.ts +++ b/dsh-plugins/ccteam-ui/src/client/locales.ts @@ -2,6 +2,8 @@ /** Simplified Chinese dictionary. */ export const zh = { + 'chat.footnotes': '脚注', + 'chat.copyCode': '复制代码', 'entry.title': 'ccteam', 'entry.label': '打开 ccteam 工作台', 'entry.badge': '{count} 个回合已完成', @@ -54,7 +56,7 @@ export const zh = { 'states.unreachable.title': '未连接到 ccteam', 'states.unreachable.body': '启动 daemon 后重试:', 'states.unconfigured.title': '还没配置 ccteam', - 'states.unconfigured.step1': '打开 DSH 设置 → 插件 → 插件配置 → ccteam-ui', + 'states.unconfigured.step1': '打开 DSH 设置 → ccteam-ui', 'states.unconfigured.step2': '填入 daemon URL 和你的 REST token(ccteam web → 设置 → 账户)', 'chat.working': '正在工作', 'chat.waiting': '等待你的决定', @@ -257,7 +259,7 @@ export const zh = { 'firstrun.engine.reason.ready': '引擎正常;启动、停止与日志在设置卡的「引擎」段。', 'firstrun.start': '启动引擎', 'firstrun.openSettings': '打开设置', - 'firstrun.settings.hint': '引擎设置在 DSH 设置 → 插件 → 插件配置 → ccteam-ui', + 'firstrun.settings.hint': '引擎设置在 DSH 设置 → ccteam-ui', 'firstrun.project.title': '添加工作区', 'firstrun.project.body': '把一个已有目录注册为 ccteam 项目;之后就能在这里为它新建会话。', 'firstrun.project.import': '从 DSH 导入', @@ -280,6 +282,8 @@ export type CcteamLocaleKey = keyof typeof zh /** English dictionary, checked complete against the zh key set. */ export const en = { + 'chat.footnotes': 'Footnotes', + 'chat.copyCode': 'Copy code', 'entry.title': 'ccteam', 'entry.label': 'Open the ccteam workbench', 'entry.badge': '{count} turns completed', @@ -332,7 +336,7 @@ export const en = { 'states.unreachable.title': 'Not connected to ccteam', 'states.unreachable.body': 'Start the daemon, then retry:', 'states.unconfigured.title': 'ccteam is not configured', - 'states.unconfigured.step1': 'Open DSH Settings → Plugins → Plugin configuration → ccteam-ui', + 'states.unconfigured.step1': 'Open DSH Settings → ccteam-ui', 'states.unconfigured.step2': 'Set the daemon URL and your REST token (ccteam web → Settings → Account)', 'chat.working': 'Working', 'chat.waiting': 'Waiting for your decision', @@ -535,7 +539,7 @@ export const en = { 'firstrun.engine.reason.ready': 'The engine is fine; start, stop and the log live in the settings card\'s Engine section.', 'firstrun.start': 'Start the engine', 'firstrun.openSettings': 'Open settings', - 'firstrun.settings.hint': 'Engine settings: DSH Settings → Plugins → Plugin configuration → ccteam-ui', + 'firstrun.settings.hint': 'Engine settings: DSH Settings → ccteam-ui', 'firstrun.project.title': 'Add a workspace', 'firstrun.project.body': 'Register an existing directory as a ccteam project; new sessions for it start here.', 'firstrun.project.import': 'Import from DSH', diff --git a/dsh-plugins/ccteam-ui/src/client/settings/EngineSection.tsx b/dsh-plugins/ccteam-ui/src/client/settings/EngineSection.tsx index 118502b7..c86af130 100644 --- a/dsh-plugins/ccteam-ui/src/client/settings/EngineSection.tsx +++ b/dsh-plugins/ccteam-ui/src/client/settings/EngineSection.tsx @@ -10,9 +10,9 @@ import { useEffect, useState } from 'react' import { Button, DisclosureRow, - IconCodeOutline16, - IconRightUpOutline14, - IconSettingsOutline14, + IconCodeOutlineRegular, + IconRightUpOutlineRegular, + IconSettingsOutlineRegular, Modal, } from '@deepseek-ai/dsh-client-ui-primitives' import type { EngineLogResponse } from '../../shared/contract.js' @@ -131,7 +131,7 @@ export function EngineSection({ t, engine, api, dispatch, autoStart, onAutoStart {status?.reachable === true && ( {t('engine.openWeb')} - + )}

    @@ -205,7 +205,7 @@ export function EngineSection({ t, engine, api, dispatch, autoStart, onAutoStart /> } + icon={} title={t('engine.advanced')} open={advancedOpen} expandable @@ -255,7 +255,7 @@ export function EngineSection({ t, engine, api, dispatch, autoStart, onAutoStart
} + icon={} title={t('engine.log')} open={logOpen} expandable diff --git a/dsh-plugins/ccteam-ui/src/client/settings/SettingsCard.tsx b/dsh-plugins/ccteam-ui/src/client/settings/SettingsCard.tsx index 9fab0ed5..21e5b9d6 100644 --- a/dsh-plugins/ccteam-ui/src/client/settings/SettingsCard.tsx +++ b/dsh-plugins/ccteam-ui/src/client/settings/SettingsCard.tsx @@ -13,7 +13,7 @@ */ import { useEffect, useId, useState } from 'react' import clsx from 'clsx' -import { Button, IconChevronDownOutline14 } from '@deepseek-ai/dsh-client-ui-primitives' +import { Button, IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives' import type { SettingsCardProps } from '../slots.js' import type { T } from '../slots.js' import { EngineSection } from './EngineSection.js' @@ -114,7 +114,7 @@ export function SettingsCard({ spec, useCard, useConsole, dispatch, api, edit, r {t(spec.descriptionKey)} {state.dirty && {t('settings.unsaved')}} - + {open && (
diff --git a/dsh-plugins/ccteam-ui/src/client/settings/form.ts b/dsh-plugins/ccteam-ui/src/client/settings/form.ts index 2ae30075..4f0a1f27 100644 --- a/dsh-plugins/ccteam-ui/src/client/settings/form.ts +++ b/dsh-plugins/ccteam-ui/src/client/settings/form.ts @@ -11,7 +11,10 @@ * `useCard` selector hook. Nothing here touches React or the wire directly; * the bound `SettingsScope` is the transport. */ -import type { SettingsScope } from '@deepseek-ai/dsh-client-runtime/client' +import type { ConfigForm, SettingsDescribeFace } from '@deepseek-ai/dsh-client-ui-settings/client' + +/** Only the operations this staged form consumes; upstream owns sync and persistence. */ +type SettingsScope = Pick, 'getSnapshot' | 'subscribe' | 'mutate'> import type { CcteamLocaleKey } from '../locales.js' /** One control of a card. */ @@ -140,6 +143,8 @@ export class SettingsCardController { private saving = false private failed = false private snapshot: CardState + private readonly disposers: Array<() => void> + private baseline: number | undefined /** * @param scope - the bound settings scope for this card's namespace. @@ -148,11 +153,20 @@ export class SettingsCardController { constructor( private readonly scope: SettingsScope
, readonly spec: CardSpec, + private readonly described: Pick, ) { this.snapshot = this.project() - scope.subscribe(() => { - this.publish() - }) + this.disposers = [scope.subscribe(() => this.publish()), described.subscribe(() => this.publish())] + } + + /** Release subscriptions when the plugin unloads. */ + dispose(): void { for (const dispose of this.disposers) dispose() } + + private stage(field: string, text: string): void { + if (this.staged.size === 0) this.baseline = this.scope.getSnapshot().revision + this.staged.set(field, text) + this.failed = false + this.publish() } /** @returns the current card state (stable reference until the next change). */ @@ -181,14 +195,10 @@ export class SettingsCardController { hooks: { card: this }, spec: this.spec, edit: (field, text) => { - this.staged.set(field, text) - this.failed = false - this.publish() + this.stage(field, text) }, reset: (field) => { - this.staged.set(field, '') - this.failed = false - this.publish() + this.stage(field, '') }, save: () => { void this.save() @@ -218,13 +228,13 @@ export class SettingsCardController { this.saving = true this.failed = false this.publish() - let threw = false + const before = this.scope.getSnapshot().revision try { - await this.scope.set(field, value) + this.failed = !await this.scope.mutate([{ op: 'set', path: [field], value }]) + if (!this.failed && this.baseline === before) this.baseline = this.scope.getSnapshot().revision } catch { - threw = true + this.failed = true } - this.failed = threw || booleanAt(this.scope.getSnapshot().value, field) !== value this.saving = false this.publish() } @@ -239,25 +249,15 @@ export class SettingsCardController { const plan = [...this.staged.entries()].map(([field, text]) => ({ field, text: text.trim(), kind: this.kindOf(field) })) this.saving = true this.publish() - let threw = false - for (const item of plan) { - if (item.kind === 'secret' && item.text === '') continue - try { - if (item.text === '') await this.scope.unset(item.field) - else await this.scope.set(item.field, item.text) - } catch { - // The scope's own contract is to reload Host state on a failed - // write; the read-back below is what decides whether this save landed. - threw = true - } + const ops = plan.filter(item => item.kind !== 'secret' || item.text !== '').map(item => + item.text === '' + ? { op: 'unset' as const, path: [item.field] } + : { op: 'set' as const, path: [item.field], value: item.text }) + try { + this.failed = ops.length > 0 && !await this.scope.mutate(ops, this.baseline) + } catch { + this.failed = true } - const after = this.scope.getSnapshot() - const landed = plan.every((item) => { - if (item.kind === 'secret') return item.text === '' || stringAt(after.value, item.field) !== '' - if (item.text === '') return !hasOwn(after.user, item.field) - return stringAt(after.value, item.field) === item.text - }) - this.failed = threw || !landed if (!this.failed) this.staged.clear() this.saving = false this.publish() @@ -284,7 +284,8 @@ export class SettingsCardController { const staged = this.staged.get(spec.field) const current = stringAt(snapshot.value, spec.field) if (spec.kind === 'secret') { - fields[spec.field] = { text: staged ?? '', overridden: false, configured: current !== '' } + const secrets = this.described.getSnapshot().view?.namespaces.find(row => row.ns === this.spec.namespace)?.secrets ?? [] + fields[spec.field] = { text: staged ?? '', overridden: false, configured: secrets.some(secret => secret.path.length === 1 && secret.path[0] === spec.field && secret.set) } continue } fields[spec.field] = { diff --git a/dsh-plugins/ccteam-ui/src/client/slots.ts b/dsh-plugins/ccteam-ui/src/client/slots.ts index b9476586..5bbc0882 100644 --- a/dsh-plugins/ccteam-ui/src/client/slots.ts +++ b/dsh-plugins/ccteam-ui/src/client/slots.ts @@ -8,17 +8,18 @@ * runtime edge (the client bundle purity gate only ever sees value imports). */ import type { InjectFace, PropsLocale, PropsRuntime, TranslateNS } from '@deepseek-ai/dsh-client-ui-slots' -import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client' +import type { Context as ClientContext } from '@deepseek-ai/cordis' +import type {} from '@deepseek-ai/dsh-client-ui-renderer/client' +import type {} from '@deepseek-ai/dsh-client-ui-workspace/client' // ctx.locale (register / bind). import type {} from '@deepseek-ai/dsh-client-locale/client' // 'shell.overlay' — the frame-wide floating layer (declared by ui-layout's root entry). import type {} from '@deepseek-ai/dsh-client-ui-layout/client' // 'sidebar.footer.action' — the seat beside Settings at the sidebar foot (declared by ui-sidebar). import type {} from '@deepseek-ai/dsh-client-ui-sidebar/client' -// ctx.settingsScope — the per-namespace settings scope binder. +// Native configuration forms and settings section slots. import type {} from '@deepseek-ai/dsh-client-ui-settings/client' -// 'settings.plugin.item' — one card per settings namespace (declared by ui-settings-plugins' configurable tab). -import type {} from '@deepseek-ai/dsh-client-ui-settings-plugins/client' +// 'settings.section' — one card per settings namespace (declared by ui-settings-plugins' configurable tab). import type { CcteamLocaleKey } from './locales.js' import type { ApiClient } from './api.js' import type { Action, ConsoleStore } from './store.js' @@ -66,11 +67,11 @@ export type EntryButtonProps = PropsRuntime<'sidebar.footer.action'> & InjectFac /** Composed props of the `shell.overlay` entry: face + `t` (the layer passes no owner props). */ export type WorkbenchProps = PropsRuntime<'shell.overlay'> & InjectFace & PropsLocale<'ccteam'> -/** Composed props of one `settings.plugin.item` card: the card face + `t`. */ -export type SettingsCardProps = PropsRuntime<'settings.plugin.item'> & InjectFace & PropsLocale<'ccteam'> +/** Composed props of one `settings.section` card: the card face + `t`. */ +export type SettingsCardProps = PropsRuntime<'settings.section'> & InjectFace & PropsLocale<'ccteam'> /** DSH's own workspace list, as the framework's global seat hands it to every slot component. */ export type UseWorkspaces = WorkbenchProps['useWorkspaces'] -/** The client context as this plugin sees it (locale + settingsScope merges pulled above). */ +/** The client context as this plugin sees it (locale + configForms merges pulled above). */ export type CcteamClientContext = ClientContext diff --git a/dsh-plugins/ccteam-ui/src/credentials.ts b/dsh-plugins/ccteam-ui/src/credentials.ts index a0e336c8..6dabfb93 100644 --- a/dsh-plugins/ccteam-ui/src/credentials.ts +++ b/dsh-plugins/ccteam-ui/src/credentials.ts @@ -15,8 +15,7 @@ export interface CcteamSessionMeta { /** Tool-approval posture for turns this transport owns. */ approvalMode?: 'skip' | 'hitl' /** - * DSH agent-preset id for `session/new` (`standard` | `code` | `minimal` | - * `cordis`). Absent = the vendor's own default. Never sent on + * Native DSH agent-preset id for `session/new`. Absent = the vendor's own default. Never sent on * `session/load`: a resumed session's preset is recovered from the vendor's * own storage, which stays authoritative if the human switched it. */ diff --git a/dsh-plugins/ccteam-ui/src/index.ts b/dsh-plugins/ccteam-ui/src/index.ts index 9f2bf594..9a630fa1 100644 --- a/dsh-plugins/ccteam-ui/src/index.ts +++ b/dsh-plugins/ccteam-ui/src/index.ts @@ -32,9 +32,8 @@ import { import { createEnrollmentBootstrap } from './host/engine/bootstrap.js' import { DEFAULT_DAEMON_URL, - UNCHECKED_STATUS, - registerCcteamSettings, - type CcteamSettings, + bindCcteamSettings, + CCTEAM_SETTINGS_FIELDS, } from './settings.js' import { CcteamCompletionNotifier, CcteamMcpClientPool, registerCcteamTools } from './tools.js' import { startDshSocketTransport } from './transport.js' @@ -45,7 +44,7 @@ export const name = 'ccteam-ui' * Module-level services: only what EVERY face needs. Per-face services are * injected below (see the file header). */ -export const inject = ['settings'] +export const inject: string[] = [] /** Services the tool + transport faces cannot work without. */ const HOST_SERVICES = ['agents', 'tools', 'agentDefaultModel'] @@ -60,42 +59,15 @@ const HOST_SERVICES = ['agents', 'tools', 'agentDefaultModel'] */ const WEB_SERVICES = ['webServer'] -/** - * The profile ROW config, as ccteam's materializer writes it and Cordis - * validates it. Deliberately NARROWER than the settings card: `autoStart` and - * `enginePath` are card-only. - * - * The reason is the same trap the `resolve()` helper below documents, in its - * boolean form. Cordis fills every schema default before `apply`, so a key - * listed here arrives with a value whether or not the row mentioned it — which - * is survivable for a string (empty means "not pinned") but not for a boolean: - * `autoStart` would arrive `true` for every profile and the user's `false` - * could never win. - */ -export interface Config extends Partial> { - completionPollIntervalMs?: number - completionMaxPolls?: number - transportSocket?: string -} - -export const Config: Schema = Schema.object({ - daemonUrl: Schema.string().default(DEFAULT_DAEMON_URL).description('ccteam daemon URL.'), - enrollment: Schema.string() - .default('') - .role('secret') - .description('Enrollment credential from ccteam config (tool surface).'), - restToken: Schema.string() - .default('') - .role('secret') - .description('Personal ccteam REST API token (ccteam web console → Account).'), - defaultProject: Schema.string() - .default('') - .description('Project slug new sessions land in when the panel does not name one.'), - connectionStatus: Schema.string().default(UNCHECKED_STATUS), +/** Runtime-only fields are static; user preferences are native live Config references. */ +export const Config = Schema.object({ + ...CCTEAM_SETTINGS_FIELDS, completionPollIntervalMs: Schema.number().default(5000), completionMaxPolls: Schema.number().default(720), - transportSocket: Schema.string().description('Unix socket path this plugin serves ACP on for ccteam. Empty = tool surface only.'), + transportSocket: Schema.string(), + engineManaged: Schema.boolean().default(false), }) +export type Config = ReturnType /** * Reported as ACP `agentInfo.version` and as the MCP client version. ccteam's @@ -117,90 +89,23 @@ export const PACKAGE_VERSION = '0.13.0' export const ENGINE_VERSION = '0.13.0' export interface ApplyContext extends BffContext { - /** - * Cordis's own "run once these services exist" hook (`ctx.inject`). Each - * face activates through it, so a profile without `webServer` still gets the - * tools and a profile without `agents` still gets the workbench. - */ inject(deps: readonly string[], body: (ctx: never) => void): unknown - settings?: { - register( - ns: string, - schema: Schema, - options?: { applies?: 'live' | 'restart'; base?: Partial }, - ): { get(): T } - } -} - -/** - * Resolve one field: the value the profile's patch row PINNED wins, otherwise - * the user's settings card decides. - * - * What counts as "pinned" is the whole function, and it has two halves — - * because Cordis validates the row against this plugin's `Config` schema and - * fills in every default BEFORE `apply` runs, so a row that mentioned nothing - * still arrives fully populated: - * - * - an EMPTY value is a blank, not a pin (shipped as a bug once: every - * credential field defaults to `''`, so a plain `??` never fell through and - * the settings card — the documented way a hand-started `dsh web` supplies - * its credentials — was silently dead); - * - a value equal to the SCHEMA DEFAULT is also a blank, for exactly the same - * reason. This half only bites fields whose default is not empty, which - * today means `daemonUrl`: its default is a real URL, so without this the - * card's daemon URL could never win either, and every profile would report - * itself as one whose engine somebody else owns. - * - * @param pinned - the value from the row config, if any. - * @param stored - the value from the settings card, if any. - * @param schemaDefault - what this field's schema fills a blank row with. - * @returns the effective value, or `undefined` when neither layer has one. - */ -function resolve( - pinned: string | undefined, - stored: string | undefined, - schemaDefault = '', -): string | undefined { - const named = (value: string | undefined): string | undefined => - typeof value === 'string' && value.trim() !== '' ? value : undefined - const row = named(pinned) - if (row !== undefined && row.trim() !== schemaDefault) return row - return named(stored) ?? row + get?(name: string): unknown + fiber?: { entry?: { id: string } } } /** * Plugin body: register the one settings namespace, then hand each face the * closures that resolve its configuration. * - * Both layers are read through closures on every call, so editing the card - * takes effect without a restart. Credentials never leave these closures. + * Native Config references are read through closures on every call, so edits + * take effect without a restart. Credentials never leave these closures. */ -export function apply(ctx: ApplyContext, config: Config = {}): void { - const settings = registerCcteamSettings(ctx, { - daemonUrl: config.daemonUrl, - enrollment: config.enrollment, - restToken: config.restToken, - defaultProject: config.defaultProject, - connectionStatus: config.connectionStatus, - }) - // The engine's lifetime is NOT this plugin's (PRD D1), so nothing below ever - // stops a daemon. `managed` and `pinnedDaemonUrl` are the two runtimes where - // it must not even start one — see host/engine/supervisor.ts's header. +export function apply(ctx: ApplyContext, config: Config = Config({})): void { + const settings = bindCcteamSettings(ctx, config) const environment = defaultEnvironment() const managed = isPinned(config.transportSocket) - /** - * The row describes an engine somebody else set up. A ccteam-materialized - * profile is recognized by the CREDENTIALS in its row — ccteam writes them, - * a human's `dsh plugin --profile add` never does — rather than by the daemon URL, - * whose schema default is present in every row and would otherwise mark - * every profile as somebody else's. - */ - const externallyOwned = - !managed && - (isPinned(config.restToken) || - isPinned(config.enrollment) || - (isPinned(config.daemonUrl) && - config.daemonUrl!.trim().replace(/\/+$/, '') !== DEFAULT_DAEMON_URL)) + const externallyOwned = config.engineManaged /** * The console token, bootstrapped from `$CCTEAM_HOME/secrets/web-token` when @@ -224,7 +129,7 @@ export function apply(ctx: ApplyContext, config: Config = {}): void { * and a daemon does not move that often. */ const configuredDaemonUrl = (): string | undefined => { - const value = (resolve(config.daemonUrl, settings.get().daemonUrl, DEFAULT_DAEMON_URL) ?? '') + const value = (settings.get().daemonUrl ?? '') .trim() .replace(/\/+$/, '') // The compiled default is not an instruction — it is what a blank resolves @@ -239,7 +144,7 @@ export function apply(ctx: ApplyContext, config: Config = {}): void { logger: ctx.logger, }) const restToken = (): string => { - const supplied = resolve(config.restToken, settings.get().restToken) + const supplied = settings.get().restToken.trim() || undefined if (supplied !== undefined) return supplied return isLoopbackUrl(daemonUrl()) ? tokens.read() ?? '' : '' } @@ -255,14 +160,14 @@ export function apply(ctx: ApplyContext, config: Config = {}): void { const enrollmentBootstrap = createEnrollmentBootstrap({ daemonUrl, authorization: () => authorizationFor(restToken()), - held: () => resolve(config.enrollment, settings.get().enrollment), + held: () => settings.get().enrollment.trim() || undefined, persist: async (bearer: string) => { await settings.update?.({ enrollment: bearer }) }, logger: ctx.logger, }) const enrollment = (): string | undefined => - resolve(config.enrollment, settings.get().enrollment) ?? enrollmentBootstrap.value() + settings.get().enrollment.trim() || enrollmentBootstrap.value() // One identity per ccteam session, never one per process: this runtime serves // many hires plus the human at the DSH UI. @@ -296,7 +201,7 @@ export function apply(ctx: ApplyContext, config: Config = {}): void { registerBff(webContext, { daemonUrl, restToken, - defaultProject: () => resolve(config.defaultProject, settings.get().defaultProject) ?? '', + defaultProject: () => settings.get().defaultProject ?? '', engine: supervisor, logger: webContext.logger, }) diff --git a/dsh-plugins/ccteam-ui/src/settings.ts b/dsh-plugins/ccteam-ui/src/settings.ts index 6f04980c..8879a9ac 100644 --- a/dsh-plugins/ccteam-ui/src/settings.ts +++ b/dsh-plugins/ccteam-ui/src/settings.ts @@ -4,7 +4,6 @@ export const DEFAULT_DAEMON_URL = 'http://127.0.0.1:7331' export const SETTINGS_NAMESPACE = 'ccteam-ui' export const UNCHECKED_STATUS = 'Not checked. If the daemon is unreachable, run: ccteam start' -const NO_SERVICE_STATUS = 'Settings service unavailable. If the daemon is unreachable, run: ccteam start' /** * ONE flat namespace for all three faces of this plugin. The base URL is @@ -21,7 +20,7 @@ const NO_SERVICE_STATUS = 'Settings service unavailable. If the daemon is unreac * * Keys are FLAT on purpose: this schema is also the shape of the row `config` * that ccteam's materializer writes into a profile's `cordis.patch.yml`, and - * that config reaches `apply(ctx, config)` verbatim. Nesting a key under a + * Cordis supplies live references to `apply(ctx, config)`. Nesting a key under a * namespace makes the value silently undefined (shipped once, v0.10.0). */ export interface CcteamSettings { @@ -44,76 +43,45 @@ export interface CcteamSettings { enginePath: string } -export const CcteamSettingsSchema: Schema = Schema.object({ - daemonUrl: Schema.string().default(DEFAULT_DAEMON_URL).description('ccteam daemon URL.'), - enrollment: Schema.string() - .default('') - .role('secret') - .description('Enrollment credential from ccteam config (tool surface).'), - restToken: Schema.string() - .default('') - .role('secret') - .description('Personal ccteam REST API token (ccteam web console → Account).'), - defaultProject: Schema.string() - .default('') - .description('Project slug new sessions land in when the panel does not name one.'), - connectionStatus: Schema.string().default(UNCHECKED_STATUS), - autoStart: Schema.boolean() - .default(true) - .description('Install the ccteam engine and start its daemon when this plugin loads.'), - enginePath: Schema.string() - .default('') - .description('Advanced: path to the ccteam binary. Empty = PATH, then the canonical install path.'), -}) +/** Native Config is the single authority; DSH projects volatile fields into its forms. */ +export const CCTEAM_SETTINGS_FIELDS = { + daemonUrl: Schema.string().default(DEFAULT_DAEMON_URL).description('ccteam daemon URL.').volatile(), + enrollment: Schema.string().default('').role('secret').description('ccteam enrollment credential.').volatile(), + restToken: Schema.string().default('').role('secret').description('Personal ccteam REST API token.').volatile(), + defaultProject: Schema.string().default('').description('Default ccteam project slug.').volatile(), + connectionStatus: Schema.string().default(UNCHECKED_STATUS).volatile(), + autoStart: Schema.boolean().default(true).description('Install and start the local ccteam engine.').volatile(), + enginePath: Schema.string().default('').description('Path to the ccteam binary; empty uses PATH.').volatile(), +} +export const CcteamSettingsSchema = Schema.object(CCTEAM_SETTINGS_FIELDS) + +export type LiveSettings = ReturnType export interface SettingsScope { get(): T - watch?(callback: (next: T, prev: T) => void | Promise): () => void - /** - * Merge a patch into the user layer. Present on the real service - * (`@deepseek-ai/dsh-settings`); optional here because the no-service - * fallback below has nowhere to write. - */ update?(patch: object): Promise } -export interface SettingsContext { - settings?: { - register( - ns: string, - schema: Schema, - options?: { applies?: 'live' | 'restart'; base?: Partial }, - ): SettingsScope - } -} - -/** - * Register the settings card. Credentials live here and in closure scope only: - * they are never written to `process.env`, never logged, and never leave the - * host half (see bff.ts and tools.ts). - */ -export function registerCcteamSettings( - ctx: SettingsContext, - base?: Partial, +/** Read the framework-owned references on every operation; no second settings registry. */ +export function bindCcteamSettings( + ctx: { get?(name: string): unknown; fiber?: { entry?: { id: string } } }, + config: LiveSettings, ): SettingsScope { - if (ctx.settings === undefined) { - return { - get: () => ({ - daemonUrl: base?.daemonUrl ?? DEFAULT_DAEMON_URL, - enrollment: base?.enrollment ?? '', - restToken: base?.restToken ?? '', - defaultProject: base?.defaultProject ?? '', - connectionStatus: base?.connectionStatus ?? NO_SERVICE_STATUS, - autoStart: base?.autoStart ?? true, - enginePath: base?.enginePath ?? '', - }), - } + return { + get: () => ({ + daemonUrl: config.daemonUrl.get(), + enrollment: config.enrollment.get(), + restToken: config.restToken.get(), + defaultProject: config.defaultProject.get(), + connectionStatus: config.connectionStatus.get(), + autoStart: config.autoStart.get(), + enginePath: config.enginePath.get(), + }), + async update(patch) { + const service = ctx.get?.('settings') as import('@deepseek-ai/dsh-settings').SettingsForms | undefined + const entryId = ctx.fiber?.entry?.id + if (service === undefined || entryId === undefined) throw new Error('DSH profile settings are unavailable') + await service.update(entryId, patch) + }, } - return ctx.settings.register(SETTINGS_NAMESPACE, CcteamSettingsSchema, { - // `live` for the panel's own reads (the BFF resolves through closures on - // every request); the tool and transport faces read their credential per - // call, so an edit reaches them without a restart too. - applies: 'live', - base, - }) } diff --git a/dsh-plugins/ccteam-ui/src/tools.ts b/dsh-plugins/ccteam-ui/src/tools.ts index a645fa9d..d3122522 100644 --- a/dsh-plugins/ccteam-ui/src/tools.ts +++ b/dsh-plugins/ccteam-ui/src/tools.ts @@ -1,3 +1,6 @@ +import type { Agent } from '@deepseek-ai/dsh-agent' +import type { ToolsService, ToolDefinition, ToolRunContext as NativeToolRunContext } from '@deepseek-ai/dsh-tools' +import { createUserMessage } from '@deepseek-ai/dsh-llm/message' import { randomUUID } from 'node:crypto' import type { SessionCredentialStore } from './credentials.js' @@ -270,37 +273,21 @@ export function sessionIdOfAgent(agent: DshAgent | undefined): string | undefine return typeof sessionId === 'string' && sessionId !== '' ? sessionId : undefined } -export interface ToolRunContext { - agent?: DshAgent - signal?: AbortSignal - [key: string]: unknown -} +export type ToolRunContext = Partial> & { agent?: DshAgent } -export interface DshAgent { +/** Narrow the native live handle to the capabilities this bridge consumes. */ +export type DshAgent = Partial> & { id?: string - session?: { id?: string; events?: unknown[] } + session?: { id?: string } inbox?: { remove?(messageId: string): boolean } - followup?(message: unknown): void - whenIdle?(): Promise - cancel?(cause: { kind: string }, options?: { keepInbox?: boolean }): void - [key: string]: unknown } export interface ToolRegistryContext { - tools: { - register(definition: DshToolDefinition): () => void - } + tools: Pick effect? void | Promise) | void>(setup: () => T, label?: string): () => void } -export interface DshToolDefinition { - name: string - description: string - parameters: unknown - output: { - schema: Record - render(args: unknown, value: McpToolResult): ContentBlock[] - } +export type DshToolDefinition = Omit & { execute(args: unknown, exec: ToolRunContext): Promise } @@ -314,7 +301,7 @@ export type McpClientForExec = (exec: ToolRunContext) => CcteamMcpClient interface McpToolDefinition { name: string description: string - inputSchema: unknown + inputSchema: Record } export const CCTEAM_TOOL_DEFINITIONS: McpToolDefinition[] = [ @@ -378,7 +365,7 @@ export const CCTEAM_TOOL_DEFINITIONS: McpToolDefinition[] = [ enum: ['full', 'read', 'none'], description: 'New session\'s ccteam tool face (default full).', }, - mode: { type: 'string', description: 'Vendor session mode. DSH only: standard|ptc|minimal|creator.' }, + mode: { type: 'string', description: 'Native DSH agent-preset id; omitted uses the DSH default. creator selects cordis.' }, permission_mode: { type: 'string', enum: ['skip', 'hitl'], @@ -444,7 +431,10 @@ function toDshTool(definition: McpToolDefinition, clientFor: McpClientForExec, n output: { schema: {}, render(_args, value) { - return value.content + return (isRecord(value) && Array.isArray(value.content) ? value.content : [value]).map(block => ({ + type: 'text' as const, + text: isRecord(block) && typeof block.text === 'string' ? block.text : JSON.stringify(block), + })) }, }, async execute(args, exec) { @@ -511,21 +501,9 @@ export class CcteamCompletionNotifier implements DelegationNotifier { } } -/** A ccteam-minted user turn; its `id` is what turn attribution binds on. */ -export interface UserTextMessage { - readonly id: string - readonly role: 'user' - readonly content: readonly [{ readonly type: 'text'; readonly text: string }] - readonly source: { readonly kind: 'user' } -} - -export function createUserTextMessage(text: string): UserTextMessage { - return Object.freeze({ - id: randomUUID(), - role: 'user', - content: Object.freeze([Object.freeze({ type: 'text', text })]), - source: Object.freeze({ kind: 'user' }), - }) as UserTextMessage +/** Construct user turns through DSH's public immutable-message factory. */ +export function createUserTextMessage(text: string) { + return createUserMessage({ content: [{ type: 'text', text }], source: { kind: 'user' } }) } function extractDelegatedSid(args: unknown, result: McpToolResult): string | undefined { diff --git a/dsh-plugins/ccteam-ui/src/transport.ts b/dsh-plugins/ccteam-ui/src/transport.ts index 1f2bbada..de21f539 100644 --- a/dsh-plugins/ccteam-ui/src/transport.ts +++ b/dsh-plugins/ccteam-ui/src/transport.ts @@ -1,3 +1,10 @@ +import type {} from '@deepseek-ai/dsh-agent-default-model' +import type { PermissionPresetService } from '@deepseek-ai/dsh-permission-presets' +import type { WorkspaceRegistry } from '@deepseek-ai/dsh-workspace' +import type { Context } from '@deepseek-ai/cordis' +import type { AgentRegistry, AgentHandle, AgentOptions, AgentSetup, Agent, AssistantStreamFrame } from '@deepseek-ai/dsh-agent' +import type { Session, SessionId, SessionEvent, SessionEventMap } from '@deepseek-ai/dsh-session' +import type { AgentPresetRegistry } from '@deepseek-ai/dsh-agent-preset-registry' import { randomUUID } from 'node:crypto' import { mkdirSync, unlinkSync } from 'node:fs' import { createServer, type Server, type Socket } from 'node:net' @@ -5,29 +12,10 @@ import { dirname } from 'node:path' import { parseCcteamMeta, type SessionCredentialStore } from './credentials.js' import { createUserTextMessage, sessionIdOfAgent, type ContentBlock, type DshAgent } from './tools.js' -export interface DshAgents { - create(options: { - sessionId: string - meta?: { cwd?: string; agentPreset?: string } - agentOptions?: unknown - setup?: (agentCtx: unknown) => Promise - }): Promise - resume(options: { - resumeSessionId: string - agentOptions?: unknown - setup?: (agentCtx: unknown) => Promise - }): Promise - get?(id: string): DshAgent | undefined -} - -export interface DshAgentHandle { - agent: DshAgent - dispose?(): Promise | void -} +export type DshAgents = Pick +export type DshAgentHandle = AgentHandle -export interface DshWorkspace { - attachSession(sessionId: string): Promise -} +export type DshWorkspace = Awaited> /** * DSH's agent-preset roster (Cordis service `agentPresets`, @@ -35,16 +23,9 @@ export interface DshWorkspace { * vendor tools and moves them behind presets, so an agent created without * `setup: mount(...)` has no bash/read/write at all — only globally-registered * tools like ccteam's own (real-machine `unknown tool "bash"` regression). - * Shipped ids: `standard` | `code` (PTC) | `minimal` | `cordis` (creator). + * The vendor owns its roster and default; ccteam forwards native preset ids. */ -export interface DshAgentPresets { - resolve(id?: string): Promise<{ id?: string } | undefined> - mount(agentCtx: unknown, id?: string): Promise -} - -interface DshSessionPersistence { - inspect(sessionId: string): Promise<{ meta?: unknown; events?: unknown[] }> -} +export type DshAgentPresets = Pick /** * DSH's permission-preset roster (Cordis service `permissionPresets`). @@ -53,36 +34,13 @@ interface DshSessionPersistence { * approval prompts — the DSH counterpart of ccteam's `skip` posture); a * `hitl` hire keeps the vendor's pinned default so approvals keep flowing. */ -interface DshPermissionPresets { - set(session: unknown, name: string): void -} +type DshPermissionPresets = Pick const HIRE_PERMISSION_PRESET = 'danger-full-access' -export interface DshWorkspaceRegistry { - create(path: string, title?: string): Promise -} +export type DshWorkspaceRegistry = Pick -export interface TransportContext { - agents: DshAgents - /** - * Optional service lookup (`ctx.get`). Cordis THROWS on `ctx.workspaceRegistry` - * when the service is not in this plugin's `inject` list — and it cannot be: - * `dsh-workspace` ships in the web-app bundle only, so a hard inject would - * dead-lock plugin activation on every non-web profile (mode 2). `ctx.get` - * is the vendor's own optional accessor (dsh-host-apiproxy uses it for - * `sessionPersistence`). - */ - get?(name: string): unknown - agentDefaultModel?: { - currentSelection(): { provider?: string; model?: string } | undefined - } - on?(event: string, handler: (...args: never[]) => unknown): () => void - effect? void | Promise) | void>(setup: () => T, label?: string): () => void - logger?: { - warn(message: string): void - } -} +export type TransportContext = Pick export interface DshSocketTransportOptions { version: string @@ -126,6 +84,8 @@ interface Inflight { interface SessionRecord { agent: DshAgent + stream?: { attemptId: string; revision: number; turn: number } + thoughtStreamed?: boolean /** Turn currently open on this session, ccteam-owned or human-owned. */ openTurn?: number inflight?: Inflight @@ -180,7 +140,7 @@ export class WorkspaceMounter { const operation = this.chain.then(() => registry.create(cwd)) this.chain = operation.then(() => undefined, () => undefined) const workspace = await operation - await workspace.attachSession(sessionId) + await workspace.attachSession(sessionId as SessionId) } } @@ -330,9 +290,12 @@ export class DshAcpServer { this.input.on('end', onClose) this.input.on('error', onClose) - const offSession = this.ctx.on?.('session/event', ((session: unknown, event: unknown) => { + const offSession = this.ctx.on('session/event', (session, event) => { this.onSessionEvent(session, event) - }) as never) + }) + const offStream = this.ctx.on('agent/assistant-stream', ({ agent, frame }) => { + this.onAssistantStream(agent, frame) + }) const offError = this.ctx.on?.('agent/error', ((payload: unknown) => { this.onAgentError(payload) }) as never) @@ -346,6 +309,7 @@ export class DshAcpServer { this.input.off('end', onClose) this.input.off('error', onClose) offSession?.() + offStream?.() offError?.() offApproval?.() // Agents stay live and un-cancelled: the human at the DSH UI owns them too. @@ -474,7 +438,7 @@ export class DshAcpServer { private async composeCreatePreset( requested: string | undefined, sessionId: string, - ): Promise<{ id?: string; setup?: (agentCtx: unknown) => Promise }> { + ): Promise<{ id?: string; setup?: (agentCtx: unknown, agent: DshAgent) => Promise }> { const presets = this.presetService() if (presets === undefined) { if (requested !== undefined) { @@ -498,76 +462,36 @@ export class DshAcpServer { return { id, setup: async agentCtx => { - await presets.mount(agentCtx, id) + await presets.mount(agentCtx as Parameters[0], id) }, } } - /** Re-mount the STORED preset when resuming a persisted session. */ - private async composeResumeSetup( - sessionId: string, - ): Promise<((agentCtx: unknown) => Promise) | undefined> { + /** DSH owns persisted preset selection, including switches made in its UI. */ + private composeResumeSetup(): AgentSetup | undefined { const presets = this.presetService() if (presets === undefined) return undefined - const stored = await this.storedPreset(sessionId) - return async agentCtx => { - await presets.mount(agentCtx, stored) - } - } - - /** - * The preset a persisted session was using: the newest - * `agent-preset/selected` event wins (a blank-session switch in the DSH UI), - * else the creation header's `agentPreset`; `undefined` mounts the vendor - * default. Mirrors the vendor's own `resolveSessionPreset` fold — the - * package is not importable from this plugin, so the two-field fold is - * reimplemented against the same durable data. - */ - private async storedPreset(sessionId: string): Promise { - const svc = typeof this.ctx.get === 'function' ? this.ctx.get('sessionPersistence') : undefined - const persistence = svc as DshSessionPersistence | undefined - if (typeof persistence?.inspect !== 'function') return undefined - try { - const inspected = await persistence.inspect(sessionId) - const events = Array.isArray(inspected?.events) ? inspected.events : [] - for (let i = events.length - 1; i >= 0; i--) { - const event = asRecord(events[i]) - if (event.type !== 'agent-preset/selected') continue - const chosen = asRecord(event.data).agentPreset - if (typeof chosen === 'string' && chosen.trim() !== '') return chosen - } - const header = asRecord(inspected?.meta).agentPreset - return typeof header === 'string' && header.trim() !== '' ? header : undefined - } catch (error) { - this.ctx.logger?.warn( - `ccteam dsh transport could not read the stored preset of ${sessionId}: ${errorMessage(error)}`, - ) - return undefined + return async (agentCtx, agent) => { + const stored = presets.presetForSession(agent.session as Session) ?? undefined + await presets.mount(agentCtx as Parameters[0], stored) } } private async newSession(params: unknown): Promise<{ sessionId: string }> { const body = requireRecord(params, 'session/new params') const cwd = requireString(body, 'cwd') - const sessionId = randomUUID() + const sessionId = randomUUID() as SessionId const agentOptions = this.resolveAgentOptions(body.agentOptions) const meta = parseCcteamMeta(body) if (meta !== undefined) this.credentials?.set(sessionId, meta) let handle: DshAgentHandle try { const preset = await this.composeCreatePreset(meta?.agentPreset, sessionId) - const request: { - sessionId: string - meta: { cwd: string; agentPreset?: string } - agentOptions?: unknown - setup?: (agentCtx: unknown) => Promise - } = { + const request: Parameters[0] = { sessionId, meta: { cwd, ...(preset.id === undefined ? {} : { agentPreset: preset.id }) }, } - if (agentOptions !== undefined) request.agentOptions = agentOptions - if (preset.setup !== undefined) request.setup = preset.setup - handle = await this.ctx.agents.create(request) + handle = await this.ctx.agents.create({ ...request, ...agentOptions === undefined ? {} : { agentOptions }, ...preset.setup === undefined ? {} : { setup: preset.setup } }) } catch (error) { this.credentials?.delete(sessionId) throw errorToRpc(error) @@ -595,7 +519,7 @@ export class DshAcpServer { return } try { - presets.set(agent.session, HIRE_PERMISSION_PRESET) + presets.set(agent.session as Session, HIRE_PERMISSION_PRESET) } catch (error) { this.ctx.logger?.warn( `ccteam dsh transport could not set ${HIRE_PERMISSION_PRESET} on ${sessionId}: ${errorMessage(error)}`, @@ -605,7 +529,7 @@ export class DshAcpServer { private async loadSession(params: unknown): Promise<{ sessionId: string }> { const body = requireRecord(params, 'session/load params') - const sessionId = requireString(body, 'sessionId') + const sessionId = requireString(body, 'sessionId') as SessionId const agentOptions = this.resolveAgentOptions(body.agentOptions) const meta = parseCcteamMeta(body) if (meta !== undefined) this.credentials?.set(sessionId, meta) @@ -619,7 +543,7 @@ export class DshAcpServer { // The stored preset is authoritative on resume (the human may have // switched it in the DSH UI); `_meta.ccteam.agentPreset` is a // creation-only field and deliberately ignored here. - const setup = await this.composeResumeSetup(sessionId) + const setup = this.composeResumeSetup() const handle = await this.ctx.agents.resume({ resumeSessionId: sessionId, ...agentOptions === undefined ? {} : { agentOptions }, @@ -636,7 +560,7 @@ export class DshAcpServer { private async prompt(params: unknown): Promise { const body = requireRecord(params, 'session/prompt params') - const sessionId = requireString(body, 'sessionId') + const sessionId = requireString(body, 'sessionId') as SessionId const record = this.sessions.get(sessionId) if (record === undefined) throw new RpcError(`unknown session: ${sessionId}`, -32602) if (record.inflight !== undefined) throw new RpcError('a prompt is already in flight for this session', -32602) @@ -665,18 +589,15 @@ export class DshAcpServer { }) } - private onSessionEvent(session: unknown, event: unknown): void { + private onSessionEvent(session: Session, event: SessionEvent): void { const sessionId = sessionIdFromSession(session) if (sessionId === undefined) return const record = this.sessions.get(sessionId) if (record === undefined) return - const ev = asRecord(event) - const type = typeof ev.type === 'string' ? ev.type : '' - const data = asRecord(ev.data) - - switch (type) { + switch (event.type) { case 'turn/start': { - const turn = numberField(data, 'turn') + const data = event.data + const turn = data.turn record.openTurn = turn const inflight = record.inflight if (inflight !== undefined && inflight.bindNextTurn && turn !== undefined) { @@ -686,9 +607,10 @@ export class DshAcpServer { break } case 'user/message': { + const data = event.data const inflight = record.inflight if (inflight === undefined || inflight.ownedTurn !== undefined) break - if (stringField(data, 'id') !== inflight.messageId) break + if (data.id !== inflight.messageId) break if (record.openTurn === undefined) { inflight.bindNextTurn = true break @@ -696,25 +618,24 @@ export class DshAcpServer { inflight.ownedTurn = record.openTurn break } - case 'assistant/message': - if (!this.ownsTurn(record, numberField(data, 'turn'))) break + case 'assistant/message': { + const data = event.data + if (!this.ownsTurn(record, data.turn)) break this.onAssistantMessage(sessionId, data, record) break - case 'assistant/chunk': - if (!this.ownsTurn(record, numberField(data, 'turn'))) break - this.onAssistantChunk(sessionId, data, record) - break + } case 'tool/call': { - if (!this.ownsTurn(record, numberField(data, 'turn'))) break - const callId = stringField(data, 'callId') + const data = event.data + if (!this.ownsTurn(record, data.turn)) break + const callId = data.callId if (callId !== undefined) record.inflight?.toolCalls.add(callId) this.notify({ sessionId, update: { sessionUpdate: 'tool_call', toolCallId: callId ?? 'tool', - name: stringField(data, 'name') ?? 'tool', - title: stringField(data, 'name') ?? 'tool', + name: data.name ?? 'tool', + title: data.name ?? 'tool', rawInput: parseMaybeJson(data.arguments), status: 'pending', }, @@ -722,22 +643,25 @@ export class DshAcpServer { break } case 'tool/result': { - const callId = stringField(asRecord(asRecord(data.message).source), 'callId') - if (!this.ownsToolResult(record, numberField(data, 'turn'), callId)) break + const data = event.data + const callId = data.message.source.callId + if (!this.ownsToolResult(record, data.turn, callId)) break + const failed = data.message.isError === true this.notify({ sessionId, update: { sessionUpdate: 'tool_call_update', toolCallId: callId ?? 'tool', - status: 'completed', + status: failed ? 'failed' : 'completed', content: toolResultText(data), - isError: toolResultIsError(data), + isError: failed, }, }) break } case 'turn/end': { - const turn = numberField(data, 'turn') + const data = event.data + const turn = data.turn if (turn === undefined || record.openTurn === turn) record.openTurn = undefined const inflight = record.inflight if (inflight === undefined || !this.ownsTurn(record, turn)) break @@ -776,47 +700,39 @@ export class DshAcpServer { return callId !== undefined && record.inflight?.toolCalls.has(callId) === true } - private onAssistantMessage(sessionId: string, data: Record, record: SessionRecord): void { - const message = asRecord(data.message) - const content = message.content - if (Array.isArray(content)) { - for (const block of content) { - const normalized = asRecord(block) - if (normalized.type === 'text' && typeof normalized.text === 'string' && normalized.text.length > 0) { - this.notify({ - sessionId, - update: { - sessionUpdate: 'agent_message_chunk', - content: { type: 'text', text: normalized.text }, - }, - }) - } + private onAssistantMessage(sessionId: string, data: SessionEventMap['assistant/message'], record: SessionRecord): void { + for (const block of data.message.content) { + if (block.type === 'text' && block.text !== '') { + this.notify({ sessionId, update: { + sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: block.text }, + } }) + } else if (block.type === 'reasoning' && block.text !== '' && !record.thoughtStreamed) { + this.notify({ sessionId, update: { + sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: block.text }, + } }) } } + record.thoughtStreamed = false accumulateUsage(record.inflight?.usage, asRecord(data.usage)) } - private onAssistantChunk(sessionId: string, data: Record, record: SessionRecord): void { - const chunk = asRecord(data.chunk) - if (chunk.type === 'reasoning-delta' && typeof chunk.text === 'string' && chunk.text.length > 0) { - this.notify({ - sessionId, - update: { - sessionUpdate: 'agent_thought_chunk', - content: { type: 'text', text: chunk.text }, - }, - }) - } else if (chunk.type === 'usage') { - accumulateUsage(record.inflight?.usage, asRecord(chunk.usage)) - const usage = normalizeUsage(asRecord(chunk.usage)) - this.notify({ - sessionId, - update: { - sessionUpdate: 'usage_update', - used: usage.inputTokens, - size: usage.contextWindow, - }, - }) + /** Follow the public live-stream frames; settled messages own token accounting. */ + private onAssistantStream(agent: Agent, frame: AssistantStreamFrame): void { + const record = this.sessions.get(agent.id) + if (record === undefined || record.agent !== agent) return + if (frame.type === 'start') { + record.stream = { attemptId: frame.attemptId, revision: frame.revision, turn: frame.turn } + return + } + const stream = record.stream + if (stream === undefined || stream.attemptId !== frame.attemptId || stream.revision !== frame.revision + || !this.ownsTurn(record, stream.turn)) return + if (frame.type === 'end') { record.stream = undefined; return } + if (frame.chunk.type === 'reasoning-delta' && frame.chunk.text !== '') { + record.thoughtStreamed = true + this.notify({ sessionId: agent.id, update: { + sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: frame.chunk.text }, + } }) } } @@ -903,11 +819,11 @@ export class DshAcpServer { }) } - private resolveAgentOptions(requested: unknown): unknown | undefined { + private resolveAgentOptions(requested: unknown): AgentOptions | undefined { const selection = this.ctx.agentDefaultModel?.currentSelection() const selected = isModelSelection(selection) ? selection : undefined if (requested === undefined) return selected - if (!isRecord(requested)) return requested + if (!isRecord(requested)) throw new RpcError('agentOptions must be an object', -32602) const merged: Record = { ...requested } if (stringField(merged, 'provider') === undefined && selected?.provider !== undefined) { @@ -916,7 +832,7 @@ export class DshAcpServer { if (stringField(merged, 'model') === undefined && selected?.model !== undefined) { merged.model = selected.model } - return Object.keys(merged).length === 0 ? undefined : merged + return Object.keys(merged).length === 0 ? undefined : merged as AgentOptions } } @@ -1027,21 +943,8 @@ function sessionIdFromSession(session: unknown): string | undefined { return stringField(header, 'id') ?? stringField(asRecord(session), 'id') } -function toolResultText(data: Record): ContentBlock { - const content = asRecord(asRecord(data.message).content) - if (Array.isArray(asRecord(data.message).content)) { - return { type: 'text', text: JSON.stringify(asRecord(data.message).content) } - } - return { type: 'text', text: JSON.stringify(content) } -} - -function toolResultIsError(data: Record): boolean { - const message = asRecord(data.message) - const content = message.content - if (Array.isArray(content)) { - return content.some(block => asRecord(block).isError === true) - } - return data.error !== undefined +function toolResultText(data: SessionEventMap['tool/result']): ContentBlock { + return { type: 'text', text: JSON.stringify(data.message.content) } } function isErrorReason(reason: unknown): boolean { diff --git a/dsh-plugins/ccteam-ui/tests/client-apply.test.ts b/dsh-plugins/ccteam-ui/tests/client-apply.test.ts index afad94ce..9cf3c759 100644 --- a/dsh-plugins/ccteam-ui/tests/client-apply.test.ts +++ b/dsh-plugins/ccteam-ui/tests/client-apply.test.ts @@ -21,17 +21,17 @@ vi.mock('@deepseek-ai/dsh-client-ui-primitives', () => { StateDot: stub, Tooltip: stub, writeClipboard: stub, - IconBranchOutline16: stub, - IconCheckOutline14: stub, - IconChevronDownOutline14: stub, - IconChevronLeftOutline14: stub, - IconCloseOutline16: stub, - IconCopyOutline16: stub, - IconPlusOutline16: stub, - IconSendOutline16: stub, - IconSettingsOutline14: stub, - IconTreeCorner8x10: stub, - IconWarningOutline16: stub, + IconBranchOutlineRegular: stub, + IconCheckOutlineRegular: stub, + IconChevronDownOutlineRegular: stub, + IconChevronLeftOutlineRegular: stub, + IconCloseOutlineRegular: stub, + IconCopyOutlineRegular: stub, + IconPlusOutlineRegular: stub, + IconSendOutlineRegular: stub, + IconSettingsOutlineRegular: stub, + IconTreeCornerRegular: stub, + IconWarningOutlineRegular: stub, } }) @@ -64,19 +64,19 @@ function fakeScope(namespace: string) { mode: 'host' as const, }), subscribe: () => () => {}, - set: () => Promise.resolve(), - unset: () => Promise.resolve(), + mutate: () => Promise.resolve(true), } } /** A recording client context: every service the plugin injects, no React. */ -function recordingCtx() { +function recordingCtx(settings = true) { const effects: Array<{ label: string | undefined; dispose: (() => void) | void }> = [] const dictionaries: Array<{ ns: string; locales: string[] }> = [] const waits: Wait[] = [] const registrations: Registration[] = [] const bound: string[] = [] const ctx = { + inject(deps: string[], body: (ctx: unknown) => void) { if (settings || !deps.includes('configForms')) body(ctx) }, effect(setup: () => (() => void) | void, label?: string) { const dispose = setup() effects.push({ label, dispose }) @@ -104,10 +104,12 @@ function recordingCtx() { } }, }, - settingsScope: { - bind(spec: { namespace: string }) { - bound.push(spec.namespace) - return fakeScope(spec.namespace) + configForms: { + describe() { return { getSnapshot: () => ({ view: { namespaces: [] } }), subscribe: () => () => {} } }, + whileServed(_namespaces: string[], register: () => () => void) { return register() }, + get(namespace: string) { + bound.push(namespace) + return fakeScope(namespace) }, }, } @@ -126,9 +128,16 @@ function declareAll(waits: Wait[]): void { } describe('plugin face', () => { + it('keeps the workbench and entry active without the optional settings provider', () => { + const { ctx, waits, registrations } = recordingCtx(false) + apply(ctx as never) + declareAll(waits) + expect(registrations.map(row => row.options.name)).toEqual(['sidebar.footer.action', 'shell.overlay']) + }) + it('is a DSH client plugin: name, required services, apply', () => { expect(name).toBe('ccteam-ui') - expect(inject).toEqual(['slots', 'locale', 'settingsScope']) + expect(inject).toEqual(['slots', 'locale']) expect(typeof apply).toBe('function') }) }) @@ -143,13 +152,15 @@ describe('apply', () => { 'ccteam-ui: persistence', 'ccteam-ui: team event stream', 'ccteam-ui: engine poller', + 'ccteam-ui: settings form', + 'ccteam-ui: settings section', ]) }) it('contributes every seat through slots.inject, never a direct register at apply time', () => { const { ctx, waits, registrations } = recordingCtx() apply(ctx as never) - expect(waits.map(wait => wait.key)).toEqual(['sidebar.footer.action', 'shell.overlay', 'settings.plugin.item']) + expect(waits.map(wait => wait.key)).toEqual(['sidebar.footer.action', 'shell.overlay', 'settings.section']) // Nothing is registered until the framework reports the slot declared. expect(registrations).toEqual([]) }) @@ -168,8 +179,8 @@ describe('apply', () => { expect(panel?.component).toBe(Workbench) expect(panel?.options).toMatchObject({ id: 'ccteam', order: 0, locale: 'ccteam' }) - const cards = byName('settings.plugin.item') - expect(cards.map(card => card.options.key)).toEqual(['ccteam-ui']) + const cards = byName('settings.section') + expect(cards.map(card => card.options.id)).toEqual(['ccteam-ui']) for (const card of cards) { expect(card.component).toBe(SettingsCard) expect(card.options.locale).toBe('ccteam') @@ -203,7 +214,7 @@ describe('apply', () => { const { ctx, waits, registrations } = recordingCtx() apply(ctx as never) declareAll(waits) - for (const card of registrations.filter(r => r.options.name === 'settings.plugin.item')) { + for (const card of registrations.filter(r => r.options.name === 'settings.section')) { const face = (card.options.inject as () => { hooks: { card: { getSnapshot(): { available: boolean; fields: Record }; subscribe: unknown } } spec: { namespace: string; fields: Array<{ field: string; kind: string }> } @@ -212,7 +223,7 @@ describe('apply', () => { discard: unknown reset: unknown })() - expect(face.spec.namespace).toBe(card.options.key) + expect(face.spec.namespace).toBe(card.options.id) expect(typeof face.hooks.card.subscribe).toBe('function') const state = face.hooks.card.getSnapshot() expect(state.available).toBe(true) diff --git a/dsh-plugins/ccteam-ui/tests/client-chat.test.tsx b/dsh-plugins/ccteam-ui/tests/client-chat.test.tsx index d27da5be..acd5a4ef 100644 --- a/dsh-plugins/ccteam-ui/tests/client-chat.test.tsx +++ b/dsh-plugins/ccteam-ui/tests/client-chat.test.tsx @@ -16,18 +16,18 @@ vi.mock('@deepseek-ai/dsh-client-ui-primitives', async () => { MarkdownText: ({ text }: { text: string }) => h('p', { 'data-md': '' }, text), Menu: ({ anchor }: { anchor: unknown }) => anchor as never, StateDot: ({ state }: { state: string }) => h('i', { 'data-dot': state }), - IconApiOutline14: icon, - IconChevronDownOutline14: icon, - IconCloseFill14: icon, - IconCodeOutline16: icon, - IconEditOutline16: icon, - IconGlobeOutline14: icon, - IconLoadingOutline16: icon, - IconPaperclipOutline16: icon, - IconSendOutline16: icon, - IconSparkle16: icon, - IconStopFill16: icon, - IconThinkOutline16: icon, + IconApiOutlineRegular: icon, + IconChevronDownOutlineRegular: icon, + IconCloseFillRegular: icon, + IconCodeOutlineRegular: icon, + IconEditOutlineRegular: icon, + IconGlobeOutlineRegular: icon, + IconLoadingOutlineRegular: icon, + IconPaperclipOutlineRegular: icon, + IconSendOutlineRegular: icon, + IconSparkleRegular: icon, + IconStopFillRegular: icon, + IconThinkOutlineRegular: icon, } }) diff --git a/dsh-plugins/ccteam-ui/tests/client-engine-ui.test.tsx b/dsh-plugins/ccteam-ui/tests/client-engine-ui.test.tsx index 7506becd..bcb4e844 100644 --- a/dsh-plugins/ccteam-ui/tests/client-engine-ui.test.tsx +++ b/dsh-plugins/ccteam-ui/tests/client-engine-ui.test.tsx @@ -23,18 +23,18 @@ vi.mock('@deepseek-ai/dsh-client-ui-primitives', async () => { Input: (props: Record) => h('input', props), Pill: ({ children }: { children: unknown }) => h('span', null, children as never), writeClipboard: () => {}, - IconBranchOutline16: icon, - IconCheckOutline14: icon, - IconCloseOutline16: icon, - IconCodeOutline16: icon, - IconCopyOutline16: icon, - IconFolderOpen16: icon, - IconLoadingOutline16: icon, - IconPlayOutline16: icon, - IconRightUpOutline14: icon, - IconSettingsOutline14: icon, - IconWarningOutline16: icon, - IconChevronDownOutline14: icon, + IconBranchOutlineRegular: icon, + IconCheckOutlineRegular: icon, + IconCloseOutlineRegular: icon, + IconCodeOutlineRegular: icon, + IconCopyOutlineRegular: icon, + IconFolderOpenRegular: icon, + IconLoadingOutlineRegular: icon, + IconPlayOutlineRegular: icon, + IconRightUpOutlineRegular: icon, + IconSettingsOutlineRegular: icon, + IconWarningOutlineRegular: icon, + IconChevronDownOutlineRegular: icon, } }) @@ -205,7 +205,7 @@ describe('first-run engine panel', () => { // The host sentence repeats the reason in other words: hidden. expect(html).not.toContain('the daemon is not running.') expect(button(html, '启动引擎').disabled).toBe(false) - expect(html).toContain('插件配置 → ccteam-ui') + expect(html).toContain('DSH 设置 → ccteam-ui') }) it('installing / starting: a spinner title and no start button', () => { diff --git a/dsh-plugins/ccteam-ui/tests/client-settings.test.ts b/dsh-plugins/ccteam-ui/tests/client-settings.test.ts index d7a26a1f..eef0e67b 100644 --- a/dsh-plugins/ccteam-ui/tests/client-settings.test.ts +++ b/dsh-plugins/ccteam-ui/tests/client-settings.test.ts @@ -18,6 +18,7 @@ interface ScopeState { /** A SettingsScope double whose Host answers are scripted per test. */ function fakeScope(initial: Partial = {}) { let state: ScopeState = { status: 'ready', value: {}, user: undefined, writable: true, ...initial } + let revision = 1 const listeners = new Set<() => void>() const writes: Array<{ op: 'set' | 'unset'; field: string; value?: unknown }> = [] /** How the Host treats a write: `accept` folds it into value+user, `reject` leaves state alone, `throw` rejects. */ @@ -25,38 +26,43 @@ function fakeScope(initial: Partial = {}) { const notify = () => { for (const listener of [...listeners]) listener() } + const secrets = new Map() + const redact = () => { + for (const field of ['restToken', 'enrollment']) { + if (Object.hasOwn(state.value ?? {}, field)) secrets.set(field, Boolean(state.value?.[field])) + } + state = { ...state, value: { ...state.value }, user: { ...state.user } } + for (const field of ['restToken', 'enrollment']) { delete state.value?.[field]; delete state.user?.[field] } + } + redact() const scope = { - getSnapshot: () => ({ ...state, base: undefined, revision: 1, mode: 'host' as const }), - subscribe(listener: () => void) { - listeners.add(listener) - return () => { - listeners.delete(listener) - } - }, - set(field: string, value: unknown) { - writes.push({ op: 'set', field, value }) - if (behaviour === 'throw') return Promise.reject(new Error('wire down')) - if (behaviour === 'accept') { - state = { ...state, value: { ...state.value, [field]: value }, user: { ...state.user, [field]: value } } - notify() + getSnapshot: () => ({ ...state, base: undefined, revision }), + subscribe(listener: () => void) { listeners.add(listener); return () => { listeners.delete(listener) } }, + async mutate(ops: readonly ({ op: 'set'; path: readonly string[]; value: unknown } | { op: 'unset'; path: readonly string[] })[], expectedRevision?: number) { + for (const op of ops) writes.push({ op: op.op, field: op.path[0]!, ...op.op === 'set' ? { value: op.value } : {} }) + if (behaviour === 'throw') throw new Error('wire down') + if (behaviour === 'reject' || (expectedRevision !== undefined && expectedRevision !== revision)) return false + for (const op of ops) { + const field = op.path[0]! + if (op.op === 'set') state = { ...state, value: { ...state.value, [field]: op.value }, user: { ...state.user, [field]: op.value } } + else { delete state.value?.[field]; delete state.user?.[field]; secrets.delete(field) } } - return Promise.resolve() - }, - unset(field: string) { - writes.push({ op: 'unset', field }) - if (behaviour === 'throw') return Promise.reject(new Error('wire down')) - if (behaviour === 'accept') { - const value = { ...state.value } - const user = { ...state.user } - delete value[field] - delete user[field] - state = { ...state, value, user } - notify() - } - return Promise.resolve() + revision++ + redact() + notify() + return true }, } + const mirror = { + getSnapshot: () => ({ status: 'ready' as const, error: null, view: { + namespaces: [{ ns: 'ccteam-ui', autoGenerate: false, schema: {}, value: {}, revision: 1, applies: 'live' as const, + secrets: [...secrets].map(([field, set]) => ({ path: [field], set })) }], + writable: true, hasDocument: true, + } }), + subscribe: (_listener: () => void) => () => {}, + } return { + mirror, scope, writes, behave(next: typeof behaviour) { @@ -64,26 +70,64 @@ function fakeScope(initial: Partial = {}) { }, host(next: Partial) { state = { ...state, ...next } + revision++ + redact() notify() }, } } +describe('revision fences', () => { + it('saves staged text after its own live toggle advances the form revision', async () => { + const { scope, mirror } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) + card.inject().edit('enginePath', '/opt/ccteam') + await card.setToggle('autoStart', false) + await card.save() + expect(card.getSnapshot().failed).toBe(false) + expect(scope.getSnapshot().value?.enginePath).toBe('/opt/ccteam') + }) + + it('keeps the stale fence when another editor changed the form before the toggle', async () => { + const { scope, mirror, host } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) + card.inject().edit('defaultProject', 'my-project') + host({ value: { defaultProject: 'external-project' } }) + await card.setToggle('autoStart', false) + await card.save() + expect(card.getSnapshot().failed).toBe(true) + expect(scope.getSnapshot().value?.defaultProject).toBe('external-project') + }) +}) + +describe('redacted native configuration', () => { + it('accepts a secret write without receiving the secret in the Host response', async () => { + const { scope, mirror } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) + card.inject().edit('restToken', 'private-token') + await card.save() + expect(scope.getSnapshot().value).not.toHaveProperty('restToken') + expect(card.getSnapshot().fields.restToken).toEqual({ text: '', overridden: false, configured: true }) + expect(card.getSnapshot().failed).toBe(false) + expect(card.getSnapshot().dirty).toBe(false) + }) +}) + describe('projection', () => { it('is unavailable (renders nothing) until the Host serves the namespace', () => { - const { scope, host } = fakeScope({ status: 'loading' }) - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, host } = fakeScope({ status: 'loading' }) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) expect(card.getSnapshot().available).toBe(false) host({ status: 'ready' }) expect(card.getSnapshot().available).toBe(true) }) it('shows the effective value, marks user-layer fields overridden, and never echoes a secret', () => { - const { scope } = fakeScope({ + const { mirror, scope } = fakeScope({ value: { daemonUrl: 'http://127.0.0.1:7331', restToken: 'ccteam:abc', defaultProject: 'demo' }, user: { defaultProject: 'demo' }, }) - const card = new SettingsCardController(scope, CCTEAM_CARD) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const { fields } = card.getSnapshot() expect(fields.daemonUrl).toEqual({ text: 'http://127.0.0.1:7331', overridden: false, configured: true }) expect(fields.defaultProject).toEqual({ text: 'demo', overridden: true, configured: true }) @@ -92,14 +136,14 @@ describe('projection', () => { }) it('reports an unset secret as not configured', () => { - const { scope } = fakeScope({ value: { daemonUrl: 'http://127.0.0.1:7331' } }) - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope } = fakeScope({ value: { daemonUrl: 'http://127.0.0.1:7331' } }) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) expect(card.getSnapshot().fields.enrollment?.configured).toBe(false) }) it('publishes a new snapshot (new reference) whenever the scope changes, and keeps the reference otherwise', () => { - const { scope, host } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, host } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const first = card.getSnapshot() expect(card.getSnapshot()).toBe(first) let notified = 0 @@ -115,8 +159,8 @@ describe('projection', () => { describe('staging', () => { it('edit stages a draft: dirty, overridden preview, no write yet', () => { - const { scope, writes } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, writes } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const face = card.inject() face.edit('daemonUrl', 'http://10.0.0.1:7331') expect(card.getSnapshot().dirty).toBe(true) @@ -125,8 +169,8 @@ describe('staging', () => { }) it('discard drops every draft; reset stages a clear', () => { - const { scope } = fakeScope({ value: { daemonUrl: 'x' }, user: { daemonUrl: 'x' } }) - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope } = fakeScope({ value: { daemonUrl: 'x' }, user: { daemonUrl: 'x' } }) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const face = card.inject() face.edit('daemonUrl', 'y') face.discard() @@ -140,8 +184,8 @@ describe('staging', () => { describe('save', () => { it('writes set for text, unset for blank, skips a blank secret, then reads the outcome back', async () => { - const { scope, writes } = fakeScope({ value: { daemonUrl: 'old', defaultProject: 'p' }, user: { defaultProject: 'p' } }) - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, writes } = fakeScope({ value: { daemonUrl: 'old', defaultProject: 'p' }, user: { defaultProject: 'p' } }) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const face = card.inject() face.edit('daemonUrl', ' http://new:7331 ') face.edit('defaultProject', '') @@ -160,8 +204,8 @@ describe('save', () => { }) it('writes a secret and reports it configured afterwards', async () => { - const { scope, writes } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, writes } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const face = card.inject() face.edit('enrollment', 'ccteam-enroll:id:secret') await card.save() @@ -170,9 +214,9 @@ describe('save', () => { }) it('keeps the drafts and flags failure when the Host did not take the value', async () => { - const { scope, behave } = fakeScope({ value: { daemonUrl: 'old' } }) + const { mirror, scope, behave } = fakeScope({ value: { daemonUrl: 'old' } }) behave('reject') - const card = new SettingsCardController(scope, CCTEAM_CARD) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) const face = card.inject() face.edit('daemonUrl', 'new') await card.save() @@ -184,17 +228,17 @@ describe('save', () => { }) it('treats a rejected write as a failed save rather than throwing', async () => { - const { scope, behave } = fakeScope() + const { mirror, scope, behave } = fakeScope() behave('throw') - const card = new SettingsCardController(scope, CCTEAM_CARD) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) card.inject().edit('daemonUrl', 'new') await expect(card.save()).resolves.toBeUndefined() expect(card.getSnapshot().failed).toBe(true) }) it('is a no-op with nothing staged and while a save is in flight', async () => { - const { scope, writes } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, writes } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) await card.save() expect(writes).toEqual([]) card.inject().edit('daemonUrl', 'a') @@ -208,8 +252,8 @@ describe('save', () => { describe('toggles', () => { it('projects a live toggle from the effective value, defaulting per spec, apart from the staged fields', () => { - const { scope, host } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, host } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) expect(card.getSnapshot().toggles).toEqual({ autoStart: true }) expect(card.getSnapshot().fields.autoStart).toBeUndefined() host({ value: { autoStart: false } }) @@ -217,8 +261,8 @@ describe('toggles', () => { }) it('setToggle writes at once (no staging) and reads the outcome back', async () => { - const { scope, writes } = fakeScope() - const card = new SettingsCardController(scope, CCTEAM_CARD) + const { mirror, scope, writes } = fakeScope() + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) await card.setToggle('autoStart', false) expect(writes).toEqual([{ op: 'set', field: 'autoStart', value: false }]) expect(card.getSnapshot()).toMatchObject({ failed: false, saving: false, dirty: false }) @@ -226,9 +270,9 @@ describe('toggles', () => { }) it('setToggle reports failure when the Host keeps the old value', async () => { - const { scope, behave } = fakeScope() + const { mirror, scope, behave } = fakeScope() behave('reject') - const card = new SettingsCardController(scope, CCTEAM_CARD) + const card = new SettingsCardController(scope, CCTEAM_CARD, mirror) await card.setToggle('autoStart', false) expect(card.getSnapshot().failed).toBe(true) expect(card.getSnapshot().toggles.autoStart).toBe(true) diff --git a/dsh-plugins/ccteam-ui/tests/host-apply.test.ts b/dsh-plugins/ccteam-ui/tests/host-apply.test.ts index 8d341e7b..733ceb7d 100644 --- a/dsh-plugins/ccteam-ui/tests/host-apply.test.ts +++ b/dsh-plugins/ccteam-ui/tests/host-apply.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import { apply } from '../src/index.js' +import { apply, Config } from '../src/index.js' import { AcpClient, makeFakeCtx, shortSocketPath } from './host-cordis-fakes.js' interface WireCall { @@ -51,7 +51,7 @@ afterEach(() => { describe('apply', () => { it('registers exactly the six ccteam tool names', () => { const h = makeFakeCtx() - apply(h.ctx as never) + apply(h.ctx as never, Config({ enrollment: 'ccteam-enroll:e1:secret', daemonUrl: 'http://daemon.test' })) expect(h.tools.map(tool => tool.name).sort()).toEqual([ 'agent', @@ -66,7 +66,7 @@ describe('apply', () => { it('runs tool-surface-only (mode 2) on the enrollment credential with no listeners', async () => { const calls = stubDaemon() const h = makeFakeCtx({ settings: { enrollment: 'ccteam-enroll:e1:secret' } }) - apply(h.ctx as never) + apply(h.ctx as never, Config({ enrollment: 'ccteam-enroll:e1:secret', daemonUrl: 'http://daemon.test' })) expect(h.ctx.on).not.toHaveBeenCalled() @@ -84,7 +84,7 @@ describe('apply', () => { process.env.CCTEAM_DSH_APPROVAL = 'hitl' const calls = stubDaemon() const h = makeFakeCtx({ settings: { enrollment: 'ccteam-enroll:e1:secret' } }) - apply(h.ctx as never) + apply(h.ctx as never, Config({ enrollment: 'ccteam-enroll:e1:secret', daemonUrl: 'http://daemon.test' })) // No transport: the env switch is gone, only `transportSocket` starts one. expect(h.ctx.on).not.toHaveBeenCalled() @@ -101,10 +101,10 @@ describe('apply', () => { * (schema default), so the enrollment a human pasted into the DSH settings * card must still win. */ - it('takes the enrollment from the settings card when the row config carries the schema default', async () => { + it('uses the native live enrollment reference', async () => { const calls = stubDaemon() const h = makeFakeCtx({ settings: { enrollment: 'ccteam-enroll:from-card:secret' } }) - apply(h.ctx as never, { enrollment: '', daemonUrl: '' }) + apply(h.ctx as never, Config({ enrollment: 'ccteam-enroll:from-card:secret', daemonUrl: 'http://daemon.test' })) const status = h.tools.find(tool => tool.name === 'status')! await status.execute({}, { agent: { id: 'dsh-1', session: { id: 'dsh-1' }, followup: vi.fn() } }) @@ -119,7 +119,7 @@ describe('apply', () => { const calls = stubDaemon() const socketPath = shortSocketPath() const h = makeFakeCtx({ settings: { enrollment: 'ccteam-enroll:e1:secret' } }) - apply(h.ctx as never, { transportSocket: socketPath }) + apply(h.ctx as never, Config({ transportSocket: socketPath, enrollment: 'ccteam-enroll:e1:secret', daemonUrl: 'http://daemon.test' })) const client = await AcpClient.connect(socketPath) closers.push(() => client.close()) diff --git a/dsh-plugins/ccteam-ui/tests/host-build.test.ts b/dsh-plugins/ccteam-ui/tests/host-build.test.ts index 2f321f58..5ef48542 100644 --- a/dsh-plugins/ccteam-ui/tests/host-build.test.ts +++ b/dsh-plugins/ccteam-ui/tests/host-build.test.ts @@ -73,7 +73,7 @@ describe('client bundle loader contract', () => { expect(typeof exported).toBe('object') expect(exported.name).toBe('ccteam-ui') expect(typeof exported.apply).toBe('function') - expect(exported.inject).toEqual(['slots', 'locale', 'settingsScope']) + expect(exported.inject).toEqual(['slots', 'locale']) // Whatever the client half requires must be answerable by the module table. expect(required.length).toBeGreaterThan(0) for (const spec of required) expect(isClientExternal(spec)).toBe(true) @@ -108,12 +108,12 @@ describe('client bundle loader contract', () => { // convention every DSH client package follows (ui-goal lists // ui-conversation, ui-settings-general lists ui-sidebar). expect(pkg.dsh.client.inject).toEqual([ - '@deepseek-ai/dsh-client-runtime', '@deepseek-ai/dsh-client-locale', '@deepseek-ai/dsh-client-ui-layout', '@deepseek-ai/dsh-client-ui-sidebar', '@deepseek-ai/dsh-client-ui-settings', - '@deepseek-ai/dsh-client-ui-settings-plugins', + '@deepseek-ai/dsh-client-ui-renderer', + '@deepseek-ai/dsh-client-ui-workspace', ]) expect(pkg.files).toContain('lib') expect(pkg.files).toContain('cordis.patch.yml') @@ -131,10 +131,9 @@ describe('client bundle loader contract', () => { }) describe('client externals', () => { - it('is exactly the platform seed table plus the preloaded runtime', () => { + it('is exactly only the shared platform modules used by this plugin', () => { expect([...CLIENT_EXTERNALS].sort()).toEqual([ '@deepseek-ai/cordis', - '@deepseek-ai/dsh-client-runtime/client', '@deepseek-ai/dsh-client-ui-primitives', '@deepseek-ai/dsh-client-ui-slots', 'react', diff --git a/dsh-plugins/ccteam-ui/tests/host-cordis-fakes.ts b/dsh-plugins/ccteam-ui/tests/host-cordis-fakes.ts index 9d510d40..5d734e6c 100644 --- a/dsh-plugins/ccteam-ui/tests/host-cordis-fakes.ts +++ b/dsh-plugins/ccteam-ui/tests/host-cordis-fakes.ts @@ -93,6 +93,7 @@ export function makeFakeCtx(options?: { // Mirrors the vendor roster: resolve(undefined) falls back to the default id. resolve: vi.fn(async (id?: string) => ({ id: id ?? 'standard' })), mount: vi.fn(async (_agentCtx: unknown, _id?: string) => undefined), + presetForSession: vi.fn((_session: unknown) => 'cordis'), } const persistenceInspect = vi.fn(async (_sessionId: string) => options?.persistence ?? {}) const permissionPresets = { set: vi.fn((_session: unknown, _name: string) => undefined) } @@ -212,7 +213,13 @@ export function makeFakeCtx(options?: { emit('session/event', { id: sessionId }, { type, seq: 1, time: new Date().toISOString(), data }) } + const assistantStream = (sessionId: string, data: { turn: number; step?: number; chunk: unknown }) => { + const agent = agents.get(sessionId) + emit('agent/assistant-stream', { agent, frame: { type: 'start', attemptId: 'attempt-1', revision: 1, turn: data.turn, step: 0 } }) + emit('agent/assistant-stream', { agent, frame: { type: 'chunk', attemptId: 'attempt-1', revision: 1, index: 0, time: 0, chunk: data.chunk } }) + } return { + assistantStream, ctx, inject, tools, diff --git a/dsh-plugins/ccteam-ui/tests/host-engine-bff.test.ts b/dsh-plugins/ccteam-ui/tests/host-engine-bff.test.ts index 8205fe9d..d09502fd 100644 --- a/dsh-plugins/ccteam-ui/tests/host-engine-bff.test.ts +++ b/dsh-plugins/ccteam-ui/tests/host-engine-bff.test.ts @@ -11,7 +11,7 @@ import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' import { createBff, type EngineFace } from '../src/bff.js' -import { ENGINE_VERSION, apply } from '../src/index.js' +import { ENGINE_VERSION, apply, Config } from '../src/index.js' import { DEFAULT_DAEMON_URL } from '../src/settings.js' import { API_PREFIX, type ApiMethod, type EngineStatus } from '../src/shared/contract.js' import { FakeFetch, FakeRequest, FakeResponse, FakeWebServer, hostCtx } from './host-fakes.js' @@ -160,24 +160,8 @@ describe('engine methods through the BFF', () => { describe('a schema default is a blank row, not a pin', () => { function applied(config: Record, card: Record = {}) { const server = new FakeWebServer() - const ctx = hostCtx({ - webServer: server, - settings: { - register: () => ({ - get: () => ({ - daemonUrl: DEFAULT_DAEMON_URL, - enrollment: '', - restToken: '', - defaultProject: '', - connectionStatus: '', - autoStart: false, - enginePath: '', - ...card, - }), - }), - }, - }) - apply(ctx as never, config as never) + const ctx = hostCtx({ webServer: server }) + apply(ctx as never, Config({ autoStart: false, ...config, ...card })) return server } @@ -208,9 +192,9 @@ describe('a schema default is a blank row, not a pin', () => { expect(status.supervised).toBe(true) }) - it('does read a ccteam-materialized row — one carrying credentials — as exactly that', async () => { + it('does read a ccteam-materialized row — explicitly marked engineManaged — as exactly that', async () => { const status = await engineStatusOf( - applied({ daemonUrl: 'http://127.0.0.1:7331', restToken: 'ccteam:deadbeef' }), + applied({ engineManaged: true, daemonUrl: 'http://127.0.0.1:7331', restToken: 'ccteam:deadbeef' }), ) expect(status.supervised).toBe(false) diff --git a/dsh-plugins/ccteam-ui/tests/host-settings.test.ts b/dsh-plugins/ccteam-ui/tests/host-settings.test.ts index 10aea555..0e6415f2 100644 --- a/dsh-plugins/ccteam-ui/tests/host-settings.test.ts +++ b/dsh-plugins/ccteam-ui/tests/host-settings.test.ts @@ -1,287 +1,61 @@ -import Schema from '@deepseek-ai/schemastery' -import { describe, expect, it, vi } from 'vitest' -import { apply } from '../src/index.js' -import { - DEFAULT_DAEMON_URL, - SETTINGS_NAMESPACE, - registerCcteamSettings, - type CcteamSettings, -} from '../src/settings.js' -import { FakeFetch, FakeRequest, FakeResponse, FakeWebServer, hostCtx } from './host-fakes.js' - -interface Registration { - ns: string - schema: Schema - options: { applies?: string; base?: Record } | undefined -} - -interface SchemaNode { - type: string - meta?: { default?: unknown; role?: string; description?: string } - dict?: Record -} - -/** - * `Schema.toJSON()` serializes a ref graph — `{uid, refs}` where an object - * node's `dict` maps each key to a ref id — so field assertions resolve - * through `refs` rather than reading `dict` as inline nodes. - */ -function describeSchema(schema: Schema): { - type: string - fields: Record -} { - const json = schema.toJSON() as unknown as { uid: number; refs: Record } - const root = json.refs[String(json.uid)]! - const fields: Record = {} - for (const [key, ref] of Object.entries(root.dict ?? {})) { - fields[key] = json.refs[String(ref)]! - } - return { type: root.type, fields } -} - -function fakeSettings(stored: Partial = {}) { - const registrations: Registration[] = [] - const service = { - register( - ns: string, - schema: Schema, - options?: { applies?: 'live' | 'restart'; base?: Partial }, - ) { - registrations.push({ - ns, - schema: schema as Schema, - options: options as Registration['options'], - }) - return { - get: () => ({ - daemonUrl: DEFAULT_DAEMON_URL, - enrollment: '', - restToken: '', - defaultProject: '', - connectionStatus: '', - ...stored, - }) as T, - } - }, - } - return { service, registrations } -} - -describe('settings registration', () => { - it('registers one namespace whose schema carries the documented fields', () => { - const { service, registrations } = fakeSettings() - registerCcteamSettings({ settings: service }) - - expect(registrations).toHaveLength(1) - const [registration] = registrations - expect(registration!.ns).toBe(SETTINGS_NAMESPACE) - expect(registration!.ns).toBe('ccteam-ui') - - // Structural assertion on the serialized schema, not a substring match: - // the bug class here is "right text, wrong shape". - const { type, fields } = describeSchema(registration!.schema) - expect(type).toBe('object') - expect(Object.keys(fields).sort()).toEqual([ - 'autoStart', - 'connectionStatus', - 'daemonUrl', - 'defaultProject', - 'enginePath', - 'enrollment', - 'restToken', - ]) - expect(fields.daemonUrl!.type).toBe('string') - expect(fields.daemonUrl!.meta!.default).toBe(DEFAULT_DAEMON_URL) - }) - - /** - * `autoStart` is ON by default because `dsh plugin --profile add @ccteam/ccteam-ui` is - * meant to be the whole install (PRD G2). It is also the one key whose - * default is load-bearing in the OTHER direction: it lives on the settings - * card and NOT in the profile row schema, because Cordis fills every row - * default before `apply` and a row-level boolean would arrive `true` for - * every profile, leaving the user's `false` unreachable. - */ - it('defaults auto-start on and leaves the engine path unset', () => { - const { service, registrations } = fakeSettings() - registerCcteamSettings({ settings: service }) - - const { fields } = describeSchema(registrations[0]!.schema) - expect(fields.autoStart!.type).toBe('boolean') - expect(fields.autoStart!.meta!.default).toBe(true) - expect(fields.enginePath!.type).toBe('string') - expect(fields.enginePath!.meta!.default).toBe('') - }) - - it('marks both credentials secret so the settings UI never renders them in the clear', () => { - const { service, registrations } = fakeSettings() - registerCcteamSettings({ settings: service }) - - const { fields } = describeSchema(registrations[0]!.schema) - for (const field of ['restToken', 'enrollment'] as const) { - expect(fields[field]!.meta!.role).toBe('secret') - expect(fields[field]!.meta!.default).toBe('') - } - // Exactly the credentials claim the secret role — nothing else, and nothing missing. - const secrets = Object.entries(fields) - .filter(([, field]) => field.meta?.role === 'secret') - .map(([key]) => key) - .sort() - expect(secrets).toEqual(['enrollment', 'restToken']) - }) - - it('passes plugin config through as the settings base', () => { - const { service, registrations } = fakeSettings() - registerCcteamSettings({ settings: service }, { - daemonUrl: 'http://10.0.0.4:7331', - restToken: 'ccteam:abc', - }) - - expect(registrations[0]!.options?.base).toEqual({ - daemonUrl: 'http://10.0.0.4:7331', - restToken: 'ccteam:abc', - }) - }) - - it('still resolves values when the settings service is absent', () => { - const scope = registerCcteamSettings({}, { daemonUrl: 'http://elsewhere:1234' }) - const value = scope.get() - - expect(value.daemonUrl).toBe('http://elsewhere:1234') - expect(value.restToken).toBe('') - expect(value.connectionStatus).toContain('ccteam start') - }) - - it('defaults the daemon URL when neither config nor settings supply one', () => { - expect(registerCcteamSettings({}).get().daemonUrl).toBe(DEFAULT_DAEMON_URL) - }) +import { updateVolatile } from '@deepseek-ai/cosmokit' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { Config, apply } from '../src/index.js' +import { bindCcteamSettings, DEFAULT_DAEMON_URL } from '../src/settings.js' +import { FakeRequest, FakeResponse, FakeWebServer, hostCtx } from './host-fakes.js' +import { API_PREFIX } from '../src/shared/contract.js' + +afterEach(async () => { + vi.unstubAllGlobals() }) -describe('config-over-settings precedence', () => { - /** - * Drives the REAL `apply()` wiring: stub the global fetch, run the route the - * plugin registered, and read back which daemon URL and token it used. This - * exercises the precedence closures rather than restating them. - */ - async function probe( - config: Partial, - stored: Partial, - payload: unknown = {}, - method = 'status', - ): Promise { - const fake = new FakeFetch() - .on('/api/v1/capabilities', { json: { harnesses: [] } }) - .on('/sessions', { status: 201, json: { sid: 's1' } }) - vi.stubGlobal('fetch', fake.fetch) - try { - const server = new FakeWebServer() - const { service } = fakeSettings(stored) - apply(hostCtx({ webServer: server, settings: service }) as never, config) - const res = new FakeResponse() - await server.handler()( - new FakeRequest('POST', `/ccteam/api/${method}`, payload).asIncomingMessage(), - res.asServerResponse(), - ) - } finally { - vi.unstubAllGlobals() - } - return fake - } - - it('prefers a config value over the settings value', async () => { - const fake = await probe( - { daemonUrl: 'http://from-config:7331', restToken: 'ccteam:from-config' }, - { - daemonUrl: 'http://from-settings:7331', - restToken: 'ccteam:from-settings', - defaultProject: 'settings-project', - }, - ) - - expect(fake.calls[0]!.url).toBe('http://from-config:7331/api/v1/capabilities') - expect(fake.calls[0]!.authorization).toBe('Bearer ccteam:from-config') - }) - - it('falls back to the settings value for anything config does not pin', async () => { - const fake = await probe( - { daemonUrl: 'http://from-config:7331' }, - { restToken: 'ccteam:from-settings', defaultProject: 'settings-project' }, - ) - - expect(fake.calls[0]!.url).toBe('http://from-config:7331/api/v1/capabilities') - expect(fake.calls[0]!.authorization).toBe('Bearer ccteam:from-settings') - }) - - it('takes the spawn project from the settings card when config is silent', async () => { - const fake = await probe( - {}, - { defaultProject: 'settings-project' }, - { vendor: 'claude' }, - 'session.spawn', - ) - - expect(fake.calls[0]!.url).toContain('/api/v1/projects/settings-project/sessions') - }) - - /** - * The regression this exists for: Cordis validates the row config against - * this plugin's `Config` schema BEFORE apply, so a key the row omits arrives - * as its schema default (`''`), not as undefined. Under a plain `??` that - * empty string wins and the settings card is dead — which is exactly how a - * hand-started `dsh web` is documented to supply its credentials (real - * machine, DSH 0.1.1-rc.2: "ccteam MCP credential is not configured" with a - * perfectly good enrollment string in DSH Settings). - */ - it('treats an empty config value as unpinned, so the settings card still decides', async () => { - const fake = await probe( - { daemonUrl: '', restToken: ' ' }, - { daemonUrl: 'http://from-settings:7331', restToken: 'ccteam:from-settings' }, - ) - - expect(fake.calls[0]!.url).toBe('http://from-settings:7331/api/v1/capabilities') - expect(fake.calls[0]!.authorization).toBe('Bearer ccteam:from-settings') - }) - - it('falls back to the built-in daemon URL when neither layer has one', async () => { - const fake = await probe({ daemonUrl: '' }, { daemonUrl: '' }) - - expect(fake.calls[0]!.url).toBe(`${DEFAULT_DAEMON_URL}/api/v1/capabilities`) - }) - - it('apply() wires the settings card and the BFF route together, once', () => { - const server = new FakeWebServer() - const { service, registrations } = fakeSettings({ restToken: 'ccteam:stored' }) - apply(hostCtx({ webServer: server, settings: service }) as never) - - expect(registrations).toHaveLength(1) - expect(server.routes).toHaveLength(1) - expect(server.routes[0]!.path).toBe('/ccteam/api') - }) - - it('reads the token live, so editing the settings card needs no restart', async () => { - const fake = new FakeFetch().on('/api/v1/capabilities', { json: { harnesses: [] } }) - let token = 'ccteam:first' - const { createBff } = await import('../src/bff.js') - const bff = createBff({ - daemonUrl: () => 'http://127.0.0.1:7331', - restToken: () => token, - fetchImpl: fake.fetch, +describe('native live Config', () => { + it('resolves defaults and exposes one volatile reference per preference', () => { + const config = Config({}) + expect(bindCcteamSettings({}, config).get()).toEqual({ + daemonUrl: DEFAULT_DAEMON_URL, enrollment: '', restToken: '', defaultProject: '', + connectionStatus: expect.any(String), autoStart: true, enginePath: '', }) - - const call = async (): Promise => { - const res = new FakeResponse() - await bff.handle( - new FakeRequest('POST', '/ccteam/api/status', {}).asIncomingMessage(), - res.asServerResponse(), - ) - } - await call() - token = 'ccteam:second' - await call() - - expect(fake.calls.map(entry => entry.authorization)).toEqual([ - 'Bearer ccteam:first', - 'Bearer ccteam:second', - ]) + expect(config.engineManaged).toBe(false) + expect(config.transportSocket).toBeUndefined() + }) + + it('reads the same native references after a Loader volatile update', () => { + const config = Config({ enrollment: 'first', autoStart: false }) + const settings = bindCcteamSettings({}, config) + // This is the reference commit operation used by Loader Entry.update. + updateVolatile(config.enrollment, Config({ enrollment: 'second' }).enrollment) + expect(settings.get().enrollment).toBe('second') + }) + + it('persists bootstrap enrollment into its actual Loader entry', async () => { + const update = vi.fn(async () => {}) + const settings = bindCcteamSettings({ + get: name => name === 'settings' ? { update } : undefined, + fiber: { entry: { id: 'user-selected-ccteam-entry' } }, + }, Config({})) + await settings.update?.({ enrollment: 'ccteam-enroll:e1:secret' }) + expect(update).toHaveBeenCalledWith('user-selected-ccteam-entry', { enrollment: 'ccteam-enroll:e1:secret' }) + }) + + it('serves the workbench without a settings service or agent runtime', async () => { + const fetch = vi.fn(async () => new Response(JSON.stringify({ projects: [] }))) + vi.stubGlobal('fetch', fetch) + const webServer = new FakeWebServer() + apply(hostCtx({ webServer }) as never, Config({ + autoStart: false, daemonUrl: 'http://daemon.test', restToken: 'personal', + })) + const response = new FakeResponse() + await webServer.handler()(new FakeRequest('POST', `${API_PREFIX}/catalog.projects`, {}).asIncomingMessage(), response.asServerResponse()) + expect(fetch).toHaveBeenCalled() + expect(response.statusCode).toBe(200) + expect(JSON.stringify(response.json())).not.toContain('personal') + }) + + it('declares credentials as secret volatile fields in the native schema', () => { + const schema = Config.toJSON() as unknown as { refs: Record } + const secrets = Object.values(schema.refs).filter(node => node.meta?.role === 'secret') + expect(secrets).toHaveLength(2) + expect(secrets.every(node => node.meta?.volatile === true)).toBe(true) }) }) diff --git a/dsh-plugins/ccteam-ui/tests/host-transport.test.ts b/dsh-plugins/ccteam-ui/tests/host-transport.test.ts index 9c2311f7..68cbc35f 100644 --- a/dsh-plugins/ccteam-ui/tests/host-transport.test.ts +++ b/dsh-plugins/ccteam-ui/tests/host-transport.test.ts @@ -97,11 +97,11 @@ describe('DSH ACP socket transport', () => { h.sessionEvent(sessionId, 'turn/start', { turn: 1 }) h.sessionEvent(sessionId, 'user/message', { id: messageId, role: 'user', content: [{ type: 'text', text: 'hello' }] }) - h.sessionEvent(sessionId, 'assistant/chunk', { turn: 1, step: 0, chunk: { type: 'reasoning-delta', text: 'thinking' } }) + h.assistantStream(sessionId, { turn: 1, step: 0, chunk: { type: 'reasoning-delta', text: 'thinking' } }) h.sessionEvent(sessionId, 'assistant/message', { turn: 1, step: 0, - message: { content: [{ type: 'text', text: 'partial answer' }] }, + message: { content: [{ type: 'reasoning', text: 'thinking' }, { type: 'text', text: 'partial answer' }] }, usage: { inputTokens: 4, outputTokens: 2 }, }) h.sessionEvent(sessionId, 'turn/end', { turn: 1, reason: { kind: 'max-tokens' } }) @@ -115,6 +115,7 @@ describe('DSH ACP socket transport', () => { sessionId, update: { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: 'partial answer' } }, }) + expect(client.updates.filter(update => (update.update as { sessionUpdate: string }).sessionUpdate === 'agent_thought_chunk')).toHaveLength(1) expect(client.updates).toContainEqual({ sessionId, update: { sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: 'thinking' } }, @@ -200,15 +201,7 @@ describe('DSH ACP socket transport', () => { }) it('re-mounts the STORED preset on resume, ignoring the _meta request', async () => { - const h = await startTransport({ - persistence: { - meta: { agentPreset: 'minimal' }, - events: [ - { type: 'agent-preset/selected', data: { agentPreset: 'cordis' } }, - { type: 'turn/start', data: { turn: 1 } }, - ], - }, - }) + const h = await startTransport() const client = await connectClient(h.socketPath) await client.request('session/load', { @@ -216,11 +209,12 @@ describe('DSH ACP socket transport', () => { _meta: { ccteam: { agentPreset: 'code' } }, }) - const request = h.resume.mock.calls[0]![0] as { setup?: (agentCtx: unknown) => Promise } + const request = h.resume.mock.calls[0]![0] as { setup?: (agentCtx: unknown, agent: unknown) => Promise } expect(request.setup).toBeTypeOf('function') - await request.setup!('agent-ctx') - // The newest agent-preset/selected event outranks the creation header, - // and the ccteam-side request never overrides vendor storage. + const agent = h.agents.get('persisted-1')! + await request.setup!('agent-ctx', agent) + expect(h.agentPresets.presetForSession).toHaveBeenCalledWith(agent.session) + // DSH resolves its persisted selection; the bridge never replays its log. expect(h.agentPresets.mount).toHaveBeenCalledWith('agent-ctx', 'cordis') }) @@ -305,7 +299,7 @@ describe('DSH ACP socket transport', () => { // A human types in the DSH web UI while our message waits in the inbox. h.sessionEvent(sessionId, 'turn/start', { turn: 1 }) h.sessionEvent(sessionId, 'user/message', { id: 'human-message', role: 'user', content: [{ type: 'text', text: 'hi' }] }) - h.sessionEvent(sessionId, 'assistant/chunk', { turn: 1, step: 0, chunk: { type: 'reasoning-delta', text: 'human thought' } }) + h.assistantStream(sessionId, { turn: 1, step: 0, chunk: { type: 'reasoning-delta', text: 'human thought' } }) h.sessionEvent(sessionId, 'assistant/message', { turn: 1, step: 0, @@ -326,11 +320,11 @@ describe('DSH ACP socket transport', () => { h.sessionEvent(sessionId, 'assistant/message', { turn: 2, step: 0, - message: { content: [{ type: 'text', text: 'ccteam answer' }] }, + message: { content: [{ type: 'reasoning', text: 'settled thought' }, { type: 'text', text: 'ccteam answer' }] }, usage: { inputTokens: 7, outputTokens: 3 }, }) h.sessionEvent(sessionId, 'tool/call', { turn: 2, step: 0, callId: 'ours', name: 'bash', arguments: '{"a":1}' }) - h.sessionEvent(sessionId, 'tool/result', { turn: 2, step: 0, message: { source: { callId: 'ours' }, content: [] } }) + h.sessionEvent(sessionId, 'tool/result', { turn: 2, step: 0, message: { source: { callId: 'ours' }, content: [], isError: true } }) h.sessionEvent(sessionId, 'turn/end', { turn: 2, reason: { kind: 'completed' } }) const result = await prompt @@ -338,8 +332,10 @@ describe('DSH ACP socket transport', () => { stopReason: 'end_turn', _meta: { inputTokens: 7, outputTokens: 3 }, }) + expect(client.updates).toContainEqual({ sessionId, update: expect.objectContaining({ sessionUpdate: 'tool_call_update', toolCallId: 'ours', status: 'failed', isError: true }) }) const texts = JSON.stringify(client.updates) expect(texts).toContain('ccteam answer') + expect(texts).toContain('settled thought') expect(texts).not.toContain('human answer') expect(texts).not.toContain('human thought') expect(texts).not.toContain('human-call') diff --git a/dsh-plugins/pack-assets.sh b/dsh-plugins/pack-assets.sh index a21c3cb1..c612a66c 100755 --- a/dsh-plugins/pack-assets.sh +++ b/dsh-plugins/pack-assets.sh @@ -75,7 +75,12 @@ for plugin in "${plugins[@]}"; do # Two-path reproducibility gate: same source, different directory, same bytes. mirror="$staging/mirror-$plugin" rm -rf "$mirror" - cp -al "$src" "$mirror" 2>/dev/null || cp -a "$src" "$mirror" + if ! cp -al "$src" "$mirror" 2>/dev/null; then + # A cross-filesystem hardlink failure can leave a partial destination. + # Recreate it so the fallback cannot nest the source beneath that directory. + rm -rf "$mirror" + cp -a "$src" "$mirror" + fi (cd "$mirror" && npm run build >/dev/null) mirror_out="$staging/$plugin-mirror" mkdir -p "$mirror_out" From 47872fc8af3bc6ac29b9399a5a529ce589cdfc77 Mon Sep 17 00:00:00 2001 From: firstintent <239836187+firstintent@users.noreply.github.com> Date: Mon, 2 Nov 2026 19:02:34 +0800 Subject: [PATCH 6/9] refactor(projects): unify minimal project creation Implements docs-local/issues/222-20261102-unify-project-creation-files.md (s694). All creation paths share state refresh, owner stamping and registry updates; seed only AGENTS.md for an empty project and stop generating CLAUDE.md or workflow.yaml. Preserve existing teams unless explicitly supplied, keep user files on refresh and force, and align the documented footprint. Validate with make check, make test, and make test-web in an isolated HOME/CCTEAM_HOME with a deterministic Claude availability probe. --- AGENTS.md | 8 +- README.md | 2 +- crates/ccteam-cli/src/commands.rs | 320 +++++-------- crates/ccteam-cli/src/main.rs | 2 +- crates/ccteam-cli/src/web_chat_bridge.rs | 10 +- crates/ccteam-core/src/lib.rs | 5 +- crates/ccteam-core/src/projects.rs | 443 ++++++++++++------ crates/ccteam-core/src/tool_surface.rs | 2 +- crates/ccteam-im/src/gateway.rs | 48 +- crates/ccteam-im/tests/inbound_wiring_test.rs | 11 +- crates/ccteam-web/src/routes/projects.rs | 46 +- crates/ccteam-web/src/satellite.rs | 49 +- crates/ccteam-web/tests/resource_api_test.rs | 39 ++ docs/usage-cn.md | 4 +- docs/usage.md | 4 +- 15 files changed, 575 insertions(+), 418 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2a52658a..80b486e5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -61,12 +61,12 @@ ccteam = 多 harness agent 团队的桥接与治理层:常驻 daemon(IM gateway | **session 调度门 = daemon 校验 per-session principal `(sid,secret)`(best-effort,非硬边界)** | 3 个 `agent*` 工具由 daemon 按 principal 校验:spawn 时 mint per-session secret,受管会话走 HTTP bearer `ccteam-sid::`;`verify_session_principal` 常数时比对;caller 的 project 服务端覆写(只能操作自己 project),授权只认 principal;`agent`/`agent_stop` 是显式调度,stop 限后代 + depth/children/delegated/cycle/预算护栏。手起会话 = enrolled client:凭 vendor 全局配置里的 enrollment 凭据(`ccteam-enroll::`)在 `initialize` 领 `Mcp-Session-Id`,daemon 铸 ledger 节点 + principal 并 promote(同一条 Ambient 路);节点 `managed_by: external` 不进 gateway live map,`agent`/`agent_stop` 对它一律拒绝;凭据没钉 project 时 caller 必须自己点名 workspace(首次点名即终身绑定),cwd / peer / 最近项目等推断一律不做。ACP 面无 `--strict-mcp-config` 同类物 → `/mcp` 按进程血缘(adapter 握手前登记子 pid + `/proc` 上溯)绑回 principal,两条路都没到才发 `identity_degraded`(只广播)。诚实范围:单 OS-uid 全信任模型下 agent 间无硬边界,secret 只抬门槛;真隔离 = per-agent OS user/sandbox(deferred) | | **委派语义 = 路由,非新引擎;完成通知非注入** | `agent{task,sid}` 与 IM `@handle` 同路;完成通知 = gateway 生成的一条普通 user-role turn 投给 parent(live = vendor steer / dead = pending FIFO + resume),与人转告同构;通知单位 = 任务(vendor turn 边界),中途叙述只进账本;child turns 按 child sid 落 `turns.jsonl`,委派关系写 `progress.jsonl`,不伪造进对方 transcript。可靠性合同:幂等 `agent`(`idempotency_key`)· at-least-once 通知扛重启(`delegation.json` 落盘 + 启动 reconcile)· append→notify 顺序 · 原子写;单 daemon 无 HA,是协议语义可靠 | | **跨机 = host 是 project 属性,session 继承;网络方向 = 卫星拨入** | host 住 project catalog(`~/.ccteam/config.yaml`,条目含 `host` + `remote_slug`;slug 相同 ≠ 同一项目);spawn 面无 host 参数(传入即硬错 `HOST_SPAWN_PARAM_REMOVED`);记账一律 catalog slug;远程项目进入 = web 选主机新建或 `POST /projects/import` 接入卫星已上报项目(绝不自动接入;撞名累加、幂等);卫星零监听面:`ccteam start` 进程内嵌卫星客户端出站长连 daemon,卫星自己解析 binary + cwd,主侧永不下发路径;terminal 永不上多机;rebuild 一律 re-gate project 绑定(host 不符或卫星 offline → 可读错误,绝不本地重生);远程 verdict 钉 claude,其余 vendor 远程 = 显式 NotImplemented | -| **不改写已有项目 `CLAUDE.md`/`AGENTS.md`** | 项目知识层归 vendor 原生 + 项目自己;唯一放宽:对真空项目(两文件都不存在)scaffold `AGENTS.md` + `CLAUDE.md` = `@AGENTS.md`,绝不覆盖已有内容;`.ccteam/` 幂等加进项目 `.gitignore` | -| **vendor 配置足迹 = 只写自家 MCP 注册** | 对 vendor 全局配置(`~/.claude.json`、`~/.codex/config.toml`、grok/opencode/kimi 对称面)的唯一写入 = 幂等注册/修复自己的 MCP server 条目;项目侧只写 `.claude/settings.local.json` 自己的段(绝不碰用户 `.claude/settings.json`);pi 不写任何配置 | +| **不改写已有项目 `CLAUDE.md`/`AGENTS.md`** | 项目知识层归 vendor 原生 + 项目自己;唯一放宽:对真空项目(两文件都不存在)只 scaffold `AGENTS.md`,不写 `CLAUDE.md`,绝不覆盖已有内容;`.ccteam/` 幂等加进项目 `.gitignore` | +| **vendor 配置足迹 = 只写自家注册与显式设置** | vendor 全局配置只幂等注册/修复自己的 MCP server 条目,另在 `~/.claude.json` 标记项目 trust;创建项目不写 Claude 设置,仅清理旧 ccteam hook/Telegram 插件钉;显式插件/effort 设置只动 `.claude/settings.local.json` 自己的键,绝不碰用户 `.claude/settings.json`;pi 不写任何配置 | | **`ccteam-core` 零 team 名字面量** | core = primitives leaf,team 名不入 core | | **repo 零提示词类型内容(零例外)** | agent/persona/skill/workflow 的内容一律不进 ccteam repo;住 ccteam-hub 或用户空间,ccteam 只读 index、按 sha 取内容;用户项目里既有 `.claude/agents/*.md` 是用户文件,不删不改 | | **跨项目记忆走官方接口** | Claude `~/.claude/CLAUDE.md` + `~/.claude/rules/*.md`;Codex `~/.codex/AGENTS.md` —— ccteam 只读 | -| **init 布局** | 项目 `.ccteam/` 只种 `state.json` + `workflow.yaml`(`routing.md` 用户可选自建,`status` 原文透传);`~/.ccteam` 规范布局 = `ccteam_core::canonical_home_dirs()`(doctor 查 home-drift) | +| **init 布局** | CLI/Web/IM/卫星统一走 `create_project`:项目 `.ccteam/` 只种 `state.json`,不种 `workflow.yaml`(`workflow.yaml`/`routing.md` 用户可选自建,读侧照用);`~/.ccteam` 规范布局 = `ccteam_core::canonical_home_dirs()`(doctor 查 home-drift) | | **新建项目 slug = `slugify(目录名)` + 撞名数字累加** | `ccteam init` 可在任意现有目录就地初始化;`--slug` 显式覆盖 | **vendor 红线**:不 vendor Claude / Codex 二进制(`references/` 仅协议参考;spawn 走 `$PATH` + `CCTEAM_{CLAUDE,CODEX}_BIN` override);`AgentVendor` 无 default,spawn 必须显式。 @@ -98,7 +98,7 @@ ccteam = 多 harness agent 团队的桥接与治理层:常驻 daemon(IM gateway ## 五、易踩的坑(实战累积) - **不要给 ccteam 自己加 ccteam 风格的 hook/orchestrator** —— 循环引用排错地狱;本仓用 Claude Code 默认行为开发,只产出项目挂 ccteam hook。 -- **ccteam 的 hook 写 `.claude/settings.local.json`**(gitignored、Claude 照读、与用户 `settings.json` 合并);`.claude/settings*.json` 的 `bypassPermissions` 是开发态便利,产品形态走 `--dangerously-skip-permissions`。 +- **创建项目不装 hook、不写 Claude 设置**;重跑 init 仅清理 `.claude/settings.local.json` 中旧 ccteam hook/Telegram 插件钉;冻结的 terminal 协议仍按需装自己的 hook。`.claude/settings*.json` 的 `bypassPermissions` 是开发态便利,产品形态走 `--dangerously-skip-permissions`。 - **测试 `bootstrap_project` / `bootstrap_meta_project` 前必先 `disable_tool_surface_bootstrap_for_tests()`**,否则向真实 `~/.claude.json` 写垃圾,破坏 claude 登录。 - **env-mutating 测试**(`set_var/remove_var HOME/CCTEAM_HOME/CLAUDE_CONFIG_HOME` …)只放 `crates/*/tests/*.rs` integration(独立进程),不放 lib `#[cfg(test)]`(全 workspace 有禁 env 写守卫);新状态面优先 `_in(root)` 注入式 API 而非 home 派生全局函数。 - **测试绝不写真实生产状态**:只把 `HOME` 指到 tempdir 不够 —— `CCTEAM_HOME` 优先级更高(实锤:fixture bot 注册写进真实 registry → telegram 静默失联数小时);隔离必须同时 pin `HOME` + `CCTEAM_HOME`。 diff --git a/README.md b/README.md index 80ae5e73..95d30b93 100644 --- a/README.md +++ b/README.md @@ -233,7 +233,7 @@ Every spawn surface takes `model` and `effort` for every vendor and forwards bot ccteam adds a team to your repo without taking it over: - **Roleless by default** — the brain reads *your* `CLAUDE.md` / `AGENTS.md` through the vendor's own mechanism; ccteam never rewrites project knowledge. -- **Small footprint** — exactly `.ccteam/` (state), `.claude/agents/` (personas you install), and in `.claude/settings.local.json` only the keys you ask for (a hub plugin you enable, an `/effort` you pin) — never your `settings.json`, and no hooks (unless you pick the frozen terminal protocol, which installs its own). +- **Small footprint** — every project creation entry writes `.ccteam/state.json`, adds `.ccteam/` to `.gitignore`, and seeds only an `AGENTS.md` placeholder when neither `AGENTS.md` nor `CLAUDE.md` exists. It creates no `CLAUDE.md`, `workflow.yaml`, roles, or Claude settings. Personas you install live in `.claude/agents/`; explicit plugin/effort settings use only their own keys in `.claude/settings.local.json`, never your `settings.json`. Only the frozen terminal protocol installs hooks. - **Durable sessions** — ids (`s1`, `s2`, …) survive daemon restarts and cold-resume from disk; state is plain files in your repo. A session you are not talking to releases its harness process after an idle window (default 250 minutes) and comes straight back on your next message, on the same id and the same conversation — so a fleet of thirty sessions costs thirty transcripts, not thirty resident processes. One session, one process: a restart never kills an agent mid-turn and never starts a second one beside it — the daemon lets the process finish, queues what you send it meanwhile, recovers the answer it gave from the vendor's own record, and resumes the session by id. ## Extras diff --git a/crates/ccteam-cli/src/commands.rs b/crates/ccteam-cli/src/commands.rs index ce1791a9..3e9ba4f7 100644 --- a/crates/ccteam-cli/src/commands.rs +++ b/crates/ccteam-cli/src/commands.rs @@ -43,10 +43,11 @@ pub struct InitOptions { /// flag — set internally by `project new` / tests; the CLI always /// takes the `dev` default. pub team: Option, - /// Overwrite every ccteam-managed file (state.json, settings.json - /// marker section, workflow.yaml, helper templates). Without `force` - /// re-runs preserve the user-edited workflow. Never touches - /// `.claude/agents/*.md` — ccteam seeds no roles (roleless default). + /// Re-stamp the team on a refresh (a re-run otherwise keeps the recorded + /// one) and step past the install-target guards: the ccteam source repo, + /// `$HOME` / the filesystem root, and a slug already registered at another + /// path. Never touches `.claude/agents/*.md` — ccteam seeds no roles + /// (roleless default). pub force: bool, /// Set the project owner identity (`ProjectState.owner`, /// `"channel:chat_id"` — e.g. `user:` / `telegram:`). A @@ -56,23 +57,23 @@ pub struct InitOptions { pub owner: Option, } -/// Unified project install. Scaffolds `.ccteam/state.json` + -/// `.ccteam/workflow.yaml`, seeds NO roles (roleless default — the -/// default session is a bare vendor reading the project -/// `CLAUDE.md`/`AGENTS.md`), and registers the project in -/// `~/.ccteam/config.yaml`. +/// Unified project install: the install-target and slug guards, then +/// [`ccteam_core::create_project`] — the same creation path web `POST +/// /projects`, IM `/newproject` and the satellite binding use, so they all leave +/// the same files. That is `.ccteam/state.json`, a placeholder `AGENTS.md` for a +/// project with neither `CLAUDE.md` nor `AGENTS.md`, and `.ccteam/` in +/// `.gitignore`, plus the `~/.ccteam/config.yaml::projects[]` entry. It seeds NO +/// roles (roleless default — the default session is a bare vendor reading the +/// project's `AGENTS.md`/`CLAUDE.md`). /// /// Three scenarios, one command: /// -/// 1. **Fresh cwd / fresh dir**: writes `.ccteam/state.json` + -/// `.ccteam/workflow.yaml` and the ccteam-managed hook section in -/// `.claude/settings.local.json`; appends to -/// `~/.ccteam/config.yaml::projects[]`. +/// 1. **Fresh cwd / fresh dir**: creates the project. /// 2. **Existing repo cwd** (no `.ccteam/` yet): same as (1) — never /// touches existing user files. -/// 3. **Already-ccteam project cwd**: refreshes state.json + the -/// settings marker section; preserves `workflow.yaml` unless -/// `--force` (overwrite). `.claude/agents/*.md` is always left alone. +/// 3. **Already-ccteam project cwd**: refreshes `state.json` (the recorded +/// team and owner survive unless given); `.claude/agents/*.md` is always +/// left alone. /// /// MCP registration lives in `ccteam config` (not here). The global /// `~/.ccteam/` skeleton + hook dispatcher are ensured idempotently on @@ -91,10 +92,9 @@ pub fn run_init(paths: &CcteamPaths, opts: InitOptions) -> Result { // `ensure_ccteam_home` (ccteam-core) folds that canonical-dir loop // and the V0.6.1 F139 `hook.sh` dispatcher materialization into one // idempotent call shared by every create/start path (init here, the - // web/IM `bootstrap_project_at_dir`, the daemon at `ccteam start`). - // The hook.sh write must precede `install_project_at` so the - // freshly-rendered `.claude/settings.local.json` hook commands point - // at a file that actually exists. + // web/IM `create_project`, the daemon at `ccteam start`). + // Project creation ensures this home too; keep it here so the install + // checks and receipt can use the global paths before creating a project. ccteam_core::ensure_ccteam_home(paths).context("ensure ~/.ccteam/ home (dirs + hook.sh)")?; // -- 2. Resolve project install target --------------------------- @@ -164,23 +164,10 @@ pub fn run_init(paths: &CcteamPaths, opts: InitOptions) -> Result { } } - // -- 4. Project install pass ------------------------------------ + // -- 4. Create / refresh the project (scaffold + owner + config.yaml) --- let project_report = install_project_at(paths, &target, &target_slug, &target_team, &opts)?; - // -- 5. Upsert config.yaml::projects[] -------------------------- - let entry = ccteam_core::ProjectEntry { - slug: project_report.slug.clone(), - path: target.clone(), - host: ccteam_core::LOCAL_HOST.to_string(), - remote_slug: None, - remote_path: None, - team: project_report.team.clone(), - installed_at: chrono::Utc::now(), - }; - ccteam_core::upsert_project_in_config(&paths.root, entry) - .context("upsert project into ~/.ccteam/config.yaml")?; - - // -- 6. Health check + optional wizard -------------------------- + // -- 5. Health check + optional wizard -------------------------- let bin = current_ccteam_bin().ok(); let claude = Command::new("claude").arg("--version").output(); let tmux = ccteam_core::tmux_version(); @@ -201,16 +188,12 @@ pub fn run_init(paths: &CcteamPaths, opts: InitOptions) -> Result { target.join(".ccteam").join("state.json").display(), project_report.state_action, )); - out.push_str(&format!( - " workflow.yaml {} ({})\n", - target.join(".ccteam").join("workflow.yaml").display(), - project_report.workflow_action, - )); - out.push_str(&format!( - " agents dir {} ({})\n", - target.join(".claude").join("agents").display(), - project_report.agents_action, - )); + if project_report.agents_md_scaffolded { + out.push_str(&format!( + " AGENTS.md {} (placeholder scaffolded)\n", + target.join("AGENTS.md").display(), + )); + } if let Some(note) = &project_report.hooks_note { out.push_str(&format!( " claude settings {} ({note})\n", @@ -319,8 +302,8 @@ struct ProjectInstallReport { owner: Option, fresh: bool, state_action: &'static str, - workflow_action: &'static str, - agents_action: &'static str, + /// A placeholder `AGENTS.md` was written for an empty project. + agents_md_scaffolded: bool, /// What happened to old ccteam hook entries in /// `.claude/settings.local.json` (docs-local issue #212); `None` when /// there was nothing to report. @@ -337,7 +320,8 @@ impl ProjectInstallReport { } } -/// Lay down (or refresh) a ccteam project at `target`. +/// Lay down (or refresh) a ccteam project at `target` — a thin wrapper over +/// [`ccteam_core::create_project`], the single creation path (issue #222). fn install_project_at( paths: &CcteamPaths, target: &std::path::Path, @@ -345,15 +329,11 @@ fn install_project_at( team: &str, opts: &InitOptions, ) -> Result { - let ccteam_dir = target.join(".ccteam"); - let state_path = ccteam_dir.join("state.json"); - let fresh = !state_path.exists(); - // v0.8.20 F1: `--owner` stamps `ProjectState.owner` at init. Normalize the - // raw value (bare → `user:`; `:`-bearing → verbatim) once, then apply it in - // whichever branch we take. Light, non-blocking validation: an unknown - // `user:` warns on stderr but is still written (the tenant may be - // created later). Override-on-reinit needs no `--force`. + // raw value (bare → `user:`; `:`-bearing → verbatim) once. Light, + // non-blocking validation: an unknown `user:` warns on stderr but is + // still written (the tenant may be created later). Override-on-reinit needs + // no `--force`. let requested_owner = opts.owner.as_deref().and_then(normalize_owner); if let Some(owner) = &requested_owner { if let Some(tenant_id) = owner.strip_prefix("user:") { @@ -370,93 +350,35 @@ fn install_project_at( } } - let state_action: &'static str; - let workflow_action: &'static str; - let agents_action: &'static str; - let final_team: String; - let owner_final: Option; - - if fresh { - ccteam_core::bootstrap_project_at_dir( - paths, - target, + // A refresh keeps the recorded team unless `--force` or an explicit team. + let team = (opts.force || opts.team.is_some()).then_some(team); + let created = ccteam_core::create_project( + paths, + &ccteam_core::NewProject { slug, - "(installed via `ccteam init`)", + dir: target, team, - )?; - ccteam_core::scaffold_workflow_yaml(target, false)?; - state_action = "created"; - workflow_action = "scaffolded"; - // v0.9.0 W2 (F6.1) — engine neutralization: init seeds NO role. The - // default session is roleless (bare vendor reads project CLAUDE.md / - // AGENTS.md); `.claude/agents/` is left untouched. - agents_action = "none (roleless default)"; - final_team = team.to_string(); - // Fresh state.json was written with owner = None; stamp it when asked. - if let Some(owner) = &requested_owner { - let mut st = ccteam_core::ProjectState::load(&state_path) - .with_context(|| format!("load {} to set owner", state_path.display()))?; - st.owner = Some(owner.clone()); - st.save(&state_path)?; - owner_final = Some(owner.clone()); - } else { - owner_final = None; - } - } else { - let mut existing_state = ccteam_core::ProjectState::load(&state_path) - .with_context(|| format!("load existing {}", state_path.display()))?; - if opts.force || opts.team.is_some() { - existing_state.team = team.to_string(); - } - existing_state.slug = slug.to_string(); - existing_state.tmux_session = format!("ccteam-{slug}"); - // Override on re-init only when `--owner` is given; otherwise preserve. - if let Some(owner) = &requested_owner { - existing_state.owner = Some(owner.clone()); - } - existing_state.save(&state_path)?; - final_team = existing_state.team.clone(); - owner_final = existing_state.owner.clone(); - state_action = "refreshed"; - - workflow_action = if opts.force { - ccteam_core::scaffold_workflow_yaml(target, true)?; - "overwritten (--force)" - } else { - "preserved" - }; - - // v0.9.0 W2 (F6.1) — ccteam seeds no roles, so there is nothing to - // (re)scaffold or reset; `--force` no longer touches - // `.claude/agents/` (user files there survive untouched). - agents_action = if opts.force { - "none (roleless default)" - } else { - "preserved" - }; - } + owner: requested_owner.as_deref(), + }, + )?; // docs-local issue #212 — re-running `ccteam init` is how an existing - // project sheds the Claude Code hooks earlier ccteam versions wrote (a - // fresh install already ran the same scrub inside - // `bootstrap_project_at_dir`, so here it only reports). Best-effort: a - // user file that is not valid JSON is left alone and noted, never fatal. - let hooks_note = match ccteam_core::remove_ccteam_hooks( - &target.join(".claude").join("settings.local.json"), - false, - ) { - Ok(report) => scrub_note(&report), - Err(err) => Some(format!("left untouched: {err:#}")), - }; + // project sheds the Claude Code hooks earlier ccteam versions wrote; + // `create_project` ran the scrub, this only reports it. A user file that is + // not valid JSON is left alone and noted, never fatal. + let hooks_note = created.settings_scrub.as_ref().and_then(scrub_note); Ok(ProjectInstallReport { slug: slug.to_string(), - team: final_team, - owner: owner_final, - fresh, - state_action, - workflow_action, - agents_action, + team: created.team, + owner: created.owner, + fresh: created.fresh, + state_action: if created.fresh { + "created" + } else { + "refreshed" + }, + agents_md_scaffolded: created.agents_md_scaffolded, hooks_note, }) } @@ -1846,8 +1768,8 @@ pub(crate) fn unroster_trigger_path(slug: &str) -> std::path::PathBuf { /// Options for `ccteam remove `. #[derive(Debug, Clone, Default)] pub struct RemoveOptions { - /// Also `rm -rf /.ccteam/`, `/.claude/agents/`, - /// and `/workflow.yaml`. Business code + `.env` untouched. + /// Also remove `/.ccteam/` and scrub old ccteam hook entries. + /// User roles, project instructions, business code and `.env` stay intact. pub purge: bool, /// Print every step that *would* run, but don't touch filesystem /// / config / daemon. @@ -3703,13 +3625,13 @@ fn purge_imd_registry_for_slug( /// Helper for `run_remove --purge` — deletes exactly ccteam's own /// footprint inside `/` (or, under `--dry-run`, just records /// the planned step). A project's on-disk ccteam footprint is `.ccteam/` -/// (state.json + workflow.yaml) plus any ccteam hook entries an earlier +/// (state.json and the rest of ccteam's per-project state) plus any ccteam hook entries an earlier /// version (or a terminal-protocol session) left inside /// `.claude/settings.local.json`. (ccteam seeds NO role, so there is /// no ccteam-owned persona to purge.) /// /// **DELETE** (ccteam-managed only): -/// - `/.ccteam/` — state.json + workflow.yaml live here (W2). +/// - `/.ccteam/` — state.json and everything else ccteam keeps per project. /// - ccteam's own hook entries inside `/.claude/settings.local.json` /// (surgically, via [`ccteam_core::remove_ccteam_hooks`]). If stripping /// them leaves the file an empty object, the now-vestigial file is deleted. @@ -3729,8 +3651,7 @@ fn purge_project_managed_paths( dry_run: bool, report: &mut RemoveReport, ) -> Result<()> { - // 1. `.ccteam/` dir (state.json + workflow.yaml). W2 moved - // workflow.yaml under `.ccteam/`, so this one delete covers both. + // 1. `.ccteam/` dir — state.json and everything else ccteam keeps per project. let ccteam_dir = project_dir.join(".ccteam"); if ccteam_dir.is_dir() { if dry_run { @@ -3828,7 +3749,12 @@ mod tests { DISABLE_TOOL_SURFACE.get_or_init(disable_tool_surface_bootstrap_for_tests); } + /// Every test builds its paths here, so this is the one place that keeps a + /// project creation (`pre_trust_project`) off the developer's real + /// `~/.claude.json` — tests that forgot `ensure_isolation()` used to leak + /// their tempdirs into it. fn fresh_paths(tmp: &TempDir) -> CcteamPaths { + ensure_isolation(); CcteamPaths { root: tmp.path().join("home"), projects_root: tmp.path().join("projects"), @@ -4374,7 +4300,7 @@ mod tests { let body = run_show(&paths, &slug, OutputFormat::Json).unwrap(); let v: Value = serde_json::from_str(&body).unwrap(); assert_eq!(v["state"]["slug"], slug); - // v0.8.6: `.ccteam/` keeps only state.json + workflow.yaml, so + // v0.8.6: `.ccteam/` keeps only state.json at creation, so // there is no `spec` artifact to surface. assert!( v["artifacts"].as_object().unwrap().is_empty(), @@ -4549,21 +4475,17 @@ mod tests { } #[test] - fn run_init_is_idempotent_and_preserves_user_workflow_yaml() { - // V0.5.0 F101: HELPER_TEMPLATES is empty so the V0.4.x - // `~/.ccteam/templates/review-with-user-loop.md` idempotency - // probe is gone. workflow.yaml is the new canonical - // "preserve without --force, overwrite with --force" artifact — - // it's user-territory by design (see `force_overwrites_user_workflow_and_agents`). + fn run_init_is_idempotent_and_never_overwrites_project_files() { + // The only knowledge file init writes is the empty-project `AGENTS.md` + // placeholder; once the user has edited it, no re-run (not even + // `--force`) may touch it. let tmp = TempDir::new().unwrap(); let paths = fresh_paths(&tmp); run_init(&paths, init_opts_targeting_tmp(&tmp, "idem-demo")).unwrap(); - let path = tmp - .path() - .join("idem-demo") - .join(".ccteam") - .join("workflow.yaml"); + let path = tmp.path().join("idem-demo").join("AGENTS.md"); std::fs::write(&path, "USER EDIT").unwrap(); + let workflow = tmp.path().join("idem-demo/.ccteam/workflow.yaml"); + std::fs::write(&workflow, "budgets_v060: {}\n").unwrap(); run_init(&paths, init_opts_targeting_tmp(&tmp, "idem-demo")).unwrap(); assert_eq!(std::fs::read_to_string(&path).unwrap(), "USER EDIT"); run_init( @@ -4575,7 +4497,11 @@ mod tests { }, ) .unwrap(); - assert_ne!(std::fs::read_to_string(&path).unwrap(), "USER EDIT"); + assert_eq!(std::fs::read_to_string(&path).unwrap(), "USER EDIT"); + assert_eq!( + std::fs::read_to_string(&workflow).unwrap(), + "budgets_v060: {}\n" + ); } /// Fresh install scaffolds the project skeleton AND registers in @@ -4596,14 +4522,28 @@ mod tests { ) .unwrap(); assert!(target.join(".ccteam").join("state.json").is_file()); - assert!( - target.join(".ccteam").join("workflow.yaml").is_file(), - "V0.4.6 F83: workflow.yaml must land in .ccteam/, not project root", - ); - assert!( - !target.join("workflow.yaml").exists(), - "V0.4.6 F83: workflow.yaml must NOT be at the project root after fresh init", - ); + // Issue #222 — init writes exactly what every other create entry writes + // (they share `ccteam_core::create_project`): no workflow.yaml, no + // CLAUDE.md, just the state, the AGENTS.md placeholder and the ignore. + let mut files = Vec::new(); + let mut stack = vec![target.clone()]; + while let Some(dir) = stack.pop() { + for entry in std::fs::read_dir(&dir).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + stack.push(path); + } else { + files.push( + path.strip_prefix(&target) + .unwrap() + .to_string_lossy() + .into_owned(), + ); + } + } + } + files.sort(); + assert_eq!(files, [".ccteam/state.json", ".gitignore", "AGENTS.md"]); // v0.9.0 (engine neutralization): fresh init seeds NO role — the default // session is roleless (bare vendor reads the project CLAUDE.md/AGENTS.md). assert!( @@ -4616,7 +4556,7 @@ mod tests { ); // v0.8.6: init no longer writes the `.ccteam/agents` neutral copy // nor the `.ccteam/skills` placeholder layout — `.ccteam/` holds - // only state.json + workflow.yaml. + // only state.json. assert!( !target.join(".ccteam").join("agents").exists(), "v0.8.6: .ccteam/agents neutral copy must NOT be written", @@ -4684,11 +4624,9 @@ mod tests { !lead.exists(), "__lead.md must NOT be scaffolded in default mode" ); - let wf = target.join(".ccteam").join("workflow.yaml"); - let body = std::fs::read_to_string(&wf).unwrap(); assert!( - !body.contains("mode: agent-team"), - "default workflow.yaml must NOT declare agent-team mode", + !target.join(".ccteam").join("workflow.yaml").exists(), + "init must NOT scaffold a workflow.yaml (issue #222)", ); // docs-local issue #212 — init writes no Claude settings at all. assert!( @@ -4697,11 +4635,10 @@ mod tests { ); } - /// Re-running on an existing ccteam project preserves user-edited - /// workflow.yaml + agents/*.md. workflow.yaml lives in `.ccteam/`, - /// not the root. + /// Re-running on an existing ccteam project preserves the user's files + /// (AGENTS.md, agents/*.md) and the recorded team and owner. #[test] - fn run_init_refresh_preserves_user_workflow_and_agents() { + fn run_init_refresh_preserves_user_files_team_and_owner() { let tmp = TempDir::new().unwrap(); let paths = fresh_paths(&tmp); let target = tmp.path().join("f72-refresh"); @@ -4709,12 +4646,13 @@ mod tests { &paths, InitOptions { install_in: Some(target.clone()), + team: Some("ops".into()), + owner: Some("user:u1".into()), ..InitOptions::default() }, ) .unwrap(); - let wf_path = target.join(".ccteam").join("workflow.yaml"); - std::fs::write(&wf_path, "USER WORKFLOW\n").unwrap(); + std::fs::write(target.join("AGENTS.md"), "USER GUIDE\n").unwrap(); // v0.9.0: init no longer creates `.claude/agents/`; the user authors it. std::fs::create_dir_all(target.join(".claude").join("agents")).unwrap(); std::fs::write( @@ -4733,13 +4671,17 @@ mod tests { ) .unwrap(); assert_eq!( - std::fs::read_to_string(&wf_path).unwrap(), - "USER WORKFLOW\n" + std::fs::read_to_string(target.join("AGENTS.md")).unwrap(), + "USER GUIDE\n" ); assert_eq!( std::fs::read_to_string(target.join(".claude").join("agents").join("cto.md")).unwrap(), "USER AGENT\n" ); + let state = + ccteam_core::ProjectState::load(&target.join(".ccteam").join("state.json")).unwrap(); + assert_eq!(state.team, "ops", "a plain re-run keeps the recorded team"); + assert_eq!(state.owner.as_deref(), Some("user:u1")); } /// docs-local issue #212 — re-running `ccteam init` on a project an @@ -4804,7 +4746,7 @@ mod tests { ..InitOptions::default() }; run_init(&paths, opts()).unwrap_or_else(|e| panic!("{name}: fresh init: {e:#}")); - assert!(target.join(".ccteam").join("workflow.yaml").exists()); + assert!(target.join(".ccteam").join("state.json").exists()); run_init(&paths, opts()).unwrap_or_else(|e| panic!("{name}: re-init: {e:#}")); assert_eq!(std::fs::read_to_string(&local).unwrap(), body, "{name}"); } @@ -4834,10 +4776,9 @@ mod tests { assert!(parse.contains("not valid JSON"), "{parse}"); } - /// `--force` re-runs overwrite user files. workflow.yaml lives in - /// `.ccteam/`, not the root. + /// `--force` re-stamps the team on a refresh; it never overwrites a project file. #[test] - fn run_init_force_overwrites_user_workflow_and_agents() { + fn run_init_force_restamps_team_and_keeps_project_files() { let tmp = TempDir::new().unwrap(); let paths = fresh_paths(&tmp); let target = tmp.path().join("f72-force"); @@ -4845,12 +4786,12 @@ mod tests { &paths, InitOptions { install_in: Some(target.clone()), + team: Some("ops".into()), ..InitOptions::default() }, ) .unwrap(); - let wf_path = target.join(".ccteam").join("workflow.yaml"); - std::fs::write(&wf_path, "USER WORKFLOW\n").unwrap(); + std::fs::write(target.join("AGENTS.md"), "USER GUIDE\n").unwrap(); run_init( &paths, InitOptions { @@ -4860,9 +4801,12 @@ mod tests { }, ) .unwrap(); - assert_ne!( - std::fs::read_to_string(&wf_path).unwrap(), - "USER WORKFLOW\n" + let state = + ccteam_core::ProjectState::load(&target.join(".ccteam").join("state.json")).unwrap(); + assert_eq!(state.team, "dev", "--force re-stamps the default team"); + assert_eq!( + std::fs::read_to_string(target.join("AGENTS.md")).unwrap(), + "USER GUIDE\n" ); } @@ -5019,12 +4963,6 @@ mod tests { "state.json must exist after --force init; checked {}", state_path.display() ); - let workflow_path = fake_repo.join(".ccteam").join("workflow.yaml"); - assert!( - workflow_path.exists(), - "workflow.yaml must exist after --force init; checked {}", - workflow_path.display() - ); } #[test] diff --git a/crates/ccteam-cli/src/main.rs b/crates/ccteam-cli/src/main.rs index d7d5965e..c8c69c17 100644 --- a/crates/ccteam-cli/src/main.rs +++ b/crates/ccteam-cli/src/main.rs @@ -142,7 +142,7 @@ enum Command { /// Registered project name (default: install-dir basename); does not move the install. #[arg(long, value_name = "NAME")] slug: Option, - /// Overwrite ccteam-managed files (state.json, workflow.yaml); never touches `.claude/agents/`. + /// Re-stamp the team on a refresh and step past the install-target guards (ccteam repo, $HOME, a slug registered elsewhere). #[arg(long, default_value_t = false)] force: bool, /// Project owner identity (e.g. `user:alice`; a bare name maps to `user:`). diff --git a/crates/ccteam-cli/src/web_chat_bridge.rs b/crates/ccteam-cli/src/web_chat_bridge.rs index e1e151d6..18d9f228 100644 --- a/crates/ccteam-cli/src/web_chat_bridge.rs +++ b/crates/ccteam-cli/src/web_chat_bridge.rs @@ -198,7 +198,7 @@ mod tests { } } - /// `/newproject` scaffolds through `bootstrap_project_at_dir`, whose + /// `/newproject` scaffolds through `create_project`, whose /// `pre_trust_project` step writes a trust entry into `~/.claude.json` — /// the ONE path in this stack that resolves off `$HOME` rather than off /// the injected root. Switch it off process-wide, once, exactly as @@ -855,6 +855,9 @@ mod tests { // `/newproject ` scaffolds at the path and registers it. let proj_dir = home.path().join("code").join("demo"); + ccteam_core::ProjectState::initial_for_team("old".into(), "ops".into()) + .save(&CcteamPaths::project_state_in(&proj_dir)) + .unwrap(); send_text( &mut socket, "newproject", @@ -864,8 +867,13 @@ mod tests { recv_reply_contains(&mut socket, "已创建并切换到 demo").await; assert!(proj_dir.join(".ccteam").join("state.json").exists()); + assert!(proj_dir.join("AGENTS.md").is_file()); + assert!(proj_dir.join(".gitignore").is_file()); + assert!(!proj_dir.join("CLAUDE.md").exists()); + assert!(!proj_dir.join(".ccteam/workflow.yaml").exists()); let state = ccteam_core::ProjectState::load(&CcteamPaths::project_state_in(&proj_dir)) .expect("chat-created project state"); + assert_eq!(state.team, "ops"); assert_eq!( state.owner.as_deref(), Some("user:web-api"), diff --git a/crates/ccteam-core/src/lib.rs b/crates/ccteam-core/src/lib.rs index 4db21e65..935b50d9 100644 --- a/crates/ccteam-core/src/lib.rs +++ b/crates/ccteam-core/src/lib.rs @@ -272,9 +272,10 @@ pub use progress::{ AgentSessionStatus, AgentSessionSummary, }; pub use projects::{ - bootstrap_project, bootstrap_project_at_dir, ensure_project_data_home, pick_unused_slug, + bootstrap_project, create_project, ensure_project_data_home, pick_unused_slug, pick_unused_slug_verbatim, pre_trust_project, read_current_branch, refuses_active_session, - scaffold_workflow_yaml, slugify, slugify_brief, validate_slug_format, ActiveSessionRefusal, + slugify, slugify_brief, validate_slug_format, ActiveSessionRefusal, NewProject, + NewProjectReport, }; // v0.8.6 W5b ResDisk — read-side role reader for the resource API. pub use queries::{ diff --git a/crates/ccteam-core/src/projects.rs b/crates/ccteam-core/src/projects.rs index 5f8e4f43..0cf28eee 100644 --- a/crates/ccteam-core/src/projects.rs +++ b/crates/ccteam-core/src/projects.rs @@ -1,6 +1,7 @@ -//! Project bootstrap helpers used by `ccteam project new` (and reusable by the -//! M3+ inbox triage path). Pure: no tmux side effects, just file -//! creation under `~/projects//`. +//! Project creation. [`create_project`] is the one path every entry (`ccteam +//! init`, web `POST /projects`, IM `/newproject`, the satellite project binding) +//! goes through; the rest are slug and path helpers around it. Pure: no tmux +//! side effects, just file creation in the project working tree. use std::path::{Path, PathBuf}; @@ -212,28 +213,89 @@ fn pick_unused_with_prefixed(paths: &CcteamPaths, prefixed: &str) -> Result/.ccteam/state.json` ← `ProjectState::initial_for_team(slug, team)` -/// - `/.claude/settings.local.json` ← managed hooks + base -/// - `/.claude/agents/cto.md` ← default IM/chat persona -/// -/// v0.8.6: ccteam no longer generates a project `CLAUDE.md` / -/// `AGENTS.md` (project knowledge is vendor-native, owned by the -/// project) nor a `.ccteam/spec.md`; `.ccteam/` keeps only `state.json` -/// (+ `workflow.yaml`, written elsewhere). `request` is retained for -/// API stability but no longer persisted. +/// What a project creation is made from. See [`create_project`]. +#[derive(Debug, Clone, Copy)] +pub struct NewProject<'a> { + pub slug: &'a str, + /// The working tree. Created when absent; files already in it are left alone. + pub dir: &'a Path, + /// `None` = `dev` for a fresh project, keep the recorded team on a refresh. + pub team: Option<&'a str>, + /// `ProjectState.owner` to stamp. `None` = leave unowned (fresh) / keep the + /// existing owner (refresh). + pub owner: Option<&'a str>, +} + +/// What [`create_project`] did, for the callers' receipts. +#[derive(Debug, Clone)] +pub struct NewProjectReport { + pub dir: PathBuf, + /// `false` = `.ccteam/state.json` already existed and was refreshed. + pub fresh: bool, + /// The team now recorded in `state.json` and the registry. + pub team: String, + /// The owner now recorded in `state.json`. + pub owner: Option, + /// A placeholder `AGENTS.md` was written (the project had neither + /// `CLAUDE.md` nor `AGENTS.md`). + pub agents_md_scaffolded: bool, + /// What happened to old ccteam hooks in `.claude/settings.local.json`; + /// `None` when that file could not be inspected at all. + pub settings_scrub: Option, +} + +/// The one way a project comes into being — `ccteam init`, web +/// `POST /projects`, IM `/newproject` and the satellite project binding all +/// call this, so every entry leaves the same files behind: /// -/// `team` lands in state.json so downstream routing can pick the -/// matching workflow. +/// - `/.ccteam/state.json` (created, or refreshed when present); +/// - `/AGENTS.md` — a placeholder, only when the project has neither +/// `CLAUDE.md` nor `AGENTS.md`; +/// - `.ccteam/` appended to `/.gitignore`; +/// - the global `~/.ccteam/` home, a trust entry in `~/.claude.json`, and the +/// `config.yaml` registry entry. /// -/// Returns the full project directory path. +/// It writes no role (`.claude/agents/` stays the project's), no Claude +/// settings (and strips the hooks an older ccteam wrote there), no +/// `workflow.yaml`, and never overwrites an existing project file. +pub fn create_project(paths: &CcteamPaths, new: &NewProject<'_>) -> Result { + let report = scaffold_project(paths, new)?; + crate::config::upsert_project( + &paths.root, + crate::config::ProjectEntry { + slug: new.slug.to_string(), + path: new.dir.to_path_buf(), + host: crate::host_registry::LOCAL_HOST.to_string(), + remote_slug: None, + remote_path: None, + team: report.team.clone(), + installed_at: chrono::Utc::now(), + }, + ) + .context("register project in ~/.ccteam/config.yaml")?; + Ok(report) +} + +/// Test-fixture shorthand: scaffold `//` WITHOUT touching +/// the `config.yaml` registry (the layout `CcteamPaths::project_dir` falls back +/// to). Production creates go through [`create_project`]. `request` is unused. pub fn bootstrap_project( paths: &CcteamPaths, slug: &str, - request: &str, + _request: &str, team: &str, ) -> Result { - bootstrap_project_at_dir(paths, &paths.project_dir(slug), slug, request, team) + let dir = paths.project_dir(slug); + scaffold_project( + paths, + &NewProject { + slug, + dir: &dir, + team: Some(team), + owner: None, + }, + )?; + Ok(dir) } /// Materialize the daemon-side state home for a remote project without @@ -260,22 +322,13 @@ pub fn ensure_project_data_home( Ok(data_home.to_path_buf()) } -/// V0.4.2 F72: `bootstrap_project` generalized to install at an -/// arbitrary `target_dir`. Used by `ccteam init` to bring an existing -/// repo under management without moving files. Side effects (trust-marking) -/// still use `paths.root` / `paths.projects_root`, since those are global -/// concerns. -/// -/// `target_dir` is created if it doesn't exist. Existing files inside -/// it are left alone — this is the **fresh-install** path. Idempotent -/// refresh of an already-installed project lives in `ccteam init`'s -/// refresh helpers; this function assumes the caller already decided -/// "this is a new install". /// v0.8.9 (owner decision) — scaffold body for an EMPTY project's `AGENTS.md`. /// It tells a bare / roleless agent the project is uninitialized so it asks the /// user to set it up instead of spinning on an under-specified task. Written /// ONLY when the project has neither `CLAUDE.md` nor `AGENTS.md` (see -/// [`bootstrap_project_at_dir`]); never overwrites existing content. +/// [`create_project`]); never overwrites existing content. It is the only +/// knowledge file ccteam writes: Claude Code reads `AGENTS.md` itself when a +/// project has no `CLAUDE.md`, and Codex and the ACP harnesses read it natively. const EMPTY_PROJECT_AGENTS_MD: &str = "\ # Project guide @@ -294,80 +347,57 @@ Until this file is filled in, keep replies short, ask clarifying questions, and do **not** guess at the task or start open-ended exploration. "; -const DEFAULT_WORKFLOW_YAML: &str = r#"# ccteam workflow.yaml. -# Edit this file to declare your project's agent topology. Each agent -# is a role (filename of .claude/agents/.md) with a trigger that -# decides when ccteam spawns a session for it. -# -# Trigger grammar: -# manual # explicit `ccteam spawn ` only -# schedule # periodic; needs `schedule:` 5-field cron -# gate # waits for `trigger_gate` MCP / CLI call -# watch:.ccteam/issues/ # spawn one session per new file under the path -name: default-workflow -description: | - Minimal starter workflow. Edit me — declare your own agents below. - (v0.9.0: ccteam seeds no default role; sessions are roleless unless - you author `.claude/agents/.md` or install one from the hub.) - -agents: {} -"#; - -/// Write the standard `.ccteam/workflow.yaml` project scaffold. Existing -/// content is preserved unless `force` is true. -pub fn scaffold_workflow_yaml(target: &Path, force: bool) -> Result<()> { - let ccteam_dir = target.join(".ccteam"); - std::fs::create_dir_all(&ccteam_dir) - .with_context(|| format!("create {}", ccteam_dir.display()))?; - let path = ccteam_dir.join("workflow.yaml"); - if path.exists() && !force { - return Ok(()); - } - std::fs::write(&path, DEFAULT_WORKFLOW_YAML) - .with_context(|| format!("write {}", path.display()))?; - Ok(()) -} - -pub fn bootstrap_project_at_dir( - // `paths` is the global `~/.ccteam/` root. It feeds the - // home-ensure below (`ensure_ccteam_home`). - paths: &CcteamPaths, - target_dir: &Path, - slug: &str, - // v0.8.6: `request` is no longer persisted (no `.ccteam/spec.md`, - // no generated `CLAUDE.md`); kept in the signature for API - // stability so existing callers don't churn. - _request: &str, - team: &str, -) -> Result { +/// The disk half of [`create_project`] (no registry write). Everything here is +/// idempotent: a re-run refreshes `state.json` and adds nothing twice. +fn scaffold_project(paths: &CcteamPaths, new: &NewProject<'_>) -> Result { + let slug = new.slug; // Materialize the global `~/.ccteam/` home (canonical dirs + the - // `hooks/hook.sh` dispatcher) so every create path — `ccteam init`, web - // `POST /projects`, IM/web chat create — leaves the same complete home. - // Idempotent (cheap no-op when the home is already complete). + // `hooks/hook.sh` dispatcher) so every create path leaves the same + // complete home. Idempotent (cheap no-op when the home is already complete). crate::ensure_ccteam_home(paths).context("ensure ~/.ccteam/ home")?; - let project_dir = target_dir.to_path_buf(); + let project_dir = new.dir.to_path_buf(); let ccteam_dir = project_dir.join(".ccteam"); std::fs::create_dir_all(&ccteam_dir) .with_context(|| format!("create {}", ccteam_dir.display()))?; - let state = ProjectState::initial_for_team(slug.to_string(), team.to_string()); - state.save(&CcteamPaths::project_state_in(&project_dir))?; + let state_path = CcteamPaths::project_state_in(&project_dir); + let fresh = !state_path.exists(); + let mut state = if fresh { + match new.team { + Some(team) => ProjectState::initial_for_team(slug.to_string(), team.to_string()), + None => ProjectState::initial(slug.to_string()), + } + } else { + // A re-create never resets what the project has accumulated. + let mut state = ProjectState::load(&state_path) + .with_context(|| format!("load existing {}", state_path.display()))?; + state.slug = slug.to_string(); + state.tmux_session = format!("ccteam-{slug}"); + if let Some(team) = new.team { + state.team = team.to_string(); + } + state + }; + if let Some(owner) = new.owner { + state.owner = Some(owner.to_string()); + } + state.save(&state_path)?; // docs-local issue #212 — ccteam writes NO Claude settings for a project. // The `.claude/settings.local.json` hooks block it used to lay down only // served the retired tmux/rmux terminal protocol (the default stream-json // session is hookless), and creating that file for ccteam alone is // exactly what the owner ruled out. A directory that already carries - // ccteam's old hooks (a re-bootstrap over an earlier project) gets them + // ccteam's old hooks (a re-create over an earlier project) gets them // stripped instead; every other key and any user hook survive. // Best-effort: a user file that is unreadable or not valid JSON (empty, // trailing comma) is left untouched and never fails project creation. let settings_local = project_dir.join(".claude").join("settings.local.json"); - match crate::tool_surface::remove_ccteam_hooks(&settings_local, false) { + let settings_scrub = match crate::tool_surface::remove_ccteam_hooks(&settings_local, false) { Ok(report) => { use crate::tool_surface::CcteamHookScrubAction as A; - match report.action { + match &report.action { A::Unreadable { error } => tracing::warn!( path = %settings_local.display(), %error, @@ -380,13 +410,17 @@ pub fn bootstrap_project_at_dir( ), _ => {} } + Some(report) } - Err(err) => tracing::warn!( - path = %settings_local.display(), - error = %err, - "could not strip old ccteam hooks from .claude/settings.local.json", - ), - } + Err(err) => { + tracing::warn!( + path = %settings_local.display(), + error = %err, + "could not strip old ccteam hooks from .claude/settings.local.json", + ); + None + } + }; // v0.8.6 (review-fix #3): no longer stamp `~/.ccteam/templates/`. // `HELPER_TEMPLATES` has been empty since V0.5.0 F101, so the writer // only ever created an empty `templates/` dir that is *not* in @@ -405,8 +439,8 @@ pub fn bootstrap_project_at_dir( // v0.9.0 W2 (F6.1) — engine neutralization: ccteam seeds NO role. A fresh // project's `.claude/agents/` is left untouched (not even created); the - // default session is roleless (bare vendor reads the project CLAUDE.md / - // AGENTS.md). Orchestration personas live 100% in user space / the hub. + // default session is roleless (bare vendor reads the project's + // AGENTS.md / CLAUDE.md). Orchestration personas live 100% in user space / the hub. // v0.8.9 (owner decision) — scaffold a minimal project brain for an EMPTY // project so a roleless / bare-claude session asks the user to initialize @@ -414,16 +448,14 @@ pub fn bootstrap_project_at_dir( // has NEITHER CLAUDE.md NOR AGENTS.md (either present ⇒ a real project — // never touch it). This deliberately relaxes the earlier "ccteam never // generates the project knowledge layer" red-line, scoped to the - // empty-project bootstrap and never overwriting existing content. - let claude_md = project_dir.join("CLAUDE.md"); + // empty-project bootstrap and never overwriting existing content. Only + // `AGENTS.md` is written (issue #222): a second `CLAUDE.md` that just + // `@import`s it added nothing. let agents_md = project_dir.join("AGENTS.md"); - if !claude_md.exists() && !agents_md.exists() { + let agents_md_scaffolded = !project_dir.join("CLAUDE.md").exists() && !agents_md.exists(); + if agents_md_scaffolded { std::fs::write(&agents_md, EMPTY_PROJECT_AGENTS_MD) .with_context(|| format!("write {}", agents_md.display()))?; - // CLAUDE.md reuses AGENTS.md as the single source of truth via Claude - // Code's `@import` (Codex reads AGENTS.md directly). - std::fs::write(&claude_md, "@AGENTS.md\n") - .with_context(|| format!("write {}", claude_md.display()))?; } // v0.8.9 (owner request) — keep `.ccteam/` out of git: add a `.ccteam/` @@ -452,7 +484,14 @@ pub fn bootstrap_project_at_dir( } } - Ok(project_dir) + Ok(NewProjectReport { + dir: project_dir, + fresh, + team: state.team, + owner: state.owner, + agents_md_scaffolded, + settings_scrub, + }) } /// Pre-mark `project_dir` as trusted in `~/.claude.json` so the first @@ -1168,6 +1207,34 @@ mod tests { ); } + /// `create_project` with the defaults the web / IM / satellite entries pass. + fn create_demo(paths: &CcteamPaths, dir: &Path) -> NewProjectReport { + create_project( + paths, + &NewProject { + slug: "demo", + dir, + team: Some("dev"), + owner: None, + }, + ) + .unwrap() + } + + /// Every regular file under `root`, recursively. + fn walk(root: &Path) -> Vec { + let mut out = Vec::new(); + for entry in std::fs::read_dir(root).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + out.extend(walk(&path)); + } else { + out.push(path); + } + } + out + } + #[test] fn bootstrap_project_does_not_create_templates_dir() { // v0.8.6 (review-fix #3): `HELPER_TEMPLATES` has been empty since @@ -1219,7 +1286,7 @@ mod tests { /// the hooks an earlier ccteam wrote strips exactly those: user keys, a /// user hook in the same event section and `settings.json` survive. #[test] - fn bootstrap_project_at_dir_strips_old_ccteam_hooks() { + fn create_project_strips_old_ccteam_hooks() { ensure_isolation(); let tmp = tempfile::TempDir::new().unwrap(); let paths = CcteamPaths { @@ -1257,7 +1324,7 @@ mod tests { ); std::fs::write(&committed, &committed_body).unwrap(); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(re-create)", "dev").unwrap(); + create_demo(&paths, &project_dir); let v: Value = serde_json::from_str(&std::fs::read_to_string(&local).unwrap()).unwrap(); assert_eq!(v["model"], "opus", "user key kept"); @@ -1281,7 +1348,7 @@ mod tests { /// docs-local issue #212 — an empty or invalid user settings.local.json /// never fails project creation and is left exactly as it was. #[test] - fn bootstrap_project_at_dir_tolerates_unparseable_settings_local() { + fn create_project_tolerates_unparseable_settings_local() { ensure_isolation(); for (name, body) in [("empty", ""), ("comma", "{\"model\": \"opus\",}")] { let tmp = tempfile::TempDir::new().unwrap(); @@ -1294,18 +1361,26 @@ mod tests { std::fs::create_dir_all(local.parent().unwrap()).unwrap(); std::fs::write(&local, body).unwrap(); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(x)", "dev") - .unwrap_or_else(|e| panic!("{name}: bootstrap must not fail: {e:#}")); + create_project( + &paths, + &NewProject { + slug: "demo", + dir: &project_dir, + team: Some("dev"), + owner: None, + }, + ) + .unwrap_or_else(|e| panic!("{name}: create must not fail: {e:#}")); assert!(CcteamPaths::project_state_in(&project_dir).exists()); assert_eq!(std::fs::read_to_string(&local).unwrap(), body, "{name}"); } } /// Every create path (web / IM / daemon all flow through - /// `bootstrap_project_at_dir`) leaves a complete ccteam home: + /// `create_project`) leaves a complete ccteam home: /// `ensure_ccteam_home` runs up front, so hook.sh lands + is exec. #[test] - fn bootstrap_project_at_dir_materializes_hook_sh() { + fn create_project_materializes_hook_sh() { ensure_isolation(); let tmp = tempfile::TempDir::new().unwrap(); let paths = CcteamPaths { @@ -1314,13 +1389,12 @@ mod tests { }; let project_dir = tmp.path().join("workspace").join("my-repo"); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(from web/IM chat)", "dev") - .unwrap(); + create_demo(&paths, &project_dir); let hook_sh = paths.hooks_script(); assert!( hook_sh.exists(), - "bootstrap_project_at_dir must materialize {}", + "create_project must materialize {}", hook_sh.display(), ); let body = std::fs::read_to_string(&hook_sh).unwrap(); @@ -1353,7 +1427,7 @@ mod tests { /// re-run must succeed and leave hook.sh in place (it underpins the /// daemon-start + every create path, all of which may run repeatedly). #[test] - fn bootstrap_empty_project_scaffolds_claude_and_agents_md() { + fn create_empty_project_scaffolds_only_agents_md() { ensure_isolation(); let tmp = tempfile::TempDir::new().unwrap(); let paths = CcteamPaths { @@ -1362,30 +1436,138 @@ mod tests { }; let project_dir = tmp.path().join("workspace").join("empty-repo"); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(from web/IM chat)", "dev") - .unwrap(); + let report = create_demo(&paths, &project_dir); - let agents_md = project_dir.join("AGENTS.md"); - let claude_md = project_dir.join("CLAUDE.md"); + assert!(report.agents_md_scaffolded); assert!( - agents_md.exists(), - "an empty project must get a scaffolded AGENTS.md" + std::fs::read_to_string(project_dir.join("AGENTS.md")) + .unwrap() + .contains("has not been initialized"), + "scaffolded AGENTS.md must prompt the user to initialize the project" ); assert!( - claude_md.exists(), - "an empty project must get a scaffolded CLAUDE.md" + !project_dir.join("CLAUDE.md").exists(), + "issue #222: no CLAUDE.md alongside the AGENTS.md placeholder" ); + assert!( + !project_dir.join(".ccteam").join("workflow.yaml").exists() + && !project_dir.join("workflow.yaml").exists(), + "issue #222: creation seeds no workflow.yaml" + ); + } + + /// Issue #222 — the whole footprint of a creation, pinned in one place: every + /// entry point goes through `create_project`, so this is what each of them + /// leaves behind. + #[test] + fn create_project_footprint_is_state_agents_md_gitignore_and_registry() { + ensure_isolation(); + let tmp = tempfile::TempDir::new().unwrap(); + let paths = CcteamPaths { + root: tmp.path().join("home"), + projects_root: tmp.path().join("projects"), + }; + let project_dir = tmp.path().join("workspace").join("repo"); + + let report = create_project( + &paths, + &NewProject { + slug: "demo", + dir: &project_dir, + team: None, + owner: Some("user:alice"), + }, + ) + .unwrap(); + + assert!(report.fresh); + assert_eq!(report.team, "dev", "no team given → the default"); + assert_eq!(report.owner.as_deref(), Some("user:alice")); + + let mut files: Vec = Vec::new(); + for entry in walk(&project_dir) { + files.push( + entry + .strip_prefix(&project_dir) + .unwrap() + .display() + .to_string(), + ); + } + files.sort(); assert_eq!( - std::fs::read_to_string(&claude_md).unwrap(), - "@AGENTS.md\n", - "CLAUDE.md must @-import AGENTS.md (single source of truth)" + files, + [".ccteam/state.json", ".gitignore", "AGENTS.md"], + "a creation writes exactly these files into the project" ); + + let state = ProjectState::load(&CcteamPaths::project_state_in(&project_dir)).unwrap(); + assert_eq!(state.slug, "demo"); + assert_eq!(state.owner.as_deref(), Some("user:alice")); + + let entry = crate::config::load(&paths.root) + .unwrap() + .projects + .into_iter() + .find(|p| p.slug == "demo") + .expect("create_project registers the project in config.yaml"); + assert_eq!(entry.path, project_dir); + assert_eq!(entry.team, "dev"); + } + + /// Re-creating over a project that already has a `state.json` refreshes it: + /// what the project accumulated (team, owner) survives unless a value is given. + #[test] + fn create_project_refreshes_existing_state_instead_of_resetting_it() { + ensure_isolation(); + let tmp = tempfile::TempDir::new().unwrap(); + let paths = CcteamPaths { + root: tmp.path().join("home"), + projects_root: tmp.path().join("projects"), + }; + let project_dir = tmp.path().join("workspace").join("repo"); + let first = create_project( + &paths, + &NewProject { + slug: "demo", + dir: &project_dir, + team: Some("ops"), + owner: Some("user:alice"), + }, + ) + .unwrap(); + assert!(first.fresh); + + let again = create_project( + &paths, + &NewProject { + slug: "demo", + dir: &project_dir, + team: None, + owner: None, + }, + ) + .unwrap(); + assert!(!again.fresh); + assert_eq!(again.team, "ops", "no team given → keep the recorded one"); + assert_eq!(again.owner.as_deref(), Some("user:alice")); assert!( - std::fs::read_to_string(&agents_md) - .unwrap() - .contains("has not been initialized"), - "scaffolded AGENTS.md must prompt the user to initialize the project" + !again.agents_md_scaffolded, + "the AGENTS.md from the first creation is already there" ); + + let taken = create_project( + &paths, + &NewProject { + slug: "demo", + dir: &project_dir, + team: Some("dev"), + owner: Some("user:bob"), + }, + ) + .unwrap(); + assert_eq!(taken.team, "dev"); + assert_eq!(taken.owner.as_deref(), Some("user:bob")); } #[test] @@ -1406,8 +1588,7 @@ mod tests { ) .unwrap(); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(from web/IM chat)", "dev") - .unwrap(); + create_demo(&paths, &project_dir); assert_eq!( std::fs::read_to_string(project_dir.join("CLAUDE.md")).unwrap(), @@ -1434,7 +1615,7 @@ mod tests { std::fs::create_dir_all(&project_dir).unwrap(); std::fs::write(project_dir.join(".gitignore"), "target\nnode_modules").unwrap(); - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(x)", "dev").unwrap(); + create_demo(&paths, &project_dir); let body = std::fs::read_to_string(project_dir.join(".gitignore")).unwrap(); assert!( body.contains("target") && body.contains("node_modules"), @@ -1449,7 +1630,7 @@ mod tests { ); // Re-bootstrap (idempotent / re-create) must NOT add a duplicate line. - bootstrap_project_at_dir(&paths, &project_dir, "demo", "(x)", "dev").unwrap(); + create_demo(&paths, &project_dir); let body2 = std::fs::read_to_string(project_dir.join(".gitignore")).unwrap(); assert_eq!( body2 diff --git a/crates/ccteam-core/src/tool_surface.rs b/crates/ccteam-core/src/tool_surface.rs index a419b56b..7a285d64 100644 --- a/crates/ccteam-core/src/tool_surface.rs +++ b/crates/ccteam-core/src/tool_surface.rs @@ -536,7 +536,7 @@ pub struct CcteamHookScrubReport { /// stream-json session is hookless: its events come from stdout, HITL from /// `can_use_tool`). Projects created before that still carry the old /// `hooks` block, so `ccteam init` (fresh or re-run), the web/IM create path -/// (`bootstrap_project_at_dir`) and `project rm --purge` all run this to +/// (`create_project`) and `project rm --purge` all run this to /// clean them. /// /// **Scope (red line).** Removes ONLY entries whose `command` is a ccteam diff --git a/crates/ccteam-im/src/gateway.rs b/crates/ccteam-im/src/gateway.rs index 7056ec6d..39ac68e4 100644 --- a/crates/ccteam-im/src/gateway.rs +++ b/crates/ccteam-im/src/gateway.rs @@ -12,8 +12,8 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use anyhow::{anyhow, Context, Result}; -use ccteam_core::config::{upsert_project, CcteamConfig, ProjectEntry}; -use ccteam_core::projects::{bootstrap_project_at_dir, validate_slug_format}; +use ccteam_core::config::CcteamConfig; +use ccteam_core::projects::{create_project, validate_slug_format, NewProject}; use ccteam_core::{CcteamPaths, HotConfig, RoleDetail}; use ccteam_harness::execution::session_body::{self, BodyProbe, SessionBody}; use ccteam_harness::usage_catalog::VendorAccountUsage; @@ -7232,7 +7232,7 @@ impl Gateway { /// `config.yaml`, and make it addressable by `/cd ` in this /// running daemon. `raw_path` may be `~`-relative; it must resolve to /// an absolute directory (existing repos are adopted in place, empty - /// dirs are created — `bootstrap_project_at_dir` leaves user files + /// dirs are created — `create_project` leaves user files /// alone). Requires [`Gateway::enable_project_creation`]. fn create_project( &mut self, @@ -7253,39 +7253,19 @@ impl Gateway { return Err(anyhow!("project already exists: {slug}")); } let abs = expand_project_path(raw_path)?; - bootstrap_project_at_dir(&paths, &abs, &slug, "(created from web/IM chat)", "dev") - .with_context(|| format!("scaffold project {slug} at {}", abs.display()))?; - // v0.8.18 柱2 — record the creating chat as owner (explicit field; NOT - // path-derived). Use the known project dir: the config upsert happens - // below, so `paths.project_state(slug)` would still resolve the fallback - // projects-root path and miss an arbitrary-path project's real state. - if let Some(owner) = owner { - let state_path = ccteam_core::CcteamPaths::project_state_in(&abs); - match ccteam_core::ProjectState::load(&state_path) { - Ok(mut state) => { - state.owner = Some(owner.to_string()); - if let Err(err) = state.save(&state_path) { - tracing::warn!(%slug, error = %err, "set project owner failed"); - } - } - Err(err) => { - tracing::warn!(%slug, error = %err, "load state to set owner failed") - } - } - } - upsert_project( - &paths.root, - ProjectEntry { - slug: slug.clone(), - path: abs.clone(), - host: ccteam_core::LOCAL_HOST.to_string(), - remote_slug: None, - remote_path: None, - team: "dev".to_string(), - installed_at: chrono::Utc::now(), + // v0.8.18 柱2 — the creating chat is recorded as owner (explicit field; + // NOT path-derived). One shared creation path (issue #222): scaffold, + // owner stamp and config.yaml registration happen together. + create_project( + &paths, + &NewProject { + slug: &slug, + dir: &abs, + team: None, + owner, }, ) - .with_context(|| format!("register project {slug} in config.yaml"))?; + .with_context(|| format!("create project {slug} at {}", abs.display()))?; self.register_project(slug.clone(), abs.clone()); // Switch the creating chat INTO the new project (mirror `/cd`): point its // `current_project` at the fresh slug and clear the active session — a diff --git a/crates/ccteam-im/tests/inbound_wiring_test.rs b/crates/ccteam-im/tests/inbound_wiring_test.rs index 5664a5db..5eb452eb 100644 --- a/crates/ccteam-im/tests/inbound_wiring_test.rs +++ b/crates/ccteam-im/tests/inbound_wiring_test.rs @@ -2311,7 +2311,16 @@ async fn real_ws_dual_harness_smoke() { ) .unwrap(); let paths = ccteam_core::CcteamPaths::from_env().unwrap(); - ccteam_core::bootstrap_project_at_dir(&paths, project.path(), &slug, "", "real-ws").unwrap(); + ccteam_core::create_project( + &paths, + &ccteam_core::NewProject { + slug: &slug, + dir: project.path(), + team: Some("real-ws"), + owner: None, + }, + ) + .unwrap(); ccteam_core::install_hooks(&paths).unwrap(); seed_role(project.path(), "api"); seed_role(project.path(), "reviewer"); diff --git a/crates/ccteam-web/src/routes/projects.rs b/crates/ccteam-web/src/routes/projects.rs index 04dc53fd..332e8bb9 100644 --- a/crates/ccteam-web/src/routes/projects.rs +++ b/crates/ccteam-web/src/routes/projects.rs @@ -145,43 +145,27 @@ pub(crate) async fn handle_create_project( let paths = app.paths.clone(); let slug_for_blocking = slug.clone(); let abs_for_blocking = abs.clone(); - let team_for_blocking = team.clone(); + let team_for_blocking = form + .team + .as_deref() + .map(str::trim) + .filter(|team| !team.is_empty()) + .map(str::to_owned); // v0.8.18 档1 — bind the new project to its creating web user // (`user:`; admin → the shared `web-api` pool). Project is the unit of // ownership; its sessions inherit it. let owner_for_blocking = identity.owner_tag(); let scaffold = tokio::task::spawn_blocking(move || -> anyhow::Result<()> { - ccteam_core::bootstrap_project_at_dir( + // Scaffold + owner stamp (binds the project to its creator so the + // tenant can see its own project) + config.yaml registration, as one + // shared creation path (issue #222). + ccteam_core::create_project( &paths, - &abs_for_blocking, - &slug_for_blocking, - "(created from web resource API)", - &team_for_blocking, - )?; - // Owner stamp — bind the project to its creator so the tenant can see - // its own project. Use the KNOWN project path (`abs`), NOT - // `paths.project_state(slug)`: that resolves the dir through the config - // registry, which does not yet contain this project (the upsert is - // below) → it would fall back to the wrong path, the load would miss, - // and the owner would never persist → the creating tenant could not see - // its own project (404). `abs` IS the project working tree. - let state_path = ccteam_core::CcteamPaths::project_state_in(&abs_for_blocking); - if let Ok(mut state) = ccteam_core::ProjectState::load(&state_path) { - state.owner = Some(owner_for_blocking.clone()); - if let Err(err) = state.save(&state_path) { - tracing::warn!(slug = %slug_for_blocking, error = %err, "set project owner failed"); - } - } - ccteam_core::upsert_project_in_config( - &paths.root, - ProjectEntry { - slug: slug_for_blocking.clone(), - path: abs_for_blocking.clone(), - host: ccteam_core::LOCAL_HOST.to_string(), - remote_slug: None, - remote_path: None, - team: team_for_blocking.clone(), - installed_at: chrono::Utc::now(), + &ccteam_core::NewProject { + slug: &slug_for_blocking, + dir: &abs_for_blocking, + team: team_for_blocking.as_deref(), + owner: Some(&owner_for_blocking), }, )?; Ok(()) diff --git a/crates/ccteam-web/src/satellite.rs b/crates/ccteam-web/src/satellite.rs index 72c8bf47..09063f0d 100644 --- a/crates/ccteam-web/src/satellite.rs +++ b/crates/ccteam-web/src/satellite.rs @@ -371,23 +371,13 @@ fn initialize_satellite_project( } let requested_slug = ccteam_core::validate_slug_format(requested_slug)?; let slug = ccteam_core::pick_unused_project_slug(&paths.root, &requested_slug)?; - ccteam_core::bootstrap_project_at_dir( + ccteam_core::create_project( paths, - &path, - &slug, - "(created by daemon project binding)", - "dev", - )?; - ccteam_core::upsert_project_in_config( - &paths.root, - ccteam_core::ProjectEntry { - slug: slug.clone(), - path: path.clone(), - host: ccteam_core::LOCAL_HOST.to_string(), - remote_slug: None, - remote_path: None, - team: "dev".to_string(), - installed_at: chrono::Utc::now(), + &ccteam_core::NewProject { + slug: &slug, + dir: &path, + team: None, + owner: None, }, )?; Ok((slug, path)) @@ -487,4 +477,31 @@ mod tests { Some(HOST_CHANNEL_SUBPROTOCOL) ); } + + #[test] + fn project_binding_uses_the_shared_creation_footprint() { + ccteam_core::disable_tool_surface_bootstrap_for_tests(); + let tmp = tempfile::TempDir::new().unwrap(); + let paths = CcteamPaths { + root: tmp.path().join("home"), + projects_root: tmp.path().join("projects"), + }; + let target = tmp.path().join("workspace"); + ccteam_core::ProjectState::initial_for_team("old".into(), "ops".into()) + .save(&CcteamPaths::project_state_in(&target)) + .unwrap(); + let (slug, dir) = + initialize_satellite_project(&paths, target.to_str().unwrap(), "demo").unwrap(); + assert_eq!(dir, target); + assert!(target.join(".ccteam/state.json").is_file()); + assert!(target.join("AGENTS.md").is_file()); + assert!(target.join(".gitignore").is_file()); + assert!(!target.join("CLAUDE.md").exists()); + assert!(!target.join(".ccteam/workflow.yaml").exists()); + let registered = ccteam_core::lookup_project_in_config(&paths.root, &slug) + .unwrap() + .unwrap(); + assert_eq!(registered.path, target); + assert_eq!(registered.team, "ops"); + } } diff --git a/crates/ccteam-web/tests/resource_api_test.rs b/crates/ccteam-web/tests/resource_api_test.rs index c6b21c7a..abb16eda 100644 --- a/crates/ccteam-web/tests/resource_api_test.rs +++ b/crates/ccteam-web/tests/resource_api_test.rs @@ -396,6 +396,10 @@ async fn post_project_creates_and_registers() { // Side effects: state.json on disk + registered in config.yaml. assert!(target.join(".ccteam/state.json").exists()); + assert!(target.join("AGENTS.md").is_file()); + assert!(target.join(".gitignore").is_file()); + assert!(!target.join("CLAUDE.md").exists()); + assert!(!target.join(".ccteam/workflow.yaml").exists()); let entry = ccteam_core::lookup_project_in_config(&root, "myapp") .unwrap() .expect("myapp registered"); @@ -418,6 +422,41 @@ async fn post_project_rejects_bad_slug() { assert_eq!(resp.status(), 400); } +#[tokio::test] +async fn post_project_refresh_preserves_team_unless_explicit() { + disable_tool_surface_bootstrap_for_tests(); + for (team, expected) in [(None, "ops"), (Some("design"), "design")] { + let tmp = TempDir::new().unwrap(); + let paths = fake_paths(tmp.path()); + let root = paths.root.clone(); + let target = tmp.path().join("existing-repo"); + let state_path = CcteamPaths::project_state_in(&target); + ccteam_core::ProjectState::initial_for_team("old".into(), "ops".into()) + .save(&state_path) + .unwrap(); + let addr = spawn(AppState::new(paths)).await; + let resp = reqwest::Client::new() + .post(format!("http://{addr}/api/v1/projects")) + .json(&serde_json::json!({ + "slug": "adopted", "path": target, "team": team, + })) + .send() + .await + .unwrap(); + assert_eq!(resp.status(), 201); + let state = ccteam_core::ProjectState::load(&state_path).unwrap(); + assert_eq!(state.team, expected); + assert_eq!(state.owner.as_deref(), Some("user:web-api")); + assert_eq!( + ccteam_core::lookup_project_in_config(&root, "adopted") + .unwrap() + .unwrap() + .team, + expected + ); + } +} + #[tokio::test] async fn post_project_rejects_relative_path() { let tmp = TempDir::new().unwrap(); diff --git a/docs/usage-cn.md b/docs/usage-cn.md index 3f0e7d2d..e6e4f9f4 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -19,7 +19,7 @@ - **session** = 一个独立的 agent 会话(像 Claude Code 原生会话一样自带上下文),属于某个项目。一个项目可同时开多个会话、互不串台,每个有持久句柄 `s`(扛重启、不复用)。 - **role** = 会话启动时**可选**绑定的角色(`.claude/agents/.md` 里的 persona + 工具)。默认 **roleless**:裸 vendor 自读项目的 `CLAUDE.md`/`AGENTS.md`。persona 从插件市场装或自建,ccteam 不内置任何角色。 -> **ccteam 只管自己的东西。** 它从不修改你的业务代码、`.git/`、`.env`,也不改写你的 `CLAUDE.md` / `AGENTS.md` —— 这些都归项目自己,Claude 和 Codex 原生读取。 +> **ccteam 只管自己的东西。** 它从不修改你的业务代码、`.git/`、`.env`,也不改写已有的 `CLAUDE.md` / `AGENTS.md`。两文件都不存在时,创建项目只种一个供你补充的 `AGENTS.md` 占位文件。项目指引归项目自己,由 vendor 原生读取。 --- @@ -454,7 +454,7 @@ ccteam status # daemon 心跳 + 各项目及其会话 + web 链 ccteam doctor # 安装 / 依赖体检(--verify-mcp 校验 MCP 表面) ``` -`ccteam init` 只写 ccteam 自己的东西:项目 `.ccteam/`(状态)——**不种任何角色**,`.claude/agents/` 归你;也不写任何 Claude 设置(不建 `.claude/settings.local.json`、不装 hook),**不碰**你的 `.claude/settings.json`。重跑安全;对旧版 ccteam 初始化过的项目,重跑会把旧版写进 `.claude/settings.local.json` 的 Claude Code hook(及 Telegram 插件钉)剥掉,其余键和你自己的 hook 原样保留;文件不是合法 JSON 时原样不动、仅在回执里注明。偏好存 `~/.ccteam/preferences.toml`(目前一个键:`fallback.on_claude_quota` = `off`|`codex`,Claude 配额触顶是否回退 Codex)。 +`ccteam init`、Web 创建、IM `/newproject` 和卫星创建统一走一份代码:写 `.ccteam/state.json`,幂等把 `.ccteam/` 加进 `.gitignore`,仅在 `AGENTS.md` 和 `CLAUDE.md` 都不存在时种 `AGENTS.md` 占位文件,补全全局 `~/.ccteam/` 骨架,在 `~/.claude.json` 标记项目 trust,登记到 `~/.ccteam/config.yaml`。创建时不写 `CLAUDE.md`、`workflow.yaml`、角色或 Claude 设置;`.claude/agents/` 和 `.claude/settings.json` 归你。预算配置可自行创建 `.ccteam/workflow.yaml`。重跑刷新状态,未显式给出时保留已有 team 和 owner(`--force` 会重新盖默认 team),已有项目指引和 workflow 原样保留;同时清理 `.claude/settings.local.json` 中旧 ccteam hook/Telegram 插件钉,其余键和你的 hook 不动;非法 JSON 原样保留并在回执注明。偏好存 `~/.ccteam/preferences.toml`:`fallback.on_claude_quota` = `off`|`codex`,控制 Claude 配额触顶是否回退 Codex。 ### `project`(项目生命周期) diff --git a/docs/usage.md b/docs/usage.md index b9a5fc32..c901487a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -19,7 +19,7 @@ Install once, start one resident process, then do daily work from three surfaces - **session** = one independent agent conversation with its own context, like a native Claude Code session. A project can have many sessions running side by side. Each session has a durable handle `s` that survives restarts and is never reused. - **role** = an optional persona bound at session start, loaded from `.claude/agents/.md`. The default is **roleless**: the bare vendor reads the project's own `CLAUDE.md`/`AGENTS.md`. Personas are installed from the marketplace or written by you; ccteam seeds none. -> **ccteam only manages its own footprint.** It never edits your product code, `.git/`, `.env`, `CLAUDE.md`, or `AGENTS.md`. Project instructions stay owned by the project and are read natively by Claude and Codex. +> **ccteam only manages its own footprint.** It never edits your product code, `.git/`, `.env`, or existing `CLAUDE.md` / `AGENTS.md`. When neither instruction file exists, creation seeds only an `AGENTS.md` placeholder for you to fill in. Project instructions stay owned by the project and are read natively by the vendor. --- @@ -473,7 +473,7 @@ ccteam status # Daemon heartbeat, projects, sessions, web link, ccteam doctor # Install/dependency checks; --verify-mcp checks MCP surface. ``` -`ccteam init` only writes ccteam-owned files: project `.ccteam/` (it seeds no roles — `.claude/agents/` stays yours, and it writes no Claude settings: no `.claude/settings.local.json`, no hooks). It does **not** touch your `.claude/settings.json`. Re-running is safe, and on a project an older ccteam initialized it strips the Claude Code hooks (and the Telegram plugin pin) that version wrote into `.claude/settings.local.json`, leaving every other key and your own hooks in place; a file that is not valid JSON is left untouched and noted. Preferences live in `~/.ccteam/preferences.toml`; currently `fallback.on_claude_quota = off|codex` controls whether Claude quota exhaustion falls back to Codex. +`ccteam init`, Web creation, IM `/newproject`, and satellite project creation share one creation path: write `.ccteam/state.json`, add `.ccteam/` to `.gitignore`, seed an `AGENTS.md` placeholder only when neither `AGENTS.md` nor `CLAUDE.md` exists, ensure the global `~/.ccteam/` home, mark the project trusted in `~/.claude.json`, and register it in `~/.ccteam/config.yaml`. Creation writes no `CLAUDE.md`, `workflow.yaml`, roles, or Claude settings; `.claude/agents/` and `.claude/settings.json` stay yours. You can create `.ccteam/workflow.yaml` yourself for budget settings. Re-running refreshes state while preserving the recorded team and owner unless explicitly supplied (`--force` re-stamps the default team), and preserves existing project instructions and workflows. It also strips old ccteam hooks and the Telegram plugin pin from `.claude/settings.local.json`, keeping every other key and your own hooks; invalid JSON is left untouched and noted. Preferences live in `~/.ccteam/preferences.toml`; `fallback.on_claude_quota = off|codex` controls whether Claude quota exhaustion falls back to Codex. ### `project` (Project Lifecycle) From 0a9da1945633aaddf8c43c85346f601032a5153d Mon Sep 17 00:00:00 2001 From: randd1024 Date: Mon, 2 Nov 2026 14:07:45 +0000 Subject: [PATCH 7/9] fix(web): keep workspace controls usable on touch screens (#228) --- crates/ccteam-web/web/playwright.config.ts | 5 + .../web/src/components/fileWorkspace.css | 35 +++++- crates/ccteam-web/web/src/index.css | 19 ++-- .../ccteam-web/web/src/pages/SessionView.tsx | 5 +- crates/ccteam-web/web/tests/v032-spa.spec.ts | 101 ++++++++++++++++++ docs/usage-cn.md | 2 + docs/usage.md | 2 + 7 files changed, 151 insertions(+), 18 deletions(-) diff --git a/crates/ccteam-web/web/playwright.config.ts b/crates/ccteam-web/web/playwright.config.ts index 3782d352..36f3b31d 100644 --- a/crates/ccteam-web/web/playwright.config.ts +++ b/crates/ccteam-web/web/playwright.config.ts @@ -33,5 +33,10 @@ export default defineConfig({ name: "chromium", use: { browserName: "chromium" }, }, + { + name: "webkit-touch", + grep: /touch workspace/, + use: { browserName: "webkit" }, + }, ], }); diff --git a/crates/ccteam-web/web/src/components/fileWorkspace.css b/crates/ccteam-web/web/src/components/fileWorkspace.css index 84ed7891..64d6176e 100644 --- a/crates/ccteam-web/web/src/components/fileWorkspace.css +++ b/crates/ccteam-web/web/src/components/fileWorkspace.css @@ -1,4 +1,7 @@ /* #219: a shared right workspace, with Files and Context in the same tool rail. */ +[data-testid="conversation-view"] { + container: session-view / inline-size; +} .right-panel-tools { display: flex; align-items: center; @@ -222,7 +225,10 @@ .files-reader .cm-editor { height: 100%; } -@media (max-width: 820px) { +/* Size against the conversation, not the whole viewport: a portrait tablet + can still have the left sidebar open. Keep drawers below the shared toolbar + and give normal/expanded files the same layer above their local backdrop. */ +@container session-view (max-width: 820px) { #session-right-workspace { position: absolute !important; inset: 0 !important; @@ -239,16 +245,35 @@ width: 100%; } .files-workspace { - position: fixed; - inset: 0; - z-index: 110; + position: absolute; + inset: 0 0 0 auto; + width: min(96%, 640px); + z-index: 2; box-shadow: -8px 0 30px #0002; } + .files-workspace.files-expanded { + width: 100%; + z-index: 2; + } + .right-workspace-panel .ctx-panel { + position: absolute; + inset: 0 0 0 auto; + width: min(92%, 380px); + height: 100%; + z-index: 2; + background: var(--bg-card); + box-shadow: var(--shadow-menu); + } .outer-separator { display: none; } - .files-backdrop { + #session-right-workspace .ctx-backdrop { display: block; + position: absolute; + inset: 0; + z-index: 1; + border: none; + background: rgba(0, 0, 0, .28); pointer-events: auto; } .files-head { diff --git a/crates/ccteam-web/web/src/index.css b/crates/ccteam-web/web/src/index.css index 8e408765..ff728363 100644 --- a/crates/ccteam-web/web/src/index.css +++ b/crates/ccteam-web/web/src/index.css @@ -667,9 +667,13 @@ html.dark .dot.off { background: #4b4e57; } .conv-head .session-role { flex: none; max-width: 20%; overflow: hidden; text-overflow: ellipsis; } /* The rename pencil stays out of the way until the header is hovered (it is still keyboard-reachable and announced — only the paint is conditional). */ -.conv-head .rename-title { opacity: 0; transition: opacity .12s; margin-left: -6px; } -.conv-head:hover .rename-title, -.conv-head .rename-title:focus-visible { opacity: 1; } +.conv-head .rename-title { transition: opacity .12s; margin-left: -6px; } +/* Touch browsers must not consume the first tap to reveal a hover-only action. */ +@media (hover: hover) { + .conv-head .rename-title { opacity: 0; } + .conv-head:hover .rename-title, + .conv-head .rename-title:focus-visible { opacity: 1; } +} .conv-head .rename-input { font-size: 15px; font-weight: 600; min-width: 220px; } @media (max-width: 820px) { .conv-head .session-model { display: none; } @@ -1514,7 +1518,6 @@ html.dark { padding: 9px 10px 9px 16px; border-bottom: 1px solid var(--border-soft); } .ctx-head .ctx-title { font-size: 13px; font-weight: 600; margin-right: auto; } -@media (max-width: 820px) { .ctx-head { padding-left: 60px; } } .ctx-body { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 16px 22px; display: flex; flex-direction: column; gap: 16px; font-size: 12.5px; @@ -1604,11 +1607,3 @@ html.dark { .ctx-spin { animation: ctx-spin 1s linear infinite; } @media (prefers-reduced-motion: reduce) { .ctx-spin { animation: none; opacity: .5; } } @media (max-width: 1100px) { .ctx-panel { width: 320px; } } -@media (max-width: 820px) { - .ctx-panel { - position: fixed; top: 0; right: 0; bottom: 0; z-index: 110; - width: min(92vw, 380px); background: var(--bg-card); box-shadow: var(--shadow-menu); - border-left: 1px solid var(--border); - } - .ctx-backdrop { display: block; position: fixed; inset: 0; z-index: 105; border: none; background: rgba(0,0,0,.28); } -} diff --git a/crates/ccteam-web/web/src/pages/SessionView.tsx b/crates/ccteam-web/web/src/pages/SessionView.tsx index e6bdff09..b06e18df 100644 --- a/crates/ccteam-web/web/src/pages/SessionView.tsx +++ b/crates/ccteam-web/web/src/pages/SessionView.tsx @@ -908,7 +908,10 @@ export default function SessionView({ id="session-workspace" defaultLayout={workspaceLayout} onLayoutChanged={(layout) => { - if (!activePanel || isNarrowViewport(window)) return; + // Match the drawer's container query, including tablets whose left + // sidebar leaves less room than the viewport width suggests. + const width = document.getElementById("session-workspace")?.clientWidth; + if (!activePanel || width == null || width <= 820) return; try { localStorage.setItem( "ccteam.workspace.layout", diff --git a/crates/ccteam-web/web/tests/v032-spa.spec.ts b/crates/ccteam-web/web/tests/v032-spa.spec.ts index d9b5364c..9c3288a1 100644 --- a/crates/ccteam-web/web/tests/v032-spa.spec.ts +++ b/crates/ccteam-web/web/tests/v032-spa.spec.ts @@ -781,6 +781,107 @@ test("file workspace preserves Context, refreshes paths, and previews HTML", asy await expect(page.getByTestId("files-toggle")).toBeFocused(); }); +test.describe("touch workspace", () => { + test.use({ hasTouch: true, isMobile: true }); + + async function openWorkspace(page: Page, width: number, height: number) { + await mockCcteamApi(page); + await page.setViewportSize({ width, height }); + await page.route("**/api/v1/projects/dev-team/files", route => route.fulfill({json:{root:"/repo",paths:["mobile.txt"],git_status:{},truncated:false}})); + await page.route("**/api/v1/projects/dev-team/file?*", route => route.fulfill({json:{path:"mobile.txt",content:"Keep this reading position",size:26,binary:false}})); + await page.route("**/api/v1/sessions/s1/context", route => route.fulfill({json:{sid:"s1",live:false,breakdown:null}})); + await page.goto("/app/chat/s/s1"); + await page.getByTestId("files-toggle").tap(); + await expect(page.getByTestId("file-workspace")).toBeVisible(); + } + + async function expectToolbarClickable(page: Page) { + for (const id of ["files-toggle", "ctx-toggle"]) { + await expect(page.getByTestId(id)).toBeInViewport(); + expect(await page.getByTestId(id).evaluate(element => { + const bounds = element.getBoundingClientRect(); + return document.elementFromPoint(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2)?.closest("button") === element; + })).toBe(true); + } + } + + for (const [width, height] of [[320,720],[390,844],[768,1024],[820,1180],[834,1194],[1024,768],[1180,820],[1440,900]]) { + test(`single taps open, close and switch panels at ${width}x${height}`, async ({ page }, testInfo) => { + await openWorkspace(page, width, height); + await expectToolbarClickable(page); + await page.getByTestId("files-toggle").tap(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await page.getByTestId("files-toggle").tap(); + await expect(page.getByTestId("file-workspace")).toBeVisible(); + await page.getByTestId("project-file-tree").getByRole("treeitem", {name:"mobile.txt",exact:true}).tap(); + await expect(page.locator(".cm-content")).toContainText("Keep this reading position"); + const before = await page.getByTestId("file-workspace").boundingBox(); + await page.getByRole("button", {name:/放大工作区|Expand workspace/}).tap(); + const expanded = await page.getByTestId("file-workspace").boundingBox(); + const body = await page.locator(".conv-body").boundingBox(); + expect(expanded!.width).toBeGreaterThan(before!.width + 2); + expect(Math.abs(expanded!.width - body!.width)).toBeLessThan(2); + await expectToolbarClickable(page); + await page.screenshot({path:testInfo.outputPath(`files-expanded-${width}x${height}.png`)}); + await page.getByRole("button", {name:/恢复并排布局|Restore split view/}).tap(); + await page.getByTestId("ctx-toggle").tap(); + await expect(page.getByTestId("context-panel")).toBeVisible(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await expectToolbarClickable(page); + await page.screenshot({path:testInfo.outputPath(`workspace-${width}x${height}.png`)}); + await page.getByTestId("ctx-toggle").tap(); + await expect(page.getByTestId("context-panel")).not.toBeVisible(); + await page.getByTestId("files-toggle").tap(); + await expect(page.locator(".cm-content")).toContainText("Keep this reading position"); + await page.getByRole("button", {name:/关闭文件面板|Close file panel/}).last().tap(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await expect(page.getByTestId("files-toggle")).toBeFocused(); + }); + } + + test("expanded tablet workspace stays operable through rotation", async ({page}) => { + await openWorkspace(page, 1180, 820); + await page.getByRole("button", {name:/放大工作区|Expand workspace/}).tap(); + await page.setViewportSize({width:820,height:1180}); + await expectToolbarClickable(page); + await page.getByRole("button", {name:/恢复并排布局|Restore split view/}).tap(); + await page.getByTestId("ctx-toggle").tap(); + await expect(page.getByTestId("context-panel")).toBeVisible(); + await page.setViewportSize({width:1180,height:820}); + await expectToolbarClickable(page); + await page.getByTestId("files-toggle").tap(); + await expect(page.getByTestId("file-workspace")).toBeVisible(); + }); + + test("saved desktop layout survives narrow drawers, backdrop taps and rotation", async ({page}) => { + const layout = JSON.stringify({"session-chat":60,"session-right-workspace":40}); + await page.addInitScript(value => { + localStorage.setItem("ccteam.workspace.layout", value); + localStorage.setItem("ccteam.files.open", "1"); + }, layout); + // A remembered desktop panel must still open on the first phone tap. + await openWorkspace(page, 390, 844); + const savedLayout = () => page.evaluate(() => localStorage.getItem("ccteam.workspace.layout")); + expect(await savedLayout()).toBe(layout); + await page.locator(".files-backdrop").tap({position:{x:1,y:100}}); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + await expect(page.getByTestId("files-toggle")).toBeFocused(); + await page.getByTestId("ctx-toggle").tap(); + await page.getByTestId("ctx-backdrop").tap({position:{x:1,y:100}}); + await expect(page.getByTestId("context-panel")).not.toBeVisible(); + await expect(page.getByTestId("ctx-toggle")).toBeFocused(); + await page.getByTestId("files-toggle").tap(); + await page.setViewportSize({width:834,height:1194}); + await expectToolbarClickable(page); + expect(await savedLayout()).toBe(layout); + await page.setViewportSize({width:390,height:844}); + await expectToolbarClickable(page); + await page.getByTestId("files-toggle").tap(); + await expect(page.getByTestId("file-workspace")).not.toBeVisible(); + expect(await savedLayout()).toBe(layout); + }); +}); + test("mobile Files drawer accepts clicks above its backdrop", async ({ page, }) => { diff --git a/docs/usage-cn.md b/docs/usage-cn.md index e6e4f9f4..6ed4a7bf 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -211,6 +211,8 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> 会话顶部显示状态、标题、非空 role 和模型文字;右上角统一排列「文件」和「上下文」,上下文按钮附带窗口使用百分比,点击切换右侧工作区。双击标题或点重命名按钮可改名。桌面可拖动聊天与工作区之间的分隔线调整宽度,手机以抽屉展示,Esc 关闭并返回入口。 +平板和手机空间不足时,抽屉只覆盖聊天区,顶部「文件/上下文」始终可点:单击打开,再次单击关闭,点击另一个入口直接切换。文件可放大到整个聊天区并还原;也可点关闭按钮或露出的遮罩关闭。横竖屏切换保留已打开文件,抽屉宽度不会覆盖桌面的分栏偏好。 + 每条助手文本回复的 footer 都有复制按钮,复制该条回复的原始 Markdown(保留代码块、表格和链接,不含状态 footer 或工具过程),并显示成功或失败反馈。 「文件」支持目录搜索、键盘导航、文件图标和 Git 状态。单击临时预览,双击或点固定按钮保留标签;切换到上下文再回来仍保留已打开文件与阅读位置。聊天中的本地文件链接可直接打开源码并定位行号。点刷新可重新读取目录、源码与预览,turn 结束也会刷新。 diff --git a/docs/usage.md b/docs/usage.md index c901487a..0f6f1120 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -217,6 +217,8 @@ One daemon can serve multiple users on one machine. This is **soft isolation** u The session header shows status, title, a nonempty role and plain model text. The top-right toolbar groups **Files** and **Context**, with window usage on Context. Double-click the title or use its rename button to rename. Drag the divider to resize the desktop workspace. On phones it opens as a drawer; Escape closes it and returns focus to its toolbar button. +When a tablet or phone has limited conversation space, drawers cover only the chat body. Files / Context remain reachable: tap once to open, again to close, or tap the other button to switch. Files can expand across the chat body and restore; the close button or exposed backdrop also dismisses the drawer. Rotation preserves open files, and drawer widths do not overwrite desktop split preferences. + Each assistant text reply has a footer copy button. It copies that reply's original Markdown, preserving code fences, tables and links without metadata or tool activity, and shows success or failure feedback. Files offers path search, keyboard navigation, file icons, and Git status. Click for a temporary preview; double-click or pin to keep a tab. Switching to Context and back preserves open files and reading positions. Local file links in chat open source at the referenced line. Refresh reloads the directory, source, and preview; turn completion also refreshes them. From f7732ab3a83144f154924276809f7fe8a9a7c67c Mon Sep 17 00:00:00 2001 From: firstintent <239836187+firstintent@users.noreply.github.com> Date: Mon, 2 Nov 2026 23:45:35 +0800 Subject: [PATCH 8/9] fix(dsh): keep embedded web traffic on the console origin (#230) Route the embedded DSH UI through the existing authenticated proxy at /dsh/ so HTTP and HTTPS reverse proxies preserve the external origin. Keep the dedicated companion listener available and make plugin API, stream, upload and attachment URLs follow the DSH mount. Requirement: docs-local/issues/#230. Verified native DSH in Chromium through direct main and companion ports and default-port HTTP/HTTPS proxies, plus the required Rust, SPA and plugin gates. --- README.md | 2 +- .../execution/dsh_acp/assets/ccteam-ui.tgz | Bin 265672 -> 265908 bytes crates/ccteam-web/src/lib.rs | 5 ++ crates/ccteam-web/tests/dsh_web_test.rs | 73 +++++++++++++++++- crates/ccteam-web/web/src/lib/dshApi.ts | 14 ++-- .../web/src/pages/DshKeepAlive.test.tsx | 4 +- .../ccteam-web/web/src/pages/DshView.test.tsx | 18 ++++- crates/ccteam-web/web/src/pages/DshView.tsx | 2 +- docs/usage-cn.md | 4 +- docs/usage.md | 4 +- dsh-plugins/ccteam-ui/src/bff.ts | 5 +- dsh-plugins/ccteam-ui/src/client/api.ts | 6 +- dsh-plugins/ccteam-ui/src/shared/contract.ts | 2 + .../ccteam-ui/tests/client-api.test.ts | 42 +++++++--- 14 files changed, 146 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 95d30b93..7610ccd4 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ The installer runs the daemon; `ccteam status` reprints your link (`http://-Cb2( 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%0D0mvru<*1N5 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

Ru-l@&mW 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

69;h`P?+^X5OC2@)u>l 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%0A}BI9^PrYXgQ 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 I&;Wc90FIV@(EtDd delta 256157 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 diff --git a/crates/ccteam-web/src/lib.rs b/crates/ccteam-web/src/lib.rs index 6a7de648..7fdf4bc7 100644 --- a/crates/ccteam-web/src/lib.rs +++ b/crates/ccteam-web/src/lib.rs @@ -174,9 +174,14 @@ pub fn router_with_state(state: AppState) -> Router { // spawn came out rootless (the v0.9.2 "delegation parent lost over HTTP" // fix). The web token is not a credential HERE at all: it names a browser // session and authenticates `/api/v1/**`, never the MCP data plane. + // Use the same authenticated proxy as the dedicated companion listener. + // A relative iframe URL survives TLS termination and external port mapping; + // the vendor's assets, RPC and WebSockets all stay under this mount. + let dsh = dsh_web::companion_router().with_state(state.clone()); let mcp = routes::mcp::router().with_state(state); Router::new() .merge(routes::stateless_router(health)) + .nest("/dsh/", dsh) .merge(mcp) .merge(stateful) .layer(CompressionLayer::new().gzip(true).br(true)) diff --git a/crates/ccteam-web/tests/dsh_web_test.rs b/crates/ccteam-web/tests/dsh_web_test.rs index 7f6e8239..ff50e1f3 100644 --- a/crates/ccteam-web/tests/dsh_web_test.rs +++ b/crates/ccteam-web/tests/dsh_web_test.rs @@ -145,7 +145,10 @@ async fn spawn_fake_dsh_origin() -> SocketAddr { }), ) .route("/api/events.mux", get(echo_websocket)) - .route("/api/events.host", get(echo_websocket)); + .route("/api/events.host", get(echo_websocket)) + .fallback(|uri: axum::http::Uri| async move { + (StatusCode::NOT_FOUND, format!("unexpected upstream URI: {uri}")) + }); spawn_app(app).await } @@ -210,6 +213,74 @@ async fn companion_compresses_assets_after_splicing_html() { assert!(decoded_html.contains("dsh web")); } +#[tokio::test] +async fn main_origin_dsh_mount_proxies_html_assets_and_websockets_with_auth() { + let origin = spawn_fake_dsh_origin().await; + let tmp = TempDir::new().unwrap(); + let paths = fake_paths(tmp.path()); + let supervisor = supervisor_for(&paths.root, Some(format!("http://{origin}"))); + let state = + AppState::with_auth(paths, AuthState::enabled(TOKEN_HEX.into())).with_dsh_web(supervisor); + let addr = spawn_app(router_with_state(state)).await; + let client = reqwest::Client::builder().no_proxy().build().unwrap(); + + for path in ["/dsh/", "/dsh/client.js", "/dsh/api/events.mux"] { + assert_eq!( + client + .get(format!("http://{addr}{path}")) + .send() + .await + .unwrap() + .status(), + 401 + ); + } + for (path, marker) in [ + ("/dsh/", "dsh web"), + ("/dsh/client.js", "window.__DSH_ASSET__"), + ] { + let response = client + .get(format!("http://{addr}{path}")) + .header(header::COOKIE, format!("ccteam_token={TOKEN_HEX}")) + .send() + .await + .unwrap(); + let status = response.status(); + let body = response.text().await.unwrap(); + assert_eq!(status, 200, "{path}: {body}"); + assert!(body.contains(marker)); + } + let request = Request::builder() + .uri(format!("ws://{addr}/dsh/api/events.mux")) + .header(header::HOST, addr.to_string()) + .header(header::COOKIE, format!("ccteam_token={TOKEN_HEX}")) + .header(header::CONNECTION, "Upgrade") + .header(header::UPGRADE, "websocket") + .header("Sec-WebSocket-Version", "13") + .header("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ==") + .body(()) + .unwrap(); + let (mut socket, response) = tokio_tungstenite::connect_async(request).await.unwrap(); + assert_eq!(response.status(), StatusCode::SWITCHING_PROTOCOLS); + socket + .send(tokio_tungstenite::tungstenite::Message::Text( + "mounted".into(), + )) + .await + .unwrap(); + assert_eq!( + tokio::time::timeout(Duration::from_secs(3), socket.next()) + .await + .unwrap() + .unwrap() + .unwrap() + .into_text() + .unwrap(), + "mounted" + ); + socket.close(None).await.unwrap(); +} + #[tokio::test] async fn companion_websocket_downlinks_upgrade_and_carry_frames_with_compression_enabled() { let origin = spawn_fake_dsh_origin().await; diff --git a/crates/ccteam-web/web/src/lib/dshApi.ts b/crates/ccteam-web/web/src/lib/dshApi.ts index 47275455..e290bf56 100644 --- a/crates/ccteam-web/web/src/lib/dshApi.ts +++ b/crates/ccteam-web/web/src/lib/dshApi.ts @@ -1,8 +1,8 @@ // v0.9.15 — DSH web first-class page. `GET /api/v1/dsh/status` reports this // identity's DSH web instance (operator = the real ~/.dsh; tenant = an // isolated per-tenant DSH_HOME), and `start`/`stop` drive its lifecycle. The -// page itself embeds the instance through the daemon's companion port -// (`companion_port`), which reuses the same ccteam auth — the SPA never talks +// page itself embeds the instance through the same-origin /dsh/ proxy, +// which reuses the same ccteam auth — the SPA never talks // to `dsh web` directly. Backend SoT: routes/dsh.rs. import { httpError } from "./httpError"; @@ -16,7 +16,7 @@ export interface DshStatus { state: DshState; /** The `dsh web` listen port (ephemeral) once running; absent otherwise. */ port?: number | null; - /** The daemon's DSH companion listener port — the iframe's real origin. + /** The daemon's optional dedicated DSH companion listener port. * Absent when the companion listener is off (`state:"disabled"`). */ companion_port?: number | null; /** `own` = the operator's real ~/.dsh; `managed` = a ccteam-owned tenant home. */ @@ -57,14 +57,12 @@ export function isDisabled(status: DshStatus | null): boolean { return !!status && (status.state === "disabled" || status.disabled === true); } -/** The embed origin: same scheme + hostname as the SPA, on the daemon's DSH - * companion port. Empty until the instance is serving. */ +/** Keep the browser's external origin (including TLS and any mapped port). + * Internal listener ports cannot describe an HTTPS reverse proxy's address. */ export function embedSrc(status: DshStatus | null): string | null { if (!status || (status.state !== "running" && status.state !== "attached")) return null; if (status.companion_port == null) return null; - if (typeof window === "undefined") return null; - const { protocol, hostname } = window.location; - return `${protocol}//${hostname}:${status.companion_port}/`; + return "/dsh/"; } /** Whether a hostname is loopback — the only place a DSH-loopback-bound URL is diff --git a/crates/ccteam-web/web/src/pages/DshKeepAlive.test.tsx b/crates/ccteam-web/web/src/pages/DshKeepAlive.test.tsx index 443e4948..e2899cb2 100644 --- a/crates/ccteam-web/web/src/pages/DshKeepAlive.test.tsx +++ b/crates/ccteam-web/web/src/pages/DshKeepAlive.test.tsx @@ -105,7 +105,7 @@ describe("DSH keep-alive across navigation (WEB-DSH-1)", () => { await act(async () => navigate("/dsh")); const frame = container.querySelector('[data-testid="dsh-frame"]') as HTMLIFrameElement | null; expect(frame).not.toBeNull(); - expect(frame?.getAttribute("src")).toBe("http://localhost:7332/"); + expect(frame?.getAttribute("src")).toBe("/dsh/"); const host = container.querySelector('[data-testid="dsh-frame-host"]'); expect(host).not.toBeNull(); expect((host as HTMLDivElement).hidden).toBe(false); @@ -122,7 +122,7 @@ describe("DSH keep-alive across navigation (WEB-DSH-1)", () => { expect(hostHidden).not.toBeNull(); expect(hostHidden.hidden).toBe(true); expect(container.querySelector('[data-testid="dsh-frame"]')).toBe(frame); - expect(frame?.getAttribute("src")).toBe("http://localhost:7332/"); + expect(frame?.getAttribute("src")).toBe("/dsh/"); // Navigate back: still the SAME iframe node (a remount would have created // a new element and re-fetched the DSH SPA). diff --git a/crates/ccteam-web/web/src/pages/DshView.test.tsx b/crates/ccteam-web/web/src/pages/DshView.test.tsx index 20ca7f91..908ab5ed 100644 --- a/crates/ccteam-web/web/src/pages/DshView.test.tsx +++ b/crates/ccteam-web/web/src/pages/DshView.test.tsx @@ -57,14 +57,24 @@ describe("isDisabled — tolerate both off encodings", () => { }); describe("embedSrc — only when serving", () => { - it("is the companion origin when running/attached, null otherwise", () => { - // jsdom serves http://localhost/ by default. - expect(embedSrc(status({ state: "running" }))).toBe("http://localhost:7332/"); - expect(embedSrc(status({ state: "attached" }))).toBe("http://localhost:7332/"); + it("uses the same-origin mount when running/attached, null otherwise", () => { + expect(embedSrc(status({ state: "running" }))).toBe("/dsh/"); + expect(embedSrc(status({ state: "attached" }))).toBe("/dsh/"); expect(embedSrc(status({ state: "starting" }))).toBeNull(); expect(embedSrc(status({ state: "stopped" }))).toBeNull(); expect(embedSrc(null)).toBeNull(); }); + + it.each([ + "http://localhost:7331/app/dsh", + "http://ccteam.example/app/dsh", + "https://ccteam.example/app/dsh", + "https://ccteam.example:8443/app/dsh", + ])("keeps the external origin of %s instead of exposing the companion port", (page) => { + const target = new URL(embedSrc(status())!, page); + expect(target.origin).toBe(new URL(page).origin); + expect(target.pathname).toBe("/dsh/"); + }); }); describe("nativeHref — loopback gate", () => { diff --git a/crates/ccteam-web/web/src/pages/DshView.tsx b/crates/ccteam-web/web/src/pages/DshView.tsx index f476cc15..32acf660 100644 --- a/crates/ccteam-web/web/src/pages/DshView.tsx +++ b/crates/ccteam-web/web/src/pages/DshView.tsx @@ -1,6 +1,6 @@ // v0.9.15 — DSH (DeepSeek Harness) as a first-class ccteam-web page. The shell // route `/dsh` mounts this; it embeds the identity's `dsh web` instance through -// the daemon's DSH companion port (same ccteam auth, per-tenant isolation via +// the daemon's same-origin /dsh/ proxy (same ccteam auth, per-tenant isolation via // DSH_HOME — the SPA never reaches `dsh web` directly, redline §四). The page // is a thin lifecycle skin over `GET/POST /api/v1/dsh/*`: a status head // (state dot · meta chips · start/stop/restart · operator "open native ↗") diff --git a/docs/usage-cn.md b/docs/usage-cn.md index 6ed4a7bf..3b202658 100644 --- a/docs/usage-cn.md +++ b/docs/usage-cn.md @@ -145,7 +145,7 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> ### DSH Web -**DSH** 页把原生 DeepSeek Harness Web 嵌进 ccteam 控制台,中间走伴生端口反代。它复用 ccteam 登录 cookie;反代会剥掉 ccteam cookie / bearer,不会把它们交给 DSH 进程或日志。 +**DSH** 页把原生 DeepSeek Harness Web 嵌进 ccteam 控制台,中间走同源 `/dsh/` 反代。它复用 ccteam 登录 cookie;反代会剥掉 ccteam cookie / bearer,不会把它们交给 DSH 进程或日志。 一个身份只跑**一个** DSH 运行时,ccteam 是它的第二个 client:从 ccteam 雇出来的 DSH 会话(`/new dsh`、`agent {vendor:"dsh"}`)就建在这个运行时里,所以它们会实时出现在本页侧栏、挂在项目 workspace 下;agent 干到一半你可以点开围观或插话,agent 的下一次 dispatch 接着同一条对话继续。雇佣会话会加入 DSH 四种 agent preset 之一(`standard` / `ptc` / `minimal` / `creator`,决定工具集),ccteam 默认 `standard`,`/new dsh mode=`(或 spawn API 的 `mode`)可选其它;雇佣会话权限 preset 默认 `danger-full-access`(全文件访问、免审批),spawn 时选 `hitl` 则保留逐次审批。 @@ -158,7 +158,7 @@ web url: http://<你的局域网IP>:7331/?token=ccteam:<令牌> - **信任边界**:租户 DSH Web 是同一 OS 用户下的软隔离。DSH agent 能跑 shell,用户自装 DSH 插件也是任意 npm 代码,信任级等同这个系统账号。同一个 OS 用户下的配置可见性只是便利边界,不是硬安全边界。 - **局域网明文访问**:DSH Web 是按 loopback 源写的 —— 浏览器只在安全上下文里给它 `crypto.randomUUID`,而它用这个 API 生成**每一个** RPC 请求 id;换成局域网地址 + 明文 HTTP,这个 API 就没了。把界面搬离 loopback 的是 ccteam,所以伴生监听会在下发的 HTML 里补回这一个 API(用 `crypto.getRandomValues` 实现的标准 v4 UUID,不降随机强度);浏览器本来就提供时它自动让位。用 HTTPS 访问控制台、或直接在 daemon 本机打开,都不需要这层补丁。 -如果 ccteam 前面有 HTTPS 反代,**伴生端口也必须一起反代**。DSH Web 没有 base-path 支持,所以用第二个 HTTPS 端口或子域;只反代 `:7331` 会让 iframe 继续加载明文 HTTP,浏览器按 mixed-content 拒绝。 +DSH 菜单通过当前 Web 入口的 `/dsh/` 同源代理加载 HTML、资源、RPC 和 WebSocket,自动沿用浏览器的协议与端口。直接访问主 Web 端口、通过 80/443 的 HTTP/HTTPS 反代均可用;反代只需覆盖主 Web 监听并支持 WebSocket upgrade,不用额外开放公网端口或子域。独立伴生入口(通常是 `:7332/`)仍可访问,它本身是明文 HTTP,需要 HTTPS 时由反代提供 TLS。 ### 创建项目 diff --git a/docs/usage.md b/docs/usage.md index 0f6f1120..45778e41 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -145,7 +145,7 @@ Every daemon start (`ccteam start` / `ccteam daemon start`, including the DSH pl ### DSH Web -The **DSH** page embeds native DeepSeek Harness Web through the companion listener. It uses the same ccteam login cookie as the rest of the console; the DSH process never receives the ccteam cookie or bearer token. +The **DSH** page embeds native DeepSeek Harness Web through `/dsh/` on the same web origin. It uses the same ccteam login cookie as the rest of the console; the DSH process never receives the ccteam cookie or bearer token. The dedicated companion listener (normally `:7332/`) remains available. An identity runs **one** DSH runtime, and ccteam is its second client: sessions you hire from ccteam (`/new dsh`, `agent {vendor:"dsh"}`) are created inside that same runtime, so they show up live in this page's sidebar under the project's workspace, you can open one mid-task to watch or interject, and the agent's next dispatch continues the same conversation. A hire joins one of DSH's four agent presets — `standard`, `ptc`, `minimal`, or `creator` — which pick its toolset; ccteam defaults to `standard`, `mode=` on `/new dsh` (or `mode` on the spawn APIs) picks another, and a hire runs on the `danger-full-access` permission preset (full file access, no approval prompts) unless spawned with `hitl`. @@ -157,7 +157,7 @@ An identity runs **one** DSH runtime, and ccteam is its second client: sessions - **Plain-HTTP LAN access:** DSH Web is written for a loopback origin, where browsers grant it secure-context APIs — it mints every RPC id with `crypto.randomUUID`, which browsers withhold from plain HTTP on a LAN address. Because ccteam is what moves the UI off loopback, the companion listener restores that one API (a real `crypto.getRandomValues`-backed UUID v4) in the HTML it serves, and stays out of the way when the browser already provides it. Serving the console over HTTPS or opening it on the daemon host needs none of this. - **Settings from a LAN browser:** the authenticated companion page declares ownership of its per-identity Host through DSH's public `__DSH_TRANSPORT__.ownsHost` hook. DSH handles settings through its native configuration forms; vendor JavaScript is forwarded unchanged. File actions act on the daemon host — the workspace machine. -When running ccteam behind HTTPS, proxy the DSH companion listener as well as the main web listener. DSH Web has no base-path support, so use a second HTTPS port or subdomain; proxying only `:7331` leaves the iframe on plain HTTP and browsers block it as mixed content. +When running ccteam behind an HTTP or HTTPS reverse proxy on port 80 or 443, proxy the main web listener, including WebSocket upgrades. The DSH page uses that same external origin for its HTML, assets, RPC and WebSockets; no additional public port or subdomain is needed. Direct access to the main web port also works. The dedicated companion listener is plain HTTP unless your reverse proxy adds TLS in front of it. For the opposite direction — installing ccteam's plugins into a `dsh web` you run yourself, and using the ccteam workbench inside DSH’s own console — see [dsh-plugin.md](dsh-plugin.md) ([中文](dsh-plugin-cn.md)). diff --git a/dsh-plugins/ccteam-ui/src/bff.ts b/dsh-plugins/ccteam-ui/src/bff.ts index 917e774e..ef13c0a3 100644 --- a/dsh-plugins/ccteam-ui/src/bff.ts +++ b/dsh-plugins/ccteam-ui/src/bff.ts @@ -37,6 +37,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http' import { API_PREFIX, + API_RELATIVE_PREFIX, ATTACHMENT_PATH, EVENTS_PATH, UPLOAD_PATH, @@ -952,11 +953,11 @@ function residencyOf(residency: string | undefined): Residency | undefined { } function attachmentUrlFor(project: string, name: string): string { - return `${API_PREFIX}${ATTACHMENT_PATH}?project=${encodeURIComponent(project)}&name=${encodeURIComponent(name)}` + return `${API_RELATIVE_PREFIX}${ATTACHMENT_PATH}?project=${encodeURIComponent(project)}&name=${encodeURIComponent(name)}` } function attachmentUrlForSid(sid: string, name: string): string { - return `${API_PREFIX}${ATTACHMENT_PATH}?sid=${encodeURIComponent(sid)}&name=${encodeURIComponent(name)}` + return `${API_RELATIVE_PREFIX}${ATTACHMENT_PATH}?sid=${encodeURIComponent(sid)}&name=${encodeURIComponent(name)}` } /** diff --git a/dsh-plugins/ccteam-ui/src/client/api.ts b/dsh-plugins/ccteam-ui/src/client/api.ts index ed0e89e8..96cadf1e 100644 --- a/dsh-plugins/ccteam-ui/src/client/api.ts +++ b/dsh-plugins/ccteam-ui/src/client/api.ts @@ -5,7 +5,7 @@ * URL or credential. Both transports are injectable so tests run without * fetch/EventSource. */ -import { API_PREFIX, ATTACHMENT_PATH, EVENTS_PATH, UPLOAD_PATH } from '../shared/contract.js' +import { API_RELATIVE_PREFIX, ATTACHMENT_PATH, EVENTS_PATH, UPLOAD_PATH } from '../shared/contract.js' import type { ApiMethod, EngineActionResult, @@ -114,7 +114,7 @@ export interface ApiClient { /** * Build the events URL for an optional sid filter. - * @param prefix - API prefix (contract API_PREFIX in production). + * @param prefix - API prefix (document-relative in production). * @param sid - session filter; omitted subscribes to the whole team stream. * @returns the subscription URL. */ @@ -152,7 +152,7 @@ export function attachmentUrl(prefix: string, project: string, name: string): st * @returns the client. */ export function createApi(deps: ApiDeps = {}): ApiClient { - const prefix = deps.prefix ?? API_PREFIX + const prefix = deps.prefix ?? API_RELATIVE_PREFIX const fetchFn = deps.fetchFn ?? ((input: string, init?: RequestInit) => fetch(input, init)) const createEventSource = deps.createEventSource ?? ((url: string): EventSourceLike => diff --git a/dsh-plugins/ccteam-ui/src/shared/contract.ts b/dsh-plugins/ccteam-ui/src/shared/contract.ts index f52c471a..4921dce5 100644 --- a/dsh-plugins/ccteam-ui/src/shared/contract.ts +++ b/dsh-plugins/ccteam-ui/src/shared/contract.ts @@ -12,6 +12,8 @@ */ export const API_PREFIX = '/ccteam/api' +/** Browser URLs follow the DSH document mount, at / or behind a path proxy. */ +export const API_RELATIVE_PREFIX = API_PREFIX.slice(1) /** Sub-paths under {@link API_PREFIX} that are not JSON methods. */ export const EVENTS_PATH = '/events' diff --git a/dsh-plugins/ccteam-ui/tests/client-api.test.ts b/dsh-plugins/ccteam-ui/tests/client-api.test.ts index 972e8c7c..d988b330 100644 --- a/dsh-plugins/ccteam-ui/tests/client-api.test.ts +++ b/dsh-plugins/ccteam-ui/tests/client-api.test.ts @@ -1,9 +1,10 @@ /** BFF client: method→URL mapping, JSON wire shape, events URL, frame parsing. */ import { describe, expect, it } from 'vitest' -import { API_PREFIX } from '../src/shared/contract.js' +import { API_RELATIVE_PREFIX } from '../src/shared/contract.js' import { createApi, eventsUrl } from '../src/client/api.js' import type { EventSourceLike } from '../src/client/api.js' import type { PanelEvent } from '../src/shared/contract.js' +import { attachmentRefs } from '../src/bff.js' interface RecordedRequest { url: string @@ -42,7 +43,7 @@ describe('api.call', () => { expect(result).toEqual({ connected: true }) expect(requests).toHaveLength(1) const request = requests[0]! - expect(request.url).toBe(`${API_PREFIX}/status`) + expect(request.url).toBe(`${API_RELATIVE_PREFIX}/status`) expect(request.init?.method).toBe('POST') expect(request.init?.headers).toEqual({ 'content-type': 'application/json' }) expect(JSON.parse(String(request.init?.body))).toEqual({}) @@ -56,10 +57,10 @@ describe('api.call', () => { await api.call('session.send', { sid: 's7', text: 'hi' }) await api.call('session.spawn', { vendor: 'claude' }) expect(requests.map(r => r.url)).toEqual([ - `${API_PREFIX}/team.graph`, - `${API_PREFIX}/session.history`, - `${API_PREFIX}/session.send`, - `${API_PREFIX}/session.spawn`, + `${API_RELATIVE_PREFIX}/team.graph`, + `${API_RELATIVE_PREFIX}/session.history`, + `${API_RELATIVE_PREFIX}/session.send`, + `${API_RELATIVE_PREFIX}/session.spawn`, ]) expect(JSON.parse(String(requests[1]!.init?.body))).toEqual({ sid: 's7' }) }) @@ -85,9 +86,9 @@ describe('api.events', () => { api.events({ onEvent: () => {} }, 's12') api.events({ onEvent: () => {} }, 's 9') expect(sources.map(s => s.url)).toEqual([ - `${API_PREFIX}/events`, - `${API_PREFIX}/events?sid=s12`, - `${API_PREFIX}/events?sid=s%209`, + `${API_RELATIVE_PREFIX}/events`, + `${API_RELATIVE_PREFIX}/events?sid=s12`, + `${API_RELATIVE_PREFIX}/events?sid=s%209`, ]) }) @@ -143,3 +144,26 @@ describe('eventsUrl', () => { expect(eventsUrl('/x', 's1')).toBe('/x/events?sid=s1') }) }) + +describe('DSH mount paths', () => { + it.each(['http://localhost:7332/', 'https://example.com/dsh/'])( + 'keeps RPC, events and attachments inside %s', async (base) => { + const { requests, fetchFn } = fakeFetch({ connected: true }) + const sources: FakeEventSource[] = [] + const api = createApi({ fetchFn, createEventSource: url => { + const source = new FakeEventSource(url) + sources.push(source) + return source + } }) + await api.call('status', {}) + await api.upload('p', { name: 'report.txt', body: new Uint8Array([1]) }) + api.events({ onEvent: () => {} }) + const history = attachmentRefs([{ kind: 'file', path: '/tmp/report.pdf' }], 's1')! + for (const path of [...requests.map(r => r.url), sources[0]!.url, api.attachmentUrl('p', 'report.pdf'), history[0]!.url!]) { + const url = new URL(path, base) + expect(url.origin).toBe(new URL(base).origin) + expect(url.pathname.startsWith(`${new URL(base).pathname}ccteam/api/`)).toBe(true) + } + }, + ) +}) From 2268d8e0814fc501f40bdacc2c1e714617e9c1c3 Mon Sep 17 00:00:00 2001 From: firstintent <239836187+firstintent@users.noreply.github.com> Date: Tue, 3 Nov 2026 00:01:16 +0800 Subject: [PATCH 9/9] release: v0.13.1 Ship the approved dev cycle: file workspaces and previews, session context and reply controls, touch navigation, minimal project creation, FIFO placement, and DSH native contracts and same-origin embedding. Keep workspace crates, the DSH plugin, engine pins and embedded plugin at 0.13.1 without resolving unrelated dependencies. Engine platform packages are stamped from the tag by the existing packaging workflow. Requirement: docs-local/versions/v0-13-1/prd.md; owner explicitly requested v0.13.1. --- Cargo.lock | 16 ++--- Cargo.toml | 2 +- .../execution/dsh_acp/assets/ccteam-ui.tgz | Bin 265908 -> 265910 bytes dsh-plugins/ccteam-ui/package-lock.json | 68 +++--------------- dsh-plugins/ccteam-ui/package.json | 12 ++-- dsh-plugins/ccteam-ui/src/index.ts | 4 +- 6 files changed, 27 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 21ab26fb..b9dca580 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -394,7 +394,7 @@ dependencies = [ [[package]] name = "ccteam-cli" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "async-trait", @@ -427,7 +427,7 @@ dependencies = [ [[package]] name = "ccteam-core" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "async-trait", @@ -455,7 +455,7 @@ dependencies = [ [[package]] name = "ccteam-cost" -version = "0.13.0" +version = "0.13.1" dependencies = [ "chrono", "serde", @@ -468,7 +468,7 @@ dependencies = [ [[package]] name = "ccteam-flow" -version = "0.13.0" +version = "0.13.1" dependencies = [ "async-trait", "ccteam-harness", @@ -485,7 +485,7 @@ dependencies = [ [[package]] name = "ccteam-harness" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "async-trait", @@ -523,7 +523,7 @@ dependencies = [ [[package]] name = "ccteam-hooks" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "ccteam-core", @@ -538,7 +538,7 @@ dependencies = [ [[package]] name = "ccteam-im" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "async-trait", @@ -569,7 +569,7 @@ dependencies = [ [[package]] name = "ccteam-web" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "askama", diff --git a/Cargo.toml b/Cargo.toml index 51bfb1b9..5208e715 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ members = [ ] [workspace.package] -version = "0.13.0" +version = "0.13.1" edition = "2021" rust-version = "1.85" license = "MIT" diff --git a/crates/ccteam-harness/src/execution/dsh_acp/assets/ccteam-ui.tgz b/crates/ccteam-harness/src/execution/dsh_acp/assets/ccteam-ui.tgz index 899e1c59adc2e5526bdb88b38339247cc588a8a4..6ee171f163d138addae486946dd15feba69cd950 100644 GIT binary patch delta 139954 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 U{P+3qH~aVh0oZ8EkN|uU0MHJS2LJ#7 delta 139952 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

AegH-Kt9f=3;R#j$yn zlEZ^Qama;R2DEADp+BOnJB^4m^o$T1U!0@H&<<0hv9e=WsXdmTF~YC!G(;4a$g)e8 zr(g@T%o$&G>ODycu#_HCNQ1E?ZMZ*X1hi(jbo~KN+B#dt2S}X54fLN|r|wWuwHhxV zwJaFZth!z9GQL8dCQduB2T{W-{DNBKr z{kXL^%yP0DCo*k`ng*c6OQRw{dj^~!`egv#>SKB4}?Wgz=2)&TDrc+xTjnN*b623SO~VOQ&N5-3;VRf=Z&y0WEJQ`jr8A;RF2n}l@bTXhrPXjK8Dpu(8G(?gNSXKjEbnZYFLnnTp7)J(1CO@ ztS?S9PA1%fP?o$=oIdP2;HewusgK@7HK6wM{0oWVCypB}?_S7NKQ0^Y7OkuUr2|D? zH2yg(Y`aI-qBb`jfz~7LIgyV|(S?^2G*E6zC@<3b9(tH%9C!l;bMA%Ws z+Tst;;uKC}^{|9`BA5e8Z)SyWqTdFhyUE!#uI94hh>qv<`2ybAuak4xv z12ckgo@vjYsZ7D#4%ho4Dj34{gSH-Zo4()>>CZ4x=D zPJ!j?{kd`#YxGLzV?>o`rS-R~Qofx`ls#Y0C-K<*_8RxDjpgS7rx<)ZFFRVWnlV4z z36=SCM6)*?Rd3@2oN^y{G+(-SjQH5Tw-_BLIAH*0*SA}=z%7${nLQ`TI>iKPzXDe{ z(x|^rvhugyi+o!rk%9IJS`LXsd{3<$Y;B9=@#Bu};qeaJMc~Nxrctq%$Fhx$J|w5^ zvt(4}QJb1|Jltx;q0I>WS=}fNn7upd9Mspb7zl$rcd!;eR5>d1k?uYaZC1{QW1jG! zY(MFAYCFcv%l`0p%u9Ls_t-8|dFj0vD?+*Y<_H8XDb5=Hu&_42?S%6vM%&2tRv=nW zTAhv)tkPTOmnhr9f2%88#l)9eUYx8GyLgI&U@E}3*MB3nOu$|vm*Of!T%H7#CS4Y@ z@!6s=a_rQ`gEWQ2m*hQA$SK8*r^c+2WDhpomfIqAsv+g!xG;<+Nr!;GgQRU>T$wqt{5cY+1>Pd zcyityr)Y1N&%k%+pQDTDcw8j&)f!X7EngIzmL{Dk!=NGCE+~n%06UMKg71oMWcD{vO7vK{#5FZ!$BRNG z7wClq{*UN*393LNk9LJdihcbHc@`CMDiw+WjYJPP0~C%yABjRmrUHly@JUrT*Pgk^ zxkFWvhoK-cz6yfn;7FZ*kbdSFgoP*+j|s*}vNTl| zi*bpr?28QN=e+wP(PizTm0MEDNOZM-YPCoa9=cYtnd|6#x(sg<>?|p-AjC4ptY|>` zdP%9$=n;D0p2kzo58!h<3dAVju78O*jypqmmRloRr%_}6Oh-x=@zdFS7+I?8S3`dz zra{H1rgD7V zE-{N11ZwDb5;^z|v)HA-M)((`VInlM6^H0M#rlhN7QLy70Ha3n9}UI3Qv$&~Y5Gso z)BG-AWyC+~b97l=R$&9%i+_GEBFp%~7kEG7LYj@lmrNi={8y)`i^^(#b%XA!G!?^= zbliDFmj9sL>F^_d+xJJWt4)Eda4Yz;(tvrGN*n!v!&dy`H@^`PF)sX_m>3sag^yXa z6qcvp<#3pc27Iwsc_NpC`m;akR4YBNR~mJyi)-IA2-hyGUR3=2Az||}01I+}JFjNj z9Pgih79Ri$r`jCI$`scM#&?>e=~igCx)Dm#U1>e0b-C8Lg(8z>Xhg%+<3dINo!0ek z2B|pgWs;8HNjx6aMdKcsy^{=>-aJ|e{C+-{1%_g$0B3N0fxsdfqm}8z1Y@l{C!%>$ z;?3G%%)y)^fI*o@SmxNxUIg9_mir}+dDBQIU+2ru8OtKO?`W{2+eWj8LQuGV)f7~5 z7{O4D^Fm^rvl%MTN)9nGj%G3ih*dQ4=hfpf@fkjR>Yjdxx_>?GoduYqi0lu_!i>zv zV>QV2xy&pA0y9PkOk)0aE_4cxu3rLhY$^B}c>^|`WlyxhhuJd89HH64Hp{#cb0=e! zA9lpI-@y67U*GSD-?5Dnr)I)2ke=Y$p*en7Oo9}P5^Cy};m96~r%4B zRN)dx4Q;Ce&F%zi=ZCFoc)xv0?jF&7G>zt_5>D2a{DvXtGpHRleV*XZb?q@jUReSa z7}w4imaRBrwNvro**Ags-8ZL!c=pZ8&h1HehM+QtP*v|9zu&+6-`Vbuw3kMjL>yAn z(2b!ZKf;e-fwyDn%JwP<1}iRv>D7EHGg?7Yfk3=~mr_ZAiO57$3e1jEHq7rSB@QWSB>#|4lo0h^%~f~#3-mPM3cEJ>9DrDp?mv|?zwZNMw;7;4^u zq<`$0h&wkdCIs(t3m$W6QE-zUg)Zc{nEs$DJ1)wSvU1lsvbvDK{*;u{cB|Lwbc9hD zw0bRb-#I$g>WuEDN(Pf9tx1N>hg&QHI~)w(3zBNG3yFDCpuC`}PlTqfHW7Z~jNp%O zmVm7(y_|_m;%ECsKHWA|vjuK!x5gv!?Gs&LnlB1n%$42ZIJ(lMSo4wCdZx>kQl9HV zsP{;G$9E=R;jek71$#T9-Sjv{S!bsMY~_j9z<)BUT5*p5a30KRS5!#EmM2|lPf>*Y zZ*GST<8cF-m(_;4qqByN&Ti=la6rNB+c8m~)tCx|J8_40#F{(MA@e)@$u@@HhU3V2 zbdD2?{#2ixp7tTwLQT>w>?b9{G?1{~1&z^LA6xkUQdhGA2UdzD^OZ43N z>-bmxJV{dc$ZX1AHfIC&G4}IVH+kev*qxt0Y*rb0Gi1IE988iiEceIwaeKG_G5i=m z?(FtLLxwmeKr)l`T;^G_h=2H}hu0q-eDzgp+1~9-dEVabtIlp`7rn(>aeKEPUHRXp z?cIL9DEyDJ_HIAP+Pi(2$F5(d0P+}GWwBHC;Hy)zcU@!&WlSEnA71l>ZXRC4=bO&% z&}uSo9uB<&joLaum#4MVxA`0diM%K@*%17;tGe8;xu&@%pE&DA3c(j?9+hpb_hIw2 zqt^`y*UvvwuAZj4TedC`wslpX+Nww(*VTPy>+)GySNj`Vo9Q;zc6OUVBrz`ZcMa3_ z{5yDN<143~Pa>$?&=DKQL_FrUUQ)^4pFYOdo59viyU%}g@c$2c#El?q18w;5dhLY( zPtkFd;>Zot(|vdi%^^ZXQ^(!Pzh7h^XR>^;NYj6jQBfU%^;?x$ z(V|>+2Ei^&1l095@U38>4Z@wShHEYkceCFLnW-puddo@<#2pQYh;hDUE*U0q$Z2#kLUoMCs|>bF&9am|+7>hKU+X{_nyhj~^`k&t(lkqOdvFfm~w&ju#$Bg6#%Aft%@cXZHX`VrJjErKSilfXWs1M|2J9MNVVSnZ4_e!hLt8i+CZ zoUxle8xStaBu&ahDr&@*{m@`D{B8JMH%jNzDBPq{jtWl!wpx%*9D=X6Na71^u)?_Y zKtQ%_0aq2I6URacvA?fbvZKaDywn-J@u;eP7qQy=yG=I7P z!rn>{G)0DW!oho==3<@AZBaG<-HLT5AxYK>~sQ1Vn zYEuzNLUgezaQ#oQCkplmV>zBCXR}Crukhc^C%@hL_V;JAC`n<7e;`Z(Yn&-uox@ir ztp_*%^pF2OhyD`_0C54YKJyB=h5mp0?XxQV-+c1)n}5*%zc2lF*1hoxfG7c!wKA)P zuBeg!r{U&r!*Bni(|;Ew_q+ne`VQb~Ug7N5zaWwsfT`XOvp+jk*fz9UXZ)*PA~XLM z@sauO==zrsGZRYPtpO^LDF}*u^DkF-OB|KyUuWvt&=>UY;hI zI2`Xog61@(Vn~rQkIt}-rto^?H1IH%7p>2@GaBxT8cO`%mV}+lt7Trq4i!V9JnaCR4zeG`5gZdqVd;s8mL3@gsF`Am!w$bko+1TLh8NkZaEHP+5_yA*!L zYk&shmHPP2uQpmFX$;kHDqsE<`^SI3^#1?s%l(($|C?Kz-+WWK|2H?k`DW`M_y4bd z|5ILop3Qh(y|_6cY!ges$wm@%XhXAla4# zC?ys6(19}|W`FIT6;TY-C4w-=nS@jh5Ds}BEwc_~u~5mS&Upd}nJFVZFecCq#T{{S;29-?|Fh_5uBhF7yx ze?K}H>>nP4v)EpFghV@CPSj-gjlJvC)K(iUvN&}w^A>hS!>x7iO|Xs{oj4j=FXhPL zOfWHnnPUCjWz&OnF{`U|xrS9W7fCmbuJT2B$I5UxMp1Fs+MJH+j@1ib9twF^=x`D- zPqXHGPOE%Rm5G=a(p=^6Via8|K5A~Py#b&46SdI^i`ns2Hg0dE$!H_EHvYVQ3=56n zzwytT&c{{*j}Yg}%w=;7mr<&*=*~r{IGqS4Jnwe1{9tBzd9X>s0nTR-@K6{C=%v9Q zf%oYvNNVeR#35kRrv!k&Hw_d{P2Y?I8o(FP?Z(Ab*QsaVLbVZCc{37wS>6S6H;+bsVP6Y1Ca?l=RuF7Vwpgif!VjuD%5>t<;y!%O_OYKc}K8R z*N19mLzE$|Oy`27WZop*^`&iJv;q#KKkqq!CIq~UHjI#Z_|4=;>-H8 z$E)e=X9Fl@F#~_f&jw&<@fU!g@AA7gE+ORY>|UFiFOe~bWyYmp4)4(v2H9QA(>#jr z-IlNC`!<^wdAt~x-6)IFt1=m@dqYsuyeP+u@-tdOPStz2S|nW#kQaRxk}Y@g87(OQ zWtS3w7M}&70FSohLaNVcZMd1wXv+lQ^O`cx^$XfE?miC&bBLeQG|kJ;>a(26*=Oy} zvWWg{)nxZ=Z5hzJH_m6XD2uxjDPxEZdheF^!4EP9T}WjNEM9h>t%&5!#7nt*yR$q> z?_L{+#^*H2E@XDUmB8jpIfCF`_n90gq5O@BFQukQJ z&n07~U2!h&K|g^J)f(PAwzw~?(%jBxY_IzhH?iVGQyNqE2M zN%r01Zk*2=s*F>0Nsz-$`&3DjvuO#zqsPQ`|7kOP`ouO`)!({~_%RLzPr|J&JH?v% z;k)puQEVmp4gRO6;a2#JCH@coA#VSVp8wO$$fXS`eyRP}v#px_*VeOVPyQkQ|5fDw zR=WQ*Kq+vm-?Ho53R>h@b(H62tKTxeRjdD@6^6Z#6v5P@RISqhwFyvs8nkB7d`{O* zYcMz%1nOWgPzT$C!CrX~ET0bsXU~JTgTdQiZ!p*k4hMt7;9xK~2#yDXXJPlJO3U>@uTkM{_rItoJ13{7^B04``3vYNeW82$<6!W|FE^)@ds-X}1`C|ig_+Y&gTYVLp0M{7 zu>QPHu>Nu|82klc6$TcLp#tmGVDO6mstmYN@YCSGeY!`Wzug}UzJ+e~zT4NJ?Le9k zg0K*|7R^}C{-wwNyZzS9{~zhUr$o9FRsSOT-_38HJjF6!|GV|<=|B8`{(kh|Y7;Fr zZ$UozGMTr67I2qA>(w~Vo)=Lzp1xg_X_7%;fkg_ct=2-xBRQczj!O*8%#99Zw&1p} z^9Zu})EYzCy9h$XrOCXpbPsabzev*5|9o8L^MuB=A-5&C(|T5Z!8(ilg97I^QbsaosT$={k;4|SUrr2bKvt&sDO0x?|=yCdTFo>Yjg=)su8f-e7;UG zqp%K9^^@dG$lsQXh1YUYt~kA!Ojnk!LCMOq`6>fz&SrQJZ$OO;DYJVlKKZP_%Zm~Z zQsdekfsEq)d^M)_6E#kA2wrxSFU`3ovDMuP^2)=!Q1VrLhmFVMIjuf;;I%`U|9YsY zi^e6rlemoT&R#T6nm(f%sIdS<_e}+)>#{}OLmk9GWWx%7k+VdlJ@~j^(PY9>UDnDW z^m?vj(O5{PpH0Kso8tF+lM@-u_VRQwYwm7emQj+b#xk-9XzFcVgn!qd?R z^<6SPhcIwWWiMrsHx~S)jno=TwG@^6J|-3D`l@;h??pwtz9t~OX`wo#5MN%R>HJ8!3qTcjD6qMN#XKM}p zaPC~4As-zapY)E84-nE~t{_(bEQDY9ObG~ zu4l5G=JAbATLH=2oCqJ5#L^GDDv5W#S4sTC zDa6Ep=%7^8b%rKhfL@;AQSXcD`5X;_Qdt0Q5cdw>ACdAKT1A^Bs)Q0Hwgtn2mfRqZ41-TN6=pste zXp~^0g*LiTD#~iwlaP9uLL}ot0X!y+E?C;hR3ILUIFjIjPf>H*n6NNSMNiPMMNiBU zH3K8cI>@3#i1-(t7>1>xVDgQr)O}I3>|`P`DPtMe;N^1$m(N{jaCYS-gs@3U$a!7} z*2o5Y_@hOc&!RFJ`v42+4v}DHG+4hPMR}om%ZU2sEJo7RBAhBov@fTfC|J}kuT#g=@&EkS|MTDe$N%-;{_FqtfB#?q%fJ0k|3{}X(petMl*cKHF7I*t zDv}r?e#yxMj!PQFnC+w;#TSXni>oT60urUrh%sdfXG;NFafqPnBZ?KF;WPoh>WUT% zOu8wAF!+d}`8TvwNemIYmr|A8G=lp9Y*O=rD!`+mQ-SInwlukrf_?*+*ypMB^tAAl zV@&5|lEwM53Q1-$?aRdobI8*E=fKT+c-2O*taQ|Ma&m|?rcLA9+R`(<(iah}R~f1E z>QvB=tXRzH6q#SRm%y?CPxzw9AZ?GNlfzAGIH{g)GoHq?T^&dvRi0kZmW(pBgbgX? zoSAyMm_=a60Oly&G|%T^Jk67_tigb5hejbwZxCft!fE`N^?IWF%l~7F#}}62u6)uP z(UD|+3OSgh48@QLuZ$_!@{rLy#OrL7ms12cl~GzwuaG#FQ+dVVyC`>il0j;BB6Tu$ z$WH)y*}#EzIyu-!gr#y)iU@+Dh0I{MH!d^Y6e6DY$0AdUIaHBwpW`Pq8p+P|PkWzj zn0q>(&ux7~wNuQCrhn=sb-*K1Y77Al?~sdueSrCIKpUR0;euY~OI!(f=fNuTjkUz+ z>WeH6SInJ4)0rHw8)Ol`C}fP?0Asa5gf+{vWE`a%?l%5udL^9wAeKp*B9o;V2jV~q z$i{S4PAQyrA^X_4D~4oE6A%0PFxX9+kpE0Uf#SDa79fG6f$_RQysTl(lPp6}c#MjC zf~ltRr9jcMx9wFfR6diyY;!_@WroL1!y@ZphGlz&nL$YLJfDNT5)P`6T!OR1XEqRH zoQQ$v?5SZNqNVep2h5Rwr^J}!8kyvKvUNbjHWnIaCWJu3?WOH`#Yj8+_H< zez#xQ=uikF8)(!MiI=e$_K4CAMH~D+U~Cz){g$+JXk0>oLCO?-$opcH=c$Y`4fzFT zm|9NxSv!H?sS&=u6%y7$P8JYHmsifi^iZhi3bK`5>3(btucLZXGt>I|K?9oY`y%ag z9Dg1z{3Gay4^5pRp6#drmOmCz3G@lIU8{j14(9ZxRcDyGn*%= zj0HQSiT05H8sfzv7|~|(M6Y)HHF~AH#vcr0L$5mFUf&fS;qne*bQS^qf=J8O$4xW+ zAst=2%jl&2NI)wq=Ob-cx#XFP0m=hOGMT^{z(DJ7f#;AXzMr?@+BC5{VP587^!fT2 zh8{X!<}<*g?T4<8hEE3T^{c~HVnle&d4Dw(XT0~rq-J82%#d^H zizNsfU}J-i8uB3c1(phP`>0aRMWW0ipd`~mzHyjY;n&@}b^SU&JCbN6Ngc!c#YOS0ZRyHr9QC|{T7<1Xd^o*rs3belqLCf3 z0U}0Vw~$whQ@Z+qAJKm;#^)6_hB8kw6Ea>Dz*(f2Z!?A`t#&A$7df~h^{m4R-`d16 z>-PiPqj^zI^D}r^0Xs0%;~R#+U8FKnz|!vs7@wF&iZ%%Mv!M{&yvS$svWxk0#mUKQ z(asAYFOqS|+`>4TN8_Zt>TClEfo!P2>5Q)Mm6~T}&mlCnwhqORxmD;MYT!eQztNim z_9VSIc8JrWX+z#5c*4fSdRxk)S-e=F%r;9D5`18qN)&N4aWY2|B){1hm#m;4B{M99 zpADC_CW3Al=Z4J&DuXxRO-ejR5_=?tUi|JS5-+%4B3`7v*-pep@IZI_cF<6O&qSZl z<&_Wk!1oUwKJ~p%AX)b5A9A+GiGN(jxhmf)pE6>;CUugRQR;mM(FD%H9}Yau_rM3x zt2~}2X&0Ds#EdWx zRRj$(uoa9lPk0aIG9GnB?suf}6k_k2{=7$!8b^}}lBZ$FQt=_Ylrh#ho<$OelGKOa zKN^zZT^cSm9u;C=w1<$w>Ph!^-P2)b+tuyFl7!75bz+5$(*bgwmcd36lgfyholzQP z=Z1UsR(b8#(3o0xmr%{!zPFuzBd)!2ZJqULFI^(LyYR>+0A zB1~dJNeoy<=TeC_O7EF86N&1k@&7TVPL4wHpu8KF)gB3T-Lb2_H?7r^KLYWuceZLb!PP4)NM_L)aW(MX zqYLvqNmKLY*{7XI=drDoZ77$4dLoID<5JGyOafN`EIr^l~jElrqBuD-P>54YoB{KQZV{`ixhmOfxQD9GLi=cM_V+pLn>0kfL|K3@# zWH1e;45ggC@~8u?otfy*PEmCY)M7S^iYxCE^Y|MqE7S9vL&9DB<=pq`)+4ruvhla5 z1!y8=c-P(r2p~fa$Wjf`&>Q|2Qh(?u0wFZDIjvmo|9frwL@fz!Zzx z6IB#)EFm-qq`oMVu~Z$9aFVq|$y`7z$7p7;7@sSwHBS^^;Wh1T*hS@XnmRuWDQXDuB`)6He-_9O&I!pfF!=-I%gS zyW7_APKf>8zOxkgjxqNIlzF!YUBL@DtK1CF?J5+#B$cRlfmU8tNJ;0>Ul!7+LOCI6 zAuo~~6KkHy4JC%~6n!oyc>yYO)Rn?a?aeU4vRz*kFiXl?7t)NHuOjBYHik(!6i!b zlwCE>=Zs6jSCUPDCyaCr)LI!kv`GXk7AT53rbZIrQ^10(B_ zg%Cc{*u+jGih(Ivx{`PMtXd~Oxs$X5D%Hp#aNB4DLyRh^bey;R20nAsXc5aEMd0fV zw}pOv0F6!|@VZv~RK+lLNe!4c?0()+ShZu;yh>H_Sv!$-jp6yd!@RbMr+o8Cz@66U zbMNi>*b-~Fv{yW>Nbj+hPyu9*>y?})=GJ!`K5*8;hRtv*A`@V!*Ab*&LSx<|iC?>A z9J|TN6~0cIacj@?Y96>|gDXS=titz{nk#UHyUm{sOUNrKQMA{TCDWX|bgPk;Bp0Pj zQzJBTRJo)--B@H5mER&Wdfp93K(O0yn5%o8A%hH0KzLbb0zE0B8D@fuGL<4ZM`p&* zb6t<#491ROUgT$mREjMITwACOB{Fbp#wUWx#Uv_3J92nFKtlvper2@H_O!z|&*V_d zWR$UKGCz9I5{G2$Y{sl)1Q+itiMu3SU>PU~fEgORCQ!4F_e!aiQT724IM)sqgVY`# z!CIIv<37W3zcRO)6llaa)X(Rk;KwLv(>vQ5MW(n3jw!fAD(kK4l`<4H+`m; zU44OV3phK5=xn>sF`|YW*&%|Y$wNn|g_`@M1qIefE>O7)f*^zj-N}p; z#pu5?jnIY#U3{LucmbR`0Qf|A7{vB6E;L5u%?fT-)H9g?>+*4)jgwS%M5NBqRIoxC zOkQQ5PPNfXqwf)ojv)ecdO4pm)(p>4!o0InIm^HK4VUxUi?4TfoMZHx-w5g{WXvH5 zc&w0h`OiNKuQ=3MrgwJ4lTHKcaeREh8`-GP;CUB{A=>{BsZfa|<0Kyx5gj)<1iHX@sKo3@ z)?xQhw=76`kY{RJ4EZpcxsl8>&*+loYsg*58>83-vj#^6sTL!U<&0pGc_`kqx&hXf z_SbBoN->fmIm`0G3Rt*#dy*GR$VmdYips`Y2>k(@?;!TjsFFLg7C`QtXJ4(N#oxxZ zL69YdbsK{Aci3WAM0l&Rv8cqcfXeR&m1QQilLXHZ!ImCwHnB<*q*i5*4FWG&A2^@ZFSP_X}(ue?P};Oy?c$^ z2?9DAIslxTX;u3hc0b%B*N84ywZra5ADpOk2=O?_r>=D#mzUAFOs~R^8Q%Q#Rqa7F z31&4POx05%FH3y(eK?m_`NTrS*Zr<&*S^~p4wPMdBZ)qp19aBpzdvT=34eHS^78He z@u$7FKOP(%?Dy-VqF2^M4iY-Qa@7(4!U{mwJ0B@)4@_Aa)h7rr?jEiy-w3JZYzi8e)*)SWF{GCxTu!5OX-;m$42o zphW=aQ%hq({xD(XzQj;UY%7`M*|u0pVxciJUT3Afg)`sR$+=b=WGv(Ci?)6SUyC>@ zqusu-z`E&(ogV}swq^JUlOqEbwk+8Gq8m(&|nL+q{=vOQ$ODLZtru?fVp;k zKju*Z<{9P{Z{MIpcy0~V$`>e)PfP9i$)(rNa>Hh7Y&BpKjkOEeG0GDQ1|nANwpX?y zjc?mMIE5@xZe)%1JI<(3r__MpSN7TCJc!!({-H21^FmINO9AJ*Na9t#f`fUo4}y0@ zE54Inz~i-z)?)g38i*uAD-focud<}X9r>=vXNi*E>s#Xo+!J_@J5vOB3+q&eEh|Tf zRNOG&CM)n0_qmIS6`a@b>WR_DwmSx&rmzJotTtQ$6q5l%Jm|GT(O%Zwy1ZoZtzH(` z)88K<u>p4{d_i7l#1`lIdHz{o(NR!$u+hvT@q!8?;qR)yC-$MoXtv-2%XQa^4INaEofF8R2^1evxGjK=VsqbGB-(XHMvycjV1)2yBqZ|SPmvEA# zr7XyE`S59Ba&QP&z3~?Hez6Q@Uz$QH3ZOeLychTnvy>3htsYVoXVdsXTOEuPkl681? z2*}?K*L>EsLH_*^U8M(K6xkK|eqngRU!LwYeyGTegXYe2cx{mDAtSxOXodk)=`GE;+XCU8B4-Q0PnRw1EYN= zOIUw$+aUE)XhH3YYxlJT&zQixf%Gqa^3YFwUi1Y$f38`^ME~_Mijsp6z$K_H&6_Jy zRfKjvX3m*olY&THWnPcpe`fLv4MOK6JJ7)~@m&1i*}(T83t8iXGN6)3&py z0zC4FNzDwed{j|y&?0Pfc=onUDocK*8fk!od+oib|KkVk4y`QyYTK?lw(5--V@M*e zb+0E5qZFb!pxqqZI_C+R`6!A{Hj20eLe7D(1f9^l6E8TznPKg=O#~5))dR8WXwxJd z!-M59p$nsmhZ`S_JW;?M9Cgs_GiEgk0IMVx+HgvB!$`48)f2KfW(8(JJPesV6zUhh zh37o_8-{&T+bux1V5?MjiQ5N?1HyJ^H58Hv+yaKg08MawT88aNB;(JUyW=uvdO-!E zJ#|DE{YM);*6vOks|;x%JU}5bCcl_eA}AEK)~rGNqKyr)>l4;|TuL3BbwjwI>ckey zFl1Gv#PdA90>0o&Qd`2-mnF6SE4a4CP48ObSDjIFFHKCZv!K|>b|6@Y?pQEjv=&JE zh-qrOB=n{`X2P7oNyk%1t_5Hy=QqmZ6)5lu?^ z;9K%&^Rlc|q0nKu9ubqB*kD-m1xCb*7h~YKm|bRruSJ%WT}*P${yrQe0C7t;UPUwq z{c;q?%D(e^XRlQ~}v}Yjxs$0_E!Q#MJxA?Yt;%=4- z6n`AzyWuXz=bwprn`An~g2;5+Jc7 zzR~UX^D&s2&ZA6$0+Sz{iSS}kRpE$U9@Wj6y6bOh|65o;;U@bX<#p2D&u9IO zM3h@T1emCkl`aX2>=H1y$t#Z8T0D8|#Qq;0JoDp&{|f6vk7{@)EM>~WSCR>sYv!|X z0_9SQm~1Yotgf2Kn`|cfPI(|9p93)|RqaH~(H~BrTyQ|;vviTvv6iTL_8Fi=M?EsB zgd5*WX!4BrHt7$m*Y*-$fG2W=)IjTAiUN`-!uHX3N-Ik9l%Q)nj+KF1Qixt7eLX~H zbHE?^+du}%o;@SsE?w}@O@|{vCTb4I0iVY?TTejb=S@9Bf4wxFfhFaVY>l0N!p;Ys zL(dN-&IoNHQPR{iW7SSYOTu`F18-?4H%R+%^32ncFl;s;hYjgTH48oFl*xBp4xwA* z(*lBZ9HlmtqX><>=N=L!mz*)e$xL3@!j-7>0Ek__5xXAcK$_#w?k&?>cO0!dD5~ut z#y`8Ri0YpcrX_3+Phwya=EmbC=7>9KjB){b#PT5Upa2p?Vi96RVlk!wb2xzi3XS5Y zX~!f)_EruAGlvKTfOEqOHoOyC5~}HIPOy=Z0Ks3QQv4pohL6qJF~K6%1QB52erAX5 z?Z-e=?EGxh)0%gE4#HKtlX+}qLC47fc0tFp*n8+0AeCrypwAjF4vmdtEe-k|mPi`9 z6)+y0H$jYwkzUX|D_v4HquvIZc4~oMuZOA&F}~w*IW*XuM;3h_Q54NSRSdwRl<^G+` zKyKaO$!O_;lW&kfBA!kH0F$c&z^Z)SUG_T>oWBv7i{Vs(z6~%nbAr7M@LMY`+OpsD z`g}$I9!`xEw#?@%yj{3Jpl9ANDDj=`whvwklX;QzeCK^r7Gki^?{Z$tWY z28dgTINmHBku&Hn0LXCtl#?rkdkA@ZNl(k-2^sJSAI?03tdtQIb-P<-7g^*Rwckm6 zi9hD55U-r{n}Bx3bU`i)k(!A_)r&v*B2utcw44ef=_(`kQ6J-}`6u#6TomzhaKM5_Z2-Hw2~obTOm7d)ZdFvJJ~5 z$L6mr!J9)T?rFsU^U>NC>Rh{w&usJ03Ddd%~?p}n0B+$YkUN8_A106 z*8F(cOM~v5c>zWPfu3bd>vO2ySN=#M{6tgh_a>*bT zak>Ov??oWPtog;}v7}+^sQZb_8@54jwrM1IFoIDrN5(aS{>6wRJF$4)tzw*u$ zbvg$N_yQg)3|kEa%S;$}rwcA+o9cj}*20B(0j@tYe!vsi~Eoj?g{cis5yFH{_gXc6`sUc|{IHY05URV8SFdWuzu- zTzck<;f@h!mw)aYr$q{EJr3=q&-syNfT*XYSJk))b#?JIa zi?1!YVoJo^Csl99va6}|ZJYK=OFt5uHoDe!0V)POBQ(+u>OG+h>F2Z_bk5YsX{Snp z&T%NQ+)p-)#$EeqjwFP-d8CuSAl&42lWm&&Odkz@zi=rNx9#s2E{m0pRJ174Ad9Xk z`$e6=2Pt!#1D7Dt=};^C{V-@(%+G4G9z+KX#6GjP-E5QqQ@sZt>!k5NgX%a#pT}wV zW?ht+Mysox!c?N+Gh;M@`OLOXQT4(1;xlSXxLQij(9S5$WwuCRpIHYzXF1@`Q3b@p+37PQEIYt>9}}>skD5B$#RKOzn6u?XE&{5%3*t+!MB^z z9KGRaS7>ne=#gJFbL(bmK;`>fZs!+G0%p%wgc8XaxUcvv_OjA10Nmz_k?Y2Mt#~?| z;Y-lCWNb5cEV=V@V{<~8;T23TW#^zB*+h91>E;V@p_!6&KX3wBg zSBL)FRh&rGEbVmBI_J7Q&*kpU)3>cA%xZh$>=6?`gL;rDyk~&X+WMHSPqi@^H&dNk z2avBLY$@W%)L`nGCp=md)Jw{`+zLt8uQ{M^wt@$nWzwKzOG!_gPCoYr3NOaagOB^-Nh*nR`m^XL>A`F;hB-$$OTW+GUJ=MjB6#_OXxO&)}V{Fts0! zPtToQc_$C~LQ}Io&d>MT(i~qyGZ)?QrOq_Hu<4TWI2%=IY{>g*Ll#!M&Q%zp;{8rq z?Af8PVl`9ldZ(N}zGt7I+jHTue1E$3aA%X|WRPS#?gWwcQgJYk{Zb$bA_ z$l4n*L?1nNMe8yGFY4hS4?HKLfmL5x2$0cY1f_j?t*|VSL@SPZ@^OOk-KGK2zykM> z$~@%QBG?pla!#y|*X_wl3n4#{>42QTvL(S+^AdbT zo#*r%2!^&t@k1?0o&-RSPjytJ9lpcPN+Wi<9w3L*=xpQRd9mm5-Md9y9P!e2t?QjD z+g4pwb6U(6o|0Il*62xk~>I#yG*npMXYIR~WdsKn7PBXwgpGpH-CxU&t~Nx7qHKnpNHPOU)v z*s3x}$ZPhr!BSN#^+4F-LVR69n33^CDeue%Ozj;8l{7vdG~i0y9j&)BZbgJ=lD8fD zi*GG}YvQtoD3djP;v7=9P%5d>EA88+%%pT}dhVrR98BJ+)0G<4Q$}>{J_)XnSX%|2 zs38@VcUMgtN{KLH<(+C(E9!Ks@*6a3OkGZWr%M>jS1&Yc^+;{Sbttu+G*hQLysoK> zmW(hQG++eNfBI2Z){V+~-_Y}Ac#_dG`3?G&=PPnr)LOERP&Pp-Ig_rG{@tJ+A@8RK zWA=po>_u=?F-r zO;zB{P0FO`e#)|XgsMf&uCDb#qy()IhXmsq6ENZoy#N#mUSD&bF zRe`;$(~JxhiK?FU`bnGY_RF~kq3ld3ZJyZ)sJ{xWO56+|WGXmlW1kKb3g|*WdY*Ql zW3Fi<1~bLP5dqi5v2Kv=)%GS;h>J5*3L z_7Q)o@fXNN{e{&rc_&UEn<@`Zi$TT7U-RX}qj~;{djXuF!Df?&r(}?dUSX7hFjxhf zy9)BmWX*;Pc9u+X?5j9he=?4`T4h;|LF;F!Fe}PFOgkMHn$~ zRkp|=&>lo?m!S*%9>*PlAb#L=68}KkVNV$;kv3ZfE6_ISVFU++3b}&T#*!R2d}@TE ztbldX@x%KU4pzx1h-L$;Ls&o96A==n&gQ2vEhO25GG!+it|VoBQ|O}x3psble(Z6& zbu1e=5kd;$z@Zsr=!^v$ZX5N}gj8Gs1uw+f%J2)#N_{Wx1b$qBLuvy}y5cBI*|v{Q z3VlRKGF38yVXs`(3u1h&7{A$l+$@?56CT&G-Y`!#F~$B2P&knxt^o&#;OgL7kCxl8 zBr>=Q8lv;)bjOt~I&n20MNkF3@A{ws^IO!v2HGhf@p{UdhK%9&5$Yf8v&vi&PU#gT zEUDv99*_6O9ApZvv<$njPwcK_dss_+Jfv$N$fyz(bt0+G!C2Ik*1BG=48=?@306;c zWqNx4d|`hm=t#7#&N09v@a$!KyQ+Fyv7`gepE*NdPFX4@Yy{?_?a#*3DN+FE-XYZ%RMi>_Zs5mfVtqiMi&Zu*1nVzA6Csr&ot7h0!-VUI5-lqL2fn z=*U(WyePx}Id~GDor&LBF(_NsL{qfrr+Z2FJ3S>+DoWe=^Ry!7^*Wf#Eb3Wbb3kWa ziWH_&DzbkyuhlAhX_kOt{>}!bK@b64R?8yub z2CmDU@=xzFQ%#C!Od%gM^f^y*=lzKZjSMGXk&rfKsiLQHm(j5bijhGm1H7mS2{5YU zdSXpRz>^W!lc6XEmYB<(3gl!^qjI&{UQ!NF0>a#ycc_7?By#}9fU;c{79|8~_K*T3 zw}TC>6oIktoy`j3v$NtEuX9#!kRT*vJ)A6E)CS=tN^~Qz38xU-%{G|ZMm8RhYeTdk z#8DIdP?m=s$Y#?bCg9jg%E)l8tqfM_8qdL%VFgt#lhdHd_;%Bq-vlIGuGE=fN5@GEB1miZdb0EG@i+wTvlyJRopInGn7s~=cxAq5!SQK=Ozxk>$FtyZIYEwZt^ugeP=2jgCkVvIKF!pPImj_yBkV*km5 z2hJQm^yI;Xe_c3y5NzVfYYGTHB+Bp8qEPu%iNiO7R}_xv2tV1B1H7ul9>fjB^m73x zgZ)aEeyWHLeyap??d&?S)%AAJY%3pdL88MV>LDCFdf*@3|I-yqTifp?ew>1oUbbMr zRU?#SMSe6Du*i*x9jydm3%PGO0lG#+8RwhBq=Y8b>9;r)by_eN;c2^x1p-H3nUn*HsHRpcskQA#n;9QiKHemt>GpH8Zgb4)qw@Z99(&xWj_+SYiV>yH=yF4Hl{y~C| zvz59TUk9TFvhEfRTO&HQ#^Pgb%l@htI*9%-_wzV(vuvYD3aFkk)q=3u>9_o(T%z8W zDpuqTP~0#|m2WpT4{5Va7HM?n#LONUZ$0!gdVa{j;$dQ`C3D?14c{K>Khl zHv>M#qOR{aD*2RDhhmU@Uz*vIp{d2fP~s{cb4?sdrFtkueNvS|m1?(EbVPlRsN%^( zM-MGNb?|`UtfY);DjitG2#n7D6iD%|!o^2Xhu#oUboU18>vpt`l!x9tf>fm5S@bO_ z-Du^5m+SDH5^GJODS)zrF1vkP1Ozauulqf^D3fO8`zurD*P)rqfp_A z$#G1C(P;g1`2&e6J4B8$${7=cs>t*4yj=uQGuW#+*|HSa@I@SV2$F6Lq#M`R%q=iT z7BcF3!Lpg(=xay?@@6F9S|I8=r6vVQGN+p;Tba8sb8=O&StV<_PVJ)pQXd`tmExTK zZCRE{n*k_e*m|kctYmuN<)d_}q3_BJ-K>Tvi7Xb%Mr}-C#-$wQLyMh~=CGRh+4+Ve?eteOjuT)=l{{&>8U^eA^*&$Oep8+IevCL7NiFi0)?pmlP1$lMYM!;U`lvnso^(?awxnoH zuK=-642)jV;XRiKdb30XY9>$sg!ai+SL%6OcNqv7ca=QOPXv?Qn^r)T4WzfStS$r-9v< z_#V)t6v4oAh{r+;%2+Ew>?cNj>jnd4)+ZfM$tQmFNCM5FJhu{rLDKdUd2Oy5mEne$ zR|Ax1kSy?fR zq8K=|+OxAcH(+wj*69wEq!95;JN058byZeBNUk|E_Ze$v?sLN zrCpDCBkHm{JE|=9(WVQpJS4>|_fxGILz)ay0TC)>kCR>ihU%~$J&0%-q(*(1M~MsA zb?7j;l}j>y6hk~B`SxZrPh*nZLOpBh=AHI8 z1)S2h?$JVnR*$=%1GP0x-BkQ5%|z9piHaF(#(g=Mj^Sn$T`ZStH;JW$n6PBIpp`-! zng`*!@Y$`is{Bu4$oY6Pa$=2;NBZz1{+wSpy(cm&XH?_jwmQ`TPhtF02BcyJx3QQq zy(SneSyMf`GqxX2VTG(@<2i$RZ>^K`T zhS+@OvdR<>Rvvjpm`rpKtg`gYh!Mv?hPPtIV8{(WrpF_&Q5D{D)KBG29%cX{>PBZl zL8!c8Q`|3l_$|j66|+?(7$f}n+l3Ec4U@Ll^ZCWeC(~}In$?JrEpzV5zigugmfZ4y zI2yyP<=wF)&n%)4d zF6`2MxX#VJW=o&M_Sy4aP;U?pc~!gSG@ z+qRRv;xc#Ahw=m@^$1Sevq&L@bHIC)bk=Yb~r4u!? zwJhJV4mM+!otm{w(KXcI4P2s!vopK?vAvNZg;QPt&$&}BgeinrezNr;t1XZC8>=Y? zF7|J@-_30q?JcK~b*aNOV?lMmOK)117SyPuAw?hZ`=h<_Og+)s&$pUq`cySKJ17to z*i*2B1i3%T+YpZj{{AkyMqZ7KO0x@LdM2)an>O6T(aw`(M98}QmZb>G3v!Mi+%EU^ z<0ciau{STjWoqgn;-IOBw~H7TT{{LLl(aw8?Wl!g`D)IqnBhsx?tqNbguJ|nge+&z z^{HDngcTJ6SvfhgA~0r_!*(A%u0h-L8L@|~bF-qlCya&NtnqYl7-pBJHOtAG`DsEQ zrkKy-=D2RTxfnO^XocKhyDx&e<7hTd+M-AFGD9IUbP` zGBTuLJK_EoElPiO27Bt{TC<#Ye~ZSXyS#iFx^hXh5YOX2tvZJ31!ow#12oGR>-EP&i~cN#nv94iK0 zCjl$|O#SGiVvmz#rNYjjCmtv@m${!>KE)`9r8>(!Nvkk~C^gCVRrNNFFUY&HFV>db z3>!{aX_G*{Gy>(*EZ|2Hc}8WzkX<*0X-8}T-qGz&Lm&6-OC{$X zPC33svzUEim)pwTu_5hAb3Ex&a5@cf)sN!X6Zs}y$yw--ot5eAM)nbVNDj8)l`UI* ziWRpE3-a%8<_jElL)#%k!f7jOk!w%+pK{^J9pJyKnJ&l))lo%?o+xz=ZHuA{4b1ld z$HtqT6(SwIb&|^a@F<091Qsh`^U9e@DJ(=sA z^%qb<12S&RvHbV9_(e~z+Buf-0ISAh&Tz-&8N0}bF)cLNauhA|`SUa*4v?s3M@2OC z-4c??*+ll8cpL{SkbcH4id+jPYpZ7G*}3bAgr$moxiO8*za^7pFuU9MU6#wzCKX~k zYC|L%H$70M;?%%d0eim78J941OQ(~YOe5CMx17s~RxP%tQEAfxKAL78-qe0s+3U4s zccN^+gt8qS}$COTBCtFA{G}KgVN4 z2Bt_hv&$XjcE_F|U}^yqHuKblv*e^B{eJt;y(ep`48h9|VB(L*^jl@noz`Wn9_Okp zs#3+-v2#y4bM5`i}jVcE{@aj9n8*ko?qdDk)4t~HJIEu(z5|E^s|+x#%rAWTbZw^z=;_{CNpm0ICZj&Yh&n>>600!#r$5ApGm#zY*q$j{MHStsA9XT z1)Z1yFEH+2Oz|o=rW4MaQ!emLLDN&b9E@q&Xk+}7K_>L%12(5(^~l={N0S`amJC?w zpmbg#&S>bOr=;>}dOBw6GodmcbP1#%RclVh#WkAH9eH88FXLm?!OY#n>Z_S%M`1Ek zGUQCbJ|$IKRb(PNnQ69M!F5Du*$0crrjX>X&mr?O-Z19Th6R?&?6ypx(&8PE32pUVY=B&}ESD``L8R1iGgT13Y~nkqJJ{+2v~)iYrLIV=Hfro7 zc`s9@1K<}LUog-&i{ay$jV#c`1I08@&aaH>+I}1ff^wsuDexh0U|am2D1)mRav06Z zyb5`s06$e5J@8gh%PL9|kWtDRV~>pKtkj~*fi(6N+C7`!v&wl{X#@30&~!CZ>~t-O z;d@z;3P>0--Y%#Mc~;(K^XK)-Y^aiRcJJnSyJBWeC#|Ehm1w2DWh`iTZKV7v)ty zU6fwV9wkq2{bllDCOsgDrKh4KJ*LVo35|G!XuC-#O39lNv@Vtd@LEC+5U|3fe&X{b zXo-gpemvV!>x~rGoK@Y7z8*rO-Ye~)6}_Ls`_)+9MBo;-G9 z|Bnuy`SHPjU1aM!<`D%tSWrrC{t5en1fgtv}XWMgXPoJK$hqwKD{Nt3iZh*1*e zdxU6+|9A1&(Hed>DzJFT{y6qFYC(ekmZ^q{ITjgEy1~^;Ijo$(ejt~KF-PQ-@ultP z(zcGsf=f-92F_+ogK4%YZPv_hC2JjYGyKc!16#dL=mML+>K+)zva$olC%b*s1pP2u z2jJDDwjqzvG8KVFc3Z6|43`CtWBX=81x;#+vl)%4f_dsTLwDzioDe1Bn?ulyZYv8y zIe%X0PYg$?PW)FJ>0k%te6>P?gbB9t>D4mK>OTE<;E} zzvHiguWWK>kUQCY_L)Gx(})H6q9ZW%;#CyaXhrQ4t{*B9rRbC)!-V5nQYiB^!W0Xu z!gc&u;;@z+(dA)-%ePG=i|yp~ku7=af*ct3zAFPJP|XARrtFDiPY^Q_R=r#RxReLC&8uu~_3!;C^=2*RL?mx;E<-pE z61+akYMN2F=7)igPT$G%KSj~O*lE%MJlb(<_607BYXt$0X)o&QigoLd9(?I~RIqJ{ z@~pcQi*tlB_+vR{2`aowR=<{N8;EDqmFq(1FMtq88T<$lhmq4Xq6JI0q)(P+{6Qt zVx&{FKL~OgBf)45Y(T+u^~<}!$LbguJvL6>GQ*Z1rk<%Jp_3BYOZZ6Dy@;bIrKHS> znVlUpdnhlU}u_JbzkZ zmoe(sCJs?flYFr@lpZ*fpz(lwH94;pYPyVnSNVlC2+LFrSpSK~D>^=zQ6DZYSC`0Y zs1Lgz+z?<#s#(0V z!^6N#5GFo4qFMuu$9|B~Qa~<8D>BR^MmWX@kx3*SxYHIPJ!sO8*Mc=gHbi4+Co^O8 zTv3h8L7kmp&-OS{a(}-J@C)+k8gHP!!lk9au5nHx@)VLFuO|K` zgJ}3A*A)NYg~i{ny2@`Wd0$)!{0{C0`jIoE!O!-Pv=>_%RK*Zf@t&X+ogB)|6lDvx zsWn8oH9^N#3;&8P7(|!)MiXW9>8eBJ2c$H#k3bq>{Zlc|Ek;25<4oW=llUV=`U}4n$H!S&N$9 za=+un8##Y-SZ+qe(~+MX8!A(0S$bdg!k`O4<*EQg8)|XrS$<|U_Q?k*hR5mnV%>{F zlw14Y0-BxU;vFy^k(>LnwoQ}fXc=u@DGFC3G+8?jw|%hSIWJ1ks{F`q5_8V$ zpt6kTI%)oveRoxjWPCL^;Qp#+7kAAn3~6j1)z|h0yu94)5gj(AcqKTH41Jb$3Q|Jvd$HbsIIQZVlwKYg21T^|R?tKds~Pn+GTR01JXJW( zg{ZgjV}C<5fGEy`?I)sGIkm=%K~{tLWEo!5ohsvS7FA6FL*1!n3{jxdoB}^H0IBSd z?;+9$sd_yzw|{Q*9Dmu`?flSXZFM=`?7lMH#1LF}zIZA{ee68y?N76p+rwjKS^34_ zxt&zjTm!{TjG3QQ-d-j0o``C_Y(e>UHONV(7+efx+vN?AG~sQC0swLJNqoY$_7;AT z-cNn?p^R&|-VQpz0m=N(zOO*_`UneJE{CZoP)D(*mtv7HY=JORW=Aw2ocstoa-Pka z(EpW^3Z?L3(xQG$q9Nq0^;FIRnW*qqJihHD9S<9lZ6e2iXM%G97dBhO#0ZEHmk+8WL>kOvk)!F0k;dQq78wcJUD$;bLBx*x|=3~Jr4 zcDa8pNYVrX1Yo>RJokNITX?i1c&D87K_4S^e5O zD0PM;#W{_T(v549J>WNk7ST@Vtp%(GBGCeMdtfWabH5)sXxH0-S9vh217{ro0u~X) zOI?c2vS}Ghb}IZP;T15@i#FCXr&Ae8aS<8uIQBhYrF2~Z_^Rl5WEZ6uP|Xc3UBb#Y zSiy`?MkC=JXH!=GEQpw@dL11EHn)vBUTBhFS+;>r5znfNDpJLKhAa$vfZ*CDC98u$ z&3@tnuH;fdU$ALD;d45`HI+T6Nv?cMSryqVcw+vlMdU`BvOrd5#(DL*i)5=NjB#vT zIlDb}+|=<}a5*3{CKbmlxrOR^K}^q)rUfd#2X|&V{+dr=TDgMt0Pdka_{fCpto)`# zTegrj&9LV(UG+qcY&|+|hy_cDOz>q?+;GU`a-%HkYxD zR9d=BL~Lbw4c}1BR}14Ej+HP47Ch8~G#2ROZD3^Z0(e5DU?jBk)N&VE?n>k)rWoP| zmC6T!fzRxH%nSl!1UWP^WcLzuK_v~I4IipLr1u7RBkA;41B@-yiPD(__`cK)foChf z)A8A$%G=-7ZJ+FDzTcvw6W=>Ry&vHMQS&e{E_k$VG>IC6xGDFQJ_QzGQ zxAS2A;rO0Wu}gz)4{5Xq>yF&H6Q!WNnuP~!ROoj7c-2p|{}k*F1g*ocrM{PPT(Iwn z*k6U`zc}Hzbs$HOhU2K$^^>00^r333P_+DJ$BX^M2<6<{AmcLdfJqt+X;52AK$7Vt zsLNK@caU953FQKR$w?b4gd>ff7-N41hT9U$9I4d{TX3GLIpFcbiRZ^~O$4OyavvWF zl89oP(!dj623sMk;J6<`7)9ZO&o4Z5dA*kVAt+~h{TNg+s{pk?O2449z?QH>iSH+5 zz#(T|?SJkGN>`iWPzYk%lO8;m9*2?BJn|nWsPU>mKS&Vv?dYNy5PvQG?-m4!_WiRn zUNGBA+B4L#86byFlqRKYTXLbjL@Z!d`N3HuILi)ll}yn%y^8tqEPZ-_8eqMVigXq5 zw49z}i+wnFi2}te+Hu3=-d7`3k5zpsY5Sc{4c?+V-bP6YOh|z<>#&9uu+_-YE6} z48xps=vAFZhR)znZ-BtKrrK9D!8AeG;Tlx4#2_JC2}3JVrX`WNc}A;vv66F5=t#El zhf4l_;nMJ{S4Y3P^7jju6(^-bH<>*BSf^eB4vdLS(7eImJDtL%k*s6U_fTvR{<#$6 zKj(N#X5qZJRWD#jbN`rS6$?^eB$<*W+a>2=x;PBoj9xmRy_7xDmza)7xe&L;E{sWR1>Mg|44DyRiGAWQ4lF)Z zqFauVVG$NpW$tMm5v!eO+3S$-*7lgorjZkAm>=EKiT{jj14d@A)G6>qr_)QP&2x>n zepBBEjAM=NE8FO_%6WnaAH)q;gA6Sqb=R} z(Gwi()G$i@q*NEBou9oi`pXT1@KZ8KC<_?1LzIT^T^?TieCy8dx8He=^N>-Ol?&+fhZSG)R%S{^=k{oY&e3@?6yx{=ZA z&+UBurIj)Eli)va45OD{8@_a7=aZj~Uj1x%^X~BW2f4AFj81aLXhe?gVGKD@8ol<( z@Xqb6uin`C_$_PD7^wkAD!wjU%g-*Tn&d%MtG_>J+pYDA2zLgD>lA0)XzWMd&&+m?|zv!qC zb1p|M2!>YLx^rdg&YjWEu8Ou7qrf?O`Nf^TezED{fb-Wa}cd;7{K!|OM8zWL3)7cTw%!cWY`!srNj(Gex;&+yWh_nyDJ{l?Go z9g}aJ*-h}#wS3;tUq6Hyhu3e2O?VE2ydM=!BEOrFOp(wM<0iaxTbAB_<7cB^UEaET zT`snK;w&Z{&H;P^UH~HtZ-msPt_Zw%T8uOVZ*F{D*%KA!9%+{@stPErwB}&_WynXNWKU+y`jD>r8 zbmzC3v_9|m%kOU8y~=4ZsxZRlMvZ@^nB~^3dw;y+$ifyMv@h?y@Y3j&uXDMSod;%u zo_zGXTqfXc%{JxQ`Prx2H{X?6qIIhs8l`G&ZtK>|qqp82eSUHD+{ZgFd^mjR#^|}< z4d1(L6nAyNDmS|L+RoMM!^^M!{lXW)#=x-N3uye(J8Y4Tp z_rm3!k6+DH5%o6o-pZu~de$8oj0jAcJ1Uk92av_J9i=3v9A5i)_|gqFvlGK>SE#S` zY)Ku?D$9<6@!h>y(4bKa+_CI2A=j`>v&DSjb7(DH*ML!UHCxkeEln! zzgaPQ`~B_fFW}^^igrLu>>wINPs|q(dFOmynD$k z1rB3%|E!cW>M;e3Ui)Zx_gBLgFOxKA<|1e$=KJE#@TGU|{pM#|cRtVOsP%g~d_`&N z)=OJoy<=@dGq0XDs*bW3P9B$v{cf~IN5miQ-22UY`L3YcVaX;m%l0&)-}ao)^YNEE zAHQV@J(yiD8D<;3`Pu08Kf*zts~B_Ej7gvp`ANVCDH#c5^wInGK722ms}}deP;s_5 zi8tpmv1g}}CBf760v&|b*g+^R;?-+gx8Ezyqt3t!FOFXRV|^3v7XwFry@XU{;o>PH zM5GH8ZUlKScV`=SN>(SFk_Fb9G^DLtw|AcZdicWa;mt4ay>Rt`YBY{u8cJ3YD6rc! z^N*|FvgstAGj?}sKv+#WAcYnA42LO&TEVVA3koXo$>tZ?TVb}O!Ts`OnI6dE)~2AS z+l6OUR24T#FuU^d_E&!dHgN0Z(Q7Z1i3e`q`Hj3XR9qDpax+{8FN|*f)u`fEw??mh zg2s@}#vzb4mcI4;_8)KGZ_@y}A^GP8;JJVJ<<5(LuFoRSYA^i%K35^MEzqS#H{Koo z_T@U;yX?h(T;-5gI8Fudw`K?&`P&0#Nczhv&%FyT(v6F51;bxnl7p-cZ~b)p?oGau z-T8d$_RDjbix?ilA8dX72Yvs-1~Nz6=<3y-Z$8=i;JM**Z@?Yw_RDa_@u79`&EcKf z!!JL#P9v-(jE+l##QY7@y2NC&E8*$+i^JTkCHczgSm8!DNqwkjq278F?MS3WV{IksW4^2)77n=F@93z>h7 zUVo=3iyRuQn5Z>7UccqfqS_&u6VzCCy2|Ua)ERtatHtCU*rkPpVwwe+h3Cy2lIzIx4zm32KOy^-7w70Uv2_P8 z-sJ#8kr&`^HOt4~= zCkwb7>!3uoP0MXwN^SPzSSnO->N!=S|26+M=T)YnGA3X#{q}!u-MO2|kOYRjlu0Y% zuQJ`u4`pfrOOnY>Mk5p3QIgWl=FaH)?M!0Pp`eD8G6UIu>GP2~_hc%#GC=$zD-JH~ zeDjOZXLp7#-N%}Ho1qRi`Pci|CC)5xPs$?o`heyqWF*^Z*C|E zWh($9Rnp5F`%I=`o>s3~>`AR*At$nP zOu>yZ1rm?eXX~4{h94E=G48dpb=SQ}ZH1|LSuVGE_o6~$+8DzH%`7Ij*?#xt&dv9z zz`QH3A@^gZaqW-e=ekm#G!f<{*i6J=0NAxp@8q{N=8(%iymoo}51+VlB>isJBNgE2 z7r);5;5la|jxAQORWXm0CgfY&)em=WegYyBb{|ww*oUoKSE!vixJ14B8L4^T|6jNb z0;uH9aO?cyQ}tY7J#ff&rHn(@aysgnWKm~ipJ4JW8s4?Dk9dYo&&t;F2`$W981#Yn zUbqA*yzG-=dFKn=dAV0 zVEE$Y?XNCuzxmnd%KO`Y{`JmhpKX2l_VDV*TX)|7`-Pv7B)|2|TcbqiQkOmRx^f@Mt{v|7GY zX77CP^X)fZ%Vq<6KB@@CRr_8iGiBf5X&!QHg&zj7wpTvi`Rf<%e9nW_OqDuiOt)`W zG8a6UgP|QZ_4V+ppKg6~bM(rW*=+p~8k0}z?gjy-do1kGIdT0@_kMa~`|h9NdWfCh zx^)}){l|A)OXjWlPwJytmSsA>^8WDZ>pS24X6yEw!wX+kK_U6gTidVxX6x%Wx9+|} z{WUc!;54Bo1LcSk8S2$-%_&Dv(6<%LWGB)qsl;Nb_mrKF?+mZLMg{1o)6;5|v{ca7 zEETkskCgOUZ+Yn__uhKPl~H>C)(>6t z*5%PFACE3QH~Q$k;g^3g?P~1G(WA{%5sM->KPO$v)~(B1w=V3w@Y%Rh{{pV?=b!Xtn&0awM@4WCyIz?{PTSY@~@N;=N-YZJUg@+pSWb5{& zop0U*yQo{2hu1DS>Rm$*>u~#R^qA@5rd1#4n9rhx;NGFpuD^TUW%PBVzmRFNV+mWe%uZ z+9Cn5Tz!3b_tW98E*HM=Xl84+TcmZd^0>7&oQ3CE50$3cIaHZfj+U~HuD^Zn_0I~2 zy8ZS?qc?tnWBhpgl^fr|$YnQ-!Mg}asWIv5Ew6oy0nTiG6(ET;LD|!0d||JjMvIcB znTz4B8omBGjfDPm5~VDwc+T+ozubHMqv5qHT+`JLM^}C~`s>S8m@VWtcvrbhb7Js}6sDdGzAfB(m{oc^5>%ITCb+*RE{8^7iP}i>~Fzx8Em%kT1xj zhS>ST??=DAMq;>P#CFjj^y9SF^+LchkaY1LUe@4LlJ`2AR$l!#ezyI}+n^iy#f{PR zx3_Lx-hSm%T9@sc?`~iFd6kU(V3F{+B67*~nHuf|VW`?A!51zR*M716%BNd*Ufa5T zn<`c3$($wuqjnb|Ja@gIO)x`9jl&Z1U%xTB{-@FP+jG=;wnM!7F%#{@*NB&Z7>VXq z1yyIn4kc}<`nF%Wp@uTN^!(h`oeNuEUcC3yyPSi^kg2>At?KTMUVnf1&Fi@gwb);Y z{e(5jUyNS+B%j5wZJ-V9V)KyEVTV!Bs&8`$%I4B1p(Bd8AJ(!muOu=W99Ugl(n_q%|)RDaRGpJmk*XTemKVg@uy`_a8a) z)UhK6*~V;m?PJ4$du&~dSW|3ynlf2|v7ii@3Rto{4O&Wt)vdcfm)w}hiWXZFd_k3l z*smzkT)sJVxNLp(#?~D^C*YvD^#SZRT&Urt=d=5(pt;PNYdzuCt=pm#g#B}Ppm)9I zu|?3|h;xtsK+Fm+?mqqlFzg!M`l-ZaO=t;XgwgK#V*AGB;f3E+$zWr6?TXUZ@p<{l zr`vZvoLC{;em4we@zL*xw{G$DfQpYrQRX6WOyac|R8DXF%*2z8ZvNHLSVok#j&GF- z1ayg)(NemlJkS-&%eOk~>1d^1UB5BOuu)YcO{29v1)94lvw))fQgR!;^b)CMNgCrv z^uOE~{`?ZGy3}T(GK=2_ho5}9gJu@Z+zB&%a-k zzsHgX^{c#n=PfXJLjj~xR3>4AbNIJBy!!FI3onk%n|)Iuk!5s=Cj+$Nue`0TiE?## zt(KnnF_|P6#(dThl*Sy?hXV3HE^u z0f0mgp1@sjuLDu@tn^%w?V?6{9f-YEij;<5icwy2w9@0B3+Z*#Uzc9cih*7W@(-wO z3ar;r1Zx(R$w0mq@t5pG;zWJrdufBd7NUNqh4FwuzRwQWh5R}isTReCpB5v(&{LY& zi25-*k|Us(bT-EU=Hy$V^g*)T1~W>e?W7G}<@-I1NLwpFeI1RoZ+OQ*U6?QOE$*5& zh59n44Sd)UgljzDOQB>H03P7?R>=(H%Rxa7#1}G)F?cWDCg?PX@VER(Hx~7^z<&y_ z(tR%{y7fp zbwK`h!@XoP!dpR?maPtY7bN>|jF+q;C9_1~27Yl@=5pD=6)v6(vdSPW0DK*fqb6)O ze%KK*4SMr$Q4l8NOfyKqC1;vAKwtkx0mRlPz`nXcD7@8ZEaOChdeCYH^+nz@Lw~&kuXqmd7j)GH{W>H~%E*@wGX#(n-4L+-tro}1>uSDQ z2m*Ur{xJyzMj6M5DHE}*kQ=$dvPc5W7W=B zK-gjDbmZV*^kEDXO#Unag5keoVPK2>x7!;;zO(Tq{q~l>cP|fBsE!`Y6wOVvG)645XE` zbyeK}qOKt)os1h>fFIwYE7ID0k-}KS=(K8T1R0lNkG<1D$c~RWY-}u9{#ufQk{u74 zXLU?FJoh~XCKIdRyfMhS5TDCl?;v`k+F%`jC9RDCmL2dZaHCj9PxO&!MH*Q~7@fol z5JQe4$s5unsM*m-4#hkwilAmE`k@IagZm*we~Hn1-3E;qgHuqqjCl&etP!DhtyC)l znjN>Ua}S0zgOg1I$|j-B+&LBXp;zhgV6y}ClPGiy+Dy8pR-V3@hMs-4lu(dIbZFJ~ z&iZqL++z0=UTCQ}kj;Jz_?hhP82s6ZNMA+s=(D2{ZsB6=85D=`bbeyEPn3Z?VXzrg zS^)%YfqoT1&=&Z2Ap(t5GR&CAAkZ@V8%cT$292}J6>(>m7_?{5nV=o5!GS_M0{`aG zXK-mY4T?QB+Z^`7bfkH{Ov@gEn4e%->@{3ao#5?&0s%SOxjaXk`^Ptqn*Sb0&OQMWZdkzhkgyKMumyI3(K9{EBCBXp8)FED&vxeoY3V#rUiW z7Z^xInF7}y3IEwj)OY0+>E0nnURu+>QC%LOkH#P zyYOi)-7du5Uh_K6d-BTyV^2jt2^j4Pl#6@LsLb;)o6gMrNP0J^@%L4GKQ zmz+&%_la0*#y$!sUT1358rc~X!_ny8HDM9`Bze%)uwiTqxfhBe9NSUndxjg#c1-_O zgl0PdKTv02UlsF+w#9a|uDrL8gS0&bETJf)ov*=+!;ZPU;~qMz^Vr$Fu?8HL7U^q%o&0%Q0_|4iY?LHpDu_<^#o!e4@eU zu_y*jNv#O#b`XEn#dxe6<(hzXJK>|oUAex8^vO846PA9x5aqT%wVr$nL2irk_e6}_ zA^q2QkemG?T?BDE>d^U&gSj2=cqxV>fJN0QQ$XF|Um-tEiE`tg1;uhOH=IR?mmn2I z3x^MZ(QFuDSZTC+BFRR2A4l5}rTTN@-Iy@`ad@|rh7irgTfxc-guGHCQEMdWbeVt{ z6Txl}Q3FC4@$M}Ky5VE*v@kaU-b_NdNvfU%ax*jq#Sphe{yhc4?F9dv3~@W5{+f(& zdm4Z7{7(eAJN0CwuV<(Dn)(^dv z6*5798c5N@y7eHop08@-ac}t*8>bm6LcQ_q7mq)SeH%XoFvR6J@K-uu2&4MBhs6uj5yFwTpfuW>w9$ge%W^jiX)GtdR*aI{FMp50$3=JvUwodZTBL2@Py|(MSxM) zhaE|=RH+xqT#iDfX;lN|PHG}$TP56yK>`>U2&*y2VVna+S!nTzS_C9>j20aAYEz)* zjz&gXz5a3sU#K|}5(XzBDQ8YK1u>n~8C-K>=a>@VuW`t^6Z~@=bdF`x@xZyG5wvAI zMY=F^4mN^8U#A1k8A=p;ZEW+BaS%Ew0~lmFErw2ux>FUtA4zo*l#bW3?T}fgg3%p^ zZ6lVWv<+Jao;3_aowDI0y1j2y9sl}AqU!A3s0e?~wB@r&p*A(V&f0uhuHEp{IUy-W zA1GikB!yraIC43;LuKgL+JnID3lRJB4h zURIQtgvi6|L`L^f49Qcypzrm`R;R_NJhVX6A+aW*@=nO;u5iFfK~WoOc%Uqo^g>1F zZ2cb4Opx*+WP%XJAo31TV&$NtYk@(!r(ls$&3p~N#4E>Dyr)QWqZ`-0|48A=C0ebpa^jZ#q+zrt?C=~$` zq8B6rr%R-5&l0O+|KIzl;x8-6US%w1?>Lpyn7w?}yxq&H`AQLj&vjAFL--Ex&*{*6 z9N-i6b5c5$P(GOS0{mVEcxM3l9;!a1qSD7@zp}XorgGJlYS?)8p=TeO3s%a{K18{n zeW=l3q@I8N{Id^*{qC|Kn_ny8qYZx!#ZfF5Eu+bdnIl*!?~h||qZTCiZ`rRFw=3gE+Ard zReb;P-Z{|>Vz~UU#o!O&Q|tvDJb@j->#fe6h@!McaffToBoRwB?$nZ))qm8WzNJb{ zEO;>n43v>h6>@Thkdz3p6zgr+LiXVwBmzN`Ew+m6_Hjc+DdncxEaZlQhRlgHT3zk< z*&wgdYE$l1iqmYzfrlmL;LGq+hj88$hni9NMC^sl_OX5nAb}J9YQN*fRdF(kI%&|G zCKP-x4!Qw6pXQ@O=K_}+QJ^s}w;53y=3b_%5gH3qGGpnU@RhAxo?OK;Hi`2f{&&xd z=@{=NV#XbOm6WYUBwkToj{0HC3PW5~fnqCMgu_zKcVKiq21jI<5fbFiMz^RJ$NW(#{m; zydYur+Fs&|Mx!B02H>eA&Yz!NQN@#lwhLd#3N8J0~st}t?Jouk?Dk^~Gr z8k@-Dn@Li`PF2M&XjMG&2+%t+mC8Vu^Wwmp$&P~%-nne_HVNZ^g*8&6Z~^QV8k^+` zEXJlzF=8EW;_&LCM2zJOzCM@4prUgRRGs_u$Gt^7LjZ7^=2Xm!J&%jJ*z->VF>93F zltbT}^t{lTBso8a5mK@*zleKhq0ByGn43hv`^0W@fb)_p^ncFQu<(Gasf@WMczhM( zfcL|+&bwq#8SKkeYxLls|5?n7(m((6qb0#52Dwg9|LxBe^Uu1yzs63}fhZji6}0hz zyYcKpY25dpeMrpeDcUf0JS)t8}b!XdSgU{<+kPeGd<3zNLC_!lzMJEPJsiYqXYS^Iug} zks0NGeL<$9xE<7GH%2}U=KQmG38o>-dg5TUomOfD2B1LoVEA9PU~K|P5!C2?V{>F0T#V!8x1e7=$wF>JfmOFs{fQ>AG zH1uT9=}56dCNLl_Bb3P0<6h5?o1LInkPfKEqNFtHWg9%=hkd-rd>cszD#6qFTS`p( z)m}K^uV`_pHk%;b%z_DQ3@^U_mM?qqI}xvBp!8UDy>p`N!wwSV-nq&g+4jH-dg}AD zV@-05llXAvotvQo<7DLJ5JaU(lPCKf4U0 z%*1&IUM%;KAYi%AXsDh0N~Ygpuun9^DIi1YTuC-rRsAc?>Tl!vIH(%cKnKk#=x;}H z9EnwwhGDhOUtF!zn5_y3?_!ik@S3|kO^#KZkwHdz;`{Cj65G{NN zc`Ro6hi?LvrGiuvu|-N~#*B9Xxgqr4Bo>CfVQobyP(fz?4Ua7Vnd*WGJgh%xRZ5V8 z0p#JP*5W73u<5J*Q6~hZ%$xNo4E20nEJsnt_fS?v^_G!w0JBgy2D*k}_tUyK3IDcY zZzVMwioyf%iI{&Gp2THpr7qT@phcMo+FLfh;kdv~j?P4V8iQgVUZSEEJV)ga8P9Kz zhnV!dSud#8?MzaJx4#<7OmjSjd@)~ltmdiH)GmFQFC!SME}jfJ{;AW}kO^L{OU{=K z8puq<3E+b>08(R#rOa&YzrG+0Oa&eQg|G`nPp zI--oy3)&yau1GF#SA@dl34dk24q`W%jn>6eCyyM4Q)Pebdj~r{4vab}22AA+Wq{hs zuDd@{I$b!c$`udJXFGK+`N}Z_Mo2;s~Q&nz? zDsO};Qh!xZeAT3KF%S(Joo)n`5+FP@SlZiLJd^v%@c+gQUoM5Lwx&MJ&#RhscGxMo zrVc@o3GJK$3W3+6Dm?!j;Xh7OMJSn;SG-OF$_He9Qi3g8SK44j(4^NCiK5;Bu0jB?2Zc-2eb6iB=6! zf-aPbQkNdyJOXAc-5@MOY7>mLpTg9tAzM`jy>m-)WK3h(@leO*CZxUFQcJBwFgb-2 zW`0+uB72y|vX*Jzp+;vGbw2ck-Wii;g0x*O&6X-~<=sUoLD=l{TYge53HnZ-NeeFa zian1xGe7%mSgKSinQ6%M)1D1=s)~jpCgVOjKQB(5uGGN#rR>23cr~Mhq%~u5J-mL1 z2KP9PgKoJZJHAishJM427Q47Gj*d6C^>LSK$m}oO@u0JO-sDz=dQiL?a$}LINS@+2 zXJ$iD_+x+L06=^iqU^6BPqwarF21tQ-6^@-VOUgG4IC&UMeL8`XdT)?%5Wt<-E$?K z^p;B%dz85E>|6(vrq}aJ6|Ds``%^KMV^p#i_W+<9uoLKr{ z_I6O*X%O2=NCVs`Xe+>nrT#>SC0vMFkkFX}LWmyG`0*shx^rKw6d84su{Gl=+vZJwyE2BPYExTfFl3l7iQApxXV^cC1L*e9RFByfleN`cf z=cD+f7q9wh4LhedqR}?9x5lRW$%(U4LF#yGXa#FUllV;R^^DhqF*%=z&JE}h0fq3! zCY?L@2Pl$3iww#SF!5=bis#MDQ8r2O4ZAn5wgx?AV^i|LK|X`m306U+jN8t9)=-=- zXu*p|8ueVMARglzYv#X}A0~eOGjf{7CjR5-4CwO!L)zFZ2d(^rhI(-^WgF2D28Rh- z#9x}VfQT??Ra{jR^KYxWD?%|IIIh(~RoorR5~H=KpJEEz$|+7YfDNktdhK`+TZ@Z{UaGsn1Q z!?ELjYdY(1G&Xfk;P!(YGiV1r_5Nh!WiBvpT<8%x?tFkU^5n%**8DO8){w&B(|49cT$nX$e+?;YLWh3>1yShSY7F0&10=Z#Dkowv<2rI%~ zoB0}Lamx~p$#oI-7*;X`Bgs%*045~`Y^0cp6mSo1(J?viG?$e7=SxhcT6RM>BIT*) z+s#L&IAkApGoeBjv^OV}jpa1sSq8p$6z~lBs*z+I#$&KL6iwzDc_+ zc(HmS4U5hyyvKo7C}RRPiHH#gT~uj?h{xttL`gGu-$z=;CPEU^4<6)1%YLf=HwhxV zM)x6zpbPA2r+-{t%|oQ>b<#SK>g|5kX%jWZhJ^WmLOe1EDY56xWUOq1ZzauSd58VC z{Z~f)F^EIz(~Ca=RQx;=r*ZRft}c&ZGbfT<-Y%QmUUerE6nw znuoV!>tPeVKAp7047gh9cl+SBv4vkVZ<$LEpR1iaw-5p&H3NGtjzm1a-3MER_<>txM!1>f-+W|)6SLb6?=B?*3-U-Etc^i6D>AX9r7_C7OFgzA@vAZ%jYp%Pjjh*-VkMDNmmgH2Gw1Zt(=|oYi%Fbdtjw=7@@iRYg zRZ4U@zDnxOz}SzfI1=;t(z4~O&Cfw}xYj~GX&tWwByR;xFO6d0$d4t+iMwL=59wE1 z?0&49;mTd$$UfKE4LY5GyHLQI$1`E>T)CSVgvg|7*aM|e>UA>2U`#?+@jHV{LJ5l; zmLA^3uY+Vs*UXD8>!$jsFs`wSBq{m-5s&Ydt;t%l?eX_PS3JDQoSmzw)OubEQRC&u zs-m>JRI$2+SmAVlOV>6mLCUe(m|L)JaZ)u-Zff1+`Khk$#Th*rRAABoW>H2z4II!s^|lTKLg`5-X!@{q zXxjHwY7nigTq;!tf4lHOjwaTlnU0^rvamfSJo2x`WLwUjTYX=wb~bu#Q6@2rARwMt zj>$treAcE5u4zX82wINCrW(gF4=Vj5$j8Q_hHa_IK6rjOLW7!s$10h@KH(+g<~dqH z@4wpQxSTN=jUzzYCt?Y*XLutPm@$hxMu#C8FlXYgqT0P+kjvbsGGs0oA5%ylPF-vd zYCjaV{By@v&{WJMl0Mmt%9v;AovkONjt4Hc`6@oPhp>{BvG2?XWY6cE9U|VjVpYpgb7BZ9&Fo30nKGo>S!W z{q$0$3YcKR3`=Y;jtvNL16Uc{HVz%B0v5k2jw~Fn0#d6Y5GIn?+z8v45h<#W`Olyw z$`m!DA&`d|qa@!JiRcB*vwm#T0(I&9!7DZ5Vba^Lyt4*GXzmd=bT9j}OSK zWsYqlxg52Sxzsr6310uHGUjGV3Z(mIsigQ7V-89No$*MdQ72lYQMeGQjH?jylCH$V zn?Y-^1gy&ZARgYd%JIe0K;j(>Rjis4MCJ{_t0Y>R5e~oUg;5wZy^axyOq3x2ZmWt8 zB+z;ft4gCDJFX7GnUxNjl%i`GGHL-w8O;>XwG>=TJPOn1dtI2h(2HY~oY4U3dxBzn z!DB+V2iGCxb8J?7))yGuSUbVi$cp_*5&)JbrGCLaqx+Qdf~|cAh@~T5e6|&>hwuu# zG{>C-|9y;hK_eyfAb`~&^f{1T+|a8yL%eI?l)?{sDHU%=p`WC6LGk=l4?GBc)x)Yn z8a&1l3Q_?<1rv@8SVdoceQ@zX1(Co}YX$BIz}EmC6olnl_W-pAc#i!bO_1F#7@u#z z&I0!!G8znLIpo{0_=0;l&tl>X0z3RcAeZqH-r z^`|N*R0;=CstSl%P!$lv+Cpqjz!h$aAc064Pk_e8GdesS9&vv!Sipf8xJ0iPWSUTL zL!C)}a#iX8V@)WyX)*cJC7eadgkO)Ck`$? zb?oo~xNiKwz@K5q53tJtFjghdO`RtNA5jT2<$|oWz0`oKB^tYlSTFMK)@p)0puj@UKDF8Eb#12i=Xta1u7g^V5w7)ga;KugY-oKAKGd88iJopAv(%D z;X}dB0#SDQFH0}S6&z#{&#r-~K~`b>Y1hG{W)U-)=jcxfU76RA*7+Mrkx(1`ZHxsA z!|@QH`i5)eaj?ON&dtn8Gz>OXmdj~0P_^c$GRe%}ZQ##=xC{$_D?nF842+(k9v8I4 z{yKPCDx2d%y+Rizq+1JGTDxVf<1Q&^1LlFW!fh|H@>G<`Ee@mB>nA|k(AlMK{ozeB z?_jAaF#uLG1BrYQxVg(buXsL3E7o#MXpJ0*fXJ^}qEE1qJKhGoE#@Cr+*xE@VqX75 zl}9f70Pv({r$WzG?2A-j>4<)IA>?YQFetJEhm1wMjkuC^~W+u(|oOg zkR{FwBv1fdB5MT`SL)VFYPQm{GiYQbJ0d1^%f!jGGEBpX4_DVTiX|N$%`&Ux3&Y-XYL8_-`Vh%)*tCrN$ zif&yjYNpqwv|;U;Zzj}anW$h(?-}ne%Uy0_Ji#>-bed!!gly&|CBynJN#cb zzDwS-3Lr(z&K|oTT0~V=Ucb!zuD@^8>w7N!)(H)N}xSl#T~z)ylv6@y8U;iR;+;85xzM70d;DRbJ3 zh3B*dE5w)3e5pba>`1TB-KfLKsKxaJ2jcq}5d>3O&&&A&9Ke7fbZhH|>atypoP3$C zH%+(Sp_&m0^~=fyD(CO19}aEW-iEGY-|4~1BE0qf?y2*B)p|9f1OLH4{?RQGf$K7r zMD{^Y3m-qRYW6!75iJhcf#Xu&5B74IWninJorJ;zkR9eg0cPD5x5}bG0x$K}m;i)b zk3)Sv%1?6A8@Vx{Jd8kF68LX%N7fO)JZc5pO+QZ1OF7<1sCT(}BTISuv6g8Csa#`i zL=-qTZv*ETqx)1Zyfx1u*_zXY%h>9ea4xaR)GIgy#z!4cmg!D3Tnkbiz|(714DG zS~rS*+BS$9zTm8=s(Ljskt$YJs#NNMM(OneCk|oEq}Yu$i8zZ07&CrdYHlj|41a6h$O<;!3}thHltf^f3IW zwaY(b#bu=Y1%_jJa|b;Bf6|MTCR1@x-ld*H>+g~1eMGO9SZ$Te$M5eKCAt|_00|!t zb;k2?Lz5U{1q2hv%5cK){Z?XuHrocmc1Q9?!$S9W)3y-mZH@x64n0k)X|e)qC9?&b zs7h;lD{!5B{s~Pw``SvOINu(bfC078)#`FJoO5F2*rHn0yOWEuM!f2(T2HbLpeMyTVxS&OG|!O&yIB$>w|sUY>0ZJv0cxabUpQW z1)K}$)8XGafgRgWDf4R(2zq_MEShI>Y6=hv{*WFcmI~tFqq*JGpdUdAAT%dt0VFV* z^_FAquw#}~N;AS{rvBm!J?Y4pDHSWWL&(*@nEBx#!C}_kFi}w*#)7YGf`H3_{*H#_ z3$g!AYse8Ene;JeP-8`|fQc)b@%#HF?do`367KQ$_v=~wwFwn6#A=7XeMZcozXv}r z*ig*|u3t1l{hN3gP~VS|3S$UO37myU1b=kDDW0id6RP@HaLBPLhT@&c$ zbCfK&Z_6c`(5NdcR?*LqW#}al%3+_Vkj09SCyD{6a!)OBlZp6Gu__0te8ufiE8n0S zOBa))=8Ss(yGYi}@!p59LiAS}3#gX*hlUDEnlMvm zoS}xQ5SkjW2{U0Mt1>1{`yh_gW)U#^4O4=!5q6sutJ?c@WZ5bF_CS#7#T&s_c7Mf4 z&7DJ^Hz3Ow#aY>hYXcBH3<<2axT9~p>Gjc~Z$y9BGwI;Q{~pK<>iiaMwaCXemZQ+h^6E_3<_Su?& z9Eh!$MWtPZ!#bj21y8v^VV86RVnCVS)p83ojMK&GX)YP63j@9A=Egtma9kg;%VGW^ zVf2<@Zp+M6yDj;8I&8b5zC91A@~*tiWN6pSb*K!gNykP#W7V7@9iz;Gl55e7SIye8 zzuC0oOFjQlv)Nx}jd|~MEwGXD?51q$RDi?R- zBdM?JMnVQ{UAZ!vUb8@G@)`RQAzF+^fhS(#d^Kc@XZImpmwjIgAJai&2SJfbd%r0Q zNec&mtq)cTs*}ym#x0wQH1L{ zn?i0X;})(nT*0F`x=lpFkWBf9E`oLp?)oBaz|4>V6g4^FDL*puDN}}Q_lipAnUl`S zy|Lh$(*Ay~8yJK5*0MnqJ;xD@gO9kRwW+YYwFB+1_G1X}2MOcwa9vF{xx`A|Ws^&% zO(%E`eIo+|>}T24_Bh)&2k9m!O#ADEQHarzaaVko)tIvLp~{c8LolmyO3we}>TR&lIm8`f6E*@}m~-laI`~oHq79I66}y_w zGqp#DV5&=cyaR^(9qq2nmOqA&T{%g(fPZpfm@anA1q|NYJLDaa)*<3xB>3GBehnbV z=%oFT)ayO&ZoHCA>SMG49QRNWPS{}9kaTI%nMi23Xg-soWeQ0=J?7qbC)=C%KLQ;Q#V8v zb**oG2Mia1a}`ioFg=Vitz~R=ub?9m;Y_nGwa!8`)Am`#Z`GtSkT2CIDOD5((yA; zyT%iqXF5GkGxCn5P^LlO?Q@6*2tk>kF(ucwq5(VYJJjq z!fv?{|GbY@i;3+==d9&C@TgMGFXRl;%wkv=1x}dYE@)iTi^)XR_1PlFO+VbG2jS_^ z0s!ov`Cft8Q2-x&B(+fdFo@)h)SnC@G_$)aUN;xALczZl$$6E|F9yPBng*i8_jNX{ z`xu)?&%6x%1J26Q)n)f(o#@9I$9l~RleIu7b@v8^HI<#oaE2jUos z(`Q`W^bs1tj?&#=PUNesxmMuWr zF90uzgp(`Tl9NPfL7~AhoRcr$47*BmpW2xrP8f&sfS@}#z?xRYAegi*1m+CWEnutu z%Y-9dC?AN!L$T+Ta6FgPdmc5RQEg5>qot2%_8Hr~QcDb~ zWMAl1GVjVcgpatHWz;&D>A+3CAu-Md)bgMgmXyHT&D~rzWm1W7k&ag0&a`5t03*s{ zPAGN_Iw{=P@m=Ap6rAt{1MdS>Z_36a7w|%-TR~w}38=yoM-vVD+BGLO&!zT`X1$8( zM|8|qiILrdP!N8YmK27=MCX@tVnFmg={N)FvWR$2`85-!h!Jz-DK(%y5sFG8uZq7ZWb;*W8}uq?!8YUYMM?v&t=l12*s zYRh(71U8~dU|%7~vpf^e8CMZsXw$?!N6f%E#@tGhuT+Kf7mXvw@fZx zVf=1bUdA{OI)c>%u!Vu-Q)@m{9U52Pd7w-{Ju^g}*E?OX?YjCUmX3A?tXnLtVVFz} z^m%a*pCIN5Dujq9LX(awb591HbQRV}gri3^5U1tznjXZ|B9*M?Wl_seIO!Oh`r90oDJG$UyY5n6 z`<}9?@9wG^9hR4HBkG@NOJaf$#@U(A$oJOt#@`1%o#7&@(?0e&UhV4;wRi=WPU@^E ziVXw7J6~6(kCh&0nl;DA2E9`E8S*&`2Wz#>AZ~r$^jlO|&dI}mVQ}=^jaAs1q40#I zIzDQrDs|Ro?CGF&n}$+)FXmHlieNLwsmv{P z2@OI4Z^U3dtZCm?){P6fd?1q{eOn1L^3ng-r8=!V;hY?TkVxEJM_(QK4@P3&LXpAm z#uzue#$#rT8m={a0E}1kujLqopN&@*)sXi~#1+s{7KMWTwvdYPqMfw-Rpx5*_|!`eIJnS)?UCi zo>g@0M)EJQJG|xCetuEbjS6ogA9lYnJiH+U-tuG*uEVwQSl72{#CbowMvWT{wllPo zra5nVp_6&U9lgH}=fgOg>%j9HyPO_aRjnhAUxCWlLR$&c@cOCIC2GtYdxl~w7^4OW zT8vj^BdstEg!%0C*IlmoUdKVK0NYg=GHeMS88>jdNso*n}CovO&Od(ciHZ(;*AAZtQyu zOGkgIN2-roOgfvawwzF9)`(3dhu*3X+htl6U<eB-3esxMeC)o-RHTgU+s7a&6v>w7QZTX>UWz zyy3duqWQ{CpY3H0hSP*hN-jHtnWW&QlXZ#*J=O+A=Nm{>w$kcu>z$M6TT!j`(4kz% zrP+38w%a2873Q}N^~zp&C)MG6?x*z}uh4n+R+=)`q-QD19A%c(yyB0?t4Q`bNC;)- z2!1(}qtbL+njbceMsl*NBV&Iz$S0+t%F!=^5RFM(e19LT+br(9zb^Ow7HO3CFW^`rd079%nzslRMMyd+#hfp6V{fBnQT%%0aVF<{3D}n{o@}I zVVtq7wUfmZz!T_+PJcyxD{FS$0w=3HyOb8XG!K-V!r*;sgrWEMfBvukm-qJ(*;6D4 zL5USsgrlDop4K2LP(aZ#3Zc{ z?vc9qhUWZjxqQ*cnMgt0pMul}YL*fb5kQ!Fn%6vUZkH{x5WC#Zd~pt_rU*hs-ed44 z$14MTe)~i>Sl|2m58vNMWNpNBtJ!C1xuYsYcQYIu7E%-f04L1wkcasjcu+J13yzJ# zR5N}(KzPHT!9DUSOUZwIz;6j8mc1tlE}Rj1+RoiEy69pM&kdHJrA@@ZKWvhv^jNc>X_*jnLOzbvO|?ju?Y z@vbZ(KklCmx;5_t2p%Nh>fe$F+08MmO^UjKlR#=<=iAtX0zEAW?RFsOB6*8?&a*si z8d*Sp>OT>Ja{!YJ6G9pQ3oIGk?M7zatjIn9I)*DnZCpl}1yE1tv zHki!OcSy5q13jyQY6_{mCS^6< zSD7D9%QBbDylG)8n?`DdG5>&yQgw5{Ia+0~Y&heXKmhLYS|s45@blmOy)LWA28`nq zei(E{(dBVZeb;k9bg-9@AQWPPN2>3tbKjz0FeXeWnlvk9B@)QLP%gzhEo5Kuy_eY0(IYIoSZ34aLUr;i%kx90ek&bXEV47PfVG{F&R24oI1k>H=jXZPWli8#iGIfg z2;y5KemhSGqV?-FQHE5X5=J-Oc4$W3~V#=hRoX^Nk{avUrX)KFRaM8#aCB zyzpYqRE9vvl^13?baP=r5*P>^1FkEQN>FDI+?XQpPO@J@8Hk@sfW8M}%jAHOOqiqs zrtE|W3E-w2#2PeWwJPR$)jAn5smu^k-jSyQ zACqV9y1h=y-51oTQu=k(=Y7Iy{Mx^8!`SP^3=_tJ;h+X%-P#>Y-oy3_faY-Po zOy$bkGi!8})fsxExfu1K;fcO|$dKzQF)Vo9(tCQ$;>_@@tbkQduzF)P!QMt*s<|i; z!`S2yEtkZR6O?!cPVhk4C%_<`2+jG3N@7^1F#=9SHsw2qGKZE+IyJ>u^x&dGpC=MX z@K0d!@eku|hnYg@9Kydbfw=10kG}jtXLKzRN0g9+8UC0>f((*_$>m8Tx2bcsLoW-t zbbD5pdC5=oA=Gn^9*{|k$u)}BoPw(=mpxGZAZLo=1Ja4IQ_32xm^g&lf-&bwC^{_{ zjY!}vR@-P+rjT-418*})$+cw5GYw5-J1Ul_R};;I2NzeX&n|UbSt(3;pxX*? zG5dU$6WIqTvL!?Qx~VppQEF}-u_bswqc&j9mbI;v*s7OCBaCvj?#;{x`FAn}m_Xps2Zs3^ z&>c4*@ZEtHW;mFiqyzYi?*WB8W3&36KxauQSa(EpW29drzeHsyBh*kgT+X*k6lu#o z16SZ{m4W6Z|LDv@6Hlc=bi&y#;9j)TT`1Nap7#eLn?U#W7kaF2e9;fPVy^vokIZ}Z@rUg|9Os5+ z8Lb1BZif<5s8x($^k@T(4+h~|(K$T946q6=JQKbtL9!r-Jrbh`*1Qwm|f^uGdy;r8gil4_m_cZ^1!yK+8LaUC1SrgGj~3`mBM14q6f$Z1qtpng^zO@?C}Xie_ZayH8v>o=G`^NyT^*sjeb zQV$#+v0Je5^Fg*~%~k)Mnm4M_JqA>3bRwd^uhgcg*jBY|PginxtZgR<7s@{b7mB#4 z8)2?qz|##FSD>VWh(2w*OKjbpRSX%SD!6IQ=83K*Mr{J>e=*smq2L2U#|I+mcu z2ciyx)@z5Ss@YeIPZdUv1!oI;5m6yG_7zt&gbjEA6vIn9#*Ko}5%N*$i6Byd{=Hl@ zejvvN$bnb^G8HBUuwo0e3e|cPtiqgWW-u<0!2~yP7nDKK1!X`l$*u0EpM?GyPM#Ho z>mLTL=FP#K^3EEp6`fn4rARdRW6_p4FQ`%Xu?P6dNBef+_INFR3( z^sAoN$$=K&!6M-I3Lo|dVhTQoI`+&RrOpRw2m*Nkf=o#m|I2Zz@jwv|;(>MXgTg{9 zV$99nb65i03Em6Qv*G3v>izrT!3wHb zpY)xSk?}+c-aXW|_HO>k@8vaUK0w<-)Xnb<#<*Er&`(4ivx3+HUBJoj6jdvngI`jM zu4ZMqE+uv%=|F?gqTzm-W=_PAUMx2sK$vm}@6%XTo|tQEt0-2LOS*C*MbT^=`a`#Q zDVxip)mOPi%CoPTbu@_(`(Ag8+!iwvi5Vj+cno50-I2FwQ;S=R`SDi1$rlwUCgHk| z7SP0hXC3J{$@^_dO}dY8kHCm`iRV2r`E30T)RS~B@1_TB3|9wIUwnmj+Y&u-2xiNc zeg~)Sn)A47rcfWBTdGCjY=9&7fKJ*#A?p4lOQIH{Fc3^hNNXoP)C_8cvfW1AZdEQp z?nBjV9cF^{RI9Cu)fTm?uT=F^sx1oD4eHcxy{4y1^^^cDQ3zd%)UM|2I-)Anr~+B|4sv#e ziq?K42*p?Td4Tkd8;uf0p+^s2@sOQ)cQKv>_&^0l&;CX+_Zd@Z#K+ILIw#oF$aj8r z^js^!prh0c$C7Qi3lAK>UZtrNYcZzrSXwZ}BOMV8OY_$Jb^zubBX*$LI-bh{!~pOx zz-r!@-%d5!$D*Yo93ER_0Bsw8A1XC>4W~beiVT|t?voJhFPGv-Hi`2&#*peTtpn{; z3aW34klNi9Pqcq3xjLcaIMxeTt@M=Eep*WKOlc^X&$yBI$q|O@v%JX%qAo>hg~p^) zhzm@`tVA_odR~HZ3*7Ebb4gJ<#Z+L1CD6ljjp)n`{ys3&lZTXVhmcV4@mW^Y#u-e0 z%4$l8ppf;w$<$Jc!b5Q8OkpA%J5YsA5f8->3CdfbzEa^?vwx3VT`$r)aTmg0Cic=8 zIqO9iN)6fwxM+-9B_KEH9(@?rWz{4}IuNIQii(4eDY*@(f*^t`Idv%j{IbrC_p%B* ztK?aZBZ4(KgHs7<;mL1*`}X;7pS*jn+}1HbEWc(k1CUMho;*Rs?g~A08}@PMoCPOY z{nQlG;ces}kD;MI|KZ(=Q^pbb-(Gifh{9?7x279Vt)AZO#2i+OET#u}jQ7MB2bOc+XHN1>Qk4mRw3>y|T^UWyvAkI)PJ!@)BEiT9_UxMo&XvU<`QB*G5pjpU%wswqVO_1LLH zzP1i{tEspsUjlAQwCa1*>Mwr5bIeV23`W&%YqPW?>(&+<>zY@Nn)Im+i-?Yss01BZ zj3^!n?J5Z$&RaQpqS$KH<6cMG)`QyANN-e##Fo_?w2|Pfi`vyFaV1N4UbG`YhnI|$R1Q>nU@}q3;{klzUo=I z8>7e+GM&9E=Z=R-nAUVdu2RN#nN2%w<%L}OHgfPz8?UypEw>rUY2v!g>Tn~j3=trrL^IEU& zAEqxG2SF@2*D-pN8sTJ%6+FRazKJcJ+qS)vR^j{x%W(&j-+}hiMu(lf)-38R`_ooX z>3{X|K|7=fZd=4{2?1+@IF@KdougIUdP{OoAF+%)@93LeKg3sCF<%d&60!AdAbyt6 zD8`m_Mk0VKn?dhl;!Iep3PZFUlc+*^L6%JIl-3nr0NU7h-3vsI! zW5%%&DPG31^TZ2aH`p7Zr3g7Jn5HQ8lu^@meTJ4NTZ?QIQH8KHl{I9%H`O9=Jr-V3#y6u z7wh#lHqy>re6udb8w|Hn0BDFdO*(X44|E&ie%-<)B9@MCgtXNAnj5rn#mG4Z`JZyG z?`PW-Nx67&@$Jeiml9J>b%IOe^lXDM z(owCrOJy$)WY3m?IWoc|h(dw^StNL{nrie$URkO590t*-BQ z$V%S|=+HI+-EMMBw5;A1Mn={8I8Up0<9Q{xwe2RhopCkhP}Kgl1M{)2QbF+$&Yoa3 zOj>UWQU{mKDPl`BkR8w@ zE>*bgDo|a6^#P{dWld;!8tH))$PRp6jrK@|Y}X%(AHlVrP~iZC6SG-@gSi?&Mp5zr zn*^p547evyI4C}J5#Sy&ked|s4AM+9$Q$6f)sNXSoFg6_S4$vT-7s&R@NO-TZIjCu zR5d)?+TNA(>)0z$>xEcqn27ahp3Tt(_Ol_?D1rKCV4!h5Pv+TEY|la=gN(xMaB1}S zJIH)e-vlA8n7Z9-M?_Or6-Wx>u4e3`m5%eUiWwh(KNaMf+TI3l%>za7Vu@gfjI1Gg zuRFlnU?Yu?05-%YrSoiL78paKRDJXF#xFU3FI-^djoMbK;%zCnYdKdJr-9!-ibBR$M}iCGjrf3t~@;1pMDZohDp-Ddc6Ra zsWsO?%n|K!eXzRR=vRwF3(Y}S$`%CgwH@eceXzP(dvSJ~yl&j9ChB^yiMne`Pgq zGiPeT5=vFF{JfCe7#kg;m*JwGSC#Wms9Hm+;26Q> zf(vuT;!n-ta6W0=ByNa%+?ow5OdS(jYmRP1(%Cw?&G<3*9h!)ee>ASGE72PVoneNc zkuV`|EJGJJNf{L6Dh<%dt?kz&%E3W}E$Ea#E1l@@ruo+*s%1;~j(Uj%F2hF0W8dkw zO>cDbQGb3m!kcHV-G+p3klof0((P%ded2U;cSh6x=a|Zt@`mDS$f^ zIE1N=D%EhOR{|GC_$wcJ>0pJN|2>asappqKmDh^jYzXJX-oBo1jo+h;@m1n}Zm4Po zr=Gww0EN(qM^;2Hvptf@CZ`S_G#R`tGjn9(wzAlhC1D$z{pD4}sQdkuxO8X$HEBSh zFlATcmHxdZVS0DlIylTx*MY&8H>`u0MY|ToYXbK+DQELsHX6VJQ=?$1X<0}ojT=5? z%uJ|mbNZ{!>9#x{-2N_RpcTK7_k*01bbCbKt`AmrRa;l2wq-`ZWM0QOVa$zPDdK4w zRj}?h{uQbl1ujXX2ct;LZ^Vjr1LD8U@+ob2%hKI!SGCe~rgoKyF>l!rZB?-Io?Q(; zx^Y#U63eQIo~&^ zWJ91j*WMBE00AyL6<5sBx?lAFh3q6WlYY@_Vq%V&HaM~yEfQMOoC?Xn#tVRdzXNBx z?rPge-tRo>^?L1F#5&Qn5^zz=DO>$o`3?8K!)*#7o{KYNYFRaGwc95(^!mZdD?;Y) zSm%^m%!$|)-Obo_sD@6~4_5O?ibAe3d9Zq!HW$OHTolt}K56>vf7L%}Jr-`Zb-<5& z(rgenx(OQH0k#14-KrjpSyB*2E6Oi~Yll-X%ZlXD-rhjauk=&0HvnyNzrX%hCt}?} zw5`LBQDL`rl*tf!stArZhA-o!New^oo3qj_?xj1 z)aWK2qBAh(MqxUgK|A2q5{uZmsh3mS)6unm)4-#?N!vL-w)ibY7u9mw)6I5P8x4B# zi?qJn#63lJ)E6f-)#jF@c0;B$Iy&&1#viS|(l@4V?LUq6Zd}G&Y>8WM3k#!eg-Y5y zy&j3)XxaDr`;D1}* zL@(Vh%dE5iN#|V{MWXA(r0ebtnHvF{vHJ{p5eK&GLO{ZrW1+nPk4+J}NN^j9`hmZm z)pQfYof8|eXv%K^4R_-W$sxiR_lwBE$}gln5_sdayETNI?;+fR5l0h{^lwwe29&p3 zAVqb?Dnv6WM9#9$VI_9EsW}MG)E?sT@JyOrcegUh)#;UN3(ws43=%$!U8lnNR$&3r z3D~qPH--#Ez3E}*|}$m)=S_D0Q=jw~8Isjs>2Pz(6st zx9Vf}Fk`wxgUS8{h6Q!6H?k`$%SXXC-r4~Vt`V1zoHv{>cQ9!;+-K*YqrbCVMu;Tj znF;o<77u?1zC&<=t1u#Fn?#Ks@@DcD?*E zCzM`NgAzcGd@|R-@1J{sZMeFk)vqikUl-5RyS3OCyeOM&B9%ip{lbseCu@cDo#wJ? z0N~lGJB)(w?sXtN#N!t?#x}{~JS!wX$bpBr4v&D8t2G1>QI^%L8HxF#QjX_kRbz5> z_y%i2D_t#4o?~rCsEIuh2}S%&%Z4%NK~NqLKHpBYC`|{)Gf?N* zL<;mu63dG$mjp8h7z0?*5*(7C?W`G!SDd-~LRNq#2k!gzWA?G1&C5a-n2t1^dQnbT z({s$|eI=`DHi7EJv*&ML{Qmhf6X?a$d6ojYAj8+CHDnDg&u}f4FcdY!d3v3f=~U$D z8YG#HO}htLN*s1ZNNj%YJtKAM{lJRn>EiD=ULH*w=k#$gd4zk z5yesUQe33@8JGpHxw|`n$>&9MQIrmlAkhc;Y`vBBBBxj?LpIX;y{N4Rzbop+Tvk_E zEvIjhKJg_7de+v+jujEugTR_r>n6*!k@L6nWMvpR_Uo16h`fifF6`A^~*ILN1yr z&Bb{ouOY)Uy4dBpWTZ#-0(yTxl2@8W|BNllkXRZ$i6D zEYp}U6?!M;veLU7Djxv~Y2I91Lq8cPlDoE>Hk8bDptqIcbuo5>PK3HiD>$)sd3<jhiqB?Vif<&ev;N| z83aYP+F^(MMAz&)HnJb8bqaD)6WO>auW7a13e3`lRVaenCULei8daEAIxMWn*Dh== zzuQGc0%0{o`F1jG@{&G!_vGF4kKaH4&qm@cVw>(i|1`-LQ@L*+tyawk1OGfb5M!Et zt6L+{BVwTS8QML@qnF3)ms8V#Wz2;8#jK?mP#`2uwO>rF0GFXf4GZyNV<{#bzmTFR zETbsNFQh4K;DzZu%W!|B)iv-j3htJpnvuOp)clHio&yx|=`~%|dQ(sPUuaj;9RwZg z-quJ7-^=R_d)vS4Hg9f^P{@hg{fb_ax=vG~-t=4%7u7R~r7y~v1dr2z%&^RN_;%Ft z_V>hG_WbnPde0o&z5C$os~4}HzkTQKt2R!gbwAD0B0aasEGuNy4EZt9;yf#gun0Y6 zik7nyZZNk5J*5)SeM`l>ed|y)2m!z(PttrQAe0{%Yr4D&fu9RC*0K@_cU$aopT#bB zP3&TIR#W|fC@Yee==wBVrLI!e4kOysGC$jLhjeZN-E{YEcmdjIs9LQX zeE48@C_l*wbcF*f`-%e1S?Qe0j=vT^(g^CO#H2Uu5jg$YqmUyx10lDprjU}ZSj=RVO+-^=5N&`wc>&Gs zR5F*qBPFTx6HxAJaVm2}IQt6*d8c<7K>o{#oXYw!Be0xhvLdNAt)yx#>y_5#+sTYdU+~#M3tRi_-_@t?mQB^Vo&UfM=^Sp8H(!| zTeL0V^2nGx>m)U4Wlt?4rlGY_FOFyIZi3WKv5G_T3Y=<+q|bf#E&eDLvF8#iTtG=K z8U1pd%rX8}d`kg7XeB1)XqbC!F0xwjcFVLD^TlbN)fb@H zI8Q;&3l%?nWV~g4uNXr&e$ug;JrWP7ch+MQpX$A!ZtjrV#AEKYL7-7AHiL2aUsK=p z*YwkT?baroyNlDP&|D!<24v-AmR8MKf>#pBpJJNI8GwS(311d;)1*bcG&c>D*J?Cz znt|NetNTJ@g;5uKwPM7b%jHcacODJ*Y?d1|Ox&qic?FdNzkG>7kjb03&&0D|^-;I` z{yu+k^;hrji>%N$>S+oJcJbnfs--mW4Q( zASXVgnopb$X;RIH(Fx}kDML4C=qDFoU5GG{$_~+X$6mSQi*{pYz!u_>-k_GS=as@Y z&JYf*SN&12U96j$mtgEo!Qr9XA$6Cj;{M%iJtve7cPTuWrIroJ=~aM_Lqukm5m6dY zr)JGE@K@0jt))5h*}ip|$Ipa;aGM`_1N169h*jtu69aurI2EaOoP#xTtOa7YbH2hK z)ZlKEE{+QNgH9|h+M=LIifMt*JIp#~Hq9l9p^0qef$q)7wyhq2Fk9WF z-&N#hah1c0bTtnTWHlDHzLxG6rJ*RI?0>I=^4|FwTQY zhJ_aMDcVx?BTHZY>h-(tUcCD4C~R>IC^%FXx*!d>G5(<&;@_$f{OPjWKVD>$3n4$v z^K6ne8ts;{RaW34aR!GTX&Mkg6RReUk8Me!tZd8d&gr7rVeS-qOr6{1PSKZWI>mz! z&WRjjcd3_{hLD|2%$aJ=(HvtoYiXG!n!k#B|z_4FShH$xOISz<(8(J!P zd<|Ou8*u=9>=2$ams9Pj#v%udamMLZtechZVj2dj10%;J!Z$JdgxjKWzZdA-k%{FY z-t!M7rq$q33T;*Pp%lJ#4kcH|$}}B*qdiWeH9F=~wJVY0lyZnGww|dC(_v|Y!zyZB zQ|BRSHhgZck4Q9B&}FBidR%Z|g{xfcohH2mPbyas6H{Ph6B6dcQl5&3NL?>p;tjS; zX*;2)n>BsqadZt%P;`$y=1mPv@h+T}pd5A8vP4ccb$c{zdqW}6zt$ClpH~Zs7gA1Z zMgvQ&EFdlw_YI)!$|4Q!lO_YC0sA4(TrVOZ!1>mzjbmI>U5j~{70pPni!f{yeI#Nw zR5P-qD2ZY?@r@y;1+6`lCKR%L>veC6%np9FW9QNam?5mTDUM-qNM@buqC;nt!v9 zbz`qqqQ*GVepUkya9MdI2Fv`WDrZ?O_rU|}z#LI+WYX8#!Vox(cGySd@U5L7*A5D* z*4m}ZG(-2Q=ujAoms^d{6VgSm7O%e_;rfHG0y-OJHC2timevS>hUlU~s##{W?B6}5 zI6SlMp1Fx$JSyoX0v^|mi9m7AZ?ehdzU8|&0CX%`wu5$}V1|@S2CVYdi|W=BB1)4Z zt382qVP*wuZH-gv9j%?sCQxIx{hwC|eMTqcBA=oq>r|2sZqr&-G#;9eEmp~z{|MW` z%K@jSW7p82y0ik|2TFL3mXNWi0Z&kE$JPx@B3e&rBE0>}PjMRyL^>1-YjD%apfL>@ ztZ>AsWKN|)D|DJt?gsu%{dR$xXMLuX^Cp{Rb(2jr%fv}48hi12AQ*$=u1K<`=DZO& z#Iyjd0)KRlQPYK*X8Gc7iE!JiCK%2g(rU}b{fvtxbenc5 zxs_U|-jB#oAk{e6Nw5KUWrGcH!W-ZLM=Y#Qw%G%!aXO`S;{(- zWu0_f?R@rw9+n%#Tb^Ag{Oi3{=xkja7uwxZjsb2HKDOitN19~cS0zsJbIZS09Cpyf zD7KuIA^1fB>MIm25MsX;30Ti-F|9ykZZ6~uJY6r+V(Jp41Uup96s)D6|E!;#xdcnPC_ zXB0oDasoj4+H5Fx#iB63PGz%%xPoR`;{LB`GAM@%7osry!x2a@{7B1*Rv1UrMN=u! zaS$WL6j?HmzPd=OO!wq5LD?M$*>MsFF#MuOEwO_%<%4||N8mb0$+@zLg3WtlL zPa#(z&Cy_-yHWIYk;Iqgk1f$7YoVj<`bGZ+9 zba`ggf1q9egaCIVToAo;#aQ3N@KOzA`VuB(Pd(0xZ*%rLL)EY@&U#(%F#s*T4fdIv zX30vwK`#0XH?IoA93jn}%jT#^=k-O|Bz<;47}7UY4d!A~6V6UMY(1w%iO7D|c{FUz zZKATOSbU35BJFLfnfmD`Gnt?~<-sTYSZANue4q41_OuO9aGDHYy_!z3uJ+IA}r ztBuk}5@wPBzxq>>1F#mDIQ=A&+Q?d|Rg@&7c_PB?4U=lE6YhYt$CF zsj-eF=xq%FKDF2-*J~A(&?l#W!U>d|=V=4DpXgCXu4#*TE|~`*EwJUaKs-@VQgkw; z$&@0^*|v|;&ODonhuDF~SRGWMA~tvR%=())X_Lo?e)wE`l zMp;X7fu7yBGT-5tjxON#+;L19^@8|aHBt^yC*Dv`gwO3jQafYo#Kolv%WCK~`D~QS zHcklo$+-H^rEbHY>AGQmJ%dSiWDWPv^Gef4-4^ksewbxzRHoij*3o>62-SOL%pEbK z(Wui~2DIwgSl?;X5UBI)v*CLw=d^QWF|EmKEia36)Y^&UWEVEq?$3YthutBW{7%^P zbOuWbwF!*7wS7$`8GPZGK}0pz*Au^?-C@Q5(7RdsN$kM?v)N*%oZ_mKxNgMexn@)3?Kv5H7F-t#Lf-5_Lu1uuPCkSN#O2!trgZpFn zPSY_>vAVi007-)V`X@5WlY|EOs4sTKS5{00Z3&)&M`8!Rv@V5{2PlG924qV-7d>j z+5AaSXU>Xxi@3WhBqU*OcBWYk49E`Tk=wy`igE|hCdz!LlIQZ1HTBs2N+Pyjvitu1 zVsG!!>HGJ`5ajjv@WWpmi=EvMe{uYmJO9Op-SYuuXLNI{x>`(IGt#c8I-zZ$t%>%`Ahi8ec>0 z+kIZ8kiSJFC&%f|-|p@F>zxlL1M%~J`R{+d2QU;uPS1f1LF>>br9yfwj1L0m=!VM_ z`HQKnC{=Z1fLYAQFk>QkN&+m7hD0GJ#7U~4Y|a)ndOx63#TA(`lml;CT$6faQkAs| zgk5GqK5Rx3VNblL=%DzP4A|m}ft|1;&RxKfL>NfixiEuu8{L=_qgRt5CacAp*GDh@ z%C$G+gzi9!QXuyEqKWY|z|oz+{d3Z`@w55~cj8UjTqIDdwfkdk9B7at-5PkaCcWLB zZ-jk@1O(c2pk18E6u;}$;xw%hm2V{Saw#jk$qm^)wCNV>;;`7=rb;v9J5P2_ViRGe z(6X30_Z##jLHAn48WR=Pi|PvKz2AB`=8N-ht8x~bA^QNLn+OJo!GX;M$EwgAa2_yAe6Acv+TQh9RA7HYcrnQz>Or^(vt!EF<&z)XSWM}o&VBPle zuXi5)wDa(RK6~-4z9)aZ7uKf6;4S+%5X?-%0Pa=gZ8CyzR&Z!B1W){tUeh|q!%0jl z63_?wCItEh5dapitnkXC<7wJ#O9n?ra8a04}ikMBYF%_w* zMp{v3L6DI{N`;05=M9BPdL9B55S1IcJ}my2QvXuG&^rb*4~X z30eSMnOXz>+Se7(QaFz6-kpxJdahLQ<)Q&r07T?3;+gVgHi088t8o_PQpitP-P9YL zk8p~ZbhmO5*t7>w6UjH#flc_lQz;31d~Z>Gnke)azV%Yelc6b|>;6as(;f#Mo(A)> zz$?Ocw$c9dR8?=FMqnwH@2T&H){Z!=O|XTl-FI9QUo0r8@ocR1i`0NrF10xE)Z2IR?Lxg|YTCQ-C%TGaXNM4&3o1d5?86U_KwdDp?d&0#EPCSa@QM^7V)|)^e_+DNktnKqFTYm7$BC!z+E1LRRuzJnA zFzc&%7hw15SKp!o`s=wY{5L<8$R@XZ_a;x!Zj+G~DS*7*KA8GU5K>V(jKdN0;+oEY+#=mi5N}{4Hm!H(NeyjHm zq|sdDayY4L6?7?{hzaCpom^ydicUz;z#%wka>DWHbW)rQ#L2Y2Q1SOW5C?V!&Q|-t zpdYBX1&~W!w;9bPz#e#dkF`8j|oY6V1S=Lh_T-4 z76`PL!a9~?2SyB?Fev7zLo{&1ewLip+qH4Ra{Q;y1L3a30*F>@gNO)NXxhQz2+jNnEAI{q%tgqnl@1Hm|6B zm}?K(0u4Oah3OY0){ABL<3u2KbbKr)t4hKO|ECOn>yB{HH^2_P!380A_>p+WVWDki zJ4CPOh}c663{p;O>pf7bI`AeQHn>mZ&i#m+IRHAg^g0ASl&A1qd#q5<8%2sD4y)}E)mSb$T3N72ElyA40b z?OZL2p{a*T>5F&NF%umXStYGI+^NiV1h6@PXnl5JhhG>uE8(VWh}PtQ+Ik5%ycu(2 zh`r!pKVd|)F&D}e3> zD;nSI`Cd#8iDU#*@Fi<8O`CK_U-aV@Tm}4;1Js!%qSdukb4G^gYT{{HO?9%C^Qv6T z-`{s-6UusM=C-T0cYa|ZRyar6m&wc@%L!36Mv#GVo)wDYd-Q81K4^v(?l^}le6$zj zJVKWBfQJ(#tn?Glta!&eS#aiU!~Uk6Uat@MoAv(g+-`cMNyopD$aU1&ja#+TB&y1O z(3o=<`Z>P#r+Hh|--5rEpS){-+F*jR&K=BLBBsD>f(oWeg5^6F`nNuCe(mp0rvQCG zg1@(Em~G};HcX}ALr#!>(DLTzKm5C1*r)y7X>L8RMeJ4NxQP1)4oF4Z?_Op4&gvii z_E%blX_{KAq_j&xPA0>&P_l)ASou2fbx2}~IVykp$>&BrjLwh(+YgT?@jQqt(_AcP zU2DR&NUF%N5T|CFO=B-99b4oWzk{-ZdtzP)?p5>Xv#9b;Hrz9y4JrdOChYTJsWllv3!Nj$x~W|Z#ypkc5zM* zZ^UDN#O=HKyR6_0l4kn38s@9qz3V1RQ-8{S~mjbggOND{i+=eFlc%; zuno8)o@kx$iIJn(ah{bB%KeF)|K?;oPOB=j(Du^Fq+Apv^MNWFHE?W|Mujuzo3)SH zq@2y5E%LuQA!YOlG_SP>Fj3?g%2%9OyZj#e)roKuRi|n%`?cS@$~h} zmrq_j!#qx#b>DwU`tn`+XJ?W1q6#ZEFnohHw1~<|fffZAly(d!H)%k%(yKH>xG#|y z$f!Yp-=*O^af$m%)iX(p-}y*ro3&#le`M>S%Hmm8gLsm-(W^0NP%jej*mA%b-i)LTT|1HnMR3IW+~fxUR4LPdRB*f>r!(KRJSgv9hr8uk>UJ}h&k zt4N|Lh&Udpuo00$dapJOlS50SV=^fR^`cq|r&2%C3kCY6kR~l{v@{#4v;(m+wg=1#4H36sY>^MXgvP~iG0$KLkOirK`5XM?=7uN>a--|^ zO>Mc&Tk(rq<0!7uJe#IY3f9z0m#abxC{?T9fE;sqkMF%AsIY`>NUi`;Z6{z{_&^>*wzWn`t14;e<{v9dABST=@(r2j2_oL2!>W=!2 zdq){bSSiGl#XGmS8qPy@JIuIET*$rOp1c`oa`;`5ojJ+()p}$7n?GUN~)z z-7a`V%i<0BK+UtsC8#BRPpHn#>S)yXBE)*E=$X(n3jW(|VX^ipg{n9EJjLHa?8rJ? z?Uv#{KvgY^g#lO*N)TcnZ#K8@@%r&(@#d3xHw@hM^rq>eDZecz3vXfTxy*BP2^+6a z2kzB~aVHl@{^R%eDTw;ITlVLC^MxF*V0>OhhTV>k40xph1jl$qr(r80;N?K4 z;bc)&vS{9=)wyhj*l_2XLo46Q>u2S%0G1Sw*;b<1-$hC|_|uaH+&6z>(zpo?wDx&u zl?v3cOcqe?i;x8{KL0#qv7&qSv#dQ>g>TKdu|XzkZ`o*TX|=PoI?!%hHL}j2b@{W+ zG5WR&DT8E7;(naBzNpSUi4kr(oyKe>*6Yn8x_f(ftMawX;9Rw~&=5!qa6zK4Xs4{| zeCA1wBq>5Ye#9(GhK|&cH4=fgoEj69ZN~>F;|{Ti4%EV5@w_A3D-Fp9{)en?Zp`A* zr#6q*-T?D=-SxN&x}x#T(m9S4CL!^5>7~3LW3izYGG9#B@gBS_ms{Ku+*?mgxuH1x zULR0LTD&PX)Bv~ZTAAmu9=ym8Rvy%del-wZe;vQ8B9FSyCv6;zo=>2$yV=Fj>RfO5 zPBV_q8^S+N?&zfGtMdLaVTGr?$?|-szDNQ52?DY)Wd-uMRV^T4H3*@s;5d0Hi^Yl1 zkv=A-E1gM|D+*9S1XhS>CKq6q!@?J`DjhA!E_%1B#@v`O&NGu=k2JKUHXKqkF5bHW zOoUh15^85|8}2kI;SHuPXhy^iGAl6a3Z;GHMSQu7s5|$cWKYjXg}~1 zTG?NQenBzz2T1v)Y|{0?%IaGS|KuwC`g(A~;gF|)sAw5ShtV^K5bVWINAzedMgX+T z-&>RJvCBY7stq9V@e2O02ZsA%yrS&^ev))V==ZQOQ$2&YR>a&HWn3+DIcend#dN%) z4RLrF5xvUd2n&u^Nfzkpc-vW9&6VL3-YyO`8~t-O)!(eG2GKkiVdLVhnJ?2~a#2>} zRT9`Y?X~NWaec)Ko;hxyD2Iw(r1iXMR^`vFI=kKuBul zt)r;dYn6Zv_ZyNLWTfT194CNa5!n3k9K{} z;aZ4!fzzIiNe@wV8m`LkVcymUD}AUtTJA&px)CFF^bgxx>f|NkUEtzceeu->)3uuJ z-8kD1=Gj6ncWPOq>l85O$j%$H^ZWY*pEW59a5*Bj{64YvBY?I|t4s1>B5x~@=?2Id zROJ#5aV15le4=7kTp^Ptc2NSiAS57xHlWX=%b<4N0`VaK$3M!mGr0MwIzZ2Xj60`k zH5Biz=L+kR*qsJ4=Ru|ON@5%g)|}G7moZT`jAiuFsT)VDamxlo@znXXqV>BbcJM3Yv>J|0m?;NQn-% z2AM#r1sJJ!Ksg3H0iY36zwlE6uX~ z!=s+YAMMb?^XD`_|h5AY4R&Zqgl8R&uI zAxobp;P+NT`srLAe{c%Cm9z3nnpToac^#-*Eo-F)<+Hbp>#<|dAr;cWk!+IAsqLe< zK84flNH*-xabWun86Q!uD6YPB*m9-Pl}lmuV0f10jjWO@3@{(+PWDk@%1^0mzaN)Y zDU`k{;}{LF3Immb9MB-_gG66Y8~k|i{saSgo45*upJ1CKvk4sG5>@ov8%6p9rr-fl zs^j+~)`WF7uPp%;E&%`gE&295__ zG803r#!N!vIvDfYatXkJK(j+NQVYVKXtz!EL2rj={zO@SPpRUgpxw7M>+IGw>Hp49*Gs)MSM3up6J_n}?V(*e4sa(963LINlLCg0~%C z{oT%XrV)<{w`+s0xb7y{#}E*m$0%k54uo<}{mAz$HHHw1oFyLz?zn+GLaxN2IZly(ni-<7YMMt3@6QH^m*RNka;CR*AT)C9ydbW2<|eCg#aCe0Vo;e*@6Dh8@DIKhg`Q!DP5#0Ytgf9q zp5IW-b(1-UyP|uBp~MEyNK@6Y0PN&`8$nwvU*}{4qaJ6_*1jXCQtWTnk(;j?U92}+ zv*2`7iWtWTDc=5%R!MzrYrUb$<=kX-bR5|tAE97g9OmY8>^C2>aXf@g^Wd#Nm5i2)lK_3tIn@>wsKJ3Wp#&f;-O~dt-)qSyUT5c(+(8;!b$A1H zY)u~_g(&H+g+yXR5+f78+rCSN^?G+J&uq{3>f!#M)E6?(hvk*5^7Q&dNO0>xWzMny z=f)J{L&@h05lkrs&-0@f&z=(wOUhZNAOaSGW3vX+k&ZLKBC9$1X#qyGd6dSAv$EAddxwdHufmbS%Syl`ADV;R=H8hk~ z6{JiO%dD6}nl{YRSU2f4&ep&&;<7s`VA!0dV2id5++vqAg4W^^(mldDVQ%*eK>N@+ z+}M6h6SpX80lD!QJ9kEz+;G9N8fGy2TY_InRbugyY}mOxYcO3~U&GRnBZtl|i!&s zOpxR_3~=9&{ayPiYcozMGAp@++qF8+rjSA7N>lBqf?)F&q@Mas!zof8calF|QwnmLu%CCmcS4rVvLsLGj)xg$J3 zI|Fqe{P|X%4K{lysFXl>F1e+4rsb?V$wsHs0(;2(AkUgxsk>~ZKlCo$i@S>>a zpde_;xd8$89ZkQ<7xm}md6Uh*M1GEK5+<(1Q`mEs1H(ny+?ChEGu~^aAU_El zFbH{MU;yn0HUjp*!8;hZ;6+yL)+aYlI%1NHs9?Dx1zS$wDX-54a4EE;<%s4Aaq?ts zN)@s~1F}^Le)<(&qz&|As66lV`3#TNW3dKp~?^r{9bL9qLxW{{_ZVg7=HKS^{bCBkHlE~a&M1X0FtF! z7~JYU^+nn+Y#l+C0Gaa@ex7Cpv2C@Sl$c;1F1D;v{GHR_i|21YzWebtq>cE^p8NE> zx6hx8G2Y@jDeAinK`DB~cww+Wvn=UfU=DhYV@Z?A>h)Q|+=EUTjg@FW5n?V6##XD^ zO+;53E&AhYtKhPt|1~25K$*#cFBP*Ecq6}5ZX;~s@8gk;5lSEjbWr;zELfSsmibZlW=*Ak9#9F3D`n0!Ve-aq>T(WFQ9J@!%zoGRw#5 zAv?YF|2gTXn^a()*-!HJrv@!GzZk-5AJfX1)#uq!Mh8APhRua6l0;>JbQM3X$sMf| z#rTZ+nIvni4_fz!NH$6GIrSfZuqqt14Ug8_8Jr@4?xv}fX_&p5HjRN#P4bIikNK%Q zuTqd+n^L^L&l+FW&%M8|QF>EFu|sE69|B|nWd4p&R!UY10&Qv&h|b`KFGmj7_*jHg z_1L4TXtFmt<~dc&P+i>sQ+dI;vw=6@Qs9O&0lX3NV{=njC0%|4SiR#j;H98?f4?lw zONcGF--aXDR;>Y7QaRgn7uW3|4<>BO8{h)?w6pAdQDHK;&l=>`ps4t%jfwizwxhS8 z5qS9a0EVp&3uPXy?x>M-AD|@9TB`@%`w>>3XE*xjtMH@!-7?>1#J53FxhYD)CLjXz z(u*^LxL0oqOu*BGeDUW%m$U{WZYI||Bi0*{s$neSl)C+{x9ifNYED%y#OnL|cD~K` z_cgZa#-<|#7$Lt6#MeT4-Gp}|vTKjx>ms;-+_pr<$!dT-A^4`G!GA^q@f7Kq3B2bh z5F@1C^l6ETb3`;;Nq1Q0mU7_?^+VD`#0JqPMq zXU|M4cv;U9X$rZ$q&Lm3dVSkf{8#}%U|h#r{^7Ju3={+k_Z=wMLjFkhBt*gEU(T0% z_6O4{JwGQjVA(w5ADx&8$3?ls(yz*8WHz2bw~BI^IO73l8KX2`!2b2X)wy;~D!M(W2Cz+kYRynVbI4oJO!Zqbs@vAp zxM_XlkYVCj)VVIQtCL9`4t27r_d%WAVIgPR{!R{gPeAyim}IE1K%2XG_WC7Slgq{A zLQaPQ>|=!2L`FrSQOLpEN~I|Dxsa@**m`%s&DOcFI3;6uBiQc^P5=Z5@YLaM!DPfk zdh`}N90nHkI%O=PW_pXi9E%gGZU;Rk#DkSXIqO+1CX3T-vU4i`Hj`B{{CcoA7=AT) z)IaGWs(5eFcb>+^k0a%s>UjX=LBKWN8OgX#tze2&llY6Ut65@mlbU=@)mj?(Ufv zo0ofLlc`uUx<0|K4mW3SZ~m!Aeu=tw>-ndX_&f}Ry=f`!uKvusJRCbqm#akAF5t+n z9OJQ&t5CqA7H)UG{T?aVaYl?Wg4Xq>@y|i}WXUTj^WnK{z5&iIE6zy;^A9J zsxGnZ1!8z@Hi4e^ZJ-&UyENoK5}9`%thzj8VkiAhaBD@5QwTtSqmQKxSyNVNa?v1n z6Z#6Rg_};Md-gqLPxDq1jeq((C1|fP5h39s8?q!FzLT#Asj19!S&@Gc@#=LslXw)gMA+K&Qv%gbIEb;#eN>i?(# zSwz=@&lobceUV*rN&6bddo~b$`-4d9Q40Bjlfoacf`1qUW<_QrY7w~YYy>SwCx9;- zaOqS&5$e7nCsQY2;ZCPayGFkW!c{lSB}UaA+uwc&1MN%=={(axgRad0E24}{PH?4m z57A6=r@17yQ?cs6n&H+zP^cK%f`Y%TW~~lHjS!#RvSnM*uw`44nOk3Mi6Ruo$19j(Q-O8;M*}8XqOBFJL<272 z8cF8R+@l88)+$;%-&rg7Vz6Nb>X_As zUwOyH?>U|!a$3*_8z$ba#Gbn-j0r4?dX9720$;%O{o)r6en~&Z#Sx6vSj12f%%_Le zV5r~pop;=9xo#?0j_R_7Bp9{YlrwU;xwM6K>vu-cP# z5uwua(br$^i4ngaqPV4nOSSm8_Uu`vb(a{xjV%k}%~rLN8)(8d`u5tMC?~kB zYE_)iMcUNIR{0Nyn3E7IIy}U|n*kn( zi7SxPR__pMvAnd7BhrZS8A9*1v#5c4NoU_eYzg|^j@379Co@$7!O(6MC*1` zwLlTjVOXpTt@e|eU7_tx8vj~-^Rm+5T*F(!`8UG!*p*DD*D8;(Du}rTDJL?eK1926 z|1nod-=LdvQ7UE*>+sS!K4$2%6m%=ovO%4Ot;gUBslC%{41XGeskOQWyv%7fX+X(5 zl@Qi4C1-A|vaEskK1+cGPS|6AN6(tQ|EZ;tIEg+v{fp#i0d3Z zm{`XF9?pDuSuL~^gZk>w{5jHJT4qI+5_)U}5x8Bo(V%ol0-i>0l!8A%{>jN?`~Czn zP_Izmso(~$aqBzE!m5dx%h6L#!pfQ7HYVBq=_j!%;cVZr)>h4Pwd@f9D$?D!fftEq z5@zUX<%{Psc3b)^to=lY(u9*Bq#gVLh?67H)A98n3Jw_tAvS;0c-l#vMbg z3>4n;?esa07~GUV_o8N{eYZ zOZvm6WQX5h{<=S`^K2rMuLj~b{q>1gGa@zhvRQhLXG0I_?BSsUhMDU*E=<+bKW5EE zLgjXQeK-&Jn-PCwi7cLV+d;uT9u9}sSc$b$$#Xh)t(u-YXD^}lsRHzCZO)uLPvU97>*)1mWpt=RB!`%W z3QB)ea`ph?^lfFZRq-pij5r^*R$0hpucfAU<@tH8!Y`qx`Qm(Yy$yc#Q307zBIlMC zo?~496PUa$dQ2z)A5$=7$Lo8_E5B`xic-4jyoMAGS{c!i!ycCMq( zR2}-lb{>2Wd<5L$)NA3!E5<#oyJphA^tZqE#jQv9S@CsYr`;29evP+W>|XKraZBzW zRN_~QdCTq8O-z~kSkcp;Jt65Hx6smmMAUKAl=IsxYTcCce=+L`o&Eoh1$W^YIOLAl z&DbZPvuqf?y&G})|fV9%z6vy1(fdaM$X&W z`E;I*SLr-k`wn2384UkwWBuE5t3?64zXfR4qFQV-A!AlN zQnQ_Q8#yP!bryCY*fh31T&^zYCAr)Owa&(|Fl=t1xQ(y$7Ag@tM}R3F`1pLrlB35L zgKzpCeF8Fsm;ZdeT^4fP8WFp4XFfF45J2-Z1XYn+kvWK>?~3 z2cm#Jq|pDqw|yaSx1IpDU}_`HVxCz$P!payN7iGfT8KQgaSVp1`Jzf3Ql;Xca)3bk z^qg{1IYs=D*dW=v;z>aCz9{qrG4R-@RfA#tuKy%H# z+Vso}L|G}kZf?Jj5T1vDxzNU?ydK7AhaGuo@rVCrA**W=A<8Q09mf-be>is2fWN;F z7XSD6KlJ)7p*>qIsqs!${)b-p_6>#k4Mbv^>+q%8qIH>8A9W2kZ2!#78rRND1GzFT z*GTjTzxf7jwapryM==G6z8O~c&Qwr>3qjP8Tpqgj9b%6=*9{+$wFKCYrmP~F<;yBl z*{jC@9#%EkB+VlQ{Ua4|&;7J8W$~s&Ep*p0YDm-Fok>4d#@#LulS(Z-P3O&`lDw(r z^zg;BA7q+W&=oHJKzKLnzP~K5WLMu&4XiG_ew4p$kCa`FLZY8DKK1l3&zm)H5$Ik&|^IB8u+r> za7n8TKEL-IpI_rf6eJYcX8>>EZxn!ue^-Lj2_(#!$~?V(S&vs=@9nJ*B3VgJBj{nw zv|P_&H*w(GlC!PG4K{c66eV-SW`xO5Sl0E4bf@2;YL+XMm+n zeH=6Of)~+yN>cvp8`8?q#=27~Vvii`@10Ok3#`AQ zpI_e<{n)5xkS@|+vQzL(y;*|FuygI=PK-uPPz9z{q!0B&m2Hw98@vX1W0CVOLvn5( z-?Op_Y2QcRbo$jJ#mcBN>O*5}!Uqi9iLRKW=~BpmzX{heNZr}Cf|31AHwnijkVToW zP;I~a^`^OsZ~F~f-kV#U(jd0yz5TvzucOs?$3O=UAAFD60uBz~b$0yP4++kYoLWh* z6IQbM)X*o!HW3>gcN2QCy4pJRU3lvFCr(J>I++Co(WsF>E4^5bekY|yPMjF6hS_K% zT+pOi%uYSjQnbB=8KgHS;frl|Y~V=F*9W_iJw`%~;k#nF+2TibYg?E@cdD_V*DbAn zMu&qGVX-V?k=jolSiKb14}u^)Q9UPDHIAwT^=sQ0f&){f07>jX&u(IB&2=V3$L2=w z%P&Y1x0$<**_c0Pz-rI``HfkH%-wR-+oh<6t0InY+{W$#g>2w<@8rsB<8Y(gEp;kl zCuBbLUg!mXiyLPvSLJOki+DDv4vuu|yP;#@lrHbjZt+aVwqZ$ZE#{ppCJP)bs?O~f zG@4wjLrVROHD%k0nL$7sb+~!bBLCT}^$j}w|FZXP%WYg)o8YUUD*h;vzai4HEUQFX z_GBiK5DY;O1VJ?Ia+E+4Bq4zS1c2137|~Y~b1^d)b9#=s>zlcnN9m64=a^Ziz1H5j z696gsufIF&3z+~i_i^pD*YR7+Y2Y+g;Px|i9WB7O-tw}7bHC3?rsB-3#DSq1w)g-2 zkKkN+_3!OW%lN*;R+SjlZ?;vDx`AI}m&&p6E0s?+%{nmkdsXe0);X8#>PMgCuWLWC zWZavcu(l-$<2z`i-V2r&5Q*TtGA{@%1dE--v5Am13V1^>wv#+DiJ4lM+3HXuTF1RvE zO_MxkEZiCl8os;!A^t+8^2x-qUY9=frx41b0DU63N1J7Bl$1AsI;z({eBx#bRYO)O zVshwU7SY!tYrpnf{^SFP{N*na0bZyo9S+)T+U{o&){S=5koS0UM-m!itMX&{K7DU% zZS?Ve11Ult#6} zF!#kO>i_va{Lla8|M@@v>;L}0{^$Sjzd)Hwf}|$^N63wtoDx=}6zyIthU2q&<+wjP zVVg0+)_jExq8L);m_GoXf$N?=58h8l!(+h5Cv_LX6eiOOK;>ZEXa!3K%`Pww2ODcm zPWq!QuBi<;c>T-8DUCsv2C-1cS^W>zg_%mXP_ogMkcA0J>KjSukcKv0NiJnZ(o^#Bu*1p}|+1}on zpZ8~jlN~Hr-an33U5=D+j@58hOS5^bv>Gyp9|C1tu?=Ugg_8A?sgHh`R}VjS{?#CvOgSE=I4OZX3OqS$Z7tx-guh-{Ykt2_a}{~In*J(j}?IVDU8p+qCh-B z;=feonTp5mR$l0?@7jgHDv@5zKd;1SP-uCV%PdzaQqCE9>MLNXh*k8eLOMB3qf&7{ zID`-Qb}~-n`_1v-z5W>KV7};|4NioSKI<>eU)cc5O~^1_490+JMm%hGvN5l8`&WZ4 z8HB#N>)<}|-hmilhOFw3E(g12$LVWm9FCGV`U=GO9}mtE7|U;FGKNA>n+u#1{a~g< zxf=7qV$*yn#Y=S;pG?k(=y0sS>E_bdufO4ZD6X2m;!;QWsKB_m!Il-HV$e3esY^>v z$zytBXl>J~!;)RRo0uydc;kex5iK=EVg1@$q_mVryr4D;W*Q4)Mm7`Tsai^^ntg_P zQ^mvJ)tvfOZu~aESPvG7`C@tbq|xNez4e6tUipGN?A1t;t^Q&2lWg>_zd8IJ*w<>s z2j^jZIj8~cNf{j56+!EUe3`hnK4!!1Ve(HVXK|c4T2L>4X%j(>6qqXj-jd{{BIY|U&}edo-ge%M0_!b>eBUh! z4+W?e8m?>H;Y8tQ#AQ)g=YVt;_ki{UT*c)F$Fmbr}?>|-S9l1vUFm68A04Yp&orI!8=*iJ=+@F15 zt7}Oz751_{y_}=v5&KX#Ec|F=YObiMUEx7~2iIFw9hdnXkK2Z&SUX72sfOdT=qL@l zi#!$^#0};}B4u=5L1$)S(KfcvhvUV@R@n@voXTz%KQg*k@Yuh6;t@=TC)clBuN%{$ z3(?n>W4FRNDAgF+yAkchS3Ne(Th+?FuL~Q9&4vB`xczQ$lu8Wo@>y{^{6g6>^3S}4 zkYUS~u?*%nRVI6Y{QaP2-GzQRw#|W zS`~J+q9Yn^0IMr_x{+b~Uj*(Tf1wFK8}pGN>EtheseC^zS>oY%;VqlI#fR|z z*FiVli3s#_C!7(LaybmF2exDw)WG!*axTdn9&{eI82Y_R+D0>25UfT`foOAzm(33a zTRQF?B3j_lfn#=E-u^Y6IC+?fQQwRN*lb0@h>%fB>1W(Uln*2EL;d(zo(#utt}Ex5 z^C?S-yt6kOU2}EdM}PbC-;YN9@teQ>861F*{`TkbWHvY*%w~hx-~Jr&Ksnj~5#?ZT z6tnG?TFJx_`c2Fc+Fuf3G>y60oO~}7X#H$u1b{jK61luiWNlq35yJKXFiM$JG{UK* ziu)RM+?P~x_kxa$Ll&*ZxA2DdkEwb#;9cL?@%;(!0eQb#ar}deT`c(;;;Xj`o~|?& z68~?yij(Q>7jZKEtTjYXvBFxFeLMa4xq|HMxa}hH>z}cX(n4X;R{d~;_58G12!+7f zTSmcgVG2>Vb;*X4em@V?4r!c81o+U_HZ+WO<4MU zY->t4C&*X{e2eBDvAFgg(=WS22!&Y^V*8`PZ1J~0Te(Rv>^>P(2;0eZC`yUxYcd+; zw;TrB)x2@I_M&6a-U{O}_OL*%@`YM57Q}^cw6U+1&|_Z!D1+-|a)&dlZmbb7kFm!E zsa9H0u{Ij<9Q$%Oo?b3i#IKRd_PQhp4l|67Chv=9RyGn}k3`AAi*TOZ_^+3;VzD!C zi-RD>i_iPxv!(gT4DRGyA+ZEs9@$D>9cV;5NIm{{o;Nngls<;owC~HEtX>Fg2)0HN zxgi2Jq!*|NRG>B0a~SkTz_?eX);J7lFHM$35>;9JURlOWG!QV(<-s8v5_a*KFqRowiaf^K4EBK7CIgGl zCKuDuU;&R!PEVuq-*hklfc<$93!m!a1!ak`_s(C|(sL1~Uj_30vI|z4v@DpNy^sac+uaX}X&6!zo(Wmob#@ zk0HsDFE-!(K-Pa}LG!-;PygZn*tq_F2VRbe=l&br$>r=glF3=l8(Wu<`{ZnQwi%g9 zM1Y^Jj0F6C#}f^1BQ+Fbx^5&ffZH`LEU+K#-%L(mcmD4qA`HYuyq=ig9#8wT>vivO zJYXT|jwWXq79q47b(;i_RV&|qyX=UNVi+@USmoL9FDR+b{@-i8`q-0OB6xTtvdzeZ z8}VBxEyH?<-9tDUUoDLV@!wuQbnT;lNC52G=XIRTfrS*82_ph*iR*X_cqxB1YfULz zW>oyWq;A>qUQ8DsHp+$ugZq9u87 zK^XU`4-wDc8A&X#?62wEF`(d4PAnlKmKKW?^A-ELDlVG^t%MO2kCVatcs86;%Fm5^ zfs$^8PVh_H2WC_~37v%a>@k8hc~6&Pz%R+w;Q{}h+w<$!n8r^h6DnJ?%94Kp+x2@H z@-I$`Kiwu(ZH>vVYcE~BFP~#kE;V0%)`C!4L^0YpjPsz0-D**8cpmtuoGm6Jw^p7+gzke~n_KweI5RE{u zLB<(0HU~`bca_b{;T`GZ4%K0uS6)%uS$}r&s`6Fk6&f7oueNrvxxUo@9rrJQ>mzz5 z4F&==-vI(9U?#hYu1aVWze7XgAWq0LK<%Vj=~w3cs{sLNVo{$tr7}o-?%)Kn zG8UD|_;|1l!C2T(G%sWh!zd<)0E3en!xb)+&S@T1H?n0Z9P!KzO#I+fjjcVM;%sm- z7%ztX5d{*@E2opuX!35m^1=ld&oLyM+Qxu1=p5A{D$0!E!2eqL+n?LcO7XWpS5Q>P zHAfX(W6&<=gIQ(N|1g-rRzn$d`1)cG7G^eBU|Za8e>R|1zJsY8)EI`#;^%kggT?t^ zR_XI-hI2=7gOgSHAP~Tg>xkPcqF8G=I;(z@Ij!f)h_F25}D1Ed#aW^D;!lItqu7 z0_@jGM_7@x@X3!=HpvFw_t7MZ{_KQ;)~AExDt_$J(fM-83!H_}diLV*@B5AXNzKN| zR~}U)HVRY*wb!{~qDq-A>JwUZao=#>u)WPsME(#6StZJ@x(NI#a+oTescK~b5#D%t z;VZlTLSTHC7vUd`?~g|JLpPh;D7{~;l*IGnSo~+ruatCg%@KS-0N85#@j76DkNH}gbG&=!e)>ObNHy?{X*Al(69n-3ObTji^{ASZdbSBz!pq!mhu!U4HeeDs4`(Jh;=gyQBSGtTHM z+eSO(9IT0CY^_Y!I_iTgN>4OSD93~|Ot}ByyaEv(gARY>1 zI)N5Rsse1U$a47;f%{v$@=`0sJNQ1 z`e&FX{zOTr8wJ7v>oy38h0ew&VORW7J0iDwM3x&3JvKC&zu!be5IVbzL?Yi{`qFi2 zT^QwU;Z(M2n~33l*Jov11N@9l6k4gW^Dzf<%L2fj@l} z6XHwVlXS^$ZfK-lwSq4!FUqGJ?9rz}v!E%z`j=01>s{Y5iT2f^?HSc*njSMxlXd;$ zkJe03cw6;tpDGFudinJ}=l-!Mn^uc9ZU|=BtzaI0nd*UJsAcV><`?bRk>)W%XSY(S z){sh5xHpzHTV8&wQu!3#m6T8;_f?p(;tVQbpOj^zw_8Ci!f*MJ>mr%p4IyOmFJ4Qp zuA`(PCxJ-iSM$bi0kK?{5sNfYs%gSTKKcaz7JkBg0L;CZCL3W3JIfM>qBa|Je1%pC znKYKKi?clXZ3V-FD`1~$;6+&8ZCvnwvNzH{{vnlA`d7YBp2hljtgss%KXpTQR?L5O zi_ya8;Bqk&fR&4m-fP0M5#d*XeW-smxSey!|Ex$`qhZ{)WPnc4JbyGeAF_fNb2+g} z+5e#4Bk|ji*9p?qjS@Sj#^J5uY+mABf(P%g7eJj#sOI9^bMhfMPX-92s@a0ocq zcl~*#e|$Wcg404AAX2M!IEO@j8XMHpQMbkXcrqPS`lnKmlqOi^!g15t0D!yL(}J(> z&-xbwQ1S1K2bYUkf3!<`M}D-?UY2O&;6tdKN~e{h;rIl+Ig5$Gz`^ETv0nX(>s3!?Xr9=vJY|Ez z`CtZKxXa`7!MySud@WQj4_sU`z)hG9pzA&713H>qj!!DDM8WUEQoVvfqC0QaAJ4(u z5O{jTTY>bsKbc)rorRz_p!x3i4Jy+T=Zte$(N_*$2_!?>-syncu3Wazo-0tbE-wc2 zJ*`%Y^$q7A#>YrrQ%I4YBj6gL2jR%Q$$tL=&<)r4a%-ofA!Y-@khx`cb|WvI;jqRN za*{)-NqN>3QiwLBee>n79xCZSCirFf%P#%jQ`Br=cu7mMlxXn_P}gsM2kvj~DnI+VH`6G5dhMAvb2!HbrooyI!pC*f?Zu zXZ`VqA{~t<<2x9+$P8kWClxer{m@17Leia#{dHePIsTgOqhouyb>5@f-Qp%Qt8&nJ zVqz^_4bu@7+GSaX`RrU;iu$?3hVXtQlu$kZY(SI0PsGekH$77H zdZ9ZW&<}<*Ux)*#}h8yFAuUnvca_}M5E!wJQjd2m7Vd# zh*DrEaZQYsNyp|S}g!lIA$X!SZ3t6s3kY-|gmF+I9~ zqU!Sn$-8$@l*8>7MiwQJ%H}I{QKCQMRpmeZkN=yh30o!fWBqw3sSn;S2B35l2n(Br zvTSr&+ZQuchfpJigR$%G;b3MH6g*hz)$1NF5ms%HtpW!0>{x@B7W1tLhH93*$dlIJ zp8|O52K!wuha1-ai#qsl4BN#zH_ZSHUX|YSCo1iYX?<0Cnhs{P?yO>Bd!R~8#{E&{ zdER|dSxnw=7@&HB33v|mCg=_>VRZ}-#;{Zu1jy>eEA~O_uk_D=;Ui?TwG%8RAo@U4 z7=`%(LkUlYr>BEiv8g$pc=s!|HUKE<`J{3*S)3CMqX;?cGi&bS>`7N$^a+e%IOYp} zP?^AEf$Q1Zf-HGn(@lr)u|WKCTUGT%FyoN|jfaBnt1(F|c+&h#&kLvjmCQ1qM8nx| z5I!4KPiU_i;anRhE@|I!QhMn_l;c+QE!-RDi^X(zXXoxW54OMF{(AfF?t^>x?ru06 zu?`R-qF(?d=>S=oST;oaR_PGkLo~!l=Sq<`>fL*-w0nK3w12)r8LR&$TNJ)nzE9qh z!ASfN0M>#w=7@jml#WeMvBsnmR#9#ljv0I&uAQR^;1Y*3v)&w;6e)(@v&MQ~aJ)mzO}65%IT=T5THqRVOeIy1|MqhQ7E1S=__1mw zlv}vpPY!`lIucBhfBXYSFgdMwu?~|XBwZJ6v9Y0{4W#uv(#HC8nZOpgTz)fA3*0)t zgb`*qCWtVjFL$wZKS-B_khSJ0){}pjyw=a2uxske&6~$*CvJN2=YQUxw*hl+?aAAq zUpp}Yo(bms$jljjZsVU&K4me1N4IGJ5K1+eEj|!vF~7`%F!5|8gwL%QNID&;*kzKH zvE)Nqf|&7rVG6uhWilO3c{&?jfoAMX9xOUPs*DHkDy{z19VPnz4-{Ticx{AMSWt`U z&F*0FJ^5Qf3J%_44dW5Tm)l?12N(H8BE?J?T67@b?4QgBGY4I3Mqyt7F>!?G`s2%s zqruFQ|KG;G*_6Wx$<1)bnAP33&`-{4!kg&D_SuF&lDcE@@BMAHpzIYjhs+nVOK=IW z1G%_$Fo@m2`pqZohpGge$-|y7UoC0!gsuH2yJSI+c>$Ih(y3nuiwmo>tpR}anTrky zI5d9ewh@qpabnx9QI5c)cQ21d!}c&qyXw*34A?OozvqL|0JH{vZA$8qO9W!| z<#G&}xO1aW!U!GC`6t}|P2zR@Bjrlj>1^qHG6F~8aPrpB+->L~ttTGYZE(s`^6?gR zDkLuJOv`BYYIAEFGUewk1jlPm)Oat@0-q?J(n_$z!2>B=tyJ-hj4P?q1!b7}|s6&|_na*}A9@PgCLwZ0WXTwGb%{b(UuKJa&Y-~i@fa^RG zwS;6rO`sL5_#)f7BJY;-3@X2;r`wNb4w(a53pcldA7gwW&KrV>ib+iupS*qLGxv>f z@_g8IoUoVL{C3soI2e)*rT>OxEEYS#XvBdC6%Iv^P=o#)+|?AiAl78ec;(QCcjS8H zKnHPv^=HzSI8y1*4M&%=P;?+;>>Wc8uw1>7}6Q39L4eyU8SWT4ofLWH{&R%&=TD%Za``oze5+cIbv{+0dc5s&-U zm-%%CtA>@Yv)7@Q3V z1O4cSiu+*lbcim0B=UjCa5Ps&hUSL7TNH^`=#oYya}xaIRL`7~jDOp54@8&8wHwhk zI7u!TNrXY$$5*?r!PjzaUs>gYHZPcYqp?BsP_s*0N`GkRgI_d_RWhvLPMznqn$wruz^kQBl4F&tmIZ`{dtiHKyJvIpR7z!^V&HZrHJv9kHd zSbfWfxnx0@wRsD|gTi0tGAgw~_?Pq5aPaQOZD;7=Q!<;pgYz+)yxShnsj`LJC->~u zkK5A8k3VvuC6fUV?uaRV1FOa8a4Vo5xPxuTij;^PNYJF5dtjdy-|Q~d{L$Zj{rWfj zUI$_xm=6|PmPeOva(p(10E21q=9<(DJ4qoH53un^XBrkN04c(!Re6=~RKCEf-UQsb zZ5D=8c;VXP=Ao);;)dLqq);FME%i@6Xk#WRN1iU^<#51HK@|C+^0ieisnDL@816TT zwlQ~3)!!rck$FO(Z~4*kTwwRSKRN|Q^y+^gU(b&7>%ZEyE^&3Zn`l>Xp}!j(N!UCk zJW~(~$eQnuN0;;A)nN32f^loz$9Kkk4DPw;F9tL4!-G@Qn!G&>jt4OqP&2a5m|Ws+C9z0p|=< zDt9Wc$ini9?9g2O6Gt?!yy{P%4;nNRQGGlNnm5M$l-EMAgZ*OhAQphA1 zX%C{=+yy(F430;A4vM6C$q}gXmZr&g0MtrgZ^SJv~qX5@(K>+ zQGdqSR9uxpSD%8HC?~aYG%#RmV!f*@X2Y|y!HnDd2HHFyj7A8XGU|VLR1T-3hmy5b`5w84b!z5%hYj`PDZ23c(6bsTFm;Vr^DmQ z*+en6T+w(eu}dLMLA7y+Y>K8;V8!tKDkwU>tXTOc2mQbA=q?1WJH10 z3d2Nr`6Y1_EryS>4Acv$K_?8T)(is)^64mWJ&WTU1D~Al?h}OJdP>m9AU`P)&5`Vt6&M zZxhrJ3>F7RDzTtgR39^^N0nbUa6h564ei;+Z+`f~Z1QeCm@&Pf;op#6AyC2S>wfeA zHqNhd2_ktD!U(jPUGGtpVtgfiXGeyBcB?sF1%uHk+Mj?YysK=Yu6X>Raxpm>%n7^D zFs|2^^Mz{*?|{qk)SW)ClWlub@FFO#1MnM$t%MBzUCR7&nKHl@b~steIg|08C8O~< zuuiyy=N?wh@#1~uj))JupK>c~;%;GUv|U?eU^OT!Y#uM(@5TJ=V7wlH1mnExJ1$x|WjZaC6Hm zkvrg0*OqIMiB4Tm^wTbn>RMr1_^WLXxX0BXEi904ZV;+292Sp?=7#vK7Q`)HS9Xh+ z#^#)E3x0QtF=p)2o4h+&`JJ6gGJ4nlFuwx`s(7;^5$;w_L2|UB0b<2%zJdY%{bVv8 zywXezZpr8Xb3#r&*{W79`m;BZxHv$k?Fjrhl~-r8{`CA6$$gOb*`Lk&i@}^51E=Si z_$e0?0@axI$q9YlU(89sn@ujkCJf@;@rUCPi;?pRWodF-_&mX?_PIFqcIDY%2Ep7x z`~W(aP_jj716~0e!1g+Oi>LPyki#~jZOu2GzBn19=s<8?yGEGU3LSlf(`9TrvfjQG zqY_Y|q7LZ`RVdTW4bH=Q!f33W11yC;0EG4Fddr8Pt_&dSCN?zOz;%a(5C0u^e`DPa zlm=Gy5`d9Vm*({V2x2xE^(n@Tx|GksW4e4qc->*qGJ&V@Q^h?XP3jxhTcyn&pASbT zOInrRrBV0%k~SF?D&8QMQnpVnX=*m;&pB=`(iZ)yONh?~t*yDy^T8ZkU>KE0zlBe@ z10GVs&JJZIn=}4yz=wQr0zoH+IRMiI=a29r$XpB>L#-T6k0^FlcR(VR&|+hCL~8Uc zhd7>J-P!uBq?G!qW5X-+cWelPdc70NuztIC(I6oD-EO4@cKh+<-R4#Rs%~t0=Fgp- zN{_-V(Wx-stqjk`n8LexI+?u#*aFl?N$Uh%N0&ik0to16bF1M0_hjRT0r!W+zO z<}+-~UDeV11aL5P{CH=la(_-aFYktPdY-_#Wslh?z`{K=eKA4bvF2eL~ zvJ_T$+aewB(wu!aqj>^ThIT6j#T<}pHlKF4Hlx{nR$wcTswLM=iDTK`ruQYnv+74~ zR&Sv^tJ}>ti)}etDA{0HDAIQs^Xa$hpGkUoGMq2|y!-3@->QGU=p(ks{Lj08-qZi` zG)dm1_SMNRJ889>Bxh-LkR*d@J4ybU?$wj*UJd?k z!+R}wpj$mmvezknK1`CsYB%`YOp*lt>C<peaGvk^|K-`}MZz8TlB5TZ zpQZ5n9J_zW-D4}*awExpuGW*JPNO+Xlk6As8Ha$cT%<{Ik>XD{_nOYO8|ku}Btx7A zb-a^PD?!UJ5osBJ&yysl(eby9Bxyi@SM^ALuo3b8#`|G^XDL3nevkL+(qG$~UmO3- zk|cxHkD<4#n%U51k~HDT1b&(FR^prZOCPqf4MfpRl1u&>M}i&KlkDR@eK|>!WRlWb zmuZr{Pph3IdrS}WbdHnyINfW&9FQm)LL>AS42b^1Zeh@Sb$GY|#DhK3M&P#All&g7 z%3dSMp3o?;dt4v*xYtawD;_j1r4l7BwJti$c(0XY(;AJZm1NIpfpEon{IurqU;J5n}(@hl1M&;gA28)WcTxmjT)6Wku*M96_3 zq~-wid1LXc@Wm#yg4;g98zO-wF0r5c`~Fi6r2zYq9#s4bM}@SIC)p@3TqHP-L*)N* zkqoiBX&&-lN7?Y*`xMXeUK3~+A8eA$kaVd#xC!9F2bpW<8ObY+Bs-y(kreeWKB`IX z{%Q#|$_ezEp4RB_;rVf=6n?pzx`95YXZS_#h5m6rKnn@{RfpHw^pA=s_>Wsi>Z#6e z;B+4Dd!x&qn@(hU=b3OU87%&cWB!aHSI2BHl}CSH62jf3@IOcOlR@fa@?djLqC6^3F5E&ZO<@}w?Ae3ml%faQ?3awC1HM51zt{v~hFBEw(x>M-SlfIKJr z_;@dOcR@c%-qDfd6V1|0_RO#mk+bmVzcic%d&7tIyJHsLPJ&-u%P&JlmM7Uu$DcZ~ z5N%$}x5x)*kfYq(_wJs81|Fm|DWxj+D$4j@;rp-m&646J)^JC7?j&Edf46Cuq?S=w(#-Ty=GXNV;_q;U7$EPx!-1)T$?@vXECrT zC*T2J`1lWB=-Fw&%i*u5`W*2r@2Wn65jKptsCN}k5r4?t#8ko|mai|XToZpCch!mi zc$4QK|L@;o$N>}n=ga^u$K1T`7(w)9r*Apd@xB%?xGphwcUtI1?U)^QN{YLqd*)Ys z8$XJETH^NRlBOlKK_jR&O$-Gg+$%4&}UNpx9mDEZZ6uQSnQ<+dMX<$VX833)xJ8R@++f}CZI_nF@%@1|T~$_JWw zli-Q1Ird#MW)y!;<{x*Jm`8k0w^vUZ_qeUEQ@6_vJ~-!DaX0WjbGi!tj4Ogmpd{l@ z*bOg%mp|6RLsWN~ovu+m$rd9WHBa^f1a$TqI*ZVd@34Tq{)Sm{ukpyC*65^ZeE#En=}6B)XG##fXcQM^FDt#hR-pEZ7wE7*#J3?sjrnf>;e zQh5C9Zi2cTs@v6NIn3?XOtOchM7hsDJ1Tl%WOHm#S6_(u%5IK)c~ahjE~gT$D!6qL zz8xP43?|x17g?A-<4gnEDb2_Bpxs2K7G&lEz%E2lE>vfeU*-pxm0k-=#OOmh6h2cyn2kxI<_*d=>uplH~ zHS~VJT&tyAmK~2C?3ydcF1T|NH+NoNeGuDaq1C8V zb+J&9kcgVo*vb1n9u(=NDh%#qX0ez(WvAvwYpFnH&6U6(3({@VlVqJGY?_-@5zoT} z55#v?#f%E;J>GNtZkifEt_n?~K%?F+=^4j;+z zAmTvw&AJKMD))HJE%J$S7oZ!^sBA!V8DuCN`<#VUQuynId2fyJHqayMnGoz`)l{h$ znf%%?4SMFNDPAu>Ma(xXqikqf_B_dRVi7x#Wl5SqCyV{i3EFj3V9Dfl9(on1)(VZ=Y-Vb^DYsoG9bazfI0XQIZIjVE$x*L>fAb_dB%cDD z(S1>KpNFY2VyLlDm#HO(1pYEI5qzvW(F@J7=%;>IcX$2U)YnDK6wJc-XB65&*TcB( z`nN5JhU44;EUS}pgZ3}F*X<@YPpd)q+*Jd$#>bxTvyBQOe)b)&vSz@&gDnl7QNhcfYzVbfh_}2T>tLtX4j&->EN! zrL=s!uMtpt&7>|05{}LUUj@boCG48nvX*XH%Wau=mfxqLxyUyl8!g`#^j)jM4RkB? zj?<4qzwbE&tL-*djz!z(NWnk?4M}fPS^GNO2(AEtw@*ZK_&mtG5JB@n# zlTYDp7IvWSOixyLpO!Z(cdlHB5I6bQH&wKK4@KJuvtpAh{MxjRaU3ll8n_l9%8&!bt9dpD^E# z?y^p+ZM@wsz986%APhx%sRxYEoI}ge*u%7HAbMGrQ(7z@Mml(1i+14dR=rL?`OWX@xTaChmOm+ zs8AE$qj$9|z$_;G;;7Jpv6C7Z7agljFJAgfj0)LkzWy*c`myP5q<_{x24$q+d=ica zp|NCVB@JmHg%@tpHTOx&#)~x_1xk{&n8xii3n{?_+L%QkHRhytXPb5+*9HzV7guhZJADR7eSeozO{E(Vu zKSbwj+X=|J*lg_4CU)YhjtV<0z+SL=+LUN!xn3?tH-auo)&kouuEn8y_*h9UU)30M zU9sZ3_`zBz3574(E8Voyb|I~8zr}HVRf~QTPH^f_2xdSaCIVR4Rbh>!>(~79MY@co zMwYba-=tl)uIKx!*0r?7!sX8gFkiJir7cF}BVt-AJ?b{|V(rMk3Z&3%Rk>(Y=64)JrAA)hJ zsOJUsLwDKqvBw?r()=q{$akiA17BeUABuCh8eLZ;h^F9%ErHFE?wPTuAZCR7xZ0l$HKbTkTdoD%o8>I zIis$zQv_0F-Pz{?%|$Gto;g{VgUjpEAf|jLUoozhy1>`%s%he6^0B(EUl^k0Y%t6l ziUtXLt2fK4v8z(ejm*Qc^IA9}xj4X91&K8gV|{QET!8C?%nZ0Fn5`JFGKnCogvA7n zJk*p3{AhhfqF8v0PtBDrjKom!wQ@pQ>c7Ml0{-X{~fq_Q-+2 zhR32&N^=L@vcPi>D9;oAJTbar8xOL^1c^y9ZdlVLmjsIkxm(A_WOUc7qfrPWjxSbI zgCv8Ksw;-$3SyA_AWpx*dwKZ+wsZm2s;4$$OS|AJ3GC^ZHKNX2T`;wsOEk@>M%Rs9 zZi<(<-D;zw6U1qmY`y+eCGVF9;uco5F9t{MB@~hKWZ+izf$q>g$s< z$xh1N4wTq~NMj%K@|Oc`1(m__=zwMr9e}~#>t5vKE>`v^bAymxcMtDrBtM478b;*% z;_6Y-H^y?=(lAOzEip}wl~FR#)2q^gE{2K&;$N321l0_59oQV@d$|=i;Si0qc&K`A z74eq?^gyV$S?@s+^{1Ir^iRy;^bMfC!>dDDkSyOUHR#Qbj2>#ZODw{ZAiz(#Y?N(#Yzhiw`x!Nz^S(c|{VLsk) zTlt>%UDLd=UzbjW!C5>$D?5 z6jE`N;(Ngb#Gf^DQMZ$TSd@PRjY$^Ms1^cVsp&wWsv1d-8IZMpamhtfHEYgUA^8<@ zv9q)|lgLYgmg42oL^c@rKMPeP4+B7V{a!6J76&a_&>sip7Pz$4YoMDda0yqr%LaHM zTUmeVQ}fG`U_Lf{Q8=H=JHFbF`N=E@lg#z6DaSAg#@l{um%}_mku^TnqH7Te`FB^q zI1iE;LU&!P!Qf$MsHsQW3KDF!t&Sgc;8_c&_40}P$zyn6Yvtqg0x9(s#yu-vS=oVU zq3ytLsiY-DC*hk}QhzQ9?-BrE5(06n(~!#;geDC73;+~6MHoy_&K*ySC7Rf!1OHTP zgMtTp>h4e%*P#Xv2f^gLLM{Ym7Rh{+ zWLv@LYzc=UythRjOJp%Zp|G0wHkVzESM>louuEyM?3N)*x%}01e|5rN>joZ#VLx%T zy2e7;^wM0-5W8OF9Ob{#XOO1bKCFnxGP_CgE$->Z!j&x-%VNn+#-i%w8ogJGz}hwZ zT-dv*UKQa+`-vUq`c;|NX16;8Ty>Lmd=m4!R}{Tk@fworijVL4lcTx)Ozk zD$@xfEb!()#Hx@W_1Y9^a+<|LhujV?>jv?CAjQ&T-hK%8yO$)F1jSSL0KlZVrn{-V z6Faj2Io8Z>ybvZAcTe8CTU+s<>cR?I*dQPYNFlD93rSjNcuxy3N77>;f-)xEg^XjE z6`7;YNV}|uQhs2A74G-C7H)}%2hmhPRKaScd*zyy{q!&pMumuowsX-3Iaw~*zZOD? z#gfd_N+DyM=0*+@H0dKmUcI}>7S}w^;Wt3 z@On+@cs=qjKMUR-m5`~|xA%e`NBv8OP%Dp_$T*55Bf657|e5U2Y@jiG9QX)NgAJ!bQ*RIEozDfnMX(yl+fEXla-7KqKB1#~e z&b$xax%57GXSuu|kEFa&mrE_>N2L5DdGqo1!)w4}N99Cae#Ln6;m3052b9-V@`s}J zhobd|qV)MZX4)Lv1=xihMYr};bc*O~F3i6Q1f?P_=P#^rA8;k2m>jX9R zHSYFx>VU5>Zu>p*Cpl}h&m1@!2HEqG9!k`;&5gJm!sB>CS--iPo@chvjHc{&PQd{+UJ zAmIQ_7a#E+L0FSw(@kj_en%t}T#+WFeq5$pF&6l+i-aS2#+HzPrAhc(i8j2S0pC9~ zW1~8zFoXdGluPB=Bg05^8C_r}{QG>L3NE*j-m(SCWPyO+)u6?%(=f`d&QWCvW-r$? zSvKAz{9dD+VpxG1O%uN8)0*l8CCdz3ew|AsLjHLD<`Zq+q-@fHASPxjoCZ@Emn|70ifB#9s&OWQoK zZRUW;CNVVMW?=}{Jhgnn#{)J+Mgzok{7yx?`o{FrZtmG@5Y1g4KjYOEAMq(J-LS&(H>G7JViv>mT=*du$;FS3fZ-l zYcv>D=i?**>?>W>mqwmRj>$AE+0Dg20=O)SEAqb#5KQPJ&H`-B3Fsr3Dh62*gfPxHIjGzAtuw5q{ikt4Ya}r zP+U3o^M_odIQ)7}k{1YJb!anht|OYZptFu7#K2!qNd@e1O>!uSl0AX`lD!Uxnc`oN zYMMPWdG1|>x>M<)tm+Ls{V+4^qN`95e!k;g4>_d*#Na@CXmbf}=q~Uq7}h=w6%Te7 zs6qSbAY1B4&2m_-7fvvJY=FWFm_f>uq+sNOrRSziOUwHxqBQj4rk;hMw4au9{2@mkBmk}u~S);jTDgM zX%|VjJsA@<&j*J2K6fL2qDeKEj$qIrUp|i>%|jI2gOH^iusexWR<=PNpal@g`p^}H zC0nUVR`ArlZ0`WrYh2HE!)VBs%wowrSWMXA4Q?9h>{9|A85=Ki%&s|hP8~m4? z#DutMPl_UvfOViaU8-`aEUftznhAHHdX;03@a6q9S_|7xA>6}UL|~6KCkWJ5l5EeB zY%e6)o=>uP;}Y=%W}zN(AH9})8t!obRISMl!s;QK!8Dd3UjCYZhD(F#~n5Eso50umcj5ghf1HD9bBjigiGz820 zV%73CWqIGq^1h8N?_Fo;sXxEX+@8egY1K5e5OU8ILhgaBsmDfvt|F&=(OZwvRO4;7 zq|JA-X76Ha_Mq-)@MjcY8fcR%v};^YfZMyh)Ho?$AGiR}R85 z!LmawpQ(0@;Xy1!KzA4Wy3G6>g94b>`Af6pt6pd?@g}g7;G@U zBBVFV0xTEyAjdXI3#RLL0bY|zJopdyl7Gylg<530K=)E8Ck6RaH)UztIaVhrgEnocxshyQxVGp17=NDNBPn@DvPjFAv3M@r^FhDAp+b zqDpipauZs4(4y4Y3o8?S;|9RVhk$aLv- z0OBUPU-NCdh$j*??e>gmmxFx-@4T+EO#oFdcUK&Ey{_5W>^0XLQ4cQz9|0NLLX?TA zZm`#IfV42IzH<&dsD*xyV@)EDG-Rs#h4?q2$;wu4EpqdE4Ao|@Zt6(q=S{Oly00#N zAU}^z*o+QW(#3S?s^)iXe!b(Z>_4)FCJppJ-?T26f)+=);mp&4iNE1`ZXl{sa0e7> z7JD1lG+TEhJ%fO4p>pXbfwbD`W!tiRpPoxr#r}ek3xyx8cmY4QJjJGx{@UH$U=Ad7Y;Q)1nDKtHhvEwqPG#rO^tgjAx#|XHLkBy!J#^ zLbc_9Da8D5ifiYJl^P6jhvOU{C+N;P23zg4?0y5(HmOM_KB*%g=;M@r?X0k5#bRB2 z9}b6}BcAe!jakvdC2-4PNRdDmbo(7@U<~1$tRKSys)KTzL99vsvx_x(0{MvIZHVKfW-c)VU8$7}TA?93me zj}NJ5_$}#UkvoL6m3=hJ`gpQd9|n7AomF#oolEKMGWEoO#GO6U#Y)nI9|Ko~g;{KK~L1|9QCji<_{^9~Z`Wu$7Igo1QE%*P z*B}$Mn0R%t4qQh&`K>xS){gd2c{Lnasyl##EIV4#d`HN)$K8-@|6IH2k{Dvk*psY- zF1wG*_;lAd)3%+N7RUF3jpDFKUKD8CqHilZzYpPjr#0${_kHjah*=m`k~=p4!W=5q z*#=4SUCr7U3o^J?nemR*D8Kcwat>q_+Bwt;sLOW(`{ENW?!#b2l(JVp?=_Ma4QedDZe4Vy}Y$)L$sS6i^{z!$a>L*KZgD^D-I(V^Q01l(%s&^j7(-4rEh~nO7W} zc>1=BpY1pmvg?c&syKF8oa~$L;0^f4;-#~7r%hPu%+DxvO4!ZlsptO7p07XcpLN>9 z)P!D9(oI-gM>Q;W{lE#lw||>;b{xmE<%5fZRg-vohqCy5+vHeT24ilX)0N$3zj#lp zN5gmbQ(5Hf$l&U=LEC_KG8cl1DEs@>dh((s+EDi?aqp%(GR-7^8O7FHdnxd6{leFY zO)$`cbAf9u9&)0BmcKO!Lf+U554T#NWz7jT^I)hlkHe0HtHi$DfoNkY<%w?9Q=1u8JWQDp|o)Sp~!dQubo^*G#6rVm& zVuy4t&*9kiLq!jjneT~j8fBB6rME+$#hSjcwH=CzfQHFz56ogOq>%3ySO;M5tJguV zy@tzIl2R(elth0iKs>M-(hWtBb~w=XjYW`-FM@O&)9X4Bq!$rEdJz$%OL4R@5d@`^ zwi7{GP6UAxFHdj1$y92{ZgQ`DlY{u}CfJmr^a9m0a%vH$68QdMGG)S{s>%JBKQVr& zri*^mYc(kNXfLhcFa&VDkP28|kDbPZu>)8svLu^`7rhN}U)Y!#h}3GwR<@&MlAO(` zQ7pCNJg80IMI028@G4<8jrHfuC1;OpVPs*qxCV#&MbBdBvKN}^78ZavqTxYlfR@!S-qTZ!oBq zKd7sE$P`0CqsY|Gw1lWBSYEgcMIXDsX?={fG%z>54JQbUKpL6jih?=n%$}H((l@D; zrMhn~EY6iGxv)mdge%qei=*$UY(;XE=7IYe;UxWODfY%KmMY%ajTUY6IJ#(ZSZLuE zSu`D!s;iY3;0Z!Ql{p7&RNWQImV=OQk;+!e*jg@sMJhklU1}9yynYkIcoWOmV9!l{`uG-Ha9NKx z;)RRH>s%lr%GdyDJzv5Y-`C>WzE&Y?xWL+#yKZ9%1tvq5=;J!K^Li@3l%Q^X5#@jJ zq+I#`Tt%OEsF@f?eHUSw8m@SDMAkD~ahC3B(M8vM7L&nv7xYm#rE&J(q-5j;DXWa_ zN;xKUhpaFS!+MbU>JW>#A#D;LV)a2x#q}h=+W&p9PTD1SAV(GtL^G?Knpy1`n5}w1 zf&h|~uX9Q0c=i#bAJNS$>@J!miN3luY;YsV@oH~vhw5_{syzdtAsUORafh6Zk10xT3;1?*y9?)f9 zPm)pQoGjlU2*tQ&Rx5tMnyYDGO)sn$=SX3nZDz{{&Z&AgH36_$lAY|)5*$E$_u7Md zUKre7=Q9Tf4cNiK=kqkAvo!!|THXk|NiuWGm%Pa+8eg4ILDgODE(7L4dY(BUfipr>SKpxa<>Kv`1wzJWPp^deXfUNe6OfJ1@<<-#x_>EMS~Cy@1+SK7uUr& zl~9ok?S((P004{jl>=Bz2`ui%QxB1{&Q~+(@Pw#6+7DeG>V~MJky(@MH8Z=e;(7oL zpsrXkb3V+%2eksd@uims*3~tHz*lpFyqu*i+{*)al=7!@$hbD4Dq?w=cvt`urumBx zV);RAI%+bP{rs55jvM6x8^O{0Wt1l0;E){IdabMrr+MfF8?1$)cdSAo&x~WyXZa0mv8-+cv zF@p*^ARXqIpBW3=_v6XK)EH*7-Me|1c^yE`=H;o^4>OamO!TNJ06##$zolfy2}ru> zG7Z;F2#dqXG~E;=OPU-eb-({&bP7f!qJ1|j%ecie@H#7RiBBK96oLl_#cW_kzS8y}TTe+Wo$0_edZ>y+{$-j14?spj)>;T( zrTlcZo_5gm60lniWV7Y6u<@@BPm^=6TM#GL@}V``u7sTE^@cDp%V_a$9qj+amaiw&)NJT-YKQqxy{d zYtxq72)*B40|d@xW_~N=|80!?UuP~i;O86Q-?iMzv}9!zV9Q$>mHc#FS^)q?3xsFu zWC<69fI6MXM)66YKCX|2xAdmSB$^Eoc`=g80FRZX8mZGi0146SQ~zNx`c0Y~zOS#i zP;09%)JU9S5`W7C2#|d22Lv{k;LOizW{!HJh%6}~E-HhlBh!o45Qu#huw*(O=8>tF zl=(PQnSpDTzuJU-5lC(($-<4cm+LKqKQhzT2zg$- zd~^fAcu|8-LlAWdOZb=upm#$F@CyQ2$ouT;VC<~+l-r+7bdhESlad`o7b#sgEgp&t z$pX2r2!m12thTAAn#^{BB5`W)(iOPJ!)Mw_L$vdlgxLv|UXjbjfm~*h%{licF2Hpn z6<#Q!WtGH8&L!o1UbFq6xQI)QIj(wfvOBr|-a*-LK5~Edh=9r}*)}yZh{%xP<+D|b z*_5m!=OV(gVposN)<^|}uQJZr(Qt&I>V)R92D)}rIiG>P*TW)VRpZq7rq`6Bv)scJ zXgEj_^%kpHLfy#ju#1Gv?2<2wZq-ZO4i_erIOFYWF5Z+&oB$xHLZfqNC7-TQyN@mQ6=js#bo0>K&rQTL3o3^<6 z1((MOlEj75wQkN%zEb{;^)a&uw+G9S<_QzI?VNS(P^)SS)xlrSj0ud3$+aI!I?uN^1*k~IOTiUR1%OuY>mXd2*Sor5!zyw~H#zfWN0CP}tW^M=spqFA5 z9WeE3`bSW5qpLWU=0!<_eT~E02NAHQfc0MvOoALxA_>3FZ&{ql*9n0{78!!qK3#{L zJ1!QBLLu6YRPSZWd=hIMjGmlUQCFJ?D)&!T-x@AI31$22pP|Ev?!k4RzqHDhB})&I zoV?#pv%{Otq79q$DcK|fpnP2m@pAND?sEZ-V-F_J1zbfFp?(S#lXse+G|F$1LG`uC zY|1@cKTT*Am%`mF3UMf7Z&2Mp{Z*po&-1VtU>gnI09D1t4vvV(9vcRxReQ9YQpc4r z3@{S?UQ24`h=wWBl?4i_t4{{P-5SyOP~Ak80R5O>n6K=%1QKzzl0!FrRc>YNr3w+t zG}$jJ#;xnA^`Ly@MKW9~tywRNS0yt`vWJhW;%n~)Rm1`)ARiI-JP%VEG$yajTXd#x3Y%QlmL+&9$HK?T%#rS8|<+@F&HRyf{cABenZAO$fY$2_R2 zQu#B11||=_k3XoAlRS9$HZ4*@xPz4;FVYQ!bt$jeHu`}t{4yGx4ncx!fanYyS1S~w z8cA}${+U&Y)(n;C2Ej~O918>*e_^kw6%LVg%v^0$2o*IzutZ)Pi4iWKlVaeH)CQ_Y zky@Iekjs1YSOucRda)Y4(o&&1jSd=(R!Q1j(du5h*alifEV1;&$k(VbchO-k^_!j< zk-Dc*b1}KPi^lYhOVI8tx1Jt&#bT9wH4e>!Zd#{Q*A70`mUJntPkkfR^=H0F@roE7e{%;BH#G98gjy2SjAOMyMoV!u1>`+%Im| zWo5c{WzJWJ2=>BJ^&EhPa*D1~Rk~;mS(gv?Tu`UL5j3eoTmD8MCe*>&bs#MuPw(#m z_j+nBXS)Z{l`pGO_Cl+at&Rxvz4ToPFr&Y?oSfmoY!;@mcGn4hixf}089qv^K9mjb zGs?!NAS;M zQ8;@p4c8*0H~6j`VM(k+!4tW>kbNOYI0~*p%IU@_3>-sL+oLT34~C*uxGCKvht&5h zquB<9wYv(QqRxyiN|;@cFmdA64JQxm1Z(sZ{&{IozM4)9;MDzgSrNIjWlt}w>i>}NPTN6u-Qmt9tF?fSx-+Me;o zFIF3PJqU;fm(l9hx@$prp4Ngqbcjnb!mGOR%1K7wz0_ECbXl<9WtN??nBb!u2Q2%y zPsd5&9Vdlj0W>X~siW-h<_Y+o&a4fDvqVgGy(c&AU0tEUV7f?!fom zY9J%M)olsj*V+0_1=^=5n{G*xA_Q-=+YB>uV-dr~KquGK+mvgOt8FLP^nlMQcdKJz z(p%JxzhTV5?XZ!wH?O$8AUEM_{UvYRy-{y!fXqiLp+3S&l zNcEV4UL}ZqCk@fQxS#w%T2gM_uM5Rd3TwwN_{K)WN6-AK@2^v@;Jc5)L{4=T8X}po z&fK}EtpmqEaaXF#e?Sl@!yzL1$Ho}s;v$ed^tNC&%a+k&JQUum z{0~!1V{tpoDZ>Qg)w^(&-G=yWIOYwAe`JYYld+Y*xtQkcGtNR`a5vw>dxf)bGwZp@ zAm|!nxC9;Duic>d^yi?rdPQs6UOKiHKdKfKxr4SK3>1uj~pm_8}H$`Y<)JcH?G6mfb?{M;E&8Ax15?)30N~%zsZqCH#eEzlPBx z82X{-)CsQ7P4{|2`HEs)9M}GxHP4wGe)Cc$L>#XL3p)?0>ymXkN%pY5M_!=Yn8yYM z+;!hTHp*|+>?Ab_>TMUG)y9mr+cbD=#>tD&wgqDDVGWF@=6rZy4Nq?c3SF=rdPM;i zwVNuRC9uq2F0*>QeP)@mZSA)YYyalwm#f%^$Ez7RUiY(`HqJUtvH5PK`RR>MuQQ5z z%}YKu6(_&(m=&^GvH3O7tjB6bF!tB^XOG>_M(}5`bK|99$6dHE>gf5Hec2|_S%Xo2 zLHYM5|NNuIhD&qM?)|<8P5fi6(D~K~N7Z#9tz9g>x+?SK9$tlHlLOAY3{WCHP?{HIYhz*-%Z-nzaq(KJq=Z+uxJ~8DU9@urz-~ z@8&K-c7Gld2<8_UO9DHICl>7Nf99EZd}Hj4az9_;Omyt=UE@r|8kJG?*13ERA}r;= zEpw2p)N>2jTT%Wp+BkDqZN5Nsxt{Gav|GTX2(jZS2x60(>7={FfOK<_R)|170X5+QW* z>`DFN?wlBMjlB=G{D;~J#;dbhyDnU+8>VM;#lQqKepHM+X1XB1xh>3PvhXOHMD+jX z>hh`9A%!6z6D+y;&sjc=2hrtQ8qHJMtP7v1kHMqlYOm z8kSawaKN4FA$&v6?Ue6Uz>uhvs;Tii-6vE{tpg-3Tlmy$VV2~z$o-r@`<#>hW$x!N z4hLGjUn|L2TK}3}MQaT&_Mj&LnLmX)2!GjxC$e#4s33Zs@KVJ{lpcjv$Ko)1NTHfw zalrQGLS7Ped4O?PvFxKmExN{Bd#2Dm?JR4mAGg$jMC4 zN?_nhVkQpU0v@;pJa7wm;D@29-LEJ8K^VRY;(b@W{Y&)C5Uh!@`f>e3wfadc?5yTS z^zsG+DA@sJVrv8|mfNXmoSz521Iw^)NJ6c6_%8f{joDO%L-eC)p2?x4Uk%f}zRSPD zBY23{hi2O!0BcqOJ{3hcK^DZ*t|y>Oo;SXVgIGvwNwd zj3+J?J2NpCQkSE?&UX!Qh}Mig>iP>|y8}cI6$c4e-8U^*ZrU9Ah^Ax?bEZvCGA9F&XIm=C~`u@8E$G`;X8*d811 zUqVpt~)03~gZ zfl@}9sUz%v{9do$car#i*IbEe2E~uZ9FeS_lVii|58e22gVF#a)gXoGvg0jd=r!kR zoVX+i_nSDJR;hJYcNKN&!l3tZ_`xj1!GnEX2#qBA4#QB-P&&9@52XVQFIrpFY@T#pph!x!+V9~b5aAlJGESDM|grEd) z4xVQnTzAFbaK~Ra414n8Y9FK}eYw4Z4revHnAD#nPf>4l)~9uM|LupNxq5jrRr)pQ zVkKgR!4loo6ZXPKGdqdC?PDx8wX{5E*Sp3dq8?3Bm&GpX*Cb>&gk%l({E*VYbkc8a zofT0K0dG;Ju|>g3uEd|s%G7SMGViE~rOR_KFDy^aHD>x^k^?1%B#yo)4{{fbGpjdr zlH@~;Q4=DBSO5@I1|Z7MgEV9a_!r&^JenMQFW!ytE)7mTCQR@?_R!QJ)y@WZ1J#{I z_Km%uX)82HG+-Kn$v3OPc#g?3DdlJ{GXlskVsl4C3n_7V%-6GA8_0#~VB%0d{43t=7u9=D0wIpZ?%K3?Le`@x_>&(=TZSo!Ti}6?1lkAz9 zrBLZNUg5tLGmTX;R^znB^U5oWnt4S_ku_Wny=JdBHNA@oTIErt@V2?w`BKn2e9**W zD`GK1qAQd~Mi`9)*HN>bwxLQuF#o1xkW&57K>QCdQltbCxv=rim*y2W6vs&mGH;WQ z#mCg0(w_~=9wT`$;6EBrd^Qgp;xN$ZNm4pw;|v@!*%i zBeB1X5w3vdj{>E!54G4mLP=xixvzrS1ThcR^==mC5c=gC6%!{56J|tNze=OUgjMO* z#6eZ>f^;aY368B2ihV)G6Rt5w>zn8lst=zLqAecx9AZBVlCNBxgnIQpTdy=?4#Abq z5<5K!m;5qi3el0MX(R_0TbzY3Nt(rLpsrd!z+5%Q5C2(O7Sz}In`Fw)lKf%KW5d~z zr=!}}oyAyfL@pyKHK8ING}BcYgoLr7TX7uzck$izR%ASDlirH_rEYXxMVcEsbd92de&+>nFZQ zex{3dM#t0QGU>AFDc!N9Z9T#4K^o@2a0Zt%a%Q2N8`$?uF-OM&@7hHUa_NHdx=oY| zie&&lSRr5k394x}vADG3yylAWPTMz+ErXNA~h;RP!nW z<+hsccPT60Wm&SFrCGA8Qak)4=S(w&Jh;==Iwn{AKyG#+-*`UzFJ@vBWzSFchAue+NjrWbvbN~XyTE%kQZtv@E zAG(^ix%*2Y{hEZ=Hy~%6#2thCtG=qsda#Y=}5t2?qTxxVq2MP_0n?Xi|4D=_*UV{?UjQRN|Db7gj`h(v*i88Lhz zo81p#XxgYo`e6m2-?1u3VP!c2s3BM;Op;Y+`HhoE8<>tJC;;*!5WsgS2b&Jy0OQx> z;H(ldwW^Kc7Trm`+(t^X*7NI?`dVaRk?l6akO(;Op&QMa)FS|&%*x-)G$t8rf0fiY zoyJ85wG*ijIB~+_q|JOS_yH20?wXo<^)^#f2=P+maagO0Yq6A1kI~KOc)m>qEE09a zhxzR*upU>nChsxj)h739UoN4k?vd+KX3+2f%Q_CQ>?e&bZ3!~rn#`7pWOgJ1v>Co$ z$DHf+vr=8<9IQf`?h#;|Qo*v68Q5ES~vkdJi_s#0;AJs+lKQ9RQ6SYNLm)e>@&Ld)GkB%g`ERX*SH zU`OkU$a29(EQI;~d`{C}9yZuq4{FJ)Qqfz|Ud`uM-2%VrI)2qzmtVEk5Dq(tdhF_+ zGTeBVK<@y4uC=K2Nu23%*@TvteZOxC*BT&nkTAdTy~!$JIzM4mV)#(@8H#MF z5j{@sd}EbVYkLJt#QqJ7`z5y8BbOIpeP!S@*HOL>LHP?Z)N=#d({}b7F#xz27Klu^&6`xDwy;gNDellOCegGknAhuiS)qsZ zmy9rE3&ZV0*vk#rUCHsZe1rvYpuwu` zlB(LM$gc5z$IYqhv4V~d>Y>>{b)D-c7?7na#(MLZ@W)v@x@&Gf@8)DH&~OY-HkLGSv6DxdrRHc%JcSXrpR%vMKTe|^=> z@~_+6^NmoA*%{=bL1*_1rbJk%2PYGRk33U*GWhIn~d zyC+TyC~8mYN)MDKwR889=EKaCyOrA#3nF%WAL&Dzr%?=^-AQk+IvqOI$=-6b0`Tp0 z{|2e`@oQAir#7pp^<#D5fx4KzSm(0-HVwOxn?75|i?>22%Rfi`ky?3&YbMy2wr4<3 z_S(*{rxiUk*~ineru(F1Ey2$#Ii)RkN?Y!fw%pll!P!)Jaz8BvK_ap6bXJ5}Yf5cZ z2k&>vaTiQ4gO`*vo&|N-#OXVGA&No}F(1n~(-2a@U&q*y?CNo;8qh5F3oo*;x>b-w z<+Lq|cGM9`3s?K53~wRhNl{D$Ow?w)#LDne5QI3(g)^wTPuYyNP^@9Afw>Eg$W)r* zdNwYnNA!~yCOiXU%yhCI1f8S;cEFx{3!H|!G`tino@lli`s16fe5JQo*zl-k(8L?S z`0LJA-S^83t9E8f!a;E1ZKkuQJEyJak9po%M-7&?&shafa!UAPs3pE?IK-D3eS{+h@83N?iCf}SR z>oe^*sa><^-1)#T*WAQ5blKTxOG;uG*K-xI`FAf?WygmJ?#e~Udy-W0{U0o6}ZeHbJ{S}X)V$4AY`q%4NBKN&_G1V zyL_F6d1vD3Zxb6-g+3_W*z&8J;5o{nTxB6|N&-0Eq!uneh>Q%1)OZ+8Rx z$>)%(oc6t#v0MPNS@(_A!?aZ*ArRUvECudr1_0LJuKOHceFOTPdOL!=SC5^2+;@}T zFIKQ=vX8UJDJOb41Tb`3HNi75(USMa_WdAaTP{8i&b?tn?|evNY4dfq#Kan_*brlh zy2+lD!DX@a89^LW_$3^n+rc2uz>t*Qwi@lM;BHzjtBJWfb$@|l? zr}9Veo*y62!K-z*>>BeMyr<%PlO?p4hPyhYr{#knFv}3Z=c;b@UjjjO*UqzOrm@DY znJjWI&{cxG<*@zY7Ypdel3no{sNLG6U2bq$A9Mb9w^L`UYm`>&t7??S?9>w3XvzYm ztF6@jbZP}FwVLt@C`2q|8qn=&{dYwx>-eSY)({8FeF4ypWNcUrT!@8q$DitDDYg1B ziiA*iRdZ!kUpPbNOQVYPP!-YRrEJb6MNlQV^~=DnzY>nxCbANf*hLO3{=WiIlwDkY6_ikHlB+H`c ze6_wJTeEi~*|Gp%yTQOJ2_e%o##qp9PZqmXNF`K8s!~^#z! z*eotq3>%|Ta5O^LiD4wk9c^E8nrkUtn`Jh9)OP!e& zI{v6ZRvPZu`)Ad5JG{%DdLZ`H1DB80a9i6`=!1QzDkO^1p!%NT$@va(zX;!g+@2C9 zyhz_us%g}uoBt5jQSGjdYj>%Yz}GaGC>y$A9_DBkj~(Y>%3w&Rqoyu7nnK#P_tM z4GRkxrkJGE*RBHHyLN%@w%0z=W)GnP|M+~5N*T0 zdLZqq2hzTJATtCbBhgbd1>OD*Fmd{Uqdf7xC{Ikb7!fJC!#C;OHs#BIr%g$YgXX53 zd|tQj^1ca1x1)th=pD-vdQ`u3SDlsSf6~UXJX?gCi_(65+}0E*{F;+tn;1FYvDN6y~WJ)L#m)IW-y_BxV$?%r!g))_rx^xlC$D-2nfw1xX zsBAnV-K5mvEe_4v&E&#-;85P*jAy|0Z-!S|NgLuCls*( z;BXIvg-cmmrK0)F_C7Wi$Gw%X7fE>chT$+rk7)i(xJS ztd%G07`J|EeEztW@&NBinP{?U;~`ggS$vu_7b6tSk9URD6fdnbeB1Wd%0ev;`g5Gb zg@xPqPTU$2wou>gN|W?1b!nj=469{FJ=Mmkpydq)00;e)h` zv8PsXK^Tu z-M`O+Pm3;W!}(ByX1Q6&(MjjP%N%#yHo0Rh)25OqB}=(&JHktWLfKDLkUp>L;>yCR zPIW#V)UxhwuVNl0Ek*}R^rOGzac_%8=W<{Ne_qyPq zBw1y)Fumh6Cp#r2sAH*I#>J>2v7owR)jqOZ@Dxc=3!z?!#rpWt3WqWXvv9b7+|;U{ zT6sxb1dEGRko-|a1a~BSia04}IJJA5x$K(G{`CZ7YFnwGI8FbeQVq7zOC^_w-Q1;I z+oW?5>R8FTCZ^9VZ@2fpX;(C)?9&Q3b;i_!sUnJ64(S6-nB}4!Vjq9dZ)LVBxat5Zka;TM|(#)4w1B<8PYrix@daguLYm2ck zF1(SQ5tJ)2)M-1^e4FJiRz5H4rc-|G>hP(b7Jdz;$(hg=gC5kLyl!aSs;f-pPv1j+ zEhdLs6+fXg1^e8)QcK{vE?8fsu-P+Z^5;9mx~pq!Ur)`sw{CfY>S{0}jc-%!cH{#{ z9j=3`+(H%E;b#?m)?`Xk?d%%0q7zK1(ISUEGvOWub683E%&0O7F1DKO)8aOhUCO({ zRqQ+(cioDU66iU%^cv4wwiF_)vtx{2|F|$7gqnCZF!Rj!`^L6IALu>Fr~M*|bhJF< zrfdFV)|r0C&$Q-=Oty7(?1UEXW5YabqlUrhHv5`8_%3*R?Rw27y%4GU|9m8d#qyTV7@Gj1JnRWBN8PcM6dZFyDBJ(mK7gnDz<=J5r?Bu~dnw$v1nh?n*-iwha#rgA{lg1^KR~C@ePHI*D06bvqT8I^ zCJ$L4^BLkWSyMHktn-BkvP*TTt9%a=bLCgCCyj+oau&A(?QCU^wrEPM6hs+IQ3&M+ z7pWvER_Y3sYg|je36p%^uxk;h8VUyz>;q21RPsk%U9A4%v{(8XK~}om+=OW3%p+Qh zg0L_>LS4^GjTG&QbQkh)j~X*Jlvs>OLyP7REhqXq@Z{iT_>r9J=r36UEiNY6{Z~P@ zVu|;tJd41Xp87D4vFDAy0%JY7XMcM6@3m*=Tu6J$Zdpv@+tQ_4=XGcMxOB`AWnBWZ z#C3x!PPWZ^{I$GrJ;}MhrmI&`#Tg!ryCU?P?Dc?Twq0wU}}k`kKU&C5*0 zWfQ6*#9hS#Orjw*K*(zjTSi2sF15FwH|C~N-St{}?G(efeI(KR$`V!O+auQ^$UDu6 z(m-xo-@M(PZWGSh-Wdo1{;S%q*WO-W210(bLeF+huX~;CQ_Q=t%&j&YQxtC4y69|` zv{gM>7OlrEmyFkN11T)&XPOjHbXA;oilNX~jec zOGVO{b+X9dt%X^tJEf5~y68fvG}vn5n4)wV{X@!`OGkm0ItsbSb8EV$U1n`U#_cht zBiUKshnnGqjO0EV)$_FaqM@0j_a%wgM~bBY5+Z4?dbvqKe0oN6f^9VGGHBB3$P#O_ZUYtw)1zW7=DlW}yfKf75#q5fd z7Cc($7Zu?+&_oKWT&6fYkDDS_QS%qOLcxzlWLS8w)FnWcp<{>eN(}VOSzBa zdY{8JZHNVsm7aL$!#;WuU`nVxC=#fK#mfc%bFmFoB27o2VcY0t4|Pix%$&rC{Kf?b zeIFhBI0Q!Yw9-RKChuEPu&wWUm(3mF zeR|!LJ{V1J0WV4`gWJB$;D!-pF}X|a3vY~fro-b?y}%^~kA2WnTplPLF|D9h+LWUK z2#fON64{WNo}*vOu}da2G)dz{!_ICb-stf!2Qn8B%%V+0s@fU{%9Ml;xi^gg_{VL{ ze{5e!*`Ah_I%(v-*pmciZ%!`7Lf_kop3v8!=C5_o_ho_f;5>()h$hlw{fyMMKQ-sM z)sjnZN2a;yh%`5^WLi0+Iu9R(A}4XH96LB%{ZMsKC(!||*&J977K_ZAG-deYwqQHk zM~kG+bD>S-K2}Kk@YRtf0!ddJ+Vz2vr423Swh)_&YIKllEP_j!viO<6a0O zL3%JZo1Dx_`9@`>6zQrv3+8q$j+y5%x9Y0v%!yrmX)N%uo*K%C+SRNPJX`m%T=--3 zADFlBIQzF^_F}o;3eMhJIHu>FWNhA<#$@GM6vOG1gKL=xWNpjuuIN zXW>alkzz+=)*cH>t;LSVTX{U*+Q;Lqc|2x}{1&enjptG}(YMHM{h`XrY3kj#$U5PH zdM6K*%W#<^SymzsozHlS<;CAFaQLX~%sWHjsi_U#iF|eDa{i|k?rQ)D?VHsFHrDnCWvEM+~pX(Jr*TEDtDu*QuS7D z%wxGRJ7{88lj;EXljB=}%llIn@>rlp#4R36#CPlBIgg%qo`FduB)W2iwhZmi4Z*S@iEjJK%FP|?tD zK|NsIIW85>TU5s`a*rG@kpAQtO$^q>F^3QMc^3XS8>->&@mI$mj`0>D*Y0*yF}+3E zv=EKDR`V^|FBd`NTO)Q8x_jh838>Kt|#u)BUNp@a2&{8s#aJ(?;I!8;6F7Ta5*PGv`E>RLZ9u3b4R(5~opy@m4x5u2v&n6~S+UN0`}dO2ZN7M|nZ z^I>%-cuS&RKXjL~>iHHB7$`w|42r;CZd!}+)6g5+RY8ncp)=Nzg zSMICwSjc_K{dO>!HfA1pO}TTRTrnjS-|>MNtH85n4mL)a}&4z03@>1HLbZ5b2I*xKi9ZQxv` zO>8vQRBC~899SG2-91NuqbD3`Ye8GB%a>+O^+PS(#5Jz&>#pJjG}6Fxo!M2@WuTg~ zS1Y)HA5k5b>utS=T%<#-lHSjRn$m75Y;Z4D6C3Thd2HTtN1P7NE%ii|1hve3I03F8 z)vMWgQF~U#n_^4W6N}fnbLE&PR=EJ(B&ij!db~ZCDRXtYXgwQI6kONN3R7cS+IDv( zIM17RDbw{t@QC^xRd^J4_s|q5%gB+x6u&)>^YW_rH=gf#rLgu@DXb^1Btp_fOv_F5 zbf=*Dv?7w~0{qZL zDqC$y0pgDq>U?*!T$|jn7A(l~CUjs==)laMallvRfSfP)_$R9^ZO(ey_V%3cqUL-h z2y~jDbI;G_c5MADV*i@IF1``A)k^j3BJ_J&kuu^K->zvA{|eCc7TDuQs<#rNqGg5*<$urg!+)T>)TLcW3J;+Xnm{-aK6Ta^v15` zvhZoz(doL#zt+*tmF|eHxG{C>7^FXYsqv0?1H^Lya-1uLZ3Ch-yXk%|@wwGyN0z$NOL`vaJi^CqG6OGC;x1R=^NFj% zr~1pvRc-HoyQ-&hBvi@n4lx!;&$3)xAvK@TFOV7i7ERs#MBHFcTy?mgH*;0yp!CUE^NKk#f+!h zb8Q3fq;24xunnjIc;~9E0@o^Kaoc5eMas=`rBR7cbYzv25N7qico~ zdEw{4+A-qbA9FWipWMvQw0$hAZK>eWV^p6?wHN3M4b`}TpWyoYj6 zUXYrrRHz0mAAJ@r|0PGu=kgM^nMYpychaOB+e>(C?jYg%u%{KyRVkgMHCXfCpp+$x z3QWgbiFCMrEOP)KOBKp4he%mq-?ws1A)L_ndTHE4P<1G_MkRwfaLR%ff#}%GaYyo` zonoF;smK*`tQXA&y@*wVZFgSo4ilU_Yqx9G`{Ur)34~2BR(I}VI+P;@+K4K%4>x>i z&T7M!e!4NLRb54Uv(0tV1xE!VDD|v}b^X||LtKz~#Q$*lj`JJ)$YrRaBG$)TtdcR} zkZ49Z_wt>EaUfc~=DFtQ{YA>anw73zDKTQfle?hGK}nf2z&=E<56u+TeD(+GT(!T7 z2(KV=8#u5=jtz{pZae`!XTA>5Sxg;$5{E^)?R`wQeU`U*c09>TtZ;QXx3KW+H1HSS zbdc&Ex_Q527X?)%T$M1YM{ylK=HZ@q%Ok(1^zXCt$bUtxdZA={AVZXNmR|W*?HgSE zXKC&wSFh)TY5lsmf?SzYd8Y`PCZxXKwqZxIz|Vn-(RtsJw);0yym<9z)s@O?0UXlB z!5yWGLn&Px+S0|LAziE=O5Z{}kydJZLVvjqO^ql>Mm0_ks+GS2`IGfp;QAN2r3$K+|cTO%gk)sX76vc zm};5pt++DuEUyoh91Oqhh;R4Bx6pYjxnufcilO~;lQi2|%dLc-s?tJRW#>@!!<1K> z_F8u*6YMr_j*gb@PbtQX?0F(3pc2^jawb?!Nhh&n z4wmuF-pAHrq6;rUBq-IMO{w;TR2ax|!tXTaOq?pWHt2yqq5?poSGZShY_dG@`kwb% z*0%4o{#3(oA+0|U)+JuVettQgg{;ET^T#v@Ki%e4A=PI392>hX{iy6pN|t}zT11%F zV=?7Md&&2e+~{JXiJ&S~5avB5mwK&{iNl%N{(M>ACyuhdZIhh6n@iqZ#@1s|H^xAf zlt=`X-^a2l^PFl$g-*)TCI9+WV|rA^9?a9F6=xuWv5NW=`M;>3qbGt?MQQQ2bdN*j zhFOt8x<-zghHHZ;iy_QJqEgP&rsfJpk(SCMO?XRwL_LaUvmgSl3Bn1vE1J^YC7ppq zadn7xo#&Nt;I%qb-PD{Y{UsDWdO1q%FTo&8nr3a&U*SJZDv*l2OWS)R*{8#Qz>(vi z-=X616Gz44wv{I2uBw7Vr{+Rd2i4+svsoK**AVbJQfbqXTfSqKceE13cBHQm#2fGA z$p|v10+hu?%{xP4y`W|Su%vBsXV{J_R>baJRsqf^aAK}IUh|WCH?+``SBRTKa@a%1 z*(*_^Q{=b(O=j}_Rq)qsJTamY$SZRD6nvsD6Mi0w)Er>4560XDOo@MT-5$J z*M1lMK!FW&;R`4DOJoJU{Jm7QN>ztYFB^=g#ZCU*!r-ojcfs;vZrJ3 zfy@M?f=ydqbGZ#Crp>dGgBB0(0-R@W0Asv?{{ZVdh#L68N<&0j@TrW*G3c3kP6z2d zX3z}j?}q+2`T^5_;9uL@hf5KYs$z;|Obvy(!CnfZ$RU@|-q6nj{*(KczT-ap?;Bd) zV56wd^M+O_OA#l2d#YsSW-j4^_gYC<@J~iD>72X0D_Kwhp|)3>3a7P3NaT7{Y;0d7 zDH8eiEw^r!Tv>IgcqO9_Zqm{kEB%-#>F~IrrDsQh&Jd6Wd^$aJ?A20~2|2RA&KK;! zlc|j^cVo@zr;HeR_KI#{=JSGlF5prX{zN?Stdk&NHJ)y#y& zm?|izW)L#ThXy70Q5L#=#WtzW(bTdh(j$3NEB|*G^`i?l`NcogYXFNy zd+**%uD!J@c}%MWSbhh8P}1U#MzGY8wbn&MDYQi9BHc+!MJ8AYXwh9(Pw=TWrmDE7 zqHyM(yN^3^L0*|?81fvgbIzSSR$^u{2F0r2?Vt@Rx0r?#J0-hGy|hWIs0vxjjxr}I zZ1audwY6tfm243PbNO}7jLB~xk?W$b{!CIR=MPuv; zqyXZhd~G?E>bvE&MCN8t5Ueyghc7tGom#FggD~Ongqjoy#7RK=l@1KrTK0vlMWFYb zcx*kZr9!n{sf?n#c2#H`kq#N3)>>}asWVl1V`;81S^G;p!LCpfXt@X<=~1rAHCoiw zY8!PEd0j04MfjqKq@M%r90rtw8P;AMg*|SD5mkb)HTO_9YV17avBTVpuI=qVZaBwM zx0F`xMM#e_t!u8%qpX>hPn_x3+GeUxb!u9sOe7@4T`js)q*u7yu?Ov_JeITaGQ7{F zOzxQt$!w||%nW_vu%SV3?pY1vim(~V$*iR{R^_!^jjdGC2be6RZDuzuY;5IqKEU|a zw&~PV*jUAYi98U?+Y))Zg%v%GXYCB#f;|@lY=15D5o;PiGdXD3FkDXz2IkPbTT~qw zv17mxu^Y8jN>*}B@2MmTMhfE(P5P3P_x77vUm_(_)pwQPYA{#>%~A>ZQGRUj0*=m} z+unZG)QFgVc=srT98Bu5%vC&UxI5CSJQW@XGG(>IGzdl>c0QU=ey?A9ob* zT3X2}LFRv!g{fXkZtjg_0e_|8)cubY4XpvWdu@I|UK8yz2JGl1pS6fCnd=^Jjy8qg z?W$6niocpRs0xJ8>Z!jJE2?fF^`eOkoZ`)O)3VBYz9K7HpKnNrq?0z>a4@q6F0 zk+-5L;1u%qq?VCnhdj&Jx9`tAnVwx8V^xSJ+m?*)8==ZDihhYy0c{!F*dnW?NI|eq zZxyB8=XzjV)k&NB(&-3ndwlo|m5IE@G_GpPYrZVs{_RivH}QKH{&}z*#r@#-aonGd zf^_-6`av*BgW%$!A1?RebR1uV+43knTh6X0LAo49{oq5rU(eF|*q_WDV`XLK*^?*C z^&I{^dG?h3?eWuRE32!|o~=A#e_MI<=*i=!>~AZ7`wRX})67r)w(`Ye(Oj7P-+z;T zH|5J9Ny9iQuRX4n2jM6vua(vMmTToSo+iEEO&n+CwX*!3me)?o_4;zXzMLjKz9X`< zd|E3<{up1M*2-glG6|#ew7gcPklm)|J!-Cdcts-Z76-wDhpUa+^|t3-Z^Ms|+wLzO zG(GPD_OZ_}HkeY|Bs%oK3TEP|KruitKZK5f8P1G>=+Qc-?9sA z;v3E@i32&>l}&%tnT)~)?|1CmUXLnvv}irwrUY1u`(sy=MEmTk{ZG$Qfs{S&4Mr1A08H_fs)^bLYHC)oRwaoW6Hi)N|8ntcM9)J0sxl;C%Ge{j zMzs=0U5ljtYMJSXte?3x6TGN!U0H28E6~m!*c!=#!$N?ysVpftZ>QMP{GJRHt+ug> z$^|-&kGAPtScPQGh^BlkI_*E?MAWRsEzgTvc<@@qeX0{Mx6jpPZMx%mQ#`+y{QRmd zYv~yjW)y1GUsmjp3+IYfxsGoRyw;>$d$R3$PY{hyIU3dU6nL(Q{#o1b@lNg8w&y)V zpq|eF$}0HfS_h?xwGd+2s#FIvAZvZxah^?ZIK)lsIsl)$mUcS`h@Q8;2qI&v6~j?9x^P-i zw~vKArO%js0AxU$zp)v_A=$3|vEzAvAni)f?=ftMk`2wIQM^tTrE=Ye3*3wd$2&BV zSS0Pw8Y#(@ES4}dYU3Tx8}Go6XvZ-wel~2>egxjK1wVeu)jzd>w~mp;coe`mYSz+i z&r2~GgOQBXVtrlsv9``TH0W|+`W*_>)w))Vhowq#i99MDJTD+BkNu?W| z)#_uT_F&ud9^i5=Z!g}8NB+H2K4w-cgA`$_)kf_ZR6fFaJ#T3@yET?YB#iAS@cIaa zE}U!2$z`dX=wj&Avplot@vZ$w3v$Zg!E9+U`!2+&o(yxOIMs?UT9HjES#Y7$;Q}{5 z$cLTU6(npxa6h!1*Q;u8*`-`$tB{9wL1y_66rl9Iv~9jqCQA#YpD71vxHjmd>dC4v zWK0E{E;noeK$#3puZX*l^yf_>D7+Jb!X2rK>snS=E_`be?d@8)<9Q*X<^7IL;8lY{ z`P+I{$aY(EvCePdBrU(FJF!XD7n*jpT<1=IrHnMZs_2z2j+KsVz$RWMovWYHrqYe^BFpSI1_v~s9^ zCOnofsJ?T($gN?^^HPK-YuWOlb#PpV$s&;IlR_k!wRp7Eboc?<%@$n<2cNiGyV&u( z3nV$C9Lc$pqR*PR)yy20Uyf=D(%ymDs4!p0wkhDNh!adAwgN>Eae-F#1CZyo-#5(7 z?oyb|)~hJxsOa-?vlefAUW|PT*C`9ns;Th;Czv#7f}D3D;p|vdTXeA2IBdh7sahp9 z1s4s-FTrKgxs~J!HEIubJnsQ+jOCqq-+tL^^LAPX<$22%R8X>oH%-SI4}|8HhU0h2 zeY0R#5qePYdf?3*(lKo>q; zqMrqTwbk>Sl7j3#cu~Lg+HESgu-Z~r6c%K_^2GJayLx} zfiJY~&RvhkO~Gwx=D)8y#A>s4(ek_t9Acz@;nG*SF5k}@HrlQ|YkJ-@MBeje@vxuO zdnT2zhp4GiJHVw&SU`yT%*~vq;0WGNtyNV=L})kr&Uz%U3(ffYkzEe-XGXgvaNa7-nFNZ)sv-q{K9p6 zY@Kt<0Qltx?$7Q0Nz?P5@RX9aGV2R_ziigdx1rn><%o28LRb{=3rCE$O|$-2pN}Ek z79Jl(y_FC}g$oTPK#ibO49e}}uFydqDpIxLt?twss*sODMS)8RG@En2JG6UVbJ$+T zbURobrpL3to%7sw+^@gAU8q7@-}QEeiqD7}AOW`i;qZ^^%<3Z;x{Z-)>Xsc42Sm5_ zrq>>V1ML2`76obfoGIo# zmq@-Le{8&VILpE3=^u^DhFKx(Kg(76Kl0ya#ea;$w6}Qp$DH_&r;i>z%Ef;?dipK? zz}LuFaEXKezQ4O z7w5#mY+V8bt!*K0dMIvQHB=Jo1)N9JNG_k1CS)(8L5vu*+#r@*a^SVHCbb)Hd)^o) zA2}vp=u=`nbE)AAJyQyF_RTpmlUfZIO`ScO*xi#|p%U^?C3MFL{}q$Vdsoh!(th?* zxczzP_Q$6*+a2MHCue1Ya=ACSPQQ?!-p!p{^Z85KpgaWG!&F69iVsyOS|{qQVN*CP zc<8X8Q-DH8I@bm2T1S^3luPO>465jP2OrurH?BnUP>JS-@=t-S=N-%`yonEv zjgaNmKr7Qh(aL$pDXb;e{Ptqe7tPD|H=KOo3&=&)CjYZ<8}!=-{ny=~?QJ`suTn>< zgf&{;vUwl2j1OI^FH2XdlBK$w5nXKluBG%V9Aq||UkHMwCUQZPk7@VT!I1hBh-mF? z;qFE%QU$5Y-OPm!S8z;W0FFxnDU9~8kXk5$<|V6WR|J@OD!|O8;#+i9v!_uAyak?R zWt}&T_T!gxgjY)r+;_q_fh&IRK&F`g6-v(9Xr2gpK0V zJjdSdPc6MSMT0FbvBEA6z1^o!bn&g|Vg@BXyfi>pUs_J1hu(2wd}$4=_xa95MX=>I>H{>$}U z_yWKdvu}VluLZ-asH#$kd#Ka0Sawyx%c^$nGR><*->$?5g(8ZX3;_tl`++!(pUuq)ILCoGAeiEF22|vMk_^>IqVm zf4`&MLMv3rQE(Vf^-9f8XlX>d$4!2(Sy)!!6yEJ_q5ojDwa`6#?7hv58@W&;f8F%j zAB<0}T0aJ#5*c3>#w`TiVbT=-)V6np(r)t|p(B*U$+(Gy`#dZFl>7e5^jL-q(+ftf`8W9fFFa z`Er)Wfy>xhn6*lIKJaz9Zbq$d?9n&=Zvp=AG9LL^I10W-{^ym|r>m~~&)@ui|9SkM zvA&D4fU?nCJpfO&=Yb$AB9uK9p{x_v+1YG)agcm=7nkNY*P|;@W7DbqY&~t)9_@JE zBlK~4yrZcptlFqlxbteq^R6&=!iOD=BQ1o$gUjzRxLu`l4HE^y9y=THy}#|4qx=-fz{%{m&qcGwA=LXRCJn$LjOPkG|#q z|4aV;or(1=l}^4pX~zAa7hj%MhFLaA*Or&V@p(NRhQX+x*28$YNAH(=%jaP>oSrSG z!|;6U%T2PCX4j)&V=(fwhv^?vKMAU;FWwmXIUm|Bt1x^t85a&6O~%WYiw$&jbybfh z&4@79I0Sq(t4@%_rJ5_)ISg4ufMZb zaX+ZPPfMk4x0?=2(PYfRD9!xQNa3&B?c)0^ErsJroMiG98zk|VEs38?@D-zuw}U92 z-71=l*Tkd$8u?j}QU?fPGmZw~IZJ{;kOWaL00@8O7x9au%`OW*OyV?1S@%51D%CC< z#0d+><7wufjRMy9GoPiAKS_simeyIfmjr$mh#sIpFP?-!%KWI$21yWn3{rOKkHWs6 z1$}J4&IXA;4zA+l;$eIh1%1|?PWo0aS>i|OAV^Z?vz{OIvArCbg;5qWKVrd$FwMe9 zn^2wY*u4uzqZMUI7^KjB5KYHH0=UsofiP#oAWYcA&xR?>hDkgFyOUm4>aSX9}*x*0MO!l z**i=8Y#1ag8~PFJ`Mn`b;nE*XgOr^G*;NokES>;!_KC=0Xe z8m&4^i4PAjUH3*|kEK~M?Pb%1CN+(4T6N|niGQuZ%`U?<%u*Iy2FW$U$|kDQlnvvN z=z!0o&N>_o4|_vDIuBSs$T)EsPt#0Jty|}(FbUG>C`(xyOnlh3qw9L;HTn z3oyI>&!gv$p4;-@%F4I;KY!Kz-%;!PMJ#}}PwvhIXpNB(=*L&lDE9m5Om?6@UU*bD zOJEN>pa1x}UmqElg2K$w6`#2${XeaQIgqBJV+5P*!gy+NTDuDmi@84(p)83G!V}CRf*AdZc z&M^Q%9EE3zpCFF~9kl%Pnq@JYrU7*DE}jB^06&=@T{D6hsIAWi(}*){30{~;&Etgi z!zAcsKtiFz*YQ=545lOKP21Wmolf9pO<5X`1LpTH{iql8@sdqh3UK==>rSIEj=DA0 z4Wleb(x8{owbLaACQim(4)=#Fh|=(EWPnZV6T6P535%~H0X_|K8TzbCAk_nC-mg@7 zZ=E0s;jZ&}e;oDVeuJ*h0+#Zxf<7@!KX(pZ2_^?W7+&`ibWh z(E>L7H0-g~2Y);n!7>6Dis+V%U7WDW&;F&~=_TO=*yV1w`#vop&IM>2ED8RYhDlIa z(stESwZuOYJR;lRE$Y#9d=?~?YP}x}{OKsGtgci`CGlNlrOM#n@-kad4}oc@;=@(# z>C#e_e+t{Rl_YT@7-BgUeS=isGkr3O*XFY!PFtTysf0UV;P(Q-WZ#q+8^rM%dlU5H zr2m3K9)N3v|J^JxcIGE*{O8GO=~m!^x0jfpWv$5m_~U-q%PRbD>ZDRt*t)r`*2EC} zBOe%-;ua^T)mrJcS}H9s3uYIYNRnKDZ;S^VHuwa&$`CeN8r0zMX7Kq9fp~LUqoGeu z*)5+|PfRNcu6RF{s+3IHK@=qZ2$zWOG68mUT>%*^O#|d~ePVZ!VTB>%0UmugG<9?D zluD%3%bpi@! z;W#850)(uBkk6VCvHw|&PtWmgz?MFel-ZM{AuQcfEiesnZf8z|M_0|8hU)7pZ>gn09LpIkFEjj|o61=nj{-lMGZ+5V z+{tLYedXC?$uy{HpTO_jWWuzf-61olWKvY?kWl-%vklYAo8Y|lVRFamE)U{(Sz8(W zUA%C``;ab^Fp7eClf^G#rd|BHOWF{A>+mnH!qEsglJ3cAmxTis#TiQ{K`$JHL4Q6~ z*Dp44HVY9WCwFpMunlHyhLe>VTRpWgO;63QmR6Te7d_Q@m(NEggYUvP@{@%TdUN|3 z2-R7O#qoJ_`x*GWVg4Fhsj;&)w#se=qh>yJe!aB1gx}A^Yc`#Xg32gNv)OpX@7UEa zP6HPBy&(%m0kFWFzv#tD5~Pzj>Vv8*ot`1H@zwV+L3>hS_B~Tmj|9!Gl}_)r!%tRD ztBy58gz6}EZ}5VXkl*9tX>KVv7Ykc!4#A)=_0^apppVS1KYKYo>lA2wx4-6ElC!n^ zs@&e~oCy3^=d6nRn9M#;+6l3r=2iy<*|`TLj^vdk(MZzjTx8M!UvY2GyUSe+`_k%? z;|wgVE)`t%3s7z;_|HaOI*g~IJ{$WP5Et0fCIaVQ_;MT#hhm3n`%~bs&gJcXrOIw~ zB+E8uYlWir3bk2a6^eG?(vrTX#SUCr!Y!EJ+583H+Scc*MV~J{!ck`5074N%*K3XS z{L$#l?_JChDa}33X^hgI$Zmr^m=n69*Y12GF99mXevL(JW0OVf0b8BF2D%)v;@aSj zMOw|D73gVI%Hz9&McogwVcbtkrB`tltg$YKlIyv|F6%NdSd6FH)E|wmS@5AZnu4XK zPK!aR5^Yb;5{TnW7mBs!0zpCo?F7_xz>zPgJ}gjC4=L((fEH!JhfM24dnMPO8W}yL z;dn9%2iFpaSHkYZd_Ml!HA{kVd=p3#YxazW9daW(dPwL`7{8BgrF}hx3DAlt^(s6>dU)e z$nLJeFqdIJAkj0-LVtuNZtN!tQr?T`JpfX{eHuE$I040cpLMRI%>Pg-bwD4U%Eu`_ zM$YZh4{>?OX#l9LrmNwx0z?!!WJDvuaoDDpLwYn00l* zOzmq)m$-b(Ft<3@xqxEh60ctym4?b3=_`d`@$v_mcK_ z!n&iZ953N80?k45Pr#qEt6|t1vVJf|RSn$h!}tpDL3`V>6Y-m)#l20!I5G(lyvT9L zOG(gQsQvtf9zHqbiODozZhVEK@a&xO`8-EE?^jUQ0T-G z-O)K{HCKAaxwVt%6nSRdpi(M{af&5$`GtGFCo9?~))5z<;8QhYZxs6J>^lz$iU2={ z06ZVg884mr$x@9~sxV_ZMlk2x1-Y6RX~lE(B{Bhz3ch@l`*P{AE>yVoD-&i`@XNa{ zm73Eui^rx}6%KV0oCCuIbn7b2hPIg%KCFS$O+2~`s@*#CO8iFxK1e}$8Kj*0O{QGe zP}48pnu7@;Pb1RJ_p;Jpl-_Ju$tSm=10L zV41=JLxjZxau57&V}mWx{kBxaFBp2#U7_8NkD|CeT)#>;_%I=EhFY?-X~xdujD3Ft zo!)lUxFyDJOAH*_0COksx(>irs;9uHiJhQKoKn{Qq5|0nU zBD#SxPRKR?#=sW`n|sjJ**2H7fDs3eNN|xvJv#ZM`e!M~5VXns5y6y-U8cD=a{o^N zL}O{|tSg0{YL`u;tHhre4xPweazPFKR67A}l@n92JD-OA;Iu+K=zxwRy^XCr#|0m!4|Ne@9FNUkkABE@9M!6S&O0o=&EHA?GIrB%^ zM%ku6gD?r$C_azN4E*!L=zOC*@;_de*;Uxjh8yLlD`hrBhcNmZoc-uCKfR86Wjvn` zqi}q_QC=-Ga$qa>;!&KeAzK2TvQbuMY0}#$3tu*|A*I^qa(UoihP^ndrSCB+mk`yqSOY zV%gs;y;z=XmZ+oBi|-yj1ZtOL?BT=BQt8M+@Fz)(ng#L$2r>Xxx+ZZ=lo$$>RzQMK zJ&+2u5;>PkMHqKm7v6L}+@_4Xl&jgYpckjtX%>v@rP6Mevh&y<0T4i;MT`X8^uw=l zum6B_GeOixr5(Q#kCZOC=X2dw{+V#w8^qJ7&&~os8sRyF9#c1{donBcoJKPAoD^%BUwz*#7jj-Rov zlgxL4B`_Uf-M*~O)>XvY$jg0cTeC_jTcrx4g{$Ui6Q@WZL0|o!Vziy)0;1 zTE2gu8Rv>x$|EE-wcwiKr#$R}xMs2ikRK%yh&sE!Tmtqi$y5)rYwY>g)fc;X05;e( zx`^VdsKySa89l)_#AfHP!t`2we^f8X)uLuEyiR$J|d#>ghQYd?*bS{QEVwx^DFo^+ERu zY`UTB7o^116*Lk4nyR~9p#kHxDox{Fh+ehGfogVyT$k8lYmIy!tuSC6aNGJ5^8VAalI3ik?yG4J#g%5N7_!YKA z$X@V!l1^-D@9s^u!CuADD{eh{fzVNt6YX4`o>0=G@@a{&&66?$R6bpIz-mo?QD6xH ze-5++5`cSKnn?~_l$1j>mz26_DQ|1;)I$15Uw<}%R1DEw=%g6*3kap?VnMLJ7OBL= zFW4x~*=Q%7>tljc^scM6QU@{Q->uELWe;=Em~;zfF?oCkmPf!Le>@6^1xy!B1+9cfElIyH8QH*FiodH+J&%1;6o|4 z1z>Q{cl>l~&2cZ~CL$JBf!_Ks8HK$t6UqtFboTopSGdsisyKKEbQ}l7bA#tr5cC7b z1<$YR1G&$vU<;&f^+00%-95$sd^LWuGlBcd}3=1h20eEttsxrbbbKe*zKckD_dW~r_ zC}!NgD$6#L@;jN!o4asTU&v1pQ({4t>tORvywjI*O~o)7J#5bBkc!wO47OXCS1Mwd z^j;R^nxM%Sa!&fFcVwUR(Z7I&(!03}jQ9Jxmjs=q!9%355=)CpU-4oEs%GaBL5M96i6vXnv$D9fD6Y#(hz=<#-+HHZc^mS}S zO?Oe-c|XmPI65C)WA2gh7&TY-xdv8Kc1l*QTka?RAba>|<2y&_HRO9tQk?6CtAk7{Ig8__t=BHt*YdpD` zRjvOPYBLHyMErXucpM(z|*H_A2fyB@8YK%Yp7J4JZh z4HCoQ$(Rlx52g@?FVW9Us$_*l)@BOnXkaz6fOlWHxn)1_KB|V8!?!keoTF=FqJKr? zB`+FuIBw~1-eqgEjxJ1$Mxs?p!3yr}vf#J#YqsXl}ezS>jj{qixc*Vy~PH2w|^>qVh zpVBvWS^E3qeYw~aq$G~`>O|y(! z;}hUWz`R5j;L$aim9{%Cmr~3bbG)nE)(N@&APvtWmc6P_0ShVi9;NF6XgWAfx5n8zZ0z$PACCRVKZiVYG#I#7Abv}Y zX*eQ(_$&XKrSO0CqzgO+xeyLhbBH(VgPimUuM8FX&s_bw>nHq9W6 z8E9QeoTxgGx>s>VoBtDQ0D6E|wa8ovC>IZu;^*cH>DeoBjvm5qh4mW8Cwd)c!(dEN z5Zs**LX_(408bPgy>#dcmuhkos`DXxNq`9!{So9p?4#NN=X{pLR}jqxAZJ7EyOfPW zjE}<4hH*+en>=+yt8^0hh?LPaIWvbTKVX~~cKNlm>`%fjYwYX@fF?;io&YOO{462> zgta&V*XE0GG{PBk7a;NVFr1_~>2-lU96E{dpjEmQF_he1Mh7uu zJ!fH7MIs@BDn}z$fzX(T=*boIfm&2crPVr;20<_$J`}qF7Rc}S^A~To^awo2$sr8e zUIk~}8XJPsOcD%|ARX2yTopZ&fGTzPQN_c5|Gw<&{(VZ>3OfzFVKp+Ni+2sHXj=?iqvBD3;~0Z_yfRMrP`Lf5L8wTP{2E%$L_o%gcWU?uD{N@|q*G?PSEq zh0H_P!TihhL7Y^|+FmVJ*Ttt+aEjH&dJFB&NAa0I0>8le@4st({*FNW{yW>++F&a) zzDt5Z`up!}gI&g9AHKZw6P5>~H}ca|Y7=Di6T2zh;~Kg3(mnKP+h933*Gu=b1XC4m z#MRP}A6%)3Pc{&xY>So4Y>jol zzo8emtXpLdgjF3I0zt0}CF=%Li+fwT2mEr_V_{lBn?0=?k5l>XJAAfPKe0FQDK@@c zFVS(UlVVVqsw>vlb<9pqVQ_X&5cSUeOL)xtx}EA%_}EnRy`{%K>EBRvnVKwwbZS%T zh|Ccfe^(HTcCv!=TQA{KiLD8ziu$6l;WwNyPF9TXYOJCMwrPP`;xR4^b#xwNZ-N2a zV3ldu$M2zwlWEvLwGIq;5QG>%#3A85sOe(Mi{Khtiep?)!Tn)_4^+{gR*ml{%0BlY zWfC*KgzPkGE78v%elUJRWu^-CWVVH1QLQch{NaZ@BH=}iX+7Mkb;Nm!4>_i8OZWJ8 z^ixn-RP1%-3o6bs58)QsK1|w@CD(}I+*i1mJ7T+)IXp-`%ulNo81R<$FiFpig3dZD z0?P6V)5;*0O%fBK=CtzkPh4Jdg&JT zm^;jtZP-jjelhD=j21RUp&31)m4QjmVPgnCb3Qu3D-P%YGDpSHuQ#k-ucLr-OC*@% zRkSBEGM}@$VQR=VruB*_T^!oGz$&gCbPe18W-rh34A=H!gl75Sm(h@FmW6*mt z#n%)lr+7!o#NbqLj`)77{=J@H>eDBtKdy4nMN@%mcO!c0;&wSG#=Yq7nU0OUO%%q@ zgKQU=2yNB)#{zB|YimnBK&Hd!1OxAS8Hj$!xar*}sSsa5N02le_8`*k?=FICgWLYT z3}@;#zuCgoA0vIU!S9M=cSzQgGj_1e)F}m&;v$Njrro)E+AwY7aqfg)b{9AmSj_q; zh|aTNl@)ZsHW*((Xr8Ks9I^#xxFmz6J+3j4$WCBNW0vs^BBUbQ3UGNM2W%o&7oUK* z00(?)3xjR>Po!YCRTE0gamchEitCUZq<{~(p3i`g%K+m3hSAYAxE`kXzZDaDb=8{B zPjGxEH9mx&4bgtrIcCaWnmwLd~Mfa>FTxH9`0Mw7bv+CxNL!h{6NY zekl0h*8qO;~3G)q?cFo4tpARNAVjr{>?V`ViMGVTBt zJOyQXQsxJ1p{+Fuk`NR&aKGz2Og;Y#W}^?M&*#cdzy^7T331b-!8XyON)nt0kQZ*j zt4#F-dQ{%J#!h%0-g1qVA^T8TK3#OX@g9qgR-U)yxljxS(@dNxgbAhg zWsbQB^xfyLg3W*4yJd=_H9NpuY%a88&U824@eJRiT{MUju;^FB#xa=_`&hXL-_o!x zP!C*>&N&$C$otzW$Q{ep>G+_CL`7hV&b(%y(y?{>hw^EOn}_jY?=HZZky*#k;DO z{7zczDrMOnp9{nfjKIhHnnCKYNzgA_8WCcqRm*aX7)o3zdC)OQVam@sue&u2dKW?e zS2Y1{@+$K;4`mWD0tQA_bL5Iu(VU}PoI^DK0jaG~Y8hfI{SnjzOQDeL23x+*{_FSO zUmw3|{r)?WFXoj)J8`uV~e6F^JGHFw@UC6Bqi*7~#(|`b;FLyZZZ7;r@3j2lBDmfxpVG#6c1w5j4?oBUc>h33N}hG> z(P)_h}LvtlQ(eEz)$hfp-S!fPe)94KUBu3O{p$kii?+GSZ$F5(=I95~?5r795?l zLfU2JxUKGqF4qW6d~n{kofKB(Gc^~0?_HUQmQYWg2EsZf&}~(8r>j>Dfn2G}99B#Z zDYbwoc@_^C*`l^g`xjdi+n0JZjKFByGL8F`8-J^A?6InQ+h`IFDYJg~fw}2JRqEh$ z*Nj_I80M2MNc0Si_tab0i>WeO%ilTkt_#2A1I5psW?V<3%;VDy$bJO%gOk| z+_d?MPOC!Bl!NoXh?cC7^rC?v2eE+=VxW5v8~yjVMi<@0)Q5C{IDeuBRrE$%9(nks zoqpCbOe2;36!BC3{zmKUwrsA5*#8`EF@&3P=_ki^2sHXdXhU7009RUT1&$o6EZuap zZ1y@~#q9Q^#?dq=av}H|xeR(P_Vto77oC*u-4hlfATz?j3jgLs6UwD~r*)B#QMzEb z2cWF_{H0dqMIV#istZ?iLC^Isjj?Ed3j~y_EWHX5?-~~FK@D0?KGrPI9QBaaMGMM* zZnu!tO&l$FkqNtrtTW+iBYY_AM$!YyZpHV4{e76aF?`EW=aMtJJwGCkO;+Vd zDmR2#XGB!ys1??TP-hc|hHk;By{uBf#FF76z$+jTV4cRysXQ@2qVot%7-}4 z?F_`(j2<9_#uF`|i>k@r&FAgvIX_~-t~v39n$*U0FhCL@k)=JZ1Q8{GE=HJA4u&b2 zb*X8!X1wWOL{h=~qIxAo=);XgKJWD~?I7v2%?A86kXPe__1QR7wGT8{sROMH0_{y} zYYHUSNYy1!$F|tXye%|isyUB2*)QJ3koET26Hte16K>!`rP$V9y$n9+h{)}(yKgUY zcM}_oL6!N^J#(XRk(N_#Hiw_%Q=fN*EpUSsUSN*B_Xp5W(QN?dYJrL*MculCmxyvV%Y_otc z4O;ZIb*y=9mi5IT7AJKs#FF@-ngM*A!srcH!8sJTO_!aaJ6$D zhu_osw{_y)X`9H0Xx5i}(09~HJqyxIxDw5UT|l12yjU%V@2@d?1ouW-{}1lP8lhNBp>C9HhfP;(V>GqaR=b2l?& zl>-dSXEs!LfUa|PFuKMAT5$KSmwMT|ZhK9k`#Jkw-ZgjJ_+hGVdMzG$Hr3QWw80m; zPn?@(<i2i0ht1rTE^t$y;a^<^JqZ=M2c>#dFbv=VoZ5^jGHwEEPC9ZuZ@jclXn&67WsBVH;Y^m%^PKcx{FQsgd8lS zH=M(KO_78r>Zum0PYxQ=!4U8-%7p>}q%g87lOwSW0gt8-m2pItLPs~$Z`FAPbZG=5 z0|#UoRo&-3`3x5-wq>Q4s5mTVpmcJZO>gs@6FGEhlz?kPX7EqnId7Xqw$K8^c_9&s z`mrUbn(4qR6-g2=Hv2*`I=|~Ku+~n+7q-_xwd%eB(6cv>NenQ#ovmpz5`f$VquhaN zHcB0?uX)x(Mx`MoOE6`>t}CZ78S4PjNk-=+GXa6yGlI*ZID5#`7Dn9V*D?!}!3sUE zVcb*9DUl~3*0Km2yKG~eD#3TasZP-4%5nCT!tjK~cds;gT5C&<@n3V+_)k4G<`T~c zKwE5sE1dz(B8L;hN4s9H<7pz%L*D;Yn66R6iQ?VjH;8rwHZsJpmm?aYd$Btti*B3iW_VHwUjw~)+R3lZK>|OY2uRzkgMSi^ zXf;_W-NBb~i9w7lSa`YsPVcl0`Q0Z5Q%6C1#PR)hDm=A{K2Wd=nL==mT=^}dW;mhO zl>Lw{hRUZ@K=32YLyb2Pcch59fiGZ^^l07ACDakJ5u-2R#`cqQBXxt*?T3-m4@#aS zAE6RTMv!qX%!nToPH7mEPgZU8{VD^SSYD&tE@tdCz`}jFL62#f=PAw0y|X0nFV?mG zaPh1TO&4RdxmUE_3;P1%Wp%|v`nA@`QE5FF_J)Fh*_)llKg|V^*JMq@us! ziEtcTfVx%&8;E9)}3CsfLRtHL{HF9w2+Aay2@h}hFg4#0eoqHbodpLsS)1rAuH%Wrf zu{g?CMDl)8pQK0fs)sy?*P%#|drn?Rs+9^(RnJ6Rs=F%+O?7m|HSwH>c6-(=RM`fpQleYAd)}5feCdzL@M(!k_g`zdb2f43=|A_V-J<5G4 zoIOs;NNM;qxyJ{#EKHBXwwT2Un4!73v7`%u29_`vdgDqW z(OHe(i(02bV?MY)f)U1BW#9eZ` zUiy;yKgIdKMPBA*m5UjPNxfgs(yvhe=h4d3r@8#!&z?Q~mjC;&_y>it-teGw$o`9k zRj5)ACX)yw*2U$1)P(A!gGYs907lqg9PJl1R4mg zevAbL6nFx8Ghyq8;36JGz2HU10a<4zraBgESoR>u9wH^jTpU+1M^L^>;2=yOdvTAV z1EIij(hriEz+%5&g28co8L<8ois?a|29>1$DxmcP*{uX{E+kMI1GhR=aN@xWyjByA zb2SXGvP+n;D=1M1|JP8m{C6Irx9?9TVRU}{=9djc>EY7+ z+qZxJY5(qU|EEch-~3s6*Q;^X{r@a~|F1lL^z7UH|CiSPP?iW$o@1%LJPy-dJxiBL zrLW5;d?|l`#b!BEPoLBgmI@{6+N6i8%2k{ap<(g&&*LY)1|N}wdbLhjb4{=xEd=)G zG9O=q>6kx}?-rWLS7uedh(*!oL{1KS7ahCR9TjW%P8Sob+pKwaSYoO9})P zkcE4s_KLEqKy_q3^)KeHKAW$~?% zn6lxUnZ1&MK=peBvqpO7W64b@CV{ovu>|9SodW7qm%HQfG(&Ez7e|8-(h%|6I_0G~ z+1a(Qck|%lI3dJ{T7vFzgcmL!%O&-x^ZiZg`@dfPv+F4n>m}I~o5*ye3pT?>H>|_!MUg?{*HzVARFdLJOqbJ1 z&|3l<45_<}GLUP)^8Yan7*zyRUr~u2&LUzl?g^9&?x;P@-@!kiyUjSd43bQhVAqY` zX-%i{c%yv?QzY&Dlz?~$m7h6b#`qVY!eR)V^-dCxU;MVoHrQ{n_#=-x`y_(EKFLr( z;YtK8*0dJ#dA?2Vu zKNi`u)YsxkjR}{oH6dq$NE}_8{WR5jyr48#olVtQ2R=r>f^`$=kVC7pYNMUE;{DWk zUajAccP3caN)dBF^5{=|YQywcmMqXejJ#=#uiV?uxg3%>>!_ z;=Ma-jXxJgzQW=}h~<^QR%pNTlOQ)aNV!KvCl(w&Ixp0@GPO|VnUn8MXoz1>O+$ab zIR#mocK+IZ0yf9`q5V%{m2~sXvXN|BBDtycq#*(sj^OG`yO2??;tTUNV23-)Lq2j&lh1vKTUKlcF!x-` zM}9CTF&=;EVvYoB>(nHeq*X(Dxh4o_e)L`3l~zTj?ze|~hWwny*M-ZIxK(o(HE{9W8-@WJn8Bcl9*yLE67@DE?V zAkO<}v%<@+9xVhpAvCSgRZVBXA7LykM%vQ`@xv%fncwfzF&5$X;)v%U67KbD7DrnM z2C=a@FcOH;#Up}wN;F{d=;e7g*DTJsc*r<<7zO7(9tV+=hr^NYU1ShlxO-nFa|yC5 zsL-&2^H|0Ij{W2Ul=*%NM-)?m=7y9xMi(BEGeLRiW!~I1TNEhls|yJ~yK<#dAP!iJ zm5KDBV(XA>#lI)zUmgNVWom5)_6gI9*6_bGK%u-`PGAfelHhzg@_~qfVJF34{5<89 z`9ik@IdQ;6L)Q5J&OkYe=Ui2n8j4y-E)tBve9_esPW}>JIB1-nm{UQ+lRI{J3Not~ z3n*7^&o#C*3_dKePi%>@NiG$1&OS-XI(rm*g9l02W8@4Ci^B1TiD4{U#PUSswxn%kF!16Wk#0Vo&exInU(QAtf#D(K%J9of* zgJXjKqeH{4hH+{rHYm;k^TP#s5W}>heVg0N>(<9$9y7i-n7_@1ZVPDy20(*R0JVrx zp1`h)&awr2`^9gY6`slYH*F*?`NC2OdGzG8c=!o~1uAsGRl)7K2m)+94h2~v#5DpD zO9c!KczM70t;XIt6*xi>vtiw1YBJVRxKWD3qbN?O0zZF7pA*Tmai#aGBP* zaLJ4GAR~%mK!}G4m7Cxm0nb!v9s++UWw8>7bCaPFYyk-!_YLTU)b=Vyt{7miN%2a1 zSUe+pm-!hR1wJ?o7;1WSsi6j`nHq=98PX7`gy@t){lWmfjZnD@TY$$c&{sm;lt-y_@`tl~q#sAo zW{pWkSmIQQdYYoSexL>W9;rBBO{wHs9mf>6!4#;-H}{1TcNqhyH939{$ahir_qddjnS(3Ii zXJ32N&P6!UCpN&v8Bv%!KXNFLC>h>ymZ)k@u`;td1A^C(KMEDBSu6r|cpWkgE=&lK z9~sQ&TWc604Vy2zuIfrGa~Y3!aVA=)Qtb1y%)z(amC78=EOu0@4#VWU*ew{&NGbw?iKHxx3Itj*b zaZRJ%5aiB&4!OccUj&ONY+dwT)VeNuPsNY7)-1ds!NWSp#D1*j-)hPc^X;v^{P2%T zY!^X*m2`?;LN$af_b^yAaSOM))nOQ26tvM&P0KGpBm^GGsW0HgFAKWk$(fzl6K-Ke z_``(G1^wQdKgT|h4-zb_H(^xp29y_$S9BWbzi8z2xdKVv;atsvZloereaijfl;SW| za#o*T?{e#EnpAb?z39*ZtuZ*Mof?Ci!@6DY(FR*WW^PG8%1G6=)>wyYvgN(H<-S-Q z<}|pd6dq9B{IxrkH3g`goO&@0`}w5+8ek4YglyAPnCEv0=l*Sx3;7YpbM&_qkM*P3 zCp#8yetN474RWw}nG>hA0WZ@n#pGAF?xEd)2uLaBF4 z|4TR!EUo3d4C=3wc#@h%h8?;9k+`Qayb@&S@x910ds`GZ-bQ#B;XN_J{2zh`0GeNYXWs$_-^48#RZqfwB; z{Dm0>%CL=q8}emkJ7Z*Vf4+Dl54dn)*uay)6~ zW>924-epM;^@GILPSbrZ*Dxou6mB%l*vXB(A)jC(~hZaYVoWuX$-k0{bZ6tZm zYkZ1UR%;M3L`gm;v?WarXXCLw$wqQ!_t9`8h=e4Jc@05E*2w(s&##W|u5L7VNR*Sz zSTAe>=%f0stN(QaGQLDk6U8KI9(D>T=}vLDHCGL*hX)Qmy)6=B2S* zN|k8c62>)O+xTqyzUUR8(`If9$#Q#Qi1s^}lkODY9L_MTG6Q7K2=C;leO3F;z=?Z z=Wv^)O9BXpoqi8^-K#S+maPO<)hHhqICi}y>ycR+OZFlJ0M|w#6I&$|)vgR17*}v;_zYty2lcLR_^Lm^i~RT!HF={E`hk6;M#853%ME(?*{HT&q#L zEUa}jg0S5gsmfDQ-lA`Wbh%Rf91TtZ3J|Vy)mmBC#rh?@kO9+|R|aqWtUa$6_OJtr z{-|dVmdx?z2f}hEPgt#8iH-Mqdz8B>l7(e#sNAg-9=nDfGBnNIYvT~8A zk!(?bl2ld1rCQ=@Sbtjp-ppPo3#e8gi%dzK?{w!)6ghjYCP+?e*NOko(OA=@B6qxJ z7UY5i2d(D#bZzNQ@Bf7EUTk-Zat{c=GfU{=-MR|9Nzg8x0wr zAziD@ZK@;SoI$Ojz_o|eUbOJpV;nDx!wjLb(Q&E8GO@^?cAt}5{GOT)-VKJAgH$`A z?~%j2R{d5;vX(e=_!?93XGYEUS64sN`S zaXl;VX0FjuNiBK_CFa7HLQL;qW!24ag1ap*=j!zUIUFzsa^o^GIHI%Y`w^f$ zIw{I>nwQ{l-9?<6l1MFU#+s5Jw8AIEJYOHE|HXU2lqrlghc1V7y9I0i>AM@ zM?*8{1>xSjgtx(|kLjy3|BUFW_Z7er0|b-0fb|c$G^`{{ucxV~p1&9?PnLs2nhk1r zANFo?oBso=0|D6j1A0##=I5Y|TsW*)dr66_z2vq_?6xN6P3-sU+ah!3yfzn8;-QJIB0l`$-| z+tF-sCv|j=xqW2H4P$0h*63vDHs(!s#W9|WGp@3v`10tO&!=+T5zF$Gy+#{syL7Uy zIfI|o6EBzbda2g}-MYv(gBq~|3-V~$_#8reGi7|d@MO!KA!qj#ll|oc8uEEL84m~N zJvdp&$llGnpOaf4n0wIn27939piVyPjMdA!OA_5?o zjnmZ-Ji&A`JV?6L2i3TSyZG#n;7SYHhaQNn>_5KS^&+nNklRixXq73b4kaJn>*-vm zZmb*fmvGvi7r%g;P|XU&+a8)FcVC*>Q{O{dQ@jre?_@8$I|G7T&&pQJDTtD{bM}+>2Zi4@K zvn^oW`rqAo`e^rQ1^;*F!Oo}k|Eu6X@_L0C@B-FrstDTs6-I8gFx9CWJvUXO0;1dM z*r3Y;Nm?Aq&N$B|x%Q)h3heJyFeYyYF&RY;v?QGK2r3ByV;iwp4RNAV`uoe4#R@P^z#jdQ+auWp0KxvC` zEKL@~Z;GPzB3VWs7sN7(ZUJB^=Vv{JWwciKO25u}1k32I!7C*xcZFZMaD0}-g_NYO z8NPDi@ZN&Lb%0mO1^RJ;E2Ccvvocx+u5uZON`o31Edxq94~Q~Q(yGvtb}8Hq>?F^? zTI9)<0VAVZfK5g}@-4yn*7Vt4zC(>gr#$&V$xMMx6V{~_Tj!PgpMt23_ zcr)-H^OU-?iQ#qx)X%PJI7{>mI7tG5gcQ5*Eoy|5E!EyKrcqO#9Uk*Z85rA zn8n`+z+!ZF$cpR4RE&NFFvYdQC`N0;PrMy+;$k{(44Jr2u*B#NP!fNAe8lLEfe~*H zi5RVfg~;agXgwH+_1+t6M?S1z9!6^eJ6r+gFuFCqVF=mKAC&bV8dg*RVNk;*;S8fX z9K+~i0vJ}I3!^&B!l(|cF!E6fT~tB`Aq{{BqcGxN6oeX#0vLl)1za!+pbADy!wE)V z9KompAm{@IdH{h2M^l0UMpYERC;ZHlNzw zR)`s3?JMg5=vxfV7p)(cZyqLJbQf@ZYlq_VosHLvz;}1(d)yzt8tPtjQ^36y!1kg$ zz}Z_KV=r1Gyxt9<^`e`h>Me(;7u^y}Z@oZz(fTm-md4ME?glz^mWX*Pq2)!l z16Vtq}xoIRLz9jo5d~;oe0zg1lQ2?k>79 z(%lVE?xM8-+${-i7p)i9t{&4ax(hhFWufe%yF;6M9S$XHSW?2U))uoNuA3a==0fYg2mpME(4;@YDPm741L& zEJU^1q#(#ZN;Wf52Cd_BZsI_zY#W-v8r8wUp4zETMz!Hh99?R(3c?>+i}qB-!xRMm zxj25K>1nU%EKtLeOb&fC8s}%ld#GtM#+R`Bk)g@lY9F5I;+l93{lfk_bp1C!5#wVWv(Jbzg5diBjH?pOMJ*kt&9-)aR4GCbpwbe$?*=(e-K1i zZ5Pq{*4rWM^15K665gmib63JiX$l7O5hyXKP@N`8L^~6Invl>opxGuH`;p7W_V7N8NFSlSGYwf;YI!+I*m2Je_6g=YGq)CIDtU4%|U6WbBG|tK-s-hsbd;-*-rkE}uHFTFs8Y{VsJ%ClJb*G=7FO}MFI`2TM z34*x0p_%sR*79=}{A%VTCjbaDX(L~3`2L7aN z2xQx9@a9Lw&x}u#vDO?@0jS1Dkr#Ks#p27gvXz5T)0A(QAok|+Em(zqeWs$P3J`;b zp)M=My}h-t6|<#UY6UfMbU?+x{#M4mMBEND@T^Q>A)1C2$%Mmc1CLzI6-3UU1PccZ zi7ee}Ohn0WdTunur)t5b0MuA~lb4;wa9o@hgRCcT_KZKMXX#Frr@s))81+ocNe{av z9hSNh=af_j>RQEd%YL0Ho>BHqI5|`N`UHzW! z+?i7pDu+4~xcY0^Xs0lHHy9H@ao4jH`OLk2wec>$a^&01I7xz&88l&XGCP{FAcN0r zG0bAS2|$12Q0tj27>lMDB0Fm}2gir^J8TJzc$4(FiK;0=?I|8z$j*tnW(64bg&9=C zkc!u-B6m6LFXvR|-o>xjHw}|t6P}V}gW1fG;~S9BVJkT}KqD(Z@>V}fcmfHkVUzHv zW~N*`Z6Fh_2}X|Zh9tA3fkixU5DxNS-jU4i@l7zt_5DTlJ_-0kCvdGX!nRlfz73vB|Gu71jRJDHev22?yjUc z@W4VxI^{~o7nNgi{$iKn!XBLt;#I0}!nb&f4btVw#KSXn9BZ$MI90JW8p3aF(u3b* zmxo_yB9B?a=?aNemj9Yvi1Mqp!|A8ybOI5=7s>0IF9vS;E)a92wBAL?>dwM@vM@)A z@sf7O)rP7`{(LClp(9iE8*wVy-7mIv#VNZ_#a(bX9LKaAmzi(E?CDH9Y2Uo-hRE7% zQ!cad0GXa8+rlPOhv{>ysLLOewkUw@;Owb7j>#VpCOCQ`#_eU+n=Wm+EkGOD9M)JH z-U6$`3Q86bgt^(otRG^y&_9S18w3+6vg%_T&4K)ibO6AJ!J!=6{TAFhOwAhi#MCU= zDXj)_izC}=4E$iQB2Oo1nPtTqkdW?9bV*>RsG;DXB4@CGL_D7?s+i<`a}*pjU5hAj z64Im-Xcx41Lv$FFi2a33ElWA@(zA!y0i&chA2FXjcKL6&1iY6M8Y8q?*9;O~wNbqK zm3r3To6#j-3>d&rcA!&~WZWh!s86~OEGu8RJIuaZ~l;z{{*mO_(pxGb=A7xEI zmS8-C=bP6i-E99PNDX@a2};nh5B_0?zIE_;qPXQ*Jl;l-e=7#>h`U2yIAr>)bO(?9 z>^=Th;1jsotcl$dV)So@+0&*!Ic(N#)||k0N7f$`R;7Y1!gwb%j49FFH7HfqgF9T;ZoMtL{(bWtQ4*qkvrJ|ekhGeJCt((yDW^v?$)($D3oy$UaFr@0VH-t){N3$M)4wi6dpR6`-ve9#0!eKr! z_v!Z=iL*E+cp+mCvm$rH)(%*ZXdD!I4d+9-nipBwU>eK`$xZ-y+043K^A+Ag1*NGV zN{w*tv4=o^GVEZkf5@X~xBj;5(%(Zh`-L@jkbg&p>gnF)+Yy(cCU|3qZpZ zY5BGENqxqinR}-HfgRZhHlSX4BQ}p?lubJqMX%e2U4$2ZK9~UTw39ihn>3g^RmaU{ zlaME2!KO?qO^jMWeeOKOG_v6M`MdmTKW@|Fu|@kz3m7~70#C#ZI1%BlBl1Ersj+k! zBh7r0SVbgg`n*cd92FGyJ-8jw1?fGt^NfE!mkKFX(DAqX_w9x{pFGIR?9+y%(j1n+ zsa5FJXR+No$*;jvWoQH#gZ!e;THd*i@pwfeJHg)A^2P?*%buI_91n1()5u)y+WMomi~BZG?F?}bY&zcl*|r>nnkAL5OHGc{aS}^plv;hV4K-$2r3P{d zQnMPOtFy{o?Jj4k)pQPdiM@qYf7(V(!44N1tY! zQX7JqtFl$wZB2}q*<+0N$-GgS4h(ERUD*3<^I8-(`%Df{Bo_x$uWJc!l5%B**N50E zsRvQ9n^YVGbY}$yzU`e1=<_YMad>X%i@t{S_r`_3Ct(k?Y;e^`Tv_&5n+;Rr^qQ)e z_vg6Xq&sqXX?&CBm5(E?HAKD(tFqrowZBZ~RI*#5l1ugbqut96Zl9DpRA* zD8^N6G?GBFjryb4KFgG|s`kfCr9EyOIl&0r!pZVltLE{zN%iGtKCcmofO=xay1szw zUVG2jUS^0l+0h2|O{!x2iHf&-c9SODAlh-nc0zM=3;`P8ZDD~s%^g!_6Rtz;CaAD! z#Dp3b%bE})Mp}Omlr2yP>e3p=kx+>hWdl&!l2pDlcrlI2T1FZ)NL-wxN-NWb0vN_s znlO1Vf>4#KOXCeT`%B|Kq)X^AkH1E*JXQLfZn;?UX%@rNl}}kGB5zzDN_Gbaz$GXb_FnH0-yuk!C z#Ut~;V=4SN4`erdg`eGSAPjYp=)3%VSm%Bxv$ze%0c}<-&>h4ik@0 zF&Pv9yM~}VX9)!=$H`$Uzt(E}DiN-cl#+XU0_h*xOH!;C`67zVUW*zTaOEooKY||y zdj;xik~R1@0A`iS+p+c{;=CI+^E)lthE@-AEC;W zGLoU0Q?y{iQ;LN&Bzwd0M_qSoC}x6Vs+Pf4sG zLZvh(c{$N;a|_AW#2dr{CS~)Qet6A5*&(z7SQSkarn&t))cO;@XNX9Pd|v~H@h-obRTVQ(kJ~ZSg&+20cP!GUE?g533IyY2E?fxa zZV`^JG#CWfb>{`mo8aOx>hqOXk5IhdWcio_ZngDOlydDzsQdZbuuK`Y8<^=X?3W@} z$h@^22QCU}0>a9oJx@-gkUeu5OKeU33#!(OmoQo?*O|}V3)uEr2pcKw^=4hPaY|5Qu7IT({-~QmX~Xu}Z5|8~~2V|HpWV za>ohp2Z2T1LMN3fxDI;}Nrzn+KCT%zT629fQKnkJ=%6H$UDQ6oRvG3PNHuP5lR>_X zeU!22dif-`RRk+ zN>HS7d^s_7-RG^!&2)_~Nz&cCpQWFbS zU|j8ej{dw}c-zWVuyGH&eV-mzoOMm5qJdra#@mZA&7It*qTIQfrXTI0-hCg#71BZ## zd3x+)P0)s(r)`3Z72_4`9Y&QkE^K*!J?7zOUj7_l z!SIVA#l2KU9cJ4Or6Y%dY3KHhqmZagDGTS}OWHPmpenmc*{mqApIh^q-&Er~i;a~+uZdH*u7^@4quU%60d=w%v%6cV>QxDKF{ zZ?b@*-*dKkrcTFs_O4PCE<#(Ddk+FVWE!I2+G613vZXLyjL3*AxhS-@AQU!Rb#OVN z#8fR)9O!!EmWL*%y!WyZX^5!`2*{Zt_gZ2nypr^j%=wAHk3Or>xf@T ztt{JY6Nj5Ezr*^EZ#r_Hpqo+^txy_3jFMJ@PuQ0Z?u2)iC-G4Tyfwio4I)To%I2(?571D8D8`VThhcu-gqz5|`;QB7aL8?FF55iJMHD=_MgDZxXkl+TUoK)8J7Lw zyJE84D^9mD63ceKC_Bw=b5br>$Ii~qlShwK=>5*l&f~`q9;-h*eEei*clXJYok!{q zI}dgr?>tq1*!dV8Fa>s7m@j-ExcXA#nno#nkNjB2hOet-sznSo(ew3i&@DJ@ zA!BQTqT(X&jq)*td&)TW<#f#PE(yve)LSp81dea<7Q}4~ePQGJr~~!ZrGO*JXUvU( z-w|JSN_8|)h!e&k9xc3%P8Fu)O?Gvfqgf83knE}BqqZU9m;vIC+imC*MIj51j@v}g zU&q@#Q`F_d;kjhtvoIAovDWJa11m@b}OIWj>ipe?J@jgk?Q{izm)< zEig>C4H@jS|3lGvr^>uXwlj1t zM$iHin=&==gL_vZ^0VBImRJD*b1P00U37&R*f&5O)N}}I{&JGz5&s;Ac{uLmT_>>X z4_LPClJEP)B-kW~7~bm*FZFnLhNG*wR1f>b#GQf5k(soR2uaj8*jXyW{UgWdqR6&f zj_G`}AwYS>z`EO_U(atCN?_W;-b7em@ z`;AF{zq;V}Ta){K%VOVeT5O7vmI5FG^q-0x}$57Wapv} zB4AKr=G7WR>AM%9Z`L2ejww2WUNlUtj6Ih$>^0H^V4Jg2$nCnfZZ5e;cPP1k1c}{x zZ_`a>6KfQ3jtB;87Kkf}&V5$aj}~2hMvw}u8xge`JX5=giK}_;odS`tF4o_zlnl35 zF5IyH+w8S{wI1Eax^*7wR(Y&l)v+Rh;$XpD zw*FXI3xR=s)C;|=w+!4QuMNd5hIZ#Y(zeL}dc%S8$^Kt&|ECjhX%Bz}_Wy^Ep7{Eo z2Rlz5e$xMZEd9^h5unF{A1~Q!-Fo&@H8md7iln)=oAmCRwleXKs!U%9ZFJ zq~v`)yj(+V)4{U!X(7Cul@}mY!ofQ(JHv4fcQT58fzadmdq6o>ovfetzRt>gK~p)^ zay9G1fr2et=O`Oz{Tv$ISyUk=UA;ovR8eg?$lm3PtHflBtNc-G1S~UYdM9WQ)lTUB z9EPr?Wk{2$wph~#bBevV8eQZA40_Mynq1E!ofKSh%Td1Xwp9GRcpkM>{DXM@ zM@z;3EuP0M75^xn%a)1{#WMuHJQB~-mWtns=U-YX{z*Jvwp9FA@%+A};{OrPS1lF) zuXz4vOU3_>pJ(0>;@BMxaU{hMe%VrSCW`o~rQ%cZ{B=vk9r64P1RNF5FCdnuc>cDf z;xqC5Uo91%i|6kEhgdwnY^k^q℘I`0wKRRZGS1#Pe%_A{WnZS}N{~=fAX6JP^;{ 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 literal 253523 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