chore: версия 0.38.0 единая + warning-fixes + mold для release-job

1. Версии npm-пакетов приведены к 0.38.0 (был зоопарк 0.14.0/0.14.6):
   _ts_packages/{,packages/{gmail,grok,mcp-server,recall,telegram,youtube}-adapter}

2. Rust warnings (cargo check workspace):
   - kei-cortex: deprecated validate_path → validate_path_lexical,
     удалён orphan-wrapper в read.rs, struct Input → pub(crate)
   - frustration-matrix: #[allow(dead_code)] на confusion_* поля
     EvalReport + train_from_dir (будущий CLI)

3. CI release.yml job 'release' падал на Build kei-changelog:
   clang invalid linker '-fuse-ld=mold' — в .cargo/config.toml
   жёстко прописан mold для linux. Добавлен Install mold шаг
   (как уже сделано в build-release matrix).
This commit is contained in:
Denis Parfionovich 2026-05-18 13:41:37 +08:00
parent d9c5294e7e
commit c4e43f3637
13 changed files with 23 additions and 19 deletions

View file

@ -199,6 +199,15 @@ jobs:
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable # exception to SHA-pin: named-branch convention (validator V-2026-04-22) uses: dtolnay/rust-toolchain@stable # exception to SHA-pin: named-branch convention (validator V-2026-04-22)
# _primitives/_rust/.cargo/config.toml жёстко прописывает `-fuse-ld=mold`
# для linux targets — без этой установки `cargo build` падает с
# `clang: error: invalid linker name in argument '-fuse-ld=mold'`.
# CI run 26014724470 fix.
- name: Install mold linker (для linux target в .cargo/config.toml)
run: |
sudo apt-get update
sudo apt-get install -y mold clang
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with: with:
workspaces: _primitives/_rust workspaces: _primitives/_rust

View file

@ -39,6 +39,7 @@ pub struct EvalInput {
} }
/// Full report produced by `evaluate`. /// Full report produced by `evaluate`.
#[allow(dead_code)] // confusion_* поля для будущего CLI subcommand --confusion-matrix
pub struct EvalReport { pub struct EvalReport {
pub total_gold_rows: usize, pub total_gold_rows: usize,
pub regex_metrics: Metrics, pub regex_metrics: Metrics,

View file

@ -65,6 +65,7 @@ impl Firmware {
/// ///
/// For `.jsonl`, extracts user turns only. For `.md`, drops /// For `.jsonl`, extracts user turns only. For `.md`, drops
/// `### Assistant` blocks. See `firmware_corpus` for the extractor. /// `### Assistant` blocks. See `firmware_corpus` for the extractor.
#[allow(dead_code)] // публичное API для будущего CLI `firmware train --dir`
pub fn train_from_dir(path: &Path, max_depth: usize) -> Result<Self> { pub fn train_from_dir(path: &Path, max_depth: usize) -> Result<Self> {
let text = load_corpus_text(path) let text = load_corpus_text(path)
.with_context(|| format!("load corpus from {}", path.display()))?; .with_context(|| format!("load corpus from {}", path.display()))?;

View file

@ -8,7 +8,7 @@ use crate::error::AppError;
use crate::state::AppState; use crate::state::AppState;
use super::tool_apply_atomic::atomic_write_nofollow; use super::tool_apply_atomic::atomic_write_nofollow;
use crate::tool::edit::count_occurrences; use crate::tool::edit::count_occurrences;
use crate::tool::read::validate_path as validate_abs_path; use crate::tool::read::validate_path_lexical as validate_abs_path;
use crate::tool::write::deny_system_dirs; use crate::tool::write::deny_system_dirs;
use axum::extract::State; use axum::extract::State;
use axum::Json; use axum::Json;

View file

@ -29,11 +29,11 @@ use toml::Value as TomlValue;
const SPAWN_TIMEOUT: Duration = Duration::from_secs(120); const SPAWN_TIMEOUT: Duration = Duration::from_secs(120);
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
struct Input { pub(crate) struct Input {
description: String, pub(crate) description: String,
prompt: String, pub(crate) prompt: String,
#[serde(default)] #[serde(default)]
subagent_type: Option<String>, pub(crate) subagent_type: Option<String>,
} }
pub async fn run(raw: Value) -> Result<String, ToolError> { pub async fn run(raw: Value) -> Result<String, ToolError> {

View file

@ -55,13 +55,6 @@ pub async fn run(raw: Value, project_root: &Path) -> Result<String, ToolError> {
/// Lexical-only path checks (cheap pre-filter before canonicalisation). /// Lexical-only path checks (cheap pre-filter before canonicalisation).
/// Reject relative paths, parent traversal, and empty paths. /// Reject relative paths, parent traversal, and empty paths.
/// ///
/// `validate_path` kept as a deprecated alias for `tool_apply.rs`
/// (wave44b territory, will be reconciled at merge).
#[deprecated(note = "use validate_path_lexical")]
pub(crate) fn validate_path(path: &str) -> Result<(), ToolError> {
validate_path_lexical(path)
}
pub(crate) fn validate_path_lexical(path: &str) -> Result<(), ToolError> { pub(crate) fn validate_path_lexical(path: &str) -> Result<(), ToolError> {
if path.is_empty() { if path.is_empty() {
return Err(ToolError::InvalidInput("empty path".into())); return Err(ToolError::InvalidInput("empty path".into()));

View file

@ -1,7 +1,7 @@
{ {
"name": "@keisei/ts-packages", "name": "@keisei/ts-packages",
"private": true, "private": true,
"version": "0.14.0", "version": "0.38.0",
"description": "KeiSeiKit TypeScript layer — MCP server and external-API adapters", "description": "KeiSeiKit TypeScript layer — MCP server and external-API adapters",
"type": "module", "type": "module",
"workspaces": [ "workspaces": [

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/gmail-adapter", "name": "@keisei/gmail-adapter",
"version": "0.14.0", "version": "0.38.0",
"description": "Gmail API adapter for the KeiSei MCP server", "description": "Gmail API adapter for the KeiSei MCP server",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/grok-adapter", "name": "@keisei/grok-adapter",
"version": "0.14.0", "version": "0.38.0",
"description": "xAI Grok adapter (deep research + image gen) for the KeiSei MCP server", "description": "xAI Grok adapter (deep research + image gen) for the KeiSei MCP server",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/mcp-server", "name": "@keisei/mcp-server",
"version": "0.14.6", "version": "0.38.0",
"description": "MCP server exposing KeiSeiKit Rust primitives as Model Context Protocol tools — published to keigit.com (Forgejo npm registry, public DNS)", "description": "MCP server exposing KeiSeiKit Rust primitives as Model Context Protocol tools — published to keigit.com (Forgejo npm registry, public DNS)",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/recall-adapter", "name": "@keisei/recall-adapter",
"version": "0.14.0", "version": "0.38.0",
"description": "Recall.ai adapter (Zoom meeting capture) for the KeiSei MCP server", "description": "Recall.ai adapter (Zoom meeting capture) for the KeiSei MCP server",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/telegram-adapter", "name": "@keisei/telegram-adapter",
"version": "0.14.0", "version": "0.38.0",
"description": "Telegram Bot API adapter for the KeiSei MCP server", "description": "Telegram Bot API adapter for the KeiSei MCP server",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View file

@ -1,6 +1,6 @@
{ {
"name": "@keisei/youtube-adapter", "name": "@keisei/youtube-adapter",
"version": "0.14.0", "version": "0.38.0",
"description": "YouTube Data API v3 adapter for the KeiSei MCP server", "description": "YouTube Data API v3 adapter for the KeiSei MCP server",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",