@whyshu/argent-engine 0.7.6 → 0.7.7
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 +39 -35
- package/engine/VERSION +1 -1
- package/engine/core/contracts/argent.contracts.json +12 -4
- package/engine/scripts/appointment-create.mjs +10 -2
- package/engine/scripts/appointment-worker.mjs +72 -15
- package/engine/scripts/appointment_grab.py +132 -21
- package/engine/scripts/argent-machine-setup.mjs +118 -0
- package/engine/scripts/argent-runner.mjs +63 -10
- package/engine/scripts/capability-packs.lock.json +54 -51
- package/engine/scripts/ci-run.sh +14 -2
- package/engine/scripts/collect-evidence.mjs +1 -1
- package/engine/scripts/customer-preflight.py +33 -0
- package/engine/scripts/flow-auto-retry.py +3 -0
- package/engine/scripts/flow-requirements.json +23 -13
- package/engine/scripts/flow-session-retention.mjs +88 -0
- package/engine/scripts/flow-trigger-wake.mjs +13 -1
- package/engine/scripts/flow-trigger.sh +2 -1
- package/engine/scripts/flow_config.py +4 -0
- package/engine/scripts/flow_failure.py +9 -4
- package/engine/scripts/flow_preflight.py +30 -0
- package/engine/scripts/flow_retry.py +22 -7
- package/engine/scripts/gen-agent-bundles.mjs +1 -1
- package/engine/scripts/gen-preset-rows.mjs +2 -2
- package/engine/scripts/invoice_lip_runner.py +30 -2
- package/engine/scripts/invoice_stageb.py +101 -0
- package/engine/scripts/login-readiness.py +220 -0
- package/engine/scripts/ml-oauth-setup.mjs +1 -1
- package/engine/scripts/orchestrator.py +416 -30
- package/engine/scripts/probe_ml_site.py +103 -0
- package/engine/scripts/release-argent.sh +15 -1
- package/engine/skills/argent-machine-onboarding/SKILL.md +143 -0
- package/engine/skills/internal.json +4 -0
- package/engine/skills/ml-full-appointment/SKILL.md +21 -13
- package/engine/skills/ml-invoice/SKILL.md +1 -1
- package/engine/skills/ml-invoice-xzh/SKILL.md +2 -2
- package/engine/version.mjs +1 -1
- package/engine/verticals/_engine-words.baseline.txt +42 -23
- package/engine/verticals/mercadolibre/flows.json +9 -5
- package/engine/verticals/mercadolibre/manifest.json +5 -4
- package/engine/verticals/mercadolibre/prompts/daily-report.failure.md +1 -1
- package/engine/verticals/mercadolibre/prompts/daily-report.md +7 -10
- package/package.json +1 -1
- package/engine/scripts/ml-ads.mjs +0 -181
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""只读探测某店铺站点(Phase 0)。
|
|
3
|
+
|
|
4
|
+
用法:
|
|
5
|
+
python3 scripts/probe_ml_site.py --store '巴西-1店' --out /tmp/brazil-probe.json
|
|
6
|
+
只做导航/读取 DOM/截图,不点击提交、不写任何业务数据。
|
|
7
|
+
"""
|
|
8
|
+
import argparse
|
|
9
|
+
import asyncio
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from types import SimpleNamespace
|
|
16
|
+
|
|
17
|
+
ROOT = Path(__file__).resolve().parent
|
|
18
|
+
sys.path.insert(0, str(ROOT))
|
|
19
|
+
import orchestrator as O # noqa: E402
|
|
20
|
+
|
|
21
|
+
CANDIDATES = [
|
|
22
|
+
"https://www.mercadolivre.com.br/",
|
|
23
|
+
"https://vendedores.mercadolivre.com.br/",
|
|
24
|
+
"https://myaccount.mercadolivre.com.br/",
|
|
25
|
+
"https://vendedores.mercadolivre.com.br/shipping/inbounds",
|
|
26
|
+
"https://myaccount.mercadolivre.com.br/shipping/inbounds",
|
|
27
|
+
]
|
|
28
|
+
PROBE_JS = r"""() => {
|
|
29
|
+
const txt = (document.body ? document.body.innerText : '').replace(/\s+/g, ' ').slice(0, 3000);
|
|
30
|
+
const links = [...document.querySelectorAll('a')].map(a => ({
|
|
31
|
+
text: (a.innerText || '').trim().slice(0, 120),
|
|
32
|
+
href: a.href || ''
|
|
33
|
+
})).filter(x => /shipping|inbound|appointment|envio|venda|reserva/i.test(x.href + ' ' + x.text)).slice(0, 40);
|
|
34
|
+
const buttons = [...document.querySelectorAll('button,[role=button]')].map(b => (b.innerText || '').trim()).filter(Boolean).slice(0, 30);
|
|
35
|
+
return {title: document.title, url: location.href, text: txt, links, buttons};
|
|
36
|
+
}"""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def main():
|
|
40
|
+
ap = argparse.ArgumentParser()
|
|
41
|
+
ap.add_argument('--store', required=True)
|
|
42
|
+
ap.add_argument('--out', default='')
|
|
43
|
+
ap.add_argument('--shipment', default='')
|
|
44
|
+
args = ap.parse_args()
|
|
45
|
+
out_path = Path(args.out or f"/tmp/ml-site-probe-{args.store}.json")
|
|
46
|
+
result = {'store': args.store, 'probedAt': datetime.now().isoformat(), 'pages': [], 'shots': []}
|
|
47
|
+
cfg = O.load_config(); cfg.store_name = args.store
|
|
48
|
+
sel = O.Selectors()
|
|
49
|
+
orch = O.Orchestrator(cfg, sel, SimpleNamespace(no_lock=True))
|
|
50
|
+
orch.state.store_name = args.store
|
|
51
|
+
try:
|
|
52
|
+
_dl, port = orch._open_store()
|
|
53
|
+
if not port:
|
|
54
|
+
result['error'] = 'CDP 端口未发现'
|
|
55
|
+
return
|
|
56
|
+
orch.browser.cdp_url = f'http://127.0.0.1:{port}'
|
|
57
|
+
await orch._connect_with_port_rediscovery()
|
|
58
|
+
await orch._preflight_store_window(phase='probe-ml-site')
|
|
59
|
+
page = orch.browser.page
|
|
60
|
+
urls = list(CANDIDATES)
|
|
61
|
+
if args.shipment:
|
|
62
|
+
urls = [
|
|
63
|
+
f"https://vendedores.mercadolivre.com.br/shipping/inbounds/{args.shipment}",
|
|
64
|
+
f"https://myaccount.mercadolivre.com.br/shipping/inbounds/{args.shipment}",
|
|
65
|
+
f"https://vendedores.mercadolivre.com.br/shipping/inbounds/{args.shipment}/appointment-v2",
|
|
66
|
+
f"https://myaccount.mercadolivre.com.br/shipping/inbounds/{args.shipment}/appointment-v2",
|
|
67
|
+
]
|
|
68
|
+
for i, url in enumerate(urls):
|
|
69
|
+
try:
|
|
70
|
+
resp = await page.goto(url, wait_until='domcontentloaded', timeout=45000)
|
|
71
|
+
await asyncio.sleep(3)
|
|
72
|
+
info = await page.evaluate(PROBE_JS)
|
|
73
|
+
info['requested'] = url
|
|
74
|
+
info['httpStatus'] = resp.status if resp else None
|
|
75
|
+
result['pages'].append(info)
|
|
76
|
+
shot = out_path.with_name(out_path.stem + f'-{i}.png')
|
|
77
|
+
try:
|
|
78
|
+
await page.screenshot(path=str(shot), full_page=False)
|
|
79
|
+
result['shots'].append(str(shot))
|
|
80
|
+
except Exception:
|
|
81
|
+
pass
|
|
82
|
+
print(json.dumps({'requested': url, 'final': info.get('url'), 'title': info.get('title')}, ensure_ascii=False), flush=True)
|
|
83
|
+
except Exception as exc:
|
|
84
|
+
result['pages'].append({'requested': url, 'error': f'{type(exc).__name__}: {exc}'})
|
|
85
|
+
print(f'ERR {url}: {type(exc).__name__}: {exc}', file=sys.stderr, flush=True)
|
|
86
|
+
except Exception as exc:
|
|
87
|
+
result['error'] = f'{type(exc).__name__}: {exc}'
|
|
88
|
+
finally:
|
|
89
|
+
try:
|
|
90
|
+
await orch.browser.close()
|
|
91
|
+
except Exception:
|
|
92
|
+
pass
|
|
93
|
+
try:
|
|
94
|
+
orch.release_store_executor_lock()
|
|
95
|
+
except Exception:
|
|
96
|
+
pass
|
|
97
|
+
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
98
|
+
out_path.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding='utf-8')
|
|
99
|
+
print(f'WROTE {out_path}', flush=True)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
if __name__ == '__main__':
|
|
103
|
+
asyncio.run(main())
|
|
@@ -60,7 +60,7 @@ DL_URL="https://whyshu.com/dl"
|
|
|
60
60
|
# whyshu-svr 在服务器上的**扁平**部署目录(pm2 cwd;能力包清单就部署在这里)
|
|
61
61
|
SRV_DEPLOY="${SRV_DEPLOY:-/home/whyshu/server}"
|
|
62
62
|
REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
63
|
-
# push 目标 remote:默认仓库第一个 remote
|
|
63
|
+
# push 目标 remote:默认仓库第一个 remote(2026-10-20 起 = origin,GitHub 主库);可用 ARGENT_RELEASE_REMOTE 覆盖
|
|
64
64
|
REMOTE="${ARGENT_RELEASE_REMOTE:-$(git -C "$REPO_DIR" remote | head -1)}"
|
|
65
65
|
|
|
66
66
|
# 核心分发文件(与服务器 dl/ 直接对应)
|
|
@@ -498,6 +498,20 @@ else
|
|
|
498
498
|
FAIL=1
|
|
499
499
|
fi
|
|
500
500
|
|
|
501
|
+
# 1a2. 契约 argentVersion 与 VERSION 同批(防契约版本停在旧值、发布后才发现漂移;CI 判据 contracts / version-consistency)
|
|
502
|
+
if [[ -f core/contracts/argent.contracts.json ]]; then
|
|
503
|
+
CAV="$(node -e "const fs=require('fs');try{process.stdout.write(String(JSON.parse(fs.readFileSync('core/contracts/argent.contracts.json','utf8')).argentVersion||''))}catch(e){process.stdout.write('(不可解析)')}" 2>/dev/null || true)"
|
|
504
|
+
if [[ "$CAV" != "$VERSION" ]]; then
|
|
505
|
+
echo "✗ 契约 argentVersion(${CAV})≠ VERSION(${VERSION})—— 先把 core/contracts/argent.contracts.json 的 argentVersion 改为 ${VERSION} 并提交(同批抬版纪律)"
|
|
506
|
+
FAIL=1
|
|
507
|
+
else
|
|
508
|
+
echo "✓ 契约 argentVersion = ${VERSION}(一致)"
|
|
509
|
+
fi
|
|
510
|
+
else
|
|
511
|
+
echo "✗ 仓库无 core/contracts/argent.contracts.json"
|
|
512
|
+
FAIL=1
|
|
513
|
+
fi
|
|
514
|
+
|
|
501
515
|
# 1b. git working tree clean
|
|
502
516
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
503
517
|
echo "✗ git working tree 有未提交改动:"
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: argent-machine-onboarding
|
|
3
|
+
description: 指导用户把本机接入 ERP 机器执行面:在 ERP「机器管理」登记机器并签发 machine token,用剪贴板安全交给本机脚本写入 agent-report.json,校验后由用户手动重启 dsh。用于用户说“接入这台机器 / 签发机器 token / 机器管理 / 配置 agent-report / 让本机领任务”等场景。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Argent 本机接入 ERP 执行面
|
|
7
|
+
|
|
8
|
+
本技能的目标:让用户**只做 ERP 页面上的点击**,token 不经过聊天、不进入命令行历史,由本机脚本完成校验和配置。
|
|
9
|
+
|
|
10
|
+
## 前置判断
|
|
11
|
+
|
|
12
|
+
1. 确认当前是本机 dsh 会话,且用户要接入的是**这台机器**。
|
|
13
|
+
2. 读配置(不要打印 token):
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
python3 - <<'PY'
|
|
17
|
+
import json, os
|
|
18
|
+
p = os.path.expanduser('~/.dsh/argent/agent-report.json')
|
|
19
|
+
d = json.load(open(p))
|
|
20
|
+
print({k: ('***' if k in ('machineToken','runnerToken') else v) for k, v in d.items()})
|
|
21
|
+
PY
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
记录 `machineId`、`tenantAppId`、`serverUrl`,后续不需要用户重复填。
|
|
25
|
+
|
|
26
|
+
3. 确认用户是租户管理员。签发 token 需要 `admin` 角色。
|
|
27
|
+
|
|
28
|
+
> **一台机器只绑定一个租户**:同一物理机不要在两个租户各登记一次;若确实需要给两家企业用,请使用两个不同的 machineId + 两套独立 Argent 配置/实例,绝不共用一个 machineId 或 token。
|
|
29
|
+
|
|
30
|
+
## 用户操作步骤(由 Agent 逐条引导)
|
|
31
|
+
|
|
32
|
+
告诉用户打开:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
https://whyshu.com/admin/argent/
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
然后:
|
|
39
|
+
|
|
40
|
+
1. 进入「办公室现场」;
|
|
41
|
+
2. 点击「机器管理」;
|
|
42
|
+
3. 确认当前机器已登记(未登记则先登记,machineId 用配置里的值);
|
|
43
|
+
4. 点击该机器的「签发 token」;
|
|
44
|
+
5. 确认轮换提示;
|
|
45
|
+
6. 点击「复制 token」;
|
|
46
|
+
7. 回到这里回复:**已复制**。
|
|
47
|
+
|
|
48
|
+
⚠️ 不要让用户把 token 粘贴到聊天里。
|
|
49
|
+
⚠️ 不要替用户登录 ERP、不要抓取浏览器 cookie 或 token。
|
|
50
|
+
|
|
51
|
+
## Agent 收到“已复制”后
|
|
52
|
+
|
|
53
|
+
运行(会从系统剪贴板读取,不打印 token):
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 已安装的 Argent runtime 自带此脚本;开发机仓库再兜底。
|
|
57
|
+
SETUP="$HOME/.argent-dsh/scripts/argent-machine-setup.mjs"
|
|
58
|
+
[ -f "$SETUP" ] || SETUP="/Users/chester/Code/argent-dsh/scripts/argent-machine-setup.mjs"
|
|
59
|
+
node "$SETUP" --from-clipboard
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
脚本会:
|
|
63
|
+
|
|
64
|
+
- 校验 JWT 的 `scope=machine`、`appId`、`machineId`、过期时间;
|
|
65
|
+
- 调 ERP `/machines/:machineId/commands` 实测 token;
|
|
66
|
+
- 备份旧配置;
|
|
67
|
+
- 写入 `~/.dsh/argent/agent-report.json`;
|
|
68
|
+
- 移除旧 `runnerToken`,写入 `machineToken`;
|
|
69
|
+
- 设置 `enabled=true`、`chatEnabled=true`、文件权限 600;
|
|
70
|
+
- 不输出 token。
|
|
71
|
+
|
|
72
|
+
如果校验失败:
|
|
73
|
+
|
|
74
|
+
- `token 已过期` → 回 ERP 重新签发;
|
|
75
|
+
- `machineId 不一致` → 确认配置里的 machineId 与 ERP 机器列表一致;
|
|
76
|
+
- `403` → 机器被吊销或 token 已轮换;
|
|
77
|
+
- 剪贴板为空 → 让用户重新点「复制 token」。
|
|
78
|
+
|
|
79
|
+
## 配置完成后
|
|
80
|
+
|
|
81
|
+
必须让用户**手动重启本机 dsh**:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# 已安装 runtime 自带重启脚本;开发机仓库再兜底。
|
|
85
|
+
RESTART="$HOME/.argent-dsh/scripts/dsh-restart.sh"
|
|
86
|
+
[ -f "$RESTART" ] || RESTART="/Users/chester/Code/argent-dsh/scripts/dsh-restart.sh"
|
|
87
|
+
bash "$RESTART"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
⛔ Agent 不执行重启命令;这会杀掉当前会话所在服务。
|
|
91
|
+
|
|
92
|
+
重启后验证:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
curl -s http://127.0.0.1:3080/api/argent-office/status | python3 -m json.tool
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
重点:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
enabled: true
|
|
102
|
+
machineId: <配置里的值>
|
|
103
|
+
lastOkAt: 有值
|
|
104
|
+
chat.enabled: true
|
|
105
|
+
chat.started: true
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
然后让用户在 ERP「机器管理」刷新,确认:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
在线
|
|
112
|
+
machine token
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 第一条任务建议
|
|
116
|
+
|
|
117
|
+
在 ERP 办公室现场 → 「+ 派发任务」:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
WorkItem ID:smoke-001
|
|
121
|
+
AgentNode ID:agent.local.smoke
|
|
122
|
+
Preset:argent-dev
|
|
123
|
+
标题:只读冒烟检查
|
|
124
|
+
仓库:argent-dsh
|
|
125
|
+
基准分支:main
|
|
126
|
+
验收:不修改文件;返回 git status 摘要
|
|
127
|
+
动作:repo.read
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
状态应为:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
queued → claimed → done
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## 安全红线
|
|
137
|
+
|
|
138
|
+
- token 只落 `~/.dsh/argent/agent-report.json`,权限 600;
|
|
139
|
+
- token 不写进仓库、日志、卡片、聊天;
|
|
140
|
+
- 如果用户已经粘贴 token 到聊天:不要复述,完成接入后建议重新签发一次 token;
|
|
141
|
+
- 不使用 `--token` 参数(会进入 shell 历史);
|
|
142
|
+
- 不让 Agent 自行重启 dsh;
|
|
143
|
+
- 不使用 SSH / EasyTier 操作客户机;本技能只适用于用户本机。
|
|
@@ -32,6 +32,10 @@
|
|
|
32
32
|
"lktopapp-dev": {
|
|
33
33
|
"reason": "LKTOP APP(uni-app / 微信小游戏)开发知识 —— 另一个客户线的内部角色流程",
|
|
34
34
|
"since": "2026-09-11"
|
|
35
|
+
},
|
|
36
|
+
"argent-machine-onboarding": {
|
|
37
|
+
"reason": "本机接入 ERP 执行面:用剪贴板把 machine token 写入本机配置并引导重启 dsh —— 我方运维/接入流程,不发给客户",
|
|
38
|
+
"since": "2026-10-23"
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
41
|
}
|
|
@@ -26,13 +26,17 @@ description: 美客多 FULL 抢预约对话与 ERP 任务创建(BOT/gateway
|
|
|
26
26
|
|
|
27
27
|
- **店铺**(必填;SKU 可能跨店)
|
|
28
28
|
- **SKU 或货件号**(二选一;货件号优先续传)
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
- **三个预约条件(必须逐项确认,缺一不可)**:
|
|
30
|
+
1. **日期范围**:用户本次给的绝对日期,例如 `2026-10-22 ~ 2026-10-24`;
|
|
31
|
+
或 `最近 N 个可选日` ⇒ `dateMode=available_days`, `availableDays=N`(跳过 disabled,取最近 N 个可选日);
|
|
32
|
+
2. **星期范围**:ISO 周几数组,`1=周一 … 7=周日`,例如周一到周六 = `[1,2,3,4,5,6]`;
|
|
33
|
+
3. **时间范围**:`HH:mm` 起止,例如 `07:00` ~ `21:00`;**只在这个时间范围内的时段可提交预约**。
|
|
34
|
+
- 用户只说了其中一项/两项时,必须追问缺失项,不得自行补默认值;三项都确认后才进入二次确认。
|
|
35
|
+
- `range` 模式同时保存 `dateFrom/dateTo`;`available_days` 模式保存 `availableDays`,但仍必须保存 `weekdays/timeFrom/timeTo`。
|
|
32
36
|
- 若只给 SKU:**不读取 lip 表**,必须通过对话补齐 FULL 建单所需字段:店铺、SKU、数量 `quantity`、箱数 `boxCount`(产品名可选);缺什么问什么;
|
|
33
37
|
- 若给货件号:校验该货件存在,店铺/记录一致,当前进度允许预约;
|
|
34
38
|
- 所有参数以任务形式传给 ERP,worker 只使用任务参数;
|
|
35
|
-
-
|
|
39
|
+
- **检测间隔默认 30 秒**;创建前必须问运营:“默认每 30 秒检测一次;是否改成 45 秒或其他(允许 30-600 秒)?”;运营确认后按确认值传 `--poll-interval`。未确认间隔不得创建任务。
|
|
36
40
|
|
|
37
41
|
不要把 7/14 天写成固定变量;**每个任务保存用户本次的 dateFrom/dateTo**。
|
|
38
42
|
|
|
@@ -40,7 +44,7 @@ description: 美客多 FULL 抢预约对话与 ERP 任务创建(BOT/gateway
|
|
|
40
44
|
|
|
41
45
|
创建任务前回显一段摘要,例如:
|
|
42
46
|
|
|
43
|
-
> 确认信息:店铺 墨西哥-1
|
|
47
|
+
> 确认信息:店铺 墨西哥-1店-子账号;货件 76623409;日期 2026-10-22 ~ 2026-10-24;星期 周一至周六;时间 07:00-21:00;检测间隔默认 30 秒(可改 45 秒);只抢预约,不继续箱唛/发票。回复「开始」才执行。
|
|
44
48
|
|
|
45
49
|
用户明确说「开始」/「确认」后才创建 ERP 任务;未确认不得创建。
|
|
46
50
|
|
|
@@ -49,12 +53,12 @@ description: 美客多 FULL 抢预约对话与 ERP 任务创建(BOT/gateway
|
|
|
49
53
|
BOT/gateway 通过确定性 CLI 创建任务(不在会话里轮询):
|
|
50
54
|
|
|
51
55
|
```bash
|
|
52
|
-
node ~/.argent-dsh/scripts/appointment-create.mjs --json '<任务 JSON>'
|
|
56
|
+
node ~/.argent-dsh/scripts/appointment-create.mjs --json '<任务 JSON>' --poll-interval <30|45|...>
|
|
53
57
|
|
|
54
58
|
脚本会自动读取本角色已确认的通知群(`gateway.json`);首次使用未配置群会返回 `missing_notify_group`。
|
|
55
59
|
```
|
|
56
60
|
|
|
57
|
-
返回 `{ ok, id, status }` 后,BOT 回复“已创建任务 #id
|
|
61
|
+
返回 `{ ok, id, status }` 后,BOT 回复“已创建任务 #id”;worker 会在飞书发一张「抢预约进行中」卡片,同一张卡片每轮更新当前轮次/日期状态,成功或停止时更新为最终结果。
|
|
58
62
|
|
|
59
63
|
尽量传 `--chat-id`/`--open-id`,worker 完成/停止时服务端会用 FULL BOT 通知发起人并附逐日结果。
|
|
60
64
|
|
|
@@ -69,17 +73,20 @@ POST /api/argent/v1/tenants/<tenantAppId>/appointments
|
|
|
69
73
|
"quantity": 100, // SKU-only 必填
|
|
70
74
|
"boxCount": 10, // SKU-only 必填
|
|
71
75
|
"productName": "", // 可选
|
|
72
|
-
"dateMode": "
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
"
|
|
76
|
+
"dateMode": "range",
|
|
77
|
+
"dateFrom": "2026-10-22",
|
|
78
|
+
"dateTo": "2026-10-24",
|
|
79
|
+
"weekdays": [1, 2, 3, 4, 5, 6],
|
|
80
|
+
"timeFrom": "07:00",
|
|
81
|
+
"timeTo": "21:00",
|
|
82
|
+
"windowText": "22-24号 周一至周六7:00-21:00",
|
|
83
|
+
"pollIntervalSec": 30
|
|
77
84
|
}
|
|
78
85
|
```
|
|
79
86
|
|
|
80
87
|
返回任务 `queued` 后,BOT 回复:
|
|
81
88
|
|
|
82
|
-
> 已创建抢预约任务 #<id>,worker 会按
|
|
89
|
+
> 已创建抢预约任务 #<id>,worker 会按 <确认的间隔> 秒一轮执行;回复「停止」可终止。
|
|
83
90
|
|
|
84
91
|
## 用户停止
|
|
85
92
|
|
|
@@ -96,6 +103,7 @@ node ~/.argent-dsh/scripts/appointment-stop.mjs <AppointmentTask id>
|
|
|
96
103
|
- ⛔ 不在 BOT/gateway 会话里执行浏览器操作或循环轮询;
|
|
97
104
|
- ⛔ 不跑 FULL 步骤 5–8(箱唛/标签/发票/完成态);
|
|
98
105
|
- ⛔ 不把 7/14 天硬编码;不替用户改日期范围;
|
|
106
|
+
- ⛔ 不从历史任务/上次任务继承星期或时间;每次必须重新确认三个条件;
|
|
99
107
|
- ⛔ 未二次确认不创建任务;
|
|
100
108
|
- ⛔ 同一店铺预约仍走 ERP/编排器的同店步骤4互斥锁,避免与 FULL 任务串预约。
|
|
101
109
|
|
|
@@ -176,7 +176,7 @@ python3 scripts/wenyao_run.py --shipment <货件号> --english-name "..." \
|
|
|
176
176
|
|
|
177
177
|
- **本机(chester Mac)= 开发/测试机**:`PAUSE_POLL` + `PAUSE_INVOICE` 已置位,**不抢生产行**。手工试跑要单独执行 runner。
|
|
178
178
|
- **生产 = Huangwei 客户机 Mac**:真实 FULL + 发票流程跑在那里。
|
|
179
|
-
- 本机对本仓库的改动要 **commit + `git push
|
|
179
|
+
- 本机对本仓库的改动要 **commit + `git push`**(`origin` = GitHub 主库;自建 git 是只读镜像,直推会被拒),再在安装克隆 `~/.argent-dsh` `git pull`(镜像只读路径仍可用),技能同步到 `~/.dsh/skills/`。
|
|
180
180
|
|
|
181
181
|
## 2. 数据在哪
|
|
182
182
|
|
|
@@ -111,7 +111,7 @@ description: "鑫中航货代发票流程技能(Argent on DSH)——与文
|
|
|
111
111
|
收口 —— 它把「结论 + 动作」**同一串**写进表「发票错误信息」与台账(⛔ 不许只写台账、
|
|
112
112
|
不许手写 `--error-message`);成功走完用 `--outcome success` 清空该列。详见 `ml-invoice` §6.2.1。
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
**执行口径(2026-10-22 用户确认)**:字段齐备后**默认真实执行**:生成 → 登录门户上传 → 下载大货标签 → 回写状态;门户访问为常设授权。只有登录失败/滑块/账号异常/缺字段等 needs_human 才停下交人。
|
|
115
115
|
|
|
116
116
|
## 7. 待客户机核对(真跑前必须落实,不猜)
|
|
117
117
|
|
|
@@ -129,5 +129,5 @@ description: "鑫中航货代发票流程技能(Argent on DSH)——与文
|
|
|
129
129
|
|
|
130
130
|
- [ ] `python3 ~/.argent-dsh/scripts/flow_config.py --list` 里 `xzh-invoice` 源解析成功(表 id 来自 invoice-mapping.json)
|
|
131
131
|
- [ ] `flow_triage.py --flow xzh-invoice` 能列出候选(或明确为空)
|
|
132
|
-
- [ ]
|
|
132
|
+
- [ ] 生成前核对字段;真实执行走完整链(生成 → 门户上传 → 标签 → 回写)
|
|
133
133
|
- [ ] 真写前:写前备份 + 写后读回 + 审计三件套就位(§7.2 落实后)
|
package/engine/version.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = "0.7.
|
|
1
|
+
export const VERSION = "0.7.7"
|
|
@@ -3,6 +3,9 @@ plugins/argent-core/src/index.js ziniao 28
|
|
|
3
3
|
plugins/argent-core/src/index.js 紫鸟 6
|
|
4
4
|
plugins/argent-core/src/index.js 美客多 1
|
|
5
5
|
plugins/argent-core/src/index.js 鑫中航 1
|
|
6
|
+
plugins/argent-dsh/dist/client.js ziniao 6
|
|
7
|
+
plugins/argent-dsh/dist/client.js 紫鸟 5
|
|
8
|
+
plugins/argent-dsh/dist/client.js 美客多 11
|
|
6
9
|
plugins/argent-flow/package.json 文鳐 1
|
|
7
10
|
plugins/argent-flow/src/index.js wenyao 2
|
|
8
11
|
plugins/argent-flow/src/index.js 文鳐 1
|
|
@@ -16,37 +19,38 @@ plugins/argent-ml/package.json 美客多 1
|
|
|
16
19
|
plugins/argent-ml/src/index.js 紫鸟 4
|
|
17
20
|
plugins/argent-ml/src/index.js 美客多 2
|
|
18
21
|
plugins/argent-presets/package.json lktop 2
|
|
22
|
+
plugins/argent-presets/presets.json lip_ 1
|
|
19
23
|
plugins/argent-presets/presets.json lktop 3
|
|
20
24
|
plugins/argent-presets/presets.json wenyao 1
|
|
21
25
|
plugins/argent-presets/presets.json xzh- 1
|
|
22
26
|
plugins/argent-presets/presets.json 云宠 3
|
|
23
27
|
plugins/argent-presets/presets.json 文鳐 2
|
|
24
|
-
plugins/argent-presets/presets.json 美客多
|
|
28
|
+
plugins/argent-presets/presets.json 美客多 6
|
|
25
29
|
plugins/argent-presets/presets.json 鑫中航 3
|
|
26
|
-
plugins/argent-presets/presets/argent-lktop-pm.patch.yml lktop
|
|
30
|
+
plugins/argent-presets/presets/argent-lktop-pm.patch.yml lktop 8
|
|
27
31
|
plugins/argent-presets/presets/argent-lktopapp-dev.patch.yml lktop 9
|
|
28
32
|
plugins/argent-presets/presets/argent-ml-daily.patch.yml 紫鸟 1
|
|
29
|
-
plugins/argent-presets/presets/argent-ml-daily.patch.yml 美客多
|
|
30
|
-
plugins/argent-presets/presets/argent-ml-dev.patch.yml
|
|
31
|
-
plugins/argent-presets/presets/argent-ml-dev.patch.yml 美客多 6
|
|
33
|
+
plugins/argent-presets/presets/argent-ml-daily.patch.yml 美客多 9
|
|
34
|
+
plugins/argent-presets/presets/argent-ml-dev.patch.yml 美客多 4
|
|
32
35
|
plugins/argent-presets/presets/argent-ml-fulfillment.patch.yml 紫鸟 1
|
|
33
36
|
plugins/argent-presets/presets/argent-ml-fulfillment.patch.yml 美客多 10
|
|
34
37
|
plugins/argent-presets/presets/argent-ml-invoice-wy.patch.yml wenyao 5
|
|
35
38
|
plugins/argent-presets/presets/argent-ml-invoice-wy.patch.yml 文鳐 5
|
|
36
39
|
plugins/argent-presets/presets/argent-ml-invoice-wy.patch.yml 美客多 1
|
|
37
40
|
plugins/argent-presets/presets/argent-ml-invoice-wy.patch.yml 鑫中航 1
|
|
41
|
+
plugins/argent-presets/presets/argent-ml-invoice-xzh.patch.yml lip_ 2
|
|
38
42
|
plugins/argent-presets/presets/argent-ml-invoice-xzh.patch.yml xzh- 3
|
|
39
43
|
plugins/argent-presets/presets/argent-ml-invoice-xzh.patch.yml 美客多 1
|
|
40
|
-
plugins/argent-presets/presets/argent-ml-invoice-xzh.patch.yml 鑫中航
|
|
44
|
+
plugins/argent-presets/presets/argent-ml-invoice-xzh.patch.yml 鑫中航 6
|
|
41
45
|
plugins/argent-presets/presets/argent-pet-dev.patch.yml 云宠 8
|
|
42
46
|
plugins/argent-presets/presets/argent-whyshu-pm.patch.yml 云宠 2
|
|
43
47
|
plugins/argent-presets/src/index.js lktop 2
|
|
44
|
-
plugins/argent-skin/dist/client.js lktop 9
|
|
45
48
|
plugins/argent-skin/dist/client.js ziniao 6
|
|
46
|
-
plugins/argent-skin/dist/client.js 云宠 1
|
|
47
|
-
plugins/argent-skin/dist/client.js 文鳐 1
|
|
48
49
|
plugins/argent-skin/dist/client.js 紫鸟 5
|
|
49
50
|
plugins/argent-skin/dist/client.js 美客多 11
|
|
51
|
+
scripts/appointment_grab.py lip_ 3
|
|
52
|
+
scripts/appointment_grab.py mercadolibre 2
|
|
53
|
+
scripts/appointment_grab.py 紫鸟 1
|
|
50
54
|
scripts/archive/feishu-bridge.js lktop 6
|
|
51
55
|
scripts/archive/feishu-bridge.js 云宠 2
|
|
52
56
|
scripts/archive/feishu-bridge.js 美客多 3
|
|
@@ -56,8 +60,9 @@ scripts/customer-config-migrate.mjs lip-customer 1
|
|
|
56
60
|
scripts/customer-config-migrate.mjs lktop 1
|
|
57
61
|
scripts/customer-preflight.py wenyao 1
|
|
58
62
|
scripts/customer-preflight.py xzh- 1
|
|
59
|
-
scripts/customer-preflight.py 文鳐
|
|
60
|
-
scripts/customer-preflight.py
|
|
63
|
+
scripts/customer-preflight.py 文鳐 3
|
|
64
|
+
scripts/customer-preflight.py 紫鸟 1
|
|
65
|
+
scripts/customer-preflight.py 鑫中航 4
|
|
61
66
|
scripts/daily-report-inbox.py 美客多 1
|
|
62
67
|
scripts/daily-report.mjs mercadolibre 1
|
|
63
68
|
scripts/daily-report.mjs 美客多 9
|
|
@@ -81,7 +86,7 @@ scripts/flow-requirements.json 鑫中航 2
|
|
|
81
86
|
scripts/flow-scaffold.py xzh- 1
|
|
82
87
|
scripts/flow-timers.sh wenyao 2
|
|
83
88
|
scripts/flow-timers.sh xzh- 1
|
|
84
|
-
scripts/flow-trigger-wake.mjs wenyao
|
|
89
|
+
scripts/flow-trigger-wake.mjs wenyao 1
|
|
85
90
|
scripts/flow-trigger-wake.mjs 美客多 1
|
|
86
91
|
scripts/flow-trigger.sh wenyao 4
|
|
87
92
|
scripts/flow-trigger.sh xzh- 2
|
|
@@ -103,7 +108,11 @@ scripts/flow_failure.py 美客多 1
|
|
|
103
108
|
scripts/flow_ledger.py wenyao 3
|
|
104
109
|
scripts/flow_ledger.py 文鳐 1
|
|
105
110
|
scripts/flow_ledger.py 鑫中航 1
|
|
106
|
-
scripts/flow_preflight.py wenyao
|
|
111
|
+
scripts/flow_preflight.py wenyao 2
|
|
112
|
+
scripts/flow_preflight.py xzh- 1
|
|
113
|
+
scripts/flow_preflight.py 文鳐 2
|
|
114
|
+
scripts/flow_preflight.py 紫鸟 2
|
|
115
|
+
scripts/flow_preflight.py 鑫中航 2
|
|
107
116
|
scripts/flow_retry.py wenyao 1
|
|
108
117
|
scripts/flow_retry.py 美客多 1
|
|
109
118
|
scripts/flow_return_to_ops.py wenyao 4
|
|
@@ -127,10 +136,9 @@ scripts/init-ml.sh mercadolibre 1
|
|
|
127
136
|
scripts/init-ml.sh ziniao 85
|
|
128
137
|
scripts/init-ml.sh 紫鸟 65
|
|
129
138
|
scripts/init-ml.sh 美客多 7
|
|
130
|
-
scripts/install-internal-role.sh 云宠 1
|
|
131
139
|
scripts/integration_contract.py wenyao 2
|
|
132
140
|
scripts/integration_contract.py 文鳐 1
|
|
133
|
-
scripts/integrations/wenyao/adapter.py wenyao
|
|
141
|
+
scripts/integrations/wenyao/adapter.py wenyao 11
|
|
134
142
|
scripts/integrations/wenyao/adapter.py 文鳐 4
|
|
135
143
|
scripts/integrations/xzh/adapter.py lip_ 4
|
|
136
144
|
scripts/integrations/xzh/adapter.py wenyao 1
|
|
@@ -144,7 +152,7 @@ scripts/invoice-table.sh 鑫中航 1
|
|
|
144
152
|
scripts/invoice_carrier_notice.py lip_ 4
|
|
145
153
|
scripts/invoice_carrier_notice.py 文鳐 1
|
|
146
154
|
scripts/invoice_carrier_notice.py 鑫中航 1
|
|
147
|
-
scripts/invoice_lip_runner.py lip_
|
|
155
|
+
scripts/invoice_lip_runner.py lip_ 43
|
|
148
156
|
scripts/invoice_lip_runner.py xzh- 3
|
|
149
157
|
scripts/invoice_lip_runner.py 紫鸟 5
|
|
150
158
|
scripts/invoice_lip_runner.py 鑫中航 19
|
|
@@ -154,7 +162,7 @@ scripts/invoice_ready_audit.py 鑫中航 1
|
|
|
154
162
|
scripts/invoice_runner.py xzh- 2
|
|
155
163
|
scripts/invoice_runner.py 文鳐 1
|
|
156
164
|
scripts/invoice_runner.py 鑫中航 17
|
|
157
|
-
scripts/invoice_stageb.py 鑫中航
|
|
165
|
+
scripts/invoice_stageb.py 鑫中航 7
|
|
158
166
|
scripts/lib/customer-env.mjs lip-customer 1
|
|
159
167
|
scripts/lib/preset-sync.mjs lktop 1
|
|
160
168
|
scripts/lip_backlog.py lip_ 2
|
|
@@ -163,6 +171,12 @@ scripts/lip_backlog.py xzh- 1
|
|
|
163
171
|
scripts/lip_table.py lip-customer 1
|
|
164
172
|
scripts/lip_table.py lip_ 6
|
|
165
173
|
scripts/lip_table.py wenyao 7
|
|
174
|
+
scripts/login-readiness.py wenyao 15
|
|
175
|
+
scripts/login-readiness.py xzh- 7
|
|
176
|
+
scripts/login-readiness.py ziniao 16
|
|
177
|
+
scripts/login-readiness.py 文鳐 12
|
|
178
|
+
scripts/login-readiness.py 紫鸟 8
|
|
179
|
+
scripts/login-readiness.py 鑫中航 9
|
|
166
180
|
scripts/migrate-skills.sh mercadolibre 2
|
|
167
181
|
scripts/migrate-skills.sh 美客多 1
|
|
168
182
|
scripts/ml-oauth-setup.mjs mercadolibre 13
|
|
@@ -177,11 +191,12 @@ scripts/ml_schema_check.py wenyao 2
|
|
|
177
191
|
scripts/ml_store_ids.py 紫鸟 2
|
|
178
192
|
scripts/ml_store_ids.py 美客多 1
|
|
179
193
|
scripts/ml_store_ids.py 鑫中航 1
|
|
180
|
-
scripts/orchestrator.py lip_
|
|
194
|
+
scripts/orchestrator.py lip_ 25
|
|
181
195
|
scripts/orchestrator.py mercadolibre 4
|
|
182
|
-
scripts/orchestrator.py ziniao
|
|
183
|
-
scripts/orchestrator.py 紫鸟
|
|
196
|
+
scripts/orchestrator.py ziniao 95
|
|
197
|
+
scripts/orchestrator.py 紫鸟 101
|
|
184
198
|
scripts/orchestrator.py 美客多 3
|
|
199
|
+
scripts/p2-report-run.mjs 美客多 1
|
|
185
200
|
scripts/poll-fulfillment.sh ziniao 7
|
|
186
201
|
scripts/poll-fulfillment.sh 紫鸟 5
|
|
187
202
|
scripts/poll-invoice.sh 鑫中航 2
|
|
@@ -213,7 +228,7 @@ scripts/wenyao_fill_template.py 紫鸟 1
|
|
|
213
228
|
scripts/wenyao_fill_template.py 鑫中航 1
|
|
214
229
|
scripts/wenyao_login.py wenyao 11
|
|
215
230
|
scripts/wenyao_login.py 文鳐 2
|
|
216
|
-
scripts/wenyao_portal.py wenyao
|
|
231
|
+
scripts/wenyao_portal.py wenyao 6
|
|
217
232
|
scripts/wenyao_portal.py 文鳐 1
|
|
218
233
|
scripts/wenyao_recon.py wenyao 6
|
|
219
234
|
scripts/wenyao_recon.py 文鳐 2
|
|
@@ -227,11 +242,15 @@ scripts/wenyao_skill_contract.py wenyao 7
|
|
|
227
242
|
scripts/wenyao_skill_contract.py 文鳐 1
|
|
228
243
|
scripts/wenyao_template_fetch.py wenyao 4
|
|
229
244
|
scripts/wenyao_template_fetch.py 文鳐 1
|
|
245
|
+
scripts/xzh-browser.sh xzh- 3
|
|
246
|
+
scripts/xzh-browser.sh 鑫中航 1
|
|
247
|
+
scripts/xzh_browser.py xzh- 1
|
|
248
|
+
scripts/xzh_browser.py 鑫中航 2
|
|
230
249
|
scripts/ziniao-auth-probe.sh ziniao 27
|
|
231
250
|
scripts/ziniao-auth-probe.sh 紫鸟 8
|
|
232
251
|
scripts/ziniao-keepalive.sh ziniao 30
|
|
233
252
|
scripts/ziniao-keepalive.sh 紫鸟 8
|
|
234
|
-
scripts/ziniao-post-upgrade-check.sh ziniao
|
|
253
|
+
scripts/ziniao-post-upgrade-check.sh ziniao 14
|
|
235
254
|
scripts/ziniao-post-upgrade-check.sh 紫鸟 3
|
|
236
|
-
scripts/ziniao-windows.sh ziniao
|
|
255
|
+
scripts/ziniao-windows.sh ziniao 5
|
|
237
256
|
scripts/ziniao-windows.sh 紫鸟 1
|
|
@@ -139,7 +139,8 @@
|
|
|
139
139
|
"pauseSwitchLegacy": "PAUSE_POLL",
|
|
140
140
|
"promptTemplate": "verticals/mercadolibre/prompts/full.md",
|
|
141
141
|
"dispatch": {
|
|
142
|
-
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-full.json"
|
|
142
|
+
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-full.json",
|
|
143
|
+
"freshSession": true
|
|
143
144
|
}
|
|
144
145
|
},
|
|
145
146
|
"concurrency": {
|
|
@@ -305,7 +306,8 @@
|
|
|
305
306
|
"dispatch": {
|
|
306
307
|
"preset": "argent-ml-invoice-wy",
|
|
307
308
|
"cwd": "~/Code",
|
|
308
|
-
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-wenyao-invoice.json"
|
|
309
|
+
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-wenyao-invoice.json",
|
|
310
|
+
"freshSession": true
|
|
309
311
|
},
|
|
310
312
|
"_note": "2026-09-18 用户口径:两个发票流程在旧脚本时期都已成功跑通 ⇒ 定时轮**真实执行**(原\"只跑影子、真跑须人工批准\"的红线撤销)。守卫不变:字段/记录白名单、写前备份、写后读回、审计、终态需 --force;HS 等报关敏感字段仍由运营人工维护。",
|
|
311
313
|
"_pauseSwitchNote": "历史兼容名(PAUSE_FLOW_TRIGGER):客户机/文档/运维手册都按此名操作,**不要改名**。新流程不写 pauseSwitch 时,`_derive` 会派生 `PAUSE_FLOW_<ID>`(大写、-→_)。",
|
|
@@ -554,7 +556,8 @@
|
|
|
554
556
|
"_pauseSwitchNote": "历史兼容名(PAUSE_INVOICE):客户机/文档/运维手册都按此名操作,**不要改名**。新流程不写 pauseSwitch 时,`_derive` 会派生 `PAUSE_FLOW_<ID>`(大写、-→_)。",
|
|
555
557
|
"pauseSwitchLegacy": "PAUSE_INVOICE",
|
|
556
558
|
"dispatch": {
|
|
557
|
-
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-xzh-invoice.json"
|
|
559
|
+
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-xzh-invoice.json",
|
|
560
|
+
"freshSession": true
|
|
558
561
|
}
|
|
559
562
|
},
|
|
560
563
|
"concurrency": {
|
|
@@ -673,7 +676,8 @@
|
|
|
673
676
|
"_note": "2026-09-18 用户口径:日报要**到点自动推送**(北京 14:05 = 站点本地 00:05)。intervalSec 300 保证在推送点后 ~5 分钟内触发;\"未到点不产出单元\"由 daily-report-inbox.py 的门控保证(未到点零唤醒、零模型成本)。",
|
|
674
677
|
"pauseSwitchLegacy": "PAUSE_DAILY_REPORT",
|
|
675
678
|
"dispatch": {
|
|
676
|
-
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-daily-report.json"
|
|
679
|
+
"sessionIdFile": "verticals/mercadolibre/flow-dispatch-daily-report.json",
|
|
680
|
+
"freshSession": true
|
|
677
681
|
},
|
|
678
682
|
"_scheduleNote": "P1-A(2026-10-12,**只对日报试点**):把触发从「每 5 分钟轮询 ≈288 次/天」改成「宿主原生 daily 排程(每天 1 次准点)」。**沿用 trigger 段**(⛔ 不另起顶层字段 ⇒ 不开第二份真源):`schedule` 只描述「排程器怎么叫醒」,周期与暂停开关仍只在 trigger 里。⛔ 本批**不切投递**:宿主排程的 prompt 创建时固定 ⇒ 语义退化为「到点叫醒 + 角色自己调 L1 认领」,而「只认领不唤醒」的 L1 入口(`flow-trigger.sh --no-wake`)**尚不存在**(实测只认 --flow/--max/--dry-run)⇒ 声明先落、防线先建,投递切换留 P1-B。⛔ `intervalSec` **保持 300 不动**:本批 launchd 那条路径照旧(先起后排,绝不双跑)。",
|
|
679
683
|
"schedule": {
|
|
@@ -735,4 +739,4 @@
|
|
|
735
739
|
"units": {}
|
|
736
740
|
},
|
|
737
741
|
"_aliasNote": "旧 id(full / wenyao-invoice / xzh-invoice / daily-report)→ 规范 id;迁移期兜底,P2b/P5 随调用点改完后删除。"
|
|
738
|
-
}
|
|
742
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "mercadolibre",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"title": "美客多(MercadoLibre)业务线",
|
|
5
5
|
"_note": "P2a 落位:flows/prompts/暂停开关/日志/会话文件已命名空间化;角色/preset/技能仍是旧名(legacyNaming,P2b/P5 在有重启窗口时改名);能力与计费单位仍在 base(随重装窗口改 SKU id);适配器仍在 scripts/integrations(P4 端口化时搬)。",
|
|
6
|
-
"_versionNote": "0.1.1(2026-10-06):`requires.argent` 由 `>=0.2 <0.3` 抬到 `>=0.3 <0.4`(平台现役 VERSION=0.3.0)—— 修前「Argent 能力 → 概览」把这唯一的业务线标成 `⚠️ 版本不满足`,而它实际能跑(口径与事实相反)。同批 `version` +1(P0-5,见 docs/Argent-工作台口径审计-2026-10-06.md)。|0.1.2(2026-10-09):**平台抬到 0.4.0** ⇒ `requires.argent` 同步抬到 `>=0.4 <0.5`(不改则会重演 P0-5:兼容区间把现役平台挡在门外)。判据已固化为门禁 `node scripts/check-version-consistency.mjs`(**平台版本必须落在每条业务线声明的兼容区间内**),不再靠人记得复核。⚠️ `verifiedOn.argent` **刻意维持 `0.3.0`**:该字段记的是\"**真装真跑过**\",本批只抬版本号、内核无行为改动,未在 0.4.0 上跑过生产 ⇒ 落地后补登,⛔
|
|
6
|
+
"_versionNote": "0.1.1(2026-10-06):`requires.argent` 由 `>=0.2 <0.3` 抬到 `>=0.3 <0.4`(平台现役 VERSION=0.3.0)—— 修前「Argent 能力 → 概览」把这唯一的业务线标成 `⚠️ 版本不满足`,而它实际能跑(口径与事实相反)。同批 `version` +1(P0-5,见 docs/Argent-工作台口径审计-2026-10-06.md)。|0.1.2(2026-10-09):**平台抬到 0.4.0** ⇒ `requires.argent` 同步抬到 `>=0.4 <0.5`(不改则会重演 P0-5:兼容区间把现役平台挡在门外)。判据已固化为门禁 `node scripts/check-version-consistency.mjs`(**平台版本必须落在每条业务线声明的兼容区间内**),不再靠人记得复核。⚠️ `verifiedOn.argent` **刻意维持 `0.3.0`**:该字段记的是\"**真装真跑过**\",本批只抬版本号、内核无行为改动,未在 0.4.0 上跑过生产 ⇒ 落地后补登,⛔ 不预填。|0.1.3(2026-10-21):平台版本线已到 0.7.6 ⇒ `requires.argent` 由 `>=0.4 <0.5` 抬到 `>=0.7 <0.8`(原区间把现役平台挡在门外;`check-version-consistency` R1-LOCKSTEP 实测报红)。",
|
|
7
7
|
"requires": {
|
|
8
|
-
"argent": ">=0.
|
|
8
|
+
"argent": ">=0.7 <0.8",
|
|
9
9
|
"dsh": ">=0.1.5 <0.2"
|
|
10
10
|
},
|
|
11
11
|
"verifiedOn": {
|
|
@@ -50,7 +50,8 @@
|
|
|
50
50
|
"ml-invoice",
|
|
51
51
|
"ml-invoice-xzh",
|
|
52
52
|
"ml-store-daily-report",
|
|
53
|
-
"ml-config-guide"
|
|
53
|
+
"ml-config-guide",
|
|
54
|
+
"ml-full-appointment"
|
|
54
55
|
],
|
|
55
56
|
"flows": [
|
|
56
57
|
"mercadolibre.full",
|