codebee 0.1.42 → 0.1.44
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/CHANGELOG.md +12 -0
- package/README.md +3 -0
- package/app/core/skills.py +22 -6
- package/app/ui/app.js +1 -0
- package/app/ui/i18n.js +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,18 @@ README 元数据带回,供老版本在「发现新版本」时展示新版更
|
|
|
6
6
|
|
|
7
7
|
## 未发布
|
|
8
8
|
|
|
9
|
+
## v0.1.44(2026-09-22)
|
|
10
|
+
|
|
11
|
+
### ✨ 新功能
|
|
12
|
+
|
|
13
|
+
- 经验库教训分型可视化:绿色「做法」徽章标记程序性记忆(从成功任务提炼的有效步骤),与普通「教训」一眼区分,悬停可见说明。
|
|
14
|
+
|
|
15
|
+
## v0.1.43(2026-09-22)
|
|
16
|
+
|
|
17
|
+
### ✨ 新功能
|
|
18
|
+
|
|
19
|
+
- 经验库新增「有效做法」类记忆:任务一次通过且评分高时,AI 会把「这次做对了什么」提炼成可复用步骤(如「做法:先列评分点再逐条应答」),下次同类任务自动注入照做——经验库从「只学教训」进化为教训+做法双类记忆。
|
|
20
|
+
|
|
9
21
|
## v0.1.42(2026-09-22)
|
|
10
22
|
|
|
11
23
|
### ✨ 新功能
|
package/README.md
CHANGED
|
@@ -23,6 +23,9 @@ Kimi Code、MiMo Code、Grok Build、Pi、DeepSeek Harness……),提供
|
|
|
23
23
|
<!-- relnotes:start -->
|
|
24
24
|
### ✨ 新功能 · New
|
|
25
25
|
|
|
26
|
+
- 经验库新增「有效做法」记忆:高分一次通过的任务会把「做对了什么」提炼成可复用步骤,下次同类任务自动注入照做;绿色「做法」徽章一眼区分。
|
|
27
|
+
- The lesson library now also captures "what worked": high-scoring first-pass runs distill reusable procedures, auto-injected into similar future tasks — marked with a green "Best practice" badge.
|
|
28
|
+
|
|
26
29
|
- 新任务类型「标书编制」:上传招标文件,AI 按评分标准逐条应答起草投标文件;资质不虚构(缺失标注待补)、应答先结论、全文自查废标风险项。
|
|
27
30
|
- New "Bid Document" task type: upload the tender file and the AI drafts point-by-point responses against scoring criteria — no fabricated credentials, conclusion-first answers, and a full disqualification-risk sweep.
|
|
28
31
|
|
package/app/core/skills.py
CHANGED
|
@@ -330,7 +330,10 @@ def upsert_lesson(scope, title, content, source="", category=None, dim=None):
|
|
|
330
330
|
it = {"id": lid, "scope": scope, "title": title, "content": content,
|
|
331
331
|
"source": source, "hits": 0, "seen": 1, "enabled": True,
|
|
332
332
|
"category": cat,
|
|
333
|
-
"created_at": _now(),
|
|
333
|
+
"created_at": _now(),
|
|
334
|
+
# 稳定 token(procedure=程序性做法 / lesson=规避性教训);
|
|
335
|
+
# 展示层 view() 翻译成「做法/教训」,持久层不用中文防改文案伤数据
|
|
336
|
+
"kind": ("procedure" if title.startswith("做法:") else "lesson")}
|
|
334
337
|
items.append(it)
|
|
335
338
|
_save(data)
|
|
336
339
|
return it
|
|
@@ -522,12 +525,15 @@ def bump_hits(ids):
|
|
|
522
525
|
# ---------------------------------------------------------------- 运行后自动总结(自学习闭环)
|
|
523
526
|
|
|
524
527
|
LEARN_PROMPT = """你是编排系统的复盘官。下面是刚结束的一次任务运行的评审结果与主要问题。
|
|
525
|
-
|
|
528
|
+
请把**可复用到下次同类任务**的经验提炼出来(不要复述本次剧情,不要写泛泛的套话)。
|
|
529
|
+
两类都要看:①需要规避的教训(来自问题);②**已验证有效的做法**(mengram 程序性
|
|
530
|
+
记忆借鉴:任务一次通过且分数高时,把「这次做对了什么」提炼成可复用步骤,title
|
|
531
|
+
以「做法:」开头,如「做法:先列评分点再逐条应答」)。
|
|
526
532
|
只输出一个 ```json 代码块,不要输出其他内容。JSON 结构:
|
|
527
|
-
{"lessons": [{"title": "≤14
|
|
533
|
+
{"lessons": [{"title": "≤14 字的归类(教训直接写;有效做法以「做法:」开头)", "category": "问题分类", "content": "下次必须怎么做/避免什么(≤120 字,具体可执行)"}]}
|
|
528
534
|
category 必须从以下固定枚举中选一个(贴合评审维度,不要自创类别):
|
|
529
535
|
__CATEGORIES__
|
|
530
|
-
最多 5
|
|
536
|
+
最多 5 条,只保留反复出现或影响过稿/验收的关键项;一次通过的高分运行优先提炼「做法」;没有值得沉淀的就返回空数组。
|
|
531
537
|
|
|
532
538
|
## 任务类型
|
|
533
539
|
__TYPE__
|
|
@@ -673,8 +679,18 @@ def learn_async(run_id):
|
|
|
673
679
|
|
|
674
680
|
def view():
|
|
675
681
|
"""经验库总览(给 UI/API)。categories:闭集枚举 + 实际出现过的分类,
|
|
676
|
-
counts 给每类条数,供 UI 下拉过滤与计数显示。
|
|
677
|
-
lessons
|
|
682
|
+
counts 给每类条数,供 UI 下拉过滤与计数显示。
|
|
683
|
+
lessons 每条带展示 kind:「做法」(程序性记忆)/「教训」(规避性)——
|
|
684
|
+
UI 用不同徽章区分(openhuman 记忆可视化借鉴)。持久层是稳定 token
|
|
685
|
+
(procedure/lesson,老数据可能缺失),此处统一翻译+派生兜底。"""
|
|
686
|
+
def _kind(x):
|
|
687
|
+
k = x.get("kind")
|
|
688
|
+
if k == "procedure":
|
|
689
|
+
return "做法"
|
|
690
|
+
if k == "lesson":
|
|
691
|
+
return "教训"
|
|
692
|
+
return "做法" if str(x.get("title") or "").startswith("做法:") else "教训"
|
|
693
|
+
lessons = [{**x, "kind": _kind(x)} for x in list_lessons()]
|
|
678
694
|
counts = {}
|
|
679
695
|
for x in lessons:
|
|
680
696
|
c = x.get("category") or LESSON_UNCATEGORIZED
|
package/app/ui/app.js
CHANGED
|
@@ -8431,6 +8431,7 @@ function renderSkills() {
|
|
|
8431
8431
|
$("skill-lessons").innerHTML = shown.map((x) =>
|
|
8432
8432
|
'<div class="card' + (x.enabled === false ? " off" : "") + '"><div class="head">' +
|
|
8433
8433
|
'<span class="name">' + esc(t(x.title)) + "</span>" +
|
|
8434
|
+
(x.kind === "做法" ? '<span class="tag ok" title="' + t("已验证有效的做法(程序性记忆)") + '">' + t("做法") + "</span>" : "") +
|
|
8434
8435
|
(x.category ? '<span class="tag cat" style="color:' + (CAT_COLOR[x.category] || "var(--muted)") + '" ' +
|
|
8435
8436
|
'onclick="skillCatFilter(\'' + esc(x.category) + '\')" title="' + t("只看该类") + '">' + esc(t(x.category)) + "</span>" : "") +
|
|
8436
8437
|
'<span class="tag">' + esc(x.scope === "*" ? t("通用") : x.scope) + "</span>" +
|
package/app/ui/i18n.js
CHANGED
|
@@ -1517,6 +1517,8 @@
|
|
|
1517
1517
|
"知道了": "Got it",
|
|
1518
1518
|
"新版本更新内容": "What's new in the new version",
|
|
1519
1519
|
"已注入 ": "injected ",
|
|
1520
|
+
"做法": "Best practice",
|
|
1521
|
+
"已验证有效的做法(程序性记忆)": "Verified working procedure (procedural memory)",
|
|
1520
1522
|
"已清除 ": "Cleared ",
|
|
1521
1523
|
"已禁用厂商 {0}:链降级自动跳过,绑定页可重新启用": "Provider {0} disabled: chain fallback skips it — re-enable on the Bindings page",
|
|
1522
1524
|
"已禁用模型 {0} · {1},链降级自动跳过;绑定页可重新启用": "Model {0} · {1} disabled: chain fallback skips it — re-enable on the Bindings page",
|
package/package.json
CHANGED