@hupan56/wlkj 3.3.17 → 3.3.19

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hupan56/wlkj",
3
- "version": "3.3.17",
3
+ "version": "3.3.19",
4
4
  "description": "AI Product R&D Workflow - PRD/Prototype/Search/Task/Report",
5
5
  "bin": {
6
6
  "wlkj": "bin/cli.js"
@@ -38,3 +38,11 @@ User input:
38
38
  ## 下一步
39
39
  - spec 已 confirmed → `/wl-code <REQ-ID>` 按 spec 严格实现(spec gate 放行)
40
40
  - 实现完 → `/wl-test` 验证 → `/wl-commit` 提交回流
41
+
42
+
43
+ ## 🚨 接地铁律(防幻觉/保真)
44
+
45
+ 1. **溯源**:引用代码符号/表名/接口用真实原名,非中文描述
46
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认"
47
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表
48
+ 4. **完整**:产物详尽展开,不一行带过
@@ -89,3 +89,11 @@ $PY "$R/.qoder/scripts/validation/metrics/usability_score.py" --html
89
89
  - **CLI/IDE**(NoOp 自动降级):落盘 `workspace/members/{dev}/journal/dashboard-{时间戳}.html`,输出路径供打开
90
90
 
91
91
  不用 cap.present 也能跑——上面的 Health Score 维度表本身是纯文本,富展示只是增强可视化(T244 cap.present 接入点)。
92
+
93
+
94
+ ## 🚨 接地铁律(防幻觉/保真)
95
+
96
+ 1. **溯源**:引用代码符号/表名/接口用真实原名,非中文描述
97
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认"
98
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表
99
+ 4. **完整**:产物详尽展开,不一行带过
@@ -41,3 +41,11 @@ Before committing, check:
41
41
  ## 下一步
42
42
  - 提交回流成功后,更新任务状态:`/wl-task finish <REQ-ID>`(标记开发完成,同步禅道)
43
43
  - 查看本次提交在需求链路的位置:平台资产中心 → 需求 → 变更史
44
+
45
+
46
+ ## 🚨 接地铁律(防幻觉/保真)
47
+
48
+ 1. **溯源**:引用代码符号/表名/接口用真实原名(如 `CostApplyController`、`base_asset`),非中文描述
49
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认",诚实优于编造
50
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表;未召回禁编 t_xxx 表名
51
+ 4. **完整**:产物详尽展开,不一行带过
@@ -213,3 +213,11 @@ $PY "$R/.qoder/scripts/orchestration/wlkj.py" kg grep-text 车辆不存在 --ext
213
213
  - `/wl-search t_quality_case 表结构` → 先 `list_envs()` 问环境 → `query_schema`
214
214
  - `/wl-search 资产管理功能画像` → `cap.mcp.call("feature_overview", {"feature": "资产管理"})`
215
215
  - `/wl-search 车辆不存在报错从哪来` → `wlkj.py kg grep-text 车辆不存在 --ext java`
216
+
217
+
218
+ ## 🚨 接地铁律(防幻觉/保真)
219
+
220
+ 1. **溯源**:引用代码符号/表名/接口用真实原名(如 `CostApplyController`、`base_asset`),非中文描述
221
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认",诚实优于编造
222
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表;未召回禁编 t_xxx 表名
223
+ 4. **完整**:产物详尽展开,不一行带过
@@ -617,3 +617,11 @@ prd ──create(带REQ-ID)──→ task ──start──→ code/test ──f
617
617
  ```
618
618
 
619
619
  > 完整执行规则见 `.qoder/skills/wl-task/SKILL.md`(Quest/QoderWork 自然语言入口)。
620
+
621
+
622
+ ## 🚨 接地铁律(防幻觉/保真)
623
+
624
+ 1. **溯源**:引用代码符号/表名/接口用真实原名(如 `CostApplyController`、`base_asset`),非中文描述
625
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认",诚实优于编造
626
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表;未召回禁编 t_xxx 表名
627
+ 4. **完整**:产物详尽展开,不一行带过
@@ -154,3 +154,11 @@ JUnit 测试(Mock + MockMvc,Given-When-Then)→ 输出 `tests/{package}/{C
154
154
  ## 报告
155
155
  - quick:用例表 + 执行结果(pass/fail),全过建议继续别的,失败列原因
156
156
  - browser:同上 + 建议修复重跑或 `/wl-commit`
157
+
158
+
159
+ ## 🚨 接地铁律(防幻觉/保真)
160
+
161
+ 1. **溯源**:引用代码符号/表名/接口用真实原名(如 `CostApplyController`、`base_asset`),非中文描述
162
+ 2. **禁编**:不编造未在召回里出现的类名/表名/字段;召回不足标"待确认",诚实优于编造
163
+ 3. **接地**:涉及数据表时先调 MCP `schema_link` 取真表;未召回禁编 t_xxx 表名
164
+ 4. **完整**:产物详尽展开,不一行带过
@@ -81,6 +81,21 @@ def say(tag, msg):
81
81
  print('{} {}'.format(tag, msg))
82
82
 
83
83
 
84
+ def _detect_cloud_kg():
85
+ """检测 kg MCP 是否走云平台 SSE url(共识:全走平台,不建本地 kg)。"""
86
+ try:
87
+ _mcp_f = os.path.join(os.path.expanduser('~'), '.qoderwork', 'mcp.json')
88
+ if os.path.isfile(_mcp_f):
89
+ import json as _j
90
+ _cfg = _j.loads(open(_mcp_f, encoding='utf-8').read())
91
+ _kg = (_cfg.get('mcpServers') or {}).get('qoder-knowledge-graph', {})
92
+ if _kg.get('url') or _kg.get('type') == 'sse':
93
+ return True
94
+ except Exception:
95
+ pass
96
+ return False
97
+
98
+
84
99
  def problem(msg, hint=None):
85
100
  issues.append(msg)
86
101
  say(BAD, msg)
@@ -483,6 +498,9 @@ def print_degraded_status():
483
498
 
484
499
  def check_index(fix):
485
500
  print('\n--- 5. 知识图谱 (data/index/) ---')
501
+ if _detect_cloud_kg():
502
+ say(OK, '知识层走云平台 SSE(不依赖本地 kg.duckdb,平台有81241实体+43工具)')
503
+ return
486
504
  age = index_age_days()
487
505
  if age is None:
488
506
  # 全迁 PG 后 kg.duckdb 废弃:环境配了 PG → 知识层在平台,不报缺失
@@ -553,8 +571,11 @@ def check_style(fix):
553
571
  else:
554
572
  problem(fname + ' 缺失', '该文件提交在 git 中, 先解决团队同步 (team_sync pull)')
555
573
 
556
- # kg.duckdb 知识图谱 (统一存储) — 全迁 PG 后知识层在平台,本地 duckdb 废弃
574
+ # kg.duckdb 知识图谱 — 全迁 PG 后知识层在平台,本地 duckdb 废弃
575
+ # ★ 共识:kg 走云 SSE 时也不检查本地
557
576
  _pg_mode = os.environ.get('KNOWLEDGE_BACKEND', '').lower() == 'pg' or 'postgresql' in os.environ.get('DATABASE_URL', '')
577
+ if _detect_cloud_kg():
578
+ _pg_mode = True
558
579
  kg_path = os.path.join(INDEX_DIR, 'kg.duckdb')
559
580
  role = ''
560
581
  try: