@hupan56/wlkj 3.3.6 → 3.3.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.
package/package.json
CHANGED
|
@@ -23,6 +23,29 @@ User input: $ARGUMENTS
|
|
|
23
23
|
| 生成 PRD 正文 | **Qoder AI** | 宿主 AI 比我们调 qwen-plus 更强 |
|
|
24
24
|
| 写文件 | **Qoder Write** | 原生文件操作 |
|
|
25
25
|
|
|
26
|
+
## 🚨 工具接口铁律(防思考链跑飞,先读)
|
|
27
|
+
|
|
28
|
+
**① 一个门面,名字随便叫都对。** 知识查询统一走 `wlkj.py` 或 `kg.py`,**三套名字已互通**(引擎层别名):
|
|
29
|
+
| 你想干 | wlkj.py | kg.py | MCP 工具名 |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| 搜代码 | `wlkj.py search <词>` | `kg.py search <词>` | search_code |
|
|
32
|
+
| 搜 API | `wlkj.py search <词>` | `kg.py api <词>` | search_api |
|
|
33
|
+
| 语义检索 | `wlkj.py semantic <词>` | `kg.py semantic <词>` | rag_search |
|
|
34
|
+
| 上下文打包 | `wlkj.py context <词>` | `kg.py context <词>` | context_pack |
|
|
35
|
+
> 用哪个名都行(`kg.py search_code` 也认)。**别再因"未知子命令"慌张**。
|
|
36
|
+
|
|
37
|
+
**② 中文歧义词先提炼再查**(否则 context "保险" 命中的是社保不是车险):
|
|
38
|
+
- 保险 → 车辆保险 / 商业险 / 交强险 / 保险异常
|
|
39
|
+
- 异常 → 告警 alarmType / 报错 / 校验失败
|
|
40
|
+
- 计划 → 作业计划 / 养护计划 / 计划任务
|
|
41
|
+
- 列表/记录 → 带具体业务对象(车辆保险记录、考勤记录)
|
|
42
|
+
> 拿不准时先 `kg.py search <具体词>` 看返回的控制器/实体名,再用全名 `kg.py context <全名>`。
|
|
43
|
+
|
|
44
|
+
**③ 禁止跌入手动 grep/find 读源码。** 知识层有就拿知识层;**只有**以下情况才用 Grep/Read 读源码:
|
|
45
|
+
- 知识层确实没建(search 返 0 条,且换词仍 0)
|
|
46
|
+
- 要看某个具体文件的实现细节(已定位到文件)
|
|
47
|
+
> ❌ 不要 `find data/code` / `grep -r` 找模块——那是知识层 search 的活,手动做=思考链跑飞。
|
|
48
|
+
|
|
26
49
|
## 🧠 Planning Agent(完整模式强制前置 · 非建议)
|
|
27
50
|
|
|
28
51
|
> ⚠️ **完整模式必须先 Planning 再生成**(不再是"建议")。
|
|
@@ -20,6 +20,25 @@ result = cap.mcp.call("rag_search", {"query": "车辆保养", "top_k": 8})
|
|
|
20
20
|
|
|
21
21
|
自动路由:有 MCP 走 MCP(直连平台知识层,快),无 MCP 走 wlkj.py(CLI 降级)。零宿主感知。
|
|
22
22
|
|
|
23
|
+
## 🚨 接口铁律(防混名/防歧义,先读)
|
|
24
|
+
|
|
25
|
+
**① 三套名字已互通**(引擎层别名,AI 猜哪个都对,别因"未知子命令"慌):
|
|
26
|
+
| 干啥 | wlkj.py / kg.py 子命令 | MCP 工具名 |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| 搜代码 | `search <词>` | search_code |
|
|
29
|
+
| 搜 API | `api <词>`(kg.py)/ `search <词>`(wlkj.py)| search_api |
|
|
30
|
+
| 语义检索 | `semantic <词>` | rag_search |
|
|
31
|
+
| 上下文 | `context <词>` | context_pack |
|
|
32
|
+
| 影响分析 | `impact <实体>` | get_impact |
|
|
33
|
+
> `kg.py search_code 保险` = `kg.py search 保险`,都认。
|
|
34
|
+
|
|
35
|
+
**② 中文歧义词先提炼**(否则"保险"命中社保不是车险):
|
|
36
|
+
保险→车辆保险/商业险/交强险 · 异常→告警alarmType/报错 · 计划→作业/养护计划 · 列表→带业务对象(车辆保险记录)。
|
|
37
|
+
拿不准先 `search <具体词>` 看返回的控制器名,再用全名 `context <全名>`。
|
|
38
|
+
|
|
39
|
+
**③ 禁止 find/grep 手动找模块**——那是 search 的活。只有 search 换词仍返 0 或要看具体文件实现时,才用 Grep/Read。
|
|
40
|
+
|
|
41
|
+
|
|
23
42
|
## ⚡ 第一步:先判断问题类型,选对检索通道(3 路检索)
|
|
24
43
|
|
|
25
44
|
**核心升级:本命令有 3 路检索,按问题类型选最合适的一路(不是无脑 search_code)。**
|
|
@@ -36,6 +36,23 @@ PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
|
36
36
|
禅道是**每人一个账号**(凭据在 `workspace/members/{我}/.private/secrets/zentao.env`,gitignore),归属靠 member.json 的 `zentao_account` 映射 + 工具默认行为兜底:
|
|
37
37
|
|
|
38
38
|
- **看任务**:`my_workbench` / `list_my_tasks` / `list_execution_tasks` **默认只返回指派给我的**(assignedTo=我),不会看到队友。要看全队排期才传 `all=true`。
|
|
39
|
+
- **★ 看我的活(任务+需求+Bug 三域聚合)优先走平台 panel**(凭据走平台 per-user 配置,不再依赖本地 zentao.env):
|
|
40
|
+
```python
|
|
41
|
+
# ① 优先:平台聚合(云平台用平台凭据调禅道,凭据不出平台)
|
|
42
|
+
r = cap.mcp.call("get_my_zentao_panel", {})
|
|
43
|
+
if r.get("ok"):
|
|
44
|
+
# r.tasks / r.bugs / r.stories = 指派给我的全量(跨所有执行/产品)
|
|
45
|
+
...
|
|
46
|
+
elif "未配置" in (r.get("error") or "") or "登录失败" in (r.get("error") or ""):
|
|
47
|
+
# ② 云到禅道被防火墙挡 → 取平台凭据 + 本机内网直连(demo 机器在内网可达)
|
|
48
|
+
c = cap.mcp.call("get_zentao_creds", {})
|
|
49
|
+
if c.get("ok"):
|
|
50
|
+
# 用 c.url/c.account/c.password 直连禅道拉我的活(脚本/qw_mcp_call)
|
|
51
|
+
...
|
|
52
|
+
# ③ 都不可得 → 降级 qw_mcp_call("my_workbench") → 本地 task.py
|
|
53
|
+
```
|
|
54
|
+
> 平台 panel 是新增的首选路径:凭据托管在平台(【平台设置→禅道】配一次,全机生效),不用每台机器配 `secrets/zentao.env`。云防火墙时 `get_zentao_creds` 取凭据本机直连。
|
|
55
|
+
- **Bug→需求反查**:`cap.mcp.call("bug_trace", {"bug_id": X})` 查"这个 Bug 是哪个需求引入的"(平台新增,替代手动翻禅道)。
|
|
39
56
|
- **空账号直接拒绝**:member.json 没配 `zentao_account` 时,"看我的"工具返回 `🚫 未识别禅道身份`(不再静默降级返回全队)。原样转述,引导 `/wl-init`。
|
|
40
57
|
- **改任务前必校验**:start/finish/assign/update 拿到 task_id 后,**先 `get_task(id)` 看 assignedTo**:
|
|
41
58
|
- `assignedTo == 我` → 正常执行;
|
|
@@ -872,6 +872,20 @@ def main(argv=None):
|
|
|
872
872
|
return 0
|
|
873
873
|
cmd = argv[0]
|
|
874
874
|
rest = argv[1:]
|
|
875
|
+
# ★ MCP 名兼容:AI 常把 MCP 工具名(search_code)当 kg.py 子命令调 → "未知子命令"。
|
|
876
|
+
# 在此统一归一化,AI 猜哪个名(kg.py 子命令 / MCP 工具名)都能命中(治工作流混名)。
|
|
877
|
+
_MCP_ALIASES = {
|
|
878
|
+
'search_code': 'search', 'search_api': 'api', 'search_prds': 'prd',
|
|
879
|
+
'search_field': 'search', 'search_style': 'search', 'search_wiki': 'wiki',
|
|
880
|
+
'rag_search': 'semantic', 'ask_corpus': 'semantic',
|
|
881
|
+
'context_pack': 'context', 'context_360': 'context360',
|
|
882
|
+
'get_impact': 'impact', 'multi_hop': 'hop',
|
|
883
|
+
'coverage_matrix': 'coverage', 'feature_overview': 'feature',
|
|
884
|
+
'get_workflow': 'workflow', 'get_design_system': 'design-system',
|
|
885
|
+
'fill_prototype': 'fill-prototype',
|
|
886
|
+
}
|
|
887
|
+
if cmd in _MCP_ALIASES:
|
|
888
|
+
cmd = _MCP_ALIASES[cmd]
|
|
875
889
|
# 查找子命令
|
|
876
890
|
handler = None
|
|
877
891
|
for name, fn, _ in COMMANDS:
|
|
@@ -47,6 +47,17 @@ DISPATCH = {
|
|
|
47
47
|
'kg-incremental': 'domain/kg/build/kg_incremental.py',
|
|
48
48
|
'kg-semantic': 'domain/kg/graph/kg_semantic.py',
|
|
49
49
|
'semantic': 'domain/kg/graph/kg_semantic.py',
|
|
50
|
+
# ★ MCP 名别名(AI 常把 MCP 工具名当 wlkj.py 命令调 → 未知命令。归一化后两边名都认)
|
|
51
|
+
'search_code': 'domain/kg/search/search_index.py',
|
|
52
|
+
'search_api': 'domain/kg/search/search_index.py',
|
|
53
|
+
'search_prds': 'domain/kg/search/search_index.py',
|
|
54
|
+
'search_field': 'domain/kg/search/search_index.py',
|
|
55
|
+
'search_style': 'domain/kg/search/search_index.py',
|
|
56
|
+
'rag_search': 'domain/kg/graph/kg_semantic.py',
|
|
57
|
+
'ask_corpus': 'domain/kg/graph/kg_semantic.py',
|
|
58
|
+
'context_pack': 'domain/kg/search/context_pack.py',
|
|
59
|
+
'context_360': 'domain/kg/search/context_pack.py',
|
|
60
|
+
'get_impact': 'domain/kg/search/search_index.py',
|
|
50
61
|
'style': 'domain/kg/build/build_style_index.py',
|
|
51
62
|
# ── 任务 / 同步 ──
|
|
52
63
|
'task': 'domain/task/task.py',
|