@whyshu/argent-engine 0.7.6 → 0.7.8

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.
Files changed (43) hide show
  1. package/MANIFEST.json +39 -35
  2. package/engine/VERSION +1 -1
  3. package/engine/core/contracts/argent.contracts.json +12 -4
  4. package/engine/scripts/appointment-create.mjs +10 -2
  5. package/engine/scripts/appointment-worker.mjs +72 -15
  6. package/engine/scripts/appointment_grab.py +132 -21
  7. package/engine/scripts/argent-machine-setup.mjs +118 -0
  8. package/engine/scripts/argent-runner.mjs +63 -10
  9. package/engine/scripts/capability-packs.lock.json +54 -51
  10. package/engine/scripts/ci-run.sh +14 -2
  11. package/engine/scripts/collect-evidence.mjs +1 -1
  12. package/engine/scripts/customer-preflight.py +33 -0
  13. package/engine/scripts/flow-auto-retry.py +3 -0
  14. package/engine/scripts/flow-requirements.json +23 -13
  15. package/engine/scripts/flow-session-retention.mjs +88 -0
  16. package/engine/scripts/flow-trigger-wake.mjs +13 -1
  17. package/engine/scripts/flow-trigger.sh +2 -1
  18. package/engine/scripts/flow_config.py +4 -0
  19. package/engine/scripts/flow_failure.py +9 -4
  20. package/engine/scripts/flow_preflight.py +30 -0
  21. package/engine/scripts/flow_retry.py +22 -7
  22. package/engine/scripts/gen-agent-bundles.mjs +1 -1
  23. package/engine/scripts/gen-preset-rows.mjs +2 -2
  24. package/engine/scripts/invoice_lip_runner.py +30 -2
  25. package/engine/scripts/invoice_stageb.py +101 -0
  26. package/engine/scripts/login-readiness.py +220 -0
  27. package/engine/scripts/ml-oauth-setup.mjs +1 -1
  28. package/engine/scripts/orchestrator.py +416 -30
  29. package/engine/scripts/probe_ml_site.py +103 -0
  30. package/engine/scripts/release-argent.sh +15 -1
  31. package/engine/skills/argent-machine-onboarding/SKILL.md +143 -0
  32. package/engine/skills/internal.json +4 -0
  33. package/engine/skills/ml-full-appointment/SKILL.md +21 -13
  34. package/engine/skills/ml-invoice/SKILL.md +1 -1
  35. package/engine/skills/ml-invoice-xzh/SKILL.md +2 -2
  36. package/engine/version.mjs +1 -1
  37. package/engine/verticals/_engine-words.baseline.txt +42 -23
  38. package/engine/verticals/mercadolibre/flows.json +9 -5
  39. package/engine/verticals/mercadolibre/manifest.json +5 -4
  40. package/engine/verticals/mercadolibre/prompts/daily-report.failure.md +1 -1
  41. package/engine/verticals/mercadolibre/prompts/daily-report.md +7 -10
  42. package/package.json +1 -1
  43. package/engine/scripts/ml-ads.mjs +0 -181
@@ -2,7 +2,7 @@
2
2
  "_doc": "能力包版本锁(迭代3-⑨):由 scripts/capability_pack.py --stamp 生成。内容变了(sha 或 digest 变)而版本没变 ⇒ --stamp 直接拒绝(stamp_check)且 --validate 报错;版本**降**了同样拒绝(--allow-downgrade 才放行,且显著告警);提了版本再盖章。digest = 整包内容摘要,与 --emit-server-manifest#sha256 / --digest-tgz 同口径;批次收口前用只读的 --check-stamp 自检。",
3
3
  "capabilities": {
4
4
  "daily-report": {
5
- "version": "1.1.174",
5
+ "version": "1.1.182",
6
6
  "flows": [
7
7
  "mercadolibre.daily-report"
8
8
  ],
@@ -26,6 +26,7 @@
26
26
  "scripts/lib/preset-install.mjs": "cf939e22ae82be40",
27
27
  "scripts/lib/preset-mechanism.mjs": "b5ad412bacd8db85",
28
28
  "scripts/lib/preset-sync.mjs": "372af82d6d70ca4e",
29
+ "scripts/lib/ml-ads-core.mjs": "c4c07560dbca3d11",
29
30
  "scripts/lib/profile-retire.mjs": "9662656632cbe721",
30
31
  "scripts/lib/python-runtime.mjs": "aed362e42f0ed24c",
31
32
  "scripts/lib/registry.mjs": "c3290d2a3451d7c6",
@@ -43,23 +44,23 @@
43
44
  "scripts/feishu-card.mjs": "1041cc0d32ad49a5",
44
45
  "scripts/flow-timers.sh": "d8eed8c3391e67e2",
45
46
  "scripts/flow-timers-plist.sh": "a7b1007526fe2192",
46
- "scripts/flow-trigger-wake.mjs": "0bfd3204f62d7dd9",
47
- "scripts/flow-trigger.sh": "23d8a37e1577eb01",
48
- "scripts/flow-auto-retry.py": "bf4cc963c9f766bd",
47
+ "scripts/flow-trigger-wake.mjs": "2f04aa3406f5d421",
48
+ "scripts/flow-trigger.sh": "0568cbbbfc7b4c23",
49
+ "scripts/flow-auto-retry.py": "2474e649e2e7c280",
49
50
  "scripts/flow_billing.py": "70a1129ac75860a1",
50
51
  "scripts/flow_claim.py": "5ebe13d0d95f6f28",
51
- "scripts/flow_config.py": "ed3dd02a946086b4",
52
+ "scripts/flow_config.py": "52e07d48ef7d949d",
52
53
  "scripts/vertical-init.mjs": "b4f63d71152a84b0",
53
54
  "scripts/vertical-lint.mjs": "90d65215a2ac7940",
54
55
  "scripts/flow_registry.py": "53928b3fb7635156",
55
- "scripts/flow_failure.py": "220cc33c34edd8fd",
56
+ "scripts/flow_failure.py": "b92be1397a44ab0a",
56
57
  "scripts/flow_status_reconcile.py": "f17fea943deffb5c",
57
58
  "scripts/flow_write_verify.py": "a9123838b00cb60b",
58
59
  "scripts/flow_learn.py": "b2e3e99ee5d2e758",
59
60
  "scripts/flow_ledger.py": "c4e3012ad9e573aa",
60
61
  "scripts/flow_policy.py": "acfc348b29b1282b",
61
- "scripts/flow_preflight.py": "cf1cf8afbe3cdd63",
62
- "scripts/flow_retry.py": "e8d03a7e815e0cf8",
62
+ "scripts/flow_preflight.py": "4afc572456febcd7",
63
+ "scripts/flow_retry.py": "6516a65a04da7db3",
63
64
  "scripts/flow_return_to_ops.py": "1eb105447aee6206",
64
65
  "scripts/flow_sources/__init__.py": "854ec0ac85915ef7",
65
66
  "scripts/flow_sources/common.py": "0f1efb103e054220",
@@ -80,7 +81,7 @@
80
81
  "core/cli/argent.mjs": "9a8977324c238ca4",
81
82
  "core/mcp/server.mjs": "cb4d4a1150ee96cc",
82
83
  "core/mcp/http.mjs": "4388cdb18128844a",
83
- "core/contracts/argent.contracts.json": "ad0ebbcbfa06ab0d",
84
+ "core/contracts/argent.contracts.json": "afe6e5c3fbebfe69",
84
85
  "core/contracts/verbs.schema.json": "4cc63e9709caf1bb",
85
86
  "core/lib/argent-datadir.mjs": "7102aedf538c1e93",
86
87
  "core/lib/audit.mjs": "b57c233b1926e4ce",
@@ -112,7 +113,7 @@
112
113
  "core/lib/notify/webhook.mjs": "33708fec34641c8d",
113
114
  "core/lib/notify/feishu.mjs": "bdd494330f813546",
114
115
  "core/lib/notify/wecom.mjs": "789be0b3e28a151d",
115
- "VERSION": "9c788a838dc1f6bf",
116
+ "VERSION": "73aa4675dddd44bf",
116
117
  "scripts/flow_case.py": "03870f8f4f316130",
117
118
  "scripts/ml_schema_check.py": "4e7435d0d9a4d999",
118
119
  "scripts/telemetry.py": "c0362ae50638f63b",
@@ -127,11 +128,11 @@
127
128
  "scripts/argent-agents.mjs": "73f4a058df2cd6d6",
128
129
  "scripts/check-preset-landing.mjs": "975fcba51fe8e893",
129
130
  "scripts/daily-report-reconcile.mjs": "45645f0a1188f9ea",
130
- "scripts/daily-report.mjs": "c535928970ed7728",
131
+ "scripts/daily-report.mjs": "5a761a593f5db534",
131
132
  "scripts/daily-report.sh": "a449e34073c4f12e",
132
133
  "scripts/lib/daily-report-core.mjs": "1223b3bbdc2e9e99",
133
- "verticals/mercadolibre/prompts/daily-report.failure.md": "d0dfb27c4220c257",
134
- "verticals/mercadolibre/prompts/daily-report.md": "2c0ed65e1dfd6e64",
134
+ "verticals/mercadolibre/prompts/daily-report.failure.md": "528b322931ed4595",
135
+ "verticals/mercadolibre/prompts/daily-report.md": "3b5ebc7fdf081bde",
135
136
  "verticals/mercadolibre/prompts/daily-report.scheduled.md": "f35feafc34f8983c",
136
137
  "presets/argent-ml-daily/agent.cordis.yml": "32ccaa126bf9c7ee",
137
138
  "presets/argent-ml-daily/format-version.txt": "4355a46b19d348dc",
@@ -140,14 +141,14 @@
140
141
  "skills/ml-store-daily-report/scripts/README.md": "e1136fe6e2ca0bf2",
141
142
  "skills/ml-store-daily-report/scripts/extract.js": "2fb180395d11c3f3",
142
143
  "skills/ml-store-daily-report/scripts/generate.js": "68a6abcea8d1109c",
143
- "verticals/mercadolibre/manifest.json": "257dbaf94a037890",
144
- "verticals/mercadolibre/flows.json": "6bc3d7198eb23c7c",
144
+ "verticals/mercadolibre/manifest.json": "50908dce13f67aa0",
145
+ "verticals/mercadolibre/flows.json": "b944d846b37565e3",
145
146
  "verticals/mercadolibre/config.json": "85e592d700383b9b"
146
147
  },
147
- "digest": "6266dc2a8635fbae70d592c266b6ac95e8971243fa8beb7e23f12a415e3706c5"
148
+ "digest": "b778313ca772d6a9e5b78b6ec974c62ef1766bed9013bc83d8ceebcdb3ded76a"
148
149
  },
149
150
  "full": {
150
- "version": "1.3.181",
151
+ "version": "1.3.191",
151
152
  "flows": [
152
153
  "mercadolibre.full"
153
154
  ],
@@ -171,6 +172,7 @@
171
172
  "scripts/lib/preset-install.mjs": "cf939e22ae82be40",
172
173
  "scripts/lib/preset-mechanism.mjs": "b5ad412bacd8db85",
173
174
  "scripts/lib/preset-sync.mjs": "372af82d6d70ca4e",
175
+ "scripts/lib/ml-ads-core.mjs": "c4c07560dbca3d11",
174
176
  "scripts/lib/profile-retire.mjs": "9662656632cbe721",
175
177
  "scripts/lib/python-runtime.mjs": "aed362e42f0ed24c",
176
178
  "scripts/lib/registry.mjs": "c3290d2a3451d7c6",
@@ -188,23 +190,23 @@
188
190
  "scripts/feishu-card.mjs": "1041cc0d32ad49a5",
189
191
  "scripts/flow-timers.sh": "d8eed8c3391e67e2",
190
192
  "scripts/flow-timers-plist.sh": "a7b1007526fe2192",
191
- "scripts/flow-trigger-wake.mjs": "0bfd3204f62d7dd9",
192
- "scripts/flow-trigger.sh": "23d8a37e1577eb01",
193
- "scripts/flow-auto-retry.py": "bf4cc963c9f766bd",
193
+ "scripts/flow-trigger-wake.mjs": "2f04aa3406f5d421",
194
+ "scripts/flow-trigger.sh": "0568cbbbfc7b4c23",
195
+ "scripts/flow-auto-retry.py": "2474e649e2e7c280",
194
196
  "scripts/flow_billing.py": "70a1129ac75860a1",
195
197
  "scripts/flow_claim.py": "5ebe13d0d95f6f28",
196
- "scripts/flow_config.py": "ed3dd02a946086b4",
198
+ "scripts/flow_config.py": "52e07d48ef7d949d",
197
199
  "scripts/vertical-init.mjs": "b4f63d71152a84b0",
198
200
  "scripts/vertical-lint.mjs": "90d65215a2ac7940",
199
201
  "scripts/flow_registry.py": "53928b3fb7635156",
200
- "scripts/flow_failure.py": "220cc33c34edd8fd",
202
+ "scripts/flow_failure.py": "b92be1397a44ab0a",
201
203
  "scripts/flow_status_reconcile.py": "f17fea943deffb5c",
202
204
  "scripts/flow_write_verify.py": "a9123838b00cb60b",
203
205
  "scripts/flow_learn.py": "b2e3e99ee5d2e758",
204
206
  "scripts/flow_ledger.py": "c4e3012ad9e573aa",
205
207
  "scripts/flow_policy.py": "acfc348b29b1282b",
206
- "scripts/flow_preflight.py": "cf1cf8afbe3cdd63",
207
- "scripts/flow_retry.py": "e8d03a7e815e0cf8",
208
+ "scripts/flow_preflight.py": "4afc572456febcd7",
209
+ "scripts/flow_retry.py": "6516a65a04da7db3",
208
210
  "scripts/flow_return_to_ops.py": "1eb105447aee6206",
209
211
  "scripts/flow_sources/__init__.py": "854ec0ac85915ef7",
210
212
  "scripts/flow_sources/common.py": "0f1efb103e054220",
@@ -225,7 +227,7 @@
225
227
  "core/cli/argent.mjs": "9a8977324c238ca4",
226
228
  "core/mcp/server.mjs": "cb4d4a1150ee96cc",
227
229
  "core/mcp/http.mjs": "4388cdb18128844a",
228
- "core/contracts/argent.contracts.json": "ad0ebbcbfa06ab0d",
230
+ "core/contracts/argent.contracts.json": "afe6e5c3fbebfe69",
229
231
  "core/contracts/verbs.schema.json": "4cc63e9709caf1bb",
230
232
  "core/lib/argent-datadir.mjs": "7102aedf538c1e93",
231
233
  "core/lib/audit.mjs": "b57c233b1926e4ce",
@@ -257,7 +259,7 @@
257
259
  "core/lib/notify/webhook.mjs": "33708fec34641c8d",
258
260
  "core/lib/notify/feishu.mjs": "bdd494330f813546",
259
261
  "core/lib/notify/wecom.mjs": "789be0b3e28a151d",
260
- "VERSION": "9c788a838dc1f6bf",
262
+ "VERSION": "73aa4675dddd44bf",
261
263
  "scripts/flow_case.py": "03870f8f4f316130",
262
264
  "scripts/ml_schema_check.py": "4e7435d0d9a4d999",
263
265
  "scripts/telemetry.py": "c0362ae50638f63b",
@@ -276,7 +278,7 @@
276
278
  "scripts/fulfillment.js": "8de1ea386ebfe628",
277
279
  "scripts/ml_capacity_probe.py": "1000b23070ede4a2",
278
280
  "scripts/ml_hub_status.py": "4949e6fbec5bbf1b",
279
- "scripts/orchestrator.py": "3faf007308d1a52f",
281
+ "scripts/orchestrator.py": "43a27ad6bc8482ce",
280
282
  "scripts/poll-fulfillment.sh": "3e9fabd1818e0dc6",
281
283
  "verticals/mercadolibre/prompts/full.failure.md": "92059ed67f6ffd09",
282
284
  "verticals/mercadolibre/prompts/full.md": "b7c5e96f7fe2c3be",
@@ -294,14 +296,14 @@
294
296
  "skills/ml-fulfillment-sop/scripts/fulfillment.js": "8de1ea386ebfe628",
295
297
  "skills/ml-fulfillment-sop/scripts/poll-and-execute.sh": "ab52c3e643dc434e",
296
298
  "skills/ml-fulfillment-sop/templates/report.md": "928298680c933665",
297
- "verticals/mercadolibre/manifest.json": "257dbaf94a037890",
298
- "verticals/mercadolibre/flows.json": "6bc3d7198eb23c7c",
299
+ "verticals/mercadolibre/manifest.json": "50908dce13f67aa0",
300
+ "verticals/mercadolibre/flows.json": "b944d846b37565e3",
299
301
  "verticals/mercadolibre/config.json": "85e592d700383b9b"
300
302
  },
301
- "digest": "5f9bffdf55d26a85e7c89524954f31224f5caca9b69a46bb19bb22e5a167c8f9"
303
+ "digest": "e4fa17660a4f45d088707844e6bc2cd46664e0de4ca2806d1bce79f8b83fa210"
302
304
  },
303
305
  "hr": {
304
- "version": "0.1.82",
306
+ "version": "0.1.86",
305
307
  "flows": [],
306
308
  "files": {
307
309
  "presets/argent-hr/agent.cordis.yml": "45917decf6f39f70",
@@ -311,10 +313,10 @@
311
313
  "presets/argent-hr-office/format-version.txt": "6b86b273ff34fce1",
312
314
  "presets/argent-hr-office/preset.yml": "0b4d7304a412722a"
313
315
  },
314
- "digest": "13ae25056ad31f189c8b64932a29dc01ce66a38b94ab842bfc23047ec1f0c795"
316
+ "digest": "179527a2905f358cdff15f9a8c0f9945f23770e4c504f58a27843c7bf365e76a"
315
317
  },
316
318
  "invoice": {
317
- "version": "1.2.176",
319
+ "version": "1.2.185",
318
320
  "flows": [
319
321
  "mercadolibre.wenyao-invoice",
320
322
  "mercadolibre.xzh-invoice"
@@ -339,6 +341,7 @@
339
341
  "scripts/lib/preset-install.mjs": "cf939e22ae82be40",
340
342
  "scripts/lib/preset-mechanism.mjs": "b5ad412bacd8db85",
341
343
  "scripts/lib/preset-sync.mjs": "372af82d6d70ca4e",
344
+ "scripts/lib/ml-ads-core.mjs": "c4c07560dbca3d11",
342
345
  "scripts/lib/profile-retire.mjs": "9662656632cbe721",
343
346
  "scripts/lib/python-runtime.mjs": "aed362e42f0ed24c",
344
347
  "scripts/lib/registry.mjs": "c3290d2a3451d7c6",
@@ -356,23 +359,23 @@
356
359
  "scripts/feishu-card.mjs": "1041cc0d32ad49a5",
357
360
  "scripts/flow-timers.sh": "d8eed8c3391e67e2",
358
361
  "scripts/flow-timers-plist.sh": "a7b1007526fe2192",
359
- "scripts/flow-trigger-wake.mjs": "0bfd3204f62d7dd9",
360
- "scripts/flow-trigger.sh": "23d8a37e1577eb01",
361
- "scripts/flow-auto-retry.py": "bf4cc963c9f766bd",
362
+ "scripts/flow-trigger-wake.mjs": "2f04aa3406f5d421",
363
+ "scripts/flow-trigger.sh": "0568cbbbfc7b4c23",
364
+ "scripts/flow-auto-retry.py": "2474e649e2e7c280",
362
365
  "scripts/flow_billing.py": "70a1129ac75860a1",
363
366
  "scripts/flow_claim.py": "5ebe13d0d95f6f28",
364
- "scripts/flow_config.py": "ed3dd02a946086b4",
367
+ "scripts/flow_config.py": "52e07d48ef7d949d",
365
368
  "scripts/vertical-init.mjs": "b4f63d71152a84b0",
366
369
  "scripts/vertical-lint.mjs": "90d65215a2ac7940",
367
370
  "scripts/flow_registry.py": "53928b3fb7635156",
368
- "scripts/flow_failure.py": "220cc33c34edd8fd",
371
+ "scripts/flow_failure.py": "b92be1397a44ab0a",
369
372
  "scripts/flow_status_reconcile.py": "f17fea943deffb5c",
370
373
  "scripts/flow_write_verify.py": "a9123838b00cb60b",
371
374
  "scripts/flow_learn.py": "b2e3e99ee5d2e758",
372
375
  "scripts/flow_ledger.py": "c4e3012ad9e573aa",
373
376
  "scripts/flow_policy.py": "acfc348b29b1282b",
374
- "scripts/flow_preflight.py": "cf1cf8afbe3cdd63",
375
- "scripts/flow_retry.py": "e8d03a7e815e0cf8",
377
+ "scripts/flow_preflight.py": "4afc572456febcd7",
378
+ "scripts/flow_retry.py": "6516a65a04da7db3",
376
379
  "scripts/flow_return_to_ops.py": "1eb105447aee6206",
377
380
  "scripts/flow_sources/__init__.py": "854ec0ac85915ef7",
378
381
  "scripts/flow_sources/common.py": "0f1efb103e054220",
@@ -393,7 +396,7 @@
393
396
  "core/cli/argent.mjs": "9a8977324c238ca4",
394
397
  "core/mcp/server.mjs": "cb4d4a1150ee96cc",
395
398
  "core/mcp/http.mjs": "4388cdb18128844a",
396
- "core/contracts/argent.contracts.json": "ad0ebbcbfa06ab0d",
399
+ "core/contracts/argent.contracts.json": "afe6e5c3fbebfe69",
397
400
  "core/contracts/verbs.schema.json": "4cc63e9709caf1bb",
398
401
  "core/lib/argent-datadir.mjs": "7102aedf538c1e93",
399
402
  "core/lib/audit.mjs": "b57c233b1926e4ce",
@@ -425,7 +428,7 @@
425
428
  "core/lib/notify/webhook.mjs": "33708fec34641c8d",
426
429
  "core/lib/notify/feishu.mjs": "bdd494330f813546",
427
430
  "core/lib/notify/wecom.mjs": "789be0b3e28a151d",
428
- "VERSION": "9c788a838dc1f6bf",
431
+ "VERSION": "73aa4675dddd44bf",
429
432
  "scripts/flow_case.py": "03870f8f4f316130",
430
433
  "scripts/ml_schema_check.py": "4e7435d0d9a4d999",
431
434
  "scripts/telemetry.py": "c0362ae50638f63b",
@@ -440,8 +443,8 @@
440
443
  "scripts/argent-agents.mjs": "73f4a058df2cd6d6",
441
444
  "scripts/check-preset-landing.mjs": "975fcba51fe8e893",
442
445
  "scripts/invoice_fail_closeout.py": "6dbed32a633b9e3e",
443
- "scripts/invoice_lip_runner.py": "885d3bf0b4a26811",
444
- "scripts/invoice_stageb.py": "316575ca51855f7e",
446
+ "scripts/invoice_lip_runner.py": "99cb80e61e0ffa1f",
447
+ "scripts/invoice_stageb.py": "c4192160d3e1fa63",
445
448
  "scripts/wenyao-invoice-writeback.mjs": "5fd8295ef47480a1",
446
449
  "scripts/wenyao-template-map.json": "8ea6a7bcedda50cc",
447
450
  "scripts/wenyao_fill_template.py": "05cff1f1f3360dfc",
@@ -456,23 +459,23 @@
456
459
  "presets/argent-ml-invoice-wy/agent.cordis.yml": "4d02c4663cf845bc",
457
460
  "presets/argent-ml-invoice-wy/format-version.txt": "4355a46b19d348dc",
458
461
  "presets/argent-ml-invoice-wy/preset.yml": "acf96c207b9b3e72",
459
- "presets/argent-ml-invoice-xzh/agent.cordis.yml": "80b5f59769ce5d06",
462
+ "presets/argent-ml-invoice-xzh/agent.cordis.yml": "92ac24b16cee1016",
460
463
  "presets/argent-ml-invoice-xzh/format-version.txt": "4355a46b19d348dc",
461
- "presets/argent-ml-invoice-xzh/preset.yml": "0cebebac0b5166ee",
464
+ "presets/argent-ml-invoice-xzh/preset.yml": "953b1f99f2406b9a",
462
465
  "skills/ml-config-guide/SKILL.md": "25fe4acf8fe0b54e",
463
- "skills/ml-invoice/SKILL.md": "bbc41260a0d0eeed",
466
+ "skills/ml-invoice/SKILL.md": "1c58a499da5b06b6",
464
467
  "skills/ml-invoice/references/pitfalls.md": "b1f64593ee3bb2ad",
465
468
  "skills/ml-invoice/references/portal-flow.md": "f2e12383f813acba",
466
469
  "skills/ml-invoice/references/template-fill-contract.md": "aad3633c9035fe89",
467
- "skills/ml-invoice-xzh/SKILL.md": "8d4002e56f931350",
470
+ "skills/ml-invoice-xzh/SKILL.md": "0978f3b29bf14e8c",
468
471
  "skills/ml-invoice-xzh/references/pitfalls.md": "e77e5ac70ddc018a",
469
472
  "scripts/integrations/wenyao/adapter.py": "e00ba58470075c97",
470
473
  "scripts/integrations/xzh/adapter.py": "e6cf54d2f842a0b2",
471
- "verticals/mercadolibre/manifest.json": "257dbaf94a037890",
472
- "verticals/mercadolibre/flows.json": "6bc3d7198eb23c7c",
474
+ "verticals/mercadolibre/manifest.json": "50908dce13f67aa0",
475
+ "verticals/mercadolibre/flows.json": "b944d846b37565e3",
473
476
  "verticals/mercadolibre/config.json": "85e592d700383b9b"
474
477
  },
475
- "digest": "f4bc8caad1fb0dbf8fef0c6af920a3644da22d76ba85f99b57e63e22464e1278"
478
+ "digest": "a065af8b684edac77e81182b6ff5f2a498a0ff518390cc57626c2cf44e34a8c3"
476
479
  }
477
480
  }
478
481
  }
@@ -119,7 +119,7 @@ kill_tree() {
119
119
  # ── 判据集合(**唯一的清单**;顺序 = 执行顺序 = 由快到慢)─────────────────────────
120
120
  # 设计口径:① 几秒的判据先跑(红了立刻看得见)② 全量套件倒数第二(最慢)
121
121
  # ③ `test-env-safety` **最后**跑 —— 它比对的是本次 CI 开始时拍的快照 ⇒ 覆盖整个窗口。
122
- CRITERIA="kernel-purity vertical-lint docs-drift host-matrix sample-redaction 1.0-criteria judgment-drift capability-pack pack-closure config-catalog role-mapping skill-classification production-home plugin-bootcheck sync-scripts suite test-env-safety"
122
+ CRITERIA="kernel-purity vertical-lint docs-drift host-matrix sample-redaction 1.0-criteria judgment-drift version-consistency contracts capability-pack pack-closure config-catalog role-mapping skill-classification production-home plugin-bootcheck sync-scripts suite test-env-safety"
123
123
 
124
124
  criterion_title() {
125
125
  case "$1" in
@@ -131,6 +131,9 @@ criterion_title() {
131
131
  # 1.0 判据表:§2.0(八面总览)与 §2.1–§2.8(判据行)的**计数自洽**(唯一真源 = 判据行)
132
132
  1.0-criteria) printf '%s' '1.0 判据计数自洽(§2.0 复算:40 条 + 逐面计数 + 卡点非空)' ;;
133
133
  judgment-drift) printf '%s' '判断漂移(要求 R1=0:契约漂移 0 条)' ;;
134
+ # 2026-10-21:契约面(版本/活引用一致)与 CLI↔MCP 契约回归(此前只在文档里写着"已固化",未进 CI)
135
+ version-consistency) printf '%s' '版本一致性(活引用 == VERSION;历史记录豁免)' ;;
136
+ contracts) printf '%s' '契约一致性(契约版本/CLI verb/MCP tools/判断面)' ;;
134
137
  capability-pack) printf '%s' '能力包自洽(--validate:版本/文件/流程/preset/提示词)' ;;
135
138
  pack-closure) printf '%s' '能力包闭包(--strict:缺件 0 个)' ;;
136
139
  # 2026-10-09:配置地基的四道门禁(双向对账 / 敏感不出门 / 必须项可解析 / 新增即生效)
@@ -155,6 +158,8 @@ criterion_cmd() {
155
158
  sample-redaction) printf '%s' 'node scripts/check-sample-redaction.mjs --strict' ;;
156
159
  1.0-criteria) printf '%s' 'node scripts/check-1.0-criteria.mjs --strict' ;;
157
160
  judgment-drift) printf '%s' 'node scripts/check-judgment-drift.mjs' ;;
161
+ version-consistency) printf '%s' 'node scripts/check-version-consistency.mjs --strict' ;;
162
+ contracts) printf '%s' 'node scripts/tests/argent-contracts.test.mjs' ;;
158
163
  capability-pack) printf '%s' "${PY} scripts/capability_pack.py --validate" ;;
159
164
  pack-closure) printf '%s' 'node scripts/check-pack-closure.mjs --strict' ;;
160
165
  config-catalog) printf '%s' 'node scripts/check-config-catalog.mjs --strict' ;;
@@ -181,6 +186,8 @@ criterion_expect() {
181
186
  sample-redaction) printf '%s\n' '禁用串命中 0 处' '结构与键名一致' ;;
182
187
  1.0-criteria) printf '%s\n' '判据条数:40 条' '结论:✅ 一致' ;;
183
188
  judgment-drift) printf '%s\n' '契约漂移 0 条' ;;
189
+ version-consistency) printf '%s\n' 'version-consistency: 0 个 error' ;;
190
+ contracts) printf '%s\n' 'argent-contracts: [1-9][0-9]* 通过 / 0 失败' ;;
184
191
  capability-pack) printf '%s\n' '每个能力包都自洽' ;;
185
192
  pack-closure) printf '%s\n' '缺件 0 个' ;;
186
193
  config-catalog) printf '%s\n' '四道门禁全绿' ;;
@@ -205,6 +212,8 @@ criterion_summary_re() {
205
212
  sample-redaction) printf '%s' '结论:' ;;
206
213
  1.0-criteria) printf '%s' '结论:' ;;
207
214
  judgment-drift) printf '%s' '结论:' ;;
215
+ version-consistency) printf '%s' 'version-consistency: ' ;;
216
+ contracts) printf '%s' 'argent-contracts: ' ;;
208
217
  capability-pack) printf '%s' '每个能力包都自洽' ;;
209
218
  pack-closure) printf '%s' '闭包体检:' ;;
210
219
  config-catalog) printf '%s' '结果:' ;;
@@ -322,7 +331,10 @@ cleanup() {
322
331
  }
323
332
  trap cleanup EXIT INT TERM
324
333
 
325
- TMP_CI="$(mktemp -d -t argent-ci)"
334
+ # 可移植 mktemp(2026-10-20):must end with ≥6 个 X,否则 GNU mktemp 直接报
335
+ # “too few X's” ⇒ TMP_CI 为空 ⇒ 中间产物会被写到根目录(CI 在 ubuntu hosted 首跑实测撞到)。
336
+ # BSD(macOS) 与 GNU(Linux) 都支持 “<dir>/<前缀>.XXXXXX” 形态。
337
+ TMP_CI="$(mktemp -d "${TMPDIR:-/tmp}/argent-ci.XXXXXX")" || { echo "✗ 建临时目录失败(mktemp)" >&2; exit 2; }
326
338
  TS="$(date -u +%Y%m%dT%H%M%SZ)"
327
339
  [ -e "${CI_HOME}/${TS}.json" ] && TS="${TS}-$$"
328
340
  LOG="${LOGS}/${TS}.log"
@@ -53,7 +53,7 @@ const auditRecent = (() => {
53
53
  })()
54
54
 
55
55
  const L = [
56
- '# Argent 0.7.0 交付证据(可复算)', '',
56
+ '# Argent 交付证据(可复算)', '',
57
57
  `生成时间:${new Date().toISOString()} 生成器:\`node scripts/collect-evidence.mjs\``, '',
58
58
  '> 本文件由脚本**重新生成**:每条结论都对应一条命令,随时可复算(⛔ 不是人工誊写)。', '',
59
59
  '## 1. 串行终检(唯一入口)', '', '复算:`node scripts/final-check.mjs`(`--list` 列项、`--json` 结构化)', '', '```', ...final.rows.map((r) => `${r.ok ? '✅' : '❌'} ${r.name.padEnd(22)} ${r.tail}`), '```', '',
@@ -542,6 +542,38 @@ def check_credentials(chk: Checks, repo: pathlib.Path, data_dir: pathlib.Path,
542
542
  "按 skills/lark-shared 安装并登录")
543
543
 
544
544
 
545
+ # ── 登录态(安装期前置;2026-10-21 用户口径)────────────────────────────────
546
+
547
+ def check_login(chk: "Checks", repo: pathlib.Path) -> None:
548
+ """登录态/长驻窗口检查:文鳐滑块窗口、鑫中航标签页、紫鸟店铺窗口。
549
+
550
+ 为什么进安装自检:登录态不是业务第一票才该发现的问题。FULL/文鳐/鑫中航都需要
551
+ 一个**已登录且保持打开的窗口/标签页**;缺了它,生产第一票才失败,损失一整轮。
552
+ 只读检查;修复动作(打开窗口、人工滑块)写进 fix/安装指南。
553
+ """
554
+ G = "登录态"
555
+ script = repo / "scripts" / "login-readiness.py"
556
+ if not script.exists():
557
+ chk.add("login.script", G, "warn", "缺 scripts/login-readiness.py(旧克隆)", "",
558
+ "git pull 后重跑;本检查是安装前置登录态节点")
559
+ return
560
+ if sys.platform != "darwin":
561
+ chk.add("login.platform", G, "info", "非 macOS,跳过桌面浏览器登录态检查", sys.platform)
562
+ return
563
+ code, out, err = run([sys.executable, str(script), "--json"], timeout=120)
564
+ try:
565
+ doc = json.loads(out)
566
+ except Exception: # noqa: BLE001
567
+ chk.add("login.script", G, "warn", "登录态检查未返回 JSON",
568
+ ((err or out).strip().splitlines()[-1:] or [""])[0][:200],
569
+ f"手动跑:python3 {script} --json")
570
+ return
571
+ for it in (doc.get("checks") or []):
572
+ chk.add(str(it.get("id") or "login"), G, str(it.get("level") or "warn"),
573
+ str(it.get("title") or ""), str(it.get("detail") or ""), str(it.get("fix") or ""),
574
+ "用户(桌面窗口/滑块)")
575
+
576
+
545
577
  # ── 模型凭证(装机红灯门禁的运行时复核;2026-09-29 日报事故固化)──────────────
546
578
 
547
579
  def check_model_auth(chk: Checks, repo: pathlib.Path, dsh_home: pathlib.Path, online: bool) -> None:
@@ -851,6 +883,7 @@ def main(argv=None) -> int:
851
883
  check_heavy(chk, repo)
852
884
  check_product_gates(chk, repo)
853
885
  check_credentials(chk, repo, data_dir, flows, cfg)
886
+ check_login(chk, repo)
854
887
  # 模型凭证:DSH_HOME 优先(多实例机器上 data_dir 可能在别处)
855
888
  dsh_home = pathlib.Path(os.path.expanduser(os.environ.get("DSH_HOME") or str(data_dir.parent)))
856
889
  check_model_auth(chk, repo, dsh_home, online=not a.offline)
@@ -245,8 +245,11 @@ def do_retry(flow_id: str, ctx: dict, cfg: dict) -> dict:
245
245
  n = int(ctx.get('retryCount') or 0)
246
246
  reason = (f"自动重试(by=flow-auto-retry)第 {n + 1}/{cfg['max']} 次:"
247
247
  f"{(ctx.get('kind') or {}).get('reason') or ''}")
248
+ resume = str((ctx.get('kind') or {}).get('group') or '') == 'appointmentPageNotReady'
248
249
  cmd = [sys.executable, str(HERE / 'flow_retry.py'), '--flow', flow_id, '--case', ctx['caseId'],
249
250
  '--yes', '--max', str(cfg['max']), '--reason', reason]
251
+ if resume:
252
+ cmd.append('--resume-existing')
250
253
  p = subprocess.run(cmd, capture_output=True, text=True)
251
254
  out = f"{p.stdout or ''}{p.stderr or ''}".strip()
252
255
  return {'exit': int(p.returncode), 'ok': int(p.returncode) == 0, 'cmd': cmd, 'out': out}