Skip to content
Merged
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ an individual is officially representing the community in public spaces.

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[INSERT CONTACT METHOD].
conduct@sentinel-ai.

All complaints will be reviewed and investigated promptly and fairly.

Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ members = [
[workspace.package]
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
license = "MIT"
repository = "https://github.com/user/sentinel-ai"

Expand Down
173 changes: 141 additions & 32 deletions calibration.json
Original file line number Diff line number Diff line change
@@ -1,33 +1,142 @@
{
"name": "cs2_default",
"version": "1.0.0",
"match_count": 1000,
"player_count": 10000,
"baselines": {
"baselines": {
"aim_velocity": { "name": "aim_velocity", "mean": 120.0, "stddev": 40.0, "p95": 185.8, "p99": 213.04, "sample_count": 0 },
"counter_strafe_accuracy": { "name": "counter_strafe_accuracy", "mean": 0.7, "stddev": 0.15, "p95": 0.94675, "p99": 1.0, "sample_count": 0 },
"crosshair_placement_error": { "name": "crosshair_placement_error", "mean": 15.0, "stddev": 8.0, "p95": 28.16, "p99": 33.608, "sample_count": 0 },
"flick_distance": { "name": "flick_distance", "mean": 25.0, "stddev": 15.0, "p95": 49.675, "p99": 59.89, "sample_count": 0 },
"hidden_tracking_duration": { "name": "hidden_tracking_duration", "mean": 0.5, "stddev": 0.3, "p95": 0.9935, "p99": 1.1978, "sample_count": 0 },
"info_kills_ratio": { "name": "info_kills_ratio", "mean": 0.3, "stddev": 0.15, "p95": 0.54675, "p99": 0.6489, "sample_count": 0 },
"movement_smoothness": { "name": "movement_smoothness", "mean": 0.8, "stddev": 0.12, "p95": 0.9974, "p99": 1.0, "sample_count": 0 },
"path_efficiency": { "name": "path_efficiency", "mean": 0.75, "stddev": 0.1, "p95": 0.9145, "p99": 0.9826, "sample_count": 0 },
"prefire_rate": { "name": "prefire_rate", "mean": 0.1, "stddev": 0.08, "p95": 0.2316, "p99": 0.28608, "sample_count": 0 },
"reaction_time": { "name": "reaction_time", "mean": 0.25, "stddev": 0.08, "p95": 0.3816, "p99": 0.43608, "sample_count": 0 },
"rotation_speed": { "name": "rotation_speed", "mean": 5.0, "stddev": 2.0, "p95": 8.29, "p99": 9.652, "sample_count": 0 },
"target_switch_speed": { "name": "target_switch_speed", "mean": 0.3, "stddev": 0.1, "p95": 0.4645, "p99": 0.5326, "sample_count": 0 },
"tracking_smoothness": { "name": "tracking_smoothness", "mean": 0.85, "stddev": 0.1, "p95": 1.0, "p99": 1.0, "sample_count": 0 },
"trade_kill_timing": { "name": "trade_kill_timing", "mean": 3.0, "stddev": 1.5, "p95": 5.4675, "p99": 6.489, "sample_count": 0 },
"wallbang_accuracy": { "name": "wallbang_accuracy", "mean": 0.15, "stddev": 0.1, "p95": 0.3145, "p99": 0.3826, "sample_count": 0 }
},
"version": "1.0.0"
},
"metadata": {
"created_at": "2026-07-17T09:21:18.382208600+00:00",
"source": "synthetic",
"game_version": "cs2",
"tick_rate": 64,
"maps": ["de_dust2", "de_mirage", "de_inferno"]
}
}
"name": "cs2_default",
"version": "1.0.0",
"match_count": 1000,
"player_count": 10000,
"baselines": {
"baselines": {
"aim_velocity": {
"name": "aim_velocity",
"mean": 120.0,
"stddev": 40.0,
"p95": 185.8,
"p99": 213.04,
"sample_count": 1000
},
"counter_strafe_accuracy": {
"name": "counter_strafe_accuracy",
"mean": 0.7,
"stddev": 0.15,
"p95": 0.94675,
"p99": 1,
"sample_count": 1000
},
"crosshair_placement_error": {
"name": "crosshair_placement_error",
"mean": 15.0,
"stddev": 8.0,
"p95": 28.16,
"p99": 33.608,
"sample_count": 1000
},
"flick_distance": {
"name": "flick_distance",
"mean": 25.0,
"stddev": 15.0,
"p95": 49.675,
"p99": 59.89,
"sample_count": 1000
},
"hidden_tracking_duration": {
"name": "hidden_tracking_duration",
"mean": 0.5,
"stddev": 0.3,
"p95": 0.9935,
"p99": 1,
"sample_count": 1000
},
"info_kills_ratio": {
"name": "info_kills_ratio",
"mean": 0.3,
"stddev": 0.15,
"p95": 0.54675,
"p99": 0.6489,
"sample_count": 1000
},
"movement_smoothness": {
"name": "movement_smoothness",
"mean": 0.8,
"stddev": 0.12,
"p95": 0.9974,
"p99": 1,
"sample_count": 1000
},
"path_efficiency": {
"name": "path_efficiency",
"mean": 0.75,
"stddev": 0.1,
"p95": 0.9145,
"p99": 0.9826,
"sample_count": 1000
},
"prefire_rate": {
"name": "prefire_rate",
"mean": 0.1,
"stddev": 0.08,
"p95": 0.2316,
"p99": 0.28608,
"sample_count": 1000
},
"reaction_time": {
"name": "reaction_time",
"mean": 0.25,
"stddev": 0.08,
"p95": 0.3816,
"p99": 0.43608,
"sample_count": 1000
},
"rotation_speed": {
"name": "rotation_speed",
"mean": 5.0,
"stddev": 2.0,
"p95": 8.29,
"p99": 9.652,
"sample_count": 1000
},
"target_switch_speed": {
"name": "target_switch_speed",
"mean": 0.3,
"stddev": 0.1,
"p95": 0.4645,
"p99": 0.5326,
"sample_count": 1000
},
"tracking_smoothness": {
"name": "tracking_smoothness",
"mean": 0.85,
"stddev": 0.1,
"p95": 1.0,
"p99": 1,
"sample_count": 1000
},
"trade_kill_timing": {
"name": "trade_kill_timing",
"mean": 3.0,
"stddev": 1.5,
"p95": 5.4675,
"p99": 6.489,
"sample_count": 1000
},
"wallbang_accuracy": {
"name": "wallbang_accuracy",
"mean": 0.15,
"stddev": 0.1,
"p95": 0.3145,
"p99": 0.3826,
"sample_count": 1000
}
},
"version": "1.0.0"
},
"metadata": {
"created_at": "2026-07-17T09:21:18.382208600+00:00",
"source": "synthetic",
"game_version": "cs2",
"tick_rate": 64,
"maps": [
"de_dust2",
"de_mirage",
"de_inferno"
]
}
}
1 change: 1 addition & 0 deletions crates/sentinel-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -448,3 +448,4 @@ fn print_usage() {
println!(" stats <vectors.json> Show dataset statistics");
println!(" verify Run verification checks");
}

1 change: 1 addition & 0 deletions crates/sentinel-core/src/feature.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,4 @@ impl Default for FeatureRegistry {
Self::new()
}
}

12 changes: 9 additions & 3 deletions crates/sentinel-core/src/world.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::bomb::BombState;
use super::bomb::BombState;
use super::evidence::Evidence;
use super::feature::FeatureVector;
use super::grenade::GrenadeState;
Expand Down Expand Up @@ -98,6 +98,11 @@ impl MatchContext {
&self.states
}


/// Get mutable access to all tick states
pub fn states_mut(&mut self) -> &mut Vec<TickState> {
&mut self.states
}
/// Get the first tick
pub fn first_tick(&self) -> Tick {
self.states.first().map(|s| s.tick).unwrap_or(Tick(0))
Expand Down Expand Up @@ -234,7 +239,7 @@ mod tests {
#[test]
fn states_in_range_exact_match_boundary() {
let ctx = make_context();
// Exact match on both ends both should be included
// Exact match on both ends — both should be included
let slice = ctx.states_in_range(Tick(100), Tick(300));
assert_eq!(slice.len(), 3, "Should include ticks 100, 200, 300");
assert_eq!(slice[0].tick, Tick(100));
Expand All @@ -245,7 +250,7 @@ mod tests {
#[test]
fn states_in_range_no_match() {
let ctx = make_context();
// No exact match for 150 should start at next higher (200)
// No exact match for 150 — should start at next higher (200)
let slice = ctx.states_in_range(Tick(150), Tick(250));
assert_eq!(slice.len(), 1);
assert_eq!(slice[0].tick, Tick(200));
Expand All @@ -266,3 +271,4 @@ mod tests {
assert!(slice.is_empty());
}
}

2 changes: 2 additions & 0 deletions crates/sentinel-map/src/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1391,3 +1391,5 @@ mod nav_tests {
"No nav areas should fall back to wall checking");
}
}


1 change: 1 addition & 0 deletions crates/sentinel-visibility/src/los.rs
Original file line number Diff line number Diff line change
Expand Up @@ -886,3 +886,4 @@ mod tests {
assert!(blocked, "Line should cross inferno mid wall");
}
}

4 changes: 3 additions & 1 deletion crates/sentinel-world/src/rebuilder.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use sentinel_core::{
use sentinel_core::{
Angles, KillEvent, PlayerId, PlayerState, RoundPhase, Tick, TickState, Vec3, Weapon,
};
use sentinel_core::source::PlayerSnapshot;
Expand Down Expand Up @@ -558,3 +558,5 @@ mod tests {
assert_eq!(kills.len(), 2);
}
}


1 change: 1 addition & 0 deletions target/.rustc_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc_fingerprint":7103662331009642610,"outputs":{"4190793534742413449":{"success":true,"status":"","code":0,"stdout":"rustc 1.96.0 (ac68faa20 2026-05-25)\nbinary: rustc\ncommit-hash: ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96\ncommit-date: 2026-05-25\nhost: x86_64-pc-windows-msvc\nrelease: 1.96.0\nLLVM version: 22.1.2\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\User\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""}},"successes":{}}
3 changes: 3 additions & 0 deletions target/CACHEDIR.TAG
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/
Empty file.
Empty file added target/debug/.cargo-build-lock
Empty file.
Empty file added target/debug/.cargo-lock
Empty file.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file has an mtime of when this was started.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
abc64d321eb739c6
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc":1562763049001146449,"features":"[\"alloc\"]","declared_features":"[\"alloc\", \"default\", \"fresh-rust\", \"nightly\", \"serde\", \"std\"]","target":5388200169723499962,"profile":12994027242049262075,"path":6226859646614693468,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\allocator-api2-2a8f64255b7efe9c\\dep-lib-allocator_api2","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file has an mtime of when this was started.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
08e1540c66c92ac3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc":1562763049001146449,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":1563897884725121975,"profile":2225463790103693989,"path":15958691748741803716,"deps":[[9904903520081483939,"build_script_build",false,18016366207070965370]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\anyhow-7fd8c86efdf8470e\\dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file has an mtime of when this was started.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
79f018ae1eedd955
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc":1562763049001146449,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":1563897884725121975,"profile":15657897354478470176,"path":15958691748741803716,"deps":[[9904903520081483939,"build_script_build",false,18016366207070965370]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\anyhow-89b10d4818cdf20e\\dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7a0ed14b9cfd06fa
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc":1562763049001146449,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[9904903520081483939,"build_script_build",false,5500560589173717141]],"local":[{"RerunIfChanged":{"output":"debug\\build\\anyhow-9adfdf1af42a0451\\output","paths":["src/nightly.rs"]}},{"RerunIfEnvChanged":{"var":"RUSTC_BOOTSTRAP","val":null}}],"rustflags":[],"config":0,"compile_kind":0}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9578366fb6ea554c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"rustc":1562763049001146449,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":5408242616063297496,"profile":2225463790103693989,"path":6451999535646999826,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\anyhow-abca3cc7cd34ef7d\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file has an mtime of when this was started.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file has an mtime of when this was started.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e2fc46e636c42c29
Loading