Lskj.CommandKernel
purchase.invoice.resolve/create 1.4 在严格 YYYY-MM-DD 发票日期基础上增加可信附件预处理契约。任何时间、Z、偏移、区域格式或不存在日期都在查询业务数据前被拒绝;图片、PDF、CSV、XLSX 还必须分别绑定固定处理器,模型不能声明或替换 preprocessContract。
旧 ERP 的无界面业务命令内核,目标框架保持 .NET Framework 4.0 / x86。
CLI、ERP 进程内 AgentBridge、AstrBot Tool 和后续 MCP Server 必须复用本程序集,不得复制模块 Schema、权限、计划、验证和执行逻辑。
当前包含低代码模块检查、字段 Schema、新增计划预检、采购主数据解析与确定性来源匹配、单日/多日自然语言请假日历与冲突校验,以及 purchase.invoice.resolve/create、hr.leave.resolve/create/submit 业务命令处理器。多日区间要求两端都有明确上午/下午/全天,边界来自员工日历,整段工时再由 ERP 日历计算器核算并绑定短期凭证。ModuleMenuDiscovery 对当前 ERP 已按用户权限过滤的菜单做确定性名称/编号搜索,拒绝控制字符和不安全编号,单次最多输出 20 项;ERP 桥固定使用 10 项。普通用户界面说明只投影可见业务标签及必填/只读/Lookup 属性,不输出表、SQL、物理字段、DLL、Lookup 字段或启动参数。处理器只依赖强类型客户适配器,不包含通用 SQL、表名或反射执行入口。
ModuleInitializationDiagnosticAnalyzer 把限时 SQL Trace 转换成稳定诊断合同:按错误码、会话密钥保护的 SQL 指纹和调用点别名归并重复故障,区分低代码配置、过程合同、数据库权限、连接、性能、字段映射和客户端初始化配置;输出只保留 SQL 关键字/运算符与会话内 id_####、@p_####、caller_#### 别名、参数类型、稳定分类和修复建议。客户表名、字段名、存储过程名、参数名、调用类名、参数值、原始异常消息和 CLR 异常类型都不会离开 ERP 进程。最多分析 200 条事件;时间、事件数、源 SQL 或安全投影任一达到上限都必须标记 trace_truncated,不能把不完整证据说成确定结论。
CommandContracts.cs 已定义命令版本、严格输入 JSON Schema、风险、计划、执行上下文、结果、处理器注册表、审计、幂等和确认接口。CommandDescriptorContract 在注册时要求安全命令名、版本、权限、说明和有界 Schema,写入/关键风险必须同时启用确认与幂等,其他风险不得伪装这些门禁;整个批次先验证后原子加入。注册表只保存深拷贝快照,Resolve/List 返回的描述符也不能反向修改已注册合同,同时保留请假创建后的受控 follow-up 接口。服务端执行状态存放在 CommandPlan 的私有字典中,不进入桥响应;客户端只看到安全预览。能力发现会按当前 ERP 会话权限过滤,模型不能看到无权使用的管理员命令。
计划所有权同时绑定客户端会话、ERP 用户、账套、子系统和大小写敏感的原始 correlationId。桌宠宿主的关联链校验只是第一层;ERP 进程内 CommandDispatcher 会在弹出原生确认窗口和占用幂等键之前再次拒绝关联 ID 调换,HMAC 确认令牌也包含计划与执行上下文的关联 ID。绕过桌宠直接调用本地桥不能改变预览、执行和审计所属的关联链。
Agent 专属管理员判断不沿用旧 ERP 的“显示名等于管理员”规则。AdministratorIdentity 要求当前会话同时满足内置用户 ID 1 和精确名称 管理员;同名普通账号、改名账号或带空白的伪造 ID 都没有诊断与权限绕过能力。CLI 模块诊断、桥能力过滤、上下文投影和客户兼容过程使用同一身份边界;未来如需委派其他配置管理员,必须增加独立、可签字的显式授权合同,不能退回显示名判断。
任何生产写命令必须实现这些契约。BusinessAdapterRegistrationGate 是失败关闭式注册门禁:客户字段映射、低代码模块健康检查、参数化查询、事务保存、数据库持久幂等、权限复核和 Windows 集成证据缺少任意一项,处理器构造或注册都会失败,命令也不会出现在能力列表中。就绪状态会在计划和执行时再次检查,不能只在启动时伪装通过。
幂等键按账套、子系统、ERP 用户和命令隔离,并绑定规范化 SHA-256 输入指纹;同一 key 被用于另一份业务内容时返回 idempotency_key_conflict。成功的适配器结果还必须逐笔返回事务、业务审计、实际幂等键和输入指纹证据,防止数据库已提交但外围日志失败时发生不安全重试。
采购先用 purchase.invoice.resolve 通过客户只读过程把 OCR 供应商名称/税号、币种和物料名称/规格/单位解析为唯一 ERP 编码;零候选或多候选只返回问题,不能执行。受信任附件 Tool 自动注入的 sourceDocuments 包含类型、净化文件名、大小、源文件/精确提取 SHA-256 与 preprocessContract;图片固定为 minimax_vlm_0.0.4,PDF 固定为 pdfium_minimax_pages_v1,CSV/XLSX 固定为各自隔离文档 worker。字段、后缀和处理器必须精确对应,并共同进入完整创建输入。解析成功后服务器签发绑定当前用户、账套、子系统、附件来源和完整创建输入的短期 HMAC resolutionProof;purchase.invoice.create 会先复核该凭证,模型绕过解析、篡改编码、摘要或处理器、跨会话复用或凭证过期时均不查询业务表。生产配置必须明确含税或不含税口径,内核会复核数量乘单价、行税额、明细汇总、头部不含税金额/税额/价税合计和币种舍入;关闭金额校验或任一价税不平时注册/计划失败。随后创建命令才读取来源,并在确认后再次精确比较来源单、行、单位、剩余量、原币价格、税率、汇率和本次分配数量;同一发票匹配多个汇率会被阻断。适配器还必须在同一事务中重新计算价税、锁定来源行、登记数据库幂等键并调用原 ERP 保存链。
自然语言请假先以有限语法解析“我/事假/明天下午”,再由客户过程唯一解析当前员工可用假别、员工日历范围和有效流转配置行。解析成功后服务器签发绑定当前用户、账套、子系统、员工、假别、流转类别、本地时段、日历工时、原因和提交意图的 5 分钟 HMAC resolutionProof;hr.leave.create 必须原样验证,模型直接拼装编码、篡改输入、跨会话复用或凭证过期时均在业务查询前失败关闭。flowTypeCode 是 p_systemdlltabflowtype.id 一类客户配置行标识;候选不唯一时必须追问,模型不得按职级或天数猜测。员工、假别、流程类别、原因、时间表达、申请编号的长度和控制字符在任何业务查询前检查;startLocal/endLocal 只接受不带 Z 或时区偏移的 ISO 本地时间,防止客户电脑时区换算导致错日或错时段。自然语言未明确工时时,解析器把 ERP 日历工时写入受签名创建输入;确认后再精确复核,排班导致工时发生任何变化都返回 leave_request_changed 并要求重新预览。请假创建和提交是两个独立命令、两次确认和两条审计记录;当解析输入包含“创建后提交”时,创建成功只生成一个新的 hr.leave.submit 计划,绝不在回调中自动提交。未提供客户模块字段映射和真实适配器时,不注册写命令。
当 allowPastStart=false 时,已开始的当天时段会在解析和创建复核两层拒绝;用户明确说出的工时与员工日历超出 hoursTolerance 时返回 leave_requested_hours_mismatch,不签发解析凭证。运行配置的 maximumCalendarDays 限制为 1-31,hoursTolerance 限制为 0-1,超出时在启动注册前失败关闭。