@whyshu/argent-engine 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MANIFEST.json +63 -29
- package/engine/VERSION +1 -1
- package/engine/core/contracts/argent.contracts.json +1 -1
- package/engine/scripts/base-bootstrap.sh +2 -1
- package/engine/scripts/billing-mode-daily.sh +2 -1
- package/engine/scripts/build-engine-package.mjs +5 -2
- package/engine/scripts/capability-packs.lock.json +25 -25
- package/engine/scripts/check-billing-mode.sh +2 -1
- package/engine/scripts/collect-evidence.mjs +42 -0
- package/engine/scripts/customer-readiness.sh +2 -1
- package/engine/scripts/daily-report.sh +2 -1
- package/engine/scripts/dev-window.sh +2 -1
- package/engine/scripts/final-check.mjs +43 -0
- package/engine/scripts/flow-requirements.json +24 -9
- package/engine/scripts/flow-timers-plist.sh +2 -1
- package/engine/scripts/flow-timers.sh +3 -1
- package/engine/scripts/flow_config.py +2 -1
- package/engine/scripts/init-ml.sh +5 -2
- package/engine/scripts/invoice-table.sh +2 -1
- package/engine/scripts/lib/argent-datadir.sh +18 -0
- package/engine/scripts/lib/argent_datadir.py +23 -0
- package/engine/scripts/poll-fulfillment.sh +4 -2
- package/engine/scripts/poll-invoice.sh +4 -2
- package/engine/scripts/provider-select.sh +2 -1
- package/engine/scripts/release-argent.sh +1 -1
- package/engine/scripts/retire-inventory.mjs +40 -0
- package/engine/scripts/run-tests.sh +2 -1
- package/engine/scripts/s1-audit.mjs +85 -0
- package/engine/scripts/usage-anchor.sh +3 -2
- package/engine/scripts/wenyao-browser.sh +3 -2
- package/engine/scripts/wenyao-login.sh +3 -2
- package/engine/scripts/ziniao-keepalive.sh +2 -1
- package/engine/scripts/ziniao-post-upgrade-check.sh +2 -1
- package/engine/scripts/ziniao-windows.sh +2 -1
- package/engine/skills/README.md +86 -0
- package/engine/skills/argent-dev/SKILL.md +41 -0
- package/engine/skills/internal.json +37 -0
- package/engine/skills/lktop-pm/SKILL.md +35 -0
- package/engine/skills/lktopapp-dev/SKILL.md +34 -0
- package/engine/skills/ml-config-guide/SKILL.md +50 -0
- package/engine/skills/ml-fulfillment-sop/SKILL.md +178 -0
- package/engine/skills/ml-fulfillment-sop/references/andes-components.md +69 -0
- package/engine/skills/ml-fulfillment-sop/references/cdp-port-mapping.md +35 -0
- package/engine/skills/ml-fulfillment-sop/references/feishu-base-fulfillment-schema.md +136 -0
- package/engine/skills/ml-fulfillment-sop/references/multi-window-concurrency.md +69 -0
- package/engine/skills/ml-fulfillment-sop/references/pitfalls.md +77 -0
- package/engine/skills/ml-fulfillment-sop/references/selectors.md +243 -0
- package/engine/skills/ml-fulfillment-sop/scripts/fulfillment.js +586 -0
- package/engine/skills/ml-fulfillment-sop/scripts/poll-and-execute.sh +271 -0
- package/engine/skills/ml-fulfillment-sop/templates/report.md +55 -0
- package/engine/skills/ml-invoice/SKILL.md +506 -0
- package/engine/skills/ml-invoice/references/pitfalls.md +268 -0
- package/engine/skills/ml-invoice/references/portal-flow.md +360 -0
- package/engine/skills/ml-invoice/references/template-fill-contract.md +133 -0
- package/engine/skills/ml-invoice-xzh/SKILL.md +133 -0
- package/engine/skills/ml-invoice-xzh/references/pitfalls.md +230 -0
- package/engine/skills/ml-store-daily-report/SKILL.md +224 -0
- package/engine/skills/ml-store-daily-report/scripts/README.md +25 -0
- package/engine/skills/ml-store-daily-report/scripts/extract.js +691 -0
- package/engine/skills/ml-store-daily-report/scripts/generate.js +299 -0
- package/engine/skills/pet-dev/SKILL.md +42 -0
- package/engine/skills/whyshu-pm/SKILL.md +35 -0
- package/engine/skills/whyshu-web-dev/SKILL.md +50 -0
- package/engine/version.mjs +1 -1
- package/engine/verticals/mercadolibre/flows.json +37 -5
- package/package.json +3 -2
- package/requirements.txt +5 -0
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
},
|
|
149
149
|
"minPlan": "enterprise",
|
|
150
150
|
"pack": {
|
|
151
|
-
"version": "1.2.
|
|
151
|
+
"version": "1.2.167",
|
|
152
152
|
"scripts": [
|
|
153
153
|
"scripts/wenyao-invoice-writeback.mjs",
|
|
154
154
|
"scripts/invoice_lip_runner.py",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"ml-config-guide"
|
|
163
163
|
],
|
|
164
164
|
"_note": [
|
|
165
|
-
"能力包版本(语义化):改了该能力的流程/提示词/脚本/技能 ⇒ 必须提版本并重新打包 |**1.2.59(2026-09-30)**:共用引擎变更(flow-trigger.sh 新增「离线许可 / 租约二选一」闸门,并把 check-license.mjs / license-gate.mjs 纳入引擎分发)⇒ 版本随引擎前进。|**1.2.64(2026-10-03)**:共用引擎变更(`scripts/lib/repo-root.sh` 的 `argent_agent_path()` 去掉旧 node 前缀 `$HOME/node/bin`、换成现役 `$HOME/.local/node/bin` —— 否则生成的 launchd PATH 指向旧树,且只改 plist 会被重生成写回)⇒ 版本随引擎前进。|**1.2.65(2026-10-03,D1)**:共用引擎变更(`scripts/lib/registry.mjs` 支持**显式解释器** `py` —— 内核侧不再赌 PATH 上恰好有 `python3`;台账查询收口为 `core/lib/ledger.mjs`(**CLI 与 MCP 共用同一套**,MCP 不再自带一份 `slice(-tail)` 先截断后过滤的假空实现))⇒ 版本随引擎前进。|**1.2.66(2026-10-03,D2)**:共用引擎变更(`scripts/vertical-lint.mjs` 新增 `flow.skill` 校验 —— 缺声明 / 未在 manifest#skills 声明 / 技能目录不存在 三类即红;`scripts/vertical-init.mjs` 生成的流程带上 `skill` 声明,保证「生成即合规」)⇒ 版本随引擎前进。 |**1.2.67(2026-10-03)**:共用引擎变更(`scripts/flow_claim.py` 补 `--cases-from-dir` 透传 + dry-run 零副作用:不建台账目录/锁文件、不落店铺清单缓存、不写 blocked 台账、源层 case 落临时目录)⇒ 版本随引擎走。|**1.2.68(2026-10-03,P1 第二批)**:共用引擎变更(`scripts/check-license.mjs` 接**唯一判定入口** `core/lib/license-verdict.mjs`(三态 + 离线设备绑定,含 `device` 比对 / unbound 放行 / 自助重绑 3 次 + 7 天宽限),`scripts/license-gate.mjs` 新增 `--json`(只给程序消费,**不改判定/不改证据**)、`scripts/install-license.mjs` 补设备比对与 `--rebind`)⇒ 版本随引擎前进。|**1.2.69(2026-10-03,P1 第三批/P3)**:包内容变更(发票技能的 SKILL 去掉**字段白名单的逐字枚举**、改为引用写手与 `core/contracts/`;两条发票提示词的守卫行同样改成引用 `argent writeback`)⇒ 版本随内容前进。|**1.2.70(2026-10-03,P4 批)**:共用引擎变更 —— `pack.engine` 纳入 **core 运行期文件**(26 项 core 运行期文件 + 3 项**独立运行验证抓出的缺件**(VERSION / flow_case.py / ml_schema_check.py):`core/cli/argent.mjs` + `core/mcp/{server,http}.mjs` + `core/lib/**` 运行期闭包 + 两个 `core/contracts/*.json`,按实际 import 关系推导)⇒ 能力包自带 core,装机可不依赖 git/sync;同批数据目录链两步落地(`scripts/lib/argent_datadir.py`:老机器存在即沿用、新装 `~/.argent`)⇒ 版本随引擎前进。|**1.2.71(2026-10-03,P4 批·独立运行复验)**:把能力包 build 出来在**无仓库/无 git-sync/极简 PATH** 下真跑,抓出 3 个此前就缺的运行期文件(`VERSION`:CLI `version`/`--help` 直接读,缺它当场 ENOENT 崩;`scripts/flow_case.py`:`flow_source.py:260` 子进程建案;`scripts/ml_schema_check.py`:`flow_source.py:280` 子进程做缺口检查)⇒ 一并纳入引擎;推导规矩收紧为「静态 import 闭包 ∪ **子进程调用图**」。 |**1.2.76(2026-10-04,§8-③ 路径 (a):一次性激活码)**:共用引擎变更(新增 `core/lib/license-activate.mjs` —— 客户机的激活码兑换:归一化/端点解析/服务端错误码→reason·退出码映射/审计;`core/lib/license.mjs` 新增 `activate` 子命令;`core/contracts/*.json` 同批登记)⇒ 版本随引擎前进。|**1.2.78(2026-10-04,isDirectRun 统一 + 补两处引擎缺件)**:共用引擎变更(新增 `scripts/lib/is-direct-run.mjs` —— \"本文件是否被直接执行\"的**唯一判据**(realpath 比对);同批把升级器/安装器/各 check-*/日报/写手/飞书卡片共 10 个 CLI 的入口守卫换成它:旧形态 `pathToFileURL(argv[1]) === import.meta.url` 在软链路径(`/tmp` → `/private/tmp`)下**假否定** ⇒ CLI 静默不跑;本包内的日报/写手两个 CLI 随之变更)⇒ 版本随引擎前进;同批补两个**此前漏在引擎清单外**的运行期文件(本次\"独立运行复验\"抓出:包内 CLI 当场 ERR_MODULE_NOT_FOUND)—— `scripts/lib/argent-datadir.mjs`(内核数据目录判据的脚本侧再导出,包内日报/写手/卡片三个 CLI 都 import 它)与 `scripts/check-skill-classification.mjs`(`core/lib/doctor-customer.mjs` 静态 import ⇒ 缺它连 `argent --help` 都起不来)。|**1.2.81(2026-10-04,客户机试点:逃生阀透传 + 用法事实)**:共用引擎变更(`core/lib/license-activate.mjs` 新增 `--allow-regression` 透传(判定仍只在 install-license)+ `--json` 时把“放行一次倒退”的标注写 stderr + 404 的 hint 点名 `--server` 只给 base URL;`core/lib/license.mjs` 把 `asJson` 告知子命令层;`core/contracts/verbs.schema.json` 同步 args 与 jsonFields)⇒ 版本随引擎前进。 |**1.2.82(2026-10-04,角色提示词收敛)**:包内容变更:`presets/argent-ml-invoice-{wy,xzh}/agent.cordis.yml` 的 persona 收敛到统一骨架(小节标题与顺序);「落卡」等看板期指令改成现行台账 blocked + 会话挂起 ⇒ 版本随内容前进。|**1.2.83(2026-10-04,O2 只读运营视图:`argent license ops`)**:共用引擎变更(新增 `core/lib/license-ops.mjs` —— 许可只读运营巡检:在途码/失败码/近 N 天事件时间线/席位账目/异常清单,替代 `mongosh`;`core/lib/license.mjs` 新增 `ops` 子命令;`core/contracts/{argent.contracts.json,verbs.schema.json}` 同批登记 + `reasonCodes` 新增 `field_missing`(O2 两个已知陷阱的响亮失败码:`state` 不是 `status`、席位不是存储字段 `used`);engine +1 项)⇒ 版本随引擎前进。(⚠️ 盖章说明:本版内容在同一工作树里经过两次收口(先落实现,再补契约 note 与词表去重)⇒ 以**最终内容**盖章;版本号 `1.2.83` 从未发布过,不存在\"内容变了版本没动\"的对外窗口)|**1.2.84(2026-10-04,O2 客户端接线:4 个只读接口)**:共用引擎变更(`core/lib/license-ops.mjs` —— `OPS_READ_ENDPOINTS` 的 4 条 `exists:false → true` 并真正发 GET(`codes-list`/`events`/`seats`/`devices/{codePrefix}`,契约 = `whyshu-svr@92c6233`);四处字段映射(`devices[].codePrefix→code`、`items/totals→principals/totals`、`device.found=total`、`timeline` 用服务端 `total`/`count` + 显式 `limit=200`);`405/400 field_unknown/429/401/403/400 bad_*` 一律 exit 2 响亮(`field_unknown`/`rate_limited`/`method_not_allowed`/`admin_required`/`bad_request`,同批登记进 `core/contracts/*`);新增 `coverage`/`coverageDetail`、`checkServerRows`、`serverPageMeta`、`summarizeCoverage`、`seat_used_mismatch`/`seat_totals_mismatch`;⛔ 仍只发 GET、零落盘、无 `--apply`、不探不调 `release-device`)⇒ 版本随引擎前进。⚠️ 服务端那 4 个接口**已就绪但未部署** ⇒ 线上仍报节级 `endpoint_missing`(⛔ 不是空集)。|**1.2.85(2026-10-04,O2 接线后收口:一行措辞修正)**:`core/lib/license-ops.mjs` 文件头「四处字段映射」表 **④** 的措辞改对(窗口内总数在 `timeline.server.total`;`timeline.scanned` 是**客户端窗口过滤后**的条数,⛔ 别当窗口内总数;落点由不存在的 `serverTimelineSection()` 改成 `serverPageMeta()` + 服务端分支)—— **一行注释同样改了引擎 sha** ⇒ 按纪律再提一版(先例同 `_engineNoteDoctor20261003`)。⛔ 行为零变化(254 断言 + kernel-purity 复跑全绿)。|**1.2.86(2026-10-04,合规改造:诊断上报改「告知—同意」)**:共用引擎变更(`scripts/telemetry.py` 默认改为 **opt-in**:`telemetryOptIn` 无键 = 关、`TELEMETRY_DISABLE=1` 硬关;新增采集时刻同意标记 `consent` 与「关闭期不采集/不堆积/不补发」迁移语义;字段 `host`(原始主机名)改为不可逆 `hostHash`,`redact()` 同步掩主机名;新增 `--purge`)—— 这些改了引擎 sha ⇒ 按纪律提版本(先例同 `_engineNoteDoctor20261003`)。客户端侧同批:安装器新增「诊断上报(可选)」步(非交互默认拒绝)、设置页新增可开关(写 `telemetryOptIn`)。|**实例令牌批次(2026-10-05,路线 B)**:共用引擎变更 —— `scripts/telemetry.py` 的凭证取值链从两级扩成三级(`ARGENT_INSTANCE_TOKEN` → `<数据目录>/instance-token.json`(**机器自带凭证**,0600)→ 账号令牌兜底);实例令牌走 **`x-instance-token`**(紧凑串 `it1.<b64url(payload)>.<sig>`)并可带 `x-instance-device`;新增**本地绑定自检**(令牌 instanceId ≠ 本机 installId ⇒ **不发网**、`lastError: instance-token-mismatch`)与 `--status.credential`(只显示来源类型/到期日与绑定态,⛔ 不显示令牌值)。`scripts/install-license.mjs` 新增 `--instance-token-file`(与许可**同一条离线下发链路**,先判后写:归属/设备码/期限对不上即拒装;0600 + 备份 + 原子落盘 + 幂等),`scripts/install-one-shot.mjs` 的 `license` 段透传该参数;新增回归 `scripts/tests/telemetry-instance-token.test.mjs`(62 例,含 JS⇄Python 对拍),`scripts/tests/telemetry-consent.test.mjs` 补「令牌 ≠ 同意」。动机:客户机此前靠 30 天账号 JWT 上报(2026-11-04 到期,且服务端 2026-09-14 轮换 JWT_SECRET 时全灭),交付一台机器就该交付**随机器走**的凭证。服务端契约与签发/续期/吊销手册见 `whyshu-svr/docs/ops/instance-token.md`。⛔ 本轮**未新增运行期文件**(只改上述三个既有引擎文件),故 `pack.engine` 清单不变。|**1.2.89(2026-10-06)**:包内容变更(业务线 `verticals/<id>/manifest.json` 是各能力包内容集的一部分)——业务线 `requires.argent` 由 `>=0.2 <0.3` 抬到 `>=0.3 <0.4`、`version` 0.1.0→0.1.1(P0-5,修「Argent 能力 → 概览」把唯一业务线误标 `⚠️ 版本不满足`);⛔ **未新增运行期文件、未改共用引擎**,故 `pack.engine` 清单不变,按既有纪律只提受影响能力包的补丁版本并重盖章。|**1.2.90(2026-10-06,MCP 工具安全注解)**:共用引擎变更(`core/mcp/server.mjs` 的 `tools/list` 给 14 个工具加 MCP 规范 `annotations` —— 只读 9 ⇒ `readOnlyHint:true`;写类 5 ⇒ `readOnlyHint:false` + `destructiveHint:true`(含三个沙箱影子工具,保守标法理由见该文件注释)—— 让宿主能在**协议层**分辨只读/写类、收窄授权面;内核侧 `confirm=false` 只回影子 + 真写 `confirm:true` 且过 `gateWrite` 许可闸的**双重门禁原样保留**。⛔ 零行为改动:handler / `inputSchema` / 返回逐字节不变、工具数仍 **14**(已与 `git HEAD` 基线逐工具比对:去掉新键后 14 条完全一致),新增回归 `scripts/tests/mcp-tool-annotations.test.mjs`)⇒ 版本随引擎前进。|**1.2.92(2026-10-08,WebDriver 用法 P0 批)**:共用引擎变更(P0-1 依赖表补 `selenium` ——`install-argent.mjs` 的 `pythonRuntimePlan().pkgs` 与 `scripts/lib/python-runtime.mjs` 的 `venvUsable` 默认 `pkgs` 同批加第五项,官方唯一推荐的驱动档位(`ZINIAO_MODE=selenium`)此前**装都没装** ⇒ 选型开关静默撒谎、该档位从未运行过一次;缺它时老 venv 必须判「未就绪」否则 `ensure` 空转、永远装不上;同批 `SeleniumClient` 的 ImportError 分支改显著 warn + 选型处预检并显著 warn 后回退 Playwright(官方不建议)、`--mode inspect` 报 `driver_tiers`;P0-2 `updateCore` 总超时 60→300s / 单次 30→60s(官方建议值)并把官方 `msg` 进度打进日志;P0-3 每题尾部**只读** before/after 窗口快照并排 + 连续 3 轮泄漏 ⇒ 台账 blocked(needs_human,⛔ 不自动关店);P1-a `_wd_call` 落 requestId/耗时一行;P1-b `-10006` 按官方语义重试一次。⛔ 未新增运行期文件(只改上述既有引擎文件),故 `pack.engine` 清单不变。)|**1.3.97(2026-10-08,WebDriver 用法 P1 小件批)**:共用引擎变更(`scripts/orchestrator.py` —— 审计 §3.2–§3.6 的 P1 小件六条:① `LastError` 并入 `WebDriverError` 与每接口日志(`_wd_err_fields` **优先读 `err`**;`err` 空时 `LastError` 仍可见、各截 80 字;`startBrowser` 的「未返回 debuggingPort」分支不再丢该字段);② 清场后 `pgrep` **进程级**复核(`wd_residual_processes`/`_wd_report_residuals`:残留 ⇒ 显著 warn,⛔ **不自动 kill 更多东西**;复核路径运行时计数 + AST 双判据零 kill;自己与祖先链不计入残留);③ IPC **连接类**异常退避 2s **重试一次**(`_wd_conn_error_kind` 分 refused/timeout/reset/conn;业务错误码与其它异常不重试;`startBrowser` 撞 timeout/reset **不重试** —— 重试会被内核视为「重启」,官方 -10006 语义);④ chromedriver **缓存面**只读巡检(`cached_chromedriver_majors`/`chromedriver_cache_inventory`/`chromedriver_cache_line` + `--mode inspect` 报缓存面;`detect_running_core_version_free` 只用窗口 CDP **免凭据**取内核大版本 ⇒ 缓存大版本可对照);⑤ `getPluginInstalled` 只读漂移探测(`plugin_probe_plan`/`probe_plugin_installed`:无 `pluginIds` 来源 ⇒ **零调用**只报「能力未接」,⛔ 不猜);⑥ `ClearCache`/`ClearOnline` **显式人工**子命令(payload 构造 + 凭据三元组脱敏的 dry-run 预览;⛔ 编排路径零调用,默认 dry-run、`--yes` 才真跑)。另改两个**不在包内**的运维脚本(`scripts/*-windows.sh` 新增 `cache`/`plugins`/`clear-cache`/`clear-online` 子命令;`scripts/*-post-upgrade-check.sh` 新增两条只读段)。新增回归 `scripts/tests/*-webdriver-p1.test.py`(103 断言;桩/夹具,⛔ 不真开浏览器、不联网、不写真实数据目录)。⛔ 未新增运行期文件,故 `pack.engine` 清单不变。⚠️ 本批**未做**(如实保留):**选型解耦**(`ZINIAO_LIFECYCLE` + `ZINIAO_DRIVER`,审计 §3.1 第 2 行)—— 留待下一批。)|**1.2.97(2026-10-09,P0 注册表投影)**:共用引擎变更(`install-argent.mjs` 的 `--expect-sha256` 改为**一个包一个**摘要(可逗号分隔/重复给,数量不匹配=用法错)+ `--check-update` 合成**一条**可原样跑的「一起装」命令;`scripts/argent-capabilities.mjs` 加 **P2a 不变量**:投影落 `scripts/flow-requirements.json`(引擎级 base)前先摘掉不属于 base 的 `flows`/`aliases`)。能力包自身:包内注册表投影**只并引擎级段**(flow 不再抄进投影 ⇒ 与 `verticals/<id>/flows.json` 不再重复定义),并**同批带上** `verticals/<id>/flows.json`(旧包只带 manifest ⇒ 纯包装机 `flow_registry.py --json` exit 2)。判据:`scripts/tests/install-registry-loadable.test.mjs`(装完即加载注册表,五态)。|**1.2.98(2026-10-09,引擎锁跨平台化)**:共用引擎变更 —— 新增 `scripts/lib/argent_filelock.py`(模块名带 `argent_` 前缀 = **撞名防线**:PyPI 上有同名且极常见的 `filelock` 包,实测在 Windows 真机上被 `import filelock` 静默拿到过)(跨平台**排他文件锁唯一真源**:POSIX `fcntl.flock` / Windows `msvcrt.locking`,同一 API、同一锁文件约定),并把 `scripts/flow_claim.py` / `scripts/flow_ledger.py` / `scripts/telemetry.py` 的**顶层** `import fcntl` 与 `scripts/orchestrator.py` 的 **10 处**函数内 `fcntl` 全部换成它 ⇒ Windows 上认领/台账/遥测不再 `ModuleNotFoundError`(此前整个不可用),编排器的锁不再 `except: pass` **静默变 no-op**(互斥类 fail-closed、追加/审计类响亮降级 + 逐次计数)。⛔ 业务语义 / 数据格式 / 事件形状零变化:POSIX 侧与旧实现**逐字等价**(同一次 `flock` 调用、同一把锁文件、同一阻塞语义;`best_effort` 只在锁不可用时介入);同批 `pack.engine` 登记新文件。回归 `scripts/tests/filelock.test.py`(两进程抢锁 / 新旧逐字节对照 / 无 fcntl 可 import / Windows 分支桩测,52 断言)。(⚠️ 盖章说明:本版内容在同一工作树里经过**多轮收口**,以**最终内容**盖章;版本号从未发布过,不存在「内容变了版本没动」的对外窗口。三轮都来自**真机(Windows)实测**:① `import filelock` 与 **PyPI 同名包**撞车(探针当场拿到第三方的 `WindowsFileLock` 类)⇒ 改名 `scripts/lib/argent_filelock.py`(与 `argent_datadir.py` 同惯例)并同步四处 import;② Windows 无 `/tmp` ⇒ `lock_dir()` 的 Windows 缺省改用系统临时目录(POSIX 缺省**逐字不变**);③ **3 进程 ×15 条并发追加只活下 42 条**(Windows `_O_APPEND` 非原子)⇒ 根因是 `best_effort` 默认退成了**非阻塞**(旧实现是阻塞 `flock`),改为 `blocking=True` 默认并补回归(`filelock.test.py` §6b:持锁期间 append 必须**排队**,故障注入可复现变红)⇒ 复跑 45/45;④ 真机再实测出**强制锁挡读**:锁住数据文件**第 0 字节**会让别的进程**整文件读不了**(`flow_ledger.read()` 当场 `PermissionError`)⇒ Windows 锁区间挪到**文件内容之外**(第 2^40 字节起 **1 字节**;`LockFile` 允许锁到 EOF 之外且不分配、不改大小)⇒ 锁照样跨进程互斥、**读者零影响**(真机复验:持锁期间整文件读正常、解锁后可锁))|**1.2.99(2026-10-09,能力包地址真源收敛)**:共用引擎变更(`install-argent.mjs` —— ① `--capability` 的包地址**真源收敛**:有 install-ticket 清单 url 就用**清单的**(它与清单里的 sha256 同源 ⇒ \"地址+摘要\"成对可信),只有无账号/离线/清单没给 url 时才回落 `--pack-base` + 锁内版本自拼,且计划清单**逐条标注地址来源**(旧实现无条件自拼 ⇒ `--pack-base` 一整段绕开清单);② `--check-update` 主推 `--capability <服务端授予全集>`(不再要用户手抄四条 URL 与四个摘要),`--from-packs … --expect-sha256 …` 降为**离线/裁剪交付的进阶备选**另起一行;③ `--check-update` 对「显式零能力」账号改**中性提示**(exit 0)—— 旧实现把\"啥都没买\"报成\"拿不到服务端能力清单\"故障;判据换成\"服务端回没回 `capabilities` 字段\";`scripts/argent-capabilities.mjs` 的 `parseCapabilityManifest` 为此新增 `capabilitiesPresent`)⇒ 版本随引擎前进。同批 `scripts/release-argent.sh --check-dl` 新增**能力包档**(对服务端清单里每个包逐个 HTTP 取回 + `capability_pack.py --digest-tgz` 重算内容摘要 == 清单 sha256;不通过即判红)—— 该脚本与 `capability_pack.py` **都不在** `pack.engine`,故不改包内容。|**1.2.100(2026-10-09,同批二次收口:`--dsh-home` 必须同时决定数据目录)**:共用引擎变更(`install-argent.mjs` —— `DATA_DIR` 从**模块级 `const`** 改成**取值函数 `dataDirOf()`**。旧形态在 `--dsh-home` **解析之前**就求值 ⇒ 账本写进 `--dsh-home`、而 **packs-cache 写进默认 `~/.dsh/argent`**:后果不是\"多一个文件\",而是**定向安装/测试用的临时 home 会往真实 `~/.dsh` 里写**——\"⛔ 不碰既有 home\"当场不成立。同文件 `PRESET_ROOT` 早有同因修复(注释原文:\"const 提前求值会锁死默认 ~/.dsh\"),`DATA_DIR` 是漏网的那一个。**真机取证**:Windows 定向安装后 `C:\\Users\\<u>\\.dsh\\argent\\packs-cache\\` 多出 hr-0.1.41 / full-1.3.104 / invoice-1.2.99 / daily-report-1.1.106 四条(已逐条清除,回到原有 10 条);同场景换成 HEAD 版安装器可复现(`\\$HOME/.dsh/argent/packs-cache` 被创建)。无 `--dsh-home` 时 `dshHome = ~/.dsh` ⇒ 真实装机路径**逐字节零变化**。回归:`scripts/tests/install-capability-url-source.test.mjs`【E】(把子进程 HOME 也钉进临时目录,断言默认数据目录**没有被创建**)。|**1.2.101(2026-10-09,配置地基:配置目录 + 通用读取器)**:共用引擎变更 —— `pack.engine` 新增 `core/lib/config-catalog.mjs`(配置面的**唯一**读取器:五级解析链 env → 域 env 文件 → config.json → 业务线/机器本地文件 → 声明 default;API `get/require/sourceOf/isConfigured/all/describe/invalidate`;secret 项在 `describe()` 里**结构性**不回值)+ 5 个引擎级配置目录文件 `configs/*.json`(账号 / 通知与投递 / 宿主与机器 / 人事(HR) / 高级与诊断);业务线级目录 `verticals/<id>/config.json` 由 `capability_pack.manifest()` 随 manifest/flows **同批带上**(改了 `scripts/capability_pack.py` ⇒ 本次三个带 flow 的能力包内容都变了)。四道门禁:`node scripts/check-config-catalog.mjs --strict`(①双向对账 ②敏感不出门 ③必须项可解析 ④新增即生效)+ 回归 `scripts/tests/config-gates.test.mjs`(84 断言,含「注入假象必须变红」的自证)。⛔ 不改任何现有配置的取值行为(读取器是**新增**入口,现有调用方仍按自己的链路读;每项声明的 `todayChain` 如实记录「今天代码的优先级」,迁移时逐项核对)。契约见 `docs/Argent-宿主适配契约.md` §7。|**1.2.102(2026-10-09,配置地基第二批次:设置页「配置中心」+ 逐能力「检查更新」)**:共用引擎变更 —— `core/lib/config-catalog.mjs` 增「可写落点 / 旧优先级提示 / 分类 order」进 `describe()` 载荷,`configs/advanced.json` 把 `capability.checkUpdate` 的 `implemented` 如实改为 `true`,`install-argent.mjs` 的 `--check-update` 增 `--json` + `--capability` 过滤(设置页与命令行**同一份比对**)⇒ 版本随引擎前进(本能力的流程/提示词/脚本内容一字未改)。|**1.2.103(2026-10-09,变现分层落地)**:业务线清单 业务线清单 `verticals/<id>/manifest.json` 同批变更(`daily-report` 档位 `enterprise` → `pro`;本能力 `minPlan` **保持 `enterprise`** —— 门户写操作属企业版)⇒ 包内容随之变化,按纪律提版本。|**1.2.106(2026-10-09,预约失败判定链 + 口径统一)**:共用引擎 `scripts/flow_failure.py` 变更(新增 `canonical_reason()` 与 `--case` —— 打印某 case 的**规范失败原因**:优先读台账 `failed.reason`,老台账回落到 `error` 去身份前缀;给角色/运维一个**逐字照抄**的取数口,杜绝\"表备注写 A、账本写 B\")⇒ 所有能力包的注册表投影同批变化。本能力自身:本能力的流程/提示词/脚本内容一字未改(仅注册表投影与共用引擎前进)。(⚠️ **盖章说明**:本版内容在同一工作树里经过**多轮收口**(先落实现,再按 vertical-lint 的引擎业务词约束改注册表文案、再收口文案)⇒ 以**最终内容**盖章;版本号从未发布过,不存在\"内容变了版本没动\"的对外窗口。)|**1.2.107(2026-10-09,三处生产实测收口:票不许静默消失 · 失败必写原因+动作 · 发票流程 Rule R)**:共用引擎变更 ⇒ 四个能力包一起提版本并重盖章。① `scripts/flow_triage.py`:判定改为**有效末条事件**(`INFO_EVENTS = phase/wake/policy_apply/policy_new` 回退到最近一条状态性事件;`failed_ack` = 有意不动且**不参与回退**)、`blocked` 从「静默 pass」改为可见的 `needs_human`,并加**循环后对账兜底**(任何未归桶的 case ⇒ `needs_human`,kind=unclassified)——修的是客户机生产实测 P0(某发票票):其尾部是 `blocked → phase` ⇒ 分诊摘要全 0、运营勾了放行也不派发、且**不在「需人工」里**(静默卡死)。② `scripts/flow_failure.py`:新增运营文案**唯一来源** `ops_message()`(`结论:<业务类|系统类|我方缺陷类>|<原因>|动作:…`,≤300 字)与 `release_hint()`(放行位/提示的**唯一实现**:变体与**顶层** pick 都认;`orchestrator._ops_action_hint` 改为委托它);③ **新增** `scripts/invoice_fail_closeout.py`(属**发票能力专属脚本** `capabilities.invoice.pack.scripts`,⛔ 不进共用引擎 —— 它只写发票那一列):失败/成功收口 —— 把**同一串**写进表「发票错误信息」与台账(`detail` 逐字相同、`error` 放规范原因),取不到原因 ⇒ **exit 2 拒绝执行**,代码级异常归「我方缺陷类」且**不回原文**,成功 ⇒ `--clear-error` 清空;④ `scripts/flow_return_to_ops.py`:缺口回填文案改用同一来源(表字段 == 台账 `detail`);④b `scripts/flow_config.py`:归一化的 `guards` 增**标量透传**(`writer`=写手路径、`errorField`=失败原因列 —— 不透出就只能各自把路径/列名写死,那正是「判据第二份」与业务词泄漏进引擎的来源);⑤ 业务线声明(`verticals/<id>/flows.json`):两个发票流程新增 `pick.release` / `pick.releaseReDispatch`(放行位 = **各自的门控列**「发票就绪」;上限 3 / 冷却 30)与 `guards.errorField`。本能力自身:两条发票流程的技能(§6.2.1 / §6)与两份失败交接提示词各加「失败收口必须写表」口径(命令/红线/⛔ 不许手写 `--error-message` 两处各写一套)。|**1.2.108(2026-10-09,配置「生效来源」可见化 + 冲突告警,批 1)**:本能力自身:流程 / 提示词 / 脚本内容一字未改(仅共用引擎与注册表投影前进)。共用引擎 `core/lib/config-catalog.mjs` 新增**纯函数** `resolveEffective()`(按规范链算「谁赢了 / 谁被压住」)、密钥脱敏 `redactSecret()` 与读取器 `effectiveOf()/levelsOf()`,并新增只读 CLI `scripts/config-explain.mjs`(`--key/--all/--list/--json`)⇒ 能力包内容变化,按纪律提版本并重盖章。⛔ **零行为变化**:读取器的取值路径(`resolveOne`)与任何 `todayChain` 一个字节都没改,只是「如实展示」;同批回归 `scripts/tests/config-effective.test.mjs`(63 断言)+ 端点 / 页面两条既有回归扩测。|**1.2.109(2026-10-09,同批收口:脱敏闸幂等)**:只读 CLI `scripts/config-explain.mjs` 的\"再脱敏\"兜底闸原先**无条件**执行 ⇒ `❰已设置(长度N)❱` 里的 N 变成**占位串自己的长度**(恒 11,实测),而用户正是拿它比对\"密钥换没换\" ⇒ 已改为**幂等**(含被压住的那级)并补回归;引擎面同一份 CLI 变了 ⇒ 包内容变化,按纪律再提版本并重盖章。本能力自身内容一字未改。|**1.2.111(2026-10-10,A 批:按智能体安装清单 —— 客户从「智能体库」选一个装,只装它的东西)**:① **`pack.engine` 新增两项**:`agents/catalog.json`(L0 货架声明:agent → capability + flows 子集 + 角色 + 插件/技能/集成/凭据槽)与 `scripts/argent-agents.mjs`(声明解析/校验/清单构造;安装器与门禁**共用一份**判据)⇒ 引擎清单与每包内的注册表投影都变了(**无 flow 的 hr 也变**,按「内容变 ⇒ 版本必变(含无 flow 的包)」这条不变式一起提版本);② **共用引擎行为变更**(`install-argent.mjs` / `scripts/lib/preset-install.mjs` / `scripts/argent-upgrade.mjs`):新增 `--agent <id>[,<id>…]` / `--list-agents` / `--internal-roles` / `--capability remove <id>`(写前备份 + 审计);preset **行落盘集合**改为「按清单收窄」(`--agent` ⇒ 恒装 + 本智能体角色 + 已装集;默认 ⇒ 客户可见集 + 已装集;**内部角色默认不落**);升级器按 `<dshHome>/argent/agents.json` **重新施加**同一集合(否则一次升级就把收窄还原);**未给 `--agent` 时 CLI 契约与计划清单输出与改动前逐字一致**(差分回归钉住);③ 本能力自身:⛔ 流程/提示词/脚本**一字未改**(只有引擎面与 pack.engine 前进);⚠️ 共享能力包**不拆**:`invoice` 里的两条 flow 仍在**同一个**包里,智能体层只做 **flow 子集投影**(按目录声明的 `flows` 子集收窄角色/技能/定时器;装其中一条不会把另一条的角色带下来,⛔ 也不拆包)。回归:`scripts/tests/agent-catalog.test.mjs`(110 断言,七条判据:只落本智能体 / 子集过滤 / 向后兼容差分 / 未知输入零写入 / remove 备份+审计 / 目录 schema / 内部角色默认不落)。|**1.2.112(2026-10-10,同批二次收口:宿主资产声明 + 门禁)**:同一工作树里第二次收口(先落 `--agent` 实现并盖章,再补 `capabilities.<c>.pack.hostAssets`(**宿主侧资产声明位**:定时器/登录自启/桌面项)与它的门禁 C12,并把 `scripts/argent-agents.mjs` 的清单/回执接上宿主资产)⇒ 引擎面文件内容变了,按「内容变 ⇒ 版本必变」纪律**再提一版**(先例同 1.3.104→1.3.105、`docs/Argent-智能体平台-设计.md` §8.3 第 3 条)。版本号 1.2.111 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**1.2.113(2026-10-10,同批三次收口:安装器用法文案 · 门禁登记 · 引擎面去业务词)**:同一工作树里第三次收口 —— ① `install-argent.mjs` 的**用法头注释**补上 `--agent` / `--list-agents` / `--internal-roles` / `--capability remove` 四个入口(内容变 ⇒ 引擎 sha 变);② `scripts/tests/is-direct-run.test.mjs` 的**唯一登记处**加入 `scripts/check-agent-catalog.mjs`(新增 CLI 必须登记,否则端到端判据覆盖不到它;测试文件不在包内,本条只为留痕);③ 本文件里本批新加的 `_note` 文案去掉业务词(`vertical-lint` 的 engine-words 档按**基线**只拦新增,⛔ 不抬基线 ⇒ 改写文案而不是改基线)⇒ 引擎面内容再变,按纪律**再提一版**。版本号 1.2.112 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**1.2.114(2026-10-10,FULL 自动路径成功率修复批)**:共用引擎变更 —— `scripts/flow_failure.py` 新增失败组 **`capacityFull`**(判据来自注册表 `failureClasses.capacityFull`,**排在 `needs_human` 之前** —— 否则仓容满的文案会被 `需运营` 吞进 needsHuman,就再也分不出是哪条链;派发 kind 仍是 needs_human);`scripts/flow_config.py` 新增配置中心入口 `appointment_max_day()` / `catalog_default()`(按 key 从声明面取 `default`,**不是**第二条解析链);`configs/advanced.json` 新增声明 `advanced.appointment.max_day`(**默认 5**,原 3 —— 本批**唯一的行为变更**);`scripts/flow-requirements.json#failureClasses.capacityFull` 是分类侧同一份口径。本能力自身:`scripts/orchestrator.py` 新增**仓容前置探测**(进步骤4 前只读探测:仓容满 ⇒ **不进入步骤4**、直接落 `capacity_full` 失败;探测不可用 ⇒ 证据不足、照常尝试)+ `defer_capacity` 当日解除链 + `--mode capacity-probe` 只读 CLI;新增 `scripts/ml_capacity_probe.py`(**纯判据**,只有 stdlib ⇒ 可离线夹具回归)与 `scripts/analyze-full-day.py`(只读归因报表)。回归:`capacity-precheck` / `capacity-defer-lift` / `analyze-full-day` 三份;`check-sop-consistency` 的 C6b 判据**收紧**(capacityFull/pageFlaky 也要与注册表逐字一致,⛔ 未抬基线)。⛔ 未新增引擎面运行期文件(只改既有引擎文件 + 本能力脚本)。|**1.2.115(2026-10-10,同批二次收口:契约 anchor 跟随实现)**:`core/contracts/argent.contracts.json` 的 J4-failure-classification 判据登记(engine 面文件,四个包里的三个含它)—— ① owner/implementations 的行号与 anchor 跟着`scripts/flow_failure.py` 重排走(89/91 → 118/121);② anchor 从 `GROUPS = (('pageFlaky'` 改成**更精确**的 `GROUPS = (('capacityFull', 'needs_human')`(初版写成 `GROUPS = (` 被 `argent-contracts` 的 R1d 当场拦下:`scripts/daily-report.mjs` 里也有同名字符串 ⇒ anchor 太松就是假绿);③ outputs 补一行「命中的**组**名进 reason」。⚠️ 版本号 1.3.124 从未发布过(同批收口 ⇒ 以**最终内容**盖章,不存在「内容变了版本没动」的对外窗口)。本能力自身内容未再改动。|**1.2.116(2026-10-10,同批三次收口:两处文档小节号 + 去掉未用常量)**:`configs/advanced.json` 的 help 里指的小节号写错(§8.71 → **§8.72**,那是本批新落的小节;写错会把运营指到别人的事故记录上);`scripts/flow_config.py` 去掉一个未被使用的模块级常量 `CATALOG_DIRS`(死代码只会误导下一个人以为它在参与解析链)⇒ 引擎面内容再变,按「内容变 ⇒ 版本必变」各提一个补丁版本并重新盖章。⚠️ 版本号 1.3.125 / 1.2.115 / 1.1.122 从未发布过(同批收口 ⇒ 以**最终内容**盖章)。⛔ 行为零变化(三份回归复跑全绿)。|**1.2.119(2026-10-11,同批:引擎面新增 `scripts/lib/cdp_ports.py`)**:本能力的流程 / 提示词 / 脚本**一字未改**;共用引擎新增 CDP 调端口发现/归属/页面探针的唯一实现(认领前环境预检第二层回退),包内注册表投影随之变化 ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」提版本并重盖章。|**1.2.120(2026-10-12,Windows 安装路径三缺陷修复批)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变)——① `scripts/lib/preset-install.mjs`:**「已装集」判据改为选择痕迹** `presets.selection.json#kept`(⛔ 不再读 `package.json#dsh.bundle.patch` —— pnpm 对 `file:` 依赖建的是指向货架的链,读到的永远是货架自带的 14 条 ⇒ 收窄被自己的安装步骤抹掉),新增 `installedSelectionIds()` / `materializeBundleDir()`(软链**实体化**后再改写,⛔ 不走链写进仓库)/ `checkPresetSelectionConsistency()`(patch 实体 == presets.json 行 == dsh.bundle.patch == 痕迹);② `install-argent.mjs`:新增**第 7c2 步收尾重施**(第 7 步 `pnpm add file:…` 会把 profile 副本换回货架 14 个 ⇒ 旧实现在 winpc 真机\"声称只落 7/14、装完却是 14\",7 个内部角色永久留下)、版本体检改**两个候选落点**(克隆目录 + 安装器自己那棵树 —— Windows 的 boot 克隆场景,此前永远退回内置列表 ⇒ 现役 `0.1.7-rc.2` 被报\"未验证\")、`profile-doctor` 与升级器子进程**显式传 `DSH_HOME`**(否则 `--dsh-home <临时>` 时改的是真实 `~/.dsh`)、完成提示**按平台**给启动/重启指引(Windows 不再打 bash 的 `DSH_HOME=… dsh web …`);③ `scripts/lib/dsh-versions.mjs`:内置基线补 `0.1.7-rc.2` + 新增 `verifiedListGaps()` **防漂移门禁**;④ `scripts/argent-upgrade.mjs`:同一判据 + 收尾重施。⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个包一起提版本并重盖章。本能力流程 / 提示词 / 脚本**一字未改**。回归:`scripts/tests/preset-landing-selection.test.mjs`(48 断言:全新机器恰 7 个客户可见角色 / 客户机的 7 再跑安装**仍 7**(垫片 pnpm 中途真把它放大过)/ 14 坏态收窄到 7 / 三处集合+痕迹不变量 / 软链不走链改写仓库 / 真 pnpm 的机制证据)、`scripts/tests/dsh-verified-list.test.mjs`(21 断言:lock 里已晋级版本必须全在列表内(构造缺项 ⇒ 红)、`candidate/` 不参与、列表唯一真源、boot 克隆场景真跑一次)。⛔ 本批**未发布**(发布留给交付方)。|**1.2.121(2026-10-12,升级路径角色落盘追修批:已装集唯一来源 + 内部角色不变式)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变)——① `scripts/lib/preset-install.mjs`:「已装集」的**唯一来源**收口到 `resolveInstalledSelection()`(**可信痕迹** `presets.selection.json#kept` → 退回 `agents.json` 里各 agent 的 `roles` 并集 → 两级都没有 ⇒ **空集**=首次安装语义;⛔ **绝不**把 profile 里的 patch 实体 / `presets.json` 行 / `dsh.bundle.patch` 条目当已装集 —— 那三份铺完恒是 14,「客户可见 ∪ 已装 ∪ 本智能体」于是恒等于 14,收窄被自己的安装步骤抹掉),并给「可信」加了**判据**:痕迹含 `visibility: internal` 的角色而本机 `internalRoles ≠ true`(且未给 `--internal-roles`)⇒ 判不可信、**响亮报告**后按「痕迹缺失」处理(现场那份 `kept:14/excluded:[]` 的痕迹正是放大缺陷写出来的);新增**不变式** `checkNoInternalLanding()` —— 落盘集合不得含内部角色(除非 `--internal-roles` 或 `agents.json#internalRoles === true`),违反 ⇒ `applyPresetSelection()` **判红并拒绝写出**(⛔ 不静默剔除、不静默修);新增 `reseedBundleDir()` 与 `applyPresetSelection({reseedFromShelf})`(收尾重施必须**按货架重播再收窄**:副本已被削到 7 时就地再过滤永远只能得 7,`--internal-roles` 装不回来、自检还会拿「期望 14 ≠ 落盘 7」判**假红**);② `scripts/argent-upgrade.mjs`:**升级档与安装档同一条公式**(客户可见集 ∪ 可信已装集 ∪ 本智能体角色),⛔ 不再用 `agentScoped: agents.length>0`(它把客户可见集整个排除掉 ⇒ 现场那台只落 2 个角色);第 7.6 步收尾重施带 `allowInternal` + `reseedFromShelf`,判红即该步 `ok:false`;③ `install-argent.mjs`:第 4 步默认档 / `--agent` 子集 / 第 7c2 步收尾重施 / `--capability remove` 四处统一走可信已装集与授权口径(`--capability remove` 只为「本机已合法装了内部角色」时不误判红);④ **新增只读 CLI** `scripts/check-preset-landing.mjs`(四件套 + 已装集来源 + 两条不变式,任何一台机器可照抄自查,⛔ 不写任何文件)⇒ `pack.engine` 登记项 +1。**现场(winpc 真机,2026-10-12)**:profile 14 个 patch 实体 + 痕迹 `kept:14/excluded:[]` + `agents.json=[hr]` + `internalRoles=false`,重跑官网一条命令(升级路径)修前打的是 `preset 同步(行式): **14** 个角色` + `角色落盘集合收尾:14 个;三处集合 + 痕迹一致`(7 个内部角色一个没摘),修后同一台机器 ⇒ **7**(`excluded` 列出 7 个内部角色)并打印 `选择痕迹不可信 ⇒ 已装集退回 agents.json 角色`。回归:`scripts/tests/preset-landing-upgrade-path.test.mjs`(43 断言:现场复刻升级路径 ⇒ 7 且 **pre-fix 判据重建得 14**(鉴别力)/ `agents.json` 缺失 ⇒ 7 / 可信痕迹 7 不许放大 / `internalRoles:true` ⇒ 14 放行 / **不变式负样本判红且零写入** / 「铺货架 ≠ 选择」/ 现场真形态 `kept:14` ⇒ 7 且响亮报告 / 真 home 零增量)。⛔ 本批**未发布**(发布留给交付方)。本能力流程 / 提示词 / 脚本**一字未改**。|**1.2.123(2026-10-12,P1-A 宿主排程批:四道闸防线 + 日报试点声明)**:本能力的流程/提示词/脚本**一字未改**;共用引擎面变更(`scripts/flow_config.py` 新增 trigger.schedule 解析、`scripts/vertical-lint.mjs` 新增排程声明门禁、`scripts/lib/registry.mjs` 新增只读 flowSchedule())与**包内注册表投影**变化(业务线声明只动了日报;新增的 L1 `scripts/lib/schedule-probe.mjs` 与 L2 `scripts/argent-schedule.mjs` **刻意不进 pack.engine**,理由见 daily-report 的 `_note`)⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本并重盖章。新增回归 `scripts/tests/schedule-probe.test.mjs` / `scripts/tests/schedule-declaration.test.mjs`。|**1.2.126(2026-10-12,宿主门禁追修批:⛔ 不代装宿主 + npx 形态纳入宿主解析)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变,**含无 flow 的 hr**)——① `install-argent.mjs`:**删除** `--install-host` 代装入口(连同旧自动代装函数与宿主离线包的下载/解包/bin 链接逻辑;开关若仍被传入 ⇒ 报「该开关已废弃」+ **非零退出**(1 = 用法错误),⛔ 不静默忽略),被拒文案改为按 dsh **官方**运行方式给指引(首选 `npx @deepseek-ai/dsh@<窗口内版本> web`;备选官方「从源码运行」;四要素:① 你的版本不在支持窗口(列窗口)② 官方方式换成窗口内版本的一行命令 ③ 我们正在适配你的版本(⛔ 不给对外 ETA)④ 未改动你的 dsh);② **新增** `scripts/lib/dsh-host-resolve.mjs`(**进 `pack.engine`**):宿主解析链 = **PATH 上的 `dsh` → `DSH_BIN` → npx 缓存形态**(读 `<npm cache>/_npx/<hash>/node_modules/@deepseek-ai/dsh/package.json` 的 version,纯只读零网络;多候选按「最近使用优先(mtime 最新)+ 同刻路径升序」确定并**打印选了哪个**)⇒ **npx 形态算宿主**(旧口径「npx 不等于已安装宿主」作废),且 npx 形态下插件装配走**同一条 launcher**(`npx --yes @deepseek-ai/dsh@<版本> plugin --profile web add file:…`),⛔ 不许「检测到 npx 却去用 PATH 上的另一个 dsh」;③ `install.sh` / `install.ps1` 口径同步(ps1 仍声明并透传 `-InstallHost`,只为让旧命令行得到**可读**的「已废弃」原因而不是参数绑定错误)。本能力自身流程 / 提示词 / 脚本**一字未改**。回归 `scripts/tests/install-host-gate.test.mjs`(**219 断言**,纯夹具:垫片 dsh/npx + 本地裸库 + 临时 home,⛔ 零外网、⛔ 不碰真 `~/.dsh`;⚠️ `dsh plugin` 会绕过 `DSH_HOME`/`HOME` ⇒ 夹具只断言命令行、绝不真跑)。⛔ 本批**未发布**(发布留给交付方)。",
|
|
165
|
+
"能力包版本(语义化):改了该能力的流程/提示词/脚本/技能 ⇒ 必须提版本并重新打包 |**1.2.59(2026-09-30)**:共用引擎变更(flow-trigger.sh 新增「离线许可 / 租约二选一」闸门,并把 check-license.mjs / license-gate.mjs 纳入引擎分发)⇒ 版本随引擎前进。|**1.2.64(2026-10-03)**:共用引擎变更(`scripts/lib/repo-root.sh` 的 `argent_agent_path()` 去掉旧 node 前缀 `$HOME/node/bin`、换成现役 `$HOME/.local/node/bin` —— 否则生成的 launchd PATH 指向旧树,且只改 plist 会被重生成写回)⇒ 版本随引擎前进。|**1.2.65(2026-10-03,D1)**:共用引擎变更(`scripts/lib/registry.mjs` 支持**显式解释器** `py` —— 内核侧不再赌 PATH 上恰好有 `python3`;台账查询收口为 `core/lib/ledger.mjs`(**CLI 与 MCP 共用同一套**,MCP 不再自带一份 `slice(-tail)` 先截断后过滤的假空实现))⇒ 版本随引擎前进。|**1.2.66(2026-10-03,D2)**:共用引擎变更(`scripts/vertical-lint.mjs` 新增 `flow.skill` 校验 —— 缺声明 / 未在 manifest#skills 声明 / 技能目录不存在 三类即红;`scripts/vertical-init.mjs` 生成的流程带上 `skill` 声明,保证「生成即合规」)⇒ 版本随引擎前进。 |**1.2.67(2026-10-03)**:共用引擎变更(`scripts/flow_claim.py` 补 `--cases-from-dir` 透传 + dry-run 零副作用:不建台账目录/锁文件、不落店铺清单缓存、不写 blocked 台账、源层 case 落临时目录)⇒ 版本随引擎走。|**1.2.68(2026-10-03,P1 第二批)**:共用引擎变更(`scripts/check-license.mjs` 接**唯一判定入口** `core/lib/license-verdict.mjs`(三态 + 离线设备绑定,含 `device` 比对 / unbound 放行 / 自助重绑 3 次 + 7 天宽限),`scripts/license-gate.mjs` 新增 `--json`(只给程序消费,**不改判定/不改证据**)、`scripts/install-license.mjs` 补设备比对与 `--rebind`)⇒ 版本随引擎前进。|**1.2.69(2026-10-03,P1 第三批/P3)**:包内容变更(发票技能的 SKILL 去掉**字段白名单的逐字枚举**、改为引用写手与 `core/contracts/`;两条发票提示词的守卫行同样改成引用 `argent writeback`)⇒ 版本随内容前进。|**1.2.70(2026-10-03,P4 批)**:共用引擎变更 —— `pack.engine` 纳入 **core 运行期文件**(26 项 core 运行期文件 + 3 项**独立运行验证抓出的缺件**(VERSION / flow_case.py / ml_schema_check.py):`core/cli/argent.mjs` + `core/mcp/{server,http}.mjs` + `core/lib/**` 运行期闭包 + 两个 `core/contracts/*.json`,按实际 import 关系推导)⇒ 能力包自带 core,装机可不依赖 git/sync;同批数据目录链两步落地(`scripts/lib/argent_datadir.py`:老机器存在即沿用、新装 `~/.argent`)⇒ 版本随引擎前进。|**1.2.71(2026-10-03,P4 批·独立运行复验)**:把能力包 build 出来在**无仓库/无 git-sync/极简 PATH** 下真跑,抓出 3 个此前就缺的运行期文件(`VERSION`:CLI `version`/`--help` 直接读,缺它当场 ENOENT 崩;`scripts/flow_case.py`:`flow_source.py:260` 子进程建案;`scripts/ml_schema_check.py`:`flow_source.py:280` 子进程做缺口检查)⇒ 一并纳入引擎;推导规矩收紧为「静态 import 闭包 ∪ **子进程调用图**」。 |**1.2.76(2026-10-04,§8-③ 路径 (a):一次性激活码)**:共用引擎变更(新增 `core/lib/license-activate.mjs` —— 客户机的激活码兑换:归一化/端点解析/服务端错误码→reason·退出码映射/审计;`core/lib/license.mjs` 新增 `activate` 子命令;`core/contracts/*.json` 同批登记)⇒ 版本随引擎前进。|**1.2.78(2026-10-04,isDirectRun 统一 + 补两处引擎缺件)**:共用引擎变更(新增 `scripts/lib/is-direct-run.mjs` —— \"本文件是否被直接执行\"的**唯一判据**(realpath 比对);同批把升级器/安装器/各 check-*/日报/写手/飞书卡片共 10 个 CLI 的入口守卫换成它:旧形态 `pathToFileURL(argv[1]) === import.meta.url` 在软链路径(`/tmp` → `/private/tmp`)下**假否定** ⇒ CLI 静默不跑;本包内的日报/写手两个 CLI 随之变更)⇒ 版本随引擎前进;同批补两个**此前漏在引擎清单外**的运行期文件(本次\"独立运行复验\"抓出:包内 CLI 当场 ERR_MODULE_NOT_FOUND)—— `scripts/lib/argent-datadir.mjs`(内核数据目录判据的脚本侧再导出,包内日报/写手/卡片三个 CLI 都 import 它)与 `scripts/check-skill-classification.mjs`(`core/lib/doctor-customer.mjs` 静态 import ⇒ 缺它连 `argent --help` 都起不来)。|**1.2.81(2026-10-04,客户机试点:逃生阀透传 + 用法事实)**:共用引擎变更(`core/lib/license-activate.mjs` 新增 `--allow-regression` 透传(判定仍只在 install-license)+ `--json` 时把“放行一次倒退”的标注写 stderr + 404 的 hint 点名 `--server` 只给 base URL;`core/lib/license.mjs` 把 `asJson` 告知子命令层;`core/contracts/verbs.schema.json` 同步 args 与 jsonFields)⇒ 版本随引擎前进。 |**1.2.82(2026-10-04,角色提示词收敛)**:包内容变更:`presets/argent-ml-invoice-{wy,该流程}/agent.cordis.yml` 的 persona 收敛到统一骨架(小节标题与顺序);「落卡」等看板期指令改成现行台账 blocked + 会话挂起 ⇒ 版本随内容前进。|**1.2.83(2026-10-04,O2 只读运营视图:`argent license ops`)**:共用引擎变更(新增 `core/lib/license-ops.mjs` —— 许可只读运营巡检:在途码/失败码/近 N 天事件时间线/席位账目/异常清单,替代 `mongosh`;`core/lib/license.mjs` 新增 `ops` 子命令;`core/contracts/{argent.contracts.json,verbs.schema.json}` 同批登记 + `reasonCodes` 新增 `field_missing`(O2 两个已知陷阱的响亮失败码:`state` 不是 `status`、席位不是存储字段 `used`);engine +1 项)⇒ 版本随引擎前进。(⚠️ 盖章说明:本版内容在同一工作树里经过两次收口(先落实现,再补契约 note 与词表去重)⇒ 以**最终内容**盖章;版本号 `1.2.83` 从未发布过,不存在\"内容变了版本没动\"的对外窗口)|**1.2.84(2026-10-04,O2 客户端接线:4 个只读接口)**:共用引擎变更(`core/lib/license-ops.mjs` —— `OPS_READ_ENDPOINTS` 的 4 条 `exists:false → true` 并真正发 GET(`codes-list`/`events`/`seats`/`devices/{codePrefix}`,契约 = `whyshu-svr@92c6233`);四处字段映射(`devices[].codePrefix→code`、`items/totals→principals/totals`、`device.found=total`、`timeline` 用服务端 `total`/`count` + 显式 `limit=200`);`405/400 field_unknown/429/401/403/400 bad_*` 一律 exit 2 响亮(`field_unknown`/`rate_limited`/`method_not_allowed`/`admin_required`/`bad_request`,同批登记进 `core/contracts/*`);新增 `coverage`/`coverageDetail`、`checkServerRows`、`serverPageMeta`、`summarizeCoverage`、`seat_used_mismatch`/`seat_totals_mismatch`;⛔ 仍只发 GET、零落盘、无 `--apply`、不探不调 `release-device`)⇒ 版本随引擎前进。⚠️ 服务端那 4 个接口**已就绪但未部署** ⇒ 线上仍报节级 `endpoint_missing`(⛔ 不是空集)。|**1.2.85(2026-10-04,O2 接线后收口:一行措辞修正)**:`core/lib/license-ops.mjs` 文件头「四处字段映射」表 **④** 的措辞改对(窗口内总数在 `timeline.server.total`;`timeline.scanned` 是**客户端窗口过滤后**的条数,⛔ 别当窗口内总数;落点由不存在的 `serverTimelineSection()` 改成 `serverPageMeta()` + 服务端分支)—— **一行注释同样改了引擎 sha** ⇒ 按纪律再提一版(先例同 `_engineNoteDoctor20261003`)。⛔ 行为零变化(254 断言 + kernel-purity 复跑全绿)。|**1.2.86(2026-10-04,合规改造:诊断上报改「告知—同意」)**:共用引擎变更(`scripts/telemetry.py` 默认改为 **opt-in**:`telemetryOptIn` 无键 = 关、`TELEMETRY_DISABLE=1` 硬关;新增采集时刻同意标记 `consent` 与「关闭期不采集/不堆积/不补发」迁移语义;字段 `host`(原始主机名)改为不可逆 `hostHash`,`redact()` 同步掩主机名;新增 `--purge`)—— 这些改了引擎 sha ⇒ 按纪律提版本(先例同 `_engineNoteDoctor20261003`)。客户端侧同批:安装器新增「诊断上报(可选)」步(非交互默认拒绝)、设置页新增可开关(写 `telemetryOptIn`)。|**实例令牌批次(2026-10-05,路线 B)**:共用引擎变更 —— `scripts/telemetry.py` 的凭证取值链从两级扩成三级(`ARGENT_INSTANCE_TOKEN` → `<数据目录>/instance-token.json`(**机器自带凭证**,0600)→ 账号令牌兜底);实例令牌走 **`x-instance-token`**(紧凑串 `it1.<b64url(payload)>.<sig>`)并可带 `x-instance-device`;新增**本地绑定自检**(令牌 instanceId ≠ 本机 installId ⇒ **不发网**、`lastError: instance-token-mismatch`)与 `--status.credential`(只显示来源类型/到期日与绑定态,⛔ 不显示令牌值)。`scripts/install-license.mjs` 新增 `--instance-token-file`(与许可**同一条离线下发链路**,先判后写:归属/设备码/期限对不上即拒装;0600 + 备份 + 原子落盘 + 幂等),`scripts/install-one-shot.mjs` 的 `license` 段透传该参数;新增回归 `scripts/tests/telemetry-instance-token.test.mjs`(62 例,含 JS⇄Python 对拍),`scripts/tests/telemetry-consent.test.mjs` 补「令牌 ≠ 同意」。动机:客户机此前靠 30 天账号 JWT 上报(2026-11-04 到期,且服务端 2026-09-14 轮换 JWT_SECRET 时全灭),交付一台机器就该交付**随机器走**的凭证。服务端契约与签发/续期/吊销手册见 `whyshu-svr/docs/ops/instance-token.md`。⛔ 本轮**未新增运行期文件**(只改上述三个既有引擎文件),故 `pack.engine` 清单不变。|**1.2.89(2026-10-06)**:包内容变更(业务线 `verticals/<id>/manifest.json` 是各能力包内容集的一部分)——业务线 `requires.argent` 由 `>=0.2 <0.3` 抬到 `>=0.3 <0.4`、`version` 0.1.0→0.1.1(P0-5,修「Argent 能力 → 概览」把唯一业务线误标 `⚠️ 版本不满足`);⛔ **未新增运行期文件、未改共用引擎**,故 `pack.engine` 清单不变,按既有纪律只提受影响能力包的补丁版本并重盖章。|**1.2.90(2026-10-06,MCP 工具安全注解)**:共用引擎变更(`core/mcp/server.mjs` 的 `tools/list` 给 14 个工具加 MCP 规范 `annotations` —— 只读 9 ⇒ `readOnlyHint:true`;写类 5 ⇒ `readOnlyHint:false` + `destructiveHint:true`(含三个沙箱影子工具,保守标法理由见该文件注释)—— 让宿主能在**协议层**分辨只读/写类、收窄授权面;内核侧 `confirm=false` 只回影子 + 真写 `confirm:true` 且过 `gateWrite` 许可闸的**双重门禁原样保留**。⛔ 零行为改动:handler / `inputSchema` / 返回逐字节不变、工具数仍 **14**(已与 `git HEAD` 基线逐工具比对:去掉新键后 14 条完全一致),新增回归 `scripts/tests/mcp-tool-annotations.test.mjs`)⇒ 版本随引擎前进。|**1.2.92(2026-10-08,WebDriver 用法 P0 批)**:共用引擎变更(P0-1 依赖表补 `selenium` ——`install-argent.mjs` 的 `pythonRuntimePlan().pkgs` 与 `scripts/lib/python-runtime.mjs` 的 `venvUsable` 默认 `pkgs` 同批加第五项,官方唯一推荐的驱动档位(`ZINIAO_MODE=selenium`)此前**装都没装** ⇒ 选型开关静默撒谎、该档位从未运行过一次;缺它时老 venv 必须判「未就绪」否则 `ensure` 空转、永远装不上;同批 `SeleniumClient` 的 ImportError 分支改显著 warn + 选型处预检并显著 warn 后回退 Playwright(官方不建议)、`--mode inspect` 报 `driver_tiers`;P0-2 `updateCore` 总超时 60→300s / 单次 30→60s(官方建议值)并把官方 `msg` 进度打进日志;P0-3 每题尾部**只读** before/after 窗口快照并排 + 连续 3 轮泄漏 ⇒ 台账 blocked(needs_human,⛔ 不自动关店);P1-a `_wd_call` 落 requestId/耗时一行;P1-b `-10006` 按官方语义重试一次。⛔ 未新增运行期文件(只改上述既有引擎文件),故 `pack.engine` 清单不变。)|**1.3.97(2026-10-08,WebDriver 用法 P1 小件批)**:共用引擎变更(`scripts/orchestrator.py` —— 审计 §3.2–§3.6 的 P1 小件六条:① `LastError` 并入 `WebDriverError` 与每接口日志(`_wd_err_fields` **优先读 `err`**;`err` 空时 `LastError` 仍可见、各截 80 字;`startBrowser` 的「未返回 debuggingPort」分支不再丢该字段);② 清场后 `pgrep` **进程级**复核(`wd_residual_processes`/`_wd_report_residuals`:残留 ⇒ 显著 warn,⛔ **不自动 kill 更多东西**;复核路径运行时计数 + AST 双判据零 kill;自己与祖先链不计入残留);③ IPC **连接类**异常退避 2s **重试一次**(`_wd_conn_error_kind` 分 refused/timeout/reset/conn;业务错误码与其它异常不重试;`startBrowser` 撞 timeout/reset **不重试** —— 重试会被内核视为「重启」,官方 -10006 语义);④ chromedriver **缓存面**只读巡检(`cached_chromedriver_majors`/`chromedriver_cache_inventory`/`chromedriver_cache_line` + `--mode inspect` 报缓存面;`detect_running_core_version_free` 只用窗口 CDP **免凭据**取内核大版本 ⇒ 缓存大版本可对照);⑤ `getPluginInstalled` 只读漂移探测(`plugin_probe_plan`/`probe_plugin_installed`:无 `pluginIds` 来源 ⇒ **零调用**只报「能力未接」,⛔ 不猜);⑥ `ClearCache`/`ClearOnline` **显式人工**子命令(payload 构造 + 凭据三元组脱敏的 dry-run 预览;⛔ 编排路径零调用,默认 dry-run、`--yes` 才真跑)。另改两个**不在包内**的运维脚本(`scripts/*-windows.sh` 新增 `cache`/`plugins`/`clear-cache`/`clear-online` 子命令;`scripts/*-post-upgrade-check.sh` 新增两条只读段)。新增回归 `scripts/tests/*-webdriver-p1.test.py`(103 断言;桩/夹具,⛔ 不真开浏览器、不联网、不写真实数据目录)。⛔ 未新增运行期文件,故 `pack.engine` 清单不变。⚠️ 本批**未做**(如实保留):**选型解耦**(`ZINIAO_LIFECYCLE` + `ZINIAO_DRIVER`,审计 §3.1 第 2 行)—— 留待下一批。)|**1.2.97(2026-10-09,P0 注册表投影)**:共用引擎变更(`install-argent.mjs` 的 `--expect-sha256` 改为**一个包一个**摘要(可逗号分隔/重复给,数量不匹配=用法错)+ `--check-update` 合成**一条**可原样跑的「一起装」命令;`scripts/argent-capabilities.mjs` 加 **P2a 不变量**:投影落 `scripts/flow-requirements.json`(引擎级 base)前先摘掉不属于 base 的 `flows`/`aliases`)。能力包自身:包内注册表投影**只并引擎级段**(flow 不再抄进投影 ⇒ 与 `verticals/<id>/flows.json` 不再重复定义),并**同批带上** `verticals/<id>/flows.json`(旧包只带 manifest ⇒ 纯包装机 `flow_registry.py --json` exit 2)。判据:`scripts/tests/install-registry-loadable.test.mjs`(装完即加载注册表,五态)。|**1.2.98(2026-10-09,引擎锁跨平台化)**:共用引擎变更 —— 新增 `scripts/lib/argent_filelock.py`(模块名带 `argent_` 前缀 = **撞名防线**:PyPI 上有同名且极常见的 `filelock` 包,实测在 Windows 真机上被 `import filelock` 静默拿到过)(跨平台**排他文件锁唯一真源**:POSIX `fcntl.flock` / Windows `msvcrt.locking`,同一 API、同一锁文件约定),并把 `scripts/flow_claim.py` / `scripts/flow_ledger.py` / `scripts/telemetry.py` 的**顶层** `import fcntl` 与 `scripts/orchestrator.py` 的 **10 处**函数内 `fcntl` 全部换成它 ⇒ Windows 上认领/台账/遥测不再 `ModuleNotFoundError`(此前整个不可用),编排器的锁不再 `except: pass` **静默变 no-op**(互斥类 fail-closed、追加/审计类响亮降级 + 逐次计数)。⛔ 业务语义 / 数据格式 / 事件形状零变化:POSIX 侧与旧实现**逐字等价**(同一次 `flock` 调用、同一把锁文件、同一阻塞语义;`best_effort` 只在锁不可用时介入);同批 `pack.engine` 登记新文件。回归 `scripts/tests/filelock.test.py`(两进程抢锁 / 新旧逐字节对照 / 无 fcntl 可 import / Windows 分支桩测,52 断言)。(⚠️ 盖章说明:本版内容在同一工作树里经过**多轮收口**,以**最终内容**盖章;版本号从未发布过,不存在「内容变了版本没动」的对外窗口。三轮都来自**真机(Windows)实测**:① `import filelock` 与 **PyPI 同名包**撞车(探针当场拿到第三方的 `WindowsFileLock` 类)⇒ 改名 `scripts/lib/argent_filelock.py`(与 `argent_datadir.py` 同惯例)并同步四处 import;② Windows 无 `/tmp` ⇒ `lock_dir()` 的 Windows 缺省改用系统临时目录(POSIX 缺省**逐字不变**);③ **3 进程 ×15 条并发追加只活下 42 条**(Windows `_O_APPEND` 非原子)⇒ 根因是 `best_effort` 默认退成了**非阻塞**(旧实现是阻塞 `flock`),改为 `blocking=True` 默认并补回归(`filelock.test.py` §6b:持锁期间 append 必须**排队**,故障注入可复现变红)⇒ 复跑 45/45;④ 真机再实测出**强制锁挡读**:锁住数据文件**第 0 字节**会让别的进程**整文件读不了**(`flow_ledger.read()` 当场 `PermissionError`)⇒ Windows 锁区间挪到**文件内容之外**(第 2^40 字节起 **1 字节**;`LockFile` 允许锁到 EOF 之外且不分配、不改大小)⇒ 锁照样跨进程互斥、**读者零影响**(真机复验:持锁期间整文件读正常、解锁后可锁))|**1.2.99(2026-10-09,能力包地址真源收敛)**:共用引擎变更(`install-argent.mjs` —— ① `--capability` 的包地址**真源收敛**:有 install-ticket 清单 url 就用**清单的**(它与清单里的 sha256 同源 ⇒ \"地址+摘要\"成对可信),只有无账号/离线/清单没给 url 时才回落 `--pack-base` + 锁内版本自拼,且计划清单**逐条标注地址来源**(旧实现无条件自拼 ⇒ `--pack-base` 一整段绕开清单);② `--check-update` 主推 `--capability <服务端授予全集>`(不再要用户手抄四条 URL 与四个摘要),`--from-packs … --expect-sha256 …` 降为**离线/裁剪交付的进阶备选**另起一行;③ `--check-update` 对「显式零能力」账号改**中性提示**(exit 0)—— 旧实现把\"啥都没买\"报成\"拿不到服务端能力清单\"故障;判据换成\"服务端回没回 `capabilities` 字段\";`scripts/argent-capabilities.mjs` 的 `parseCapabilityManifest` 为此新增 `capabilitiesPresent`)⇒ 版本随引擎前进。同批 `scripts/release-argent.sh --check-dl` 新增**能力包档**(对服务端清单里每个包逐个 HTTP 取回 + `capability_pack.py --digest-tgz` 重算内容摘要 == 清单 sha256;不通过即判红)—— 该脚本与 `capability_pack.py` **都不在** `pack.engine`,故不改包内容。|**1.2.100(2026-10-09,同批二次收口:`--dsh-home` 必须同时决定数据目录)**:共用引擎变更(`install-argent.mjs` —— `DATA_DIR` 从**模块级 `const`** 改成**取值函数 `dataDirOf()`**。旧形态在 `--dsh-home` **解析之前**就求值 ⇒ 账本写进 `--dsh-home`、而 **packs-cache 写进默认 `~/.dsh/argent`**:后果不是\"多一个文件\",而是**定向安装/测试用的临时 home 会往真实 `~/.dsh` 里写**——\"⛔ 不碰既有 home\"当场不成立。同文件 `PRESET_ROOT` 早有同因修复(注释原文:\"const 提前求值会锁死默认 ~/.dsh\"),`DATA_DIR` 是漏网的那一个。**真机取证**:Windows 定向安装后 `C:\\Users\\<u>\\.dsh\\argent\\packs-cache\\` 多出 hr-0.1.41 / full-1.3.104 / invoice-1.2.99 / daily-report-1.1.106 四条(已逐条清除,回到原有 10 条);同场景换成 HEAD 版安装器可复现(`\\$HOME/.dsh/argent/packs-cache` 被创建)。无 `--dsh-home` 时 `dshHome = ~/.dsh` ⇒ 真实装机路径**逐字节零变化**。回归:`scripts/tests/install-capability-url-source.test.mjs`【E】(把子进程 HOME 也钉进临时目录,断言默认数据目录**没有被创建**)。|**1.2.101(2026-10-09,配置地基:配置目录 + 通用读取器)**:共用引擎变更 —— `pack.engine` 新增 `core/lib/config-catalog.mjs`(配置面的**唯一**读取器:五级解析链 env → 域 env 文件 → config.json → 业务线/机器本地文件 → 声明 default;API `get/require/sourceOf/isConfigured/all/describe/invalidate`;secret 项在 `describe()` 里**结构性**不回值)+ 5 个引擎级配置目录文件 `configs/*.json`(账号 / 通知与投递 / 宿主与机器 / 人事(HR) / 高级与诊断);业务线级目录 `verticals/<id>/config.json` 由 `capability_pack.manifest()` 随 manifest/flows **同批带上**(改了 `scripts/capability_pack.py` ⇒ 本次三个带 flow 的能力包内容都变了)。四道门禁:`node scripts/check-config-catalog.mjs --strict`(①双向对账 ②敏感不出门 ③必须项可解析 ④新增即生效)+ 回归 `scripts/tests/config-gates.test.mjs`(84 断言,含「注入假象必须变红」的自证)。⛔ 不改任何现有配置的取值行为(读取器是**新增**入口,现有调用方仍按自己的链路读;每项声明的 `todayChain` 如实记录「今天代码的优先级」,迁移时逐项核对)。契约见 `docs/Argent-宿主适配契约.md` §7。|**1.2.102(2026-10-09,配置地基第二批次:设置页「配置中心」+ 逐能力「检查更新」)**:共用引擎变更 —— `core/lib/config-catalog.mjs` 增「可写落点 / 旧优先级提示 / 分类 order」进 `describe()` 载荷,`configs/advanced.json` 把 `capability.checkUpdate` 的 `implemented` 如实改为 `true`,`install-argent.mjs` 的 `--check-update` 增 `--json` + `--capability` 过滤(设置页与命令行**同一份比对**)⇒ 版本随引擎前进(本能力的流程/提示词/脚本内容一字未改)。|**1.2.103(2026-10-09,变现分层落地)**:业务线清单 业务线清单 `verticals/<id>/manifest.json` 同批变更(`daily-report` 档位 `enterprise` → `pro`;本能力 `minPlan` **保持 `enterprise`** —— 门户写操作属企业版)⇒ 包内容随之变化,按纪律提版本。|**1.2.106(2026-10-09,预约失败判定链 + 口径统一)**:共用引擎 `scripts/flow_failure.py` 变更(新增 `canonical_reason()` 与 `--case` —— 打印某 case 的**规范失败原因**:优先读台账 `failed.reason`,老台账回落到 `error` 去身份前缀;给角色/运维一个**逐字照抄**的取数口,杜绝\"表备注写 A、账本写 B\")⇒ 所有能力包的注册表投影同批变化。本能力自身:本能力的流程/提示词/脚本内容一字未改(仅注册表投影与共用引擎前进)。(⚠️ **盖章说明**:本版内容在同一工作树里经过**多轮收口**(先落实现,再按 vertical-lint 的引擎业务词约束改注册表文案、再收口文案)⇒ 以**最终内容**盖章;版本号从未发布过,不存在\"内容变了版本没动\"的对外窗口。)|**1.2.107(2026-10-09,三处生产实测收口:票不许静默消失 · 失败必写原因+动作 · 发票流程 Rule R)**:共用引擎变更 ⇒ 四个能力包一起提版本并重盖章。① `scripts/flow_triage.py`:判定改为**有效末条事件**(`INFO_EVENTS = phase/wake/policy_apply/policy_new` 回退到最近一条状态性事件;`failed_ack` = 有意不动且**不参与回退**)、`blocked` 从「静默 pass」改为可见的 `needs_human`,并加**循环后对账兜底**(任何未归桶的 case ⇒ `needs_human`,kind=unclassified)——修的是客户机生产实测 P0(某发票票):其尾部是 `blocked → phase` ⇒ 分诊摘要全 0、运营勾了放行也不派发、且**不在「需人工」里**(静默卡死)。② `scripts/flow_failure.py`:新增运营文案**唯一来源** `ops_message()`(`结论:<业务类|系统类|我方缺陷类>|<原因>|动作:…`,≤300 字)与 `release_hint()`(放行位/提示的**唯一实现**:变体与**顶层** pick 都认;`orchestrator._ops_action_hint` 改为委托它);③ **新增** `scripts/invoice_fail_closeout.py`(属**发票能力专属脚本** `capabilities.invoice.pack.scripts`,⛔ 不进共用引擎 —— 它只写发票那一列):失败/成功收口 —— 把**同一串**写进表「发票错误信息」与台账(`detail` 逐字相同、`error` 放规范原因),取不到原因 ⇒ **exit 2 拒绝执行**,代码级异常归「我方缺陷类」且**不回原文**,成功 ⇒ `--clear-error` 清空;④ `scripts/flow_return_to_ops.py`:缺口回填文案改用同一来源(表字段 == 台账 `detail`);④b `scripts/flow_config.py`:归一化的 `guards` 增**标量透传**(`writer`=写手路径、`errorField`=失败原因列 —— 不透出就只能各自把路径/列名写死,那正是「判据第二份」与业务词泄漏进引擎的来源);⑤ 业务线声明(`verticals/<id>/flows.json`):两个发票流程新增 `pick.release` / `pick.releaseReDispatch`(放行位 = **各自的门控列**「发票就绪」;上限 3 / 冷却 30)与 `guards.errorField`。本能力自身:两条发票流程的技能(§6.2.1 / §6)与两份失败交接提示词各加「失败收口必须写表」口径(命令/红线/⛔ 不许手写 `--error-message` 两处各写一套)。|**1.2.108(2026-10-09,配置「生效来源」可见化 + 冲突告警,批 1)**:本能力自身:流程 / 提示词 / 脚本内容一字未改(仅共用引擎与注册表投影前进)。共用引擎 `core/lib/config-catalog.mjs` 新增**纯函数** `resolveEffective()`(按规范链算「谁赢了 / 谁被压住」)、密钥脱敏 `redactSecret()` 与读取器 `effectiveOf()/levelsOf()`,并新增只读 CLI `scripts/config-explain.mjs`(`--key/--all/--list/--json`)⇒ 能力包内容变化,按纪律提版本并重盖章。⛔ **零行为变化**:读取器的取值路径(`resolveOne`)与任何 `todayChain` 一个字节都没改,只是「如实展示」;同批回归 `scripts/tests/config-effective.test.mjs`(63 断言)+ 端点 / 页面两条既有回归扩测。|**1.2.109(2026-10-09,同批收口:脱敏闸幂等)**:只读 CLI `scripts/config-explain.mjs` 的\"再脱敏\"兜底闸原先**无条件**执行 ⇒ `❰已设置(长度N)❱` 里的 N 变成**占位串自己的长度**(恒 11,实测),而用户正是拿它比对\"密钥换没换\" ⇒ 已改为**幂等**(含被压住的那级)并补回归;引擎面同一份 CLI 变了 ⇒ 包内容变化,按纪律再提版本并重盖章。本能力自身内容一字未改。|**1.2.111(2026-10-10,A 批:按智能体安装清单 —— 客户从「智能体库」选一个装,只装它的东西)**:① **`pack.engine` 新增两项**:`agents/catalog.json`(L0 货架声明:agent → capability + flows 子集 + 角色 + 插件/技能/集成/凭据槽)与 `scripts/argent-agents.mjs`(声明解析/校验/清单构造;安装器与门禁**共用一份**判据)⇒ 引擎清单与每包内的注册表投影都变了(**无 flow 的 hr 也变**,按「内容变 ⇒ 版本必变(含无 flow 的包)」这条不变式一起提版本);② **共用引擎行为变更**(`install-argent.mjs` / `scripts/lib/preset-install.mjs` / `scripts/argent-upgrade.mjs`):新增 `--agent <id>[,<id>…]` / `--list-agents` / `--internal-roles` / `--capability remove <id>`(写前备份 + 审计);preset **行落盘集合**改为「按清单收窄」(`--agent` ⇒ 恒装 + 本智能体角色 + 已装集;默认 ⇒ 客户可见集 + 已装集;**内部角色默认不落**);升级器按 `<dshHome>/argent/agents.json` **重新施加**同一集合(否则一次升级就把收窄还原);**未给 `--agent` 时 CLI 契约与计划清单输出与改动前逐字一致**(差分回归钉住);③ 本能力自身:⛔ 流程/提示词/脚本**一字未改**(只有引擎面与 pack.engine 前进);⚠️ 共享能力包**不拆**:`invoice` 里的两条 flow 仍在**同一个**包里,智能体层只做 **flow 子集投影**(按目录声明的 `flows` 子集收窄角色/技能/定时器;装其中一条不会把另一条的角色带下来,⛔ 也不拆包)。回归:`scripts/tests/agent-catalog.test.mjs`(110 断言,七条判据:只落本智能体 / 子集过滤 / 向后兼容差分 / 未知输入零写入 / remove 备份+审计 / 目录 schema / 内部角色默认不落)。|**1.2.112(2026-10-10,同批二次收口:宿主资产声明 + 门禁)**:同一工作树里第二次收口(先落 `--agent` 实现并盖章,再补 `capabilities.<c>.pack.hostAssets`(**宿主侧资产声明位**:定时器/登录自启/桌面项)与它的门禁 C12,并把 `scripts/argent-agents.mjs` 的清单/回执接上宿主资产)⇒ 引擎面文件内容变了,按「内容变 ⇒ 版本必变」纪律**再提一版**(先例同 1.3.104→1.3.105、`docs/Argent-智能体平台-设计.md` §8.3 第 3 条)。版本号 1.2.111 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**1.2.113(2026-10-10,同批三次收口:安装器用法文案 · 门禁登记 · 引擎面去业务词)**:同一工作树里第三次收口 —— ① `install-argent.mjs` 的**用法头注释**补上 `--agent` / `--list-agents` / `--internal-roles` / `--capability remove` 四个入口(内容变 ⇒ 引擎 sha 变);② `scripts/tests/is-direct-run.test.mjs` 的**唯一登记处**加入 `scripts/check-agent-catalog.mjs`(新增 CLI 必须登记,否则端到端判据覆盖不到它;测试文件不在包内,本条只为留痕);③ 本文件里本批新加的 `_note` 文案去掉业务词(`vertical-lint` 的 engine-words 档按**基线**只拦新增,⛔ 不抬基线 ⇒ 改写文案而不是改基线)⇒ 引擎面内容再变,按纪律**再提一版**。版本号 1.2.112 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**1.2.114(2026-10-10,FULL 自动路径成功率修复批)**:共用引擎变更 —— `scripts/flow_failure.py` 新增失败组 **`capacityFull`**(判据来自注册表 `failureClasses.capacityFull`,**排在 `needs_human` 之前** —— 否则仓容满的文案会被 `需运营` 吞进 needsHuman,就再也分不出是哪条链;派发 kind 仍是 needs_human);`scripts/flow_config.py` 新增配置中心入口 `appointment_max_day()` / `catalog_default()`(按 key 从声明面取 `default`,**不是**第二条解析链);`configs/advanced.json` 新增声明 `advanced.appointment.max_day`(**默认 5**,原 3 —— 本批**唯一的行为变更**);`scripts/flow-requirements.json#failureClasses.capacityFull` 是分类侧同一份口径。本能力自身:`scripts/orchestrator.py` 新增**仓容前置探测**(进步骤4 前只读探测:仓容满 ⇒ **不进入步骤4**、直接落 `capacity_full` 失败;探测不可用 ⇒ 证据不足、照常尝试)+ `defer_capacity` 当日解除链 + `--mode capacity-probe` 只读 CLI;新增 `scripts/ml_capacity_probe.py`(**纯判据**,只有 stdlib ⇒ 可离线夹具回归)与 `scripts/analyze-full-day.py`(只读归因报表)。回归:`capacity-precheck` / `capacity-defer-lift` / `analyze-full-day` 三份;`check-sop-consistency` 的 C6b 判据**收紧**(capacityFull/pageFlaky 也要与注册表逐字一致,⛔ 未抬基线)。⛔ 未新增引擎面运行期文件(只改既有引擎文件 + 本能力脚本)。|**1.2.115(2026-10-10,同批二次收口:契约 anchor 跟随实现)**:`core/contracts/argent.contracts.json` 的 J4-failure-classification 判据登记(engine 面文件,四个包里的三个含它)—— ① owner/implementations 的行号与 anchor 跟着`scripts/flow_failure.py` 重排走(89/91 → 118/121);② anchor 从 `GROUPS = (('pageFlaky'` 改成**更精确**的 `GROUPS = (('capacityFull', 'needs_human')`(初版写成 `GROUPS = (` 被 `argent-contracts` 的 R1d 当场拦下:`scripts/daily-report.mjs` 里也有同名字符串 ⇒ anchor 太松就是假绿);③ outputs 补一行「命中的**组**名进 reason」。⚠️ 版本号 1.3.124 从未发布过(同批收口 ⇒ 以**最终内容**盖章,不存在「内容变了版本没动」的对外窗口)。本能力自身内容未再改动。|**1.2.116(2026-10-10,同批三次收口:两处文档小节号 + 去掉未用常量)**:`configs/advanced.json` 的 help 里指的小节号写错(§8.71 → **§8.72**,那是本批新落的小节;写错会把运营指到别人的事故记录上);`scripts/flow_config.py` 去掉一个未被使用的模块级常量 `CATALOG_DIRS`(死代码只会误导下一个人以为它在参与解析链)⇒ 引擎面内容再变,按「内容变 ⇒ 版本必变」各提一个补丁版本并重新盖章。⚠️ 版本号 1.3.125 / 1.2.115 / 1.1.122 从未发布过(同批收口 ⇒ 以**最终内容**盖章)。⛔ 行为零变化(三份回归复跑全绿)。|**1.2.119(2026-10-11,同批:引擎面新增 `scripts/lib/cdp_ports.py`)**:本能力的流程 / 提示词 / 脚本**一字未改**;共用引擎新增 CDP 调端口发现/归属/页面探针的唯一实现(认领前环境预检第二层回退),包内注册表投影随之变化 ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」提版本并重盖章。|**1.2.120(2026-10-12,Windows 安装路径三缺陷修复批)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变)——① `scripts/lib/preset-install.mjs`:**「已装集」判据改为选择痕迹** `presets.selection.json#kept`(⛔ 不再读 `package.json#dsh.bundle.patch` —— pnpm 对 `file:` 依赖建的是指向货架的链,读到的永远是货架自带的 14 条 ⇒ 收窄被自己的安装步骤抹掉),新增 `installedSelectionIds()` / `materializeBundleDir()`(软链**实体化**后再改写,⛔ 不走链写进仓库)/ `checkPresetSelectionConsistency()`(patch 实体 == presets.json 行 == dsh.bundle.patch == 痕迹);② `install-argent.mjs`:新增**第 7c2 步收尾重施**(第 7 步 `pnpm add file:…` 会把 profile 副本换回货架 14 个 ⇒ 旧实现在 winpc 真机\"声称只落 7/14、装完却是 14\",7 个内部角色永久留下)、版本体检改**两个候选落点**(克隆目录 + 安装器自己那棵树 —— Windows 的 boot 克隆场景,此前永远退回内置列表 ⇒ 现役 `0.1.7-rc.2` 被报\"未验证\")、`profile-doctor` 与升级器子进程**显式传 `DSH_HOME`**(否则 `--dsh-home <临时>` 时改的是真实 `~/.dsh`)、完成提示**按平台**给启动/重启指引(Windows 不再打 bash 的 `DSH_HOME=… dsh web …`);③ `scripts/lib/dsh-versions.mjs`:内置基线补 `0.1.7-rc.2` + 新增 `verifiedListGaps()` **防漂移门禁**;④ `scripts/argent-upgrade.mjs`:同一判据 + 收尾重施。⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个包一起提版本并重盖章。本能力流程 / 提示词 / 脚本**一字未改**。回归:`scripts/tests/preset-landing-selection.test.mjs`(48 断言:全新机器恰 7 个客户可见角色 / 客户机的 7 再跑安装**仍 7**(垫片 pnpm 中途真把它放大过)/ 14 坏态收窄到 7 / 三处集合+痕迹不变量 / 软链不走链改写仓库 / 真 pnpm 的机制证据)、`scripts/tests/dsh-verified-list.test.mjs`(21 断言:lock 里已晋级版本必须全在列表内(构造缺项 ⇒ 红)、`candidate/` 不参与、列表唯一真源、boot 克隆场景真跑一次)。⛔ 本批**未发布**(发布留给交付方)。|**1.2.121(2026-10-12,升级路径角色落盘追修批:已装集唯一来源 + 内部角色不变式)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变)——① `scripts/lib/preset-install.mjs`:「已装集」的**唯一来源**收口到 `resolveInstalledSelection()`(**可信痕迹** `presets.selection.json#kept` → 退回 `agents.json` 里各 agent 的 `roles` 并集 → 两级都没有 ⇒ **空集**=首次安装语义;⛔ **绝不**把 profile 里的 patch 实体 / `presets.json` 行 / `dsh.bundle.patch` 条目当已装集 —— 那三份铺完恒是 14,「客户可见 ∪ 已装 ∪ 本智能体」于是恒等于 14,收窄被自己的安装步骤抹掉),并给「可信」加了**判据**:痕迹含 `visibility: internal` 的角色而本机 `internalRoles ≠ true`(且未给 `--internal-roles`)⇒ 判不可信、**响亮报告**后按「痕迹缺失」处理(现场那份 `kept:14/excluded:[]` 的痕迹正是放大缺陷写出来的);新增**不变式** `checkNoInternalLanding()` —— 落盘集合不得含内部角色(除非 `--internal-roles` 或 `agents.json#internalRoles === true`),违反 ⇒ `applyPresetSelection()` **判红并拒绝写出**(⛔ 不静默剔除、不静默修);新增 `reseedBundleDir()` 与 `applyPresetSelection({reseedFromShelf})`(收尾重施必须**按货架重播再收窄**:副本已被削到 7 时就地再过滤永远只能得 7,`--internal-roles` 装不回来、自检还会拿「期望 14 ≠ 落盘 7」判**假红**);② `scripts/argent-upgrade.mjs`:**升级档与安装档同一条公式**(客户可见集 ∪ 可信已装集 ∪ 本智能体角色),⛔ 不再用 `agentScoped: agents.length>0`(它把客户可见集整个排除掉 ⇒ 现场那台只落 2 个角色);第 7.6 步收尾重施带 `allowInternal` + `reseedFromShelf`,判红即该步 `ok:false`;③ `install-argent.mjs`:第 4 步默认档 / `--agent` 子集 / 第 7c2 步收尾重施 / `--capability remove` 四处统一走可信已装集与授权口径(`--capability remove` 只为「本机已合法装了内部角色」时不误判红);④ **新增只读 CLI** `scripts/check-preset-landing.mjs`(四件套 + 已装集来源 + 两条不变式,任何一台机器可照抄自查,⛔ 不写任何文件)⇒ `pack.engine` 登记项 +1。**现场(winpc 真机,2026-10-12)**:profile 14 个 patch 实体 + 痕迹 `kept:14/excluded:[]` + `agents.json=[hr]` + `internalRoles=false`,重跑官网一条命令(升级路径)修前打的是 `preset 同步(行式): **14** 个角色` + `角色落盘集合收尾:14 个;三处集合 + 痕迹一致`(7 个内部角色一个没摘),修后同一台机器 ⇒ **7**(`excluded` 列出 7 个内部角色)并打印 `选择痕迹不可信 ⇒ 已装集退回 agents.json 角色`。回归:`scripts/tests/preset-landing-upgrade-path.test.mjs`(43 断言:现场复刻升级路径 ⇒ 7 且 **pre-fix 判据重建得 14**(鉴别力)/ `agents.json` 缺失 ⇒ 7 / 可信痕迹 7 不许放大 / `internalRoles:true` ⇒ 14 放行 / **不变式负样本判红且零写入** / 「铺货架 ≠ 选择」/ 现场真形态 `kept:14` ⇒ 7 且响亮报告 / 真 home 零增量)。⛔ 本批**未发布**(发布留给交付方)。本能力流程 / 提示词 / 脚本**一字未改**。|**1.2.123(2026-10-12,P1-A 宿主排程批:四道闸防线 + 日报试点声明)**:本能力的流程/提示词/脚本**一字未改**;共用引擎面变更(`scripts/flow_config.py` 新增 trigger.schedule 解析、`scripts/vertical-lint.mjs` 新增排程声明门禁、`scripts/lib/registry.mjs` 新增只读 flowSchedule())与**包内注册表投影**变化(业务线声明只动了日报;新增的 L1 `scripts/lib/schedule-probe.mjs` 与 L2 `scripts/argent-schedule.mjs` **刻意不进 pack.engine**,理由见 daily-report 的 `_note`)⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本并重盖章。新增回归 `scripts/tests/schedule-probe.test.mjs` / `scripts/tests/schedule-declaration.test.mjs`。|**1.2.126(2026-10-12,宿主门禁追修批:⛔ 不代装宿主 + npx 形态纳入宿主解析)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变,**含无 flow 的 hr**)——① `install-argent.mjs`:**删除** `--install-host` 代装入口(连同旧自动代装函数与宿主离线包的下载/解包/bin 链接逻辑;开关若仍被传入 ⇒ 报「该开关已废弃」+ **非零退出**(1 = 用法错误),⛔ 不静默忽略),被拒文案改为按 dsh **官方**运行方式给指引(首选 `npx @deepseek-ai/dsh@<窗口内版本> web`;备选官方「从源码运行」;四要素:① 你的版本不在支持窗口(列窗口)② 官方方式换成窗口内版本的一行命令 ③ 我们正在适配你的版本(⛔ 不给对外 ETA)④ 未改动你的 dsh);② **新增** `scripts/lib/dsh-host-resolve.mjs`(**进 `pack.engine`**):宿主解析链 = **PATH 上的 `dsh` → `DSH_BIN` → npx 缓存形态**(读 `<npm cache>/_npx/<hash>/node_modules/@deepseek-ai/dsh/package.json` 的 version,纯只读零网络;多候选按「最近使用优先(mtime 最新)+ 同刻路径升序」确定并**打印选了哪个**)⇒ **npx 形态算宿主**(旧口径「npx 不等于已安装宿主」作废),且 npx 形态下插件装配走**同一条 launcher**(`npx --yes @deepseek-ai/dsh@<版本> plugin --profile web add file:…`),⛔ 不许「检测到 npx 却去用 PATH 上的另一个 dsh」;③ `install.sh` / `install.ps1` 口径同步(ps1 仍声明并透传 `-InstallHost`,只为让旧命令行得到**可读**的「已废弃」原因而不是参数绑定错误)。本能力自身流程 / 提示词 / 脚本**一字未改**。回归 `scripts/tests/install-host-gate.test.mjs`(**219 断言**,纯夹具:垫片 dsh/npx + 本地裸库 + 临时 home,⛔ 零外网、⛔ 不碰真 `~/.dsh`;⚠️ `dsh plugin` 会绕过 `DSH_HOME`/`HOME` ⇒ 夹具只断言命令行、绝不真跑)。⛔ 本批**未发布**(发布留给交付方)。",
|
|
166
166
|
"2026-10-12:仓容前置探测**误报**修复(判据收紧为「严格阻断形态」+ 手动/CLI 跑完落终态台账);注册表投影在每个包内 ⇒ 四包一起提版重盖。",
|
|
167
167
|
"2026-10-12:**材质英文解析链修复批**(本能力内容 + 文件集变更)——① 材质英文(模板 `S` 列 = `{材质},{材质英文}`)改为**三级解析唯一实现**:① per-SKU 字典(数据目录 `lip-sku-dict.json`,键=SKU,优先 `confirmed:true`)→ ② 通用小词典(映射真源 `materialEn`)→ ③ **会话传入 `--material-en`**(政策A:LLM 译出的可直接用);三级都没命中 ⇒ 填报阶段(P3)**阻断且不落盘**,文案**指路**;③ 命中 ⇒ **写回字典**(新增/合并条目 `confirmed:false` + 来源「LLM 译 <日期>(政策A:材质英文可直接用,HS 不动)」,原子写 `tmp`+`os.replace`,同键同值幂等跳过,**⛔ 不覆盖 `confirmed:true`**,同名不同值 ⇒ **冲突交人**且不写回 —— 与 `flow_case` 的「不覆盖 + 记冲突」同口径)。② **闸门改口径(修误阻)**:删掉误套在材质英文上的「英文为空 ⇒ 按报关敏感字段拦」(那条红线**只给 HS 编码**,HS 侧一个字节未动:仍人工维护 / 不预填 / 不写候选 / 不自动确认),改成「**三级都无法解析**才阻断」,阻断文案不再出现「报关敏感/不预填」。③ **影子放行闸门**:`S` 列由「按 `const` 逐字比」改为按 `perRow` 放行(该列随行变化,判据上移到填报器的三级解析);⛔ 其余 `const` 列判据未放宽(对照断言在位)。④ **文件集 +2**:模板填报器与影子放行闸门两个执行脚本此前**没在集成适配器 `RUNNERS` 里声明** ⇒ 不进任何能力包(纯包装机上 P3 / 放行闸门直接缺件)⇒ 本批在适配器里声明(包内容集由 `RUNNERS`/`TEMPLATE` 派生,⛔ 未动 `pack.engine` ⇒ 其余三个包不跟版)。⑤ 文档:两条发票线的技能写明**两份字典**的存在/路径/优先级/写回规则与 **HS(人工) vs 材质英文(三级 + LLM 可译)** 的分界;列契约由真源重新生成(`--check` 绿);适配器与流程提示词的「等报关敏感字段」措辞收紧为「只指 HS」。回归:新增材质英文三级解析回归(**75 断言** / 七条判据:① 字典命中 ② 会话传入+写回 ③ 阻断文案 ④ 小词典 ⑤ HS 红线对照 ⑥ 幂等·不覆盖·冲突·原子写 ⑦ 真 home 零增量,含 **pre-fix 判据重建**的鉴别力证据);既有影子对比回归 9→14 断言、模板填报与技能自检复跑全绿。⛔ 本批**未发布**(发布留给交付方)。",
|
|
168
168
|
"2026-10-12(同批**二次收口**):1.2.128 盖章后本批又改了一处文案(填报器文件头的一行措辞 + 列契约注释)⇒ 按「内容变 ⇒ 版本必变」**再提一版**并重盖章。⚠️ 版本号 1.2.128 从未发布过(同批收口 ⇒ 以**最终内容**盖章,不存在「内容变了版本没动」的对外窗口)。行为零变化(三级解析 / 闸门 / 写回判据一个字节未改;复跑回归全绿)。",
|
|
@@ -179,13 +179,18 @@
|
|
|
179
179
|
"0.6.0 W3 收口:vertical-lint 的 `--root` 修 —— 注册表/数据面子脚本一律按 **lint 自身目录**定位,`--root` 只换注册表根(此前夹具根下无该脚本 ⇒ 子进程 ENOENT ⇒ 报「注册表合并失败」假红,core-sop-skill 夹具被误伤)。",
|
|
180
180
|
"**1.2.145(2026-10-13,失败自动重试(方案 a)批)**:`pack.engine` 新增 `scripts/flow-auto-retry.py`(可用性类失败的**受守卫自动重试**:候选 = 末条 failed/blocked ⇒ 唯一分类器判 `retryable` + 预约闸门放行 + 每票次数上限 + 冷却 + 每轮上限;真正的\"重置后重建\"**全部委托** `flow_retry.py`(走它的全部守卫),本脚本只做筛选/限流/可见性)+ `scripts/flow_config.py` 新增 `autoRetry` 段(**唯一读取点**:enabled/max/cooldownMin/perCycle,缺省 开/2/20/2)+ `scripts/flow-trigger.sh` 新增一步「先自动重试、再认领」(非零退出**不阻断认领**)。⇒ 引擎清单与每包内的注册表投影都变了(**无 flow 的 hr 也变**),按「内容变 ⇒ 版本必变(含无 flow 的包)」四包一起提版本。本能力自身:流程 / 提示词 / 脚本一字未改。",
|
|
181
181
|
"**1.2.146(2026-10-13,失败自动重试(方案 a)批 · **同批二次收口**)**:首次以最终内容盖章(c99a04f)后又落了一处**在 `pack.engine` 里**的收口 —— `scripts/flow-auto-retry.py` 的次数上限改为按**尝试**计(台账 `retry` 事件数 + 本脚本审计里 `ok:false` 的被拒次数):委托侧拒绝时**不写**台账事件,只数台账会让\"每轮都会被拒\"的票(表里状态已不是失败 / 表备注分类或预约留痕与台账不一致…)**每轮**再试一次、长期白占\"每轮上限\"的名额并每轮刷卡片/审计 ⇒ 现在最多 `max` 次后明确交人工(日志点名\"其中 n 次被委托侧拒绝\")。题外(⛔ 本批不改):`scripts/flow_retry.py` 的\"缺陷④ 已有货件号默认拒绝清号\"闸门因调用了**未定义**的 `one()` 而被 `except Exception` 静默吞掉(实测 `NameError` ⇒ `ship_now=None` ⇒ 闸门事实上不生效)—— 属该文件的既存缺陷,**未动**(改它 = 改变守卫语义,需专门一批)。⚠️ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四包一起再提一版;版本号 1.3.155 / 1.2.145 / 1.1.148 / 0.1.66 从未发布过(同批收口 ⇒ 以**最终内容**盖章,不存在\"内容变了版本没动\"的对外窗口)。",
|
|
182
|
-
"发票技能口径更正(用户 2026-10-13 拍板):**表内已填的「材质」「HS 编码」照填入发票**,⛔ 不再因\"材质类别与 HS 章看起来不一致\"而停下等核对;HS 红线只约束\"表内为空时不得编造\"。落点:skills/ml-invoice/SKILL.md(新增「口径」小节)+ skills/ml-invoice
|
|
182
|
+
"发票技能口径更正(用户 2026-10-13 拍板):**表内已填的「材质」「HS 编码」照填入发票**,⛔ 不再因\"材质类别与 HS 章看起来不一致\"而停下等核对;HS 红线只约束\"表内为空时不得编造\"。落点:skills/ml-invoice/SKILL.md(新增「口径」小节)+ skills/ml-invoice-该流程/SKILL.md(同口径一行)。",
|
|
183
183
|
"缺产品图 ⇒ 写「发票错误信息」提示运营补图(用户口径 2026-10-13):预检 precheck 新增「缺产品图(运营补)」缺口(此前清单里没有产品图这一项,现场 79408052/79406731 无图却零提示);夹具 invoice-image-gap.test.py(6 断言,含有牙)。",
|
|
184
184
|
"修 flow_retry.py 的**死守卫**(2026-10-13):清号守卫原写 `one(row.get(f_ship))` 而本文件无 `one()` 定义 ⇒ NameError 被 `except Exception` 静默吞 ⇒ 已有货件号也会被清号重置(红线从未生效);改用唯一取值助手 `first()` 并去掉吞噬;新门禁 scripts/tests/flow-retry-guard4.test.py(15 断言,含两条有牙)。",
|
|
185
185
|
"缺产品图缺口文案统一(用户口径 2026-10-13):另一条发票链此前把**表头名**当缺口文案,现统一为「缺产品图(运营补)」(两条链同句),表头名改记入 notes 溯源;落点该链填报器的 image 分支;测试同步断言(含\"不再是表头名\")。",
|
|
186
186
|
"**W7.7(2026-10-14,尾巴收口:智能体标题去掉「角色」字样 + 死指针改指新落点)**:本批改了 `pack.engine` 里的两件(`agents/catalog.json` 的两个 `title`、`configs/hr.json` 的 label/help)与本注册表自身的一处(`hr` 设置面板的 `hint`)⇒ 清单本身变了、且每个包的 tgz 都带一份注册表投影 ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个能力包一起提版本并重盖章。口径:**角色 = DSH preset**,Argent 侧不复述角色清单(会话身份 ⇒ 官方「Agent 预设」区;安装 / 升级 ⇒ 设置 → Argent →「我的智能体」)。⛔ 本能力自身的流程 / 提示词 / 脚本一字未改。",
|
|
187
187
|
"**1.2.160(2026-10-14,P1-B `--no-wake` + 外部时序运营文案)**:共用引擎变更(`scripts/flow-trigger.sh` 新增 `--no-wake` —— 只认领 + 只写台账、不唤起会话;`scripts/lib/schedule-mechanism.mjs` 的 native 静态指令 `promptCommand` 带上该开关(宿主排程那条命令);`scripts/flow_triage.py` 的外部时序阻塞文案补齐两要素 —— 自动再试节奏(N 取声明面 `externalTiming.cooldownMin`)+ 人工接管方式(取消勾选放行位即停取);`scripts/run-tests.sh` 的干净树自检按判据 `[ -d .git ]` 跳过「需要 git 索引」的用例)⇒ 版本随引擎前进。本能力自身:发票链运行器的表字段文案同批更新(同一句、纯文本版),两份发票技能文档同步。⚠️ 盖章说明:本版内容在同一工作树里经过**二次收口**(先落实现,再按 `vertical-lint` 的 engine-words 判据改写文案 —— ⛔ **不抬基线**)⇒ 以**最终内容**盖章;版本号 1.2.160 从未发布过,不存在「内容变了版本没动」的对外窗口。",
|
|
188
|
-
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。"
|
|
188
|
+
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。",
|
|
189
|
+
"0.7.0 W2:流程声明补 `runner`(三条流程)+ 门禁 flow-runner-declared(脚本须存在、args 须带 {ticket})。",
|
|
190
|
+
"0.7.0 W2:daily-report 补 runner 声明(ticketless)⇒ 全部流程 runner 齐;门禁收紧到\"0 未声明\"。",
|
|
191
|
+
"0.7.0 W2:`runner` 登记进 flow_config 顶层直通段与 _derive(否则 --json 不透出 ⇒ CLI 读不到声明)。",
|
|
192
|
+
"0.7.0 W5/W7:引擎包白名单纳入 `skills/`(CLI `skill show|sync` 的真源;此前包内没有技能)。",
|
|
193
|
+
"0.7.0 W8/S1:路径统一(22 个脚本改走唯一判据)触及本包成员 ⇒ 按纪律提版重盖章。"
|
|
189
194
|
],
|
|
190
195
|
"hostAssets": {
|
|
191
196
|
"scheduler": {
|
|
@@ -242,7 +247,7 @@
|
|
|
242
247
|
],
|
|
243
248
|
"minPlan": "enterprise",
|
|
244
249
|
"pack": {
|
|
245
|
-
"version": "1.3.
|
|
250
|
+
"version": "1.3.172",
|
|
246
251
|
"scripts": [
|
|
247
252
|
"scripts/poll-fulfillment.sh",
|
|
248
253
|
"scripts/orchestrator.py",
|
|
@@ -276,7 +281,12 @@
|
|
|
276
281
|
"修 flow_retry.py 的**死守卫**(2026-10-13):清号守卫原写 `one(row.get(f_ship))` 而本文件无 `one()` 定义 ⇒ NameError 被 `except Exception` 静默吞 ⇒ 已有货件号也会被清号重置(红线从未生效);改用唯一取值助手 `first()` 并去掉吞噬;新门禁 scripts/tests/flow-retry-guard4.test.py(15 断言,含两条有牙)。",
|
|
277
282
|
"**W7.7(2026-10-14,尾巴收口:智能体标题去掉「角色」字样 + 死指针改指新落点)**:本批改了 `pack.engine` 里的两件(`agents/catalog.json` 的两个 `title`、`configs/hr.json` 的 label/help)与本注册表自身的一处(`hr` 设置面板的 `hint`)⇒ 清单本身变了、且每个包的 tgz 都带一份注册表投影 ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个能力包一起提版本并重盖章。口径:**角色 = DSH preset**,Argent 侧不复述角色清单(会话身份 ⇒ 官方「Agent 预设」区;安装 / 升级 ⇒ 设置 → Argent →「我的智能体」)。⛔ 本能力自身的流程 / 提示词 / 脚本一字未改。",
|
|
278
283
|
"**1.3.165(2026-10-14,P1-B `--no-wake` + 外部时序运营文案)**:共用引擎变更(`scripts/flow-trigger.sh` 新增 `--no-wake` —— 只认领 + 只写台账、不唤起会话;`scripts/lib/schedule-mechanism.mjs` 的 native 静态指令 `promptCommand` 带上该开关(宿主排程那条命令);`scripts/flow_triage.py` 的外部时序阻塞文案补齐两要素 —— 自动再试节奏(N 取声明面 `externalTiming.cooldownMin`)+ 人工接管方式(取消勾选放行位即停取);`scripts/run-tests.sh` 的干净树自检按判据 `[ -d .git ]` 跳过「需要 git 索引」的用例)⇒ 版本随引擎前进。本能力自身:流程 / 提示词 / 脚本一字未改(仅注册表投影与共用引擎前进)。⚠️ 盖章说明:本版内容在同一工作树里经过**二次收口**(先落实现,再按 `vertical-lint` 的 engine-words 判据改写文案 —— ⛔ **不抬基线**)⇒ 以**最终内容**盖章;版本号 1.3.165 从未发布过,不存在「内容变了版本没动」的对外窗口。",
|
|
279
|
-
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。"
|
|
284
|
+
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。",
|
|
285
|
+
"0.7.0 W2:流程声明补 `runner`(三条流程)+ 门禁 flow-runner-declared(脚本须存在、args 须带 {ticket})。",
|
|
286
|
+
"0.7.0 W2:daily-report 补 runner 声明(ticketless)⇒ 全部流程 runner 齐;门禁收紧到\"0 未声明\"。",
|
|
287
|
+
"0.7.0 W2:`runner` 登记进 flow_config 顶层直通段与 _derive(否则 --json 不透出 ⇒ CLI 读不到声明)。",
|
|
288
|
+
"0.7.0 W5/W7:引擎包白名单纳入 `skills/`(CLI `skill show|sync` 的真源;此前包内没有技能)。",
|
|
289
|
+
"0.7.0 W8/S1:路径统一(22 个脚本改走唯一判据)触及本包成员 ⇒ 按纪律提版重盖章。"
|
|
280
290
|
],
|
|
281
291
|
"hostAssets": {
|
|
282
292
|
"scheduler": {
|
|
@@ -313,7 +323,7 @@
|
|
|
313
323
|
"minPlan": "pro",
|
|
314
324
|
"_minPlanNote": "**2026-10-09(变现分层落地)**:`enterprise` → **`pro`**。判据 = 用户已确认的产品模型「分界线 = **价值更高 / 风险更高 ⇒ 企业版**」:日报是**只读**能力(官方 API 只读查询 + 生成推送,⛔ 不写客户任何系统、⛔ 不动浏览器),与 `full`(箱唛/写操作)、`invoice`(发票/门户写操作)不同档 ⇒ 归 **Pro**。⛔ 只改**档位下限**,⛔ 不改流程行为、⛔ 不改价格口径;`daily-report` 的能力包版本随引擎前进(见 pack.version)。已装机器**不因本改动被卸载/停用**(缩权只影响后续下发,见 entitlements.plans._why 与 docs 策划案 §4.4)。",
|
|
315
325
|
"pack": {
|
|
316
|
-
"version": "1.1.
|
|
326
|
+
"version": "1.1.165",
|
|
317
327
|
"scripts": [
|
|
318
328
|
"scripts/daily-report.mjs",
|
|
319
329
|
"scripts/daily-report.sh",
|
|
@@ -341,7 +351,12 @@
|
|
|
341
351
|
"修 flow_retry.py 的**死守卫**(2026-10-13):清号守卫原写 `one(row.get(f_ship))` 而本文件无 `one()` 定义 ⇒ NameError 被 `except Exception` 静默吞 ⇒ 已有货件号也会被清号重置(红线从未生效);改用唯一取值助手 `first()` 并去掉吞噬;新门禁 scripts/tests/flow-retry-guard4.test.py(15 断言,含两条有牙)。",
|
|
342
352
|
"**W7.7(2026-10-14,尾巴收口:智能体标题去掉「角色」字样 + 死指针改指新落点)**:本批改了 `pack.engine` 里的两件(`agents/catalog.json` 的两个 `title`、`configs/hr.json` 的 label/help)与本注册表自身的一处(`hr` 设置面板的 `hint`)⇒ 清单本身变了、且每个包的 tgz 都带一份注册表投影 ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个能力包一起提版本并重盖章。口径:**角色 = DSH preset**,Argent 侧不复述角色清单(会话身份 ⇒ 官方「Agent 预设」区;安装 / 升级 ⇒ 设置 → Argent →「我的智能体」)。⛔ 本能力自身的流程 / 提示词 / 脚本一字未改。",
|
|
343
353
|
"**1.1.158(2026-10-14,P1-B `--no-wake` + 外部时序运营文案)**:共用引擎变更(`scripts/flow-trigger.sh` 新增 `--no-wake` —— 只认领 + 只写台账、不唤起会话;`scripts/lib/schedule-mechanism.mjs` 的 native 静态指令 `promptCommand` 带上该开关(宿主排程那条命令);`scripts/flow_triage.py` 的外部时序阻塞文案补齐两要素 —— 自动再试节奏(N 取声明面 `externalTiming.cooldownMin`)+ 人工接管方式(取消勾选放行位即停取);`scripts/run-tests.sh` 的干净树自检按判据 `[ -d .git ]` 跳过「需要 git 索引」的用例)⇒ 版本随引擎前进。本能力自身:业务线内的日报**静态轮次指令**(`prompts/daily-report.scheduled.md`)更新为「P1-B 已落地」的现状(该静态指令本身就要求带 `--no-wake`)。⚠️ 盖章说明:本版内容在同一工作树里经过**二次收口**(先落实现,再按 `vertical-lint` 的 engine-words 判据改写文案 —— ⛔ **不抬基线**)⇒ 以**最终内容**盖章;版本号 1.1.158 从未发布过,不存在「内容变了版本没动」的对外窗口。",
|
|
344
|
-
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。"
|
|
354
|
+
"0.6.0 发版:平台 VERSION 0.4.0→0.6.0、契约 argentVersion 同步、宿主窗口晋级 0.2.0-rc.2;agent bundle BUNDLE_VERSION 0.1.0→0.1.1(内容随\"标题去角色\"变化,避免同版本换字节)。",
|
|
355
|
+
"0.7.0 W2:流程声明补 `runner`(三条流程)+ 门禁 flow-runner-declared(脚本须存在、args 须带 {ticket})。",
|
|
356
|
+
"0.7.0 W2:daily-report 补 runner 声明(ticketless)⇒ 全部流程 runner 齐;门禁收紧到\"0 未声明\"。",
|
|
357
|
+
"0.7.0 W2:`runner` 登记进 flow_config 顶层直通段与 _derive(否则 --json 不透出 ⇒ CLI 读不到声明)。",
|
|
358
|
+
"0.7.0 W5/W7:引擎包白名单纳入 `skills/`(CLI `skill show|sync` 的真源;此前包内没有技能)。",
|
|
359
|
+
"0.7.0 W8/S1:路径统一(22 个脚本改走唯一判据)触及本包成员 ⇒ 按纪律提版重盖章。"
|
|
345
360
|
],
|
|
346
361
|
"hostAssets": {
|
|
347
362
|
"scheduler": {
|
|
@@ -406,7 +421,7 @@
|
|
|
406
421
|
}
|
|
407
422
|
]
|
|
408
423
|
},
|
|
409
|
-
"version": "0.1.
|
|
424
|
+
"version": "0.1.74",
|
|
410
425
|
"_note": [
|
|
411
426
|
"能力包版本(语义化):改了该能力的流程/提示词/脚本/技能 ⇒ 必须提版本并重新打包 |**0.1.40(2026-10-04,角色退役·墓碑)**:包内容变更(`presets/argent-hr-office/agent.cordis.yml` 的 persona 改成退役告知、`preset.yml` 的 name/description 标注「已退役」)—— 角色 `hr-office` 已于 2026-10-04 退役(方案 §3.3.1:gateway.json 条目与 install-dsh.sh 安装期入口已撤),**本能力包保留**(装机内容不变、仍可安装;入口 preset 作为 web 老会话的墓碑保留)⇒ 版本随内容前进。|**0.1.41(2026-10-09,版本随内容前进)**:`0.1.40` **发布之后其字节被原地覆盖过一次**(服务端清单 `sha256` `15cf4f43…` → `058ccead…` 而 `version` 原地不动,见 whyshu-svr `docs/ops/deploy-fe02231-packs-align.md`)⇒ 同一个 URL 下的内容变过 ⇒ \"内容变 ⇒ 版本变\"这条不变式被破坏,客户机无法靠版本号判断自己拿到的是哪一份。本次**只提版本、包内容一字未改**(重盖章后内容摘要与 0.1.40 时逐字相同)⇒ `hr-0.1.41.tgz` 是该内容**首次以某个版本号**对外发布。⛔ 未改共用引擎、未新增运行期文件,故 `pack.engine` 清单不变。|**0.1.42(2026-10-09,配置地基:配置目录 + 通用读取器 —— hr 包内容随之改变)**:本能力**无 flow**,按 `pack.engine` 的分发规矩**不背共用引擎**(`files` 仍只有 `presets/argent-hr-office/**` 三件,`integrity` 逐字节未变)。但**每个包的 tgz 里都带一份注册表投影**(`scripts/flow-requirements.json` 的引擎级段),而本批改了它的 `pack.engine`(新增 `core/lib/config-catalog.mjs` 与 5 个 `configs/*.json`)⇒ **hr 的包字节变了** ⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」这条不变式**必须一起提版本**,否则会出现\"同一个版本号 0.1.41 对应两份不同字节\"(这正是 `release-argent.sh --check-dl` 的能力包档当场抓到的形态:`✗ hr: 版本相同(0.1.41)但内容摘要不同 —— 仓库 ad3599c5 vs 线上 09e1fef9`;提版后该条转为 ⚠「发布在途」,不再判红)。⛔ 本轮 hr 的**能力内容一字未改**。|**0.1.44(2026-10-09,预约失败判定链 + 口径统一)**:共用引擎 `scripts/flow_failure.py` 变更(新增 `canonical_reason()` 与 `--case` —— 打印某 case 的**规范失败原因**:优先读台账 `failed.reason`,老台账回落到 `error` 去身份前缀;给角色/运维一个**逐字照抄**的取数口,杜绝\"表备注写 A、账本写 B\")⇒ 所有能力包的注册表投影同批变化。本能力自身:⛔ 本能力内容一字未改;但 `flow_failure.py` 在 `pack.engine` 内,且包内 `scripts/flow-requirements.json` 投影**含 `failureClasses`**(本次新增的两条 needsHuman 判据就在其中)⇒ **包字节变了**,按「内容变 ⇒ 版本必变(含无 flow 的包)」这条不变式必须一起提版本。(⚠️ **盖章说明**:本版内容在同一工作树里经过**多轮收口**(先落实现,再按 vertical-lint 的引擎业务词约束改注册表文案、再收口文案)⇒ 以**最终内容**盖章;版本号从未发布过,不存在\"内容变了版本没动\"的对外窗口。)|**0.1.45(2026-10-09,三处生产实测收口:票不许静默消失 · 失败必写原因+动作 · 发票流程 Rule R)**:共用引擎变更 ⇒ 四个能力包一起提版本并重盖章。① `scripts/flow_triage.py`:判定改为**有效末条事件**(`INFO_EVENTS = phase/wake/policy_apply/policy_new` 回退到最近一条状态性事件;`failed_ack` = 有意不动且**不参与回退**)、`blocked` 从「静默 pass」改为可见的 `needs_human`,并加**循环后对账兜底**(任何未归桶的 case ⇒ `needs_human`,kind=unclassified)——修的是客户机生产实测 P0(某发票票):其尾部是 `blocked → phase` ⇒ 分诊摘要全 0、运营勾了放行也不派发、且**不在「需人工」里**(静默卡死)。② `scripts/flow_failure.py`:新增运营文案**唯一来源** `ops_message()`(`结论:<业务类|系统类|我方缺陷类>|<原因>|动作:…`,≤300 字)与 `release_hint()`(放行位/提示的**唯一实现**:变体与**顶层** pick 都认;`orchestrator._ops_action_hint` 改为委托它);③ **新增** `scripts/invoice_fail_closeout.py`(属**发票能力专属脚本** `capabilities.invoice.pack.scripts`,⛔ 不进共用引擎 —— 它只写发票那一列):失败/成功收口 —— 把**同一串**写进表「发票错误信息」与台账(`detail` 逐字相同、`error` 放规范原因),取不到原因 ⇒ **exit 2 拒绝执行**,代码级异常归「我方缺陷类」且**不回原文**,成功 ⇒ `--clear-error` 清空;④ `scripts/flow_return_to_ops.py`:缺口回填文案改用同一来源(表字段 == 台账 `detail`);④b `scripts/flow_config.py`:归一化的 `guards` 增**标量透传**(`writer`=写手路径、`errorField`=失败原因列 —— 不透出就只能各自把路径/列名写死,那正是「判据第二份」与业务词泄漏进引擎的来源);⑤ 业务线声明(`verticals/<id>/flows.json`):两个发票流程新增 `pick.release` / `pick.releaseReDispatch`(放行位 = **各自的门控列**「发票就绪」;上限 3 / 冷却 30)与 `guards.errorField`。本能力自身:⛔ 内容一字未改(无 flow ⇒ 不背共用引擎);但包内注册表投影含 `failureClasses`/`pack.engine` ⇒ 包字节变了,按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本。|**0.1.46(2026-10-09,配置「生效来源」可见化 + 冲突告警,批 1)**:本能力无 flow ⇒ **不背共用引擎**(`files` 仍只有 3 件 preset,逐字节未变);但包内注册表投影含 `pack.engine` ⇒ 包字节变了,按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本(同 `0.1.42` 先例)。本能力内容一字未改。共用引擎 `core/lib/config-catalog.mjs` 新增**纯函数** `resolveEffective()`(按规范链算「谁赢了 / 谁被压住」)、密钥脱敏 `redactSecret()` 与读取器 `effectiveOf()/levelsOf()`,并新增只读 CLI `scripts/config-explain.mjs`(`--key/--all/--list/--json`)⇒ 能力包内容变化,按纪律提版本并重盖章。⛔ **零行为变化**:读取器的取值路径(`resolveOne`)与任何 `todayChain` 一个字节都没改,只是「如实展示」;同批回归 `scripts/tests/config-effective.test.mjs`(63 断言)+ 端点 / 页面两条既有回归扩测。|**0.1.47(2026-10-09,同批收口:脱敏闸幂等)**:只读 CLI `scripts/config-explain.mjs` 的\"再脱敏\"兜底闸原先**无条件**执行 ⇒ `❰已设置(长度N)❱` 里的 N 变成**占位串自己的长度**(恒 11,实测),而用户正是拿它比对\"密钥换没换\" ⇒ 已改为**幂等**(含被压住的那级)并补回归;引擎面同一份 CLI 变了 ⇒ 包内容变化,按纪律再提版本并重盖章。本能力自身内容一字未改。|**0.1.49(2026-10-10,A 批:按智能体安装清单 —— 客户从「智能体库」选一个装,只装它的东西)**:① **`pack.engine` 新增两项**:`agents/catalog.json`(L0 货架声明:agent → capability + flows 子集 + 角色 + 插件/技能/集成/凭据槽)与 `scripts/argent-agents.mjs`(声明解析/校验/清单构造;安装器与门禁**共用一份**判据)⇒ 引擎清单与每包内的注册表投影都变了(**无 flow 的 hr 也变**,按「内容变 ⇒ 版本必变(含无 flow 的包)」这条不变式一起提版本);② **共用引擎行为变更**(`install-argent.mjs` / `scripts/lib/preset-install.mjs` / `scripts/argent-upgrade.mjs`):新增 `--agent <id>[,<id>…]` / `--list-agents` / `--internal-roles` / `--capability remove <id>`(写前备份 + 审计);preset **行落盘集合**改为「按清单收窄」(`--agent` ⇒ 恒装 + 本智能体角色 + 已装集;默认 ⇒ 客户可见集 + 已装集;**内部角色默认不落**);升级器按 `<dshHome>/argent/agents.json` **重新施加**同一集合(否则一次升级就把收窄还原);**未给 `--agent` 时 CLI 契约与计划清单输出与改动前逐字一致**(差分回归钉住);③ 本能力自身:**新增活的 HR 角色** `presets/argent-hr/`(招聘支持 / 员工关系 / PPT 与文档产出 / 员工隐私严格保密)+ `pack.presets` 收它 ⇒ 本能力从「只有墓碑」变成「有入口」;设置页入口字段由 `hrOfficeRole`(hr-office) 改为 `hrRole`(argent-hr),旧角色改用 `hrOfficeTombstone` 字段如实报告(⛔ 墓碑不复活、⛔ 不当入口,仍随包落位供老会话 agentPreset 外键解析)。回归:`scripts/tests/agent-catalog.test.mjs`(110 断言,七条判据:只落本智能体 / 子集过滤 / 向后兼容差分 / 未知输入零写入 / remove 备份+审计 / 目录 schema / 内部角色默认不落)。|**0.1.50(2026-10-10,同批二次收口:宿主资产声明 + 门禁)**:同一工作树里第二次收口(先落 `--agent` 实现并盖章,再补 `capabilities.<c>.pack.hostAssets`(**宿主侧资产声明位**:定时器/登录自启/桌面项)与它的门禁 C12,并把 `scripts/argent-agents.mjs` 的清单/回执接上宿主资产)⇒ 引擎面文件内容变了,按「内容变 ⇒ 版本必变」纪律**再提一版**(先例同 1.3.104→1.3.105、`docs/Argent-智能体平台-设计.md` §8.3 第 3 条)。版本号 0.1.49 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**0.1.51(2026-10-10,同批三次收口:安装器用法文案 · 门禁登记 · 引擎面去业务词)**:同一工作树里第三次收口 —— ① `install-argent.mjs` 的**用法头注释**补上 `--agent` / `--list-agents` / `--internal-roles` / `--capability remove` 四个入口(内容变 ⇒ 引擎 sha 变);② `scripts/tests/is-direct-run.test.mjs` 的**唯一登记处**加入 `scripts/check-agent-catalog.mjs`(新增 CLI 必须登记,否则端到端判据覆盖不到它;测试文件不在包内,本条只为留痕);③ 本文件里本批新加的 `_note` 文案去掉业务词(`vertical-lint` 的 engine-words 档按**基线**只拦新增,⛔ 不抬基线 ⇒ 改写文案而不是改基线)⇒ 引擎面内容再变,按纪律**再提一版**。版本号 0.1.50 从未发布过,不存在「内容变了版本没动」的对外窗口。⛔ 本能力的流程/提示词/脚本内容未再改动。|**0.1.52(2026-10-10,仓容前置探测批 —— 注册表投影变化,hr 必须跟随提版)**:本批改了共用引擎面 `scripts/flow-requirements.json`(新增 `failureClasses.capacityFull`)、`scripts/flow_capacity*`/`ml_capacity_probe.py`、`flow_failure.py` 分类顺序、`configs/advanced.json`(`advanced.appointment.max_day` 默认 5)与编排器接入点 ⇒ **每个包的 tgz 里都带一份注册表投影**(含 `failureClasses`/`pack.engine`)⇒ hr 的包字节随之改变。本能力自身内容一字未改(`files` 仍只有两个 preset 目录)。⚠️ **教训**:本批曾按 `--describe hr`(只列 6 个 preset 文件)判定\"hr 不含 pack.engine ⇒ 内容没变\",漏掉了\"注册表投影在包内\"这一层 ⇒ 被 `release-argent.sh --check-dl` 当场抓成 `✗ hr: 版本相同(0.1.51)但内容摘要不同 ⇒ 同版本覆盖发布的形态`;按不变式提版后该条转为 ⚠「发布在途」。先例:0.1.42 / 0.1.44 / 0.1.46(均为\"改了引擎基表 ⇒ 无 flow 的包也提版本\")。|**0.1.55(2026-10-11,同批:引擎面新增 `scripts/lib/cdp_ports.py`)**:本能力**无 flow ⇒ 不背共用引擎**(`files` 仍只有两个 preset 目录,逐字节未变);但包内注册表投影含 `pack.engine` ⇒ 包字节变了,按「内容变 ⇒ 版本必变(含无 flow 的包)」提版本并重盖章(同 `0.1.42` / `0.1.52` 先例)。本能力内容一字未改。|**0.1.56(2026-10-12,Windows 安装路径三缺陷修复批)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变)——① `scripts/lib/preset-install.mjs`:**「已装集」判据改为选择痕迹** `presets.selection.json#kept`(⛔ 不再读 `package.json#dsh.bundle.patch` —— pnpm 对 `file:` 依赖建的是指向货架的链,读到的永远是货架自带的 14 条 ⇒ 收窄被自己的安装步骤抹掉),新增 `installedSelectionIds()` / `materializeBundleDir()`(软链**实体化**后再改写,⛔ 不走链写进仓库)/ `checkPresetSelectionConsistency()`(patch 实体 == presets.json 行 == dsh.bundle.patch == 痕迹);② `install-argent.mjs`:新增**第 7c2 步收尾重施**(第 7 步 `pnpm add file:…` 会把 profile 副本换回货架 14 个 ⇒ 旧实现在 winpc 真机\"声称只落 7/14、装完却是 14\",7 个内部角色永久留下)、版本体检改**两个候选落点**(克隆目录 + 安装器自己那棵树 —— Windows 的 boot 克隆场景,此前永远退回内置列表 ⇒ 现役 `0.1.7-rc.2` 被报\"未验证\")、`profile-doctor` 与升级器子进程**显式传 `DSH_HOME`**(否则 `--dsh-home <临时>` 时改的是真实 `~/.dsh`)、完成提示**按平台**给启动/重启指引(Windows 不再打 bash 的 `DSH_HOME=… dsh web …`);③ `scripts/lib/dsh-versions.mjs`:内置基线补 `0.1.7-rc.2` + 新增 `verifiedListGaps()` **防漂移门禁**;④ `scripts/argent-upgrade.mjs`:同一判据 + 收尾重施。⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」四个包一起提版本并重盖章。本能力内容**一字未改**(无 flow ⇒ 不背共用引擎,仍因包内注册表投影而变)。回归:`scripts/tests/preset-landing-selection.test.mjs`(48 断言:全新机器恰 7 个客户可见角色 / 客户机的 7 再跑安装**仍 7**(垫片 pnpm 中途真把它放大过)/ 14 坏态收窄到 7 / 三处集合+痕迹不变量 / 软链不走链改写仓库 / 真 pnpm 的机制证据)、`scripts/tests/dsh-verified-list.test.mjs`(21 断言:lock 里已晋级版本必须全在列表内(构造缺项 ⇒ 红)、`candidate/` 不参与、列表唯一真源、boot 克隆场景真跑一次)。⛔ 本批**未发布**(发布留给交付方)。|**0.1.57(2026-10-12,升级路径角色落盘追修批:已装集唯一来源 + 内部角色不变式)**:本能力**无 flow ⇒ 不背共用引擎**(`files` 仍只有 preset 目录,逐字节未变);但包内注册表投影含 `pack.engine` ⇒ 包字节变了,按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本并重盖章(同 `0.1.42` / `0.1.52` 先例)。本能力内容**一字未改**。① `scripts/lib/preset-install.mjs`:「已装集」的**唯一来源**收口到 `resolveInstalledSelection()`(**可信痕迹** `presets.selection.json#kept` → 退回 `agents.json` 里各 agent 的 `roles` 并集 → 两级都没有 ⇒ **空集**=首次安装语义;⛔ **绝不**把 profile 里的 patch 实体 / `presets.json` 行 / `dsh.bundle.patch` 条目当已装集 —— 那三份铺完恒是 14,「客户可见 ∪ 已装 ∪ 本智能体」于是恒等于 14,收窄被自己的安装步骤抹掉),并给「可信」加了**判据**:痕迹含 `visibility: internal` 的角色而本机 `internalRoles ≠ true`(且未给 `--internal-roles`)⇒ 判不可信、**响亮报告**后按「痕迹缺失」处理(现场那份 `kept:14/excluded:[]` 的痕迹正是放大缺陷写出来的);新增**不变式** `checkNoInternalLanding()` —— 落盘集合不得含内部角色(除非 `--internal-roles` 或 `agents.json#internalRoles === true`),违反 ⇒ `applyPresetSelection()` **判红并拒绝写出**(⛔ 不静默剔除、不静默修);新增 `reseedBundleDir()` 与 `applyPresetSelection({reseedFromShelf})`(收尾重施必须**按货架重播再收窄**:副本已被削到 7 时就地再过滤永远只能得 7,`--internal-roles` 装不回来、自检还会拿「期望 14 ≠ 落盘 7」判**假红**);② `scripts/argent-upgrade.mjs`:**升级档与安装档同一条公式**(客户可见集 ∪ 可信已装集 ∪ 本智能体角色),⛔ 不再用 `agentScoped: agents.length>0`(它把客户可见集整个排除掉 ⇒ 现场那台只落 2 个角色);第 7.6 步收尾重施带 `allowInternal` + `reseedFromShelf`,判红即该步 `ok:false`;③ `install-argent.mjs`:第 4 步默认档 / `--agent` 子集 / 第 7c2 步收尾重施 / `--capability remove` 四处统一走可信已装集与授权口径(`--capability remove` 只为「本机已合法装了内部角色」时不误判红);④ **新增只读 CLI** `scripts/check-preset-landing.mjs`(四件套 + 已装集来源 + 两条不变式,任何一台机器可照抄自查,⛔ 不写任何文件)⇒ `pack.engine` 登记项 +1。**现场(winpc 真机,2026-10-12)**:profile 14 个 patch 实体 + 痕迹 `kept:14/excluded:[]` + `agents.json=[hr]` + `internalRoles=false`,重跑官网一条命令(升级路径)修前打的是 `preset 同步(行式): **14** 个角色` + `角色落盘集合收尾:14 个;三处集合 + 痕迹一致`(7 个内部角色一个没摘),修后同一台机器 ⇒ **7**(`excluded` 列出 7 个内部角色)并打印 `选择痕迹不可信 ⇒ 已装集退回 agents.json 角色`。回归:`scripts/tests/preset-landing-upgrade-path.test.mjs`(43 断言:现场复刻升级路径 ⇒ 7 且 **pre-fix 判据重建得 14**(鉴别力)/ `agents.json` 缺失 ⇒ 7 / 可信痕迹 7 不许放大 / `internalRoles:true` ⇒ 14 放行 / **不变式负样本判红且零写入** / 「铺货架 ≠ 选择」/ 现场真形态 `kept:14` ⇒ 7 且响亮报告 / 真 home 零增量)。⛔ 本批**未发布**(发布留给交付方)。|**0.1.59(2026-10-12,P1-A 宿主排程批:四道闸防线 + 日报试点声明)**:本能力的流程/提示词/脚本**一字未改**;共用引擎面变更(`scripts/flow_config.py` 新增 trigger.schedule 解析、`scripts/vertical-lint.mjs` 新增排程声明门禁、`scripts/lib/registry.mjs` 新增只读 flowSchedule())与**包内注册表投影**变化(业务线声明只动了日报;新增的 L1 `scripts/lib/schedule-probe.mjs` 与 L2 `scripts/argent-schedule.mjs` **刻意不进 pack.engine**,理由见 daily-report 的 `_note`)⇒ 按「内容变 ⇒ 版本必变(含无 flow 的包)」一起提版本并重盖章。新增回归 `scripts/tests/schedule-probe.test.mjs` / `scripts/tests/schedule-declaration.test.mjs`。|**0.1.62(2026-10-12,宿主门禁追修批:⛔ 不代装宿主 + npx 形态纳入宿主解析)**:共用引擎变更(引擎面文件 ⇒ 每个包的注册表投影都变,**含无 flow 的 hr**)——① `install-argent.mjs`:**删除** `--install-host` 代装入口(连同旧自动代装函数与宿主离线包的下载/解包/bin 链接逻辑;开关若仍被传入 ⇒ 报「该开关已废弃」+ **非零退出**(1 = 用法错误),⛔ 不静默忽略),被拒文案改为按 dsh **官方**运行方式给指引(首选 `npx @deepseek-ai/dsh@<窗口内版本> web`;备选官方「从源码运行」;四要素:① 你的版本不在支持窗口(列窗口)② 官方方式换成窗口内版本的一行命令 ③ 我们正在适配你的版本(⛔ 不给对外 ETA)④ 未改动你的 dsh);② **新增** `scripts/lib/dsh-host-resolve.mjs`(**进 `pack.engine`**):宿主解析链 = **PATH 上的 `dsh` → `DSH_BIN` → npx 缓存形态**(读 `<npm cache>/_npx/<hash>/node_modules/@deepseek-ai/dsh/package.json` 的 version,纯只读零网络;多候选按「最近使用优先(mtime 最新)+ 同刻路径升序」确定并**打印选了哪个**)⇒ **npx 形态算宿主**(旧口径「npx 不等于已安装宿主」作废),且 npx 形态下插件装配走**同一条 launcher**(`npx --yes @deepseek-ai/dsh@<版本> plugin --profile web add file:…`),⛔ 不许「检测到 npx 却去用 PATH 上的另一个 dsh」;③ `install.sh` / `install.ps1` 口径同步(ps1 仍声明并透传 `-InstallHost`,只为让旧命令行得到**可读**的「已废弃」原因而不是参数绑定错误)。本能力自身流程 / 提示词 / 脚本**一字未改**。回归 `scripts/tests/install-host-gate.test.mjs`(**219 断言**,纯夹具:垫片 dsh/npx + 本地裸库 + 临时 home,⛔ 零外网、⛔ 不碰真 `~/.dsh`;⚠️ `dsh plugin` 会绕过 `DSH_HOME`/`HOME` ⇒ 夹具只断言命令行、绝不真跑)。⛔ 本批**未发布**(发布留给交付方)。",
|
|
412
427
|
"2026-10-12:仓容前置探测**误报**修复(判据收紧为「严格阻断形态」+ 手动/CLI 跑完落终态台账);注册表投影在每个包内 ⇒ 四包一起提版重盖。",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
. "$(dirname "$0")/lib/argent-datadir.sh" # 0.7.0 W8/S1:数据根唯一判据
|
|
2
3
|
# flow-timers-plist.sh —— **激活垫片的 plist 生成器**(纯 stdout,零副作用)。
|
|
3
4
|
#
|
|
4
5
|
# ⭐ 为什么单独一个文件(0.6.0 W8,2026-10-14):
|
|
@@ -47,7 +48,7 @@ REPO="${REPO:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
|
|
47
48
|
[ -n "$LOG_DIR" ] || { echo "缺 --log-dir(⛔ 数据目录有唯一判据,本生成器不拼缺省)" >&2; exit 2; }
|
|
48
49
|
NODE_DIR="${NODE_DIR:-$(dirname "$(command -v node || echo /usr/local/bin/node)")}"
|
|
49
50
|
LARK_DIR="${LARK_DIR:-$(dirname "$(command -v lark-cli || echo /usr/local/bin/lark-cli)")}"
|
|
50
|
-
PY="${PY:-${ARGENT_PY:-$
|
|
51
|
+
PY="${PY:-${ARGENT_PY:-$ARGENT_DATA_DIR_RESOLVED/venv/bin/python3}}"
|
|
51
52
|
|
|
52
53
|
cat <<PLIST
|
|
53
54
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
@@ -52,7 +52,9 @@ if ! PY="$(pick_py)"; then
|
|
|
52
52
|
exit 2
|
|
53
53
|
fi
|
|
54
54
|
AGENTS="$HOME/Library/LaunchAgents"
|
|
55
|
-
|
|
55
|
+
# 0.7.0 W8/S1:日志落"数据根",走**唯一判据**(⛔ 不写死 ~/.dsh/argent;候选链第 37-38 行按 B 类保留=只读回退)
|
|
56
|
+
. "$(dirname "$0")/lib/argent-datadir.sh"
|
|
57
|
+
LOGDIR="${ARGENT_DATA_DIR_RESOLVED:?数据根解析失败:请显式给 ARGENT_DATA_DIR}"
|
|
56
58
|
# ── 声明面(唯一):注册表 `schedule` 段 ────────────────────────────────────────
|
|
57
59
|
# `DECL` 只在本进程读一次;`--dry-run` 与 `status` 也走同一份(⛔ 不再各自读一遍)。
|
|
58
60
|
_DECL_STATUS=0
|
|
@@ -837,7 +837,7 @@ def load_config(flow_id: str, registry=None, registry_path=None, strict: bool =
|
|
|
837
837
|
# 顶层直通段(引擎级开关):注册表里写了就原样带出,供 flow_config --get 与各脚本读取。
|
|
838
838
|
# 2026-09-23:envProbe / staleReclaim 加进来时漏了这一步 ⇒ CLI 报"未知配置键"、
|
|
839
839
|
# 探针与停滞回收都被当成"未声明"(静默不生效)。新增顶层段时**必须**登记在此。
|
|
840
|
-
for _k in ('envProbe', 'staleReclaim'):
|
|
840
|
+
for _k in ('envProbe', 'staleReclaim', 'runner'):
|
|
841
841
|
if _k in spec:
|
|
842
842
|
d[_k] = spec[_k]
|
|
843
843
|
|
|
@@ -924,6 +924,7 @@ def load_config(flow_id: str, registry=None, registry_path=None, strict: bool =
|
|
|
924
924
|
# 引擎级顶层段(2026-09-23):注册表写了就带出。**新增顶层段必须登记在此 + _derive 直通**,
|
|
925
925
|
# 否则 flow_config --get 报"未知配置键",而 env_probe/flow_stale 会把它当"未声明"静默不生效。
|
|
926
926
|
'envProbe': spec.get('envProbe') or {},
|
|
927
|
+
'runner': spec.get('runner') or None,
|
|
927
928
|
'staleReclaim': spec.get('staleReclaim') or {},
|
|
928
929
|
# 失败自动重试(方案 a,2026-10-13):四个量在这里**归一化后**透出(按流程声明覆盖 → 缺省),
|
|
929
930
|
# `flow_config --get autoRetry.<键>` 与调用方读的都是这一份。
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
+
. "$(dirname "$0")/lib/argent-datadir.sh" # 0.7.0 W8/S1:数据根唯一判据
|
|
2
3
|
# ============================================================
|
|
3
4
|
# init-ml.sh — ML 卖家诊断/后备工具(KB-071:配置操作以 Argent 设置页 UI 为准,本脚本保留为
|
|
4
5
|
# 诊断(--verify 体检)与后备(批量/无 UI 场景)用途;--verify 由设置页「一键体检」调用)
|
|
@@ -42,7 +43,9 @@ set -euo pipefail
|
|
|
42
43
|
PROFILE_NAME="${ARGENT_PROFILE_NAME:-argent-ml-seller}"
|
|
43
44
|
PROFILE_HOME="${ARGENT_PROFILE_HOME:-$HOME/.argent-dsh}"
|
|
44
45
|
PROFILE_SCRIPTS="$PROFILE_HOME/scripts"
|
|
45
|
-
|
|
46
|
+
# 0.7.0 W8/S1:数据根不再写死 ~/.dsh/argent —— 走**唯一判据**(老机"存在即沿用",新装落 ~/.argent)
|
|
47
|
+
_ARGENT_DATA_PRINT="$(python3 "$(dirname "$0")/lib/argent_datadir.py" --print 2>/dev/null || true)"
|
|
48
|
+
DATA_SCRIPTS="${ARGENT_DATA_HOME:-${_ARGENT_DATA_PRINT:?数据根解析失败:请给 ARGENT_DATA_DIR}}"
|
|
46
49
|
ENV_FILE="$DATA_SCRIPTS/fulfillment.env"
|
|
47
50
|
STORES_JSON="$DATA_SCRIPTS/stores.json"
|
|
48
51
|
CDP_CACHE="$DATA_SCRIPTS/cdp-port-map.json"
|
|
@@ -1208,7 +1211,7 @@ read_argent_cfg() {
|
|
|
1208
1211
|
python3 -c "
|
|
1209
1212
|
import json, os
|
|
1210
1213
|
try:
|
|
1211
|
-
d = json.load(open(os.path.
|
|
1214
|
+
d = json.load(open(os.path.join(os.environ['ARGENT_DATA_DIR_RESOLVED'], 'config.json'))) # ⛔ 不再回退写死路径(判据必须已就位)
|
|
1212
1215
|
except Exception:
|
|
1213
1216
|
d = {}
|
|
1214
1217
|
print((d.get('feishuBaseUrl') or '') + '\t' + (d.get('feishuChatId') or ''))
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
+
. "$(dirname "$0")/lib/argent-datadir.sh" # 0.7.0 W8/S1:数据根唯一判据
|
|
2
3
|
# ============================================================
|
|
3
4
|
# invoice-table.sh — 发票流程建表脚本(幂等,单表方案 v2,2026-08-20)
|
|
4
5
|
# 在正式 Base(FULL 货件管理)中创建:
|
|
@@ -22,7 +23,7 @@ while [[ $# -gt 0 ]]; do
|
|
|
22
23
|
done
|
|
23
24
|
|
|
24
25
|
if [ -z "$BASE_TOKEN" ]; then
|
|
25
|
-
ENV_FILE="$
|
|
26
|
+
ENV_FILE="$ARGENT_DATA_DIR_RESOLVED/fulfillment.env"
|
|
26
27
|
[ -f "$ENV_FILE" ] && set -a && source "$ENV_FILE" && set +a
|
|
27
28
|
BASE_TOKEN="${FEISHU_BASE_TOKEN:-}"
|
|
28
29
|
fi
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Argent 数据目录 —— **shell 侧唯一判据**(0.7.0 W8/S1)。
|
|
3
|
+
# 用法: . "$(dirname "$0")/lib/argent-datadir.sh" ⇒ 之后用 "$ARGENT_DATA_DIR_RESOLVED"
|
|
4
|
+
# 语义:与 JS/Python 解析器**同一判据**(老机"存在即沿用"、新装落 ~/.argent、显式 env 优先);
|
|
5
|
+
# ⛔ 脚本里不要再写死 "$HOME/.dsh/argent"。
|
|
6
|
+
# 覆盖顺序:$ARGENT_DATA_HOME(历史兼容)→ $ARGENT_DATA_DIR/ $DSH_HOME → 解析器 → 兜底旧路径
|
|
7
|
+
argent_resolve_data_dir() {
|
|
8
|
+
if [ -n "${ARGENT_DATA_HOME:-}" ]; then printf '%s' "$ARGENT_DATA_HOME"; return 0; fi
|
|
9
|
+
_self_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
10
|
+
for _py in "$_self_dir/argent_datadir.py" "$_self_dir/lib/argent_datadir.py" "$_self_dir/../lib/argent_datadir.py"; do
|
|
11
|
+
if [ -f "$_py" ]; then
|
|
12
|
+
_out=$(python3 "$_py" --print 2>/dev/null || true)
|
|
13
|
+
if [ -n "$_out" ]; then printf '%s' "$_out"; return 0; fi
|
|
14
|
+
fi
|
|
15
|
+
done
|
|
16
|
+
printf '%s' "${ARGENT_DATA_DIR:-${DSH_HOME:-$HOME/.dsh}/argent}"
|
|
17
|
+
}
|
|
18
|
+
ARGENT_DATA_DIR_RESOLVED=$(argent_resolve_data_dir)
|
|
@@ -260,3 +260,26 @@ def loop_gate(resolved, env=None) -> dict:
|
|
|
260
260
|
f"({describe_data_dir(resolved)})——请确认它扫的是隔离源,不是生产")
|
|
261
261
|
if isolated else "",
|
|
262
262
|
}
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def _cli_main(argv=None):
|
|
266
|
+
"""CLI 出口(0.7.0 W8/S1):让 **shell 脚本**也能复用同一判据,⛔ 不必再写 `$HOME/.dsh/argent`。
|
|
267
|
+
用法:python3 scripts/lib/argent_datadir.py --print # 只打印目录(供 $(...) 取用)
|
|
268
|
+
python3 scripts/lib/argent_datadir.py --json # 打印完整解析结果(dir/source/…)
|
|
269
|
+
"""
|
|
270
|
+
import argparse, json
|
|
271
|
+
ap = argparse.ArgumentParser(prog='argent-datadir')
|
|
272
|
+
ap.add_argument('--print', action='store_true', dest='do_print')
|
|
273
|
+
ap.add_argument('--json', action='store_true')
|
|
274
|
+
a = ap.parse_args(argv)
|
|
275
|
+
fn = globals().get('resolve_data_dir')
|
|
276
|
+
r = fn() if callable(fn) else {'dir': str(default_data_dir()), 'source': 'default'}
|
|
277
|
+
if a.do_print:
|
|
278
|
+
print(r['dir'] if isinstance(r, dict) else str(r))
|
|
279
|
+
return 0
|
|
280
|
+
print(json.dumps(r, ensure_ascii=False, default=str))
|
|
281
|
+
return 0
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
if __name__ == '__main__':
|
|
285
|
+
raise SystemExit(_cli_main())
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
# 停用开关:存在 ~/.dsh/argent/PAUSE_POLL 时立即退出(本机 hermes agent 承担
|
|
4
4
|
# FULL 轮询时使用;恢复执行:rm ~/.dsh/argent/PAUSE_POLL)
|
|
5
|
-
|
|
5
|
+
# 0.7.0 W8/S1:数据根走**唯一判据**(shell 侧 lib/argent-datadir.sh),⛔ 不再写死 ~/.dsh/argent
|
|
6
|
+
. "$(dirname "$0")/lib/argent-datadir.sh"
|
|
7
|
+
if [ -f "$ARGENT_DATA_DIR_RESOLVED/PAUSE_POLL" ]; then
|
|
6
8
|
exit 0
|
|
7
9
|
fi
|
|
8
10
|
# Argent FULL 货件自动化 — 多店铺多记录并行 wrapper(no_agent 模式,路径参数化版)
|
|
@@ -49,7 +51,7 @@ if [ -f "$ENV_FILE" ]; then
|
|
|
49
51
|
set -a; source "$ENV_FILE"; set +a
|
|
50
52
|
fi
|
|
51
53
|
|
|
52
|
-
LOG_DIR="$
|
|
54
|
+
LOG_DIR="$ARGENT_DATA_DIR_RESOLVED/fulfillment-logs" # 0.7.0 W8/S1:落数据根(判据见脚本头部的 lib/argent-datadir.sh)
|
|
53
55
|
mkdir -p "$LOG_DIR"
|
|
54
56
|
|
|
55
57
|
# ── orchestrator 路径解析 ──
|
|
@@ -15,7 +15,9 @@ set -euo pipefail
|
|
|
15
15
|
# invoice-mapping.json 指向的是正式 Base 的 FULL任务 表 —— 若不暂停,本机会与客户机
|
|
16
16
|
# **抢同一批生产行**(本机 pgrep 只能防本机重入,管不了另一台机器)。
|
|
17
17
|
# 恢复/手工试跑:rm ~/.dsh/argent/PAUSE_INVOICE(或直接手工单独执行 runner)
|
|
18
|
-
|
|
18
|
+
# 0.7.0 W8/S1:数据根走**唯一判据**(shell 侧见 lib/argent-datadir.sh),⛔ 不再写死 ~/.dsh/argent
|
|
19
|
+
. "$(dirname "$0")/lib/argent-datadir.sh"
|
|
20
|
+
if [ -f "$ARGENT_DATA_DIR_RESOLVED/PAUSE_INVOICE" ]; then
|
|
19
21
|
exit 0
|
|
20
22
|
fi
|
|
21
23
|
|
|
@@ -31,7 +33,7 @@ fi
|
|
|
31
33
|
# 事故)。脚本层注入 + runner 层三链解析双保险(防 plist/脚本被重置)。
|
|
32
34
|
export PATH="$HOME/node/bin:$HOME/.local/bin:$PATH"
|
|
33
35
|
|
|
34
|
-
LOG_DIR="$
|
|
36
|
+
LOG_DIR="$ARGENT_DATA_DIR_RESOLVED/invoice-logs"
|
|
35
37
|
mkdir -p "$LOG_DIR"
|
|
36
38
|
|
|
37
39
|
# 解释器解析(2026-09-22 重启事故:默认值写死 ~/.dsh/argent/venv ⇒ 重启后静默空转)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
. "$(dirname "$0")/lib/argent-datadir.sh" # 0.7.0 W8/S1:数据根唯一判据(⛔ 不再写死 ~/.dsh/argent)
|
|
2
3
|
# provider-select —— 在**两个并存 provider** 之间切换「默认 provider」(2026-09-30,Argent 0.3)
|
|
3
4
|
#
|
|
4
5
|
# ## 为什么不是改 baseURL
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
# bash scripts/provider-select.sh deepseek # 默认走官方直连(自带 Key,不扣积分)
|
|
15
16
|
set -uo pipefail
|
|
16
17
|
PATCH="${ARGENT_CORDIS_PATCH:-$HOME/.dsh/profiles/web/cordis.patch.yml}"
|
|
17
|
-
PY="${ARGENT_PY:-$
|
|
18
|
+
PY="${ARGENT_PY:-$ARGENT_DATA_DIR_RESOLVED/venv/bin/python3}"; [ -x "$PY" ] || PY=python3
|
|
18
19
|
|
|
19
20
|
[ -f "$PATCH" ] || { echo "✗ 找不到组合补丁:$PATCH" >&2; exit 2; }
|
|
20
21
|
|
|
@@ -68,7 +68,7 @@ REMOTE="${ARGENT_RELEASE_REMOTE:-$(git -C "$REPO_DIR" remote | head -1)}"
|
|
|
68
68
|
# 2026-10-09:补 install.sh —— 官网 macOS/Linux 一行命令 `curl .../dl/install.sh | bash` 的入口
|
|
69
69
|
# (旧的 `curl .../dl/install-argent.mjs | node` 因模块级相对 import 必然 ERR_MODULE_NOT_FOUND,
|
|
70
70
|
# 已被 install.sh 取代)。`install-dsh.sh` 留在这里只为**存量老命令**仍能取到,是**遗留**件。
|
|
71
|
-
CORE_FILES=("install-argent.mjs" "install.sh" "install-dsh.sh" "install.ps1")
|
|
71
|
+
CORE_FILES=("install-argent.mjs" "install.sh" "install-dsh.sh" "install.ps1" "argent-setup.md")
|
|
72
72
|
# 目录级分发(--full 时启用;服务器对应目录有独立静态资源,非同名覆盖不删旧)
|
|
73
73
|
DIR_FILES=("skills" "plugins")
|
|
74
74
|
|