Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ jobs:
cargo nextest run --manifest-path crates/flow/Cargo.toml \
--all-features \
--test performance_regression_tests \
-- --nocapture
--no-capture
- name: Check for regressions
if: failure()
run: |
Expand Down
3 changes: 3 additions & 0 deletions REUSE.toml.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/CONSTITUTIONAL_COMPLIANCE_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_CACHE_INTEGRATION_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_HTTP_POOLING.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_INTEGRATION_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_PROFILING_BENCHMARKS.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_PROFILING_BENCHMARKS_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/D1_SCHEMA_OPTIMIZATION.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DASHBOARD_CONFIGURATIONS_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DATABASE_OPTIMIZATION_PHASE1.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DATABASE_OPTIMIZATION_ROADMAP.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY16_17_TEST_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY18_DOCUMENTATION_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY19_DEPLOYMENT_OPS_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY20_MONITORING_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY21_CICD_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY22_SECURITY_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY23_PERFORMANCE_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY24_CAPACITY_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY25_DEPLOYMENT_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY26_MONITORING_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY27_PROFILING_COMPLETION.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY28_PHASE5_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAYS_13_14_EDGE_DEPLOYMENT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY_22_PRODUCTION_DEPLOYMENT_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/DAY_22_PRODUCTION_VALIDATION_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/EXTRACTOR_COVERAGE_MAP.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/EXTRACTOR_TESTS_SUMMARY.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/HOT_PATH_OPTIMIZATIONS_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/INCREMENTAL_UPDATE_SYSTEM_DESIGN.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/INFRASTRUCTURE_COVERAGE_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/IO_PROFILING_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PHASE1_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PHASE2C_BACKEND_INTEGRATION_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PHASE2_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PHASE5_COMPLETE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PHASE5_QA_VALIDATION_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/PRODUCTION_VALIDATION_TESTS.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/REAL_WORLD_VALIDATION.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/RECOCO_INTEGRATION.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/RECOCO_PATTERN_REFACTOR.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/TASK_51_COMPLETION.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/TASK_58_COMPLETION_SUMMARY.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/profiling/HOT_PATHS_REFERENCE.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/profiling/OPTIMIZATION_ROADMAP.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/profiling/PERFORMANCE_PROFILING_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/profiling/PROFILING_SUMMARY.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions claudedocs/profiling/README.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/ast-engine/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
5 changes: 4 additions & 1 deletion crates/ast-engine/src/tree_sitter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@
//!
//! ```rust,no_run
//! # use thread_ast_engine::tree_sitter::{StrDoc, LanguageExt};
//! # use thread_ast_engine::Language;
//! # use thread_ast_engine::{Language, Doc};
//! # #[derive(Clone, Debug)]
//! # struct Tsx;
//! # impl Language for Tsx {
//! # fn kind_to_id(&self, _: &str) -> u16 { 0 }
Expand Down Expand Up @@ -144,6 +145,8 @@ fn parse_lang(
///
/// ```rust,no_run
/// # use thread_ast_engine::tree_sitter::StrDoc;
/// # use thread_ast_engine::Doc;
/// # #[derive(Clone, Debug)]
/// # struct JavaScript;
/// # impl thread_ast_engine::Language for JavaScript {
/// # fn kind_to_id(&self, _: &str) -> u16 { 0 }
Expand Down
5 changes: 4 additions & 1 deletion crates/ast-engine/src/tree_sitter/traversal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
//! # use thread_ast_engine::tree_sitter::traversal::Visitor;
//! # use thread_ast_engine::Language;
//! # use thread_ast_engine::tree_sitter::LanguageExt;
//! # #[derive(Clone, Debug)]
//! # struct Tsx;
//! # impl thread_ast_engine::Language for Tsx {
//! # fn kind_to_id(&self, _: &str) -> u16 { 0 }
Expand Down Expand Up @@ -56,6 +57,7 @@
//! # use thread_ast_engine::tree_sitter::traversal::Visitor;
//! # use thread_ast_engine::Language;
//! # use thread_ast_engine::tree_sitter::LanguageExt;
//! # #[derive(Clone, Debug)]
//! # struct Tsx;
//! # impl thread_ast_engine::Language for Tsx {
//! # fn kind_to_id(&self, _: &str) -> u16 { 0 }
Expand All @@ -71,7 +73,7 @@
//! // Non-reentrant: only finds outer matches
//! let outer_only: Vec<_> = Visitor::new("$FUNC($$$)")
//! .reentrant(false)
//! .visit(root)
//! .visit(root.clone())
//! .collect();
//!
//! // Reentrant: finds all matches including nested ones
Expand Down Expand Up @@ -117,6 +119,7 @@ use std::marker::PhantomData;
/// # use thread_ast_engine::tree_sitter::traversal::Visitor;
/// # use thread_ast_engine::Language;
/// # use thread_ast_engine::tree_sitter::LanguageExt;
/// # #[derive(Clone, Debug)]
/// # struct Tsx;
/// # impl thread_ast_engine::Language for Tsx {
/// # fn kind_to_id(&self, _: &str) -> u16 { 0 }
Expand Down
3 changes: 3 additions & 0 deletions crates/flow/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/flow/claudedocs/LOAD_TEST_REPORT.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/flow/claudedocs/PHASE4_COMPLETION_SUMMARY.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/flow/claudedocs/builder_testing_analysis.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
4 changes: 3 additions & 1 deletion crates/flow/src/incremental/backends/postgres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ impl PostgresIncrementalBackend {
cfg.user = Some(user.to_string());
}
if let Some(password) = pg_config.get_password() {
cfg.password = Some(String::from_utf8_lossy(password).to_string());
let pwd_str = String::from_utf8(password.to_vec())
.map_err(|e| StorageError::Backend(format!("Invalid UTF-8 in password: {e}")))?;
cfg.password = Some(pwd_str);
Comment on lines +104 to +106
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This adds an unconditional allocation/copy via password.to_vec() just to validate UTF-8. Since get_password() already yields bytes as a slice, prefer std::str::from_utf8(password) and then .to_owned() to avoid the extra allocation. This keeps the same strict UTF-8 behavior with less overhead.

Suggested change
let pwd_str = String::from_utf8(password.to_vec())
.map_err(|e| StorageError::Backend(format!("Invalid UTF-8 in password: {e}")))?;
cfg.password = Some(pwd_str);
let pwd_str = std::str::from_utf8(password)
.map_err(|e| StorageError::Backend(format!("Invalid UTF-8 in password: {e}")))?;
cfg.password = Some(pwd_str.to_owned());

Copilot uses AI. Check for mistakes.
}
if let Some(dbname) = pg_config.get_dbname() {
cfg.dbname = Some(dbname.to_string());
Expand Down
3 changes: 3 additions & 0 deletions crates/language/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 2 additions & 1 deletion crates/language/src/html.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ use thread_utilities::RapidMap;
///
/// ```rust
/// use thread_language::Html;
/// use thread_ast_engine::{Language, LanguageExt};
/// use thread_ast_engine::Language;
/// use thread_ast_engine::tree_sitter::LanguageExt;
///
/// let html = Html;
/// let source = r#"
Expand Down
14 changes: 8 additions & 6 deletions crates/language/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
//!
//! ```rust
//! use thread_language::{SupportLang, Rust};
//! use thread_ast_engine::{Language, LanguageExt};
//! use thread_ast_engine::Language;
//! use thread_ast_engine::tree_sitter::LanguageExt;
//!
//! // Runtime language selection
//! let lang = SupportLang::from_path("main.rs").unwrap();
Expand Down Expand Up @@ -259,7 +260,7 @@ macro_rules! impl_lang {
/// assert_eq!(result, "def hello(): pass");
/// ```
#[allow(dead_code)]
fn pre_process_pattern(expando: char, query: &str) -> std::borrow::Cow<'_, str> {
pub fn pre_process_pattern(expando: char, query: &str) -> std::borrow::Cow<'_, str> {
// Fast path: check if any processing is needed
let has_dollar = query.as_bytes().contains(&b'$');
if !has_dollar {
Expand Down Expand Up @@ -672,7 +673,8 @@ impl_lang!(Yaml, language_yaml);
/// # Usage with AST Analysis
/// ```rust,ignore
/// use thread_language::SupportLang;
/// use thread_ast_engine::{Language, LanguageExt};
/// use thread_ast_engine::Language;
/// use thread_ast_engine::tree_sitter::LanguageExt;
///
/// let lang = SupportLang::Rust;
/// let tree = lang.ast_grep("fn main() {}");
Expand Down Expand Up @@ -1721,17 +1723,17 @@ pub fn from_extension(path: &Path) -> Option<SupportLang> {
}

// Handle extensionless files or files with unknown extensions
if let Some(_file_name) = path.file_name().and_then(|n| n.to_str()) {
if let Some(file_name) = path.file_name().and_then(|n| n.to_str()) {
// 1. Check if the full filename matches a known extension (e.g. .bashrc)
#[cfg(any(feature = "bash", feature = "all-parsers"))]
if constants::BASH_EXTS.contains(&_file_name) {
if constants::BASH_EXTS.contains(&file_name) {
return Some(SupportLang::Bash);
}

// 2. Check known extensionless file names
#[cfg(any(feature = "bash", feature = "all-parsers", feature = "ruby"))]
for (name, lang) in constants::LANG_RELATIONSHIPS_WITH_NO_EXTENSION {
if *name == _file_name {
if *name == file_name {
return Some(*lang);
}
}
Expand Down
3 changes: 3 additions & 0 deletions crates/rule-engine/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/services/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/thread/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions crates/utils/CHANGELOG.md.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions docs-site/public/thread/_headers.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
3 changes: 3 additions & 0 deletions docs-site/public/thread/robots.txt.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Knitli Inc. <knitli@knit.li>

SPDX-License-Identifier: AGPL-3.0-or-later
4 changes: 2 additions & 2 deletions xtask/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use pico_args::Arguments;
use std::path::Path;
use std::process::{Command, exit};

const CRATE_PATH: &str = "crates/thread-wasm";
const PKG_PATH: &str = "crates/thread-wasm/pkg";
const CRATE_PATH: &str = "crates/wasm";
const PKG_PATH: &str = "crates/wasm/pkg";
const DIST_PATH: &str = "dist/thread-wasm.optimized.wasm";

const HELP: &str = r"
Expand Down
Loading