This website requires JavaScript.
Explore
Help
Sign In
yilunjiang
/
AgentLab
Watch
1
Star
0
Fork
0
You've already forked AgentLab
mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced
2026-11-15 19:32:01 +00:00
Code
Issues
Packages
Projects
Releases
Wiki
Activity
Files
bea1119a6c54788bd38d93aec5ef8a3b5e156dc3
AgentLab
/
backend
/
app
T
History
ThearchyHelios
bea1119a6c
说法核对按算子的真实结论形状对齐:点名的段只认拆解的维度列(params.by,乘积拆解是因子叫法)和差异检验的 a、b 两组,别的算子没有段;比率拆解的 n_base、n_target 是度量列;「抵消」除了 offset 也认判定为基本持平、各段有涨有跌的(持平的判定语本身说了此消彼长)
2026-10-21 13:16:48 +08:00
..
analysis
Merge branch 'an/w1' into an1/d
2026-10-21 13:13:11 +08:00
api
数据剖析可以同时剖析几张表:剖析设置加「同时剖析的表数」(table_concurrency,1–3,缺省 1,即以前的一张做完再做下一张;上限 3 是给这个源上的分析留出连接池的临时连接),每张表的查询仍一条一条发,所以同一时刻对业务库最多这么多条查询。剖析任务的执行改成按设置开几个执行者,按任务里的顺序一张结束就开始下一张;进度、发过的查询各落在自己那张表上(不再记「正在做的那一张」)。每张表开始前照旧重读数据源:停用、关掉剖析或止损后不再开始新的表,正在做的几张照常做完(止损时剩下的项记止损的原因),都结束后再把没开始的记停下;止损的连续失败、超时比例按几张表的查询合起来算。停止、关停时正在做的几张各自收尾,做完的项照常写进目录,都收完才往上交(等的时候又被停止也等完);一张表让任务整体出错(快照被改动、数据源没了、记结果写库出错)时,另几张按停止收尾、原因写这一句,本进程续不上租约的不写。同时要估同一张表的行数时只估一次(按表加锁,先来的没估成后来的自己估)。同源已有剖析时的 409 说法从「第 x / y 张表」改成「已完成 x / y 张表」。界面:设置表单多一格(单位「张」,提示写明业务库同时要应付几条查询、和分析共用连接),风险说明、卡片悬停、开始前的醒目一句在大于 1 时写明「同时剖析 N 张表、每张表的查询一条一条地发」,预算多一行,这次最多用时按几轮算。测试:同一时刻在途查询不超过设置、每张表仍一条一条发(1/2/3 三种)、几张一起显示进行中并按顺序开始、同时停止各自写进目录、止损后不再开始新表、停用时正在做的做完、一张出错另几张按停止收尾、共享行数只估一次;check-catalog-profile 加一节(预算、估算、说法、两行进行中、表清单)。验收:后端全量 14979 通过;止损那条并发测试单独跑 30 遍、整个剖析任务测试文件并行跑 15 遍都没有偶发;tsc;check-catalog-profile 217 项、check-copy 28 项全过
2026-10-21 09:08:10 +08:00
apps
应用实例页:成果没配出具契约时(印章上是「未声明出具契约」),本该降档的缺口照实写进印章的说明——口径卡里输入取自「查询区间里这张表没有数据」的列的指标、双盲复算的缺口(无法复算、审核人没采用原流程……);配了契约的已经按缺口降档,不另写
2026-10-20 10:39:53 +08:00
auth
合入 W2-a 的复核修复(nr8/a:导入的 NOT NULL 补值与孤儿行、收尾 dispose、sslmode 换算、PostgreSQL 写入去 NUL、不分大小写搜索 contains_ci、json_eq 两库同语义、JSON 守卫、用户可见列表补决胜键、bubblewrap --clearenv、部署脚本与原子写的几处、README 连接数预算)
2026-10-19 12:21:38 +08:00
blueprints
合入 W2-a 的复核修复(nr8/a:导入的 NOT NULL 补值与孤儿行、收尾 dispose、sslmode 换算、PostgreSQL 写入去 NUL、不分大小写搜索 contains_ci、json_eq 两库同语义、JSON 守卫、用户可见列表补决胜键、bubblewrap --clearenv、部署脚本与原子写的几处、README 连接数预算)
2026-10-19 12:21:38 +08:00
bundle
查询区间里这张表没有数据时,查询结果里照实说(新增 data/coverage.py,接在数据源查询工具上):结果里有整列是 0 或空的数值列时,把 SQL 收窄到算出这一列的那一项(去掉别的选择项、分组、HAVING、排序、取行数,只分析不执行),认出它用到的实表和时间谓词;界是字面量的直接解析,按运行当天现算的(不含列的表达式)用同一个数据源跑一条 SELECT 界1, 界2…(Oracle 加 FROM DUAL)算出来;这一列在表里的实际范围现查 SELECT MIN(列), MAX(列)(每条 10 秒),超时或失败退回剖析、取值观察记下的范围并照实标「按 X 日的剖析」,都没有就不判。日期按常见写法归一(DATE / DATETIME、'YYYY-MM-DD'、'YYYYMMDD'、8 位整数),文本列对文本界写法要一样,认不出就不判;区间和范围完全不重叠才算没有数据,一列用到几段区间时每段都不重叠才算。探查走同一道只读守卫,遮罩列不探查不报值,总耗时有上限,出错不影响查询本身。结果和快照多一项 no_data(columns、table、column、window、data_range、basis、message),运行事件记一条 query_no_data;没查出问题不加这个键,快照和以前一字不差。可验证报告认得这个键
2026-10-20 10:28:49 +08:00
capabilities
…
chat
口径卡、报告、出具、复核认「查询区间里这张表没有数据」:口径卡按输入的快照 id + 列认(cell()、按位置取的格、Agent 经 cite_fields 交来的字段,按列,同一条查询里有数的列不受影响;转抄的指标照抄),给指标标 no_data 并写明原因,清单注明「这段时间表里没有数据:不要当成 0 解读」,发一条 metric_no_data;有出具契约的成果按缺口降档(契约收来的指标,和报告直接引用的这样的格)。写作目录里这样的指标、查询格子里这样的列都写清,写作规则加一句(目录里有这样的项才加)。证据面板的指标标「区间内无数据」并写明原因,查询步骤列出这几列。复核把 query_no_data、metric_no_data 记成缺口(DEGRADED),归进新的 REBUILD:是缺口、却值得换一张有这段数据的表重建一次,should_retry 和 chat/turn.retry_after_review 都认,问数据据此给出「按复核重来」的指示
2026-10-20 10:29:01 +08:00
cluster
文档重新梳理:README 精简成介绍和索引,细节按主题拆进 docs/zh-CN 与 docs/en(17 篇一一对应),英文文档不含中文
2026-10-21 10:23:26 +08:00
core
后台任务的 drain 不再空转:notify.service、eval.cleanup 的 drain 改用新增的 core/background.drain——做完了的任务直接从集合里摘掉,只等本事件循环上没做完的,别的循环上没做完的不等、循环关了的摘掉。以前 while _background: await gather(...) 碰上别的事件循环上做完、discard 回调永远不跑的任务,gather 立刻返回、不让出事件循环,在那里空转(CPU 打满、进程卡死):PostgreSQL 全量里 test_personal_apps 的收尾两次卡在这里。单测在另一个线程里跑 drain、按线程等(空转时事件循环转不动,wait_for 救不了)
2026-10-19 15:29:00 +08:00
data
分析算子的输入、目录事实、期次与现查:inputs.py(按名字取快照、拆「名字.r行.列」、列名不分大小写、遮罩列与非数值是调用错误);facts.py(按 SQL 认结果列取自哪张表的哪一列,读目录的度量类型、叫法、业务日期,只有确认过的度量类型才拿来判调用错误;查过的记进 params,复算不读目录);periods.py(日期、YYYY-MM、YYYY-Www、YYYY-Qn、整数序号,粒度按值推断);probe.py(make_prober 走 data/coverage 的只读探查:遮罩列不探、总时限、5 分钟缓存、退回剖析事实,另在库里算按运行当天现算的界;Book 先登记、查完再算,结论只记真用到的);data/coverage.py 加几个公开的小函数(parse_sql、as_day、literal_bound、window_of、column_range、bound_values、facts_range),_fallback 的读法抽成 _facts_range、行为不变;契约补几项可选字段(InputSnapshot 的 dialect / checks / no_data / mask_columns / masked_at_query,AnalysisInput 的 dialect,Probe 的 expr / value)
2026-10-21 13:03:35 +08:00
db
文档重新梳理:README 精简成介绍和索引,细节按主题拆进 docs/zh-CN 与 docs/en(17 篇一一对应),英文文档不含中文
2026-10-21 10:23:26 +08:00
engine
说法核对按算子的真实结论形状对齐:点名的段只认拆解的维度列(params.by,乘积拆解是因子叫法)和差异检验的 a、b 两组,别的算子没有段;比率拆解的 n_base、n_target 是度量列;「抵消」除了 offset 也认判定为基本持平、各段有涨有跌的(持平的判定语本身说了此消彼长)
2026-10-21 13:16:48 +08:00
eval
分析算子的统计函数(app/analysis/stats.py,纯 Python、不加依赖):正态分布函数(math.erfc)与分位数(Acklam 逼近 + Halley 修正)、t 分布(正则化不完全 β 的连分式,自由度很大时按正态)与分位数(二分)、Wilson(从 eval/stats 移过来,评测改为引用、行为不变)、Newcombe 区间、合并比例 z 检验、Fisher 精确检验(lgamma)、Welch t 检验与区间、Holm 校正、Mann–Kendall(n ≤ 10 且无并列用逆序数递推的精确分布,否则正态近似带并列修正和连续性校正)、Theil–Sen(精确的数在公分母上按整数比,只对浮点相等的那几个精确比)、中位数 / MAD / 名次;测试用公认表值钉住(正态 0.975 分位、t(10) 临界值、品茶表、Newcombe 例子、小样本精确分布对照暴力枚举)
2026-10-21 13:03:12 +08:00
files
…
ledger
复核 R-b11(跨零点退回额度退到第二天那一行):quota.take 交回占在了哪一天(本地日期),占不到交回 None;出具、按需视图发起失败时按这个日期退回——23:59:59 占、00:00:01 失败,退的是前一天那一份,第二天的不动。补测试:跨零点占了两份、退回前一天那一份,前一天归零、第二天那份不动
2026-10-19 14:40:11 +08:00
look
助手把操作写成工具调用格式时照操作读;一个能落地的操作都没有时当场纠正一次;报错按诊断照实说
2026-10-19 22:48:23 +08:00
memory
…
notify
后台任务的 drain 不再空转:notify.service、eval.cleanup 的 drain 改用新增的 core/background.drain——做完了的任务直接从集合里摘掉,只等本事件循环上没做完的,别的循环上没做完的不等、循环关了的摘掉。以前 while _background: await gather(...) 碰上别的事件循环上做完、discard 回调永远不跑的任务,gather 立刻返回、不让出事件循环,在那里空转(CPU 打满、进程卡死):PostgreSQL 全量里 test_personal_apps 的收尾两次卡在这里。单测在另一个线程里跑 drain、按线程等(空转时事件循环转不动,wait_for 救不了)
2026-10-19 15:29:00 +08:00
process
复核 R-b2(单进程下周期整理退回判定中的待办):当班进程隔一会儿的那一次接手(trust_mine)不论有没有别的进程,停在 resolving 的待办只收拾停了两个租约时长以上的,启动时又没有别的进程的那一次照旧全收拾;顺带把其余周期调用的整理过一遍——结果未知的写入只补停了两个租约时长以上的(收尾和安排核实之间的不碰),问数据没有任务行的老轮次只在启动时整理(老页面开的轮次建图时也是这个样子)。补测试:判定到一半当班进程来一次,待办照样记已处理、那一票不撤回(改前的写法这条不过)
2026-10-19 13:18:23 +08:00
providers
…
records
…
report_export
…
sandbox
…
scheduler
复核 R-b9(Fenced 打到不该打的地方):check() 续晚了谁问到都隔离,但只对绑定了世代的执行(运行的一段执行、后台任务)抛 Fenced,HTTP 处理、调度那一拍、进程间请求问到时只隔离不抛;调度循环、心跳、办进程间请求也接住 Fenced;续租的任务不再因为一下出错就退出——续租、隔离之后重新登记都包住,照实记日志、退避着重试(最长一个租约时长)。隔离时马上换身份(之后新建的行记新身份),新身份登记上之前心跳不争当班、不接手,新开始的运行、后台任务在 fence.ready() 上等(最多一个租约时长,等不到就不开始,那几行由别的进程按属主不在了处理,这边同时放弃这个一直没登记上的身份、再换一个)。日志写出新旧完整身份。补测试:没绑定的调用者只隔离不抛、绑定在隔离之前的抛、新身份登记上之前 ready 等着;调度循环被 Fenced 打到一拍之后照常;重新登记先被版本守卫拦、再碰上库连不上,续租任务都不退出,登记上之后照常续租
2026-10-19 14:33:45 +08:00
tools
查询区间里这张表没有数据时,查询结果里照实说(新增 data/coverage.py,接在数据源查询工具上):结果里有整列是 0 或空的数值列时,把 SQL 收窄到算出这一列的那一项(去掉别的选择项、分组、HAVING、排序、取行数,只分析不执行),认出它用到的实表和时间谓词;界是字面量的直接解析,按运行当天现算的(不含列的表达式)用同一个数据源跑一条 SELECT 界1, 界2…(Oracle 加 FROM DUAL)算出来;这一列在表里的实际范围现查 SELECT MIN(列), MAX(列)(每条 10 秒),超时或失败退回剖析、取值观察记下的范围并照实标「按 X 日的剖析」,都没有就不判。日期按常见写法归一(DATE / DATETIME、'YYYY-MM-DD'、'YYYYMMDD'、8 位整数),文本列对文本界写法要一样,认不出就不判;区间和范围完全不重叠才算没有数据,一列用到几段区间时每段都不重叠才算。探查走同一道只读守卫,遮罩列不探查不报值,总耗时有上限,出错不影响查询本身。结果和快照多一项 no_data(columns、table、column、window、data_range、basis、message),运行事件记一条 query_no_data;没查出问题不加这个键,快照和以前一字不差。可验证报告认得这个键
2026-10-20 10:28:49 +08:00
__init__.py
…
main.py
合入 nr8/b 之后的配合:启动时先等库再做版本检查(cluster/version.preflight 是第一次连库,放在等库之前的话库的容器晚一步起来服务就直接崩),单测核对先后;deploy/README 多进程一段写明内置 PostgreSQL 是直连、不用 AGENTLAB_DATABASE_DIRECT_URL,upgrade 先停掉旧容器(全部工作进程)、备份、再起新版本,正合不许新旧版本同时运行的拦截
2026-10-19 14:06:20 +08:00
ops.py
复核 R-d4(升级前的 SQLite 备份只拷了应用库和断点库):填报的记录表 records/**/*.db 也用 SQLite 的备份接口拷进同一份备份,相对路径照旧,目录 0700、文件 0600;库在 PostgreSQL 时不做这份(记录表跟着整目录备份)。deploy/README 写清这份备份含什么、不含什么(上传原件和版本库、工件库、附件、知识库、沙箱工作区、.secret_key 要整目录备份),恢复步骤加上记录表
2026-10-19 16:12:07 +08:00
plain.py
门禁 G3 加一条:受管级别的报告撰写节点要把「分析说法核对」设为严格(REPORT_POLICY 加 analysis_claims: strict,没写时运行时是 check、只标注)。受管级别挡住发布、已发布级别只警告,写错的值交给校验;已经发布的版本照常运行(按缺省的 check 核),下次发布才按新规则查。同一份要求自动跟到自动修复(一键写明)、一键升级成受管、按口径出具起草的报告节点;自动修复「不许放宽」的判断认这一项(从严格改回去算放宽);白话补一句分析说法;模板 ⑨ 的报告节点补上这一项,拿来照旧能发布成受管。各处「受管要求都满足」的图(测试夹具)跟着补上这一项
2026-10-21 13:13:04 +08:00
seed.py
门禁 G3 加一条:受管级别的报告撰写节点要把「分析说法核对」设为严格(REPORT_POLICY 加 analysis_claims: strict,没写时运行时是 check、只标注)。受管级别挡住发布、已发布级别只警告,写错的值交给校验;已经发布的版本照常运行(按缺省的 check 核),下次发布才按新规则查。同一份要求自动跟到自动修复(一键写明)、一键升级成受管、按口径出具起草的报告节点;自动修复「不许放宽」的判断认这一项(从严格改回去算放宽);白话补一句分析说法;模板 ⑨ 的报告节点补上这一项,拿来照旧能发布成受管。各处「受管要求都满足」的图(测试夹具)跟着补上这一项
2026-10-21 13:13:04 +08:00
web_security.py
…
web.py
…